sisl.physics.RealSpaceSI
- class sisl.physics.RealSpaceSI
Bases:
SelfEnergySurface real-space self-energy (or Green function) for a given physical object with limited periodicity
The surface real-space self-energy is calculated via the k-averaged Green function:
\[\boldsymbol\Sigma^\mathcal{R}(E) = \mathbf S^\mathcal{R} (E+i\eta) - \mathbf H^\mathcal{R} - \Big[\sum_{\mathbf k} \mathbf G_{\mathbf k}(E)\Big]^{-1}\]The method actually used is relying on
RecursiveSIandBlochobjects.- Parameters:
semi – physical object which contains the semi-infinite direction, it is from this object we calculate the self-energy to be put into the surface. a physical object from which to calculate the real-space self-energy. semi and surface must have parallel lattice vectors.
surface – parent object containing the surface of system. semi is attached into this object via the overlapping regions, the atoms that overlap semi and surface are determined in the
setuproutine. semi and surface must have parallel lattice vectors.k_axes – axes where k-points are desired. 1 or 2 values are required. The axis cannot be a direction along the semi semi-infinite direction.
unfold – number of times the surface structure is tiled along each direction Since this is a surface there will maximally be 2 unfolds being non-unity.
eta – imaginary part (\(\eta\)) in the self-energy calculations.
dk (
float, optional) – fineness of the default integration grid, specified in units of Ang, default to 1000 which translates to 1000 k-points along reciprocal cells of length \(1. \mathrm{Ang}^{-1}\).bz (
BrillouinZone, optional) – integration k-points, if not passed the number of k-points will be determined using dk and time-reversal symmetry will be determined by trs, the number of points refers to the unfolded system.trs (
bool, optional) – whether time-reversal symmetry is used in theBrillouinZoneintegration, default to true.
Examples
>>> graphene = geom.graphene() >>> H = Hamiltonian(graphene) >>> H.construct([(0.1, 1.44), (0, -2.7)]) >>> se = RecursiveSI(H, "-A") >>> Hsurf = H.tile(3, 0) >>> Hsurf.set_nsc(a=1) >>> rsi = RealSpaceSI(se, Hsurf, 1, (1, 4, 1)) >>> rsi.green(0.1)
The Brillouin zone integration is determined naturally.
>>> graphene = geom.graphene() >>> H = Hamiltonian(graphene) >>> H.construct([(0.1, 1.44), (0, -2.7)]) >>> se = RecursiveSI(H, "-A") >>> Hsurf = H.tile(3, 0) >>> Hsurf.set_nsc(a=1) >>> rsi = RealSpaceSI(se, Hsurf, 1, (1, 4, 1)) >>> rsi.setup(eta=1e-3, bz=MonkhorstPack(H, [1, 1000, 1])) >>> rsi.green(0.1) # eta = 1e-3 >>> rsi.green(0.1 + 1j * 1e-4) # eta = 1e-4
Manually specify Brillouin zone integration and default \(\eta\) value.
Methods
broadening_matrix(*args, **kwargs)Calculate the broadening matrix by first calculating the self-energy
clear()Clears the internal arrays created in
setupgreen(E[, k, dtype])Calculate the real-space Green function
See setup
real_space_coupling([ret_indices])Real-space coupling surface where the outside fold into the surface real-space unit cell
Fully expanded real-space surface parent
se2broadening(SE)Calculate the broadening matrix from the self-energy
self_energy(E[, k, bulk, coupling, dtype])Calculate real-space surface self-energy
set_options(**options)Update options in the real-space self-energy
setup(**options)Initialize the internal data-arrays used for efficient calculation of the real-space quantities
- broadening_matrix(*args, **kwargs)
Calculate the broadening matrix by first calculating the self-energy
Any arguments that is passed to this method is directly passed to
self_energy.See
self_energyfor details.This corresponds to:
\[\boldsymbol\Gamma = i(\boldsymbol\Sigma - \boldsymbol \Sigma ^\dagger)\]Examples
Calculating both the self-energy and the broadening matrix.
>>> SE = SelfEnergy(...) >>> self_energy = SE.self_energy(0.1) >>> gamma = SE.broadening_matrix(0.1)
For a huge performance boost, please do:
>>> SE = SelfEnergy(...) >>> self_energy = SE.self_energy(0.1) >>> gamma = SE.se2broadening(self_energy)
Notes
When using both the self-energy and the broadening matrix please use
se2broadeningafter having calculated the self-energy, this will be much, MUCH faster!See also
se2broadeningconverting the self-energy to the broadening matrix
self_energythe used routine to calculate the self-energy before calculating the broadening matrix
- Return type:
- green(E, k=(0, 0, 0), dtype=np.complex128, **kwargs)[source]
Calculate the real-space Green function
The real space Green function is calculated via:
\[\mathbf G^\mathcal{R}(E) = \sum_{\mathbf k} \mathbf G_{\mathbf k}(E)\]- Parameters:
E (complex) – energy to evaluate the real-space Green function at
k (Sequence[float]) – only viable for 3D bulk systems with real-space Green functions along 2 directions. I.e. this would correspond to a circular real-space Green function
dtype – the resulting data type.
**kwargs (
dict, optional) – arguments passed directly to theself.surface.Pkmethod (notself.surface.Sk), for instancespin
- Return type:
- real_space_coupling(ret_indices=False)[source]
Real-space coupling surface where the outside fold into the surface real-space unit cell
The resulting parent object only contains the inner-cell couplings for the elements that couple out of the real-space matrix.
- Parameters:
ret_indices (bool) – if true, also return the atomic indices (corresponding to
real_space_parent) that encompass the coupling matrix- Returns:
parent (
object) – parent object only retaining the elements of the atoms that couple out of the primary unit cellatom_index (
numpy.ndarray) – indices for the atoms that couple out of the geometry, only if ret_indices is true
- real_space_parent()[source]
Fully expanded real-space surface parent
Notes
The returned object does not obey the
semi_bulkoption. I.e. the matrix elements correspond to the self.surface object, always!
- static se2broadening(SE)
Calculate the broadening matrix from the self-energy
\[\boldsymbol\Gamma = i(\boldsymbol\Sigma - \boldsymbol \Sigma ^\dagger)\]- Parameters:
SE (
matrix) – self-energy matrix- Return type:
- self_energy(E, k=(0, 0, 0), bulk=False, coupling=False, dtype=np.complex128, **kwargs)[source]
Calculate real-space surface self-energy
The real space self-energy is calculated via:
\[\boldsymbol\Sigma^{\mathcal{R}}(E) = \mathbf S^{\mathcal{R}} E - \mathbf H^{\mathcal{R}} - \Big[\sum_{\mathbf k} \mathbf G_{\mathbf k}(E)\Big]^{-1}\]- Parameters:
E (complex) – energy to evaluate the real-space self-energy at
k (KPoint) – only viable for 3D bulk systems with real-space self-energies along 2 directions. I.e. this would correspond to circular self-energies.
bulk (bool) – if true, \(\mathbf S^{\mathcal{R}} E - \mathbf H^{\mathcal{R}} - \boldsymbol\Sigma^\mathcal{R}\) is returned, otherwise \(\boldsymbol\Sigma^\mathcal{R}\) is returned
coupling (bool) – if True, only the self-energy terms located on the coupling geometry (coupling_geometry) are returned
dtype (np.dtype) – the resulting data type.
**kwargs (
dict, optional) – arguments passed directly to theself.surface.Pkmethod (notself.surface.Sk), for instancespin
- Return type:
np.ndarray
- set_options(**options)[source]
Update options in the real-space self-energy
After updating options one should re-call
setupfor consistency.- Parameters:
semi_bulk (
bool, optional) – whether the semi-infinite matrix elements are used for in the surface. Default to true.eta (
float, optional) – imaginary part (\(\eta\)) in the self-energy calculations (default 1e-4 eV)dk (
float, optional) – fineness of the default integration grid, specified in units of Ang, default to 1000 which translates to 1000 k-points along reciprocal cells of length \(1. \mathrm{Ang}^{-1}\).bz (
BrillouinZone, optional) – integration k-points, if not passed the number of k-points will be determined using dk and time-reversal symmetry will be determined by trs, the number of points refers to the unfolded system.trs (
bool, optional) – whether time-reversal symmetry is used in theBrillouinZoneintegration, default to true.
- Return type:
- setup(**options)[source]
Initialize the internal data-arrays used for efficient calculation of the real-space quantities
This method should first be called after all options has been specified.
If the user hasn’t specified the
bzvalue as an option this method will update the internal integration Brillouin zone based on thedkoption. The \(\mathbf k\) point sampling corresponds to the number of points in the non-folded system and thus the final sampling is equivalent to the sampling times the unfolding (per \(\mathbf k\) direction).See also
set_optionsfor argument details
- Return type: