查看原文
其他

Block-1.5的编译和安装

jxzou 量子化学 2022-07-07

本公众号之前已经发过《离线安装PySCF程序》、《安装基于openmpi的mpi4py》和《Boost.MPI的编译》等文,详情可通过公众号中的“文章分类“查看。结合本文共4篇,即可实现大活性空间DMRG-NEVPT2的计算。简单讲,PySCF的存在使得用户不需要学会Block程序的使用方法及其输入文件写法,即可直接调用Block做DMRG计算,只需要会用PySCF即可(而这相对简单许多)。本文以Block-1.5.3为例介绍Block程序的安装,PySCF 1.4.7,openmpi-1.10.3和boost.1.55.0等软件已事先安装好。

 

Step1. 下载Block源代码https://github.com/sanshar/Block

解压tar -zxvf block-1.5.3.tar.gz

cp -r block-1.5.3 block-1.5.3_mpi

之所以复制一份,是接下来我们要分别编译一份串行版本和一份mpi并行版本。做计算时两种都常用到。

 

Step2. 编译串行版

打开Makefile,修改如下几处

CXX = icpc

BOOSTINCLUDE = /opt/boost_1_55_0/include/

BOOSTLIB = -L/opt/boost_1_55_0/lib -lboost_system-mt -lboost_filesystem-mt -lboost_serialization-mt -lboost_mpi-mt

 

USE_MKL = yes

MKLLIB = /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64/``

MKLFLAGS = /opt/intel/compilers_and_libraries/linux/mkl/include``

(注意上述两行最后是两个单反引号,按键位于键盘Tab键上方,不是引号或双引号)

 

在LIBS += -L$(NEWMATLIB) -lnewmat $(BOOSTLIB) $(LAPACKBLAS) $(MALLOC)这一行最后加上-lpthread -lrt。

 

OPENMP_FLAGS= -qopenmp

修改这一处是因为近几年的intel编译器不再支持-openmp这一参数,而是-qopenmp。

 

然后直接执行make即可。完成后可以运行./block.spin_adapted -v显示版本。实际安装时,各种软件和库的路径需按照自己机器上的具体情况修改。

 

Step3. 编译并行版

打开Makefile,修改如下几处

CXX = icpc

MPICXX = mpicxx

USE_MPI = yes

 

boost库和mkl库路径的修改与Step 2中的一致,-lpthread -lrt加的位置也是一样的,这里不再重复。

然后找到下方MPI_LIB = -lboost_mpi一行,将其注释,因为我们在上述boost库路径中写了-lboost_mpi-mt。

完成后同样可以运行./block.spin_adapted -v显示版本。

 

Step4. 在PySCF程序中写好环境变量

进入pyscf/pyscf/dmrgscf/目录,复制一份配置文件,并重命名

cp settings.py.example settings.py

打开settings.py文件,修改

BLOCKEXE = '/opt/block-1.5.3_mpi/block.spin_adapted'

BLOCKEXE_COMPRESS_NEVPT = '/opt/block-1.5.3/block.spin_adapted'

MPIPREFIX = 'mpirun'

BLOCKVERSION = '1.5.3'

 

其中BLOCKEXE为并行版Block可执行文件所在处,BLOCKEXE_COMPRESS_NEVPT为串行版可执行文件所在处,二者不能搞错。中间的临时文件路径BLOCKSCRATCHDIR根据自己需要修改。串行版本的Block不代表在计算DMRG-NEVPT2时真的只用单核计算,而是会调用mpi4py模块里的MPI来实现并行。

 

Step5. 运行简单算例

把下述内容写进一个a.py文件中,

import os

from pyscf import gto, scf, mcscf, dmrgscf, mrpt

dmrgscf.settings.MPIPREFIX = 'mpirun -n 3'

 

os.system('date')

mol =gto.M(atom='C 0 0 0; C 0 0 1', basis='631g', verbose=5)

mf = scf.RHF(mol).run()

mc = dmrgscf.DMRGSCF(mf, 4, 4)

mc.kernel()

mrpt.NEVPT(mc).compress_approx().kernel()

os.system('date')

 

然后执行python a.py >& a.out &

需要大约8分钟,最后的DMRGSCF能量为-75.3374493,Nevpt2 Energy为-0.1047427,如果小数点后前5位不一致,很可能是安装有问题。注意,该例子计算量太小,用DMRGSCF(4,4)计算是不如直接用CASSCF(4,4)算快的。当活性空间大很多时DMRG的优势就会体现出来。

 

更多参考信息:

http://sunqm.github.io/Block/build.html

上述网址还提供预编译的Block程序,如果与自己机子上intel和mpi等软件的条件相符,可直接使用。

 

https://github.com/sanshar/Block

上述网址中还交待了如何引用Block程序、新版与旧版有何区别等。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存