18 #ifndef QMCPLUSPLUS_HYBRIDREP_CPLX_H 19 #define QMCPLUSPLUS_HYBRIDREP_CPLX_H 32 template<
typename SPLINEBASE>
38 using ST =
typename SPLINEBASE::DataType;
39 using DataType =
typename SPLINEBASE::DataType;
44 using typename SPLINEBASE::GGGVector;
45 using typename SPLINEBASE::GradMatrix;
47 using typename SPLINEBASE::GradVector;
48 using typename SPLINEBASE::HessVector;
49 using typename SPLINEBASE::OffloadMWVGLArray;
50 using typename SPLINEBASE::ValueMatrix;
62 using SPLINEBASE::myG;
63 using SPLINEBASE::myH;
64 using SPLINEBASE::myL;
65 using SPLINEBASE::myV;
73 SPLINEBASE::storeParamsBeforeRotation();
76 void applyRotation(
const ValueMatrix& rot_mat,
bool use_stored_copy)
override 78 SPLINEBASE::applyRotation(rot_mat, use_stored_copy);
82 std::string
getClassName() const final {
return "Hybrid" + SPLINEBASE::getClassName(); }
83 std::string
getKeyword() const final {
return "Hybrid" + SPLINEBASE::getKeyword(); }
86 std::unique_ptr<SPOSet>
makeClone()
const override {
return std::make_unique<HybridRepCplx>(*this); }
90 SPLINEBASE::bcast_tables(
comm);
96 SPLINEBASE::gather_tables(
comm);
108 SPLINEBASE::evaluateValue(P, iat, psi);
113 psi_AO.resize(psi.size());
115 SPLINEBASE::evaluateValue(P, iat, psi);
124 std::vector<ValueType>& ratios)
override 129 psi_AO.resize(psi.size());
136 SPLINEBASE::evaluateValue(VP, iat, psi);
146 SPLINEBASE::evaluateValue(VP, iat, psi);
149 ratios[iat] =
simd::dot(psi.data(), psiinv.data(), psi.size());
157 ratios[iat] =
simd::dot(psi.data(), psiinv.data(), psi.size());
165 const std::vector<const ValueType*>& invRow_ptr_list,
166 std::vector<std::vector<ValueType>>& ratios_list)
const final 175 SPLINEBASE::evaluateVGL(P, iat, psi, dpsi, d2psi);
177 SPLINEBASE::assign_vgl_from_l(P.
activeR(iat), psi, dpsi, d2psi);
180 psi_AO.resize(psi.size());
184 SPLINEBASE::evaluateVGL(P, iat, psi, dpsi, d2psi);
202 const std::vector<const ValueType*>& invRow_ptr_list,
203 OffloadMWVGLArray& phi_vgl_v,
204 std::vector<ValueType>& ratios,
205 std::vector<GradType>& grads)
const final 214 HessVector& grad_grad_psi)
override 216 APP_ABORT(
"HybridRepCplx::evaluate_vgh not implemented!");
219 SPLINEBASE::evaluateVGH(P, iat, psi, dpsi, grad_grad_psi);
221 SPLINEBASE::assign_vgh(P.
activeR(iat), psi, dpsi, grad_grad_psi, 0, myV.
size() / 2);
228 HessVector& grad_grad_psi,
229 GGGVector& grad_grad_grad_psi)
override 231 APP_ABORT(
"HybridRepCplx::evaluate_vghgh not implemented!");
239 ValueMatrix& d2logdet)
final 245 template<
class BSPLINESPO>
247 template<
class BSPLINESPO>
typename SPLINEBASE::RealType RealType
void interpolate_buffer_vgl(VV &psi, GV &dpsi, VV &d2psi, const VV &psi_AO, const GV &dpsi_AO, const VV &d2psi_AO, const LocationSmoothingInfo &info) const
void gather_tables(Communicate *comm)
typename SPLINEBASE::SingleSplineType SingleSplineType
RealType f
smooth function value
bool is_VP_batching_safe(const VirtualParticleSet &VP) const
void storeParamsBeforeRotation() override
helper functions for EinsplineSetBuilder
Hybrid representation atomic centered orbitals.
T dot(const T *restrict a, const T *restrict b, int n, TRES res=TRES())
dot product
void evaluateVGL(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi) override
void applyRotation(const VM &rot_mat, bool use_stored_copy)
void evaluateVGH(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi) override
Matrix< ST, aligned_allocator< ST > > multi_myV
A ParticleSet that handles virtual moves of a selected particle of a given physical ParticleSet Virtu...
void evaluateValue(const ParticleSet &P, const int iat, ValueVector &psi) override
hybrid representation orbitals combining B-spline orbitals on a grid and atomic centered orbitals...
size_t getTotalNum() const
LatticeGaussianProduct::GradType GradType
void gather_atomic_tables(Communicate *comm, std::vector< int > &offset)
bool isRotationSupported() const override
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)
std::string getClassName() const final
OrbitalSetTraits< ValueType >::ValueVector ValueVector
void bcast_tables(Communicate *comm)
bool write_splines(hdf_archive &h5f)
Wrapping information on parallelism.
typename SPLINEBASE::PointType PointType
Each SplineC2X needs a reader derived from BsplineReader.
Specialized paritlce class for atomistic simulations.
General SplineSetReader to handle any unitcell.
void evaluate_v(const ParticleSet &P, const int iat, VV &myV, LocationSmoothingInfo &info)
HybridRepCplx(const std::string &my_name)
void evaluateValuesC2X(const VirtualParticleSet &VP, VM &multi_myV, LocationSmoothingInfo &info)
bool isOMPoffload() const final
virtual void mw_evaluateVGL(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const RefVector< ValueVector > &psi_v_list, const RefVector< GradVector > &dpsi_v_list, const RefVector< ValueVector > &d2psi_v_list) const
evaluate the values, gradients and laplacians of this single-particle orbital sets of multiple walker...
virtual void mw_evaluateVGLandDetRatioGrads(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const std::vector< const ValueType *> &invRow_ptr_list, OffloadMWVGLArray &phi_vgl_v, std::vector< ValueType > &ratios, std::vector< GradType > &grads) const
evaluate the values, gradients and laplacians of this single-particle orbital sets and determinant ra...
void evaluate_vgh(const ParticleSet &P, const int iat, VV &myV, GV &myG, HT &myH, LocationSmoothingInfo &info)
BsplineSet is a SPOSet derived class and serves as a base class for B-spline SPO C2C/C2R/R2R implemen...
void evaluate_vgl(const ParticleSet &P, const int iat, VV &myV, GV &myG, VV &myL, LocationSmoothingInfo &info)
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Region region
region of the location
typename SPLINEBASE::DataType ST
const PosType & activeR(int iat) const
return the active position if the particle is active or the return current position if not ...
void applyRotation(const ValueMatrix &rot_mat, bool use_stored_copy) override
void mw_evaluateVGLandDetRatioGrads(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const std::vector< const ValueType *> &invRow_ptr_list, OffloadMWVGLArray &phi_vgl_v, std::vector< ValueType > &ratios, std::vector< GradType > &grads) const final
bool write_splines(hdf_archive &h5f)
void interpolate_buffer_v(VV &psi, const VV &psi_AO, const RealType f) const
std::unique_ptr< SPOSet > makeClone() const override
std::vector< std::reference_wrapper< T > > RefVector
QMCTraits::RealType RealType
std::string getKeyword() const final
virtual void mw_evaluateDetRatios(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< const VirtualParticleSet > &vp_list, const RefVector< ValueVector > &psi_list, const std::vector< const ValueType *> &invRow_ptr_list, std::vector< std::vector< ValueType >> &ratios_list) const
evaluate determinant ratios for virtual moves, e.g., sphere move for nonlocalPP, of multiple walkers ...
void storeParamsBeforeRotation()
HYBRIDBASE::LocationSmoothingInfo info
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...
bool read_splines(hdf_archive &h5f)
void mw_evaluateDetRatios(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< const VirtualParticleSet > &vp_list, const RefVector< ValueVector > &psi_list, const std::vector< const ValueType *> &invRow_ptr_list, std::vector< std::vector< ValueType >> &ratios_list) const final
LatticeGaussianProduct::ValueType ValueType
void mw_evaluateVGL(const RefVectorWithLeader< SPOSet > &sa_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const RefVector< ValueVector > &psi_v_list, const RefVector< GradVector > &dpsi_v_list, const RefVector< ValueVector > &d2psi_v_list) const final
General HybridRepSetReader to handle any unitcell.
void evaluate_notranspose(const ParticleSet &P, int first, int last, ValueMatrix &logdet, GradMatrix &dlogdet, ValueMatrix &d2logdet) final
void evaluateDetRatios(const VirtualParticleSet &VP, ValueVector &psi, const ValueVector &psiinv, std::vector< ValueType > &ratios) override
void bcast_tables(Communicate *comm)
void evaluateVGHGH(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, GGGVector &grad_grad_grad_psi) override
typename SPLINEBASE::DataType DataType
bool read_splines(hdf_archive &h5f)