NESSI  v1.1.2
The NonEquilibrium Systems SImulation Library

◆ convolution_timestep() [1/6]

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,
integration::Integrator< T > &  I,
beta,
h 
)

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

I

[Integrator] integrator class

beta

inversed temperature

h

time step interval

Definition at line 1573 of file cntr_convolution_impl.hpp.

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

1576  {
1577  int size1 = C.size1(), ntau = C.ntau(), k = I.k(), n1 = (n < k ? k : n);
1578  if (n == -1) {
1579  convolution_matsubara(C, A, B, I, beta);
1580  return;
1581  }
1582  assert(n >= 0);
1583  assert(A.size1() == size1);
1584  assert(Acc.size1() == size1);
1585  assert(B.size1() == size1);
1586  assert(Bcc.size1() == size1);
1587  assert(A.ntau() == ntau);
1588  assert(Acc.ntau() == ntau);
1589  assert(B.ntau() == ntau);
1590  assert(Bcc.ntau() == ntau);
1591  assert(A.nt() >= n1);
1592  assert(Acc.nt() >= n1);
1593  assert(B.nt() >= n1);
1594  assert(Bcc.nt() >= n1);
1595  assert(C.nt() >= n);
1596  if (size1 == 1) {
1597  convolution_timestep_ret<T, herm_matrix<T>, 1>(n, C, A, Acc, B, Bcc,
1598  I, h);
1599  convolution_timestep_tv<T, herm_matrix<T>, 1>(n, C, A, Acc, B, Bcc, I,
1600  beta, h);
1601  convolution_timestep_les<T, herm_matrix<T>, 1>(n, C, A, Acc, B, Bcc,
1602  I, beta, h);
1603  } else {
1604  convolution_timestep_ret<T, herm_matrix<T>, LARGESIZE>(n, C, A, Acc,
1605  B, Bcc, I, h);
1606  convolution_timestep_tv<T, herm_matrix<T>, LARGESIZE>(
1607  n, C, A, Acc, B, Bcc, I, beta, h);
1608  convolution_timestep_les<T, herm_matrix<T>, LARGESIZE>(
1609  n, C, A, Acc, B, Bcc, I, beta, h);
1610  }
1611 }
Integrator< T > & I(int k)
void convolution_matsubara(GG &C, GG &A, GG &B, integration::Integrator< T > &I, T beta)
Returns the result of the Matsubara convolution of two matrices.
+ Here is the call graph for this function: