EPW Makefiles are modified so that ZG executables are compiled with "make epw"

ZG folder is renamed from "ZG_displacement" to "ZG" (looks nicer)
tar file containing the example of JDOS is replaced by the folder "example"
"doc" folder is added containing a tutorial and a file describing the input variables
README is also updated accordingly (minor changes)
This commit is contained in:
Marios Zacharias 2021-07-09 11:30:16 -05:00
parent 2448f65b0d
commit b6a6b8d6f1
23 changed files with 54 additions and 25 deletions

View File

@ -7,12 +7,15 @@ epw:
(cd src ; make all )
- (mkdir -p bin)
(cd bin ; ln -fs ../src/epw.x . )
(cd ZG/src ; make )
clean:
cd src ; rm -f *.o *.mod *~ *.F90
cd ZG/src ; rm -f *.o *.mod *~
distclean : clean
rm -f src/epw.x bin/epw.x
rm -f ZG/src/*.x
release:
cd ../ ; cp -r EPW EPW-release; cd EPW-release ; \

View File

@ -1,4 +1,4 @@
Marios Zacharias [1] & Feliciano Giustino [2,3], May 2021
Marios Zacharias [1] & Feliciano Giustino [2,3], July 2021
[1] Department of Mechanical and Materials Science Engineering, Cyprus University of Technology,
P.O. Box 50329, 3603 Limassol, Cyprus
@ -7,7 +7,7 @@ Austin, Texas 78712, USA
[3] Department of Physics, The University of Texas at Austin, Austin, Texas 78712, USA
---------------------------------------------------------------------------------------------------
If you use ZG.x please do cite the following work:
If you use ZG.x or bands_unfold.x please do cite the following work:
[1] Marios Zacharias and Feliciano Giustino, Phys. Rev. Research 2, 013357, (2020).
[2] Marios Zacharias and Feliciano Giustino, Phys. Rev. B 94, 075125, (2016).
@ -17,6 +17,19 @@ If you use ZG.x please do cite the following work:
Acknowledgement: We thank Hyungjun Lee, Oden Institute for Computational Engineering and Sciences,
for help packaging this release.
---------------------------------------------------------------------------------------------------
Executables in ZG folder
------------------------
ZG.x ---> for generating ZG configurations
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 all-phonon inelastic scattering intensities
pp_disca.x ---> for applying broadening and setting a resolution of scattering patterns
src/local folder ---> fortran routines for post-processing. Compile them by "./compile_gfortran.sh"
---------------------------------------------------------------------------------------------------
Instructions for the construction of the Zacharias-Giustino "ZG" displacement following
Eq. (2) of Phys. Rev. Research 2, 013357, 2020. The approach for generating the ZG-displacement
@ -27,12 +40,13 @@ STEPS for generating the "ZG-displacement" for the calculation of temperature-de
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_displacement/src" and "make".
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/inputs" folder.
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.
@ -53,7 +67,7 @@ STEPS for generating the "ZG-displacement" for the calculation of temperature-de
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 the example folder by "tar -xvf example.tar.gz".
In file "example/silicon/ZG_displacement_generation/inputs/ZG_444.in" we show the example for
In file "example/silicon/ZG_structure/inputs/ZG_444.in" we show the example for
constructing a 4x4x4 ZG-configuration. 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.
@ -111,7 +125,7 @@ STEPS for generating the "ZG-displacement" for the calculation of temperature-de
Only one of the q-point time-reversal partners is kept for the construction of the
ZG-displacement. 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".
"example/silicon/ZG_structure/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.
@ -121,7 +135,7 @@ STEPS for generating the "ZG-displacement" for the calculation of temperature-de
The first file has the equilibrium coordinates of the nuclei and the second has the optimum set of nuclear coordinates
that define the ZG-displacement for a particular temperature and supercell size.
The third one has the ZG-velocities or momenta of the nuclei generated in the same spirit with the ZG displacement.
The outputs for a supercell size of 4x4x4 are in the folder "example/silicon/output/".
The outputs for a supercell size of 4x4x4 are in the folder "example/silicon/ZG_structure/output/".
iii) The calculation of the ZG-displacement should usually takes a few seconds to few minutes with one processor.
6. VERY IMPORTANT NOTE: It is perfectly reasonable to find different ZG-displacements / ZG-configurations,
@ -144,7 +158,7 @@ STEPS for generating the "ZG-displacement" for the calculation of temperature-de
band structures using the unfolding technique for supercell calculations.
----------------------------------------------------------------------------------------------------------
Example using the ZG-displacement
Here we show a simple example on how to use the ZG-displacement for calculating the temperature dependence

View File

@ -21,32 +21,32 @@ all : ZG.x disca.x pp_disca.x pp_spctrlfn.x bands_unfold.x epsilon_Gaus.x
ZG.x : ZG.o $(PHAUXOBJS) $(PHOBJS) $(PWOBJS) $(LRMODS) $(QEMODS) $(LIBOBJS)
$(LD) $(LDFLAGS) -o $@ \
ZG.o $(PHAUXOBJS) $(PHOBJS) $(LRMODS) $(PWOBJS) $(QEMODS) $(LIBOBJS) $(QELIBS)
- ( cd ../../../bin ; ln -fs ../EPW/ZG_displacement/src/$@ . )
- ( cd ../../../bin ; ln -fs ../EPW/ZG/src/$@ . )
disca.x : disca.o $(PHAUXOBJS) $(PHOBJS) $(PWOBJS) $(LRMODS) $(QEMODS) $(LIBOBJS)
$(LD) $(LDFLAGS) -o $@ \
disca.o $(PHAUXOBJS) $(PHOBJS) $(LRMODS) $(PWOBJS) $(QEMODS) $(LIBOBJS) $(QELIBS)
- ( cd ../../../bin ; ln -fs ../EPW/ZG_displacement/src/$@ . )
- ( cd ../../../bin ; ln -fs ../EPW/ZG/src/$@ . )
pp_disca.x : pp_disca.o $(PWOBJS) $(QEMODS) $(LIBOBJS)
$(LD) $(LDFLAGS) -o $@ \
pp_disca.o $(PHAUXOBJS) $(PHOBJS) $(PWOBJS) $(QEMODS) $(LIBOBJS) $(QELIBS)
- ( cd ../../../bin ; ln -fs ../EPW/ZG_displacement/src/$@ . )
- ( cd ../../../bin ; ln -fs ../EPW/ZG/src/$@ . )
bands_unfold.x : bands_unfold.o $(PWOBJS) $(QEMODS) $(LIBOBJS)
$(LD) $(LDFLAGS) -o $@ \
bands_unfold.o ../../../PP/src/libpp.a $(PWOBJS) $(QEMODS) $(LIBOBJS) $(QELIBS)
- ( cd ../../../bin ; ln -fs ../EPW/ZG_displacement/src/$@ . )
- ( cd ../../../bin ; ln -fs ../EPW/ZG/src/$@ . )
pp_spctrlfn.x : pp_spctrlfn.o $(PWOBJS) $(QEMODS) $(LIBOBJS)
$(LD) $(LDFLAGS) -o $@ \
pp_spctrlfn.o $(PHAUXOBJS) $(PHOBJS) $(PWOBJS) $(QEMODS) $(LIBOBJS) $(QELIBS)
- ( cd ../../../bin ; ln -fs ../EPW/ZG_displacement/src/$@ . )
- ( cd ../../../bin ; ln -fs ../EPW/ZG/src/$@ . )
epsilon_Gaus.x : epsilon_Gaus.o $(PWOBJS) $(QEMODS) $(LIBOBJS)
$(LD) $(LDFLAGS) -o $@ \
epsilon_Gaus.o ../../../PP/src/libpp.a $(PWOBJS) $(QEMODS) $(LIBOBJS) $(QELIBS)
- ( cd ../../../bin ; ln -fs ../EPW/ZG_displacement/src/$@ . )
- ( cd ../../../bin ; ln -fs ../EPW/ZG/src/$@ . )
clean :
- /bin/rm -f *.x *.o *.a *~ *.mod

View File

@ -2947,8 +2947,8 @@ SUBROUTINE ZG_configuration(nq, nat, ntyp, amass, ityp, q, w2, z_nq_zg, ios, &
!!!!!!!
IF (ionode) THEN
WRITE(*,*)
WRITE(*,'(A11, i8)') "Iteration:", kk
WRITE(*,*) " Minimize error based on threshold"
WRITE(*,'(A11, i8)') "Attempt #", kk
WRITE(*,*) " Searching for optimum configuration..."
ENDIF
!
DO p = 1, combs_all

View File

@ -3,12 +3,13 @@ PROGRAM rotate
IMPLICIT NONE
INTEGER :: i, p, sym, nk_tot, ctr
DOUBLE PRECISION, ALLOCATABLE :: str_f(:,:), str_f_new(:,:)
DOUBLE PRECISION, ALLOCATABLE :: str_f(:,:), str_f_new(:,:), str_fp(:, :)
CHARACTER(len=256) :: filename
!
DOUBLE PRECISION :: Rmat(2,2), pi, theta
DOUBLE PRECISION :: Rmat(2,2), pi, theta, eps
!
pi = 3.1415926536
eps = 1d-5
!
sym = 6
WRITE(*,*) "Write number of rotations based on symmetry (integer)"
@ -17,7 +18,7 @@ IMPLICIT NONE
WRITE(*,*) "Write number of entries (integer)"
READ(*,*) nk_tot
!
ALLOCATE(str_f(nk_tot, 4), str_f_new(nk_tot * sym, 4))
ALLOCATE(str_f(nk_tot, 4), str_fp(nk_tot, 4), str_f_new(nk_tot * sym, 4))
str_f = 0.d0
!
filename = 'structure_factor_all-phonon.dat'
@ -27,6 +28,14 @@ IMPLICIT NONE
END DO
CLOSE(80)
!
! To remove double contribution upon rotation
str_fp = 0.d0
str_fp(1, :) = str_f(1, :)
DO p = 2, nk_tot
IF (ATAN(str_f(p, 1) / str_f(p, 2)) .LT. (2.d0 * pi / float(sym) - eps) ) THEN
str_fp(p, :) = str_f(p, :)
ENDIF
ENDDO
!
OPEN (unit = 80, file = filename, status = 'unknown', form = 'formatted')
!
@ -36,9 +45,9 @@ IMPLICIT NONE
Rmat(1, :) = (/ COS(i * theta), -SIN(i * theta) /)
Rmat(2, :) = (/ SIN(i * theta), COS(i * theta) /)
DO p = 1, nk_tot
str_f_new(ctr, 1 : 2) = MATMUL(Rmat, str_f(p, 1 : 2))
str_f_new(ctr, 3) = str_f(p, 3)
str_f_new(ctr, 4) = str_f(p, 4)
str_f_new(ctr, 1 : 2) = MATMUL(Rmat, str_fp(p, 1 : 2))
str_f_new(ctr, 3) = str_fp(p, 3)
str_f_new(ctr, 4) = str_fp(p, 4)
ctr = ctr + 1
END DO
ENDDO
@ -50,7 +59,7 @@ IMPLICIT NONE
ctr = 1
DO i = 1, sym
DO p = 1, nk_tot
WRITE(80,'(4f20.6)') str_f_new(ctr, :)
WRITE(80,'(4f26.6)') str_f_new(ctr, :)
ctr = ctr + 1
END DO
ENDDO

Binary file not shown.

View File

@ -86,9 +86,9 @@ QEMODS = ../../Modules/libqemod.a ../../KS_Solvers/libks_solvers.a ../../XClib/x
../../upflib/libupf.a ../../FFTXlib/libqefft.a ../../dft-d3/libdftd3qe.a
LIBOBJS =../../LAXlib/libqela.a ../../UtilXlib/libutil.a ../../clib/clib.a
TLDEPS= pw ph
TLDEPS= pw ph pp
all : pw ph wannier libepw.a epw.x
all : pw ph pp wannier libepw.a epw.x
libepw.a : $(EPWOBJS)
$(AR) $(ARFLAGS) $@ $?
@ -105,6 +105,9 @@ pw :
ph :
cd ../../ ; make ph
pp :
cd ../../ ; make pp
wannier :
cd ../../ ; make w90 ; cd wannier90-3.1.0/ ; make lib