ITensor / ITensorNetworks.jl

A package with general tools for working with higher-dimensional tensor networks based on ITensor.
MIT License
54 stars 11 forks source link

Improvements to `alternating_update` #60

Open mtfishman opened 1 year ago

mtfishman commented 1 year ago

Here's an issue to track improvements to make to the general tensor network solver code, alternating_update, following up on #59.

emstoudenmire commented 1 year ago

(Feel free to move this up – I just can't edit your list above.)

mtfishman commented 1 year ago

Thanks, I added it.

emstoudenmire commented 1 year ago

Proposed redesign of internals:

  1. Eliminate outermost for loop over substep (see the function update_step in update_step.jl)
  2. Pass a data structure which says how to do a single (full) sweep over the system. This defines what a sweep means, as in nsweeps=3 does three of these.
  3. This data structure can carry an optional "payload" (named tuple?). Using tdvp as an example, the payload would store the explicit, signed and weighted time steps, already preprocessed. In the case of a PEPS it could store the row and column number.
  4. There is an optional, second type of callback function (not a solver) which can post process the payload before feeding it into the solver. (May not be necessary to add this callback feature if the payloads are sufficiently preprocessed.)

Basically Lander's data structures become the definition of what a sweep is and are generalized to not just store the forward/reverse sign, but any data relevant to that specific point in the sweep.

A related part of this redesign is that the observer system will handle all printing, via custom "printing callbacks" which are appending to the user-provided list of observer functions (this is in addition to 1-4 above).