mod_scattering Module



Variables

Type Visibility Attributes Name Initial
logical, private, save :: sca_read = .false.
type(sca_TYPE), private, save :: sca

Derived Types

type, private ::  sca_TYPE

Components

Type Visibility Attributes Name Initial
integer, public :: N1 = 17
integer, public :: lscatfixk = -1
integer, public :: llifetime = -1
integer, public :: lboltzmann = -1
integer, public :: mode = -1
integer, public :: nsteps = -1
integer, public :: niter = -1
integer, public :: roottake = -1
integer, public :: savepkk = -1
integer, public :: naverage = 1
integer, public :: gammamode = 0
double precision, public :: rooteps = -1d0
double precision, public :: kfix(3,2) = 1d38
double precision, public :: gammaval = 0.001837465441
double precision, public :: impconc = 1d0
integer, public :: subarr_inp(2) = -1
integer, public :: maskint = 0
integer, public :: N2 = 2
double precision, public, allocatable :: weight_imp(:)

type, public ::  impcls_TYPE

Components

Type Visibility Attributes Name Initial
integer, public :: N1 = 3
integer, public :: nCluster = -1
integer, public :: clmso = -1
integer, public :: N2 = 3
double precision, public, allocatable :: RCluster(:,:)
integer, public, allocatable :: ihosttype(:)

Subroutines

public subroutine calc_scattering_inputcard(inc, lattice, cluster, tgmatrx)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(cluster_TYPE), intent(in) :: cluster
type(tgmatrx_TYPE), intent(in) :: tgmatrx

private subroutine calc_boltzmann(inc, lattice, impcls, Amat)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(impcls_TYPE), intent(in) :: impcls(sca%naverage)
double complex, intent(in) :: Amat(impcls(1)%clmso,impcls(1)%clmso,sca%naverage)

private subroutine calc_condtensor(nkpts, nsqa, ndegen, fermivel, spinvalue, meanfreepath, weights, alat, nBZdim, chcond, spcond)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nkpts
integer, intent(in) :: nsqa
integer, intent(in) :: ndegen
double precision, intent(in) :: fermivel(3,nkpts)
double precision, intent(in) :: spinvalue(ndegen,nsqa,nkpts)
double precision, intent(in) :: meanfreepath(3,ndegen,nsqa,nkpts)
double precision, intent(in) :: weights(nkpts)
double precision, intent(in) :: alat
integer, intent(in) :: nBZdim
double precision, intent(out), allocatable :: chcond(:,:,:)
double precision, intent(out), allocatable :: spcond(:,:,:)

private subroutine calc_response_functions_tensors(natyp, nkpts, nsqa, ndegen, fermivel, torqval, torqval_atom, spinvec_atom, spinflux_atom, meanfreepath, weights, alat, BZVol)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: natyp
integer, intent(in) :: nkpts
integer, intent(in) :: nsqa
integer, intent(in) :: ndegen
double precision, intent(in) :: fermivel(3,nkpts)
double precision, intent(inout), allocatable :: torqval(:,:,:)
double precision, intent(inout), allocatable :: torqval_atom(:,:,:,:)
double precision, intent(inout), allocatable :: spinvec_atom(:,:,:,:)
double precision, intent(inout), allocatable :: spinflux_atom(:,:,:,:)
double precision, intent(in) :: meanfreepath(3,ndegen,nsqa,nkpts)
double precision, intent(in) :: weights(nkpts)
double precision, intent(in) :: alat
double precision, intent(in) :: BZVol

private subroutine meanfreepath_RTA(nkpts, nsqa, ndegen, fermivel, tau, tau_avg, meanfreepath_new)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nkpts
integer, intent(in) :: nsqa
integer, intent(in) :: ndegen
double precision, intent(in) :: fermivel(3,nkpts)
double precision, intent(in) :: tau(ndegen,nsqa,nkpts)
double precision, intent(in) :: tau_avg(ndegen,nsqa)
double precision, intent(out), allocatable :: meanfreepath_new(:,:,:,:)

private subroutine converge_meanfreepath(myrank_grid, comm_grid, nkpts, nkpt1, nkpt2, ioff1, ioff2, nsqa, ndegen, BZVol, weights, fermivel, tau, tau_avg, Pkksub, meanfreepath_new, add_gamma_mode, gammaval, impconc)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: myrank_grid
integer, intent(in) :: comm_grid
integer, intent(in) :: nkpts
integer, intent(in) :: nkpt1
integer, intent(in) :: nkpt2
integer, intent(in) :: ioff1
integer, intent(in) :: ioff2
integer, intent(in) :: nsqa
integer, intent(in) :: ndegen
double precision, intent(in) :: BZVol
double precision, intent(in) :: weights(nkpts)
double precision, intent(in) :: fermivel(3,nkpts)
double precision, intent(in) :: tau(ndegen,nsqa,nkpts)
double precision, intent(in) :: tau_avg(ndegen,nsqa)
double precision, intent(in) :: Pkksub(ndegen,nkpt1,ndegen,nsqa,nkpt2)
double precision, intent(out), allocatable :: meanfreepath_new(:,:,:,:)
integer, intent(in) :: add_gamma_mode
double precision, intent(in), optional :: gammaval
double precision, intent(in), optional :: impconc

private subroutine calculate_lifetime_minmem(myrank_grid, comm_grid, ndegen, nsqa, nkpts, nkpt1, nkpt2, ioff1, ioff2, BZVol, weights, Pkksub, tau, tau2, tau_avg)

!!$omp parallel private(ikp1, ispin1) !!$omp do collapse (2) !!$omp end do !!$omp end parallel

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: myrank_grid
integer, intent(in) :: comm_grid
integer, intent(in) :: ndegen
integer, intent(in) :: nsqa
integer, intent(in) :: nkpts
integer, intent(in) :: nkpt1
integer, intent(in) :: nkpt2
integer, intent(in) :: ioff1
integer, intent(in) :: ioff2
double precision, intent(in) :: BZVol
double precision, intent(in) :: weights(nkpts)
double precision, intent(in) :: Pkksub(ndegen,nkpt1,ndegen,nsqa,nkpt2)
double precision, intent(out), allocatable :: tau(:,:,:)
double precision, intent(out), allocatable :: tau2(:,:,:)
double precision, intent(out), allocatable :: tau_avg(:,:)

private subroutine calculate_Pkksub(inc, lattice, impcls, nsqa, myrank, master, nkpt1, nkpt2, ioff1, ioff2, ntot, rveig1, rveig2, kpoints, weights, Amat, Pkksub)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(impcls_TYPE), intent(in) :: impcls(sca%naverage)
integer, intent(in) :: nsqa
integer, intent(in) :: myrank
integer, intent(in) :: master
integer, intent(in) :: nkpt1
integer, intent(in) :: nkpt2
integer, intent(in) :: ioff1
integer, intent(in) :: ioff2
integer, intent(in) :: ntot
double complex, intent(in) :: rveig1(inc%lmmaxso,inc%natypd,inc%ndegen,nsqa,nkpt1)
double complex, intent(in) :: rveig2(inc%lmmaxso,inc%natypd,inc%ndegen,nsqa,nkpt2)
double precision, intent(in) :: kpoints(3,ntot)
double precision, intent(in) :: weights(ntot)
double complex, intent(in) :: Amat(impcls(1)%clmso,impcls(1)%clmso,sca%naverage)
double precision, intent(out), allocatable :: Pkksub(:,:,:,:,:)

private subroutine calc_lifetime(inc, lattice, impcls, Amat)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(impcls_TYPE), intent(in) :: impcls
double complex, intent(in) :: Amat(impcls%clmso,impcls%clmso)

private subroutine calc_scattering_fixk(inc, lattice, cluster, tgmatrx, impcls, Amat)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(cluster_TYPE), intent(in) :: cluster
type(tgmatrx_TYPE), intent(in) :: tgmatrx
type(impcls_TYPE), intent(in) :: impcls
double complex, intent(in) :: Amat(impcls%clmso,impcls%clmso)

private subroutine get_incident_kvector(inc, lattice, cluster, tgmatrx, kpoint_fix)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(cluster_TYPE), intent(in) :: cluster
type(tgmatrx_TYPE), intent(in) :: tgmatrx
double precision, intent(out) :: kpoint_fix(3)

private subroutine calc_wavefun_kpoint(inc, lattice, cluster, tgmatrx, nsqa, kpoint, spinval, eigvect_rot)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(cluster_TYPE), intent(in) :: cluster
type(tgmatrx_TYPE), intent(in) :: tgmatrx
integer, intent(in) :: nsqa
double precision, intent(in) :: kpoint(3)
double precision, intent(out) :: spinval(inc%ndegen,nsqa)
double complex, intent(out) :: eigvect_rot(inc%lmmaxso,inc%natypd,inc%ndegen,nsqa)

private subroutine read_sca()

Arguments

None

public subroutine read_scattmat(inc, impcls, Amat, storeAmatin)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(impcls_TYPE), intent(out), allocatable :: impcls(:)
double complex, intent(out), allocatable :: Amat(:,:,:)
logical, intent(in), optional :: storeAmatin

private subroutine read_DTMTRX(iaverage, inc, impcls, tmat, deltamat, readtmatin)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: iaverage
type(inc_TYPE), intent(in) :: inc
type(impcls_TYPE), intent(out) :: impcls
double complex, intent(out), allocatable :: tmat(:,:)
double complex, intent(out), allocatable :: deltamat(:,:)
logical, intent(in), optional :: readtmatin

private subroutine read_green_ll(iaverage, clmso, Gll0)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: iaverage
integer, intent(in) :: clmso
double complex, intent(out), allocatable :: Gll0(:,:)

private subroutine extend_coeffvector2cluster_allsqa(inc, lattice, impcls, nsqa, kpoint, rveig_in, rveig_big)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(impcls_TYPE), intent(in) :: impcls
integer, intent(in) :: nsqa
double precision, intent(in) :: kpoint(3)
double complex, intent(in) :: rveig_in(inc%lmmaxso,inc%natypd,inc%ndegen,nsqa)
double complex, intent(out) :: rveig_big(impcls%clmso,inc%ndegen,nsqa)

private subroutine extend_coeffvector2cluster_allkpt(inc, lattice, impcls, nkpts, kpoints, rveig_in, rveig_big)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(impcls_TYPE), intent(in) :: impcls
integer, intent(in) :: nkpts
double precision, intent(in) :: kpoints(3,nkpts)
double complex, intent(in) :: rveig_in(inc%lmmaxso,inc%natypd,nkpts)
double complex, intent(out) :: rveig_big(impcls%clmso,nkpts)

private subroutine extend_coeffvector2cluster(inc, lattice, impcls, kpoint, rveig_in, rveig_big)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
type(lattice_TYPE), intent(in) :: lattice
type(impcls_TYPE), intent(in) :: impcls
double precision, intent(in) :: kpoint(3)
double complex, intent(in) :: rveig_in(inc%lmmaxso,inc%natypd)
double complex, intent(out) :: rveig_big(impcls%clmso)

private subroutine calculate_lifetimeaverage_vis(inc, nsqa, nkpts, nkpts_all, kpt2irr, kpoints, fermivel, taukinv, printout, fac, fsRyunit)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
integer, intent(in) :: nsqa
integer, intent(in) :: nkpts
integer, intent(in) :: nkpts_all
integer, intent(in) :: kpt2irr(nkpts_all)
double precision, intent(in) :: kpoints(3,nkpts)
double precision, intent(in) :: fermivel(3,nkpts)
double precision, intent(in) :: taukinv(inc%ndegen**2*nsqa,nkpts)
logical, intent(in) :: printout
double precision, intent(in) :: fac
character(len=*), intent(in) :: fsRyunit

private subroutine calculate_lifetimeaverage_int(inc, nsqa, nkpts, weights, taukinv, printout, fac, fsRyunit)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
integer, intent(in) :: nsqa
integer, intent(in) :: nkpts
double precision, intent(in) :: weights(nkpts)
double precision, intent(in) :: taukinv(inc%ndegen**2*nsqa,nkpts)
logical, intent(in) :: printout
double precision, intent(in) :: fac
character(len=*), intent(in) :: fsRyunit

