笔者使用的4.1版本,默认安装到/opt/etsf/文件夹
采用官网的编译示例,
#include (stdio.h)//注意括号要修改 #include (xc.h) //注意括号 int main() { xc_func_type func; double rho[5] = {0.1, 0.2, 0.3, 0.4, 0.5}; double sigma[5] = {0.2, 0.3, 0.4, 0.5, 0.6}; double exc[5]; int i, vmajor, vminor, vmicro, func_id = 1; xc_version(&vmajor, &vminor, &vmicro); printf("Libxc version: %d.%d.%d\n", vmajor, vminor, vmicro); if(xc_func_init(&func, func_id, XC_UNPOLARIZED) != 0){ fprintf(stderr, "Functional '%d' not found\n", func_id); return 1; } switch(func.info->family) { case XC_FAMILY_LDA: xc_lda_exc(&func, 5, rho, exc); break; case XC_FAMILY_GGA: case XC_FAMILY_HYB_GGA: xc_gga_exc(&func, 5, rho, sigma, exc); break; } for(i=0; i<5; i+=1){ printf("%lf %lf\n", rho[i], exc[i]); } xc_func_end(&func); }
以及fortran对应的版本
program lxctest use xc_f90_types_m use xc_f90_lib_m implicit none TYPE(xc_f90_pointer_t) :: xc_func TYPE(xc_f90_pointer_t) :: xc_info real(8) :: rho(5) = (/0.1, 0.2, 0.3, 0.4, 0.5/) real(8) :: sigma(5) = (/0.2, 0.3, 0.4, 0.5, 0.6/) real(8) :: exc(5) integer :: i, vmajor, vminor, vmicro, func_id = 1 call xc_f90_version(vmajor, vminor, vmicro) write(*,'("Libxc version: ",I1,".",I1,".",I1)') vmajor, vminor, vmicro call xc_f90_func_init(xc_func, xc_info, func_id, XC_UNPOLARIZED) select case (xc_f90_info_family(xc_info)) case(XC_FAMILY_LDA) call xc_f90_lda_exc(xc_func, 5, rho(1), exc(1)) case(XC_FAMILY_GGA, XC_FAMILY_HYB_GGA) call xc_f90_gga_exc(xc_func, 5, rho(1), sigma(1), exc(1)) end select do i = 1, 5 write(*,"(F8.6,1X,F9.6)") rho(i), exc(i) end do call xc_f90_func_end(xc_func) end program lxctest
测试了几轮后,使用如下的编译条件即可正常编译和运行,也记录一下备忘。
g++ libxc_lda.cpp -I/opt/etsf/include -L/opt/etsf/lib -lxc gfortran libxc_f90_test.f90 -I/opt/etsf/include -L/opt/etsf/lib -lxcf90 -lxc
(J_Sagat)