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
.
1830 assert(
tstp == tstp_);
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");
1839 element_conj<T, LARGESIZE>(size1_, fcc, f0);
1842 for (m = 0; m <= ntau_; m++) {
1843 element_mult<T, LARGESIZE>(size1_, xtemp, x0 + m * element_size_,
1845 element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1846 element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
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_,
1854 element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1855 element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
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_,
1862 element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1863 element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);
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_,
1871 element_smul<T, LARGESIZE>(size1_, xtemp, weight);
1872 element_set<T, LARGESIZE>(size1_, x0 + m * element_size_, xtemp);