momentum matrix element calculation

Phonons, DFPT, electron-phonon, electric-field response, mechanical response…

Moderators: mverstra, joaocarloscabreu

Locked
fingolfin2
Posts: 1
Joined: Wed Feb 25, 2015 1:03 pm

momentum matrix element calculation

Post by fingolfin2 » Mon May 23, 2016 4:10 pm

Hi,

I want to use abinit to calculate and print momentum matrix elements along certain lines of the FBZ just like bandstructure.
So far I tried to use The lesson on Optic input file as it generates ddk files from which I can calculate matrix elements.
But I have 2 problems:

1. ddk output is binary and I couldn't figure out how to print it as txt file. I solved this one by modifying source code of optic to save it to txt after reading, not very elegant but it works.
2. ddk are generated only for kgrid for which I run ground state calculations, is there a way to generate it for kgrid that is determined by kptbounds? I need ddk in particular points of the FBZ.

Is there an easier way of getting those elements?

Thank you and best wishes
Jacek

TheIdealis
Posts: 3
Joined: Mon Aug 12, 2019 1:00 pm

Re: momentum matrix element calculation

Post by TheIdealis » Wed Sep 11, 2019 6:58 pm

Hi Jacek,

I know that some years passed since you have asked the question, but I'm still very interested in the answer. Is there any news?

TheIdealis
Posts: 3
Joined: Mon Aug 12, 2019 1:00 pm

Re: momentum matrix element calculation

Post by TheIdealis » Fri Oct 18, 2019 4:56 pm

I figured out a way, which is not the most efficient, but works out quite well. (I confirmed the results with data I got from vasp-calculations.)

1. As stated in the first post, you have to modify your abinit-code. Go to optic.f90 and add a command to print the dipole-data (pmat) after the call pmat_renorm command. I have no experience with fortran, so I naively did

Code: Select all

 open (unit=41, file='dipole.txt')
 do i1=1, mband
  do i2=1, mband
    do i3=1, nkpt
      do i4=1, 3
        do i5=1, nsppol
          write(41,*) pmat(i1,i2, i3, i4, i5)
        end do
      end do
    end do
  end do
 end do
 close(unit=41)

After that, recompile your code.

2. Follow the https://docs.abinit.org/tutorial/optic/ tutorial to get the momentum matrix elements at the positions determined by ngkpt.
3. To get a finer resolution along a certain axis, just modify the kpt yourself and run the calculation multiple times at different positions. Don't forget to add Chksymbreak=0.

NPike
Posts: 34
Joined: Fri Mar 18, 2016 1:15 pm

Re: momentum matrix element calculation

Post by NPike » Fri Oct 18, 2019 8:27 pm

Hello Theldaelis and Jacek,

There is currently no way of directly printing the momentum matrix elements.

As Jacek pointed out, you can calculate them with ABINIT and OPTIC (see the optics tutorial toptics_1.in where the wave functions and the perturbed wave functions are calculated). OPTIC then reads those wave functions and calculates the matrix elements for the entire BZ (depending on time-reversal symmetry).

The optics tutorial can be found at https://docs.abinit.org/tutorial/optic/index.html.

One could modify a local version of OPTIC to print the desired matrix elements for each k point and each band. The resulting (rather large) file could then be parsed and the desired k-points along a path could be plotted.

As far as I can tell, this method is the best way to do it.

Best of luck!

-Nick
Nicholas A. Pike
Research Scientist

Locked