bool syten::MPS::TDVP::LBOWorker::sweep_twosite | ( | Timer & | timer, |
SRDef & | trunc_error, | ||
SRDef & | krylov_error | ||
) |
Does a single sweep of two-site TDVP, delivering the timer and errors in its arguments and returning true if we should exit due to having received a signal.
The error of this integrator compared to the 1TDVP version is larger, as it is not quite straightforward to update the LBO basis properly. At the moment, I update the two MPS site tensors in their reduced basis and afterwards backwards-evolve the combined MPS-LBO site tensor on the next site. Because this procedure never updates boundary LBO tensors, they are merged into the two-site tensor during the forward update. Because this is only effective on the boundary, where bond dimensions are typically small, this should not be too much of a problem. Better solutions are welcome.
References syten::Tensor< rank >::b(), calc_contrl(), calc_contrr(), check_signals(), conf, contrl, contrr, syten::Timer::end(), syten::IterativeExit::error, evo_two_m(), evo_two_v(), expo_unity, syten::genIONode(), syten::MPS::LBOState::leftnormM(), syten::MPS::LBOState::m(), syten::Timer::middle(), syten::MPS::LBOState::No, syten::MPS::norm(), syten::MPS::LBOState::physnormM(), syten::MPS::LBOState::physnormV(), psi, syten::MPS::LBOState::rightnormM(), syten::Truncation::scaled(), syten::MPS::LBOState::size(), syten::Timer::start(), SYTEN_ASSERT_MSG, syten::TDVP::Conf::trunc, and syten::MPS::LBOState::v().
Referenced by run().