26 #ifndef QMCPLUSPLUS_QMCDRIVERNEW_H 27 #define QMCPLUSPLUS_QMCDRIVERNEW_H 29 #include <type_traits> 55 class EstimatorManagerNew;
56 class TrialWaveFunction;
63 class QMCDriverNewTestWrapper;
138 const std::optional<EstimatorManagerInput>& global_emi,
141 const std::string timer_prefix,
143 const std::string& QMC_driver_type);
178 bool finalize(
int block,
bool dumpwalkers =
true);
193 void setStatus(
const std::string& aname,
const std::string& h5name,
bool append)
override;
199 void putWalkers(std::vector<xmlNodePtr>& wset)
override;
204 for (
int i = 0; i <
Rng.size(); ++i)
205 RngRefs.push_back(*
Rng[i]);
228 bool put(xmlNodePtr cur)
override {
return false; };
238 void process(xmlNodePtr cur)
override = 0;
256 template<
typename RT, CoordsType CT>
259 for (
auto& pos : coords.positions)
262 for (
auto& spin : coords.spins)
263 spin *= taus.spin_sqrttau;
269 template<
typename RT, CoordsType CT>
272 std::vector<QMCTraits::RealType>& log_gb)
274 assert(coords.positions.size() == log_gb.size());
275 std::transform(coords.positions.begin(), coords.positions.end(), log_gb.begin(),
277 return -halfovertau *
dot(pos, pos);
280 std::transform(coords.spins.begin(), coords.spins.end(), log_gb.begin(), log_gb.begin(),
283 return loggb - halfovertau * spin * spin;
309 const IndexType requested_walkers_per_rank,
446 std::unique_ptr<HDFWalkerOutput>
wOut;
IndexType target_samples_
the number of saved samples
size_t steps_per_block_
actual number of steps per block
NewTimer & imbalance_timer
QMCDriverNew(const ProjectData &project_data, QMCDriverInput &&input, const std::optional< EstimatorManagerInput > &global_emi, WalkerConfigurations &wc, MCPopulation &&population, const std::string timer_prefix, Communicate *comm, const std::string &QMC_driver_type)
Constructor.
NewTimer & hamiltonian_timer
Base class for any object which needs to know about a MPI communicator.
MCPopulation population_
the entire (on node) walker population it serves VMCBatch and DMCBatch right now but will be polymorp...
helper functions for EinsplineSetBuilder
QTBase::RealType RealType
NewTimer & init_walkers_timer
std::string h5_file_root_
This is a data structure strictly for QMCDriver and its derived classes.
void recordBlock(int block) override
record the state of the block
UPtrVector< MCPWalker > & get_walkers()
WalkerLogInput walker_logs_input
walker logs input
RealType m_oneover2tau
Time-step factor .
QMCDriverNew Base class for Unified Drivers.
void makeLocalWalkers(int nwalkers, RealType reserve)
Adjust populations local walkers to this number.
void putWalkerLogs(xmlNodePtr wlxml) override
A set of light weight walkers that are carried between driver sections and restart.
void process(xmlNodePtr cur) override=0
QMCDriverNew driver second (3rd, 4th...) stage of constructing a valid driver.
Collection of Local Energy Operators.
static void scaleBySqrtTau(const TauParams< RT, CT > &taus, MCCoords< CT > &coords)
this class implements drift modification
Object to encapsulate appropriate tau derived parameters for a particular CoordsType specialization...
std::function< void(QMCHamiltonian &)> SetNonLocalMoveHandler
std::vector< IndexType > walkers_per_crowd
Timer accumulates time and call counts.
std::vector< std::unique_ptr< T > > UPtrVector
static void checkNumCrowdsLTNumThreads(const int num_crowds)
Driver synchronized step context.
RandomBase< FullPrecRealType > & getRng(int i) override
return the i-th random generator
void createRngsStepContexts(int num_crowds)
Creates Random Number generators for crowds and step contexts.
IndexType get_num_dead_walkers() const
std::unique_ptr< EstimatorManagerNew > estimator_manager_
Observables manager Has very problematic owner ship and life cycle.
IndexType nReject
counter for number of moves /rejected
unsigned long getDriverMode() override
NewTimer & run_steps_timer
The timers for the driver.
QMCTraits::IndexType IndexType
std::bitset< QMC_MODE_MAX > qmc_driver_mode_
bits to classify QMCDriver
const MultiWalkerDispatchers dispatchers_
multi walker dispatchers
Creates a common base class pointer for QMCDriver and QMCDriverNew to share.
Wrapping information on parallelism.
static void setWalkerOffsets(WalkerConfigurations &, Communicate *comm)
update the global offsets of walker configurations after active walkers being touched.
NewTimer & movepbyp_timer
std::unique_ptr< HDFWalkerOutput > wOut
record engine for walkers
static size_t determineStepsPerBlock(IndexType global_walkers, IndexType requested_samples, IndexType requested_steps, IndexType blocks)
pure function calculating the actual number of steps per block
int walker_dump_period
period of recording walker configurations
void setUpdateMode(bool pbyp) override
should be set in input don't see a reason to set individually
bool finalize(int block, bool dumpwalkers=true)
finalize a qmc section
std::vector< IndexType > walkers_per_rank
const std::string & get_root_name() const override
const std::string QMCType
type of qmc: assigned by subclasses
DriftModifierBase & get_drift_modifier() const
MCPWalker::WFBuffer_t WFBuffer
IndexType current() const
return current step
static void initialLogEvaluation(int crowd_id, UPtrVector< Crowd > &crowds, UPtrVector< ContextForSteps > &step_context)
WalkerConfigurations & walker_configs_ref_
void putTraces(xmlNodePtr txml) override
bool putQMCInfo(xmlNodePtr cur)
NewTimer & createGlobalTimer(const std::string &myname, timer_levels mylevel)
struct DriverWalkerResourceCollection golden_resource_
the golden multi walker shared resource serves ParticleSet TrialWaveFunction right now but actually s...
DriverWalker multi walker resource collections It currently supports VMC and DMC only.
QMCTraits::FullPrecRealType FullPrecRealType
static void computeLogGreensFunction(const MCCoords< CT > &coords, const TauParams< RT, CT > &taus, std::vector< QMCTraits::RealType > &log_gb)
calculates Green Function from displacements stored in MCCoords [param, out] log_g ...
friend std::ostream & operator<<(std::ostream &o_stream, const QMCDriverNew &qmcd)
void setStatus(const std::string &aname, const std::string &h5name, bool append) override
Set the status of the QMCDriver.
static QMCDriverNew::AdjustedWalkerCounts adjustGlobalWalkerCount(Communicate &comm, const IndexType current_configs, const IndexType requested_total_walkers, const IndexType requested_walkers_per_rank, const RealType reserve_walkers, int num_crowds)
}@
QMCTraits::IndexType IndexType
UPtrVector< ContextForSteps > step_contexts_
Per crowd move contexts, this is where the DistanceTables etc.
RefVector< RandomBase< FullPrecRealType > > getRngRefs() const
IndexType get_num_living_walkers() const
OHMMS_INDEXTYPE IndexType
define other types
void requestTraces(bool allow_traces) override
NewTimer & checkpoint_timer
const UPtrVector< MCPWalker > & get_dead_walkers() const
std::unique_ptr< DriftModifierBase > drift_modifier_
drift modifer
bool allow_walker_logs
whether to allow walker logs
static void checkLogAndGL(Crowd &crowd, const std::string_view location)
check logpsi and grad and lap against values computed from scratch
const std::string & currentMainRoot() const noexcept
returns the projectmain of the project, the series id is incremented at every QMC section <project id...
void add_H_and_Psi(QMCHamiltonian *h, TrialWaveFunction *psi) override
NewTimer & endblock_timer
const QMCDriverInput & getQMCDriverInput() const
std::vector< std::reference_wrapper< T > > RefVector
DriverTimers(const std::string &prefix)
NewTimer & production_timer
std::string getEngineName() override
intended for logging output and debugging you should base behavior on type preferably at compile time...
Class to represent a many-body trial wave function.
NewTimer & resource_timer
Driver level walker (DriverWalker) related data structures.
Walker< QMCTraits, PtclOnLatticeTraits > MCPWalker
std::vector< xmlNodePtr > mcwalkerNodePtr
a list of mcwalkerset element
IndexType nAccept
counter for number of moves accepted
Tensor< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > dot(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs)
const ProjectData & project_data_
project info for accessing global fileroot and series id
QMCDriverNew & operator=(const QMCDriverNew &)=delete
Copy operator (disabled).
ScopedProfiler driver_scope_profiler_
profile the driver lifetime
QMCTraits::RealType RealType
QTFull::RealType FullPrecRealType
bool put(xmlNodePtr cur) override
UPtrVector< Crowd > crowds_
}@
RealType m_sqrttau
Time-step factor .
UPtrVector< RandomBase< FullPrecRealType > > Rng
Random number generators.
QMCDriverInput qmcdriver_input_
IndexType nBlocksBetweenRecompute
the number of blocks between recomptePsi
void measureImbalance(const std::string &tag) const
inject additional barrier and measure load imbalance.
DriverTimers timers_
period of dumping walker configurations and everything else for restart
RealType max_disp_sq_
they should be limited to values that can be changed from input or are live state.
NewTimer & estimators_timer
void requestWalkerLogs(bool allow_walker_logs_) override
A container class to represent a walker.
void putWalkers(std::vector< xmlNodePtr > &wset) override
Read walker configurations from *.config.h5 files.
Define a serialized buffer to store anonymous data.
void initializeQMC(const AdjustedWalkerCounts &awc)
Do common section starting tasks for VMC and DMC.
Input representation for Driver base class runtime parameters.
Native representation for walker logs input.
void endBlock()
end of a block operations. Aggregates statistics across all MPI ranks and write to disk...
NewTimer & collectables_timer
NewTimer & create_walkers_timer
int k_delay
the number to delay updates by