NESSI  v1.1.2
The NonEquilibrium Systems SImulation Library
Welcome to the NonEquilibrium Systems SImulation (NESSI) library!

What is NESSI?

NESSI is an open-source software package for the manipulation of nonequilibrium Green’s functions defined on the Kadanoff-Baym contour. The Green's function method in its time-dependent formulation is a versatile framework for the solution of interacting many-body problems out of equilibrium. NESSI provides classes representing the various types of Green’s functions, implements the basic operations on these functions and allows to solve the corresponding equations of motion. The library is aimed at the study of transient dynamics from an initial equilibrium state, induced by time-dependent model parameters.


  • NESSI is smart
    • provides a number of tools for constructing Feynman diagram and solving efficiently the corresponding equations of motion
    • high-order implementation: dividing the KB contour into \(N\) points, the total integrated error of the equilibrium treatment and the two-time propagation scales with as \(\mathcal{O}(N^{-5})\) or better
  • NESSI is fast
    • Efficient distributed-memory parallelization over reciprocal space allow large-scale calculations on extended systems
  • NESSI gets support
    • the software will be fully compatible with a follow-up software package for nonequilibrium dynamical mean-field theory in the strong-coupling limit

How to cite

Please cite the following paper whenever you use parts of NESSI:

Structure of the software

Fig. [structure] (a) summarizes the content of the NESSI package. In order to allow maximum flexibility, the core constituent of NESSI is the shared library libcntr. The libcntr library is written in C++ and provides all the functionalities to treat Green's functions (GFs) on the KB contour. To treat a particular problem within the nonequilibrium Green's function (NEGF) formalism, the user can write a custom C++ program based on the extensive and easy-to-use libcntr library (see Fig. [structure] (b)). The NESSI package contains a number of simple example programs, which demonstrate the usage of libcntr. All callable routines perform various sanity checks in debugging mode, which provide and efficient way of debugging libcntr-based programs. Furthermore, we provide a number of python tools for pre- and post-processing to assist the use of programs based on libcntr. More details are introduced in Example programs, where we present a number of example programs demonstrating the usage of libcntr and the python tools. The libcntr library and the example programs depend on the eigen3 library for efficiently performing matrix operation. Furthermore, the hdf5 library and file system can be used for creating binary, machine-independent output like, for instance, GFs. We further provide python tools for reading and post-processing GFs from hdf5 format via the h5py python package.

Figure [structure]: (a) Basic structure of the NESSI software package. The core ingredient is the shared library libcntr, which can be used in user programs. Furthermore, we provide a tutorial and demonstration programs which exemplify the usage and functionalities of libcntr. (b) Custom programs based on libcntr should be linked against the libcntr library and the dependencies eigen3 and hdf5

Core functionalities

The central task within the NEGF framework is calculating the single-particle GF, from which from which all single-particle observables such as the density or the current can be evaluated. Let us consider the generic many-body Hamiltonian

\begin{equation} H(t) = \sum_{a,b} \epsilon_{a,b}(t) c^\dagger_{a} c_b + V(t) \ , \end{equation}

where \(c^\dagger_a\) ( \(c_a\)) denotes the fermionic or bosonic creation (annihilation) operator with respect to any basis labelled by \(a\) and \(\epsilon_{a,b}(t)\) the corresponding single-particle Hamiltonian, while \(V(t)\) represents any two-body interaction, the presence of a bath, or other interaction effects. Gathering all indices in compact matrix notation, the GF is obtained from solving the Dyson equation

\begin{equation} \label{eq:dyson_1} \left[i \partial_t -\epsilon(t)\right]G(t,t^\prime) - \int_{\mathcal{C}} d\bar{t} \, \Sigma(t,\bar{t}) G(\bar{t},t^\prime) = \delta_\mathcal{C}(t,t^\prime) \ . \end{equation}

Here \(\int_\mathcal{C}\) and \(\delta_\mathcal{C}(t,t^\prime)\) are natural extensions of integrals and Dirac delta function on the KB contour, respectively. Details are discussed in paper. \(\Sigma(t,t^\prime)\) is the so-called self-energy, which captures all interaction effects originating from \(V(t)\).

Figure [main_routines]: Main routines for constructing and manipulating objects on the KB contour and solving the corresponding equations of motion.

The libcntr library provides highly accurate methods for solving the Dyson equation Eq. \eqref{eq:dyson_1} and more. A brief overview of the core routines is presented in Fig. [main_routines]. It includes routines for computing the convolution \([A\ast B](t,t^\prime) = \int_{\mathcal{C}} d\bar{t} \, A(t,\bar{t}) B(\bar{t},t^\prime)\) (cntr::convolution), which is an essential part of solving Eq. \eqref{eq:dyson_1}. It furthermore provides a high-order solver for Eq. \eqref{eq:dyson_1} (cntr::dyson) along the full KB contour. In particular, thermal equilibrium and time evolution are treated on equal footing. Moreover, contour integral equations of the type

\begin{equation} \label{eq:vie2_1} G(t,t^\prime) + [F\ast G](t,t^\prime) = Q(t,t^\prime) \end{equation}

can be solved efficiently via cntr::vie2. A typical example is the self-consistent \(GW\) approximation: the screened interaction obeys the Dyson equation \(W = V + V\ast \Pi \ast W\), where \(V\) denotes the bare Coulomb interaction, while \(\Pi\) stands for the irreducible polarization. Furthermore, the Dyson equation ( Eq. \eqref{eq:dyson_1}) has the equivalent integral form \(G = G_0 + G_0 \ast \Sigma \ast G\), where \(G_0\) is the free GF with respect to \(\epsilon(t)\) (computed by cntr::green_from_H). Contour integral equations of the type Eq. \eqref{eq:vie2_1} are efficiently solved by cntr::vie2.

In many-body theories, the self-energy \(\Sigma(t,t^\prime)\) can be expressed in terms if Feynman diagrams using the GF themselves. The most common Feynman diagrams consistent of products of two two-time functions, implemented as cntr::Bubble1 and cntr::Bubble2 in libcntr.

We remark that all routines work equally for fermions and bosons.

Perspective: dynamical mean-field theory

While the NESSI package provides a general framework for real time GFs and can be used in many applications, one particularly fruitful application has been real-time dynamical mean-field theory (DMFT). In order to perform DMFT calculations the library needs to be amended with a solver for the DMFT effective impurity problem. Two approximate approaches are weak coupling expansions (in particular Iterated Perturbation Theory, IPT) and strong coupling methods. The strong coupling based methods maps the problem to pseudo-particles, one for each state in the local Hilbert space. This formulation solves the atomic problem exactly and treat the hybridization with the environment perturbatively. The first and second order dressed expansion of this method is commonly known as the Non-Crossing Approximation (NCA) and the One-Crossing Approximation (OCA). Currently we are working on a library implementing these methods called the Pseudo-Particle Strong Coupling (PPSC) library – based on libcntr – and we plan to make it public in the future.

Developers and contributors?


This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. A copy of the MPL one can obtain at

next page Getting started with NESSI