5#ifndef __TEMPLATES_HPP__
6#define __TEMPLATES_HPP__
10template <
typename T>
using ShardVec = boost::shared_ptr<std::vector<T>>;
32 typedef typename std::remove_pointer<T1>::type T;
34 ublas::shallow_array_adaptor<T>(
n, ptr));
58 typedef typename std::remove_pointer<T1>::type T;
60 n,
m, ublas::shallow_array_adaptor<T>(
n *
m, ptr));
71template <
class KeyExtractor1,
class KeyExtractor2>
struct KeyFromKey {
76 const KeyExtractor2 &key2_ = KeyExtractor2())
88template <
typename id_type>
struct LtBit {
89 inline bool operator()(
const id_type &valueA,
const id_type &valueB)
const {
90 return valueA.to_ulong() < valueB.to_ulong();
94template <
typename id_type>
struct EqBit {
95 inline bool operator()(
const id_type &valueA,
const id_type &valueB)
const {
96 return valueA.to_ulong() == valueB.to_ulong();
102 return value.to_ulong();
106template <
class X>
inline std::string
toString(X x) {
107 std::ostringstream buffer;
113 static inline auto get(ublas::vector<T, A> &data) {
134template <
int S = 1,
class T,
class A>
139template <
int Tensor_Dim,
int S,
class T,
class L,
class A>
142template <
int S,
class T,
class A>
144 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
146 if (data.size1() != 3)
148 "getFTensor1FromMat<3>: wrong size of data matrix, number of "
149 "rows should be 3 but is " +
150 boost::lexical_cast<std::string>(data.size1()));
153 &data(0, 0), &data(1, 0), &data(2, 0));
157template <
int S,
class T,
class A>
159 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
161 if (data.size1() != 4)
163 "getFTensor1FromMat<4>: wrong size of data matrix, number of "
164 "rows should be 4 but is " +
165 boost::lexical_cast<std::string>(data.size1()));
168 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0));
172template <
int S,
class T,
class A>
174 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
176 if (data.size1() != 6)
178 "getFTensor1FromMat<6>: wrong size of data matrix, number of "
179 "rows should be 6 but is " +
180 boost::lexical_cast<std::string>(data.size1()));
183 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
188template <
int S,
class T,
class A>
190 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
192 if (data.size1() != 9)
194 "getFTensor1FromMat<9>: wrong size of data matrix, number of "
195 "rows should be 9 but is " +
196 boost::lexical_cast<std::string>(data.size1()));
199 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
200 &data(5, 0), &data(6, 0), &data(7, 0), &data(8, 0));
204template <
int S,
class T,
class A>
206 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
208 if (data.size1() != 2)
210 "getFTensor1FromMat<2>: wrong size of data matrix, number of "
211 "rows should be 2 but is " +
212 boost::lexical_cast<std::string>(data.size1()));
219template <
int S,
class T,
class A>
221 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
223 if (data.size1() != 1)
225 "getFTensor1FromMat<1>: wrong size of data matrix, number of "
226 "rows should be 1 but is " +
227 boost::lexical_cast<std::string>(data.size1()));
236template <
int Tensor_Dim,
int S = 1,
class T,
class L,
class A>
239 static_assert(!std::is_same<T, T>::value,
"not implemented");
245template <
int Tensor_Dim,
int S = 1>
251template <
int Tensor_Dim1,
int Tensor_Dim2,
int S,
class T,
class L,
class A>
253 static inline auto get(ublas::matrix<T, L, A> &data) {
255 if (data.size1() != Tensor_Dim1 * Tensor_Dim2) {
257 "getFTensor2FromMat<" +
258 boost::lexical_cast<std::string>(Tensor_Dim1) +
"," +
259 boost::lexical_cast<std::string>(Tensor_Dim2) +
260 ">: wrong size of rows in data matrix, should be " +
261 boost::lexical_cast<std::string>(Tensor_Dim1 * Tensor_Dim2) +
262 " but is " + boost::lexical_cast<std::string>(data.size1()));
265 std::array<double *, Tensor_Dim1 * Tensor_Dim2> ptrs;
266 for (
auto i = 0;
i != Tensor_Dim1 * Tensor_Dim2; ++
i)
267 ptrs[
i] = &data(
i, 0);
276template <
int Tensor_Dim1,
int Tensor_Dim2>
283template <
int Tensor_Dim1,
int Tensor_Dim2>
296template <
int Tensor_Dim,
int S,
class T,
class L,
class A>
299template <
int S,
class T,
class L,
class A>
301 static inline auto get(ublas::matrix<T, L, A> &data) {
303 if (data.size1() != 6)
305 "getFTensor2SymmetricFromMat<3>: wrong size of data matrix, numer "
306 "of rows should be 6 but is " +
307 boost::lexical_cast<std::string>(data.size1()));
310 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
315template <
int S,
class T,
class L,
class A>
317 static inline auto get(ublas::matrix<T, L, A> &data) {
319 if (data.size1() != 3)
321 "getFTensor2SymmetricFromMat<2>: wrong size of data matrix, number "
322 "of rows should be 3 but is " +
323 boost::lexical_cast<std::string>(data.size1()));
326 &data(0, 0), &data(1, 0), &data(2, 0));
333template <
int Tensor_Dim,
int S,
class T,
class L,
class A>
338template <
int Tensor_Dim,
int S = 1>
344template <
int Tensor_Dim01,
int Tensor_Dim23,
int S,
class T,
class L,
class A>
347template <
int S,
class T,
class A>
349 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
351 if (data.size1() != 1)
353 "getFTensor4DdgFromMat<1, 1>: wrong size of data matrix, number "
354 "of rows should be 1 but is " +
355 boost::lexical_cast<std::string>(data.size1()));
361template <
int S,
class T,
class A>
363 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
365 if (data.size1() != 9) {
367 "getFTensor4DdgFromMat<2, 2>: wrong size of data matrix, number "
368 "of rows should be 9 but is " +
369 boost::lexical_cast<std::string>(data.size1()));
373 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
374 &data(5, 0), &data(6, 0), &data(7, 0), &data(8, 0)};
378template <
int S,
class T,
class A>
380 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
382 if (data.size1() != 36) {
383 cerr << data.size1() << endl;
385 "getFTensor4DdgFromMat<3, 3>: wrong size of data matrix, number "
386 "of rows should be 36 but is " +
387 boost::lexical_cast<std::string>(data.size1()));
391 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
392 &data(5, 0), &data(6, 0), &data(7, 0), &data(8, 0), &data(9, 0),
393 &data(10, 0), &data(11, 0), &data(12, 0), &data(13, 0), &data(14, 0),
394 &data(15, 0), &data(16, 0), &data(17, 0), &data(18, 0), &data(19, 0),
395 &data(20, 0), &data(21, 0), &data(22, 0), &data(23, 0), &data(24, 0),
396 &data(25, 0), &data(26, 0), &data(27, 0), &data(28, 0), &data(29, 0),
397 &data(30, 0), &data(31, 0), &data(32, 0), &data(33, 0), &data(34, 0),
415template <
int Tensor_Dim01,
int Tensor_Dim23,
int S = 1,
class T,
class L,
419 static_assert(!std::is_same<T, T>::value,
420 "Such getFTensor4DdgFromMat specialisation is not implemented");
423template <
int Tensor_Dim01,
int Tensor_Dim23,
int S = 1>
430template <
int Tensor_Dim01,
int Tensor_Dim23,
int S,
class T>
434 static inline auto get(T *ptr) {
437 ptr + 0, ptr + 1, ptr + 2, ptr + 3, ptr + 4, ptr + 5,
438 ptr + 6, ptr + 7, ptr + 8, ptr + 9, ptr + 10, ptr + 11,
439 ptr + 12, ptr + 13, ptr + 14, ptr + 15, ptr + 16, ptr + 17,
440 ptr + 18, ptr + 19, ptr + 20, ptr + 21, ptr + 22, ptr + 23,
441 ptr + 24, ptr + 25, ptr + 26, ptr + 27, ptr + 28, ptr + 29,
442 ptr + 30, ptr + 31, ptr + 32, ptr + 33, ptr + 34, ptr + 35};
446template <
int Tensor_Dim01,
int Tensor_Dim23,
int S = 1,
class T =
double>
451template <
int Tensor_Dim01,
int Tensor_Dim2,
int S,
class T,
class L,
class A>
454template <
int S,
class T,
class A>
456 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
458 if (data.size1() != 1)
460 "getFTensor3DgFromMat<1, 1>: wrong size of data matrix, number "
461 "of rows should be 1 but is " +
462 boost::lexical_cast<std::string>(data.size1()));
468template <
int S,
class T,
class A>
470 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
472 if (data.size1() != 6) {
474 "getFTensor4DdgFromMat<2, 2>: wrong size of data matrix, number "
475 "of rows should be 6 but is " +
476 boost::lexical_cast<std::string>(data.size1()));
480 &data(0, 0), &data(1, 0), &data(2, 0),
481 &data(3, 0), &data(4, 0), &data(5, 0)};
485template <
int S,
class T,
class A>
487 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
489 if (data.size1() != 18) {
490 cerr << data.size1() << endl;
492 "getFTensor3DgFromMat<3, 3>: wrong size of data matrix, number "
493 "of rows should be 18 but is " +
494 boost::lexical_cast<std::string>(data.size1()));
498 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
499 &data(5, 0), &data(6, 0), &data(7, 0), &data(8, 0), &data(9, 0),
500 &data(10, 0), &data(11, 0), &data(12, 0), &data(13, 0), &data(14, 0),
501 &data(15, 0), &data(16, 0), &data(17, 0)};
517template <
int Tensor_Dim01,
int Tensor_Dim2,
int S = 1,
class T,
class L,
521 static_assert(!std::is_same<T, T>::value,
522 "Such getFTensor3DgFromMat specialisation is not implemented");
525template <
int Tensor_Dim01,
int Tensor_Dim2,
int S = 1>
531template <
int Tensor_Dim0,
int Tensor_Dim1,
int Tensor_Dim2,
int Tensor_Dim3,
532 int S,
class T,
class L,
class A>
535template <
int S,
class T,
class A>
537 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
539 if (data.size1() != 1)
541 "getFTensor4FromMat<1, 1, 1, 1>: wrong size of data matrix, number "
542 "of rows should be 1 but is " +
543 boost::lexical_cast<std::string>(data.size1()));
550template <
int S,
class T,
class A>
552 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
554 if (data.size1() != 16) {
556 "getFTensor4FromMat<2, 2, 2, 2>: wrong size of data matrix, number "
557 "of rows should be 16 but is " +
558 boost::lexical_cast<std::string>(data.size1()));
562 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0),
563 &data(4, 0), &data(5, 0), &data(6, 0), &data(7, 0),
564 &data(8, 0), &data(9, 0), &data(10, 0), &data(11, 0),
565 &data(12, 0), &data(13, 0), &data(14, 0), &data(15, 0)};
569template <
int S,
class T,
class A>
571 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
573 if (data.size1() != 81) {
574 cerr << data.size1() << endl;
576 "getFTensor4FromMat<3, 3, 3, 3>: wrong size of data matrix, number "
577 "of rows should be 81 but is " +
578 boost::lexical_cast<std::string>(data.size1()));
582 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
583 &data(5, 0), &data(6, 0), &data(7, 0), &data(8, 0), &data(9, 0),
584 &data(10, 0), &data(11, 0), &data(12, 0), &data(13, 0), &data(14, 0),
585 &data(15, 0), &data(16, 0), &data(17, 0), &data(18, 0), &data(19, 0),
586 &data(20, 0), &data(21, 0), &data(22, 0), &data(23, 0), &data(24, 0),
587 &data(25, 0), &data(26, 0), &data(27, 0), &data(28, 0), &data(29, 0),
588 &data(30, 0), &data(31, 0), &data(32, 0), &data(33, 0), &data(34, 0),
589 &data(35, 0), &data(36, 0), &data(37, 0), &data(38, 0), &data(39, 0),
590 &data(40, 0), &data(41, 0), &data(42, 0), &data(43, 0), &data(44, 0),
591 &data(45, 0), &data(46, 0), &data(47, 0), &data(48, 0), &data(49, 0),
592 &data(50, 0), &data(51, 0), &data(52, 0), &data(53, 0), &data(54, 0),
593 &data(55, 0), &data(56, 0), &data(57, 0), &data(58, 0), &data(59, 0),
594 &data(60, 0), &data(61, 0), &data(62, 0), &data(63, 0), &data(64, 0),
595 &data(65, 0), &data(66, 0), &data(67, 0), &data(68, 0), &data(69, 0),
596 &data(70, 0), &data(71, 0), &data(72, 0), &data(73, 0), &data(74, 0),
597 &data(75, 0), &data(76, 0), &data(77, 0), &data(78, 0), &data(79, 0),
616template <
int Tensor_Dim0,
int Tensor_Dim1,
int Tensor_Dim2,
int Tensor_Dim3,
617 int S = 1,
class T,
class L,
class A>
619 Tensor_Dim1, Tensor_Dim2, Tensor_Dim3>
621 static_assert(!std::is_same<T, T>::value,
622 "Such getFTensor4FromMat specialisation is not implemented");
625template <
int Tensor_Dim0,
int Tensor_Dim1,
int Tensor_Dim2,
int Tensor_Dim3,
629 Tensor_Dim3, S,
double, ublas::row_major,
633template <
int Tensor_Dim0,
int Tensor_Dim1,
int Tensor_Dim2,
int S,
class T,
637template <
int S,
class T,
class A>
639 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
641 if (data.size1() != 1)
643 "getFTensor3FromMat<1, 1, 1>: wrong size of data matrix, number "
644 "of rows should be 1 but is " +
645 boost::lexical_cast<std::string>(data.size1()));
652template <
int S,
class T,
class A>
654 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
656 if (data.size1() != 8)
658 "getFTensor3FromMat<2, 2, 2>: wrong size of data matrix, number "
659 "of rows should be 8 but is " +
660 boost::lexical_cast<std::string>(data.size1()));
663 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
664 &data(5, 0), &data(6, 0), &data(7, 0)
670template <
int S,
class T,
class A>
672 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
674 if (data.size1() != 12)
676 "getFTensor3FromMat<3, 2, 2>: wrong size of data matrix, number "
677 "of rows should be 12 but is " +
678 boost::lexical_cast<std::string>(data.size1()));
681 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0),
682 &data(4, 0), &data(5, 0), &data(6, 0), &data(7, 0),
683 &data(8, 0), &data(9, 0), &data(10, 0), &data(11, 0)};
687template <
int S,
class T,
class A>
689 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
691 if (data.size1() != 12)
693 "getFTensor3FromMat<2, 2, 3>: wrong size of data matrix, number "
694 "of rows should be 12 but is " +
695 boost::lexical_cast<std::string>(data.size1()));
698 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0),
699 &data(4, 0), &data(5, 0), &data(6, 0), &data(7, 0),
700 &data(8, 0), &data(9, 0), &data(10, 0), &data(11, 0)};
704template <
int S,
class T,
class A>
706 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
708 if (data.size1() != 27)
710 "getFTensor3FromMat<3, 3, 3>: wrong size of data matrix, number "
711 "of rows should be 27 but is " +
712 boost::lexical_cast<std::string>(data.size1()));
715 &data(0, 0), &data(1, 0), &data(2, 0), &data(3, 0), &data(4, 0),
716 &data(5, 0), &data(6, 0), &data(7, 0), &data(8, 0), &data(9, 0),
717 &data(10, 0), &data(11, 0), &data(12, 0), &data(13, 0), &data(14, 0),
718 &data(15, 0), &data(16, 0), &data(17, 0), &data(18, 0), &data(19, 0),
719 &data(20, 0), &data(21, 0), &data(22, 0), &data(23, 0), &data(24, 0),
720 &data(25, 0), &data(26, 0)};
724template <
int S,
class T,
class A>
726 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
728 if (data.size1() != 54)
730 "getFTensor3FromMat<6, 3, 3>: wrong size of data matrix, number "
731 "of rows should be 54 but is " +
732 boost::lexical_cast<std::string>(data.size1()));
734 std::array<double *, 54> ptrs;
735 for (
auto i = 0;
i != 54; ++
i)
736 ptrs[
i] = &data(
i, 0);
741template <
int S,
class T,
class A>
743 static inline auto get(ublas::matrix<T, ublas::row_major, A> &data) {
745 if (data.size1() != 54)
747 "getFTensor3FromMat<3, 3, 6>: wrong size of data matrix, number "
748 "of rows should be 54 but is " +
749 boost::lexical_cast<std::string>(data.size1()));
751 std::array<double *, 54> ptrs;
752 for (
auto i = 0;
i != 54; ++
i)
753 ptrs[
i] = &data(
i, 0);
772template <
int Tensor_Dim0,
int Tensor_Dim1,
int Tensor_Dim2,
int S = 1,
class T,
775 Tensor_Dim1, Tensor_Dim2>
777 static_assert(!std::is_same<T, T>::value,
778 "Such getFTensor3FromMat specialisation is not implemented");
781template <
int Tensor_Dim0,
int Tensor_Dim1,
int Tensor_Dim2,
int S = 1>
792 inline static auto get(T *ptr) {
799 inline static auto get(T *ptr) {
807 inline static auto get(T *ptr) {
815 inline static auto get(T *ptr) {
823 inline static auto get(T *ptr) {
825 ptr + 0, ptr + 1, ptr + 2, ptr + 3, ptr + 4, ptr + 5);
836template <
int DIM,
int S = DIM>
843template <
int DIM,
int S = DIM>
850template <
int DIM,
int S = DIM>
860 inline static auto get(T *ptr) {
862 ptr + 0, ptr + 1, ptr + 2, ptr + 3, ptr + 4, ptr + 5);
868 inline static auto get(T *ptr) {
870 ptr + 0, ptr + 1, ptr + 2, ptr + 3, ptr + 4, ptr + 5, ptr + 6, ptr + 7,
871 ptr + 8, ptr + 9, ptr + 10, ptr + 11, ptr + 12, ptr + 13, ptr + 14,
872 ptr + 15, ptr + 16, ptr + 17, ptr + 18, ptr + 19, ptr + 20, ptr + 21,
873 ptr + 22, ptr + 23, ptr + 24, ptr + 25, ptr + 26, ptr + 27, ptr + 28,
874 ptr + 29, ptr + 30, ptr + 31, ptr + 32, ptr + 33, ptr + 34, ptr + 35);
880 inline static auto get(T *ptr) {
882 ptr + 0, ptr + 1, ptr + 2, ptr + 3, ptr + 4, ptr + 5, ptr + 6, ptr + 7,
889 inline static auto get(T *ptr) {
897 inline static auto get(T *ptr) {
905 inline static auto get(T *ptr) {
912 inline static auto get(T *ptr) {
924template <
int DIM1,
int DIM2,
int S = DIM1 * DIM2>
936template <
int DIM1,
int DIM2,
int S = DIM1 * DIM2>
948template <
int DIM1,
int DIM2>
952 "Such getFTensor2HVecFromPtr is not implemented");
985template <
int DIM1,
int DIM2,
int DIM3>
990 "Such getFTensor3FromPtr is not implemented");
997 ptr + 0, ptr + 1, ptr + 2, ptr + 3, ptr + 4, ptr + 5, ptr + 6, ptr + 7,
998 ptr + 8, ptr + 9, ptr + 10, ptr + 11);
1005 ptr + 0, ptr + 1, ptr + 2, ptr + 3, ptr + 4, ptr + 5, ptr + 6, ptr + 7,
1006 ptr + 8, ptr + 9, ptr + 10, ptr + 11, ptr + 12, ptr + 13, ptr + 14,
1007 ptr + 15, ptr + 16, ptr + 17, ptr + 18, ptr + 19, ptr + 20, ptr + 21,
1008 ptr + 22, ptr + 23, ptr + 24, ptr + 25, ptr + 26);
1019template <
int DIM1,
int DIM2,
int DIM3,
int DIM4>
1023 static_assert(
DIM1 ==
DIM1 ||
DIM2 !=
DIM2 || DIM3 != DIM3 || DIM4 != DIM4,
1024 "Such getFTensor4FromPtr is not implemented");
1031 ptr + 0, ptr + 1, ptr + 2, ptr + 3, ptr + 4, ptr + 5, ptr + 6, ptr + 7,
1032 ptr + 8, ptr + 9, ptr + 10, ptr + 11, ptr + 12, ptr + 13, ptr + 14,
1033 ptr + 15, ptr + 16, ptr + 17, ptr + 18, ptr + 19, ptr + 20, ptr + 21,
1034 ptr + 22, ptr + 23, ptr + 24, ptr + 25, ptr + 26, ptr + 27, ptr + 28,
1035 ptr + 29, ptr + 30, ptr + 31, ptr + 32, ptr + 33, ptr + 34, ptr + 35,
1036 ptr + 36, ptr + 37, ptr + 38, ptr + 39, ptr + 40, ptr + 41, ptr + 42,
1037 ptr + 43, ptr + 44, ptr + 45, ptr + 46, ptr + 47, ptr + 48, ptr + 49,
1038 ptr + 50, ptr + 51, ptr + 52, ptr + 53, ptr + 54, ptr + 55, ptr + 56,
1039 ptr + 57, ptr + 58, ptr + 59, ptr + 60, ptr + 61, ptr + 62, ptr + 63,
1040 ptr + 64, ptr + 65, ptr + 66, ptr + 67, ptr + 68, ptr + 69, ptr + 70,
1041 ptr + 71, ptr + 72, ptr + 73, ptr + 74, ptr + 75, ptr + 76, ptr + 77,
1042 ptr + 78, ptr + 79, ptr + 80);
1056 static_assert(DIM,
"Such getFTensor2SymmetricFromPtr is not implemented");
1063 ptr + 0, ptr + 1, ptr + 2,
1074 &ptr[0], &ptr[1], &ptr[2]);
1090 static_assert(DIM,
"Such getFTensor2SymmetricFromPtr is not implemented");
1097 ptr + 0, ptr + 1, ptr + 2,
1108 ptr + 0, ptr + 1, ptr + 2);
1124 "Such getFTensor2SymmetricLowerFromPtr is not implemented");
1142 ptr + 0, ptr + 1, ptr + 3);
1149 template <
typename V>
static inline auto get(V &data) {
1150 using T =
typename std::remove_reference<
decltype(data[0])>::type;
1157 template <
typename V>
static inline auto get(V &data) {
1158 using T =
typename std::remove_reference<
decltype(data[0])>::type;
1165 template <
typename V>
static inline auto get(V &data) {
1166 using T =
typename std::remove_reference<
decltype(data[0])>::type;
1174 template <
typename V>
static inline auto get(V &data) {
1175 using T =
typename std::remove_reference<
decltype(data[0])>::type;
1177 &data[2], &data[3]};
1183 template <
typename V>
static inline auto get(V &data) {
1184 using T =
typename std::remove_reference<
decltype(data[0])>::type;
1186 &data[0], &data[1], &data[2], &data[3], &data[4], &data[5]};
1192 template <
typename V>
static inline auto get(V &data) {
1193 using T =
typename std::remove_reference<
decltype(data[0])>::type;
1195 &data[0], &data[1], &data[2], &data[3], &data[4],
1196 &data[5], &data[6], &data[7], &data[8]};
1214template <
int DIM,
int S = 0>
1221template <
int DIM,
int S>
1236 &data(rr + 0, 0), &data(rr + 1, 0), &data(rr + 2, 0)};
1243 &data(rr + 0, 0), &data(rr + 1, 0), &data(rr + 2, 0), &data(rr + 3, 0)};
1250 &data(rr + 0, 0), &data(rr + 1, 0), &data(rr + 2, 0),
1251 &data(rr + 3, 0), &data(rr + 4, 0), &data(rr + 5, 0),
1252 &data(rr + 6, 0), &data(rr + 7, 0), &data(rr + 8, 0)};
1265template <
int DIM,
int S>
1268 static_assert(DIM != DIM,
"not implemented");
1283 &data(rr + 0, 0), &data(rr + 1, 1), &data(rr + 2, 2)};
1297template <
int DIM1,
int DIM2,
int S,
class T,
class L,
class A>
1300template <
int DIM1,
int DIM2,
class T,
class L,
class A>
1303template <
int S,
class T,
class L,
class A>
1306 inline static auto get(ublas::matrix<T, L, A> &data,
const size_t rr,
1309 &data(rr + 0, cc + 0), &data(rr + 0, cc + 1),
1311 &data(rr + 1, cc + 0), &data(rr + 1, cc + 1)};
1315template <
int S,
class T,
class L,
class A>
1318 inline static auto get(ublas::matrix<T, L, A> &data,
const size_t rr,
1321 &data(rr + 0, cc + 0), &data(rr + 0, cc + 1), &data(rr + 0, cc + 2),
1322 &data(rr + 1, cc + 0), &data(rr + 1, cc + 1), &data(rr + 1, cc + 2),
1323 &data(rr + 2, cc + 0), &data(rr + 2, cc + 1), &data(rr + 2, cc + 2)};
1327template <
class T,
class L,
class A>
1330 inline static auto get(ublas::matrix<T, L, A> &data,
const size_t rr,
1331 const size_t cc,
const int ss = 0) {
1333 &data(rr + 0, cc + 0), &data(rr + 0, cc + 1),
1335 &data(rr + 1, cc + 0), &data(rr + 1, cc + 1), ss);
1339template <
class T,
class L,
class A>
1342 inline static auto get(ublas::matrix<T, L, A> &data,
const size_t rr,
1343 const size_t cc,
const int ss = 0) {
1345 &data(rr + 0, cc + 0), &data(rr + 0, cc + 1), &data(rr + 0, cc + 2),
1346 &data(rr + 1, cc + 0), &data(rr + 1, cc + 1), &data(rr + 1, cc + 2),
1347 &data(rr + 2, cc + 0), &data(rr + 2, cc + 1), &data(rr + 2, cc + 2),
1352template <
int DIM1,
int DIM2,
int S>
1359template <
int DIM1,
int DIM2>
1368template <
int S,
typename T,
typename L,
typename A>
1371 const size_t rr,
const size_t cc = 0) {
1375template <
int S,
typename T,
typename L,
typename A>
1378 const size_t rr,
const size_t cc = 0) {
1384template <
int DIM1,
int DIM2,
int S>
1402 const size_t M = mat.size1();
1403 const size_t N = mat.size2();
1407 "The input matrix for inverse computation is not square %ld != %ld",
1410 int *ipv =
new int[
N];
1412 double *work =
new double[lwork];
1417 "lapack error info = %d", info);
1421 "lapack error info = %d", info);
1438 const size_t M = mat.size1();
1439 const size_t N = mat.size2();
1441 if (M == 0 || M !=
N)
1443 "The input matrix for inverse computation is not square %ld != %ld",
1450 int *ipiv =
new int[M];
1451 info =
lapack_dgesv(M, nrhs, &*mat.data().begin(), M, ipiv,
1452 &*f.data().begin(), M);
1455 "error lapack solve dgesv info = %d", info);
1473 auto mat_copy = mat;
1491 const size_t M = mat.size1();
1492 const size_t N = mat.size2();
1494 if (M == 0 || M !=
N)
1497 "The input matrix for eigen value computation is not square %ld != %ld",
1499 if (eig.size() != M)
1500 eig.resize(M,
false);
1505 const int size = (M + 2) * M;
1507 double *work =
new double[size];
1509 if (
lapack_dsyev(
'V',
'U',
n, &*eigen_vec.data().begin(), lda,
1510 &*eig.data().begin(), work, lwork) > 0)
1512 "The algorithm failed to compute eigenvalues.");
1525template <
int DIM,
typename T1,
typename T2>
1532 const int lda = DIM;
1533 const int lwork = (DIM + 2) * DIM;
1534 std::array<
double, (DIM + 2) * DIM> work;
1539 "The algorithm failed to compute eigenvalues.");
1552template <
int DIM,
typename T1,
typename T2,
typename T3>
1558 for (
int ii = 0; ii != DIM; ii++)
1559 for (
int jj = 0; jj != DIM; jj++)
1560 eigen_vec(ii, jj) = mat(ii, jj);
1575 return t(0, 0) *
t(1, 1) *
t(2, 2) +
t(1, 0) *
t(2, 1) *
t(0, 2) +
1576 t(2, 0) *
t(0, 1) *
t(1, 2) -
t(0, 0) *
t(2, 1) *
t(1, 2) -
1577 t(2, 0) *
t(1, 1) *
t(0, 2) -
t(1, 0) *
t(0, 1) *
t(2, 2);
1588 return t(0, 0) *
t(1, 1) -
t(0, 1) *
t(1, 0);
1604template <
typename T,
int DIM>
1612template <
typename T,
int DIM>
1621template <
int Tensor_Dim,
class T,
class L,
class A>
1623 ublas::vector<T, A> &det_data,
1624 ublas::matrix<T, L, A> &inv_jac_data) {
1627 "Specialization for this template not yet implemented");
1634 MatrixDouble &jac_data, VectorDouble &det_data, MatrixDouble &inv_jac_data);
1640template <
class T1,
class T2>
1651template <
class T1,
class T2>
1662template <
class T1,
class T2,
class T3>
1665 const auto inv_det = 1. / det;
1666 inv_t(0, 0) = (
t(1, 1) *
t(2, 2) -
t(1, 2) *
t(2, 1)) * inv_det;
1667 inv_t(0, 1) = (
t(0, 2) *
t(2, 1) -
t(0, 1) *
t(2, 2)) * inv_det;
1668 inv_t(0, 2) = (
t(0, 1) *
t(1, 2) -
t(0, 2) *
t(1, 1)) * inv_det;
1669 inv_t(1, 0) = (
t(1, 2) *
t(2, 0) -
t(1, 0) *
t(2, 2)) * inv_det;
1670 inv_t(1, 1) = (
t(0, 0) *
t(2, 2) -
t(0, 2) *
t(2, 0)) * inv_det;
1671 inv_t(1, 2) = (
t(0, 2) *
t(1, 0) -
t(0, 0) *
t(1, 2)) * inv_det;
1672 inv_t(2, 0) = (
t(1, 0) *
t(2, 1) -
t(1, 1) *
t(2, 0)) * inv_det;
1673 inv_t(2, 1) = (
t(0, 1) *
t(2, 0) -
t(0, 0) *
t(2, 1)) * inv_det;
1674 inv_t(2, 2) = (
t(0, 0) *
t(1, 1) -
t(0, 1) *
t(1, 0)) * inv_det;
1682template <
class T1,
class T2,
class T3>
1685 const auto inv_det = 1. / det;
1686 inv_t(0, 0) =
t(1, 1) * inv_det;
1687 inv_t(0, 1) = -
t(0, 1) * inv_det;
1688 inv_t(1, 0) = -
t(1, 0) * inv_det;
1689 inv_t(1, 1) =
t(0, 0) * inv_det;
1705 inv_t(0, 0) = (
t(1, 1) *
t(2, 2) -
t(1, 2) *
t(2, 1)) / det;
1706 inv_t(0, 1) = (
t(0, 2) *
t(2, 1) -
t(0, 1) *
t(2, 2)) / det;
1707 inv_t(0, 2) = (
t(0, 1) *
t(1, 2) -
t(0, 2) *
t(1, 1)) / det;
1708 inv_t(1, 0) = (
t(1, 2) *
t(2, 0) -
t(1, 0) *
t(2, 2)) / det;
1709 inv_t(1, 1) = (
t(0, 0) *
t(2, 2) -
t(0, 2) *
t(2, 0)) / det;
1710 inv_t(1, 2) = (
t(0, 2) *
t(1, 0) -
t(0, 0) *
t(1, 2)) / det;
1711 inv_t(2, 0) = (
t(1, 0) *
t(2, 1) -
t(1, 1) *
t(2, 0)) / det;
1712 inv_t(2, 1) = (
t(0, 1) *
t(2, 0) -
t(0, 0) *
t(2, 1)) / det;
1713 inv_t(2, 2) = (
t(0, 0) *
t(1, 1) -
t(0, 1) *
t(1, 0)) / det;
1730 const auto inv_det = 1. / det;
1731 inv_t(0, 0) = (
t(1, 1) *
t(2, 2) -
t(1, 2) *
t(2, 1)) * inv_det;
1732 inv_t(0, 1) = (
t(0, 2) *
t(2, 1) -
t(0, 1) *
t(2, 2)) * inv_det;
1733 inv_t(0, 2) = (
t(0, 1) *
t(1, 2) -
t(0, 2) *
t(1, 1)) * inv_det;
1734 inv_t(1, 1) = (
t(0, 0) *
t(2, 2) -
t(0, 2) *
t(2, 0)) * inv_det;
1735 inv_t(1, 2) = (
t(0, 2) *
t(1, 0) -
t(0, 0) *
t(1, 2)) * inv_det;
1736 inv_t(2, 2) = (
t(0, 0) *
t(1, 1) -
t(0, 1) *
t(1, 0)) * inv_det;
1753 inv_t(0, 0) = (
t(1, 1) *
t(2, 2) -
t(1, 2) *
t(2, 1)) / det;
1754 inv_t(0, 1) = (
t(0, 2) *
t(2, 1) -
t(0, 1) *
t(2, 2)) / det;
1755 inv_t(0, 2) = (
t(0, 1) *
t(1, 2) -
t(0, 2) *
t(1, 1)) / det;
1756 inv_t(1, 1) = (
t(0, 0) *
t(2, 2) -
t(0, 2) *
t(2, 0)) / det;
1757 inv_t(1, 2) = (
t(0, 2) *
t(1, 0) -
t(0, 0) *
t(1, 2)) / det;
1758 inv_t(2, 2) = (
t(0, 0) *
t(1, 1) -
t(0, 1) *
t(1, 0)) / det;
1776 const auto inv_det = 1. / det;
1777 inv_t(0, 0) = (
t(1, 1) *
t(2, 2) -
t(1, 2) *
t(2, 1)) * inv_det;
1778 inv_t(0, 1) = (
t(0, 2) *
t(2, 1) -
t(0, 1) *
t(2, 2)) * inv_det;
1779 inv_t(0, 2) = (
t(0, 1) *
t(1, 2) -
t(0, 2) *
t(1, 1)) * inv_det;
1780 inv_t(1, 1) = (
t(0, 0) *
t(2, 2) -
t(0, 2) *
t(2, 0)) * inv_det;
1781 inv_t(1, 2) = (
t(0, 2) *
t(1, 0) -
t(0, 0) *
t(1, 2)) * inv_det;
1782 inv_t(2, 2) = (
t(0, 0) *
t(1, 1) -
t(0, 1) *
t(1, 0)) * inv_det;
1786template <
typename T1,
typename T2,
typename T3,
int DIM>
1789template <
typename T1,
typename T2,
typename T3>
1796template <
typename T1,
typename T2,
typename T3>
1803template <
typename T1,
typename T2,
typename T3,
int DIM>
1812template <
typename T1,
typename T2,
typename T3,
int DIM>
1818 DIM>::invert(
t, det, inv_t);
1826 template <
typename Iterator>
1828 return (*it)->getEnt();
1850template <
typename Extractor,
typename Iterator>
1852 Iterator end_iter) {
1853 moab::Range::iterator hint = r.begin();
1854 while (begin_iter != end_iter) {
1856 auto bi = Extractor::extract(begin_iter);
1857 Iterator pj = begin_iter;
1858 while (pj != end_iter && (bi +
j) == Extractor::extract(pj)) {
1862 hint = r.insert(hint, bi, bi + (
j - 1));
1886template <
typename MI,
typename MO = Modify_change_nothing>
1890 for (
auto it = mi.begin(); it != mi.end(); ++it) {
1891 if (!
const_cast<MI &
>(mi).modify(it, mo))
1893 "Houston we have a problem");
1921 return boost::make_shared<TempMeshset>(moab);
1978template <
typename I>
1985 if (tester(first)) {
1987 auto second = first;
1990 while (second != s) {
1997 CHKERR inserter(first, second);
2023template <
typename Dest = void,
typename... Arg>
2025 if constexpr (std::is_same<void, Dest>::value)
2026 return std::array<std::common_type_t<std::decay_t<Arg>...>,
sizeof...(Arg)>{
2027 {std::forward<Arg>(arg)...}};
2029 return std::array<Dest,
sizeof...(Arg)>{{std::forward<Arg>(arg)...}};
2049#define FTENSOR_INDEX(DIM, I) I##_FTIndex<DIM> I;
#define MOAB_THROW(err)
Check error code of MoAB function and throw MoFEM exception.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_OPERATION_UNSUCCESSFUL
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
FTensor::Index< 'i', SPACE_DIM > i
const double n
refractive index of diffusive medium
static __CLPK_integer lapack_dgesv(__CLPK_integer n, __CLPK_integer nrhs, __CLPK_doublereal *a, __CLPK_integer lda, __CLPK_integer *ipiv, __CLPK_doublereal *b, __CLPK_integer ldb)
static __CLPK_integer lapack_dgetrf(__CLPK_integer m, __CLPK_integer n, __CLPK_doublereal *a, __CLPK_integer lda, __CLPK_integer *ipiv)
static __CLPK_integer lapack_dsyev(char jobz, char uplo, __CLPK_integer n, __CLPK_doublereal *a, __CLPK_integer lda, __CLPK_doublereal *w, __CLPK_doublereal *work, __CLPK_integer lwork)
static __CLPK_integer lapack_dgetri(__CLPK_integer n, __CLPK_doublereal *a, __CLPK_integer lda, __CLPK_integer *ipiv, __CLPK_doublereal *work, __CLPK_integer lwork)
FTensor::Index< 'j', 3 > j
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
VecAllocator< double > DoubleAllocator
ublas::matrix< double, ublas::row_major, ublas::shallow_array_adaptor< double > > MatrixShallowArrayAdaptor
std::vector< T, std::allocator< T > > VecAllocator
std::bitset< BITFIELDID_SIZE > BitFieldId
Field Id.
UBlasMatrix< double > MatrixDouble
VectorBoundedArray< double, 3 > VectorDouble3
ublas::vector< T, ublas::shallow_array_adaptor< T > > VectorShallowArrayAdaptor
UBlasVector< double > VectorDouble
UBlasMatrix< adouble > MatrixADouble
implementation of Data Operators for Forces and Sources
static FTensor::Tensor3< FTensor::PackPtr< T *, 1 >, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2 > getFTensor3FromMat(ublas::matrix< T, L, A > &data)
Get tensor rank 3 (non symmetries) form data matrix.
auto getVectorAdaptor(T1 ptr, const size_t n)
Get Vector adaptor.
static FTensor::Dg< FTensor::PackPtr< T *, 1 >, Tensor_Dim01, Tensor_Dim2 > getFTensor3DgFromMat(ublas::matrix< T, L, A > &data)
Get symmetric tensor rank 3 on the first two indices from form data matrix.
auto type_from_handle(const EntityHandle h)
get type from entity handle
FTensor::Tensor2< FTensor::PackPtr< double *, 9 >, 3, 3 > getFTensor2HVecFromPtr< 3, 3 >(double *ptr)
FTensor::Tensor2< FTensor::PackPtr< double *, S >, DIM1, DIM2 > getFTensor2FromArray(MatrixDouble &data, const size_t rr, const size_t cc=0)
boost::shared_ptr< std::vector< T > > ShardVec
FTensor::Tensor3< FTensor::PackPtr< double *, 12 >, 3, 2, 2 > getFTensor3FromPtr< 3, 2, 2 >(double *ptr)
FTensor::Tensor2< FTensor::PackPtr< double *, DIM1 *DIM2 >, DIM1, DIM2 > getFTensor2HVecFromPtr(double *ptr)
Make Tensor2 for HVec base from pointer.
MoFEMErrorCode reconstructMultiIndex(const MI &mi, MO &&mo=Modify_change_nothing())
Template used to reconstruct multi-index.
moab::Range::iterator insertOrdered(Range &r, Extractor, Iterator begin_iter, Iterator end_iter)
Insert ordered mofem multi-index into range.
MoFEMErrorCode invertTensor2by2(T1 &t, T2 &det, T3 &inv_t)
Calculate matrix inverse 2 by 2.
MoFEMErrorCode computeMatrixInverse(MatrixDouble &mat)
compute matrix inverse with lapack dgetri
auto id_from_handle(const EntityHandle h)
auto getFTensor2FromPtr(double *ptr)
Make Tensor2 from pointer.
auto dimension_from_handle(const EntityHandle h)
get entity dimension form handle
FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 3 >, 2 > getFTensor2SymmetricFromPtr< 2 >(double *ptr)
MoFEMErrorCode solveLinearSystem(MatrixDouble &mat, VectorDouble &f)
solve linear system with lapack dgesv
auto getFTensor1FromArray< 3, 0 >(VectorDouble3 &data)
static auto determinantTensor2by2(T &t)
Calculate the determinant of a 2x2 matrix or a tensor of rank 2.
auto type_name_from_handle(const EntityHandle h)
get entity type name from handle
FTensor::Tensor2< FTensor::PackPtr< double *, 6 >, 3, 2 > getFTensor2HVecFromPtr< 3, 2 >(double *ptr)
MoFEMErrorCode invertTensor3by3(ublas::matrix< T, L, A > &jac_data, ublas::vector< T, A > &det_data, ublas::matrix< T, L, A > &inv_jac_data)
Calculate inverse of tensor rank 2 at integration points.
static FTensor::Ddg< FTensor::PackPtr< T *, 1 >, Tensor_Dim01, Tensor_Dim23 > getFTensor4DdgFromMat(ublas::matrix< T, L, A > &data)
Get symmetric tensor rank 4 on first two and last indices from form data matrix.
MoFEMErrorCode invertTensor3by3< 3, double, ublas::row_major, DoubleAllocator >(MatrixDouble &jac_data, VectorDouble &det_data, MatrixDouble &inv_jac_data)
FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 4 >, 2 > getFTensor2SymmetricLowerFromPtr< 2 >(double *ptr)
FTensor::Tensor1< FTensor::PackPtr< T *, S >, Tensor_Dim > getFTensor1FromMat(ublas::matrix< T, L, A > &data)
Get tensor rank 1 (vector) form data matrix.
auto getFTensor2FromArray2by2(ublas::matrix< T, L, A > &data, const FTensor::Number< S > &, const size_t rr, const size_t cc=0)
static MoFEMErrorCode invertTensor(FTensor::Tensor2< T1, DIM, DIM > &t, T2 &det, FTensor::Tensor2< T3, DIM, DIM > &inv_t)
static auto getFTensor4DdgFromPtr(T *ptr)
FTensor::Tensor2< FTensor::PackPtr< double *, 1 >, Tensor_Dim1, Tensor_Dim2 > getFTensor2FromMat(MatrixDouble &data)
Get tensor rank 2 (matrix) form data matrix.
constexpr auto make_array(Arg &&...arg)
Create Array.
auto getMatrixAdaptor(T1 ptr, const size_t n, const size_t m)
Get Matrix adaptor.
static auto getFTensor2SymmetricFromMat(ublas::matrix< T, L, A > &data)
Get symmetric tensor rank 2 (matrix) form data matrix.
FTensor::Tensor1< FTensor::PackPtr< double *, S >, DIM > getFTensor1FromPtr(double *ptr)
Make Tensor1 from pointer.
static auto determinantTensor(FTensor::Tensor2< T, DIM, DIM > &t)
Calculate the determinant of a tensor of rank DIM.
auto field_bit_from_bit_number(const int bit_number)
get field bit id from bit number
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
std::string toString(X x)
static FTensor::Tensor4< FTensor::PackPtr< T *, 1 >, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, Tensor_Dim3 > getFTensor4FromMat(ublas::matrix< T, L, A > &data)
Get tensor rank 4 (non symmetric) form data matrix.
FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 6 >, 3 > getFTensor2SymmetricFromPtr< 3 >(double *ptr)
FTensor::Tensor1< FTensor::PackPtr< double *, S >, DIM > getFTensor1FromArrayDiag(MatrixDouble &data, const size_t rr)
Get FTensor1 from array.
FTensor::Tensor4< FTensor::PackPtr< double *, DIM1 *DIM2 *DIM3 *DIM4 >, DIM1, DIM2, DIM3, DIM4 > getFTensor4FromPtr(double *ptr)
auto getFTensor2FromArray3by3(ublas::matrix< T, L, A > &data, const FTensor::Number< S > &, const size_t rr, const size_t cc=0)
auto get_temp_meshset_ptr(moab::Interface &moab)
Create smart pointer to temporary meshset.
MoFEMErrorCode computeEigenValuesSymmetric(const MatrixDouble &mat, VectorDouble &eig, MatrixDouble &eigen_vec)
compute eigenvalues of a symmetric matrix using lapack dsyev
FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, DIM *DIM >, DIM > getFTensor2SymmetricLowerFromPtr(double *ptr)
Make symmetric Tensor2 from pointer, taking lower triangle of matrix.
FTensor::Tensor4< FTensor::PackPtr< double *, 81 >, 3, 3, 3, 3 > getFTensor4FromPtr< 3, 3, 3, 3 >(double *ptr)
FTensor::Tensor3< FTensor::PackPtr< double *, 27 >, 3, 3, 3 > getFTensor3FromPtr< 3, 3, 3 >(double *ptr)
static auto determinantTensor3by3(T &t)
Calculate the determinant of a 3x3 matrix or a tensor of rank 2.
FTensor::Tensor3< FTensor::PackPtr< double *, DIM1 *DIM2 *DIM3 >, DIM1, DIM2, DIM3 > getFTensor3FromPtr(double *ptr)
FTensor::Tensor2_symmetric< FTensor::PackPtr< double *,(DIM *(DIM+1))/2 >, DIM > getFTensor2SymmetricFromPtr(double *ptr)
Make symmetric Tensor2 from pointer.
FTensor::Tensor2< FTensor::PackPtr< double *, 1 >, Tensor_Dim1, Tensor_Dim2 > getFTensor2FromVec(VectorDouble &data)
auto rangeInserter(const I f, const I s, boost::function< bool(I it)> tester, boost::function< MoFEMErrorCode(I f, I s)> inserter)
Insert ranges.
auto ent_form_type_and_id(const EntityType type, const EntityID id)
get entity handle from type and id
auto getFTensor1FromArray(VectorDouble &data)
Get FTensor1 from array.
FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 9 >, 3 > getFTensor2SymmetricLowerFromPtr< 3 >(double *ptr)
constexpr IntegrationType I
constexpr double t
plate stiffness
FTensor::Index< 'm', 3 > m
bool operator()(const id_type &valueA, const id_type &valueB) const
static auto get(ublas::vector< T, A > &data)
GetFTensor1FromArray()=delete
GetFTensor1FromArray()=delete
GetFTensor1FromArray()=delete
GetFTensor1FromArray()=delete
GetFTensor1FromArray()=delete
GetFTensor1FromArray()=delete
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
GetFTensor1FromPtrImpl()=delete
GetFTensor1FromPtrImpl()=delete
GetFTensor1FromPtrImpl()=delete
GetFTensor1FromPtrImpl()=delete
GetFTensor1FromPtrImpl()=delete
static auto get(ublas::matrix< T, L, A > &data, const size_t rr, const size_t cc)
GetFTensor2FromArrayImpl()=delete
GetFTensor2FromArrayImpl()=delete
static auto get(ublas::matrix< T, L, A > &data, const size_t rr, const size_t cc)
static auto get(ublas::matrix< T, L, A > &data, const size_t rr, const size_t cc, const int ss=0)
GetFTensor2FromArrayRawPtrImpl()=delete
GetFTensor2FromArrayRawPtrImpl()=delete
static auto get(ublas::matrix< T, L, A > &data, const size_t rr, const size_t cc, const int ss=0)
static auto get(ublas::matrix< T, L, A > &data)
GetFTensor2FromPtr()=delete
GetFTensor2FromPtr()=delete
GetFTensor2FromPtr()=delete
GetFTensor2FromPtr()=delete
GetFTensor2FromPtr()=delete
GetFTensor2FromPtr()=delete
GetFTensor2FromPtr()=delete
static auto get(ublas::matrix< T, L, A > &data)
static auto get(ublas::matrix< T, L, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
static auto get(ublas::matrix< T, ublas::row_major, A > &data)
unsigned int operator()(const id_type &value) const
static MoFEMErrorCode invert(T1 &t, T2 &det, T3 &inv_t)
static MoFEMErrorCode invert(T1 &t, T2 &det, T3 &inv_t)
result_type operator()(Arg &arg) const
KeyExtractor1::result_type result_type
KeyFromKey(const KeyExtractor1 &key1_=KeyExtractor1(), const KeyExtractor2 &key2_=KeyExtractor2())
bool operator()(const id_type &valueA, const id_type &valueB) const
Do nothing, used to rebuild database.
Modify_change_nothing()=default
TempMeshset(moab::Interface &moab)