2 #include "casm/external/gzstream/gzstream.h"
13 return mc->samplers().find(prop_name)->second->mean(mc->is_equilibrated().second);
17 return mc->is_equilibrated().first;
20 std::string header = std::string(
"<") + prop_name +
">";
29 return mc->samplers().find(prop_name)->second->calculated_precision(mc->is_equilibrated().second);
33 return mc->is_equilibrated().first;
36 std::string header = std::string(
"prec(<") + prop_name +
">)";
47 const Eigen::VectorXd &X = obs1.segment(equil.second, obs1.size() - equil.second);
51 const Eigen::VectorXd &Y = obs2.segment(equil.second, obs2.size() - equil.second);
58 for(
Index i = 0; i < N; ++i) {
65 return (XYsum - Xsum * Ysum / N) / N;
74 return mc->is_equilibrated().first;
77 std::string header = std::string(
"cov(") + prop_name1 +
"," + prop_name2 +
")";
86 return mc->is_equilibrated().first;
96 return mc->is_converged();
106 return mc->is_equilibrated().second;
116 return mc->sample_times().size() - mc->is_equilibrated().second;
125 auto evaluator = [ = ](
const std::pair<ConstMonteCarloPtr, Index> &obs) {
126 return obs.first->sample_times()[obs.second].first;
135 auto evaluator = [ = ](
const std::pair<ConstMonteCarloPtr, Index> &obs) {
136 return obs.first->sample_times()[obs.second].second;
145 auto evaluator = [ = ](
const std::pair<ConstMonteCarloPtr, Index> &obs) {
146 const MonteSampler &sampler = *(obs.first->samplers().find(prop_name)->second);
156 auto evaluator = [ = ](
const std::pair<ConstMonteCarloPtr, Index> &site)->
int {
157 return site.first->trajectory()[site.second].occ(occ_index);
160 std::string header = std::string(
"occ(") +
std::to_string(occ_index) +
")";
220 fs::create_directories(
dir.conditions_dir(cond_index));
223 std::vector<std::pair<ConstMonteCarloPtr, Index> > observations;
226 observations.push_back(std::make_pair(ptr, i));
230 gz::ogzstream sout((
dir.observations_csv(cond_index).string() +
".gz").c_str());
231 _log <<
"write: " <<
fs::path(
dir.observations_csv(cond_index).string() +
".gz") <<
"\n";
232 sout << formatter(observations.cbegin(), observations.cend());
237 gz::ogzstream sout((
dir.observations_json(cond_index).string() +
".gz").c_str());
238 _log <<
"write: " <<
fs::path(
dir.observations_json(cond_index).string() +
".gz") <<
"\n";
240 formatter(observations.cbegin(), observations.cend()).to_json_arrays(json);
247 std::cerr <<
"ERROR writing observations." << std::endl;
277 fs::create_directories(
dir.conditions_dir(cond_index));
281 std::vector<std::pair<ConstMonteCarloPtr, Index> > observations;
284 observations.push_back(std::make_pair(ptr, i));
288 gz::ogzstream sout((
dir.trajectory_csv(cond_index).string() +
".gz").c_str());
289 _log <<
"write: " <<
fs::path(
dir.trajectory_csv(cond_index).string() +
".gz") <<
"\n";
290 sout << formatter(observations.cbegin(), observations.cend());
294 for(
int i = 0; i < prim.
basis.
size(); i++) {
295 if(prim.
basis[i].allowed_occupants().
size() > max_allowed) {
296 max_allowed = prim.
basis[i].allowed_occupants().
size();
306 fs::ofstream keyout(
dir.occupation_key_csv());
307 _log <<
"write: " <<
dir.occupation_key_csv() <<
"\n";
308 keyout <<
"site_index";
309 for(
int i = 0; i < max_allowed; i++) {
310 keyout <<
"\tocc_index_" << i;
314 for(
int i = 0; i < prim.
basis.
size(); i++) {
316 for(
int j = 0; j < max_allowed; j++) {
317 if(j < prim.
basis[i].allowed_occupants().
size()) {
318 keyout <<
"\t" << prim.
basis[i].allowed_occupants()[j];
343 gz::ogzstream sout((
dir.trajectory_json(cond_index).string() +
".gz").c_str());
344 _log <<
"write: " <<
fs::path(
dir.trajectory_json(cond_index).string() +
".gz") <<
"\n";
353 for(
int i = 0; i < prim.
basis.
size(); i++) {
356 key.
write(
dir.occupation_key_json());
357 _log <<
"write: " <<
dir.occupation_key_json() <<
"\n";
363 std::cerr <<
"ERROR writing observations." << std::endl;
375 fs::create_directories(
dir.trajectory_dir(cond_index));
381 if(!fs::exists(
dir.initial_state_json(cond_index))) {
382 throw std::runtime_error(
383 std::string(
"ERROR in 'write_POSCAR_initial(const MonteCarlo &mc, Index cond_index)'\n") +
384 " File not found: " +
dir.initial_state_json(cond_index).string());
388 fs::ofstream sout(
dir.POSCAR_initial(cond_index));
389 _log <<
"write: " <<
dir.POSCAR_initial(cond_index) <<
"\n";
402 fs::create_directories(
dir.trajectory_dir(cond_index));
408 if(!fs::exists(
dir.final_state_json(cond_index))) {
409 throw std::runtime_error(
410 std::string(
"ERROR in 'write_POSCAR_final(const MonteCarlo &mc, Index cond_index)'\n") +
411 " File not found: " +
dir.final_state_json(cond_index).string());
415 fs::ofstream sout(
dir.POSCAR_final(cond_index));
416 _log <<
"write: " <<
dir.POSCAR_final(cond_index) <<
"\n";
430 fs::create_directories(
dir.trajectory_dir(cond_index));
432 std::vector<Index> pass;
433 std::vector<Index> step;
434 std::vector<ConfigDoF> trajectory;
442 std::string filename =
dir.trajectory_json(cond_index).string() +
".gz";
444 if(!fs::exists(filename)) {
445 throw std::runtime_error(
446 std::string(
"ERROR in 'write_POSCAR_trajectory(const MonteCarlo &mc, Index cond_index)'\n") +
447 " File not found: " + filename);
450 gz::igzstream sin(filename.c_str());
452 for(
auto it = json[
"Pass"].cbegin(); it != json[
"Pass"].cend(); ++it) {
453 pass.push_back(it->get<
Index>());
455 for(
auto it = json[
"Step"].cbegin(); it != json[
"Step"].cend(); ++it) {
456 step.push_back(it->get<
Index>());
459 for(
auto it = json[
"DoF"].cbegin(); it != json[
"DoF"].cend(); ++it) {
461 trajectory.push_back(config_dof);
467 std::string filename =
dir.trajectory_csv(cond_index).string() +
".gz";
469 if(!fs::exists(filename)) {
470 throw std::runtime_error(
471 std::string(
"ERROR in 'write_POSCAR_trajectory(const MonteCarlo &mc, Index cond_index)'\n") +
472 " File not found: " + filename);
475 gz::igzstream sin(filename.c_str());
484 sin >> _pass >> _step;
485 pass.push_back(_pass);
486 step.push_back(_step);
488 sin >> config_dof.
occ(i);
490 trajectory.push_back(config_dof);
494 for(
Index i = 0; i < trajectory.size(); i++) {
497 for(
Index j = 0; j < trajectory[i].size(); j++) {
498 superstruc.
basis[j].set_occ_value(trajectory[i].occ(j));
502 std::stringstream ss;
503 ss <<
"Sample: " << i <<
" Pass: " << pass[i] <<
" Step: " << step[i];
504 superstruc.
title = ss.str();
507 fs::ofstream sout(
dir.POSCAR_snapshot(cond_index, i));
508 _log <<
"write: " <<
dir.POSCAR_snapshot(cond_index, i) <<
"\n";
Eigen::VectorBlock< const Eigen::VectorXd > observations() const
Return all observations.
std::pair< bool, MonteSampler::size_type > is_equilibrated() const
Returns pair(true, equil_samples) if required equilibration has occured for all samplers that must co...
void from_json(ClexDescription &desc, const jsonParser &json)
GenericDatumFormatter< double, ConstMonteCarloPtr > MonteCarloMeanFormatter(std::string prop_name)
Print mean property values:
void write_POSCAR_trajectory(const MonteCarlo &mc, Index cond_index, Log &_log)
For every snapshot taken, write a POSCAR file.
bool write_trajectory() const
Returns true if snapshots are requested.
void write(const std::string &file_name, unsigned int indent=2, unsigned int prec=12) const
Write json to file.
const Structure & get_prim() const
Structure specifies the lattice and atomic basis of a crystal.
bool write_observations() const
Writes all observations.
GenericDatumFormatter< double, ConstMonteCarloPtr > MonteCarloCovFormatter(std::string prop_name1, std::string prop_name2)
Print covariance: cov(prop_name1, prop_name2)
BasicStructure create_superstruc(const Lattice &scel_lat, double map_tol=TOL) const
Shortcut routine to create a supercell structure and fill it with sites.
GenericDatumFormatter< bool, ConstMonteCarloPtr > MonteCarloIsConvergedFormatter()
Print if converged.
GenericDatumFormatter< MonteCounter::size_type, std::pair< ConstMonteCarloPtr, Index > > MonteCarloStepFormatter()
Print Step number of observation.
const Lattice & get_real_super_lattice() const
An abstract base class for sampling and storing data observations.
const ConfigDoF & configdof() const
const Access current microstate
std::string to_string(ENUM val)
Return string representation of enum class.
const fs::path output_directory() const
Directory where output should go.
GenericDatumFormatter< double, std::pair< ConstMonteCarloPtr, Index > > MonteCarloObservationFormatter(std::string prop_name)
Print value of observation.
DataFormatter< std::pair< ConstMonteCarloPtr, Index > > make_observation_formatter(const MonteCarlo &mc)
Make a observation formatter.
GenericDatumFormatter< MonteCounter::size_type, std::pair< ConstMonteCarloPtr, Index > > MonteCarloPassFormatter()
Print Pass number of observation.
const SampleTimes & sample_times() const
const Access a vector of std::pair
indicating when samples were taken ...
void write_POSCAR_initial(const MonteCarlo &mc, Index cond_index, Log &_log)
For the initial state, write a POSCAR file.
const Supercell & supercell() const
const Access the Supercell that *this is based on
void write_trajectory(const MonteSettings &settings, const MonteCarlo &mc, Index cond_index, Log &_log)
Will create (and possibly overwrite) new file with all observations from run with conditions...
EigenIndex Index
For long integer indexing:
void sort()
Default sort is by atom name.
A container class for the different degrees of freedom a Configuration might have.
Array< CoordType > basis
Lattice vectors that specifies periodicity of the crystal.
const MCData & data() const
const Access the raw data observation container
const PrimClex & primclex() const
const Access the PrimClex that *this is based on
const std::vector< ConfigDoF > & trajectory() const
const Access snapshots of the Monte Carlo calculation
DataFormatter< std::pair< ConstMonteCarloPtr, Index > > make_trajectory_formatter(const MonteCarlo &mc)
Make a trajectory formatter.
GenericDatumFormatter< MonteSampler::size_type, ConstMonteCarloPtr > MonteCarloNAvgSamplesFormatter()
Print number of samples used in calculating means.
void write_observations(const MonteSettings &settings, const MonteCarlo &mc, Index cond_index, Log &_log)
Will create (and possibly overwrite) new file with all observations from run with conditions...
std::string title
User-specified name of this Structure.
T max(const T &A, const T &B)
MCData::size_type size_type
void set_title(std::string title)
Set title.
Interface base class for all types of Monte Carlo simulations (not meant to be used polymorphically) ...
Print POSCAR with formating options.
void write_POSCAR_final(const MonteCarlo &mc, Index cond_index, Log &_log)
For the final state, write a POSCAR file.
jsonParser & push_back(const T &value)
Puts new valued element at end of array of any type T for which 'jsonParser& to_json( const T &value...
Functor to help evaluate covariance.
const Array< int > & occupation() const
GenericDatumFormatter< bool, ConstMonteCarloPtr > MonteCarloIsEquilibratedFormatter()
Print if equilibrated (not counting explicitly requested equilibration)
bool write_csv() const
Write csv versions of files? (csv is the default format if no 'output_format' given) ...
bool write_json() const
Write json versions of files?
GenericDatumFormatter< int, std::pair< ConstMonteCarloPtr, Index > > MonteCarloOccFormatter(Index occ_index)
Print value of a particular occupation variable.
double operator()(const ConstMonteCarloPtr &mc)
GenericDatumFormatter< MonteSampler::size_type, ConstMonteCarloPtr > MonteCarloNEquilSamplesFormatter()
Print number of samples used for equilibration (not counting explicitly requested equilibration) ...
Settings for Monte Carlo calculations.
GenericDatumFormatter< double, ConstMonteCarloPtr > MonteCarloPrecFormatter(std::string prop_name)
Print calculated precision of property values: prec(
)
static jsonParser object()
Returns an empty json object.
const SamplerMap & samplers() const
const Access sampler map
static jsonParser array()
Returns an empty json array.
const MonteSettings & settings() const
const Access settings used for construction
const Structure & get_prim() const
const Access to primitive Structure