calculateGreenFunctionComponent¶
- calculateGreenFunctionComponent(device_configuration, energy=PhysicalQuantity(0.0, eV), kpoint=None, spin=<class 'NL.ComputerScienceUtilities.NLFlag.Spin.All'>, contribution=<class 'NL.ComputerScienceUtilities.NLFlag._NLFlag.Left'>, eta=PhysicalQuantity(1e-06, Hartree), self_energy_calculator=None)¶
Calculate the Green Function component, \(G \Gamma G^\dagger\).
- Parameters:
device_configuration (
DeviceConfiguration
|SurfaceConfiguration
) – The configuration to use for the calculation.energy (PhysicalQuantity of type energy.) – Absolute energy for the calculation Default:
0.0 * eV
kpoint (tuple of floats) – The kpoint as three floats representing fractional reciprocal space coordinates. Default: The Gamma point
(0.0, 0.0, 0.0)
spin (
Spin.Up
|Spin.Down
|Spin.All
) – The spin flag. Default:Spin.All
contribution (
Left
|Right
) – Which electrode (side) should be considered. Only theLeft
contribution is allowed for aSurfaceConfiguration
. Default:Left
eta (PhysicalQuantity of type energy.) – Complex energy for electrode transform matrices, imag part. Default:
1.0e-6 * Hartree
self_energy_calculator (
RecursionSelfEnergy
|DirectSelfEnergy
|KrylovSelfEnergy
|SparseRecursionSelfEnergy
) – The self energy evaluation strategy to use. Default: A defaultRecursionSelfEnergy
instance.
- Returns:
The Green Function Component as an array
- Return type:
PhysicalQuantity of type inverse energy
Usage Examples¶
Calculate the left Green’s function component of a DeviceConfiguration:
energy=1.0*eV
G_L = calculateGreenFunctionComponent(device_configuration, energy, contribution=Left)
Equivalent calculation from the basic H, S variables:
energy=1.0*eV
H,S = calculateHamiltonianAndOverlap(device_configuration)
S_L = calculateSelfEnergy(device_configuration, energy, contribution=Left)
S_L = S_L.inUnitsOf(Hartree)
S_R = calculateSelfEnergy(device_configuration, energy, contribution=Right)
S_R = S_R.inUnitsOf(Hartree)
# Setup E*S-H-S_L-S_R
lhs = energy.inUnitsOf(Hartree)*S-H.inUnitsOf(Hartree)
n=S_L.shape[0]
lhs[:n,:n] -= S_L
n=S_R.shape[0]
lhs[-n:,-n:] -= S_R
G = numpy.linalg.inv(lhs)
# Calculate Gamma_L
g_L = 1j*(S_L-numpy.conj(S_L.transpose()))
# Do the G gamma G^dagger
n = g_L.shape[0]
G_L = numpy.dot(numpy.dot(G[:,:n],g_L), numpy.conj(G.transpose())[:n,:])*Hartree
Notes¶
Calculates the spectral density matrix components
\[G^{L,R}(E,{\bf k}) = G^R(E,{\bf k}) \Gamma^{L,R}(E,{\bf k}) G^R(E,{\bf k})^\dagger,\]where \(G^R\) is the retarded Green function and \(\Gamma = i (\Sigma-\Sigma^\dagger)\) is the broadening function.
\(G^{L,R}\) are closely related to \(G^<\).
The calculator assigned to the device must be density matrix-based for this function to perform successfully.
Consider Spin for details on how to handle the spin parameter.