NESSi  v1.0.2 The NonEquilibrium Systems Simulation Library

◆ convolution_timestep() [3/4]

template<typename T >
 void cntr::convolution_timestep ( int n, herm_matrix< T > & C, herm_matrix< T > & A, herm_matrix< T > & Acc, function< T > & ft, herm_matrix< T > & B, herm_matrix< T > & Bcc, T beta, T h, int SolveOrder )

Returns convolution of two 'herm_matrix' objects and a contour function at a given time step

Purpose

Computes contour convolution $$C=A*FxB$$ of the 'herm_matrix' object 'A' and 'B' and a time-dependent contour function $$F(t)$$ at a given time step 't=nh'. If 'n=-1', one performs Matsubara convolution with a function $$F(-1)$$. Works for a scalar and square matrices.

Parameters
 n [int] number of the time step ('t=nh') C [herm_matrix] Matrix to which the result of the convolution on Matsubara axis is given A [herm_matrix] contour Green's function Acc [herm_matrix] complex conjugate to A ft [function] contour function F(t). B [herm_matrix] contour Green's function Bcc [herm_matrix] complex conjugate to B beta inversed temperature h time interval SolveOrder [int] integrator order

Definition at line 2968 of file cntr_convolution_impl.hpp.

2970  {
2971  int size1 = C.size1(), ntau = C.ntau(), n1 = (n < SolveOrder ? SolveOrder : n);
2972  assert(ft.size1() == size1 && ft.nt() >= -1);
2973  if (n == -1) {
2974  convolution_matsubara(C, A, ft.ptr(-1), B, integration::I<T>(SolveOrder), beta);
2975  return;
2976  }
2977  assert(n >= 0);
2978  assert(A.size1() == size1);
2979  assert(Acc.size1() == size1);
2980  assert(B.size1() == size1);
2981  assert(Bcc.size1() == size1);
2982  assert(A.ntau() == ntau);
2983  assert(Acc.ntau() == ntau);
2984  assert(B.ntau() == ntau);
2985  assert(Bcc.ntau() == ntau);
2986  assert(A.nt() >= n1);
2987  assert(Acc.nt() >= n1);
2988  assert(B.nt() >= n1);
2989  assert(Bcc.nt() >= n1);
2990  assert(ft.nt() >= n1);
2991  assert(C.nt() >= n);
2992  if (size1 == 1) {
2993  convolution_timestep_ret<T, herm_matrix<T>, 1>(n, C, A, Acc, ft.ptr(0), B, Bcc, integration::I<T>(SolveOrder),
2994  h);
2995  convolution_timestep_tv<T, herm_matrix<T>, 1>(n, C, A, Acc, ft.ptr(-1), ft.ptr(0), B,
2996  Bcc, integration::I<T>(SolveOrder), beta, h);
2997  convolution_timestep_les<T, herm_matrix<T>, 1>(n, C, A, Acc, ft.ptr(-1), ft.ptr(0),
2998  B, Bcc, integration::I<T>(SolveOrder), beta, h);
2999  } else {
3000  convolution_timestep_ret<T, herm_matrix<T>, LARGESIZE>(n, C, A, Acc, ft.ptr(0), B,
3001  Bcc, integration::I<T>(SolveOrder), h);
3002  convolution_timestep_tv<T, herm_matrix<T>, LARGESIZE>(n, C, A, Acc, ft.ptr(-1),
3003  ft.ptr(0), B, Bcc, integration::I<T>(SolveOrder), beta, h);
3004  convolution_timestep_les<T, herm_matrix<T>, LARGESIZE>(
3005  n, C, A, Acc, ft.ptr(-1), ft.ptr(0), B, Bcc, integration::I<T>(SolveOrder), beta, h);
3006  }
3007 }
Here is the call graph for this function: