21 #include "SheafSystem/sec_e1_uniform.h" 23 #include "SheafSystem/assert_contract.h" 24 #include "SheafSystem/base_space_poset.h" 25 #include "SheafSystem/binary_section_space_schema_member.impl.h" 26 #include "SheafSystem/at0_space.h" 27 #include "SheafSystem/at1_space.h" 28 #include "SheafSystem/e1.h" 29 #include "SheafSystem/fiber_bundles_namespace.h" 30 #include "SheafSystem/sec_at0.h" 31 #include "SheafSystem/sec_at0_space.h" 32 #include "SheafSystem/sec_at1_space.h" 33 #include "SheafSystem/structured_block_1d.h" 34 #include "SheafSystem/sec_tuple.impl.h" 35 #include "SheafSystem/sec_tuple_space.impl.h" 36 #include "SheafSystem/sec_vd.impl.h" 65 require(!xhost_path.
empty());
68 require(xschema_path.
full());
70 require(host_type::fiber_space_conforms<fiber_type::host_type>(xns, xschema_path, xauto_access));
74 require(host_type::same_scalar_fiber_space(xns, xschema_path, xscalar_space_path, xauto_access));
78 host_type& result = host_type::new_table(xns, xhost_path, xschema_path, xscalar_space_path, xauto_access);
82 ensure(xns.
owns(result, xauto_access));
83 ensure(result.
path(
true) == xhost_path);
85 ensure(result.
schema(
true).
path(xauto_access) == xschema_path);
89 ensure(result.
d(
true) == result.
dd(
true));
92 ensure(result.
p(
true) == 1);
107 const std::string& xsection_suffix,
108 const std::string& xfiber_suffix,
117 require(xbase_path.
full());
120 require(xrep_path.
empty() || xrep_path.
full());
123 require(xsection_suffix.empty() || poset_path::is_valid_name(xsection_suffix));
125 require(xfiber_suffix.empty() || poset_path::is_valid_name(xfiber_suffix));
127 require(standard_host_is_available<sec_e1_uniform>(xns, xbase_path, xrep_path, xsection_suffix, xfiber_suffix, xauto_access));
128 require(fiber_type::standard_host_is_available<fiber_type>(xns, xfiber_suffix, xauto_access));
129 require(schema_type::standard_host_is_available<sec_e1_uniform>(xns, xbase_path, xrep_path, xfiber_suffix, xauto_access));
133 poset_path lstd_path = standard_host_path<sec_e1_uniform>(xbase_path, xrep_path, xsection_suffix, xfiber_suffix);
149 poset_path lrep_path = (!xrep_path.empty() ? xrep_path : standard_rep_path());
154 schema_type::standard_member<sec_e1_uniform>(xns, xbase_path, lrep_path, xfiber_suffix, xauto_access);
159 scalar_type::standard_host(xns, xbase_path, lrep_path, xsection_suffix, xfiber_suffix, xauto_access).
path(xauto_access);
163 lresult_ptr = &new_host(xns, lstd_path, lstd_schema_path, lscalar_space_path, xauto_access);
170 ensure(xns.
owns(result, xauto_access));
171 ensure(result.
path(
true) == standard_host_path<sec_e1_uniform>(xbase_path, xrep_path, xsection_suffix, xfiber_suffix));
173 ensure(result.
schema(
true).
path(xauto_access) ==
174 schema_type::standard_member_path<sec_e1_uniform>(xbase_path, xrep_path, xfiber_suffix));
178 ensure(result.
d(
true) == result.
dd(
true));
180 scalar_type::standard_host_path<scalar_type>(xbase_path, result.
rep().
path(xauto_access), xsection_suffix, xfiber_suffix));
182 ensure(result.
p(
true) == 1);
228 require(precondition_of(new_jim_state(xhost, xmin_x, xmax_x, xauto_access)));
232 new_jim_state(xhost, xmin_x, xmax_x, xauto_access);
236 ensure(postcondition_of(new_jim_state(xhost, xmin_x, xmax_x, xauto_access)));
249 require(precondition_of(new_jim_state(xhost, xdof_map,
false, xauto_access)));
253 new_jim_state(xhost, xdof_map,
false, xauto_access);
257 ensure(postcondition_of(new_jim_state(xhost, xdof_map,
false, xauto_access)));
273 require(precondition_of(new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access)));
277 new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access);
281 ensure(postcondition_of(new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access)));
293 require(precondition_of(new_jim_state(xhost, xbase_parts, xauto_access)));
297 new_jrm_state(xhost, xbase_parts, xauto_access);
301 require(postcondition_of(new_jim_state(xhost, xbase_parts, xauto_access)));
323 attach_to_state(xhost, xindex);
329 ensure(index() == xindex);
330 ensure(is_attached());
331 ensure(!is_restricted());
346 attach_to_state(xhost, xindex.
hub_pod());
352 ensure(index() ==~ xindex);
353 ensure(is_attached());
354 ensure(!is_restricted());
366 require(!xname.empty());
371 attach_to_state(xhost, xname);
377 ensure(name() == xname);
378 ensure(is_attached());
379 ensure(!is_restricted());
392 require(precondition_of(attach_to_state(same args)));
396 attach_to_state(xnamespace, xpath, xauto_access);
400 ensure(postcondition_of(attach_to_state(same args)));
414 require(xother != 0);
418 attach_to_state(xother);
423 ensure(is_attached());
424 ensure(is_same_state(xother));
425 ensure(is_same_restriction(xother));
454 require(precondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
455 require(xmin_x <= xmax_x);
459 new_jim_state(xhost, static_cast<poset_dof_map*>(0),
false, xauto_access);
460 put_bounds(xmin_x, xmax_x, xauto_access);
464 ensure(min_x(xauto_access) == xmin_x);
465 ensure(max_x(xauto_access) == xmax_x);
482 require(is_ancestor_of(&xother));
483 require(precondition_of(attach_to_state(&xother)));
487 attach_to_state(&xother);
491 ensure(postcondition_of(attach_to_state(&xother)));
504 require(precondition_of(attach_to_state(&xother)));
508 attach_to_state(&xother);
512 ensure(postcondition_of(attach_to_state(&xother)));
525 require(precondition_of(sec_vd::operator=(xfiber)));
529 sec_vd::operator=(xfiber);
533 ensure(postcondition_of(sec_vd::operator=(xfiber)));
546 require(precondition_of(sec_vd::operator=(xfiber)));
550 sec_vd::operator=(xfiber);
554 ensure(postcondition_of(sec_vd::operator=(xfiber)));
584 require(xmin.
ct() >= 1);
585 require(xmax.
ct() >= 1);
586 require(xmin[0] <= xmax[0]);
587 require(xauto_access || state_is_read_write_accessible());
591 put_bounds(xmin[0], xmax[0], xauto_access);
595 ensure(min_x(xauto_access) == xmin[0]);
596 ensure(max_x(xauto_access) == xmax[0]);
609 require(xmin_x <= xmax_x);
610 require(xauto_access || state_is_read_write_accessible());
616 get_read_write_access(
true);
627 put_fiber(0, lfiber);
632 put_fiber(1, lfiber);
641 ensure(min_x(xauto_access) == xmin_x);
642 ensure(max_x(xauto_access) == xmax_x);
655 require(xauto_access || state_is_read_accessible());
688 ensure(xmin.
ct() == 1);
689 ensure(xmax.
ct() == 1);
690 ensure_for_all(i, 0, 1, xmin[i] <= xmax[i]);
705 require(xauto_access || state_is_read_accessible());
717 get_fiber(0, lfiber);
742 require(xauto_access || state_is_read_accessible());
754 get_fiber(1, lfiber);
779 require(xauto_access || state_is_read_accessible());
801 result = (max_x(
false) - min_x(
false))/ltuple.
i_size;
903 result(sec_rep_descriptor::standard_host_path().poset_name(),
"vertex_block_uniform");
907 ensure(result.
full());
933 const string& result = static_class_name();
937 ensure(!result.empty());
952 static const string result(
"sec_e1_uniform");
956 ensure(!result.empty());
1004 require(xother != 0);
1035 invariance(sec_e1::invariant());
1037 if (invariant_check())
1041 disable_invariant_check();
1045 enable_invariant_check();
1050 ensure(is_derived_query);
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 ...
A client handle for a subposet.
bool full() const
True if both poset name and member name are not empty.
size_type ct() const
The number of items currently in use.
A Cartesian product section space.
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...
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.
A general antisymmetric tensor of degree 1 over an abstract vector space (persistent version)...
The standard fiber bundles name space; extends the standard sheaves namespace by defining base space...
A general antisymmetric tensor of degree 1 over an abstract vector space (volatile version)...
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.
void reserve(index_type xub)
Makes ub() at least xub; if new storage is allocated, it is uninitialized.
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.
The poset for sec_rep_descriptors.
namespace_poset * host() const
The namespace this poset resides in. Obsolete; use name_space() instead.
Euclidean vector space of dimension 1 (persistent version).
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).
virtual section_space_schema_member & schema()
The schema for this poset (mutable version)
size_type i_size
The upper bound on the x direction index for structured blocks.
pointer_type base() const
The underlying storage array.
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)
void set_ct(size_type xct)
Sets ct() == xct.
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 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 dd() const
The dimension of the underlying ("domain") vector space.
bool empty() const
True if both poset name and member name are empty.
An abstract vector space viewed as an antisymmetric tensor space of degree 1.
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).
sec_vd_dof_type dof_type
The type of degree of freedom.
Euclidean vector space of dimension 1 (volatile version).
An abstract client handle for a member of a poset.
std::string path() const
The full path as a string.
The type of row dof tuple for base_space_member.
row_dof_tuple_type * member_dof_tuple(pod_index_type xmbr_hub_id, bool xrequire_write_access=false) const
The row dof tuple for the member with member hub id xmbr_hub_id.
An auto_block with a no-initialization initialization policy.
Namespace for the fiber_bundles component of the sheaf system.
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...
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
A handle for a poset whose members are numerical representations of sections of a fiber bundle...