eOn 3.2.0
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
eonc::Parameters
params;
43
eonc::ParametersLoadAccess::potential_options
(params).
potential
=
44
eonc::PotType::METATOMIC
;
45
auto
&o =
eonc::ParametersLoadAccess::metatomic_options
(params);
46
o.model_path = cfg->
model_path
;
47
o.device =
nz
(cfg->
device
)[0] ? cfg->
device
:
"cpu"
;
48
o.length_unit =
nz
(cfg->
length_unit
)[0] ? cfg->
length_unit
:
"angstrom"
;
49
o.extensions_directory =
nz
(cfg->
extensions_directory
);
50
o.check_consistency = cfg->
check_consistency
!= 0;
51
o.uncertainty_threshold = cfg->
uncertainty_threshold
;
52
o.energy_output =
nz
(cfg->
energy_output
);
53
o.energy_uncertainty_output =
nz
(cfg->
energy_uncertainty_output
);
54
o.force_output =
nz
(cfg->
force_output
);
55
o.non_conservative = cfg->
non_conservative
!= 0;
56
o.random_rotation = cfg->
random_rotation
!= 0;
57
o.n_symmetry_rotations = cfg->
n_symmetry_rotations
;
58
o.deterministic = cfg->
deterministic
!= 0;
59
o.deterministic_strict = cfg->
deterministic_strict
!= 0;
60
o.variant.base =
nz
(cfg->
variant_base
);
61
o.variant.energy =
nz
(cfg->
variant_energy
);
62
o.variant.energy_uncertainty =
nz
(cfg->
variant_energy_uncertainty
);
63
o.variant.force =
nz
(cfg->
variant_force
);
64
65
auto
pot = std::make_unique<EonMtaPot>();
66
pot->impl = std::make_unique<MetatomicPotential>(params);
67
return
pot.release();
68
}
catch
(
const
std::exception &e) {
69
set_err
(errbuf, errlen, e.what());
70
return
nullptr
;
71
}
catch
(...) {
72
set_err
(errbuf, errlen,
"eon_mta_pot_create: unknown exception"
);
73
return
nullptr
;
74
}
75
}
76
77
void
eon_mta_pot_destroy
(
EonMtaPot
*pot) {
delete
pot; }
78
79
int
eon_mta_pot_force
(
EonMtaPot
*pot,
long
nAtoms,
const
double
*positions,
80
const
int
*atomicNrs,
double
*forces,
double
*energy,
81
double
*variance,
const
double
*box) {
82
if
(!pot || !pot->
impl
|| !positions || !atomicNrs || !forces || !energy ||
83
!box) {
84
return
1;
85
}
86
try
{
87
pot->
impl
->
force
(nAtoms, positions, atomicNrs, forces, energy, variance,
88
box);
89
return
0;
90
}
catch
(...) {
91
return
2;
92
}
93
}
94
95
}
// 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:79
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:77
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:352
eonc::Parameters
Definition
Parameters.h:35
eonc::PotType::METATOMIC
@ METATOMIC
Definition
BaseStructures.h:67
EonMtaConfig
Flat config for create (mirrors eonc::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::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
MetatomicCAbi.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf