Documentation for module negf_green_methods

Subroutines to compute Green functions

source: negf_green_methods.F
Loading...

public Types:

sancho_work_matrices_type
...

public Subroutines/Functions:

SUBROUTINE
do_sancho (g_surf, omega, h0, s0, h1, s1, conv, transp, work)
Iterative method to compute a retarded surface Green's function at the point omega.
Compute contact broadening matrix as gamma_C = i (self_energy_c^{ret.} - (self_energy_c^{ret.})^C)
Compute the contact self energy at point 'omega' as self_energy_C = [omega * S_SC0 - KS_SC0] * g_surf_c(omega - v_C) * [omega * S_SC0 - KS_SC0]^T, where C stands for the left (L) / right (R) contact.
Compute the retarded Green's function at point 'omega' as
Create work matrices required for the Lopez-Sancho algorithm.
Release work matrices.

public Types:

TYPE :: sancho_work_matrices_type

...


POINTER :: a ...
POINTER :: a0 ...
POINTER :: a_inv ...
POINTER :: b ...
POINTER :: c ...
POINTER :: d ...
POINTER :: e ...
POINTER :: scratch ...

SUBROUTINEdo_sancho(g_surf, omega, h0, s0, h1, s1, conv, transp, work)

Iterative method to compute a retarded surface Green's function at the point omega.

Arguments:
POINTER
:: g_surf computed retarded surface Green's function (initialised on exit)
COMPLEX(dp),
INTENT(in)
:: omega argument of the Green's function
TYPE(cp_fm_type),
POINTER
:: h0 diagonal block of the Kohn-Sham matrix (must be Hermitian)
TYPE(cp_fm_type),
POINTER
:: s0 diagonal block of the overlap matrix (must be Hermitian)
TYPE(cp_fm_type),
POINTER
:: h1 off-fiagonal block of the Kohn-Sham matrix
TYPE(cp_fm_type),
POINTER
:: s1 off-fiagonal block of the overlap matrix
REAL(dp),
INTENT(in)
:: conv convergence threshold
LOGICAL,
INTENT(in)
:: transp flag which indicates that the matrices h1 and s1 matrices should be transposed
INTENT(in)
:: work a set of work matrices needed to compute the surface Green's function

SUBROUTINEnegf_contact_broadening_matrix(gamma_c, self_energy_c)

Compute contact broadening matrix as gamma_C = i (self_energy_c^{ret.} - (self_energy_c^{ret.})^C)

Arguments:
POINTER
:: gamma_c broadening matrix (initialised on exit)
POINTER
:: self_energy_c retarded contact self-energy

SUBROUTINEnegf_contact_self_energy(self_energy_c, omega, g_surf_c, h_sc0, s_sc0, zwork1, zwork2, transp)

Compute the contact self energy at point 'omega' as self_energy_C = [omega * S_SC0 - KS_SC0] * g_surf_c(omega - v_C) * [omega * S_SC0 - KS_SC0]^T, where C stands for the left (L) / right (R) contact.

Arguments:
POINTER
:: self_energy_c contact self energy (initialised on exit)
COMPLEX(dp),
INTENT(in)
:: omega energy point where the contact self energy needs to be computed
POINTER
:: g_surf_c contact surface Green's function
TYPE(cp_fm_type),
POINTER
:: h_sc0 scattering region -- contact off-diagonal block of the Kohn-Sham matrix
TYPE(cp_fm_type),
POINTER
:: s_sc0 scattering region -- contact off-diagonal block of the overlap matrix
POINTER
:: zwork1 complex work matrix of the same shape as s_sc0
POINTER
:: zwork2 another complex work matrix of the same shape as s_sc0
LOGICAL,
INTENT(in)
:: transp flag which indicates that transposed matrices (KS_C0S and S_C0S) were actually passed

SUBROUTINEnegf_retarded_green_function(g_ret_s, omega, self_energy_ret_sum, h_s, s_s)

Compute the retarded Green's function at point 'omega' as

Arguments:
POINTER
:: g_ret_s complex matrix to store the computed retarded Green's function
COMPLEX(dp),
INTENT(in)
:: omega energy point where the retarded Green's function needs to be computed
POINTER
:: self_energy_ret_sum sum of contact self-energies
TYPE(cp_fm_type),
POINTER
:: h_s Kohn-Sham matrix block of the scattering region
TYPE(cp_fm_type),
POINTER
:: s_s overlap matrix block of the scattering region

SUBROUTINEsancho_work_matrices_create(work, fm_struct)

Create work matrices required for the Lopez-Sancho algorithm.

Arguments:
INTENT(inout)
:: work work matrices to create (allocated and initialised on exit)
POINTER
:: fm_struct dense matrix structure

SUBROUTINEsancho_work_matrices_release(work)

Release work matrices.

Arguments:
INTENT(inout)
:: work work matrices to release