This is motivated by the finite-T study of t-J model 2510.04756. There are two places that involves measuring in a large patch of an iPEPS:
-
Fig. 3, which measures h_num ⊗ S_exchange where h_num acts on (0, 0), and S_exchange acts on arbitrary NN or NNN bonds in a (2n+1) x (2n+1) window (n = 3 in this paper) around the origin. So the largest patch occurs during contraction is 4x4, where S_exchange acts on [(3, 2), (3, 3)]. When I naively try to use expectation_value, it seems to use a huge amount of memory for anything spanning beyond 2 rows and 2 columns (this paper use D = 18 and χ > 72, although with fZ2 x charge-U(1) x spin-U(1) symmetry). I doubt we can solve this by improving contraction order, since we already use @autoopt.
-
Fig. 13, which plots the Fourier transform of $T_{i-j} = \langle c^\dagger_{i\sigma} c_{j\sigma} \rangle$, i.e. the particle number distribution in momentum space $n_{k\sigma} = \langle c^\dagger_{k\sigma} c_{k\sigma} \rangle$. Assuming $T_{i-j}$ decays sufficiently fast, one can measure $T_{i-j}$ in a (2n+1) x (2n+1) window, with i at the origin. The largest patch we need to contract has size (n+1) x (n+1). (There may be more advanced approaches.)
So I suggest we implement an approximate way to contract a large patch of the iPEPS/iPEPO, which is relevant to #188 (comment) that @lkdvos and @leburgel may be most familiar with.
- After we find the CTMRG environment, we use the CTM tensors to build boundary MPS for this finite patch (regarded as a finite PEPS/PEPO - maybe it's a chance for us to introduce
FinitePEPS into the package?).
- The boundary MPS is contracted with the patch with truncation, instead of done exactly (as we currently do).
- The operator to be measured, if acting on multiple sites, is first converted to an MPO along a convenient path and acts on the
ket state.
- In the
expectation_value function, we switch to this approximate contraction whenever the patch size is larger than 2 in both axis directions, and add a truncation algorithm as a keyword argument.
This is motivated by the finite-T study of t-J model 2510.04756. There are two places that involves measuring in a large patch of an iPEPS:
Fig. 3, which measures
h_num ⊗ S_exchangewhereh_numacts on (0, 0), andS_exchangeacts on arbitrary NN or NNN bonds in a(2n+1) x (2n+1)window (n = 3 in this paper) around the origin. So the largest patch occurs during contraction is 4x4, whereS_exchangeacts on [(3, 2), (3, 3)]. When I naively try to useexpectation_value, it seems to use a huge amount of memory for anything spanning beyond 2 rows and 2 columns (this paper use D = 18 and χ > 72, although with fZ2 x charge-U(1) x spin-U(1) symmetry). I doubt we can solve this by improving contraction order, since we already use@autoopt.Fig. 13, which plots the Fourier transform of$T_{i-j} = \langle c^\dagger_{i\sigma} c_{j\sigma} \rangle$ , i.e. the particle number distribution in momentum space $n_{k\sigma} = \langle c^\dagger_{k\sigma} c_{k\sigma} \rangle$ . Assuming $T_{i-j}$ decays sufficiently fast, one can measure $T_{i-j}$ in a
(2n+1) x (2n+1)window, withiat the origin. The largest patch we need to contract has size(n+1) x (n+1). (There may be more advanced approaches.)So I suggest we implement an approximate way to contract a large patch of the iPEPS/iPEPO, which is relevant to #188 (comment) that @lkdvos and @leburgel may be most familiar with.
FinitePEPSinto the package?).ketstate.expectation_valuefunction, we switch to this approximate contraction whenever the patch size is larger than 2 in both axis directions, and add a truncation algorithm as a keyword argument.