#pragma once
#ifdef __cplusplus
#define DFTD4_API_ENTRY extern "C"
#else
#define DFTD4_API_ENTRY extern
#ifndef DFTD4_CFFI
#include <stdbool.h>
#endif
#endif
#define DFTD4_API_CALL
#define DFTD4_API_SUFFIX__V_3_0
#define DFTD4_API_SUFFIX__V_3_1
#define DFTD4_API_SUFFIX__V_3_2
#define DFTD4_API_SUFFIX__V_3_3
#define DFTD4_API_SUFFIX__V_3_4
#define DFTD4_API_SUFFIX__V_3_5
#define DFTD4_API_SUFFIX__V_4_0
typedef struct _dftd4_error* dftd4_error;
typedef struct _dftd4_structure* dftd4_structure;
typedef struct _dftd4_model* dftd4_model;
typedef struct _dftd4_param* dftd4_param;
#define dftd4_delete(ptr) _Generic((ptr), \
dftd4_error: dftd4_delete_error, \
dftd4_structure: dftd4_delete_structure, \
dftd4_model: dftd4_delete_model, \
dftd4_param: dftd4_delete_param \
)(&ptr)
DFTD4_API_ENTRY int DFTD4_API_CALL
dftd4_get_version(void) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY dftd4_error DFTD4_API_CALL
dftd4_new_error(void) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY int DFTD4_API_CALL
dftd4_check_error(dftd4_error ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_get_error(dftd4_error ,
char* ,
const int* ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_delete_error(dftd4_error* ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY dftd4_structure DFTD4_API_CALL
dftd4_new_structure(dftd4_error ,
const int ,
const int* ,
const double* ,
const double* ,
const double* ,
const bool* ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_delete_structure(dftd4_structure* ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_update_structure(dftd4_error ,
dftd4_structure ,
const double* ,
const double* ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY dftd4_model DFTD4_API_CALL
dftd4_new_d4_model(dftd4_error ,
dftd4_structure ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY dftd4_model DFTD4_API_CALL
dftd4_new_d4s_model(dftd4_error ,
dftd4_structure ) DFTD4_API_SUFFIX__V_4_0;
DFTD4_API_ENTRY dftd4_model DFTD4_API_CALL
dftd4_custom_d4_model(dftd4_error ,
dftd4_structure ,
double ,
double ,
double ) DFTD4_API_SUFFIX__V_3_1;
DFTD4_API_ENTRY dftd4_model DFTD4_API_CALL
dftd4_custom_d4s_model(dftd4_error ,
dftd4_structure ,
double ,
double ) DFTD4_API_SUFFIX__V_4_0;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_delete_model(dftd4_model* ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY dftd4_param DFTD4_API_CALL
dftd4_new_rational_damping(dftd4_error ,
double ,
double ,
double ,
double ,
double ,
double ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY dftd4_param DFTD4_API_CALL
dftd4_load_rational_damping(dftd4_error ,
char* ,
bool ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_delete_param(dftd4_param* ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_get_properties(dftd4_error ,
dftd4_structure ,
dftd4_model ,
double* ,
double* ,
double* ,
double* ) DFTD4_API_SUFFIX__V_3_1;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_get_dispersion(dftd4_error ,
dftd4_structure ,
dftd4_model ,
dftd4_param ,
double* ,
double* ,
double* ) DFTD4_API_SUFFIX__V_3_0;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_get_numerical_hessian(dftd4_error ,
dftd4_structure ,
dftd4_model ,
dftd4_param ,
double* ) DFTD4_API_SUFFIX__V_3_5;
DFTD4_API_ENTRY void DFTD4_API_CALL
dftd4_get_pairwise_dispersion(dftd4_error ,
dftd4_structure ,
dftd4_model ,
dftd4_param ,
double* ,
double* ) DFTD4_API_SUFFIX__V_3_2;