Spin-based Hamiltonians#

This section covers Hamiltonians used to describe spin systems in quantum mechanics.

  • Heisenberg Model: Models spin interactions with exchange coupling.

  • Ising Model: A simplified version where only Z-axis interactions matter.

  • Richardson-Gaudin Model: Used in exactly solvable quantum many-body problems.


Heisenberg Hamiltonian#

The XXZ Heisenberg Model describes quantum spin interactions between sites.

class HamHeisenberg(mu: ndarray, J_eq: ndarray, J_ax: ndarray, connectivity: ndarray | None = None)#

XXZ Heisenberg Hamiltonian.

__init__(mu: ndarray, J_eq: ndarray, J_ax: ndarray, connectivity: ndarray | None = None)#

Initialize XXZ Heisenberg Hamiltonian.

Parameters:
  • mu (np.ndarray) – Zeeman term

  • J_eq (np.ndarray) – J equatorial term

  • J_ax (np.ndarray) – J axial term

  • connectivity (np.ndarray) – symmetric numpy array that specifies the connectivity between sites

Notes

The form of the Hamiltonian is given by:

\[\hat{H}_{X X Z}=\sum_p\left(\mu_p^Z-J_{p p}^{\mathrm{eq}}\right) S_p^Z+\sum_{p q} J_{p q}^{\mathrm{ax}} S_p^Z S_q^Z+\sum_{p q} J_{p q}^{\mathrm{eq}} S_p^{+} S_q^{-}\]
generate_one_body_integral(dense: bool, basis='spinorbital basis')#

Generate one body integral.

Parameters:
  • dense (bool)

  • basis (str)

Return type:

scipy.sparse.csr_matrix or np.ndarray

generate_two_body_integral(sym=1, dense=False, basis='spinorbital basis')#

Generate two body integral in spatial or spinorbital basis.

Parameters:
  • basis (str) – [‘spinorbital basis’, ‘spatial basis’]

  • dense (bool) – dense or sparse matrix; default False

  • sym (int) – symmetry – [2, 4, 8] default is 1

Return type:

scipy.sparse.csr_matrix or np.ndarray

generate_zero_body_integral()#

Generate zero body term.

Returns:

zero_energy

Return type:

float

Example Usage: This example initializes a 3-site Heisenberg Hamiltonian with specified interaction terms and prints the one-body integral matrix.

from moha import HamHeisenberg
import numpy as np

# Define spin interaction parameters
mu = np.array([0.1, 0.2, 0.3])
J_eq = np.array([
    [1.0, 0.5, 0.3],
    [0.5, 1.0, 0.5],
    [0.3, 0.5, 1.0]
])
J_ax = np.array([
    [0.5, 0.2, 0.1],
    [0.2, 0.5, 0.2],
    [0.1, 0.2, 0.5]
])

# Create Heisenberg model instance
H = HamHeisenberg(mu=mu, J_eq=J_eq, J_ax=J_ax)

# Print the one-body integral matrix
print("One-body Integral Matrix:\n", H.generate_one_body_integral(dense=True))

Ising Hamiltonian#

The Ising Model is a simplified case of the Heisenberg model with only axial interactions.

class HamIsing(mu: ndarray, J_ax: ndarray, connectivity: ndarray | None = None)#

Ising Hamiltonian.

__init__(mu: ndarray, J_ax: ndarray, connectivity: ndarray | None = None)#

Initialize XXZ Heisenberg Hamiltonian.

Parameters:
  • mu (np.ndarray) – Zeeman term

  • J_ax (np.ndarray) – J axial term

  • connectivity (np.ndarray) – symmetric numpy array that specifies the connectivity between sites

Notes

The form of the Hamiltonian is given by:

\[\hat{H}_{Ising}=\sum_p\mu_p^Z S_p^Z+\sum_{p q} J_{p q}^{\mathrm{ax}} S_p^Z S_q^Z\]

Example Usage: This example initializes a 3-site Ising Hamiltonian and prints the one-body integral matrix.

from moha import HamIsing
import numpy as np

# Define spin interaction parameters
mu = np.array([0.1, 0.2, 0.3])
J_ax = np.array([
    [1.0, 0.5, 0.2],
    [0.5, 1.0, 0.5],
    [0.2, 0.5, 1.0]
])

# Create Ising model instance
H = HamIsing(mu=mu, J_ax=J_ax)

# Print the one-body integral matrix
print("One-body Integral Matrix:\n", H.generate_one_body_integral(dense=True))

Richardson-Gaudin Hamiltonian#

The Richardson-Gaudin Model is an exactly solvable quantum many-body system.

class HamRG(mu: ndarray, J_eq: ndarray, connectivity: ndarray | None = None)#

Richardson-Gaudin Hamiltonian.

__init__(mu: ndarray, J_eq: ndarray, connectivity: ndarray | None = None)#

Initialize XXZ Heisenberg Hamiltonian.

Parameters:
  • mu (np.ndarray) – Zeeman term

  • J_eq (np.ndarray) – J equatorial term

  • connectivity (np.ndarray)

Notes

The form of the Hamiltonian is given by:

\[\hat{H}_{RG}=\sum_p\left(\mu_p^Z-J_{p p}^{\mathrm{eq}}\right) S_p^Z+\sum_{p q} J_{p q}^{\mathrm{eq}} S_p^{+} S_q^{-}\]

Example Usage: This example initializes a 3-site Richardson-Gaudin Hamiltonian and prints the one-body integral matrix.

from moha import HamRG
import numpy as np

# Define interaction parameters
mu = np.array([0.1, 0.2, 0.3])
J_eq = np.array([
    [0.5, 0.3, 0.2],
    [0.3, 0.5, 0.3],
    [0.2, 0.3, 0.5]
])

# Create Richardson-Gaudin model instance
H = HamRG(mu=mu, J_eq=J_eq)

# Print the one-body integral matrix
print("One-body Integral Matrix:\n", H.generate_one_body_integral(dense=True))