离线安装PySCF程序(1.5及更高版本)

2020-07-27 15:19:23 浏览数 (1)

本公众号之前已发过《离线安装PySCF程序》一文,可在“文章分类->软件教程->PySCF”中查看。当时的安装教程适用于PySCF 1.5之前的版本,而在1.5及之后,由于需要版本更高的xcfun库,若仍按前文安装会出现XC_PARTIAL_DERIVATIVES变量未定义等问题。现更新适用于PySCF 1.5及之后版本的安装教程。

本文安装环境:GCC版本4.8.5,MKL库来自Intel 2019 update 1,已事先装好Anaconda Python 3,撰写安装教程时所用的PySCF版本为1.5.4。安装较新的xcfun-master要求cmake版本不低于3.5。可用cmake --version查看当前cmake版本号,如果低于3.5需要先升级至符合要求(可直接至官网下载二进制版本)。

1. 下载电子积分库libcint,密度泛函库libxc和xcfun,及PySCF共4个压缩包

代码语言:javascript复制
https://github.com/sunqm/libcint/tree/cint3
https://github.com/dftlibs/xcfun/tree/master
http://sunqm.net/pyscf/files/src/libxc-3.0.0.tar.gz
https://github.com/sunqm/pyscf

注意官方安装教程中的xcfun-stable-1.x.zip对于PySCF 1.5或更高版本已不再适用,需要去xcfun官网下载更新的xcfun-master。

解压:

代码语言:javascript复制
unzip libcint-cint3.zip
unzip xcfun-master.zip
tar -zxvf libxc-3.0.0.tar.gz
unzip pyscf-master.zip
mv pyscf-master pyscf-1.5.4

最后一步也可以不改文件夹名称,纯粹是个人习惯。

2. 编译和安装libcint

代码语言:javascript复制
cd libcint-cint3
mkdir build && cd build

cmake -DWITH_F12=1 
-DWITH_RANGE_COULOMB=1 
-DWITH_COULOMB_ERF=1 
-DCMAKE_INSTALL_PREFIX:PATH=/home/$USER/software/cint_and_xc 
-DCMAKE_INSTALL_LIBDIR:PATH=lib ..

make && make install

注意:

(1)最后有个“..”,表示CMakeLists.txt在上级目录。

(2)反斜杠表示续行符,将下一行连在一起,适用于参数太多一行写不完。

(3)安装路径

/home/$USER/software/cint_and_xc

是笔者的习惯,可以根据自己实际情况修改。后面要安装的libxc和xcfun库我们也要将其安装至此目录。最后安装PySCF时要用到该路径,里面有所需的库文件。

(4)这里的lib不需要写绝对路径。

3. 编译和安装libxc

代码语言:javascript复制
cd libxc-3.0.0

./configure --prefix=/home/$USER/software/cint_and_xc 
--libdir=/home/$USER/software/cint_and_xc/lib 
--enable-shared --disable-fortran LIBS=-lm

make && make install

注意:

这里的libdir需要写绝对路径。这一步与官方的安装方式略有不同,官方需要建立build目录,此处笔者建议直接./configure;如果建了build再在build文件夹里../configure,会造成build里还有个build,然后两处文件依赖的情况。

4. 编译和安装xcfun

代码语言:javascript复制
cd xcfun-master
mkdir build && cd build
 
cmake -DCMAKE_BUILD_TYPE=RELEASE 
-DBUILD_SHARED_LIBS=1 
-DXC_MAX_ORDER=3 
-DXCFUN_ENABLE_TESTS=0 
-DCMAKE_INSTALL_PREFIX:PATH=/home/$USER/software/cint_and_xc 
-DCMAKE_INSTALL_LIBDIR:PATH=lib ..

make && make install

上述四步完成后,可以在

/home/$USER/software/cint_and_xc

下发现有bin、include、share和lib四个文件夹。

还需要做两件事:

(1)将lib路径添加进环境变量:

代码语言:javascript复制
export LD_LIBRARY_PATH=/home/$USER/software/cint_and_xc/lib:$LD_LIBRARY_PATH

然后source使之生效。

(2)将include/XCFun/xcfun.h文件复制到 include/下。

5. 安装PySCF

代码语言:javascript复制
cd pyscf-1.5.4/pyscf/lib

打开这里的CMakeLists.txt文件,找到第一个#set(BLAS_LIBRARIES一行,在此处删除注释符号“#”,更改mkl库路径为当前系统下的mkl路径,一般是

/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64/

下面几行“or”部分不用动。在引号中-lmkl_avx后插入-lmkl_avx2 -lmkl_def。

代码语言:javascript复制
mkdir build && cd build

cmake -DBUILD_LIBCINT=0 
-DBUILD_LIBXC=0 -DBUILD_XCFUN=0 
-DCMAKE_INSTALL_PREFIX:PATH=/home/$USER/software/cint_and_xc ..

make

安装完成后将PySCF的环境变量添加进~/.bashrc文件:

代码语言:javascript复制
export PYTHONPATH=/home/$USER/software/pyscf-1.5.4:$PYTHONPATH

完成安装。安装包和解压出的文件夹都可以删除,只留下cint_and_xc和PySCF文件夹即可。

6. 运行简单例子

代码语言:javascript复制
$ python
>>from pyscf import gto, scf
>>mol = gto.M(atom='H 0 0 0; H 0 0 1.2',basis='ccpvdz')
>>mf = scf.RHF(mol)
>>mf.kernel()

得到结果

converged SCF energy = -1.06111199785749

-1.0611119978574881

小数点第10位以后可能会有点差别,但是不重要,后面已经不是有效数字了。

7. 其他离线安装方式

有的同学直接把某个联网节点上装好的PySCF发送到未联网的节点上,有时会发现无法重新编译或者使用,原因一般有两点:(1)两节点上库环境、版本有差别;(2)两节点用户名不同和(或)安装目录不同。

解决方法:

进入pyscf/lib/build目录,先将除deps之外的目录和文件全部删除,接着将deps/src/下的 libxcfun-build目录删除,然后回到build目录里执行cmake ..和make即可。这样PySCF会认为几个库已经下载完毕,再次编译即可使用。

8. 更换C和C 编译器

安装PySCF时默认的编译器是gcc和g ,如果想用icc和icpc,可以打开pyscf/lib/CMakeLists.txt文件,在project一行上面插入两行

set(CMAKE_C_COMPILER icc的绝对路径)

set(CMAKE_CXX_COMPILER icpc的绝对路径)

设定好编译器路径即可。

9. 万一将来需要更新的库怎么办

打开pyscf/lib/CMakeLists.txt文件,搜索git,查看每个库对应的网址和版本号,它们就是在线安装时自动下载的版本,自己去下载与其一致的版本,发送到未联网的节点就行。

参考来源

https://sunqm.github.io/pyscf/install.html

更新日志

  • Jan 25, 2020 minor revision
  • Mar 4, 2019 初版

0 人点赞