SyTen

## ◆ apply_op_orthogonalise_fit() [1/2]

template<typename Iterator = State*>
 std::tuple syten::MPS::apply_op_orthogonalise_fit ( State const & in, Operator const & op, Truncation const & trunc, SRDef desired_change, Index max_exp_sweeps = 12, Index max_opt_sweeps = 2, State res = State(), Iterator first = nullptr, Iterator last = nullptr )

Applies the operator op to the state in while orthogonalising the result against states [first, last) and truncating with trunc.

Parameters
 in the initial state $$|\psi \rangle$$ as a MPS::State op the operator $$\hat O$$ trunc a truncation specification desired_change sweeps are considered converged if the total change during a sweep is below this. max_exp_sweeps maximal number of full (back&forth) expansion sweeps max_opt_sweeps maximal number of full (back&forth) optimisation sweeps res input guess state to use as initial state first iterator to the first element of the orthogonalised set $$\{ | v_i \rangle \}_{i=\mathtt{first}}^{\mathtt{last-1}}$$ last iterator to the one-past-the-end element of the orthogonalised set $$\{ | v_i \rangle \}_{i=\mathtt{first}}^{\mathtt{last-1}}$$
Returns
$$\hat O | \psi \rangle$$ orthogonalised against all $$\{ | v_i \rangle \}_i$$ and an error estimate (NAN as the error is not calculated at the moment)
Remarks
A subspace expansion method is employed during the initial sweeps to increase the bond dimensions of the state. In our experience, the sweeps converge very quickly if a large expansion blocksize is allowed, but the computational effort also skyrockets then. As a compromise, the maximal blocksize is increased in increments of five during each sweep which should allow for an appropriate increase in the bond dimension while not handicapping the method in situations where the bond dimension hardly grows.
The parameters first and last are optional and can be left off. No orthogonalisation will occur in this case.
Here is the call graph for this function:
Here is the caller graph for this function: