Coupled Ladders

Dense (PyTorch)

This implementation of SU(2)-symmetric model of coupled spin-1/2 ladders on square lattice does not assume any symmetry and works with dense PyTorch tensors.

class models.coupledLadders.COUPLEDLADDERS(alpha=0.0, bz_val=0.0, global_args=<config.GLOBALARGS object>)[source]
Parameters:
  • alpha (float) – nearest-neighbour interaction

  • bz_val – staggered magnetic field

  • global_args (GLOBALARGS) – global configuration

Build Hamiltonian of spin-1/2 coupled ladders

\[H = \sum_{i=(x,y)} h2_{i,i+\vec{x}} + \sum_{i=(x,2y)} h2_{i,i+\vec{y}} + \alpha \sum_{i=(x,2y+1)} h2_{i,i+\vec{y}} + (-1)^{x+y} B^z h1_{i}\]

on the square lattice. The spin-1/2 ladders are coupled with strength \(\alpha\):

y\x
   _:__:__:__:_
..._|__|__|__|_...
..._a__a__a__a_...
..._|__|__|__|_...
..._a__a__a__a_...
..._|__|__|__|_...
    :  :  :  :      (a = \alpha)

where

  • \(h2_{ij} = \mathbf{S}_i.\mathbf{S}_j\) with indices of h2 corresponding to \(s_i s_j;s'_i s'_j\)

  • \(h1_{i} = \mathbf{S}^z_i\) with indices of h1 corresponding to \(s_i ;s'_i\)

energy_2x1_1x2(state, env)[source]
Parameters:
  • state (IPEPS) – wavefunction

  • env (ENV) – CTM environment

Returns:

energy per site

Return type:

float

We assume iPEPS with 2x2 unit cell containing four tensors A, B, C, and D with simple PBC tiling:

A B A B
C D C D
A B A B
C D C D

Taking the reduced density matrix \(\rho_{2x1}\) (\(\rho_{1x2}\)) of 2x1 (1x2) cluster given by rdm.rdm2x1() (rdm.rdm1x2()) with indexing of sites as follows \(s_0,s_1;s'_0,s'_1\) for both types of density matrices:

rdm2x1   rdm1x2

s0--s1   s0
         |
         s1

and without assuming any symmetry on the indices of individual tensors a following set of terms has to be evaluated in order to compute energy-per-site:

   0       0       0
1--A--3 1--B--3 1--A--3
   2       2       2
   0       0       0
1--C--3 1--D--3 1--C--3
   2       2       2             A--3 1--B,      A  B  C  D
   0       0                     B--3 1--A,      2  2  2  2
1--A--3 1--B--3                  C--3 1--D,      0  0  0  0
   2       2             , terms D--3 1--C, and  C, D, A, B
eval_corrf_DD_H(coord, direction, state, env, dist, verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – tuple (x,y) specifying vertex on a square lattice

  • direction (tuple(int,int)) – orientation of correlation function

  • state (IPEPS) – wavefunction

  • env (ENV) – CTM environment

  • dist (int) – maximal distance of correlator

Returns:

dictionary with horizontal dimer-dimer correlation function

Return type:

dict(str: torch.Tensor)

Evaluate horizontal dimer-dimer correlation functions

\[\langle(\mathbf{S}(r+3).\mathbf{S}(r+2))(\mathbf{S}(1).\mathbf{S}(0))\rangle\]

up to r = dist in given direction. See ctm.generic.corrf.corrf_2sOH2sOH_E1().

eval_corrf_DD_V(coord, direction, state, env, dist, verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – tuple (x,y) specifying vertex on a square lattice

  • direction (tuple(int,int)) – orientation of correlation function

  • state (IPEPS) – wavefunction

  • env (ENV) – CTM environment

  • dist (int) – maximal distance of correlator

Returns:

dictionary with vertical dimer-dimer correlation function

Return type:

dict(str: torch.Tensor)

Evaluate vertical dimer-dimer correlation functions

\[\langle(\mathbf{S}(r+1,1).\mathbf{S}(r+1,0))(\mathbf{S}(0,1).\mathbf{S}(0,0))\rangle\]

up to r = dist in given direction. See ctm.generic.corrf.corrf_2sOV2sOV_E2().

eval_corrf_SS(coord, direction, state, env, dist)[source]
Parameters:
  • coord (tuple(int,int)) – reference site

  • direction (tuple(int,int)) –

  • state (IPEPS) – wavefunction

  • env (ENV) – CTM environment

  • dist (int) – maximal distance of correlator

Returns:

dictionary with full and spin-resolved spin-spin correlation functions

Return type:

dict(str: torch.Tensor)

Evaluate spin-spin correlation functions \(\langle\mathbf{S}(r).\mathbf{S}(0)\rangle\) up to r = dist in given direction. See ctm.generic.corrf.corrf_1sO1sO().

eval_obs(state, env)[source]
Parameters:
  • state (IPEPS) – wavefunction

  • env (ENV) – CTM environment

Returns:

expectation values of observables, labels of observables

Return type:

list[float], list[str]

Computes the following observables in order

  1. average magnetization over the unit cell,

  2. magnetization for each site in the unit cell

  3. \(\langle S^z \rangle,\ \langle S^+ \rangle,\ \langle S^- \rangle\) for each site in the unit cell

  4. \(\mathbf{S}_i.\mathbf{S}_j\) for all non-equivalent nearest neighbour bonds

where the on-site magnetization is defined as

\[\begin{split}\begin{align*} m &= \sqrt{ \langle S^z \rangle^2+\langle S^x \rangle^2+\langle S^y \rangle^2 } =\sqrt{\langle S^z \rangle^2+1/4(\langle S^+ \rangle+\langle S^- \rangle)^2 -1/4(\langle S^+\rangle-\langle S^-\rangle)^2} \\ &=\sqrt{\langle S^z \rangle^2 + 1/2\langle S^+ \rangle \langle S^- \rangle)} \end{align*}\end{split}\]

Usual spin components can be obtained through the following relations

\[\begin{split}\begin{align*} S^+ &=S^x+iS^y & S^x &= 1/2(S^+ + S^-)\\ S^- &=S^x-iS^y\ \Rightarrow\ & S^y &=-i/2(S^+ - S^-) \end{align*}\end{split}\]

Dense (YAST)

This implementation of SU(2)-symmetric model of coupled spin-1/2 ladders works with dense YAST tensors. In particular, the physical reduced density matrices, Hamiltonian terms, observables, etc. are dense YAST tensors. As such, their indices have signature.

Note

The underlying iPEPS wavefunction can make use of explicit internal symmetry and thus block-sparse tensors. After physical reduced density matrices are built from such iPEPS and its environment, they are converted to dense form (keeping signature information).

class models.abelian.coupledLadders.COUPLEDLADDERS_NOSYM(settings, alpha=0.0, Bz_val=0.0, global_args=<config.GLOBALARGS object>)[source]
Parameters:
  • alpha (float) – nearest-neighbour interaction

  • Bz_val – staggered magnetic field

  • global_args (GLOBALARGS) – global configuration

Build Hamiltonian of spin-1/2 coupled ladders

\[H = \sum_{i=(x,y)} h2_{i,i+\vec{x}} + \sum_{i=(x,2y)} h2_{i,i+\vec{y}} + \alpha \sum_{i=(x,2y+1)} h2_{i,i+\vec{y}} + (-1)^{x+y} Bz h1_{i}\]

on the square lattice. The spin-1/2 ladders are coupled with strength \(\alpha\):

y\x
   _:__:__:__:_
..._|__|__|__|_...
..._a__a__a__a_...
..._|__|__|__|_...
..._a__a__a__a_...
..._|__|__|__|_...
    :  :  :  :      (a = \alpha)

where

  • \(h2_{ij} = \mathbf{S}_i.\mathbf{S}_j\) with indices of h2 corresponding to \(s_i s_j;s'_i s'_j\)

  • \(h1_{i} = \mathbf{S}^z_i\) with indices of h1 corresponding to \(s_i ;s'_i\)

energy_2x1_1x2(state, env, **kwargs)[source]
Parameters:
Returns:

energy per site

Return type:

float

We assume iPEPS with 2x2 unit cell containing four tensors A, B, C, and D with simple PBC tiling:

A B A B
C D C D
A B A B
C D C D

Taking the reduced density matrix \(\rho_{2x1}\) (\(\rho_{1x2}\)) of 2x1 (1x2) cluster given by rdm.rdm2x1() (rdm.rdm1x2()) with indexing of sites as follows \(s_0,s_1;s'_0,s'_1\) for both types of density matrices:

rdm2x1   rdm1x2

s0--s1   s0
         |
         s1

The primed indices represent “bra”: \(\rho_{2x1} = \sum_{s_0 s_1;s'_0 s'_1} | s_0 s_1 \rangle \langle s'_0 s'_1|\) where the signature of primed indices is +1. Without assuming any symmetry on the indices of individual tensors a following set of terms has to be evaluated in order to compute energy-per-site:

   0       0       0
1--A--3 1--B--3 1--A--3
   2       2       2
   0       0       0
1--C--3 1--D--3 1--C--3
   2       2       2             A--3 1--B,      A  B  C  D
   0       0                     B--3 1--A,      2  2  2  2
1--A--3 1--B--3                  C--3 1--D,      0  0  0  0
   2       2             , terms D--3 1--C, and  C, D, A, B
eval_obs(state, env, **kwargs)[source]
Parameters:
Returns:

expectation values of observables, labels of observables

Return type:

list[float], list[str]

Computes the following observables in order

  1. average magnetization over the unit cell,

  2. magnetization for each site in the unit cell

  3. \(\langle S^z \rangle,\ \langle S^+ \rangle,\ \langle S^- \rangle\) for each site in the unit cell

  4. \(\mathbf{S}_i.\mathbf{S}_j\) for all non-equivalent nearest neighbour bonds

where the on-site magnetization is defined as

\[m = \sqrt{ \langle S^z \rangle^2+\langle S^x \rangle^2+\langle S^y \rangle^2 }\]

With explict U(1) symmetry

This implementation of SU(2)-symmetric model of coupled spin-1/2 ladders works with explicit U(1) abelian symmetry (subgroup). The physical reduced density matrices, Hamiltonian terms, observables, etc. have U(1) block-sparse structure.

class models.abelian.coupledLadders.COUPLEDLADDERS_U1(settings, alpha=0.0, Bz_val=0.0, global_args=<config.GLOBALARGS object>)[source]
Parameters:
  • settings (NamedTuple or SimpleNamespace (TODO link to definition)) – YAST configuration

  • alpha (float) – nearest-neighbour interaction

  • Bz_val (float) – transverse field

  • global_args (GLOBALARGS) – global configuration

Build Hamiltonian of spin-1/2 coupled ladders

\[H = \sum_{i=(x,y)} h2_{i,i+\vec{x}} + \sum_{i=(x,2y)} h2_{i,i+\vec{y}} + \alpha \sum_{i=(x,2y+1)} h2_{i,i+\vec{y}} + (-1)^{x+y} B_z h1_{i}\]

on a square lattice. The spin-1/2 ladders are coupled with strength \(\alpha\):

y\x
   _:__:__:__:_
..._|__|__|__|_...
..._a__a__a__a_...
..._|__|__|__|_...
..._a__a__a__a_...
..._|__|__|__|_...
    :  :  :  :      (a = \alpha)

where

  • \(h2_{ij} = \mathbf{S}_i.\mathbf{S}_j\) with indices of h2 corresponding to \(s_i s_j;s'_i s'_j\)

  • \(h1_{i} = \mathbf{S}^z_i\) with indices of h1 corresponding to \(s_i ;s'_i\)

energy_2x1_1x2(state, env, **kwargs)[source]
Parameters:
Returns:

energy per site

Return type:

float

We assume iPEPS with 2x2 unit cell containing four tensors A, B, C, and D with simple PBC tiling:

A B A B
C D C D
A B A B
C D C D

Taking the reduced density matrix \(\rho_{2x1}\) (\(\rho_{1x2}\)) of 2x1 (1x2) cluster given by rdm.rdm2x1() (rdm.rdm1x2()) with indexing of sites as follows \(s_0,s_1;s'_0,s'_1\) for both types of density matrices:

rdm2x1   rdm1x2

s0--s1   s0
         |
         s1

The \(\rho_{2x1} = \sum_{s_0 s_1;s'_0 s'_1} | s_0 s_1 \rangle \langle s'_0 s'_1|\) where the signature of primed indices (\(|bra\rangle\)) is +1. Without assuming any symmetry on the indices of individual tensors a following set of terms has to be evaluated in order to compute energy-per-site:

   0       0       0
1--A--3 1--B--3 1--A--3
   2       2       2
   0       0       0
1--C--3 1--D--3 1--C--3
   2       2       2             A--3 1--B,      A  B  C  D
   0       0                     B--3 1--A,      2  2  2  2
1--A--3 1--B--3                  C--3 1--D,      0  0  0  0
   2       2             , terms D--3 1--C, and  C, D, A, B
energy_2x1_1x2_H(state, env, **kwargs)[source]
Parameters:

Analogous to energy_2x1_1x2(), with ladders being weakly coupled in horizontal direction:

y\x
       _:_a_:__:_a_:__:
    ..._|_a_|__|_a_|__|...
    ..._|_a_|__|_a_|__|...
    ..._|_a_|__|_a_|__|...
    ..._|_a_|__|_a_|__|...
    ..._|_a_|__|_a_|__|...
        :   :  :   :  : (a = \alpha)
eval_obs(state, env, **kwargs)[source]
Parameters:
Returns:

expectation values of observables, labels of observables

Return type:

list[float], list[str]

Computes the following observables in order

  1. average magnetization over the unit cell,

  2. magnetization for each site in the unit cell

  3. \(\langle S^z \rangle,\ \langle S^+ \rangle,\ \langle S^- \rangle\) for each site in the unit cell

  4. \(\mathbf{S}_i.\mathbf{S}_j\) for all non-equivalent nearest neighbour bonds

where the on-site magnetization is defined as

\[m = \sqrt{ \langle S^z \rangle^2+\langle S^x \rangle^2+\langle S^y \rangle^2 }\]
gen_gate_seq_2S(t)[source]
Parameters:

t (float) – imaginary time step

Returns:

gate sequence

Return type:

list[tuple(tuple(tuple(int,int),tuple(int,int),tuple(int,int)), yast.Tensor)]

Generate a 2-site gate sequence \(exp(-t \vec{S}.\vec{S})\) for imaginary-time optimization. Each element of sequence has two parts: First, the placement of the gate encoded by (x,y) coords of the two sites and the vector from 1st to 2nd site: (x_1,y_1), (x_2-x_1, y_2-y_1), (x_2,y_2). Second, the 2-site gate Tensor.

The gate sequance generated:

        g[0]         g[2]
g[4]--(0,0)--g[5]--(1,0)--[g[4]]
        g[1]         g[3]
g[6]--(0,1)--g[7]--(1,1)--[g[6]]
       [g[0]]       [g[2]]

The g[0] and g[2] are the “weak” links, with \(\alpha \vec{S}.\vec{S}\) interaction, coupling the ladders. If self.Bz is non-zero, on-site gates with transverse field are added to the sequence.

gen_gate_seq_2S_2ndOrder(t)[source]
Parameters:

t (float) – imaginary time step

Returns:

gate sequence

Return type:

list[tuple(tuple(tuple(int,int),tuple(int,int),tuple(int,int)), yast.Tensor)]

Second-order Trotter gate sequence. This sequence can be generated from the result of gen_gate_seq_2S() by applying the gates in both direct and reverse order.

gen_gate_seq_2S_2ndOrder_H(t)[source]
Parameters:

t (float) – imaginary time step

Returns:

gate sequence

Return type:

list[tuple(tuple(tuple(int,int),tuple(int,int),tuple(int,int)), yast.Tensor)]

Second-order Trotter gate sequence. This sequence can be generated from the result of gen_gate_seq_2S_H() by applying the gates in both direct and reverse order.

gen_gate_seq_2S_H(t)[source]
Parameters:

t (float) – imaginary time step

Returns:

gate sequence

Return type:

list[tuple(tuple(tuple(int,int),tuple(int,int),tuple(int,int)), Tensor)]

Analogous to gen_gate_seq_2S(), with ladders being weakly coupled in horizontal direction.

The g[5] and g[7] are the “weak” links, with \(\alpha\vec{S}.\vec{S}\) interaction coupling the ladders.

gen_gate_seq_2S_SS_hz(t)[source]
Parameters:

t (float) – imaginary time step

Returns:

gate sequence

Return type:

list[tuple(tuple(tuple(int,int),tuple(int,int),tuple(int,int)), yast.Tensor)]

Generate a 2-site gate sequence \(exp(-t (\vec{S}_i.\vec{S}_j + \sum_{r=i,j}(-1)^{x_r+y_r} B_z S^z_r))\) for imaginary-time optimization. Each element of sequence has two parts: First, the placement of the gate encoded by (x,y) coords of the two sites and the vector from 1st to 2nd site: (x_1,y_1), (x_2-x_1, y_2-y_1), (x_2,y_2). Second, the 2-site gate Tensor.

The gate sequance generated:

        g[0]         g[2]
g[4]--(0,0)--g[5]--(1,0)--[g[4]]
        g[1]         g[3]
g[6]--(0,1)--g[7]--(1,1)--[g[6]]
       [g[0]]       [g[2]]

The g[0] and g[2] are the “weak” links, with \(\alpha \vec{S}.\vec{S}\) interaction, coupling the ladders.

gen_gate_seq_2S_SS_hz_2ndOrder(t)[source]
Parameters:

t (float) – imaginary time step

Returns:

gate sequence

Return type:

list[tuple(tuple(tuple(int,int),tuple(int,int),tuple(int,int)), yast.Tensor)]

Second-order Trotter gate sequence. This sequence can be generated from the result of gen_gate_seq_2S_SS_hz() by applying the gates in both direct and reverse order.