qmc 2.2.2

Quantum Monte Carlo simulations in Rust
Documentation
extern crate rand;
use qmc::sse::qmc_traits::*;
use qmc::sse::simple_ops::*;
use smallvec::smallvec;

#[test]
fn single_cluster_test() {
    let mut manager = SimpleOpDiagonal::new(1);
    manager.set_pth(
        0,
        Some(SimpleOp::offdiagonal(
            smallvec![0],
            0,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );
    let mut manager: SimpleOpLooper = manager.into();

    let mut rng = rand::thread_rng();
    let mut state = vec![false; manager.get_nvars()];
    manager.flip_each_cluster_rng(0.5, &mut rng, &mut state);
    println!("{:?}", state);
}

#[test]
fn simple_cluster_test() {
    let mut manager = SimpleOpDiagonal::new(1);
    manager.set_pth(
        0,
        Some(SimpleOp::offdiagonal(
            smallvec![0],
            0,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );
    manager.set_pth(
        1,
        Some(SimpleOp::offdiagonal(
            smallvec![0],
            1,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );
    let mut manager: SimpleOpLooper = manager.into();

    let mut rng = rand::thread_rng();
    let mut state = vec![false; manager.get_nvars()];
    manager.flip_each_cluster_rng(0.5, &mut rng, &mut state);
    println!("{:?}", state);
}

#[test]
fn multi_cluster_test() {
    let mut manager = SimpleOpDiagonal::new(2);
    manager.set_pth(
        0,
        Some(SimpleOp::offdiagonal(
            smallvec![0],
            0,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );
    manager.set_pth(
        1,
        Some(SimpleOp::offdiagonal(
            smallvec![0],
            1,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );

    manager.set_pth(
        2,
        Some(SimpleOp::offdiagonal(
            smallvec![1],
            2,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );
    manager.set_pth(
        3,
        Some(SimpleOp::offdiagonal(
            smallvec![1],
            3,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );

    let mut manager: SimpleOpLooper = manager.into();

    let mut rng = rand::thread_rng();
    let mut state = vec![false; manager.get_nvars()];
    manager.flip_each_cluster_rng(0.5, &mut rng, &mut state);
    println!("{:?}", state);
}

#[test]
fn multi_twosite_cluster_test() {
    let mut manager = SimpleOpDiagonal::new(4);
    manager.set_pth(
        0,
        Some(SimpleOp::offdiagonal(
            smallvec![0],
            0,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );
    manager.set_pth(
        1,
        Some(SimpleOp::offdiagonal(
            smallvec![0],
            1,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );

    manager.set_pth(
        2,
        Some(SimpleOp::offdiagonal(
            smallvec![1, 2],
            2,
            smallvec![false, false],
            smallvec![false, false],
            false,
        )),
    );
    manager.set_pth(
        3,
        Some(SimpleOp::offdiagonal(
            smallvec![2, 3],
            3,
            smallvec![false, false],
            smallvec![false, false],
            false,
        )),
    );

    let mut manager: SimpleOpLooper = manager.into();

    let mut rng = rand::thread_rng();
    let mut state = vec![false; manager.get_nvars()];
    manager.flip_each_cluster_rng(0.5, &mut rng, &mut state);
    println!("{:?}", state);
}

#[test]
fn multi_multisite_cluster_test() {
    let mut manager = SimpleOpDiagonal::new(3);
    manager.set_pth(
        0,
        Some(SimpleOp::offdiagonal(
            smallvec![0],
            0,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );
    manager.set_pth(
        1,
        Some(SimpleOp::offdiagonal(
            smallvec![1, 2],
            1,
            smallvec![false, false],
            smallvec![false, false],
            false,
        )),
    );
    manager.set_pth(
        2,
        Some(SimpleOp::offdiagonal(
            smallvec![1],
            2,
            smallvec![false],
            smallvec![false],
            true,
        )),
    );

    let mut manager: SimpleOpLooper = manager.into();

    let mut rng = rand::thread_rng();
    let mut state = vec![false; manager.get_nvars()];
    manager.flip_each_cluster_rng(0.5, &mut rng, &mut state);
    println!("{:?}", state);
}