quadraturerules 0.9.0

quadrature rules library
Documentation
//! vertex quadrature quadrature rule.

use crate::Domain;

/// Get a vertex quadrature quadrature rule.
pub fn vertex_quadrature(
    domain: Domain,
    order: usize,
) -> Result<(Vec<f64>, Vec<f64>), &'static str> {
    match domain {
        Domain::Interval => match order {
            1 => Ok((vec![1.0, 0.0, 0.0, 1.0], vec![0.5, 0.5])),
            _ => Err("Invalid quadrature order"),
        },
        Domain::Quadrilateral => match order {
            1 => Ok((
                vec![
                    1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
                ],
                vec![0.25, 0.25, 0.25, 0.25],
            )),
            _ => Err("Invalid quadrature order"),
        },
        Domain::EdgeAdjacentQuadrilaterals => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::VertexAdjacentQuadrilaterals => match order {
            _ => Err("Invalid quadrature order"),
        },
        Domain::Triangle => match order {
            1 => Ok((
                vec![1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0],
                vec![0.3333333333333333, 0.3333333333333333, 0.3333333333333333],
            )),
            _ => 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 {
            1 => Ok((
                vec![
                    1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                    0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0,
                    0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0,
                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0,
                ],
                vec![0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
            )),
            _ => Err("Invalid quadrature order"),
        },
        Domain::Tetrahedron => match order {
            1 => Ok((
                vec![
                    1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
                ],
                vec![0.25, 0.25, 0.25, 0.25],
            )),
            _ => Err("Invalid quadrature order"),
        },
        Domain::SquareBasedPyramid => match order {
            1 => Ok((
                vec![
                    1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,
                    0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0,
                ],
                vec![0.2, 0.2, 0.2, 0.2, 0.2],
            )),
            _ => Err("Invalid quadrature order"),
        },
        Domain::TriangularPrism => match order {
            1 => Ok((
                vec![
                    1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0,
                    0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,
                    0.0, 0.0, 0.0, 1.0,
                ],
                vec![
                    0.16666666666666666,
                    0.16666666666666666,
                    0.16666666666666666,
                    0.16666666666666666,
                    0.16666666666666666,
                    0.16666666666666666,
                ],
            )),
            _ => Err("Invalid quadrature order"),
        },
    }
}