use crate::Domain;
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"),
},
}
}