NESSi  v1.0.2
The NonEquilibrium Systems Simulation Library

◆ vie2_timestep()

template<typename T >
void cntr::vie2_timestep ( int  n,
herm_matrix< T > &  G,
herm_matrix< T > &  F,
herm_matrix< T > &  Fcc,
herm_matrix< T > &  Q,
beta,
h,
const int  SolveOrder,
const int  matsubara_method 
)

One step VIE solver \((1+F)*G=Q\) for a Green's function \(G\) at a given timestep

Purpose

One solves the linear equation \((1+F)*G=Q\) for \(G(t, t^\prime)\) at a given timestep, for given: input kernel \(F(t, t^\prime)\), its hermitian conjugate \(F^\ddagger(t, t^\prime)\), the source term \(Q(t, t^\prime)\), and the integrator class 'I'.

Parameters
n

[int] time step

&G

[herm_matrix<T>] solution

&F

[herm_matrix<T>] green's function on left-hand side

&Fcc

[herm_matrix<T>] Complex conjugate of F

&Q

[herm_matrix<T>] green's function on right-hand side

beta

[double] inverse temperature

h

[double] time interval

SolveOrder

[int] integrator order

matsubara_method

[const] Solution method on the Matsubara axis with 0: Fourier, 1: steep, 2: fixpoint

Definition at line 1597 of file cntr_vie2_impl.hpp.

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

1598  {
1599  int size1 = G.size1();
1600  assert(G.size1() == F.size1());
1601  assert(G.size1() == Fcc.size1());
1602  assert(G.ntau() == F.ntau());
1603  assert(G.ntau() == Fcc.ntau());
1604  assert(G.nt() >= n);
1605  assert(F.nt() >= n);
1606  assert(Fcc.nt() >= n);
1607 
1608  if (n==-1){
1609  vie2_mat(G, F, Fcc, Q, beta, integration::I<T>(SolveOrder), matsubara_method);
1610  }else if(n<=SolveOrder){
1611  vie2_start(G,F,Fcc,Q,integration::I<T>(n),beta,h);
1612  }else{
1613  switch (size1) {
1614  case 1:
1615  vie2_timestep_ret<T, herm_matrix<T>, 1>(n, G, Fcc, F, Q, integration::I<T>(SolveOrder), h);
1616  vie2_timestep_tv<T, herm_matrix<T>, 1>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1617  vie2_timestep_les<T, herm_matrix<T>, 1>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1618  break;
1619  case 2:
1620  vie2_timestep_ret<T, herm_matrix<T>, 2>(n, G, Fcc, F, Q, integration::I<T>(SolveOrder), h);
1621  vie2_timestep_tv<T, herm_matrix<T>, 2>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1622  vie2_timestep_les<T, herm_matrix<T>, 2>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1623  break;
1624  case 3:
1625  vie2_timestep_ret<T, herm_matrix<T>, 3>(n, G, Fcc, F, Q, integration::I<T>(SolveOrder), h);
1626  vie2_timestep_tv<T, herm_matrix<T>, 3>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1627  vie2_timestep_les<T, herm_matrix<T>, 3>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1628  break;
1629  case 4:
1630  vie2_timestep_ret<T, herm_matrix<T>, 4>(n, G, Fcc, F, Q, integration::I<T>(SolveOrder), h);
1631  vie2_timestep_tv<T, herm_matrix<T>, 4>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1632  vie2_timestep_les<T, herm_matrix<T>, 4>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1633  break;
1634  case 5:
1635  vie2_timestep_ret<T, herm_matrix<T>, 5>(n, G, Fcc, F, Q, integration::I<T>(SolveOrder), h);
1636  vie2_timestep_tv<T, herm_matrix<T>, 5>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1637  vie2_timestep_les<T, herm_matrix<T>, 5>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1638  break;
1639  case 8:
1640  vie2_timestep_ret<T, herm_matrix<T>, 8>(n, G, Fcc, F, Q, integration::I<T>(SolveOrder), h);
1641  vie2_timestep_tv<T, herm_matrix<T>, 8>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1642  vie2_timestep_les<T, herm_matrix<T>, 8>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1643  break;
1644  default:
1645  vie2_timestep_ret<T, herm_matrix<T>, LARGESIZE>(n, G, Fcc, F, Q, integration::I<T>(SolveOrder), h);
1646  vie2_timestep_tv<T, herm_matrix<T>, LARGESIZE>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1647  vie2_timestep_les<T, herm_matrix<T>, LARGESIZE>(n, G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1648  break;
1649  }
1650  }
1651 }
+ Here is the call graph for this function: