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).