NESSi  v1.0.2
The NonEquilibrium Systems Simulation Library

◆ right_multiply_hermconj()

template<typename T >
void cntr::herm_matrix_timestep< T >::right_multiply_hermconj ( int  tstp,
function< T > &  ft,
weight = 1.0 
)

Right-multiplies the herm_matrix_timestep with the hermitian conjugate of a contour function.

Purpose

Performs the operation \(C(t,t^\prime) \rightarrow w C(t,t^\prime)F^\ddagger(t^\prime)\), where \(C(t,t^\prime)\) is the herm_matrix_timestep, \(F(t)\) is a contour function and \(w\) is a real weight. The operation is performed at given time step tstp.

Parameters
tstp

The time step at which \(F^\ddagger(t)\) and \(C(t,t^\prime)\) are multiplied. Dummy argument in release mode.

ft

The contour function.

weight

The weight as above.

Definition at line 1828 of file cntr_herm_matrix_timestep_impl.hpp.

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

1829  {
1830  assert(tstp == tstp_);
1831  int m;
1832  cplx *xtemp, *ftemp, *x0, *f0, *fcc;
1833  xtemp = new cplx[element_size_];
1834  fcc = new cplx[element_size_];
1835  assert(ft.size1() == size1_ && "ft.size1() == size1_");
1836  assert(ft.nt() >= tstp && "ft.nt() >= tstp");
1837  assert(tstp >= -1&& "ft.nt() >= tstp");
1838  f0 = ft.ptr(-1);
1839  element_conj<T, LARGESIZE>(size1_, fcc, f0);
1840  if (tstp == -1) {
1841  x0 = data_;
1842  for (m = 0; m <= ntau_; m++) {
1843  element_mult<T, LARGESIZE>(size1_, xtemp, x0 + m * element_size_,
1844  fcc);
1845  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1846  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
1847  }
1848  } else {
1849  x0 = data_;
1850  for (m = 0; m <= tstp; m++) {
1851  element_conj<T, LARGESIZE>(size1_, fcc, ft.ptr(m));
1852  element_mult<T, LARGESIZE>(size1_, xtemp, x0 + m * element_size_,
1853  fcc);
1854  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1855  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
1856  }
1857  x0 = data_ + (tstp_ + 1) * element_size_;
1858  element_conj<T, LARGESIZE>(size1_, fcc, f0);
1859  for (m = 0; m <= ntau_; m++) {
1860  element_mult<T, LARGESIZE>(size1_, xtemp, x0 + m * element_size_,
1861  fcc);
1862  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1863  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
1864  }
1865  ftemp = ft.ptr(tstp);
1866  element_conj<T, LARGESIZE>(size1_, fcc, ftemp);
1867  x0 = data_ + (tstp_ + 1 + ntau_ + 1) * element_size_;
1868  for (m = 0; m <= tstp; m++) {
1869  element_mult<T, LARGESIZE>(size1_, xtemp, x0 + m * element_size_,
1870  fcc);
1871  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1872  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
1873  }
1874  }
1875  delete[] fcc;
1876  delete[] xtemp;
1877 }
+ Here is the call graph for this function: