NESSi  v1.0.2 The NonEquilibrium Systems Simulation Library

◆ vie2_start()

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

VIE solver $$(1+F)*G=Q$$ for a Green's function $$G$$ for the first k timesteps

Purpose

One solves the linear equation $$(1+F)*G=Q$$ for a hermitian matrix $$G(t, t^\prime)$$ for the first k timesteps (given by the integrator class 'I'). Here, are given: input kernel $$F(t, t^\prime)$$, its hermitian conjugate $$F^\ddagger(t, t^\prime)$$, and the source term $$Q(t, t^\prime)$$. Basically, the function calls 'vie2_start_ret', 'vie2_start_tv', and 'vie2_start_les'.

Parameters
 &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

Definition at line 1420 of file cntr_vie2_impl.hpp.

Referenced by vie2_timestep_omp().

1421  {
1422  int size1 = G.size1();
1423  assert(G.size1() == F.size1());
1424  assert(G.ntau() == F.ntau());
1425  assert(G.nt() >= SolveOrder);
1426  assert(F.nt() >= SolveOrder);
1427  assert(G.size1() == Fcc.size1());
1428  assert(G.ntau() == Fcc.ntau());
1429  assert(Fcc.nt() >= SolveOrder);
1430
1431  switch (size1) {
1432  case 1:
1433  vie2_start_ret<T, herm_matrix<T>, 1>(G, F, Fcc, Q, integration::I<T>(SolveOrder), h);
1434  vie2_start_tv<T, herm_matrix<T>, 1>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1435  vie2_start_les<T, herm_matrix<T>, 1>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1436  break;
1437  case 2:
1438  vie2_start_ret<T, herm_matrix<T>, 2>(G, F, Fcc, Q, integration::I<T>(SolveOrder), h);
1439  vie2_start_tv<T, herm_matrix<T>, 2>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1440  vie2_start_les<T, herm_matrix<T>, 2>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1441  break;
1442  case 3:
1443  vie2_start_ret<T, herm_matrix<T>, 3>(G, F, Fcc, Q, integration::I<T>(SolveOrder), h);
1444  vie2_start_tv<T, herm_matrix<T>, 3>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1445  vie2_start_les<T, herm_matrix<T>, 3>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1446  break;
1447  case 4:
1448  vie2_start_ret<T, herm_matrix<T>, 4>(G, F, Fcc, Q, integration::I<T>(SolveOrder), h);
1449  vie2_start_tv<T, herm_matrix<T>, 4>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1450  vie2_start_les<T, herm_matrix<T>, 4>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1451  break;
1452  case 5:
1453  vie2_start_ret<T, herm_matrix<T>, 5>(G, F, Fcc, Q, integration::I<T>(SolveOrder), h);
1454  vie2_start_tv<T, herm_matrix<T>, 5>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1455  vie2_start_les<T, herm_matrix<T>, 5>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1456  break;
1457  case 8:
1458  vie2_start_ret<T, herm_matrix<T>, 8>(G, F, Fcc, Q, integration::I<T>(SolveOrder), h);
1459  vie2_start_tv<T, herm_matrix<T>, 8>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1460  vie2_start_les<T, herm_matrix<T>, 8>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1461  break;
1462  default:
1463  vie2_start_ret<T, herm_matrix<T>, LARGESIZE>(G, F, Fcc, Q, integration::I<T>(SolveOrder), h);
1464  vie2_start_tv<T, herm_matrix<T>, LARGESIZE>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1465  vie2_start_les<T, herm_matrix<T>, LARGESIZE>(G, F, Fcc, Q, integration::I<T>(SolveOrder), beta, h);
1466  break;
1467  }
1468 }
Here is the call graph for this function:
Here is the caller graph for this function: