20 #if defined(HAVE_LIBBOOST) 21 #include <boost/property_tree/ptree.hpp> 22 #include <boost/property_tree/xml_parser.hpp> 23 #include <boost/foreach.hpp> 34 #if defined(HAVE_LIBBOOST) 36 inline void put_histogram(std::string name,
accumulator_set<T> a, boost::property_tree::ptree& pt)
39 pt.put(name +
".value_squared", a.
properties[1]);
44 inline void get_histogram(std::string name,
accumulator_set<T>& a, boost::property_tree::ptree& pt)
47 a.
properties[1] = pt.get<T>(name +
".value_squared");
65 inline bool read(
data_type& ref, hid_t grp,
const std::string& aname, hid_t xfer_plist = H5P_DEFAULT)
70 inline bool write(
const data_type& ref, hid_t grp,
const std::string& aname, hid_t xfer_plist = H5P_DEFAULT)
const 84 if (vParamName.size())
86 vParamName.resize(10);
87 vParamName[0] =
"tau";
88 vParamName[1] =
"taueff";
89 vParamName[2] =
"etrial";
90 vParamName[3] =
"eref";
91 vParamName[4] =
"branchmax";
92 vParamName[5] =
"branchcutoff";
93 vParamName[6] =
"branchfilter";
94 vParamName[7] =
"sigma";
95 vParamName[8] =
"acc_energy";
96 vParamName[9] =
"acc_samples";
99 iParamName[0] =
"warmupsteps";
100 iParamName[1] =
"energyupdateinterval";
101 iParamName[2] =
"counter";
102 iParamName[3] =
"targetwalkers";
103 iParamName[4] =
"maxwalkers";
104 iParamName[5] =
"minwalkers";
105 iParamName[6] =
"brnachinterval";
114 #if defined(HAVE_LIBBOOST) 116 using boost::property_tree::ptree;
120 pt.put(
"state.branchmode", ref.BranchMode);
122 auto it_vparam = ref.vParam.begin();
123 for (
auto& name : vParamName)
124 pt.put(
"state.vparam." + name, *(it_vparam++));
125 for (
int i = 0; i < iParamName.size(); ++i)
126 pt.put(
"state.iparam." + iParamName[i], ref.iParam[i]);
128 put_histogram(
"state.energy", ref.EnergyHist, pt);
129 put_histogram(
"state.variance", ref.VarianceHist, pt);
130 put_histogram(
"state.r2accepted", ref.R2Accepted, pt);
131 put_histogram(
"state.r2proposed", ref.R2Proposed, pt);
132 std::string xname = fname +
".qmc.xml";
133 write_xml(xname, pt);
136 std::string h5name(fname);
137 if (fname.find(
"qmc.h5") >= fname.size())
138 h5name.append(
".qmc.h5");
140 hid_t fid = dump.
create(h5name);
143 std::string v_header(
"tau:taueff:etrial:eref:branchmax:branchcutoff:branchfilter:sigma:acc_energy:acc_samples");
144 std::string i_header(
"warmupsteps:energyupdateinterval:counter:targetwalkers:maxwalkers:minwalkers:branchinterval");
145 dump.
write(v_header,
"vparam_def");
146 dump.
write(i_header,
"iparam_def");
147 dump.
write(ref.vParam,
"vparam");
148 dump.
write(ref.iParam,
"iparam");
149 dump.
write(ref.BranchMode,
"branchmode");
150 dump.
push(
"histogram");
151 dump.
write(ref.EnergyHist,
"energy");
152 dump.
write(ref.VarianceHist,
"variance");
153 dump.
write(ref.R2Accepted,
"r2accepted");
154 dump.
write(ref.R2Proposed,
"r2proposed");
168 int found_config = 0;
170 if (myComm->rank() == 0)
173 using boost::property_tree::ptree;
175 std::string xname = fname +
".qmc.xml";
181 get_histogram(
"state.energy", ref.EnergyHist, pt);
182 get_histogram(
"state.variance", ref.VarianceHist, pt);
183 get_histogram(
"state.r2accepted", ref.R2Accepted, pt);
184 get_histogram(
"state.r2proposed", ref.R2Proposed, pt);
189 ref.iParam[i++] = v.second.get_value<
int>();
191 auto it_vparam = ref.vParam.begin();
194 *(it_vparam++) = v.second.get_value<
double>();
199 myComm->bcast(found_config);
212 int n = ref.vParam.size() + ref.iParam.size();
213 std::vector<RealType> pdata(
n + 1 + 16, -1);
215 if (myComm->rank() == 0)
217 copy(ref.vParam.begin(), ref.vParam.end(), pdata.begin());
218 copy(ref.iParam.begin(), ref.iParam.end(), pdata.begin() + ref.vParam.size());
220 pdata[offset++] = ref.BranchMode.to_ulong();
221 copy(ref.EnergyHist.properties, ref.EnergyHist.properties + 4, pdata.begin() + offset);
223 copy(ref.VarianceHist.properties, ref.VarianceHist.properties + 4, pdata.begin() + offset);
225 copy(ref.R2Accepted.properties, ref.R2Accepted.properties + 4, pdata.begin() + offset);
227 copy(ref.R2Proposed.properties, ref.R2Proposed.properties + 4, pdata.begin() + offset);
231 myComm->bcast(pdata);
236 for (
auto& vpar : ref.vParam)
238 for (
int i = 0; i < ref.iParam.size(); ++i, ++ii)
239 ref.iParam[i] = static_cast<int>(pdata[ii]);
240 ref.BranchMode =
static_cast<unsigned long>(pdata[ii]);
245 ref.EnergyHist.reset(pdata[ii], pdata[ii + 1], pdata[ii + 2]);
247 ref.VarianceHist.reset(pdata[ii], pdata[ii + 1], pdata[ii + 2]);
249 ref.R2Accepted.reset(pdata[ii], pdata[ii + 1], pdata[ii + 2]);
251 ref.R2Proposed.reset(pdata[ii], pdata[ii + 1], pdata[ii + 2]);
default struct to define a h5 dataspace, any intrinsic type T
void write(T &data, const std::string &aname)
write the data to the group aname and check status runtime error is issued on I/O error ...
helper functions for EinsplineSetBuilder
static void initAttributes()
h5data_proxy(const data_type &a)
bool write(const data_type &ref, hid_t grp, const std::string &aname, hid_t xfer_plist=H5P_DEFAULT) const
typename SFNB::BranchModeType BranchModeType
void copy(const Array< T1, 3 > &src, Array< T2, 3 > &dest)
bool read(const std::string &fname)
generic accumulator of a scalar type
hsize_t dims[RANK > 0 ? RANK :1]
shape of the dataspace, protected for zero size array, hdf5 support scalar as rank = 0 ...
static std::vector< std::string > iParamName
void push(const std::string &gname, bool createit=true)
push a group to the group stack
static auto get_address(T *a)
return the address
bool create(const std::filesystem::path &fname, unsigned flags=H5F_ACC_TRUNC)
create a file
static std::vector< std::string > vParamName
bool write(const std::string &fname)
bool read(data_type &ref, hid_t grp, const std::string &aname, hid_t xfer_plist=H5P_DEFAULT)
bool h5d_read(hid_t grp, const std::string &aname, T *first, hid_t xfer_plist)
return true, if successful
QMCTraits::FullPrecRealType value_type
bool h5d_write(hid_t grp, const std::string &aname, hsize_t ndims, const hsize_t *dims, const T *first, hid_t xfer_plist)
generic h5data_proxy<T> for scalar basic datatypes defined in hdf_dataspace.h Note if the dataset to ...