Skip to content

tkotani/ecalj

Repository files navigation

ecalj — a package for the first-principles electronic structure calculations.

This is README.org (easy to read in org-mode in emacs) at https://github.com/tkotani/ecalj. Email to takaokotani@gmail.com.

What can we do in ecalj package?

  1. All electron full-potential PMT method, where the PMT method means A mixed basis method of two kinds of augmented waves, that is, LAPW+LMTO. Relaxiation of atomic positions is possible at the GGA/LDA level. (Not automatic for lattice defermation yet). Our recent research shows that very localized MTOs (damping factor are ∼ 1 a.u), together with APW (cutoff is ≈ 2 to 3 Ry) works well to get reasonable convergences. KotaniKinoAkai2015FormulationPMT.pdf (PMT formalism) KotaniKino2013PMTMolecule.pdf (PMT applied to diatomic molecules). As we can use automatic settings of MTOs paremeters all the time, we don’t need to be bothered with the setting of them. The PMT method is promising since it can connect physics and chemistry, and virtually it can be a very efficient method (currenty the ability is limited by the implementetion in ecalj).

    In principle, it is possible to perform reasonable calculations just from crystal structures and very minimum setting. (For QSGW for 4f electrons, automatically-generated ctrl file may not work. Currently, need to see our instruction). We have document included about how to confirm calculations to be publicaiton quality.

  2. The PMT-QSGW method, that is, the Quasiparticle self-consistent GW method (QSGW) based on the PMT method Thanks to PMT, we can perform QSGW with very minimum settings by hands. Easy to use. After converged, we can easily make band plots of the QSGW calculaiton without the Wanneir interpolation, because, roughly speaking, such an interpolation scheme is internally built in. In addion, we can calculate dielectric functions, spectrum function of the Green’s functions and so on (some of functions are obsolate. Need fixing).

    For paralellized calculations, we currently mainly have k-paralell only. In addition, memory distribution is not yet so much. These may cause some problems to handle primitive cells including many atoms. Roughly speaking, our current PMT-QSGW is applicable upto ~16 atoms a cell (light atoms are easier to handle). ./Document/PAPERandPRESENTATION/Kotani2014QSGWinPMT.pdf (Formulation of PMT-QSGW method) ./Document/PAPERandPRESENTATION/deguchi2016.pdf (PMT-QSGW applied to a variety of insulators)

    We have so much room to make PMT and QSGW very efficient.

  3. The Wannier function generators and effective model generators (Maxloc Wannier and effective interaction between Wannier funcitons). This is adopted from codes by Dr.Miyake,Dr.Sakuma, and Dr.Kino. See SRC/wanniergw/README. cRPA is implemented, mRPA will be implemented.
  4. Utilitys are included, to write crystal structures. For example, a converter between POSCAR(VASP) and our crystal strucrue file ‘ctrls.*’ are included. As it is combined with seekpath and spglib, Brillowin Zone and symmetry lines are automatically drawn with matplotlib.

LICENCE

We apply the licence [AGPLv3](https://www.gnu.org/licenses/agpl-3.0.html) to ecalj. For publications, make a citation as; [1] We use ecalj at https://github.com/tkotani/ecalj/, and/or PMT-QSGW refereces above.

Automatic installation script and test

We have an automatic installer and test system, just by a command. Tests are for linux with gfortran and ifort. See README_Install.org

Manuals, Documents, Samples for ecalj

We have manuals and presentations of ecalj in Document/ Especially, ecaljmanual.pdf is the main manual. Read “LDA/GGA calculations and Plots” at first. QSGW calculations can be performed easily after you learend the procedure. Band plot and so on are in the same manner of the LDA calculations, althogh computationally expensive (roughly 100~1000 times expensive). In addition, we are going to organize Document/Manual/CategoryAndToken.org which explain switches in ctrl file The ctrl file have grammer of tree-type of ordering, “Category->token->subtoken”. Varieties of samples are at MATERIALS/ (some of them are obsolate), see ./MATERIALS/README_MATERIALS.org It is instractive to reproduce samples in ./Document/PAPERandPRESENTATION/deguchi2016.pdf We can set up templates for your calculations. Ask us.

I will organize a document of Category and Tokens (set in ctrl file) at ./Document/Manual/CategoryAndToken.org (link to titus/ is broken now).

How to perform paper quality calculations with minimum costs?

See README_hints.org

Usage minimum. QSGW for Si

See Section.4. of Document/Manual/ecaljmanual.pdf Here I show its very minimum to illustrate our simplified procedure. In Japanese, see http://gomisai.blog75.fc2.com/blog-entry-675.html (and others. Use search engine.)


(1) Write structure file ctrls.si by hand (you can generate ctrls from POSCAR(VASP) with vasp2ctrl in ecalj/StructureTool/, thus cif –> POSCAR —> ctrls is also possible.)

(2) conver ctrls.si to ctrl.si by ctrlgenM1.py si (without argument, it gives a help). Then you have default ctrl.si (rename ctrlgenM1.ctr.si to ctrl.si). Edit number of k points, spin (nsp=0 or 1) and so on if necessary.

(3) Run “lmfa si” to prepare atoms.Then run ‘mpirun -np 4 lmf-MPIK si’. This generates rst.si, which contains self-consistent density in LDA. Postprocessing for energy bands are job_band si, job_tdos, job_pdos are also available. For job_band, you need symmetry line file syml.si, which can be generated at the method implemented in GetSyml/

NOTE: If you like to skip steps (1)-(3),  run ./job_materials.py Si at ./MATERIALS/.
Then 
 >cd Si
 >cp ../syml.si
 >job_band si
This shows energy bands in LDA in gnuplot. To generate syml.si, we can use
ecalj/GetSyml/getsyml.py. When it is correctly installed (see below), 
$getsyml si
should generate a syml.si from ctrl.si. You can edit it and run job_band.

(4) For PMT-QSGW, make GWinput.tmp by mkGWIN_v2 si. Copy GWinput.tmp as GWinput. (you supply three numbers for the command mkGIWN_V2.)

(5) Then run a script gwsc, e.g. “gwsc 2 si -np 3” (2+1 iteration with 3 nodes).

(6) To continue calculation do “gwsc 5 si -np 3” again. (To start, you need ctrl.si rst.si QGpsi ESEAVR sigm.si) When you start from these files, 0th iteration is skipped —thus we have just five iteration.

(7) For band, dos, and pdos plot, we have scripts which almost automatically makes these plot in gnuplot. Thus easy to modify these plots at your desposal. For example, job_band is for band plot. But symmetry line path file syml.si is required. The syml can be generated by getsyml.py, which also visualise the pathes in the BZ.

4f system

Default setting is not enough. See Document/Mamual/GdQSGW4.pdf

GaussianFilterX0.

This switch in GWinput is ver’y useful and promising (probably) to stabilize the convergence of metallic cases (when many bands are located at the Fermi level).

StructureTool/ and Getsyml/

In any calculations, we first need to supply crystal structure correctly. In the case of ecalj, we write it ctrls.*. All calculaitons can be performed from it.

For this purpose, we have converters between POSCAR (VASP’s crystal structure file, Cartesian setting is needed; ‘conversion bug for Fractional aug2019’) and ctrls.*(that for ecalj). In addition, we have a simple script to invoke crystal strucrure viewer, usually VESTA. It is in StructureTool/.

Furthermore, we have a tool to generate BZ and symmetry lines on it for band plot in ./GetSyml/ The symmetry line is written into syml.* and used for the band plot mode, job_band. The BZ and the lines are visualized.

Install the viever at StructureTool/

Here we use VESTA at http://jp-minerals.org/vesta/. Download it, and expand it to a directory. VESTA can handle kinds of format of crystal structure.

Then make a softlike by > ln -s ~/ecalj/StructureTool/viewvesta.py ~/bin/viewvesta > ln -s ~/ecalj/StructureTool/ctrl2vasp.py ~/bin/ctrl2vasp > ln -s ~/ecalj/StructureTool/vasp2ctrl.py ~/bin/vasp2ctrl

With this procedure we can run command viewvesta, ctrl2vasp, vasp2ctrl from console as long as you have ~/bin/ in the command search path. In my case, .bashrc have a line export PATH=$HOME/bin:$HOME/VESTA-x86_64:$PATH

It depends on your machine. (after editing .bashrc, you have to do “source ~/.bashrc” to reflect changes).

Set the variable of VESTA=, at the begining of ~/ecalj/StructureTool/viewvesta.py to let it know where is VESTA.

Symmetry line finder at GetSyml/

This is to generate symmetry lines. syml.* from ctrl.* in ecalj/GetSyml/ In the directory, we have getsyml.py, which is based on the seekpath https://github.com/giovannipizzi/seekpath/ and spglib. See Lincence.txt in it. Folllowing citations are required. 1.Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017) 2.You should also cite spglib that is an essential library used in the implementation.

How to do version up?


Be careful to do version up. It may cause another problem. But it is not so difficult to move it back to original version if you use git. An important things is keeping your changes by yourself. Especially your own Make.inc.* files (see InstalAll.ifort).

>cd ecalj >git log This shows what version you use now.

>git diff > gitdiff_backup This is to save your changes added to the original (to a file git_diff_backup ) for safe. I recommend you do take git diff >foobar as backup. >git stash also move your changes to stash.

>git checkout -f CAUTION!!!: this delete your changes in ecalj/. This recover files controlled by git to the original which was just downloaded.

>git pull This takes all new changes.

I think it is recommended to use >gitk –all

and read this document. Difference can be easily taken, e.g. by >git diff d2281:README 81d27:README (here d2281 and 81d27 are several digits of the begining of its version id). >git show 81d27:README is also useful.

MEMO

For 4f, we need modification to GWinput.tmp

Old memo is at ./Document/Manual/GdQSGW4.pdf Latest version automatically set default for 4f systems.

(for previous users): known bug(or not) for spin susceptibility mode

(This mode is now obsolate because we are switching to a new method with localized basis for spin susceptibility.) T.Kotani thinks epsPP\_lmfh\_chipm branch may/(or may not) have a bug (because of symmetrization). The bug may be near

if (is==nspinmx) then 
  symmetrize=.true.
  call x0kf_v4hz(npm,ncc,... 

in SRC/main/hx0fp0.m.F (This bug may be from a few years ago, after I implemented EIBZ mode). I think “if (is==nspinmx.or.chipm) then” may be necessary especially for cases with more than two atoms in the cell (thus fe\_epsPP\_lmfh test may not work for this case…) A possible test is by removing symmetrization—> use eibzsym=F.

We have old documents at ./Document/LMF@2009/

These are back up files at year2009. We still have some meaningful information in it. But this is very detailed and mainly for developers.

History (not maintained well).

See git log. . Feb,2023: Revove awrite rdfile. Simplified input systems for lmf part . Jul,Aug 2019: GaussianFilterX0, ESM mode(no samples yet). Reorganize document . May 2019: org documentaion started. Use ifile_handle(). . March 2019: this document is cleaned up slightly . March 2016: new histgram bin m_freq.F (HistBin_ratio and HisBin_dw are used to specify new mesh. . March 2016: wklm(1) is only used (only f_L for l=m=0 is used. See Eq.28 in JPSJ83,094711(2014).)