Main executable, input and output files¶
The majority of the input-output files use a convenient HDF5 metadat format. See https://support.hdfgroup.org/HDF5/ for details. We also use a convention that uppercase datasets are stored accordint to Fortran-language (one-base, collumn-first), and lower case datasets according to c-language (zero-base, row-first). This make no difference for scalar or 1-dim arrays. For n-dim arrays with n>=2, there is a transposition involved.
There are three main executable files, namely, dmft, CyGutz and dmft2.
dmft¶
dmft is the executable file generated by compiling the source files
in directory ksum of the Wien2K interface.
It is modified version the Kristjan Haule’s DMFT-Wien2K interface
by Yongxin Yao.
In general, the interface generates a generic Kohn-Sham-Hubbard (KSH) Hamiltonian based on the KS band energies {} and wave functions (WFs), as well as local projectors, which are expressed in term of the KS WFs.
Mathematically, let us define the Kohn-Sham band wave functions {\(\psi_{nk}\)} and the band energies {\(E_{nk}\)}, where \(n\) is the band index and \(k\) is the crystal momentum index. The Kohn-Sham Hamiltonian is then given by
Let’s define an array NE(dim_kpts, 3), with NE[k, 1] specifying the total number of bands at the \(k^th\) k-point, and NE[k, 2/3] for the starting and ending band wave function index, the wave functions between which are used for the Wannier function construction. And we call this set of bands to be active bands. The bands {\(\psi_{nk}\)} with index smaller than NE(k, 2) will remain untouched by the additional onsite electron interactions between the correlated orbitals. Generally, by a unitary transformation, the active bands {\(\psi_{nk}\)} can be mapped to {\(\phi_{\alpha k}\)}, including a set of correlated orbitals and the complementary set (presumably itinerant part). Now we can rewrite the Kohn-Sham Hamiltonian as
Here we have define
The one-body part of the local onsite Hamiltonian is simply given by
with \(w_k\) being the weight of k-points.
Additional attention should be paid to the case where one works with k-points in irreducible Brillouin zone (IBZ) only. In that case, at each k-point, a k-star will be generated by applying the symmetry operations. Therefore, we modify the above formalism by adding the symmetry operation index for the case dealing with IBZ only
Input files
In addition to the input files generated by Wien2K,
the ONLY input file needed is case.indmfl.
Many of the other input files for the original dmft are not needed.
Output files
For the specific purpose of LDA+G-RISB, the output files generated by the modified version of dmft are completely different from the original version. These output files are the input files for CyGutz, which are supposed to be generated by dmft only. The output files are now in hdf5 format.
GPARAMBANDS.h5HDF5 file storing the main parameters for the DFT calculation, along with the local one-body part of the KSH Hamiltonian (H1E). The dataset structure of the file can be easily seen by typing:
$ h5ls -r GPARAMBANDS.h5
It would look like something (e.g., bcc-Fe) below:
/ Group /IMPURITY_1 Group /IMPURITY_1/H1E Dataset {10, 10} /IMPURITY_1/T_SPHERICALHARMONICS_TO_LOCALBASIS1 Dataset {5, 5} /NE_LIST Dataset {165, 3} /delta Dataset {1} /ismear Dataset {1} /iso Dataset {1} /ispin Dataset {1} /kptdim Dataset {1} /kptfname Dataset {1} /kptwt Dataset {165} /nbmax Dataset {1} /nelectron Dataset {1} /symie Dataset {1} /symnop Dataset {1}
IMPURITY (upper case) index starts from 1. For the main datasets:
/IMPURITY_1/H1E– \(H_{\alpha \beta}\). one-body part (10 x 10 matrix for d-orbital) of the local Hamiltonian of the first impurity (e.g., Fe atom).T_SPHERICALHARMONICS_TO_LOCALBASIS1– unitary transformation (5x5 matrix) from complex spherical harmonics basis (CSH) to default local basis (DB). In the new version it is redundant and is always set as identity./kptdim– dimension of k-points./NE_LIST– array of (kptdim x 3). With- NE_LIST[:,1]: total number of bands at each k-point
- NE_LIST[:,2/3]: the first/last band WF included to expand the local ‘’correlated’’ orbitals.
/delta– broadening factor of Gaussian or Fermi smearing function./ismear– gaussian smearing (ismear=0) or Fermi smearing (-1) or tetra-hedron method (-5) will be used for the brillouin zone integration./iso– 1 without SOC and 2 with SOC./ispin– 1 for paramagnetic DFT calculation. (2 for spin-polarized DFT calculation, which has not been explored.)/kptfname–case.kgenfile name. Exclusively for Wien2k./kptwt– k-points weight./nbmax– maximal number of band WF s across all the k-points./nelectron– number of valence electrons for the KSH model./symnop– number of symmetry operations./symie– the index of the identity operator in the list of symmetry operations.
BAREHAM_0.h5HDF5 file storing the KSH Hamiltonian matrix for each k-point, and the associated unitary transformation from KS WF basis (KSWB) to the KSH model basis (KSHB) composed of local orbitals and the complement set at the identity symmetry operation. In OpenMPI or OpenMP jobs, file
BAREHAM_x.h5with x from 0 to num_cpu-1 will be present. By typing:$ h5ls -r BAREHAM_0.h5
one can see datasets like:
/ Group /IKP_1 Group /IKP_1/ISYM_1 Group /IKP_1/ISYM_1/HK0 Dataset {6, 6} /IKP_1/ISYM_10 Group /IKP_1/ISYM_10/HK0 Dataset {6, 6} ... /IKP_1/T_PSIK0_TO_HK0_BASIS Dataset {6, 6} /IKP_1/ek0 Dataset {9} ...
The indices of KPOINTS (e.g., IKP_1) of SYMMETRY operations (e.g., ISYM_1) are one-based. With
/IKP_1/ISYM_1/HK0– \(H_{\alpha \beta}^{k, isym}\). the bare KSH one-particle Hamiltonian matrix at the first k-points and first symmetry operation.T_PSIK0_TO_HK0_BASIS– \(\langle\psi_{nk}|\phi_{\alpha k}\rangle\). unitary transformation from KSWB to KSHB basis. NOte that here only the data at the ireducible k-point is needed./IKP_1/ek0– list of all of the KS band energies at the first k-point.
CyGutz¶
CyGutz is the driver executable file of the Gutzwiller solver. It is developed by Yongxin Yao, Nicola Lanata, Gabriel Kotliar, Cai-Zhuang Wang, and Kai-Ming Ho.
Input files
Besides the input files generated by dmft as listed above,
The init_ga.py script also generates an input file, GPARAM.h5.
It contains the parameters specific to the Gutzwiller solver.
By typing:
$ h5ls -r GPARAM.h5
one can see datasets like:
/IMPURITY_1/DB_TO_SAB Dataset {10, 10}
/IMPURITY_1/HS Dataset {2, 10, 10}
/IMPURITY_1/LX Dataset {10, 10}
/IMPURITY_1/LY Dataset {10, 10}
/IMPURITY_1/LZ Dataset {10, 10}
/IMPURITY_1/SIGMA_STRUCT Dataset {10, 10}
/IMPURITY_1/SX Dataset {10, 10}
/IMPURITY_1/SY Dataset {10, 10}
/IMPURITY_1/SZ Dataset {10, 10}
/IMPURITY_1/V2E Dataset {10, 10, 10, 10}
/dc_j_avg Dataset {1}
/dc_mode Dataset {1}
/dc_nelf_list Dataset {1}
/dc_u_avg Dataset {1}
/gamix Dataset {1}
/giembeddiag Dataset {1}
/gimix Dataset {1}
/gmaxiter Dataset {1}
/ispin Dataset {1}
/num_imp Dataset {1}
/nval_bot_ityp Dataset {1}
/nval_top_ityp Dataset {1}
For the main datasets:
/DB_TO_SAB– unitary transformation from DB basis to the symmetry-adapted basis (SAB).
HS– matrix basis set to expand all the local one-body quantities, including quasi-particle density matrix (DM), H1E, etc.
/LX(Y,Z)– the representation of x(y,z)-component of L angular momentum operator in the single-particle SAB basis.
/SX(Y,Z)– the representation of x(y,z)-component of spin operator in the single-particle SAB basis.
/SIGMA_STRUCT– index matrix of the local one-body quantities, which identifies the zero and equivalent elements.
/V2E– Coulomb matrix defined in chemist’s convention, i.e.,\[V_{i,j,k,l} = \int{d\mathbf{r}\int{d\mathbf{r}\prime \phi_{i}^{\dagger}(\mathbf{r})\phi_{j}(\mathbf{r}) V_{\text{H}} (|\mathbf{r}-\mathbf{r}\prime|) \phi_{k}^{\dagger}(\mathbf{r}\prime)\phi_{l}(\mathbf{r}\prime)}}\]
/dc_j(u)_avg– list of average J(U) for the double counting term.
/dc_mode– flag for the double counting correction (DC), with
- 0: no DC;
- 1: fully localized limit (FLL) DC with local orbital occupation (Nf0) self-consistently determined;
- 12: FLL-DC with Nf0 only updated in the outer electron density self-consistent loop.
/dc_nelf_list– for dc_mode=12, it provides the list of Nf0 which are fixed at each electron density iteration.
/gamix– mixing ratio parameter for the Broyden method.
/giembeddiag– flag for method to solve the embedding Hamiltonian.
- -3: valence truncation ED with S=0 (spin-singlet) constraint;
- -1: valence truncation ED;
- 10: Hartree-Fock.
/gimix– flag for the method to solve the Gutzwiller nonlinear eqns.
- 0: modified Powell hybrid method (HYDRD1);
- -1: Broyden method (could be faster but not as robust).
/gmaxiter– maximally allowed number of Gutzwiller iterations.
/ispin– flag for spin degeneracy.
- 1: spin-restricted solution;
- 2: spin-unrestricted solution.
/num_imp– number impurities.
/nval_bot(top)_ityp– list of valence trucation range.
Output files
GUTZ.LOGMain CyGutz output text file. It contains some detailed information at each cycle of the G-RISB solution. Important local quantities, energies, valence block histograms, etc., are printed. The file will be renamed to
SAVE_GUTZ.LOGbefore the next electro density iteration.
KSWT_0.h5HDF5 file storing the Gutzwiller renormalized occupation matrix of the original KS band WFs at each k-point. The file has the structure like:
/IKP_1/KSWT Dataset {6, 6} /IKP_1/nemax Dataset {1} /IKP_1/nemin Dataset {1} ... /e_band Dataset {1} /e_fermi Dataset {1} /e_gamma_dc Dataset {1}
with
/IKP_1/KSWT– Gutzwiller renormalized occupation matrix of a set of the original KS band WF s at the first k-point./IKP_1/nemin(nemax)– the starting and ending index of the above set of KS band WF s./e_band– Gutzwiller renormalized band energy./e_fermi– Gutzwiller renormalized Fermi level./e_gamma_dc– Gutzwiller renormalized onsite energy.
WH_RL_OUT.h5HDF5 file storing the solution of the Gutzwiller nonlinear eqns. Rename it to
WH_RL_INP.h5and it can serve as the starting point for the new Gutzwiller iteration. It is usually a good idea. But in rare cases, it might not be a good initial guess, as the Gutzwiller solver could hardly converge. Then one can try the default initial condition by removing it.
GLOG.h5HDF5 file storing some data for analysis.
dmft2¶
dmft2 is the executable file generated
by compiling the source files in directory chargesc
of the Wien2K interface.
It updates the electron density like lapw2 in Wien2K.
It is a modified version of the Kristjan Haule’s DMFT-Wien2K interface
by Yongxin Yao.
Input files
Besides the input files generated by Wien2K,
it also needs the KSWT_0.h5 file.