SheafSystem  0.0.0.0
fields::body_pusher Class Reference

The general push-forward operator for base space members; moves a base space member from one base space to another using the map implied by the global coordinate fields on each base space. More...

#include <body_pusher.h>

Inheritance diagram for fields::body_pusher:
sheaf::any

BODY_PUSHER FACET

typedef sec_ed::coord_type coord_type
 The type of local coordinate variables. More...
 
typedef sec_vd::dof_type dof_type
 The type for section degrees of freedom. More...
 
typedef sec_vd::value_type value_type
 The type for section values. More...
 
 body_pusher (const geometry::sec_ed_invertible &xdomain_coord, const sec_ed &xrange_coord, bool xauto_access)
 Creates the push-forward from the base space of xdomain_coord to the base space of xrange_coord induced by the composition xrange_coord with the inverse of xdomain_coord. More...
 
const base_space_posetdomain () const
 The domain of the push-forward map. More...
 
const geometry::sec_ed_invertibledomain_coord () const
 The coordinate field for the domain. More...
 
const base_space_posetrange () const
 The range of the push-forward map. More...
 
const sec_edrange_coord () const
 The coordinate field for the range. More...
 
base_space_memberpush (const base_space_member &xinput, bool xcompute_upper_bound, bool xauto_access)
 Pushes member xinput from domain() to base_space_poset range(), auto-allocated. More...
 
void push_pa (const base_space_member &xinput, base_space_member &result, bool xcompute_upper_bound, bool xauto_access)
 Pushes member xinput from base_space_poset domain() to base_space_poset range(), pre-allocated. More...
 
subposetpush (const subposet &xinput, bool xcompute_upper_bound, bool xauto_access)
 Pushes all members of xinput from domain() to base_space_poset range(), auto-allocated. More...
 
void push_pa (const subposet &xinput, subposet &result, bool xcompute_upper_bound, bool xauto_access)
 Pushes all members of xinput from base_space_poset domain() to base_space_poset range(), pre-allocated. More...
 
const bool & push_name () const
 True if destination body should be named from the source body. More...
 
std::string & name_prefix ()
 Prefix for destination name. More...
 
std::string & name_suffix ()
 Suffix for destination name. More...
 
bool same_fiber (const sec_ed &xcoord1, const sec_ed &xcoord2, bool xauto_access) const
 True if and only if xcoord1 and xcoord2 have the same fiber type and dimension. More...
 
 body_pusher ()
 Default constructor; protected to prevent default construction. More...
 

ANY FACET

 body_pusher (const body_pusher &xother)
 Copy constructor. More...
 
virtual ~body_pusher ()
 Destructor. More...
 
virtual bool invariant () const
 Class invariant. More...
 

Additional Inherited Members

- Public Member Functions inherited from sheaf::any
virtual bool is_ancestor_of (const any *other) const
 True if other conforms to this. More...
 
bool is_same_type (const any *other) const
 True if other is the same type as this. More...
 
virtual anyclone () const
 Virtual constructor, makes a new instance of the same type as this. More...
 
virtual ~any ()
 Destructor. More...
 
bool invariant_check () const
 True if invariant checking is enabled. More...
 
void enable_invariant_check () const
 Enable invariant checking. More...
 
void disable_invariant_check () const
 Disable invariant check. Intended for preventing recursive calls to invariant and for suppressing invariant checking during multi-phase initialization. More...
 
int disable_invariance_check_request_depth () const
 Number of times disable_invariant_check has been called without matching call to enable_invariant_check. More...
 
- Protected Member Functions inherited from sheaf::any
 any ()
 default constructor More...
 

Detailed Description

The general push-forward operator for base space members; moves a base space member from one base space to another using the map implied by the global coordinate fields on each base space.

Definition at line 73 of file body_pusher.h.

Member Typedef Documentation

◆ coord_type

typedef sec_ed::coord_type fields::body_pusher::coord_type

The type of local coordinate variables.

Definition at line 86 of file body_pusher.h.

◆ dof_type

The type for section degrees of freedom.

Definition at line 91 of file body_pusher.h.

◆ value_type

The type for section values.

Definition at line 96 of file body_pusher.h.

Constructor & Destructor Documentation

◆ body_pusher() [1/3]

fields::body_pusher::body_pusher ( const geometry::sec_ed_invertible xdomain_coord,
const sec_ed xrange_coord,
bool  xauto_access 
)

Creates the push-forward from the base space of xdomain_coord to the base space of xrange_coord induced by the composition xrange_coord with the inverse of xdomain_coord.

Precondition
  • xauto_access || xdomain_coord.state_is_read_accessible()
  • xauto_access || xrange_coord.state_is_read_accessible()
  • same_fiber(xdomain_coord, xrange_coord, xauto_access)
Hack:
iterator looks for evaluation subposet by name and we don't currently support multiple names for a subposet. So make sure name is "__vertices".
Todo:
we can remove this when subposets support multiple names.
Postcondition
  • domain().is_same_state(xdomain_coord.schema().base_space().host())
  • range().is_same_state(xrange_coord.schema().base_space().host())
  • range().access_request_depth() == old_range_access_request_depth
  • xdomain_coord.access_request_depth() == old_domain_coord_access_request_depth
  • xrange_coord.access_request_depth() == old_range_coord_access_request_depth

Definition at line 52 of file body_pusher.cc.

References sheaf::read_write_monitor_handle::access_request_depth(), sheaf::poset_state_handle::attach_to_state(), sheaf::abstract_poset_member::attach_to_state(), fiber_bundle::section_space_schema_poset::base_space(), fiber_bundle::section_space_schema_member::base_space(), geometry::sec_ed_invertible::clone(), sheaf::namespace_poset::contains_poset_member(), domain(), fiber_bundle::section_space_schema_poset::fiber_space(), fiber_bundle::section_space_schema_member::fiber_space(), sheaf::poset_component::get_read_access(), sheaf::poset_component::host(), fiber_bundle::section_space_schema_member::host(), sheaf::poset_component::index(), sheaf::poset_path::member_name(), sheaf::abstract_poset_member::name(), sheaf::poset_component::path(), sheaf::poset_state_handle::path(), sheaf::scoped_index::pod(), sheaf::poset_path::poset_name(), sheaf::poset_path::put_member_name(), sheaf::abstract_poset_member::put_name(), sheaf::poset_path::put_poset_name(), sheaf::poset_component::release_access(), fiber_bundle::section_space_schema_member::rep(), fiber_bundle::sec_rep_space_member::schema(), sheaf::poset_state_handle::schema(), and sheaf::read_write_monitor_handle::state_is_read_accessible().

◆ body_pusher() [2/3]

fields::body_pusher::body_pusher ( )
protected

Default constructor; protected to prevent default construction.

Not Implemented.

Definition at line 713 of file body_pusher.cc.

Referenced by same_fiber().

◆ body_pusher() [3/3]

fields::body_pusher::body_pusher ( const body_pusher xother)

Copy constructor.

Not Implemented.

Postcondition

Definition at line 735 of file body_pusher.cc.

References ~body_pusher().

◆ ~body_pusher()

fields::body_pusher::~body_pusher ( )
virtual

Destructor.

Definition at line 751 of file body_pusher.cc.

References invariant().

Referenced by body_pusher().

Member Function Documentation

◆ domain()

const fiber_bundle::base_space_poset & fields::body_pusher::domain ( ) const

The domain of the push-forward map.

Definition at line 166 of file body_pusher.cc.

References domain_coord().

Referenced by body_pusher().

◆ domain_coord()

const geometry::sec_ed_invertible & fields::body_pusher::domain_coord ( ) const

The coordinate field for the domain.

Definition at line 183 of file body_pusher.cc.

References range().

Referenced by domain().

◆ invariant()

bool fields::body_pusher::invariant ( ) const
virtual

Class invariant.

Invariant

Reimplemented from sheaf::any.

Definition at line 772 of file body_pusher.cc.

Referenced by ~body_pusher().

◆ name_prefix()

std::string & fields::body_pusher::name_prefix ( )

Prefix for destination name.

Definition at line 580 of file body_pusher.cc.

References name_suffix().

Referenced by push_name().

◆ name_suffix()

std::string & fields::body_pusher::name_suffix ( )

Suffix for destination name.

Definition at line 587 of file body_pusher.cc.

References same_fiber().

Referenced by name_prefix().

◆ push() [1/2]

fiber_bundle::base_space_member * fields::body_pusher::push ( const base_space_member xinput,
bool  xcompute_upper_bound,
bool  xauto_access 
)

Pushes member xinput from domain() to base_space_poset range(), auto-allocated.

Precondition
  • domain().contains_member(&xinput, xauto_access)
  • xauto_access || range().state_is_read_write_accessible()
Postcondition
  • result != 0
  • postcondition_of(push_pa)

Definition at line 236 of file body_pusher.cc.

References fiber_bundle::base_space_member::clone(), and push_pa().

Referenced by push_pa(), and range_coord().

◆ push() [2/2]

sheaf::subposet * fields::body_pusher::push ( const subposet xinput,
bool  xcompute_upper_bound,
bool  xauto_access 
)

Pushes all members of xinput from domain() to base_space_poset range(), auto-allocated.

Precondition
  • precondition_of(push_pa(xinput, *result, xcompute_upper_bound, xauto_access))
  • !xinput.name().empty()
Postcondition
  • result != 0
  • postcondition_of(push_pa(xinput, *result, xcompute_upper_bound, xauto_access))

Definition at line 453 of file body_pusher.cc.

References sheaf::poset_component::attach_to_state(), sheaf::subposet::clone(), sheaf::subposet::name(), and push_pa().

◆ push_name()

const bool & fields::body_pusher::push_name ( ) const

True if destination body should be named from the source body.

Definition at line 573 of file body_pusher.cc.

References name_prefix().

Referenced by push_pa().

◆ push_pa() [1/2]

void fields::body_pusher::push_pa ( const base_space_member xinput,
base_space_member result,
bool  xcompute_upper_bound,
bool  xauto_access 
)

Pushes member xinput from base_space_poset domain() to base_space_poset range(), pre-allocated.

Precondition
  • domain().contains_member(&xinput, xauto_access)
  • xauto_access || range().state_is_read_write_accessible()
Issue:
should join produce new jem or not? If not, must relax name postcondition to has_name.
Postcondition
  • result.is_attached() ? range().is_same_state(result.host()) : true
  • domain_coord().access_request_depth() == old_domain_coord_access_request_depth
  • range_coord().access_request_depth() == old_range_coord_access_request_depth
  • range().access_request_depth() == old_range_access_request_depth

Definition at line 265 of file body_pusher.cc.

References sheaf::auto_block< T, S >::base(), sheaf::auto_block< T, S >::ct(), sheaf::DOWN, fiber_bundle::base_space_member::host(), sheaf::poset_component::is_attached(), sheaf::poset_joiner::join(), sheaf::abstract_poset_member::name(), sheaf::NOT_STRICT, push(), sheaf::auto_block< T, S >::push_back(), sheaf::filtered_depth_first_itr< T >::put_anchor(), sheaf::abstract_poset_member::put_name(), and sheaf::UP.

Referenced by push().

◆ push_pa() [2/2]

void fields::body_pusher::push_pa ( const subposet xinput,
subposet result,
bool  xcompute_upper_bound,
bool  xauto_access 
)

Pushes all members of xinput from base_space_poset domain() to base_space_poset range(), pre-allocated.

Precondition
  • domain().includes_subposet(&xinput, xauto_access)
  • xauto_access || range().state_is_read_write_accessible()
  • range().includes_subposet(&result, xauto_access)

Definition at line 513 of file body_pusher.cc.

References sheaf::index_iterator::index(), sheaf::subposet::indexed_member_iterator(), sheaf::subposet::insert_member(), sheaf::index_iterator::is_done(), sheaf::index_iterator::next(), and push_name().

◆ range()

const fiber_bundle::base_space_poset & fields::body_pusher::range ( ) const

The range of the push-forward map.

Definition at line 201 of file body_pusher.cc.

References range_coord().

Referenced by domain_coord().

◆ range_coord()

const fiber_bundle::sec_ed & fields::body_pusher::range_coord ( ) const

The coordinate field for the range.

Definition at line 218 of file body_pusher.cc.

References push().

Referenced by range().

◆ same_fiber()


The documentation for this class was generated from the following files: