19 template<
typename ST,
typename TT>
23 TT* restrict results_scratch_ptr,
24 const ST* restrict offload_scratch_ptr,
25 const ST* restrict myKcart_ptr,
26 size_t myKcart_padded_size,
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;
34 const ST* restrict val = offload_scratch_ptr;
35 TT* restrict psi = results_scratch_ptr;
38 ST
s, c, p = -(x * kx[index] + y * ky[index] + z * kz[index]);
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);
48 template<
typename ST,
typename TT>
52 TT* restrict results_scratch_ptr,
53 size_t orb_padded_size,
55 const ST* restrict offload_scratch_ptr,
56 size_t spline_padded_size,
58 const ST* myKcart_ptr,
59 size_t myKcart_padded_size,
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],
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;
71 const ST* restrict val = offload_scratch_ptr + spline_padded_size *
SoAFields3D::VAL;
75 const ST* restrict lcart = offload_scratch_ptr + spline_padded_size *
SoAFields3D::LAPL;
77 const size_t jr = index << 1;
78 const size_t ji = jr + 1;
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];
87 ST
s, c, p = -(x * kX + y * kY + z * kZ);
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];
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];
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;
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);
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;
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);
helper functions for EinsplineSetBuilder
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)
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
void sincos(T a, T *restrict s, T *restrict c)
sincos function wrapper
handle math function mapping inside OpenMP offload regions.