18 #include "spline2/MultiBsplineEval.hpp" 35 SplineInst->copy_spline(spline_r, ispline);
42 o <<
"spline_" << MyIndex;
43 einspline_engine<SplineType> bigtable(SplineInst->getSplinePtr());
44 return h5f.
readEntry(bigtable, o.str().c_str());
51 o <<
"spline_" << MyIndex;
52 einspline_engine<SplineType> bigtable(SplineInst->getSplinePtr());
53 return h5f.
writeEntry(bigtable, o.str().c_str());
59 const auto spline_ptr = SplineInst->getSplinePtr();
60 const auto coefs_tot_size = spline_ptr->coefs_size;
61 coef_copy_ = std::make_shared<std::vector<ST>>(coefs_tot_size);
63 std::copy_n(spline_ptr->coefs, coefs_tot_size, coef_copy_->begin());
105 template<
typename ST>
109 const auto spline_ptr = SplineInst->getSplinePtr();
110 assert(spline_ptr !=
nullptr);
111 const auto spl_coefs = spline_ptr->coefs;
112 const auto Nsplines = spline_ptr->num_splines;
113 const auto coefs_tot_size = spline_ptr->coefs_size;
114 const auto BasisSetSize = coefs_tot_size / Nsplines;
115 const auto TrueNOrbs = rot_mat.size1();
116 assert(OrbitalSetSize == rot_mat.rows());
117 assert(OrbitalSetSize == rot_mat.cols());
119 if (!use_stored_copy)
121 assert(coef_copy_ !=
nullptr);
122 std::copy_n(spl_coefs, coefs_tot_size, coef_copy_->begin());
126 if constexpr (std::is_same_v<ST, RealType>)
129 BLAS::gemm(
'N',
'N', OrbitalSetSize, BasisSetSize, OrbitalSetSize, ST(1.0), rot_mat.data(), OrbitalSetSize,
130 coef_copy_->data(), Nsplines, ST(0.0), spl_coefs, Nsplines);
135 for (
IndexType i = 0; i < BasisSetSize; i++)
136 for (
IndexType j = 0; j < OrbitalSetSize; j++)
138 const auto cur_elem = Nsplines * i + j;
140 for (
IndexType k = 0; k < OrbitalSetSize; k++)
142 const auto index = i * Nsplines + k;
143 newval += (*coef_copy_)[index] * rot_mat[k][j];
145 spl_coefs[cur_elem] = newval;
151 template<
typename ST>
156 size_t last_real =
std::min(kPoints.size(), psi.size());
157 last = last > last_real ? last_real : last;
159 const ST signed_one = (bc_sign & 1) ? -1 : 1;
161 for (
size_t j = first; j < last; ++j)
162 psi[first_spo + j] = signed_one * myV[j];
165 template<
typename ST>
170 int bc_sign = convertPos(r, ru);
177 spline2::evaluate3d(SplineInst->getSplinePtr(), ru, myV, first, last);
178 assign_v(bc_sign, myV, psi, first, last);
182 template<
typename ST>
186 std::vector<TT>& ratios)
188 const bool need_resize = ratios_private.rows() < VP.
getTotalNum();
202 const int last_real = kPoints.size() < last ? kPoints.size() : last;
208 int bc_sign = convertPos(r, ru);
210 spline2::evaluate3d(SplineInst->getSplinePtr(), ru, myV, first, last);
211 assign_v(bc_sign, myV, psi, first, last_real);
212 ratios_private[iat][tid] =
simd::dot(psi.data() + first, psiinv.data() + first, last_real - first);
220 for (
int tid = 0; tid < ratios_private.cols(); tid++)
221 ratios[iat] += ratios_private[iat][tid];
225 template<
typename ST>
234 size_t last_real =
std::min(kPoints.size(), psi.size());
235 last = last > last_real ? last_real : last;
237 const ST signed_one = (bc_sign & 1) ? -1 : 1;
238 const ST g00 = PrimLattice.G(0), g01 = PrimLattice.G(1), g02 = PrimLattice.G(2), g10 = PrimLattice.G(3),
239 g11 = PrimLattice.G(4), g12 = PrimLattice.G(5), g20 = PrimLattice.G(6), g21 = PrimLattice.G(7),
240 g22 = PrimLattice.G(8);
241 const ST symGG[6] = {GGt[0], GGt[1] + GGt[3], GGt[2] + GGt[6], GGt[4], GGt[5] + GGt[7], GGt[8]};
243 const ST* restrict g0 = myG.data(0);
244 const ST* restrict g1 = myG.data(1);
245 const ST* restrict g2 = myG.data(2);
246 const ST* restrict h00 = myH.data(0);
247 const ST* restrict h01 = myH.data(1);
248 const ST* restrict h02 = myH.data(2);
249 const ST* restrict h11 = myH.data(3);
250 const ST* restrict h12 = myH.data(4);
251 const ST* restrict h22 = myH.data(5);
254 for (
size_t j = first; j < last; ++j)
256 const size_t psiIndex = first_spo + j;
257 psi[psiIndex] = signed_one * myV[j];
258 dpsi[psiIndex][0] = signed_one * (g00 * g0[j] + g01 * g1[j] + g02 * g2[j]);
259 dpsi[psiIndex][1] = signed_one * (g10 * g0[j] + g11 * g1[j] + g12 * g2[j]);
260 dpsi[psiIndex][2] = signed_one * (g20 * g0[j] + g21 * g1[j] + g22 * g2[j]);
261 d2psi[psiIndex] = signed_one *
SymTrace(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], symGG);
267 template<
typename ST>
270 const ST signed_one = (bc_sign & 1) ? -1 : 1;
271 const ST* restrict g0 = myG.data(0);
272 const ST* restrict g1 = myG.data(1);
273 const ST* restrict g2 = myG.data(2);
275 const size_t last_real = last_spo > psi.size() ? psi.size() : last_spo;
277 for (
int psiIndex = first_spo; psiIndex < last_real; ++psiIndex)
279 const size_t j = psiIndex - first_spo;
280 psi[psiIndex] = signed_one * myV[j];
281 dpsi[psiIndex][0] = signed_one * g0[j];
282 dpsi[psiIndex][1] = signed_one * g1[j];
283 dpsi[psiIndex][2] = signed_one * g2[j];
284 d2psi[psiIndex] = signed_one * myL[j];
288 template<
typename ST>
297 int bc_sign = convertPos(r, ru);
304 spline2::evaluate3d_vgh(SplineInst->getSplinePtr(), ru, myV, myG, myH, first, last);
305 assign_vgl(bc_sign, psi, dpsi, d2psi, first, last);
309 template<
typename ST>
318 const size_t last_real =
std::min(kPoints.size(), psi.size());
319 last = last > last_real ? last_real : last;
321 const ST signed_one = (bc_sign & 1) ? -1 : 1;
322 const ST g00 = PrimLattice.G(0), g01 = PrimLattice.G(1), g02 = PrimLattice.G(2), g10 = PrimLattice.G(3),
323 g11 = PrimLattice.G(4), g12 = PrimLattice.G(5), g20 = PrimLattice.G(6), g21 = PrimLattice.G(7),
324 g22 = PrimLattice.G(8);
326 const ST* restrict g0 = myG.data(0);
327 const ST* restrict g1 = myG.data(1);
328 const ST* restrict g2 = myG.data(2);
329 const ST* restrict h00 = myH.data(0);
330 const ST* restrict h01 = myH.data(1);
331 const ST* restrict h02 = myH.data(2);
332 const ST* restrict h11 = myH.data(3);
333 const ST* restrict h12 = myH.data(4);
334 const ST* restrict h22 = myH.data(5);
337 for (
size_t j = first; j < last; ++j)
340 const ST dX_r = g00 * g0[j] + g01 * g1[j] + g02 * g2[j];
341 const ST dY_r = g10 * g0[j] + g11 * g1[j] + g12 * g2[j];
342 const ST dZ_r = g20 * g0[j] + g21 * g1[j] + g22 * g2[j];
344 const size_t psiIndex = j + first_spo;
345 psi[psiIndex] = signed_one * myV[j];
346 dpsi[psiIndex][0] = signed_one * dX_r;
347 dpsi[psiIndex][1] = signed_one * dY_r;
348 dpsi[psiIndex][2] = signed_one * dZ_r;
350 const ST h_xx_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g00, g01, g02, g00, g01, g02);
351 const ST h_xy_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g00, g01, g02, g10, g11, g12);
352 const ST h_xz_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g00, g01, g02, g20, g21, g22);
353 const ST h_yx_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g10, g11, g12, g00, g01, g02);
354 const ST h_yy_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g10, g11, g12, g10, g11, g12);
355 const ST h_yz_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g10, g11, g12, g20, g21, g22);
356 const ST h_zx_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g20, g21, g22, g00, g01, g02);
357 const ST h_zy_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g20, g21, g22, g10, g11, g12);
358 const ST h_zz_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g20, g21, g22, g20, g21, g22);
360 grad_grad_psi[psiIndex][0] = signed_one * h_xx_r;
361 grad_grad_psi[psiIndex][1] = signed_one * h_xy_r;
362 grad_grad_psi[psiIndex][2] = signed_one * h_xz_r;
363 grad_grad_psi[psiIndex][3] = signed_one * h_yx_r;
364 grad_grad_psi[psiIndex][4] = signed_one * h_yy_r;
365 grad_grad_psi[psiIndex][5] = signed_one * h_yz_r;
366 grad_grad_psi[psiIndex][6] = signed_one * h_zx_r;
367 grad_grad_psi[psiIndex][7] = signed_one * h_zy_r;
368 grad_grad_psi[psiIndex][8] = signed_one * h_zz_r;
372 template<
typename ST>
381 int bc_sign = convertPos(r, ru);
388 spline2::evaluate3d_vgh(SplineInst->getSplinePtr(), ru, myV, myG, myH, first, last);
389 assign_vgh(bc_sign, psi, dpsi, grad_grad_psi, first, last);
393 template<
typename ST>
403 const size_t last_real =
std::min(kPoints.size(), psi.size());
404 last = last < 0 ? last_real : (last > last_real ? last_real : last);
406 const ST signed_one = (bc_sign & 1) ? -1 : 1;
407 const ST g00 = PrimLattice.G(0), g01 = PrimLattice.G(1), g02 = PrimLattice.G(2), g10 = PrimLattice.G(3),
408 g11 = PrimLattice.G(4), g12 = PrimLattice.G(5), g20 = PrimLattice.G(6), g21 = PrimLattice.G(7),
409 g22 = PrimLattice.G(8);
411 const ST* restrict g0 = myG.data(0);
412 const ST* restrict g1 = myG.data(1);
413 const ST* restrict g2 = myG.data(2);
414 const ST* restrict h00 = myH.data(0);
415 const ST* restrict h01 = myH.data(1);
416 const ST* restrict h02 = myH.data(2);
417 const ST* restrict h11 = myH.data(3);
418 const ST* restrict h12 = myH.data(4);
419 const ST* restrict h22 = myH.data(5);
421 const ST* restrict gh000 = mygH.data(0);
422 const ST* restrict gh001 = mygH.data(1);
423 const ST* restrict gh002 = mygH.data(2);
424 const ST* restrict gh011 = mygH.data(3);
425 const ST* restrict gh012 = mygH.data(4);
426 const ST* restrict gh022 = mygH.data(5);
427 const ST* restrict gh111 = mygH.data(6);
428 const ST* restrict gh112 = mygH.data(7);
429 const ST* restrict gh122 = mygH.data(8);
430 const ST* restrict gh222 = mygH.data(9);
434 for (
size_t j = first; j < last; ++j)
436 const ST val_r = myV[j];
440 const ST dX_r = g00 * g0[j] + g01 * g1[j] + g02 * g2[j];
441 const ST dY_r = g10 * g0[j] + g11 * g1[j] + g12 * g2[j];
442 const ST dZ_r = g20 * g0[j] + g21 * g1[j] + g22 * g2[j];
444 const size_t psiIndex = j + first_spo;
445 psi[psiIndex] = signed_one * val_r;
446 dpsi[psiIndex][0] = signed_one * dX_r;
447 dpsi[psiIndex][1] = signed_one * dY_r;
448 dpsi[psiIndex][2] = signed_one * dZ_r;
451 const ST f_xx_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g00, g01, g02, g00, g01, g02);
452 const ST f_xy_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g00, g01, g02, g10, g11, g12);
453 const ST f_xz_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g00, g01, g02, g20, g21, g22);
454 const ST f_yy_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g10, g11, g12, g10, g11, g12);
455 const ST f_yz_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g10, g11, g12, g20, g21, g22);
456 const ST f_zz_r =
v_m_v(h00[j], h01[j], h02[j], h11[j], h12[j], h22[j], g20, g21, g22, g20, g21, g22);
465 grad_grad_psi[psiIndex][0] = f_xx_r * signed_one;
466 grad_grad_psi[psiIndex][1] = f_xy_r * signed_one;
467 grad_grad_psi[psiIndex][2] = f_xz_r * signed_one;
468 grad_grad_psi[psiIndex][4] = f_yy_r * signed_one;
469 grad_grad_psi[psiIndex][5] = f_yz_r * signed_one;
470 grad_grad_psi[psiIndex][8] = f_zz_r * signed_one;
473 grad_grad_psi[psiIndex][3] = grad_grad_psi[psiIndex][1];
474 grad_grad_psi[psiIndex][6] = grad_grad_psi[psiIndex][2];
475 grad_grad_psi[psiIndex][7] = grad_grad_psi[psiIndex][5];
479 const ST f3_xxx_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
480 gh122[j], gh222[j], g00, g01, g02, g00, g01, g02, g00, g01, g02);
481 const ST f3_xxy_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
482 gh122[j], gh222[j], g00, g01, g02, g00, g01, g02, g10, g11, g12);
483 const ST f3_xxz_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
484 gh122[j], gh222[j], g00, g01, g02, g00, g01, g02, g20, g21, g22);
485 const ST f3_xyy_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
486 gh122[j], gh222[j], g00, g01, g02, g10, g11, g12, g10, g11, g12);
487 const ST f3_xyz_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
488 gh122[j], gh222[j], g00, g01, g02, g10, g11, g12, g20, g21, g22);
489 const ST f3_xzz_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
490 gh122[j], gh222[j], g00, g01, g02, g20, g21, g22, g20, g21, g22);
491 const ST f3_yyy_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
492 gh122[j], gh222[j], g10, g11, g12, g10, g11, g12, g10, g11, g12);
493 const ST f3_yyz_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
494 gh122[j], gh222[j], g10, g11, g12, g10, g11, g12, g20, g21, g22);
495 const ST f3_yzz_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
496 gh122[j], gh222[j], g10, g11, g12, g20, g21, g22, g20, g21, g22);
497 const ST f3_zzz_r =
t3_contract(gh000[j], gh001[j], gh002[j], gh011[j], gh012[j], gh022[j], gh111[j], gh112[j],
498 gh122[j], gh222[j], g20, g21, g22, g20, g21, g22, g20, g21, g22);
512 grad_grad_grad_psi[psiIndex][0][0] = signed_one * f3_xxx_r;
513 grad_grad_grad_psi[psiIndex][0][1] = signed_one * f3_xxy_r;
514 grad_grad_grad_psi[psiIndex][0][2] = signed_one * f3_xxz_r;
515 grad_grad_grad_psi[psiIndex][0][4] = signed_one * f3_xyy_r;
516 grad_grad_grad_psi[psiIndex][0][5] = signed_one * f3_xyz_r;
517 grad_grad_grad_psi[psiIndex][0][8] = signed_one * f3_xzz_r;
520 grad_grad_grad_psi[psiIndex][0][3] = grad_grad_grad_psi[psiIndex][0][1];
521 grad_grad_grad_psi[psiIndex][0][6] = grad_grad_grad_psi[psiIndex][0][2];
522 grad_grad_grad_psi[psiIndex][0][7] = grad_grad_grad_psi[psiIndex][0][5];
525 grad_grad_grad_psi[psiIndex][1][0] = grad_grad_grad_psi[psiIndex][0][1];
526 grad_grad_grad_psi[psiIndex][1][1] = grad_grad_grad_psi[psiIndex][0][4];
527 grad_grad_grad_psi[psiIndex][1][2] = grad_grad_grad_psi[psiIndex][0][5];
528 grad_grad_grad_psi[psiIndex][1][3] = grad_grad_grad_psi[psiIndex][0][4];
529 grad_grad_grad_psi[psiIndex][1][6] = grad_grad_grad_psi[psiIndex][0][5];
531 grad_grad_grad_psi[psiIndex][2][0] = grad_grad_grad_psi[psiIndex][0][2];
532 grad_grad_grad_psi[psiIndex][2][1] = grad_grad_grad_psi[psiIndex][0][5];
533 grad_grad_grad_psi[psiIndex][2][2] = grad_grad_grad_psi[psiIndex][0][8];
534 grad_grad_grad_psi[psiIndex][2][3] = grad_grad_grad_psi[psiIndex][0][5];
535 grad_grad_grad_psi[psiIndex][2][6] = grad_grad_grad_psi[psiIndex][0][8];
537 grad_grad_grad_psi[psiIndex][1][4] = signed_one * f3_yyy_r;
538 grad_grad_grad_psi[psiIndex][1][5] = signed_one * f3_yyz_r;
539 grad_grad_grad_psi[psiIndex][1][8] = signed_one * f3_yzz_r;
541 grad_grad_grad_psi[psiIndex][1][7] = grad_grad_grad_psi[psiIndex][1][5];
542 grad_grad_grad_psi[psiIndex][2][4] = grad_grad_grad_psi[psiIndex][1][5];
543 grad_grad_grad_psi[psiIndex][2][5] = grad_grad_grad_psi[psiIndex][1][8];
544 grad_grad_grad_psi[psiIndex][2][7] = grad_grad_grad_psi[psiIndex][1][8];
546 grad_grad_grad_psi[psiIndex][2][8] = signed_one * f3_zzz_r;
550 template<
typename ST>
560 int bc_sign = convertPos(r, ru);
567 spline2::evaluate3d_vghgh(SplineInst->getSplinePtr(), ru, myV, myG, myH, mygH, first, last);
568 assign_vghgh(bc_sign, psi, dpsi, grad_grad_psi, grad_grad_grad_psi, first, last);
OrbitalSetTraits< ValueType >::HessVector HessVector
T SymTrace(T h00, T h01, T h02, T h11, T h12, T h22, const T gg[6])
compute Trace(H*G)
void assign_vgl(int bc_sign, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi, int first, int last) const
helper functions for EinsplineSetBuilder
T dot(const T *restrict a, const T *restrict b, int n, TRES res=TRES())
dot product
A ParticleSet that handles virtual moves of a selected particle of a given physical ParticleSet Virtu...
SplineR2R(const std::string &my_name)
OrbitalSetTraits< ValueType >::ValueMatrix ValueMatrix
size_t getTotalNum() const
void evaluateDetRatios(const VirtualParticleSet &VP, ValueVector &psi, const ValueVector &psiinv, std::vector< TT > &ratios) override
T v_m_v(T h00, T h01, T h02, T h11, T h12, T h22, T g1x, T g1y, T g1z, T g2x, T g2y, T g2z)
compute vector[3]^T x matrix[3][3] x vector[3]
T t3_contract(T h000, T h001, T h002, T h011, T h012, T h022, T h111, T h112, T h122, T h222, T g1x, T g1y, T g1z, T g2x, T g2y, T g2z, T g3x, T g3y, T g3z)
Coordinate transform for a 3rd rank symmetric tensor representing coordinate derivatives (hence t3_co...
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 evaluateVGH(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi) override
evaluate the values, gradients and hessians of this single-particle orbital set
void assign_vgh(int bc_sign, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, int first, int last) const
void evaluateVGHGH(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, GGGVector &grad_grad_grad_psi) override
evaluate the values, gradients, hessians, and grad hessians of this single-particle orbital set ...
omp_int_t omp_get_thread_num()
Specialized paritlce class for atomistic simulations.
QTFull::ValueType FullPrecValueType
void applyRotation(const ValueMatrix &rot_mat, bool use_stored_copy) override
apply rotation to all the orbitals
bool read_splines(hdf_archive &h5f)
void FairDivideAligned(const int ntot, const int base, const int npart, const int me, int &first, int &last)
Partition ntot over npart and the size of each partition is a multiple of base size.
void set_spline(SingleSplineType *spline_r, SingleSplineType *spline_i, int twist, int ispline, int level)
void assign_vghgh(int bc_sign, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, GGGVector &grad_grad_grad_psi, int first=0, int last=-1) const
OrbitalSetTraits< ValueType >::ValueVector ValueVector
typename BsplineSet::ValueType TT
const PosType & activeR(int iat) const
return the active position if the particle is active or the return current position if not ...
void storeParamsBeforeRotation() override
Store an original copy of the spline coefficients for orbital rotation.
omp_int_t omp_get_num_threads()
OHMMS_INDEXTYPE IndexType
define other types
bool write_splines(hdf_archive &h5f)
void evaluateVGL(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi) override
evaluate the values, gradients and laplacians of this single-particle orbital set ...
OrbitalSetTraits< ValueType >::GradHessVector GGGVector
sycl::event copy_n(sycl::queue &aq, const T1 *restrict VA, size_t array_size, T2 *restrict VC, const std::vector< sycl::event > &events)
OrbitalSetTraits< ValueType >::GradVector GradVector
void evaluateValue(const ParticleSet &P, const int iat, ValueVector &psi) override
evaluate the values of this single-particle orbital set
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
UBspline_3d_d SingleSplineType
static void gemm(char Atrans, char Btrans, int M, int N, int K, double alpha, const double *A, int lda, const double *restrict B, int ldb, double beta, double *restrict C, int ldc)
bool readEntry(T &data, const std::string &aname)
read the data from the group aname and return status use read() for inbuilt error checking ...
void assign_vgl_from_l(int bc_sign, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi)
assign_vgl_from_l can be used when myL is precomputed and myV,myG,myL in cartesian ...
void assign_v(int bc_sign, const vContainer_type &myV, ValueVector &psi, int first, int last) const
bool writeEntry(T &data, const std::string &aname)
write the data to the group aname and return status use write() for inbuilt error checking ...
class to match ST real spline with BsplineSet::ValueType (real) SPOs