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:

  • W is the random-field disorder strength,
  • if fields is not passed, h_i are sampled uniformly from [field - W, field + W],
  • boundary can be :periodic or :open,
  • use_sparse=true is 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 :periodic or :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: if true, 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.