Automatic documentation of EPW using FORD.

git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12453 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
sponce 2016-06-01 14:11:06 +00:00
parent 471201791c
commit cf956c000b
4 changed files with 242 additions and 67 deletions

35
EPW/Ford/index.md Normal file
View File

@ -0,0 +1,35 @@
title: EPW overview
author: Samuel Poncé
date: 01-06-2016
<div style="text-align:center"><img src ="http://epw.org.uk/figures/logo_v7.png" width="600"></div>
EPW is an open-source F90/MPI code which calculates properties related to the electron-phonon interaction
using [Density-Functional Perturbation Theory](http://journals.aps.org/rmp/abstract/10.1103/RevModPhys.73.515)
and [Maximally Localized Wannier Functions](http://journals.aps.org/prb/abstract/10.1103/PhysRevB.56.12847).
EPW is licensed under a [[GNU General Public License]](http://www.gnu.org/licenses/gpl-3.0.en.html)
EPW is part of the [[Quantum Espresso]](http://www.quantum-espresso.org/) software package.
## Installation
The EPW software is only tested and intened to run on Linux (Mac OS might work but not tested).
* Download the latest version of [[Quantum-ESPRESSO]](http://www.qe-forge.org/gf/project/q-e/frs/?action=FrsReleaseBrowse&frs_package_id=18).
* Unpack and configure Quantum-ESPRESSO
```bash
tar -xvf espresso-5.4.0.tar.gz && cd espresso-5.4.0 && ./configure
```
* Compile EPW (this will also compile pwscf, phonon, and wannier90)
```bash
make -j 4 pwall
make -j 4 ph
make -j 4 epw
```
* The executable will be available in espresso-5.4.0/bin/epw.x or espresso-5.4.0/EPW/bin/epw.x

57
EPW/epw.md Normal file
View File

@ -0,0 +1,57 @@
title: EPW
project_dir: ./src
output_dir: ./doc
project_website: http://epw.org.uk/
summary: 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.
authors: Samuel Poncé
Roxana Margine
Carla Verdi
Feliciano Giustino
author_description: The EPW project is mainly developed at the university of Oxford.
github: https://github.com/sponce24
email: samuel.pon@gmail.com
project_sourceforge: http://qeforge.qe-forge.org/gf/project/q-e/
predocmark: >
media_dir: ./media
page_dir: ./Ford
docmark_alt: #
predocmark_alt: <
display: public
private
source: false
graph: true
macro: TEST
LOGIC=.true.
extra_mods: json_module: http://jacobwilliams.github.io/json-fortran/
futility: http://cmacmackin.github.io
license: GNU
extra_filetypes: sh #
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](http://journals.aps.org/rmp/abstract/10.1103/RevModPhys.73.515)
and [Maximally Localized Wannier Functions](http://journals.aps.org/prb/abstract/10.1103/PhysRevB.56.12847).
EPW is developed and maintained by [Samuel Poncé](http://giustino.materials.ox.ac.uk/index.php/Site/SamuelPonc%e9), [Roxana Margine](http://www.binghamton.edu/physics/people/margine.html), [Carla Verdi](http://giustino.materials.ox.ac.uk/index.php/Site/CarlaVerdi), and [Feliciano Giustino](http://giustino.materials.ox.ac.uk/).
The reference technical manuscript for the latest pubic release is:
[EPW: Electron-phonon coupling, transport and superconducting properties using maximally localized Wannier functions](http://arxiv.org/abs/1604.03525)
by S. Poncé, E. R. Margine, C. Verdi, and F. Giustino.
@Note
Since 26 April 2016 EPW is distributed as part of the [Quantum ESPRESSO](http://www.quantum-espresso.org/) 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).
EPW is based on the method introduced in F. Giustino et al, [Phys. Rev. B 76, 165108 (2007)](http://journals.aps.org/prb/abstract/10.1103/PhysRevB.76.165108).
An extended description of the first public release has been published in
J. Noffsinger et al, [Comput. Phys. Comm. 181, 2140 (2010)](http://www.sciencedirect.com/science/article/pii/S0010465510003218). 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)](http://journals.aps.org/prb/abstract/10.1103/PhysRevB.87.024505).
The latest release of the code is described in S. Poncé et al, [arXiv:1604.03525](http://arxiv.org/abs/1604.03525).

View File

@ -9,14 +9,14 @@
!-----------------------------------------------------------------------
SUBROUTINE elphon_shuffle_wrap
!-----------------------------------------------------------------------
!
! Electron-phonon calculation with Wannier functions: load all phonon q's
!
! 09/2009 This subroutine is the main driver of the electron-phonon
! calculation. It first calculates the electron-phonon matrix elements
! on the coarse mesh and then passes the data off to ephwann_shuffle
! to perform the interpolation.
!
!!
!! Electron-phonon calculation with Wannier functions: load all phonon q's
!!
!! This subroutine is the main driver of the electron-phonon
!! calculation. It first calculates the electron-phonon matrix elements
!! on the coarse mesh and then passes the data off to [[ephwann_shuffle]]
!! to perform the interpolation.
!!
!-----------------------------------------------------------------------
!
#ifdef __PARA
@ -64,49 +64,130 @@
#ifdef __NAG
USE f90_unix_io, ONLY : flush
#endif
! --------------------------------------------------------------
implicit none
!
integer :: sym_smallq(48)
!
real(kind=DP), allocatable :: xqc_irr(:,:), wqlist_irr(:), xqc(:,:), wqlist(:)
! the qpoints in the irr wedge
! the corresponding weigths
! the qpoints in the uniform mesh
! the corresponding weigths
integer :: nqc_irr, nqc, max, nqxq_tmp, ibnd, ik, ios, &
dummy1, dummy2, ik_start, ik_stop
! number of qpoints in the irreducible wedge
! number of qpoints on the uniform grid
!
! symmetry-related variables
!
integer :: gmapsym(ngm,48)
! correspondence G -> S(G)
complex(kind=DP) :: eigv (ngm, 48)
! e^{ iGv} for 1...nsym (v the fractional translation)
complex(kind=DP) :: cz1( nmodes, nmodes), cz2(nmodes, nmodes)
! the eigenvectors for the first q in the star
! the rotated eigenvectors, for the current q in the star
!
integer :: nq, isq (48), imq
! degeneracy of the star of q
! index of q in the star of a given sym.op.
! index of -q in the star of q (0 if not present)
integer :: sym_sgq(48)
! the symmetries giving the q point iq in the star
real(kind=DP) :: sxq (3, 48), et_tmp(nbnd, nkstot)
! list of vectors in the star of q
integer :: i, j, iq, iq_irr, isym, &
iq_first, jsym, ism1, nsq, ipol, jpol, ierr, iunpun
real(kind=DP) xq0(3), aq(3), saq(3), raq(3), ft1, ft2, ft3
! REAL(DP) :: w2(3*nat) ! dummy here
logical :: sym(48), eqvect_strict, nog, symmo, exst
character (len=256) :: tempfile, dirname,filename
character (len=256) :: tempfile
!! Temporary .eig file
character (len=256) :: dirname
!! Name of the directory
character (len=256) :: filename
!! Name of the file
#ifdef __PARA
character (len=3) :: filelab
!! Append the number of the core that works on that file
#endif
CHARACTER(LEN=6), EXTERNAL :: int_to_char
character(len=6), external :: int_to_char
!! Transfor an int to a character
logical :: sym(48)
!! Logical vectors that says which crystal symmetries exists in our system
logical :: eqvect_strict
!! This function test if two tridimensional vectors are equal
logical :: nog
!! Tell you if G=0 or not in $S(q0)+G=q$
logical :: symmo
!! Check whether the symmetry belongs to a symmorphic group
logical :: exst
!! Tells if a file exists.
!
integer :: sym_smallq(48)
!! Set of all symmetries for the small group of one q.
!! This is a subset of total crystal symmetries that remains
!! after the q-point pertubation.
integer :: nqc_irr
!! Number of qpoints in the irreducible wedge
integer :: nqc
!! Number of qpoints on the uniform grid
integer :: maxvalue
!! Temporary integer for max value
integer :: nqxq_tmp
!! Maximum G+q length ?
integer :: ibnd
!! Band index
integer :: ik
!! Total k-point index
integer :: ios
!! Contains the state of the opened file
integer :: dummy1
!! Dummy variable
integer :: dummy2
!! Dummy variable
integer :: ik_start
!! Lower bound for the k-point of the coarse grid in parallel
integer :: ik_stop
!! Higher bound for the k-point of the coarse grid in parallel
integer :: gmapsym(ngm,48)
!! Correspondence G -> S(G)
integer :: nq
!! Degeneracy of the star of q
integer :: isq (48)
!! Index of q in the star of a given sym.op.
integer :: imq
!! Index of -q in the star of q (0 if not present)
integer :: sym_sgq(48)
!! The symmetries giving the q point iq in the star
integer :: i
!! Index for the star of q points
integer :: j
!! Cartesian inddex
integer :: iq
!! Q-index
integer :: iq_irr
!! Irreducible q-index
integer :: isym
!! Index of symmetry
integer :: iq_first
!! First q in the star of q
integer :: jsym
!! Symmetry index
integer :: ism1
!! Inverse of the symmetry
integer :: nsq
!! The number of degeneracy of the small group for this iq in the star
integer :: ipol
!! Polarization index
integer :: jpol
!! Polarization index
integer :: ierr
!! Error index when reading/writing a file
integer :: iunpun
!! Unit of the file
!
real(kind=DP), allocatable :: xqc_irr(:,:)
!! The qpoints in the irr wedge
real(kind=DP), allocatable :: wqlist_irr(:)
!! The corresponding weigths
real(kind=DP), allocatable :: xqc(:,:)
!! The qpoints in the uniform mesh
real(kind=DP), allocatable :: wqlist(:)
!! The corresponding weigths
real(kind=DP) :: sxq (3, 48)
!! List of vectors in the star of q
real(kind=DP) :: et_tmp(nbnd, nkstot)
!! Temporary array containing the eigenvalues (KS or GW) when read from files
real(kind=DP) :: xq0(3)
!! Current coarse q-point
real(kind=DP) :: aq(3)
!! Store the current q-point for symmetry multiplication
real(kind=DP) :: saq(3)
!! Rotated q-point
real(kind=DP) :: raq(3)
!! Rotate q-point in cartesian coordinate
real(kind=DP) :: ft1
!! Fractional translation x
real(kind=DP) :: ft2
!! Fractional translation y
real(kind=DP) :: ft3
!! Fractional translation z
!
complex(kind=DP) :: eigv (ngm, 48)
!! $e^{ iGv}$ for 1...nsym (v the fractional translation)
complex(kind=DP) :: cz1( nmodes, nmodes)
!! The eigenvectors for the first q in the star
complex(kind=DP) :: cz2(nmodes, nmodes)
!! The rotated eigenvectors, for the current q in the star
!
! ---------------------------------------------------------------------
!
CALL start_clock ( 'elphon_wrap' )
!
@ -139,16 +220,16 @@
#endif
!
! fix for uspp
max = nqxq
maxvalue = nqxq
DO iq = 1, nqc_irr
nqxq_tmp = INT( ( (sqrt(gcutm) + sqrt(xqc_irr(1,iq)**2 + &
xqc_irr(2,iq)**2 + xqc_irr(3,iq)**2) ) &
/ dq + 4) * cell_factor )
IF (nqxq_tmp .gt. max) max = nqxq_tmp
IF (nqxq_tmp .gt. maxvalue) maxvalue = nqxq_tmp
ENDDO
IF (max .gt. nqxq) then
IF (maxvalue .gt. nqxq) then
IF (allocated(qrad)) deallocate(qrad)
allocate (qrad (max, nbetam*(nbetam+1)/2,lmaxq, nsp))
allocate (qrad (maxvalue, nbetam*(nbetam+1)/2,lmaxq, nsp))
ENDIF
IF (nkstot .ne. nk1*nk2*nk3 ) &
CALL errore('elphon_shuffle_wrap','nscf run inconsistent with epw input',1)

View File

@ -9,17 +9,17 @@
! Adapted from PH/ph.f90
!-----------------------------------------------------------------------
PROGRAM epw
!-----------------------------------------------------------------------
!
! This is the main EPW driver which sets the phases on the wavefunctions,
! calls wannierize and elphon_shuffle_wrap
!
! 8/13/08 removed epsil variables, fildyn, ldisp
!
! 8/14/08 lnscf is unnecessary, as is nqs,iq_start
! 8/15/08 recover has been cut
! 02/2009 in state of v0.2 Barely resembles phonon.f90
!
!! author: Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
!! version: v4.0
!! license: GNU
!! summary: EPW main driver
!!
!! This is the main EPW driver which sets the phases on the wavefunctions,
!! calls [[wann_run]] and [[elphon_shuffle_wrap]]
!!
!! @Note
!! 8/14/08 lnscf is unnecessary, as is nqs,iq_start
!!
USE io_global, ONLY : stdout
#ifdef __PARA
USE mp, ONLY : mp_bcast, mp_barrier
@ -31,14 +31,15 @@
USE global_version, ONLY : version_number
USE epwcom, ONLY : filukk, eliashberg, ep_coupling
USE environment, ONLY : environment_start
! SP: Move elph from control_ph to el_phon
USE elph2, ONLY : elph
USE elph2, ONLY : elph
! Flag to perform an electron-phonon calculation. If .true.
! the code will enter in [[elphon_shuffle_wrap]]
!
!
implicit none
!
CHARACTER (LEN=12) :: code = 'EPW'
INTEGER :: ierr
!! Name of the program
!
version_number = '4.0.0'
!
@ -94,7 +95,7 @@ write(stdout,'(a)') "
IF ( ep_coupling ) &
WRITE( stdout, '(/5x,"Ultrasoft (Vanderbilt) Pseudopotentials")' )
!
! read in the input file
! Read in the input file
!
CALL epw_readin
!
@ -120,9 +121,10 @@ write(stdout,'(a)') "
!
CALL setphases_wrap
!
! Create U(k, k') localization matrix
!
IF (wannierize) THEN
!
! Create U(k, k') localization matrix
!
CALL wann_run
ELSE
!