Crate cuba

Source
Expand description

Rust binding for the Cuba integrator.

Cuba (http://www.feynarts.de/cuba/) is written by Thomas Hahn.

§Usage

Create a CubaIntegrator and supply it with a function of the form

type UserData = ();

fn integrand(
    x: &[f64],
    f: &mut [f64],
    user_data: &mut UserData,
    nvec: usize,
    core: i32,
    weight: &[f64],
    iter: usize,
) -> Result<(), &'static str> {
    Ok(())
}

where UserData can be any type. If you don’t want to provide user data, simply make UserData a usize and provide any number.

§Example

extern crate cuba;
use cuba::{CubaIntegrator, CubaVerbosity};

#[derive(Debug)]
struct UserData {
    f1: f64,
    f2: f64,
}

#[inline(always)]
fn integrand(
    x: &[f64],
    f: &mut [f64],
    user_data: &mut UserData,
    nvec: usize,
    _core: i32,
    _weight: &[f64],
    _iter: usize,
) -> Result<(), &'static str> {
    for i in 0..nvec {
        f[i * 2] = (x[i * 2] * x[i * 2]).sin() * user_data.f1;
        f[i * 2 + 1] = (x[i * 2 + 1] * x[i * 2 + 1]).cos() * user_data.f2;
    }

    Ok(())
}

fn main() {
    let mut ci = CubaIntegrator::new();
    ci.set_mineval(10)
        .set_maxeval(10000000)
        .set_epsrel(0.0001)
        .set_seed(0) // use quasi-random numbers
        .set_cores(2, 1000);

    let data = UserData { f1: 5., f2: 7. };
    let r = ci.vegas(2, 2, 4, CubaVerbosity::Progress, 0, integrand, data);

    println!("{:#?}", r);
}

Structs§

CubaIntegrator
A Cuba integrator. It should be created with an integrand function.
CubaResult
The result of an integration with Cuba.

Enums§

CubaVerbosity
Logging level.

Type Aliases§

CuhreIntegrand
Cuhre integrand evaluation function.
DivonneIntegrand
Divonne integrand evaluation function.
SuaveIntegrand
Suave integrand evaluation function.
VegasIntegrand
Vegas integrand evaluation function.