NESSi  v1.0.2 The NonEquilibrium Systems Simulation Library

## ◆ left_multiply_hermconj()

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

Left-multiplies the herm_matrix_timestep_view 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, $$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. ft [function] The contour function. weight [T] The weight as above.

Definition at line 953 of file cntr_herm_matrix_timestep_view_impl.hpp.

954  {
955  int m;
956  cplx *xtemp, *ftemp, *x0, *f0, *fcc;
957  xtemp = new cplx[element_size_];
958  fcc = new cplx[element_size_];
959  assert(tstp >= -1 && ft.nt() >= tstp &&
960  ft.size1() == size1_ && ft.size2() == size2_ &&
961  "tstp >= -1 && ft.nt() >= tstp && ft.size1() == size1_ && ft.size2() == size2_");
962
963  f0 = ft.ptr(-1);
964  element_conj<T, LARGESIZE>(size1_, fcc, f0);
965  if (tstp == -1) {
966  x0 = matptr(0);
967  for (m = 0; m <= ntau_; m++) {
968  element_mult<T, LARGESIZE>(size1_, xtemp, fcc,
969  x0 + m * element_size_);
970  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
971  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
972  }
973  } else {
974  ftemp = ft.ptr(tstp);
975  element_conj<T, LARGESIZE>(size1_, fcc, ftemp);
976  x0 = retptr(tstp, 0);
977  for (m = 0; m <= tstp; m++) {
978  element_mult<T, LARGESIZE>(size1_, xtemp, fcc,
979  x0 + m * element_size_);
980  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
981  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
982  }
983  x0 = tvptr(tstp, 0);
984  for (m = 0; m <= ntau_; m++) {
985  element_mult<T, LARGESIZE>(size1_, xtemp, fcc,
986  x0 + m * element_size_);
987  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
988  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
989  }
990  x0 = lesptr(0, tstp);
991  for (m = 0; m <= tstp; m++) {
992  element_conj<T, LARGESIZE>(size1_, fcc, ft.ptr(m));
993  element_mult<T, LARGESIZE>(size1_, xtemp, fcc,
994  x0 + m * element_size_);
995  element_smul<T, LARGESIZE>(size1_, xtemp, weight);
996  element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
997  }
998  }
999  delete[] xtemp;
1000  delete[] fcc;
1001 }
Here is the call graph for this function: