Loading...
Searching...
No Matches
AMS Class Reference

#include <AMS.h>

Inheritance diagram for AMS:

Public Member Functions

 AMS (const Parameters &p)
 ~AMS ()
void initialize ()
void cleanMemory (void)
void force (long N, const double *R, const int *atomicNrs, double *F, double *U, double *variance, const double *box)
Public Member Functions inherited from eonc::Potential
 Potential (PotType a_ptype)
 Potential (PotType a_ptype, const Parameters &)
 Potential (const Parameters &a_params)
virtual ~Potential ()
std::tuple< double, AtomMatrixget_ef (const AtomMatrix &pos, const VectorXi &atmnrs, const Matrix3d &box)
PotType getType () const
virtual bool isSurrogate () const noexcept
 Whether this is a surrogate (GP) potential.
virtual bool requiresIsolatedMoleculeLayout () const noexcept
 True for molecular QM / non-PBC backends (NWChem socket, ASE ORCA/NWChem, …).
virtual bool isThreadSafe () const noexcept
 Whether this potential's force() can be called from multiple threads on the SAME instance.
virtual bool isSharedInstanceThreadSafe () const noexcept
 Conservative gate for sharing one Potential instance across threads.
virtual bool needsPerImageInstance () const noexcept
 Whether NEB should create separate Potential instances per image for true parallel force evaluation.
virtual bool supportsBatchEvaluation () const noexcept
 Whether this potential supports batched evaluation of N systems in a single call.
virtual void forceBatch (long nSystems, long nAtoms, const double *const *positions, const int *const *atomicNrs, double *const *forces, double *energies, double *variances, const double *const *boxes)
 Evaluate forces for N systems in a single call.

Private Member Functions

void passToSystem (long N, const double *R, const int *atomicNrs, const double *box)
 < Creates a script to run AMS
void smallSys (long N, const double *R, const int *atomicNrs, const double *box)
 Flush, close and make the run script executable.
void finishRunScript (std::ofstream &out)
 Copy 3N gradient components into the caller's force array.
void copyForces (long N, const std::vector< double > &frc, double *F)
void switchjob ()
void write_restart ()
std::string generate_run (const Parameters &p)
void runAMS ()
void updateCoord (long N, const double *R)
void extract_rkf (long N, std::string key)
double extract_scalar_rkf (std::string key)
std::vector< double > extract_cartesian_rkf (std::string key)
bool validate_order ()
std::string readFile (std::filesystem::path path)
void recieveFromSystem (long N, double *F, double *U)

Private Attributes

std::string engine
std::string forcefield
std::string model
std::string xc
std::string resources
std::string basis
std::string engine_setup
std::string engine_lower
boost::process::native_environment nativenv
int amsevals {0}
bool first_run
bool can_restart
std::string cjob
std::string pjob
std::ofstream restartFrom
const double forceConversion
const double energyConversion = 27.2114
const double lengthConversion = 1.88973

Additional Inherited Members

Public Attributes inherited from eonc::Potential
std::atomic< size_t > forceCallCounter
Protected Attributes inherited from eonc::Potential
PotType ptype

Detailed Description

Definition at line 33 of file AMS.h.

Constructor & Destructor Documentation

◆ AMS()

AMS::AMS ( const Parameters & p)

Definition at line 24 of file AMS.cpp.

