四时宝库

程序员的知识宝库

从零开始学Octopus(6):轨道偶极矩的计算方法

在Octopus指定TDOutput = multipoles参数计算偶极矩时,默认仅给出分子的总偶极矩。有时我们需要各个轨道的偶极矩,但是之前以为Octopus没有提供这个功能,因此尝试研究代码。

通过依次检查函数的调用关系,最终在td_write_multipole()子程序中,发现如下代码,

其中对于逻辑变量resolve_states的判断表明,当其为true时,分别计算各个态的密度(density_calc)以及多级矩;当其为false时,计算总密度(st%rho)的多级矩。

通过查找parse_variable子程序(专门处理输入参数的读取)的调用,在子程序td_write_init中,发现变量resolve_states通过输入参数TDOutputResolveStates进行设置。

进一步地,在Octopus官网中查询到如下信息:

TDOutputResolveStates:用于指定输出结果是否按照态(轨道)给出。参数默认值为No,表示依据总密度计算结果。

目前,该参数仅支持multipoles的计算。

下面以甲烷分子为例,在激光场的作用下,基于TDDFT计算分子的总偶极矩以及各(KS)轨道的偶极矩。

基态

首先进行基态DFT计算,这将是实时计算的初始状态。输入文件如下。

CalculationMode = gs
UnitsOutput = eV_Angstrom
Radius = 3.5*angstrom
Spacing = 0.18*angstrom
CH = 1.097*angstrom
%Coordinates
"C" | 0 | 0 | 0
"H" | CH/sqrt(3) | CH/sqrt(3) | CH/sqrt(3)
"H" | -CH/sqrt(3) |-CH/sqrt(3) | CH/sqrt(3)
"H" | CH/sqrt(3) |-CH/sqrt(3) | -CH/sqrt(3)
"H" | -CH/sqrt(3) | CH/sqrt(3) | -CH/sqrt(3)
%

使用赝势后,分子有8个价电子,因此有4个KS轨道。

时间演化-总偶极矩

现在我们有了时间演化的起点,修改输入文件,使其如下所示:

CalculationMode = td
UnitsOutput = eV_Angstrom
Radius = 3.5*angstrom
Spacing = 0.18*angstrom
CH = 1.097*angstrom
%Coordinates
"C" | 0 | 0 | 0
"H" | CH/sqrt(3) | CH/sqrt(3) | CH/sqrt(3)
"H" | -CH/sqrt(3) |-CH/sqrt(3) | CH/sqrt(3)
"H" | CH/sqrt(3) |-CH/sqrt(3) | -CH/sqrt(3)
"H" | -CH/sqrt(3) | CH/sqrt(3) | -CH/sqrt(3)
%
Tf = 1/eV
dt = 0.002/eV
TDPropagator = aetrs
TDMaxSteps = Tf/dt
TDTimeStep = dt
FromScratch = yes
amplitude = 1*eV/angstrom
omega = 18.0*eV
tau0 = 0.5/eV
t0 = tau0
%TDExternalFields
electric_field | 1 | 0 | 0 | omega | "envelope_cos"
%
%TDFunctions
"envelope_cos" | tdf_cosinoidal | amplitude | tau0 | t0
%
%TDOutput
laser
multipoles
%

计算完成后,生成目录td.general。其中有3个文件:energy、laser和multipoles,后者包含了分子总偶极矩。

laser包含了激光电场,如下图:

时间演化-轨道偶极矩

修改输入文件,添加一个参数,如下所示:

TDOutputResolveStates = yes

计算完成后,目录td.general中有如下几个文件:multipoles-ist0001、multipoles-ist0002、 multipoles-ist0003、multipoles-ist0004,分别为4个轨道的多极矩,结果如下图:

multipoles-istXXXX文件中还包含了“Electronic charge”结果,可用于计算各轨道的电离几率。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接