pub struct PropagationResidual {
vectors: Vec<[Complex; 3]>,
distance: [f64; 3],
phases: Vec<[Complex; 2]>,
}Expand description
What propagation saves for its pullback: the wavevectors, the displacement and
the diagonal phases.
Fields§
§vectors: Vec<[Complex; 3]>§distance: [f64; 3]§phases: Vec<[Complex; 2]>Upward and downward transmission phase of every mode.
Implementations§
Source§impl PropagationResidual
impl PropagationResidual
Sourcepub fn state_size(n: usize) -> Result<usize>
pub fn state_size(n: usize) -> Result<usize>
Byte length for n upgoing wavevectors and their two saved phases.
Source§impl PropagationResidual
impl PropagationResidual
Sourcepub fn shape(&self) -> (usize, usize)
pub fn shape(&self) -> (usize, usize)
The shape (n, n) of each scattering block, with n modes in each direction.
Sourcepub fn pushforward(
&self,
vectors: &[[Complex; 3]],
distance: [f64; 3],
) -> Result<Blocks>
pub fn pushforward( &self, vectors: &[[Complex; 3]], distance: [f64; 3], ) -> Result<Blocks>
Propagate a wavevector and displacement direction through the saved phases.
Sourcepub fn pullback(&self, cotangent: &Blocks) -> Result<PropagationGradient>
pub fn pullback(&self, cotangent: &Blocks) -> Result<PropagationGradient>
Wavevector and displacement gradients from the cotangents of the four blocks.
Trait Implementations§
Source§impl Debug for PropagationResidual
impl Debug for PropagationResidual
Source§impl SavedState for PropagationResidual
impl SavedState for PropagationResidual
Auto Trait Implementations§
impl Freeze for PropagationResidual
impl RefUnwindSafe for PropagationResidual
impl Send for PropagationResidual
impl Sync for PropagationResidual
impl Unpin for PropagationResidual
impl UnwindSafe for PropagationResidual
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.