conspire 0.7.7

The Rust interface to conspire.
Documentation
use crate::{
    physics::molecular::single_chain::{
        Ensemble, ExtensibleFreelyRotatingChain, MonteCarloExtensible,
    },
    units::{BOLTZMANN_CONSTANT, ROOM_TEMPERATURE},
};

#[test]
fn monte_carlo() {
    let link_length = 1.0;
    let model = ExtensibleFreelyRotatingChain {
        link_angle: 0.4363323129985824,
        link_length,
        link_stiffness: 5.0 * BOLTZMANN_CONSTANT.value() * ROOM_TEMPERATURE.value()
            / (link_length * link_length),
        number_of_links: 3,
        ensemble: Ensemble::Isometric(ROOM_TEMPERATURE.value()),
    };
    let (gamma, g) =
        MonteCarloExtensible::nondimensional_radial_distribution(&model, 0.0, 333, 10_000, 1, 3.0);
    gamma
        .into_iter()
        .zip(g)
        .for_each(|(gamma_i, g_i)| println!("[{gamma_i}, {g_i}],"))
}

#[test]
fn bias() {
    let kappa = 100.0;
    let link_length = 1.0;
    let model = ExtensibleFreelyRotatingChain {
        link_angle: std::f64::consts::PI * 60.0 / 180.0,
        link_length,
        link_stiffness: kappa * BOLTZMANN_CONSTANT.value() * ROOM_TEMPERATURE.value()
            / (link_length * link_length),
        number_of_links: 5,
        ensemble: Ensemble::Isometric(ROOM_TEMPERATURE.value()),
    };
    use crate::physics::molecular::single_chain::thermodynamics::MonteCarlo;
    println!(
        "{}",
        model.nondimensional_longitudinal_extension(0.1 * kappa, 1_000_000, 64)
    )
}