Loading...
Searching...
No Matches
XtsciEindir.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
15
16#include <cstddef>
17#include <cstdint>
18#include <string>
19
20struct DLManagedTensorVersioned;
21
22namespace eonc::xtsci_eindir {
23
26struct View {
27 std::string schema_id;
28 std::string producer_id;
29 std::string length_unit;
30 std::string energy_unit;
33 std::uint64_t operations{0};
38 std::uint32_t tensor_layout{0};
39 std::uint32_t callback_lifetime{0};
40};
41
42inline constexpr const char *kSchemaId = "eindir.objective-descriptor.v1";
43inline constexpr std::uint64_t kOpEnergy = 1ull << 0;
44inline constexpr std::uint64_t kOpForces = 1ull << 1;
45inline constexpr int kDeviceCpu = 1;
46inline constexpr int kDtypeFloat = 2;
47inline constexpr std::uint32_t kLayoutContiguous = 1;
48inline constexpr std::uint32_t kLifetimeBorrowed = 1;
49inline constexpr std::uint64_t kFeatureGradient = 1ull << 0;
50
53
56
58bool compatible(const View &actual, const View &required);
59
61bool abi_accepts_gradient(std::uint32_t major, std::uint32_t expected_major,
62 std::uint64_t features);
63
65const std::string &provenance();
66
67struct State;
68
71State *bind(ObjectiveFunction *objective, Eigen::VectorXd *cached);
72
73void release(State *state);
74
76int eval_grad(State *state, const DLManagedTensorVersioned *x, double *value,
77 DLManagedTensorVersioned *gradient);
78
80int minimize(State *state, double *x, std::size_t n, std::size_t maxiter,
81 double gtol, double istep, std::size_t memory, int method,
82 double *value_out);
83
84} // namespace eonc::xtsci_eindir
int minimize(State *state, double *x, std::size_t n, std::size_t maxiter, double gtol, double istep, std::size_t memory, int method, double *value_out)
xts_minimize_eindir on a caller-owned buffer. The caller keeps State.
constexpr int kDtypeFloat
Definition XtsciEindir.h:46
constexpr int kDeviceCpu
Definition XtsciEindir.h:45
void release(State *state)
State * bind(ObjectiveFunction *objective, Eigen::VectorXd *cached)
Borrow an ObjectiveFunction as an eindir objective.
bool abi_accepts_gradient(std::uint32_t major, std::uint32_t expected_major, std::uint64_t features)
Major must match and the gradient feature bit must be set.
constexpr const char * kSchemaId
Definition XtsciEindir.h:42
int eval_grad(State *state, const DLManagedTensorVersioned *x, double *value, DLManagedTensorVersioned *gradient)
One fused energy and gradient through the borrowed eindir handle.
View eon_requirement()
What an eOn minimization may consume: eV, angstrom, analytic forces.
constexpr std::uint64_t kOpEnergy
Definition XtsciEindir.h:43
constexpr std::uint64_t kOpForces
Definition XtsciEindir.h:44
constexpr std::uint32_t kLifetimeBorrowed
Definition XtsciEindir.h:48
View rgpot_ev_angstrom()
rgpot producer advertising the same units and tensor contract.
const std::string & provenance()
Stamp text from the last successful eindir bind. Empty when unused.
bool compatible(const View &actual, const View &required)
Nonzero when actual satisfies required. Schema id is never a wildcard.
constexpr std::uint64_t kFeatureGradient
Definition XtsciEindir.h:49
constexpr std::uint32_t kLayoutContiguous
Definition XtsciEindir.h:47
Semantic objective contract shared with eindir_objective_descriptor_t.
Definition XtsciEindir.h:26
std::uint64_t operations
Definition XtsciEindir.h:33
std::uint32_t callback_lifetime
Definition XtsciEindir.h:39
std::uint32_t tensor_layout
Definition XtsciEindir.h:38