26 // Get the values from the configuration
27 // All the parameter values convert to lowercase in generate_run
28 this->engine = p.ams_options.engine;
30 this->model = p.ams_options.model;
31 this->xc = p.ams_options.xc;
33 this->basis = p.ams_options.basis;
34 this->engine_setup = generate_run(p);
35 // Environment
36 // TODO: Add more checks for how this can be set
37 if (p.ams_options.env.amshome.empty() &&
38 p.ams_options.env.scm_tmpdir.empty() &&
39 p.ams_options.env.scmlicense.empty() &&
40 p.ams_options.env.scm_pythondir.empty() &&
41 p.ams_options.env.amsbin.empty() &&
42 p.ams_options.env.amsresources.empty()) {
43 nativenv = boost::this_process::environment();
44 } else {
45 nativenv = boost::this_process::environment();
46 // Some of these can derive from the others
47 nativenv["AMSHOME"] = p.ams_options.env.amshome;
48 nativenv["SCM_TMPDIR"] = p.ams_options.env.scm_tmpdir;
49 nativenv["SCMLICENSE"] = p.ams_options.env.scmlicense;
50 nativenv["SCM_PYTHONDIR"] = p.ams_options.env.scm_pythondir;
51 nativenv["AMSBIN"] = p.ams_options.env.amsbin;
52 nativenv["AMSRESOURCES"] = p.ams_options.env.amsresources;
53 nativenv["PATH"] += p.ams_options.env.amsbin;
54 }
55 // Do not pass "" in the config files
56 // std::cout<<nativenv["PATH"].to_string()<<std::endl;
57 amsevals = 0;
58 // TODO: Optimize and reuse existing files Currently each Matter will
59 // recreate the folders It should instead figure out if results exist and
60 // use them
61 this->first_run = true;
62 // Determine if the engine supports restarts
63 if (engine == "MOPAC") {
64 this->can_restart = false;
65 this->cjob = "amsResults";
66 this->pjob = "amsResults";
67 } else {
68 this->can_restart = true;
69 this->cjob = "firstRun";
70 this->pjob = "secondRun";
71 }
72 return;
73}
std::string pjob
Definition AMS.h:65
std::string forcefield
Definition AMS.h:57
std::string generate_run(const Parameters &p)
Definition AMS.cpp:511
std::string engine_setup
Definition AMS.h:58
std::string engine
Definition AMS.h:57
bool can_restart
Definition AMS.h:64
bool first_run
Definition AMS.h:64
std::string cjob
Definition AMS.h:65
boost::process::native_environment nativenv
Definition AMS.h:62
std::string xc
Definition AMS.h:57
std::string basis
Definition AMS.h:57
int amsevals
Definition AMS.h:63
std::string model
Definition AMS.h:57
std::string resources
Definition AMS.h:57
struct eonc::Parameters::ams_options_t ams_options
Potential(PotType a_ptype)
Definition Potential.h:35
struct eonc::Parameters::ams_options_t::env_t env

◆ ~AMS()

AMS::~AMS ( )

Definition at line 77 of file AMS.cpp.

77{ cleanMemory(); }
void cleanMemory(void)
Definition AMS.cpp:75

Member Function Documentation

◆ cleanMemory()

void AMS::cleanMemory ( void )

Definition at line 75 of file AMS.cpp.

75{ return; }

◆ copyForces()

void AMS::copyForces ( long N,
const std::vector< double > & frc,
double * F )
private

Definition at line 376 of file AMS.cpp.

