-
Notifications
You must be signed in to change notification settings - Fork 27
Description
Currently you have to call vumps and subspace_expansion in separate function calls, for example:
for _ in 1:n_subspace_expansions
ψ = subspace_expansion(ψ, H; maxdim=100, cutoff=1e-8)
ψ = vumps(H, ψ; tol=1e-5, maxiter=20)
endwhich performs subspace expansion n_subspace_expansions times, and for each bond dimension runs VUMPS to some level of convergence.
It would be better to hide the subspace expansion inside the vumps call, and use an interface closer to the keyword argument interface of ITensors.dmrg.
The closest interface would be something like:
maxdim = [10, 10, 10, 10, 20, 20, 20, 20, 50, 50, 50, 50, 100]
ψ = vumps(ψ, H; maxdim, cutoff=1e-8, maxiter=50, precision_error_tol=1e-5)This would attempt to perform subspace expansion at each iteration, which automatically skips if the bond dimension is saturated.
We could rely on Julia functions to make it easier to specify more maxdims, for example:
niter_per_dim = 20
maxdims = [10, 20, 50, 100]
maxdim = [fill(maxdim_i,niter_per_dim) for maxdim_i in maxdims]
ψ = vumps(ψ, H; maxdim, cutoff=1e-8, precision_error_tol=1e-5)A disadvantage is that we probably want to provide a variety of subspace expansion techniques, but that could be specified with a different interface, like passing a function:
ψ = vumps(ψ, H; maxdim, cutoff=1e-8, precision_error_tol=1e-5, subspace_expansion=my_subspace_expansion)