# Procedures

ProcedureLocationProcedure TypeDescription
allocate_epwqallocate_epwq.f90Subroutine

Dynamical allocation of arrays: quantities needed for the linear response problem

analytic_cont_aniso_iaxis_to_raxiseliashberg_aniso_cont_raxis.f90Subroutine
analytic_cont_iso_iaxis_to_raxiseliashberg_iso_cont_raxis.f90Subroutine

This routine does the analyic continuation of the isotropic Eliashberg equations from the imaginary-axis to the real axis reference F. Marsiglio, M. Schossmann, and J. Carbotte, Phys. Rev. B 37, 4965 (1988)

backtoBZktokpmq.f90Subroutine

Brings xx, yy, and zz into first BZ

bcast_ph_inputbcast_epw_input.f90Subroutine
bcast_ph_input1bcast_epw_input.f90Subroutine
check_inversepw2wan90epw.f90Subroutine
checksymsgama2.f90Subroutine
checksym_magsgama2.f90Subroutine
ckboundsktokpmq.f90Subroutine

Subroutine finds the lower and upper bounds of the coarse k-grid in parallel

close_epwclose_epw.f90Subroutine
compute_amn_parapw2wan90epw.f90Subroutine

adapted from compute_amn in pw2wannier90.f90 parallelization on k-points has been added 10/2008 Jesse Noffsinger UC Berkeley

compute_mmn_parapw2wan90epw.f90Subroutine
compute_pmn_parapw2wan90epw.f90Subroutine

Computes dipole matrix elements. This can be used to compute the velocity in the local approximation. The commutator with the non-local psp is neglected.

compute_umn_crigid_epw.f90Subroutine

Calculates $$U_{k+q} U_k^\dagger = <\Psi_{mk+q}|e^{i(q+G)r}|\Psi_{nk}>$$ in the approximation q+G->0 on the coarse grids.

compute_umn_frigid_epw.f90Subroutine

Calculates $$U_{k+q} U_k^\dagger = <\Psi_{mk+q}|e^{i{q+G}r}|\Psi_{nk}>$$ in the approximation q+G->0 on the fine grids.

cosetsgama2.f90Subroutine
count_kpointswrite_ephmat.f90Subroutine
createkmapcreatekmap.f90Subroutine

This subroutine is called from elphon_shuffle_wrap for each nq1nq2nq3 phonon on the coarse mesh.

createkmap2createkmap.f90Subroutine

generate the map k+q --> k for folding the rotation matrix U(k+q)

createkmap_pw2createkmap.f90Subroutine

Creates the first instances of [prefix].kmap and [prefix].kgmap. Previously this was done in PW2 (or set_kplusq, refold, etc. even earlier).

deallocate_eliashbergdeallocate_eliashberg.f90Subroutine

deallocates the variables allocated by allocate_eliashberg

deallocate_eliashberg_aniso_iaxisdeallocate_eliashberg.f90Subroutine

deallocates the variables allocated by allocate_eliashberg_aniso_iaxis

deallocate_eliashberg_aniso_raxisdeallocate_eliashberg.f90Subroutine

deallocates the variables allocated by allocate_eliashberg_aniso_raxis

deallocate_eliashberg_iso_iaxisdeallocate_eliashberg.f90Subroutine

deallocates the variables allocated by allocate_eliashberg_iso_iaxis

deallocate_eliashberg_iso_raxisdeallocate_eliashberg.f90Subroutine

deallocates the variables allocated by allocate_eliashberg_iso_raxis

deallocate_elphondeallocate_eliashberg.f90Subroutine

deallocates the variables allocated by electron-phonon

deallocate_epwdeallocate_epw.f90Subroutine

deallocates the variables allocated by allocate_epw this routine is unchanged as of 3/9/09 and should be cleaned and fixed 09/2009 Cleanup still necessary 12/2009 Added variables from elph.f90

dmebloch2wandmebloch2wan.f90Subroutine

From the Dipole in Bloch representationi (coarse mesh), find the corresponding Dipole in Wannier representation

dmewan2blochdmewan2bloch.f90Subroutine

From the Dipole in Wannier representation, find the corresponding Dipole in Bloch representation for a given k point

dos_ef_seqselfen_phon.f90Function
dos_quasiparticleeliashberg_pp.f90Subroutine

Computes the quasiparticle density of states in the superconducting state

dvanqq2dvanqq2.f90Subroutine

New This routine calculates two integrals of the Q functions and its derivatives with c V_loc and V_eff which are used to compute term dV_bare/dtau * psi in addusdvqpsi. The result is stored in int1,int2. The routine is called for each q in nqc.

dvqpsi_us3dvqpsi_us3.f90Subroutine

This routine calculates dV_bare/dtau * psi for one perturbation with a given q. The displacements are described by a vector u. The result is stored in dvpsi. The routine is called for each k point and for each pattern u. It computes simultaneously all the bands.

dvqpsi_us_only3dvqpsi_us_only3.f90Subroutine

This routine calculates dV_bare/dtau * psi for one perturbation with a given q. The displacements are described by a vector uact. The result is stored in dvpsi. The routine is called for each k point and for each pattern u. It computes simultaneously all the bands. This routine implements Eq. B29 of PRB 64, 235118 (2001). Only the contribution of the nonlocal potential is calculated here.

dx2my2pw2wan90epw.f90Function
dxypw2wan90epw.f90Function
dxzpw2wan90epw.f90Function
dynbloch2wandynbloch2wan.f90Subroutine

From the Dynamical Matrix in Bloch representation (coarse mesh), find the corresponding matrix in Wannier representation

dynifc2blochcdynwan2bloch.f90Subroutine

From the IFCs in the format of q2r, find the corresponding dynamical matrix for a given q point (as in matdyn.x) on the coarse grid

dynifc2blochfdynwan2bloch.f90Subroutine

From the IFCs in the format of q2r, find the corresponding dynamical matrix for a given q point (as in matdyn.x) on the fine grid

dynwan2blochdynwan2bloch.f90Subroutine

WARNING: this SUBROUTINE is identical to hamwan2bloch.f90, except that here rdw is a real array, not a complex one. This is required to obtain proper phonon dispersion interpolation and corresponds to the reality of the interatomic force constants

dyzpw2wan90epw.f90Function
dz2pw2wan90epw.f90Function
efermig_seqephwann_shuffle.f90Function
eliashberg_a2fa2f.f90Subroutine

Compute the Eliasberg spectral function in the Migdal approximation.

eliashberg_aniso_iaxiseliashberg_aniso_iaxis.f90Subroutine
eliashberg_eqseliashberg.f90Subroutine
eliashberg_initeliashberg_setup.f90Subroutine
eliashberg_iso_iaxiseliashberg_iso_iaxis.f90Subroutine

This routine is the driver of the self-consistent cycle for the isotropic Eliashberg equations on the imaginary-axis.

eliashberg_iso_raxiseliashberg_iso_raxis.f90Subroutine

This routine is the driver of the self-consistent cycle for the isotropic Eliashberg equations on the real-axis.

eliashberg_memlt_aniso_aconkernels_aniso_iaxis.f90Subroutine

Estimate the memory requirements for the anisotropic Eliashberg funtion used for analytic continuation from imaginary to real axis

eliashberg_memlt_aniso_iaxiskernels_aniso_iaxis.f90Subroutine

Estimate the memory requirements for anisotropic Eliashberg equations on imaginary axis

This routine reads from file the anisotropic Delta and Znorm on the imaginary-axis

eliashberg_write_cont_raxiseliashberg_write.f90Subroutine
eliashberg_write_iaxiseliashberg_write.f90Subroutine

This routine writes to files results from the solutions of the Eliashberg equations on the imaginary-axis

elphel2_shuffleelphel2_shuffle.f90Subroutine
elphon_shuffleelphon_shuffle.f90Subroutine

Electron-phonon calculation from data saved in fildvscf Shuffle2 mode (shuffle on electrons + load all phonon q's)

elphon_shuffle_wrapelphon_shuffle_wrap.f90Subroutine

Electron-phonon calculation with Wannier functions: load all phonon q's

ephbloch2waneephbloch2wane.f90Subroutine

From the electron-phonon matrix elements in Bloch representation (coarse mesh), find the corresponding matrix elements in Wannier representation

ephbloch2wanpephbloch2wanp.f90Subroutine

From the EP Matrix in Electron Bloch representation (coarse mesh), find the corresponding matrix in Phonon Wannier representation

ephbloch2wanp_memephbloch2wanp.f90Subroutine
ephwan2blochephwan2bloch.f90Subroutine

Interpolation from Wannier to the fine Bloch grid of the electron-phonon matrix elements

ephwan2blochpephwan2blochp.f90Subroutine

even though this is for phonons, I use the same notations adopted for the electronic case (nmodes->nmodes etc)

ephwann_shuffleephwann_shuffle.f90Subroutine

Wannier interpolation of electron-phonon vertex

epw_initepw_init.f90Subroutine

epw_setupepw_setup.f90Subroutine

EPW setup.

epw_setup_restartepw_setup.f90Subroutine

Setup in the case of a restart

epw_summaryepw_summary.f90Subroutine
epw_writeephwann_shuffle.f90Subroutine
eqvect_strictelphon_shuffle_wrap.f90Function
estimate_tc_gapeliashberg_setup.f90Subroutine
evaluate_a2f_lambdaeliashberg_setup.f90Subroutine
evaluate_a2fijkernels_aniso_iaxis.f90Subroutine

computes the anisotropic spectral function a2F(k,k',w)

fermiwindowfermiwindow.f90Subroutine
fkboundskpointdivision.f90Subroutine

Subroutine finds the lower and upper bounds a k-grid in parallel

fkbounds_bndkpointdivision.f90Subroutine

Subroutine finds the lower and upper bounds in band parallelization

fractraslelphel2_shuffle.f90Subroutine
free_energyeliashberg_pp.f90Subroutine

Computes the free energy difference between the superconducting and normal states

fxx2m3y2pw2wan90epw.f90Function
fxyzpw2wan90epw.f90Function
fxz2pw2wan90epw.f90Function
fy3x2my2pw2wan90epw.f90Function
fyz2pw2wan90epw.f90Function
fz3pw2wan90epw.f90Function
fzx2my2pw2wan90epw.f90Function
gamma_acontdistribution.f90Subroutine

computes gammam(w,wp) (notes RM) reference F. Masiglio, M. Schossmann, and J. Carbotte, PRB 37, 4965 (1988)

gap_distribution_FSeliashberg_write.f90Subroutine
gap_FSeliashberg_write.f90Subroutine
gen_freqgrid_iaxisgen_freqgrid.f90Subroutine
gen_freqgrid_raxisgen_freqgrid.f90Subroutine

Automatic generation of the frequency-grid for real-axis calculations.

generate_guiding_functionspw2wan90epw.f90Subroutine
gmap_symgmap_sym.f90Subroutine

For every G vector, find S(G) for all the symmetry operations of the crystal. Construct the matrix eigv(ig,isym) = $e^{i G v(S)}$ where v(S) is the (possible) fractional translation associated with the symmetry operation

hambloch2wanhambloch2wan.f90Subroutine

From the Hamiltonian in Bloch representationi (coarse mesh), find the corresponding Hamiltonian in Wannier representation

hamwan2blochhamwan2bloch.f90Subroutine
hpsort_eps_epwsort.f90Subroutine
integrate_eliashberg_iso_raxiseliashberg_iso_raxis.f90Subroutine

This routine solves the isotropic Eliashberg equations on the real-axis

inverse_ssgama2.f90Subroutine
irotateelphon_shuffle_wrap.f90Subroutine
irreksgama2.f90Subroutine
kernel_aniso_iaxiskernels_aniso_iaxis.f90Subroutine

Compute kernels K_{+}(ik,iq,ibnd,jbnd;n,n',T) and K_{-}(ik,iq,ibnd,jbnd;n,n',T) and store them in memory

kernel_aniso_iaxis_analytic_contkernels_aniso_iaxis.f90Subroutine

computes kernels K_{+}(w,iw_n,T) and K_{-}(w,iw_n,T) reference F. Masiglio, M. Schossmann, and J. Carbotte, PRB 37, 4965 (1988)

kernel_iso_iaxiskernels_iso_iaxis.f90Subroutine
kernel_iso_iaxis_analytic_contkernels_iso_iaxis.f90Subroutine
kernel_raxiskernels_raxis.f90Subroutine
kmesh_finecreate_mesh.f90Subroutine

This routine defines the nr. of k-points on the fine k-mesh within the Fermi shell

kpmq_mapcreate_mesh.f90Subroutine

this routine finds the index of k+q or k-q point on the fine k-mesh

kpointdivisionkpointdivision.f90Subroutine

This is just to find the first kpoint block in the pool

kqmap_finecreate_mesh.f90Subroutine

this routine finds the index of k+sign*q on the fine k-mesh

ktokpmqktokpmq.f90Subroutine

For a given k point in cart coord, find the index of the corresponding (k + sign*q) point

lambdai_aniso_ver1kernels_aniso_iaxis.f90Subroutine

computes lambda(w-iw_n)
reference F. Masiglio, M. Schossmann, and J. Carbotte, PRB 37, 4965 (1988)

lambdai_aniso_ver2kernels_aniso_iaxis.f90Subroutine

computes lambda(w-iw_n)
reference F. Masiglio, M. Schossmann, and J. Carbotte, PRB 37, 4965 (1988)

lambdai_isokernels_iso_iaxis.f90Subroutine
lambdar_aniso_ver1kernels_aniso_iaxis.f90Subroutine
lambdar_aniso_ver2kernels_aniso_iaxis.f90Subroutine
lambdar_isokernels_iso_iaxis.f90Subroutine
lib_deallocpw2wan90epw.f90Subroutine

Routine to de-allocate Wannier related matrices.

load fine k mesh and distribute among pools

Load fine q mesh and distribute among pools

wannier interpolation of e-p vertex: load rotation matrix on coarse mesh and distribute

mem_integer_size_eliashbergeliashberg_setup.f90Subroutine
mem_sizeephwann_shuffle.f90Subroutine

SUBROUTINE estimates the amount of memory taken up by the $$<k+q| dV_q,nu |k>$$ on the fine meshes and prints out a useful(?) message

mem_size_eliashbergeliashberg_setup.f90Subroutine
mix_broydenbroyden.f90Subroutine

Modified Broyden's method for potential/charge density mixing D.D.Johnson, PRB 38, 12807 (1988)

mix_broyden2broyden.f90Subroutine

Modified Broyden's method for potential/charge density mixing D.D.Johnson, PRB 38, 12807 (1988)

mix_broyden2_anisobroyden.f90Subroutine

Modified Broyden's method for potential/charge density mixing D.D.Johnson, PRB 38, 12807 (1988)

mix_broyden_anisobroyden.f90Subroutine

Modified Broyden's method for potential/charge density mixing D.D.Johnson, PRB 38, 12807 (1988)

mode_groupsgama2.f90Subroutine
multablesgama2.f90Subroutine
nesting_fn_knesting_fn.f90Subroutine

Compute the imaginary part of the phonon self energy due to electron- phonon interaction in the Migdal approximation. This corresponds to the phonon linewidth (half width). The phonon frequency is taken into account in the energy selection rule.

nesting_fn_qnesting_fn.f90Subroutine

compute the imaginary part of the phonon self energy due to electron- phonon interaction in the Migdal approximation. This corresponds to the phonon linewidth (half width). The phonon frequency is taken into account in the energy selection rule.

openfilepwopenfilepw.f90Subroutine

RM - Nov/Dec 2014 Imported the noncolinear case implemented by xlzhang

p_zpw2wan90epw.f90Function
para_boundsktokpmq.f90Subroutine

Subroutine finds the lower and upper bounds if we split some quantity over pools

phases_a_mpw2wan90epw.f90Subroutine
plot_bandplot_band.f90Subroutine

This subroutine writes output files for phonon dispersion and band structure RM : this subroutine should be tested SP : Modified so that it works with the current plotband.x of QE 5

poolgatherpoolgather.f90Subroutine

gather the kpoints and the electronic eigenvalues across the pools doesn't work with the double grid (k and k+q)

poolgather2poolgather.f90Subroutine

gather the kpoints and the electronic eigenvalues across the pools works with the double grid (k and k+q) define rest and nbase as in loadkmesh_para subroutine

poolgather_intpoolgather.f90Subroutine

gather the kpoints and the electronic eigenvalues across the pools works with the double grid (k and k+q) define rest and nbase as in loadkmesh_para subroutine

poolgather_int1poolgather.f90Subroutine

gather the kpoints and the electronic eigenvalues across the pools works with the double grid (k and k+q) define rest and nbase as in loadkmesh_para subroutine

print_clock_epwprint_clock_epw.f90Subroutine
proj_w90wannierize.f90Subroutine
pw2wan90epwpw2wan90epw.f90Subroutine

This is the interface to the Wannier90 code: see http://www.wannier.org

pxpw2wan90epw.f90Function
pypw2wan90epw.f90Function

Read the eliashberg spectral function from fila2f

This routine reads the dynamical matrix file. The file is assumed to be already opened. iq is the number of the dynamical matrix to read.

Read paramters from the dynamical matrix

read the eigenvalues obtained from a previous epw run

Read IFC in real space from the file generated by q2r. Adapted from PH/matdyn.x by C. Verdi and S. Ponce

read map of G vectors G -> G-G_0 for a given q point (this is used for the folding of k+q into the first BZ)

read dynamical matrix for the q points
iq_first, iq_first+1, ... iq_first+nq-1

refoldrefold.f90Subroutine
rgd_blkrigid_epw.f90Subroutine

This is adapted from QE PH/rigid.f90

rgd_blk_epwrigid_epw.f90Subroutine

Compute the long range term for the e-ph vertex to be added or subtracted from the vertex

rgd_blk_epw_finerigid_epw.f90Subroutine

Compute the long range term for the e-ph vertex to be added or subtracted from the vertex

rotate_cartelphel2_shuffle.f90Subroutine
rotate_eigenmrotate_eigenm.f90Subroutine

Here:

rotate_epmatrotate_epmat.f90Subroutine
run_wannierpw2wan90epw.f90Subroutine
rwepmatwephwann_shuffle.f90Subroutine

A simple wrapper to the davcio routine to read/write arrays instead of vectors

spw2wan90epw.f90Function
scan_file_topw2wan90epw.f90Subroutine
selfen_elec_kselfen_elec.f90Subroutine

Compute the imaginary part of the electron self energy due to electron- phonon interaction in the Migdal approximation. This corresponds to the electron linewidth (half width). The phonon frequency is taken into account in the energy selection rule.

selfen_elec_qselfen_elec.f90Subroutine

Compute the imaginary part of the electron self energy due to electron- phonon interaction in the Migdal approximation. This corresponds to the electron linewidth (half width). The phonon frequency is taken into account in the energy selection rule.

selfen_phon_kselfen_phon.f90Subroutine

compute the imaginary part of the phonon self energy due to electron- phonon interaction in the Migdal approximation. This corresponds to the phonon linewidth (half width). The phonon frequency is taken into account in the energy selection rule.

selfen_phon_qselfen_phon.f90Subroutine

compute the imaginary part of the phonon self energy due to electron- phonon interaction in the Migdal approximation. This corresponds to the phonon linewidth (half width). The phonon frequency is taken into account in the energy selection rule.

Set the acoustic sum rule. Taken directly from PHonon/PH/q2trans.f90 It would be better to take the set_asr for /Modules/. However they are different (frc) and to be consitent with q2r.x we take this one.

set_ndnmbrset_ndnmbr.f90Subroutine
set_u_matrixpw2wan90epw.f90Subroutine
setphasessetphases.f90Subroutine
setphases_wrapsetphases_wrap.f90Subroutine

This is the wrapper which is used to set the phases of the wavefunctions
at k and k+q on the coarse mesh. It should only be called once. Note that the phases at k+q are for the input 'q' vector, not the one in the dynamical coarse list.

setup_nnkppw2wan90epw.f90Subroutine

This routine write and read the .nnkp file. The file specifies 1) The initial projections functions in the format num_proj proj_site(1,i),proj_site(2,i),proj_site(3,i) proj_l(i),proj_m(i),proj_radial(i) proj_z(1,i),proj_z(2,i),proj_z(3,i),proj_x(1,i),proj_x(2,i),proj_x(3,i), proj_zona(i) proj_s(i), proj_s_qaxis(1,i),proj_s_qaxis(2,i),proj_s_qaxis(3,i)

sgam_atsgama2.f90Subroutine
sgam_at_magsgama2.f90Subroutine
sgama2sgama2.f90Subroutine
spectral_func_kspectral_func.f90Subroutine

Compute the electron spectral function including the electron- phonon interaction in the Migdal approximation.

spectral_func_qspectral_func.f90Subroutine

Compute the electron spectral function including the electron- phonon interaction in the Migdal approximation.

star_q2star_q2.f90Subroutine
stop_epwstop_epw.f90Subroutine

Close all files and synchronize processes before stopping. Called at the end of the run (removes 'recover')

sum_eliashberg_aniso_iaxiseliashberg_aniso_iaxis.f90Subroutine
sum_eliashberg_iso_iaxiseliashberg_iso_iaxis.f90Subroutine

This routine solves the isotropic Eliashberg equations on the imaginary-axis

sumkg_seqephwann_shuffle.f90Function

This function computes the number of states under a given energy e

vmebloch2wanvmebloch2wan.f90Subroutine

Calculate the velocity matrix elements in the Wannier basis at no point do we actually have the coarse mesh v-ME.

vmewan2blochvmewan2bloch.f90Subroutine
wann_runwannierize.f90Subroutine
wigner_seitzwigner_seitz.f90Subroutine

Calculates a grid of points that fall inside of (and eventually on the surface of) the Wigner-Seitz supercell centered on the origin of the Bravais lattice with primitive translations nk1a_1+nk2a_2+nk3*a_3

wigner_seitz2wigner_seitz2.f90Subroutine

We have nk1nk2nk3 electron points and nq1nq2nq3 phonon points on the same grid. Assuming nq_i <= nk_i, i=1..3 we sort the corresponding wigner-seitz points in such a way that a subset 1...nrr_q < nrr_k gives the WS points for the phonons, while the full set 1..nrr_k gives the WS points for the electrons

write_bandpw2wan90epw.f90Subroutine
write_ephmatwrite_ephmat.f90Subroutine

This subroutine writes the elph matrix elements in a format required by Eliashberg equations

write_filukkpw2wan90epw.f90Subroutine
write_plotpw2wan90epw.f90Subroutine
write_winfilwannierize.f90Subroutine

This SUBROUTINE write the prefix.win file which wannier90.x needs to run. Primarily it contains information about the windows USEd for the disentanglement, and the initial projections. JN - 10/2008 projections now in elph.in file

ylm_expansionpw2wan90epw.f90Subroutine
ylm_wannierpw2wan90epw.f90Subroutine
Help