13 #ifndef OHMMS_TINYVECTOR_OPERATORS_H 14 #define OHMMS_TINYVECTOR_OPERATORS_H 41 template<
class T1,
class T2,
class OP,
unsigned D>
46 for (
unsigned d = 0; d < D; ++d)
51 template<
class T1,
class T2,
class OP,
unsigned D>
56 for (
unsigned d = 0; d < D; ++d)
65 template<
class T1,
class T2,
class OP>
71 template<
class T1,
class T2,
class OP>
81 template<
class T1,
class T2,
class OP>
91 template<
class T1,
class T2,
class OP>
105 template<
class T1,
class T2,
class OP>
116 template<
class T1,
class T2,
class OP>
121 op(lhs[0], rhs[0].
real());
122 op(lhs[1], rhs[1].
real());
123 op(lhs[2], rhs[2].
real());
127 template<
class T1,
class T2,
class OP>
138 template<
class T1,
class T2,
class OP>
160 template<
class T1,
class T2,
class OP,
unsigned D>
167 for (
unsigned d = 0; d < D; ++d)
168 ret[d] = op(lhs[d], rhs[d]);
173 template<
class T1,
class T2,
class OP,
unsigned D>
180 for (
unsigned d = 0; d < D; ++d)
181 ret[d] = op(lhs[d], rhs);
186 template<
class T1,
class T2,
class OP,
unsigned D>
193 for (
unsigned d = 0; d < D; ++d)
194 ret[d] = op(lhs, rhs[d]);
203 template<
class T1,
class T2,
class OP>
213 template<
class T1,
class T2,
class OP>
223 template<
class T1,
class T2,
class OP>
237 template<
class T1,
class T2,
class OP>
247 template<
class T1,
class T2,
class OP>
257 template<
class T1,
class T2,
class OP>
271 template<
class T1,
class T2,
class OP>
281 template<
class T1,
class T2,
class OP>
291 template<
class T1,
class T2,
class OP>
307 template<
class T1,
class T2,
unsigned D>
313 Type_t res = lhs[0] * rhs[0];
314 for (
unsigned d = 1; d < D; ++d)
315 res += lhs[d] * rhs[d];
320 template<
class T1,
class T2>
327 template<
class T1,
class T2>
333 return lhs[0] * rhs[0] + lhs[1] * rhs[1];
337 template<
class T1,
class T2>
343 return lhs[0] * rhs[0] + lhs[1] * rhs[1] + lhs[2] * rhs[2];
347 template<
class T1,
class T2>
353 return lhs[0] * rhs[0] + lhs[1] * rhs[1] + lhs[2] * rhs[2] + lhs[3] * rhs[3];
364 return lhs[0] * rhs[0].real() + lhs[1] * rhs[1].real() + lhs[2] * rhs[2].real();
369 template<
class T1,
class T2>
375 return lhs[0].real() * rhs[0] + lhs[1].real() * rhs[1] + lhs[2].real() * rhs[2];
380 template<
class T1,
class T2>
386 return std::complex<T1>(lhs[0].real() * rhs[0].real() - lhs[0].imag() * rhs[0].imag() +
387 lhs[1].real() * rhs[1].real() - lhs[1].imag() * rhs[1].imag() +
388 lhs[2].real() * rhs[2].real() - lhs[2].imag() * rhs[2].imag(),
389 lhs[0].real() * rhs[0].imag() + lhs[0].imag() * rhs[0].real() +
390 lhs[1].real() * rhs[1].imag() + lhs[1].imag() * rhs[1].real() +
391 lhs[2].real() * rhs[2].imag() + lhs[2].imag() * rhs[2].real());
401 template<
class T1,
class T2>
411 template<
class T1,
class T2,
unsigned D>
422 template<
class T1,
class T2>
429 cross[0] = a[1] * b[2] - a[2] * b[1];
430 cross[1] = a[2] * b[0] - a[0] * b[2];
431 cross[2] = a[0] * b[1] - a[1] * b[0];
502 #endif // OHMMS_TINYVECTOR_OPERATORS_H typename Promote< T1, T2 >::Type_t Type_t
std::complex< T1 > Type_t
static TinyVector< Type_t, 2 > apply(const T1 &lhs, const TinyVector< T2, 2 > &rhs, OP op)
helper functions for EinsplineSetBuilder
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static Type_t apply(const TinyVector< std::complex< T1 >, 3 > &lhs, const TinyVector< std::complex< T2 >, 3 > &rhs)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Type_t apply(const TinyVector< std::complex< T1 >, 3 > &lhs, const TinyVector< T2, 3 > &rhs)
static void apply(TinyVector< T1, 2 > &lhs, const TinyVector< T2, 2 > &rhs, OP op)
float real(const float &c)
real part of a scalar. Cannot be replaced by std::real due to AFQMC specific needs.
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Type_t apply(const TinyVector< T1, D > &lhs, const TinyVector< T2, D > &rhs)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Type_t apply(const TinyVector< T1, 1 > &lhs, const TinyVector< T2, 1 > &rhs)
static Type_t apply(const TinyVector< T1, 4 > &lhs, const TinyVector< T2, 4 > &rhs)
static TinyVector< Type_t, 3 > apply(const TinyVector< T1, 3 > &lhs, const TinyVector< T2, 3 > &rhs, OP op)
static Type_t apply(const TinyVector< T1, 3 > &lhs, const TinyVector< T2, 3 > &rhs)
static Type_t apply(const TinyVector< T1, 2 > &lhs, const TinyVector< T2, 2 > &rhs)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static TinyVector< Type_t, D > apply(const TinyVector< T1, D > &lhs, const TinyVector< T2, D > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static void apply(TinyVector< T1, 3 > &lhs, const T2 &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static void apply(TinyVector< T1, D > &lhs, const TinyVector< T2, D > &rhs, OP op)
static void apply(TinyVector< T1, 3 > &lhs, const TinyVector< T2, 3 > &rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static TinyVector< Type_t, 1 > apply(const TinyVector< T1, 1 > &lhs, const T2 &rhs, OP op)
static void apply(TinyVector< T1, 3 > &lhs, const TinyVector< std::complex< T2 >, 3 > &rhs, OP op)
static void apply(TinyVector< T1, 2 > &lhs, const T2 &rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static TinyVector< Type_t, 3 > apply(const T1 &lhs, const TinyVector< T2, 3 > &rhs, OP op)
static TinyVector< Type_t, 3 > apply(const TinyVector< T1, 3 > &lhs, const T2 &rhs, OP op)
static TinyVector< Type_t, 2 > apply(const TinyVector< T1, 2 > &lhs, const T2 &rhs, OP op)
static void apply(TinyVector< std::complex< T1 >, 3 > &lhs, const TinyVector< std::complex< T2 >, 3 > &rhs, OP op)
static void apply(TinyVector< T1, D > &lhs, const T2 &rhs, OP op)
typename BinaryReturn< std::complex< T1 >, std::complex< T2 >, OpMultiply >::Type_t Type_t
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static void apply(TinyVector< T1, 1 > &lhs, const T2 &rhs, OP op)
static TinyVector< Type_t, 2 > apply(const TinyVector< T1, 2 > &lhs, const TinyVector< T2, 2 > &rhs, OP op)
TinyVector< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > cross(const TinyVector< T1, D > &lhs, const TinyVector< T2, D > &rhs)
static TinyVector< Type_t, D > apply(const TinyVector< T1, D > &lhs, const T2 &rhs, OP op)
static TinyVector< Type_t, 3 > apply(const TinyVector< T1, 3 > &a, const TinyVector< T2, 3 > &b)
static TinyVector< Type_t, D > apply(const T1 &lhs, const TinyVector< T2, D > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static TinyVector< Type_t, 1 > apply(const T1 &lhs, const TinyVector< T2, 1 > &rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static void apply(TinyVector< T1, 1 > &lhs, const TinyVector< T2, 1 > &rhs, OP op)
static TinyVector< Type_t, D > apply(const TinyVector< T1, D > &a, const TinyVector< T2, D > &b)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Type_t apply(const TinyVector< T1, 3 > &lhs, const TinyVector< std::complex< T1 >, 3 > &rhs)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static TinyVector< Type_t, 1 > apply(const TinyVector< T1, 1 > &lhs, const TinyVector< T2, 1 > &rhs, OP op)