32 #
if !defined(REMOVE_TRACEMANAGER)
33 streaming_particles_(false),
34 have_required_traces_(false),
35 streaming_scalars_(false),
37 quantum_domain_(NO_QUANTUM_DOMAIN),
38 energy_domain_(NO_ENERGY_DOMAIN)
51 #if !defined(REMOVE_TRACEMANAGER) 65 auto&
oh = h5desc.back();
66 std::vector<int> onedim(1, 1);
110 #pragma omp parallel for 111 for (
int iw = 0; iw < o_list.size(); iw++)
132 for (
int iw = 0; iw < o_list.size(); iw++)
134 const Vector<ValueType> dlogpsi_record_view(const_cast<ValueType*>(dlogpsi[iw]), nparam);
137 o_list[iw].evaluateValueAndDerivatives(p_list[iw], optvars, dlogpsi_record_view, dhpsioverpsi_record_view);
175 "::evaluateValueAndDerivatives" 176 "must be overloaded when the OperatorBase depends on a wavefunction.");
217 std::unique_ptr<OperatorBase> myclone =
makeClone(qp, psi);
224 #if !defined(REMOVE_TRACEMANAGER) 246 #if !defined(REMOVE_TRACEMANAGER) 274 #if !defined(REMOVE_TRACEMANAGER) 287 (*value_sample_)(0) =
value_;
308 APP_ABORT(
"QMCHamiltonainBase::setEnergyDomain\n input energy domain is invalid");
316 APP_ABORT(
"QMCHamiltonainBase::setQuantumDomain\n input quantum domain is invalid");
326 APP_ABORT(
"OperatorBase::oneBodyQuantumDomain\n quantum domain of input particles is invalid");
336 APP_ABORT(
"OperatorBase::twoBodyQuantumDomain(P)\n quantum domain of input particles is invalid");
347 else if ((q1 && c2) || (c1 && q2))
352 APP_ABORT(
"OperatorBase::twoBodyQuantumDomain(P1,P2)\n quantum domain of input particles is invalid");
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.
virtual std::unique_ptr< OperatorBase > makeClone(ParticleSet &qp, TrialWaveFunction &psi)=0
void twoBodyQuantumDomain(const ParticleSet &P)
set quantum domain for two-body operator
bool streaming_particles_
virtual void contributeScalarQuantities()
virtual void releaseResource(ResourceCollection &collection, const RefVectorWithLeader< OperatorBase > &o_list) const
Return a shared resource to a collection.
virtual void registerObservables(std::vector< ObservableHelper > &h5desc, hdf_archive &file) const
add to observable descriptor for hdf5 The default implementation is to register a scalar for this->va...
helper functions for EinsplineSetBuilder
virtual void acquireResource(ResourceCollection &collection, const RefVectorWithLeader< OperatorBase > &o_list) const
Acquire a shared resource from a collection.
virtual void mw_evaluateWithParameterDerivatives(const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< ParticleSet > &p_list, const opt_variables_type &optvars, const RecordArray< ValueType > &dlogpsi, RecordArray< ValueType > &dhpsioverpsi) const
TODO: add docs.
bool isQuantumClassical() const noexcept
void addOperator(std::unique_ptr< OperatorBase > &&h, const std::string &aname, bool physical=true)
add an operator
void collectScalarTraces()
Collect scalar trace data.
int my_index_
starting index of this object
virtual Return_t rejectedMove(ParticleSet &P)
TODO: add docs.
Declaration of OperatorBase.
virtual void add2Hamiltonian(ParticleSet &qp, TrialWaveFunction &psi, QMCHamiltonian &targetH)
TODO: add docs.
Collection of Local Energy Operators.
An object of this type is a listener expecting a callback to the report function with a vector of val...
bool energyDomainValid(EnergyDomains edomain) const noexcept
return whether the energy domain is valid
bool streaming_scalar(const std::string &name)
Vectorized record engine for scalar properties.
virtual void getRequiredTraces(TraceManager &tm)
TODO: add docs.
virtual void collectScalarQuantities()
bool is_classical() const
Attaches a unit to a Vector for IO.
int getNumOfParams() const
virtual void createResource(ResourceCollection &collection) const
Initialize a shared resource and hand it to a collection.
virtual Return_t evaluateValueAndDerivatives(ParticleSet &P, const opt_variables_type &optvars, const Vector< ValueType > &dlogpsi, Vector< ValueType > &dhpsioverpsi)
Evaluate value and derivatives wrt the optimizables.
TraceRequest request_
whether traces are being collected
virtual void setRandomGenerator(RandomBase< FullPrecRealType > *rng)
Set the Random Generator object TODO: add docs.
OperatorBase()
Construct a new Operator Base object Default and unique empty constructor.
virtual void deleteParticleQuantities()
std::string name_
name of this object
std::bitset< 8 > & getUpdateMode() noexcept
get update_mode_ reference
Specialized paritlce class for atomistic simulations.
TraceRequest & getRequest() noexcept
Get request_ member.
Array< RealType, 1 > * value_sample_
array to store sample value
virtual void addObservables(PropertySetType &plist, BufferType &collectables)
named values to the property list Default implementaton uses addValue(plist_)
virtual void mw_evaluatePerParticleWithToperator(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 >> &listeners_ions) const
Evaluate the contribution of this component of multiple walkers per particle and report to registerd ...
bool isNonLocal() const noexcept
TODO: add docs.
EnergyDomains
enum to denote energy domain of operators
int add(const std::string &aname)
virtual void contributeParticleQuantities()
virtual 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 >> &listeners_ions) const
Evaluate the contribution of this component of multiple walkers per particle and report to registerd ...
void contribute_scalar(const std::string &name, bool default_quantity=false)
bool has_listener_
Is there a per particle listener sadly this is necessary due to state machines.
bool quantumDomainValid(QuantumDomains qdomain) const noexcept
return whether the quantum domain is valid
void oneBodyQuantumDomain(const ParticleSet &P)
set quantum domain for one-body operator
bool isQuantum() const noexcept
class to handle a set of variables that can be modified during optimizations
bool isClassicalClassical() const noexcept
virtual Return_t evaluateWithIonDerivsDeterministic(ParticleSet &P, ParticleSet &ions, TrialWaveFunction &psi, ParticleSet::ParticlePos &hf_term, ParticleSet::ParticlePos &pulay_term)
Evaluate contribution to local energy and derivatives w.r.t ionic coordinates from OperatorBase...
virtual Return_t evaluateWithIonDerivs(ParticleSet &P, ParticleSet &ions, TrialWaveFunction &psi, ParticleSet::ParticlePos &hf_term, ParticleSet::ParticlePos &pulay_term)
Evaluate contribution to local energy and derivatives w.r.t ionic coordinates from OperatorBase...
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
void setEnergyDomain(EnergyDomains edomain)
Set the Energy Domain.
void setName(const std::string name) noexcept
Set my_name member, uses small string optimization (pass by value)
bool getMode(const int i) const noexcept
Return the mode i.
Walker_t * t_walker_
reference to the current walker
virtual void setHistories(Walker_t &ThisWalker)
void addValue(PropertySetType &plist)
named values to the property list
Return_t getValue() const noexcept
get a copy of value_
Array< TraceReal, D > * checkout_real(const std::string &name, int n1=1, int n2=0, int n3=0, int n4=0)
virtual Return_t getEnsembleAverage()
Return an average value by collective operation.
virtual void updateSource(ParticleSet &s)
Update data associated with a particleset.
bool have_required_traces_
FullPrecRealType Return_t
type of return value of evaluate
void checkoutTraceQuantities(TraceManager &tm)
Checkout trace arrays Derived classes must guard individual checkouts using request info...
virtual void setParticlePropertyList(PropertySetType &plist, int offset)
Class to represent a many-body trial wave function.
bool isQuantumQuantum() const noexcept
void set_dimensions(const std::vector< int > &dims, int first)
set the shape of this observable
Return_t value_
current value
virtual Return_t evaluateWithToperator(ParticleSet &P)
Evaluate the local energy contribution of this component with Toperators updated if requested...
std::string getName() const noexcept
getter a copy of my_name_, rvalue small string optimization
virtual void mw_evaluateWithToperator(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.
virtual Return_t evaluate(ParticleSet &P)=0
Evaluate the local energy contribution of this component.
virtual Return_t evaluateDeterministic(ParticleSet &P)
Evaluate the local energy contribution of this component, deterministically based on current state...
bool isClassical() const noexcept
virtual void setObservables(PropertySetType &plist)
Set the values evaluated by this object to plist Default implementation is to assign Value which is u...
void deleteTraceQuantities()
delete trace arrays
virtual bool dependsOnWaveFunction() const
return true if this operator depends on a wavefunction
QuantumDomains quantum_domain_
quantum_domain_ of the (particle) operator, default = no_quantum_domain
virtual void setComputeForces(bool compute)
virtual void checkoutParticleQuantities(TraceManager &tm)
virtual std::string getClassName() const =0
return class name
A container class to represent a walker.
virtual void deleteScalarQuantities()
EnergyDomains energy_domain_
energy domain of the operator (kinetic/potential), default = no_energy_domain
void contributeTraceQuantities()
Make trace quantities available.
void setQuantumDomain(QuantumDomains qdomain)
set quantum domain
std::bitset< 8 > update_mode_
set the current update mode
Declaration of QMCHamiltonian.
virtual void checkoutScalarQuantities(TraceManager &tm)
virtual void registerCollectables(std::vector< ObservableHelper > &h5desc, hdf_archive &file) const