mirror of https://github.com/QMCPACK/qmcpack.git
Merge branch 'develop' into sposet-name
This commit is contained in:
commit
471c6452f2
|
@ -652,8 +652,6 @@ endif()
|
|||
find_package(HDF5 COMPONENTS C)
|
||||
|
||||
if(HDF5_FOUND)
|
||||
set(HAVE_LIBHDF5 1)
|
||||
|
||||
if(HDF5_IS_PARALLEL)
|
||||
message(STATUS "Parallel HDF5 library found")
|
||||
option(ENABLE_PHDF5 "Enable code paths using parallel HDF5" ON)
|
||||
|
@ -692,7 +690,7 @@ if(HDF5_FOUND)
|
|||
|
||||
add_library(IO::HDF5 INTERFACE IMPORTED)
|
||||
target_include_directories(IO::HDF5 INTERFACE "${HDF5_INCLUDE_DIR}")
|
||||
target_compile_definitions(IO::HDF5 INTERFACE "HAVE_LIBHDF5;H5_USE_16_API")
|
||||
target_compile_definitions(IO::HDF5 INTERFACE "H5_USE_16_API")
|
||||
target_link_libraries(IO::HDF5 INTERFACE "${HDF5_LIBRARIES}")
|
||||
if(ENABLE_PHDF5)
|
||||
target_compile_definitions(IO::HDF5 INTERFACE "ENABLE_PHDF5")
|
||||
|
|
|
@ -36,9 +36,6 @@
|
|||
/* Enable OpenMP parallelization. */
|
||||
#define QMC_OMP 1
|
||||
|
||||
/* Define to 1 if you have the `hdf5' library (-lhdf5). */
|
||||
#define HAVE_LIBHDF5 1
|
||||
|
||||
/* Define to 1 if you want to use parallel hdf5 for frequent output */
|
||||
/* #undef ENABLE_PHDF5 */
|
||||
|
||||
|
|
|
@ -16,9 +16,7 @@
|
|||
|
||||
#include "HDFWalkerInputManager.h"
|
||||
#include "OhmmsData/AttributeSet.h"
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
#include "Particle/HDFWalkerInput_0_4.h"
|
||||
#endif
|
||||
#include "Message/Communicate.h"
|
||||
#include "hdf/HDFVersion.h"
|
||||
|
||||
|
@ -28,7 +26,6 @@ HDFWalkerInputManager::HDFWalkerInputManager(WalkerConfigurations& wc_list, size
|
|||
|
||||
HDFWalkerInputManager::~HDFWalkerInputManager() {}
|
||||
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
bool HDFWalkerInputManager::put(xmlNodePtr cur)
|
||||
{
|
||||
//reference revision number
|
||||
|
@ -61,13 +58,4 @@ bool HDFWalkerInputManager::put(xmlNodePtr cur)
|
|||
CurrentFileRoot = cfile;
|
||||
return success;
|
||||
}
|
||||
#else
|
||||
bool HDFWalkerInputManager::put(xmlNodePtr cur) { return false; }
|
||||
#endif
|
||||
|
||||
void HDFWalkerInputManager::rewind(const std::string& h5root, int blocks)
|
||||
{
|
||||
// HDFWalkerInputCollect WO(h5root);
|
||||
// WO.rewind(wc_list_,blocks);
|
||||
}
|
||||
} // namespace qmcplusplus
|
||||
|
|
|
@ -37,8 +37,6 @@ public:
|
|||
//bool put(std::vector<xmlNodePtr>& mset, int pid);
|
||||
//bool put(std::vector<xmlNodePtr>& mset, Communicate* comm);
|
||||
std::string getFileRoot() { return CurrentFileRoot; }
|
||||
|
||||
void rewind(const std::string& h5root, int blocks);
|
||||
};
|
||||
} // namespace qmcplusplus
|
||||
|
||||
|
|
|
@ -380,7 +380,7 @@ void DMCBatched::process(xmlNodePtr node)
|
|||
qmcdriver_input_.get_walkers_per_rank(), dmcdriver_input_.get_reserve(),
|
||||
qmcdriver_input_.get_num_crowds());
|
||||
|
||||
Base::startup(node, awc);
|
||||
Base::initializeQMC(awc);
|
||||
}
|
||||
catch (const UniformCommunicateError& ue)
|
||||
{
|
||||
|
|
|
@ -257,14 +257,6 @@ void MCPopulation::measureGlobalEnergyVariance(Communicate& comm,
|
|||
variance = weight_energy_variance[2] / weight_energy_variance[0] - ener * ener;
|
||||
}
|
||||
|
||||
void MCPopulation::set_variational_parameters(const opt_variables_type& active)
|
||||
{
|
||||
for (auto it_twfs = walker_trial_wavefunctions_.begin(); it_twfs != walker_trial_wavefunctions_.end(); ++it_twfs)
|
||||
{
|
||||
(*it_twfs).get()->resetParameters(active);
|
||||
}
|
||||
}
|
||||
|
||||
void MCPopulation::checkIntegrity() const
|
||||
{
|
||||
// check active walkers
|
||||
|
|
|
@ -226,10 +226,6 @@ public:
|
|||
|
||||
/** }@ */
|
||||
|
||||
|
||||
/// Set variational parameters for the per-walker copies of the wavefunction.
|
||||
void set_variational_parameters(const opt_variables_type& active);
|
||||
|
||||
/// check if all the internal vector contain consistent sizes;
|
||||
void checkIntegrity() const;
|
||||
|
||||
|
|
|
@ -129,22 +129,7 @@ void QMCDriverNew::checkNumCrowdsLTNumThreads(const int num_crowds)
|
|||
}
|
||||
}
|
||||
|
||||
/** process a <qmc/> element
|
||||
* @param cur xmlNode with qmc tag
|
||||
*
|
||||
* This function is called before QMCDriverNew::run and following actions are taken:
|
||||
* - Initialize basic data to execute run function.
|
||||
* -- distance tables
|
||||
* -- resize deltaR and drift with the number of particles
|
||||
* -- assign cur to qmcNode
|
||||
* - process input file
|
||||
* -- putQMCInfo: <parameter/> s for generic QMC
|
||||
* -- put : extra data by derived classes
|
||||
* - initialize branchEngine to accumulate energies
|
||||
* - initialize Estimators
|
||||
* - initialize Walkers
|
||||
*/
|
||||
void QMCDriverNew::startup(xmlNodePtr cur, const QMCDriverNew::AdjustedWalkerCounts& awc)
|
||||
void QMCDriverNew::initializeQMC(const AdjustedWalkerCounts& awc)
|
||||
{
|
||||
ScopedTimer local_timer(timers_.startup_timer);
|
||||
|
||||
|
|
|
@ -102,10 +102,6 @@ public:
|
|||
std::bitset<QMC_MODE_MAX> qmc_driver_mode_;
|
||||
|
||||
protected:
|
||||
/// inject additional barrier and measure load imbalance.
|
||||
void measureImbalance(const std::string& tag) const;
|
||||
/// end of a block operations. Aggregates statistics across all MPI ranks and write to disk.
|
||||
void endBlock();
|
||||
/** This is a data structure strictly for QMCDriver and its derived classes
|
||||
*
|
||||
* i.e. its nested in scope for a reason
|
||||
|
@ -117,6 +113,16 @@ protected:
|
|||
std::vector<IndexType> walkers_per_crowd;
|
||||
RealType reserve_walkers;
|
||||
};
|
||||
/** Do common section starting tasks for VMC and DMC
|
||||
*
|
||||
* set up population_, crowds_, rngs and step_contexts_
|
||||
*/
|
||||
void initializeQMC(const AdjustedWalkerCounts& awc);
|
||||
|
||||
/// inject additional barrier and measure load imbalance.
|
||||
void measureImbalance(const std::string& tag) const;
|
||||
/// end of a block operations. Aggregates statistics across all MPI ranks and write to disk.
|
||||
void endBlock();
|
||||
|
||||
public:
|
||||
/// Constructor.
|
||||
|
@ -228,15 +234,6 @@ public:
|
|||
*/
|
||||
void process(xmlNodePtr cur) override = 0;
|
||||
|
||||
/** Do common section starting tasks
|
||||
*
|
||||
* \todo This should not take xmlNodePtr
|
||||
* It should either take BranchEngineInput and EstimatorInput
|
||||
* And these are the arguments to the branch_engine and estimator_manager
|
||||
* Constructors or these objects should be created elsewhere.
|
||||
*/
|
||||
void startup(xmlNodePtr cur, const QMCDriverNew::AdjustedWalkerCounts& awc);
|
||||
|
||||
static void initialLogEvaluation(int crowd_id, UPtrVector<Crowd>& crowds, UPtrVector<ContextForSteps>& step_context);
|
||||
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ void VMCBatched::process(xmlNodePtr node)
|
|||
adjustGlobalWalkerCount(myComm->size(), myComm->rank(), qmcdriver_input_.get_total_walkers(),
|
||||
qmcdriver_input_.get_walkers_per_rank(), 1.0, qmcdriver_input_.get_num_crowds());
|
||||
|
||||
Base::startup(node, awc);
|
||||
Base::initializeQMC(awc);
|
||||
}
|
||||
catch (const UniformCommunicateError& ue)
|
||||
{
|
||||
|
|
|
@ -548,6 +548,8 @@ bool QMCFixedSampleLinearOptimize::put(xmlNodePtr q)
|
|||
if (!hybridEngineObj)
|
||||
hybridEngineObj = std::make_unique<HybridEngine>(myComm, q);
|
||||
|
||||
hybridEngineObj->incrementStepCounter();
|
||||
|
||||
return processOptXML(hybridEngineObj->getSelectedXML(), vmcMove, ReportToH5 == "yes", useGPU == "yes");
|
||||
}
|
||||
else
|
||||
|
|
|
@ -299,7 +299,6 @@ void QMCFixedSampleLinearOptimizeBatched::generateSamples()
|
|||
t1.restart();
|
||||
// W.reset();
|
||||
samples_.resetSampleCount();
|
||||
population_.set_variational_parameters(optTarget->getOptVariables());
|
||||
|
||||
vmcEngine->run();
|
||||
app_log() << " Execution time = " << std::setprecision(4) << t1.elapsed() << std::endl;
|
||||
|
@ -654,38 +653,11 @@ void QMCFixedSampleLinearOptimizeBatched::process(xmlNodePtr q)
|
|||
|
||||
hybridEngineObj->incrementStepCounter();
|
||||
|
||||
//Overwrite sampling information with input from selected optimizer block of a hybrid run
|
||||
QMCDriverInput qmcdriver_input_copy = qmcdriver_input_;
|
||||
VMCDriverInput vmcdriver_input_copy = vmcdriver_input_;
|
||||
|
||||
qmcdriver_input_copy.readXML(hybridEngineObj->getSelectedXML());
|
||||
vmcdriver_input_copy.readXML(hybridEngineObj->getSelectedXML());
|
||||
|
||||
|
||||
processOptXML(hybridEngineObj->getSelectedXML(), vmcMove, ReportToH5 == "yes", useGPU == "yes");
|
||||
|
||||
|
||||
QMCDriverNew::AdjustedWalkerCounts awc =
|
||||
adjustGlobalWalkerCount(myComm->size(), myComm->rank(), qmcdriver_input_copy.get_total_walkers(),
|
||||
qmcdriver_input_copy.get_walkers_per_rank(), 1.0,
|
||||
qmcdriver_input_copy.get_num_crowds());
|
||||
QMCDriverNew::startup(q, awc);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Also need to overwrite input information again in case this method was preceded by hybrid method optimization
|
||||
QMCDriverInput qmcdriver_input_copy = qmcdriver_input_;
|
||||
qmcdriver_input_copy.readXML(q);
|
||||
|
||||
processOptXML(q, vmcMove, ReportToH5 == "yes", useGPU == "yes");
|
||||
|
||||
auto& qmcdriver_input = vmcEngine->getQMCDriverInput();
|
||||
// This code is also called when setting up vmcEngine. Would be nice to not duplicate the call.
|
||||
QMCDriverNew::AdjustedWalkerCounts awc =
|
||||
adjustGlobalWalkerCount(myComm->size(), myComm->rank(), qmcdriver_input_copy.get_total_walkers(),
|
||||
qmcdriver_input_copy.get_walkers_per_rank(), 1.0,
|
||||
qmcdriver_input_copy.get_num_crowds());
|
||||
QMCDriverNew::startup(q, awc);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ public:
|
|||
adjustGlobalWalkerCount(myComm->size(), myComm->rank(), qmcdriver_input_.get_total_walkers(),
|
||||
qmcdriver_input_.get_walkers_per_rank(), 1.0, qmcdriver_input_.get_num_crowds());
|
||||
|
||||
Base::startup(node, awc);
|
||||
Base::initializeQMC(awc);
|
||||
}
|
||||
|
||||
void testAdjustGlobalWalkerCount()
|
||||
|
|
|
@ -117,7 +117,6 @@ bool LCAOSpinorBuilder::loadMO(LCAOrbitalSet& up, LCAOrbitalSet& dn, xmlNodePtr
|
|||
bool LCAOSpinorBuilder::putFromH5(LCAOrbitalSet& up, LCAOrbitalSet& dn, xmlNodePtr occ_ptr)
|
||||
{
|
||||
#ifdef QMC_COMPLEX
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
if (up.getBasisSetSize() == 0 || dn.getBasisSetSize() == 0)
|
||||
{
|
||||
myComm->barrier_and_abort("LCASpinorBuilder::loadMO detected ZERO BasisSetSize");
|
||||
|
@ -198,10 +197,6 @@ bool LCAOSpinorBuilder::putFromH5(LCAOrbitalSet& up, LCAOrbitalSet& dn, xmlNodeP
|
|||
myComm->comm.broadcast_n(dn.C->data(), dn.C->size());
|
||||
#endif
|
||||
|
||||
#else
|
||||
myComm->barrier_and_abort("LCAOSpinorBuilder::putFromH5 HDF5 is disabled");
|
||||
#endif
|
||||
|
||||
#else
|
||||
myComm->barrier_and_abort("LCAOSpinorBuilder::putFromH5 Must build with QMC_COMPLEX");
|
||||
#endif
|
||||
|
|
|
@ -652,7 +652,6 @@ bool LCAOrbitalBuilder::putFromXML(LCAOrbitalSet& spo, xmlNodePtr coeff_ptr)
|
|||
*/
|
||||
bool LCAOrbitalBuilder::putFromH5(LCAOrbitalSet& spo, xmlNodePtr coeff_ptr)
|
||||
{
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
int neigs = spo.getBasisSetSize();
|
||||
int setVal = -1;
|
||||
std::string setname;
|
||||
|
@ -714,9 +713,6 @@ bool LCAOrbitalBuilder::putFromH5(LCAOrbitalSet& spo, xmlNodePtr coeff_ptr)
|
|||
}
|
||||
}
|
||||
myComm->bcast(spo.C->data(), spo.C->size());
|
||||
#else
|
||||
APP_ABORT("LCAOrbitalBuilder::putFromH5 HDF5 is disabled.")
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -727,7 +723,6 @@ bool LCAOrbitalBuilder::putFromH5(LCAOrbitalSet& spo, xmlNodePtr coeff_ptr)
|
|||
*/
|
||||
bool LCAOrbitalBuilder::putPBCFromH5(LCAOrbitalSet& spo, xmlNodePtr coeff_ptr)
|
||||
{
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
ReportEngine PRE("LCAOrbitalBuilder", "LCAOrbitalBuilder::putPBCFromH5");
|
||||
int norbs = spo.getOrbitalSetSize();
|
||||
int neigs = spo.getBasisSetSize();
|
||||
|
@ -813,10 +808,6 @@ bool LCAOrbitalBuilder::putPBCFromH5(LCAOrbitalSet& spo, xmlNodePtr coeff_ptr)
|
|||
#ifdef HAVE_MPI
|
||||
myComm->comm.broadcast_n(spo.C->data(), spo.C->size());
|
||||
#endif
|
||||
|
||||
#else
|
||||
APP_ABORT("LCAOrbitalBuilder::putFromH5 HDF5 is disabled.")
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,14 +17,7 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
#include "hdf5.h"
|
||||
#else
|
||||
using hid_t = int;
|
||||
using hsize_t = std::size_t;
|
||||
const int H5P_DEFAULT = 0;
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
|
|
|
@ -18,12 +18,9 @@
|
|||
#include "hdf_datatype.h"
|
||||
#include "hdf_dataspace.h"
|
||||
#include "hdf_dataproxy.h"
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
#include "hdf_pete.h"
|
||||
#include "hdf_stl.h"
|
||||
#include "hdf_hyperslab.h"
|
||||
//#include "hdf_double_hyperslab.h"
|
||||
#endif
|
||||
#include <stack>
|
||||
#include <bitset>
|
||||
#ifdef HAVE_MPI
|
||||
|
|
|
@ -14,13 +14,10 @@
|
|||
#define QMCPLUSPLUS_H5DATATYPE_DEFINE_H
|
||||
|
||||
#include <type_traits>
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
#include <hdf5.h>
|
||||
#endif
|
||||
|
||||
namespace qmcplusplus
|
||||
{
|
||||
#if defined(HAVE_LIBHDF5)
|
||||
/** map C types to hdf5 native types
|
||||
* bool is explicit removed due to the fact that it is implementation-dependant
|
||||
*/
|
||||
|
@ -44,24 +41,8 @@ BOOSTSUB_H5_DATATYPE(unsigned short, H5T_NATIVE_USHORT);
|
|||
BOOSTSUB_H5_DATATYPE(unsigned int, H5T_NATIVE_UINT);
|
||||
BOOSTSUB_H5_DATATYPE(unsigned long, H5T_NATIVE_ULONG);
|
||||
BOOSTSUB_H5_DATATYPE(unsigned long long, H5T_NATIVE_ULLONG);
|
||||
//BOOSTSUB_H5_DATATYPE(uint32_t, H5T_NATIVE_UINT32);
|
||||
//BOOSTSUB_H5_DATATYPE(uint64_t, H5T_NATIVE_UINT64);
|
||||
BOOSTSUB_H5_DATATYPE(float, H5T_NATIVE_FLOAT);
|
||||
BOOSTSUB_H5_DATATYPE(double, H5T_NATIVE_DOUBLE);
|
||||
|
||||
#else
|
||||
using hid_t = int;
|
||||
using herr_t = int;
|
||||
using hsize_t = std::size_t;
|
||||
const int H5P_DEFAULT = 0;
|
||||
|
||||
//return a non-sense integer
|
||||
template<typename T>
|
||||
inline hid_t get_h5_datatype(const T&)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
} // namespace qmcplusplus
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue