eOn client
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
MetatomicDynPot.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
#include "
eon/potentials/Metatomic/MetatomicDynPot.h
"
7
#include "
eon/potentials/Metatomic/MetatomicLoader.h
"
8
9
#include <array>
10
#include <stdexcept>
11
#include <string>
12
13
namespace
eonc
{
14
15
static
EonMtaConfig
config_from_params
(
const
Parameters
¶ms) {
16
const
auto
&o = params.
metatomic_options
;
17
EonMtaConfig
c{};
18
c.
model_path
= o.model_path.c_str();
19
c.
device
= o.device.c_str();
20
c.
length_unit
= o.length_unit.c_str();
21
c.
extensions_directory
= o.extensions_directory.c_str();
22
c.
check_consistency
= o.check_consistency ? 1 : 0;
23
c.
uncertainty_threshold
= o.uncertainty_threshold;
24
c.
energy_output
= o.energy_output.c_str();
25
c.
energy_uncertainty_output
= o.energy_uncertainty_output.c_str();
26
c.
force_output
= o.force_output.c_str();
27
c.
non_conservative
= o.non_conservative ? 1 : 0;
28
c.
random_rotation
= o.random_rotation ? 1 : 0;
29
c.
n_symmetry_rotations
= o.n_symmetry_rotations;
30
c.
deterministic
= o.deterministic ? 1 : 0;
31
c.
deterministic_strict
= o.deterministic_strict ? 1 : 0;
32
c.
variant_base
= o.variant.base.c_str();
33
c.
variant_energy
= o.variant.energy.c_str();
34
c.
variant_energy_uncertainty
= o.variant.energy_uncertainty.c_str();
35
c.
variant_force
= o.variant.force.c_str();
36
return
c;
37
}
38
39
MetatomicDynPot::MetatomicDynPot
(
const
Parameters
¶ms)
40
:
Potential
(
PotType
::
METATOMIC
) {
41
auto
&loader =
MetatomicLoader::instance
();
42
loader.require_loaded();
43
std::array<char, 1024> err{};
44
auto
cfg =
config_from_params
(params);
45
m_handle
= loader.create(&cfg, err.data(), err.size());
46
if
(!
m_handle
) {
47
throw
std::runtime_error(std::string(
"MetatomicDynPot: create failed: "
) +
48
err.data());
49
}
50
}
51
52
MetatomicDynPot::~MetatomicDynPot
() {
53
if
(
m_handle
) {
54
MetatomicLoader::instance
().
destroy
(
m_handle
);
55
m_handle
=
nullptr
;
56
}
57
}
58
59
void
MetatomicDynPot::force
(
long
nAtoms,
const
double
*positions,
60
const
int
*atomicNrs,
double
*forces,
61
double
*energy,
double
*variance,
62
const
double
*box) {
63
auto
&loader =
MetatomicLoader::instance
();
64
const
int
rc = loader.force(
m_handle
, nAtoms, positions, atomicNrs, forces,
65
energy, variance, box);
66
if
(rc != 0) {
67
throw
std::runtime_error(
"MetatomicDynPot: eon_mta_pot_force failed rc="
+
68
std::to_string(rc));
69
}
70
}
71
72
}
// namespace eonc
MetatomicDynPot.h
MetatomicLoader.h
eonc::MetatomicDynPot::force
void force(long nAtoms, const double *positions, const int *atomicNrs, double *forces, double *energy, double *variance, const double *box) override
Definition
MetatomicDynPot.cpp:59
eonc::MetatomicDynPot::~MetatomicDynPot
~MetatomicDynPot() override
Definition
MetatomicDynPot.cpp:52
eonc::MetatomicDynPot::MetatomicDynPot
MetatomicDynPot(const Parameters ¶ms)
Definition
MetatomicDynPot.cpp:39
eonc::MetatomicDynPot::m_handle
EonMtaPot * m_handle
Definition
MetatomicDynPot.h:31
eonc::MetatomicLoader::instance
static MetatomicLoader & instance()
Definition
MetatomicLoader.cpp:19
eonc::MetatomicLoader::destroy
destroy_fn destroy
Definition
MetatomicLoader.h:35
eonc::Parameters
Definition
Parameters.h:28
eonc::Parameters::metatomic_options
struct eonc::Parameters::metatomic_options_t metatomic_options
eonc::Potential::Potential
Potential(PotType a_ptype)
Definition
Potential.h:35
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:19
eonc::PotType
PotType
Definition
BaseStructures.h:36
eonc::PotType::METATOMIC
@ METATOMIC
Definition
BaseStructures.h:67
eonc::config_from_params
static EonMtaConfig config_from_params(const Parameters ¶ms)
Definition
MetatomicDynPot.cpp:15
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
client
potentials
Metatomic
MetatomicDynPot.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf