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*/
8
9#include <array>
10#include <stdexcept>
11#include <string>
12
13namespace eonc {
14
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
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
58
59void 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
void force(long nAtoms, const double *positions, const int *atomicNrs, double *forces, double *energy, double *variance, const double *box) override
MetatomicDynPot(const Parameters &params)
static MetatomicLoader & instance()
struct eonc::Parameters::metatomic_options_t metatomic_options
Potential(PotType a_ptype)
Definition Potential.h:35
RAII resource manager for the ARTn C library with global synchronization.
static EonMtaConfig config_from_params(const Parameters &params)
Flat config for create (mirrors Parameters::metatomic_options_t).
const char * device
const char * extensions_directory
const char * variant_force
const char * model_path
const char * length_unit
long n_symmetry_rotations
const char * energy_output
const char * force_output
const char * variant_base
const char * energy_uncertainty_output
const char * variant_energy
const char * variant_energy_uncertainty
double uncertainty_threshold