pub struct AcousticCoreInverse2d<R>where
R: CfdScalar + ConjugateScalar<Real = R>,{ /* private fields */ }Expand description
Closed-form inverse of the 2-D constant-coefficient acoustic core A₀ = I − β·∇² on a periodic
2^lx × 2^ly grid, via ADI dimensional splitting:
A₀⁻¹ ≈ (I − β·∂ₓ²)⁻¹·(I − β·∂ᵧ²)⁻¹, each factor the 1-D closed-form inverse acting along one axis.
The splitting error is the O(β²·∂ₓ²∂ᵧ²) cross term; free-stream exactness is preserved exactly
(each 1-D factor maps a uniform field to itself). The per-axis stiffness is s = β/Δx², β/Δy².
Implementations§
Source§impl<R> AcousticCoreInverse2d<R>where
R: CfdScalar + ConjugateScalar<Real = R>,
impl<R> AcousticCoreInverse2d<R>where
R: CfdScalar + ConjugateScalar<Real = R>,
Sourcepub fn new(
lx: usize,
ly: usize,
dx: R,
dy: R,
beta: R,
trunc: Truncation<R>,
) -> Result<Self, PhysicsError>
pub fn new( lx: usize, ly: usize, dx: R, dy: R, beta: R, trunc: Truncation<R>, ) -> Result<Self, PhysicsError>
Build the 2-D ADI inverse of A₀ = I − β·∇² on a periodic 2^lx × 2^ly grid (cell sizes
dx, dy). The shift powers S±^{2^j} are the existing 1-D shifts lifted onto each axis of the
serial x-then-y mode layout — no new operator.
§Errors
PhysicsError::DimensionMismatch if lx == 0 or ly == 0;
PhysicsError::NumericalInstability if β, dx, or dy is not finite and positive.
Sourcepub fn apply(
&self,
b: &CausalTensorTrain<R>,
) -> Result<CausalTensorTrain<R>, PhysicsError>
pub fn apply( &self, b: &CausalTensorTrain<R>, ) -> Result<CausalTensorTrain<R>, PhysicsError>
Apply the 2-D inverse A₀⁻¹·b = (I−β∂ₓ²)⁻¹·(I−β∂ᵧ²)⁻¹·b.
§Errors
Propagates the per-axis apply / rounding errors.
Auto Trait Implementations§
impl<R> Freeze for AcousticCoreInverse2d<R>where
AcousticCoreInverse<R>: Freeze,
impl<R> RefUnwindSafe for AcousticCoreInverse2d<R>where
AcousticCoreInverse<R>: RefUnwindSafe,
impl<R> Send for AcousticCoreInverse2d<R>where
AcousticCoreInverse<R>: Send,
impl<R> Sync for AcousticCoreInverse2d<R>where
AcousticCoreInverse<R>: Sync,
impl<R> Unpin for AcousticCoreInverse2d<R>where
AcousticCoreInverse<R>: Unpin,
impl<R> UnsafeUnpin for AcousticCoreInverse2d<R>where
AcousticCoreInverse<R>: UnsafeUnpin,
impl<R> UnwindSafe for AcousticCoreInverse2d<R>where
AcousticCoreInverse<R>: UnwindSafe,
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
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 more