13 #ifndef OHMMS_TINY_META_H 14 #define OHMMS_TINY_META_H 29 template<
class T,
unsigned D>
31 template<
class T,
unsigned D>
33 template<
class T,
unsigned D>
35 template<
class T,
unsigned D>
37 template<
class T,
unsigned D1,
unsigned D2>
41 template<
class T1,
class T2,
class OP>
44 template<
class T1,
class T2,
class OP>
49 template<
class T1,
class T2>
61 #define PAssert(condition) assert(condition) 75 #define OHMMS_META_BINARY_OPERATORS(TENT, FUNC, TAG) \ 77 template<class T1, class T2, unsigned D> \ 78 struct BinaryReturn<TENT<T1, D>, TENT<T2, D>, TAG> \ 80 using Type_t = TENT<typename BinaryReturn<T1, T2, TAG>::Type_t, D>; \ 83 template<class T1, class T2, unsigned D> \ 84 inline typename BinaryReturn<TENT<T1, D>, TENT<T2, D>, TAG>::Type_t FUNC(const TENT<T1, D>& v1, \ 85 const TENT<T2, D>& v2) \ 87 return OTBinary<TENT<T1, D>, TENT<T2, D>, TAG>::apply(v1, v2, TAG()); \ 90 template<class T1, class T2, unsigned D> \ 91 struct BinaryReturn<TENT<T1, D>, T2, TAG> \ 93 using Type_t = TENT<typename BinaryReturn<T1, T2, TAG>::Type_t, D>; \ 96 template<class T1, class T2, unsigned D> \ 97 struct BinaryReturn<T1, TENT<T2, D>, TAG> \ 99 using Type_t = TENT<typename BinaryReturn<T1, T2, TAG>::Type_t, D>; \ 102 template<class T1, class T2, unsigned D> \ 103 inline typename BinaryReturn<TENT<T1, D>, T2, TAG>::Type_t FUNC(const TENT<T1, D>& v1, const T2& x) \ 105 return OTBinary<TENT<T1, D>, T2, TAG>::apply(v1, x, TAG()); \ 108 template<class T1, class T2, unsigned D> \ 109 inline typename BinaryReturn<T1, TENT<T2, D>, TAG>::Type_t FUNC(const T1& x, const TENT<T2, D>& v2) \ 111 return OTBinary<T1, TENT<T2, D>, TAG>::apply(x, v2, TAG()); \ 114 #define OHMMS_META_ACCUM_OPERATORS(TENT, FUNC, TAG) \ 116 template<class T1, class T2, unsigned D> \ 117 inline TENT<T1, D>& FUNC(TENT<T1, D>& v1, const TENT<T2, D>& v2) \ 119 OTAssign<TENT<T1, D>, TENT<T2, D>, TAG>::apply(v1, v2, TAG()); \ 123 template<class T1, class T2, unsigned D> \ 124 inline TENT<T1, D>& FUNC(TENT<T1, D>& v1, const T2& v2) \ 126 OTAssign<TENT<T1, D>, T2, TAG>::apply(v1, v2, TAG()); \ 130 #define OHMMS_TINYMAT_BINARY_OPERATORS(TENT, FUNC, TAG) \ 132 template<class T1, class T2, unsigned D1, unsigned D2> \ 133 struct BinaryReturn<TENT<T1, D1, D2>, TENT<T2, D1, D2>, TAG> \ 135 using Type_t = TENT<typename BinaryReturn<T1, T2, TAG>::Type_t, D1, D2>; \ 138 template<class T1, class T2, unsigned D1, unsigned D2> \ 139 inline typename BinaryReturn<TENT<T1, D1, D2>, TENT<T2, D1, D2>, TAG>::Type_t FUNC(const TENT<T1, D1, D2>& v1, \ 140 const TENT<T2, D1, D2>& v2) \ 142 return OTBinary<TENT<T1, D1, D2>, TENT<T2, D1, D2>, TAG>::apply(v1, v2, TAG()); \ 145 template<class T1, class T2, unsigned D1, unsigned D2> \ 146 struct BinaryReturn<TENT<T1, D1, D2>, T2, TAG> \ 148 using Type_t = TENT<typename BinaryReturn<T1, T2, TAG>::Type_t, D1, D2>; \ 151 template<class T1, class T2, unsigned D1, unsigned D2> \ 152 struct BinaryReturn<T1, TENT<T2, D1, D2>, TAG> \ 154 using Type_t = TENT<typename BinaryReturn<T1, T2, TAG>::Type_t, D1, D2>; \ 157 template<class T1, class T2, unsigned D1, unsigned D2> \ 158 inline typename BinaryReturn<TENT<T1, D1, D2>, T2, TAG>::Type_t FUNC(const TENT<T1, D1, D2>& v1, const T2& x) \ 160 return OTBinary<TENT<T1, D1, D2>, T2, TAG>::apply(v1, x, TAG()); \ 163 template<class T1, class T2, unsigned D1, unsigned D2> \ 164 inline typename BinaryReturn<T1, TENT<T2, D1, D2>, TAG>::Type_t FUNC(const T1& x, const TENT<T2, D1, D2>& v2) \ 166 return OTBinary<T1, TENT<T2, D1, D2>, TAG>::apply(x, v2, TAG()); \ 169 #define OHMMS_TINYMAT_ACCUM_OPERATORS(TENT, FUNC, TAG) \ 171 template<class T1, class T2, unsigned D1, unsigned D2> \ 172 inline TENT<T1, D1, D2>& FUNC(TENT<T1, D1, D2>& v1, const TENT<T2, D1, D2>& v2) \ 174 OTAssign<TENT<T1, D1, D2>, TENT<T2, D1, D2>, TAG>::apply(v1, v2, TAG()); \ 178 template<class T1, class T2, unsigned D1, unsigned D2> \ 179 inline TENT<T1, D1, D2>& FUNC(TENT<T1, D1, D2>& v1, const T2& v2) \ 181 OTAssign<TENT<T1, D1, D2>, T2, TAG>::apply(v1, v2, TAG()); \ 185 #endif // OHMMS_TINY_META_H
helper functions for EinsplineSetBuilder
Tensor<T,D> class for D by D tensor.