eOn client
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
MetatomicCAbi.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
** C ABI surface of libmetatomic_pot.so.
7
*/
8
#define EON_MTA_BUILD
9
#include "
eon/potentials/Metatomic/metatomic_c_abi.h
"
10
11
#include "
eon/Parameters.h
"
12
#include "
eon/potentials/Metatomic/MetatomicPotential.h
"
13
14
#include <cstdio>
15
#include <exception>
16
#include <memory>
17
#include <string>
18
19
struct
EonMtaPot
{
20
std::unique_ptr<MetatomicPotential>
impl
;
21
};
22
23
static
const
char
*
nz
(
const
char
*s) {
return
s ? s :
""
; }
24
25
static
void
set_err
(
char
*errbuf,
size_t
errlen,
const
char
*msg) {
26
if
(!errbuf || errlen == 0)
27
return
;
28
std::snprintf(errbuf, errlen,
"%s"
, msg ? msg :
"unknown error"
);
29
}
30
31
extern
"C"
{
32
33
int
eon_mta_abi_version
(
void
) {
return
EON_MTA_ABI_VERSION
; }
34
35
EonMtaPot
*
eon_mta_pot_create
(
const
EonMtaConfig
*cfg,
char
*errbuf,
36
size_t
errlen) {
37
if
(!cfg || !cfg->
model_path
|| cfg->
model_path
[0] ==
'\0'
) {
38
set_err
(errbuf, errlen,
"eon_mta_pot_create: model_path is required"
);
39
return
nullptr
;
40
}
41
try
{
42
Parameters
params;
43
params.
potential_options
.
potential
= PotType::METATOMIC;
44
auto
&o = params.
metatomic_options
;
45
o.
model_path
= cfg->
model_path
;
46
o.device =
nz
(cfg->
device
)[0] ? cfg->
device
:
"cpu"
;
47
o.length_unit =
nz
(cfg->
length_unit
)[0] ? cfg->
length_unit
:
"angstrom"
;
48
o.extensions_directory =
nz
(cfg->
extensions_directory
);
49
o.check_consistency = cfg->
check_consistency
!= 0;
50
o.uncertainty_threshold = cfg->
uncertainty_threshold
;
51
o.energy_output =
nz
(cfg->
energy_output
);
52
o.energy_uncertainty_output =
nz
(cfg->
energy_uncertainty_output
);
53
o.force_output =
nz
(cfg->
force_output
);
54
o.non_conservative = cfg->
non_conservative
!= 0;
55
o.random_rotation = cfg->
random_rotation
!= 0;
56
o.n_symmetry_rotations = cfg->
n_symmetry_rotations
;
57
o.deterministic = cfg->
deterministic
!= 0;
58
o.deterministic_strict = cfg->
deterministic_strict
!= 0;
59
o.variant.base =
nz
(cfg->
variant_base
);
60
o.variant.energy =
nz
(cfg->
variant_energy
);
61
o.variant.energy_uncertainty =
nz
(cfg->
variant_energy_uncertainty
);
62
o.variant.force =
nz
(cfg->
variant_force
);
63
64
auto
pot = std::make_unique<EonMtaPot>();
65
pot->impl = std::make_unique<MetatomicPotential>(params);
66
return
pot.release();
67
}
catch
(
const
std::exception &e) {
68
set_err
(errbuf, errlen, e.what());
69
return
nullptr
;
70
}
catch
(...) {
71
set_err
(errbuf, errlen,
"eon_mta_pot_create: unknown exception"
);
72
return
nullptr
;
73
}
74
}
75
76
void
eon_mta_pot_destroy
(
EonMtaPot
*pot) {
delete
pot; }
77
78
int
eon_mta_pot_force
(
EonMtaPot
*pot,
long
nAtoms,
const
double
*positions,
79
const
int
*atomicNrs,
double
*forces,
double
*energy,
80
double
*variance,
const
double
*box) {
81
if
(!pot || !pot->
impl
|| !positions || !atomicNrs || !forces || !energy ||
82
!box) {
83
return
1;
84
}
85
try
{
86
pot->
impl
->
force
(nAtoms, positions, atomicNrs, forces, energy, variance,
87
box);
88
return
0;
89
}
catch
(...) {
90
return
2;
91
}
92
}
93
94
}
// extern "C"
set_err
static void set_err(char *errbuf, size_t errlen, const char *msg)
Definition
MetatomicCAbi.cpp:25
nz
static const char * nz(const char *s)
Definition
MetatomicCAbi.cpp:23
eon_mta_pot_force
int eon_mta_pot_force(EonMtaPot *pot, long nAtoms, const double *positions, const int *atomicNrs, double *forces, double *energy, double *variance, const double *box)
Evaluate energy + forces.
Definition
MetatomicCAbi.cpp:78
eon_mta_pot_create
EonMtaPot * eon_mta_pot_create(const EonMtaConfig *cfg, char *errbuf, size_t errlen)
Create pot.
Definition
MetatomicCAbi.cpp:35
eon_mta_pot_destroy
void eon_mta_pot_destroy(EonMtaPot *pot)
Definition
MetatomicCAbi.cpp:76
eon_mta_abi_version
int eon_mta_abi_version(void)
ABI version for loader checks.
Definition
MetatomicCAbi.cpp:33
MetatomicPotential.h
metatomic_c_abi.h
EON_MTA_ABI_VERSION
#define EON_MTA_ABI_VERSION
Definition
metatomic_c_abi.h:79
Parameters.h
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
EonMtaConfig
Flat config for create (mirrors Parameters::metatomic_options_t).
Definition
metatomic_c_abi.h:37
EonMtaConfig::device
const char * device
Definition
metatomic_c_abi.h:39
EonMtaConfig::extensions_directory
const char * extensions_directory
Definition
metatomic_c_abi.h:41
EonMtaConfig::random_rotation
int random_rotation
Definition
metatomic_c_abi.h:48
EonMtaConfig::variant_force
const char * variant_force
Definition
metatomic_c_abi.h:55
EonMtaConfig::model_path
const char * model_path
Definition
metatomic_c_abi.h:38
EonMtaConfig::length_unit
const char * length_unit
Definition
metatomic_c_abi.h:40
EonMtaConfig::n_symmetry_rotations
long n_symmetry_rotations
Definition
metatomic_c_abi.h:49
EonMtaConfig::non_conservative
int non_conservative
Definition
metatomic_c_abi.h:47
EonMtaConfig::check_consistency
int check_consistency
Definition
metatomic_c_abi.h:42
EonMtaConfig::energy_output
const char * energy_output
Definition
metatomic_c_abi.h:44
EonMtaConfig::deterministic
int deterministic
Definition
metatomic_c_abi.h:50
EonMtaConfig::force_output
const char * force_output
Definition
metatomic_c_abi.h:46
EonMtaConfig::variant_base
const char * variant_base
Definition
metatomic_c_abi.h:52
EonMtaConfig::deterministic_strict
int deterministic_strict
Definition
metatomic_c_abi.h:51
EonMtaConfig::energy_uncertainty_output
const char * energy_uncertainty_output
Definition
metatomic_c_abi.h:45
EonMtaConfig::variant_energy
const char * variant_energy
Definition
metatomic_c_abi.h:53
EonMtaConfig::variant_energy_uncertainty
const char * variant_energy_uncertainty
Definition
metatomic_c_abi.h:54
EonMtaConfig::uncertainty_threshold
double uncertainty_threshold
Definition
metatomic_c_abi.h:43
EonMtaPot
Definition
MetatomicCAbi.cpp:19
EonMtaPot::impl
std::unique_ptr< MetatomicPotential > impl
Definition
MetatomicCAbi.cpp:20
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
MetatomicCAbi.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf