Loading...
Searching...
No Matches
MetatomicEngineLoader.h
Go to the documentation of this file.
1#pragma once
2/*
3** Thin RGPOT-metatomic backend: dlopen libmetatomic_engine.so (no torch).
4*/
5#include "metatomic_c_abi.h"
6#include <memory>
7#include <string>
8
10 std::string model_path;
11 std::string device{"cpu"};
12 std::string length_unit{"angstrom"};
14 bool check_consistency{false};
16 std::string engine_path; // optional explicit .so path
18};
19
21public:
26
27 [[nodiscard]] bool available() const noexcept { return m_pot != nullptr; }
28 void force(long N, const double *R, const int *atomicNrs, double *F,
29 double *U, double *variance, const double *box) const;
30
31private:
32 void *m_lib{nullptr};
33 RgpotMtaPot *m_pot{nullptr};
34 using create_fn = RgpotMtaPot *(*)(const RgpotMtaConfig *, char *, size_t);
35 using destroy_fn = void (*)(RgpotMtaPot *);
36 using force_fn = int (*)(RgpotMtaPot *, long, const double *, const int *,
37 double *, double *, double *, const double *);
40 force_fn m_force{nullptr};
41};
C ABI between Metatomic frontend and libmetatomic_engine.so.
void(*)(RgpotMtaPot *) destroy_fn
RgpotMtaPot *(*)(const RgpotMtaConfig *, char *, size_t) create_fn
MetatomicEngineLoader & operator=(const MetatomicEngineLoader &)=delete
void force(long N, const double *R, const int *atomicNrs, double *F, double *U, double *variance, const double *box) const
int(*)(RgpotMtaPot *, long, const double *, const int *, double *, double *, double *, const double *) force_fn
bool available() const noexcept
MetatomicEngineLoader(const MetatomicEngineOptions &opt)
MetatomicEngineLoader(const MetatomicEngineLoader &)=delete
Flat config (subset of MetatomicConfig).