33 std::unique_ptr<Resource>
makeClone()
const override 35 return std::make_unique<CoulombPBCAAMultiWalkerResource>(*this);
52 ComputeForces(computeForces),
55 use_offload_(active && !computeForces && use_offload),
99 app_log() <<
"Checking ion-ion Ewald energy against reference..." << std::endl;
102 std::ostringstream msg;
103 msg << std::setprecision(14);
104 msg <<
"in ion-ion Ewald energy exceeds " <<
Ps.
getLattice().LR_tol <<
" Ha/atom tolerance." << std::endl;
106 msg <<
" Reference ion-ion energy: " << Vii_ref << std::endl;
107 msg <<
" QMCPACK ion-ion energy: " <<
value_ << std::endl;
108 msg <<
" ion-ion diff : " <<
value_ - Vii_ref << std::endl;
110 msg <<
" tolerance : " <<
Ps.
getLattice().LR_tol << std::endl;
112 msg <<
"Please try increasing the LR_dim_cutoff parameter in the <simulationcell/>" << std::endl;
113 msg <<
"input. Alternatively, the tolerance can be increased by setting the" << std::endl;
114 msg <<
"LR_tol parameter in <simulationcell/> to a value greater than " <<
Ps.
getLattice().LR_tol <<
". " 116 msg <<
"If you increase the tolerance, please perform careful checks of energy" << std::endl;
117 msg <<
"differences to ensure this error is controlled for your application." << std::endl;
124 app_log() <<
" Check passed." << std::endl;
128 app_log() <<
" Maximum K shell " <<
AA->MaxKshell << std::endl;
129 app_log() <<
" Number of k vectors " <<
AA->Fk.size() << std::endl;
132 <<
"\n Vtot =" <<
value_ << std::endl;
166 AA->resetTargetParticleSet(P);
171 #if !defined(REMOVE_TRACEMANAGER) 205 #if !defined(REMOVE_TRACEMANAGER) 223 if (!o_leader.is_active)
228 if (o_leader.streaming_particles_)
229 throw std::runtime_error(
"Streaming particles is not supported when offloading in CoulombPBCAA");
233 for (
int iw = 0; iw < o_list.size(); iw++)
236 coulomb_aa.
value_ = coulomb_aa.evalLR(p_list[iw]) + short_range_results[iw] +
myConst;
253 if (!o_leader.is_active)
256 auto num_centers = p_leader.getTotalNum();
257 auto name(o_leader.getName());
258 Vector<RealType>& v_sample = o_leader.mw_res_handle_.getResource().v_sample;
259 const auto& pp_consts = o_leader.mw_res_handle_.getResource().pp_consts;
260 auto num_species = p_leader.getSpeciesSet().getTotalNum();
261 v_sample.resize(num_centers);
263 auto evaluate_walker = [num_species, num_centers, name, &v_sample,
265 const std::vector<ListenerVector<RealType>>& listeners) ->
RealType {
269 std::fill(v_sample.begin(), v_sample.end(), 0.0);
272 const auto& d_aa(
pset.getDistTableAA(cpbcaa.d_aa_ID));
274 for (
int ipart = 1; ipart < num_centers; ipart++)
276 z = .5 * cpbcaa.Zat[ipart];
277 const auto& dist = d_aa.getDistRow(ipart);
278 for (
int jpart = 0; jpart < ipart; ++jpart)
280 RealType pairpot = z * cpbcaa.Zat[jpart] * cpbcaa.rVs->splint(dist[jpart]) / dist[jpart];
281 v_sample[ipart] += pairpot;
282 v_sample[jpart] += pairpot;
293 APP_ABORT(
"CoulombPBCAA::evaluate_sp single particle traces have not been implemented for slab geometry");
297 assert(PtclRhoK.isStorePerParticle());
301 for (
int i = 0; i < num_centers; i++)
303 z = .5 * cpbcaa.Zat[i];
305 for (
int s = 0;
s < num_species; ++
s)
306 v1 += z * cpbcaa.Zspec[
s] *
307 cpbcaa.AA->evaluate(
pset.getSimulationCell().getKLists().kshell, PtclRhoK.rhok_r[
s], PtclRhoK.rhok_i[
s],
308 PtclRhoK.eikr_r[i], PtclRhoK.eikr_i[i]);
314 for (
int i = 0; i < v_sample.size(); ++i)
315 v_sample[i] += pp_consts[i];
319 listener.report(walker_index, name, v_sample);
323 for (
int iw = 0; iw < o_list.size(); iw++)
326 coulomb_aa.
value_ = evaluate_walker(iw, coulomb_aa, p_list[iw], listeners);
342 #if !defined(REMOVE_TRACEMANAGER) 354 for (
int ipart = 1; ipart <
NumCenters; ipart++)
357 const auto& dist = d_aa.getDistRow(ipart);
358 for (
int jpart = 0; jpart < ipart; ++jpart)
360 RealType pairpot = z *
Zat[jpart] *
rVs->splint(dist[jpart]) / dist[jpart];
361 V_samp(ipart) += pairpot;
362 V_samp(jpart) += pairpot;
373 APP_ABORT(
"CoulombPBCAA::evaluate_sp single particle traces have not been implemented for slab geometry");
377 assert(PtclRhoK.isStorePerParticle());
388 PtclRhoK.eikr_r[i], PtclRhoK.eikr_i[i]);
394 for (
int i = 0; i < V_samp.
size(); ++i)
397 #if defined(TRACE_CHECK) 401 RealType Vnow = Vlrnow + Vsrnow + Vcnow;
406 app_log() <<
"accumtest: CoulombPBCAA::evaluate()" << std::endl;
407 app_log() <<
"accumtest: tot:" << Vnow << std::endl;
408 app_log() <<
"accumtest: sum:" << Vsum << std::endl;
413 app_log() <<
"accumtest: CoulombPBCAA::evalConsts()" << std::endl;
414 app_log() <<
"accumtest: tot:" << Vcnow << std::endl;
415 app_log() <<
"accumtest: sum:" << Vcsum << std::endl;
432 #if !defined(REMOVE_TRACEMANAGER) 452 Zat_ref[iat] =
Zat[iat];
462 int ng = P.
getLattice().num_ewald_grid_points;
463 app_log() <<
" CoulombPBCAA::initBreakup\n Setting a linear grid=[0," 464 <<
myRcut <<
") number of grid points =" << ng << std::endl;
470 rVs_offload = std::make_shared<const OffloadSpline>(*rVs);
486 std::vector<TinyVector<RealType, DIM>> grad(P.
getTotalNum());
487 for (
int spec2 = 0; spec2 <
NumSpecies; spec2++)
490 for (
int iat = 0; iat < grad.size(); iat++)
493 dAA->evaluateGrad(P, P, spec2,
Zat, grad);
494 for (
int iat = 0; iat < grad.size(); iat++)
495 forces_[iat] += Z2 * grad[iat];
505 for (
size_t ipart = 1; ipart < (
NumCenters / 2 + 1); ipart++)
508 const auto& dist = d_aa.getDistRow(ipart);
509 const auto& dr = d_aa.getDisplRow(ipart);
510 for (
size_t j = 0; j < ipart; ++j)
514 rV =
rVsforce->splint(dist[j], d_rV_dr, d2_rV_dr2);
516 esum +=
Zat[j] *
rVs->splint(dist[j]) * rinv;
518 PosType grad =
Zat[j] *
Zat[ipart] * (d_rV_dr - V) * rinv * rinv * dr[j];
522 SR +=
Zat[ipart] * esum;
524 const size_t ipart_reverse =
NumCenters - ipart;
525 if (ipart == ipart_reverse)
529 const auto& dist2 = d_aa.getDistRow(ipart_reverse);
530 const auto& dr2 = d_aa.getDisplRow(ipart_reverse);
531 for (
size_t j = 0; j < ipart_reverse; ++j)
535 rV =
rVsforce->splint(dist2[j], d_rV_dr, d2_rV_dr2);
537 esum +=
Zat[j] *
rVs->splint(dist2[j]) * rinv;
539 PosType grad =
Zat[j] *
Zat[ipart_reverse] * (d_rV_dr - V) * rinv * rinv * dr2[j];
540 forces_[ipart_reverse] += grad;
543 SR +=
Zat[ipart_reverse] * esum;
569 for (
int ispec = 1; ispec <
NumSpecies; ispec++)
571 throw std::runtime_error(
"quasi2d assumes same charge");
574 app_log() <<
" vlr(r->0) = " << vl_r0 << std::endl;
575 app_log() <<
" 1/V vsr_k0 = " << vs_k0 << std::endl;
579 mRealType rvsr_at_image = Rws *
AA->evaluate(Rws, 1.0 / Rws);
580 if (rvsr_at_image > 1
e-6)
582 std::ostringstream msg;
583 msg << std::setprecision(14);
584 msg <<
"Ewald alpha = " << rvsr_at_image <<
" is too small" << std::endl;
585 msg <<
"Short-range potential r*vsr(r) = " << rvsr_at_image <<
" at image radius r=" << Rws << std::endl;
586 throw std::runtime_error(msg.str());
589 const StructFact& PtclRhoK(
Ps.
getSK());
590 v1 =
AA->evaluate_slab(0,
Ps.
getSimulationCell().getKLists().kshell, PtclRhoK.eikr_r[0], PtclRhoK.eikr_i[0],
591 PtclRhoK.eikr_r[0], PtclRhoK.eikr_i[0]);
593 app_log() <<
" LR Madelung = " << v1 << std::endl;
599 #if !defined(REMOVE_TRACEMANAGER) 602 for (
int ipart = 0; ipart <
NumCenters; ipart++)
604 v1 = -.5 *
Zat[ipart] *
Zat[ipart] * vl_r0;
605 #if !defined(REMOVE_TRACEMANAGER) 611 app_log() <<
" PBCAA self-interaction term " << Consts << std::endl;
614 for (
int i = 0; i <
AA->Fk.size(); i++)
617 for (
int ipart = 0; ipart <
NumCenters; ipart++)
622 v1 *= -.5 *
Zat[ipart] * vs_k0;
623 #if !defined(REMOVE_TRACEMANAGER) 629 app_log() <<
" PBCAA total constant " << Consts << std::endl;
638 const auto& d_aa(P.getDistTableAA(
d_aa_ID));
640 #pragma omp parallel for reduction(+ : SR) 641 for (
size_t ipart = 1; ipart < (
NumCenters / 2 + 1); ipart++)
644 const auto& dist = d_aa.getDistRow(ipart);
645 for (
size_t j = 0; j < ipart; ++j)
646 esum +=
Zat[j] *
rVs->splint(dist[j]) / dist[j];
647 SR +=
Zat[ipart] * esum;
649 const size_t ipart_reverse =
NumCenters - ipart;
650 if (ipart == ipart_reverse)
654 const auto& dist2 = d_aa.getDistRow(ipart_reverse);
655 for (
size_t j = 0; j < ipart_reverse; ++j)
656 esum +=
Zat[j] *
rVs->splint(dist2[j]) / dist2[j];
657 SR +=
Zat[ipart_reverse] * esum;
663 const RefVectorWithLeader<ParticleSet>& p_list)
665 const size_t nw = o_list.size();
666 auto& p_leader = p_list.getLeader();
667 auto& caa_leader = o_list.getCastedLeader<
CoulombPBCAA>();
670 RefVectorWithLeader<DistanceTable> dt_list(p_leader.getDistTable(caa_leader.d_aa_ID));
671 dt_list.reserve(p_list.size());
672 for (ParticleSet& p : p_list)
673 dt_list.push_back(p.getDistTable(caa_leader.d_aa_ID));
675 auto& dtaa_leader =
dynamic_cast<DistanceTableAA&
>(p_leader.getDistTable(caa_leader.d_aa_ID));
677 const size_t chunk_size = dtaa_leader.get_num_particls_stored();
679 throw std::runtime_error(
"bug dtaa_leader.get_num_particls_stored() == 0");
681 auto& values_offload = caa_leader.mw_res_handle_.getResource().values_offload;
682 const size_t total_num = p_leader.getTotalNum();
683 const size_t total_num_half = (total_num + 1) / 2;
684 const size_t num_padded = getAlignedSize<RealType>(total_num);
685 const size_t num_chunks = (total_num_half + chunk_size - 1) / chunk_size;
687 const auto m_Y = caa_leader.rVs_offload->get_m_Y().data();
688 const auto m_Y2 = caa_leader.rVs_offload->get_m_Y2().data();
689 const auto first_deriv = caa_leader.rVs_offload->get_first_deriv();
690 const auto const_value = caa_leader.rVs_offload->get_const_value();
691 const auto r_min = caa_leader.rVs_offload->get_r_min();
692 const auto r_max = caa_leader.rVs_offload->get_r_max();
693 const auto X = caa_leader.rVs_offload->get_X().data();
694 const auto delta_inv = caa_leader.rVs_offload->get_delta_inv();
695 const auto Zat = caa_leader.Zat_offload->data();
698 values_offload.resize(nw);
700 auto value_ptr = values_offload.data();
701 values_offload.updateTo();
702 for (
size_t ichunk = 0; ichunk < num_chunks; ichunk++)
704 const size_t first = ichunk * chunk_size;
705 const size_t last =
std::min(first + chunk_size, total_num_half);
706 const size_t this_chunk_size = last - first;
708 auto* mw_dist = dtaa_leader.mw_evalDistsInRange(dt_list, p_list, first, last);
710 ScopedTimer offload_scope(caa_leader.offload_timer_);
712 PRAGMA_OFFLOAD(
"omp target teams distribute num_teams(nw)")
713 for (uint32_t iw = 0; iw < nw; iw++)
716 PRAGMA_OFFLOAD(
"omp parallel for reduction(+ : SR)")
717 for (uint32_t jcol = 0; jcol < total_num; jcol++)
718 for (uint32_t irow = first; irow < last; irow++)
720 const RealType dist = mw_dist[num_padded * (irow - first + iw * this_chunk_size) + jcol];
721 if (irow == jcol || (irow * 2 + 1 == total_num && jcol > irow))
724 const size_t i = irow > jcol ? irow : total_num - 1 - irow;
725 const size_t j = irow > jcol ? jcol : total_num - 1 - jcol;
734 values_offload.updateFrom();
736 std::vector<Return_t> values(nw);
737 for (
int iw = 0; iw < nw; iw++)
738 values[iw] = values_offload[iw];
746 const StructFact& PtclRhoK(P.getSK());
749 const auto& d_aa(P.getDistTableAA(
d_aa_ID));
756 const auto& dr = d_aa.getDisplRow(iat);
757 for (
int jat = 0; jat < iat; ++jat)
761 AA->evaluate_slab(z, P.getSimulationCell().getKLists().kshell, PtclRhoK.eikr_r[iat], PtclRhoK.eikr_i[iat],
762 PtclRhoK.eikr_r[jat], PtclRhoK.eikr_i[jat]);
769 for (
int spec1 = 0; spec1 <
NumSpecies; spec1++)
772 for (
int spec2 = spec1; spec2 <
NumSpecies; spec2++)
774 mRealType temp =
AA->evaluate(P.getSimulationCell().getKLists().kshell, PtclRhoK.rhok_r[spec1],
775 PtclRhoK.rhok_i[spec1], PtclRhoK.rhok_r[spec2], PtclRhoK.rhok_i[spec2]);
778 res += Z1 *
Zspec[spec2] * temp;
792 throw std::runtime_error(
"Batched per particle eval is not supported for quasi2d");
796 for (
int ipart = 0; ipart <
NumCenters; ipart++)
798 v1 = -.5 *
Zat[ipart] *
Zat[ipart] * vl_r0;
799 pp_consts[ipart] += v1;
801 for (
int ipart = 0; ipart <
NumCenters; ipart++)
806 v1 *= -.5 *
Zat[ipart] * vs_k0;
807 pp_consts[ipart] += v1;
814 auto new_res = std::make_unique<CoulombPBCAAMultiWalkerResource>();
817 auto resource_index = collection.addResource(std::move(new_res));
821 const RefVectorWithLeader<OperatorBase>& o_list)
const 823 auto& o_leader = o_list.getCastedLeader<
CoulombPBCAA>();
824 o_leader.mw_res_handle_ = collection.lendResource<CoulombPBCAAMultiWalkerResource>();
828 const RefVectorWithLeader<OperatorBase>& o_list)
const 830 auto& o_leader = o_list.getCastedLeader<
CoulombPBCAA>();
831 collection.takebackResource(o_leader.mw_res_handle_);
836 return std::make_unique<CoulombPBCAA>(*this);
bool hasListener() const noexcept
virtual void mw_evaluate(const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list) const
Evaluate the contribution of this component of multiple walkers.
void twoBodyQuantumDomain(const ParticleSet &P)
set quantum domain for two-body operator
bool streaming_particles_
static std::unique_ptr< LRHandlerType > getDerivHandler(ParticleSet &ref)
This returns a force/stress optimized LR handler. If non existent, it creates one.
void resetTargetParticleSet(ParticleSet &P) override
Reset the data with the target ParticleSet.
Vector< RealType > v_sample
a walkers worth of per particle coulomb AA potential values
const std::string & getName() const
return the name
Calculates the AA Coulomb potential using PBCs.
Return_t evaluateWithIonDerivs(ParticleSet &P, ParticleSet &ions, TrialWaveFunction &psi, ParticleSet::ParticlePos &hf_terms, ParticleSet::ParticlePos &pulay_terms) override
Evaluate contribution to local energy and derivatives w.r.t ionic coordinates from OperatorBase...
const bool use_offload_
if true use offload
void set(T ri, T rf, int n) override
Set the grid given the parameters.
helper functions for EinsplineSetBuilder
const DistanceTableAA & getDistTableAA(int table_ID) const
get a distance table by table_ID and dyanmic_cast to DistanceTableAA
std::shared_ptr< Vector< RealType, OffloadPinnedAllocator< RealType > > > Zat_offload
const int d_aa_ID
AA table ID.
Vector< CoulombPBCAA::Return_t, OffloadPinnedAllocator< CoulombPBCAA::Return_t > > values_offload
bool streaming_array(const std::string &name)
NewTimer & evalLR_timer_
Timer for long range.
static std::unique_ptr< RadFunctorType > createSpline4RbyVs(const LRHandlerType *aLR, mRealType rcut, const GridType &agrid)
create a linear spline function
ParticleSet::ParticlePos forces_
MakeReturn< UnaryNode< FnFabs, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t abs(const Vector< T1, C1 > &l)
size_t getTotalNum() const
void fill_n(T *x, size_t count, const T &value)
Array< TraceReal, 1 > V_const
void acquireResource(ResourceCollection &collection, const RefVectorWithLeader< OperatorBase > &o_list) const override
acquire a shared resource from a collection
void releaseResource(ResourceCollection &collection, const RefVectorWithLeader< OperatorBase > &o_list) const override
return a shared resource to a collection
EwaldHandler3D::mRealType mRealType
NewTimer & evalSR_timer_
Timer for long range.
std::shared_ptr< const RadFunctorType > rVs
energy-optimized short range pair potential
std::vector< real_t > ChargeArray
Type for lists of particle charges.
Computes Ewald sums of the potential energy to a given tolerance for arbitrary collections of charges...
Return_t evalSR(ParticleSet &P)
void updateSource(ParticleSet &s) override
Update data associated with a particleset.
void addObservablesF(QMCTraits::PropertySetType &plist)
An object of this type is a listener expecting a callback to the report function with a vector of val...
ScopeGuard< NewTimer > ScopedTimer
Vectorized record engine for scalar properties.
std::vector< int > SpeciesID
real_t ewaldEnergy(const RealMat &a, const PosArray &R, const ChargeArray &Q, real_t tol)
Compute the total Ewald potential energy for a collection of charges.
LRHandlerType::mRealType mRealType
Return_t evalLR(ParticleSet &P)
std::shared_ptr< const LRHandlerType > dAA
force-optimized long range handle
bool ComputeForces
Flag for whether to compute forces or not.
void update(bool skipSK=false)
update the internal data
Attaches a unit to a Vector for IO.
Calculates the structure-factor for a particle set.
void resize(const std::array< SIZET, D > &dims)
Resize the container.
std::shared_ptr< const RadFunctorType > rVsforce
force-optimized short range pair potential
std::vector< RealVec > PosArray
Type for lists of particle positions.
TraceRequest request_
whether traces are being collected
ParticleIndex GroupID
Species ID.
Return_t evalSRwithForces(ParticleSet &P)
for(int i=0;i< size_test;++i) CHECK(Approx(gauss_random_vals[offset_for_rs+i])
void turnOnPerParticleSK()
Turn on per particle storage in Structure Factor.
const auto & getSimulationCell() const
std::string name_
name of this object
Specialized paritlce class for atomistic simulations.
DynamicCoordinateKind getKind() const
RealType myRcut
cutoff radius of the short-range part
std::shared_ptr< const OffloadSpline > rVs_offload
the same as rVs but can be used inside OpenMP offload regions
Return_t new_value_
a new value for a proposed move
void createResource(ResourceCollection &collection) const override
initialize a shared resource and hand it to a collection
Tensor<T,D> class for D by D tensor.
Final class and should not be derived.
void mw_evaluate(const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list) const override
Evaluate the contribution of this component of multiple walkers.
RealType madelung_constant_
This a subclass for runtime errors that will occur on all ranks.
declaration of ProgressReportEngine
void initBreakup(ParticleSet &P)
constructor code factored out
Return_t evalConsts(bool report=true)
CASTTYPE & getCastedElement(size_t i) const
NewTimer & createGlobalTimer(const std::string &myname, timer_levels mylevel)
int groupsize(int igroup) const
return the size of a group
std::unique_ptr< Resource > makeClone() const override
T splint(T r) const
compute the function value at r
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
void checkoutParticleQuantities(TraceManager &tm) override
void setEnergyDomain(EnergyDomains edomain)
Set the Energy Domain.
const StructFact & getSK() const
return Structure Factor
void addValue(PropertySetType &plist)
named values to the property list
auto & getDistTable(int table_ID) const
get a distance table by table_ID
const bool quasi2d
Flag for whether to use quasi-2D Ewald.
Vector< RealType > pp_consts
constant values per particle for coulomb AA potential
SpeciesSet & getSpeciesSet()
retrun the SpeciesSet of this particle set
Array< TraceReal, D > * checkout_real(const std::string &name, int n1=1, int n2=0, int n3=0, int n4=0)
FullPrecRealType Return_t
type of return value of evaluate
const DynamicCoordinates & getCoordinates() const
QMCTraits::RealType RealType
CASTTYPE & getCastedLeader() const
std::shared_ptr< LRHandlerType > AA
energy-optimized long range handle. Should be const LRHandlerType eventually
Class to represent a many-body trial wave function.
void addObservables(PropertySetType &plist, BufferType &collectables) override
named values to the property list Default implementaton uses addValue(plist_)
Return_t value_
current value
std::vector< RealType > Zspec
std::vector< RealType > Zat
static std::unique_ptr< LRHandlerType > getHandler(ParticleSet &ref)
This returns an energy optimized LR handler. If non existent, it creates one.
void contribute_array(const std::string &name, bool default_quantity=false)
Array< TraceReal, 1 > * V_sample
virtual void informOfPerParticleListener()
const auto & getLattice() const
static std::vector< Return_t > mw_evalSR_offload(const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< ParticleSet > &p_list)
Custom container for set of attributes for a set of species.
void mw_evaluatePerParticle(const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, const std::vector< ListenerVector< RealType >> &listeners, const std::vector< ListenerVector< RealType >> &ion_listeners) const override
Evaluate the contribution of this component of multiple walkers per particle reporting to registered ...
void contributeParticleQuantities() override
Return_t evalLRwithForces(ParticleSet &P)
CoulombPBCAAMultiWalkerResource()
void informOfPerParticleListener() override
Inform objects associated with this operator of per particle listeners.
whether full table needs to be ready at anytime or not after donePbyP Optimization can be implemented...
std::vector< int > NofSpecies
Return_t evaluate_sp(ParticleSet &P)
CoulombPBCAA(ParticleSet &ref, bool active, bool computeForces, bool use_offload)
constructor
Return_t evaluate(ParticleSet &P) override
Evaluate the local energy contribution of this component.
std::unique_ptr< OperatorBase > makeClone(ParticleSet &qp, TrialWaveFunction &psi) override
void evalPerParticleConsts(Vector< RealType > &pp_consts) const
Compute the const part of the per particle coulomb self interaction potential.
void deleteParticleQuantities() override