Move input validation of expressions to evalexpr
This commit is contained in:
		@@ -1,5 +1,6 @@
 | 
			
		||||
use ndarray::{ArrayView, ArrayViewMut, Dimension};
 | 
			
		||||
use sbp::Float;
 | 
			
		||||
use std::convert::{TryFrom, TryInto};
 | 
			
		||||
 | 
			
		||||
pub mod evalexpr;
 | 
			
		||||
 | 
			
		||||
@@ -24,3 +25,10 @@ impl<D: Dimension> euler::eval::Evaluator<D> for Evaluator {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFrom<crate::input::Expressions> for Evaluator {
 | 
			
		||||
    type Error = ();
 | 
			
		||||
    fn try_from(expr: crate::input::Expressions) -> Result<Self, Self::Error> {
 | 
			
		||||
        Ok(Self::EvalExpr(expr.try_into()?))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,9 @@ use euler::GAMMA;
 | 
			
		||||
use evalexpr::*;
 | 
			
		||||
use ndarray::{azip, ArrayView, ArrayViewMut, Dimension};
 | 
			
		||||
use sbp::Float;
 | 
			
		||||
use std::convert::TryFrom;
 | 
			
		||||
 | 
			
		||||
use crate::input;
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug)]
 | 
			
		||||
pub enum Evaluator {
 | 
			
		||||
@@ -9,6 +12,63 @@ pub enum Evaluator {
 | 
			
		||||
    Conservation(EvaluatorConservation),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFrom<input::Expressions> for Evaluator {
 | 
			
		||||
    type Error = ();
 | 
			
		||||
    fn try_from(expr: input::Expressions) -> Result<Self, Self::Error> {
 | 
			
		||||
        let mut context = default_context();
 | 
			
		||||
        match expr {
 | 
			
		||||
            input::Expressions::Pressure(input::ExpressionsPressure {
 | 
			
		||||
                globals,
 | 
			
		||||
                rho,
 | 
			
		||||
                u,
 | 
			
		||||
                v,
 | 
			
		||||
                p,
 | 
			
		||||
            }) => {
 | 
			
		||||
                if let Some(globals) = &globals {
 | 
			
		||||
                    evalexpr::eval_with_context_mut(globals, &mut context).unwrap();
 | 
			
		||||
                }
 | 
			
		||||
                let [rho, u, v, p] = [
 | 
			
		||||
                    evalexpr::build_operator_tree(&rho).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&u).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&v).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&p).unwrap(),
 | 
			
		||||
                ];
 | 
			
		||||
                Ok(Evaluator::Pressure(EvaluatorPressure {
 | 
			
		||||
                    ctx: context,
 | 
			
		||||
                    rho,
 | 
			
		||||
                    u,
 | 
			
		||||
                    v,
 | 
			
		||||
                    p,
 | 
			
		||||
                }))
 | 
			
		||||
            }
 | 
			
		||||
            input::Expressions::Conservation(input::ExpressionsConservation {
 | 
			
		||||
                globals,
 | 
			
		||||
                rho,
 | 
			
		||||
                rhou,
 | 
			
		||||
                rhov,
 | 
			
		||||
                e,
 | 
			
		||||
            }) => {
 | 
			
		||||
                if let Some(globals) = &globals {
 | 
			
		||||
                    evalexpr::eval_with_context_mut(globals, &mut context).unwrap();
 | 
			
		||||
                }
 | 
			
		||||
                let [rho, rhou, rhov, e] = [
 | 
			
		||||
                    evalexpr::build_operator_tree(&rho).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&rhou).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&rhov).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&e).unwrap(),
 | 
			
		||||
                ];
 | 
			
		||||
                Ok(Evaluator::Conservation(EvaluatorConservation {
 | 
			
		||||
                    ctx: context,
 | 
			
		||||
                    rho,
 | 
			
		||||
                    rhou,
 | 
			
		||||
                    rhov,
 | 
			
		||||
                    e,
 | 
			
		||||
                }))
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
pub struct EvaluatorConservation {
 | 
			
		||||
    pub(crate) ctx: HashMapContext,
 | 
			
		||||
 
 | 
			
		||||
@@ -6,69 +6,6 @@ use sbp::Float;
 | 
			
		||||
use crate::eval;
 | 
			
		||||
use crate::input;
 | 
			
		||||
 | 
			
		||||
impl TryFrom<input::Expressions> for eval::Evaluator {
 | 
			
		||||
    type Error = ();
 | 
			
		||||
    fn try_from(expr: input::Expressions) -> Result<Self, Self::Error> {
 | 
			
		||||
        let mut context = eval::evalexpr::default_context();
 | 
			
		||||
        match expr {
 | 
			
		||||
            input::Expressions::Pressure(input::ExpressionsPressure {
 | 
			
		||||
                globals,
 | 
			
		||||
                rho,
 | 
			
		||||
                u,
 | 
			
		||||
                v,
 | 
			
		||||
                p,
 | 
			
		||||
            }) => {
 | 
			
		||||
                if let Some(globals) = &globals {
 | 
			
		||||
                    evalexpr::eval_with_context_mut(globals, &mut context).unwrap();
 | 
			
		||||
                }
 | 
			
		||||
                let [rho, u, v, p] = [
 | 
			
		||||
                    evalexpr::build_operator_tree(&rho).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&u).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&v).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&p).unwrap(),
 | 
			
		||||
                ];
 | 
			
		||||
                Ok(eval::Evaluator::EvalExpr(
 | 
			
		||||
                    eval::evalexpr::Evaluator::Pressure(eval::evalexpr::EvaluatorPressure {
 | 
			
		||||
                        ctx: context,
 | 
			
		||||
                        rho,
 | 
			
		||||
                        u,
 | 
			
		||||
                        v,
 | 
			
		||||
                        p,
 | 
			
		||||
                    }),
 | 
			
		||||
                ))
 | 
			
		||||
            }
 | 
			
		||||
            input::Expressions::Conservation(input::ExpressionsConservation {
 | 
			
		||||
                globals,
 | 
			
		||||
                rho,
 | 
			
		||||
                rhou,
 | 
			
		||||
                rhov,
 | 
			
		||||
                e,
 | 
			
		||||
            }) => {
 | 
			
		||||
                if let Some(globals) = &globals {
 | 
			
		||||
                    evalexpr::eval_with_context_mut(globals, &mut context).unwrap();
 | 
			
		||||
                }
 | 
			
		||||
                let [rho, rhou, rhov, e] = [
 | 
			
		||||
                    evalexpr::build_operator_tree(&rho).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&rhou).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&rhov).unwrap(),
 | 
			
		||||
                    evalexpr::build_operator_tree(&e).unwrap(),
 | 
			
		||||
                ];
 | 
			
		||||
                Ok(eval::Evaluator::EvalExpr(
 | 
			
		||||
                    eval::evalexpr::Evaluator::Conservation(
 | 
			
		||||
                        eval::evalexpr::EvaluatorConservation {
 | 
			
		||||
                            ctx: context,
 | 
			
		||||
                            rho,
 | 
			
		||||
                            rhou,
 | 
			
		||||
                            rhov,
 | 
			
		||||
                            e,
 | 
			
		||||
                        },
 | 
			
		||||
                    ),
 | 
			
		||||
                ))
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFrom<input::InitialConditions> for InitialConditions {
 | 
			
		||||
    type Error = ();
 | 
			
		||||
    fn try_from(v: input::InitialConditions) -> Result<Self, Self::Error> {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user