计算化学公社

 找回密码 Forget password
 注册 Register
Views: 3636|回复 Reply: 2

[辅助/分析程序] Basis Set Exchange辅助工具Abse

[复制链接 Copy URL]

877

帖子

36

威望

4805

eV
积分
6402

Level 6 (一方通行)

发表于 Post on 2021-11-14 18:15:11 | 显示全部楼层 Show all |阅读模式 Reading model
本帖最后由 ggdh 于 2021-11-30 21:20 编辑

主要功能:
  • 离线使用Basis set exchange
  • 一行命令批量把基组写入gjf文件
  • 就算不需要使用自定义基组,也能通过本脚本快速了解基组信息,以及估算对于当前体系使用某个基组的耗时

前言:
每次要使用自定义基组的时候,流程都是先跑到www.basissetexchange.org/网站上查找所需基组,然后下载到本地,把其中的基组信息拷贝到量化输入文件中。有时候网站上不去,元鹤大佬5年前把它给爬下来了:爬虫并处理后的离线EMSL基组库,最近我在用BSE的时候,发现他提供了API,这不仅能离线用,还能在便利方面上更进一步,提供一些增强功能,于是就有了本脚本。
写本脚本时,也从sob的博文中学到了大量关于基组的知识,这里先把sob关于基组的帖子索引一下方便大家学习:
谈谈量子化学中基组的选择
谈谈赝势基组的选用
详解Gaussian中混合基组、自定义基组和赝势基组的输入
赝势的函数形式以及在量子化学程序中定义的方式
基组入门资料小合集
在线基组和赝势数据库一览
谈谈弥散函数和“月份”基组
给ahlrichs的def2系列基组加弥散的方法
谈谈能量的基组外推
在赝势下做波函数分析的一些说明
浅谈为什么优化和振动分析不需要用大基组

安装:
本脚本在LINUX和WINDOW下都可以使用,需要python 3.6以上的环境。
0. 安装python3,推荐anaconda
1. 在命令行中运行
  1. pip install basis_set_exchange
复制代码
安装后就能使用BSE的API可,BSE的API手册在这,其中还包括了一个bse的命令能提供一些基础交互功能。不过有Abse就没有必要用bse了
2 把本脚本放到PATH路径下,增加可执行权限,这一步不会的可以按照下面的命令操作:
  1. mkdir ~/scripts    # 在家目录下建立一个放脚本的文件夹scripts
  2. git clone https://gitee.com/coordmagic/autobse.git ~/scripts    #把本脚本下载到刚建立的文件夹下
  3. chmod +x ~/scripts/Abse.py    #给本脚本添加可执行权限
  4. echo "export PATH=\$PATH:~/scripts" >> ~/.bashrc  #把scripts文件夹的路径放到PATH路径下,并写入~/.bashrc以实现登录自动运行
  5. source ~/.bashrc    # 重新加载~/.bashrc文件
复制代码
3. 然后可以直接使用下面的命令检测是否安装成功,以及查看帮助
  1. Abse.py -h
复制代码


使用举例:
1. 初步筛选基组
常见的场景是,已知体系(中的元素),想为体系挑选一个合适的基组。比如:
  1. Abse.py -e "c,h,o,n,s,co,ir" -l "t:ecp"
复制代码
-e 设定体系中的全部元素,-l 选项按照特定条件列出包含全部这些元素的基组,这里由于有重元素,我选择包含了赝势的基组(t:ecp),这里t是function type,下面有详细的解释,结果如下:
bse1.png
列出了符合条件的基组,他们的函数类型,role,和family
除了输入元素外,还可以直接读取gjf文件中的元素,比如
  1. Abse.py -f "*.gjf" -l "s:tz;t:noecp"
复制代码
的意思是用-f选项读取当前目录下全部gjf中的元素(注意这里的*.gjf必须用引号括起来),列出包含这些元素的基组,基组名中要求含有tz字符(不分大小写),并且不能有赝势基组。
总结:初步筛选是用 -e 或 -f 选项设定元素, 用 -l 选项设定其他筛选条件。这些选项的详细说明在本帖末尾。

2. 进一步了解所选的基组
初筛基组后,可以对符合基本条件的基组进行进一步了解,这一步可以得到关于某个基组的如下信息:
a) 大小 b) zeta数 c)极化 d)弥散 e)耗时估计 这些信息的具体说明在sob的那些博文中有详细解释。
比如我文件夹下有HIS.gjf和TRP.gjf两个体系,然后我相中了一个名为aug-cc-pVQZ的基组,然后为了对照演示,对其中的O原子使用def2-QZVPD基组:
  1. Abse.py -f "HIS.gjf,TRP.gjf" -b "aug-cc-pvqz;O:def2-qzvpd"
复制代码
屏幕上输出结果如下:
bse2.png
上图中各项的含义解释如下:
BF/GP  Basis Function和Gaussian Premitive的数量,前者是收缩后的基函数数量,对post HF的计算量影响大,后者是全部的高斯函数的数量,对DFT的计算量影响更大。注意使用某些广义收缩基组的时候,最后Gaussian打印出来的GP数量会比这里低,这是因为在线基组和赝势数据库一览这篇文章中第1节的注释。
contractions  这里主要可以看基组的zeta数,极化情况和收缩度,有乘号X说明是广义收缩基组(用相同的高斯函数构成不同的基函数),比如这里H的s6X4+1的意思是用6个s高斯函数线性组合形成了4个基函数(用4个s型基函数来表示H的价层1s轨道,所以是Quadra zeta),然后加上一个单独的一个s型高斯函数构成的基函数(弥散函数)。另外对H,C元素加入了d f g等高角动量基函数,说明极化很充分。注意,这里的s6X4+1不代表s型基函数中有25个高斯函数,因为其中很多系数可以是0,所以s6X4+1也可以变成s7X5。对于片段收缩基组,大家可以看看def2-QZVPD的样子。通过对比可以发现def-QZVPD的s基函数zeta比aug-cc-pVQZ多,但是总体极化要少。
min_exponents X 100 平时我们只能通过名称来判断一个基组是否加了弥散,但是对于这个基组到底有多弥散,并不清楚。这里就是每个类型基函数中最小的指数乘以100,这个数越小,就表明该类型轨道越弥散。对比def2-QZVPD和aug-cc-pVQZ可以发现同为弥散函数aug-cc-pVQZ的高角动量基函数的弥散度要明显大于def2-QZVPD,至于高角动量基函数弥散度大有没有用,大家去看sob写的关于弥散的帖子。
耗费和耗时预估,接下是对两个体系中总的基函数和高斯函数的统计,并基于这两个函数的数量估算了DFT的耗时和MP2的耗时。然后列出了GP^3.5的数量(对应于DFT的耗费), BF^5的数量(对应于MP2的耗费),以及BF^7的数量(对应于CCSD(T)的耗费)。这里通过对比可以发现def2-QZVPD要明显比aug-cc-pVQZ便宜。
关于耗时的估算,DFT时间是对一个色胺酸分子做PBE0计算,在22核的E5-2699v4的情况下,跑15步scf所需时间(通常简单有机分子15步左右能收敛)。而根据我观察,相同数量的基函数情况下体系越大,耗时会越少。所以这里绝对耗时只能做一个非常粗略的参考,更有意义的是比较不同体系,或者不同基组下的相对耗时

3. 输出所选基组
确定好所选基组后,下一步就是把基组输出来,有如下几种输出方式:
a) 写入gjf中
  1. Abse.py -f "*.gjf" -b "jun-cc-pvdz" -o gjf
复制代码
把jun-cc-pvdz基组写入当前目录下所有gjf中。默认会写入文件末尾,如果你的自定义基组不是在文件的末尾,那么gjf中需要有一行[autobse],自定义基组会替换掉[autobse]
  1. Abse.py -f "a.gjf,b.gjf" -b "iglo-ii" -o gjf -a "_IGLO2"
复制代码
把IGLO-II基组写入a.gjf 和b.gjf中,不覆盖原始gjf文件,生成名为a_IGLO2.gjf 和b_IGLO2.gjf的文件
b) 写入gbs中
gbs文件的就是把全部用到的元素的基组写入一个后缀是gbs的文件,然后在所有的gjf文件中引用这个文件,具体用法见详解Gaussian中混合基组、自定义基组和赝势基组的输入中的第5节注意最新版本的BSE也能够直接导出gbs格式了。用-o gaussian94lib:xxx.gbs 使用BSE自带的gbs。下面的方法是我这个脚本转的gbs:
  1. Abse.py -e "5-10,Ir" -b "cc-pvdz;Ir:cc-pvdz-pp" -o gbs
复制代码
对5-10号元素使用cc-pvdz基组,对于Ir元素使用cc-pvdz-pp基组,并且把这些基组输出到名为autobse.gbs的文件中
  1. Abse.py -f "*.gjf" -b "jorge-TZP-DKH" -o gbs:tzpdkh
复制代码
对于当前文件夹下的全部gjf文件中的元素使用jorge-TZP-DKH基组,并且把这些基组保存到名为tzpdkh.gbs的文件中
  1. Abse.py -f "*.gjf" -b "def2-tzvpd" -o gjfgbs:def2tzvpd -a _def2TZVPD
复制代码
对于当前文件夹下的全部gjf文件中的元素使用def2TZVPD基组,并且把这些基组保存到名为def2tzvpd.gbs的文件中,然后在所有的新产生的*_def2TZVPD.gjf文件中插入了@def2tzvpd.gbs这一行,在最后插入或者替换文件中的[autobse]行
c) 输出其他格式的基组:
BSE支持的基组格式可以通过下面的命令查看
  1. Abse.py --list-formats
复制代码
如果想输出特定格式的基组,可以用
  1. -o 格式名前n个字符:文件名
复制代码
来输出特定格式的基组,如果文件名为空,那么就会输出到屏幕上,比如:
  1. Abse.py -e "C" -b "may-cc-pvdz" -o gau:
复制代码
把C元素的may-cc-pvdz基组以gaussian格式输出在屏幕上,注意这里的冒号为必须,如果没有冒号,则会输出到一个名为autobse.gaussian94的文件中
注意:最新新版的BSE格式增加了gaussian94lib(也就是这里之前谈到的gbs),因此这个要改成-o gaussian94: 才能输出gaussian格式
  1. Abse.py -f "abc*.gjf" -b "pc-2" -o o:
复制代码
把当前目录下以abc开头的所有gjf中的所有元素的pc-2基组以orca的格式输出到屏幕上(因为o开头的格式只有orca)
  1. Abse.py -e "1-5,20-30" -b "may-cc-pvdz" -o bdf
复制代码
把1-5号元素,20-30号元素的may-cc-pvdz基组以bdf的格式写入一个名为autobse.bdf的文件中
  1. Abse.py -e "1-10" -b "pcJ-2" -o nw:pcj2
复制代码
把1-10号元素的pcJ-2基组以nwchem的格式写入一个名为pcj2.nwchem的文件中
d) 输出基组参考文献
BSE支持的基组的参考文献的格式可以通过
  1. Abse.py --list-ref-formats
复制代码
查看。用-o选项使用下面的格式
  1. -o ref:参考文献格式:文件名
复制代码
来输出特定格式的参考文献,默认格式为txt,如果文件名为空,但是冒号还在,那么就会输出到屏幕上,比如:
  1. Abse.py -f *.gjf -b "jul-cc-pv(t+d)z" -o ref:
复制代码
把当前目录下全部gjf中元素的jul-cc-pv(t+d)z基组对应的参考文献以txt格式输出在屏幕上
  1. Abse.py -e "1,6-9,79" -b "def2-tzvp" -o ref:endnode
复制代码
把这些序号元素的def2-tzvp基组对应的参考文献以endnode格式保存在autobse.endnote文件中
  1. Abse.py -e "C" -b "ano-r" -o ref:bib:anor
复制代码
把C元素的ano-r基组对应的参考文献以BibTex格式保存在anor.bib文件中

4. 混合基组的使用
可以对某n个元素单独使用不同的价层和赝势基组,比如:
  1. Abse.py -e "C,H,O,N,Cl,I,Hg,Au" -b "cc-pvdz;I,Hg,Au:cc-pvdz-pp;ecp:I:lanl2dz"
复制代码
注意其中分号,冒号,逗号和关键词ecp的使用。这行命令的意思是首先对全元素使用cc-pvdz基组,然后对I,Hg,Au使用cc-pvdz-pp赝势基组,然后对I元素单独使用Lanl2dz赝势(这里为了演示功能,举的例子非常不合理,有大病的人才会这么干, 因为基组通常要和赝势搭配使用)。。。结果如下:
bse3.png
可以看到,由于这里会使用赝势,所以这里多出一列赝势的名称和赝势包括的电子数。

了解某个基组的信息
了解一个基组,可以有下面一些方式:
a) 首先看sob的博客是最高效的方式,能快速了解你研究的体系应该选哪个基组,以及某个基组的开发目的和适用范围。
b) 然后用上面使用举例第2节提到的方法可以具体看某个基组对于特定体系和元素的极化,弥散,收缩,耗费等情况。
c) 用下面的命令查看:
  1. Abse.py -i "def2-SV(P)"
复制代码
可以得到如下信息
bse4.png
这里面有这个基组的适用的元素范围,是否带赝势,对应的拟合基组,以及所属家族
然后知道家族名后,可以用命令
  1. Abse.py -i "dunning_pp"
复制代码
进一步查看某个基组家族的开发目的,适用范围,精度等信息
d) 用上面使用举例3.d的方法,输出某个基组的文献,然后去看对应的文献。

选项说明:
脚本自带-h选项可以查看各个选项的用法,这里也用中文描述一下
-f 设定输入的gjf文件,多个文件用逗号隔开,支持通配符,但是必须用引号引起来,比如-f "abc_*.gjf,xy?.gjf,TRP.gjf",输入文件中的元素信息,和每种元素各有多少会读出来,用以选择基组和估算耗时。有gjf文件的情况下,可以用-o选项直接给这些文件中插入自定义基组。

-e 设定元素,多个元素用逗号隔开,不区分大小写,还支持直接输入原子序号,原子序号可以用-连接表示范围,比如 -e "1-10,Cu,56"

-l 按照特定条件筛选并列出基组。除了元素外,还可以通过role,type,substring,family,来筛选基组。其中
substring:基组名称中包含的字符。比如def2可以选中所有包含def2的基组(不区分大小写)
type:包括gto, gtos, gtoc, ecp 这4种类型, 其中gto就是正常的gaussian type orbital,gto_spherical就是5D,7F那种,gto_cartesian就是6D,10F那种,对于自定义基组,gaussian默认的是gto_spherical,所以如果你使用了gto_cartesian,那需要在关键词中加上6D 10F,这里可以加上no表明不要,比如-l "t:nogto" 表示只要纯赝势基组
family:基组所属于的家族,比如pople,dunning,使用命令Abse.py --list-families 查看所有的family,比如:
  1. Abse.py -e "Xe" -l "f:dunning_dk"
复制代码
查看所有可以对Xe使用的dunning_dk家族的基组。
role: 包括orbital和各种fit基组,我们通常使用的是orbital基组。使用命令Abse.py --list-roles 查看全部的role
另外可以用空格来表示不加额外限制,比如
  1. Abse.py -f "abc.gjf" -l " "
复制代码
列出包含abc.gjf中全部元素的所有基组
  1. Abse.py -e " " -l " "
复制代码
列出全部的基组,目前是612个。

-b  在有-e或者-f选定了元素的情况下,选择某个基组,这里的基组名不区分大小写,但是一定要完整输入,最好是用引号引起来,避免基组中的特殊字符比如括号,*号影响,如果忘记具体名字,只记得一部分,可以用-l "s:pcseg" 列出所有包含pcseg的基组

-o   输出基组,保留字段为gjf,gbs,gjfgbs,和ref,分别对于与写入gjf文件,写入gbs文件,写入gbs文件,然后再把@gbs插入gjf文件,输出基组对应的参考文件。其中gbs和gjfgbs后面可以加冒号 : 设定gbs的名称,比如-o gbs:xyz 会把基组输出到xyz.gbs中,不设定则用默认的autobse.gbs, 如果冒号后什么后什么都不写,那么会直接输出到屏幕上。
ref后可以加两个冒号,分别设定参考文献的格式和文件名,比如-o ref:txt:ano 会把参考文献以txt格式保存到一个名为ano.txt的文件中, 只有一个冒号会使用默认的autobse作为文件名,比如-o ref:bib 会把参考文献以bib格式输出到autobse.bib,-o ref: 会把参考文献以txt的格式输出到屏幕上。如果不是上面的保留字段,则会尝试以用户输入字符开头的基组格式,比如-o ga 会尝试输出以ga开头的基组格式,这时候会发现gaussian94,gamess_us, gamm

-a  文件名附加,使用-o gjf或者-o gjfgbs时,会直接把基组写入输入的gjf文件中,如果不想改动原始文件,比如想对一个文件用多个基组,此时用-a选项给文件名后面加字符,避免输入文件被改动,比如-a "_def2svp" 会给所以的文件名后面加上_def2svp字符串。

--list-roles   列出所有roles
--list-formats 列出所有基组格式
--list-ref-formats 列出所有支持的参考文件的格式
--list-families 列出所有的基组家族
--basis_options 设定基组输出时的一些选项,比如--basis_options ucontract_general,uncontract_spdf,uncontract_segmented,make_general,optimize_general 会把这些选项设为True,默认是False,懂的看选项名就都懂,不懂的一般不要动。
Abse.py (36.05 KB, 下载次数 Times of downloads: 16)

评分 Rate

参与人数
Participants 21
威望 +2 eV +100 收起 理由
Reason
DZW + 5
978142355 + 5 GJ!
hdhxx123 + 5 精品内容
captain + 5 赞!
joema + 5 好物!
函数与激情 + 5 伟大!
ChemG + 5 赞!
naoki + 5 牛!
邓苏微 + 5 牛!
haikuotiankong + 5 牛!
tjuptz + 5 好物!
puzhongji + 5 赞!
ene + 5
linqiaosong + 5 钟叔太强了
lonemen + 5 钟老师大发好!
zsu007 + 5 赞!
小范范1989 + 5 钟老师为人民服务啊
卡开发发 + 5 钟老师牛啊!
Entropy.S.I + 5 精品内容
sobereva + 2 精品内容

查看全部评分 View all ratings

228

帖子

0

威望

1921

eV
积分
2149

Level 5 (御坂)

发表于 Post on 2021-11-14 22:06:23 | 显示全部楼层 Show all
钟老师辛苦了,谢谢!一直造福我等小白。

1061

帖子

16

威望

5791

eV
积分
7172

Level 6 (一方通行)

計算化学の社畜

发表于 Post on 2021-11-30 15:34:39 | 显示全部楼层 Show all
"我选择包含了赝势的机组"

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
ggdh + 5 谢谢

查看全部评分 View all ratings

Stand on the shoulders of giants

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2023-2-7 02:32 , Processed in 0.358470 second(s), 25 queries .

快速回复 返回顶部 返回列表 Return to list