21 #include "SheafSystem/vd.impl.h" 23 #include "SheafSystem/abstract_poset_member.impl.h" 24 #include "SheafSystem/assert_contract.h" 25 #include "SheafSystem/fiber_bundles_namespace.h" 26 #include "SheafSystem/schema_poset_member.h" 27 #include "SheafSystem/std_iomanip.h" 28 #include "SheafSystem/wsv_block.h" 30 #include "SheafSystem/at0.h" 31 #include "SheafSystem/atp.h" 32 #include "SheafSystem/stp.h" 33 #include "SheafSystem/tolerance_comparison.h" 34 #include "SheafSystem/tp.h" 35 #include "SheafSystem/vd_space.h" 89 for(
int i=0; i<ld; ++i)
96 ensure((*
this) == xother);
111 require(is_same_type(xother));
118 for(
int i=0; i<ld; ++i)
120 result = (*this)[i] == xother[i];
170 for(
int i=0; i<ld; ++i)
172 put_component(i, xrow_dofs[i]);
178 ensure_for_all(i, 0, d(), component(i) == xrow_dofs[i]);
213 require((0 <= xindex) &&(xindex < d()));
234 require((0 <= xindex) && (xindex <= d()));
256 require(xcomps != 0);
257 require(xcomps_dimension >= d());
262 for(
int i=0; i<ld; ++i)
264 xcomps[i] = component(i);
282 require(xcomps != 0);
283 require(xcomps_dimension >= d());
288 for(
int i=0; i<ld; ++i)
290 put_component(i, xcomps[i]);
311 for(
int i=0; i<ld; ++i)
313 put_component(i, xvalue);
319 ensure_for_all(i, 0, d(), component(i) == xvalue);
337 for(
int i=0; i<ld; ++i)
339 result = result && (component(i) == xvalue);
349 ensure_for_all(i, 0, d(), !result || component(i) == xvalue);
363 require(xindex >= 0 && xindex < d());
382 require(xindex >= 0 && xindex < d());
411 ensure(unexecutable(
"result.p() == xp"));
422 require(precondition_of(static_tp_prototype(xp)));
426 const tp_lite& result = static_tp_prototype(xp);
430 ensure(postcondition_of(static_tp_prototype(xp)));
452 ensure(unexecutable(
"result.p() == xp"));
463 require(precondition_of(static_atp_prototype(xp)));
467 const atp_lite& result = static_atp_prototype(xp);
471 ensure(postcondition_of(static_atp_prototype(xp)));
493 ensure(unexecutable(
"result.p() == xp"));
504 require(precondition_of(static_stp_prototype(xp)));
508 const stp_lite& result = static_stp_prototype(xp);
512 ensure(postcondition_of(static_stp_prototype(xp)));
544 ensure(result == d());
570 const string& result = static_class_name();
574 ensure(!result.empty());
589 static const string result(
"vd_lite");
593 ensure(!result.empty());
615 ensure(is_same_type(*result));
630 int lfactor_ct = factor_ct();
635 char* lscalar_space_path =
new char[1];
636 lscalar_space_path[0] = 0;
641 result.scalar_space_path = lscalar_space_path;
667 require(&xother != 0);
673 bool result =
dynamic_cast<const vd_lite*
>(&xother) != 0;
686 if(invariant_check())
690 disable_invariant_check();
694 invariance(tuple_lite::invariant());
700 enable_invariant_check();
732 static const poset_path result(standard_schema_poset_name(),
"vd_schema");
736 ensure(result.
full());
737 ensure(result.
poset_name() == standard_schema_poset_name());
756 string lmember_names =
"d INT true";
757 lmember_names +=
" scalar_space_path C_STRING true";
761 standard_schema_path().member_name(),
762 tuple::standard_schema_path(),
791 require(!xhost_path.
empty());
794 require(xschema_path.
full());
796 require(schema_poset_member::conforms_to(xns, xschema_path, standard_schema_path()));
798 require(xscalar_space_path.
full());
805 host_type::new_table(xns, xhost_path, xschema_path, xscalar_space_path, xauto_access);
809 ensure(xns.
owns(result, xauto_access));
810 ensure(result.
path(
true) == xhost_path);
812 ensure(result.
schema(
true).
path(xauto_access) == xschema_path);
814 ensure(result.
factor_ct(
true) == result.d(
true));
815 ensure(result.d(
true) == schema_poset_member::row_dof_ct(xns, xschema_path, xauto_access));
816 ensure(result.scalar_space_path(
true) == xscalar_space_path );
856 require(is_ancestor_of(&xother));
857 require(precondition_of(attach_to_state(&xother)));
861 attach_to_state(&xother);
865 ensure(postcondition_of(attach_to_state(&xother)));
878 require(precondition_of(attach_to_state(&xother)));
882 attach_to_state(&xother);
886 ensure(postcondition_of(attach_to_state(&xother)));
911 require(precondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
915 new_jim_state(xhost, 0,
false, xauto_access);
919 ensure(postcondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
937 attach_to_state(xhost, xhub_id);
943 ensure(index() == xhub_id);
944 ensure(is_attached());
958 attach_to_state(xhost, xid.
hub_pod());
964 ensure(index() ==~ xid);
965 ensure(is_attached());
976 require(!xname.empty());
981 attach_to_state(xhost, xname);
987 ensure(name() == xname);
988 ensure(is_attached());
999 require(xother != 0);
1001 require(is_ancestor_of(xother));
1005 attach_to_state(xother);
1009 ensure(invariant());
1010 ensure(is_attached());
1011 ensure(is_same_state(xother));
1021 require(state_is_read_accessible());
1031 ensure(result >= 0);
1040 d(
bool xauto_access)
const 1044 require(state_is_auto_read_accessible(xauto_access));
1064 ensure(result >= 0);
1077 require(state_is_read_accessible());
1081 poset_path result(host()->scalar_space_path());
1085 ensure(!result.
empty());
1098 require(state_is_auto_read_accessible(xauto_access));
1102 poset_path result(host()->scalar_space_path(xauto_access));
1106 ensure(!result.
empty());
1119 require(state_is_read_accessible());
1120 require((0 <= xindex) &&(xindex < d()));
1128 ensure(invariant());
1141 require(state_is_auto_read_accessible(xauto_access));
1142 require((0 <= xindex) &&(xindex < d(xauto_access)));
1160 ensure(invariant());
1173 require(state_is_read_write_accessible());
1174 require((0 <= xindex) && (xindex <= d()));
1182 ensure(invariant());
1196 require(state_is_auto_read_write_accessible(xauto_access));
1197 require((0 <= xindex) && (xindex <= d(xauto_access)));
1203 get_read_write_access(
true);
1206 put_component(xindex, xcomp);
1215 ensure(invariant());
1229 require(state_is_read_accessible());
1230 require(xcomps != 0);
1231 require(xcomps_dimension >= d());
1236 for(
int i=0; i<ld; ++i)
1238 xcomps[i] = component(i);
1256 require(state_is_read_write_accessible());
1257 require(xcomps != 0);
1258 require(xcomps_dimension >= d());
1263 for(
int i=0; i<ld; ++i)
1265 put_component(i, xcomps[i]);
1270 ensure(invariant());
1283 require(state_is_read_write_accessible());
1284 require(xindex>=0 && xindex<d());
1303 require(state_is_read_accessible());
1304 require(xindex>=0 && xindex<d());
1358 require(state_is_auto_read_accessible(xauto_access));
1362 bool result = host()->is_vector(_index, xauto_access);
1378 require(state_is_auto_read_accessible(xauto_access));
1382 host()->put_is_vector(_index, xauto_access);
1386 ensure(is_vector(xauto_access));
1400 require(state_is_auto_read_accessible(xauto_access));
1404 bool result = host()->is_covector(_index, xauto_access);
1420 require(state_is_auto_read_accessible(xauto_access));
1424 host()->put_is_covector(_index, xauto_access);
1428 ensure(is_covector(xauto_access));
1453 const string& result = static_class_name();
1457 ensure(!result.empty());
1472 static const string result(
"vd");
1476 ensure(!result.empty());
1498 return reinterpret_cast<host_type*
>(_host);
1505 return dynamic_cast<const host_type*
>(xother) != 0;
1530 bool result =
dynamic_cast<const vd*
>(xother) != 0;
1534 ensure(invariant());
1555 ensure(result != 0);
1576 invariance(tuple::invariant());
1578 if(invariant_check())
1582 disable_invariant_check();
1588 enable_invariant_check();
1593 ensure(is_derived_query);
1616 for(
int i=0; i<ld; ++i)
1618 xos << scientific << setw(27) << x0.
component(i);
1621 xos.precision(lprec);
1631 for(
int i=0; i<ld; ++i)
1651 add(
const vd& x0,
const vd& x1,
vd& xresult,
bool xauto_access)
1658 require(x0.
d(xauto_access) >= xresult.
d(xauto_access));
1659 require(x1.
d(xauto_access) >= xresult.
d(xauto_access));
1674 int ld = xresult.
d();
1675 for(
int i=0; i<ld; ++i)
1694 ensure(unexecutable(
"for_all: i, 0, xresult.d(),\ 1695 xresult.component(i)==old_x0.component(i)+old_x1.component(i)"));
1708 require(x0.
d() >= xresult.
d());
1709 require(x1.
d() >= xresult.
d());
1716 int ld = xresult.
d();
1717 for(
int i=0; i<ld; ++i)
1724 ensure(unexecutable(
"for_all: i, 0, xresult.d(), \ 1725 xresult.component(i) == old_x0.component(i) + old_x1.component(i)"));
1737 require(x0.
d() >= xresult.
d());
1738 require(x1.
d() >= xresult.
d());
1747 int ld = xresult.
d();
1748 for(
int i=0; i<ld; ++i)
1755 ensure(unexecutable(
"for_all: i, 0, xresult.d(), \ 1756 xresult.component(i) == old_x0.component(i)*(1.0 - xt) + old_x1.component(i)*xt"));
1768 require(precondition_of(
add(xresult, xother, xresult, xauto_access)));
1772 add(xresult, xother, xresult, xauto_access);
1776 ensure(postcondition_of(
add(xresult, xother, xresult, xauto_access)));
1796 require(x0.
d(xauto_access) >= xresult.
d(xauto_access));
1797 require(x1.
d(xauto_access) >= xresult.
d(xauto_access));
1812 int ld = xresult.
d();
1813 for(
int i=0; i<ld; ++i)
1832 ensure(unexecutable(
"for_all: i, 0, xresult.d(), \ 1833 xresult.component(i)==old_x0.component(i)-old_x1.component(i)"));
1846 require(x0.
d() >= xresult.
d());
1847 require(x1.
d() >= xresult.
d());
1854 int ld = xresult.
d();
1855 for(
int i=0; i<ld; ++i)
1862 ensure(unexecutable(
"for_all: i, 0, xresult.d(), \ 1863 xresult.component(i) == old_x0.component(i) - old_x1.component(i)"));
1875 require(precondition_of(
subtract(xresult, xother, xresult, xauto_access)));
1879 subtract(xresult, xother, xresult, xauto_access);
1883 ensure(postcondition_of(
subtract(xresult, xother, xresult, xauto_access)));
1900 require(x0.
d() >= xresult.
d());
1907 int ld = xresult.
d();
1908 for(
int i=0; i<ld; ++i)
1915 ensure(unexecutable(
"for all: i, 0, xresult.d(), \ 1916 xresult.component(i) == old_x0.component(i)*x1"));
1930 require(x0.
d(xauto_access) >= xresult.
d(xauto_access));
1943 int ld = xresult.
d();
1944 for(
int i=0; i<ld; ++i)
1962 ensure(unexecutable(
"for all: i, 0, xresult.d(), xresult.component(i) == old_x0.component(i)*x1"));
1975 require(precondition_of(
multiply(xresult, xother, xresult, xauto_access)));
1979 multiply(xresult, xother, xresult, xauto_access);
1983 ensure(postcondition_of(
multiply(xresult, xother, xresult, xauto_access)));
2000 require(x0.
d() >= xresult.
d());
2007 int ld = xresult.
d();
2008 for(
int i=0; i<ld; ++i)
2015 ensure(unexecutable(
"for all: i, 0, xresult.d(), \ 2016 xresult.component(i) == old_x0.component(i)/x1"));
2030 require(x0.
d(xauto_access) >= xresult.
d(xauto_access));
2043 int ld = xresult.
d();
2044 for(
int i=0; i<ld; ++i)
2062 ensure(unexecutable(
"for all: i, 0, xresult.d(),\ 2063 xresult.component(i) == old_x0.component(i)/x1"));
2076 require(precondition_of(
divide(xresult, xother, xresult, xauto_access)));
2080 divide(xresult, xother, xresult, xauto_access);
2084 ensure(postcondition_of(
divide(xresult, xother, xresult, xauto_access)));
2113 for(
int i=1; i<ld; ++i)
2129 ensure(unexecutable(
"xresult == max(x0)"));
2142 require(precondition_of(
max(x0, xresult, xauto_access)));
2148 max(x0, xresult, xauto_access);
2152 ensure(postcondition_of(
max(x0, xresult, xauto_access)));
2177 for(
int i=1; i<ld; ++i)
2193 ensure(unexecutable(
"xresult == min(x0)"));
2206 require(precondition_of(
min(x0, xresult, xauto_access)));
2212 min(x0, xresult, xauto_access);
2216 ensure(postcondition_of(
min(x0, xresult, xauto_access)));
2234 for(
int i=1; i<ld; ++i)
2245 ensure(unexecutable(
"xresult == max(x0)"));
2258 require(precondition_of(
max(x0, xresult)));
2268 ensure(postcondition_of(
max(x0, xresult)));
2286 for(
int i=1; i<ld; ++i)
2297 ensure(unexecutable(
"xresult == min(x0)"));
2310 require(precondition_of(
min(x0, xresult)));
2320 ensure(postcondition_of(
min(x0, xresult)));
2347 int ld = xvector.
d();
2348 for(
int i=0; i<ld; ++i)
2389 int ld = xvector.
d();
2390 for(
int i=0; i<ld; ++i)
2423 require(x0.
d() == x1.
d());
2430 for(
int i=0; result && i<ld; ++i)
2448 require(x0.
d() == x1.
d());
2455 for(
int i=0; result && i<ld; ++i)
2473 require(x0.
d() == x1.
d());
2480 for(
int i=0; result && i<ld; ++i)
2498 require(x0.
d() == x1.
d());
2505 for(
int i=0; result && i<ld; ++i)
2523 require(x0.
d() == x1.
d());
2530 for(
int i=0; result && i<ld; ++i)
2548 require(x0.
d() == x1.
d());
2555 for(
int i=0; result && i<ld; ++i)
2573 require(x0.
d() == x1.
d());
2580 for(
int i=0; result && i<ld; ++i)
2598 require(x0.
d() == x1.
d());
2605 for(
int i=0; result && i<ld; ++i)
2623 require(x0.
d() == x1.
d());
2630 for(
int i=0; result && i<ld; ++i)
2655 unsigned int result = 1;
2657 for(
int i=1; i<=xi; ++i)
int factor_ct
Number of factors (components) in tuple.
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 add(const e3_lite &x0, const e3_lite &x1, vd_value_type xt, e3_lite &xresult)
Weighted sum x0*(1-xt) + x1*xt (pre-allocated version for volatile types).
host_type * host() const
The poset this is a member of.
vd_value_type value_type
The type of component in the fiber; the scalar type in the fiber vector space.
SHEAF_DLL_SPEC vd_value_type contract(const vd_lite &xvector, const vd_lite &xcovector)
Contraction of vector xvector on covector xcovector (auto_allocated for volatile types).
bool full() const
True if both poset name and member name are not empty.
vd_lite()
Default constructor.
SHEAF_DLL_SPEC bool r_eql(const e3_lite &x0, const e3_lite &x1)
Relative equality comparison of e3_lite x0 to e3_lite x1 using tolerance double_tolerance.
SHEAF_DLL_SPEC unsigned int factorial(unsigned int xi)
Factorial of xi.
virtual bool host_is_ancestor_of(const poset_state_handle *other) const
True if other conforms to host.
Table dofs type for class tuple_table_dofs_type.
virtual vd_lite * clone() const
Virtual constructor, makes a new instance of the same type as this.
poset_path path(bool xauto_access=true) const
A path to this component.
bool is_same_type(const any_lite &xother) const
True if other is the same type as this.
The default name space; a poset which contains other posets as members.
void components(dof_type comps[], int comps_dimension) const
The values of all the components (pre-allocated version).
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...
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".
bool invariant() const
Class invariant.
virtual void components(dof_type xresult[], int comps_dimension) const
The values of all the components (preallocated version).
virtual const tp_lite & tp_prototype(int xp) const
Virtual constructor for general tensors of degree xp over this vector space.
virtual bool is_ancestor_of(const any_lite &xother) const
Conformance test; true if other conforms to this.
value_type component(int xindex) const
The xindex-th component.
virtual void put_is_vector(bool xauto_access)
Sets is_vector true.
vd()
The sheaf primitive type of the degrees of freedom.
A Cartesian product space.
virtual void get_read_access() const
Get read access to the state associated with this.
SHEAF_DLL_SPEC unsigned int binomial_coefficient(unsigned int xi, unsigned int xj)
Binomial coefficient (xi, xj).
virtual void put_components(const dof_type xcomps[], int xcomps_dimension)
Set values of all the components to the values in xcomps.
virtual const std::string & class_name() const
The name of this class.
poset_path scalar_space_path() const
The path of the underlying scalar space.
T::row_dofs_type & row_dofs(T &x0)
The row dofs pod type for x0 (mutable version).
SHEAF_DLL_SPEC void subtract(const vd &x0, const vd &x1, vd &xresult, bool xauto_access)
x0 subtract x1 (pre-allocated version for persistent types).
SHEAF_DLL_SPEC void divide_equal(vd &xresult, const vd_value_type &xother, bool xauto_access)
Vector x0 divided by scalar x1 (self-allocated version for persistent types); synonym for divide(xres...
An antisymmetric tensor of degree p over an abstract vector space (volatile version).
static const stp_lite & static_stp_prototype(int xp)
Static prototype for symmetric tensors of degree xp over this vector space.
bool is_ancestor_of(const any *other) const
True if other conforms to current.
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.
bool invariant() const
Class invariant.
Abstract vector space over dof_type (volatile version).
virtual volatile_type * lite_type() const
Virtual conversion to the associated volatile type.
SHEAF_DLL_SPEC bool c_eql(float xf0, float xf1)
Combined equality comparison of float xf0 to float xf1 using tolerance float_tolerance.
virtual schema_poset_member & schema()
The schema for this poset (mutable version).
SHEAF_DLL_SPEC bool c_eql(const e3_lite &x0, const e3_lite &x1)
Combined equality equality comparison of e3_lite x0 to e3_lite x1 using tolerance double_tolerance...
A space of scalars viewed as an antisymmetric tensor space of degree 0.
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 int d() const
Dimension of this as a vector space.
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.
virtual bool is_attached() const
True if this handle is attached to a non-void state.
virtual void put_is_covector(bool xauto_access)
Sets is_covector true.
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.
A member of a Cartesian product space; a tuple of attributes (volatile version).
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 const volatile_type & lite_prototype() const
Virtual constructor for the associated volatile type.
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. ...
table_dofs_type table_dofs() const
The table dofs.
vd_dof_type dof_type
The type of the degrees of freedom.
const double double_tolerance
Tolerance for double comparisons.
virtual const stp_lite & stp_prototype(int xp) const
Prototype for symmetric tensors of degree xp over this vector space.
SHEAF_DLL_SPEC bool a_eql(const e3_lite &x0, const e3_lite &x1)
Absolute equality comparison of e3_lite x0 to e3_lite x1 using tolerance double_tolerance.
virtual value_type component(int xindex) const
The value of the xi-th component.
SHEAF_DLL_SPEC void multiply_equal(vd &xresult, const vd_value_type &xother, bool xauto_access)
Vector x0 multiplied by scalar x1 (self-allocated version for persistent types); synonym for multiply...
Table dofs type for class vd_table_dofs_type.
static const atp_lite & static_atp_prototype(int xp)
Static prototype for antisymmetric tensors of degree xp over this vector space.
bool empty() const
True if both poset name and member name are empty.
SHEAF_DLL_SPEC void divide(const vd &x0, const vd_value_type &x1, vd &xresult, bool xauto_access)
Vector x0 divided by scalar x1 (pre-allocated version for persistent types).
dof_type & operator[](int xindex)
The value of the row dof corresponding to xindex (non const version).
SHEAF_DLL_SPEC void max(const vd &x0, vd_value_type &xresult, bool xauto_access)
Maximum component of x0, pre-allocated version.
static void make_standard_schema(namespace_poset &xns)
Creates the standard schema for this class in namespace xns.
A general tensor of degree p over an abstract vector space (volatile version). Volatile version does ...
static host_type & new_host(namespace_type &xns, const poset_path &xhost_path, const poset_path &xschema_path, const poset_path &xscalar_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...
bool contains_poset(pod_index_type xhub_id, bool xauto_access=true) const
True if this contains a poset with hub id xhub_id..
virtual bool is_covector(bool xauto_access) const
True if and only if this is a covector.
SHEAF_DLL_SPEC void min(const vd &x0, vd_value_type &xresult, bool xauto_access)
Minimum component of x0, pre-allocated version.
vd_lite & operator=(const vd_lite &xother)
Copy assignment operator.
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 of dimension d.
virtual bool is_vector(bool xauto_access) const
True if and only if this is a vector (as opposed to a covector).
virtual const atp_lite & atp_prototype(int xp) const
Prototype for antisymmetric tensors of degree xp over this vector space.
static const poset_path & standard_schema_path()
The path to the standard schema for this class.
T::table_dofs_type & table_dofs(T &x0)
The table dofs pod type for x0 (mutable version).
int_type pod_index_type
The plain old data index type.
virtual const std::string & class_name() const
The name of this class.
static const std::string & static_class_name()
The name of this class.
SHEAF_DLL_SPEC bool r_eql(float xf0, float xf1)
Relative equality comparison of float xf0 to float xf1 using tolerance float_tolerance.
vd_value_type value_type
The POD ("plain old data") type of scalar in the vector space of this.
SHEAF_DLL_SPEC void add_equal(vd &xresult, const vd &xother, bool xauto_access)
x0 add x1 (self-allocated version for persistent types); synonym for add(xresult, xother...
virtual value_type & operator[](int xindex)
The value of the component corresponding to xindex (non const version).
virtual vd * clone() const
Make a new handle, no state instance of current.
virtual int factor_ct() const
Number of factors (components) in tuple.
virtual int d() const
Dimension of this as a vector space.
virtual ~vd_lite()
Destructor.
SHEAF_DLL_SPEC bool a_eql(float xf0, float xf1)
Absolute equality comparison of float xf0 to float xf1 using tolerance float_tolerance.
An abstract client handle for a member of a poset.
vd_dof_type dof_type
The type of the degrees of freedom. Note that although dof_type == value_type in this implementation...
virtual void put_component(int xindex, value_type xvalue)
Sets the value of the xindex-th component to xvalue.
SHEAF_DLL_SPEC void multiply(const vd &x0, const vd_value_type &x1, vd &xresult, bool xauto_access)
Vector x0 multiplied by scalar x1 (pre-allocated version for persistent types).
A symmetric tensor of degree p over an abstract vector space (volatile version).
SHEAF_DLL_SPEC void subtract_equal(vd &xresult, const vd &xother, bool xauto_access)
x0 subtract_equal x1 (self-allocated version for persistent types); synonym for subtract(xresult, xother, xresult, xauto_access).
void put_components(const dof_type comps[], int comps_dimension)
Sets values of all the components to the values in comps.
Namespace for the fiber_bundles component of the sheaf system.
bool is_same_type(const any *other) const
True if other is the same type as this.
Abstract vector space over dof_type.
int factor_ct() const
The number of factors in this product.
Row dofs type for class vd.
bool operator==(const vd_lite &xother) const
True if this has the same components as xother.
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.
double vd_value_type
The type of component in the fiber; the scalar type in the fiber vector space.
static const tp_lite & static_tp_prototype(int xp)
Static prototype for general tensors of degree xp over this vector space.
SHEAF_DLL_SPEC std::ostream & operator<<(std::ostream &os, const binary_index &xbi)
Insert binary_index& xbi into ostream& os.
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
virtual vd & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
SHEAF_DLL_SPEC bool isunordered_or_equals(float x1, float x2)
True if isunordered(x1, x2) or x1 == x2.