# J1-J2-J3 and J1-J2-lambda Heisenberg Model¶

## from 2x1 to 4x2 unit cell (PyTorch)¶

J1-J2 model defined on iPEPS with extended unit cell using dense PyTorch tensors.

class models.j1j2.J1J2(j1=1.0, j2=0, global_args=<config.GLOBALARGS object>)[source]
Parameters
• j1 (float) – nearest-neighbour interaction

• j2 (float) – next nearest-neighbour interaction

• global_args (GLOBALARGS) – global configuration

Build Spin-1/2 $$J_1-J_2$$ Hamiltonian

$H = J_1\sum_{<i,j>} \mathbf{S}_i.\mathbf{S}_j + J_2\sum_{<<i,j>>} \mathbf{S}_i.\mathbf{S}_j$

on the square lattice. Where the first sum runs over the pairs of sites i,j which are nearest-neighbours (denoted as <.,.>), and the second sum runs over pairs of sites i,j which are next nearest-neighbours (denoted as <<.,.>>)

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

• env (ENV) – CTM environment

Returns

energy per site

Return type

float

We assume 1x1 iPEPS which tiles the lattice with a bipartite pattern composed of two tensors A, and B=RA, where R appropriately rotates the physical Hilbert space of tensor A on every “odd” site:

1x1 C4v => rotation R => BIPARTITE

A A A A                  A B A B
A A A A                  B A B A
A A A A                  A B A B
A A A A                  B A B A


A single reduced density matrix ctm.rdm.rdm2x2() of a 2x2 plaquette is used to evaluate the energy.

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

• env (ENV) – CTM environment

Returns

energy per site

Return type

float

We assume iPEPS with 2x1 unit cell containing two tensors A, B. We can tile the square lattice in two ways:

BIPARTITE           STRIPE

A B A B             A B A B
B A B A             A B A B
A B A B             A B A B
B A B A             A B A B


Taking reduced density matrix $$\rho_{2x2}$$ of 2x2 cluster with indexing of sites as follows $$\rho_{2x2}(s_0,s_1,s_2,s_3;s'_0,s'_1,s'_2,s'_3)$$:

s0--s1
|   |
s2--s3


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

   0
1--A--3
2

Ex.1 unit cell A B, with BIPARTITE tiling

A3--1B, B3--1A, A, B, A3  , B3  ,   1A,   1B
2  0   \     \      /     /
0  2    \     \    /     /
B  A    1A    1B  A3    B3

Ex.2 unit cell A B, with STRIPE tiling

A3--1A, B3--1B, A, B, A3  , B3  ,   1A,   1B
2  0   \     \      /     /
0  2    \     \    /     /
A  B    1B    1A  B3    A3

energy_2x2_4site(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_{2x2}$$ of 2x2 cluster given by ctm.generic.rdm.rdm2x2() with indexing of sites as follows $$\rho_{2x2}(s_0,s_1,s_2,s_3;s'_0,s'_1,s'_2,s'_3)$$:

s0--s1
|   |
s2--s3


and without assuming any symmetry on the indices of the individual tensors a set of four $$\rho_{2x2}$$’s are needed over which $$h2$$ operators for the nearest and next-neaerest neighbour pairs are evaluated:

A3--1B   B3--1A   C3--1D   D3--1C
2    2   2    2   2    2   2    2
0    0   0    0   0    0   0    0
C3--1D & D3--1C & A3--1B & B3--1A

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

• env (ENV) – CTM environment

Returns

energy per site

Return type

float

We assume iPEPS with 4x2 unit cell containing eight tensors A, B, C, D, E, F, G, H with PBC tiling + SHIFT:

  A B E F
C D G H
A B E F
C D G H


Taking the reduced density matrix $$\rho_{2x2}$$ of 2x2 cluster given by ctm.generic.rdm.rdm2x2() with indexing of sites as follows $$\rho_{2x2}(s_0,s_1,s_2,s_3;s'_0,s'_1,s'_2,s'_3)$$:

s0--s1
|   |
s2--s3


and without assuming any symmetry on the indices of the individual tensors a set of eight $$\rho_{2x2}$$’s are needed over which $$h2$$ operators for the nearest and next-neaerest neighbour pairs are evaluated:

A3--1B   B3--1E   E3--1F   F3--1A
2    2   2    2   2    2   2    2
0    0   0    0   0    0   0    0
C3--1D & D3--1G & G3--1H & H3--1C

C3--1D   D3--1G   G3--1H   H3--1C
2    2   2    2   2    2   2    2
0    0   0    0   0    0   0    0
B3--1E & E3--1F & F3--1A & A3--1B

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

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 }$
eval_obs_1site_BP(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]

Evaluates observables for single-site ansatz by including the sublattice rotation in the physical space.

## from 2x1 to 4x2 unit cell (dense YAST)¶

J1-J2 model defined on ipeps.ipeps_abelian.IPEPS_ABELIAN with extended unit cell

This implementation of SU(2)-symmetric J1-J2 model 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).

## 1x1 C4v (PyTorch)¶

Single-site C4v symmetric IPEPS_C4V supports J1-J2-J3 model and J1-J2-lambda model. This implementation works with dense PyTorch tensors.

class models.j1j2.J1J2_C4V_BIPARTITE(j1=1.0, j2=0, j3=0, hz_stag=0.0, delta_zz=1.0, global_args=<config.GLOBALARGS object>)[source]
Parameters
• j1 (float) – nearest-neighbour interaction

• j2 (float) – next nearest-neighbour interaction

• j3 (float) – next-to-next nearest-neighbour interaction

• hz_stag (float) – staggered magnetic field

• delta_zz – easy-axis (nearest-neighbour) anisotropy

• global_args (GLOBALARGS) – global configuration

Build Spin-1/2 $$J_1-J_2-J_3$$ Hamiltonian

$H = J_1\sum_{<i,j>} \mathbf{S}_i.\mathbf{S}_j + J_2\sum_{<<i,j>>} \mathbf{S}_i.\mathbf{S}_j + J_3\sum_{<<<i,j>>>} \mathbf{S}_i.\mathbf{S}_j$

on the square lattice. Where the first sum runs over the pairs of sites i,j which are nearest-neighbours (denoted as <.,.>), the second sum runs over pairs of sites i,j which are next nearest-neighbours (denoted as <<.,.>>), and the last sum runs over pairs of sites i,j which are next-to-next nearest-neighbours (denoted as <<<.,.>>>).

energy_1x1(state, env_c4v, **kwargs)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

Returns

energy per site

Return type

float

We assume 1x1 C4v iPEPS which tiles the lattice with a bipartite pattern composed of two tensors A, and B=RA, where R appropriately rotates the physical Hilbert space of tensor A on every “odd” site:

1x1 C4v => rotation R => BIPARTITE
A A A A                  A B A B
A A A A                  B A B A
A A A A                  A B A B
A A A A                  B A B A


Due to C4v symmetry it is enough to construct just one or two different reduced density matrices to evaluate energy per site.

In the case of $$J_3=0$$, it is sufficient to only consider ctm.one_site_c4v.rdm_c4v.rdm2x2() of a 2x2 plaquette. Afterwards, the energy per site e is computed by evaluating a plaquette term $$h_p$$ containing two nearest-nighbour terms $$\bf{S}.\bf{S}$$ and two next-nearest neighbour $$\bf{S}.\bf{S}$$, as:

$e = \langle \mathcal{h_p} \rangle = Tr(\rho_{2x2} \mathcal{h_p})$

If $$J_3 \neq 0$$, additional reduced density matrix ctm.one_site_c4v.rdm_c4v.rdm3x1() is constructed to evaluate next-to-next nearest neighbour interaction.

energy_1x1_lowmem(state, env_c4v, force_cpu=False)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

• force_cpu (bool) – perform computation on CPU

Returns

energy per site

Return type

float

Analogous to energy_1x1(). However, the evaluation of energy is realized by individually constructing low-memory versions of reduced density matrices for nearest (NN), next-nearest (NNN), and next-to-next nearest neighbours (NNNN). In particular:

energy_1x1_tiled(state, env_c4v, force_cpu=False)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

• force_cpu (bool) – perform computation on CPU

Returns

energy per site

Return type

float

Analogous to energy_1x1(). However, the evaluation of energy is realized by individually constructing low-memory tiled versions of reduced density matrices for nearest (NN), next-nearest (NNN), and next-to-next nearest neighbours (NNNN). In particular:

• NN: ctm.one_site_c4v.rdm_c4v_specialized.rdm2x2_NN_tiled()

• NNN: ctm.one_site_c4v.rdm_c4v_specialized.rdm2x2_NNN_tiled()

eval_corrf_DD_H(state, env_c4v, dist, verbosity=0)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric 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 .

eval_corrf_DD_V(state, env_c4v, dist, verbosity=0)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric 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 .

eval_corrf_SS(state, env_c4v, dist, canonical=False)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

• dist (int) – maximal distance of correlator

• canonical (bool) – decompose correlations wrt. to vector of spontaneous magnetization into longitudinal and transverse parts

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 .

eval_obs(state, env_c4v, force_cpu=False)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

Returns

expectation values of observables, labels of observables

Return type

list[float], list[str]

Computes the following observables in order

1. magnetization

2. $$\langle S^z \rangle,\ \langle S^+ \rangle,\ \langle S^- \rangle$$

3. $$\langle S.S \rangle_{NN}$$, (optionally) $$\langle S.S \rangle_{NNNN}$$

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 }$
class models.j1j2lambda.J1J2LAMBDA_C4V_BIPARTITE(j1=1.0, j2=0, j3=0, hz_stag=0.0, delta_zz=1.0, lmbd=0, global_args=<config.GLOBALARGS object>)[source]
Parameters
• j1 (float) – nearest-neighbour interaction

• j2 (float) – next nearest-neighbour interaction

• j3 (float) – next-to-next nearest-neighbour interaction

• hz_stag (float) – staggered magnetic field

• delta_zz – easy-axis (nearest-neighbour) anisotropy

• lmbd (float) – chiral 4-site (plaquette) interaction

• global_args (GLOBALARGS) – global configuration

Build Spin-1/2 $$J_1-J_2-J_3-\lambda$$ Hamiltonian

$H = J_1\sum_{<i,j>} \mathbf{S}_i.\mathbf{S}_j + J_2\sum_{<<i,j>>} \mathbf{S}_i.\mathbf{S}_j + J_3\sum_{<<<i,j>>>} \mathbf{S}_i.\mathbf{S}_j + i\lambda \sum_p P_p - P^{-1}_p$

on the square lattice. Where the first sum runs over the pairs of sites i,j which are nearest-neighbours (denoted as <.,.>), the second sum runs over pairs of sites i,j which are next nearest-neighbours (denoted as <<.,.>>), and the last sum runs over pairs of sites i,j which are next-to-next nearest-neighbours (denoted as <<<.,.>>>). Running over all plaquettes p, the chiral term P permutes spins on the plaquette in clockwise order and its inverse P^{-1} in anti-clockwise order.

energy_1x1(state, env_c4v, force_cpu=False, **kwargs)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

• force_cpu (bool) – perform computation on CPU

Returns

energy per site

Return type

float

eval_corrf_DD_H(state, env_c4v, dist, verbosity=0)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

• dist (int) – maximal distance of correlator

Returns

dictionary with horizontal dimer-dimer correlation function

Return type

dict(str: torch.Tensor)

eval_corrf_DD_V(state, env_c4v, dist, verbosity=0)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

• dist (int) – maximal distance of correlator

Returns

dictionary with vertical dimer-dimer correlation function

Return type

dict(str: torch.Tensor)

eval_corrf_SS(state, env_c4v, dist, canonical=False, rl_0=None)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

• dist (int) – maximal distance of correlator

• canonical (bool) – decompose correlations wrt. to vector of spontaneous magnetization into longitudinal and transverse parts

Returns

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

Return type

dict(str: torch.Tensor)

eval_obs(state, env_c4v, force_cpu=False)[source]
Parameters
• state (IPEPS_C4V) – wavefunction

• env_c4v (ENV_C4V) – CTM c4v symmetric environment

Returns

expectation values of observables, labels of observables

Return type

list[float], list[str]

Computes the following observables in order

1. magnetization

2. $$\langle S^z \rangle,\ \langle S^+ \rangle,\ \langle S^- \rangle$$

3. $$\langle S.S \rangle_{NN}$$, (optionally) $$\langle S.S \rangle_{NNNN}$$

4. (optionally) $$\langle P - P^{-1} \rangle$$

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}

## 1x1 C4v (dense YAST)¶

Single-site C4v symmetric ipeps.ipeps_abelian_c4v.IPEPS_ABELIAN_C4V supports J1-J2 model.

This implementation of SU(2)-symmetric J1-J2 model 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).