Fourth tutorial on QSGW+DMFT
Charge + static-magnetic contributions
This method is a way to close the outer loop in a QSGW+DMFT or LDA+DMFT calculation, but instead of relying on an update of the density it actually relies on an (approximate) update of the exchange-correlation potential (either or . The underlying assumption is that charge-charge excitations are well described by the low-level technique (QSGW or LDA), while magnetic excitations (computed with DMFT) can be well approximated by a static field. Then the idea is to extract only the magnetic component of the static limit of the impuirty self-energy and add it to the spin-averaged part of the lattice exchange-correlation potential .
Extracting the charge component from LDA/QSGW
As recommended in the first tutorial, either QSGW or LDA calculations must be spin-resolved (HAM_NSPIN=2). The former generates a sigm, while the latter does not.
To extract the charge components, things have already been set up in the first tutorial, where we have taken the spin-average part of the sigm.ni file and we have edited the ctrl.ni to be able to assign HAM_BXC0=True through the command -vbxc0=1.
These two things together make the (QSGW or LDA) Hamiltonian effectively spin-unresolved (you can check that the magnetic moment is null by grep Mag. log.
Extracting the static magnetic component from DMFT
You have performed a full DMFT loop whith HAM_NSPIN=2 (see variables and line command used in the second tutorial). Once converged, you have to extract the static magnetic component from your last Sig.out.brd.
mkdir sigfreq0
cp lmfinput/*.ni sigfreq0
cp itN_qmcrun/Sig.out.brd sigfreq0/sig.inp # copy converged Sig.out.brd file
cd sigfreq0
ln -sf sig.inp Sig.out.brd # mk_siginp-freq0.py looks for Sig.out.brd
python mk_siginp-freq0.py # 1. interpolate Sig.out.brd to zero frequency
vi ctrl.ni # Ensure that nkabc = nkgw
lmfdmft ni --ldadc=71.85 -job=1 -vbxc0=1 # 2. embed+symmetrise sig.inp.f0 to sig.inp.f0.emb
lmfdmft ni --ldadc=71.85 -job=1 -vbxc0=1 --makesigqp # 3. write sig.inp.f0.emb on quasiparticle basis sigm1.ni
First interpolate Sig.inp.out.brd to zero frequency. You can use the program mk_siginp-freq0.py downloadable at this link. The output file sif.inp.f0 is the static limit of the impurity self-energy (you can check the quality of the extrapolation by plotting Sig.out.brd and Sig.out.brd.extrap).
In the same folder, you can launch lmfdmft using the same flags as your last run, but you have to pay attention to the k-point grid. Warning: You have to set nkabc equal to nkgw in this and the following run! The program will automatically find sig.inp.f0, it will embed it and symmetrise it, producing the output sig.inp.f0.emb before exiting. At the bottom of the log file you should find the line
Exit 0 File sig.inp.f0 embedded successfully and recorded in sig.inp.f0.emb
Still in the same folder you can run again lmfdmft, adding --makesigqp to the command line. This will i) subtract the average self-energy component to the whole matrix hence keeping only the magnetic part and ii) project the resulting matrix in the quasiparticle basis. The result will be saved in the sigm1.ni file. At the bottom of the log you should find the line
Exit 0 wrote embedded sigma (orbital basis) to file sigm1
Adding charge and static-magnetic components
You now have a static magnetic-only obtained from a fully converged DMFT loop. This has to be added to the charge-only (LDA or QSGW) potential you started from. In the same folder as before run
lmf ni --wsig --mixsig=1,1 # add sigm and sigm1 to get sigm2
As a result files sigm.ni and sigm1.ni are summed together and exported in sigm2.ni. Check that among the last lines of the log you find
Use for sigma: 1*(file sigm) + 1*(file sigm1)
average SE read from sigm file: 0.139009 0.140914
average SE read from sigm1 file: 0.000000 0.000000
and
Exit 0 done writing sigma, file sigm2
The resulting file is a new that can be fed to lmf to get a new magnetic starting point for a DMFT loop.