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
.
1632 assert(
tstp == tstp_);
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_");
1642 element_conj<T, LARGESIZE>(size1_, fcc, f0);
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);
1652 ftemp = ft.ptr(
tstp);
1653 element_conj<T, LARGESIZE>(size1_, fcc, ftemp);
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);
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);
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);