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