funegf

Non Equillibrium Green's Functions (NEGF) solver of the atomic linear chain for educational purposes.

https://github.com/liborsold/funegf

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

electronic-transport greens-functions negf tight-binding
Last synced: 6 months ago · JSON representation ·

Repository

Non Equillibrium Green's Functions (NEGF) solver of the atomic linear chain for educational purposes.

Basic Info
Statistics
  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Topics
electronic-transport greens-functions negf tight-binding
Created almost 2 years ago · Last pushed about 1 year ago
Metadata Files
Readme License Citation

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 LinearChain class including the NEGF routines resides in src/fuNEGF/models.py
  • a Jupyter notebook examples/one-dimensional_channel.ipynb contains the linear chain case study with the underlying physics explained
  • a Jupyter notebok examples/time_complexity.ipynb contains 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.

example

Features

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

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

Dependencies

pyproject.toml pypi