新浪博客

[装载]ABINIT指南:第一课

2011-05-25 16:10阅读:
ABINIT指南:第一课

不收敛的H2分子研究
第一课目录:
· 1.1.计算总能量以及原子化能
· 1.2.计算核间距
· 1.3.计算核间距
· 1.4.计算电荷密度
· 1.5.计算原子化能
· 问题解答
1.1. 计算总能量以及原子化能
注意当前的指南需要四个窗口:一个用来观看html文本指南(当前窗口),第二个用来运行代码,第三个用来观看abinis_help文件,第四个用来察看html输入变量。
1.1.a 除当前窗口之外,打开第二个窗口,进入Tutorial目录(例如~ABINIT/Tutorial)。
? cd ~ABINIT/Tutorial
在这个目录中,你会发现必要的输入文件来运行这个指南中的例子。花上几秒钟读一读~ABINIT/Tutorial中出现的文件和目录名。
1.1.b 还需要工作目录。所以你应该在这个目录里建立一个子目录,名字可以是'Work' (也就是~ABINIT/Tutorial/Work)。第二个窗口进入'Work'目录:
? mkdir Work
? cd Work
你将在这个目录中进行指南中的大多数任务。把t1x.files文件复制到'Work'中:
? cp ../t1x.files .
1.1.c
编辑t1x.files。它并不长(仅有六行)。它提供了创建其它文件名的代码所需信息。在abinis_help文件的第一节,你会发现关于这个文件更多的内容。
1.1.d 修改t1x.files文件的第一行和第二行,这样它们就变成:
t11.in
t11.out
后面,你还要修改这些行,以处理更多的情况。关闭t1x.files文件。接下来,把~ABINIT/Tutorial/t11.in文件复制到'Work'目录中:
? cp ../t11.in .
接下来观看这个文件,以了解其内容。现在,你可以运行代码了。它的位置是:
../../abinis
所以,在Work目录中,输入:
? ../../abinis < t1x.files >& log
等上几秒钟……完成!你可以察看Work目录的内容:
? ls (Windows/DOS下用dir命令)
建立了不同的输出文件,包括'log'文件和输出文件't11.out'。确认所有都正确之后,你可以比较一下t11.out和参考文件:
? diff t11.out ../Refs/t11.out | more
会有一些无关紧要的差异,如输入输出文件名或时间的不同,像下面这样:
5c5
< Starting date : Tue 4 Jul 2000.
---
> Starting date : Thu 22 Jun 2000.
7c7
< - input file -> t11.in
---
> - input file -> ../t11.in
9,10c9,10
< - root for input files -> t1xi
< - root for output files -> t1xo
---
> - root for input files -> t11i
> - root for output files -> t11o
214c214
< - Total cpu time (s,m,h): 4.7 0.08 0.001
---
> - Total cpu time (s,m,h): 4.6 0.08 0.001
221,229c221,228
(... 后面是时间信息...)
如果你不是在Linux下PC机上运行,会由一些小的数字差异,数量级最多是1.0d-10。如果还得到了其它的信息,就要寻求帮助了。
假定一切正常,我们将详细讨论出现的几个不同步骤:如何运行代码,t11.in输入文件里是什么,以及,t11.out和log输出文件里有什么。
1.1.e 代码的运行在abinis_help文件的1.2节有详细说明。
1.1.f 现在该编辑t11.in了。你可以先粗略地看看它。它并不长,大概四十行,主要是注释。不必试图立即明白所有的内容。读完之后,你会了解注释的说明,输入文件的一般格式在abinis_help文件的3.1节。
1.1.g 现在你可以更详细地察看输入变量了。见变量说明部分。
1.1.h 首先是log文件。你可以开始读它,它令人不太愉快。跳到它的最后。WARNINGS和COMMENTS表示退出。你可以在这个文件中找到它。有些是给有经验的用户提供的。现在不管它们。你可以在abinis_help文件的6.1节发现log文件更多的信息。
1.1.i 下面是t11.out文件。你可以在abinis_help 文件的6.2节发现输出文件的一些一般信息。你还应该:
· 检查t11.out文件的头
· 检查内存需求报告(不必读取没一个参量值)
· 检查输入数据的重复
直到读到以下信息:
chkinp : 检查输入参数的一致性。
如果代码没有在这里停顿,则输入参数是一致的。这里提供了很多默认值,并完成预处理。
可以回到预处理的输入文件重复部分,更详细地检查t11.in文件,读懂每一个变量的含义,如果它没有被执行的话。接下来你可以检查输入文件中没有定义单却在t11.out文件的重复部分出现的变量,
nband:它的值是2,是要被代码处理的电子态数量。它由统计单位cell中的价电子数(每个赝势价电子之和),来计算接下来占据最低态(见occ变量),并添加一些态(最后一步更依赖于体系的尺寸)来计算。
ngfft:它的值是 30 30 30,是三维FFT网格的点数。它来自ecut,和acell (cell的尺寸)。
平面波最大数量mpw在内存评价部分提到,是752。
这还没有完全结束,因为代码利用对k点(0 0 0)有效的时间反转对称性减少大约两倍的平面波数量。一套完整的平面波是1503(见后面的t11.out文件)。代码通过istwfk=2使用时间反转对称性,代替通常默认的istwfk=1。
Nsym:它的值是16。这是体系对称性的数量。3x3矩阵symrel定义了对称性操作。在本例中,没有平移的对称性出现,它会在变量tnons中出现。代码对对称性做自动分析。即可以手动设置,也可以用symmetry builder(后面说明)。
对于xcart,xangst和xred二者是任选的,用于定义在初始cell中的原子位置。
现在,可以去读abinis_help文件的6.3节t11.out剩余部分的说明了。同时参看t11.out文件。
1.1.j 你已经全部读完了输出文件!
你可以回答下面的这些问题吗?
· Q1. 使toldfe标准令人满意需要多少SCF循环?
· Q2. 能量有可能比toldfe更收敛吗?
· Q3. 每个原子以Ha/Bohr为单位的力的值是什么?
· Q4. 两个电子态之间的本征值有何不同?
· Q5. 哪里是局域最大电荷密度?以electrons/Bohr^3为单位有多大?
(答案见后)
1.2. 计算核间距(第一种方法)
1.2.a 我们将完整说明每一项的含义:由一些含义是必须了解的,即使你在这个指南中没有用到他们。它们可能在一些输入变量的说明中出现。所以,你应该看abinis_help文件的3.2节。
1.2.b 有三种方法计算量个氢原子之间的优化距离:
· 计算不同键长的总能量,把这些不同的点拟合,并决定最小的拟合函数;
· 计算不同键长的力,把这些不同的点拟合,并决定拟合函数的零点;
· 使用自动算法使能量最小化(或发现力的零点)
我们将计算不同键长的能量和力。这个练习将帮你学习如何使用多重数据集。t11.in文件的键长是1.4Bohr。如果你想计算键长从1.0 Bohr到2.0 Bohr,步长是0.05 Bohr,这就是21个计算。
如果你是Unix专家,这对你来说是很容易的:写一个脚本文件,自动改变输入文件的变量xcart驱动这21个计算,接着收集所有数据结果,以方便的格式绘图。
那么你是Unix专家吗?如果不是,这里有一个更容易的方法:全部在ABINIT里做!这是多重数据集模式,详细的说明见abinis_help文件的3.3,3.4,3.5和3.6节。
1.2.c 现在你可以写进行上面计算的输入文件了(键长从1.0 Bohr到2.0 Bohr,步长0.05 Bohr)。你可以从t11.in开始,定义一个序列,并使用getwfk输入变量(后面一个将使计算加快)。
你可能要看一看输入变量中irdwfk和getwfk部分:特别是getwfk
-l的含义。同样,明确定义态的数量(或超级单胞bands)为1,使用输入变量nband。输入文件~ABINIT/Tutorial/t12.in是输入文件的例子,~ABINIT/Tutorial/Refs/t12.out是例子的输出。如果你决定使用~ABINIT/Tutorial/t12.in文件,不要忘记改变t1x.files文件中的文件名……
用你的输入文件运行代码(可能要用一两分钟),迅速察看输出文件(里面有很多不同数集的迭代部分),在最后的变量重复部分得到汇集的输出能量:
etotal1 -1.0368223891E+00
etotal2 -1.0538645432E+00
etotal3 -1.0674504850E+00
etotal4 -1.0781904896E+00
etotal5 -1.0865814785E+00
etotal6 -1.0930286804E+00
etotal7 -1.0978628207E+00
etotal8 -1.1013539124E+00
etotal9 -1.1037224213E+00
etotal10 -1.1051483730E+00
etotal11 -1.1057788247E+00
etotal12 -1.1057340254E+00
etotal13 -1.1051125108E+00
etotal14 -1.1039953253E+00
etotal15 -1.1024495225E+00
etotal16 -1.1005310615E+00
etotal17 -1.0982871941E+00
etotal18 -1.0957584182E+00
etotal19 -1.0929800578E+00
etotal20 -1.0899835224E+00
etotal21 -1.0867972868E+00
你可能要绘制这些数据。上面列表中最小能量明显位于数集11和12之间,即:
xcart11 -7.5000000000E-01 0.0000000000E+00 0.0000000000E+00
7.5000000000E-01 0.0000000000E+00 0.0000000000E+00
xcart12 -7.7500000000E-01 0.0000000000E+00 0.0000000000E+00
7.7500000000E-01 0.0000000000E+00 0.0000000000E+00
对应的氢原子键长在1.5 Bohr和1.55 Bohr. 力变成零也在在1.5 Bohr和1.55 Bohr之间:
fcart11 -5.4963645520E-03 0.0000000000E+00 0.0000000000E+00
5.4963645520E-03 0.0000000000E+00 0.0000000000E+00
fcart12 6.9585355532E-03 0.0000000000E+00 0.0000000000E+00
-6.9585355532E-03 0.0000000000E+00 0.0000000000E+00
用这两组值,使用线性插值,得到优化值1.522 Bohr。
1.3计算核间距(第二种方法)
1.3.a 另外一种方法是基于自动计算最小值。有各种不同的运算法则处理这个问题。见输入变量ionmov,使用的值为2,3和7。本例中,只有一个自由度被优化,最好选择ionmov=3。
完成了优化的最大循环次数的定义。设定输入变量ntime为10,这已经足够大了。为了tolmxf标准可以停止,使用比较合理的值5.0d-4 Ha/Bohr。这定义了考虑几何收敛的力的阈值。如果力的余差在达到ntime之前低于这个值,代码就会停止。
为了保证每个测试键长足够收敛,生成的力用改变SCF循环的数量作为停止的标准也是可以的。于是,在toldff中改变toldfe,并设定toldff比tolmxf还要小十倍。输入文件~ABINIT/Tutorial/t13.in是这个运算的例子,文件~ABINIT/Tutorial/Refs/t13.out是结果。如果使用这个文件,别
忘记在t1x.files中改变文件名。用你的输入文件运行代码(可能要用一两分钟),迅速察看输出文件(比t12.out文件要小得多),在最后的变量重复部分得到汇集的输出能量:
etotal -1.1058360629E+00
fcart 1.8444410478E-04 0.0000000000E+00 0.0000000000E+00
-1.8444410478E-04 0.0000000000E+00 0.0000000000E+00
...
xcart -7.6091415863E-01 0.0000000000E+00 0.0000000000E+00
7.6091415863E-01 0.0000000000E+00 0.0000000000E+00
按照这些数据(见xcart),优化的键长大约是1.520 Bohr,与t12.out的估算值一致。如果你有时间(这要在家里完成),你可以改变停止的标准,重新进行计算,察看键长收敛的级别。
1.4. 计算电荷密度(略)
1.5. 计算原子化能
1.5.a 原子化能是把分子分离成都力中型原子的能量。
在这个例子中,首先计算孤立氢原子的总能量。原子化能是氢分子和两个氢原子总能量的差。在计算孤立氢原子中,还有一些细微之处:
· 在很多情况下,孤立原子的基态是自旋极化的,见变量nsppol和spinat;
· 最高占据能级可能被同样自旋的最低未占据能级简并,这通常对大多数金属是适合的。(见第四课)
· 更常见的情况是,基态电荷密度对称性不再是球形,所以用代码基于原子坐标决定对称性不能再使用,见输入变量nsym,在本例中设定为1。
对于氢,很幸运基态是球形的(1s轨道),最高占据和最低未占据能级虽然简并,但是有不同的自旋。我们写入每个自旋的占据数,见输入变量occopt(设定为2)和occ。
最后,为了消除数字误差,计算上面提到的对同一box,同一截断能,以及类似于分子情形中的在box中位置的偏差是非常重要的(虽然最后一项不那么重要)。
输入文件~ABINIT/Tutorial/t15.in是这个任务的例

我的更多文章

下载客户端阅读体验更佳

APP专享