18 #ifndef QMCPLUSPLUS_HYBRIDREP_REAL_H 19 #define QMCPLUSPLUS_HYBRIDREP_REAL_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::HalfG;
63 using SPLINEBASE::myG;
64 using SPLINEBASE::myH;
65 using SPLINEBASE::myL;
66 using SPLINEBASE::myV;
67 using SPLINEBASE::PrimLattice;
75 SPLINEBASE::storeParamsBeforeRotation();
78 void applyRotation(
const ValueMatrix& rot_mat,
bool use_stored_copy)
override 80 SPLINEBASE::applyRotation(rot_mat, use_stored_copy);
84 std::string
getClassName() const final {
return "Hybrid" + SPLINEBASE::getClassName(); }
85 std::string
getKeyword() const final {
return "Hybrid" + SPLINEBASE::getKeyword(); }
88 std::unique_ptr<SPOSet>
makeClone()
const override {
return std::make_unique<HybridRepReal>(*this); }
92 SPLINEBASE::bcast_tables(
comm);
98 SPLINEBASE::gather_tables(
comm);
110 SPLINEBASE::evaluateValue(P, iat, psi);
118 psi_AO.resize(psi.size());
121 SPLINEBASE::evaluateValue(P, iat, psi);
129 std::vector<ValueType>& ratios)
override 134 psi_AO.resize(psi.size());
142 SPLINEBASE::evaluateValue(VP, iat, psi);
152 SPLINEBASE::evaluateValue(VP, iat, psi);
155 ratios[iat] =
simd::dot(psi.data(), psiinv.data(), psi.size());
162 ratios[iat] =
simd::dot(psi.data(), psiinv.data(), psi.size());
169 const std::vector<const ValueType*>& invRow_ptr_list,
170 std::vector<std::vector<ValueType>>& ratios_list)
const final 179 SPLINEBASE::evaluateVGL(P, iat, psi, dpsi, d2psi);
185 psi_AO.resize(psi.size());
190 SPLINEBASE::evaluateVGL(P, iat, psi, dpsi, d2psi);
208 const std::vector<const ValueType*>& invRow_ptr_list,
209 OffloadMWVGLArray& phi_vgl_v,
210 std::vector<ValueType>& ratios,
211 std::vector<GradType>& grads)
const final 220 HessVector& grad_grad_psi)
override 222 APP_ABORT(
"HybridRepReal::evaluateVGH not implemented!");
226 grad_grad_psi, 0, myV.size());
228 SPLINEBASE::evaluateVGH(P, iat, psi, dpsi, grad_grad_psi);
235 HessVector& grad_grad_psi,
236 GGGVector& grad_grad_grad_psi)
override 238 APP_ABORT(
"HybridRepCplx::evaluateVGHGH not implemented!");
246 ValueMatrix& d2logdet)
final 252 template<
class BSPLINESPO>
254 template<
class BSPLINESPO>
void evaluateValuesR2R(const VirtualParticleSet &VP, const Cell &PrimLattice, TinyVector< int, D > &HalfG, VM &multi_myV, SV &bc_signs, LocationSmoothingInfo &info)
HYBRIDBASE::LocationSmoothingInfo info
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
typename SPLINEBASE::RealType RealType
bool isOMPoffload() const final
RealType f
smooth function value
bool is_VP_batching_safe(const VirtualParticleSet &VP) const
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
bool read_splines(hdf_archive &h5f)
int get_bc_sign(const PointType &r, const PointType &r_image, const Cell &PrimLattice, TinyVector< int, D > &HalfG) const
void applyRotation(const VM &rot_mat, bool use_stored_copy)
HybridRepReal(const std::string &my_name)
A ParticleSet that handles virtual moves of a selected particle of a given physical ParticleSet Virtu...
size_t getTotalNum() const
LatticeGaussianProduct::GradType GradType
Matrix< ST, aligned_allocator< ST > > multi_myV
void gather_atomic_tables(Communicate *comm, std::vector< int > &offset)
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 bcast_tables(Communicate *comm)
OrbitalSetTraits< ValueType >::ValueVector ValueVector
void bcast_tables(Communicate *comm)
bool isRotationSupported() const override
std::string getClassName() const final
std::unique_ptr< SPOSet > makeClone() const override
Wrapping information on parallelism.
typename SPLINEBASE::SingleSplineType SingleSplineType
Each SplineC2X needs a reader derived from BsplineReader.
Specialized paritlce class for atomistic simulations.
General SplineSetReader to handle any unitcell.
void evaluateDetRatios(const VirtualParticleSet &VP, ValueVector &psi, const ValueVector &psiinv, std::vector< ValueType > &ratios) override
void evaluate_v(const ParticleSet &P, const int iat, VV &myV, LocationSmoothingInfo &info)
void evaluateVGHGH(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, GGGVector &grad_grad_grad_psi) override
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...
typename SPLINEBASE::PointType PointType
void evaluate_vgh(const ParticleSet &P, const int iat, VV &myV, GV &myG, HT &myH, LocationSmoothingInfo &info)
std::string getKeyword() const final
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
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
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
bool write_splines(hdf_archive &h5f)
void interpolate_buffer_v(VV &psi, const VV &psi_AO, const RealType f) const
bool write_splines(hdf_archive &h5f)
PointType r_image
for APBC
std::vector< std::reference_wrapper< T > > RefVector
QMCTraits::RealType RealType
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
void evaluate_notranspose(const ParticleSet &P, int first, int last, ValueMatrix &logdet, GradMatrix &dlogdet, ValueMatrix &d2logdet) 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()
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...
LatticeGaussianProduct::ValueType ValueType
typename SPLINEBASE::DataType ST
General HybridRepSetReader to handle any unitcell.
void applyRotation(const ValueMatrix &rot_mat, bool use_stored_copy) override
void gather_tables(Communicate *comm)
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
hybrid representation orbitals combining B-spline orbitals on a grid and atomic centered orbitals...
void evaluateVGL(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi) override
bool read_splines(hdf_archive &h5f)
void evaluateValue(const ParticleSet &P, const int iat, ValueVector &psi) override
void evaluateVGH(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi) override
typename SPLINEBASE::DataType DataType