Returns 0 on success, nonzero on error.
42 {
43 int error = 0;
44
45
46
48 magic_enum::enum_cast<JobType>(ini.Get("Main", "job", ""),
49 magic_enum::case_insensitive)
63
67
69 unsigned i = static_cast<unsigned>(std::time(nullptr));
72 } else {
74 }
81
82
83
85 magic_enum::enum_cast<PotType>(ini.Get("Potential", "potential", ""),
86 magic_enum::case_insensitive)
100
104 } else {
106 }
109
110
123 }
124
133 }
134
149 }
150
157 ini.GetReal("XTBPot", "electronic_temperature",
165 }
166
173 throw std::runtime_error(
174 "Switching function must begin before the global cutoff!");
175 }
176 }
177
186 ini.Get("SocketNWChemPot", "nwchem_settings",
189 ini.Get("SocketNWChemPot", "unix_socket_path",
192 ini.GetBoolean("SocketNWChemPot", "unix_socket_mode",
195 ini.GetBoolean("SocketNWChemPot", "make_template_input",
197 }
198
199
201 const char *sec = "RgpotPot";
202
203
209 ini.Get(sec, "theory",
212 ini.Get(sec, "scf_type",
215 sec, "functional",
218 sec, "cutoff_ry",
221 sec, "charge",
224 ini.GetInteger(sec, "multiplicity",
225 ini.GetInteger(sec, "nwchem_multiplicity",
252 ini.GetReal(sec, "uncertainty_threshold",
255 ini.GetBoolean(sec, "torch_determinism_strict",
257
259 sec, "paramset",
262 sec, "accuracy",
265 sec, "electronic_temperature",
266 ini.GetReal(sec, "xtb_electronic_temperature",
269 sec, "max_iterations",
270 ini.GetInteger(sec, "xtb_max_iterations",
275 sec, "uhf",
278 if (be == "xtb" || be == "xtbpot" || be == "gfn" || be == "gfnxtb") {
284 ini.GetReal("XTBPot", "electronic_temperature",
292 }
293 }
294
295
296
300 ini.GetInteger("Debug", "write_movies_interval",
303 ini.GetBoolean("Debug", "write_deprecated_outs",
306 ini.GetBoolean("Debug", "estimate_neb_eigenvalues",
310
311
312
314 ini.GetReal("Structure Comparison", "distance_difference",
317 ini.GetReal("Structure Comparison", "neighbor_cutoff",
320 ini.GetBoolean("Structure Comparison", "check_rotation",
323 ini.GetReal("Structure Comparison", "energy_difference",
326 "Structure Comparison", "indistinguishable_atoms",
329 ini.GetBoolean("Structure Comparison", "remove_translation",
331
332
333
335 ini.GetBoolean("Process Search", "minimize_first",
338 ini.GetReal("Process Search", "minimization_offset",
340
341
342 auto inp_optMethod =
343 magic_enum::enum_cast<OptType>(ini.Get("Optimizer", "opt_method", "none"),
344 magic_enum::case_insensitive)
348 }
349
351 toLowerCase(ini.Get("Optimizer", "convergence_metric",
356 } else {
360 }
361
362 if (ini.HasSection("Refine")) {
364 magic_enum::enum_cast<OptType>(ini.Get("Refine", "opt_method", ""),
365 magic_enum::case_insensitive)
369 }
370
377
378 if (ini.HasSection("QuickMin")) {
384 ini.GetBoolean("Optimizer", "qm_steepest_descent",
386 }
387 if (ini.HasSection("FIRE")) {
398 }
399 if (ini.HasSection("LBFGS")) {
403 ini.GetReal("LBFGS", "lbfgs_inverse_curvature",
406 ini.GetReal("LBFGS", "lbfgs_max_inverse_curvature",
411 ini.GetBoolean("LBFGS", "lbfgs_angle_reset",
414 ini.GetBoolean("LBFGS", "lbfgs_distance_reset",
416 }
417 if (ini.HasSection("CG")) {
419 ini.GetBoolean("CG", "cg_no_overshooting",
422 ini.GetBoolean("CG", "cg_knock_out_max_move",
429 ini.GetInteger("CG", "cg_max_iter_before_reset",
432 ini.GetInteger("CG", "cg_max_iter_line_search",
434 }
435 if (ini.HasSection("SD")) {
440 }
441
442
443
466 {
467 const auto rotTok =
468 toLowerCase(ini.Get("Dimer", "rotation_backend", "classical"));
470 magic_enum::enum_cast<DimerRotationBackend>(
471 rotTok, magic_enum::case_insensitive)
473 }
474
475
477 ini.GetBoolean("Surrogate", "use_surrogate", false);
481 }
484 if (ini.HasSection("Surrogate")) {
486 magic_enum::enum_cast<PotType>(ini.Get("Surrogate", "potential", ""),
487 magic_enum::case_insensitive)
490 throw std::runtime_error("We only support catlearn for GP right now");
491 }
492 }
493
494 if (ini.HasSection("CatLearn")) {
499 ini.GetBoolean("CatLearn", "use_derivatives", "catl_deriv");
501 ini.GetBoolean("CatLearn", "use_fingerprint", "catl_fingerprint");
503 "CatLearn", "parallel_hyperparameter_opt", "catl_parallel");
504 }
505
506 if (ini.HasSection("ASE_ORCA")) {
510 ini.Get("ASE_ORCA", "simpleinput", "");
511 }
512
513 if (ini.HasSection("ASE_NWCHEM")) {
519 ini.Get("ASE_NWCHEM", "multiplicity", "");
521 ini.GetReal("ASE_NWCHEM", "scf_thresh", 1e-5);
523 ini.GetInteger("ASE_NWCHEM", "scf_maxiter", 200);
524 }
525
526 if (ini.HasSection("Metatomic")) {
528 ini.Get("Metatomic", "model_path", "");
531 ini.Get("Metatomic", "length_unit", "angstrom");
533 ini.Get("Metatomic", "extensions_directory", "");
535 ini.GetBoolean("Metatomic", "check_consistency", false);
537 ini.GetReal("Metatomic", "uncertainty_threshold", -1.0);
541 ini.Get("Metatomic", "energy_uncertainty_output",
546 ini.GetBoolean("Metatomic", "non_conservative", false);
548 ini.GetBoolean("Metatomic", "random_rotation", false);
550 ini.GetInteger("Metatomic", "n_symmetry_rotations", 0));
552 ini.GetBoolean("Metatomic", "deterministic", true);
554 ini.GetBoolean("Metatomic", "deterministic_strict", false);
556 _variant.
base = ini.Get(
"Metatomic",
"variant_base",
"");
557 _variant.energy = ini.Get("Metatomic", "variant_energy", "");
558 _variant.energy_uncertainty =
559 ini.Get("Metatomic", "variant_energy_uncertainty", "");
560 _variant.force = ini.Get("Metatomic", "variant_force", "");
561 }
562
563 if (ini.HasSection("Serve")) {
574 }
575
576
578 ini.GetBoolean("Surrogate", "gp_linear_path_always",
580
581
588 if (ini.HasValue("Lanczos", "phva_atoms")) {
590 toLowerCase(ini.Get("Lanczos", "phva_atoms", "All"));
591 }
592
593
599 ini.GetBoolean("Davidson", "diagonal_preconditioner",
601 if (ini.HasValue("Davidson", "phva_atoms")) {
603 toLowerCase(ini.Get("Davidson", "phva_atoms", "All"));
604 }
605
606
623
624
631
632
638 ini.GetReal("GPR Dimer", "relaxation_converged_angle",
641 ini.GetInteger("GPR Dimer", "max_initial_rotation_iterations",
644 ini.GetInteger("GPR Dimer", "max_relaxation_rotation_iterations",
647 ini.GetInteger("GPR Dimer", "divisor_t_dimer",
650 ini.GetInteger("GPR Dimer", "max_outer_iterations",
653 ini.GetInteger("GPR Dimer", "max_inner_iterations",
656 ini.GetReal("GPR Dimer", "max_midpoint_displacement",
659 ini.Get("GPR Dimer", "rotation_opt_method",
662 ini.Get("GPR Dimer", "translation_opt_method",
669 ini.GetReal("GPR Dimer", "convex_region_step_size",
676 ini.GetBoolean("GPR Dimer", "nogp_initial_rotations",
679 ini.GetBoolean("GPR Dimer", "nogp_init_translations",
682 ini.GetBoolean("GPR Dimer", "has_many_iterations",
684
686 ini.Get("GPR Dimer", "hyperparameter_opt_method",
691 ini.GetReal("GPR Dimer", "gpr_jitter_variance",
694 ini.GetReal("GPR Dimer", "gpr_noise_variance",
699 ini.GetReal("GPR Dimer", "prior_variance",
702 ini.GetReal("GPR Dimer", "prior_degrees_of_freedom",
704
706 ini.GetBoolean("GPR Dimer", "check_derivatives",
709 ini.GetInteger("GPR Dimer", "opt_max_iterations",
712 ini.GetReal("GPR Dimer", "opt_tol_func",
717 ini.GetReal("GPR Dimer", "opt_lambda_limit",
720 ini.GetReal("GPR Dimer", "opt_lambda_init",
722
724 ini.GetInteger("GPR Dimer", "report_level",
727 ini.GetInteger("GPR Dimer", "debug_level",
730 ini.Get("GPR Dimer", "debug_output_directory",
733 ini.Get("GPR Dimer", "debug_position_basename",
736 ini.Get("GPR Dimer", "debug_energy_basename",
739 ini.Get("GPR Dimer", "debug_gradient_basename",
742 ini.GetReal("GPR Dimer", "debug_midpoint_offset",
748
750 ini.GetBoolean("GPR Dimer", "use_prune",
753 ini.GetInteger("GPR Dimer", "start_prune_at",
756 ini.GetInteger("GPR Dimer", "nprune_vals",
759 ini.GetReal("GPR Dimer", "prune_threshold",
761
762
763
773 ini.GetReal("Prefactor", "min_displacement",
785
786
787
788 if (ini.HasValue("Hessian", "phva_atoms")) {
790 toLowerCase(ini.Get("Hessian", "phva_atoms", "All"));
791 } else if (ini.HasValue("Hessian", "atom_list")) {
793 toLowerCase(ini.Get("Hessian", "atom_list", "All"));
794 }
803
804
805 const std::string neb_section = "Nudged Elastic Band";
806
813 auto neb_optMethod =
814 magic_enum::enum_cast<OptType>(ini.Get(neb_section, "opt_method", "none"),
815 magic_enum::case_insensitive)
819 }
823 ini.GetReal(neb_section, "mmf_peak_tolerance",
825
833 ini.GetBoolean(neb_section, "doubly_nudged_switching",
835
837 ini.GetBoolean(neb_section, "energy_weighted",
845
856
858 ini.GetBoolean(neb_section, "climbing_image_method",
861 ini.GetBoolean(neb_section, "climbing_image_converged_only",
864 ini.GetBoolean(neb_section, "old_tangent",
869 ini.GetReal(neb_section, "ci_after_rel",
871
873 oci.
use_mmf = ini.GetBoolean(neb_section,
"ci_mmf", oci.use_mmf);
874 oci.trigger_force =
875 ini.GetReal(neb_section, "ci_mmf_after", oci.trigger_force);
876 oci.trigger_factor =
877 ini.GetReal(neb_section, "ci_mmf_after_rel", oci.trigger_factor);
878 oci.max_steps = ini.GetInteger(neb_section, "ci_mmf_nsteps", oci.max_steps);
879 oci.ci_stability_count = ini.GetInteger(
880 neb_section, "ci_mmf_ci_stability_count", oci.ci_stability_count);
881 oci.angle_tol = ini.GetReal(neb_section, "ci_mmf_angle", oci.angle_tol);
882
885 magic_enum::enum_cast<NEBInit>(ini.Get(neb_section, "initializer", ""),
886 magic_enum::case_insensitive)
888 init.input_path = ini.Get(neb_section, "initial_path_in", init.input_path);
889 init.max_iterations =
890 ini.GetInteger(neb_section, "init_max_iterations", init.max_iterations);
891 init.nsteps = ini.GetInteger(neb_section, "init_nsteps", init.nsteps);
892 init.max_move = ini.GetReal(neb_section, "init_max_move", init.max_move);
893 init.force_tolerance =
894 ini.GetReal(neb_section, "init_force_threshold", init.force_tolerance);
895 init.sidpp_alpha =
896 ini.GetReal(neb_section, "sidpp_growth_alpha", init.sidpp_alpha);
897 init.sidpp_frontier_tol =
898 ini.GetReal(neb_section, "sidpp_frontier_tol", init.sidpp_frontier_tol);
899 init.sidpp_reparam =
900 ini.GetBoolean(neb_section, "sidpp_reparameterize", init.sidpp_reparam);
901 init.sidpp_ideal_ksp =
902 ini.GetBoolean(neb_section, "sidpp_ideal_ksp", init.sidpp_ideal_ksp);
903 auto neb_ipath_optMethod =
904 magic_enum::enum_cast<OptType>(
905 ini.Get(neb_section, "ipath_opt_method", "none"),
906 magic_enum::case_insensitive)
910 }
911 init.oversampling =
912 ini.GetBoolean(neb_section, "oversampling", init.oversampling);
913 init.oversampling_factor = ini.GetInteger(neb_section, "oversampling_factor",
914 init.oversampling_factor);
915
919 ini.GetBoolean(neb_section, "minimize_endpoints_for_ipath",
921
922
923
935 toLowerCase(ini.Get("Dynamics", "thermostat", "andersen"));
939 ini.GetReal("Dynamics", "andersen_collision_period",
946 ini.GetReal("Dynamics", "langevin_friction",
951
952
953
955 ini.GetBoolean("Parallel Replica", "stop_after_transition",
958 ini.GetBoolean("Parallel Replica", "refine_transition",
961 ini.GetBoolean("Parallel Replica", "dephase_loop_stop",
964 ini.GetReal("Parallel Replica", "dephase_time",
970 ini.GetInteger("Parallel Replica", "dephase_loop_max",
973 ini.GetReal("Parallel Replica", "state_check_interval",
979 "Parallel Replica", "state_save_interval",
985 ini.GetReal("Parallel Replica", "post_transition_time",
990
991
992
999
1000
1001
1003 ini.Get("Replica Exchange", "temperature_distribution",
1008 ini.GetInteger("Replica Exchange", "exchange_trials",
1011 ini.GetReal("Replica Exchange", "sampling_time",
1019 ini.GetReal("Replica Exchange", "temperature_high",
1022 ini.GetReal("Replica Exchange", "exchange_period",
1027
1028
1029
1031 ini.GetReal("Hyperdynamics", "bb_rmd_time",
1036 toLowerCase(ini.Get("Hyperdynamics", "bb_boost_atomlist",
1041 ini.GetReal("Hyperdynamics", "bb_stretch_threshold",
1048 toLowerCase(ini.Get("Hyperdynamics", "bias_potential",
1050
1051
1052
1056 toLowerCase(ini.Get("Saddle Search", "min_mode_method",
1059 ini.GetReal("Saddle Search", "displace_magnitude",
1062 ini.GetReal("Saddle Search", "displace_radius",
1067 ini.GetInteger("Saddle Search", "max_iterations",
1070 "Saddle Search", "nonnegative_displacement_abort",
1073 ini.GetReal("Saddle Search", "max_single_displace",
1076 ini.GetReal("Saddle Search", "converged_force",
1079 ini.GetReal("Saddle Search", "perp_force_ratio",
1084 ini.GetInteger("Saddle Search", "nonlocal_count_abort",
1087 ini.GetReal("Saddle Search", "nonlocal_distance_abort",
1100 }
1101
1102 {
1103 std::string atomListStr =
1104 ini.Get("Saddle Search", "displace_atom_list", "");
1105 if (!atomListStr.empty()) {
1106 std::stringstream ss(atomListStr);
1107 std::string token;
1108 while (std::getline(ss, token, ',')) {
1109 size_t start = token.find_first_not_of(" \t");
1110 size_t end = token.find_last_not_of(" \t");
1111 if (start != std::string::npos) {
1113 std::stol(token.substr(start, end - start + 1)));
1114 }
1115 }
1116 }
1117 }
1119 ini.GetBoolean("Saddle Search", "confine_positive",
1123 ini.GetBoolean(
1124 "Saddle Search", "bowl_breakout",
1127 "Saddle Search", "bowl_active_atoms",
1130 ini.GetReal("Saddle Search", "confine_positive_min_move",
1133 ini.GetReal("Saddle Search", "confine_positive_scale_ratio",
1136 ini.GetReal("Saddle Search", "confine_positive_boost",
1139 "Saddle Search", "confine_positive_min_active",
1141 }
1145 ini.GetReal("Saddle Search", "dynamics_temperature",
1148 ini.GetReal(
1149 "Saddle Search", "dynamics_state_check_interval",
1155 ini.GetReal("Saddle Search", "dynamics_record_interval",
1161 "Saddle Search", "dynamics_linear_interpolation",
1164 ini.GetBoolean("Saddle Search", "remove_rotation",
1167 ini.GetReal("Saddle Search", "dynamics_max_init_curvature",
1170 ini.GetReal("Saddle Search", "zero_mode_abort_curvature",
1172
1173
1174
1176 ini.GetReal("Basin Hopping", "displacement",
1179 ini.GetReal("Basin Hopping", "push_apart_distance",
1182 ini.GetReal(
1183 "Basin Hopping", "initial_random_structure_probability",
1188 ini.GetInteger("Basin Hopping", "quenching_steps",
1191 ini.GetBoolean("Basin Hopping", "single_atom_displace",
1194 ini.GetBoolean("Basin Hopping", "significant_structure",
1197 toLowerCase(ini.Get("Basin Hopping", "displacement_algorithm",
1205 }
1207 ini.Get("Basin Hopping", "displacement_distribution",
1214 }
1216 ini.GetReal("Basin Hopping", "swap_probability",
1223 ini.GetBoolean("Basin Hopping", "adjust_displacement",
1226 ini.GetInteger("Basin Hopping", "adjust_period",
1229 ini.GetReal("Basin Hopping", "adjust_fraction",
1232 ini.GetReal("Basin Hopping", "target_ratio",
1235 ini.GetBoolean("Basin Hopping", "write_unique",
1239
1240
1241
1243 toLowerCase(ini.Get("Global Optimization", "move_method",
1246 toLowerCase(ini.Get("Global Optimization", "decision_method",
1253 }
1263 ini.GetReal("Global Optimization", "target_energy",
1265
1266
1267
1273 ini.GetReal("BGSD", "gradientfinitedifference",
1276 ini.GetReal("BGSD", "grad2energyconvergence",
1279 ini.GetReal("BGSD", "grad2forceconvergence",
1281
1282
1283
1288
1289
1290
1331
1333}
#define EONC_LOG_ERROR(...)
#define EONC_LOG_WARNING(...)
struct eonc::Parameters::basin_hopping_options_t basin_hopping_options
struct eonc::Parameters::socket_nwchem_options_t socket_nwchem_options
struct eonc::Parameters::monte_carlo_options_t monte_carlo_options
struct eonc::Parameters::catlearn_options_t catlearn_options
struct eonc::Parameters::constants_t constants
struct eonc::Parameters::gp_surrogate_options_t gp_surrogate_options
struct eonc::Parameters::global_optimization_options_t global_optimization_options
struct eonc::Parameters::hyperdynamics_options_t hyperdynamics_options
struct eonc::Parameters::ira_options_t ira_options
struct eonc::Parameters::gpr_dimer_options_t gpr_dimer_options
struct eonc::Parameters::tad_options_t tad_options
struct eonc::Parameters::ase_nwchem_options_t ase_nwchem_options
struct eonc::Parameters::ase_orca_options_t ase_orca_options
struct eonc::Parameters::replica_exchange_options_t replica_exchange_options
struct eonc::Parameters::oh_tst_options_t oh_tst_options
struct eonc::Parameters::xtb_options_t xtb_options
struct eonc::Parameters::artn_options_t artn_options
struct eonc::Parameters::ams_options_t ams_options
struct eonc::Parameters::rgpot_options_t rgpot_options
struct eonc::Parameters::zbl_options_t zbl_options
struct eonc::Parameters::davidson_options_t davidson_options
struct eonc::Parameters::metatomic_options_t metatomic_options
struct eonc::Parameters::prefactor_options_t prefactor_options
struct eonc::Parameters::hessian_options_t hessian_options
struct eonc::Parameters::process_search_options_t process_search_options
struct eonc::Parameters::lanczos_options_t lanczos_options
struct eonc::Parameters::bgsd_options_t bgsd_options
struct eonc::Parameters::parallel_replica_options_t parallel_replica_options
const char DISP_LISTED_ATOMS[]
const char DISP_NOT_FCC_OR_HCP[]
const char DISP_MIN_COORDINATED[]
const char DISP_LAST_ATOM[]
double random(long newSeed=0)
void set_write_con_forces(bool enabled) noexcept
Whether written .con frames carry "Forces of Component" sections.
std::string scm_pythondir
struct eonc::Parameters::ams_options_t::env_t env
std::string nperp_limitation
double push_apart_distance
bool single_atom_displace
std::string displacement_distribution
bool significant_structure
double initial_random_structure_probability
std::string displacement_algorithm
double grad2energy_convergence
double gradient_finite_difference
double grad2force_convergence
std::string phva_atoms
PHVA mobile/active set for the Ritz space; "All" = all free atoms.
bool diagonal_preconditioner
Heuristic | (H v)_i / v_i | preconditioner (not true diag(H); off by default).
bool estimate_neb_eigenvalues
std::string decision_method
std::string hyper_opt_method
struct eonc::Parameters::gpr_dimer_options_t::gpr_params_t gpr_params
std::string trans_opt_method
struct eonc::Parameters::gpr_dimer_options_t::debug_params_t debug_params
long max_outer_iterations
std::string rot_opt_method
long max_inner_iterations
struct eonc::Parameters::gpr_dimer_options_t::prune_params_t prune_params
struct eonc::Parameters::gpr_dimer_options_t::opt_params_t opt_params
std::string checkpoint_path
std::string bias_potential
std::string boost_atom_list
double symmetry_threshold
double distance_threshold
struct eonc::Parameters::neb_options_t::climbing_image_options_t::hybrid_dimer_t ocineb
struct eonc::Parameters::neb_options_t::spring_options_t::onsager_machlup_t om
struct eonc::Parameters::neb_options_t::spring_options_t::energy_weighting_t weighting
struct eonc::Parameters::neb_options_t::endpoint_options_t endpoints
struct eonc::Parameters::neb_options_t::path_initialization_t initialization
struct eonc::Parameters::neb_options_t::mmf_peak_options_t mmf_peaks
std::string reactant_filename
std::string product_filename
std::string symmetry_products
long max_iter_before_reset
long line_search_max_iter
double max_inverse_curvature
struct eonc::Parameters::optimizer_options_t::quickmin_t quickmin
struct eonc::Parameters::optimizer_options_t::sd_t sd
struct eonc::Parameters::optimizer_options_t::refine_t refine
struct eonc::Parameters::optimizer_options_t::cg_t cg
double state_check_interval_input
double record_interval_input
double dephase_time_input
double state_check_interval
std::string configuration
std::string filter_scheme
double minimization_offset
double sampling_time_input
double exchange_period_input
std::string temperature_distribution
std::string backend
"nwchemc", "cpmdc", "metatomic", or "xtb"
double uncertainty_threshold
bool torch_determinism_strict
double xtb_electronic_temperature
std::string extensions_directory
std::string engine_library
double max_init_curvature
double record_interval_input
double state_check_interval
bool linear_interpolation
double state_check_interval_input
long nonlocal_count_abort
std::string displace_type
double nonlocal_distance_abort
struct eonc::Parameters::saddle_search_options_t::dynamics_t dynamics
bool nonnegative_displacement_abort
struct eonc::Parameters::saddle_search_options_t::confine_positive_t confine_positive
double zero_mode_abort_curvature
double max_single_displace
std::vector< long > displace_atom_list
std::string unix_socket_path
std::string nwchem_settings