pub struct InterfaceResidual {
ks: [[Complex; 2]; 2],
zs: [Complex; 2],
q: [f64; 2],
axis: usize,
inverse: Option<SMatrix<Complex, 4, 4>>,
result: SMatrix<Complex, 4, 4>,
fixed_q: bool,
}Expand description
What interface() saves for its pullback: the media, the transverse wavevector,
the axis, the inverse of the tangential-field matching matrix and the blocks.
Fields§
§ks: [[Complex; 2]; 2]§zs: [Complex; 2]§q: [f64; 2]§axis: usize§inverse: Option<SMatrix<Complex, 4, 4>>§result: SMatrix<Complex, 4, 4>The scattering blocks as one matrix over (up, down) outputs and inputs.
fixed_q: boolImplementations§
Source§impl InterfaceResidual
impl InterfaceResidual
Sourcepub fn state_size() -> Result<usize>
pub fn state_size() -> Result<usize>
Byte length including fixed storage for the optional 4-by-4 inverse.
Source§impl InterfaceResidual
impl InterfaceResidual
Sourcepub fn pushforward(
&self,
ks: [[Complex; 2]; 2],
z: [Complex; 2],
q: [f64; 2],
) -> Result<Blocks>
pub fn pushforward( &self, ks: [[Complex; 2]; 2], z: [Complex; 2], q: [f64; 2], ) -> Result<Blocks>
Differentiate the tangential-field solve using its saved inverse and one direction of local field derivatives.
Sourcepub fn pullback(&self, cotangent: &Blocks) -> Result<InterfaceGradient>
pub fn pullback(&self, cotangent: &Blocks) -> Result<InterfaceGradient>
Reuse the 4-by-4 inverse for the implicit solve adjoint; recompute local field derivatives.
Trait Implementations§
Source§impl Debug for InterfaceResidual
impl Debug for InterfaceResidual
Source§impl SavedState for InterfaceResidual
impl SavedState for InterfaceResidual
Auto Trait Implementations§
impl Freeze for InterfaceResidual
impl RefUnwindSafe for InterfaceResidual
impl Send for InterfaceResidual
impl Sync for InterfaceResidual
impl Unpin for InterfaceResidual
impl UnwindSafe for InterfaceResidual
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.