18 #ifndef QMCPLUSPLUS_SPLINE_C2C_H 19 #define QMCPLUSPLUS_SPLINE_C2C_H 24 #include "spline2/MultiBspline.hpp" 40 using SplineType =
typename bspline_traits<ST, 3>::SplineType;
41 using BCType =
typename bspline_traits<ST, 3>::BCType;
87 virtual std::string
getClassName()
const override {
return "SplineC2C"; }
88 virtual std::string
getKeyword()
const override {
return "SplineC2C"; }
92 std::unique_ptr<SPOSet>
makeClone()
const override {
return std::make_unique<SplineC2C>(*this); }
114 size_t npad = getAlignedSize<ST>(2 *
n);
128 const int Nbands =
kPoints.size();
129 const int Nbandgroups =
comm->
size();
130 offset.resize(Nbandgroups + 1, 0);
132 for (
size_t ib = 0; ib <
offset.size(); ib++)
137 template<
typename GT,
typename BCT>
141 SplineInst = std::make_shared<MultiBspline<ST>>();
143 app_log() <<
"MEMORY " <<
SplineInst->sizeInByte() / (1 << 20) <<
" MB allocated " 144 <<
"for the coefficients in 3D spline orbital representation" << std::endl;
152 const size_t nk =
kPoints.size();
155 for (
size_t i = 0; i < nk; ++i)
175 std::vector<ValueType>& ratios)
override;
211 int last = -1)
const;
220 template<
class BSPLINESPO>
void set_spline(SingleSplineType *spline_r, SingleSplineType *spline_i, int twist, int ispline, int level)
void resize(size_type n, Type_t val=Type_t())
Resize the container.
OrbitalSetTraits< ValueType >::HessVector HessVector
typename bspline_traits< ST, 3 >::SplineType SplineType
UBspline_3d_d SingleSplineType
virtual std::string getKeyword() const override
helper functions for EinsplineSetBuilder
void storeParamsBeforeRotation() override
Store an original copy of the spline coefficients for orbital rotation.
BsplineSet is the base class for SplineC2C, SplineC2R, SplineR2R.
void evaluateVGL(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi) override
evaluate the values, gradients and laplacians of this single-particle orbital set ...
void evaluateValue(const ParticleSet &P, const int iat, ValueVector &psi) override
evaluate the values of this single-particle orbital set
A ParticleSet that handles virtual moves of a selected particle of a given physical ParticleSet Virtu...
Soa Container for D-dim vectors.
typename bspline_traits< ST, 3 >::BCType BCType
OrbitalSetTraits< ValueType >::ValueMatrix ValueMatrix
Tensor< ST, 3 > GGt
, transformation for tensor in LatticeUnit to CartesianUnit, e.g. Hessian
bool isRotationSupported() const override
return true if this SPOSet can be wrappered by RotatedSPO
VectorSoaContainer< ST, 3 > myKcart
OrbitalSetTraits< ValueType >::ValueVector ValueVector
vContainer_type myV
intermediate result vectors
int size() const
return the number of tasks
bool write_splines(hdf_archive &h5f)
void FairDivideLow(int ntot, int npart, IV &adist)
partition ntot elements among npart
void assign_vgl_from_l(const PointType &r, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi)
assign_vgl_from_l can be used when myL is precomputed and myV,myG,myL in cartesian ...
void resizeStorage(size_t n, size_t nvals)
Wrapping information on parallelism.
void create_spline(GT &xyz_g, BCT &xyz_bc)
Each SplineC2X needs a reader derived from BsplineReader.
Specialized paritlce class for atomistic simulations.
General SplineSetReader to handle any unitcell.
TinyVector< ST, 3 > PointType
std::vector< int > offset
band offsets used for communication
A collection of functions for dividing fairly.
size_type size() const
return the current size
QTBase::ValueType ValueType
void assign_vgh(const PointType &r, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, int first, int last) const
std::shared_ptr< MultiBspline< ST > > SplineInst
multi bspline set
Matrix< ComplexT > ratios_private
thread private ratios for reduction when using nested threading, numVP x numThread ...
OrbitalSetTraits< ValueType >::ValueVector ValueVector
typename BsplineSet::ValueType ComplexT
void assign_v(const PointType &r, const vContainer_type &myV, ValueVector &psi, int first, int last) const
BsplineSet is a SPOSet derived class and serves as a base class for B-spline SPO C2C/C2R/R2R implemen...
bool read_splines(hdf_archive &h5f)
bool isComplex() const override
std::unique_ptr< SPOSet > makeClone() const override
make a clone of itself every derived class must implement this to have threading working correctly...
void evaluateVGH(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi) override
evaluate the values, gradients and hessians of this single-particle orbital set
void evaluateDetRatios(const VirtualParticleSet &VP, ValueVector &psi, const ValueVector &psiinv, std::vector< ValueType > &ratios) override
evaluate determinant ratios for virtual moves, e.g., sphere move for nonlocalPP
std::shared_ptr< std::vector< ST > > coef_copy_
Copy of original splines for orbital rotation.
OrbitalSetTraits< ValueType >::GradHessVector GGGVector
CrystalLattice< ST, 3 > PrimLattice
primitive cell
OrbitalSetTraits< ValueType >::GradVector GradVector
void evaluateVGHGH(const ParticleSet &P, const int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, GGGVector &grad_grad_grad_psi) override
evaluate the values, gradients, hessians, and grad hessians of this single-particle orbital set ...
SplineC2C(const std::string &my_name)
void assign_vgl(const PointType &r, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi, int first, int last) const
assign_vgl
void applyRotation(const ValueMatrix &rot_mat, bool use_stored_copy) override
apply rotation to all the orbitals
Tensor< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > dot(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs)
void gather_tables(Communicate *comm)
void resize(size_type n)
resize myData
void bcast_tables(Communicate *comm)
void gatherv(T *sb, T *rb, int n, IT &counts, IT &displ, int dest)
virtual std::string getClassName() const override
return class name
class to match std::complex<ST> spline with BsplineSet::ValueType (complex) SPOs
void assign_vghgh(const PointType &r, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, GGGVector &grad_grad_grad_psi, int first=0, int last=-1) const
void resize_kpoints()
remap kPoints to pack the double copy
std::vector< SPOSet::PosType > kPoints
kpoints for each unique orbitals.
Vector< ST, aligned_allocator< ST > > vContainer_type