NESSi  v1.0.2 The NonEquilibrium Systems Simulation Library

## ◆ dyson_timestep_omp()

template<typename T >
 void cntr::dyson_timestep_omp ( int omp_num_threads, int n, herm_matrix< T > & G, T lam0, function< T > & H, herm_matrix< T > & Sigma, T beta, T h, int SolveOrder )

One step Dyson solver (integral-differential form) for a Green's function $$G$$ using openMP parallelization

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
 omp_num_threads [int] The number of openMP threads to be used. Set to the number of threads in the current team. If omp_num_threads = -1, the maximum available number of threads is used. n [int] time step &G [herm_matrix] solution lam0 [T] chemical potential &H [function] time-dependent function &Sigma [herm_matrix] self-energy beta [double] inverse temperature h [double] time interval SolveOrder [int] integrator order

Definition at line 577 of file cntr_dyson_omp_impl.hpp.

579  {
580  int size1 = G.size1();
582  assert(SolveOrder + 1<= n);
583  assert(n<= Sigma.nt());
584  assert(n<= G.nt());
585  assert(n<= H.nt());
586  assert(G.sig()== Sigma.sig());
587  assert(G.size1()== Sigma.size1());
588  assert(G.size1()== H.size1());
589  assert(G.ntau()== Sigma.ntau());
590  if (size1 == 1) {
591  dyson_timestep_ret_omp<T, herm_matrix<T>, 1>(omp_num_threads1, n, G, lam0, H.ptr(0),
592  Sigma, integration::I<T>(SolveOrder), h);
593  dyson_timestep_tv_omp<T, herm_matrix<T>, 1>(omp_num_threads1, n, G, lam0, H.ptr(n),
594  Sigma, integration::I<T>(SolveOrder), beta, h);
595  dyson_timestep_les_omp<T, herm_matrix<T>, 1>(omp_num_threads1, n, G, lam0, H.ptr(0),
596  Sigma, integration::I<T>(SolveOrder), beta, h);
597  } else {
598  dyson_timestep_ret_omp<T, herm_matrix<T>, LARGESIZE>(omp_num_threads1, n, G, lam0,
599  H.ptr(0), Sigma, integration::I<T>(SolveOrder), h);
600  dyson_timestep_tv_omp<T, herm_matrix<T>, LARGESIZE>(omp_num_threads1, n, G, lam0,
601  H.ptr(n), Sigma, integration::I<T>(SolveOrder), beta, h);
602  dyson_timestep_les_omp<T, herm_matrix<T>, LARGESIZE>(omp_num_threads1, n, G, lam0,
603  H.ptr(0), Sigma, integration::I<T>(SolveOrder), beta, h);
604  }
605 }
Here is the call graph for this function: