Skip to content

Simplify vumps interface #66

@mtfishman

Description

@mtfishman

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)
end

which 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)

@hershsingh @LHerviou

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions