Block-1.5的编译和安装

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/目录,复制一份配置文件,并重命名

打开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程序、新版与旧版有何区别等。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180615G1V03R00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券