eOn client
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
MetatomicEngineAbi.cpp
Go to the documentation of this file.
1
/*
2
** libmetatomic_engine.so — C ABI for RGPOT-metatomic (wraps
3
*MetatomicPotential).
4
** Fat eOn still uses MetatomicPotential directly via potential=Metatomic.
5
*/
6
#define RGPOT_MTA_ENGINE_BUILD
7
#include "
eon/Parameters.h
"
8
#include "
eon/potentials/Metatomic/MetatomicPotential.h
"
9
#include "
eon/potentials/Rgpot/metatomic_c_abi.h
"
10
#include <cstdio>
11
#include <cstring>
12
#include <exception>
13
#include <memory>
14
#include <string>
15
#include <vector>
16
17
struct
RgpotMtaPot
{
18
std::unique_ptr<MetatomicPotential>
impl
;
19
};
20
21
static
const
char
*
nz
(
const
char
*s) {
return
s ? s :
""
; }
22
static
void
set_err
(
char
*b,
size_t
n,
const
char
*m) {
23
if
(b && n)
24
std::snprintf(b, n,
"%s"
, m ? m :
"unknown"
);
25
}
26
27
extern
"C"
{
28
29
int
rgpot_mta_abi_version
(
void
) {
return
RGPOT_MTA_ABI_VERSION
; }
30
int
rgpot_mta_available
(
void
) {
return
1; }
31
32
RgpotMtaPot
*
rgpot_mta_create
(
const
RgpotMtaConfig
*cfg,
char
*errbuf,
33
size_t
errlen) {
34
if
(!cfg || !cfg->
model_path
|| !cfg->
model_path
[0]) {
35
set_err
(errbuf, errlen,
"model_path required"
);
36
return
nullptr
;
37
}
38
try
{
39
Parameters
p;
40
p.
potential_options
.
potential
= PotType::METATOMIC;
41
auto
&o = p.
metatomic_options
;
42
o.
model_path
= cfg->
model_path
;
43
o.device =
nz
(cfg->
device
)[0] ? cfg->
device
:
"cpu"
;
44
o.length_unit =
nz
(cfg->
length_unit
)[0] ? cfg->
length_unit
:
"angstrom"
;
45
o.extensions_directory =
nz
(cfg->
extensions_directory
);
46
o.check_consistency = cfg->
check_consistency
!= 0;
47
o.uncertainty_threshold = cfg->
uncertainty_threshold
;
48
o.deterministic = !cfg->
torch_determinism_strict
;
// map: strict => det
49
o.deterministic_strict = cfg->
torch_determinism_strict
!= 0;
50
auto
pot = std::make_unique<RgpotMtaPot>();
51
pot->impl = std::make_unique<MetatomicPotential>(p);
52
return
pot.release();
53
}
catch
(
const
std::exception &e) {
54
set_err
(errbuf, errlen, e.what());
55
return
nullptr
;
56
}
catch
(...) {
57
set_err
(errbuf, errlen,
"create failed"
);
58
return
nullptr
;
59
}
60
}
61
62
void
rgpot_mta_destroy
(
RgpotMtaPot
*pot) {
delete
pot; }
63
64
int
rgpot_mta_force
(
RgpotMtaPot
*pot,
long
nAtoms,
const
double
*positions,
65
const
int
*atomicNrs,
double
*forces,
double
*energy,
66
double
*variance,
const
double
*box) {
67
if
(!pot || !pot->
impl
|| !positions || !atomicNrs || !forces || !energy ||
68
!box)
69
return
1;
70
try
{
71
pot->
impl
->
force
(nAtoms, positions, atomicNrs, forces, energy, variance,
72
box);
73
return
0;
74
}
catch
(...) {
75
return
2;
76
}
77
}
78
79
}
// extern "C"
rgpot_mta_force
int rgpot_mta_force(RgpotMtaPot *pot, long nAtoms, const double *positions, const int *atomicNrs, double *forces, double *energy, double *variance, const double *box)
Energy + forces.
Definition
MetatomicEngineAbi.cpp:64
set_err
static void set_err(char *b, size_t n, const char *m)
Definition
MetatomicEngineAbi.cpp:22
nz
static const char * nz(const char *s)
Definition
MetatomicEngineAbi.cpp:21
rgpot_mta_abi_version
int rgpot_mta_abi_version(void)
Definition
MetatomicEngineAbi.cpp:29
rgpot_mta_create
RgpotMtaPot * rgpot_mta_create(const RgpotMtaConfig *cfg, char *errbuf, size_t errlen)
Definition
MetatomicEngineAbi.cpp:32
rgpot_mta_destroy
void rgpot_mta_destroy(RgpotMtaPot *pot)
Definition
MetatomicEngineAbi.cpp:62
rgpot_mta_available
int rgpot_mta_available(void)
Definition
MetatomicEngineAbi.cpp:30
MetatomicPotential.h
Parameters.h
metatomic_c_abi.h
C ABI between Metatomic frontend and libmetatomic_engine.so.
RGPOT_MTA_ABI_VERSION
#define RGPOT_MTA_ABI_VERSION
Definition
metatomic_c_abi.h:43
MetatomicPotential::force
void force(long nAtoms, const double *positions, const int *atomicNrs, double *forces, double *energy, double *variance, const double *box) override
Calculates the energy and forces for a given atomic configuration.
Definition
MetatomicPotential.cpp:320
eonc::Parameters
Definition
Parameters.h:28
eonc::Parameters::potential_options
struct eonc::Parameters::potential_options_t potential_options
eonc::Parameters::metatomic_options
struct eonc::Parameters::metatomic_options_t metatomic_options
RgpotMtaConfig
Flat config (subset of MetatomicConfig).
Definition
metatomic_c_abi.h:29
RgpotMtaConfig::extensions_directory
const char * extensions_directory
Definition
metatomic_c_abi.h:33
RgpotMtaConfig::uncertainty_threshold
double uncertainty_threshold
Definition
metatomic_c_abi.h:35
RgpotMtaConfig::device
const char * device
Definition
metatomic_c_abi.h:31
RgpotMtaConfig::model_path
const char * model_path
Definition
metatomic_c_abi.h:30
RgpotMtaConfig::check_consistency
int check_consistency
Definition
metatomic_c_abi.h:34
RgpotMtaConfig::length_unit
const char * length_unit
Definition
metatomic_c_abi.h:32
RgpotMtaConfig::torch_determinism_strict
int torch_determinism_strict
0=Fast, 1=Strict
Definition
metatomic_c_abi.h:40
RgpotMtaPot
Definition
MetatomicEngineAbi.cpp:17
RgpotMtaPot::impl
std::unique_ptr< MetatomicPotential > impl
Definition
MetatomicEngineAbi.cpp:18
eonc::Parameters::metatomic_options_t::model_path
std::string model_path
Definition
Parameters.h:376
eonc::Parameters::potential_options_t::potential
PotType potential
Definition
Parameters.h:67
client
potentials
Metatomic
MetatomicEngineAbi.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf