前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CFOUR程序的安装与运行

CFOUR程序的安装与运行

作者头像
用户7592569
发布2021-10-27 11:58:00
1.9K0
发布2021-10-27 11:58:00
举报
文章被收录于专栏:量子化学量子化学

CFOUR程序的全称为Coupled-Cluster techniques for Computational Chemistry,是一款专注于高精度量子化学计算的程序。从名字可以看出,其专长为耦合簇方法,支持在CC级别下做单点、几何结构优化(如CCSD(T)级别)、激发态计算(如EOM-CCSDT)、性质计算(如CCSD(T)级别的NMR计算)。其官方网站为

http://slater.chemie.uni-mainz.de/cfour/index.php?n=Main.HomePage

有关于CFOUR的介绍、获取、安装及所有关键词的使用说明。

一、程序获取

COUR是非商业程序,但是其获取略有点麻烦。需要在官网下载LICENSE FORM,打印之后进行签名,并将LICENSE以实体信的方式寄给Jürgen Gauss教授,或者通过传真的方式发过去,但就是不能通过电子邮件。笔者六月下旬通过EMS寄过去,大概不到一个月的时间送到,花费220人民币。也有朋友告诉我可以寄挂号信,只要25块钱,而且速度似乎比我的EMS快了不少,真是亏大发了。(今天问了下小伙伴,好像寄丢了。。。)之后官方会发来电子邮件,告知下载方式。目前对外发布的源码是2.1版本。

二、编译

解压:

代码语言:javascript
复制
unzip cfour-public-master.zip

然后可根据自己的喜好将目录重命名:

代码语言:javascript
复制
mv cfour-public-master cfour

进入cfour目录:

代码语言:javascript
复制
cd cfour

在官方网站的Installation中,有安装过程的介绍,点击examples,其中有各种平台的配置方式,我们用最常见的64位Linux系统、Intel编译器、MKL数学库和openmpi并行环境,其配置选项如下:

代码语言:javascript
复制
export MKLPATH=/opt/intel/mkl/lib/intel64
./configure FC=ifort CC=icc MPIFC=mpif90 --with-blas="$MKLPATH/libmkl_intel_ilp64.a -Wl,--start-group $MKLPATH/libmkl_intel_ilp64.a $MKLPATH/libmkl_intel_thread.a $MKLPATH/libmkl_core.a -Wl,--end-group -qopenmp -lpthread" --prefix=/home/zhigang/software/cfour --enable-mpi=openmpi --with-mpirun="mpirun -np \$CFOUR_NUM_CORES" --with-exenodes="mpirun -np \$CFOUR_NUM_CORES"

笔者所用的编译器和MKL版本相对较新,为intel 2019 update5,需要对官方给出的configure选项做一些修改:官方--with-blas后面引号中是$MKLPATH/libmkl_solver_ilp64.a,在较新版本的MKL中已经没有此库文件,需要改成libmkl_intel_ilp64.a。另一个改动是将官方给的-openmp改成-qopenmp,同样也是由于较新版本的intel编译器使用openmp并行时的选项是-qopenmp。

最后make即可:

代码语言:javascript
复制
make -j48 #用48核并行编译

得到的可执行文件在bin目录中,最后将该目录写入.bashrc文件中:

代码语言:javascript
复制
export PATH=/home/zhigang/software/cfour/bin:$PATH

三、运行举例

CFOUR官网的手册写得十分详细,几乎所有的功能都有输入文件示例,读者在需要的时候可以方便地查看。此处我们以在CCSD(T)方法下优化水分子结构为例,简单说明输入文件书写的一般规则和运行方法。输入文件如下,且必须命名为ZMAT:

代码语言:javascript
复制
Geometry optimization of H2O at CCSD(T) level
O
H 1 R*
H 1 R* 2 A*

R=0.958
A=104.5

*CFOUR(CALC=CCSD(T),BASIS=dzp,ABCDTYPE=AOBASIS,CC_PROGRAM=ECC
GEO_CONV=10
CC_CONV=12
LINEQ_CONV=12
SCF_CONV=12)

第一行为标题,内容随意。紧接着为体系的坐标,CFOUR默认需要使用内坐标,长度的单位默认为Å,而最常用的Cartesian坐标仅支持在做单点能计算的时候使用。如果做几何结构优化,需要在内坐标的变量后面打上星号,在后面的关键词部分也无需说明,会自动做结构优化。内坐标结束后,以*CFOUR开头的括号中的部分为关键词,每个关键词用逗号分开。若关键词比较多,可以分行书写,注意此时每行最后不需要再写逗号。CALC用来指定计算方法,BASIS指定基组。若要使用MPI并行,必须加上ABCDTYPE=AOBASIS,CC_PROGRAM=ECC这两个关键词。后面则是一些收敛标准的设定。在某些计算任务中,最后还会有一个额外输入部分,用来设定一些计算参数,例如官网给出的在EOM-CCSD级别下计算水的电子激发性质的输入文件如下:

代码语言:javascript
复制
Water CC-LR/DZP at experimental equilibrium geometry   
O
H 1 R
H 1 R 2 A

R=0.958
A=104.5

*CFOUR(CALC=CCSD,BASIS=DZP,EXCITE=EOMCC)

%excite*
1
1
1 5 0 6 0 1.0

最后的%excite*部分用于设定激发态计算相关参数。

虽然在输入文件中已经指定了基组的名字,但是我们还需要提供基组文件。在CFOUR安装目录下的basis目录中,有GENBAS和ECPDATA两个文件,包含了CFOUR内置的基组和赝势的信息。实际计算时,要将GENBAS文件(有赝势时连同ECPDATA文件)复制到工作目录下。此外,还要注意CFOUR中基组的名字是大小写敏感的,必须与GENBAS中的一致。如果是自定义基组,可以在basisset exchange上获取基组数据,写到GENBAS文件中,并在ZMAT文件中写上相应的基组名字即可。

无论运行串行还是并行版本的CFOUR,都只要用如下命令即可:

代码语言:javascript
复制
xcfour > OUTPUT &

当然,此处OUTPUT为自己命名的输出文件名称。控制并行核数需要手动设定如下两个环境变量:

代码语言:javascript
复制
export CFOUR_NUM_CORES=6
export MKL_NUM_THREADS=2

前者表示使用6个MPI进程,后者表示在每个MPI进程中调用MKL库函数时用两个线程进行并行,所以总的线程数为6*2=12。原则上来说,如何分配好这两个数使程序的运行效率最高是需要对程序的源代码有所了解才行,需要知道哪部分程序使用了MPI并行,哪部分使用了MKL库函数。例如,CFOUR中的MP2计算没有实现MPI并行,就只能依靠MKL的自身并行来提高效率。对某些任务,可能程序中用MKL库函数的地方并不多,此时就基本靠MPI进程来并行。总之,这相当于是MPI和openmp的混合并行,如何使并行效率最高,可以适当地做些测试,积累经验。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子化学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档