Dear developers,
I am confused with the following lines in the nlinopt subroutine.
! symmetrize the momentum matrix elements
do lx=1,3
do ly=1,3
do lz=1,3
i1=sym(lx,ly,lz)+sym(lx,lz,ly)
i2=sym(ly,lx,lz)+sym(ly,lz,lx)
i3=sym(lz,lx,ly)+sym(lz,ly,lx)
px(ist1,ist2,lx,ly,lz)=i1*pmat(ist1,ist2,ik,lx,isp)
py(ist2,ist1,lx,ly,lz)=i2*pmat(ist2,ist1,ik,lx,isp) ! TODO: check if this should not be ly, lz on these lines
pz(ist2,ist1,lx,ly,lz)=i3*pmat(ist2,ist1,ik,lx,isp)
end do
end do
end do
Why do ly and lz not appear on the last two lines (red). Am I missing a trick in the symmetrization?
px(ist1,ist2,lx,ly,lz)=i1*pmat(ist1,ist2,ik,lx,isp)
py(ist2,ist1,lx,ly,lz)=i2*pmat(ist2,ist1,ik,ly,isp)
pz(ist2,ist1,lx,ly,lz)=i3*pmat(ist2,ist1,ik,lz,isp)
And If ist1 and ist2 correspond to valence and conduction band states why are the following lines for py and pz not consistent with px?
px(ist1,ist2,lx,ly,lz)=i1*pmat(ist1,ist2,ik,lx,isp)
py(ist2,ist1,lx,ly,lz)=i2*pmat(ist2,ist1,ik,lx,isp)
pz(ist2,ist1,lx,ly,lz)=i3*pmat(ist2,ist1,ik,lx,isp)
If you can shed some light on this implementation, I would appreciate it.