参考(https://docs.epw-code.org/doc/School2018.html)
我们在日常生活中常常要计算电声耦合矩阵元,QE在计算电声耦合的时候已经计算了选定k点,q点上的电声耦合矩阵元,但是因为数据量比较大所以就没有输出到文件中。
通过EPW
是可以输出电声耦合矩阵元的,只需要在输入文件中设置prtgkk = .true.
。但是这个方法比较麻烦,需要熟悉EPW的使用(输入参数太多),而且有时候wannier拟合并不一定会成功。所以一种简单实用的计算矩阵元的方法是非常需要的。
通过修改QE的源代码可以实现输出电声耦合矩阵元的功能,F. Giustino组贴心地给大家都改好了在这里可以找到(School2018 — EPW Tuesday Hands-on 2)[ https://gitlab.com/pages/sphinx documentation (epw-code.org)],在他们的summer school里教给大家,我这里只是转述总结一下。
要输出电声耦合矩阵元需要修改四个文件cp do_phonon.f90 elphon.f90 phq_readin.f90 symdyn_munu.f90 PATH/q-e/PHonon/PH
(这四个文件在summer school的Tuesday Hands-on 2里面)
替换完之后重新编译QE。根据他们论坛(论坛链接:About the Tuesday example in school2018 - EPW Forum )的说法,由于QE版本的变动,最好是使用QE-6.2.2
版本,其他版本的QE和官网上给的文件是不合适的。不过他们也贴心的根据QE的版本更新这几个文件,放在QE的q-e/test-suite/not_epw_comp
文件夹里面。
计算过程依然是和以前一样,但是只能使用simple
方法,也就是需要设置electron_phonon='simple'
. 然后电声耦合矩阵元就会输出到ph.out文件中,注意由于电声耦合矩阵元的指标比较多,当你计算的体系能带个数比较多,声子模式也比较多的时候,直接输出所有的矩阵元会导致ph.out变的非常大而难以处理,因此默认情况下只输出点的矩阵元,所以可以在他们修改的基础上在做一点修改来输出自己需要的矩阵元(可以先自行估算一下自己计算的体系的矩阵元占用的空间)。下面是我简单修改的尝试,对应QE-6.5版本,仅供参考。每行前面是修改对应的行号。
1080 integer :: n, ik, ikk, ikq, pbnd, ibnd, jbnd, ipert, jpert, nu, mu, vu, ii, ij, im1, im2
1094 ik = 3
1095 ii = 65
1096 ij = 78
1097 im1 = 76
1098 im2 = 96
1258 do ibnd = ii, ij
1259 do jbnd = ii, ij
1260 do nu = im1, im2
其实就是在它输出的地方改了一下循环的次数。