use std::error::Error;
use std::fmt;
#[derive(Debug)]
pub enum ODEError {
Convergence,
StepSizeTooSmall,
MaxStepsExceeded,
NumericalInstability,
InvalidInput(String),
General(String),
}
impl fmt::Display for ODEError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ODEError::Convergence => write!(f, "Failed to converge to a solution"),
ODEError::StepSizeTooSmall => write!(f, "Step size became too small"),
ODEError::MaxStepsExceeded => write!(f, "Exceeded maximum number of steps"),
ODEError::NumericalInstability => write!(f, "Encountered numerical instability (NaN or Inf)"),
ODEError::InvalidInput(msg) => write!(f, "Invalid input: {}", msg),
ODEError::General(msg) => write!(f, "Error: {}", msg),
}
}
}
impl Error for ODEError {}