21 #include "SheafSystem/sec_st2_e3.h" 23 #include "SheafSystem/assert_contract.h" 24 #include "SheafSystem/base_space_poset.h" 25 #include "SheafSystem/binary_section_space_schema_member.impl.h" 26 #include "SheafSystem/at1_space.h" 27 #include "SheafSystem/fiber_bundles_namespace.h" 28 #include "SheafSystem/index_space_iterator.h" 29 #include "SheafSystem/sec_at0.h" 30 #include "SheafSystem/sec_at0_space.h" 31 #include "SheafSystem/sec_at1_space.h" 32 #include "SheafSystem/sec_e3.h" 33 #include "SheafSystem/sec_stp_space.h" 34 #include "SheafSystem/sec_tuple.impl.h" 35 #include "SheafSystem/sec_tuple_space.impl.h" 36 #include "SheafSystem/sec_vd.impl.h" 37 #include "SheafSystem/st2_e3.h" 38 #include "SheafSystem/stp_space.h" 67 require(!xhost_path.
empty());
70 require(xschema_path.
full());
72 require(host_type::fiber_space_conforms<fiber_type::host_type>(xns, xschema_path, xauto_access));
76 require(host_type::same_vector_fiber_space(xns, xschema_path, xvector_space_path, xauto_access));
80 host_type& result = host_type::new_table(xns, xhost_path, xschema_path, xvector_space_path, xauto_access);
84 ensure(xns.
owns(result, xauto_access));
85 ensure(result.
path(
true) == xhost_path);
87 ensure(result.
schema(
true).
path(xauto_access) == xschema_path);
94 ensure(result.
p(
true) == 2);
109 const std::string& xsection_suffix,
110 const std::string& xfiber_suffix,
119 require(xbase_path.
full());
122 require(xrep_path.
empty() || xrep_path.
full());
125 require(xsection_suffix.empty() || poset_path::is_valid_name(xsection_suffix));
127 require(xfiber_suffix.empty() || poset_path::is_valid_name(xfiber_suffix));
129 require(standard_host_is_available<sec_st2_e3>(xns, xbase_path, xrep_path, xsection_suffix, xfiber_suffix, xauto_access));
130 require(fiber_type::standard_host_is_available<fiber_type>(xns, xfiber_suffix, xauto_access));
131 require(schema_type::standard_host_is_available<sec_st2_e3>(xns, xbase_path, xrep_path, xfiber_suffix, xauto_access));
135 poset_path lstd_path = standard_host_path<sec_st2_e3>(xbase_path, xrep_path, xsection_suffix, xfiber_suffix);
151 poset_path lrep_path = (!xrep_path.empty() ? xrep_path : standard_rep_path());
156 schema_type::standard_member<sec_st2_e3>(xns, xbase_path, lrep_path, xfiber_suffix, xauto_access);
161 vector_space_type::standard_host(xns, xbase_path, lrep_path, xsection_suffix, xfiber_suffix, xauto_access).
path(xauto_access);
165 lresult_ptr = &new_host(xns, lstd_path, lstd_schema_path, lvector_space_path, xauto_access);
172 ensure(xns.
owns(result, xauto_access));
173 ensure(result.
path(
true) == standard_host_path<sec_st2_e3>(xbase_path, xrep_path, xsection_suffix, xfiber_suffix));
175 ensure(result.
schema(
true).
path(xauto_access) ==
176 schema_type::standard_member_path<sec_st2_e3>(xbase_path, xrep_path, xfiber_suffix));
181 scalar_type::standard_host_path<scalar_type>(xbase_path, result.
rep().
path(xauto_access), xsection_suffix, xfiber_suffix));
183 ensure(result.
p(
true) == 2);
186 vector_space_type::standard_host_path<vector_space_type>(xbase_path, result.
rep().
path(xauto_access), xsection_suffix, xfiber_suffix));
228 attach_to_state(xhost, xhub_id);
234 ensure(index() == xhub_id);
235 ensure(is_attached());
236 ensure(!is_restricted());
250 attach_to_state(xhost, xid.
hub_pod());
256 ensure(index() ==~ xid);
257 ensure(is_attached());
258 ensure(!is_restricted());
269 require(!xname.empty());
274 attach_to_state(xhost, xname);
280 ensure(name() == xname);
281 ensure(is_attached());
282 ensure(!is_restricted());
295 require(precondition_of(attach_to_state(same args)));
299 attach_to_state(xnamespace, xpath, xauto_access);
303 ensure(postcondition_of(attach_to_state(same args)));
317 require(xother != 0);
321 attach_to_state(xother);
326 ensure(is_attached());
327 ensure(is_same_state(xother));
328 ensure(is_same_restriction(xother));
338 require(precondition_of(new_jim_state(xhost, xdof_map,
false, xauto_access)));
342 new_jim_state(xhost, xdof_map,
false, xauto_access);
346 ensure(postcondition_of(new_jim_state(xhost, xdof_map,
false, xauto_access)));
356 int xbase_version,
bool xauto_access)
361 require(precondition_of(new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access)));
365 new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access);
369 ensure(postcondition_of(new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access)));
382 require(is_ancestor_of(&xother));
383 require(precondition_of(attach_to_state(&xother)));
387 attach_to_state(&xother);
391 ensure(postcondition_of(attach_to_state(&xother)));
404 require(precondition_of(attach_to_state(&xother)));
408 attach_to_state(&xother);
412 ensure(postcondition_of(attach_to_state(&xother)));
425 require(precondition_of(sec_vd::operator=(xfiber)));
429 sec_vd::operator=(xfiber);
433 ensure(postcondition_of(sec_vd::operator=(xfiber)));
446 require(precondition_of(sec_vd::operator=(xfiber)));
450 sec_vd::operator=(xfiber);
454 ensure(postcondition_of(sec_vd::operator=(xfiber)));
563 const string& result = static_class_name();
567 ensure(!result.empty());
582 static const string result(
"sec_st2_e3");
586 ensure(!result.empty());
635 require(xother != 0);
642 bool result =
dynamic_cast<const st2_e3*
>(xother) != 0;
661 require(xother != 0);
668 bool result =
dynamic_cast<const sec_st2_e3*
>(xother) != 0;
692 invariance(sec_st2::invariant());
694 if (invariant_check())
698 disable_invariant_check();
700 invariance(is_attached() ? dd() == 3 :
true);
704 enable_invariant_check();
709 ensure(is_derived_query);
728 class determinant_functor
745 #include "SheafSystem/sec_at0.h" 746 #include "SheafSystem/sec_vd.impl.h" 761 unary_op(x0, xresult, determinant_functor(), xauto_access);
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 ...
An abstract symmetric tensor section space of degree p.
SHEAF_DLL_SPEC void determinant(const sec_st2 &x0, sec_at0 &xresult, bool xauto_access)
The determinant of x0.
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...
void unary_op(const S0 &x0, SR &xresult, F xfunctor, bool xauto_access)
Unary operator.
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 state_is_auto_read_accessible(bool xauto_access) const
True if the state is auto accessible for read, that is, if the state is already accessible for read o...
virtual const fiber_type & fiber_prototype() const
Virtual constructor for the associated fiber type.
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 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.
SHEAF_DLL_SPEC void determinant(const st2 &x0, vd_value_type &xresult, bool xauto_access)
The determinant of a symmetric tensor (pre-allocated version for persistent types).
bool fiber_is_ancestor_of(const any *xother) const
True if xother conforms to an instance of the fiber 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...
sec_st2_e3()
Default constructor.
bool invariant() const
Class invariant.
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 int d(int xp, int xdd) const
Dimension d() as a function of degree xp and domain dimension xdd.
static const std::string & static_class_name()
The name of this class.
A symmetric tensor of degree 2 over a Euclidean vector space of dimension 3 (volatile version)...
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)
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...
An index within the external ("client") scope of a given id space.
bool contains_path(const poset_path &xpath, bool xauto_access=true) const
True if this contains the poset or poset member specified by xpath.
Antisymetric tensor of degree 0 (volatile version).
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 is_ancestor_of(const any *xother) const
True if xother conforms to current.
bool empty() const
True if both poset name and member name are empty.
virtual sec_st2_e3 * clone() const
Make a new handle, no state instance of current.
virtual sec_st2_e3 & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
virtual void put_component(value_type xcomp)
Set value of (the only) component to xcomp.
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).
Namespace containing the algrebra functions for a a section of a fiber bundle with a d-dimensional ve...
virtual const std::string & class_name() const
The name of this class.
An abstract client handle for a member of a poset.
std::string path() const
The full path as a string.
An abstract symmetric tensor space of degree p.
Namespace for the fiber_bundles component of the sheaf system.
A general symmetric tensor of degree 2 over an abstract vector space (persistent version).
Antisymetric tensor of degree 0. As the degree is 0 there is nothing to be symmetric or antisymmetric...
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...
double vd_value_type
The type of component in the fiber; the scalar type in the fiber vector space.
Namespace containing the 2d symmetric tensor algrebra functions for the fiber_bundles component of th...
A symmetric tensor of degree 2 over a Euclidean vector space of dimension 3 (persistent version)...
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
A section of a bundle with fiber type st2_e3.
A handle for a poset whose members are numerical representations of sections of a fiber bundle...