Skip to main content

Crate spin_sim

Crate spin_sim 

Source
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

MoveFunction
Metropolis / Gibbs sweeprun_sweep_loop (sweep_mode)
Wolff / Swendsen-Wangrun_sweep_loop (cluster_update)
Parallel temperingrun_sweep_loop (pt_interval)
Houdayer / pairN / Jörg / CMR / permN / gpermN / replica Monte Carlorun_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;

Modules§

config
geometry
simulation
spins
statistics