NESSi  v1.0.2
The NonEquilibrium Systems Simulation Library

◆ dyson_timestep()

template<typename T >
void cntr::dyson_timestep ( int  n,
herm_matrix< T > &  G,
mu,
function< T > &  H,
herm_matrix< T > &  Sigma,
beta,
h,
const int  SolveOrder 
)

One step Dyson solver (integral-differential form) for a Green's function \(G\)

Purpose

One solves the Dyson equation of the following form: \( [ id/dt + \mu - H(t) ] G(t,t^\prime) - [\Sigma*G](t,t^\prime) = \delta(t,t^\prime)\) for a hermitian matrix \(G(t, t^\prime)\) at a given timestep 'n', i.e., G^ret(nh,t'<=nh), G^les(t<=nh,nh), G^tv(nt,tau=0..beta). Timestep must be >k, where k is the Integration order 'I'. The timesteps n=0..k must be computed seperately, using the routine "_start", which assumes that the Matsubara component of \(G\) and \(\Sigma(t,t^\prime)\) for \(t,t^\prime\)<=k are given. Here, are given: \(\Sigma(t, t^\prime)\), \(\mu\), and \(H(t)\).

Parameters
n

[int] time step

&G

[herm_matrix<T>] solution

mu

[T] chemical potential

&H

[function<T>] time-dependent function

&Sigma

[herm_matrix<T>] self-energy

beta

[double] inverse temperature

h

[double] time interval

SolveOrder

[int] integrator order

Definition at line 1618 of file cntr_dyson_impl.hpp.

References cntr::herm_matrix< T >::nt(), cntr::herm_matrix< T >::ntau(), cntr::function< T >::ptr(), and cntr::herm_matrix< T >::size1().

1619  {
1620  int size1 = G.size1();
1621  assert(G.size1() == Sigma.size1());
1622  assert(G.ntau() == Sigma.ntau());
1623  assert(G.nt() >= n);
1624  assert(Sigma.nt() >= n);
1625  assert(n > SolveOrder);
1626  if (size1 == 1) {
1627  dyson_timestep_ret<T, herm_matrix<T>, 1>(n, G, mu, H.ptr(0), Sigma, integration::I<T>(SolveOrder), h);
1628  dyson_timestep_tv<T, herm_matrix<T>, 1>(n, G, mu, H.ptr(n), Sigma, integration::I<T>(SolveOrder), beta, h);
1629  dyson_timestep_les<T, herm_matrix<T>, 1>(n, G, mu, H.ptr(0), Sigma, integration::I<T>(SolveOrder), beta, h);
1630  } else {
1631  dyson_timestep_ret<T, herm_matrix<T>, LARGESIZE>(n, G, mu, H.ptr(0), Sigma, integration::I<T>(SolveOrder), h);
1632  dyson_timestep_tv<T, herm_matrix<T>, LARGESIZE>(n, G, mu, H.ptr(n), Sigma, integration::I<T>(SolveOrder), beta,
1633  h);
1634  dyson_timestep_les<T, herm_matrix<T>, LARGESIZE>(n, G, mu, H.ptr(0), Sigma, integration::I<T>(SolveOrder), beta,
1635  h);
1636  }
1637 }
+ Here is the call graph for this function: