EPW is the short name for "Electron-phonon Wannier". EPW is an open-source F90/MPI code which calculates properties related to the electron-phonon interaction using Density-Functional Perturbation Theory and Maximally Localized Wannier Functions. EPW is developed and maintained by Samuel Poncé, Roxana Margine, Carla Verdi, and Feliciano Giustino.

The reference technical manuscript for the latest public release is:
EPW: Electron-phonon coupling, transport and superconducting properties using maximally localized Wannier functions
by S. Poncé, E. R. Margine, C. Verdi, and F. Giustino.

Since 26 April 2016 EPW is distributed as part of the Quantum ESPRESSO suite.

The code was written by Feliciano Giustino (EPW v1) and Jesse Noffsinger (EPW v2) while at the University of California, Berkeley. Brad Malone (Harvard) and Cheol-Hwan Park (Seoul National University) contributed with tests and benchmarks. Roxana Margine implemented the anisotropic Eliashberg theory while at the University of Oxford (EPW v3). Samuel Poncé (Oxford) made the code compatible with the latest version of Quantum Espresso v5 in the latest release EPW v4. Carla Verdi (Oxford) developed the electron-phonon interpolation for polar materials including Froehlich correction (released within EPW v4). The addition of the electronic transport module was made by Samuel Poncé (Oxford) to compute electron scattering rates, resistivity, conductivity and mobility due to interaction with the lattice (EPW v5).

EPW is based on the method introduced in F. Giustino et al, Phys. Rev. B 76, 165108 (2007). An extended description of the first public release has been published in J. Noffsinger et al, Comput. Phys. Comm. 181, 2140 (2010). The extension of EPW to include the anisotropic Midgal-Eliashberg theory is based on the method described in E. R. Margine et al, Phys. Rev. B 87, 024505 (2013). The latest release of the code is described in S. Poncé et al, Comput. Phys. Commun. 209, 116 (2016).

EPW is developed under git within the GitLab portal.

As of September 2019, the EPW code is composed of 45,875 Fortran lines (including comments).

EPW main features

The EPW code can be used to compute:

  • The total electron-phonon coupling strenght \lambda
  • The anisotropic Eliashberg spectral function \alpha^2F
  • The transport spectral function \alpha^2 F_{\rm tr}
  • The anisotropic superconducting gap \Delta_{n{\bf k}} within the Eliashberg theory
  • The electron and phonon self-energies arising from electron-phonon interaction
  • The phonon linewidths and lifetimes arising from electron-phonon interaction
  • The electron linewidths and lifetimes arising from electron-phonon interaction
  • The temperature-dependence of the carrier lifetimes
  • The spectral functions needed for the calculation of ARPES spectra
  • The carriers (electron and hole) mobility \mu

Next version: EPW v5.2

Below is a list of new developments done between February 2019 and December 2019:

  • Modularization of most EPW subroutine
  • Cleaning and syntax uniformization following http://epw.org.uk/Main/Developers
  • The filkf and filqf can now take points in crystal or cartesian coordinate
  • Optimization of the transport module: the transition probability are written locally on the scratch of each node and then merged together
  • Improvements in symmetrization in the transport module
  • Addition of adaptative broadening (triggered when degaussw == 0).
  • Systematic check of each allocation and deallocation. A clean error message is thrown whenever there is an issue.
  • Debug when using 'scissor'
  • Creation of a new test for mobility in polar non-cubic materials
  • Debug in the case of crystal sum-rule and non-cubic materials.
  • Renamed input variables:
    • restart_freq --> restart_step
  • Removed input variables:
    • XX
  • New input variables:
    • XX
  • Change of default of input variables:
    • vme is now .TRUE. by default

Current version: EPW v5.1

Below is a list of new developments done between April 2018 and February 2019:

  • Support for USPP
  • Improvements to the cumulant spectral functions (computed with both convolution and FFT)
  • New Wigner-Seitz cell construction
  • Speed and memory optimizations for mobility calculations
  • k-point symmetry support for homogeneous BTE
  • Linear mixing with BTE
  • Introduction of a "qwindow" to reduce the required number of q-points to be calculated
  • Load balancing on active k-points among cores.
  • Indirect absorption corrections while reading external eigenvalues
  • optimizations in the case of ultra-dense grids
  • exact velocity calculations with vme (read .bvec from new w90)
  • Various modularization of the code.
  • Removed input variables:
    • time_max
  • New input variables:
    • use_ws
    • vme variable now working

Version: EPW v5.0

Below is a list of new developments done between October 2017 and April 2018:

  • Electronic transport (conductivity, resistivity, mobility)
  • Cumulant treatment (model)
  • Screening
  • Support for exclude bands
  • Calculation of velocity beyond the local approximation (using vme == .true.)
  • Removal of the EPW/tests folder. Tests are now in q-e/test-suite
  • Removal of q-point palletization (not very used and generated large code duplication) ==> removal of the parallel_k and parallel_q input variables.
  • New input variables:
    • cumulant
    • epsiHEG
    • fermi_diff
    • lscreen
    • scr_typ
    • meff
    • nel
    • smear_rpa
    • specfun_p
    • scattering
    • scattering_serta
    • int_mob
    • iterative_bte
    • mob_maxiter
    • carrier
    • ncarrier
    • scissor
    • lphase

Previous version: EPW v4.3

Below is a list of new developments done between end of January 2017 and September 2017:

  • Memory optimization (the code requires much less memory to run when etf_mem = 2)
  • Possibility to print the electron-phonon vertex |g| using the new prtgkk input variable
  • Real and Imaginary part of the phonon self-energy well as the phonon spectral function
  • When providing the q-points in the epw input file. The weight should not be reported anymore
  • New input variables:
    • prtgkk
  • Modified input variables:
    • etf_mem
    • specfun is now specfun_el

Previous version: EPW v4.2

Below is a list of new developments done between end of September 2016 and January 2017:

  • Memory optimization to deal with very large systems (50+ atoms in the primitive cell)
  • Possibility to impose the phonon ASR in real space using the 'simple' or 'crystal' ASR
  • Removal of the following input variables:
    • spinors
  • New input variables:
    • lifc
    • asr_typ
    • restart
    • restart_freq
  • New level of parallelization: band parallelism. This is activated using the -nimage keyword when launching an EPW calculation. It only works up to the creation of the .epb file. You then have to restart reading the .epb file an using only -npool parallelization.
  • Create restart point during the fine q-grid interpolation.

EPW v4.1

Below is a list of new developments done between end of April 2016 and September 2016:

  • Speed optimization (more calls to BLAS routine, replacement of "exp" by a look-up table)
  • Various bug fixes
  • Correct Wannier localization with spinors
  • The test-farm now checks 5 representative examples and the associated EPW Accuracy
  • Code coverage
  • Automatic documentation using Ford
  • About 30% of the routines are documented for Ford.
  • Less files are produced to decrease IO (no more igk files for example)
  • Restart after epmatwp1 is written with arbitrary number of cores
  • 5 physical tests are run an checked using the QE/testfarm framework
  • An average over degenerate eigenstates is done in the code for Sigma
  • Addition of fine phonon frequency in phonon linewidths output linewidth.phself
  • Electron and Phonon bandstructure can now be computed using band_plot with etf_mem true or false.
  • Debugging for IEEE floating-point exception, underflow, overflow etc...
  • Removal of a lot of unused internal variables
  • Gamma only calculation is not supported (lgamma=.true.) by EPW
  • Removal of the following input variables:
    • filelph
    • fly
    • tphases
    • fildvscf0
    • tshuffle
    • tshuffle2
    • selfen_type
    • eminabs
    • emaxabs
    • deltaeabs
    • phinterp
    • elinterp
    • epstrict
    • twophoton
    • indabs
  • Addition of the following input variables:
    • shortrange
    • longrange
  • Removing most of the #ifdef __PARA to increase readability of the code. This should only be used in low level routines and replace by #ifdef __MPI
  • Replacement of CMPLX (A, B) by CMPLX (A, B, kind=DP) that was causing a loss of precision
  • Addition of links to the documentation of the input variables.
  • Correction of a bug with MPI_FILE_SEEK when etf_mem = .false. and the calculation is big.
  • Removal of the epf files written when etf_mem = .false. Should not be a memory bottleneck and can be scaled down by increasing the number of cores.

Version: EPW v4.0

Below are some of the new features of EPW v4.0:

  • q parallelism
  • Speed optimization
  • Scalability to 120 cores
  • Various bug fixes
  • Creation of a test-farm to check compilation
  • Time-reversal symmetry support
  • Compatibility with the latest QE version and integration into QE trunk
  • Updated tutorials and creation of some Youtube tutorials
  • Creation of the EPW forum

EPW Presentation video

Presentation of EPW during the Quantum Espresso developer meeting 2017, Trieste, Italy.

This video can also be found here: https://www.youtube.com/watch?v=pwZpYOmz940&index=3&list=PLNc8Q4bBh5oiS2FuEucck-EvgexLmrb7G

Presentation of EPW during the Quantum Espresso Linear Response workshop 2016, Trieste, Italy. The video was recorded with WebEx.

This video can also be found here: https://www.youtube.com/watch?v=c1VzE3PInhc