cfour程序的编译和使用方法简介 | 宜武汇-ag真人国际厅网站

1 前言

cfour程序的全称是coupled-cluster techniques for computational chemistry。它是由acesii-mab程序改名而来,而acesii-mab程序是acesii程序的一个分支,acesii (advanced concepts in electronic structure)是从1990年代初开始开发的从头算程序,特别适合微扰和耦合簇的大规模并行计算。

cfour继承了acesii的大部分特征,是一个以做耦合簇见长的从头算程序,同时也支持hf、微扰、ci、qci计算,但是不支持dft。cfour的耦合簇最高能做到ccsdt,并且在这样的级别下还能支持二阶解析导数,相比之下,常用的gaussian计算能量只支持到ccsd(t),而其一阶解析导数最高只支持到ccsd。cfour做耦合簇的效率号称很高,ccsd(t)计算对于高对称性体系比gaussian快2、3倍是有的,结果相符也很好,但是无对称性体系下却并不总比gaussian09快。cfour对gimic, mrcc, dirac, newton-x程序提供了接口,利用gimic可以分析感应电流密度,借助mrcc可以做无穷高阶耦合簇,dirac是著名的能支持四分量相对论计算的程序,newton-x是一个bo近似下做分子动力学的程序。

cfour是免费开源的程序,但是获得它相对麻烦点,必须在其ag真人国际厅网站主页http://www.cfour.de上下载授权表,签字后通过传真或者实体邮件发给开发者。为方便大家我也传在了这里:

cfour比acesii相对来说更user-friendly一些(尽管仍远称不上user-friendly),容易编译,而acesii包括后来的acesiii则都是面向开发者的程序,一般用户编译使用起来极其艰苦。不过cfour终究还是面向有一定量化经验的用户,不适合初学者,手册写得粗糙晦涩简陋,很多地方让人糊涂,且只有在线版手册,给新用户入门带来些麻烦,可以去http://www.qtp.ufl.edu/aces/index.shtml下载一份acesii的pdf版手册在必要时作为参考,写得更为详细。

cfour在线手册地址:http://slater.chemie.uni-mainz.de/cfour/index.php?n=main.manual

cfour关键词一览:http://slater.chemie.uni-mainz.de/cfour/index.php?n=main.listofkeywordsinalphabeticalorder

cfour输出文件介绍:http://slater.chemie.uni-mainz.de/cfour/index.php?n=main.filestructure

cfour单点计算支持的方法一览:

r/u/rohf,tcscf

mp2/3/4

cc2/3

ccd, ccsd, ccsd t, ccsd(t), ccsdt, ccsdt-n (n=1-4), brueckner-ccd (b-ccd), b-ccd(t), orbital-optimized cc (oo-cc)

cid, cisd

qcisd, qcisd(t)

cfour一阶解析梯度支持的方法一览:

hf-scf,tcscf

mp2/3/4

cc2/3

qcisd,qcisd(t)

ccd, ccsd, ccsd(t), ccsdt-n (n=1-4), ccsdt

cfour二阶解析梯度支持的方法一览:

hf-scf (rhf, uhf, rohf)

mp2/3/4 (rhf, uhf)

ccd, ccsd, ccsd(t) (rhf, uhf)

ccsdt-n (n=1-4), ccsdt (rhf)

总的来说,cfour的最主要用处有三:获得很高精度的能量、结构或密度;更快地做耦合簇计算;与gimic相连接分析感应电流(将在其它帖子专门介绍)

2 编译方法

cfour支持mpi并行(openmpi、lammpi、mpich2都可以),支持mkl库,并可以通过mkl库的多线程模式来实现并行。编译时可以根据情况挂上不同选项,网站上给了一些例子(http://slater.chemie.uni-mainz.de/cfour/index.php?n=main.examples),但是很凌乱,这里给出最常用的64bit linux平台下的串行和并行版本编译方法。cfour的代码兼容性比较好,不同linux发行版本下,用gfortran和ifort都能顺利编译。寡人用的是rhel6u1 mpich2 1.4.1p1 ifort 12.1环境,intel i7-2630qm。12分钟可以编译完毕。

注意,如果你用的是ifort 12.x,由于其bug,在下面的步骤中执行./configure产生make.config文件后,要将make.config中的-o3都改为-o2才能执行下一步,不这样将优化等级适当调低的话编译到中途可能卡主。如果是gfortran或者老版本ifort,比如ifort 10,则不存在这个问题。

串行版本的最简单的编译方式:

1 解压cfour源代码包,进入其目录,假设为/sob/cfour_v1

2 运行./configure fc=ifort (没装ifort就改成fc=gfortran)

3 make。编译出的文件会在bin目录下

4 将export path=$path:/sob/cfour_v1/bin加入到当前用户的.bashrc文件中,输入bash命令或重新启动控制台使之生效。

并行版本 mpich2 mkl gimic程序的接口的编译:

1 把ifort 12.1(连带着安装包内含的mkl)安装到默认路径

2 安装mpich2到默认路径。也就是解压后运行./configure fc=ifort,然后make,然后make install。将127.0.0.1 ltwd ltwd加到/etc/hosts最后,ltwd代表当前实际主机名。

3 export mklpath=/opt/intel/mkl/lib/intel64 (如果是老版本ifort,默认的mkl路径可能不一样,根据实际情况调整)

4 解压cfour源代码包,进入其目录,假设为/sob/cfour_v1

5 将下面这一串作为一整行复制到控制台中执行。由于这里加了–enable-gimic,因此会编译出xcpdens程序,这是给gimic用的,和gimic包里自带的xcpdens其实是完全一样的。

./configure fc=ifort mpifc=mpif90 –enable-gimic –with-blas=”$mklpath/libmkl_solver_ilp64.a -wl,–start-group $mklpath/libmkl_intel_ilp64.a $mklpath/libmkl_intel_thread.a $mklpath/libmkl_core.a -wl,–end-group -openmp -lpthread” –enable-mpi=mpich –with-mpirun=”mpirun -np \$cfour_num_cores” –with-exenodes=”mpirun -np \$cfour_num_cores”

5 make

6 将export path=$path:/sob/cfour_v1/bin加入到当前用户的.bashrc文件中,输入bash命令或重新启动控制台使之生效。

3 使用方法

cfour的输入文件必须命名为zmat。运行前要将cfour目录下basis文件夹里的genbas基组文件拷到zmat所在目录下,如果用赝势,也要把basis文件夹里的ecpdata文件拷到那里。然后在zmat所在目录下输入xcfour即可开始运算。运行过程信息输出到屏幕上,同时还会在当前目录下产生一大堆文件,如果之后要算新任务,应该把它们删掉。

如果用的是按上面方法编译的并行 mkl版,运行前需要先设定两个环境变量,比如有8个cpu核心时可以这么设

export cfour_num_cores=4

export mkl_num_threads=2

这里cfour_num_cores设定的是mpi并行时启用多少个进程,设为n的话那么内存及硬盘的开销就会约为之前的n倍。mkl_num_threads设定的是每个mpi进程中在调用mkl数学库时启用多少个线程,这并不会增加资源消耗。上面的例子,运行时总共就会有4*2=8个线程并行。由于程序中利用mkl库的部分是有限的,所以靠mkl_num_threads并行明显不如用cfour_num_cores并行程度充分,对于四核机子,通常这两个参数为4/1时比1/4的时候要快很多。然而,由于做较大的后hf计算时总是要频繁、大量读写硬盘,进程太多就会使硬盘i/o速度成为严重的瓶颈,反倒会拖慢速度,而且还大幅增加了硬盘使用量,所以,4/1时常不如2/2的时候快。这两个参数怎么设效率最高,应当在自己条件下实际测试一下。

mpi并行运算时依然是直接输入xcfour即可,不要在前面自己写mpirun -np x,因为程序会自动把它加上去。

cfour支持mpi并行的功能主要是耦合簇计算,必须在输入文件中包含cc_program=ecc和abcdtype=aobasis关键词才行(即便不并行,带上它们也比默认情况算得更快)。

对于不支持mpi并行的任务,如mp2,如果想达到并行化,就只能靠mkl_num_threads来实现。也就是说,此时要用串行版本来计算,且在编译串行版本的./configure这一步后面加上这一串以利用mkl:–with-blas=”$mklpath/libmkl_solver_ilp64.a -wl,–start-group $mklpath/libmkl_intel_ilp64.a $mklpath/libmkl_intel_thread.a $mklpath/libmkl_core.a -wl,–end-group -openmp -lpthread”

假设有n个核,就设export mkl_num_threads=n

4 输入文件格式

典型的输入文件格式为

water cc-lr/dzp at experimental equilibrium geometry

h 1 r

h 1 r 2 a

r=0.958

a=104.5

*cfour(calc=ccsd,basis=dzp,excite=eomee)

%excite*

1 5 0 6 0 1.0

[空行]

第一行是注释,接下来是分子坐标(默认为埃),元素名必须顶头写。*cfour()里面是关键词,显然,calc和basis就是指方法和基组。最后一部分是特殊任务才要输入的(这里是对eom-ccsd算激发态任务的设定)。

每行不得超过80个字符,然而关键词那行经常会超过这要求,此时可以分多行写,例如

*cfour(calc=hf,basis=cc-pvdz,prop=nmr,symmetry=on

cc_program=ecc,abcdtype=aobasis)

注意换行处末尾不加逗号,而且要有个空格。因此上面symmetry=on后面跟着个空格,不要忽略。

如果想优化结构,不需要专门写关键词,将相应的变量上打星号即可,如

h 1 r*

h 1 r* 2 a*

5 常用关键词

此程序很多关键词都平时用不上,或者不需要修改,这里我总结出最常用的关键词的主要含义,建议过目一遍,具体信息还要去查阅在线手册,在日后新版本很多参数可能都会变名字。注意cfour程序做后hf时默认是不冻芯的。

emory=xxx将可用内存设为xxx,默认单位为integerwords。对于32/64bit平台分别乘以4/8就是kb。用mem_unit可以将单位改为kb, mb, gb, tb

ecp=on:使用赝势

charge:体系的电荷

multiplicity:体系的自旋多重度

coordinates:控制体系的坐标描述。默认的internal是内坐标,cartesian可以用笛卡尔坐标,但是不能做几何优化。xyz2int是提供内坐标连接关系但使用笛卡尔坐标描述位置。

scf_conv=n:密度矩阵最大变化小于10^-n就停了。默认为7

scf_damping:设500有益于解决scf不收敛

scf_maxcyc:scf最大迭代次数,默认150

scf_extrapolation:是否用diis,默认为on

spherical:默认的on是用球谐型高斯函数,off用笛卡尔型

subgroup:默认使用最高阶的阿贝尔点群对称性。c1就相当于symmetry=off

print=1:可以比默认的0输出更多细节信息

geo_method=ts:找过渡态

geo_conv=n:设定优化收敛限为n hartree/bohr

geo_maxcyc:最大优化步数,默认为50

geo_maxstep:设几何优化的最大步长为millbohr。默认300

eval_hess=n:每隔n个优化步算一次精确hessian,默认为从不,也就是用准牛顿法

excite:设定eom-cc/lr-cc的处理类型,默认为none,eomee是计算激发态,eomip是计算离子化态,eomea是计算electron-attached态

abcdtype=aobasis:建议对最高至ccsd(t)的各种计算都加上,可以加快速度。默认是=0 (standard)

xfield,yfield,zfield:xyz方向加电场

props=first_order:计算一阶属性(多极矩,相对论校正,电场梯度,自旋密度,mulliken电荷);second_order计算静态可极化率;dynamical;计算含频可极化率;nmr:计算nmr;hyperpol:计算静态超极化率;dyn_hyp计算含频率超极化率

raman_int=1:算拉曼

relativistic:设定相对论校正

dboc=1:做diagonal born-oppenheimer对能量的校正

vibration=analytic:用解析二阶导数计算谐振频率

cc_program:控制做cc的程序,默认是vcc,对于ccsd, ccsd t, ccsd(t), closed-shell ccsdt-n, cc3 和ccsdt,建议设为ecc来加快速度

frozen_core:cfour默认在post-hf中不冻芯。如果设为on,则内核轨道在post-hf过程中都被冻结。如果想设定具体哪些被冻,则用dropmo来设定

dropmo:如果输入比如1>10-55-58>64,就代表1,2,3,4,5,6,7,8,9,10,55,58,59,60,61,62,63轨道都被冻结

frozen_virt:默认为off,如果设为on,高于指定能量的虚轨道将不被考虑

hfstability:on代表做scf波函数稳定性测试

reference:rhf、uhf、rohf、tcscf(two-configureational scf)

restart_cc=1:重启cc计算

cc_conv=n:cc收敛标准为系数最大改变值小于10^-n。默认为7。实际上此时能量变化远小于1d-7了,想节省时间的话可以事先停了

附1:basis关键词可用的参数(对大小写敏感)

sto-3g

3-21g

4-31g

6-31g

6-31g*

6-31g**

6-311g

6-311g*

6-311g**

dz

dzp

tz

tzp

tz2p

pvdz

pvtz

pvqz

pv5z

pv6z

pcvdz

pcvtz

pcvqz

pcv5z

pcv6z

aug-pvdz

aug-pvtz

aug-pvtz

aug-pvqz

aug-pv5z

aug-pv6z

d-aug-pvdz

d-aug-pvtz

d-aug-pvqz

d-aug-pv5z

d-aug-pv6z

cc-pvdz

cc-pvtz

cc-pvqz

cc-pv5z

cc-pv6z

cc-pcvdz

cc-pcvtz

cc-pcvqz

cc-pcv5z

cc-pcv6z

pwcvdz

pwcvtz

pwcvqz

pwcv5z

pwcv6z

pwcvdz

pwcvtz

pwcvqz

pwcv5z

pwcv6z

svp

dzp

tzp

tzp2p

qz2p

pz3d2f

13s9p4d3f

wmr

ano0

ano1

ano2

even_tempered

附2:calc关键词可用的设定(还有些关键词比如fci、cc4、ccsdtqph等都需要外挂mrcc才能实现)

scf (or hf)

mbpt(2) (or mp2)

mbpt(3) (or mp3)

sdq-mbpt(4) (or sdq-mp4)

mbpt(4) (or mp4)

ccd

ccsd

ccsd(t)

ccsdt-1

ccsdt-1b

ccsdt-2

ccsdt-3

ccsdt-4

ccsdt

cc2

cc3

qcisd

qcisd(t)

cid

cisd

ucc(4)

b-ccd

原文链接:http://sobereva.com/150

网络摘文,本文作者:15h,如若转载,请注明出处:https://www.15cov.cn/2023/08/27/cfour程序的编译和使用方法简介/

发表评论

邮箱地址不会被公开。 必填项已用*标注

网站地图