=== modified file 'libxc-2.0.1/src/libxc_master.F90' --- libxc-2.0.1/src/libxc_master.F90 2013-05-22 11:01:22 +0000 +++ libxc-2.0.1/src/libxc_master.F90 2013-05-23 08:12:44 +0000 @@ -135,6 +135,15 @@ character(len=*), intent(out) :: s ! the string that is output end subroutine XC_F90(info_refs) + subroutine XC_F90(functional_get_name)(func_number, func_string) + integer, intent(in) :: func_number + character(len=256), intent(out) :: func_string + end subroutine XC_F90(functional_get_name) + + integer function XC_F90(functional_get_number)(func_string) + character(len=*), intent(in) :: func_string + end function XC_F90(functional_get_number) + integer function XC_F90(family_from_id)(id) use XC_F90(types_m) integer, intent(in) :: id === modified file 'libxc-2.0.1/src/xc_f.c' --- libxc-2.0.1/src/xc_f.c 2013-05-22 11:01:22 +0000 +++ libxc-2.0.1/src/xc_f.c 2013-05-23 08:12:44 +0000 @@ -27,6 +27,7 @@ #include "xc.h" #include "string_f.h" + /* version */ void XC_FC_FUNC(f90_version, F90_VERSION) (int *major, int *minor) @@ -34,8 +35,8 @@ XC(version)(major, minor); } -/* info */ +/* info */ CC_FORTRAN_INT XC_FC_FUNC(f90_info_number, F90_INFO_NUMBER) (void **info) { @@ -63,14 +64,16 @@ return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->family; } + CC_FORTRAN_INT XC_FC_FUNC(f90_info_flags, F90_INFO_FLAGS) (void **info) { return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->flags; } + void XC_FC_FUNC(f90_info_refs, F90_INFO_REFS) - (void **info, CC_FORTRAN_INT *number, char **s, STR_F_TYPE ref_f STR_ARG1) + (void **info, CC_FORTRAN_INT *number, char **s, STR_F_TYPE ref_f STR_ARG1) { char *c, ref[256]; /* hopefully no ref is longer than 256 characters ;) */ XC(func_info_type) *func_p = (XC(func_info_type) *)(*info); @@ -93,6 +96,39 @@ fflush(stdout); } + +void XC_FC_FUNC(f90_functional_get_name, F90_FUNCTIONAL_GET_NAME) + (CC_FORTRAN_INT *func_number, STR_F_TYPE func_string STR_ARG1) +{ + char *name; + + name = XC(functional_get_name)(*func_number); + if ( name == NULL ) + { + name = (char *) malloc(256); + sprintf(name, "unknown\0"); + } + + TO_F_STR1(name, func_string); + free(name); +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_functional_get_number, F90_FUNCTIONAL_GET_NUMBER) + (STR_F_TYPE func_string STR_ARG1) +{ + char *name; + int ret; + + TO_C_STR1(func_string, name); + + ret = XC(functional_get_number)(name); + free(name); + + return (CC_FORTRAN_INT) ret; +} + + /* functionals */ CC_FORTRAN_INT XC_FC_FUNC(f90_family_from_id, F90_FAMILY_FROM_ID) (CC_FORTRAN_INT *functional) @@ -100,6 +136,7 @@ return (CC_FORTRAN_INT) XC(family_from_id)((int) (*functional), NULL, NULL); } + /* Standard initialization */ void XC_FC_FUNC(f90_func_init, F90_FUNC_INIT) (void **p, void **info, CC_FORTRAN_INT *functional, CC_FORTRAN_INT *nspin) @@ -113,6 +150,7 @@ *info = (void *)(func_p->info); } + void XC_FC_FUNC(f90_func_end, F90_FUNC_END) (void **p) { @@ -131,6 +169,7 @@ XC(lda)((XC(func_type) *)(*p), *np, rho, zk, vrho, v2rho2, v3rho3); } + void XC_FC_FUNC(f90_lda_exc, F90_LDA_EXC) (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *zk) @@ -138,6 +177,7 @@ XC(lda)((XC(func_type) *)(*p), *np, rho, zk, NULL, NULL, NULL); } + void XC_FC_FUNC(f90_lda_exc_vxc, F90_LDA_EXC_VXC) (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *zk, FLOAT *vrho) @@ -145,6 +185,7 @@ XC(lda)((XC(func_type) *)(*p), *np, rho, zk, vrho, NULL, NULL); } + void XC_FC_FUNC(f90_lda_vxc, F90_LDA_VXC) (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *vrho) @@ -152,6 +193,7 @@ XC(lda)((XC(func_type) *)(*p), *np, rho, NULL, vrho, NULL, NULL); } + void XC_FC_FUNC(f90_lda_fxc, F90_LDA_FXC) (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *v2rho2) @@ -159,6 +201,7 @@ XC(lda)((XC(func_type) *)(*p), *np, rho, NULL, NULL, v2rho2, NULL); } + void XC_FC_FUNC(f90_lda_kxc, F90_LDA_KXC) (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *v3rho3)