19 #ifndef QMCPLUSPLUS_LONGRANGEJASTROW_BREAKUPUTILITY_H 20 #define QMCPLUSPLUS_LONGRANGEJASTROW_BREAKUPUTILITY_H 36 template<
class T =
double>
49 Rs =
std::pow(3.0 / (4.0 * M_PI * Density), 1.0 / 3.0);
66 if (r < std::numeric_limits<T>::epsilon())
74 inline T
df(T r)
const 76 if (r < std::numeric_limits<T>::epsilon())
82 return -
Rs * rinv * rinv * (1.0 - exponential) + exponential * rinv *
SqrtRs;
86 inline T
Fk(T k, T rc)
const {
return -
Xk(k, rc); }
88 inline T
Xk(T k, T rc)
const 94 (coskr * oneOverK * oneOverK -
112 template<
class T =
double>
146 inline T
df(T r)
const {
return 0.0; }
148 inline T
Fk(T k, T rc)
const {
return -
Xk(k, rc); }
150 inline T
Xk(T k, T rc)
const 160 Sy = 1.5 * y - 0.5 * y * y * y;
164 ((k * k * k * k *
Rs *
Rs *
Rs *
Rs *
165 (
std::pow(1.0 / (Sy * Sy) + 12.0 / (k * k * k * k *
Rs *
Rs *
Rs), 0.5))));
182 template<
class T =
double>
216 inline T
df(T r)
const {
return 0.0; }
218 inline T
Fk(T k, T rc)
const {
return -
Xk(k, rc); }
220 inline T
Xk(T k, T rc)
const 230 Sy = 1.5 * y - 0.5 * y * y * y;
251 template<
class T =
double>
271 Rs =
std::pow(3.0 / (4.0 * M_PI * Density), 1.0 / 3.0);
295 if (r < std::numeric_limits<T>::epsilon())
304 inline T
df(T r)
const 306 if (r < std::numeric_limits<T>::epsilon())
316 inline T
Fk(T k, T rc)
const {
return -
Xk(k, rc); }
319 inline T
Xk(T k, T rc)
const 324 T oneOverK = 1.0 / k;
328 (rc + k * k * rc *
Rs +
SqrtRs * (1.0 - k * k *
Rs)) * sinkr));
333 template<
class T =
double>
365 inline T
df(T r)
const {
return 0.0; }
367 inline T
Fk(T k, T rc)
const {
return -
Xk(k, rc); }
369 inline T
Xk(T k, T rc)
const 379 Sy = 1.5 * y - 0.5 * y * y * y;
381 T val = 12.0 / (k * k * k * k *
Rs *
Rs *
Rs);
399 template<
class T =
double>
431 inline T
df(T r)
const {
return 0.0; }
433 inline T
Fk(T k, T rc)
const {
return -
Xk(k, rc); }
435 inline T
Xk(T k, T rc)
const 445 Sy = 1.5 * y - 0.5 * y * y * y;
447 T val = 12.0 / (k * k * k * k *
Rs *
Rs *
Rs);
448 T uk = val *
std::pow(1.0 / (Sy * Sy) + val, -0.5);
449 return -0.5 *
NormFactor * (uk /
Rs) * (1.0 - 0.5 * val / (1.0 / (Sy * Sy) + val));
482 bool put(xmlNodePtr cur)
override {
return true; }
488 template<
class T =
double>
507 for (
int i = 0; i <
nspin; ++i)
515 for (
int i = 0; i <
nspin; i++)
529 for (
int i = 0; i <
nspin; ++i)
536 for (
int i = 0; i <
nspin; i++)
547 inline T
df(T r)
const {
return 0.0; }
549 inline T
Fk(T k, T rc)
const {
return -
Xk(k, rc); }
551 inline T
Xk(T k, T rc)
const 554 T eq = k * k *
hbs2m;
555 T vlr = u * u * 2.0 *
Density * eq;
558 T op2 =
Density * 2.0 * vq * eq;
567 T denom = 1.0 / veff -
Dlindhard(k, -eq);
569 T s0 = 0.0, ss = 0.0;
570 for (
int i = 0; i <
nspin; i++)
574 T y = 0.5 * k /
kfm[i];
578 ss = 0.5 * y * (3.0 - y * y);
590 T yq = s0 * s0 / (4.0 * k * k) * (1.0 / (eq * denom) + dp / (denom * denom)) +
600 inline T
Uk(T kk)
const {
return 0.0; }
613 vkbare = 4.0 * M_PI / (q * q);
622 T xd1, xd2, small = 0.00000001, xdummy, rq1, rq2;
624 for (
int i = 0; i <
nspin; i++)
632 xd1 = om / xq - xq / 2.0;
633 xd2 = om / xq + xq / 2.0;
641 else if (
std::abs(xd2 - 1.0) <= small)
651 xdummy = -1.0 + 0.5 * (1.0 - xd1 * xd1) / xq * rq1 - 0.50 * (1.0 - xd2 * xd2) / xq * rq2;
652 xdummy *=
kfm[i] / (8.0 * M_PI * M_PI *
hbs2m);
663 if (xd1 * xd1 - 1.0 > 1.0)
667 if (xd2 * xd2 - 1.0 > 1.0)
671 xdummy = -(xq + rq1 - rq2) / (4.0 * M_PI * xq *
hbs2m);
682 T xd1, xd2, small = 0.00000001, xdummy, rq1, rq2;
684 for (
int i = 0; i <
nspin; i++)
692 xd1 = om / xq - xq / 2.0;
693 xd2 = om / xq + xq / 2.0;
701 else if (
std::abs(xd2 - 1.0) <= small)
711 xdummy = -xd1 / (xq *
kfm[i] *
kfm[i] * 2.0 *
hbs2m) * rq1 + xd2 / (xq *
kfm[i] *
kfm[i] * 2.0 *
hbs2m) * rq2;
712 xdummy *=
kfm[i] / (8.0 * M_PI * M_PI *
hbs2m * xq);
723 if (xd1 * xd1 - 1.0 > 1.0)
724 rq1 = sd1 * xd1 /
std::sqrt(xd1 * xd1 - 1.0);
727 if (xd2 * xd2 - 1.0 > 1.0)
728 rq2 = sd2 * xd2 /
std::sqrt(xd2 * xd2 - 1.0);
731 xdummy = -(rq1 - rq2) / (8.0 * M_PI * (xq *
kfm[i] *
hbs2m) * (xq *
kfm[i] *
hbs2m));
T Xk(T k, T rc) const
integral from kc to infinity
void reset(ParticleSet &ref)
T integrate_r2(T rc) const
T Uk(T kk) const
return RPA value at |k|
T derivUk(T kk) const
return d u(k)/d rs
void reset() override
reset function
helper functions for EinsplineSetBuilder
T integrate_r2(T rc) const
void checkInVariablesExclusive(opt_variables_type &active) override
check in variational parameters to the global list of parameters used by the optimizer.
MakeReturn< UnaryNode< FnFabs, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t abs(const Vector< T1, C1 > &l)
size_t getTotalNum() const
real_type df(real_type r) override
evaluate the first derivative
MakeReturn< UnaryNode< FnSin, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sin(const Vector< T1, C1 > &l)
T integrate_r2(T rc) const
void checkOutVariables(const opt_variables_type &active) override
check out variational optimizable variables
T Uk(T kk) const
return RPA value at |k|
void reset(ParticleSet &ref)
void setRmax(real_type rm)
T operator()(T r, T rinv) const
int first(int igroup) const
return the first index of a group i
T df(T r) const
need d(df(r)/d(rs))/dr
Define a base class for one-dimensional functions with optimizable variables.
mRealType evaluate(const std::vector< int > &kshell, const pRealType *restrict rk1_r, const pRealType *restrict rk1_i, const pRealType *restrict rk2_r, const pRealType *restrict rk2_i) const
evaluate
T integrate_r2(T rc) const
T integrate_r2(T rc) const
T operator()(T r, T rinv) const
void reset(ParticleSet &ref, T rs)
int groups() const
return the number of groups
MakeReturn< BinaryNode< FnPow, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t, typename CreateLeaf< Vector< T2, C2 > >::Leaf_t > >::Expression_t pow(const Vector< T1, C1 > &l, const Vector< T2, C2 > &r)
T Uk(T kk) const
return RPA value at |k|
Specialized paritlce class for atomistic simulations.
T integrate_r2(T rc) const
T operator()(T r, T rinv) const
MakeReturn< UnaryNode< FnCos, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t cos(const Vector< T1, C1 > &l)
T operator()(T r, T rinv) const
real_type evaluate(real_type r)
void reset(ParticleSet &ref, T rs)
T Uk(T kk) const
return RPA value at |k|
T derivUk(T kk) const
return d u(k)/d rs
T operator()(T r, T rinv) const
class to handle a set of variables that can be modified during optimizations
int last(int igroup) const
return the last index of a group i
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)
T integrate_r2(T rc) const
void reset(ParticleSet &ref, T rs)
bool put(xmlNodePtr cur) override
process xmlnode and registers variables to optimize
T derivUk(T kk) const
return d u(k)/d rs
T operator()(T r, T rinv) const
need the df(r)/d(rs)
T operator()(T r, T rinv) const
Base class for any functor with optimizable parameters.
void reset(ParticleSet &ref, T rs)
MakeReturn< UnaryNode< FnLog, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t log(const Vector< T1, C1 > &l)
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
T derivUk(T kk) const
return d u(k)/d rs
void reset(ParticleSet &ref, T rs)
void reset(ParticleSet &ref, T rs)
void reset(ParticleSet &ref)
void reset(ParticleSet &ref)
const auto & getLattice() const
T derivUk(T kk) const
return d u(k)/d rs
base class for LRHandlerTemp<FUNC,BASIS> and DummyLRHanlder<typename Func>
OptimizableFunctorBase * makeClone() const override
create a clone of this object
void reset(ParticleSet &ref, T rs)
T Uk(T kk) const
return RPA value at |k|
void reset(ParticleSet &ref)
T Dlindhardp(T q, T w) const
optimize::VariableSet::real_type real_type
typedef for real values
virtual mRealType srDf(mRealType r, mRealType rinv) const =0
void resetParametersExclusive(const opt_variables_type &optVariables) override
reset the parameters during optimizations.
void reset(ParticleSet &ref)
real_type f(real_type r) override
evaluate the value at r
void reset(ParticleSet &ref)
T derivUk(T kk) const
return d u(k)/d rs
T Uk(T kk) const
return RPA value at |k|
MakeReturn< UnaryNode< FnArcSin, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t asin(const Vector< T1, C1 > &l)
T Dlindhard(T q, T w) const
ShortRangePartAdapter(HandlerType *inhandler)