private subroutine create_subarr_comm(subarr_dim, myMPI_comm_grid, myMPI_comm_row, myMPI_comm_col, myrank_grid, myrank_row, myrank_col)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: subarr_dim(2)
integer, intent(out) :: myMPI_comm_grid
integer, intent(out) :: myMPI_comm_row
integer, intent(out) :: myMPI_comm_col
integer, intent(out) :: myrank_grid
integer, intent(out) :: myrank_row
integer, intent(out) :: myrank_col

private subroutine create_subarr(subarr_dim, ntot, dataarr_lb, dataarr_ub, dataarr_nkpt)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: subarr_dim(2)
integer, intent(in) :: ntot
integer, intent(out) :: dataarr_lb(0:nranks-1,2)
integer, intent(out) :: dataarr_ub(0:nranks-1,2)
integer, intent(out) :: dataarr_nkpt(0:nranks-1,2)

private subroutine read_eigv_part(inc, nsqa, ioff, nkpt, file_comm, subrank, subcomm, rveig)

Arguments

Type IntentOptional Attributes Name
type(inc_TYPE), intent(in) :: inc
integer, intent(in) :: nsqa
integer, intent(in) :: ioff
integer, intent(in) :: nkpt
integer, intent(in) :: file_comm
integer, intent(in) :: subrank
integer, intent(in) :: subcomm
double complex, intent(out), allocatable :: rveig(:,:,:,:,:)

private subroutine Pkkmpifile_setview(rwmode, my_mpi_comm, nkpts, nkpt1, nkpt2, ioff1, ioff2, ndegen, nsqa, filehandle)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: rwmode
integer, intent(in) :: my_mpi_comm
integer, intent(in) :: nkpts
integer, intent(in) :: nkpt1
integer, intent(in) :: nkpt2
integer, intent(in) :: ioff1
integer, intent(in) :: ioff2
integer, intent(in) :: ndegen
integer, intent(in) :: nsqa
integer, intent(out) :: filehandle

private subroutine Pkkmpifile_write(my_mpi_comm, nkpts, nkpt1, nkpt2, ioff1, ioff2, ndegen, nsqa, Pkksub)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: my_mpi_comm
integer, intent(in) :: nkpts
integer, intent(in) :: nkpt1
integer, intent(in) :: nkpt2
integer, intent(in) :: ioff1
integer, intent(in) :: ioff2
integer, intent(in) :: ndegen
integer, intent(in) :: nsqa
double precision, intent(in) :: Pkksub(ndegen,nkpt1,ndegen,nsqa,nkpt2)

private subroutine Pkkmpifile_read(my_mpi_comm, nkpts, nkpt1, nkpt2, ioff1, ioff2, ndegen, nsqa, Pkksub)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: my_mpi_comm
integer, intent(in) :: nkpts
integer, intent(in) :: nkpt1
integer, intent(in) :: nkpt2
integer, intent(in) :: ioff1
integer, intent(in) :: ioff2
integer, intent(in) :: ndegen
integer, intent(in) :: nsqa
double precision, intent(out), allocatable :: Pkksub(:,:,:,:,:)

private subroutine project_fermivel_newaxis(nkpts, fermivel)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nkpts
double precision, intent(inout) :: fermivel(3,nkpts)

private subroutine save_lifetime(filemode, nkpts, nsqa, ndegen, taukinv, nsym, isym, fac, fsRyunit)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: filemode
integer, intent(in) :: nkpts
integer, intent(in) :: nsqa
integer, intent(in) :: ndegen
double precision, intent(in) :: taukinv(ndegen**2*nsqa,nkpts)
integer, intent(in) :: nsym
integer, intent(in) :: isym(nsym)
double precision, intent(in) :: fac
character(len=*), intent(in) :: fsRyunit

private subroutine save_scattfix(filemode, nkpts, nsqa, ndegen, kfix, Pkkfix, nsym, isym, mode)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: filemode
integer, intent(in) :: nkpts
integer, intent(in) :: nsqa
integer, intent(in) :: ndegen
double precision, intent(in) :: kfix(3)
double precision, intent(in) :: Pkkfix(ndegen,ndegen,nsqa,nkpts)
integer, intent(in) :: nsym
integer, intent(in) :: isym(nsym)
character(len=*), intent(in) :: mode