use std::error::Error;
use std::fmt;
use crate::error::IntegrateError;
#[derive(Debug)]
pub enum PDEError {
BoundaryConditions(String),
DomainError(String),
DiscretizationError(String),
MOLError(String),
FiniteDifferenceError(String),
FiniteElementError(String),
SpectralError(String),
InvalidGrid(String),
InvalidParameter(String),
ComputationError(String),
ODEError(IntegrateError),
Other(String),
}
impl fmt::Display for PDEError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
PDEError::BoundaryConditions(msg) => write!(f, "Boundary condition error: {msg}"),
PDEError::DomainError(msg) => write!(f, "Domain error: {msg}"),
PDEError::DiscretizationError(msg) => write!(f, "Discretization error: {msg}"),
PDEError::MOLError(msg) => write!(f, "Method of lines error: {msg}"),
PDEError::FiniteDifferenceError(msg) => write!(f, "Finite difference error: {msg}"),
PDEError::FiniteElementError(msg) => write!(f, "Finite element error: {msg}"),
PDEError::SpectralError(msg) => write!(f, "Spectral method error: {msg}"),
PDEError::InvalidGrid(msg) => write!(f, "Invalid grid error: {msg}"),
PDEError::InvalidParameter(msg) => write!(f, "Invalid parameter error: {msg}"),
PDEError::ComputationError(msg) => write!(f, "Computation error: {msg}"),
PDEError::ODEError(err) => write!(f, "ODE solver error: {err}"),
PDEError::Other(msg) => write!(f, "PDE error: {msg}"),
}
}
}
impl Error for PDEError {}
pub type PDEResult<T> = Result<T, PDEError>;
impl From<IntegrateError> for PDEError {
fn from(err: IntegrateError) -> Self {
PDEError::ODEError(err)
}
}