21 #include "SheafSystem/at2_e3.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/wsv_block.h" 134 _row_dofs = xrow_dofs;
182 fiber_bundle::at2_e3_lite::
198 fiber_bundle::at2_e3_lite::
214 fiber_bundle::at2_e3_lite::
230 fiber_bundle::at2_e3_lite::
253 put_components(xy, xz, yz);
270 put_component(0, xy_comp);
271 put_component(1, xz_comp);
272 put_component(2, yz_comp);
355 require(precondition_of(e3_lite::static_tp_prototype(xp)));
359 const tp_lite& result = e3_lite::static_tp_prototype(xp);
363 ensure(postcondition_of(e3_lite::static_tp_prototype(xp)));
376 require(precondition_of(e3_lite::static_atp_prototype(xp)));
380 const atp_lite& result = e3_lite::static_atp_prototype(xp);
384 ensure(postcondition_of(e3_lite::static_atp_prototype(xp)));
397 require(precondition_of(e3_lite::static_stp_prototype(xp)));
401 const stp_lite& result = e3_lite::static_stp_prototype(xp);
405 ensure(postcondition_of(e3_lite::static_stp_prototype(xp)));
442 const string& result = static_class_name();
446 ensure(!result.empty());
461 static const string result(
"at2_e3_lite");
465 ensure(!result.empty());
487 ensure(is_same_type(*result));
511 require(&xother != 0);
517 bool result =
dynamic_cast<const at2_e3_lite*
>(&xother) != 0;
530 if(invariant_check())
534 disable_invariant_check();
538 invariance(at2_lite::invariant());
544 enable_invariant_check();
590 static const poset_path result(standard_schema_poset_name(),
"at2_e3_schema");
612 string lmember_names =
"xy DOUBLE false ";
613 lmember_names +=
"xz DOUBLE false ";
614 lmember_names +=
"yz DOUBLE false";
617 standard_schema_path().member_name(),
618 at2::standard_schema_path(),
647 require(!xhost_path.
empty());
650 require(xschema_path.
full());
652 require(schema_poset_member::conforms_to(xns, xschema_path, standard_schema_path()));
653 require(schema_poset_member::row_dof_ct(xns, xschema_path, xauto_access) == 3);
663 host_type::new_table(xns, xhost_path, xschema_path, 2, xvector_space_path, xauto_access);
667 ensure(xns.
owns(result, xauto_access));
668 ensure(result.path(
true) == xhost_path);
669 ensure(result.state_is_not_read_accessible());
670 ensure(result.schema(
true).path(xauto_access) == xschema_path);
672 ensure(result.factor_ct(
true) == 3);
673 ensure(result.d(
true) == 3);
675 ensure(result.p(
true) == 2);
676 ensure(result.dd(
true) == 3);
677 ensure(result.vector_space_path(
true) == xvector_space_path);
695 require(xsuffix.empty() || poset_path::is_valid_name(xsuffix));
696 require(standard_host_is_available<at2_e3>(xns, xsuffix, xauto_access));
706 poset_path lvector_space_path = vector_space_type::standard_host(xns, xsuffix, xauto_access).
path(
true);
708 poset_path lpath(standard_host_path<at2_e3>(xsuffix));
717 result_ptr = &new_host(xns, lpath, standard_schema_path(), lvector_space_path, xauto_access);
724 ensure(xns.
owns(result, xauto_access));
725 ensure(result.
path(
true) == standard_host_path<at2_e3>(xsuffix));
727 ensure(result.
schema(
true).
path(xauto_access) == standard_schema_path());
730 ensure(result.
d(
true) == 3);
731 ensure(result.
scalar_space_path(
true) == standard_host_path<vector_space_type::scalar_type>(xsuffix) );
732 ensure(result.
p(
true) == 2);
733 ensure(result.
dd(
true) == 3);
734 ensure(result.
vector_space_path(
true) == standard_host_path<vector_space_type>(xsuffix) );
777 attach_to_state(xhost, xhub_id);
783 ensure(index() == xhub_id);
784 ensure(is_attached());
798 attach_to_state(xhost, xid.
hub_pod());
804 ensure(index() ==~ xid);
805 ensure(is_attached());
816 require(!xname.empty());
821 attach_to_state(xhost, xname);
827 ensure(name() == xname);
828 ensure(is_attached());
838 require(xother != 0);
842 attach_to_state(xother);
847 ensure(is_attached());
848 ensure(is_same_state(xother));
858 require(precondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
862 new_jim_state(xhost, 0,
false, xauto_access);
866 ensure(postcondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
881 require(precondition_of(new_jim_state(&xhost, 0,
false, xauto_access)));
885 new_jim_state(&xhost, 0,
false, xauto_access);
901 ensure(postcondition_of(new_jim_state(&xhost, 0,
false, xauto_access)));
914 require(state_is_read_write_accessible());
922 ensure_for_all(i, 0, d(), component(i) == xrdt.
components[i]);
937 require(is_ancestor_of(&xother));
938 require(precondition_of(attach_to_state(&xother)));
942 attach_to_state(&xother);
946 ensure(postcondition_of(attach_to_state(&xother)));
960 require(precondition_of(attach_to_state(&xother)));
964 attach_to_state(&xother);
968 ensure(postcondition_of(attach_to_state(&xother)));
1032 require(state_is_read_write_accessible());
1036 put_component(0, xy_comp);
1037 put_component(1, xz_comp);
1038 put_component(2, yz_comp);
1042 ensure(invariant());
1052 fiber_bundle::at2_e3::
1068 fiber_bundle::at2_e3::
1140 require(precondition_of(e3::new_tp(vector_space(xauto_access), xp)));
1144 tp* result = e3::new_tp(vector_space(xauto_access), xp);
1148 ensure(postcondition_of(e3::new_tp(vector_space(xauto_access), xp)));
1161 require(precondition_of(e3::new_atp(vector_space(xauto_access), xp)));
1165 atp* result = e3::new_atp(vector_space(xauto_access), xp);
1169 ensure(postcondition_of(e3::new_atp(vector_space(xauto_access), xp)));
1182 require(precondition_of(e3::new_stp(vector_space(xauto_access), xp)));
1186 stp* result = e3::new_stp(vector_space(xauto_access), xp);
1190 ensure(postcondition_of(e3::new_stp(vector_space(xauto_access), xp)));
1212 const string& result = static_class_name();
1216 ensure(!result.empty());
1231 static const string result(
"at2_e3");
1235 ensure(!result.empty());
1257 ensure(result != 0);
1284 require(xother != 0);
1288 bool result =
dynamic_cast<const at2_e3*
>(xother) != 0;
1308 if(invariant_check())
1312 disable_invariant_check();
1316 invariance(at2::invariant());
1320 invariance(is_attached() ? (p() == 2) :
true);
1321 invariance(is_attached() ? (dd() == 3) :
true);
1325 enable_invariant_check();
1342 #include "SheafSystem/at0.h" 1663 define_old_variable(
bool old_xresult_is_p_form = xresult.
is_p_form(
false));
1685 ensure(xresult.
is_p_form(xauto_access) == old_xresult_is_p_form);
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 ...
static host_type & standard_host(namespace_type &xns, const std::string &xsuffix, bool xauto_access)
The host with path standard_host_path<at2_e3>(xsuffix). Returns the host if it already exists...
virtual void * row_dofs()
The row dofs for this instance (mutable version).
virtual at2_e3 * clone() const
Make a new handle, no state instance of current.
A symmetric tensor of degree p over an abstract vector space.
virtual void put_component(int xrow, int xcolumn, value_type xcomp)
Sets value of a component in a specified row and column.
bool full() const
True if both poset name and member name are not empty.
virtual atp * new_atp(int xp, bool xauto_access) const
Virtual constructor for antisymmetric tensors of degree xp over vector space xvector_space.
virtual const tp_lite & tp_prototype(int xp) const
Prototype for general tensors of degree xp over this vector space.
virtual void put_components(const value_type &xy_comp, const value_type &xz_comp, const value_type &yz_comp)
Set values of the components to the given arguments.
An antisymmetric tensor of degree p.
void put_is_p_vector(bool xauto_access)
Sets is_p_vector to true; synonym for put_is_contravariant(xauto_access).
Euclidean vector space of dimension 3 (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...
poset_path path(bool xauto_access=true) const
A path to this component.
An antisymmetric rank 2 tensor over a Euclidean vector space of dimension 3. (persistent version)...
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...
at2_e3 & operator=(const row_dofs_type &xrdt)
Assignment to an instance of the associated row dofs type.
poset_path vector_space_path() const
The path of the underlying vector space.
virtual const atp_lite & atp_prototype(int xp) const
Prototype for antisymmetric tensors of degree xp over this 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...
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...
static void make_standard_schema(namespace_poset &xns)
Creates the standard schema for this class in namespace xns.
A client handle for a general, abstract partially order set.
A path defined by a poset name and a member name separated by a forward slash ('/'). For example: "cell_definitions/triangle".
row_dofs_type _row_dofs
Row_dofs_type.
value_type component(int xindex) const
The xindex-th component.
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.
Euclidean vector space of dimension 3 (persistent version).
T::row_dofs_type & row_dofs(T &x0)
The row dofs pod type for x0 (mutable version).
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.
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 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.
static const std::string & static_class_name()
The name of this class.
SHEAF_DLL_SPEC void wedge(const e2 &x0, const e2 &x1, at2_e2 &xresult, bool xauto_access)
The exterior (wedge) product of two antisymmetric tensors (pre-allocated version for persistent types...
T components[3]
The xy, xz, yz dofs.
SHEAF_DLL_SPEC void hook(const e2 &x0, const e2 &x1, at0 &xresult, bool xauto_access)
The interior (hook) product of two antisymmetric tensors (pre-allocated version for persistent types)...
at2_e3_row_dofs_type< double >::matrix_type matrix_type
The type of the associated matrix.
bool invariant() const
Class invariant.
virtual schema_poset_member & schema()
The schema for this poset (mutable version).
virtual ~at2_e3_lite()
Destructor.
An abstract antisymmetric tensor space of degree p.
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.
virtual const stp_lite & stp_prototype(int xp) const
Prototype for symmetric tensors of degree xp over this vector space.
An index within the external ("client") scope of a given id space.
A scalar viewed as an antisymmetric tensor of degree 0. As the degree is 0 there is nothing to be sym...
bool contains_path(const poset_path &xpath, bool xauto_access=true) const
True if this contains the poset or poset member specified by xpath.
bool invariant() const
Class invariant.
bool is_p_form(bool xauto_access) const
True if this is a p-form; synonym for is_covariant(xauto_access).
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 p(int xd, int xdd) const
Tensor degree as a function of tensor dimension xd and domain dimension xdd.
virtual void put_components(dof_type xy_comp, dof_type xz_comp, dof_type yz_comp)
Sets values of the components to the given arguments.
virtual value_type component(int xindex) const
The value of the xi-th component.
at2_e3_lite & operator=(const at2_e3_lite &xother)
Assignment operator.
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 is_ancestor_of(const any *xother) const
True if xother conforms to current.
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.
virtual bool is_ancestor_of(const any_lite &xother) const
Conformance test; true if other conforms to this.
poset_path scalar_space_path() const
The path of the underlying space of scalars.
virtual const volatile_type & lite_prototype() const
Virtual constructor for the associated volatile type.
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...
void put_component(int xindex, value_type xcomp)
Set the xindex-th component to xcomp.
An abstract vector space viewed as an antisymmetric tensor space of degree 1.
virtual void put_component(value_type xcomp)
Set value of (the only) component to xcomp.
virtual volatile_type * lite_type() const
Virtual conversion to the associated volatile type.
static int factor_ct(int xd)
Factor_ct() as a function of dimension xd.
at2_e3_lite()
Default constructor.
int_type pod_index_type
The plain old data index type.
vd_value_type value_type
The type of component in the fiber; the scalar type in the fiber vector space.
int dd() const
The dimension of the underlying ("domain") vector space.
virtual tp * new_tp(int xp, bool xauto_access) const
Virtual constructor for general tensors of degree xp over vector space xvector_space.
virtual int dd() const
Dimension of the underlying vector space.
An antisymmetric rank 2 tensor over a Euclidean vector space of dimension 3. (volatile version)...
A general antisymmetric tensor of degree 2 over an abstract vector space (volatile version)...
static const std::string & static_class_name()
The name of this class.
virtual value_type component(int xrow, int xcolumn) const
The value of the component in a specified row and column.
An abstract client handle for a member of a poset.
virtual at2_e3_lite * clone() const
Virtual constructor, makes a new instance of the same type as this.
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...
value_type component(int xrow, int xcolumn) const
The component with row index xrow and column index xcolumn.
virtual void put_component(int xindex, value_type xvalue)
Sets the value of the xindex-th component to xvalue.
void put_is_p_form(bool xauto_access)
Sets is_p_form to true; synonym for put_is_covariant(xauto_access).
void put_component(int xrow, int xcolumn, value_type xvalue)
Sets the component with row index xrow and column index xcolumn to xvalue.
A symmetric tensor of degree p over an abstract vector space (volatile version).
virtual stp * new_stp(int xp, bool xauto_access) const
Virtual constructor for symmetric tensors of degree xp over vector space xvector_space.
Namespace for the fiber_bundles component of the sheaf system.
static const poset_path & standard_schema_path()
The path to the standard schema for this class.
virtual const std::string & class_name() const
The name of this class.
SHEAF_DLL_SPEC void star(const at2_e2 &x0, at0 &xresult, bool xauto_access)
The Hodge star operator for antisymmetric tensors (pre-allocated version persistent types)...
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...
virtual const std::string & class_name() const
The name of this class.
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.
at2_e3()
Default constructor.
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.