NESSi  v1.0.2
The NonEquilibrium Systems Simulation Library

◆ convolution_timestep() [1/4]

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

Returns convolution of two matrices at a given time step

Purpose

Computes contour convolution C=A*B of the objects with class 'herm_matrix' at a given time step 't=nh'. 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

B

[herm_matrix] contour Green's function

Bcc

[herm_matrix] complex conjugate to B

beta

inversed temperature

h

time step interval

SolveOrder

[int] integrator order

Definition at line 1657 of file cntr_convolution_impl.hpp.

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

1660  {
1661  int size1 = C.size1(), ntau = C.ntau(), n1 = (n < SolveOrder ? SolveOrder : n);
1662  if (n == -1) {
1663  convolution_matsubara(C, A, B, integration::I<T>(SolveOrder), beta);
1664  return;
1665  }
1666  assert(n >= 0);
1667  assert(A.size1() == size1);
1668  assert(Acc.size1() == size1);
1669  assert(B.size1() == size1);
1670  assert(Bcc.size1() == size1);
1671  assert(A.ntau() == ntau);
1672  assert(Acc.ntau() == ntau);
1673  assert(B.ntau() == ntau);
1674  assert(Bcc.ntau() == ntau);
1675  assert(A.nt() >= n1);
1676  assert(Acc.nt() >= n1);
1677  assert(B.nt() >= n1);
1678  assert(Bcc.nt() >= n1);
1679  assert(C.nt() >= n);
1680  if (size1 == 1) {
1681  convolution_timestep_ret<T, herm_matrix<T>, 1>(n, C, A, Acc, B, Bcc,
1682  integration::I<T>(SolveOrder), h);
1683  convolution_timestep_tv<T, herm_matrix<T>, 1>(n, C, A, Acc, B, Bcc, integration::I<T>(SolveOrder),
1684  beta, h);
1685  convolution_timestep_les<T, herm_matrix<T>, 1>(n, C, A, Acc, B, Bcc,
1686  integration::I<T>(SolveOrder), beta, h);
1687  } else {
1688  convolution_timestep_ret<T, herm_matrix<T>, LARGESIZE>(n, C, A, Acc,
1689  B, Bcc, integration::I<T>(SolveOrder), h);
1690  convolution_timestep_tv<T, herm_matrix<T>, LARGESIZE>(
1691  n, C, A, Acc, B, Bcc, integration::I<T>(SolveOrder), beta, h);
1692  convolution_timestep_les<T, herm_matrix<T>, LARGESIZE>(
1693  n, C, A, Acc, B, Bcc, integration::I<T>(SolveOrder), beta, h);
1694  }
1695 }
+ Here is the call graph for this function: