The LDA calculations are based on a program written by Doug Allan and
Zachary Levine which has been modified by me. The way to get the LDA
band structure is as follows:
- Get LDA ground state density using plane_wave. Look in
/b/osu1216/Si/LDA_GS for how that is done. Consider the file
si10k07h.job. This is a job file that copies input files into a
temp-directory and runs a version of Doug's code plane_wave. A
description of plane_wave can be found on pacific in
aulbur/GW/srcdoug/plane_wave.help. You should be able to access all
these files, but I will double check.
- Once you have the ground state charge density si10k07h.rho.950131
(you can choose a more appropriate name, I just stick with the job file
so that identification is easier for you) you will have to create the
EG-files, i.e., files that contain the energy eigen- values and
eigenfunctions. To find out how to do that look in /b/osu1216/Si/EG_EPS
(means EG-files for the dielectric constant epsilon). The job file
si10k07h.job again provides you a template on how to run my
modification of Zachary's code to get the EG-files. Use
$HOME/gwtry/myopt.940801/optvm.x instead of
$HOME/gwtry/myopt.950124/optvm.x. The later version is needed for
pseudopotentials with l=3 and is not completely debugged yet.
Once you're done with the creation of the EG-files you probably should
send me another e-mail and I will tell you how to move on from there.
As you can see, all these calculations are preparations for the
calculation of the dielectric constant, you haven't even started to
calculate that charmer yet.
As for the input, later for the calculation of epsilon and sigma there
is one input file that will be relatively easy to understand once you
know about the input file to plane_wave. The latter is extensively
described in plane_wave.help. Feel free to ask me though if you have
any questions. Don't worry about the makefile, whatever Sven will tell
you is probably more than you will need. Think of it as a convenient
tool, a script file that excecutes an array of tasks that you would
have to type in otherwise.
le fil rouge
Input needed for epsilon: EG-files and charge density in G-space.
Input needed for sigma: different EG-files and plasmon pole band
structure.
Hence: plane_wave => ground state charge density
optvm.x => EG-files, exchange-correlation energy (comes later into
the picture)
readrh.x => transforms ground state charge density from real to
reciprocal space
eps.c => plasmon pole bandstructure
sigma.c => self-energy corrected LDA band structure.
The whole approach is somewhat fragmented due to the fact that
- We don't have the LDA source code for plane_wave, so I preferred not
to use it's subroutines as a black box (hard to maintain, very
unflexible).
- The GW code is written in C++, so instead of trying to glue things
that don't quite fit together, I decided to keep them apart.
As for what you should read/not read: In principle you have to
understand optvm.f, readrh.f, eps.c, sigma.c and all the subroutines,
otherwise you won't be able to master the code and make significant
improvements which all of us want you to do. Also, catching bugs is
much easier if you are in control. I would start out reading optvm.f
and find out which subroutines are called, where and sometimes (if we
have the source code) how potentials and pseudopotentials are set up,
combined to a Hamiltonian and then solved. You should find out how
potentials are stored on a real space grid and in reciprocal space,
etc. This gives you a hands-on experience for LDA rather than a
theoretical knowledge resulting from reading papers (that's not bad,
but it's a good thing to see how things go in the "real" world). Once
that is done, you can move on to eps.c.
I know it sounds a little brutal but I did the same thing, I read the
whole code and made notes as to which section does what. I have these
notes over here (at least I think so). I will bring them along next
time I visit Columbus (I will leave them on your desk since you won't
be in during that time anyway, :-)). When I started out, Zachary told
me basically to treat his code as a black box. Although his code was in
much better shape then my code currently is, I still found out the hard
way, that this is not a good way to approach the problem.