22 #include "SheafSystem/sec_t4_e2.h" 24 #include "SheafSystem/assert_contract.h" 25 #include "SheafSystem/base_space_poset.h" 26 #include "SheafSystem/binary_section_space_schema_member.impl.h" 27 #include "SheafSystem/at1_space.h" 28 #include "SheafSystem/fiber_bundles_namespace.h" 29 #include "SheafSystem/index_space_iterator.h" 30 #include "SheafSystem/sec_at0.h" 31 #include "SheafSystem/sec_at0_space.h" 32 #include "SheafSystem/sec_at1_space.h" 33 #include "SheafSystem/sec_e2.h" 34 #include "SheafSystem/sec_stp_space.h" 35 #include "SheafSystem/sec_tuple.impl.h" 36 #include "SheafSystem/sec_tuple_space.impl.h" 37 #include "SheafSystem/sec_vd.impl.h" 38 #include "SheafSystem/t4_e2.h" 39 #include "SheafSystem/stp_space.h" 68 require(!xhost_path.
empty());
71 require(xschema_path.
full());
73 require(host_type::fiber_space_conforms<fiber_type::host_type>(xns, xschema_path, xauto_access));
77 require(host_type::same_vector_fiber_space(xns, xschema_path, xvector_space_path, xauto_access));
81 host_type& result = host_type::new_table(xns, xhost_path, xschema_path, xvector_space_path, xauto_access);
85 ensure(xns.
owns(result, xauto_access));
86 ensure(result.
path(
true) == xhost_path);
88 ensure(result.
schema(
true).
path(xauto_access) == xschema_path);
95 ensure(result.
p(
true) == 4);
110 const std::string& xsection_suffix,
111 const std::string& xfiber_suffix,
120 require(xbase_path.
full());
123 require(xrep_path.
empty() || xrep_path.
full());
126 require(xsection_suffix.empty() || poset_path::is_valid_name(xsection_suffix));
128 require(xfiber_suffix.empty() || poset_path::is_valid_name(xfiber_suffix));
130 require(standard_host_is_available<sec_t4_e2>(xns, xbase_path, xrep_path, xsection_suffix, xfiber_suffix, xauto_access));
131 require(fiber_type::standard_host_is_available<fiber_type>(xns, xfiber_suffix, xauto_access));
132 require(schema_type::standard_host_is_available<sec_t4_e2>(xns, xbase_path, xrep_path, xfiber_suffix, xauto_access));
136 poset_path lstd_path = standard_host_path<sec_t4_e2>(xbase_path, xrep_path, xsection_suffix, xfiber_suffix);
152 poset_path lrep_path = (!xrep_path.empty() ? xrep_path : standard_rep_path());
157 schema_type::standard_member<sec_t4_e2>(xns, xbase_path, lrep_path, xfiber_suffix, xauto_access);
162 vector_space_type::standard_host(xns, xbase_path, lrep_path, xsection_suffix, xfiber_suffix, xauto_access).
path(xauto_access);
166 lresult_ptr = &new_host(xns, lstd_path, lstd_schema_path, lvector_space_path, xauto_access);
173 ensure(xns.
owns(result, xauto_access));
174 ensure(result.
path(
true) == standard_host_path<sec_t4_e2>(xbase_path, xrep_path, xsection_suffix, xfiber_suffix));
176 ensure(result.
schema(
true).
path(xauto_access) ==
177 schema_type::standard_member_path<sec_t4_e2>(xbase_path, xrep_path, xfiber_suffix));
182 scalar_type::standard_host_path<scalar_type>(xbase_path, result.
rep().
path(xauto_access), xsection_suffix, xfiber_suffix));
184 ensure(result.
p(
true) == 4);
187 vector_space_type::standard_host_path<vector_space_type>(xbase_path, result.
rep().
path(xauto_access), xsection_suffix, xfiber_suffix));
228 attach_to_state(&xother);
234 ensure(is_same_state(&xother));
235 ensure(is_same_restriction(&xother));
242 int xbase_version,
bool xauto_access)
247 require(precondition_of(new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access)));
251 new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access);
255 ensure(postcondition_of(new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access)));
268 require(precondition_of(new_jim_state(xhost, xdof_map,
false, xauto_access)));
272 new_jim_state(xhost, xdof_map,
false, xauto_access);
276 ensure(postcondition_of(new_jim_state(xhost, xdof_map,
false, xauto_access)));
294 attach_to_state(xhost, xhub_id);
300 ensure(index() == xhub_id);
301 ensure(is_attached());
302 ensure(!is_restricted());
316 attach_to_state(xhost, xid.
hub_pod());
322 ensure(index() ==~ xid);
323 ensure(is_attached());
324 ensure(!is_restricted());
335 require(!xname.empty());
340 attach_to_state(xhost, xname);
346 ensure(name() == xname);
347 ensure(is_attached());
348 ensure(!is_restricted());
360 require(precondition_of(attach_to_state(same args)));
364 attach_to_state(xnamespace, xpath, xauto_access);
368 ensure(postcondition_of(attach_to_state(same args)));
381 require(is_ancestor_of(&xother));
382 require(precondition_of(attach_to_state(&xother)));
386 attach_to_state(&xother);
390 ensure(postcondition_of(attach_to_state(&xother)));
403 require(precondition_of(attach_to_state(&xother)));
407 attach_to_state(&xother);
411 ensure(postcondition_of(attach_to_state(&xother)));
424 require(precondition_of(sec_vd::operator=(xfiber)));
428 sec_vd::operator=(xfiber);
432 ensure(postcondition_of(sec_vd::operator=(xfiber)));
445 require(precondition_of(sec_vd::operator=(xfiber)));
449 sec_vd::operator=(xfiber);
453 ensure(postcondition_of(sec_vd::operator=(xfiber)));
551 const string& result = static_class_name();
555 ensure(!result.empty());
570 static const string result(
"sec_t4_e2");
574 ensure(!result.empty());
623 require(xother != 0);
627 bool result =
dynamic_cast<const t4_e2*
>(xother) != 0;
646 require(xother != 0);
650 bool result =
dynamic_cast<const sec_t4_e2*
>(xother) != 0;
670 if (invariant_check())
674 disable_invariant_check();
678 invariance(sec_tp::invariant());
682 invariance(state_is_read_accessible() ? dd() == 2 :
true);
686 enable_invariant_check();
virtual bool invariant() const
Class invariant, intended to be redefined in each descendant. See below for template for invariant in...
static int factor_ct(int xd)
Factor_ct() as a function of dimension xd.
virtual poset_path path(bool xauto_access=true) const
The path of this poset.
bool state_is_auto_read_write_accessible(bool xauto_access) const
True if state is auto accessible for read and write, that is, if the state is already accessible for ...
virtual sec_t4_e2 & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
bool is_ancestor_of(const any *xother) const
True if xother conforms to current.
bool full() const
True if both poset name and member name are not empty.
The abstract map from section dof ids to section dof values of heterogeneous type.
A space of scalars viewed as an antisymmetric tensor section space of degree 1.
poset_path path(bool xauto_access=true) const
A path to this component.
The default name space; a poset which contains other posets as members.
bool state_is_read_accessible() const
True if this is attached and if the state is accessible for read or access control is disabled...
bool path_is_auto_read_accessible(const poset_path &xpath, bool xauto_access) const
True if the state referred to xpath exists and is auto read accessible.
The standard fiber bundles name space; extends the standard sheaves namespace by defining base space...
bool fiber_is_ancestor_of(const any *xother) const
True if xother conforms to an instance of the fiber of current.
static host_type & new_host(namespace_type &xns, const poset_path &xhost_path, const poset_path &xschema_path, const poset_path &xvector_space_path, bool xauto_access)
Creates a new host table for members of this type. The poset is created in namespace xns with path xh...
virtual const std::string & class_name() const
The name of this class.
A path defined by a poset name and a member name separated by a forward slash ('/'). For example: "cell_definitions/triangle".
A member of a sec_rep_space; a section.
poset_path vector_space_path() const
The path of the underlying vector space.
A tensor of degree 4 over a Euclidean vector space of dimension 2 (persistent version).
bool invariant() const
Class invariant.
A schema poset for a section space. A binary Cartesian product subspace of the binary tensor product ...
poset_state_handle & member_poset(pod_index_type xhub_id, bool xauto_access=true) const
The poset_state_handle object referred to by hub id xhub_id.
The poset for sec_rep_descriptors.
virtual const fiber_type & fiber_prototype() const
Virtual constructor for the associated fiber type.
Abstract base class with useful features for all objects.
int p() const
The tensor degree of this space.
The lattice of closed cells of a cellular space; a lattice representation of a computational mesh...
sec_rep_descriptor & rep()
A representation descriptor for this sec rep space (mutable version).
virtual section_space_schema_member & schema()
The schema for this poset (mutable version)
virtual sec_t4_e2 * clone() const
Make a new handle, no state instance of current.
static host_type & standard_host(namespace_type &xns, const poset_path &xbase_path, const poset_path &xrep_path, const std::string &xsection_suffix, const std::string &xfiber_suffix, bool xauto_access)
The standard host for sections of this type with base space xbase_path, representation xrep_path...
An abstract tensor section space of degree p.
bool owns(const poset_state_handle &xposet, bool xauto_access) const
True if and only if this contains the poset xposet. synonym for contains_poset(xposet.poset_path(true), xauto_access)
An index within the external ("client") scope of a given id space.
virtual bool is_attached() const
True if this handle is attached to a non-void state.
bool contains_path(const poset_path &xpath, bool xauto_access=true) const
True if this contains the poset or poset member specified by xpath.
virtual bool contains_member(pod_index_type xmbr_hub_id, bool xauto_access=true) const
True if some version of this poset contains poset member with hub id xmbr_hub_id. ...
int dd() const
The dimension of the underlying ("domain") vector space.
bool empty() const
True if both poset name and member name are empty.
static const std::string & static_class_name()
The name of this class.
A section of a bundle with fiber type t4_e2.
sec_t4_e2()
Default constructor; creates an unattached handle.
int_type pod_index_type
The plain old data index type.
poset_path scalar_space_path() const
The path of the underlying space of scalars.
poset & fiber_space()
The fiber space for section spaces on this schema (mutable version).
virtual int d(int xp, int xdd) const
Dimension d() as a function of degree xp and domain dimension xdd.
An abstract client handle for a member of a poset.
A tensor of degree 4 over a Euclidean vector space of dimension 2 (volatile version).
std::string path() const
The full path as a string.
An abstract tensor space of degree p.
Namespace for the fiber_bundles component of the sheaf system.
bool state_is_not_read_accessible() const
True if this is attached and if the state is accessible for read or if access control is disabled...
A tensor of degree 4 over an abstract vector space (persistent version).
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
A handle for a poset whose members are numerical representations of sections of a fiber bundle...