use std::fmt;
#[derive(Debug)]
pub struct InvalidQuadrature;
impl fmt::Display for InvalidQuadrature {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Invalid quadrature")
}
}
impl std::error::Error for InvalidQuadrature {}
#[derive(Debug)]
pub enum QuadratureError {
RuleNotFound,
ConnectivityError,
}
pub struct NumericalQuadratureDefinition {
pub dim: usize,
pub order: usize,
pub npoints: usize,
pub weights: Vec<f64>,
pub points: Vec<f64>,
}
pub struct TestTrialNumericalQuadratureDefinition {
pub dim: usize,
pub order: usize,
pub npoints: usize,
pub weights: Vec<f64>,
pub test_points: Vec<f64>,
pub trial_points: Vec<f64>,
}
pub struct CellToCellConnectivity {
pub connectivity_dimension: usize,
pub local_indices: Vec<(usize, usize)>,
}
pub trait NumericalQuadratureGenerator {
fn get_rule(&self, npoints: usize) -> Result<NumericalQuadratureDefinition, InvalidQuadrature>;
}
pub trait SingularQuadratureGenerator {
fn get_singular_rule(
&self,
order: usize,
connectivity: CellToCellConnectivity,
) -> Result<(NumericalQuadratureDefinition, NumericalQuadratureDefinition), InvalidQuadrature>;
}