eOn client
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
Parameters.cpp
Go to the documentation of this file.
1
/*
2
** This file is part of eOn.
3
**
4
** SPDX-License-Identifier: BSD-3-Clause
5
**
6
** Copyright (c) 2010--present, eOn Development Team
7
** All rights reserved.
8
**
9
** Repo:
10
** https://github.com/TheochemUI/eOn
11
*/
12
#include "
eon/Parameters.h
"
13
#include "
eon/ParametersINI.h
"
14
#include "
eon/ParametersJSON.h
"
15
#include "
eon/ParametersSSOT.h
"
16
#include "magic_enum/magic_enum.hpp"
17
18
#include <INIReader.h>
19
20
#include <cerrno>
21
#include <cstdio>
22
#include <cstring>
23
24
#include "
eon/EonLogger.h
"
25
26
Parameters::Parameters
() {
27
// Covered groups: defaults originate from schema/eon_params.capnp via
28
// apply_ssot_defaults (codegen). Uncovered groups still use NSDMI.
29
eonc::config::apply_ssot_defaults
(*
this
);
30
// Resolve computed fields via validate_and_link.
31
eonc::config::validate_and_link
(*
this
);
32
}
33
34
int
Parameters::load
(std::string filename) {
35
INIReader ini(filename);
36
if
(ini.ParseError() < 0) {
37
EONC_LOG_ERROR
(
"Can't load INI file: {}"
, filename);
38
return
1;
39
}
40
41
int
error =
eonc::config::load_ini
(ini, *
this
);
42
43
// Sanity Checks
44
if
(
parallel_replica_options
.state_check_interval >
dynamics_options
.time &&
45
magic_enum::enum_name<JobType>(
main_options
.job) ==
"parallel_replica"
) {
46
EONC_LOG_ERROR
(
"[Parallel Replica] state_check_interval must be <= time"
);
47
error = 1;
48
}
49
50
if
(!
neb_options
.initialization.input_path.empty() &&
51
neb_options
.initialization.method ==
NEBInit::LINEAR
) {
52
EONC_LOG_WARNING
(
53
"[Nudged Elastic Band] 'initial_path_in' is provided, but "
54
"'initializer' defaults to linear. "
55
"Ensure this is intentional, as the loaded path will not be "
56
"used without initializer set to file."
);
57
}
58
59
if
(
saddle_search_options
.dynamics.record_interval_input >
60
saddle_search_options
.dynamics.state_check_interval_input) {
61
EONC_LOG_ERROR
(
"[Saddle Search] dynamics_record_interval must be <= "
62
"dynamics_state_check_interval"
);
63
error = 1;
64
}
65
66
if
(
potential_options
.potential ==
PotType::AMS
||
67
potential_options
.potential ==
PotType::AMS_IO
) {
68
if
(
ams_options
.forcefield.empty() &&
ams_options
.model.empty() &&
69
ams_options
.xc.empty()) {
70
EONC_LOG_ERROR
(
"[AMS] Must provide atleast forcefield or model or xc"
);
71
error = 1;
72
}
73
74
if
(!
ams_options
.forcefield.empty() && !
ams_options
.model.empty() &&
75
!
ams_options
.xc.empty()) {
76
EONC_LOG_ERROR
(
"[AMS] Must provide either forcefield or model"
);
77
error = 1;
78
}
79
}
80
81
return
error;
82
}
83
84
int
Parameters::load
(
FILE
*file) {
85
// Legacy FILE* overload: read into string buffer, use INIReader buffer ctor
86
fseek(file, 0, SEEK_END);
87
long
size = ftell(file);
88
fseek(file, 0, SEEK_SET);
89
90
std::string buffer(size,
'\0'
);
91
fread(buffer.data(), 1, size, file);
92
93
INIReader ini(buffer.c_str(), buffer.size());
94
if
(ini.ParseError() < 0) {
95
EONC_LOG_ERROR
(
"Couldn't parse the ini file from FILE*"
);
96
return
1;
97
}
98
99
int
error =
eonc::config::load_ini
(ini, *
this
);
100
// Same validation as the filename overload
101
// (duplicated intentionally for now; will be extracted to validate())
102
if
(
parallel_replica_options
.state_check_interval >
dynamics_options
.time &&
103
magic_enum::enum_name<JobType>(
main_options
.job) ==
"parallel_replica"
) {
104
EONC_LOG_ERROR
(
"[Parallel Replica] state_check_interval must be <= time"
);
105
error = 1;
106
}
107
if
(
saddle_search_options
.dynamics.record_interval_input >
108
saddle_search_options
.dynamics.state_check_interval_input) {
109
EONC_LOG_ERROR
(
"[Saddle Search] dynamics_record_interval must be <= "
110
"dynamics_state_check_interval"
);
111
error = 1;
112
}
113
return
error;
114
}
115
116
int
Parameters::load_json
(
const
std::string &json_str) {
117
return
eonc::config::load_json
(json_str, *
this
);
118
}
119
120
std::string
Parameters::to_json
()
const
{
121
return
eonc::config::to_json
(*this).dump(2);
122
}
EonLogger.h
EONC_LOG_ERROR
#define EONC_LOG_ERROR(...)
Definition
EonLogger.h:262
EONC_LOG_WARNING
#define EONC_LOG_WARNING(...)
Definition
EonLogger.h:256
ParametersINI.h
ParametersJSON.h
ParametersSSOT.h
Parameters.h
Parameters::Parameters
Parameters()
Definition
Parameters.cpp:26
eonc::Parameters::load_json
int load_json(const std::string &json_str)
Definition
Parameters.cpp:116
eonc::Parameters::neb_options
struct eonc::Parameters::neb_options_t neb_options
eonc::Parameters::load
int load(std::string filename)
Definition
Parameters.cpp:34
eonc::Parameters::to_json
std::string to_json() const
Definition
Parameters.cpp:120
eonc::Parameters::potential_options
struct eonc::Parameters::potential_options_t potential_options
eonc::Parameters::ams_options
struct eonc::Parameters::ams_options_t ams_options
eonc::Parameters::saddle_search_options
struct eonc::Parameters::saddle_search_options_t saddle_search_options
eonc::Parameters::dynamics_options
struct eonc::Parameters::dynamics_options_t dynamics_options
eonc::Parameters::main_options
struct eonc::Parameters::main_options_t main_options
eonc::Parameters::parallel_replica_options
struct eonc::Parameters::parallel_replica_options_t parallel_replica_options
eonc::config::load_ini
int load_ini(INIReader &ini, Parameters ¶ms)
Parse all INI sections into the Parameters struct.
Definition
ParametersINI.cpp:42
eonc::config::apply_ssot_defaults
void apply_ssot_defaults(Parameters &p)
Apply SSoT defaults for covered groups (Main, Potential, Optimizer, Structure Comparison,...
Definition
ParametersSSOT.cpp:102
eonc::config::to_json
json to_json(const Parameters &p)
Serialize all Parameters to JSON.
Definition
ParametersJSON.cpp:46
eonc::config::validate_and_link
void validate_and_link(Parameters ¶ms)
Resolve cross-group defaults and time unit conversions.
Definition
ParametersINI.cpp:1335
eonc::config::load_json
int load_json(const std::string &json_str, Parameters ¶ms)
Load Parameters from a JSON string. Returns 0 on success.
Definition
ParametersJSON.cpp:389
eonc::PotType::AMS
@ AMS
Definition
BaseStructures.h:59
eonc::PotType::AMS_IO
@ AMS_IO
Definition
BaseStructures.h:60
eonc::NEBInit::FILE
@ FILE
Definition
BaseStructures.h:109
eonc::NEBInit::LINEAR
@ LINEAR
Definition
BaseStructures.h:109
client
Parameters.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf