22 #include "SheafSystem/sec_at2_e2.h" 24 #include "SheafSystem/assert_contract.h" 25 #include "SheafSystem/base_space_poset.h" 26 #include "SheafSystem/binary_section_space_schema_member.impl.h" 27 #include "SheafSystem/at1_space.h" 28 #include "SheafSystem/fiber_bundles_namespace.h" 29 #include "SheafSystem/index_space_iterator.h" 30 #include "SheafSystem/sec_at0.h" 31 #include "SheafSystem/sec_at0_space.h" 32 #include "SheafSystem/sec_at1_space.h" 33 #include "SheafSystem/sec_e2.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/at2_e2.h" 66 require(!xhost_path.
empty());
69 require(xschema_path.
full());
71 require(host_type::fiber_space_conforms<fiber_type::host_type>(xns, xschema_path, xauto_access));
75 require(host_type::same_vector_fiber_space(xns, xschema_path, xvector_space_path, xauto_access));
79 host_type& result = host_type::new_table(xns, xhost_path, xschema_path, xvector_space_path, xauto_access);
83 ensure(xns.
owns(result, xauto_access));
84 ensure(result.
path(
true) == xhost_path);
86 ensure(result.
schema(
true).
path(xauto_access) == xschema_path);
93 ensure(result.
p(
true) == 2);
108 const std::string& xsection_suffix,
109 const std::string& xfiber_suffix,
118 require(xbase_path.
full());
121 require(xrep_path.
empty() || xrep_path.
full());
124 require(xsection_suffix.empty() || poset_path::is_valid_name(xsection_suffix));
126 require(xfiber_suffix.empty() || poset_path::is_valid_name(xfiber_suffix));
128 require(standard_host_is_available<sec_at2_e2>(xns, xbase_path, xrep_path, xsection_suffix, xfiber_suffix, xauto_access));
129 require(fiber_type::standard_host_is_available<fiber_type>(xns, xfiber_suffix, xauto_access));
130 require(schema_type::standard_host_is_available<sec_at2_e2>(xns, xbase_path, xrep_path, xfiber_suffix, xauto_access));
134 poset_path lstd_path = standard_host_path<sec_at2_e2>(xbase_path, xrep_path, xsection_suffix, xfiber_suffix);
150 poset_path lrep_path = (!xrep_path.empty() ? xrep_path : standard_rep_path());
155 schema_type::standard_member<sec_at2_e2>(xns, xbase_path, lrep_path, xfiber_suffix, xauto_access);
160 vector_space_type::standard_host(xns, xbase_path, lrep_path, xsection_suffix, xfiber_suffix, xauto_access).
path(xauto_access);
164 lresult_ptr = &new_host(xns, lstd_path, lstd_schema_path, lvector_space_path, xauto_access);
171 ensure(xns.
owns(result, xauto_access));
172 ensure(result.
path(
true) == standard_host_path<sec_at2_e2>(xbase_path, xrep_path, xsection_suffix, xfiber_suffix));
174 ensure(result.
schema(
true).
path(xauto_access) ==
175 schema_type::standard_member_path<sec_at2_e2>(xbase_path, xrep_path, xfiber_suffix));
180 scalar_type::standard_host_path<scalar_type>(xbase_path, result.
rep().
path(xauto_access), xsection_suffix, xfiber_suffix));
182 ensure(result.
p(
true) == 2);
185 vector_space_type::standard_host_path<vector_space_type>(xbase_path, result.
rep().
path(xauto_access), xsection_suffix, xfiber_suffix));
227 attach_to_state(&xother);
233 ensure(is_same_state(&xother));
234 ensure(is_same_restriction(&xother));
241 int xbase_version,
bool xauto_access)
246 require(precondition_of(new_jim_state(\
247 xhost, xbase_mbr, xbase_version, xauto_access)));
251 new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access);
255 ensure(postcondition_of(new_jim_state(\
256 xhost, xbase_mbr, xbase_version, xauto_access)));
269 require(precondition_of(new_jim_state(xhost, xdof_map,
false, xauto_access)));
273 new_jim_state(xhost, xdof_map,
false, xauto_access);
277 ensure(postcondition_of(new_jim_state(xhost, xdof_map,
false, xauto_access)));
295 attach_to_state(xhost, xhub_id);
301 ensure(index() == xhub_id);
302 ensure(is_attached());
303 ensure(!is_restricted());
317 attach_to_state(xhost, xid.
hub_pod());
323 ensure(index() ==~ xid);
324 ensure(is_attached());
325 ensure(!is_restricted());
336 require(!xname.empty());
341 attach_to_state(xhost, xname);
347 ensure(name() == xname);
348 ensure(is_attached());
349 ensure(!is_restricted());
362 require(precondition_of(attach_to_state(same args)));
366 attach_to_state(xnamespace, xpath, xauto_access);
370 ensure(postcondition_of(attach_to_state(same args)));
383 require(is_ancestor_of(&xother));
384 require(precondition_of(attach_to_state(&xother)));
388 attach_to_state(&xother);
392 ensure(postcondition_of(attach_to_state(&xother)));
405 require(precondition_of(attach_to_state(&xother)));
409 attach_to_state(&xother);
413 ensure(postcondition_of(attach_to_state(&xother)));
426 require(precondition_of(sec_vd::operator=(xfiber)));
430 sec_vd::operator=(xfiber);
434 ensure(postcondition_of(sec_vd::operator=(xfiber)));
447 require(precondition_of(sec_vd::operator=(xfiber)));
451 sec_vd::operator=(xfiber);
455 ensure(postcondition_of(sec_vd::operator=(xfiber)));
553 const string& result = static_class_name();
557 ensure(!result.empty());
572 static const string result(
"sec_at2_e2");
576 ensure(!result.empty());
625 require(xother != 0);
629 bool result =
dynamic_cast<const at2_e2*
>(xother) != 0;
649 require(xother != 0);
653 bool result =
dynamic_cast<const sec_at2_e2*
>(xother) != 0;
673 if (invariant_check())
677 disable_invariant_check();
681 invariance(sec_atp::invariant());
685 invariance(state_is_read_accessible() ? dd() == 2 :
true);
689 enable_invariant_check();
716 hook(x0, x1, xresult);
722 hook(x0, x1, xresult);
751 wedge(x0, x1, xresult);
759 #include "SheafSystem/sec_vd.impl.h" 760 #include "SheafSystem/sec_e2.h" 761 #include "SheafSystem/sec_at0.h" 775 require(x1.
dd(xauto_access) == x0.
dd(xauto_access));
777 require(xresult.
p(xauto_access) == x0.
p(xauto_access) - 1);
781 binary_op(x0, x1, xresult, hook_functor(), xauto_access);
806 require(x1.
dd(xauto_access) == x0.
dd(xauto_access));
808 require(xresult.
p(xauto_access) == x0.
p(xauto_access) - 1);
812 binary_op(x0, x1, xresult, hook_functor(), xauto_access);
839 unary_op(x0, xresult, star_functor(), xauto_access);
847 define_old_variable(\
848 bool old_xresult_is_p_form = xresult.
is_p_form(xauto_access));
850 if(x0.
p(xauto_access) > 0)
858 ensure((x0.
p(xauto_access)>0) \
860 ensure((x0.
p(xauto_access)==0) \
861 ? (xresult.
is_p_form(xauto_access) == old_xresult_is_p_form):
true );
879 unary_op(x0, xresult, star_functor(), xauto_access);
887 define_old_variable(\
888 bool old_xresult_is_p_form = xresult.
is_p_form(xauto_access));
890 if(x0.
p(xauto_access) > 0)
898 ensure((x0.
p(xauto_access)>0) \
900 ensure((x0.
p(xauto_access)==0) \
901 ? (xresult.
is_p_form(xauto_access) == old_xresult_is_p_form):
true );
919 unary_op(x0, xresult, star_functor(), xauto_access);
927 define_old_variable(\
928 bool old_xresult_is_p_form = xresult.
is_p_form(xauto_access));
930 if(x0.
p(xauto_access) > 0)
938 ensure((x0.
p(xauto_access)>0) \
940 ensure((x0.
p(xauto_access)==0) \
941 ? (xresult.
is_p_form(xauto_access) == old_xresult_is_p_form):
true );
959 require(x0.
dd(xauto_access) >= xresult.
dd(xauto_access));
960 require(x1.
dd(xauto_access) >= xresult.
dd(xauto_access));
961 require(xresult.
p(xauto_access) == x0.
p(xauto_access) + x1.
p(xauto_access));
966 binary_op(x0, x1, xresult, wedge_functor(), xauto_access);
971 x1.
variance(xauto_access)), xauto_access);
975 ensure(xresult.
variance(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 ...
SHEAF_DLL_SPEC void wedge(const sec_e2 &x0, const sec_e2 &x1, sec_at2_e2 &xresult, bool xauto_access)
The exterior (wedge) product of two antisymmetric tensors (pre-allocated version).
bool full() const
True if both poset name and member name are not empty.
An antisymmetric rank 2 tensor over a Euclidean vector space of dimension 2 (persistent version)...
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...
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.
virtual tensor_variance variance(bool xauto_access) const
The variance.
void put_variance(const tensor_variance &xvariance, bool xauto_access)
Sets the variance to xvariance.
The poset for sec_rep_descriptors.
virtual const std::string & class_name() const
The name of this class.
An antisymmetric rank 2 tensor over a Euclidean vector space of dimension 2 (volatile version)...
virtual int p() const
The degree of the tensors in host(); the sum of the contravariant and covariant degrees.
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).
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...
An abstract antisymmetric tensor section space of degree p.
virtual section_space_schema_member & schema()
The schema for this poset (mutable version)
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)...
bool is_ancestor_of(const any *xother) const
True if xother conforms to current.
bool fiber_is_ancestor_of(const any *xother) const
True if xother conforms to an instance of the fiber of current.
A section of a bundle with fiber type at2_e2.
Euclidean vector space of dimension 2 (volatile version).
An abstract antisymmetric tensor space of degree p.
void binary_op(const S0 &x0, const S1 &x1, SR &xresult, F xfunctor, bool xauto_access)
Binary operator.
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 sec_at2_e2 & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
An index within the external ("client") scope of a given id space.
SHEAF_DLL_SPEC void star(const sec_at2_e2 &x0, sec_at0 &xresult, bool xauto_access)
The Hodge star operator for antisymmetric tensors (pre-allocated version).
virtual bool is_attached() const
True if this handle is attached to a non-void state.
Namespace containing the antisymmetric tensor algrebra functions for the fiber_bundles component of t...
virtual int dd() const
Dimension of the underlying vector 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. ...
static const std::string & static_class_name()
The name of this class.
int dd() const
The dimension of the underlying ("domain") vector space.
sec_at2_e2()
Default constructor; creates an unattached handle.
bool is_p_form(bool xauto_access) const
True if this is a p-form.
bool empty() const
True if both poset name and member name are empty.
bool invariant() const
Class invariant.
SHEAF_DLL_SPEC void hook(const sec_e2 &x0, const sec_e2 &x1, sec_at0 &xresult, bool xauto_access)
The interior (hook) product of two antisymmetric tensors (pre-allocated version for persistent types)...
virtual const fiber_type & fiber_prototype() const
Virtual constructor for the associated fiber type.
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...
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...
An abstract client handle for a member of a poset.
std::string path() const
The full path as a string.
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...
Namespace for the fiber_bundles component of the sheaf system.
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)...
Antisymetric tensor of degree 0. As the degree is 0 there is nothing to be symmetric or antisymmetric...
A general antisymmetric tensor of degree 2 over an abstract vector space.
virtual int d(int xp, int xdd) const
Dimension d() as a function of degree xp and domain dimension xdd.
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 sec_at2_e2 * clone() const
Make a new handle, no state instance of current.
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
A section of a fiber bundle with a 2-dimensional Euclidean vector space fiber.
A handle for a poset whose members are numerical representations of sections of a fiber bundle...