quantum-espresso/GWW/gww/go_green.f90

82 lines
2.3 KiB
Fortran

!
! Copyright (C) 2001-2013 Quantum ESPRESSO group
! This file is distributed under the terms of the
! GNU General Public License. See the file `License'
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
!
SUBROUTINE go_green(tf, options, qp)
!this subroutine at every imaginary time, calculate the green function
!and save it on file
USE kinds, ONLY : DP
USE input_gw, ONLY : input_options
USE basic_structures, ONLY : wannier_u, free_memory
USE green_function, ONLY : green,create_green_part,write_green,free_memory_green,initialize_green
USE para_gww, ONLY : is_my_time, is_my_last
USE mp, ONLY : mp_barrier
USE mp_world, ONLY : world_comm
USE io_global, ONLY : stdout
USE energies_gww, ONLY : quasi_particles
USE times_gw, ONLY : times_freqs
implicit none
TYPE(times_freqs), INTENT(in) :: tf!time grid
TYPE(input_options), INTENT(in) :: options! for imaginary time range and number of samples
TYPE(quasi_particles), INTENT(in) :: qp!for the HF energies if required
TYPE(wannier_u) :: wu
TYPE(green) :: gr
INTEGER :: iw
REAL(kind=DP) :: time, dt
call initialize_green(gr)
!read in U tranformation matrix and KS eneregies
call read_data_pw_u(wu,options%prefix)
!loop on samples
dt=options%tau/real(options%n)
do iw=-options%n,options%n
if(is_my_time(iw)) then
write(stdout,*) 'Green: ', iw, time
if(options%l_fft_timefreq) then
time=dt*real(iw)
else
time=tf%times(iw)
endif
call create_green_part(gr,wu,time,options%debug,.false.,options%l_hf_energies, qp%ene_hf(:,1))
gr%label=iw
write(stdout,*) 'Green created: ', iw, time
call write_green(gr,options%debug)
endif
enddo
!now insert the zero time negative one
if(is_my_last) then
write(stdout,*) 'green 0'
call create_green_part(gr,wu,0.d0,options%debug,.true.,options%l_hf_energies, qp%ene_hf(:,1))
gr%label=0
call write_green(gr,options%debug)
write(stdout,*) 'green 0 created'
endif
call mp_barrier( world_comm )
call free_memory_green(gr)
call free_memory(wu)
return
END SUBROUTINE