20 #include "SheafSystem/st3_e3.impl.h" 22 #include "SheafSystem/abstract_poset_member.impl.h" 23 #include "SheafSystem/assert_contract.h" 24 #include "SheafSystem/at0.h" 25 #include "SheafSystem/at1_space.h" 26 #include "SheafSystem/stp_space.h" 27 #include "SheafSystem/fiber_bundles_namespace.h" 28 #include "SheafSystem/schema_poset_member.h" 29 #include "SheafSystem/wsv_block.h" 136 _row_dofs = xrow_dofs;
148 fiber_bundle::st3_e3_lite::
164 fiber_bundle::st3_e3_lite::
283 require(precondition_of(e3_lite::static_tp_prototype(xp)));
287 const tp_lite& result = e3_lite::static_tp_prototype(xp);
291 ensure(postcondition_of(e3_lite::static_tp_prototype(xp)));
304 require(precondition_of(e3_lite::static_atp_prototype(xp)));
308 const atp_lite& result = e3_lite::static_atp_prototype(xp);
312 ensure(postcondition_of(e3_lite::static_atp_prototype(xp)));
325 require(precondition_of(e3_lite::static_stp_prototype(xp)));
329 const stp_lite& result = e3_lite::static_stp_prototype(xp);
333 ensure(postcondition_of(e3_lite::static_stp_prototype(xp)));
370 const string& result = static_class_name();
374 ensure(!result.empty());
389 static const string result(
"st3_e3_lite");
393 ensure(!result.empty());
415 ensure(is_same_type(*result));
439 require(&xother != 0);
445 bool result =
dynamic_cast<const st3_e3_lite*
>(&xother) != 0;
458 if(invariant_check())
462 disable_invariant_check();
466 invariance(st3_lite::invariant());
472 enable_invariant_check();
518 static const poset_path result(standard_schema_poset_name(),
"st3_e3_schema");
540 string lmember_names =
"xxx DOUBLE false ";
541 lmember_names +=
"xxy DOUBLE false ";
542 lmember_names +=
"xxz DOUBLE false ";
543 lmember_names +=
"xyy DOUBLE false ";
544 lmember_names +=
"xyz DOUBLE false ";
545 lmember_names +=
"xzz DOUBLE false ";
546 lmember_names +=
"yyy DOUBLE false ";
547 lmember_names +=
"yyz DOUBLE false ";
548 lmember_names +=
"yzz DOUBLE false ";
549 lmember_names +=
"zzz DOUBLE false ";
552 standard_schema_path().member_name(),
553 st3::standard_schema_path(),
582 require(!xhost_path.
empty());
585 require(xschema_path.
full());
587 require(schema_poset_member::conforms_to(xns, xschema_path, standard_schema_path()));
588 require(schema_poset_member::row_dof_ct(xns, xschema_path, xauto_access) == 10);
598 host_type::new_table(xns, xhost_path, xschema_path, 3, xvector_space_path, xauto_access);
602 ensure(xns.
owns(result, xauto_access));
603 ensure(result.path(
true) == xhost_path);
604 ensure(result.state_is_not_read_accessible());
605 ensure(result.schema(
true).path(xauto_access) == xschema_path);
607 ensure(result.factor_ct(
true) == 10);
608 ensure(result.d(
true) == 10);
610 ensure(result.p(
true) == 3);
611 ensure(result.dd(
true) == 3);
612 ensure(result.vector_space_path(
true) == xvector_space_path);
630 require(xsuffix.empty() || poset_path::is_valid_name(xsuffix));
631 require(standard_host_is_available<st3_e3>(xns, xsuffix, xauto_access));
641 poset_path lvector_space_path = vector_space_type::standard_host(xns, xsuffix, xauto_access).
path(
true);
643 poset_path lpath(standard_host_path<st3_e3>(xsuffix));
652 result_ptr = &new_host(xns, lpath, standard_schema_path(), lvector_space_path, xauto_access);
659 ensure(xns.
owns(result, xauto_access));
660 ensure(result.
path(
true) == standard_host_path<st3_e3>(xsuffix));
662 ensure(result.
schema(
true).
path(xauto_access) == standard_schema_path());
665 ensure(result.
d(
true) == 10);
666 ensure(result.
scalar_space_path(
true) == standard_host_path<vector_space_type::scalar_type>(xsuffix) );
667 ensure(result.
p(
true) == 3);
668 ensure(result.
dd(
true) == 3);
669 ensure(result.
vector_space_path(
true) == standard_host_path<vector_space_type>(xsuffix) );
710 attach_to_state(xhost, xhub_id);
716 ensure(index() == xhub_id);
717 ensure(is_attached());
731 attach_to_state(xhost, xid.
hub_pod());
737 ensure(index() ==~ xid);
738 ensure(is_attached());
749 require(!xname.empty());
754 attach_to_state(xhost, xname);
760 ensure(name() == xname);
761 ensure(is_attached());
771 require(xother != 0);
775 attach_to_state(xother);
780 ensure(is_attached());
781 ensure(is_same_state(xother));
791 require(precondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
795 new_jim_state(xhost, 0,
false, xauto_access);
799 ensure(postcondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
814 require(precondition_of(new_jim_state(&xhost, 0,
false, xauto_access)));
818 new_jim_state(&xhost, 0,
false, xauto_access);
834 ensure(postcondition_of(new_jim_state(&xhost, 0,
false, xauto_access)));
848 require(state_is_read_write_accessible());
856 ensure_for_all(i, 0, d(), component(i) == xrdt.
components[i]);
871 require(is_ancestor_of(&xother));
872 require(precondition_of(attach_to_state(&xother)));
876 attach_to_state(&xother);
880 ensure(postcondition_of(attach_to_state(&xother)));
894 require(precondition_of(attach_to_state(&xother)));
898 attach_to_state(&xother);
902 ensure(postcondition_of(attach_to_state(&xother)));
963 require(state_is_read_write_accessible());
967 put_component(0, xcomp);
979 fiber_bundle::st3_e3::
995 fiber_bundle::st3_e3::
1072 require(precondition_of(e3::new_tp(vector_space(xauto_access), xp)));
1076 tp* result = e3::new_tp(vector_space(xauto_access), xp);
1080 ensure(postcondition_of(e3::new_tp(vector_space(xauto_access), xp)));
1093 require(precondition_of(e3::new_atp(vector_space(xauto_access), xp)));
1097 atp* result = e3::new_atp(vector_space(xauto_access), xp);
1101 ensure(postcondition_of(e3::new_atp(vector_space(xauto_access), xp)));
1114 require(precondition_of(e3::new_stp(vector_space(xauto_access), xp)));
1118 stp* result = e3::new_stp(vector_space(xauto_access), xp);
1122 ensure(postcondition_of(e3::new_stp(vector_space(xauto_access), xp)));
1149 const string& result = static_class_name();
1153 ensure(!result.empty());
1168 static const string result(
"st3_e3");
1172 ensure(!result.empty());
1194 ensure(result != 0);
1221 require(xother != 0);
1225 bool result =
dynamic_cast<const st3_e3*
>(xother) != 0;
1244 if(invariant_check())
1248 disable_invariant_check();
1252 invariance(st3::invariant());
1256 invariance((state_is_read_accessible() ? dd() == 3 :
true));
1257 invariance((state_is_read_accessible() ? d() == 10 :
true));
1261 enable_invariant_check();
T components[10]
The components.
virtual void get_read_write_access(bool xrelease_read_only_access=false)
Get read write access to the state associated with this. If release_read_only_access is requested...
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 ...
st3_e3_lite()
Default constructor.
virtual stp * new_stp(int xp, bool xauto_access) const
Virtual constructor for symmetric tensors of degree xp over vector space xvector_space.
virtual const std::string & class_name() const
The name of this class.
A symmetric tensor of degree p over an abstract vector space.
bool full() const
True if both poset name and member name are not empty.
An antisymmetric tensor of degree p.
static int d(const namespace_poset &xns, int xp, const poset_path &xvector_space_path, bool xauto_access)
The tensor dimension implied by tensor degree xp and the dimension of the domain vector space specifi...
virtual void put_components(dof_type xcomp)
Sets the value of the component to xcomp.
virtual const atp_lite & atp_prototype(int xp) const
Prototype for antisymmetric tensors of degree xp over this vector space.
poset_path path(bool xauto_access=true) const
A path to this component.
bool conforms_to(const schema_poset_member &xother) const
True if the dofs defined by this agree in type and in order with the dofs defined by xother...
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 is_ancestor_of(const any *xother) const
True if xother conforms to current.
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...
st3_e3_lite & operator=(const st3_e3_lite &xother)
Assignment operator.
poset_path vector_space_path() const
The path of the underlying vector space.
bool contains_poset_member(pod_index_type xposet_hub_id, pod_index_type xmember_hub_id, bool xauto_access=true) const
True if this contains a poset with hub id xposet_hub_id which contains a member with hub id xmember_h...
A client handle for a general, abstract partially order set.
A symmetric rank 3 tensor over a 3D Euclidean vector space (persistent version).
A path defined by a poset name and a member name separated by a forward slash ('/'). For example: "cell_definitions/triangle".
bool invariant() const
Class invariant.
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.
T::row_dofs_type & row_dofs(T &x0)
The row dofs pod type for x0 (mutable version).
virtual void * row_dofs()
The row dofs for this instance (mutable version).
An antisymmetric tensor of degree p over an abstract vector space (volatile version).
static int d(const namespace_poset &xns, int xp, const poset_path &xvector_space_path, bool xauto_access)
The tensor dimension implied by tensor degree xp and the dimension of the domain vector space specifi...
A general tensor of "degree" p and given "variance" over an abstract vector space.
static const std::string & static_class_name()
The name of this class.
Abstract base class with useful features for all volatile objects.
Abstract base class with useful features for all objects.
virtual tp * new_tp(int xp, bool xauto_access) const
Virtual constructor for general tensors of degree xp over vector space xvector_space.
virtual schema_poset_member & schema()
The schema for this poset (mutable version).
virtual const std::string & class_name() const
The name of this class.
bool state_is_read_write_accessible() const
True if this is attached and if the state is accessible for read and write or access control is disab...
virtual st3_e3 * clone() const
Make a new handle, no state instance of current.
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)
virtual const stp_lite & stp_prototype(int xp) const
Prototype for symmetric tensors of degree xp over this vector space.
virtual void detach_from_state()
Detach this handle from its state, if any.
An index within the external ("client") scope of a given id space.
static void make_standard_schema(namespace_poset &xns)
Creates the standard schema for this class in namespace xns.
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 p(int xd, int xdd) const
Tensor degree as a function of tensor dimension xd and domain dimension xdd.
virtual const volatile_type & lite_prototype() const
Virtual constructor for the associated volatile type.
virtual bool is_ancestor_of(const any_lite &xother) const
Conformance test; true if other conforms to this.
row_dofs_type _row_dofs
Row_dofs_type.
A symmetric rank 3 tensor over an abstract vector space. (volatile version).
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...
bool empty() const
True if both poset name and member name are empty.
virtual void release_access(bool xall=false) const
Release access. If xall is true, release all levels of access. Otherwise, release one level of access...
A general tensor of degree p over an abstract vector space (volatile version). Volatile version does ...
bool invariant() const
Class invariant.
bool contains_poset(pod_index_type xhub_id, bool xauto_access=true) const
True if this contains a poset with hub id xhub_id..
bool path_is_auto_read_available(const poset_path &xpath, bool xauto_access) const
True if the state referred to xpath does not exist or exists and is auto read accessible.
poset_path scalar_space_path() const
The path of the underlying space of scalars.
virtual volatile_type * lite_type() const
Virtual conversion to the associated volatile type.
st3_e3()
Default constructor.
virtual st3_e3_lite * clone() const
Virtual constructor, makes a new instance of the same type as this.
An abstract vector space viewed as an antisymmetric tensor space of degree 1.
st3_e3 & operator=(const row_dofs_type &xrdt)
Assignment to an instance of the associated row dofs type.
static int factor_ct(int xd)
Factor_ct() as a function of dimension xd.
virtual const tp_lite & tp_prototype(int xp) const
Prototype for general tensors of degree xp over this vector space.
int_type pod_index_type
The plain old data index type.
int dd() const
The dimension of the underlying ("domain") vector space.
A symmetric rank 3 tensor over a Euclidean vector space of dimension 3. (volatile version)...
virtual ~st3_e3_lite()
Destructor.
static const std::string & static_class_name()
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.
vd_dof_type dof_type
The type of the degrees of freedom. Note that although dof_type == value_type in this implementation...
static host_type & standard_host(namespace_type &xns, const std::string &xsuffix, bool xauto_access)
The host with path standard_host_path<st3_e3>(xsuffix). Returns the host if it already exists...
A symmetric tensor of degree p over an abstract vector space (volatile version).
An abstract symmetric 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 client handle for a poset member which has been prepared for use as a schema.
static const poset_path & standard_schema_path()
The path to the standard schema for this class.
virtual int dd() const
Dimension of the underlying vector space.
virtual atp * new_atp(int xp, bool xauto_access) const
Virtual constructor for antisymmetric tensors of degree xp over vector space xvector_space.
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
SHEAF_DLL_SPEC bool isunordered_or_equals(float x1, float x2)
True if isunordered(x1, x2) or x1 == x2.