pub struct PdeOperator {
pub terms: Vec<(f64, Vec<usize>)>,
pub dim: usize,
}Expand description
A linear PDE operator: L[u](x) = Σ_k c_k · ∂^{α_k} u(x)
Each term is a pair (coefficient, multi_index) where multi_index[d] is the
order of differentiation with respect to the d-th coordinate.
Fields§
§terms: Vec<(f64, Vec<usize>)>List of (coefficient, derivative_order_per_dim) terms.
dim: usizeSpatial dimension of the input space.
Implementations§
Source§impl PdeOperator
impl PdeOperator
Sourcepub fn laplacian(dim: usize) -> Self
pub fn laplacian(dim: usize) -> Self
Create the Laplacian operator in dim dimensions:
L = Σ_{i=0}^{dim-1} ∂²/∂x_i².
Sourcepub fn advection_1d(speed: f64) -> Self
pub fn advection_1d(speed: f64) -> Self
Create a 1D advection operator: L = speed · ∂/∂x.
Sourcepub fn custom(
terms: Vec<(f64, Vec<usize>)>,
dim: usize,
) -> InterpolateResult<Self>
pub fn custom( terms: Vec<(f64, Vec<usize>)>, dim: usize, ) -> InterpolateResult<Self>
Create a custom linear combination of derivative terms.
Each element of terms is (coefficient, order_per_dim) where
order_per_dim must have length dim.
§Errors
Returns InvalidInput if any multi-index has the wrong length.
Sourcepub fn apply_fd(
&self,
center: &[f64],
f_at: impl Fn(&[f64]) -> f64,
h: f64,
) -> f64
pub fn apply_fd( &self, center: &[f64], f_at: impl Fn(&[f64]) -> f64, h: f64, ) -> f64
Evaluate L[f] at center by applying finite differences.
Supports derivative orders 0 (identity), 1 (central difference), and 2 (second central difference) per dimension. Mixed partials of total order ≤ 2 are handled by composing 1-D stencils.
For a term with multi-index [α₀, α₁, …] the stencil approximation is:
- Order 0 in dim d → evaluate at
center - Order 1 in dim d →
(f(c + h*eₐ) - f(c - h*eₐ)) / (2h) - Order 2 in dim d →
(f(c + h*eₐ) - 2f(c) + f(c - h*eₐ)) / h²
Mixed partials of order (1,1) in two different dimensions use the
cross-difference stencil:
(f(++)-f(+-)-f(-+)+f(--)) / (4h²).
Higher-order mixed partials (total order > 2) raise NotImplemented.
§Arguments
center– Point at which the operator is evaluated; length must equaldim.f_at– Function to apply the operator to.h– Finite-difference step size.
Sourcepub fn try_apply_fd(
&self,
center: &[f64],
f_at: impl Fn(&[f64]) -> f64,
h: f64,
) -> InterpolateResult<f64>
pub fn try_apply_fd( &self, center: &[f64], f_at: impl Fn(&[f64]) -> f64, h: f64, ) -> InterpolateResult<f64>
Like apply_fd but returns an error on unsupported stencil orders
instead of panicking.
Trait Implementations§
Source§impl Clone for PdeOperator
impl Clone for PdeOperator
Source§fn clone(&self) -> PdeOperator
fn clone(&self) -> PdeOperator
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for PdeOperator
impl RefUnwindSafe for PdeOperator
impl Send for PdeOperator
impl Sync for PdeOperator
impl Unpin for PdeOperator
impl UnsafeUnpin for PdeOperator
impl UnwindSafe for PdeOperator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.