21 #include "SheafSystem/tp.h" 23 #include "SheafSystem/abstract_poset_member.impl.h" 24 #include "SheafSystem/assert_contract.h" 25 #include "SheafSystem/at1.h" 26 #include "SheafSystem/at1_space.h" 27 #include "SheafSystem/fiber_bundles_namespace.h" 28 #include "SheafSystem/schema_poset_member.h" 29 #include "SheafSystem/tp_space.h" 30 #include "SheafSystem/wsv_block.h" 132 vd_lite::operator=(xrow_dofs);
136 postcondition_of(vd_lite::operator=(xrow_dofs));
214 int lfactor_ct = factor_ct();
217 char* lscalar_space_path =
new char[1];
218 lscalar_space_path[0] = 0;
223 char* lvector_space_path =
new char[1];
224 lvector_space_path[0] = 0;
263 if(!(dd() == 0 && p() == 0))
265 result =
static_cast<int>(
pow(static_cast<double>( dd() ),
266 static_cast<int>( p() )));
308 const string& result = static_class_name();
312 ensure(!result.empty());
327 static const string result(
"tp_lite");
331 ensure(!result.empty());
353 ensure(is_same_type(*result));
377 require(&xother != 0);
383 bool result =
dynamic_cast<const tp_lite*
>(&xother) != 0;
396 if(invariant_check())
400 disable_invariant_check();
404 invariance(vd_lite::invariant());
410 enable_invariant_check();
442 static const poset_path result(standard_schema_poset_name(),
"tp_schema");
446 ensure(result.
full());
447 ensure(result.
poset_name() == standard_schema_poset_name());
466 string lmember_names =
"p INT true";
467 lmember_names +=
" dd INT true";
468 lmember_names +=
" vector_space_path C_STRING true";
471 standard_schema_path().member_name(),
472 vd::standard_schema_path(),
502 require(!xhost_path.
empty());
505 require(xschema_path.
full());
507 require(schema_poset_member::conforms_to(xns, xschema_path, standard_schema_path()));
512 require(host_type::d(xns, xschema_path, xauto_access) == host_type::d(xns, xp, xvector_space_path, xauto_access));
518 host_type::new_table(xns, xhost_path, xschema_path, xp, xvector_space_path, xauto_access);
522 ensure(xns.
owns(result, xauto_access));
523 ensure(result.
path(
true) == xhost_path);
525 ensure(result.
schema(
true).
path(xauto_access) == xschema_path);
527 ensure(result.
factor_ct(
true) == result.
d(
true));
528 ensure(result.
d(
true) == host_type::d(xns, xschema_path, xauto_access));
530 ensure(result.
p(
true) == xp);
578 attach_to_state(xhost, xhub_id);
584 ensure(index() == xhub_id);
585 ensure(is_attached());
599 attach_to_state(xhost, xid.
hub_pod());
605 ensure(index() ==~ xid);
606 ensure(is_attached());
617 require(!xname.empty());
622 attach_to_state(xhost, xname);
628 ensure(name() == xname);
629 ensure(is_attached());
641 require(xother != 0);
645 attach_to_state(xother);
650 ensure(is_attached());
651 ensure(is_same_state(xother));
663 require(precondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
667 new_jim_state(xhost, 0,
false, xauto_access);
671 ensure(postcondition_of(new_jim_state(xhost, 0,
false, xauto_access)));
684 require(is_ancestor_of(&xother));
685 require(precondition_of(attach_to_state(&xother)));
689 attach_to_state(&xother);
693 ensure(postcondition_of(attach_to_state(&xother)));
706 require(precondition_of(attach_to_state(&xother)));
710 attach_to_state(&xother);
714 ensure(postcondition_of(attach_to_state(&xother)));
739 require(state_is_read_accessible());
756 p(
bool xauto_access)
const 760 require(state_is_auto_read_accessible(xauto_access));
792 require(state_is_read_accessible());
810 dd(
bool xauto_access)
const 814 require(state_is_auto_read_accessible(xauto_access));
847 require(state_is_read_accessible());
855 ensure(!result.
empty());
868 require(state_is_auto_read_accessible(xauto_access));
886 ensure(!result.
empty());
899 require(state_is_read_accessible());
900 require(name_space()->state_is_read_accessible());
922 require(state_is_auto_read_accessible(xauto_access));
923 require(name_space()->state_is_auto_read_accessible(xauto_access));
929 name_space()->get_read_access();
938 name_space()->release_access();
956 const string result = xvector_space_name +
"_" + xname;
1005 require(state_is_auto_read_accessible(xauto_access));
1024 require(state_is_auto_read_accessible(xauto_access));
1028 bool result = host()->variance(_index, xi, xauto_access);
1043 require(state_is_auto_read_write_accessible(xauto_access));
1047 host()->put_variance(_index, xvariance, xauto_access);
1062 require(state_is_auto_read_write_accessible(xauto_access));
1063 require((0 <= xi) && (xi < p(xauto_access)));
1067 host()->put_variance(_index, xi, xvariance, xauto_access);
1082 require(state_is_auto_read_accessible(xauto_access));
1086 bool result = host()->is_covariant(_index, xauto_access);
1101 require(state_is_auto_read_accessible(xauto_access));
1102 require((0 <= xi) && (xi < p(xauto_access)));
1106 bool result = host()->is_covariant(_index, xi, xauto_access);
1121 require(state_is_auto_read_accessible(xauto_access));
1125 host()->put_is_covariant(_index, xauto_access);
1129 ensure(is_covariant(xauto_access));
1142 require(state_is_auto_read_write_accessible(xauto_access));
1143 require((0 <= xi) && (xi < p(xauto_access)));
1147 host()->put_is_covariant(_index, xi, xauto_access);
1151 ensure(is_covariant(xi, xauto_access));
1164 require(state_is_auto_read_accessible(xauto_access));
1168 bool result = host()->is_contravariant(_index, xauto_access);
1185 require(state_is_auto_read_accessible(xauto_access));
1186 require((0 <= xi) && (xi < p(xauto_access)));
1190 bool result = host()->is_contravariant(_index, xi, xauto_access);
1205 require(state_is_auto_read_accessible(xauto_access));
1209 host()->put_is_contravariant(_index, xauto_access);
1213 ensure(is_contravariant(xauto_access));
1226 require(state_is_auto_read_write_accessible(xauto_access));
1227 require((0 <= xi) && (xi < p(xauto_access)));
1231 host()->put_is_contravariant(_index, xi, xauto_access);
1235 ensure(is_contravariant(xi, xauto_access));
1271 const string& result = static_class_name();
1275 ensure(!result.empty());
1290 static const string result(
"tp");
1294 ensure(!result.empty());
1315 return reinterpret_cast<host_type*
>(_host);
1322 return dynamic_cast<const host_type*
>(xother) != 0;
1342 require(xother != 0);
1349 bool result =
dynamic_cast<const tp*
>(xother) != 0;
1353 ensure(invariant());
1378 ensure(result != 0);
1399 invariance(vd::invariant());
1401 if(invariant_check())
1405 disable_invariant_check();
1409 invariance(state_is_read_accessible() ? p() >= 0 :
true);
1413 enable_invariant_check();
1418 ensure(is_derived_query);
1452 #include "SheafSystem/error_message.h" 1453 #include "SheafSystem/at0.h" 1454 #include "SheafSystem/at1.h" 1455 #include "SheafSystem/at2.h" 1456 #include "SheafSystem/at3_e3.h" 1457 #include "SheafSystem/st2.h" 1458 #include "SheafSystem/st3.h" 1459 #include "SheafSystem/st3_e3.h" 1460 #include "SheafSystem/st4_e2.h" 1461 #include "SheafSystem/st4_e3.h" 1462 #include "SheafSystem/t2.h" 1463 #include "SheafSystem/t3.h" 1464 #include "SheafSystem/t3_e3.h" 1465 #include "SheafSystem/t4_e2.h" 1466 #include "SheafSystem/t4_e3.h" 1474 require(xp >= 0 && xp <= x0.
p());
1475 require(xq >= 0 && xq <= x0.
p());
1476 require(xresult.
p() == x0.
p() - 2);
1486 if(t2_x0 && at0_xresult)
1488 contract(*t2_x0, xp, xq, *at0_xresult);
1490 else if(t3_x0 && at1_xresult)
1492 contract(*t3_x0, xp, xq, *at1_xresult);
1496 post_fatal_error_message(\
1497 "Unsupported argument types in call to contract(...)");
1517 require(xp >= 0 && xp <= x0.
p(xauto_access));
1518 require(xq >= 0 && xq <= x0.
p(xauto_access));
1519 require(xresult.
p(xauto_access) == x0.
p(xauto_access) - 2);
1523 const t2* t2_x0 =
dynamic_cast<const t2*
>(&x0);
1524 const t3* t3_x0 =
dynamic_cast<const t3*
>(&x0);
1526 at0* at0_xresult =
dynamic_cast<at0*
>(&xresult);
1527 at1* at1_xresult =
dynamic_cast<at1*
>(&xresult);
1529 if(t2_x0 && at0_xresult)
1531 contract(*t2_x0, xp, xq, *at0_xresult, xauto_access);
1533 else if(t3_x0 && at1_xresult)
1535 contract(*t3_x0, xp, xq, *at1_xresult, xauto_access);
1539 post_fatal_error_message(\
1540 "Unsupported argument types in call to contract(...)");
1558 require(x0.
dd() == xresult.
dd());
1572 if(t2_x0 && at2_xresult)
1574 alt(*t2_x0, *at2_xresult);
1576 else if(t2_x0 && t2_xresult)
1578 alt(*t2_x0, *t2_xresult);
1580 else if(t3_e3_x0 && at3_e3_xresult)
1582 alt(*t3_e3_x0, *at3_e3_xresult);
1584 else if(t3_x0 && t3_xresult)
1586 alt(*t3_x0, *t3_xresult);
1588 else if(t3_x0 && at3_xresult)
1590 alt(*t3_x0, *at3_xresult);
1594 post_fatal_error_message(\
1595 "Unsupported argument types in call to alt(...)");
1615 require(x0.
dd() == xresult.
dd());
1619 const t2* t2_x0 =
dynamic_cast<const t2*
>(&x0);
1620 const t3* t3_x0 =
dynamic_cast<const t3*
>(&x0);
1621 const t3_e3* t3_e3_x0 =
dynamic_cast<const t3_e3*
>(&x0);
1623 at2* at2_xresult =
dynamic_cast<at2*
>(&xresult);
1624 t2* t2_xresult =
dynamic_cast<t2*
>(&xresult);
1625 at3_e3* at3_e3_xresult =
dynamic_cast<at3_e3*
>(&xresult);
1626 at3* at3_xresult =
dynamic_cast<at3*
>(&xresult);
1627 t3* t3_xresult =
dynamic_cast<t3*
>(&xresult);
1629 if(t2_x0 && at2_xresult)
1631 alt(*t2_x0, *at2_xresult, xauto_access);
1633 else if(t2_x0 && t2_xresult)
1635 alt(*t2_x0, *t2_xresult, xauto_access);
1637 else if(t3_e3_x0 && at3_e3_xresult)
1639 alt(*t3_e3_x0, *at3_e3_xresult, xauto_access);
1641 else if(t3_x0 && t3_xresult)
1643 alt(*t3_x0, *t3_xresult, xauto_access);
1645 else if(t3_x0 && at3_xresult)
1647 alt(*t3_x0, *at3_xresult, xauto_access);
1651 post_fatal_error_message(\
1652 "Unsupported argument types in call to alt(...)");
1670 require(x0.
dd() == xresult.
dd());
1688 if(t2_x0 && st2_xresult)
1690 sym(*t2_x0, *st2_xresult);
1692 else if(t2_x0 && t2_xresult)
1694 sym(*t2_x0, *t2_xresult);
1696 else if(t3_e3_x0 && st3_e3_xresult)
1698 sym(*t3_e3_x0, *st3_e3_xresult);
1700 else if(t3_x0 && t3_xresult)
1702 sym(*t3_x0, *t3_xresult);
1704 else if(t3_x0 && st3_xresult)
1706 sym(*t3_x0, *st3_xresult);
1708 else if(t4_e2_x0 && st4_e2_xresult)
1710 sym(*t4_e2_x0, *st4_e2_xresult);
1712 else if(t4_e3_x0 && st4_e3_xresult)
1714 sym(*t4_e3_x0, *st4_e3_xresult);
1718 post_fatal_error_message(\
1719 "Unsupported argument types in call to sym(...)");
1739 require(x0.
dd() == xresult.
dd());
1743 const t2* t2_x0 =
dynamic_cast<const t2*
>(&x0);
1744 const t3* t3_x0 =
dynamic_cast<const t3*
>(&x0);
1745 const t3_e3* t3_e3_x0 =
dynamic_cast<const t3_e3*
>(&x0);
1746 const t4_e2* t4_e2_x0 =
dynamic_cast<const t4_e2*
>(&x0);
1747 const t4_e3* t4_e3_x0 =
dynamic_cast<const t4_e3*
>(&x0);
1749 st2* st2_xresult =
dynamic_cast<st2*
>(&xresult);
1750 st3* st3_xresult =
dynamic_cast<st3*
>(&xresult);
1751 st3_e3* st3_e3_xresult =
dynamic_cast<st3_e3*
>(&xresult);
1752 t2* t2_xresult =
dynamic_cast<t2*
>(&xresult);
1753 t3* t3_xresult =
dynamic_cast<t3*
>(&xresult);
1754 st4_e2* st4_e2_xresult =
dynamic_cast<st4_e2*
>(&xresult);
1755 st4_e3* st4_e3_xresult =
dynamic_cast<st4_e3*
>(&xresult);
1757 if(t2_x0 && st2_xresult)
1759 sym(*t2_x0, *st2_xresult, xauto_access);
1761 else if(t2_x0 && t2_xresult)
1763 sym(*t2_x0, *t2_xresult, xauto_access);
1765 else if(t3_e3_x0 && st3_e3_xresult)
1767 sym(*t3_e3_x0, *st3_e3_xresult, xauto_access);
1769 else if(t3_x0 && t3_xresult)
1771 sym(*t3_x0, *t3_xresult, xauto_access);
1773 else if(t3_x0 && st3_xresult)
1775 sym(*t3_x0, *st3_xresult, xauto_access);
1777 else if(t4_e2_x0 && st4_e2_xresult)
1779 sym(*t4_e2_x0, *st4_e2_xresult, xauto_access);
1781 else if(t4_e3_x0 && st4_e3_xresult)
1783 sym(*t4_e3_x0, *st4_e3_xresult, xauto_access);
1787 post_fatal_error_message(\
1788 "Unsupported argument types in call to sym(...)");
1806 require(x1.
dd() == x0.
dd());
1807 require(xresult.
dd() == x0.
dd());
1808 require(xresult.
p() == x0.
p() + x1.
p());
1825 if(at1_x0 && at1_x1 && t2_xresult)
1827 tensor(*at1_x0, *at1_x1, *t2_xresult);
1829 else if(t2_x0 && at1_x1 && t3_xresult)
1831 tensor(*t2_x0, *at1_x1, *t3_xresult);
1833 else if(at1_x0 && t2_x1 && t3_xresult)
1835 tensor(*at1_x0, *t2_x1, *t3_xresult);
1837 else if(at2_x0 && at1_x1 && t3_xresult)
1839 tensor(*at2_x0, *at1_x1, *t3_xresult);
1841 else if(at1_x0 && at2_x1 && t3_xresult)
1843 tensor(*at1_x0, *at2_x1, *t3_xresult);
1845 else if(st2_x0 && at1_x1 && t3_xresult)
1847 tensor(*st2_x0, *at1_x1, *t3_xresult);
1849 else if(at1_x0 && st2_x1 && t3_xresult)
1851 tensor(*at1_x0, *st2_x1, *t3_xresult);
1855 post_fatal_error_message(\
1856 "Unsupported argument types in call to tensor(...)");
1877 require(xresult.
p(xauto_access) == x0.
p(xauto_access) + x1.
p(xauto_access));
1881 const at1* at1_x0 =
dynamic_cast<const at1*
>(&x0);
1882 const at2* at2_x0 =
dynamic_cast<const at2*
>(&x0);
1883 const st2* st2_x0 =
dynamic_cast<const st2*
>(&x0);
1884 const t2* t2_x0 =
dynamic_cast<const t2*
>(&x0);
1886 const at1* at1_x1 =
dynamic_cast<const at1*
>(&x1);
1887 const at2* at2_x1 =
dynamic_cast<const at2*
>(&x1);
1888 const st2* st2_x1 =
dynamic_cast<const st2*
>(&x1);
1889 const t2* t2_x1 =
dynamic_cast<const t2*
>(&x1);
1891 t2* t2_xresult =
dynamic_cast<t2*
>(&xresult);
1892 t3* t3_xresult =
dynamic_cast<t3*
>(&xresult);
1894 if(at1_x0 && at1_x1 && t2_xresult)
1896 tensor(*at1_x0, *at1_x1, *t2_xresult, xauto_access);
1898 else if(t2_x0 && at1_x1 && t3_xresult)
1900 tensor(*t2_x0, *at1_x1, *t3_xresult, xauto_access);
1902 else if(at1_x0 && t2_x1 && t3_xresult)
1904 tensor(*at1_x0, *t2_x1, *t3_xresult, xauto_access);
1906 else if(at2_x0 && at1_x1 && t3_xresult)
1908 tensor(*at2_x0, *at1_x1, *t3_xresult, xauto_access);
1910 else if(at1_x0 && at2_x1 && t3_xresult)
1912 tensor(*at1_x0, *at2_x1, *t3_xresult, xauto_access);
1914 else if(st2_x0 && at1_x1 && t3_xresult)
1916 tensor(*st2_x0, *at1_x1, *t3_xresult, xauto_access);
1918 else if(at1_x0 && st2_x1 && t3_xresult)
1920 tensor(*at1_x0, *st2_x1, *t3_xresult, xauto_access);
1924 post_fatal_error_message(\
1925 "Unsupported argument types in call to tensor(...)");
A tensor of degree 3 over an abstract vector space (volatile version).
virtual int dd() const
Dimension of the underlying vector space.
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 ...
An antisymmetric rank 3 tensor over an abstract vector space (volatile version).
int factor_ct
Number of factors (components) in tuple.
virtual volatile_type * lite_type() const
Virtual conversion to the associated volatile type.
SHEAF_DLL_SPEC void alt(const t2_lite &x0, at2_lite &xresult)
The alternating (antisymmetric) part of tensor x0 (pre-allocated version for volatile types)...
virtual int dd() const
Dimension of the underlying vector space.
bool full() const
True if both poset name and member name are not empty.
void put_variance(const tensor_variance &xvariance, bool xauto_access)
Sets the variance to xvariance.
virtual int p() const
The degree of the tensors in host(); the sum of the contravariant and covariant degrees.
The "type" of a tensor; specifies the degree and the co- or contra-variance for each index of a tenso...
An antisymmetric rank 3 tensor over a Euclidean vector space of dimension 3. (volatile version)...
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...
virtual const volatile_type & lite_prototype() const
Virtual constructor for the associated volatile type.
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 tensor of degree 3 over an abstract vector space (persistent version).
poset_path vector_space_path() const
The path of the underlying vector space.
A general antisymmetric tensor of degree 1 over an abstract vector space (volatile version)...
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.
SHEAF_DLL_SPEC void sym(const t2_lite &x0, st2_lite &xresult)
The symmetric part of tensor x0 (pre-allocated version for volatile types).
A symmetric rank 3 tensor over a 3D Euclidean vector space (persistent version).
A path defined by a poset name and a member name separated by a forward slash ('/'). For example: "cell_definitions/triangle".
virtual int d() const
Dimension of this as a vector space.
A tensor of degree 4 over a Euclidean vector space of dimension 2 (persistent version).
virtual void put_is_contravariant(bool xauto_access)
Sets all tensor index positions to contravariant.
virtual const std::string & class_name() const
The name of this class.
host_type * host() const
The poset this is a member of.
bool invariant() const
Class invariant.
static const std::string create_tensor_space_name(const std::string &xvector_space_name, const std::string &xname)
Create a standard tensor space name.
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.
bool is_ancestor_of(const any *other) const
True if other conforms to current.
A symmetric rank 4 tensor over a Euclidean vector space of dimension 3. (volatile version)...
int dd
Dimension of the underlying vector space.
T::row_dofs_type & row_dofs(T &x0)
The row dofs pod type for x0 (mutable version).
A tensor of degree 4 over a Euclidean vector space of dimension 3 (persistent version).
virtual bool is_covariant(bool xauto_access) const
True if and only if all tensor index positions are covariant.
virtual int p() const
The degree of the tensor; the sum of the contravariant and covariant degrees.
A tensor of degree 2 over an abstract vector space (volatile version).
A general tensor of "degree" p and given "variance" over an abstract vector space.
Abstract base class with useful features for all volatile objects.
An antisymmetric rank 3 tensor over a 3D Euclidean vector space.
Abstract base class with useful features for all objects.
static const poset_path & standard_schema_path()
The path to the standard schema for this class.
A tensor of degree 3 over a Euclidean vector space of dimension 3 (volatile version).
A general symmetric tensor of degree 2 over an abstract vector space (volatile version).
virtual schema_poset_member & schema()
The schema for this poset (mutable version).
static void make_standard_schema(namespace_poset &xns)
Creates the standard schema for this class in namespace xns.
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 void detach_from_state()
Detach this handle from its state, if any.
An index within the external ("client") scope of a given id space.
A tensor of degree 4 over a Euclidean vector space of dimension 3 (volatile version).
A scalar viewed as an antisymmetric tensor of degree 0. As the degree is 0 there is nothing to be sym...
std::string poset_name() const
The poset name part of the path.
virtual pod_index_type vector_space_index() const
Index of the underlying vector space.
virtual ~tp_lite()
Destructor.
virtual bool host_is_ancestor_of(const poset_state_handle *other) const
True if other conforms to host.
bool contains_path(const poset_path &xpath, bool xauto_access=true) const
True if this contains the poset or poset member specified by xpath.
tp_lite()
Default constructor.
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. ...
int p(int xd, int xdd) const
Tensor degree as a function of tensor dimension xd and domain dimension xdd.
int d
Dimension of this as a vector space.
A symmetric rank 3 tensor over an abstract vector space (persistent version).
A symmetric rank 3 tensor over an abstract vector space. (volatile version).
An antisymmetric rank 3 tensor over an abstract vector space (volatile version).
A symmetric rank 3 tensor over a 3D Euclidean vector space (persistent version).
bool empty() const
True if both poset name and member name are empty.
A general tensor of degree p over an abstract vector space (volatile version). Volatile version does ...
bool invariant() const
Class invariant.
c_string vector_space_path
The path of the underlying vector space.
virtual tp & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
bool contains_poset(pod_index_type xhub_id, bool xauto_access=true) const
True if this contains a poset with hub id xhub_id..
A symmetric rank 4 tensor over a Euclidean vector space of dimension 3. (volatile version)...
static const std::string & static_class_name()
The name of this class.
poset_path scalar_space_path() const
The path of the underlying space of scalars.
An abstract vector space viewed as an antisymmetric tensor space of degree 1.
poset_path vector_space_path() const
The path of the underlying vector space.
virtual const std::string & class_name() const
The name of this class.
static int d(const namespace_poset &xns, const poset_path &xschema_path, bool xauto_access)
The tensor dimension implied by the schema specified by xschema_path.
virtual tp_space & vector_space() const
The underlying vector space.
Table dofs type for class tp.
static int factor_ct(int xd)
Factor_ct() as a function of dimension xd.
virtual tp * clone() const
Make a new handle, no state instance of current.
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.
int dd() const
The dimension of the underlying ("domain") vector space.
bool variance(int xi) const
The variance of the xi-th index; covariant if true, contravariant if false.
A symmetric rank 3 tensor over a Euclidean vector space of dimension 3. (volatile version)...
A symmetric rank 3 tensor over a 3D Euclidean vector space (persistent version).
int p
The degree of the tensor; the sum of the contravariant and covariant degrees.
tp_lite & operator=(const tp_lite &xother)
Assignment operator.
virtual tensor_variance variance(bool xauto_access) const
The variance.
virtual bool is_ancestor_of(const any_lite &xother) const
Conformance test; true if other conforms to this.
A general antisymmetric tensor of degree 2 over an abstract vector space (volatile version)...
An abstract client handle for a member of a poset.
A tensor of degree 4 over a Euclidean vector space of dimension 2 (volatile version).
virtual void put_is_covariant(bool xauto_access)
Sets all tensor index positions to covariant.
c_string scalar_space_path
The path of the underlying scalar space.
table_dofs_type table_dofs() const
The table dofs.
static host_type & new_host(namespace_type &xns, const poset_path &xhost_path, const poset_path &xschema_path, int xp, 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...
static const std::string & static_class_name()
The name of this class.
An abstract tensor space of degree p.
SHEAF_DLL_SPEC void tensor(const at1_lite &x0, const at1_lite &x1, t2_lite &xresult)
Tensor product (pre-allocated version for volatile types).
Namespace for the fiber_bundles component of the sheaf system.
A general symmetric tensor of degree 2 over an abstract vector space (persistent version).
SHEAF_DLL_SPEC void pow(const sec_at0 &x0, const vd_value_type &xexponent, sec_at0 &xresult, bool xauto_access)
Compute x0 to power xexponent (pow(x0, xexponent)) (pre-allocated version).
A tensor of degree 3 over a Euclidean vector space of dimension 3 (persistent version).
Row dofs type for class vd.
A general antisymmetric tensor of degree 2 over an abstract vector space.
virtual tp_lite * clone() const
Virtual constructor, makes a new instance of the same type as this.
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.
SHEAF_DLL_SPEC void contract(const t2_lite &x0, int xp, int xq, at0_lite &xresult)
Contraction on contravariant index xp and covariant index xq (pre-allocated version for volatime type...
A tensor of degree 2 over an abstract vector space (persistent version).
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.