21 #include "SheafSystem/met_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/stp_space.h" 28 #include "SheafSystem/fiber_bundles_namespace.h" 29 #include "SheafSystem/schema_poset_member.h" 30 #include "SheafSystem/wsv_block.h" 100 ensure_for_all(i, 0, d(), component(i) == xother[i]);
143 _row_dofs = xrow_dofs;
192 fiber_bundle::met_e2_lite::
208 fiber_bundle::met_e2_lite::
224 fiber_bundle::met_e2_lite::
240 fiber_bundle::met_e2_lite::
263 put_components(xx, xy, yy);
285 put_component(0, xx_comp);
286 put_component(1, xy_comp);
287 put_component(2, yy_comp);
386 require(precondition_of(e2_lite::static_tp_prototype(xp)));
390 const tp_lite& result = e2_lite::static_tp_prototype(xp);
394 ensure(postcondition_of(e2_lite::static_tp_prototype(xp)));
407 require(precondition_of(e2_lite::static_atp_prototype(xp)));
411 const atp_lite& result = e2_lite::static_atp_prototype(xp);
415 ensure(postcondition_of(e2_lite::static_atp_prototype(xp)));
428 require(precondition_of(e2_lite::static_stp_prototype(xp)));
432 const stp_lite& result = e2_lite::static_stp_prototype(xp);
436 ensure(postcondition_of(e2_lite::static_stp_prototype(xp)));
468 const string& result = static_class_name();
472 ensure(!result.empty());
487 static const string result(
"met_e2_lite");
491 ensure(!result.empty());
513 ensure(is_same_type(*result));
537 require(&xother != 0);
543 bool result =
dynamic_cast<const met_e2_lite*
>(&xother) != 0;
556 if(invariant_check())
560 disable_invariant_check();
564 invariance(met_ed_lite::invariant());
570 enable_invariant_check();
616 static const poset_path result(standard_schema_poset_name(),
"met_e2_schema");
637 string lmember_names =
"xx DOUBLE false ";
638 lmember_names +=
"xy DOUBLE false ";
639 lmember_names +=
"yy DOUBLE false";
642 standard_schema_path().member_name(),
643 met_ed::standard_schema_path(),
672 require(!xhost_path.
empty());
675 require(xschema_path.
full());
677 require(schema_poset_member::conforms_to(xns, xschema_path, standard_schema_path()));
678 require(schema_poset_member::row_dof_ct(xns, xschema_path, xauto_access) == 3);
688 host_type::new_table(xns, xhost_path, xschema_path, 2, xvector_space_path, xauto_access);
692 ensure(xns.
owns(result, xauto_access));
693 ensure(result.path(
true) == xhost_path);
694 ensure(result.state_is_not_read_accessible());
695 ensure(result.schema(
true).path(xauto_access) == xschema_path);
697 ensure(result.factor_ct(
true) == 3);
698 ensure(result.d(
true) == 3);
700 ensure(result.p(
true) == 2);
701 ensure(result.dd(
true) == 2);
702 ensure(result.vector_space_path(
true) == xvector_space_path);
720 require(xsuffix.empty() || poset_path::is_valid_name(xsuffix));
721 require(standard_host_is_available<met_e2>(xns, xsuffix, xauto_access));
731 poset_path lvector_space_path = vector_space_type::standard_host(xns, xsuffix, xauto_access).
path(
true);
733 poset_path lpath(standard_host_path<met_e2>(xsuffix));
742 result_ptr = &new_host(xns, lpath, standard_schema_path(), lvector_space_path, xauto_access);
749 ensure(xns.
owns(result, xauto_access));
750 ensure(result.
path(
true) == standard_host_path<met_e2>(xsuffix));
752 ensure(result.
schema(
true).
path(xauto_access) == standard_schema_path());
755 ensure(result.
d(
true) == 3);
756 ensure(result.
scalar_space_path(
true) == standard_host_path<vector_space_type::scalar_type>(xsuffix) );
757 ensure(result.
p(
true) == 2);
758 ensure(result.
dd(
true) == 2);
759 ensure(result.
vector_space_path(
true) == standard_host_path<vector_space_type>(xsuffix) );
802 attach_to_state(xhost, xhub_id);
808 ensure(index() == xhub_id);
809 ensure(is_attached());
824 attach_to_state(xhost, xid.
hub_pod());
830 ensure(index() ==~ xid);
831 ensure(is_attached());
842 require(!xname.empty());
847 attach_to_state(xhost, xname);
853 ensure(name() == xname);
854 ensure(is_attached());
864 require(xother != 0);
868 attach_to_state(xother);
873 ensure(is_attached());
874 ensure(is_same_state(xother));
884 require(precondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
888 new_jim_state(xhost, 0,
false, xauto_access);
892 ensure(postcondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
907 require(precondition_of(new_jim_state(&xhost, 0,
false, xauto_access)));
911 new_jim_state(&xhost, 0,
false, xauto_access);
927 ensure(postcondition_of(new_jim_state(&xhost, 0,
false, xauto_access)));
940 require(state_is_read_write_accessible());
948 ensure_for_all(i, 0, d(), component(i) == xrdt.
components[i]);
963 require(is_ancestor_of(&xother));
964 require(precondition_of(attach_to_state(&xother)));
968 attach_to_state(&xother);
972 ensure(postcondition_of(attach_to_state(&xother)));
986 require(precondition_of(attach_to_state(&xother)));
990 attach_to_state(&xother);
994 ensure(postcondition_of(attach_to_state(&xother)));
1051 fiber_bundle::met_e2::
1056 require(state_is_read_write_accessible());
1069 fiber_bundle::met_e2::
1074 require(state_is_read_accessible());
1170 require(precondition_of(e2::new_tp(vector_space(xauto_access), xp)));
1174 tp* result = e2::new_tp(vector_space(xauto_access), xp);
1178 ensure(postcondition_of(e2::new_tp(vector_space(xauto_access), xp)));
1191 require(precondition_of(e2::new_atp(vector_space(xauto_access), xp)));
1195 atp* result = e2::new_atp(vector_space(xauto_access), xp);
1199 ensure(postcondition_of(e2::new_atp(vector_space(xauto_access), xp)));
1212 require(precondition_of(e2::new_stp(vector_space(xauto_access), xp)));
1216 stp* result = e2::new_stp(vector_space(xauto_access), xp);
1220 ensure(postcondition_of(e2::new_stp(vector_space(xauto_access), xp)));
1246 const string& result = static_class_name();
1250 ensure(!result.empty());
1265 static const string result(
"met_e2");
1269 ensure(!result.empty());
1291 ensure(result != 0);
1318 require(xother != 0);
1325 bool result =
dynamic_cast<const met_e2*
>(xother) != 0;
1349 invariance(met_ed::invariant());
1351 if (invariant_check())
1355 disable_invariant_check();
1359 invariance(is_attached() ? (d() == 3) :
true);
1363 enable_invariant_check();
1368 ensure(is_derived_query);
1397 require(unexecutable(
"xmetric.is_contravariant())"));
1398 require(unexecutable(
"xcovector.is_covariant())"));
1399 require(unexecutable(
"xresult.is_contravariant())"));
1417 value_type comp0 = xcovector.
component(0);
1418 value_type comp1 = xcovector.
component(1);
1420 value_type result_comp;
1422 result_comp = m00*comp0 + m01*comp1;
1425 result_comp = m10*comp0 + m11*comp1;
1443 require(precondition_of(
raise(xmetric, xcovector, *result)));
1449 raise(xmetric, xcovector, *result);
1453 ensure(result != 0);
1454 ensure(postcondition_of(
raise(xmetric, xcovector, *result)));
1468 require(unexecutable(
"xmetric.is_covariant())"));
1469 require(unexecutable(
"xcovector.is_contravariant())"));
1470 require(unexecutable(
"xresult.is_covariant())"));
1488 value_type comp0 = xvector.
component(0);
1489 value_type comp1 = xvector.
component(1);
1491 value_type result_comp;
1493 result_comp = m00*comp0 + m10*comp1;
1496 result_comp = m01*comp0 + m11*comp1;
1514 require(precondition_of(
lower(xmetric, xvector, *result)));
1520 lower(xmetric, xvector, *result);
1524 ensure(result != 0);
1525 ensure(postcondition_of(
lower(xmetric, xvector, *result)));
1543 require(xcovector.
d(xauto_access) == xmetric.
dd(xauto_access));
1544 require(xresult.
d(xauto_access) == xmetric.
dd(xauto_access));
1572 value_type comp0 = xcovector.
component(0);
1573 value_type comp1 = xcovector.
component(1);
1575 value_type result_comp;
1577 result_comp = m00*comp0 + m01*comp1;
1580 result_comp = m10*comp0 + m11*comp1;
1617 require(xvector.
d(xauto_access) == xmetric.
dd(xauto_access));
1618 require(xresult.
d(xauto_access) == xmetric.
dd(xauto_access));
1642 value_type m10 = m01;
1645 value_type comp0 = xvector.
component(0);
1646 value_type comp1 = xvector.
component(1);
1648 value_type result_comp;
1650 result_comp = m00*comp0 + m10*comp1;
1653 result_comp = m01*comp0 + m11*comp1;
SHEAF_DLL_SPEC void lower(const met &xmetric, const ed &xvector, ed &xresult, bool xauto_access)
Lower vector (pre-allocated version for persistent 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...
virtual met_e2 * clone() const
Make a new handle, no state instance of current.
virtual bool is_contravariant(bool xauto_access) const
True if and only if all tensor index positions are contravariant.
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 const tp_lite & tp_prototype(int xp) const
Prototype for general tensors of degree xp over this vector space.
A symmetric tensor of degree p over an abstract 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.
virtual const volatile_type & lite_prototype() const
Virtual constructor for the associated volatile type.
bool invariant() const
Class invariant.
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).
vd_value_type value_type
The type of component in the fiber; the scalar type in the fiber vector space.
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...
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...
Euclidean vector space of dimension 2 (persistent version).
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.
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.
A path defined by a poset name and a member name separated by a forward slash ('/'). For example: "cell_definitions/triangle".
value_type component(int xindex) const
The xindex-th component.
met_e2_lite & operator=(const met_e2_lite &xother)
Assignment operator.
virtual value_type component(int xrow, int xcolumn) const
The value of the component in a specified row and column.
static host_type & standard_host(namespace_type &xns, const std::string &xsuffix, bool xauto_access)
The host with path standard_host_path<met_e2>(xsuffix). Returns the host if it already exists...
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.
A metric tensor over an abstract vector space (volatile version).
T::row_dofs_type & row_dofs(T &x0)
The row dofs pod type for x0 (mutable version).
virtual stp * new_stp(int xp, bool xauto_access) const
Virtual constructor for symmetric tensors of degree xp over vector space xvector_space.
virtual bool is_covariant(bool xauto_access) const
True if and only if all tensor index positions are covariant.
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.
virtual void * row_dofs()
The row dofs for this instance (mutable version).
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.
met_e2 & operator=(const row_dofs_type &xrdt)
Assignment to an instance of the associated row dofs type.
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).
A metric tensor over a 2 dimensional Euclidean vector space (persistent version). ...
row_dofs_type _row_dofs
Row_dofs_type.
met_e2_row_dofs_type< double >::matrix_type matrix_type
The type of the associated matrix.
virtual const std::string & class_name() const
The name of this class.
virtual const atp_lite & atp_prototype(int xp) const
Prototype for antisymmetric tensors of degree xp over this vector space.
Euclidean vector space of dimension 2 (volatile version).
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...
met_e2()
Default constructor.
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 invariant() const
Class invariant.
T components[3]
The xx, xy and yy dofs.
met_e2_lite()
Default constructor.
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 is_p_form(bool xauto_access) const
True if this is a p-form; synonym for is_covariant(xauto_access).
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 met_e2_lite * clone() const
Virtual constructor, makes a new instance of the same type as this.
virtual value_type component(int xindex) const
The value of the xi-th component.
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 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.
static const std::string & static_class_name()
The name of this class.
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 volatile_type * lite_type() const
Virtual conversion to the associated volatile type.
virtual const stp_lite & stp_prototype(int xp) const
Prototype for symmetric tensors of degree xp over this vector space.
static const std::string & static_class_name()
The name of this class.
static int factor_ct(int xd)
Factor_ct() as a function of dimension xd.
int_type pod_index_type
The plain old data index type.
virtual bool is_ancestor_of(const any_lite &xother) const
Conformance test; true if other conforms to this.
vd_value_type value_type
The POD ("plain old data") type of scalar in the vector space of this.
static void make_standard_schema(namespace_poset &xns)
Creates the standard schema for this class in namespace xns.
int dd() const
The dimension of the underlying ("domain") vector space.
bool is_p_vector(bool xauto_access) const
True if this is a p-vector; synonym for is_contravariant(xauto_access).
virtual int d() const
Dimension of this as a vector space.
static const poset_path & standard_schema_path()
The path to the standard schema for this class.
An abstract client handle for a member of a poset.
virtual void put_components(const value_type &xx_comp, const value_type &xy_comp, const value_type &yy_comp)
Set values of the components to the given arguments.
virtual ~met_e2_lite()
Destructor.
std::string path() const
The full path as a string.
virtual atp * new_atp(int xp, bool xauto_access) const
Virtual constructor for antisymmetric tensors of degree xp over vector space xvector_space.
A metric tensor over a 2 dimensional Euclidean vector space (volatile version).
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).
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.
value_type component(int xrow, int xcolumn) const
The component with row index xrow and column index xcolumn.
bool is_ancestor_of(const any *xother) const
True if other conforms to current.
SHEAF_DLL_SPEC void raise(const met &xmetric, const ed &xcovector, ed &xresult, bool xauto_access)
Raise covector (pre-allocated version for persistent type).
virtual const std::string & class_name() const
The name of this class.
virtual int dd() const
Dimension of the underlying vector space.
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.
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.