funegf
Non Equillibrium Green's Functions (NEGF) solver of the atomic linear chain for educational purposes.
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (10.6%) to scientific vocabulary
Keywords
Repository
Non Equillibrium Green's Functions (NEGF) solver of the atomic linear chain for educational purposes.
Basic Info
- Host: GitHub
- Owner: liborsold
- License: bsd-3-clause
- Language: Python
- Default Branch: master
- Homepage: https://liborsold.github.io/fuNEGF/
- Size: 5.3 MB
Statistics
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
README.md
fuNEGF
Solve the Non-Equillibrium Green's Functions (NEGF) transport on examples for educational purposes. Limited to a 1D linear chain for now. See the documentation website.
pip install fuNEGF
If you find this package useful, please cite L. Vojáček, Multiscale Modeling of Spin-Orbitronic Phenomena at Metal, Oxide, and 2D Material Interfaces for Spintronic Devices, PhD thesis, Université Grenoble Alpes (2024).
Package structure
- the
LinearChainclass including the NEGF routines resides insrc/fuNEGF/models.py - a Jupyter notebook
examples/one-dimensional_channel.ipynbcontains the linear chain case study with the underlying physics explained - a Jupyter notebok
examples/time_complexity.ipynbcontains a time complexity study of constructing the model $\mathcal{O}(N)$ and calculating the transmission coefficient $\mathcal{O}(N^2)$
Example
A linear chain with a single or multiple on-site potential impurities will present a chemical potential (occupation) drop, which may not be apparent unless a phase relaxation is included, as shown below.
An additional momentum relaxation will cause a non-zero chemical potential slope in between the impurity regions.
The complete description and calculation are provided in the examples/one-dimensional_channel.ipynb notebook.

Features
- documentation website
- object-oriented
- PEP8-compliant <!-- * including unit tests (limited for now) -->
The Theory In A Nutshell
NEGF
The retarded Green's function
$$ \mathbf{G}^{\mathrm{R}}=[E \mathbf{I}-\mathbf{H}-\mathbf{\Sigma}]^{-1} $$
is a function of energy $E$ multiplied by the identity matrix $\mathbf{I}$. The Hamiltonian $\mathbf{H}$ and self-energy $\mathbf{\Sigma}$ matrices are to be defined by the physical model.
Along with the advanced Green's function
$$ \mathbf{G}^{\mathrm{A}} = \left[ \mathbf{G}^{\mathrm{R}} \right]^\dagger $$
they provide the spectral function
$$ \mathbf{A}=i\left[\mathbf{G}^{\mathrm{R}}-\mathbf{G}^{\mathrm{A}}\right] $$
and are used to solve for the "electron occupation" Green's function
$$ \mathbf{G}^{\mathrm{n}}=\mathbf{G}^{\mathrm{R}} \mathbf{\Sigma}^{\mathrm{in}} \mathbf{G}^{\mathrm{A}} $$
which gives the density matrix
$$ \hat{\rho} = \mathbf{G}^{\mathrm{n}} / 2\pi . $$
The in-scattering term $\mathbf{\Sigma}^{\mathrm{in}}$ is also defined by the physical model.
Both, the self-energy $\mathbf{\Sigma}$ and the in-scattering term $\mathbf{\Sigma}^{\mathrm{in}}$ are sums of the left contact $\mathbf{\Sigma}1$, right contact $\mathbf{\Sigma}2$ and an intrinsic term $\mathbf{\Sigma}_0$, hence
$$ \begin{align}
\mathbf{\Sigma} &= \mathbf{\Sigma}1 + \mathbf{\Sigma}2 + \mathbf{\Sigma}0 , \
\mathbf{\Sigma}^{\mathrm{in}} &= \mathbf{\Sigma}^{\mathrm{in}}1 + \mathbf{\Sigma}^{\mathrm{in}}2 + \mathbf{\Sigma}^{\mathrm{in}}0 .
\end{align}
$$
NOTE: We use the (physically expressive) notation of S. Datta, where the self-energies and Green's functions in relation to the standard notation (on the right) are defined as
$$ \begin{align} \mathbf{\Sigma} &\equiv \mathbf{\Sigma}^\mathrm{R} , \ \mathbf{G}^\mathrm{n} &\equiv -i \mathbf{G}^< , \ \mathbf{\Sigma}^\mathrm{in} &\equiv -i \mathbf{\Sigma}^< . \end{align} $$
Linear Chain Model
For the LinearChain model, the Hamiltonian
$$ H{ij} = \begin{cases} \epsilon0, & \text { if } i=j \ t, & \text{ if } i \neq j \end{cases} $$
Impurity potential $U$ can be added to the on-site energy as
$$ \mathbf{H}=\left[ \begin{array}{ccccc} \ddots & \vdots & \vdots & \vdots & \ddots \ \cdots & \varepsilon & t & 0 & \cdots \ \cdots & t & \varepsilon+U & t & \cdots \ \cdots & 0 & t & \varepsilon & \cdots \ \ddots & \vdots & \vdots & \vdots & \ddots \end{array} \right] . $$
The self-energies
$$ \mathbf{\Sigma}1=\left[\begin{array}{ccccc} \mathrm{te}^{i k a} & 0 & 0 & \cdots & 0 \ 0 & 0 & 0 & \cdots & 0 \ 0 & 0 & 0 & \cdots & 0 \ \vdots & \vdots & \vdots & \ddots & \vdots \ 0 & 0 & 0 & \cdots & 0 \end{array}\right], \quad \mathbf{\Sigma}2=\left[\begin{array}{ccccc} 0 & \cdots & 0 & 0 & 0 \ \vdots & \ddots & \vdots & \vdots & \vdots \ 0 & \cdots & 0 & 0 & 0 \ 0 & \cdots & 0 & 0 & 0 \ 0 & \cdots & 0 & 0 & \mathrm{te}^{i k a} \end{array}\right] , $$
with the broadening functions $\mathbf{\Gamma} \equiv i\left[ \mathbf{\Sigma} - \mathbf{\Sigma}^\dagger\right] $
$$ \mathbf{\Gamma}1=\frac{\hbar v}{a}\left[\begin{array}{ccccc} 1 & 0 & 0 & \cdots & 0 \ 0 & 0 & 0 & \cdots & 0 \ 0 & 0 & 0 & \cdots & 0 \ \vdots & \vdots & \vdots & \ddots & \vdots \ 0 & 0 & 0 & \cdots & 0 \end{array}\right], \quad \mathbf{\Gamma}2=\frac{\hbar v}{a}\left[\begin{array}{ccccc} 0 & \cdots & 0 & 0 & 0 \ \vdots & \ddots & \vdots & \vdots & \vdots \ 0 & \cdots & 0 & 0 & 0 \ 0 & \cdots & 0 & 0 & 0 \ 0 & \cdots & 0 & 0 & 1 \end{array}\right] , $$
where $v=\mathrm{d} E /(\hbar \mathrm{d} k) = -2 a t / \hbar \sin (k a)$ so that $\frac{\hbar v}{a} = -2 t / \sin (k a)$.
The in-scattering terms
$$ \mathbf{\Sigma}^\mathrm{in}i = \mathbf{\Gamma}i \cdot f_i(E) , $$
where $f_i(E)$ is the Fermi-Dirac distribution function for contact $i \in \set{1, 2}$.
The self-energies describing the phase and phase-momentum relaxation are defined in terms of the Green's functions themselves. Their strength is defined via the (scalar) coefficients $D0^\text{phase}$ and $D0^\text{phase-momentum}$, creating a "mask" matrix
$$ \mathbf{D} = D0^\text{phase} \left[\begin{array}{ccccc} 1 & 1 & 1 & \cdots & 1 \ 1 & 1 & 1 & \cdots & 1 \ 1 & 1 & 1 & \cdots & 1 \ \vdots & \vdots & \vdots & \ddots & \vdots \ 1 & 1 & 1 & \cdots & 1 \end{array}\right] + D0^\text{phase-momentum} \left[\begin{array}{ccccc} 1 & 0 & 0 & \cdots & 0 \ 0 & 1 & 0 & \cdots & 0 \ 0 & 0 & 1 & \cdots & 0 \ \vdots & \vdots & \vdots & \ddots & \vdots \ 0 & 0 & 0 & \cdots & 1 \end{array}\right] , $$
which is used for an element-wise multiplication $\odot$ of the Green's function matrices
$$ \begin{align} \mathbf{\Sigma}0 &= \mathbf{D} \odot \mathbf{G}^\text{R}, \ \mathbf{\Sigma}^\text{in}0 &= \mathbf{D} \odot \mathbf{G}^\text{n} . \end{align} $$
Since the Green's functions enter the definition of the self-energy, a self-consistent loop is performed, where $\mathbf{G}^\text{R}$ and $\mathbf{G}^\text{n}$ are initially set as zero matrices and iteratively updated, along with $\mathbf{\Sigma}0$ and $\mathbf{\Sigma}^\text{in}0$. About 70 iteration steps are usually enough to reach a convergence.
Owner
- Login: liborsold
- Kind: user
- Repositories: 1
- Profile: https://github.com/liborsold
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: Vojáček
given-names: Libor
orcid: https://orcid.org/0000-0002-9867-0592
title: "fuNEGF"
version: 0.1.8
url: "https://github.com/liborsold/fuNEGF"
# identifiers:
# - type: doi
# value: 10.5281/zenodo.1234
date-released: 2024-04-09
GitHub Events
Total
- Watch event: 3
- Push event: 2
Last Year
- Watch event: 3
- Push event: 2