21 #ifndef QMCPLUSPLUS_PADEFUNCTORS_H 22 #define QMCPLUSPLUS_PADEFUNCTORS_H 95 d2udr2 = -
B2 * dudr * u;
103 d2udr2 = -
B2 * dudr * u;
104 d3udr3 = -3.0 *
B * d2udr2 * u;
111 const T* restrict _distArray,
112 T* restrict distArrayCompressed)
const 115 for (
int idx = iStart; idx < iEnd; idx++)
131 const int dist_stride,
135 for (
int ip = 0; ip < num_pairs; ip++)
138 for (
int j = 0; j < n_src; j++)
140 const int ig = grp_ids[j];
141 auto& functor(*functors[ig]);
143 mw_vals[ip] += functor.evaluate(mw_dist[ip * dist_stride + j]);
152 T* restrict valArray,
153 T* restrict gradArray,
154 T* restrict laplArray,
155 T* restrict distArrayCompressed,
156 int* restrict distIndices)
const 158 for (
int idx = iStart; idx < iEnd; idx++)
160 valArray[idx] =
evaluate(distArray[idx], gradArray[idx], laplArray[idx]);
161 gradArray[idx] /= distArray[idx];
163 if (iat >= iStart && iat < iEnd)
164 valArray[iat] = gradArray[iat] = laplArray[iat] = T(0);
168 const int num_groups,
179 throw std::runtime_error(
"PadeFunctor mw_evaluateVGL not implemented!");
192 const std::vector<bool>& isAccepted,
193 const int num_groups,
205 throw std::runtime_error(
"PadeFunctor mw_updateVGL not implemented!");
215 derivs[i][0] = r * u - 1 /
B;
216 derivs[i][1] = u * u;
217 derivs[i][2] = -
B2 * u * u * u;
222 derivs[i][0] = -
A * r * r * u * u +
AoverB /
B;
223 derivs[i][1] = -2.0 *
A * r * u * u * u;
224 derivs[i][2] = 2.0 *
A * (
B2 * r - 1) * u * u * u * u;
236 derivs[i] = r * u - 1 /
B;
241 derivs[i] = -
A * r * r * u * u +
AoverB /
B;
246 bool put(xmlNodePtr cur)
override 249 cur = cur->xmlChildrenNode;
252 std::string cname((
const char*)(cur->name));
255 std::string id_in(
"0");
256 std::string p_name(
"B");
258 rAttrib.
add(id_in,
"id");
259 rAttrib.
add(p_name,
"name");
267 else if (p_name ==
"B")
284 int left_pad_space = 5;
375 dudr = u * (w -
B * u * v);
376 d2udr2 = 2.0 * u * u * u * (
C -
B *
A);
385 dudr = u * (w -
B * u * v);
386 d2udr2 = 2.0 * u * u * u * (
C -
B *
A);
387 std::cerr <<
"Third derivative not imlemented for Pade functor.\n";
394 const T* restrict _distArray,
395 T* restrict distArrayCompressed)
const 398 for (
int idx = iStart; idx < iEnd; idx++)
414 const int dist_stride,
418 for (
int ip = 0; ip < num_pairs; ip++)
421 for (
int j = 0; j < n_src; j++)
423 const int ig = grp_ids[j];
424 auto& functor(*functors[ig]);
426 mw_vals[ip] += functor.evaluate(mw_dist[ip * dist_stride + j]);
435 T* restrict valArray,
436 T* restrict gradArray,
437 T* restrict laplArray,
438 T* restrict distArrayCompressed,
439 int* restrict distIndices)
const 441 for (
int idx = iStart; idx < iEnd; idx++)
443 valArray[idx] =
evaluate(distArray[idx], gradArray[idx], laplArray[idx]);
444 gradArray[idx] /= distArray[idx];
446 if (iat >= iStart && iat < iEnd)
447 valArray[iat] = gradArray[iat] = laplArray[iat] = T(0);
468 derivs[i][0] = r * u;
470 derivs[i][2] = -2.0 *
B * u3;
476 derivs[i][0] = -r * r * (
A +
C * r) * u2;
477 derivs[i][1] = -r * (2.0 *
A +
C * r * (3.0 +
B * r)) * u3;
478 derivs[i][2] = -2.0 * u4 * (
A - 2.0 *
A *
B * r + 3.0 *
C * r);
484 derivs[i][0] = r * r * u;
485 derivs[i][1] = r * (2.0 +
B * r) * u2;
486 derivs[i][2] = 2.0 * u3;
504 derivs[i] = -r * r * (
A +
C * r) * u * u;
509 derivs[i] = r * r * u;
521 bool put(xmlNodePtr cur)
override 525 xmlNodePtr tcur = cur->xmlChildrenNode;
526 bool renewed =
false;
529 std::string cname((
const char*)(tcur->name));
530 if (cname ==
"parameter")
532 throw std::runtime_error(
533 "Keyword 'parameter' has been replaced by 'var' in the 'correlation' of pade2 Jastrow!");
535 else if (cname ==
"var" || cname ==
"Var")
537 std::string doopt(
"yes");
538 std::string id_in(
"0");
539 std::string p_name(
"B");
541 rAttrib.
add(id_in,
"id");
542 rAttrib.
add(p_name,
"name");
543 rAttrib.
add(doopt,
"optimize");
548 Opt_A = (doopt !=
"no");
552 else if (p_name ==
"B")
555 Opt_B = (doopt !=
"no");
559 else if (p_name ==
"C")
562 Opt_C = (doopt !=
"no");
584 int left_pad_space = 5;
672 return (
A * r + br * r) / (1.0 +
C *
C * r + dr * dr);
681 real_type bttm(1.0 / (1.0 +
C * cr + dr * dr));
682 dudr = (
A -
A * dr * dr + br * (2.0 +
C * cr)) * bttm * bttm;
683 d2udr2 = -2.0 * (
A * (
C *
C + 3.0 * dr *
D - dr * dr * dr *
D) +
B * (-1.0 + dr * dr * (3.0 +
C * cr))) * bttm *
685 return (
A * r + br * r) * bttm;
697 const T* restrict _distArray,
698 T* restrict distArrayCompressed)
const 701 for (
int idx = iStart; idx < iEnd; idx++)
711 T* restrict valArray,
712 T* restrict gradArray,
713 T* restrict laplArray,
714 T* restrict distArrayCompressed,
715 int* restrict distIndices)
const 717 for (
int idx = iStart; idx < iEnd; idx++)
719 valArray[idx] =
evaluate(distArray[idx], gradArray[idx], laplArray[idx]);
720 gradArray[idx] /= distArray[idx];
722 if (iat >= iStart && iat < iEnd)
723 valArray[iat] = gradArray[iat] = laplArray[iat] = T(0);
746 real_type bttm(1.0 / (1.0 + c2r + d2r2));
756 derivs[i][0] = r2 * bttm;
757 derivs[i][1] = r * (2.0 + c2r) * bttm2;
758 derivs[i][2] = (2.0 - 2.0 * d2r2 * (3.0 + c2r)) * bttm3;
764 derivs[i][0] = -2.0 * cr * tp * bttm2;
765 derivs[i][1] = -2 * cr * (
A * (2.0 - 2.0 * d2r2) + br * (3.0 + c2r - d2r2)) * bttm3;
766 derivs[i][2] = 4.0 *
C *
767 (
A * (-1.0 + 2.0 * c2r + 8.0 * d2r2 - 3.0 * d4r4) + br * (-3.0 - d4r4 + 2.0 * d2r2 * (4.0 + c2r))) * bttm4;
773 derivs[i][0] = -2.0 * dr2 * tp * bttm2;
774 derivs[i][1] = -2.0 * dr2 * (2.0 * br * (2.0 + c2r) +
A * (3.0 + c2r - d2r2)) * bttm3;
775 derivs[i][2] = -4.0 * dr *
776 (br * (6.0 + 4.0 * c2r + c2 * c2r2 - 6.0 * d2r2 - 2.0 * c2r * d2r2) +
777 A * (3.0 + d4r4 - 2.0 * d2r2 * (4.0 + c2r))) *
796 real_type bttm(1.0 / (1.0 + c2r + d2r2));
804 derivs[i] = r2 * bttm;
810 derivs[i] = -2.0 * cr * tp * bttm2;
816 derivs[i] = -2.0 * dr2 * tp * bttm2;
828 bool put(xmlNodePtr cur)
override 830 std::string fcup(
"yes");
832 p.
add(fcup,
"fixcusp");
839 xmlNodePtr tcur = cur->xmlChildrenNode;
840 bool renewed =
false;
843 std::string cname((
const char*)(tcur->name));
844 if (cname ==
"parameter")
846 throw std::runtime_error(
847 "Keyword 'parameter' has been replaced by 'var' in the 'correlation' of pade2 Jastrow!");
849 else if (cname ==
"var" || cname ==
"Var")
851 std::string id_in(
"0");
852 std::string p_name(
"B");
853 std::string doopt(
"yes");
855 rAttrib.
add(id_in,
"id");
856 rAttrib.
add(p_name,
"name");
857 rAttrib.
add(doopt,
"optimize");
862 Opt_A = (doopt !=
"no");
866 else if (p_name ==
"B")
869 Opt_B = (doopt !=
"no");
873 else if (p_name ==
"C")
876 Opt_C = (doopt !=
"no");
880 else if (p_name ==
"D")
883 Opt_D = (doopt !=
"no");
909 int left_pad_space = 5;
973 return A * reff / (1.0 +
B * reff);
990 d2udr2 = -reff_1 * auu * (
C +
B2 * reff_1 * u);
1000 dudr = reff_1 * auu;
1002 d2udr2 = -reff_1 * auu * (
C +
B2 * reff_1 * u);
1003 std::cerr <<
"Third derivative not imlemented for Pade functor.\n";
1004 return A * u * reff;
1017 bool put(xmlNodePtr cur)
override {
return true; }
void checkInVariablesExclusive(opt_variables_type &active) override
check in variational parameters to the global list of parameters used by the optimizer.
helper functions for EinsplineSetBuilder
void evaluateVGL(const int iat, const int iStart, const int iEnd, const T *distArray, T *restrict valArray, T *restrict gradArray, T *restrict laplArray, T *restrict distArrayCompressed, int *restrict distIndices) const
real_type evaluate(real_type r)
evaluate the value at r
void checkOutVariables(const opt_variables_type &active) override
check out variational optimizable variables
Pade functional of with a scale function f(r)
real_type df(real_type r) override
evaluate the first derivative
real_type evaluate(real_type r) const
OptimizableFunctorBase * makeClone() const override
create a clone of this object
real_type AoverB
AoverB=A/B.
bool put(xmlNodePtr cur)
assign attributes to the set
real_type Scale
input scaling, default=1.0
void evaluateVGL(const int iat, const int iStart, const int iEnd, const T *distArray, T *restrict valArray, T *restrict gradArray, T *restrict laplArray, T *restrict distArrayCompressed, int *restrict distIndices) const
OptimizableFunctorBase * makeClone() const override
create a clone of this object
real_type df(real_type r) override
evaluate the first derivative
void resetParametersExclusive(const opt_variables_type &active) override
reset the parameters during optimizations.
real_type f(real_type r) override
evaluate the value at r
Define a base class for one-dimensional functions with optimizable variables.
real_type evaluate(real_type r, real_type &dudr, real_type &d2udr2, real_type &d3udr3)
real_type evaluate(real_type r, real_type &dudr, real_type &d2udr2) const
evaluate the value at r
void evaluateVGL(const int iat, const int iStart, const int iEnd, const T *distArray, T *restrict valArray, T *restrict gradArray, T *restrict laplArray, T *restrict distArrayCompressed, int *restrict distIndices) const
OptimizableFunctorBase * makeClone() const override
create a clone of this object
real_type df(real_type r) override
evaluate the first derivative
real_type evaluate(real_type r, real_type &dudr, real_type &d2udr2, real_type &d3udr3) const
bool evaluateDerivatives(real_type r, std::vector< real_type > &derivs) override
real_type evaluate(real_type r, real_type &dudr, real_type &d2udr2)
bool put(xmlNodePtr cur) override
process xmlnode and registers variables to optimize
void reset() override
reset function
real_type evaluate(real_type r, real_type &dudr, real_type &d2udr2)
evaluate the value, first derivative and second derivative
bool evaluateDerivatives(real_type r, std::vector< TinyVector< real_type, 3 >> &derivs) override
void insert(const std::string &vname, real_type v, bool enable=true, int type=OTHER_P)
PadeTwo2ndOrderFunctor(real_type a=1.0, real_type b=1.0, real_type c=1.0, real_type d=1.0)
constructor
real_type evaluate(real_type r)
void checkOutVariables(const opt_variables_type &active) override
check out variational optimizable variables
ScaledPadeFunctor(real_type a=1.0, real_type b=1.0, real_type c=1.0)
constructor
class to handle a set of attributes of an xmlNode
class to handle a set of variables that can be modified during optimizations
int where(int i) const
return the locator of the i-th Index
static void mw_evaluateV(const int num_groups, const PadeFunctor *const functors[], const int n_src, const int *grp_ids, const int num_pairs, const int *ref_at, const T *mw_dist, const int dist_stride, T *mw_vals, Vector< char, OffloadPinnedAllocator< char >> &transfer_buffer)
evaluate sum of the pair potentials FIXME
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)
real_type f(real_type r) override
evaluate the value at r
OMPallocator is an allocator with fused device and dualspace allocator functionality.
real_type evaluate(real_type r, real_type &dudr, real_type &d2udr2) const
real_type evaluate(real_type r) const
void clear()
clear the variable set
Implements a Pade Function .
size_type size() const
return the size
real_type cutoff_radius
maximum cutoff
bool Opt_A
true, if A is optimizable
bool Opt_B
true, if B is optimizable
Base class for any functor with optimizable parameters.
void resetParametersExclusive(const opt_variables_type &active) override
reset the parameters during optimizations.
real_type f(real_type r) override
evaluate the value at r
void checkInVariablesExclusive(opt_variables_type &active) override
check in variational parameters to the global list of parameters used by the optimizer.
bool evaluateDerivatives(real_type r, std::vector< TinyVector< real_type, 3 >> &derivs) override
compute derivatives with respect to A and B
bool putContent(T &a, xmlNodePtr cur)
replaces a's value with the first "element" in the "string" returned by XMLNodeString{cur}.
bool put(xmlNodePtr cur) override
process input xml node
static void mw_evaluateV(const int num_groups, const Pade2ndOrderFunctor *const functors[], const int n_src, const int *grp_ids, const int num_pairs, const int *ref_at, const T *mw_dist, const int dist_stride, T *mw_vals, Vector< char, OffloadPinnedAllocator< char >> &transfer_buffer)
evaluate sum of the pair potentials FIXME
bool evaluateDerivatives(real_type r, std::vector< real_type > &derivs)
void checkOutVariables(const opt_variables_type &active) override
check out variational optimizable variables
real_type df(real_type r) override
evaluate the first derivative
void checkInVariablesExclusive(opt_variables_type &active) override
check in variational parameters to the global list of parameters used by the optimizer.
bool put(xmlNodePtr cur) override
process xmlnode and registers variables to optimize
PadeFunctor(const std::string &my_name)
default constructor
void checkOutVariables(const opt_variables_type &active) override
check out variational optimizable variables
OptimizableFunctorBase * makeClone() const override
create a clone of this object
bool put(xmlNodePtr cur) override
process input xml node
void resetParametersExclusive(const opt_variables_type &active) override
reset the parameters during optimizations.
void insertFrom(const VariableSet &input)
insert a VariableSet to the list
void resetParametersExclusive(const opt_variables_type &active) override
reset the parameters during optimizations.
real_type evaluate(real_type r, real_type &dudr, real_type &d2udr2, real_type d3udr3)
void reset() override
reset the internal variables.
real_type f(real_type r) override
evaluate the value at r
void setCusp(real_type cusp) override
empty virtual function to help builder classes
static void mw_updateVGL(const int iat, const std::vector< bool > &isAccepted, const int num_groups, const PadeFunctor *const functors[], const int n_src, const int *grp_ids, const int nw, T *mw_vgl, const int n_padded, const T *mw_dist, T *mw_allUat, T *mw_cur_allu, Vector< char, OffloadPinnedAllocator< char >> &transfer_buffer)
void checkInVariablesExclusive(opt_variables_type &active) override
check in variational parameters to the global list of parameters used by the optimizer.
void add(PDT &aparam, const std::string &aname, std::vector< PDT > candidate_values={}, TagStatus status=TagStatus::OPTIONAL)
add a new attribute
real_type evaluateV(const int iat, const int iStart, const int iEnd, const T *restrict _distArray, T *restrict distArrayCompressed) const
bool evaluateDerivatives(real_type r, std::vector< real_type > &derivs) override
compute derivatives with respect to A and B
real_type evaluateV(const int iat, const int iStart, const int iEnd, const T *restrict _distArray, T *restrict distArrayCompressed) const
void print(std::ostream &os, int leftPadSpaces=0, bool printHeader=false) const
optimize::VariableSet::real_type real_type
typedef for real values
real_type evaluateV(const int iat, const int iStart, const int iEnd, const T *restrict _distArray, T *restrict distArrayCompressed) const
int getIndex(const std::string &vname) const
return the Index vaule for the named parameter
real_type evaluate(real_type r, real_type &dudr, real_type &d2udr2, real_type &d3udr3) const
bool evaluateDerivatives(real_type r, std::vector< TinyVector< real_type, 3 >> &derivs) override
void reset() override
reset the internal variables.
Pade2ndOrderFunctor(const std::string &my_name, real_type a=1.0, real_type b=1.0, real_type c=1.0)
constructor
static void mw_evaluateVGL(const int iat, const int num_groups, const PadeFunctor *const functors[], const int n_src, const int *grp_ids, const int nw, T *mw_vgl, const int n_padded, const T *mw_dist, T *mw_cur_allu, Vector< char, OffloadPinnedAllocator< char >> &transfer_buffer)
opt_variables_type myVars
set of variables to be optimized
void reset() override
reset the internal variables.