use crate::calculus::pde::registry::PDEError;
use crate::calculus::pde::types::{BoundaryCondition, BoundaryLocation};
use crate::core::{Expression, Symbol};
pub fn extract_domain_length(
boundary_conditions: &[BoundaryCondition],
spatial_var: &Symbol,
) -> Result<Expression, PDEError> {
for bc in boundary_conditions {
let location = match bc {
BoundaryCondition::Dirichlet { location, .. } => location,
BoundaryCondition::Neumann { location, .. } => location,
BoundaryCondition::Robin { location, .. } => location,
};
if let BoundaryLocation::Simple {
variable,
value: location_value,
} = location
{
if variable == spatial_var
&& !matches!(location_value, Expression::Number(n) if n.is_zero())
{
return Ok(location_value.clone());
}
}
}
Ok(Expression::pi())
}