Loading...
Searching...
No Matches
AMS.h
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#pragma once
13
14#include "eon/Matter.h"
15#include "eon/Potential.h"
16
17#include <absl/strings/numbers.h>
18#include <absl/strings/str_cat.h>
19#include <absl/strings/str_join.h>
20#include <absl/strings/str_split.h>
21#include <absl/strings/string_view.h>
22#include <boost/asio.hpp>
23#include <boost/process.hpp>
24#include <boost/process/environment.hpp>
25
26#include <algorithm>
27#include <filesystem>
28#include <format>
29#include <fstream>
30#include <string>
31#include <vector>
32
33class AMS : public Potential {
34
35public:
36 AMS(const Parameters &p);
37 ~AMS();
38 void initialize() {};
39 void cleanMemory(void);
40 void force(long N, const double *R, const int *atomicNrs, double *F,
41 double *U, double *variance, const double *box);
42
43private:
45 void passToSystem(long N, const double *R, const int *atomicNrs,
46 const double *box);
47 void smallSys(long N, const double *R, const int *atomicNrs,
48 const double *box);
50 void finishRunScript(std::ofstream &out);
52 void copyForces(long N, const std::vector<double> &frc, double *F);
53 // Switch between jobs
54 void switchjob();
55 // Write restart files
56 void write_restart();
59 // Generate run configuration
60 std::string generate_run(const Parameters &p);
61 // Environment
62 boost::process::native_environment nativenv;
63 int amsevals{0};
65 std::string cjob, pjob;
66 std::ofstream restartFrom;
67 const double forceConversion =
68 -51.4220862; // Forces from hartree/bohr to eV/Angstrom, -1 for the
69 // gradients
70 const double energyConversion = 27.2114; // Energy in hartree to eV
71 const double lengthConversion = 1.88973; // Coordinates from Angstrom to Bohr
72 void runAMS();
73 void updateCoord(long N, const double *R);
74 void extract_rkf(long N, std::string key);
75 double extract_scalar_rkf(std::string key); // single quantity
76 std::vector<double>
77 extract_cartesian_rkf(std::string key); // 3 x N quantities
78 // Debugging utilities
80 std::string readFile(std::filesystem::path path);
81 void recieveFromSystem(long N, double *F, double *U);
82};
std::string pjob
Definition AMS.h:65
void copyForces(long N, const std::vector< double > &frc, double *F)
Definition AMS.cpp:376
const double lengthConversion
Definition AMS.h:71
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
void switchjob()
Definition AMS.cpp:344
const double energyConversion
Definition AMS.h:70
std::string readFile(std::filesystem::path path)
std::ofstream restartFrom
Definition AMS.h:66
void cleanMemory(void)
Definition AMS.cpp:75
std::string engine
Definition AMS.h:57
std::vector< double > extract_cartesian_rkf(std::string key)
Definition AMS.cpp:211
bool can_restart
Definition AMS.h:64
bool first_run
Definition AMS.h:64
std::string cjob
Definition AMS.h:65
bool validate_order()
void write_restart()
Definition AMS.cpp:355
void initialize()
Definition AMS.h:38
boost::process::native_environment nativenv
Definition AMS.h:62
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
std::string xc
Definition AMS.h:57
std::string engine_lower
Definition AMS.h:58
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 updateCoord(long N, const double *R)
Definition AMS.cpp:282
std::string basis
Definition AMS.h:57
void recieveFromSystem(long N, double *F, double *U)
AMS(const Parameters &p)
Definition AMS.cpp:24
~AMS()
Definition AMS.cpp:77
int amsevals
Definition AMS.h:63
void finishRunScript(std::ofstream &out)
Copy 3N gradient components into the caller's force array.
Definition AMS.cpp:499
std::string model
Definition AMS.h:57
void force(long N, const double *R, const int *atomicNrs, double *F, double *U, double *variance, const double *box)
Definition AMS.cpp:389
std::string resources
Definition AMS.h:57
void extract_rkf(long N, std::string key)
const double forceConversion
Definition AMS.h:67
double extract_scalar_rkf(std::string key)
Definition AMS.cpp:152
Potential(PotType a_ptype)
Definition Potential.h:35