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

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

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: