20 :
SPOSet(my_name), length(l), center(c)
23 for (
int s = 0;
s < sho_states.size(); ++
s)
37 for (
int d = 0; d <
DIM; ++d)
42 for (
int d = 0; d <
DIM; ++d)
65 std::unique_ptr<SPOSet>
SHOSet::makeClone()
const {
return std::make_unique<SHOSet>(*this); }
70 app_log() << pad <<
"SHOSet report" << std::endl;
73 app_log() << pad <<
" nmax = " <<
nmax << std::endl;
76 app_log() << pad <<
" states" << std::endl;
79 app_log() << pad <<
"end SHOSet report" << std::endl;
109 for (
int iat = first, i = 0; iat < last; ++iat, ++i)
139 for (
int d = 0; d <
DIM; ++d)
148 for (
int n = 1;
n < nh; ++
n)
150 RealType Hn = 2 * (x * Hnm1 - (
n - 1) * Hnm2);
163 for (
int d = 0; d <
DIM; ++d)
176 for (
int d = 0; d <
DIM; ++d)
186 for (
int d = 0; d <
DIM; ++d)
193 bvalues(d,
n) = (-x + 2 *
n * Hnm1 / Hn) * ol;
201 for (
int d = 0; d <
DIM; ++d)
212 for (
int d = 0; d <
DIM; ++d)
218 bvalues(d,
n) = (-1.0 + x2 - 2 *
n) * ol2;
225 for (
int d = 0; d <
DIM; ++d)
245 for (
int n = 1;
n <
N; ++
n)
246 pre[
n] = pre[
n - 1] /
sqrt(2. *
n);
248 for (
int d = 0; d <
DIM; ++d)
251 RealType x2 = x * x, x3 = x * x * x, x4 = x * x * x * x, x5 = x * x * x * x * x;
261 H[3] = 8 * x3 - 12 * x;
262 dH[3] = 24 * x2 - 12;
264 H[4] = 16 * x4 - 48 * x2 + 12;
265 dH[4] = 64 * x3 - 96 * x;
266 d2H[4] = 192 * x2 - 96;
267 H[5] = 32 * x5 - 160 * x3 + 120 * x;
268 dH[5] = 160 * x4 - 480 * x2 + 120;
269 d2H[5] = 640 * x3 - 960 * x;
271 for (
int n = 0;
n <
N; ++
n)
273 p[
n] = pre[
n] * g * H[
n];
274 dp[
n] = pre[
n] * g * (-x * H[
n] + dH[
n]);
275 d2p[
n] = pre[
n] * g * ((x2 - 1) * H[
n] - 2 * x * dH[
n] + d2H[
n]);
277 app_log() <<
"eval check dim = " << d <<
" x = " << x << std::endl;
278 app_log() <<
" hermite check" << std::endl;
281 app_log() <<
" " <<
n <<
" " << H[
n] << std::endl;
284 app_log() <<
" phi d0 check" << std::endl;
287 app_log() <<
" " <<
n <<
" " << p[
n] << std::endl;
290 app_log() <<
" phi d1 check" << std::endl;
293 app_log() <<
" " <<
n <<
" " << dp[
n] / p[
n] << std::endl;
296 app_log() <<
" phi d2 check" << std::endl;
299 app_log() <<
" " <<
n <<
" " << d2p[
n] / p[
n] << std::endl;
326 vpsitmp.resize(nphi);
328 vd2psin.resize(nphi);
340 app_log() <<
" loading dr" << std::endl;
343 for (
int d = 0; d <
DIM; ++d)
351 app_log() <<
"SHOSet::test_derivatives" << std::endl;
358 for (
int i = 0; i <
n; ++i)
360 r[0] = c[0] + i * drg[0];
361 for (
int j = 0; j <
n; ++j)
363 r[1] = c[1] + j * drg[1];
364 for (
int k = 0; k <
n; ++k)
366 r[2] = c[2] + k * drg[2];
373 for (
int m = 0;
m < nphi; ++
m)
374 d2psin[
m] = -2 * odr2sum * psi[
m];
375 for (
int d = 0; d <
DIM; ++d)
380 for (
int m = 0;
m < nphi; ++
m)
383 dpsin[
m][d] = phi * o2dr[d];
384 d2psin[
m] += phi * odr2[d];
389 for (
int m = 0;
m < nphi; ++
m)
392 dpsin[
m][d] -= phi * o2dr[d];
393 d2psin[
m] += phi * odr2[d];
399 for (
int m = 0;
m < nphi; ++
m)
400 for (
int d = 0; d <
DIM; ++d)
401 dphi_diff = std::max<RealType>(dphi_diff,
std::abs(dpsi[
m][d] - dpsin[
m][d]) /
std::abs(dpsin[
m][d]));
402 for (
int m = 0;
m < nphi; ++
m)
403 d2phi_diff = std::max<RealType>(d2phi_diff,
std::abs(d2psi[
m] - d2psin[
m]) /
std::abs(d2psin[
m]));
404 app_log() <<
" " << p <<
" " << dphi_diff <<
" " << d2phi_diff << std::endl;
405 app_log() <<
" derivatives" << std::endl;
406 for (
int m = 0;
m < nphi; ++
m)
409 for (
int d = 0; d <
DIM; ++d)
412 for (
int d = 0; d <
DIM; ++d)
416 for (
int d = 0; d <
DIM; ++d)
420 app_log() <<
" laplacians" << std::endl;
422 for (
int m = 0;
m < nphi; ++
m)
425 for (
int d = 0; d <
DIM; ++d)
427 app_log() <<
" " << qn <<
real(d2psi[
m] / psi[
m]) << std::endl;
428 app_log() <<
" " << qn <<
real(d2psin[
m] / psi[
m]) << std::endl;
435 app_log() <<
"end SHOSet::test_derivatives" << std::endl;
441 app_log() <<
"SHOSet::test_overlap" << std::endl;
448 app_log() <<
" prefactors" << std::endl;
452 app_log() <<
" 1d overlap" << std::endl;
465 for (
int i = 0; i < nphi; ++i)
466 for (
int j = 0; j < nphi; ++j)
470 for (
double x = -xmax; x < xmax; x += dx)
476 for (
int i = 0; i < nphi; ++i)
477 for (
int j = 0; j < nphi; ++j)
481 for (
int i = 0; i < nphi; ++i)
484 for (
int j = 0; j < nphi; ++j)
485 app_log() << omat(i, j) <<
" ";
491 app_log() <<
" 3d overlap" << std::endl;
492 double dV = dr * dr * dr;
495 for (
int i = 0; i < nphi; ++i)
496 for (
int j = 0; j < nphi; ++j)
498 for (
double x = -xmax; x < xmax; x += dx)
499 for (
double y = -xmax; y < xmax; y += dx)
500 for (
double z = -xmax; z < xmax; z += dx)
508 for (
int i = 0; i < nphi; ++i)
509 for (
int j = 0; j < nphi; ++j)
510 omat(i, j) +=
std::abs(psi[i] * psi[j]) * dV;
512 for (
int i = 0; i < nphi; ++i)
515 for (
int j = 0; j < nphi; ++j)
516 app_log() << omat(i, j) <<
" ";
521 app_log() <<
"end SHOSet::test_overlap" << std::endl;
537 not_implemented(
"evaluate_notranspose(P,first,last,logdet,dlogdet,ddlogdet)");
548 not_implemented(
"evaluate_notranspose(P,first,last,logdet,dlogdet,ddlogdet,dddlogdet)");
570 not_implemented(
"evaluateGradSource(P,first,last,source,iat,dphi,ddphi,dd2phi)");
void report(const std::string &pad="") const override
print SPOSet information
base class for Single-particle orbital sets
void evaluate_d2(const PosType &xpos, ValueVector &psi, ValueVector &d2psi)
Array< RealType, 2 > d2_values
Array< RealType, 2 > hermite
helper functions for EinsplineSetBuilder
Array< RealType, 2 > d1_values
MakeReturn< UnaryNode< FnFabs, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t abs(const Vector< T1, C1 > &l)
void evaluateVGL(const ParticleSet &P, int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi) override
evaluate the values, gradients and laplacians of this single-particle orbital set ...
std::vector< SHOState > state_info
OrbitalSetTraits< ValueType >::ValueMatrix ValueMatrix
std::vector< RealType > prefactors
void evaluateThirdDeriv(const ParticleSet &P, int first, int last, GGGMatrix &dddlogdet) override
evaluate the third derivatives of this single-particle orbital set
std::string int2string(const int &i)
float real(const float &c)
real part of a scalar. Cannot be replaced by std::real due to AFQMC specific needs.
int size() const
return the size of the orbital set Ye: this needs to be replaced by getOrbitalSetSize(); ...
void evaluate_d0(const PosType &xpos, ValueVector &psi)
TinyVector< int, DIM > quantum_number
void evaluate_notranspose(const ParticleSet &P, int first, int last, ValueMatrix &logdet, GradMatrix &dlogdet, ValueMatrix &d2logdet) override
evaluate the values, gradients and laplacians of this single-particle orbital for [first...
void resize(const std::array< SIZET, D > &dims)
Resize the container.
SHOSet(const std::string &my_name, RealType l, PosType c, const std::vector< SHOState *> &sho_states)
void evaluate_vgl(PosType r, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi)
OrbitalSetTraits< ValueType >::GradMatrix GradMatrix
Array< RealType, 2 > d0_values
Specialized paritlce class for atomistic simulations.
QTBase::ValueType ValueType
void evaluate_v(PosType r, ValueVector &psi)
Array< RealType, 2 > bvalues
void evaluateGradSource(const ParticleSet &P, int first, int last, const ParticleSet &source, int iat_src, GradMatrix &gradphi) override
evaluate the gradients of this single-particle orbital for [first,last) target particles with respect...
std::unique_ptr< SPOSet > makeClone() const override
make a clone of itself every derived class must implement this to have threading working correctly...
OrbitalSetTraits< ValueType >::ValueVector ValueVector
IndexType OrbitalSetSize
number of Single-particle orbitals
void evaluate_check(PosType r, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi)
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)
const PosType & activeR(int iat) const
return the active position if the particle is active or the return current position if not ...
void evaluate_d1(const PosType &xpos, ValueVector &psi, GradVector &dpsi)
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
void evaluate_hermite(const PosType &xpos)
OrbitalSetTraits< ValueType >::GradVector GradVector
void not_implemented(const std::string &method)
unimplemented functions call this to abort
OrbitalSetTraits< ValueType >::GradHessMatrix GGGMatrix
TinyVector< int, DIM > qn_max
void evaluateValue(const ParticleSet &P, int iat, ValueVector &psi) override
evaluate the values of this single-particle orbital set
OrbitalSetTraits< ValueType >::HessMatrix HessMatrix