quadraturerules 0.9.0

quadrature rules library
Documentation
//! open Newton--Cotes quadrature rule.

use crate::Domain;

/// Get a open Newton--Cotes quadrature rule.
pub fn open_newton_cotes(
    domain: Domain,
    order: usize,
) -> Result<(Vec<f64>, Vec<f64>), &'static str> {
    match domain {
        Domain::Interval => match order {
            0 => Ok((vec![0.5, 0.5], vec![1.0])),
            1 => Ok((
                vec![
                    0.6666666666666667,
                    0.3333333333333333,
                    0.33333333333333337,
                    0.6666666666666666,
                ],
                vec![0.5, 0.5],
            )),
            2 => Ok((
                vec![0.75, 0.25, 0.5, 0.5, 0.25, 0.75],
                vec![0.6666666666666666, -0.3333333333333333, 0.6666666666666666],
            )),
            3 => Ok((
                vec![0.8, 0.2, 0.6, 0.4, 0.4, 0.6, 0.2, 0.8],
                vec![
                    0.4583333333333333,
                    0.041666666666666664,
                    0.041666666666666664,
                    0.4583333333333333,
                ],
            )),
            4 => Ok((
                vec![
                    0.8333333333333334,
                    0.16666666666666666,
                    0.6666666666666667,
                    0.3333333333333333,
                    0.5,
                    0.5,
                    0.33333333333333337,
                    0.6666666666666666,
                    0.16666666666666663,
                    0.8333333333333334,
                ],
                vec![0.55, -0.7, 1.3, -0.7, 0.55],
            )),
            5 => Ok((
                vec![
                    0.8571428571428572,
                    0.14285714285714285,
                    0.7142857142857143,
                    0.2857142857142857,
                    0.5714285714285714,
                    0.42857142857142855,
                    0.4285714285714286,
                    0.5714285714285714,
                    0.2857142857142857,
                    0.7142857142857143,
                    0.1428571428571429,
                    0.8571428571428571,
                ],
                vec![
                    0.42430555555555555,
                    -0.3145833333333333,
                    0.3902777777777778,
                    0.3902777777777778,
                    -0.3145833333333333,
                    0.42430555555555555,
                ],
            )),
            6 => Ok((
                vec![
                    0.875, 0.125, 0.75, 0.25, 0.625, 0.375, 0.5, 0.5, 0.375, 0.625, 0.25, 0.75,
                    0.125, 0.875,
                ],
                vec![
                    0.48677248677248675,
                    -1.0095238095238095,
                    2.323809523809524,
                    -2.602116402116402,
                    2.323809523809524,
                    -1.0095238095238095,
                    0.48677248677248675,
                ],
            )),
            _ => Err("Invalid quadrature order"),
        },
        Domain::Quadrilateral => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::EdgeAdjacentQuadrilaterals => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::VertexAdjacentQuadrilaterals => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::Triangle => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::EdgeAdjacentTriangleAndQuadrilateral => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::VertexAdjacentTriangleAndQuadrilateral => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::EdgeAdjacentTriangles => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::VertexAdjacentTriangles => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::Hexahedron => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::Tetrahedron => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::SquareBasedPyramid => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::TriangularPrism => match order {
            _ => Err("Invalid quadrature order"),
        },
    }
}