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, T beta, T 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] solution &F [herm_matrix] green's function on left-hand side &Fcc [herm_matrix] Complex conjugate of F &Q [herm_matrix] 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.

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: