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:
- 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:
- 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. Seectm.generic.corrf.corrf_2sOH2sOH_E1()
.
- eval_corrf_DD_V(coord, direction, state, env, 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
in given direction. Seectm.generic.corrf.corrf_2sOV2sOV_E2()
.
- 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
\(\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:
state (IPEPS_ABELIAN) – wavefunction
env (ENV_ABELIAN) – 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
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:
state (IPEPS_ABELIAN) – wavefunction
env (ENV_ABELIAN) – CTM environment
- 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
\(\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:
state (IPEPS_ABELIAN) – wavefunction
env (ENV_ABELIAN) – 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
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:
state (IPEPS_ABELIAN) – wavefunction
env (ENV_ABELIAN) – CTM environment
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:
state (IPEPS_ABELIAN) – wavefunction
env (ENV_ABELIAN) – CTM environment
- 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
\(\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.