https://www.quantum-espresso.org/Doc/developer_man/node5.html
主程序:phonon.f90
控制声子计算的参数:phcom.f90=control_ph
控制电声耦合的参数:elph.f90
trans = .t. 计算声子的指标
elph = .t. 计算电声耦合的指标
输入文件中控制这两个的量:
trans=.true.控制声子计算
electron_phonon=’ ’
-
读取输入并设置要计算的量的标志
1.1) 读取 pw.x 写入的所有量
1.2) 读取赝势数据 -
确定必须计算的内容。
2.1) 如果还没有在disk上,计算 q 个点的网格和
所有 q 点的所有modes并保存在disk上 (SD means save on disk)
2.2) 如果要求image 并行化,则在images之间划分工作 -
进行恢复运行检查,检查 .xml 文件中已有的内容,并将以完成的部分设置为TRUE
-
开始对于q点的主循环:do_phonon.f90
4.1) 计算所有不依赖于系统响应的量 initialize_ph()
4.2)检查是否需要进行能带计算并进行。
注意:以下几点仅在 q 为 Gamma 时执行。
4.3) 在频率上开始循环
4.3.1) 计算极化率作为 iu SD 的函数
4.4) 计算对电场的响应
4.5) 计算 epsilon 和 SD
4.6)计算zeu和SD
4.7) 计算电光系数和SD
4.8) 计算 E 的二阶响应
4.9) 计算拉曼张量和 SD
结束注 -
在不可约表示上开始循环
5.1) 计算对不可约表示的响应
代码解析
phqscf.f90:SUBROUTINE phqscf
npert(:)每个不可约表示的扰动数
对于每个不可约表示,我们计算波函数的变化
5.1.1)积累对电子-声子的贡献
5.1.2) 累积对动力学矩阵的贡献
5.1.3)积累对zue的贡献
5.1.4) SD 这个对动态矩阵的贡献和 zue 继续循环
- 直到当前 q 点的所有表示都被计算出来
- 对动力学阵进行对角化(仅当此 q 的所有表示都已计算时)
- 对 k 求和,对能带上的电子-声子耦合求和以计算 gamma_mat(仅当此 q 的所有表示都已计算时)
8)继续步骤4的循环,直到所有q点都计算完全。