目录

分子体系中,物理量沿某个方向的数值分布

本文针对软件版本为AMS2019.3及之前的版本,AMS2020以后的版本请参考链接:函数沿某个方向的数值分布

使用densf和adfreport,可以输出密度、动能密度、Laplacian、密度梯度、密度Hessian、静电势、分子轨道、NOCV轨道、NCI、SEDD在空间,沿着某个方向的数值分布。

这里以$F_2$的电子密度沿着键的方向的分布为例:

基本设置

注意由于显示函数数值的空间分布,需要确定的坐标,因此建模的时候,原点在什么地方,xyz轴的方向,都需要非常清楚。

Input - View -Axes显示坐标系。选中两个F原子,Edit - Align - with z-Axes),设置键的方向为z轴。然后选中两个F原子,Edit - Set Origin),设置$F_2$中心为原点:

为了简单起见,可以设置Details > Symmetry > Symbol:Nosym,去掉对称性,便于用户直观地设置希望显示数据的坐标点。

保存任务后,修改生成的*.run文件,在底部增加如下内容:

$ADFBIN/densf << eor
 
Grid Save
  0.0  0.0 -1.0
300
  0.0  0.0  1.0  2.0
 
End
 
Density SCF
eor
 
echo "Density:"
$ADFBIN/adfreport TAPE41 -r 'SCF%Density #14.8f##1'
echo "z-values:"
$ADFBIN/adfreport TAPE41 -r 'z values%z values #14.8f##1'

下面依次解释上述代码的含义:

Grid Save
  0.0  0.0 -1.0
300
  0.0  0.0  1.0  2.0
End

表示保存某个量的值,空间坐标从(0.0 0.0 -1.0)开始,沿着(0.0 0.0 1.0)方向,长度为2.0埃。数字300这一行,表示这一个坐标范围内,均匀地生成300个点的数值。当然可以同时保存N个方向,这样的话,这一行就需要N个整数,下面需要N行矢量的方向、长度。

Density SCF表示保存电子密度自洽迭代后得到的数值,如果是Density frag,则表示保存的是片段的电子密度直接加和的值。

有这一段代码,程序就会计算相应的坐标,以及该坐标下,指定的这个物理量的数值。计算完毕之后,在*.t41文件中,就可以找到这些数值。

注意:坐标值目前的输出单位是原子单位,而我们在上面代码中,指定坐标的时候,是以埃为单位。

Density SCF
eor

这里是打印自洽迭代得到到电子密度。如果要打印分子轨道,可以用这样到格式:

Orbitals scf
all HOMO-1 LUMO+1
END

表示分别计算“HOMO-1”~“LUMO+1”,总共4个轨道,在指定格点上到数值。在

下面这段代码,只是为了将*.t41中的内容,打印到*.out便于制图而已(直接在kfbrowser中查看到到数据,不是一列排好的,因此不方便提取数据用于作图):

echo "Density:"
$ADFBIN/adfreport TAPE41 -r 'SCF%Density #14.8f##1'
echo "z-values:"
$ADFBIN/adfreport TAPE41 -r 'z values%z values #14.8f##1'

用户在ADFjobs窗口双击对应的*.41文件,之后在打开*.t41文件的窗口中,点击菜单栏File > Expert Mode可以看到生成了那些数据。这段代码,显示的实际就是这些数据。其中电子轨道的数据在“SCF“这一栏中,点开可以看到对应的轨道序号数字,点开即为轨道在指定格点的值。

echo “Density:” 这一行没有特别的作用,只是为了在out文件中输出一行文字“Density:“。echo “z-values:“的功能也是类似,输出一行文字“z-values:”。计算结束后,在out文件可以看到对应的内容。

“Density:“下一行,就开始根据如下命令:$ADFBIN/adfreport TAPE41 -r 'SCF%Density #14.8f##1'输出内容,显示*.t41中,SCF这一段中的Density数据。

所有可以显示的物理量的名字列表如下(电子密度、动能密度、Laplacian、密度梯度、密度Hessian、势、分子轨道、NOCV、NCI、SEDD,其中势可以根据其后的参数,设定为静电势或者交换相关势等):

Density ...
KinDens ...
Laplacian ...
DenGrad ...
DenHess ...
Potential ...
Orbitals ...
NOCV ...
NCI ...
SEDD

前面densf保存的数值,默认状态下,是存储到TAPE41文件里面的,因此这里打印来自TAPE41文件的Density这个量里面的SCF段(说明:双击打开*.t41之后,File > save as ASCII之后,可以得到一个文本文件,打开之后,可以看到名为SCF的这一段),这个段刚好是上面保存过的。#14.8f##1是打印的格式,占用14位其中小数点后有8位数,每行输出一个数字。

结果查看

在out文件的尾部,可以看到

Density:
    1.15212256
    1.18296585
    1.21433504
    1.24645736
    1.27965563
    1.31437572
    1.35122118
    1.39099645
    1.43476093
    1.48389657
......

可以直接复制到Excel里面。 再往下拉,可以看到:

z-values:
   -1.88972612
   -1.87708582
   -1.86444551
   -1.85180520
   -1.83916489
   -1.82652458
   -1.81388427
   -1.80124397
   -1.78860366
   -1.77596335
......

说明:

  1. 用户当然可以修改输出坐标为x值,格式是类似的:$ADFBIN/adfreport TAPE41 -r 'x values%x values #14.8f##1'
  2. 一定注意'x values%x values #14.8f##1'的引号是英文的单引号,是竖着的,有的系统经常会在编辑的时候,自动修改为斜着的单引号,那样会导致报错
  3. 如果前面的单点计算完成了,也可以在同级目录内,只执行后面添加的这部分代码,直接从前面生成的*.t21文件中产生后面的信息
  4. -1.88972612 a.u.=-1埃
  5. 计算之前,为了更方便的确定打印的坐标,用户可以适当地调整分子的坐标、坐标原点。例如本例,$F_2$分子在z轴上,原点位于F-F之间的中点
  6. 两组数据分别为纵、横坐标,即可做出曲线图。

参考资料

https://www.scm.com/doc/ADF/Input/Densf.html