Expand description
Pure-Rust Ising and XY Monte Carlo on periodic lattices.
XY uses XySimulation and XyConfig with signed couplings, vector spins,
physical moments and the shared scheduling, cluster and tempering engine.
§Algorithms
| Move | Function |
|---|---|
| Metropolis / Gibbs sweep | run_sweep_loop (sweep_mode) |
| Wolff / Swendsen-Wang | run_sweep_loop (cluster_update) |
| Parallel tempering | run_sweep_loop (pt_interval) |
| Houdayer / pairN / Jörg / CMR / permN / gpermN / replica Monte Carlo | run_sweep_loop (overlap_cluster) |
Replicas are parallelized over threads with rayon.
Multiple disorder realizations can be run in parallel with run_sweep_parallel.
§Quick start
use spin_sim::config::*;
use spin_sim::{Lattice, Realization, run_sweep_loop};
let lattice = Lattice::new(vec![16, 16]);
let n_spins = lattice.n_spins;
let n_neighbors = lattice.n_neighbors;
let temps = vec![2.0, 2.27, 2.5];
// Uniform ferromagnetic couplings
let couplings = vec![1.0f32; n_spins * n_neighbors];
let mut real = Realization::new(&lattice, couplings, &temps, 2, 42);
let config = SimConfig {
n_sweeps: 5000,
warmup_sweeps: 1000,
sweep_mode: SweepMode::Metropolis,
cluster_update: Some(ClusterConfig {
interval: 1,
mode: ClusterMode::Wolff,
action: ClusterAction::Update,
collect_stats: false,
}),
pt_interval: Some(1),
pt_schedule: PtSchedule::SingleRandomEdge,
overlap_cluster: None,
autocorrelation_max_lag: None,
autocorrelation_backend: AutocorrelationBackend::Ring,
sequential: false,
equilibration_diagnostic: false,
conditional_link_overlap: true,
};
use std::sync::atomic::AtomicBool;
let interrupted = AtomicBool::new(false);
let result = run_sweep_loop(
&lattice, &mut real, 2, temps.len(), &config, &interrupted, &|| {}, 0,
).unwrap();For a Python interface, see the peapods package.
Re-exports§
pub use geometry::Lattice;pub use simulation::run_sweep_loop;pub use simulation::run_sweep_parallel;pub use simulation::Realization;pub use statistics::ClusterObservations;pub use statistics::ClusterSnapshot;pub use statistics::ClusterStats;pub use statistics::Diagnostics;pub use statistics::EquilCheckpoint;pub use statistics::GraphObservationSummary;pub use statistics::SweepResult;pub use simulation::realization::ModelRealization;pub use simulation::realization::XyRealization;pub use simulation::xy::XyConfig;pub use simulation::xy::XyResult;pub use simulation::xy::XySimulation;