eOn 3.2.0
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
eonc::Parameters
p;
40
eonc::ParametersLoadAccess::potential_options
(p).
potential
=
41
eonc::PotType::METATOMIC
;
42
auto
&o =
eonc::ParametersLoadAccess::metatomic_options
(p);
43
o.model_path = cfg->
model_path
;
44
o.device =
nz
(cfg->
device
)[0] ? cfg->
device
:
"cpu"
;
45
o.length_unit =
nz
(cfg->
length_unit
)[0] ? cfg->
length_unit
:
"angstrom"
;
46
o.extensions_directory =
nz
(cfg->
extensions_directory
);
47
o.check_consistency = cfg->
check_consistency
!= 0;
48
o.uncertainty_threshold = cfg->
uncertainty_threshold
;
49
o.deterministic = !cfg->
torch_determinism_strict
;
// map: strict => det
50
o.deterministic_strict = cfg->
torch_determinism_strict
!= 0;
51
auto
pot = std::make_unique<RgpotMtaPot>();
52
pot->impl = std::make_unique<MetatomicPotential>(p);
53
return
pot.release();
54
}
catch
(
const
std::exception &e) {
55
set_err
(errbuf, errlen, e.what());
56
return
nullptr
;
57
}
catch
(...) {
58
set_err
(errbuf, errlen,
"create failed"
);
59
return
nullptr
;
60
}
61
}
62
63
void
rgpot_mta_destroy
(
RgpotMtaPot
*pot) {
delete
pot; }
64
65
int
rgpot_mta_force
(
RgpotMtaPot
*pot,
long
nAtoms,
const
double
*positions,
66
const
int
*atomicNrs,
double
*forces,
double
*energy,
67
double
*variance,
const
double
*box) {
68
if
(!pot || !pot->
impl
|| !positions || !atomicNrs || !forces || !energy ||
69
!box)
70
return
1;
71
try
{
72
pot->
impl
->
force
(nAtoms, positions, atomicNrs, forces, energy, variance,
73
box);
74
return
0;
75
}
catch
(...) {
76
return
2;
77
}
78
}
79
80
}
// 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:65
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:63
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:352
eonc::Parameters
Definition
Parameters.h:35
eonc::PotType::METATOMIC
@ METATOMIC
Definition
BaseStructures.h:67
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::ParametersLoadAccess::metatomic_options
static metatomic_options_t & metatomic_options(Parameters &p)
Definition
ParametersAccess.cpp:453
eonc::ParametersLoadAccess::potential_options
static potential_options_t & potential_options(Parameters &p)
Definition
ParametersAccess.cpp:282
eonc::potential_options_t::potential
PotType potential
Definition
ParametersOptions.h:51
client
potentials
Metatomic
MetatomicEngineAbi.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf