Update new C API
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