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,
beta,
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.

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

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: