#[derive(Debug, Clone)]
pub struct DgAdvancedConfig {
pub poly_order: usize,
pub n_quad_points: usize,
pub curved: bool,
pub entropy_stable: bool,
}
impl Default for DgAdvancedConfig {
fn default() -> Self {
Self {
poly_order: 3,
n_quad_points: 5,
curved: false,
entropy_stable: false,
}
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Default)]
pub enum GeometricMap {
#[default]
Linear,
Isoparametric,
BlendedTransfinite,
}
#[derive(Debug, Clone)]
pub struct CurvedElement {
pub vertices: Vec<[f64; 2]>,
pub mapping: GeometricMap,
}
impl CurvedElement {
pub fn new(vertices: Vec<[f64; 2]>, mapping: GeometricMap) -> Self {
Self { vertices, mapping }
}
pub fn linear_triangle(v0: [f64; 2], v1: [f64; 2], v2: [f64; 2]) -> Self {
Self {
vertices: vec![v0, v1, v2],
mapping: GeometricMap::Linear,
}
}
}
#[derive(Debug, Clone)]
pub struct DgSolution {
pub coefficients: Vec<Vec<f64>>,
pub n_elements: usize,
pub order: usize,
}
impl DgSolution {
pub fn zeros(n_elements: usize, order: usize) -> Self {
let n_dofs = order + 1;
Self {
coefficients: vec![vec![0.0; n_dofs]; n_elements],
n_elements,
order,
}
}
pub fn element(&self, e: usize) -> &[f64] {
&self.coefficients[e]
}
pub fn element_mut(&mut self, e: usize) -> &mut Vec<f64> {
&mut self.coefficients[e]
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Default)]
pub enum FluxType {
#[default]
Rusanov,
Roe,
Hllc,
EntropyStable,
}
#[derive(Debug, Clone)]
pub struct EntropyStableConfig {
pub flux: FluxType,
pub tau: f64,
}
impl Default for EntropyStableConfig {
fn default() -> Self {
Self {
flux: FluxType::EntropyStable,
tau: 1.0,
}
}
}