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

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: