SheafSystem  0.0.0.0
vd.h
Go to the documentation of this file.
1 
2 //
3 // Copyright (c) 2014 Limit Point Systems, Inc.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 
20 
21 #ifndef VD_H
22 #define VD_H
23 
24 #ifndef SHEAF_DLL_SPEC_H
25 #include "SheafSystem/sheaf_dll_spec.h"
26 #endif
27 
28 #ifndef PRIMITIVE_TYPE_H
29 #include "SheafSystem/primitive_type.h"
30 #endif
31 
32 #ifndef TUPLE_H
33 #include "SheafSystem/tuple.h"
34 #endif
35 
36 #ifndef STD_CMATH_H
37 #include "SheafSystem/std_cmath.h"
38 #endif
39 
40 #ifndef VD_TABLE_DOFS_TYPE_H
41 #include "SheafSystem/vd_table_dofs_type.h"
42 #endif
43 
44 namespace fiber_bundle
45 {
46  //
47  // Forward declarations
48  //
49 
50  class at0;
51  class vd_space;
52 
53 //==============================================================================
54 // CLASS VD_ROW_DOFS_TYPE
55 //==============================================================================
56 
60 template <typename T>
62 {
63 public:
64 
68  typedef T dof_type;
69 
74 
78  static const std::string& static_class_name();
79 
84  T& operator[] (int xindex);
85 
90  const T& operator[] (int xindex) const;
91 
95  row_dofs_type* clone() const;
96 };
97 
98 
99 //==============================================================================
100 // CLASS VD_LITE
101 //==============================================================================
102 
103 class tp_lite;
104 class atp_lite;
105 class stp_lite;
106 
111 class SHEAF_DLL_SPEC vd_lite : public tuple_lite
112 {
113  //============================================================================
115  //============================================================================
117 
118 public:
119 
124 
130 
135 
140 
144  vd_lite();
145 
149  vd_lite(const vd_lite& xother);
150 
154  vd_lite& operator=(const vd_lite& xother);
155 
159  bool operator==(const vd_lite& xother) const;
160 
164  virtual ~vd_lite();
165 
169  vd_lite(const row_dofs_type& xrow_dofs);
170 
174  vd_lite& operator=(const row_dofs_type& xrow_dofs);
175 
179  virtual int d() const;
180 
184  value_type component(int xindex) const;
185 
189  void put_component(int xindex, value_type xcomp);
190 
194  virtual void components(dof_type xresult[], int comps_dimension) const;
195 
199  virtual void put_components(const dof_type xcomps[], int xcomps_dimension);
200 
204  vd_lite& operator=(const value_type& xvalue);
205 
210  bool operator==(const value_type& xvalue) const;
211 
216  virtual value_type& operator[] (int xindex);
217 
222  virtual const value_type& operator[] (int xindex) const;
223 
228  static const tp_lite& static_tp_prototype(int xp);
229 
234  virtual const tp_lite& tp_prototype(int xp) const;
235 
240  static const atp_lite& static_atp_prototype(int xp);
241 
246  virtual const atp_lite& atp_prototype(int xp) const;
247 
252  static const stp_lite& static_stp_prototype(int xp);
253 
258  virtual const stp_lite& stp_prototype(int xp) const;
259 
260 
261 protected:
262 private:
263 
265 
266 
267  //============================================================================
269  //============================================================================
271 
272 public:
273 
277  virtual int factor_ct() const;
278 
279 protected:
280 private:
281 
283 
284 
285  //============================================================================
287  //============================================================================
289 
290 public:
291 
295  virtual const std::string& class_name() const;
296 
300  static const std::string& static_class_name();
301 
305  virtual vd_lite* clone() const;
306 
310  table_dofs_type table_dofs() const;
311 
312 protected:
313 private:
314 
316 
317 
318  //============================================================================
320  //============================================================================
322 
323 public:
324 
328  virtual bool is_ancestor_of(const any_lite& xother) const;
329 
333  bool invariant() const;
334 
335 protected:
336 private:
337 
339 };
340 
341 
342 //==============================================================================
343 // CLASS VD
344 //==============================================================================
345 
346 
350 class SHEAF_DLL_SPEC vd : public tuple
351 {
352  // ===========================================================
354  // ===========================================================
356 
357 public:
358 
363 
367  typedef at0 scalar_type;
368 
372  static const poset_path& standard_schema_path();
373 
377  static void make_standard_schema(namespace_poset& xns);
378 
384  static host_type& new_host(namespace_type& xns,
385  const poset_path& xhost_path,
386  const poset_path& xschema_path,
387  const poset_path& xscalar_space_path,
388  bool xauto_access);
389 
390 protected:
391 
392 private:
393 
395 
396  //============================================================================
398  //============================================================================
400 
401 public:
402 
403  // Typedefs:
404 
409 
414 
419 
424 
429  // same type.
432 
436  //static const primitive_type sheaf_dof_type;
437 
441  vd();
442 
444 
448  virtual vd& operator=(const abstract_poset_member& xother);
449 
453  vd& operator=(const vd& xother);
454 
458  virtual ~vd();
459 
463  vd(poset_state_handle* xhost, bool xauto_access = true);
464 
469  vd(const poset_state_handle* xhost, pod_index_type xhub_id);
470 
475  vd(const poset_state_handle* xhost, const scoped_index& xid);
476 
481  vd(const poset_state_handle* xhost, const std::string& xname);
482 
486  explicit vd(const abstract_poset_member* xother);
487 
491  virtual int d() const;
492 
496  virtual int d(bool xauto_access) const;
497 
501  poset_path scalar_space_path() const;
502 
506  poset_path scalar_space_path(bool xauto_access) const;
507 
511  virtual value_type component(int xindex) const;
512 
516  value_type component(int xindex, bool xauto_access) const;
517 
521  virtual void put_component(int xindex, value_type xvalue);
522 
526  void put_component(int xindex, value_type xvalue, bool xauto_access);
527 
531  void components(dof_type comps[], int comps_dimension) const;
532 
536  void put_components(const dof_type comps[], int comps_dimension);
537 
542  dof_type& operator[] (int xindex);
543 
548  const dof_type& operator[] (int xindex) const;
549 
553  virtual const volatile_type& lite_prototype() const;
554 
558  virtual volatile_type* lite_type() const;
559 
563  virtual bool is_vector(bool xauto_access) const;
564 
568  virtual void put_is_vector(bool xauto_access);
569 
573  virtual bool is_covector(bool xauto_access) const;;
574 
578  virtual void put_is_covector(bool xauto_access);
579 
580 protected:
581 private:
582 
584 
585  //============================================================================
587  //============================================================================
589 
590 public:
591 
595  virtual const std::string& class_name() const;
596 
600  static const std::string& static_class_name();
601 
607  inline vd* clone(bool xnew_state, bool xauto_access = true) const
608  {
609  return static_cast<vd*>(tuple::clone(xnew_state, xauto_access));
610  }
611 
612 protected:
613 private:
614 
616 
617  // ===========================================================
619  // ===========================================================
621 
622 public:
623 
627  host_type* host() const;
628 
632  virtual bool host_is_ancestor_of(const poset_state_handle* other) const;
633 
634 protected:
635 
636 private:
637 
639 
640 
641  //============================================================================
643  //============================================================================
645 
646 public:
647 
651  bool is_ancestor_of(const any* other) const;
652 
656  virtual vd* clone() const;
657 
661  bool invariant() const;
662 
663 
664 protected:
665 private:
666 
668 };
669 
670 //==============================================================================
671 // NON-MEMBER FUNCTIONS
672 //==============================================================================
673 
674 #ifndef DOXYGEN_1_5_4_SKIP_UNKNOWN
675 
679 SHEAF_DLL_SPEC std::ostream& operator<<(std::ostream& xos, const vd_lite& x0);
680 
684 SHEAF_DLL_SPEC std::ostream& operator<<(std::ostream& xos, const vd& x0);
685 
686 #endif // ifndef DOXYGEN_1_5_4_SKIP_UNKNOWN
687 
688 // ===========================================================
689 // TENSOR TRAITS
690 // ===========================================================
691 
692 
693 
694 // Forward declarations needed for specialization:
695 
696 class at2_lite;
697 class at3_lite;
698 class atp_lite;
699 class st2_lite;
700 class st3_lite;
701 class st4_lite;
702 class stp_lite;
703 class t2_lite;
704 class t3_lite;
705 class t4_lite;
706 class tp_lite;
707 
714 template <int P, typename VECTOR_TYPE> class tensor_traits;
715 
719 template <>
721 {
722 public:
726  typedef at0 tp_type;
727 
731  typedef at0 atp_type;
732 
736  typedef at0 stp_type;
737 };
738 
742 template <>
744 {
745 public:
749  typedef vd_lite tp_type;
750 
754  typedef vd_lite atp_type;
755 
759  typedef vd_lite stp_type;
760 };
761 
765 template <>
767 {
768 public:
772  typedef t2_lite tp_type;
773 
778 
783 };
784 
788 template <>
790 {
791 public:
795  typedef t3_lite tp_type;
796 
801 
806 };
807 
811 template <>
813 {
814 public:
818  typedef t4_lite tp_type;
819 
823  typedef void atp_type;
824 
829 };
830 
831 
832 // ===========================================================
833 // VECTOR ALGEBRA
834 // ===========================================================
835 
840 namespace vd_algebra
841 {
842 
843 // ===========================================================
844 // VECTOR ALGEBRA: ADDITION
845 // ===========================================================
846 
850 SHEAF_DLL_SPEC void add(const vd& x0, const vd& x1, vd& xresult, bool xauto_access);
851 
855 SHEAF_DLL_SPEC void add(const vd_lite& x0, const vd_lite& x1, vd_lite& xresult);
856 
860 SHEAF_DLL_SPEC void add(const vd_lite& x0, const vd_lite& x1, vd_value_type xt, vd_lite& xresult);
861 
865 template <typename T>
866 T* add(const T& x0, const T& x1);
867 
872 SHEAF_DLL_SPEC void add_equal(vd& xresult, const vd& xother, bool xauto_access);
873 
877 template <typename T>
878 void add_equal(T& xresult, const T& xother);
879 
884 template <typename T>
885 T* operator+(const T& x0, const T& x1);
886 
891 template <typename T>
892 T& operator+=(T& xresult, const T& xother);
893 
894 
895 // ===========================================================
896 // VECTOR ALGEBRA: SUBTRACTION
897 // ===========================================================
898 
902 SHEAF_DLL_SPEC void subtract(const vd& x0, const vd& x1, vd& xresult, bool xauto_access);
903 
907 SHEAF_DLL_SPEC void subtract(const vd_lite& x0, const vd_lite& x1, vd_lite& xresult);
908 
912 template <typename T>
913 T* subtract(const T& x0, const T& x1);
914 
919 SHEAF_DLL_SPEC void subtract_equal(vd& xresult, const vd& xother, bool xauto_access);
920 
924 template <typename T>
925 void subtract_equal(T& xresult, const T& xother);
926 
931 template <typename T>
932 T* operator-(const T& x0, const T& x1);
933 
938 template <typename T>
939 T& operator-=(T& xresult, const T& xother);
940 
941 
942 // ===========================================================
943 // VECTOR ALGEBRA: SCALAR MULTIPLICATION
944 // ===========================================================
945 
946 #ifndef DOXYGEN_1_5_4_SKIP_UNKNOWN
947 
951 SHEAF_DLL_SPEC void multiply(const vd& x0, const vd_value_type& x1, vd& xresult, bool xauto_access);
952 
956 SHEAF_DLL_SPEC void multiply(const vd_lite& x0, const vd_value_type& x1, vd_lite& xresult);
957 
961 template <typename T>
962 T* multiply(const T& x0, const vd_value_type& x1);
963 
968 SHEAF_DLL_SPEC void multiply_equal(vd& xresult, const vd_value_type& xother, bool xauto_access);
969 
973 template <typename T>
974 void multiply_equal(T& xresult, const vd_value_type& xother);
975 
980 template <typename T>
981 T* operator*(const T& x0, const vd_value_type& x1);
982 
987 template <typename T>
988 T& operator*=(T& xresult, const vd_value_type& x1);
989 
990 #endif // ifndef DOXYGEN_1_5_4_SKIP_UNKNOWN
991 
992 // ===========================================================
993 // VECTOR ALGEBRA: SCALAR DIVISION
994 // ===========================================================
995 
999 SHEAF_DLL_SPEC void divide(const vd& x0, const vd_value_type& x1, vd& xresult,
1000  bool xauto_access);
1001 
1005 SHEAF_DLL_SPEC void divide(const vd_lite& x0, const vd_value_type& x1, vd_lite& xresult);
1006 
1010 template <typename T>
1011 T* divide(const T& x0, const vd_value_type& x1);
1012 
1017 SHEAF_DLL_SPEC void divide_equal(vd& xresult, const vd_value_type& xother, bool xauto_access);
1018 
1022 template <typename T>
1023 void divide_equal(T& xresult, const vd_value_type& x1);
1024 
1029 template <typename T>
1030 T* operator/(const T& x0, const vd_value_type& x1);
1031 
1036 template <typename T>
1037 T& operator/=(T& xresult, const vd_value_type& x1);
1038 
1039 
1040 #ifndef DOXYGEN_1_5_4_SKIP_UNKNOWN
1041 
1042 // ===========================================================
1043 // VECTOR ALGEBRA: COMPONENT EXTREMA
1044 // ===========================================================
1045 
1049 SHEAF_DLL_SPEC void max(const vd& x0, vd_value_type& xresult, bool xauto_access);
1050 
1054 SHEAF_DLL_SPEC vd_value_type max(const vd& x0, bool xauto_access);
1055 
1060 SHEAF_DLL_SPEC void min(const vd& x0, vd_value_type& xresult, bool xauto_access);
1061 
1065 SHEAF_DLL_SPEC vd_value_type min(const vd& x0, bool xauto_access);
1066 
1070 SHEAF_DLL_SPEC void max(const vd_lite& x0, vd_value_type& xresult);
1071 
1075 SHEAF_DLL_SPEC vd_value_type max(const vd_lite& x0);
1076 
1080 SHEAF_DLL_SPEC void min(const vd_lite& x0, vd_value_type& xresult);
1081 
1085 SHEAF_DLL_SPEC vd_value_type min(const vd_lite& x0);
1086 
1087 #endif // ifndef DOXYGEN_1_5_4_SKIP_UNKNOWN
1088 
1089 // ===========================================================
1090 // VECTOR ALGEBRA: CONTRACTION
1091 // ===========================================================
1092 
1093 // Bishop and Goldberg's "natural pairing" makes for a
1094 // nice theoretical development, but in use it's clumsy nomenclature.
1095 // Koenderink calls the "natural pairing" operation "contract",
1096 // because, once you have the general contraction operator defined,
1097 // you can think of the "natural pairing" of vector v and a covector c
1098 // as contracting the tensor vc on its 2 indices to form a scalar.
1099 // But you need the special case vector on covector in order to define
1100 // tensors in the first place, which is why B&G
1101 // introduce it as the "natural pairing".
1102 //
1103 // Furthermore, the "natural pairing" is just another name for the
1104 // action of covector c as a map of vectors to reals. The action as
1105 // a map notion generalizes to the fundamental definition of all
1106 // tensor types. Every tensor type of degree p is a map that takes
1107 // p vectors and/or covectors as arguments and produces a scalar.
1108 // Since we can always form the tensor product of these p arguments,
1109 // we can think of the general tensor map action as contraction.
1110 //
1111 // So we'll follow Koenderink and name the map actions "contract"
1112 // for all tensors.
1113 
1118 SHEAF_DLL_SPEC vd_value_type contract(const vd_lite& xvector, const vd_lite& xcovector);
1119 
1124 SHEAF_DLL_SPEC vd_value_type contract(const vd& xvector, const vd& xcovector,
1125  bool xauto_access);
1126 
1127 // ===========================================================
1128 // VECTOR ALGEBRA: TOLERANCE COMPARISON
1129 // ===========================================================
1130 
1134 SHEAF_DLL_SPEC bool a_eql(const vd_lite& x0, const vd_lite& x1);
1135 
1139 SHEAF_DLL_SPEC bool a_eql(const vd_lite& x0, const vd_lite& x1, double xtolerance);
1140 
1144 SHEAF_DLL_SPEC bool a_eql(const vd_lite& x0, const vd_lite& x1, const vd_lite& xtolerance);
1145 
1149 SHEAF_DLL_SPEC bool r_eql(const vd_lite& x0, const vd_lite& x1);
1150 
1154 SHEAF_DLL_SPEC bool r_eql(const vd_lite& x0, const vd_lite& x1, double xtolerance);
1155 
1159 SHEAF_DLL_SPEC bool r_eql(const vd_lite& x0, const vd_lite& x1, const vd_lite& xtolerance);
1160 
1164 SHEAF_DLL_SPEC bool c_eql(const vd_lite& x0, const vd_lite& x1);
1165 
1169 SHEAF_DLL_SPEC bool c_eql(const vd_lite& x0, const vd_lite& x1, double xtolerance);
1170 
1174 SHEAF_DLL_SPEC bool c_eql(const vd_lite& x0, const vd_lite& x1, const vd_lite& xtolerance);
1175 
1176 
1177 // ===========================================================
1178 // MISCELLANEOUS
1179 // ===========================================================
1180 
1182 
1183 // Putting these functions in the fiber_bundle namespace
1184 // for convenience.
1185 
1189 SHEAF_DLL_SPEC unsigned int factorial(unsigned int xi);
1190 
1194 SHEAF_DLL_SPEC unsigned int binomial_coefficient(unsigned int xi, unsigned int xj);
1195 
1196 //==============================================================================
1197 
1198 } // namespace vd_algebra
1199 
1200 } // namespace fiber_bundle
1201 
1202 #endif // ifndef VD_H
A tensor of degree 3 over an abstract vector space (volatile version).
Definition: t3.h:43
T & operator*=(T &xresult, const vd_value_type &x1)
Vector x0 *= scalar x1 (self-allocated for volatile types); synonym for multiply_equal(x0, x1).
Definition: vd.impl.h:395
at0 scalar_type
The type of scalar.
Definition: vd.h:367
An antisymmetric rank 3 tensor over an abstract vector space (volatile version).
Definition: at3.h:43
at3_lite atp_type
Type of antisymmetric tensor of degree 3 over vd_lite.
Definition: vd.h:800
vd_value_type value_type
The type of component in the fiber; the scalar type in the fiber vector space.
Definition: vd.h:129
row_dofs_type * clone() const
Creates a new instance of the same type as this.
Definition: vd.impl.h:107
T & operator-=(T &xresult, const T &xother)
x0 -= x1 (self-allocated for volatile types); synonym for subtract_equal(x0, x1). ...
Definition: vd.impl.h:305
static const std::string & static_class_name()
The name of this class.
Definition: vd.impl.h:48
st4_lite stp_type
Type of symmetric tensor of degree 4 over vd_lite.
Definition: vd.h:828
SHEAF_DLL_SPEC unsigned int factorial(unsigned int xi)
Factorial of xi.
Definition: vd.cc:2649
vd_row_dofs_type< T > row_dofs_type
The type of the row dofs (type of this).
Definition: vd.h:73
T * subtract(const T &x0, const T &x1)
x0 subtract x1 (auto-allocated version volatile types).
Definition: vd.impl.h:238
at0 atp_type
Type of antisymmetric tensor of degree 0 over vd_lite.
Definition: vd.h:731
T * operator/(const T &x0, const vd_value_type &x1)
Vector x0 / scalar x1 (auto-allocated for volatile types); synonym for divide(x0, x1)...
Definition: vd.impl.h:460
The default name space; a poset which contains other posets as members.
The standard fiber bundles name space; extends the standard sheaves namespace by defining base space...
T * add(const T &x0, const T &x1)
x0 add x1 (auto-allocated version for volatile types).
Definition: vd.impl.h:143
T dof_type
The type of the dofs.
Definition: vd.h:68
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 (&#39;/&#39;). For example: "cell_definitions/triangle".
Definition: poset_path.h:48
at0 stp_type
Type of symmetric tensor of degree 0 over vd_lite.
Definition: vd.h:736
t4_lite tp_type
Type of general tensor of degree 4 over vd_lite.
Definition: vd.h:818
vd_table_dofs_type table_dofs_type
The type of the table dofs.
Definition: vd.h:134
T & operator+=(T &xresult, const T &xother)
x0 += x1 (self-allocated for volatile types); synonym for add_equal(x0, x1).
Definition: vd.impl.h:210
SHEAF_DLL_SPEC bool r_eql(const vd_lite &x0, const vd_lite &x1, const vd_lite &xtolerance)
Relative equality comparison of vd_lite x0 to vd_lite x1 using vd_lite tolerance xtolerance.
Definition: vd.cc:2544
vd_table_dofs_type table_dofs_type
The type of the table dofs.
Definition: vd.h:408
void divide_equal(T &xresult, const vd_value_type &x1)
Vector x0 divided by scalar x1 (self-allocated version for volatile types).
Definition: vd.impl.h:440
SHEAF_DLL_SPEC unsigned int binomial_coefficient(unsigned int xi, unsigned int xj)
Binomial coefficient (xi, xj).
Definition: vd.cc:2673
void add_equal(T &xresult, const T &xother)
x0 add x1 (self-allocated version for volatile types).
Definition: vd.impl.h:168
A tensor of degree 2 over an abstract vector space (volatile version).
Definition: t2.h:43
An antisymmetric tensor of degree p over an abstract vector space (volatile version).
Definition: atp.h:44
at0 tp_type
Type of general tensor of degree 0 over vd_lite.
Definition: vd.h:726
t3_lite tp_type
Type of general tensor of degree 3 over vd_lite.
Definition: vd.h:795
t2_lite tp_type
Type of general tensor of degree 2 over vd_lite.
Definition: vd.h:772
T * operator+(const T &x0, const T &x1)
x0 + x1 (auto-allocated for volatile types); synonym for add(x0, x1).
Definition: vd.impl.h:190
SHEAF_DLL_SPEC bool a_eql(const vd_lite &x0, const vd_lite &x1, const vd_lite &xtolerance)
Absolute equality comparison of vd_lite x0 to vd_lite x1 using vd_lite tolerance xtolerance.
Definition: vd.cc:2469
Abstract base class with useful features for all volatile objects.
Definition: any_lite.h:48
SHEAF_DLL_SPEC vd_value_type max(const vd_lite &x0)
Maximum component of x0, auto-allocated version.
Definition: vd.cc:2254
Abstract base class with useful features for all objects.
Definition: any.h:39
A general symmetric tensor of degree 2 over an abstract vector space (volatile version).
Definition: st2.h:43
Abstract vector space over dof_type (volatile version).
Definition: vd.h:111
Tensor types of degree P over VECTOR_TYPE. No generic implementation defined, must be specialized for...
Definition: vd.h:714
vd_row_dofs_type< double > row_dofs_type
The type of the row dofs.
Definition: vd.h:139
vd_lite tp_type
Type of general tensor of degree 1 over vd_lite.
Definition: vd.h:749
T * divide(const T &x0, const vd_value_type &x1)
Vector x0 divided by scalar x1 (auto-allocated version for volatile types).
Definition: vd.impl.h:418
void subtract_equal(T &xresult, const T &xother)
x0 subtract_equal x1 (self-allocated version for volatile types).
Definition: vd.impl.h:263
void atp_type
Type of antisymmetric tensor of degree 4 over vd_lite.
Definition: vd.h:823
An index within the external ("client") scope of a given id space.
Definition: scoped_index.h:116
double vd_dof_type
The type of degree of freedom in the fiber space.
Definition: fiber_bundle.h:68
A scalar viewed as an antisymmetric tensor of degree 0. As the degree is 0 there is nothing to be sym...
Definition: at0.h:424
SHEAF_DLL_SPEC vd_value_type min(const vd_lite &x0)
Minimum component of x0, auto-allocated version.
Definition: vd.cc:2306
A member of a Cartesian product space; a tuple of attributes (volatile version).
Definition: tuple.h:81
T & operator/=(T &xresult, const vd_value_type &x1)
Vector x0 /= scalar x1 (self-allocated for volatile types); synonym for divide_equal(x0, x1).
Definition: vd.impl.h:476
st3_lite stp_type
Type of symmetric tensor of degree 3 over vd_lite.
Definition: vd.h:805
vd_lite volatile_type
The associated volatile type.
Definition: vd.h:418
vd_dof_type dof_type
The type of the degrees of freedom.
Definition: vd.h:123
A symmetric rank 3 tensor over an abstract vector space. (volatile version).
Definition: st3.h:43
Table dofs type for class vd_table_dofs_type.
A member of a Cartesian product space; a tuple of attributes (persistent version).
Definition: tuple.h:191
SHEAF_DLL_SPEC tensor_variance contract(const tensor_variance &x0, int xp, int xq)
The variance of the contration of a tensor with variance x0 on indices xp and xq. ...
A general tensor of degree p over an abstract vector space (volatile version). Volatile version does ...
Definition: tp.h:59
vd_lite stp_type
Type of symmetric tensor of degree 1 over vd_lite.
Definition: vd.h:759
A tensor of degree 4 over an abstract vector space (volatile version).
Definition: t4.h:43
void multiply_equal(T &xresult, const vd_value_type &xother)
Vector x0 multiplied by scalar x1 (self-allocated version for volatile types).
Definition: vd.impl.h:359
SHEAF_DLL_SPEC bool c_eql(const vd_lite &x0, const vd_lite &x1, const vd_lite &xtolerance)
Combined equality equality comparison of vd_lite x0 to vd_lite x1 using vd_lite tolerance xtolerance...
Definition: vd.cc:2619
T * operator-(const T &x0, const T &x1)
x0 - x1 (auto-allocated for volatile types); synonym for subtract(x0, x1).
Definition: vd.impl.h:285
bool operator==(const singly_linked_list< T, Alloc > &lhs, const singly_linked_list< T, Alloc > &rhs)
Checks if the contents of lhs and rhs are equal, that is, whether lhs.size() == rhs.size() and each element in lhs compares equal with the element in rhs at the same position.
T * operator*(const T &x0, const vd_value_type &x1)
Vector x0 * scalar x1 (auto-allocated for volatile types); synonym for multiply(x0, x1).
Definition: vd.impl.h:379
An abstract vector space of dimension d.
Definition: vd_space.h:47
st2_lite stp_type
Type of symmetric tensor of degree 2 over vd_lite.
Definition: vd.h:782
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.
Definition: pod_types.h:49
vd_row_dofs_type< double > row_dofs_type
The type of the row dofs.
Definition: vd.h:413
vd_space host_type
The type of host poset.
Definition: vd.h:362
vd_value_type value_type
The POD ("plain old data") type of scalar in the vector space of this.
Definition: vd.h:423
T & operator[](int xindex)
Value of xindex-th component (row dof) (non const version).
Definition: vd.impl.h:68
A general antisymmetric tensor of degree 2 over an abstract vector space (volatile version)...
Definition: at2.h:43
virtual tuple * clone() const
Make a new handle, no state instance of current.
Definition: tuple.cc:708
vd_lite atp_type
Type of antisymmetric tensor of degree 1 over vd_lite.
Definition: vd.h:754
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...
Definition: vd.h:431
vd * clone(bool xnew_state, bool xauto_access=true) const
Make a new handle instance of current. Attach the new instance to a new state if xnew_state is true...
Definition: vd.h:607
A symmetric tensor of degree p over an abstract vector space (volatile version).
Definition: stp.h:44
Namespace for the fiber_bundles component of the sheaf system.
Abstract vector space over dof_type.
Definition: vd.h:350
Row dofs type for class vd.
Definition: vd.h:61
double vd_value_type
The type of component in the fiber; the scalar type in the fiber vector space.
Definition: fiber_bundle.h:63
A symmetric rank 4 tensor over an abstract vector space. (volatile version).
Definition: st4.h:43
SHEAF_DLL_SPEC std::ostream & operator<<(std::ostream &os, const binary_index &xbi)
Insert binary_index& xbi into ostream& os.
Definition: binary_index.cc:35
at2_lite atp_type
Type of antisymmetric tensor of degree 2 over vd_lite.
Definition: vd.h:777
T * multiply(const T &x0, const vd_value_type &x1)
Vector x0 multiplied by scalar x1 (auto-allocated version for volatile types).
Definition: vd.impl.h:337