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/Parameters.h"
15#include "eon/Potential.h"
16#include <mutex>
17
18// Metatomic and torch headers
19// These pragmas are included to suppress warnings from third-party libraries
20#pragma GCC diagnostic push
21#pragma GCC diagnostic ignored "-Wpedantic"
22#pragma GCC diagnostic ignored "-Wunused-parameter"
23#pragma GCC diagnostic ignored "-Wfloat-equal"
24#pragma GCC diagnostic ignored "-Wfloat-conversion"
25#pragma GCC diagnostic ignored "-Wsign-conversion"
26#pragma GCC diagnostic ignored "-Wold-style-cast"
27
28#include <torch/script.h>
29#include <torch/version.h>
30#if __has_include(<torch/cuda.h>)
31#include <torch/cuda.h>
32#endif
33#if __has_include(<torch/mps.h>)
34#include <torch/mps.h>
35#endif
36
37#include "metatensor/torch.hpp"
38#include "metatensor/torch/module.hpp"
39#include "metatomic/torch.hpp"
40
41#pragma GCC diagnostic pop
42
55private:
58 // --- Metatomic and Torch members ---
59 metatensor_torch::Module model_;
60 metatomic_torch::ModelCapabilities capabilities_;
61 std::vector<metatomic_torch::NeighborListOptions> nl_requests_;
62 metatomic_torch::ModelEvaluationOptions evaluations_options_;
63
64 torch::ScalarType dtype_;
65 c10::DeviceType device_type_;
66 torch::Device device_;
68 // -- Variants / output keys
69 std::string energy_key_;
71 std::string nc_forces_key_; // empty => conservative (autograd) forces
72 bool non_conservative_{false};
73 bool random_rotation_{false};
75 // --- Uncertainty handling ---
76 // If non-positive, uncertainty checks are effectively disabled.
78
92 metatensor_torch::TensorBlock
93 computeNeighbors(metatomic_torch::NeighborListOptions request, long nAtoms,
94 const double *positions, const double *box,
95 const bool periodic[3]);
96
97public:
105
109 ~MetatomicPotential() override = default;
110
111 [[nodiscard]] std::shared_ptr<eonc::Potential>
112 clonePotential() const override;
113
132 void force(long nAtoms, const double *positions, const int *atomicNrs,
133 double *forces, double *energy, double *variance,
134 const double *box) override;
135
140 [[nodiscard]] bool isThreadSafe() const noexcept override { return false; }
141 [[nodiscard]] bool needsPerImageInstance() const noexcept override {
142 return false;
143 }
144
149 [[nodiscard]] bool supportsBatchEvaluation() const noexcept override {
150 return true;
151 }
152 void forceBatch(long nSystems, long nAtoms, const double *const *positions,
153 const int *const *atomicNrs, double *const *forces,
154 double *energies, double *variances,
155 const double *const *boxes) override;
156
157private:
158 struct CloneTag {};
160 void forceBatchNative(long nSystems, long nAtoms,
161 const double *const *positions,
162 const int *const *atomicNrs, double *const *forces,
163 double *energies, double *variances,
164 const double *const *boxes);
165 mutable std::mutex inference_mutex_;
166};
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.
void forceBatchNative(long nSystems, long nAtoms, const double *const *positions, const int *const *atomicNrs, double *const *forces, double *energies, double *variances, const double *const *boxes)
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
metatomic_torch::ModelCapabilities capabilities_
bool isThreadSafe() const noexcept override
Single shared instance, serialized via mutex.
MetatomicPotential(const eonc::Parameters &params)
Constructor for the MetatomicPotential.
std::string energy_uncertainty_key_
eonc::Parameters::metatomic_options_t m_metatomic_opts
c10::DeviceType device_type_
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.
std::shared_ptr< eonc::Potential > clonePotential() const override
Independent instance that does not reload from disk.
metatensor_torch::Module model_
torch::ScalarType dtype_
eonc::metatomic_options_t metatomic_options_t
Definition Parameters.h:77
RAII helper for class-scoped logging.
Definition EonLogger.h:171