pub struct IsingModel {
pub dim: usize,
pub lx: usize,
pub ly: usize,
pub j_coupling: f64,
pub field: f64,
pub spins: Vec<i8>,
}Expand description
Ising model on a 1D or 2D lattice with Metropolis Monte Carlo.
Spins are stored as i8 values ±1. The Hamiltonian is
H = -J Σ_{⟨i,j⟩} s_i s_j - h Σ_i s_i.
Fields§
§dim: usizeLattice dimension (1 or 2).
lx: usizeNumber of sites along each axis (Lx for 1D; Lx × Ly for 2D).
ly: usizeNumber of sites along y-axis (only used for 2D; 1 for 1D).
j_coupling: f64Coupling constant J (J > 0 → ferromagnetic).
field: f64External magnetic field h.
spins: Vec<i8>Spin configuration: +1 or -1.
Implementations§
Source§impl IsingModel
impl IsingModel
Sourcepub fn new_1d(n: usize, j_coupling: f64, field: f64) -> Self
pub fn new_1d(n: usize, j_coupling: f64, field: f64) -> Self
Constructs a 1D Ising model with n sites, all spins +1.
Sourcepub fn new_2d(lx: usize, ly: usize, j_coupling: f64, field: f64) -> Self
pub fn new_2d(lx: usize, ly: usize, j_coupling: f64, field: f64) -> Self
Constructs a 2D Ising model (lx × ly lattice) with all spins +1.
Sourcepub fn magnetisation(&self) -> f64
pub fn magnetisation(&self) -> f64
Returns the magnetisation per spin m = (1/N) Σ_i s_i.
Sourcepub fn metropolis_sweep(&mut self, n_sweeps: usize, temperature: f64, seed: u64)
pub fn metropolis_sweep(&mut self, n_sweeps: usize, temperature: f64, seed: u64)
Runs n_sweeps full Metropolis sweeps at temperature temperature.
Each sweep attempts one flip per spin.
Sourcepub fn susceptibility(
&mut self,
temperature: f64,
n_eq: usize,
n_samples: usize,
seed: u64,
) -> f64
pub fn susceptibility( &mut self, temperature: f64, n_eq: usize, n_samples: usize, seed: u64, ) -> f64
Returns the magnetic susceptibility χ = (⟨m²⟩ - ⟨m⟩²) N / T
estimated over n_samples post-equilibration sweeps.
Sourcepub fn critical_temperature_1d_approx(&self) -> f64
pub fn critical_temperature_1d_approx(&self) -> f64
Exact 1D critical temperature (returns J for reference; true T_c → 0 in 1D).
Sourcepub fn mean_field_tc_2d(&self) -> f64
pub fn mean_field_tc_2d(&self) -> f64
Mean-field critical temperature for the 2D Ising model: T_c ≈ z J / (2 k_B). For a 2D square lattice z = 4.
Sourcepub fn onsager_tc(&self) -> f64
pub fn onsager_tc(&self) -> f64
Exact Onsager critical temperature for the 2D square-lattice Ising model. T_c = 2J / ln(1 + √2).
Trait Implementations§
Source§impl Clone for IsingModel
impl Clone for IsingModel
Source§fn clone(&self) -> IsingModel
fn clone(&self) -> IsingModel
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for IsingModel
impl RefUnwindSafe for IsingModel
impl Send for IsingModel
impl Sync for IsingModel
impl Unpin for IsingModel
impl UnsafeUnpin for IsingModel
impl UnwindSafe for IsingModel
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.