pub struct OperatorResidual {
waves: WaveSet,
points: Vec<[f64; 3]>,
}Expand description
What operator saves for its pullback: the wave set and the points, without the
matrix.
Fields§
§waves: WaveSet§points: Vec<[f64; 3]>Implementations§
Source§impl OperatorResidual
impl OperatorResidual
Sourcepub fn state_size(
modes: usize,
positions: usize,
points: usize,
cylindrical: bool,
) -> Result<usize>
pub fn state_size( modes: usize, positions: usize, points: usize, cylindrical: bool, ) -> Result<usize>
Saved-state byte count determined solely by the input dimensions and wave family, without evaluating a field operator.
Sourcepub fn position_count(&self) -> usize
pub fn position_count(&self) -> usize
Number of expansion centres in the input basis.
Sourcepub fn pushforward(
&self,
points: &[[f64; 3]],
positions: &[[f64; 3]],
ks: [Complex; 2],
) -> Result<DMatrix<Complex>>
pub fn pushforward( &self, points: &[[f64; 3]], positions: &[[f64; 3]], ks: [Complex; 2], ) -> Result<DMatrix<Complex>>
Operator tangent in one direction of sample points, expansion centres and wavenumbers, evaluated directly into the output’s column-major storage.
Sourcepub fn pushforward_axial(
&self,
points: &[[f64; 3]],
positions: &[[f64; 3]],
ks: [Complex; 2],
kz: &[f64],
) -> Result<DMatrix<Complex>>
pub fn pushforward_axial( &self, points: &[[f64; 3]], positions: &[[f64; 3]], ks: [Complex; 2], kz: &[f64], ) -> Result<DMatrix<Complex>>
Self::pushforward with an axial-wavenumber tangent per cylindrical mode.
fn pushforward_impl<const N: usize>( &self, tangent: GeometryTangent<'_>, ) -> Result<DMatrix<Complex>>
Sourcepub fn pullback(&self, cotangent: &DMatrix<Complex>) -> Result<FieldGradient>
pub fn pullback(&self, cotangent: &DMatrix<Complex>) -> Result<FieldGradient>
Point, position and wavenumber gradients from cotangent, the gradient of a real
loss with respect to the matrix; the coefficient gradient is empty.
Each point gradient comes from its own sample only. The position and wavenumber
gradients add as in FieldResidual::pullback, so the thread count does not
change them.
Sourcepub fn pullback_axial(
&self,
cotangent: &DMatrix<Complex>,
) -> Result<(FieldGradient, Vec<f64>)>
pub fn pullback_axial( &self, cotangent: &DMatrix<Complex>, ) -> Result<(FieldGradient, Vec<f64>)>
Self::pullback plus a real axial-wavenumber gradient for each mode of a
cylindrical basis; the axial gradients add their chunk sums the same way.
fn pullback_impl<const N: usize>( &self, cotangent: &DMatrix<Complex>, ) -> Result<(FieldGradient, Vec<f64>)>
Trait Implementations§
Source§impl Debug for OperatorResidual
impl Debug for OperatorResidual
Source§impl SavedState for OperatorResidual
impl SavedState for OperatorResidual
Auto Trait Implementations§
impl Freeze for OperatorResidual
impl RefUnwindSafe for OperatorResidual
impl Send for OperatorResidual
impl Sync for OperatorResidual
impl Unpin for OperatorResidual
impl UnwindSafe for OperatorResidual
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§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>
self from the equivalent element of its
superset. Read more§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).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.