380 {
381 throw std::runtime_error("Could not write the restart block to "
382 "myrestart.in");
383 }
384 return;
385}
386
387void AMS::copyForces(long N, const std::vector<double> &frc, double *F) {
void copyForces(long N, const std::vector< double > &frc, double *F)
Definition AMS.cpp:376

◆ extract_cartesian_rkf()

std::vector< double > AMS::extract_cartesian_rkf ( std::string key)
private

Definition at line 211 of file AMS.cpp.

211 {
212 std::string execString;
213 std::vector<std::string> execDat, innerDat;
214 boost::asio::io_context rkf;
215 std::future<std::string> rkf_out_future, rkf_err_future;
216 std::string rkfout, rkferr;
217 double felem, x;
218 std::vector<double> extracted;
219 execString = std::format("dmpkf {}.results/{}.rkf AMSResults%{}", this->cjob,
220 this->engine_lower, key);
221 // std::cout << execString << "\n";
222
223 // Extract
224 bp::child c(execString, nativenv, // execute with the environment
225 bp::std_in.close(), // no input
226 bp::std_out > rkf_out_future, // STDOUT
227 bp::std_err > rkf_err_future, // STDERR
228 rkf);
229
230 rkf.run(); // this blocks until the end of the command
231 // Populate the strings
232 rkfout = rkf_out_future.get();
233 rkferr = rkf_err_future.get();
234
235 if (rkferr.find("ERROR") != std::string::npos) {
236 throw std::runtime_error(std::format(
237 "\n AMS error while extracting {}, got:\n {}", key, rkferr));
238 } else {
239 // std::cout << "Extracting " << key << std::endl;
240 }
241
242 execDat = absl::StrSplit(rkfout, '\n');
243 // Assume gradients or some other x y z property
244 for (int i = 3; i < execDat.size(); i++) {
245 // There exist one per atom, the number of which equals N
246 // The first three lines hold the header files as before
247 std::vector<std::string> strrow = absl::StrSplit(execDat[i], ' ');
248 for (auto elem : strrow) {
249 // This loop uses an auto variable since some of the elements of strrow
250 // often evaluate to ' '
251 // TODO: Optimize, perhaps with a regex
252 // [0] = ""
253 // [1] = ""
254 // [2] = ""
255 // [3] = "0.798885933949825835E-004"
256 // [4] = ""
257 // [5] = "-0.755400038198822616E-004"
258 // [6] = ""
259 // [7] = ""
260 // [8] = "0.457005740252359742E-004"
261 if (!elem.empty() && absl::SimpleAtod(elem, &x)) {
262 felem = x * this->forceConversion;
263 // std::cout << std::format(
264 // "\n Gradient element={:.4f} Hartree/Bohr from AMS\n Force "
265 // "element={:.4f} eV/Angstrom\n", x, felem);
266 extracted.emplace_back(felem);
267 }
268 }
269 }
270 // // Debug
271 // int counter = 0;
272 // for (int a = 0; a < N * 3; a++) {
273 // std::cout << std::format("{:.25e} ", forces[a]);
274 // counter++;
275 // if (counter % 3 == 0) {
276 // std::cout << std::endl;
277 // }
278 // }
279 return extracted;
280}
std::string engine_lower
Definition AMS.h:58
const double forceConversion
Definition AMS.h:67
void close(Handle h) noexcept
Definition DynLib.h:77

◆ extract_rkf()

void AMS::extract_rkf ( long N,
std::string key )
private

◆ extract_scalar_rkf()

double AMS::extract_scalar_rkf ( std::string key)
private

Definition at line 152 of file AMS.cpp.

152 {
153 // The logic here handles the extraction asynchronously, as we lack
154 // interest in processing this output line by line, and would prefer to
155 // have it all in one place
156 std::string execString;
157 std::vector<std::string> execDat;
158 boost::asio::io_context rkf;
159 std::future<std::string> rkf_out_future, rkf_err_future;
160 std::string rkfout, rkferr;
161 double xval, x;
162 std::vector<double> extracted;
163 execString = std::format("dmpkf {}.results/{}.rkf AMSResults%{}", this->cjob,
164 this->engine_lower, key);
165 // std::cout << execString << "\n";
166 // Extract
167 bp::child c(execString, nativenv, // execute with the environment
168 bp::std_in.close(), // no input
169 bp::std_out > rkf_out_future, // STDOUT
170 bp::std_err > rkf_err_future, // STDERR
171 rkf);
172
173 rkf.run(); // this blocks until the end of the command
174 // Populate the strings
175 rkfout = rkf_out_future.get();
176 rkferr = rkf_err_future.get();
177 if (rkferr.find("ERROR") != std::string::npos) {
178 throw std::runtime_error(std::format(
179 "\n AMS error while extracting {}, got:\n {}", key, rkferr));
180 } else {
181 // std::cout << "Extracting " << key << std::endl;
182 }
183
184 execDat = absl::StrSplit(rkfout, '\n');
185 // Is energy or some other scalar property
186 // First 3 lines hold the headers
187 // [0] = "AMSResults "
188 // [1] = "Energy "
189 // [2] = " 1 1 2"
190 // [3] = " 0.135012547958282714E+000"
191 // [4] = ""
192 if (execDat.size() < 4) {
193 throw std::runtime_error(
194 std::format("\n AMS returned {} lines for {}, too few to hold a value",
195 execDat.size(), key));
196 }
197 if (absl::SimpleAtod(execDat[3], &x)) {
198 xval = x * this->energyConversion;
199 // std::cout << std::format(
200 // "\n Got {:.4f} Hartree from AMS and converted to {:.4f} eV\n", x,
201 // xval);
202 return xval;
203 } else {
204 throw std::runtime_error(
205 std::format("\n Expected {}, got {} instead", key, execDat[3]));
206 }
207 // Never reach here
208 throw std::runtime_error("Generic AMS dmpkf scalar error \n");
209}
const double energyConversion
Definition AMS.h:70

◆ finishRunScript()

void AMS::finishRunScript ( std::ofstream & out)
private

Copy 3N gradient components into the caller's force array.

Definition at line 499 of file AMS.cpp.

◆ force()

void AMS::force ( long N,
const double * R,
const int * atomicNrs,
double * F,
double * U,
double * variance,
const double * box )
virtual

Implements eonc::Potential.

Definition at line 389 of file AMS.cpp.

390 {
391 throw std::runtime_error(
392 std::format("\n AMS returned {} gradient components, expected {}",
393 frc.size(), 3 * N));
394 }
395 for (long i = 0; i < 3 * N; i++) {
396 F[i] = frc[i];
397 }
398}
399
400void AMS::force(long N, const double *R, const int *atomicNrs, double *F,
401 double *U, double *variance, const double *box) {
402 variance = nullptr;
403 if (not can_restart or first_run) {
404 // std::cout << std::format("\nCAN_RESTART:{} FIRST_RUN:{}\n", can_restart,
405 // first_run); This holds true for all engines with no restart Also if an
406 // engine supports being restarted, the first run needs this
407 passToSystem(N, R, atomicNrs, box);
408 runAMS();
409 copyForces(N, extract_cartesian_rkf("Gradients"), F);
410 *U = extract_scalar_rkf("Energy");
411 // Update, will still not matter for those without restarts
412 if (can_restart) {
413 first_run = false;
414 // We need the "previous job" to pre-populate
415 // clang-format off
416 // std::cout<<std::format("\nMoving {} to {} before switching during the first job\n", cjob, pjob);
417 const auto copyOptions = std::filesystem::copy_options::overwrite_existing
418 | std::filesystem::copy_options::recursive
419 ;
420 // clang-format on
421 std::filesystem::copy(std::format("./{}.results/", cjob),
422 std::format("./{}.results/", pjob), copyOptions);
423 }
424 return;
425 } else {
426 // std::cout << std::format("\nCAN_RESTART:{} FIRST_RUN:{}\n", can_restart,
427 // first_run);
428 smallSys(N, R, atomicNrs, box); // writes run_AMS.sh
std::vector< double > extract_cartesian_rkf(std::string key)
Definition AMS.cpp:211
void smallSys(long N, const double *R, const int *atomicNrs, const double *box)
Flush, close and make the run script executable.
Definition AMS.cpp:474
void runAMS()
Definition AMS.cpp:122
void passToSystem(long N, const double *R, const int *atomicNrs, const double *box)
< Creates a script to run AMS
Definition AMS.cpp:430
void force(long N, const double *R, const int *atomicNrs, double *F, double *U, double *variance, const double *box)
Definition AMS.cpp:389
double extract_scalar_rkf(std::string key)
Definition AMS.cpp:152

◆ generate_run()

std::string AMS::generate_run ( const Parameters & p)
private

Definition at line 511 of file AMS.cpp.

512 {
513 throw std::runtime_error(
514 std::format("Could not write the AMS input to {}", kRunScript));
515 }
516 if (chmod(kRunScript, S_IRWXU) != 0) {
517 throw std::runtime_error(
518 std::format("Could not make {} executable", kRunScript));
519 }
520}
521
522std::string AMS::generate_run(const Parameters &p) {
523 std::string engine_block; // Shadows the class variable
524 // TODO: Use args everywhere, cleaner logic
525 // Ensure capitals and existence
526 engine.empty()
527 ? throw std::runtime_error("AMS Engine is required \n")
528 : std::transform(engine.begin(), engine.end(), engine.begin(), ::toupper);
529 // engine functions uniquely, it serves as a filename, so we store
530 // engine_lower as a lowercase version too
532 std::transform(engine.begin(), engine.end(), engine_lower.begin(), ::tolower);
533 // Prepare the block
534 if (engine == "MOPAC") {
535 model.empty()
536 ? throw std::runtime_error("MOPAC needs a model\n")
537 : std::transform(model.begin(), model.end(), model.begin(), ::toupper);
538 std::string engine_formatter = R"(
539 Engine {}
540 Model {}
541 EndEngine
542)";
543 engine_block = std::format(engine_formatter, engine, model);
544 return engine_block;
545 } else if (engine == "ADF" || engine == "BAND") {
546 basis.empty()
547 ? throw std::runtime_error("ADF/BAND need a basis\n")
548 : std::transform(basis.begin(), basis.end(), basis.begin(), ::toupper);
549 xc.empty() ? throw std::runtime_error("ADF/BAND need a functional\n")
550 : std::transform(xc.begin(), xc.end(), xc.begin(), ::toupper);
551 std::string engine_formatter = R"(
552 Engine {}
553 Basis
554 Type {}
555 End
556
557 XC
558 {}
559 End
560 EndEngine
561 )";
562 engine_block = std::format(engine_formatter, engine, basis, xc);

◆ initialize()

void AMS::initialize ( )
inline

Definition at line 38 of file AMS.h.

38{};

◆ passToSystem()

void AMS::passToSystem ( long N,
const double * R,
const int * atomicNrs,
const double * box )
private

< Creates a script to run AMS

Definition at line 430 of file AMS.cpp.

444{
445 std::ofstream out(kRunScript, std::ios::trunc);
446 if (!out) {
447 throw std::runtime_error(
448 std::format("Could not open {} for writing", kRunScript));
449 }
450
451 out << "#!/bin/sh\n";
452 out << std::format("export AMS_JOBNAME={}\n", cjob);
453 out << "$AMSBIN/ams --delete-old-results <<eor\n";
454 out << "Task SinglePoint\n";
455 out << "System\n";
456 out << " Atoms\n";
457 for (long i = 0; i < N; i++) {
458 out << std::format(" {}\t{:.19f}\t{:.19f}\t{:.19f}\n",
459 atomicNumber2symbol(atomicNrs[i]), R[i * 3 + 0],
460 R[i * 3 + 1], R[i * 3 + 2]);
461 }
462 out << " End\n";
463 if (not model.empty() || not forcefield.empty()) {
464 out << " Lattice\n";
465 for (int i = 0; i < 3; i++) {
466 out << std::format(" {:.19f}\t{:.19f}\t{:.19f}\n", box[i * 3 + 0],
467 box[i * 3 + 1], box[i * 3 + 2]);
468 }
469 out << " End\n";
470 }
471 out << "End\n";
472 out << engine_setup;

◆ readFile()

std::string AMS::readFile ( std::filesystem::path path)
private

◆ recieveFromSystem()

void AMS::recieveFromSystem ( long N,
double * F,
double * U )
private

◆ runAMS()

void AMS::runAMS ( )
private

Definition at line 122 of file AMS.cpp.

122 {
123 boost::asio::io_context amsRun;
124 std::future<std::string> run_out_future, run_err_future;
125 std::string runout, runerr;
126 if (chmod(kRunScript, S_IRWXU) != 0) {
127 throw std::runtime_error(
128 std::format("Could not make {} executable", kRunScript));
129 }
130 nativenv["AMS_JOBNAME"] = cjob;
131 // assert(validate_order() == true); // TODO: Debug only
132 bp::child c(std::string(kRunScript),
133 nativenv, // set the input
134 bp::std_in.close(), // no input
135 bp::std_out > run_out_future, // STDOUT
136 bp::std_err > run_err_future, // STDERR
137 amsRun);
138 amsRun.run();
139 runout = run_out_future.get();
140 runerr = run_err_future.get();
141 if (runerr.find("ERROR") != std::string::npos) {
142 bp::spawn("cat myrestart.in");
143 bp::spawn("cat run_AMS.sh");
144 throw std::runtime_error("\n AMS error while running");
145 } else {
146 this->amsevals = amsevals + 1;
147 // std::cout << "Run completed normally" << std::endl;
148 // std::cerr << "NORMAL TERMINATION\n";
149 }
150}

◆ smallSys()

void AMS::smallSys ( long N,
const double * R,
const int * atomicNrs,
const double * box )
private

Flush, close and make the run script executable.

Definition at line 474 of file AMS.cpp.

476 {
477 out << "@include myrestart.in\n";
478 }
479 out << "eor";
480
481 finishRunScript(out);
482 return;
483}
484
485void AMS::smallSys(long N, const double *R, const int *atomicNrs,
486 const double *box)
487// Creating the truncated input file that the AMS driver reads
488{
489 std::ofstream out(kRunScript, std::ios::trunc);
490 if (!out) {
491 throw std::runtime_error(
492 std::format("Could not open {} for writing", kRunScript));
493 }
494
495 out << "#!/bin/sh\n";
496 out << std::format("export AMS_JOBNAME={}\n", cjob);
497 out << "$AMSBIN/ams --delete-old-results <<eor\n";
void finishRunScript(std::ofstream &out)
Copy 3N gradient components into the caller's force array.
Definition AMS.cpp:499

◆ switchjob()

void AMS::switchjob ( )
private

Definition at line 344 of file AMS.cpp.

344 {
345 std::string tmp;
346 // std::cout << std::format("\nEntered Switch:\nCurrent:{}, Previous:{}\n",
347 // cjob, pjob);
348 tmp = this->cjob;
349 this->cjob = this->pjob;
350 this->pjob = tmp;
351 // std::cout << std::format("\nSwitched\n Current:{}, Previous:{}\n", cjob,
352 // pjob);
353}

◆ updateCoord()

void AMS::updateCoord ( long N,
const double * R )
private

Definition at line 282 of file AMS.cpp.

282 {
283 // The logic used here requires us to update the PREVIOUS job, since that
284 // functions as the one from which the calculation restarts
285 // Only the third line presents vague complexity
286 // https://www.scm.com/doc/Scripting/Commandline_Tools/KF_command_line_utilities.html
287 std::ofstream updCoord;
288 std::string execString, coordDump, newCoord;
289 std::vector<std::string> execDat;
290 boost::asio::io_context coordio;
291 std::future<std::string> err, rdump;
292 std::vector<double> gradients;
293 // Prep new run
294 // Get the previous run's coordinates
295 execString = std::format("dmpkf {}.results/ams.rkf Molecule%Coords", pjob);
296 // std::cout << execString << "\n";
297 // Store Coordinates
298 // TODO: Simplify this, we only need the first few lines
299 bp::child cprog(execString, nativenv, bp::std_in.close(), bp::std_out > rdump,
300 bp::std_err > err, coordio);
301 coordio.run();
302 execDat = absl::StrSplit(rdump.get(), '\n');
303 // Get the first three lines
304 int counter = 0;
305 for (auto j : execDat) {
306 if (counter >= 3) {
307 break;
308 } else {
309 absl::StrAppend(&newCoord, j, "\n");
310 }
311 counter++;
312 }
313 // Put the rest of the coordinates
314 counter = 0;
315 for (int a = 0; a < N * 3; a++) {
316 absl::StrAppend(&newCoord, (R[a] * lengthConversion), " ");
317 counter++;
318 if (counter % 3 == 0) {
319 absl::StrAppend(&newCoord, "\n");
320 }
321 }
322 coordDump = "#!/bin/sh\n udmpkf ";
323 absl::StrAppend(&coordDump, pjob, ".results/ams.rkf <<EOF\n", newCoord,
324 "EOF");
325 // std::cout << coordDump;
326 updCoord.open("updCoord.sh", std::ios::trunc);
327 if (!updCoord) {
328 throw std::runtime_error("Could not open updCoord.sh for writing");
329 }
330 updCoord << coordDump;
331 updCoord.close();
332 if (!updCoord) {
333 throw std::runtime_error("Could not write the coordinates to updCoord.sh");
334 }
335 // bp::spawn("chmod +x updCoord.sh");
336 if (chmod("updCoord.sh", S_IRWXU) != 0) {
337 throw std::runtime_error("Could not make updCoord.sh executable");
338 }
339 bp::child cuprog("updCoord.sh", nativenv, bp::std_err > bp::null);
340 cuprog.wait();
341 return;
342}
const double lengthConversion
Definition AMS.h:71

◆ validate_order()

bool AMS::validate_order ( )
private

◆ write_restart()

void AMS::write_restart ( )
private

Definition at line 355 of file AMS.cpp.

355 {
356 std::string restart_formatter;
357 if (can_restart) {
358 restart_formatter = R"(
359 EngineRestart {0}.results/{1}.rkf
360 LoadSystem
361 File {0}.results/ams.rkf
362 Section Molecule
363 End
364 )";
365 } else {
366 restart_formatter = R"(
367 LoadSystem
368 File {0}.results/ams.rkf
369 Section Molecule
370 End
371 )";
372 }
373 std::string restart_data = std::format(restart_formatter, pjob, engine_lower);
374 restartFrom.open("myrestart.in", std::ios::trunc);
std::ofstream restartFrom
Definition AMS.h:66

Member Data Documentation

◆ amsevals

int AMS::amsevals {0}
private

Definition at line 63 of file AMS.h.

63{0};

◆ basis

std::string AMS::basis
private

Definition at line 57 of file AMS.h.

◆ can_restart

bool AMS::can_restart
private

Definition at line 64 of file AMS.h.

◆ cjob

std::string AMS::cjob
private

Definition at line 65 of file AMS.h.

◆ energyConversion

const double AMS::energyConversion = 27.2114
private

Definition at line 70 of file AMS.h.

◆ engine

std::string AMS::engine
private

Definition at line 57 of file AMS.h.

◆ engine_lower

std::string AMS::engine_lower
private

Definition at line 58 of file AMS.h.

◆ engine_setup

std::string AMS::engine_setup
private

Definition at line 58 of file AMS.h.

◆ first_run

bool AMS::first_run
private

Definition at line 64 of file AMS.h.

◆ forceConversion

const double AMS::forceConversion
private
Initial value:
=
-51.4220862

Definition at line 67 of file AMS.h.

◆ forcefield

std::string AMS::forcefield
private

Definition at line 57 of file AMS.h.

◆ lengthConversion

const double AMS::lengthConversion = 1.88973
private

Definition at line 71 of file AMS.h.

◆ model

std::string AMS::model
private

Definition at line 57 of file AMS.h.

◆ nativenv

boost::process::native_environment AMS::nativenv
private

Definition at line 62 of file AMS.h.

◆ pjob

std::string AMS::pjob
private

Definition at line 65 of file AMS.h.

◆ resources

std::string AMS::resources
private

Definition at line 57 of file AMS.h.

◆ restartFrom

std::ofstream AMS::restartFrom
private

Definition at line 66 of file AMS.h.

◆ xc

std::string AMS::xc
private

Definition at line 57 of file AMS.h.


The documentation for this class was generated from the following files:
  • /home/runner/work/eOn/eOn/include/eon/potentials/AMS/AMS.h
  • /home/runner/work/eOn/eOn/client/potentials/AMS/AMS.cpp