Global Namespace¶
Overview¶
// namespaces
namespace atmd;
namespace aux;
namespace ceres;
namespace dimer;
namespace fmin;
namespace funcmin;
namespace gpr;
namespace gpr;
namespace gpr;
namespace gpr;
namespace gpr;
namespace gpr::coord;
namespace gpr::field;
namespace gpr::io;
namespace gpr::laplace;
namespace gpr::linalg;
namespace gpr::linalg::detail;
namespace gpr::neb;
namespace gpr::optim;
namespace gpr::potentials;
namespace gpr::priors;
namespace gpr::sfc;
namespace gpr::tests;
namespace laplace;
namespace linalg;
namespace math;
namespace pot;
namespace std;
// typedefs
typedef struct gpr_model_s* gpr_model_t;
typedef struct gpr_atoms_s* gpr_atoms_t;
typedef struct gpr_neb_s* gpr_neb_t;
typedef void (*gpr_force_fn)(
long n_atoms,
const double *R,
const int *atomic_nrs,
double *F,
double *energy,
double *variance,
const double *box,
void *user_data
);
typedef void (*gpr_oracle_fn)(
int n_coords,
const double *positions,
double *energy,
double *gradient,
void *user_data
);
typedef int cudaError_t;
typedef int cusolverStatus_t;
typedef int cublasStatus_t;
typedef void* cusolverDnHandle_t;
typedef void* cublasHandle_t;
typedef int cublasFillMode_t;
typedef int cublasOperation_t;
typedef int cublasDiagType_t;
typedef int cublasSideMode_t;
// enums
enum {
GPR_SUCCESS = 0,
GPR_ERR_NULL_HANDLE = -1,
GPR_ERR_INVALID_ARG = -2,
GPR_ERR_NOT_TRAINED = -3,
GPR_ERR_ALLOC = -4,
GPR_ERR_CHOLESKY = -5,
GPR_ERR_OPTIMIZER = -6,
GPR_ERR_NOT_CONVERGED = -7,
GPR_ERR_INTERNAL = -99,
};
enum ConvergenceNormType;
enum DebugLevels;
enum DimerAlgorithm;
enum Directions;
enum DistanceMetricType;
enum FrozenAndMovingAtoms;
enum OptimizationAlgorithms;
enum OptionsForGradCalculation;
enum Potentials;
enum gpr_acquisition_t;
enum gpr_conv_norm_t;
enum gpr_model_type_t;
enum gpr_neb_mode_t;
enum gpr_optim_alg_t;
enum gpr_uncertainty_mode_t;
// structs
struct gpr_atoms_config_t;
struct gpr_atoms_s;
struct gpr_dimer_config_t;
struct gpr_lj_params_t;
struct gpr_minimize_config_t;
struct gpr_model_config_t;
struct gpr_model_s;
struct gpr_neb_config_t;
struct gpr_neb_s;
// global variables
static thread_local std::string g_last_error;
static int CUSOLVER_STATUS_SUCCESS = 0;
static int CUBLAS_STATUS_SUCCESS = 0;
static int CUBLAS_FILL_MODE_LOWER = 1;
static int CUBLAS_OP_N = 0;
static int CUBLAS_OP_T = 1;
static int CUBLAS_DIAG_NON_UNIT = 0;
static int CUBLAS_SIDE_LEFT = 0;
// global functions
static void set_error(const char* msg);
static void clear_error();
static gpr::AtomsConfiguration make_atoms_config(const gpr_atoms_config_t* cfg);
static gpr::InputParameters make_input_params(const gpr_model_config_t* cfg);
const char* gpr_version(void);
void gpr_version_components(int* major, int* minor, int* patch);
const char* gpr_last_error(void);
gpr_atoms_config_t gpr_atoms_config_defaults(void);
gpr_atoms_config_t gpr_atoms_simple(int n_atoms);
gpr_model_config_t gpr_model_config_defaults(void);
const char* gpr_backend_name(void);
int gpr_backend_requires_mpi(void);
int gpr_mpi_initialized(void);
int gpr_mpi_world_rank(void);
int gpr_mpi_world_size(void);
int gpr_omp_max_threads(void);
gpr_dimer_config_t gpr_dimer_config_defaults(void);
gpr_neb_config_t gpr_neb_config_defaults(void);
gpr_minimize_config_t gpr_minimize_config_defaults(void);
gpr_atoms_t gpr_atoms_create(const gpr_atoms_config_t* config);
void gpr_atoms_destroy(gpr_atoms_t atoms);
gpr_atoms_t gpr_atoms_create_simple(int n_atoms);
int gpr_atoms_n_moving(gpr_atoms_t atoms);
int gpr_atoms_n_pairtypes(gpr_atoms_t atoms);
gpr_model_t gpr_model_create(gpr_model_type_t type);
void gpr_model_destroy(gpr_model_t model);
gpr_model_type_t gpr_model_type(gpr_model_t model);
int gpr_model_init(gpr_model_t model, const gpr_model_config_t* config, gpr_atoms_t atoms);
int gpr_model_train(gpr_model_t model, const double* R, const double* E, const double* G, int n_obs, int n_coords);
int gpr_model_update(gpr_model_t model, const double* R_new, const double* E_new, const double* G_new, int n_new, int n_coords);
int gpr_model_predict(gpr_model_t model, const double* R_query, double* E_out, double* G_out, int n_coords);
int gpr_model_predict_variance(gpr_model_t model, const double* R_query, double* var_E_out, double* var_G_out, int n_coords);
int gpr_model_predict_full(gpr_model_t model, const double* R_query, double* E_out, double* G_out, double* var_E_out, double* var_G_out, int n_coords);
int gpr_model_predict_batch(gpr_model_t model, const double* R_queries, double* E_out, double* G_out, double* var_E_out, double* var_G_out, int n_queries, int n_coords);
int gpr_model_n_lengthscales(gpr_model_t model);
int gpr_model_get_lengthscales(gpr_model_t model, double* out);
int gpr_model_set_lengthscales(gpr_model_t model, const double* values, int n_values);
int gpr_model_get_magn_sigma2(gpr_model_t model, double* out);
int gpr_model_set_magn_sigma2(gpr_model_t model, double value);
int gpr_model_get_sigma2(gpr_model_t model, double* out);
int gpr_model_set_sigma2(gpr_model_t model, double value);
int gpr_model_get_jitter(gpr_model_t model, double* out);
int gpr_model_n_observations(gpr_model_t model);
int gpr_model_get_alpha(gpr_model_t model, double* out, int n);
int gpr_model_tp_prefactor(gpr_model_t model, double* out);
int gpr_dimer_search(gpr_force_fn force_fn, void* user_data, gpr_atoms_t atoms, const double* R_init, const double* orient_init, const gpr_dimer_config_t* config, const double* R_obs, const double* E_obs, const double* G_obs, int n_init_obs, double* R_saddle, double* E_saddle, double* orient_out, double* curvature, int* n_force_calls, int* n_gp_calls);
gpr_neb_t gpr_neb_search(gpr_oracle_fn oracle, void* user_data, const double* R_initial, const double* R_final, int n_coords, int n_images, const gpr_neb_config_t* config);
int gpr_neb_result_converged(gpr_neb_t result);
int gpr_neb_result_oracle_calls(gpr_neb_t result);
int gpr_neb_result_outer_iterations(gpr_neb_t result);
double gpr_neb_result_barrier(gpr_neb_t result);
int gpr_neb_result_max_energy_image(gpr_neb_t result);
int gpr_neb_result_n_images(gpr_neb_t result);
int gpr_neb_result_image_positions(gpr_neb_t result, int image_idx, double* out, int n_coords);
int gpr_neb_result_image_energy(gpr_neb_t result, int image_idx, double* out);
int gpr_neb_result_all_energies(gpr_neb_t result, double* out, int n_total);
void gpr_neb_result_destroy(gpr_neb_t result);
int gpr_minimize(gpr_oracle_fn oracle, void* user_data, const double* R_init, int n_coords, gpr_atoms_t atoms, const gpr_minimize_config_t* config, double* R_final, double* E_final, double* G_final, int* converged, int* n_oracle_calls);
int gpr_potential_lj(const double* x, int n_atoms, double epsilon, double sigma, double* E_out, double* G_out);
int gpr_potential_muller_brown(const double* xy, double* E_out, double* G_out);
int gpr_potential_leps(const double* r, double* E_out, double* G_out);
void gpr_oracle_lj(int n_coords, const double* positions, double* energy, double* gradient, void* user_data);
void gpr_oracle_muller_brown(int n_coords, const double* positions, double* energy, double* gradient, void* user_data);
void gpr_oracle_leps(int n_coords, const double* positions, double* energy, double* gradient, void* user_data);
const char* gpr_backend_name(void);
int gpr_backend_requires_mpi(void);
int gpr_mpi_initialized(void);
int gpr_mpi_world_rank(void);
int gpr_mpi_world_size(void);
int gpr_omp_max_threads(void);
const char* gpr_version(void);
void gpr_version_components(int* major, int* minor, int* patch);
const char* gpr_last_error(void);
gpr_atoms_config_t gpr_atoms_config_defaults(void);
gpr_atoms_config_t gpr_atoms_simple(int n_atoms);
gpr_atoms_t gpr_atoms_create_simple(int n_atoms);
gpr_model_config_t gpr_model_config_defaults(void);
gpr_dimer_config_t gpr_dimer_config_defaults(void);
gpr_neb_config_t gpr_neb_config_defaults(void);
gpr_minimize_config_t gpr_minimize_config_defaults(void);
gpr_atoms_t gpr_atoms_create(const gpr_atoms_config_t* config);
void gpr_atoms_destroy(gpr_atoms_t atoms);
int gpr_atoms_n_moving(gpr_atoms_t atoms);
int gpr_atoms_n_pairtypes(gpr_atoms_t atoms);
gpr_model_t gpr_model_create(gpr_model_type_t type);
void gpr_model_destroy(gpr_model_t model);
gpr_model_type_t gpr_model_type(gpr_model_t model);
int gpr_model_init(gpr_model_t model, const gpr_model_config_t* config, gpr_atoms_t atoms);
int gpr_model_train(gpr_model_t model, const double* R, const double* E, const double* G, int n_obs, int n_coords);
int gpr_model_update(gpr_model_t model, const double* R_new, const double* E_new, const double* G_new, int n_new, int n_coords);
int gpr_model_predict(gpr_model_t model, const double* R_query, double* E_out, double* G_out, int n_coords);
int gpr_model_predict_variance(gpr_model_t model, const double* R_query, double* var_E_out, double* var_G_out, int n_coords);
int gpr_model_predict_full(gpr_model_t model, const double* R_query, double* E_out, double* G_out, double* var_E_out, double* var_G_out, int n_coords);
int gpr_model_predict_batch(gpr_model_t model, const double* R_queries, double* E_out, double* G_out, double* var_E_out, double* var_G_out, int n_queries, int n_coords);
int gpr_model_n_lengthscales(gpr_model_t model);
int gpr_model_get_lengthscales(gpr_model_t model, double* out);
int gpr_model_set_lengthscales(gpr_model_t model, const double* values, int n_values);
int gpr_model_get_magn_sigma2(gpr_model_t model, double* out);
int gpr_model_set_magn_sigma2(gpr_model_t model, double value);
int gpr_model_get_sigma2(gpr_model_t model, double* out);
int gpr_model_set_sigma2(gpr_model_t model, double value);
int gpr_model_get_jitter(gpr_model_t model, double* out);
int gpr_model_n_observations(gpr_model_t model);
int gpr_model_get_alpha(gpr_model_t model, double* out, int n);
int gpr_model_tp_prefactor(gpr_model_t model, double* out);
int gpr_dimer_search(gpr_force_fn force_fn, void* user_data, gpr_atoms_t atoms, const double* R_init, const double* orient_init, const gpr_dimer_config_t* config, const double* R_obs, const double* E_obs, const double* G_obs, int n_init_obs, double* R_saddle, double* E_saddle, double* orient_out, double* curvature, int* n_force_calls, int* n_gp_calls);
gpr_neb_t gpr_neb_search(gpr_oracle_fn oracle, void* user_data, const double* R_initial, const double* R_final, int n_coords, int n_images, const gpr_neb_config_t* config);
int gpr_neb_result_converged(gpr_neb_t result);
int gpr_neb_result_oracle_calls(gpr_neb_t result);
int gpr_neb_result_outer_iterations(gpr_neb_t result);
double gpr_neb_result_barrier(gpr_neb_t result);
int gpr_neb_result_max_energy_image(gpr_neb_t result);
int gpr_neb_result_n_images(gpr_neb_t result);
int gpr_neb_result_image_positions(gpr_neb_t result, int image_idx, double* out, int n_coords);
int gpr_neb_result_image_energy(gpr_neb_t result, int image_idx, double* out);
int gpr_neb_result_all_energies(gpr_neb_t result, double* out, int n_total);
void gpr_neb_result_destroy(gpr_neb_t result);
int gpr_minimize(gpr_oracle_fn oracle, void* user_data, const double* R_init, int n_coords, gpr_atoms_t atoms, const gpr_minimize_config_t* config, double* R_final, double* E_final, double* G_final, int* converged, int* n_oracle_calls);
int gpr_potential_lj(const double* x, int n_atoms, double epsilon, double sigma, double* E_out, double* G_out);
int gpr_potential_muller_brown(const double* xy, double* E_out, double* G_out);
int gpr_potential_leps(const double* r, double* E_out, double* G_out);
void gpr_oracle_lj(int n_coords, const double* positions, double* energy, double* gradient, void* user_data);
void gpr_oracle_muller_brown(int n_coords, const double* positions, double* energy, double* gradient, void* user_data);
void gpr_oracle_leps(int n_coords, const double* positions, double* energy, double* gradient, void* user_data);
void pdpotrf_(const char* uplo, const int* n, double* a, const int* ia, const int* ja, const int* desca, int* info);
void pdpotri_(const char* uplo, const int* n, double* a, const int* ia, const int* ja, const int* desca, int* info);
void pdtrsm_(const char* side, const char* uplo, const char* trans, const char* diag, const int* m, const int* n, const double* alpha, const double* a, const int* ia, const int* ja, const int* desca, double* b, const int* ib, const int* jb, const int* descb);
void Cblacs_pinfo(int* mypnum, int* nprocs);
void Cblacs_get(int context, int request, int* value);
void Cblacs_gridinit(int* context, const char* order, int np_row, int np_col);
void Cblacs_gridinfo(int context, int* np_row, int* np_col, int* my_row, int* my_col);
void Cblacs_gridexit(int context);
void Cblacs_exit(int doneflag);
int Cblacs2sys_handle(int context);
void descinit_(int* desc, const int* m, const int* n, const int* mb, const int* nb, const int* irsrc, const int* icsrc, const int* ictxt, const int* lld, int* info);
int numroc_(const int* n, const int* nb, const int* iproc, const int* isrcproc, const int* nprocs);
void Cpdgemr2d(int m, int n, const double* a, int ia, int ja, const int* desca, double* b, int ib, int jb, const int* descb, int ictxt);
// macros
#define ADAM_inl
#define AdditionalFunctionality_inl
#define ConstantCF_inl
#define EIGEN_NO_DEBUG
#define EMPTY
#define GPR_ATOMICDIMER_INL_
#define GPR_CATCH
#define GPR_CATCH_NULL
#define GPR_ML_GAUSSIANPROCESSREGRESSION_INL_
#define GPR_OWN_BLOCK()
#define GPR_TRY
#define LikGaussian_h
#define MANAGERS_IO_FILEMANAGER_INL_
#define ProblemSetUp_inl
#define SCG_h
#define SexpatCF_inl
#define assertMsg(expression, msg)
Detailed Documentation¶
Typedefs¶
typedef struct gpr_model_s* gpr_model_t
Type-safe opaque handles. In Fortran, declare as type(c_ptr). The compiler catches type mismatches (unlike void*).
typedef void (*gpr_force_fn)(
long n_atoms,
const double *R,
const int *atomic_nrs,
double *F,
double *energy,
double *variance,
const double *box,
void *user_data
)
Full atomistic force callback (used by dimer search).
Parameters:
n_atoms |
Number of atoms |
R |
Positions, flat [x1,y1,z1,x2,…], length 3*n_atoms |
atomic_nrs |
Atomic numbers, length n_atoms |
F |
Output forces, length 3*n_atoms (caller-allocated) |
energy |
Output energy scalar (caller-allocated) |
variance |
Output variance scalar (caller-allocated, may be NULL) |
box |
Cell vectors, 3x3 row-major (9 doubles, may be NULL) |
user_data |
Opaque pointer passed through from caller |
typedef void (*gpr_oracle_fn)(
int n_coords,
const double *positions,
double *energy,
double *gradient,
void *user_data
)
Simple oracle callback (used by NEB and minimizer).
Parameters:
n_coords |
Total coordinate dimension (e.g. 3*n_atoms) |
positions |
Input positions, length n_coords |
energy |
Output energy scalar (caller-allocated) |
gradient |
Output gradient, length n_coords (caller-allocated) |
user_data |
Opaque pointer passed through from caller |
Global Functions¶
const char* gpr_version(void)
Library version string (“major.minor.patch”). Never NULL.
void gpr_version_components(int* major, int* minor, int* patch)
Version components. Any pointer may be NULL.
const char* gpr_last_error(void)
Thread-local error message from last failing call. Never NULL.
gpr_atoms_config_t gpr_atoms_config_defaults(void)
Default atoms configuration (everything zeroed/NULL).
gpr_atoms_config_t gpr_atoms_simple(int n_atoms)
Convenience: N identical moving atoms, one pair type.
const char* gpr_backend_name(void)
Returns a static C string naming the compiled linalg backend: “scalapack”, “eigen”, “kokkos”, “cusolver”, or “unknown”. Caller must NOT free.
int gpr_backend_requires_mpi(void)
Returns 1 if the compiled linalg backend requires MPI to be initialised before any GPR call (e.g. ScaLAPACK), 0 otherwise.
int gpr_mpi_initialized(void)
Returns 1 if MPI_Init has been called on this process (queries MPI_Initialized). Returns 0 if MPI is not compiled in OR not initialised. Safe to call before any GPR construction.
int gpr_mpi_world_rank(void)
Returns the MPI rank in MPI_COMM_WORLD on this process, or 0 if MPI is not initialised / not compiled in.
int gpr_mpi_world_size(void)
Returns the MPI size of MPI_COMM_WORLD on this process, or 1 if MPI is not initialised / not compiled in.
int gpr_omp_max_threads(void)
Returns the OpenMP thread budget for this process (omp_get_max_threads). Returns 1 if OpenMP is not compiled in.
gpr_atoms_t gpr_atoms_create(const gpr_atoms_config_t* config)
Create an atoms configuration handle from descriptor. Returns NULL on failure (check gpr_last_error()).
void gpr_atoms_destroy(gpr_atoms_t atoms)
Destroy atoms configuration. Safe to call with NULL.
gpr_atoms_t gpr_atoms_create_simple(int n_atoms)
Convenience: create atoms handle for N identical moving atoms directly. Equivalent to gpr_atoms_create(&gpr_atoms_simple(n_atoms)).
int gpr_atoms_n_moving(gpr_atoms_t atoms)
Number of moving (non-frozen) atoms.
int gpr_atoms_n_pairtypes(gpr_atoms_t atoms)
Number of pair types.
gpr_model_t gpr_model_create(gpr_model_type_t type)
Create a GP or TP model. Returns NULL on failure.
void gpr_model_destroy(gpr_model_t model)
Destroy model. Safe to call with NULL.
gpr_model_type_t gpr_model_type(gpr_model_t model)
Query model type.
int gpr_model_init(gpr_model_t model, const gpr_model_config_t* config, gpr_atoms_t atoms)
Initialize model with configuration and atom setup. Must be called before train(). Can be called again to reconfigure.
int gpr_model_train(gpr_model_t model, const double* R, const double* E, const double* G, int n_obs, int n_coords)
Train the model on observations.
Parameters:
R |
Positions, row-major (n_obs x n_coords) |
E |
Energies (n_obs) |
G |
Gradients, row-major (n_obs x n_coords) |
n_obs |
Number of observations |
n_coords |
Coordinate dimension (3 * n_moving_atoms) |
int gpr_model_update(gpr_model_t model, const double* R_new, const double* E_new, const double* G_new, int n_new, int n_coords)
Incremental update: append observations and retrain.
int gpr_model_predict(gpr_model_t model, const double* R_query, double* E_out, double* G_out, int n_coords)
Predict energy and gradient at a query point.
Parameters:
R_query |
Positions (n_coords) |
E_out |
Predicted energy (scalar) |
G_out |
Predicted gradient (n_coords, caller-allocated) |
int gpr_model_predict_variance(gpr_model_t model, const double* R_query, double* var_E_out, double* var_G_out, int n_coords)
Predict variance at a query point.
int gpr_model_predict_full(gpr_model_t model, const double* R_query, double* E_out, double* G_out, double* var_E_out, double* var_G_out, int n_coords)
Predict energy, gradient, and variance in one call.
int gpr_model_predict_batch(gpr_model_t model, const double* R_queries, double* E_out, double* G_out, double* var_E_out, double* var_G_out, int n_queries, int n_coords)
Batch prediction at multiple query points. var_E_out and var_G_out may be NULL to skip variance.
int gpr_model_n_lengthscales(gpr_model_t model)
Number of kernel lengthscale parameters.
int gpr_model_get_lengthscales(gpr_model_t model, double* out)
Get lengthscale values into caller-allocated array.
int gpr_model_set_lengthscales(gpr_model_t model, const double* values, int n_values)
Set lengthscale values.
int gpr_model_get_magn_sigma2(gpr_model_t model, double* out)
Get signal variance (magnSigma2).
int gpr_model_set_magn_sigma2(gpr_model_t model, double value)
Set signal variance.
int gpr_model_get_sigma2(gpr_model_t model, double* out)
Get noise variance (sigma2).
int gpr_model_set_sigma2(gpr_model_t model, double value)
Set noise variance.
int gpr_model_get_jitter(gpr_model_t model, double* out)
Get jitter value.
int gpr_model_n_observations(gpr_model_t model)
Number of training observations currently stored.
int gpr_model_get_alpha(gpr_model_t model, double* out, int n)
Get posterior mean weights (alpha vector). Size = n_obs * (1 + n_coords). Returns GPR_ERR_NOT_TRAINED if untrained.
int gpr_model_tp_prefactor(gpr_model_t model, double* out)
TP-specific: get signal variance prefactor (valid after training).
int gpr_dimer_search(gpr_force_fn force_fn, void* user_data, gpr_atoms_t atoms, const double* R_init, const double* orient_init, const gpr_dimer_config_t* config, const double* R_obs, const double* E_obs, const double* G_obs, int n_init_obs, double* R_saddle, double* E_saddle, double* orient_out, double* curvature, int* n_force_calls, int* n_gp_calls)
GP-accelerated dimer saddle point search.
Parameters:
force_fn |
Force callback |
user_data |
Opaque pointer passed to force_fn |
atoms |
Atomic configuration |
R_init |
Initial midpoint positions (3*n_atoms_total) |
orient_init |
Initial dimer orientation (3*n_atoms_total, unit vector) |
config |
Dimer configuration |
R_obs |
Initial observation positions (n_init_obs x n_coords), NULL to skip |
E_obs |
Initial observation energies (n_init_obs), NULL to skip |
G_obs |
Initial observation gradients (n_init_obs x n_coords), NULL to skip |
n_init_obs |
Number of initial observations (0 if none) |
R_saddle |
Output saddle point positions (3*n_atoms_total) |
E_saddle |
Output saddle point energy |
orient_out |
Output final orientation (3*n_atoms_total), may be NULL |
curvature |
Output final curvature, may be NULL |
n_force_calls |
Output total true force evaluations, may be NULL |
n_gp_calls |
Output total GP evaluations, may be NULL |
gpr_neb_t gpr_neb_search(gpr_oracle_fn oracle, void* user_data, const double* R_initial, const double* R_final, int n_coords, int n_images, const gpr_neb_config_t* config)
GP-accelerated NEB path optimization.
Returns a result handle (NULL on failure). Caller must destroy with gpr_neb_result_destroy().
Parameters:
oracle |
Energy/gradient callback (simple signature) |
user_data |
Opaque pointer passed to oracle |
R_initial |
Initial state positions (n_coords) |
R_final |
Final state positions (n_coords) |
n_coords |
Coordinate dimension |
n_images |
Number of intermediate images (excluding endpoints) |
config |
NEB configuration |
int gpr_neb_result_converged(gpr_neb_t result)
1 if converged, 0 otherwise.
int gpr_neb_result_oracle_calls(gpr_neb_t result)
Total oracle evaluations.
int gpr_neb_result_outer_iterations(gpr_neb_t result)
Number of outer iterations performed.
double gpr_neb_result_barrier(gpr_neb_t result)
Energy barrier (max_image_energy - min_endpoint_energy).
int gpr_neb_result_max_energy_image(gpr_neb_t result)
Index of highest-energy image.
int gpr_neb_result_n_images(gpr_neb_t result)
Total number of images (including endpoints = n_images + 2).
int gpr_neb_result_image_positions(gpr_neb_t result, int image_idx, double* out, int n_coords)
Get positions for image i (0-based).
int gpr_neb_result_image_energy(gpr_neb_t result, int image_idx, double* out)
Get energy for image i.
int gpr_neb_result_all_energies(gpr_neb_t result, double* out, int n_total)
Get all image energies into array of size n_images_total.
void gpr_neb_result_destroy(gpr_neb_t result)
Destroy NEB result. Safe to call with NULL.
int gpr_minimize(gpr_oracle_fn oracle, void* user_data, const double* R_init, int n_coords, gpr_atoms_t atoms, const gpr_minimize_config_t* config, double* R_final, double* E_final, double* G_final, int* converged, int* n_oracle_calls)
GP-accelerated geometry minimization.
Parameters:
oracle |
Energy/gradient callback |
user_data |
Opaque pointer |
R_init |
Initial positions (n_coords) |
n_coords |
Coordinate dimension |
atoms |
Atomic configuration (for GP kernel) |
config |
Minimizer configuration |
R_final |
Output optimized positions (n_coords) |
E_final |
Output final energy |
G_final |
Output final gradient (n_coords), may be NULL |
converged |
Output 1=converged 0=not, may be NULL |
n_oracle_calls |
Output total oracle evaluations, may be NULL |
int gpr_potential_lj(const double* x, int n_atoms, double epsilon, double sigma, double* E_out, double* G_out)
Lennard-Jones energy and gradient.
Parameters:
x |
Positions (3*n_atoms) |
n_atoms |
Number of atoms |
int gpr_potential_muller_brown(const double* xy, double* E_out, double* G_out)
Muller-Brown 2D potential. xy=[x,y], G_out=[dE/dx,dE/dy].
int gpr_potential_leps(const double* r, double* E_out, double* G_out)
LEPS collinear potential. r=[r_AB,r_BC], G_out=[dE/dr_AB,dE/dr_BC].
void gpr_oracle_lj(int n_coords, const double* positions, double* energy, double* gradient, void* user_data)
Oracle adapter for LJ. user_data must point to gpr_lj_params_t.
void gpr_oracle_muller_brown(int n_coords, const double* positions, double* energy, double* gradient, void* user_data)
Oracle adapter for Muller-Brown. user_data ignored (pass NULL).
void gpr_oracle_leps(int n_coords, const double* positions, double* energy, double* gradient, void* user_data)
Oracle adapter for LEPS. user_data ignored (pass NULL).
const char* gpr_backend_name(void)
Returns a static C string naming the compiled linalg backend: “scalapack”, “eigen”, “kokkos”, “cusolver”, or “unknown”. Caller must NOT free.
int gpr_backend_requires_mpi(void)
Returns 1 if the compiled linalg backend requires MPI to be initialised before any GPR call (e.g. ScaLAPACK), 0 otherwise.
int gpr_mpi_initialized(void)
Returns 1 if MPI_Init has been called on this process (queries MPI_Initialized). Returns 0 if MPI is not compiled in OR not initialised. Safe to call before any GPR construction.
int gpr_mpi_world_rank(void)
Returns the MPI rank in MPI_COMM_WORLD on this process, or 0 if MPI is not initialised / not compiled in.
int gpr_mpi_world_size(void)
Returns the MPI size of MPI_COMM_WORLD on this process, or 1 if MPI is not initialised / not compiled in.
int gpr_omp_max_threads(void)
Returns the OpenMP thread budget for this process (omp_get_max_threads). Returns 1 if OpenMP is not compiled in.
const char* gpr_version(void)
Library version string (“major.minor.patch”). Never NULL.
void gpr_version_components(int* major, int* minor, int* patch)
Version components. Any pointer may be NULL.
const char* gpr_last_error(void)
Thread-local error message from last failing call. Never NULL.
gpr_atoms_config_t gpr_atoms_config_defaults(void)
Default atoms configuration (everything zeroed/NULL).
gpr_atoms_config_t gpr_atoms_simple(int n_atoms)
Convenience: N identical moving atoms, one pair type.
gpr_atoms_t gpr_atoms_create_simple(int n_atoms)
Convenience: create atoms handle for N identical moving atoms directly. Equivalent to gpr_atoms_create(&gpr_atoms_simple(n_atoms)).
gpr_atoms_t gpr_atoms_create(const gpr_atoms_config_t* config)
Create an atoms configuration handle from descriptor. Returns NULL on failure (check gpr_last_error()).
void gpr_atoms_destroy(gpr_atoms_t atoms)
Destroy atoms configuration. Safe to call with NULL.
int gpr_atoms_n_moving(gpr_atoms_t atoms)
Number of moving (non-frozen) atoms.
int gpr_atoms_n_pairtypes(gpr_atoms_t atoms)
Number of pair types.
gpr_model_t gpr_model_create(gpr_model_type_t type)
Create a GP or TP model. Returns NULL on failure.
void gpr_model_destroy(gpr_model_t model)
Destroy model. Safe to call with NULL.
gpr_model_type_t gpr_model_type(gpr_model_t model)
Query model type.
int gpr_model_init(gpr_model_t model, const gpr_model_config_t* config, gpr_atoms_t atoms)
Initialize model with configuration and atom setup. Must be called before train(). Can be called again to reconfigure.
int gpr_model_train(gpr_model_t model, const double* R, const double* E, const double* G, int n_obs, int n_coords)
Train the model on observations.
Parameters:
R |
Positions, row-major (n_obs x n_coords) |
E |
Energies (n_obs) |
G |
Gradients, row-major (n_obs x n_coords) |
n_obs |
Number of observations |
n_coords |
Coordinate dimension (3 * n_moving_atoms) |
int gpr_model_update(gpr_model_t model, const double* R_new, const double* E_new, const double* G_new, int n_new, int n_coords)
Incremental update: append observations and retrain.
int gpr_model_predict(gpr_model_t model, const double* R_query, double* E_out, double* G_out, int n_coords)
Predict energy and gradient at a query point.
Parameters:
R_query |
Positions (n_coords) |
E_out |
Predicted energy (scalar) |
G_out |
Predicted gradient (n_coords, caller-allocated) |
int gpr_model_predict_variance(gpr_model_t model, const double* R_query, double* var_E_out, double* var_G_out, int n_coords)
Predict variance at a query point.
int gpr_model_predict_full(gpr_model_t model, const double* R_query, double* E_out, double* G_out, double* var_E_out, double* var_G_out, int n_coords)
Predict energy, gradient, and variance in one call.
int gpr_model_predict_batch(gpr_model_t model, const double* R_queries, double* E_out, double* G_out, double* var_E_out, double* var_G_out, int n_queries, int n_coords)
Batch prediction at multiple query points. var_E_out and var_G_out may be NULL to skip variance.
int gpr_model_n_lengthscales(gpr_model_t model)
Number of kernel lengthscale parameters.
int gpr_model_get_lengthscales(gpr_model_t model, double* out)
Get lengthscale values into caller-allocated array.
int gpr_model_set_lengthscales(gpr_model_t model, const double* values, int n_values)
Set lengthscale values.
int gpr_model_get_magn_sigma2(gpr_model_t model, double* out)
Get signal variance (magnSigma2).
int gpr_model_set_magn_sigma2(gpr_model_t model, double value)
Set signal variance.
int gpr_model_get_sigma2(gpr_model_t model, double* out)
Get noise variance (sigma2).
int gpr_model_set_sigma2(gpr_model_t model, double value)
Set noise variance.
int gpr_model_get_jitter(gpr_model_t model, double* out)
Get jitter value.
int gpr_model_n_observations(gpr_model_t model)
Number of training observations currently stored.
int gpr_model_get_alpha(gpr_model_t model, double* out, int n)
Get posterior mean weights (alpha vector). Size = n_obs * (1 + n_coords). Returns GPR_ERR_NOT_TRAINED if untrained.
int gpr_model_tp_prefactor(gpr_model_t model, double* out)
TP-specific: get signal variance prefactor (valid after training).
int gpr_dimer_search(gpr_force_fn force_fn, void* user_data, gpr_atoms_t atoms, const double* R_init, const double* orient_init, const gpr_dimer_config_t* config, const double* R_obs, const double* E_obs, const double* G_obs, int n_init_obs, double* R_saddle, double* E_saddle, double* orient_out, double* curvature, int* n_force_calls, int* n_gp_calls)
GP-accelerated dimer saddle point search.
Parameters:
force_fn |
Force callback |
user_data |
Opaque pointer passed to force_fn |
atoms |
Atomic configuration |
R_init |
Initial midpoint positions (3*n_atoms_total) |
orient_init |
Initial dimer orientation (3*n_atoms_total, unit vector) |
config |
Dimer configuration |
R_obs |
Initial observation positions (n_init_obs x n_coords), NULL to skip |
E_obs |
Initial observation energies (n_init_obs), NULL to skip |
G_obs |
Initial observation gradients (n_init_obs x n_coords), NULL to skip |
n_init_obs |
Number of initial observations (0 if none) |
R_saddle |
Output saddle point positions (3*n_atoms_total) |
E_saddle |
Output saddle point energy |
orient_out |
Output final orientation (3*n_atoms_total), may be NULL |
curvature |
Output final curvature, may be NULL |
n_force_calls |
Output total true force evaluations, may be NULL |
n_gp_calls |
Output total GP evaluations, may be NULL |
gpr_neb_t gpr_neb_search(gpr_oracle_fn oracle, void* user_data, const double* R_initial, const double* R_final, int n_coords, int n_images, const gpr_neb_config_t* config)
GP-accelerated NEB path optimization.
Returns a result handle (NULL on failure). Caller must destroy with gpr_neb_result_destroy().
Parameters:
oracle |
Energy/gradient callback (simple signature) |
user_data |
Opaque pointer passed to oracle |
R_initial |
Initial state positions (n_coords) |
R_final |
Final state positions (n_coords) |
n_coords |
Coordinate dimension |
n_images |
Number of intermediate images (excluding endpoints) |
config |
NEB configuration |
int gpr_neb_result_converged(gpr_neb_t result)
1 if converged, 0 otherwise.
int gpr_neb_result_oracle_calls(gpr_neb_t result)
Total oracle evaluations.
int gpr_neb_result_outer_iterations(gpr_neb_t result)
Number of outer iterations performed.
double gpr_neb_result_barrier(gpr_neb_t result)
Energy barrier (max_image_energy - min_endpoint_energy).
int gpr_neb_result_max_energy_image(gpr_neb_t result)
Index of highest-energy image.
int gpr_neb_result_n_images(gpr_neb_t result)
Total number of images (including endpoints = n_images + 2).
int gpr_neb_result_image_positions(gpr_neb_t result, int image_idx, double* out, int n_coords)
Get positions for image i (0-based).
int gpr_neb_result_image_energy(gpr_neb_t result, int image_idx, double* out)
Get energy for image i.
int gpr_neb_result_all_energies(gpr_neb_t result, double* out, int n_total)
Get all image energies into array of size n_images_total.
void gpr_neb_result_destroy(gpr_neb_t result)
Destroy NEB result. Safe to call with NULL.
int gpr_minimize(gpr_oracle_fn oracle, void* user_data, const double* R_init, int n_coords, gpr_atoms_t atoms, const gpr_minimize_config_t* config, double* R_final, double* E_final, double* G_final, int* converged, int* n_oracle_calls)
GP-accelerated geometry minimization.
Parameters:
oracle |
Energy/gradient callback |
user_data |
Opaque pointer |
R_init |
Initial positions (n_coords) |
n_coords |
Coordinate dimension |
atoms |
Atomic configuration (for GP kernel) |
config |
Minimizer configuration |
R_final |
Output optimized positions (n_coords) |
E_final |
Output final energy |
G_final |
Output final gradient (n_coords), may be NULL |
converged |
Output 1=converged 0=not, may be NULL |
n_oracle_calls |
Output total oracle evaluations, may be NULL |
int gpr_potential_lj(const double* x, int n_atoms, double epsilon, double sigma, double* E_out, double* G_out)
Lennard-Jones energy and gradient.
Parameters:
x |
Positions (3*n_atoms) |
n_atoms |
Number of atoms |
int gpr_potential_muller_brown(const double* xy, double* E_out, double* G_out)
Muller-Brown 2D potential. xy=[x,y], G_out=[dE/dx,dE/dy].
int gpr_potential_leps(const double* r, double* E_out, double* G_out)
LEPS collinear potential. r=[r_AB,r_BC], G_out=[dE/dr_AB,dE/dr_BC].
void gpr_oracle_lj(int n_coords, const double* positions, double* energy, double* gradient, void* user_data)
Oracle adapter for LJ. user_data must point to gpr_lj_params_t.
void gpr_oracle_muller_brown(int n_coords, const double* positions, double* energy, double* gradient, void* user_data)
Oracle adapter for Muller-Brown. user_data ignored (pass NULL).
void gpr_oracle_leps(int n_coords, const double* positions, double* energy, double* gradient, void* user_data)
Oracle adapter for LEPS. user_data ignored (pass NULL).