NESSi  v1.0.2
The NonEquilibrium Systems Simulation Library

◆ left_multiply_hermconj()

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

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

Purpose

Performs the operation \(C(t,t^\prime) \rightarrow w F^\ddagger(t)C(t,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

[int] The time step at which \(F^\ddagger(t)\) and \(C(t,t^\prime)\) are multiplied. This is a dummy argument in release mode.

ft

[function] The contour function.

weight

[T] The weight as above.

Definition at line 1630 of file cntr_herm_matrix_timestep_impl.hpp.

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

1631  {
1632  assert(tstp == tstp_);
1633  int m;
1634  cplx *xtemp, *ftemp, *x0, *f0, *fcc;
1635  xtemp = new cplx[element_size_];
1636  fcc = new cplx[element_size_];
1637  assert(tstp >= -1 && ft.nt() >= tstp &&
1638  ft.size1() == size1_ && ft.size2() == size2_ &&
1639  "tstp >= -1 && ft.nt() >= tstp && ft.size1() == size1_ && ft.size2() == size2_");
1640 
1641  f0 = ft.ptr(-1);
1642  element_conj<T, LARGESIZE>(size1_, fcc, f0);
1643  if (tstp == -1) {
1644  x0 = data_;
1645  for (m = 0; m <= ntau_; m++) {
1646  element_mult<T, LARGESIZE>(size1_, xtemp, fcc,
1647  x0 + m * element_size_);
1648  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1649  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
1650  }
1651  } else {
1652  ftemp = ft.ptr(tstp);
1653  element_conj<T, LARGESIZE>(size1_, fcc, ftemp);
1654  x0 = data_;
1655  for (m = 0; m <= tstp; m++) {
1656  element_mult<T, LARGESIZE>(size1_, xtemp, fcc,
1657  x0 + m * element_size_);
1658  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1659  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
1660  }
1661  x0 = data_ + (tstp_ + 1) * element_size_;
1662  for (m = 0; m <= ntau_; m++) {
1663  element_mult<T, LARGESIZE>(size1_, xtemp, fcc,
1664  x0 + m * element_size_);
1665  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1666  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
1667  }
1668  x0 = data_ + (tstp_ + 1 + ntau_ + 1) * element_size_;
1669  for (m = 0; m <= tstp; m++) {
1670  element_conj<T, LARGESIZE>(size1_, fcc, ft.ptr(m));
1671  element_mult<T, LARGESIZE>(size1_, xtemp, fcc,
1672  x0 + m * element_size_);
1673  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1674  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
1675  }
1676  }
1677  delete[] xtemp;
1678  delete[] fcc;
1679 }
+ Here is the call graph for this function: