Skip to content

Update new C API

Igor S. Gerasimov requested to merge foxtran/libxc:fix/new-C-API into hgga_reclean

This MR is based on libxc/hgga_reclean branch, where a new C API is proposed.

I have updated API for simpler integration with Fortran.

Old new C API

// INPUT
const xc_input_variables_dimensions *input_variables_dimensions_get(int nspin);
xc_input_variables *xc_input_variables_allocate(double np, int family, int flags, int nspin);
int xc_input_variables_sanity_check(const xc_input_variables *out, int family, int flags);
void xc_input_variables_initialize(xc_input_variables *out);
void xc_input_variables_deallocate(xc_input_variables *out);
// OUTPUT
const xc_output_variables_dimensions *output_variables_dimensions_get(int nspin);
xc_output_variables *xc_output_variables_allocate(double np, const int *orders, int family, int flags, int nspin);
int xc_output_variables_sanity_check(const xc_output_variables *out, const int *orders, int family, int flags);
void xc_output_variables_initialize(xc_output_variables *out);
void xc_output_variables_deallocate(xc_output_variables *out);

New new C API:

// INPUT
const xc_input_variables_dimensions *input_variables_dimensions_get(int nspin);
xc_input_variables *xc_input_variables_allocate(const xc_func_type *func, size_t np);
int xc_input_variables_sanity_check(const xc_func_type *func, const xc_input_variables *in);
void xc_input_variables_initialize(xc_input_variables *out);
void xc_input_variables_deallocate(xc_input_variables *out);
// OUTPUT
const xc_output_variables_dimensions *output_variables_dimensions_get(int nspin);
xc_output_variables *xc_output_variables_allocate(const xc_func_type *func, size_t np, const int *orders, int ext_flags);
int xc_output_variables_sanity_check(const xc_func_type *func, const xc_output_variables *out, const int *orders, int ext_flags);
void xc_output_variables_initialize(xc_output_variables *out);
void xc_output_variables_deallocate(xc_output_variables *out);

I have also added int xc_func_info_get_ingredients(const xc_func_info_type *info) for easier getting of necessary ingredients of DFT functionals without additional checks inside of MGGA family. It simplifies code in io_variables.c. Interfaces are added for C, Fortran and Python.

CUDA build was not checked.

Edited by Igor S. Gerasimov

Merge request reports