J1-J2
The spin-1/2 J1-J2 chain is available from the common Polfed.Models namespace through j1j2_hamiltonian.
using Polfed.Models: j1j2_hamiltonian
H = j1j2_hamiltonian(L, Lup, J1, J2, Delta1, Delta2, W; kwargs...)For the full Julia constructor signature, argument types, keyword meanings, and return types, see Models, in particular j1j2_hamiltonian.
Model Definition
The Hamiltonian is
\[H = J_1 \sum_{i=1}^{L} \left( S_i^x S_{i+1}^x + S_i^y S_{i+1}^y + \Delta_1 S_i^z S_{i+1}^z \right) + J_2 \sum_{i=1}^{L} \left( S_i^x S_{i+2}^x + S_i^y S_{i+2}^y + \Delta_2 S_i^z S_{i+2}^z \right) + \sum_{i=1}^{L} h_i S_i^z.\]
As with xxz_hamiltonian, the constructor is fixed to spin-1/2 chains and uses Lup as the number of spin-up sites in the selected sector. The total magnetization is $S_z = Lup - L/2$.
The disorder and boundary conventions are the same as for the XXZ model:
Wis the random-field disorder strength,- if
fieldsis not passed,h_iare sampled uniformly from[field - W, field + W], boundarycan be:periodicor:open,use_sparse=trueis usually the right choice for POLFED workflows.
Parameters
L: chain length.Lup: number of spin-up sites in the fixed spin-1/2 sector.J1: nearest-neighbor exchange scale.J2: next-nearest-neighbor exchange scale.Delta1: nearest-neighbor Ising anisotropy.Delta2: next-nearest-neighbor Ising anisotropy.W: disorder width for longitudinal fields.boundary: either:periodicor:open.field: center of the disorder window.fields: explicit field realization. When passed, it is used directly.rng: random-number generator used when disorder is sampled internally.use_sparse: iftrue, return a sparse matrix; otherwise return a dense matrix.
Basic Example
using Polfed
using Polfed.Models: j1j2_hamiltonian
using LinearAlgebra
using Random
rng = MersenneTwister(1234)
# constructing the Hamiltonian
L = 16
Lup = L ÷ 2
J1 = 1.0
J2 = 0.5
Delta1 = 1.0
Delta2 = 1.0
W = 0.5
H = j1j2_hamiltonian(
L,
Lup,
J1,
J2,
Delta1,
Delta2,
W;
boundary=:periodic,
rng=rng,
use_sparse=true,
)
# generating a random initial state
x0 = rand(rng, size(H, 1))
x0 ./= norm(x0)
# setting POLFED parameters
howmany = 40
target = :middle
vals, vecs = polfed(H, x0, howmany, target)For many practical studies, the J1-J2 model is handled exactly like any other matrix input to polfed: construct H, choose x0, howmany, and target, then run the solver.
For the detailed Julia constructor reference, see Models.
This page was generated using Literate.jl.