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
- 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
- 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
- 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
- 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
- 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. Seectm.generic.corrf.corrf_1sO1sO()
.
- eval_obs(state, env)[source]¶
- Parameters
- Returns
expectation values of observables, labels of observables
- Return type
list[float], list[str]
Computes the following observables in order
average magnetization over the unit cell,
magnetization for each site in the unit cell
\(\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 }\]
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
- 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
- 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
- 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
- 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
- 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
- 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
- Returns
expectation values of observables, labels of observables
- Return type
list[float], list[str]
Computes the following observables in order
magnetization
\(\langle S^z \rangle,\ \langle S^+ \rangle,\ \langle S^- \rangle\)
\(\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
- Returns
energy per site
- Return type
float
Analogous to
models.j1j2.J1J2_C4V_BIPARTITE.energy_1x1()
.
- eval_corrf_DD_H(state, env_c4v, dist, verbosity=0)[source]¶
- Parameters
- Returns
dictionary with horizontal dimer-dimer correlation function
- Return type
dict(str: torch.Tensor)
Identical to
models.j1j2.J1J2_C4V_BIPARTITE.eval_corrf_DD_H()
.
- eval_corrf_DD_V(state, env_c4v, dist, verbosity=0)[source]¶
- Parameters
- Returns
dictionary with vertical dimer-dimer correlation function
- Return type
dict(str: torch.Tensor)
Identical to
models.j1j2.J1J2_C4V_BIPARTITE.eval_corrf_DD_V()
.
- eval_corrf_SS(state, env_c4v, dist, canonical=False, rl_0=None)[source]¶
- Parameters
- Returns
dictionary with full and spin-resolved spin-spin correlation functions
- Return type
dict(str: torch.Tensor)
Identical to
models.j1j2.J1J2_C4V_BIPARTITE.eval_corrf_SS()
.
- eval_obs(state, env_c4v, force_cpu=False)[source]¶
- Parameters
- Returns
expectation values of observables, labels of observables
- Return type
list[float], list[str]
Computes the following observables in order
magnetization
\(\langle S^z \rangle,\ \langle S^+ \rangle,\ \langle S^- \rangle\)
\(\langle S.S \rangle_{NN}\), (optionally) \(\langle S.S \rangle_{NNNN}\)
(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).