quantum-espresso/EPW/ZG
Sabyasachi Tiwari 596a99433f EPWv5.9 2024-09-15 16:41:41 +00:00
..
src EPWv5.9 2024-09-15 16:41:41 +00:00
README EPWv5.9 2024-09-15 16:41:41 +00:00
tutorial.tar.gz EPW Version 5.8 2023-11-25 07:27:36 +00:00

README

              Marios Zacharias [1] & Feliciano Giustino [2,3], April 2024

[1] Univ Rennes, INSA Rennes, CNRS, Institut FOTON - UMR 6082, F-35000 Rennes, France 
[2] Oden Institute for Computational Engineering and Sciences, The University of Texas 
    at Austin, Austin, Texas 78712, USA 
[3] Department of Physics, The University of Texas at Austin, Austin, Texas 78712, USA
---------------------------------------------------------------------------------------------------

If you use ZG.x for the special displacement method (SDM) please do cite the following work:

[a] M. Zacharias and F. Giustino, Phys. Rev. Research 2, 013357, (2020).
[b] M. Zacharias and F. Giustino, Phys. Rev. B 94, 075125, (2016).

If you use ZG.x for the anhamonic special displacement method (A-SDM) please do cite the 
following work:

[a] M. Zacharias, G. Volonakis, F. Giustino, and J. Even, Phys. Rev. B 108, 035155 (2023)

If you use disca.x for inelastic scattering please do cite the following work:

[a] M. Zacharias, F. Giustino et al., Phys. Rev. B 104, 205109, (2021)
[b] M. Zacharias, F. Giustino et al., Phys. Rev. Lett. 127, 207401, (2021)

---------------------------------------------------------------------------------------------------

Acknowledgement: We thank Sabyasachi Tiwari, Oden Institute for Computational Engineering 
                 and Sciences, for help packaging this release. M.Z. acknowledges
                 funding from European Union (project ULTRA-2DPK / HORIZON-MSCA-2022-PF-01 /
                 Grant Agreement No. 101106654)

---------------------------------------------------------------------------------------------------

Executables in the ZG folder
-----------------------------

ZG.x             ---> for generating ZG configurations, A-SDM, ZG diffuse scattering, phonon unflolding
bands_unfold.x   ---> for performing band structure unfolding in supercell calculations
pp_spctrlfn.x    ---> for obtaining the electron spectral function after bands_unfold.x
epsilon_Gaus.x   ---> for calculating optical properties as in epsilon.x but Gaussian broadening
disca.x          ---> for calculating one-phonon and multiphonon inelastic scattering intensities
pp_disca.x       ---> for applying broadening and setting a resolution of scattering patterns
src/local folder ---> for post-processing. Compile them by "./compile_gfortran.sh"

---------------------------------------------------------------------------------------------------

For full instructions on how to run the exercises in the tarball "tutorial.tar.gz"
please refer to the EPW documentation site, or send an email to Marios Zacharias:  
zachariasmarios@gmail.com 

Links for input flags and tutorials:

https://docs.epw-code.org/doc/InputsZG.html
https://docs.epw-code.org/doc/School2023.html

---------------------------------------------------------------------------------------------------

Instructions for the construction of the Zacharias-Giustino "ZG" displacements following Eq. (2) of 
Phys. Rev. Research 2, 013357 (2020). The approach for generating the ZG displacements is based on 
the generalized theory of the special displacement method as in Phys. Rev. Research 2, 013357 (2020). 

STEPS for generating the ZG displacements to calculate temperature-dependent properties of solids: 

0.  Compile the version of Quantum Espresso 6.6.0 or later; PW, PH, and PP subroutines
    are required to run all executables, e.g. "make pw ph pp".
    Go to "/path_to_your_espresso/EPW/ZG/src" and "make".
    The code is also compiled with "make epw". 
    This code exploits some main routines of matdyn.x. In particular, the code
    takes advantage of the phonon interpolation scheme implemented for matdyn.x. This is 
    important, for example, in taking into account the LO-TO splitting in polar materials. 
    The necessary input files are the interatomic force constants "file.fc" and "ZG.in". 
    See for example files in the "example/silicon/ZG_structure/inputs" folder.

1.  Run a scf calculation: for example "/path_to_your_espresso/bin/pw.x < si.scf.in > si.scf.out" 
    for the silicon unit cell. 

2.  Run a phonon calculation: for example "/path_to_your_espresso/bin/ph.x < si.ph.in > si.ph.out" 
    for a relatively "dense" q-grid to obtain a converged phonon dispersion. 

3.  Run "/path_to_your_espresso/bin/q2r.x <q2r.in> q2r.out".
    The input "q2r.in" has the standard format of Quantum Espresso for calculating the 
    interatomic force constant matrix elements to be used to construct "ZG-configuration.dat".

4.  Calculate the phonon dispersion with "matdyn.x" and make sure that your phonon dispersion is
    correct (compare to other literature results). This is not a necessary step for generating the 
    "ZG-configuration". However, you need to ensure that the phonons, to be used for the construction 
    of the "ZG-configuration", are those you expect. For a polar material, LO-TO splitting should be 
    included.   
    
5.  Now one needs to decide on the size of the supercell configuration to be used for calculating 
    temperature dependent properties. For help, please see exercise1 in tutorial tarball. 
    One could potentially generate any supercell size by simply changing "dim1","dim2", 
    "dim3", and the list of q-points (optional, see below). "ZG.in" has the standard 
    format as a "matdyn.in" file for Quantum Espresso. Here we use the following input parameters:
    ---------------------------------------------------------------------------------------
    i) "ZG_conf"            : Logical flag that enables the creation of the ZG displacements. 
                              (default .true.) 
       "flscf"              : String for the name of the scf input file used to calculate the phonons. The 
                              code will read information for preparing the input file of the supercell calculation. 
                              If left empty the code will not generate the input file of the supercell calculation.
                              (default ' ')
       "T"                  : Real number indicating the temperature at which the calculations will be performed. 
                              "T" essentially defines the amplitude of the normal coordinates. 
                              (default 0.00)
       "T_array(1), etc.."  : Real number indicating the temperature at which the calculations will be performed. 
                              Fill T_array for generating ZG configurations for different temperatures. 
                              If nconfs = 1, the same set of signs is maintained for all temperatures. This is 
                              important for consistency reasons. If nconfs > 1 then "nconfs" ZG configurations
                              are generated each temperature specified in T_array. A maximum of 100 temperatures
                              are allowed. 
                              (default -1)
       "dim1","dim2","dim3" : Integers corresponding to the dimensionality of the supercell i.e.:
                              size of supercell will be [dim1 * a(1), dim2 * a(2), dim3 * a(3)],
                              where a(1), a(2), a(3) are the lattice vectors of the unit cell used
                              to compute the phonons.
                              (default 0, 0, 0)
       "atm_zg(1), etc.."   : String describing the element of each atomic species
                              (default "Element")
       "qhat_in"            : Vector with three real entries for specifying the direction qhat 
                              for the non-analytic part when dim1=dim2=dim3=1.
                              Use for example "qhat_in(1) = 0.1, qhat_in(2) =0.0, qhat_in(3) = 0.0"
                              to account for LO-TO splitting from the direction [1 0 0]. 
                              (default 0.1,0.1,0.1)
       "synch"              : Logical flag that enables a smooth Berry connection between the modes. 
                              (default .false.)
       "niters"             : Integer for the number of iterations the algorithm needs to 
                              go through for finding the optimum configuration. The algorithm 
                              generates a set of "+,-,+,-" signs and its possible permutations, 
                              trying to minimize the error coming from the coupling of modes with 
                              the same q-wavevector but at different branch. For a finite supercell
                              size the order of using the "+,-,+,-" set and its permutations is  
                              important giving different results. Therefore the algorithm checks 
                              the combination that brings the error lower than a threshold.
                              If integer "nconfs" > 1 then "niters" necomes equal to "nconfs".
                              (default 15000)
       "nconfs"             : Integer. If greater than 1 allows "nconfs" ZG configurations for each temperature
                              to be generated. "compute_error" is set to .false. 
       "compute_error"      : Logical flag: if set to .true. allows the code to find the optimal ZG configuration 
                              by minimizing the error based on the "threshold" flag (see below). Set it
                              to .false. if speed up is required. This is useful when (i) large supercell 
                              sizes are considered for which the error is minimized by the first set of signs, 
                              (ii) "single_ph_displ" is .true. (see below), and (iii) "nconfs" is larger than 1.
                              (default .true.)
       "error_thresh"       : Real number indicating the error at which the algorithm stops while it's 
                              looking for possible combinations of signs. Once this limit is reached, 
                              the ZG displacements are constructed. The threshold is usually chosen 
                              to be less than 30% of the diagonal terms, i.e. those terms that contribute 
                              to the calculation of temperature-dependent properties. Meaningless if 
                              compute_error = .fasle. and/or "nconfs" > 1.
                              (default 0.30)
       "incl_qA"            : Logical flag, to decide whether to include phonon modes in set A or not. 
                              (default .true.)
       "single_ph_displ"    : Logical flag that allows to displace the nuclei along single phonon modes. 
                              Use output configurations to compute electron-phonon matrix elements with a direct 
                              supercell calculation. Set the displacement to the zero point by "T = 0". 
                              This finite displacement should carry precisely the effect of diagonal elements of [g(q)+g(-q)].
                              Output files: "single_phonon-displacements.dat" and "single_phonon-velocities.dat".
                              (default .false.)
       "q_external"         : Logical flag that allows the use of a q-point list specified by the user in the input file. 
                              If .false. the q-point list is specified by the supercell dimensions dim1, dim2, and dim3. 
                              If .false. any q-point list after the input flags is ignored.
                              If .true. the q-point list must be provided by the user (or see "qlist_AB.txt").
                              IF ph_unfold = .true. then q_external = .true. automatically and the q-path is provided as 
                              in a standard phonon dispersion calculation. 
                              (default .false.)
       "qlist_AB.txt"       : This file contains the external q-list in crystal coordinates as in the "ZG_444.in" example,
                              after the input flags. It corresponds to the q-points commensurate to the supercell size. 
                              Only one of the q-point time-reversal partners is kept for the construction of the 
                              ZG displacements. The calculations, for the moment, assume systems with time-reversal symmetry. 
                              For the generation of the "qlist_AB.txt" set the q-gird in file 
                              "example/silicon/input/qlist.in" and run "../../../src/create_qlist.x < qlist.in > qlist.out".
                              One can modify the "create_qlist.f90" to generate a different path for consecutive q-points.
                              Paste the output of "qlist_AB.txt" to "ZG.in" after namelist &input. Set the flag 
                              q_external = .true. for the code to read the list.  
       "ASDM"               : Logical flag that enables the iterative procedure for evaluating anharmonic IFCs.
                              (default .false.)
       "na_ifc"             : Logical flag that adds the non analitic contributions to the interatomic force constants 
                              if the finite displacement method is used, as in Wang et al. Phys. Rev. B 85, 224303 (2012).
                              Important if "ASDM" flad is true. 
                              (default .false.)
       "ph_unfold"          : Logical flag to activate phonon unfolding procedure. To perform phonon 
                              unfolding ZG_conf must be set to .false.. If ph_unfold = .true. then q_external = .true. 
                              (default: .false.)
       "flfrq"              : Output file for phonon frequencies to printed with the spectral weights.
                              (default: 'frequencies.dat')
       "flweights"          : Output file for the spectral weights to printed with phonon frequncies. 
                              (default: 'unfold_weights.dat')
      "ng1","ng2","ng3"     : Integers corresponding to the (h k l) indices of the reciprocal lattice vector g.  
                              Increase their values to check convergence. Default is a good starting point. 
                              (default 10,10,10)
  
    ii)  To generate the ZG displacements run "/path_to_your_espresso/bin/ZG.x <ZG.in> ZG.out".
         This generates three output files: the "equil_pos.dat", "ZG-configuration.dat" and "ZG-velocities.dat". 
         The first file has the equilibrium coordinates of the nuclei and the second has the optimum set of nuclear
         coordinates that define the ZG displacements for a particular temperature and supercell size. 
         The third one has the ZG velocities of the nuclei generated in the same spirit with ZG displacements. 

    iii) The calculation of the ZG displacements should usually take a few seconds to few minutes with one processor. 

6. VERY IMPORTANT NOTE: It is perfectly reasonable to find different ZG displacements / ZG-configurations,
   since the modes obtained  by diagonalizing the dynamical matrix can differ by a phase factor 
   (or a unitary matrix in case of degeneracy) if the processor, or compiler, or libraries have changed. 
   The eigenvalues of course should remain the same in all cases. The synchronization routine should align the sign
   of the modes with respect to a reference mode, but the sign of this reference depends on the machine,
   and degeneracy is not taken into account. The best way to check the validity of your configuration is 
   by comparing the anisotropic displacement tensor with the exact values, both printed in "ZG.out". 
   Reducing the value of "threshold" should bring the anisotropic displacement tensor closer to the exact values. 

7. The ZG displacements can be employed for the calculation of any temperature-dependent 
   observable that is described by the Fermi Golden rule. The procedure is exactly the same as for 
   the calculation of the observable obtained with the nuclei clamped at their equilibrium positions, 
   but now, instead, using the ZG displacements (supercell) that incorporates automatically 
   the electron-phonon interaction and quantum zero-point motion. 

8. The ZG displacements can also be employed for the calculation of full temperature-dependent
   band structures using the unfolding technique for supercell calculations. 

----------------------------------------------------------------------------------------------------------

   Example using the ZG displacements and JDOS

Here we show a simple example on how to use the ZG displacement for calculating the temperature dependence 
of the JDOS and eventually extract the zero-point renormalization and temperature dependence of the band gap.

Steps: 

1. Once you generate the ZG-configuation from previous step, then you can run your first SCF calculation
   with the special displacement method.  Use the atomic positions in the file "ZG-configuration.dat" and 
   prepare your "scf.in" file. Make sure your lattice constants are comensurate with the supercell size. 
   For example, check the input files in the directory 'example/silicon/JDOS/inputs/333/ZG_0K'. 

2. Run an scf calculation and then prepare an "nscf.in" to run a non-self-consistent (nscf) calculation on a denser grid. 
   For example, check the input files in the directory 'example/silicon/JDOS/inputs/333/ZG_0K'.

3. Once you obtain the ".xml" file from the nscf calculation, run "commands.sh" as in the directory
   'example/silicon/JDOS/inputs/333/ZG_0K'. This will generate the file "data_one_column.dat" 
   with all eigenvalues calculated for each k-point using the ZG-configuration. Note that in 
   the file "commands.sh", only "NR+44" should be changed for a different run. 44 indicates how many 
   lines containing the eigenvalues exist, after the string match "eigenvalues size" in the ".xml" file.

4. Use the output file "data_one_column.dat" to calculate the joint-density of states (JDOS) via the executable 
   "JDOS_Gaus.x" located in the "src/local" folder. Command:  "/path_to/JDOS_Gaus.x <JDOS_Gaus.in > JDOS_Gaus.out". 
   For extracting the band gap from the joint-density of states follow the procedure in Ref.[Phys. Rev. B 94, 075125, (2016)].

5. Compare your results with the data in the directory 'example/silicon/JDOS/outputs/333'. 
   Gnuplot commands are aslo given to facilitate comparison.

6. In the examples you will also find ZG-configurations generated by setting the flag "incl_qA = .true." 
   and the flag "synch = .false.". The names of the ZG files end with "...qA.dat" and "...nosym.dat", respectively. 
   Outputs of the "scf", "nscf" and "JDOS" are also provided. Comparion of the results obtained with different settings 
   shows the importance of exluding the qA modes, which break the degeneracy at high-symmetry points, 
   in small supercell structures. For example, the valence band top of silicon is threefold degenerated. A general rule is 
   to keep "synch = .true." and "incl_qA = .false.", unless there is a particular reason to change them.  

7. Examples for the 3x3x3 and 5x5x5 Si ZG-configurations are provided. In the "outputs" directory the calculated 
   zero-point renormalization (ZPR) for each case is given in the gnuplot files. For a 5x5x5 Si ZG-configuration the 
   calculated ZPR is 55 meV, very close to the converged value of 57 meV obtained using an 8x8x8 Si ZG-configuration
   in Ref. [Phys. Rev. B 94, 075125, (2016)].
   
--------------------------------------------------------------------------------------------------------------

Other capabilities of ZG.x: 

1.  ZG.x can be used to generate self-consistent anharmonic special displacements (i.e. the A-SDM method). 
    These displacement essentially minimize the Gibbs free energy of a strongly anharmonic system, and can 
    be used to incorporare the effect of anharmonic electron-phonon coupling in one-shot DFT-ZG calculations. 
    On how to apply A-SDM please refer to exercise 3 of the tutorial. 

2.  ZG.x can also be used to generate displaced configurations along single phonon modes.
    Please see "single_phonon_displ" flag. 
    Find an example in:
    "example/silicon/single_ph_displ/444/inputs/".
    To run the example use: 
    "/path_to_your_espresso/bin/ZG.x <ZG_444.in> ZG_444.out". 
    The output files of interest are: 
    "single_phonon-displacements.dat" and "single_phonon-velocities.dat".
     
--------------------------------------------------------------------------------------------------------------

        NOW YOU CAN ENJOY GENERATING SPECIAL DISPLACENTS AND CALCULATE FINITE TEMPERATURE EFFECTS.