21 #include "SheafSystem/t4_e2.impl.h" 23 #include "SheafSystem/abstract_poset_member.impl.h" 24 #include "SheafSystem/assert_contract.h" 25 #include "SheafSystem/at0.h" 26 #include "SheafSystem/at1_space.h" 27 #include "SheafSystem/fiber_bundles_namespace.h" 28 #include "SheafSystem/schema_poset_member.h" 29 #include "SheafSystem/tp_space.h" 30 #include "SheafSystem/wsv_block.h" 32 #include "SheafSystem/st4_e2.h" 33 #include "SheafSystem/std_sstream.h" 97 ensure_for_all(i, 0, d(), component(i) == xother[i]);
142 for(
int i=0; i<2; i++)
144 for(
int j=0; j<2; j++)
146 for(
int k=0; k<2; k++)
148 for(
int l=0; l<2; l++)
151 put_component(i, j, k, l, lcomp);
190 _row_dofs = xrow_dofs;
202 fiber_bundle::t4_e2_lite::
218 fiber_bundle::t4_e2_lite::
293 require(precondition_of(e2_lite::static_tp_prototype(xp)));
297 const tp_lite& result = e2_lite::static_tp_prototype(xp);
301 ensure(postcondition_of(e2_lite::static_tp_prototype(xp)));
314 require(precondition_of(e2_lite::static_atp_prototype(xp)));
318 const atp_lite& result = e2_lite::static_atp_prototype(xp);
322 ensure(postcondition_of(e2_lite::static_atp_prototype(xp)));
335 require(precondition_of(e2_lite::static_stp_prototype(xp)));
339 const stp_lite& result = e2_lite::static_stp_prototype(xp);
343 ensure(postcondition_of(e2_lite::static_stp_prototype(xp)));
380 const string& result = static_class_name();
384 ensure(!result.empty());
399 static const string result(
"t4_e2_lite");
403 ensure(!result.empty());
425 ensure(is_same_type(*result));
449 require(&xother != 0);
455 bool result =
dynamic_cast<const t4_e2_lite*
>(&xother) != 0;
468 if(invariant_check())
472 disable_invariant_check();
476 invariance(t4_lite::invariant());
482 enable_invariant_check();
528 static const poset_path result(standard_schema_poset_name(),
"t4_e2_schema");
549 string lcomp_names[16] = {
550 "xxxx",
"xxxy",
"xxyx",
"xxyy",
"xyxx",
"xyxy",
"xyyx",
"xyyy",
551 "yxxx",
"yxxy",
"yxyx",
"yxyy",
"yyxx",
"yyxy",
"yyyx",
"yyyy"};
554 for(
int i=0; i<16; ++i)
556 los << lcomp_names[i] <<
" DOUBLE false ";
559 string lmember_names = los.str();
562 standard_schema_path().member_name(),
563 t4::standard_schema_path(),
592 require(!xhost_path.
empty());
595 require(xschema_path.
full());
597 require(schema_poset_member::conforms_to(xns, xschema_path, standard_schema_path()));
598 require(schema_poset_member::row_dof_ct(xns, xschema_path, xauto_access) == 16);
605 require(host_type::d(xns, xschema_path, xauto_access) == host_type::d(xns, 4, xvector_space_path, xauto_access));
610 host_type::new_table(xns, xhost_path, xschema_path, 4, xvector_space_path, xauto_access);
614 ensure(xns.
owns(result, xauto_access));
615 ensure(result.
path(
true) == xhost_path);
617 ensure(result.
schema(
true).
path(xauto_access) == xschema_path);
620 ensure(result.
d(
true) == 16);
622 ensure(result.
p(
true) == 4);
623 ensure(result.
dd(
true) == 2);
642 require(xsuffix.empty() || poset_path::is_valid_name(xsuffix));
643 require(standard_host_is_available<t4_e2>(xns, xsuffix, xauto_access));
653 poset_path lvector_space_path = vector_space_type::standard_host(xns, xsuffix, xauto_access).
path(
true);
655 poset_path lpath(standard_host_path<t4_e2>(xsuffix));
664 result_ptr = &new_host(xns, lpath, standard_schema_path(), lvector_space_path, xauto_access);
671 ensure(xns.
owns(result, xauto_access));
672 ensure(result.
path(
true) == standard_host_path<t4_e2>(xsuffix));
674 ensure(result.
schema(
true).
path(xauto_access) == standard_schema_path());
677 ensure(result.
d(
true) == 16);
678 ensure(result.
scalar_space_path(
true) == standard_host_path<vector_space_type::scalar_type>(xsuffix) );
679 ensure(result.
p(
true) == 4);
680 ensure(result.
dd(
true) == 2);
681 ensure(result.
vector_space_path(
true) == standard_host_path<vector_space_type>(xsuffix) );
725 attach_to_state(&xother);
743 require(is_ancestor_of(&xother));
744 require(precondition_of(attach_to_state(&xother)));
748 attach_to_state(&xother);
752 ensure(postcondition_of(attach_to_state(&xother)));
766 require(precondition_of(attach_to_state(&xother)));
770 attach_to_state(&xother);
774 ensure(postcondition_of(attach_to_state(&xother)));
837 require(precondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
841 new_jim_state(xhost, 0,
false, xauto_access);
845 ensure(postcondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
860 require(precondition_of(new_jim_state(&xhost, 0,
false, xauto_access)));
864 new_jim_state(&xhost, 0,
false, xauto_access);
880 ensure(postcondition_of(new_jim_state(&xhost, 0,
false, xauto_access)));
893 require(state_is_read_write_accessible());
901 ensure_for_all(i, 0, d(), component(i) == xrdt.
components[i]);
920 attach_to_state(xhost, xhub_id);
925 ensure(is_attached());
927 ensure(index() == xhub_id);
941 attach_to_state(xhost, xid.
hub_pod());
946 ensure(is_attached());
948 ensure(index() ==~ xid);
959 require(!xname.empty());
964 attach_to_state(xhost, xname);
969 ensure(is_attached());
971 ensure(name() == xname);
975 fiber_bundle::t4_e2::
980 require(state_is_read_write_accessible());
993 fiber_bundle::t4_e2::
998 require(state_is_read_accessible());
1061 require(precondition_of(e2::new_tp(vector_space(xauto_access), xp)));
1065 tp* result = e2::new_tp(vector_space(xauto_access), xp);
1069 ensure(postcondition_of(e2::new_tp(vector_space(xauto_access), xp)));
1082 require(precondition_of(e2::new_atp(vector_space(xauto_access), xp)));
1086 atp* result = e2::new_atp(vector_space(xauto_access), xp);
1090 ensure(postcondition_of(e2::new_atp(vector_space(xauto_access), xp)));
1103 require(precondition_of(e2::new_stp(vector_space(xauto_access), xp)));
1107 stp* result = e2::new_stp(vector_space(xauto_access), xp);
1111 ensure(postcondition_of(e2::new_stp(vector_space(xauto_access), xp)));
1137 const string& result = static_class_name();
1141 ensure(!result.empty());
1156 static const string result(
"t4_e2");
1160 ensure(!result.empty());
1182 ensure(result != 0);
1211 if(invariant_check())
1215 disable_invariant_check();
1219 invariance(t4::invariant());
1223 invariance(state_is_read_accessible() ? dd() == 2 :
true);
1227 enable_invariant_check();
1241 require(xother != 0);
1247 bool result =
dynamic_cast<const t4_e2*
>(xother) != 0;
1251 ensure(invariant());
1268 #include "SheafSystem/st4_e2.h" 1283 for(
int i=0; i<ldd; ++i)
1285 for(
int j=i; j<ldd; ++j)
1287 for(
int k=j; k<ldd; ++k)
1289 for(
int l=k; l<ldd; ++l)
1325 ensure(unexecutable(
"xresult is equal to the symmetric part of x0"));
1352 for(
int i=0; i<ldd; ++i)
1354 for(
int j=i; j<ldd; ++j)
1356 for(
int k=j; k<ldd; ++k)
1358 for(
int l=k; l<ldd; ++l)
1406 ensure(unexecutable(
"xresult is equal to the antisymmetric part of x0"));
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 ...
virtual ~t4_e2_lite()
Destructor.
virtual void put_component(int xi, int xj, int xk, int xl, value_type xvalue)
Sets the component with indices xi, xj, xk, xl to xvalue.
virtual void * row_dofs()
The row dofs for this instance (mutable version).
bool invariant() const
Class invariant.
virtual void put_component(int xi, int xj, int xk, int xl, value_type xvalue)
Sets the component with indices xi, xj, xk, xl to xvalue.
A symmetric tensor of degree p over an abstract vector space.
vd_value_type value_type
The type of component in the fiber; the scalar type in the fiber vector space.
virtual int dd() const
Dimension of the underlying vector space.
bool full() const
True if both poset name and member name are not empty.
void put_variance(const tensor_variance &xvariance, bool xauto_access)
Sets the variance to xvariance.
An antisymmetric tensor of degree p.
static host_type & standard_host(namespace_type &xns, const std::string &xsuffix, bool xauto_access)
The host with path standard_host_path<t4_e2>(xsuffix). Returns the host if it already exists...
T components[16]
The dofs are in the following order:
virtual bool is_ancestor_of(const any *other) const
Conformance test; true if other conforms to this.
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 const tp_lite & tp_prototype(int xp) const
Prototype for general tensors of degree xp over this vector space.
virtual value_type component(int xi, int xj, int xk, int xl) const
The component with indices xi, xj, xk, xl.
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 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...
poset_path vector_space_path() const
The path of the underlying vector space.
t4_e2_lite & operator=(const t4_e2_lite &xother)
Assignment operator.
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...
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...
A client handle for a general, abstract partially order set.
SHEAF_DLL_SPEC void sym(const t2_lite &x0, st2_lite &xresult)
The symmetric part of tensor x0 (pre-allocated version for volatile types).
A path defined by a poset name and a member name separated by a forward slash ('/'). For example: "cell_definitions/triangle".
A tensor of degree 4 over a Euclidean vector space of dimension 2 (persistent version).
virtual void get_read_access() const
Get read access to the state associated with this.
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.
virtual const std::string & class_name() const
The name of this class.
T::row_dofs_type & row_dofs(T &x0)
The row dofs pod type for x0 (mutable version).
virtual volatile_type * lite_type() const
Virtual conversion to the associated volatile type.
bool is_mixed() const
True if and only if there exists at least one index that is covariant and at least one that is contra...
static const std::string & static_class_name()
The name of this class.
An antisymmetric tensor of degree p over an abstract vector space (volatile version).
A general tensor of "degree" p and given "variance" over an abstract vector space.
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...
Abstract base class with useful features for all volatile objects.
Abstract base class with useful features for all objects.
t4_e2()
Default constructor.
virtual schema_poset_member & schema()
The schema for this poset (mutable version).
virtual t4_e2_lite * clone() const
Virtual constructor, makes a new instance of the same type as this.
virtual const std::string & class_name() const
The name of this class.
A client handle for a mutable partially ordered set.
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...
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 void detach_from_state()
Detach this handle from its state, if any.
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.
virtual value_type component(int xi, int xj, int xk, int xl) const
The component with indices xi, xj, xk, xl.
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.
row_dofs_type _row_dofs
Row_dofs_type.
virtual atp * new_atp(int xp, bool xauto_access) const
Virtual constructor for antisymmetric tensors of degree xp over vector space xvector_space.
A symmetric rank 3 tensor over a 3D Euclidean vector space (persistent version).
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...
static const poset_path & standard_schema_path()
The path to the standard schema for this class.
A general tensor of degree p over an abstract vector space (volatile version). Volatile version does ...
virtual t4_e2 * clone() const
Make a new handle, no state instance of current.
virtual t4_e2 & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
static void make_standard_schema(namespace_poset &xns)
Creates the standard schema for this class in namespace xns.
bool contains_poset(pod_index_type xhub_id, bool xauto_access=true) const
True if this contains a poset with hub id xhub_id..
A symmetric rank 4 tensor over a Euclidean vector space of dimension 3. (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 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.
virtual const stp_lite & stp_prototype(int xp) const
Prototype for symmetric tensors of degree xp over this vector space.
A tensor of degree 4 over an abstract vector space (volatile version).
virtual value_type component(int xi, int xj, int xk, int xl) const
The component with indices xi, xj, xk, xl.
poset_path scalar_space_path() const
The path of the underlying space of scalars.
virtual const atp_lite & atp_prototype(int xp) const
Prototype for antisymmetric tensors of degree xp over this vector space.
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...
An abstract vector space viewed as an antisymmetric tensor space of degree 1.
static int d(const namespace_poset &xns, const poset_path &xschema_path, bool xauto_access)
The tensor dimension implied by the schema specified by xschema_path.
static int factor_ct(int xd)
Factor_ct() as a function of dimension xd.
virtual tp * new_tp(int xp, bool xauto_access) const
Virtual constructor for general tensors of degree xp over vector space xvector_space.
int_type pod_index_type
The plain old data index type.
t4_e2_lite()
Default constructor.
int dd() const
The dimension of the underlying ("domain") vector space.
virtual bool invariant() const
Class invariant.
virtual stp * new_stp(int xp, bool xauto_access) const
Virtual constructor for symmetric tensors of degree xp over vector space xvector_space.
virtual int dd() const
Dimension of the underlying vector space.
virtual tensor_variance variance(bool xauto_access) const
The variance.
static const std::string & static_class_name()
The name of this class.
virtual const volatile_type & lite_prototype() const
Virtual constructor for the associated volatile type.
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.
A symmetric tensor of degree p over an abstract vector space (volatile version).
Namespace for the fiber_bundles component of the sheaf system.
virtual bool is_ancestor_of(const any_lite &xother) const
Conformance test; true if other conforms to this.
virtual ~t4_e2()
Destructor.
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.
double vd_value_type
The type of component in the fiber; the scalar type in the fiber vector space.
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.