离线安装PySCF程序(1.5及更高版本)
本公众号之前已发过《离线安装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个压缩包
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。
解压:
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
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
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
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路径添加进环境变量:
export LD_LIBRARY_PATH=/home/$USER/software/cint_and_xc/lib:$LD_LIBRARY_PATH
然后source使之生效。
(2)将include/XCFun/xcfun.h文件复制到 include/下。
5. 安装PySCF
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。
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文件:
export PYTHONPATH=/home/$USER/software/pyscf-1.5.4:$PYTHONPATH
完成安装。安装包和解压出的文件夹都可以删除,只留下cint_and_xc和PySCF文件夹即可。
6. 运行简单例子
$ 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 初版