RealSpaceSI

class sisl.physics.RealSpaceSI(semi, surface, k_axes, unfold=(1, 1, 1), **options)[source]

Surface 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} - \sum_{\mathbf k} \mathbf G_{\mathbf k}(E)\]

The method actually used is relying on RecursiveSI and Bloch objects.

Parameters
semiSemiInfinite

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.

surfaceSparseOrbitalBZ

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 initialize routine. semi and surface must have parallel lattice vectors.

k_axesarray_like of int

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(3,) of int

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.

etafloat, optional

imaginary part in the self-energy calculations (default 1e-4 eV)

dkfloat, 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. Ang^-1.

bzBrillouinZone, 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.

trsbool, optional

whether time-reversal symmetry is used in the BrillouinZone integration, 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.set_options(eta=1e-3, bz=MonkhorstPack(H, [1, 1000, 1]))
>>> rsi.initialize()
>>> 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

__init__(self, semi, surface, k_axes[, unfold])

Initialize real-space self-energy calculator

clear(self)

Clears the internal arrays created in initialize

green(self, E[, k, dtype])

Calculate the real-space Green function

initialize(self)

Initialize the internal data-arrays used for efficient calculation of the real-space quantities

real_space_coupling(self[, ret_indices])

Real-space coupling surafec where the outside fold into the surface real-space unit cell

real_space_parent(self)

Fully expanded real-space surface parent

self_energy(self, E[, k, bulk, coupling, dtype])

Calculate real-space surface self-energy

set_options(self, \*\*options)

Update options in the real-space self-energy

clear(self)[source]

Clears the internal arrays created in initialize

green(self, E, k=(0, 0, 0), dtype=None, **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
Efloat/complex

energy to evaluate the real-space Green function at

karray_like, optional

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

dtypenumpy.dtype, optional

the resulting data type, default to np.complex128

**kwargsdict, optional

arguments passed directly to the self.surface.Pk method (not self.surface.Sk), for instance spin

initialize(self)[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 bz value as an option this method will update the internal integration Brillouin zone based on the dk option. 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).

real_space_coupling(self, ret_indices=False)[source]

Real-space coupling surafec 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_indicesbool, optional

if true, also return the atomic indices (corresponding to real_space_parent) that encompass the coupling matrix

Returns
parentparent object only retaining the elements of the atoms that couple out of the primary unit cell
atom_indexindices for the atoms that couple out of the geometry (ret_indices)
real_space_parent(self)[source]

Fully expanded real-space surface parent

Notes

The returned object does not obey the semi_bulk option. I.e. the matrix elements correspond to the self.surface object, always!

self_energy(self, E, k=(0, 0, 0), bulk=False, coupling=False, dtype=None, **kwargs)[source]

Calculate real-space surface self-energy

The real space self-energy is calculated via: .. math:

\boldsymbol\Sigma^{\mathcal{R}}(E) = \mathbf S^{\mathcal{R}} E - \mathbf H^{\mathcal{R}}
   - \sum_{\mathbf k} \mathbf G_{\mathbf k}(E)
Parameters
Efloat/complex

energy to evaluate the real-space self-energy at

karray_like, optional

only viable for 3D bulk systems with real-space self-energies along 2 directions. I.e. this would correspond to circular self-energies.

bulkbool, optional

if true, \(\mathbf S^{\mathcal{R}} E - \mathbf H^{\mathcal{R}} - \boldsymbol\Sigma^\mathcal{R}\) is returned, otherwise \(\boldsymbol\Sigma^\mathcal{R}\) is returned

couplingbool, optional

if True, only the self-energy terms located on the coupling geometry (coupling_geometry) are returned

dtypenumpy.dtype, optional

the resulting data type, default to np.complex128

**kwargsdict, optional

arguments passed directly to the self.surface.Pk method (not self.surface.Sk), for instance spin

set_options(self, **options)[source]

Update options in the real-space self-energy

After updating options one should re-call initialize for consistency.

Parameters
semi_bulkbool, optional

whether the semi-infinite matrix elements are used for in the surface. Default to true.

etafloat, optional

imaginary part in the self-energy calculations (default 1e-4 eV)

dkfloat, 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. Ang^-1.

bzBrillouinZone, 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.

trsbool, optional

whether time-reversal symmetry is used in the BrillouinZone integration, default to true.