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

\[H_{k} = \sum_{n}{E_{nk}\vert\psi_{nk}\rangle\langle\psi_{nk}\vert}\]

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

\[\begin{split}H_{k} &= \sum_{\alpha, \beta}\sum_{n}{E_{nk} \vert\phi_{\alpha k}\rangle \langle\phi_{\alpha k}\vert\psi_{nk}\rangle \langle\psi_{nk}|\phi_{\beta k}\rangle}\langle \phi_{\beta k}\vert \\ &= \sum_{\alpha, \beta}H_{\alpha \beta}^{k}\end{split}\]

Here we have define

\[H_{\alpha \beta}^{k} = \sum_{n}{E_{nk}\langle\phi_{\alpha k} \vert\psi_{nk}\rangle\langle\psi_{nk}\vert\phi_{\beta k}\rangle}\]

The one-body part of the local onsite Hamiltonian is simply given by

\[H_{\alpha \beta} = \sum_{k}{w_{k} H_{\alpha \beta}^{k}}\]

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

\[ \begin{align}\begin{aligned}H_{\alpha \beta}^{k, isym} = \sum_{n}{E_{nk}\langle\phi_{\alpha k, isym} \vert\psi_{nk, isym}\rangle\langle\psi_{nk,isym} \vert\phi_{\beta k, isym}\rangle}\\ H_{\alpha \beta} = \sum_{k, isym}{w_{k} H_{\alpha \beta}^{k, isym}/nsym}\end{aligned}\end{align} \]

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.h5

    HDF5 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.)
    • /kptfnamecase.kgen file 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.h5

    HDF5 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.h5 with 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.LOG

    Main 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.LOG before the next electro density iteration.

  • KSWT_0.h5

    HDF5 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.h5

    HDF5 file storing the solution of the Gutzwiller nonlinear eqns. Rename it to WH_RL_INP.h5 and 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.h5

    HDF5 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.