20 #include "SheafSystem/unstructured_block.h" 22 #include "SheafSystem/assert_contract.h" 23 #include "SheafSystem/arg_list.h" 24 #include "SheafSystem/fiber_bundles_namespace.h" 25 #include "SheafSystem/hex_connectivity.h" 26 #include "SheafSystem/line_connectivity.h" 27 #include "SheafSystem/namespace_poset.h" 28 #include "SheafSystem/point_connectivity.h" 29 #include "SheafSystem/poset_path.h" 30 #include "SheafSystem/preorder_iterator.h" 31 #include "SheafSystem/quad_connectivity.h" 32 #include "SheafSystem/tetra_connectivity.h" 33 #include "SheafSystem/triangle_connectivity.h" 34 #include "SheafSystem/unstructured_block_builder.h" 35 #include "SheafSystem/wsv_block.h" 57 "unstructured_block");
59 const poset_path& result = STATIC_PROTOTYPE_PATH;
64 ensure(result.
member_name() ==
"unstructured_block");
81 require(!xhost_path.
empty());
84 require(xschema_path.
full());
88 require(xmax_db >= 0);
93 host_type::new_table(xns, xhost_path, xschema_path, xmax_db, xauto_access);
97 ensure(xns.
owns(result, xauto_access));
98 ensure(result.
path(
true) == xhost_path);
100 ensure(result.
schema(
true).
path(xauto_access) == xschema_path);
102 ensure(result.
max_db() == xmax_db);
125 require(xmax_db >= 0);
136 result_ptr = &new_host(xns, xhost_path, standard_schema_path(), xmax_db, xauto_access);
143 ensure(xns.
owns(result, xauto_access));
144 ensure(result.
path(
true) == xhost_path);
146 ensure(result.
schema(
true).
path(xauto_access) == standard_schema_path());
148 ensure(result.
max_db() == xmax_db);
173 if(invariant_check())
177 disable_invariant_check();
183 enable_invariant_check();
223 attach_to_state(&xother);
227 ensure(is_same_state(&xother));
241 require(is_ancestor_of(&xother));
302 ensure(! is_attached() );
318 new_jem_state(const_cast<abstract_poset_member*>(&xother),
true,
true);
322 attach_to_state(&xother);
350 const std::string& xlocal_cell_prototype_name,
351 bool xis_prototype_name,
356 require(precondition_of(new_state(xhost, xlocal_cell_prototype_name, xauto_access)));
360 new_state(xhost, xlocal_cell_prototype_name, xauto_access);
364 ensure(postcondition_of(new_state(xhost, xlocal_cell_prototype_name, xauto_access)));
380 require(precondition_of(new_state(same args)));
384 new_state(xhost, xlocal_cell_prototype_path, xids, xub, xauto_access);
388 ensure(postcondition_of(new_state(same args)));
404 require(precondition_of(new_state(same args)));
408 new_state(xhost, xlocal_cell_prototype, xids, xub, xauto_access);
412 ensure(postcondition_of(new_state(same args)));
428 require(precondition_of(new_state(same args)));
432 new_state(xhost, xlocal_cell_prototype_path, xids, xub, xauto_access);
436 ensure(postcondition_of(new_state(same args)));
452 require(precondition_of(new_state(same args)));
456 new_state(xhost, xlocal_cell_prototype, xids, xub, xauto_access);
460 ensure(postcondition_of(new_state(same args)));
475 require(precondition_of(new_state(same args)));
479 new_state(xhost, xlocal_cell_prototype_path, xi_size, xauto_access);
483 ensure(postcondition_of(new_state(same args)));
498 require(precondition_of(new_state(same args)));
502 new_state(xhost, xlocal_cell_prototype, xi_size, xauto_access);
506 ensure(postcondition_of(new_state(same args)));
522 require(precondition_of(new_state(same args)));
526 new_state(xhost, xlocal_cell_prototype_path, xi_size, xj_size, xauto_access);
530 ensure(postcondition_of(new_state(same args)));
546 require(precondition_of(new_state(same args)));
550 new_state(xhost, xlocal_cell_prototype, xi_size, xj_size, xauto_access);
554 ensure(postcondition_of(new_state(same args)));
571 require(precondition_of(new_state(same args)));
575 new_state(xhost, xlocal_cell_prototype_path, xi_size, xj_size, xk_size,
580 ensure(postcondition_of(new_state(same args)));
597 require(precondition_of(new_state(same args)));
601 new_state(xhost, xlocal_cell_prototype, xi_size, xj_size, xk_size, xauto_access);
605 ensure(postcondition_of(new_state(same args)));
623 require(precondition_of(attach_to_state(xhost, xindex)));
627 attach_to_state(xhost, xindex);
631 ensure(postcondition_of(attach_to_state(xhost, xindex)));
641 require(precondition_of(attach_to_state(same args)));
645 attach_to_state(xhost, xname);
649 ensure(postcondition_of(attach_to_state(same args)));
663 require(precondition_of(attach_to_state(same args)));
667 attach_to_state(xnamespace, xpath, xauto_access);
671 ensure(postcondition_of(attach_to_state(same args)));
688 require(precondition_of(attach_to_state(same args)));
692 attach_to_state(xnamespace, xposet_id, xmember_id);
696 ensure(postcondition_of(attach_to_state(same args)));
712 const std::string& xlocal_cell_prototype_name,
726 require(namespace_is_ancestor_of(xhost->
name_space()));
728 require(prototype_exists(xlocal_cell_prototype_name,
true));
734 make_standard_subposets_persistent(*xhost);
739 static_prototype_path().member_name(),
740 xlocal_cell_prototype_name,
745 new_jim_state(xhost, lmap,
false,
false);
749 host()->top().create_cover_link(
this);
750 create_cover_link(&host()->bottom());
755 ensure(prototype_path() == static_prototype_path());
756 ensure(local_cell_type_name() == xlocal_cell_prototype_name);
779 require(state_is_read_write_accessible());
780 require(host()->name_space()->contains_poset_member(xlocal_cell_prototype_path));
781 require(precondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
785 new_state(host(), xlocal_cell_prototype_path, xids, xub, xauto_access);
789 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
805 require(precondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
809 new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access);
813 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
833 require(xlocal_cell_prototype_path.
member_exists(xauto_access));
836 require(precondition_of(new_state(xhost, xlocal_cell_prototype, xids, xub, xauto_access)));
842 new_state(xhost, lproto, xids, xub, xauto_access);
844 lproto.detach_from_state();
848 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
867 require(xauto_access ?
879 require(namespace_is_ancestor_of(xhost->
name_space()));
883 require(xlocal_cell_prototype.
atom_ct() > 0);
886 require( (xub % xlocal_cell_prototype.
atom_ct()) == 0 );
892 make_standard_subposets_persistent(*xhost);
898 static_prototype_path().member_name(),
899 xlocal_cell_prototype.
name(),
904 new_jim_state(xhost, lmap,
false,
false);
908 host()->top().create_cover_link(
this);
909 create_cover_link(&host()->bottom());
919 bool lcompute_cover = (db() < lhost->
max_db());
933 ensure(db() == xlocal_cell_prototype.
db());
934 ensure(prototype_path() == static_prototype_path());
936 ensure(xlocal_cell_prototype.
has_name(local_cell_type_name()));
937 ensure(size() == xub/xlocal_cell_prototype.
atom_ct());
962 require(state_is_read_write_accessible());
963 require(host()->name_space()->contains_poset_member(xlocal_cell_prototype_path));
964 require(precondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
968 new_state(host(), xlocal_cell_prototype_path, xids, xub, xauto_access);
972 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
988 require(precondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
992 new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access);
996 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
1007 const poset_path& xlocal_cell_prototype_path,
1016 require(xlocal_cell_prototype_path.
member_exists(xauto_access));
1019 require(precondition_of(new_state(xhost, xlocal_cell_prototype, xids, xub, xauto_access)));
1024 xlocal_cell_prototype_path,
1027 new_state(xhost, lproto, xids, xub, xauto_access);
1029 lproto.detach_from_state();
1033 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xids, xub, xauto_access)));
1050 require(xhost != 0);
1052 require(xauto_access ?
1064 require(namespace_is_ancestor_of(xhost->
name_space()));
1068 require(xlocal_cell_prototype.
atom_ct() > 0);
1071 require( (xub % xlocal_cell_prototype.
atom_ct()) == 0 );
1077 make_standard_subposets_persistent(*xhost);
1083 static_prototype_path().member_name(),
1084 xlocal_cell_prototype.
name(),
1089 new_jim_state(xhost, lmap,
false,
false);
1093 host()->top().create_cover_link(
this);
1094 create_cover_link(&host()->bottom());
1104 bool lcompute_cover = (db() < lhost->
max_db());
1118 ensure(db() == xlocal_cell_prototype.
db());
1119 ensure(prototype_path() == static_prototype_path());
1121 ensure(xlocal_cell_prototype.
has_name(local_cell_type_name()));
1122 ensure(size() == xub/xlocal_cell_prototype.
atom_ct());
1146 require(xauto_access || state_is_read_write_accessible());
1147 require(precondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xauto_access)));
1151 new_state(host(), xlocal_cell_prototype_path, xi_size, xauto_access);
1155 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xauto_access)));
1170 require(precondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xauto_access)));
1174 new_state(host(), xlocal_cell_prototype, xi_size, xauto_access);
1178 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xauto_access)));
1189 const poset_path& xlocal_cell_prototype_path,
1197 require(xlocal_cell_prototype_path.
member_exists(xauto_access));
1200 require(precondition_of(new_state(xhost, xlocal_cell_prototype, xi_size, xauto_access)));
1205 xlocal_cell_prototype_path,
1208 new_state(xhost, lproto, xi_size, xauto_access);
1210 lproto.detach_from_state();
1214 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xauto_access)));
1230 require(xhost != 0);
1232 require(xauto_access ?
1242 require(namespace_is_ancestor_of(xhost->
name_space()));
1247 require(xlocal_cell_prototype.
atom_ct() > 0);
1248 require(xlocal_cell_prototype.
name() ==
"segment_complex" ||
1249 xlocal_cell_prototype.
name() ==
"point");
1250 require(xi_size > 0);
1256 make_standard_subposets_persistent(*xhost);
1261 if(xlocal_cell_prototype.
name() ==
"segment_complex")
1270 #ifdef DIAGNOSTIC_OUTPUT 1271 cout << *lconnectivity << endl;
1274 int* lnode_ids = lconnectivity->
node_ids();
1275 int lnode_ids_ub = lconnectivity->
node_id_ct();
1278 xlocal_cell_prototype,
1283 delete lconnectivity;
1287 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, lnode_ids, lnode_ids_ub,
false)));
1312 require(xauto_access || state_is_read_write_accessible());
1313 require(precondition_of(new_state(host(), xlocal_cell_prototype_path, xi_size, xj_size, xauto_access)));
1317 new_state(host(), xlocal_cell_prototype_path, xi_size, xj_size, xauto_access);
1321 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xauto_access)));
1337 require(precondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xauto_access)));
1341 new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xauto_access);
1345 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xauto_access)));
1356 const poset_path& xlocal_cell_prototype_path,
1364 require(xlocal_cell_prototype_path.
member_exists(xauto_access));
1366 require(precondition_of(new_state(xhost, xlocal_cell_prototype, xi_size, xj_size, xauto_access)));
1372 xlocal_cell_prototype_path,
1375 new_state(xhost, lproto, xi_size, xj_size, xauto_access);
1377 lproto.detach_from_state();
1381 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xauto_access)));
1398 require(xhost != 0);
1400 require(xauto_access ?
1412 require(namespace_is_ancestor_of(xhost->
name_space()));
1416 require(xlocal_cell_prototype.
atom_ct() > 0);
1417 require(xlocal_cell_prototype.
db() == 2);
1422 require((xlocal_cell_prototype.
has_name(
"quad_nodes")) ||
1423 (xlocal_cell_prototype.
has_name(
"quad_complex")) ||
1424 (xlocal_cell_prototype.
has_name(
"triangle_complex")) ||
1425 (xlocal_cell_prototype.
has_name(
"triangle_nodes")));
1426 require(xi_size > 0);
1427 require(xj_size > 0);
1433 make_standard_subposets_persistent(*xhost);
1439 if((xlocal_cell_prototype.
name() ==
"quad_nodes") ||
1440 (xlocal_cell_prototype.
name() ==
"quad_complex"))
1452 #ifdef DIAGNOSTIC_OUTPUT 1453 cout << *lconnectivity << endl;
1456 int* lnode_ids = lconnectivity->
node_ids();
1457 int lnode_ids_ub = lconnectivity->
node_id_ct();
1460 xlocal_cell_prototype,
1465 delete lconnectivity;
1469 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, lnode_ids, lnode_ids_ub,
false)));
1496 require(xauto_access || state_is_read_write_accessible());
1497 require(precondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xk_size, xauto_access)));
1501 new_state(host(), xlocal_cell_prototype_path, xi_size, xj_size, xk_size, xauto_access);
1505 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xk_size, xauto_access)));
1522 require(precondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xk_size, xauto_access)));
1526 new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xk_size, xauto_access);
1530 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xk_size, xauto_access)));
1541 const poset_path& xlocal_cell_prototype_path,
1551 require(xlocal_cell_prototype_path.
member_exists(xauto_access));
1554 require(precondition_of(new_state(xhost, xlocal_cell_prototype, xi_size, xj_size, xk_size, xauto_access)));
1559 xlocal_cell_prototype_path,
1562 new_state(xhost, lproto, xi_size, xj_size, xk_size, xauto_access);
1564 lproto.detach_from_state();
1568 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, xi_size, xj_size, xk_size, xauto_access)));
1586 require(xhost != 0);
1588 require(xauto_access ?
1600 require(namespace_is_ancestor_of(xhost->
name_space()));
1605 require(xlocal_cell_prototype.
atom_ct() > 0);
1606 require(xlocal_cell_prototype.
db() == 3);
1607 require((xlocal_cell_prototype.
name().substr(0, 3) ==
"hex") ||
1608 (xlocal_cell_prototype.
name() ==
"tetra_nodes"));
1609 require(xi_size > 0);
1610 require(xj_size > 0);
1611 require(xk_size > 0);
1617 make_standard_subposets_persistent(*xhost);
1623 if(xlocal_cell_prototype.
name().substr(0, 3) ==
"hex")
1634 #ifdef DIAGNOSTIC_OUTPUT 1635 cout << *lconnectivity << endl;
1638 int* lnode_ids = lconnectivity->
node_ids();
1639 int lnode_ids_ub = lconnectivity->
node_id_ct();
1642 xlocal_cell_prototype,
1647 delete lconnectivity;
1651 ensure(postcondition_of(new_state(host(), xlocal_cell_prototype, lnode_ids, lnode_ids_ub,
false)));
1685 require(xauto_access ? is_attached() : state_is_read_write_accessible());
1686 require(xauto_access || name_space()->state_is_read_accessible());
1687 require(xlocal_cell_prototype_path.
member_exists(xauto_access));
1690 require(precondition_of(refine(xlocal_cell_prototype, xids, xub, xauto_access)));
1695 xlocal_cell_prototype_path,
1698 refine(lproto, xids, xub, xauto_access);
1704 ensure(postcondition_of(refine(xlocal_cell_prototype, xids, xub, xauto_access)));
1720 require(xauto_access ? is_attached() : host()->in_jim_edit_mode());
1721 require(xauto_access ?
1727 get_read_write_access();
1732 require(prototype_path() == static_prototype_path());
1736 require(xlocal_cell_prototype.
atom_ct() > 0);
1740 require((xub % xlocal_cell_prototype.
atom_ct()) == 0);
1748 host()->begin_jim_edit_mode(
false);
1754 block_builder.
build_block_pa(&xlocal_cell_prototype, xids, xub,
this,
false,
false);
1763 host()->end_jim_edit_mode(
false,
false);
1768 ensure(db() == xlocal_cell_prototype.
db());
1769 ensure(local_cell_type_name() == xlocal_cell_prototype.
name());
1770 ensure(size() == xub/xlocal_cell_prototype.
atom_ct());
1831 lhost->blocks().put_is_persistent(
true);
1832 lhost->block_vertices().put_is_persistent(
true);
1833 lhost->cells().put_is_persistent(
true);
1834 for(
int_type i=0; i<=lhost->max_db(); ++i)
1836 lhost->d_cells(i).put_is_persistent(
true);
1838 lhost->release_access();
OBSOLETE: use zone_nodes_block or point_block_*d. A builder object for constructing unstructured bloc...
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...
static host_type & new_host(namespace_type &xns, const poset_path &xhost_path, const poset_path &xschema_path, int xmax_db, bool xauto_access)
Creates a new host poset for members of this type. The poset is created in namespace xns with path xh...
virtual bool invariant() const
Class invariant.
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 ...
bool path_is_auto_read_write_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-write accessible...
bool full() const
True if both poset name and member name are not empty.
int db() const
The base space dimension.
bool state_is_read_accessible(bool xauto_access) const
bool is_persistent() const
True if this id space should be written to disk.
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...
virtual unstructured_block * clone() const
Make a new handle, no state instance of current.
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...
A client handle for a general, abstract partially order set.
size_type node_id_ct() const
The number of entries in node_ids().
virtual int atom_ct() const
The number of members in the set of atoms contained in the down set of this member.
A path defined by a poset name and a member name separated by a forward slash ('/'). For example: "cell_definitions/triangle".
virtual unstructured_block & operator=(const abstract_poset_member &xother)
Assignment operator; attaches this to the same state as xother.
Zone to node connectivity relation for a block of zones of a given type.
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 namespace_poset * name_space() const
The namespace of host()
std::string name() const
A name for this.
OBSOLETE: use zone_nodes_block or point_block_*d. A client handle for a base space member which repre...
static const std::string & prototypes_poset_name()
The name of the prototypes poset.
Nodal connectivity for a block containing zones of type tetra.
pod_index_type * node_ids()
The nodal connectivity array.
A client handle for a member of a base space poset.
Nodal connectivity for a block containing zones of type triangle.
static host_type & standard_host(namespace_type &xns, const poset_path &xhost_path, int xmax_db, bool xauto_access)
The host with path xhost_path. Returns the host if it already exists, otherwise, creates it in namesp...
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 objects.
The lattice of closed cells of a cellular space; a lattice representation of a computational mesh...
virtual schema_poset_member & schema()
The schema for this poset (mutable version).
virtual bool has_name(const std::string &xname, bool xauto_access=false) const
True if xname is a name for this.
virtual bool invariant() const
Class invariant.
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...
A client handle for a mutable partially ordered set.
poset * host() const
The poset which this is a handle to a member of.
subposet & vertices()
The subposet containing all the vertices, that is, the cells of dimension 0 (mutable version)...
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)
An index within the external ("client") scope of a given id space.
virtual bool is_attached() const
True if this handle is attached to a non-void state.
virtual void get_read_access() const
Get read access to the state associated with this.
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
std::string poset_name() const
The poset name part of the path.
bool contains_path(const poset_path &xpath, bool xauto_access=true) const
True if this contains the poset or poset member specified by xpath.
Nodal connectivity for a block containing zones of type hex.
static void make_standard_subposets_persistent(poset_state_handle &xhost)
Make the standard subposets created by base_space_poset persistent.
bool empty() const
True if both poset name and member name are empty.
Nodal connectivity for a block containing zones of type segment.
virtual void detach_from_state()
Detach this handle from its state, if any.
namespace_poset * name_space() const
The namespace this poset resides in.
virtual bool is_attached() const
True if this is attached to a state.
bool member_exists(bool xauto_access) const
Nodal connectivity for a block containing zones of type quad.
int_type pod_index_type
The plain old data index type.
std::string member_name() const
The member name part of the path.
virtual ~unstructured_block()
Destructor; deletes a poset member and its attached state, if any.
unstructured_block()
Default constructor; creates a new, unattached unstructured_block handle.
static const poset_path & static_prototype_path()
The path of the prototype required by this class.
virtual void new_state(poset *xhost, const std::string &xlocal_cell_prototype_name, bool xauto_access)
Creates a new unrefined (jim) unstructured block state in xhost and attaches this to it...
virtual void end_jim_edit_mode(bool xensure_lattice_invariant=true, bool xauto_access=true)
Prevent editing of jims and jim order relation.
bool is_same_state(const poset_state_handle *xother) const
True if this is attached to the same state as xother.
static bool is_valid_name(const std::string &xname)
True if xname is not empty and contains only name legal characters.
static bool host_created_with_new_host(const poset_state_handle &xhost)
True if host created with unstructured_block::new_host. $$HACK: unstructured_block hack; checks for p...
Nodal connectivity for a block containing zones of type point. Since a point block is just a collecti...
int max_db() const
The maximum dimension of the members of this base space.
An abstract client handle for a member of a poset.
int int_type
The preferred integer type.
bool row_conforms_to(const schema_poset_member &xother) const
True if the row dofs defined by this agree in type and in order with the dofs defined by xother...
bool in_jim_edit_mode() const
True if editing jims and jim order relation is allowed.
virtual schema_poset_member & schema()
The schema for this member (mutable version).
An array representation of abstract class poset_dof_map.
Namespace for the fiber_bundles component of the sheaf system.
void refine(const poset_path &xlocal_cell_prototype_path, const scoped_index *ids, int xub, bool xauto_access)
Refines this (which must be an atom) into copies of the down set of the cell specified by xlocal_cell...
void build_block_pa(const base_space_member *xtemplate, const int *xglue, size_type xglue_ub, unstructured_block *result, bool xcompute_upper_cover, bool xauto_access)
Build the unstructured block result using local cell template xtemplate and the atomic equivalences (...
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 void release_access(bool xall=false) const
Release access. If xall is true, release all levels of access. Otherwise, release one level of access...
virtual bool is_ancestor_of(const any *other) const
True if other conforms to this.
virtual void begin_jim_edit_mode(bool xauto_access=true)
Allow editing of jims and jim order relation.