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

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: