Loading...
Searching...
No Matches
MetatomicPotential.h
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** Copyright (c) 2010--present, eOn Development Team
7** All rights reserved.
8**
9** Repo:
10** https://github.com/TheochemUI/eOn
11*/
12#pragma once
13
14#include "eon/Potential.h"
15#include <mutex>
16
17// Metatomic and torch headers
18// These pragmas are included to suppress warnings from third-party libraries
19#pragma GCC diagnostic push
20#pragma GCC diagnostic ignored "-Wpedantic"
21#pragma GCC diagnostic ignored "-Wunused-parameter"
22#pragma GCC diagnostic ignored "-Wfloat-equal"
23#pragma GCC diagnostic ignored "-Wfloat-conversion"
24#pragma GCC diagnostic ignored "-Wsign-conversion"
25#pragma GCC diagnostic ignored "-Wold-style-cast"
26
27#include <torch/script.h>
28#include <torch/version.h>
29#if __has_include(<torch/cuda.h>)
30#include <torch/cuda.h>
31#endif
32#if __has_include(<torch/mps.h>)
33#include <torch/mps.h>
34#endif
35
36#include "metatensor/torch.hpp"
37#include "metatensor/torch/module.hpp"
38#include "metatomic/torch.hpp"
39
40#pragma GCC diagnostic pop
41
54private:
57 // --- Metatomic and Torch members ---
58 metatensor_torch::Module model_;
59 metatomic_torch::ModelCapabilities capabilities_;
60 std::vector<metatomic_torch::NeighborListOptions> nl_requests_;
61 metatomic_torch::ModelEvaluationOptions evaluations_options_;
62
63 torch::ScalarType dtype_;
64 c10::DeviceType device_type_;
65 torch::Device device_;
67 // -- Variants / output keys
68 std::string energy_key_;
70 std::string nc_forces_key_; // empty => conservative (autograd) forces
71 bool non_conservative_{false};
72 bool random_rotation_{false};
74 // --- Uncertainty handling ---
75 // If non-positive, uncertainty checks are effectively disabled.
77
91 metatensor_torch::TensorBlock
92 computeNeighbors(metatomic_torch::NeighborListOptions request, long nAtoms,
93 const double *positions, const double *box,
94 const bool periodic[3]);
95
96public:
103 MetatomicPotential(const Parameters &params);
104
108 ~MetatomicPotential() override = default;
109
128 void force(long nAtoms, const double *positions, const int *atomicNrs,
129 double *forces, double *energy, double *variance,
130 const double *box) override;
131
136 [[nodiscard]] bool isThreadSafe() const noexcept override { return false; }
137 [[nodiscard]] bool needsPerImageInstance() const noexcept override {
138 return false;
139 }
140
145 [[nodiscard]] bool supportsBatchEvaluation() const noexcept override {
146 return true;
147 }
148 void forceBatch(long nSystems, long nAtoms, const double *const *positions,
149 const int *const *atomicNrs, double *const *forces,
150 double *energies, double *variances,
151 const double *const *boxes) override;
152
153private:
154 mutable std::mutex inference_mutex_;
155};
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.
std::vector< metatomic_torch::NeighborListOptions > nl_requests_
bool needsPerImageInstance() const noexcept override
Whether NEB should create separate Potential instances per image for true parallel force evaluation.
bool supportsBatchEvaluation() const noexcept override
Batched evaluation via single shared instance.
metatomic_torch::ModelEvaluationOptions evaluations_options_
eonc::log::Scoped m_log
void forceBatch(long nSystems, long nAtoms, const double *const *positions, const int *const *atomicNrs, double *const *forces, double *energies, double *variances, const double *const *boxes) override
Evaluate forces for N systems in a single call.
metatomic_torch::ModelCapabilities capabilities_
bool isThreadSafe() const noexcept override
Single shared instance, serialized via mutex.
std::string energy_uncertainty_key_
c10::DeviceType device_type_
MetatomicPotential(const Parameters &params)
Constructor for the MetatomicPotential.
metatensor_torch::TensorBlock computeNeighbors(metatomic_torch::NeighborListOptions request, long nAtoms, const double *positions, const double *box, const bool periodic[3])
Computes neighbor list using the vesin library.
~MetatomicPotential() override=default
Destructor.
Parameters::metatomic_options_t m_metatomic_opts
metatensor_torch::Module model_
torch::ScalarType dtype_
Potential(PotType a_ptype)
Definition Potential.h:35
RAII helper for class-scoped logging.
Definition EonLogger.h:171