QMCPACK
qmcplusplus::C2C Namespace Reference

Functions

template<typename ST , typename TT >
void assign_v (ST x, ST y, ST z, TT *restrict results_scratch_ptr, const ST *restrict offload_scratch_ptr, const ST *restrict myKcart_ptr, size_t myKcart_padded_size, size_t first_spo, int index)
 
template<typename ST , typename TT >
void assign_vgl (ST x, ST y, ST z, TT *restrict results_scratch_ptr, size_t orb_padded_size, const ST *mKK_ptr, const ST *restrict offload_scratch_ptr, size_t spline_padded_size, const ST G[9], const ST *myKcart_ptr, size_t myKcart_padded_size, size_t first_spo, int index)
 assign_vgl More...
 

Function Documentation

◆ assign_v()

void qmcplusplus::C2C::assign_v ( ST  x,
ST  y,
ST  z,
TT *restrict  results_scratch_ptr,
const ST *restrict  offload_scratch_ptr,
const ST *restrict  myKcart_ptr,
size_t  myKcart_padded_size,
size_t  first_spo,
int  index 
)
inline

Definition at line 20 of file ApplyPhaseC2C.hpp.

References qmcplusplus::Units::time::s, and qmcplusplus::sincos().

Referenced by HybridRepCplx< SPLINEBASE >::evaluateDetRatios(), HybridRepReal< SPLINEBASE >::evaluateDetRatios(), SplineC2R< ST >::evaluateDetRatios(), SplineC2C< ST >::evaluateDetRatios(), SplineR2R< ST >::evaluateDetRatios(), SplineC2COMPTarget< ST >::evaluateDetRatios(), HybridRepCplx< SPLINEBASE >::evaluateValue(), HybridRepReal< SPLINEBASE >::evaluateValue(), SplineC2R< ST >::evaluateValue(), SplineC2C< ST >::evaluateValue(), SplineR2R< ST >::evaluateValue(), SplineC2COMPTarget< ST >::evaluateValue(), SplineC2ROMPTarget< ST >::evaluateValue(), and SplineC2COMPTarget< ST >::mw_evaluateDetRatios().

29 {
30  const ST* restrict kx = myKcart_ptr;
31  const ST* restrict ky = myKcart_ptr + myKcart_padded_size;
32  const ST* restrict kz = myKcart_ptr + myKcart_padded_size * 2;
33 
34  const ST* restrict val = offload_scratch_ptr;
35  TT* restrict psi = results_scratch_ptr;
36 
37  //phase
38  ST s, c, p = -(x * kx[index] + y * ky[index] + z * kz[index]);
39  omptarget::sincos(p, &s, &c);
40 
41  const ST val_r = val[index * 2];
42  const ST val_i = val[index * 2 + 1];
43  psi[first_spo + index] = TT(val_r * c - val_i * s, val_i * c + val_r * s);
44 }
void sincos(T a, T *restrict s, T *restrict c)
sincos function wrapper
Definition: math.hpp:62

◆ assign_vgl()

void qmcplusplus::C2C::assign_vgl ( ST  x,
ST  y,
ST  z,
TT *restrict  results_scratch_ptr,
size_t  orb_padded_size,
const ST *  mKK_ptr,
const ST *restrict  offload_scratch_ptr,
size_t  spline_padded_size,
const ST  G[9],
const ST *  myKcart_ptr,
size_t  myKcart_padded_size,
size_t  first_spo,
int  index 
)
inline

assign_vgl

Definition at line 49 of file ApplyPhaseC2C.hpp.

References qmcplusplus::GRAD0, qmcplusplus::GRAD1, qmcplusplus::GRAD2, qmcplusplus::LAPL, qmcplusplus::Units::time::s, qmcplusplus::sincos(), and qmcplusplus::VAL.

Referenced by SplineC2R< ST >::evaluateVGL(), SplineR2R< ST >::evaluateVGL(), SplineC2C< ST >::evaluateVGL(), SplineC2COMPTarget< ST >::evaluateVGL(), SplineC2COMPTarget< ST >::evaluateVGLMultiPos(), and SplineC2COMPTarget< ST >::mw_evaluateVGLandDetRatioGrads().

62 {
63  constexpr ST two(2);
64  const ST &g00 = G[0], &g01 = G[1], &g02 = G[2], &g10 = G[3], &g11 = G[4], &g12 = G[5], &g20 = G[6], &g21 = G[7],
65  &g22 = G[8];
66 
67  const ST* restrict k0 = myKcart_ptr;
68  const ST* restrict k1 = myKcart_ptr + myKcart_padded_size;
69  const ST* restrict k2 = myKcart_ptr + myKcart_padded_size * 2;
70 
71  const ST* restrict val = offload_scratch_ptr + spline_padded_size * SoAFields3D::VAL;
72  const ST* restrict g0 = offload_scratch_ptr + spline_padded_size * SoAFields3D::GRAD0;
73  const ST* restrict g1 = offload_scratch_ptr + spline_padded_size * SoAFields3D::GRAD1;
74  const ST* restrict g2 = offload_scratch_ptr + spline_padded_size * SoAFields3D::GRAD2;
75  const ST* restrict lcart = offload_scratch_ptr + spline_padded_size * SoAFields3D::LAPL;
76 
77  const size_t jr = index << 1;
78  const size_t ji = jr + 1;
79 
80  const ST kX = k0[index];
81  const ST kY = k1[index];
82  const ST kZ = k2[index];
83  const ST val_r = val[jr];
84  const ST val_i = val[ji];
85 
86  //phase
87  ST s, c, p = -(x * kX + y * kY + z * kZ);
88  omptarget::sincos(p, &s, &c);
89 
90  //dot(PrimLattice.G,myG[j])
91  const ST dX_r = g00 * g0[jr] + g01 * g1[jr] + g02 * g2[jr];
92  const ST dY_r = g10 * g0[jr] + g11 * g1[jr] + g12 * g2[jr];
93  const ST dZ_r = g20 * g0[jr] + g21 * g1[jr] + g22 * g2[jr];
94 
95  const ST dX_i = g00 * g0[ji] + g01 * g1[ji] + g02 * g2[ji];
96  const ST dY_i = g10 * g0[ji] + g11 * g1[ji] + g12 * g2[ji];
97  const ST dZ_i = g20 * g0[ji] + g21 * g1[ji] + g22 * g2[ji];
98 
99  // \f$\nabla \psi_r + {\bf k}\psi_i\f$
100  const ST gX_r = dX_r + val_i * kX;
101  const ST gY_r = dY_r + val_i * kY;
102  const ST gZ_r = dZ_r + val_i * kZ;
103  const ST gX_i = dX_i - val_r * kX;
104  const ST gY_i = dY_i - val_r * kY;
105  const ST gZ_i = dZ_i - val_r * kZ;
106 
107  const ST lap_r = lcart[jr] + mKK_ptr[index] * val_r + two * (kX * dX_i + kY * dY_i + kZ * dZ_i);
108  const ST lap_i = lcart[ji] + mKK_ptr[index] * val_i - two * (kX * dX_r + kY * dY_r + kZ * dZ_r);
109 
110  TT* restrict psi = results_scratch_ptr;
111  TT* restrict dpsi_x = results_scratch_ptr + orb_padded_size;
112  TT* restrict dpsi_y = results_scratch_ptr + orb_padded_size * 2;
113  TT* restrict dpsi_z = results_scratch_ptr + orb_padded_size * 3;
114  TT* restrict d2psi = results_scratch_ptr + orb_padded_size * 4;
115 
116  const size_t psiIndex = first_spo + index;
117  psi[psiIndex] = TT(c * val_r - s * val_i, c * val_i + s * val_r);
118  d2psi[psiIndex] = TT(c * lap_r - s * lap_i, c * lap_i + s * lap_r);
119  dpsi_x[psiIndex] = TT(c * gX_r - s * gX_i, c * gX_i + s * gX_r);
120  dpsi_y[psiIndex] = TT(c * gY_r - s * gY_i, c * gY_i + s * gY_r);
121  dpsi_z[psiIndex] = TT(c * gZ_r - s * gZ_i, c * gZ_i + s * gZ_r);
122 }
void sincos(T a, T *restrict s, T *restrict c)
sincos function wrapper
Definition: math.hpp:62