Dalton是一款开源免费的量子化学程序,主要特色是支持一大堆性质的计算,例如DFT下的二次响应计算(常规TDDFT计算仅是线性相应),MCSCF波函数下的核磁NMR计算等等,以及各类激发态方法。当然,也有一些高精度单参考方法(如MP2-R12和CCSD-R12等),但较少用到。其PDF手册在
https://daltonprogram.org/documentation
可下载。本公众号前期也推出过相关教程《Dalton使用——磷光及其相关过程》。本文主要介绍如何离线安装Dalton。
安装前提:cmake>=3.1。机子上需装有C、C++和Fortran编译器,BLAS和LAPACK数学库。若想要MPI并行,还需提前安装任一种MPI(如openmpi或Intel MPI)。
笔者撰文时用的是cmake 3.21、Intel 2019 update 5(内含icc, icpc和ifort编译器和MKL数学库),这些前提都满足。若读者机子未安装过Intel全家桶,对于2019或2020版本,可在如下几处
http://bbs.keinsci.com/thread-21841-1-1.html
http://bbs.keinsci.com/thread-12118-1-1.html
下载到压缩包。对于2021版本,可阅读《Linux下安装Intel oneAPI》。笔者安装的是利用MKL库的OpenMP并行版Dalton,无需任何MPI。
1. 下载源码
到Dalton的GitLab主页
https://gitlab.com/dalton/dalton/-/releases
下载Dalton源码。笔者下载的压缩包是dalton-Dalton2020.0.tar.gz。注意Dalton还依赖于其他库,若按这种方式下载,解压后external/目录下只有三个空文件夹,因此我们还需下载对应的三个库。这也很简单,到Dalton主页(https://gitlab.com/dalton/dalton)一看便知
点击external,再依次点击三个库,分别下载即可
笔者下载下来的是
gen1int-1e4148ecd676761b3399801acba443925a1fee6b.tar.gz
pelib-public-2c5aa38e391c6b2a3b4a07daa7459cbaad25ef7c.tar.gz
qfitlib-1acdc9863fdeae2cdbc7f5a599413257a095b8ad.zip
2. 安装
解压
tar -zxf dalton-Dalton2020.0.tar.gz
cd dalton-Dalton2020.0/external/
将下载好的三个库复制至此目录下,解压,重命名文件夹
(复制过程略)
tar -zxf gen1int-1e4148ecd676761b3399801acba443925a1fee6b.tar.gz
tar -zxf pelib-public-2c5aa38e391c6b2a3b4a07daa7459cbaad25ef7c.tar.gz
unzip qfitlib-1acdc9863fdeae2cdbc7f5a599413257a095b8ad.zip
rm -rf gen1int pelib qfitlib
mv gen1int-1e4148ecd676761b3399801acba443925a1fee6b gen1int
mv pelib-public-2c5aa38e391c6b2a3b4a07daa7459cbaad25ef7c pelib
mv qfitlib-1acdc9863fdeae2cdbc7f5a599413257a095b8ad qfitlib
rm -rf *.gz *.zip
这三个库会在编译Dalton时自动被检测并编译,因此这里我们直接到上级目录编译Dalton即可
cd ..
./setup --fc=ifort --cc=icc --cxx=icpc --mkl=parallel --prefix=/home/$USER/software
cd build
make -j16
make install
其中prefix指定存放可执行程序的路径,可按自己的偏好修改。此处笔者编译的不是MPI版本,而是利用了MKL库的OpenMP版,适用于节点内并行,适合单个节点核数比较多的情况。-j16表示用16核并行编译,读者请根据自己机子实际情况修改。16核编译耗时约3 min,完成后可在/home/$USER/software/dalton/目录下看到生成的可执行文件。
3. 配置环境变量和测试
在~/.bashrc文件中设置临时文件路径和并行核数等
export PATH=/home/$USER/software/dalton:$PATH
export DALTON_TMPDIR=/scratch/$USER
export OMP_NUM_THREADS=16
然后执行source ~/.bashrc使之生效。这些路径仅为笔者偏好,读者可自行修改。接着进行测试,即在build文件夹下执行
ctest
该版本有526个测试例子,笔者用16核耗时约2小时。大多数例子都能正常通过,有27个例子Failed,屏幕有输出信息供自己检查,看起来没什么问题。至此,原文件夹dalton-Dalton2020.0已经没用了,可以删掉。如果Dalton使用过程中有任何问题,可以到https://gitlab.com/dalton/dalton/-/issues提问。
4. 随便算个CCSD(T)做测试
我们做一个水分子的CCSD(T)/cc-pVTZ计算,与高斯的结果进行对比。一般而言Dalton需要至少2个输入文件,展示如下:
h2o.dal文件内容
**DALTON INPUT
.RUN WAVE FUNCTIONS
**WAVE FUNCTIONS
.CC
*CC INPUT
.FREEZE
1 0
.CC(T)
**END OF INPUT
h2o.mol文件内容
BASIS
cc-pVTZ
CCSD(T)/cc-pVTZ for H2O molecule
No symmetry is used
AtomTypes=2 Integrals=1.0D-14 Charge=0 NoSymmetry Angstrom
Charge=8. Atoms=1
O -0.78690803 0.04178273 0.0
Charge=1. Atoms=2
H_a 0.17309197 0.04178273 0.0
H_b -1.10736261 0.94671856 0.0
提交
dalton -gb 8 -omp 16 -ow h2o
注意高斯做电子相关计算默认冻核的,但在Dalton中则默认不是,我们需要显式地将冻核数目写出来,此例中冻结最低的1个双占据轨道(即氧原子的1s轨道),二者算出的能量方能严格对比。对于冻核不了解的小伙伴可以看《电子相关计算中的“冻核”近似》。算完后在输出文件h2o.out中找到CCSD(T)能量,与高斯算的相差1.75×10-8 a.u. 高斯输入文件大家都很熟悉,就不展示了。
在以后的教程中我们会更详细地介绍Dalton的用法。
5. 从Gaussian向Dalton传轨道
这里举一个例子:四重态Co原子的ROHF计算。注意Dalton不支持UHF/UDFT方法,这里我们用ROHF。先给出高斯输入文件
%chk=Co.chk
%mem=8GB
%nprocshared=8
#p ROHF/cc-pVTZ nosymm int=nobasistransform
title
0 4
Co 0.0 0.0 0.0
算完后找到ROHF能量为-1381.35962681 a.u. 如果仅使用Dalton进行计算,输入文件为
Co.dal文件
**DALTON INPUT
.RUN WAVE FUNCTIONS
**WAVE FUNCTIONS
.HF
*SCF INPUT
.DOUBLY OCCUPIED
12
.SINGLY OCCUPIED
3
**END OF INPUT
Co.mol文件
BASIS
cc-pVTZ
haha1
haha2
AtomTypes=1 Integrals=1.0D-14 Charge=0 NoSymmetry Angstrom
Charge=27. Atoms=1
Co 0.0 0.0 0.0
笔者机子上算出ROHF能量是 -1381.30417911a.u. 比高斯的结果高不少。当然对Dalton有丰富经验的用户可以翻看其手册添加关键词进行各种尝试,此处我们可以直接利用高斯算好的结果,依次执行
formchk Co.chk Co.fch
fch2dal Co.fch
即可生成Co.dal和Co.mol文件。fch2dal小程序是笔者开源的MOKIT程序包中的一个小程序,可在https://gitlab.com/jxzou/mokit下载,推荐下载源代码压缩包到Linux下编译使用。若读者在发表的工作中使用了fch2dal,请记得引用MOKIT,引用格式在程序目录下的README.md文件中Citation部分有写。
生成的坐标和基组数据位于mol文件中,而关键词和算好的分子轨道位于dal文件中,无需自己手写这两个文件。前述高斯输入文件中的关键词nosymm int=nobasistransform即是为了此刻准备的,如果不传轨道则不需写这两个关键词。如另有特殊计算需求(使用DFT、指定泛函名称等),可自行修改dal文件内容。此处我们算的是ROHF,直接提交即可
dalton -gb 1 -omp 16 -ow Co
完成后查看输出,发现1圈即收敛,能量与高斯算的结果一模一样
不过,这个例子其实蕴含了一些更深层次的有趣问题,例如:
(1)Dalton算出的-1381.30417911 a.u.能量偏高,能否检验其ROHF波函数稳定性?
(2)高斯算出的-1381.35962681 a.u.通过肉眼观察fch文件里的轨道可以发现其对应电子组态3d84s1,但元素周期表上写的明明是3d74s2,如何算出想要的电子组态呢?
且听下回分解。
Reference
[1] https://dalton-installation.readthedocs.io/en/latest/
[2] http://sobereva.com/463