在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”结果,可用于计算各轨道的电离几率。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved