pub struct PdPerturbationHandler {Show 30 fields
pub delta_xs_max: f64,
pub delta_xs_min: f64,
pub delta_xs_first_inc_fact: f64,
pub delta_xs_inc_fact: f64,
pub delta_xs_dec_fact: f64,
pub delta_xs_init: f64,
pub delta_cd_val: f64,
pub delta_cd_exp: f64,
pub perturb_always_cd: bool,
pub reset_last: bool,
pub degen_iters_max: i32,
pub delta_x_curr: f64,
pub delta_s_curr: f64,
pub delta_c_curr: f64,
pub delta_d_curr: f64,
pub delta_x_last: f64,
pub delta_s_last: f64,
pub delta_c_last: f64,
pub delta_d_last: f64,
pub get_deltas_for_wrong_inertia_called: bool,
pub hess_degenerate: DegenType,
pub jac_degenerate: DegenType,
pub degen_iters: i32,
pub test_status: TrialStatus,
pub delta_c_rungs: i32,
pub delta_c_abandoned: bool,
pub delta_c_max_rungs: i32,
pub delta_x_at_withdrawal: f64,
pub delta_c_reinstated: bool,
pub withdrawal_untested: bool,
}Expand description
State + algorithmic parameters. Defaults mirror
IpPDPerturbationHandler.cpp::RegisterOptions.
Fields§
§delta_xs_max: f64§delta_xs_min: f64§delta_xs_first_inc_fact: f64§delta_xs_inc_fact: f64§delta_xs_dec_fact: f64§delta_xs_init: f64§delta_cd_val: f64§delta_cd_exp: f64§perturb_always_cd: bool§reset_last: bool§degen_iters_max: i32§delta_x_curr: f64§delta_s_curr: f64§delta_c_curr: f64§delta_d_curr: f64§delta_x_last: f64§delta_s_last: f64§delta_c_last: f64§delta_d_last: f64§get_deltas_for_wrong_inertia_called: bool§hess_degenerate: DegenType§jac_degenerate: DegenType§degen_iters: i32§test_status: TrialStatus§delta_c_rungs: i32gh#592: how many rungs of the δ_x ladder have been taken for
the current aug-system while δ_c > 0. Reset by
Self::consider_new_system.
delta_c_abandoned: boolgh#592: δ_c has already been withdrawn once for this
aug-system, so it must not be raised again before the next
Self::consider_new_system. Without the latch a linear solver
that keeps reporting Singular for the same reason would put it
straight back and the walk-back would cycle.
delta_c_max_rungs: i32gh#592: the rung at which δ_c is withdrawn — see
Self::perturb_for_wrong_inertia. 0 disables the walk-back
and restores the pre-#592 escalation exactly.
delta_x_at_withdrawal: f64gh#981: the δ_x rung at which δ_c was withdrawn. The factor at
(δ_x, δ_c) reported WrongInertia, i.e. was nonsingular; a
certified Singular without δ_c refutes the withdrawal and the
ladder resumes from here.
delta_c_reinstated: boolgh#981: δ_c was withdrawn and then reinstated for this
aug-system. Latched so that the walk-back does not fire a second
time; one withdrawal and one reinstatement per aug-system at most.
withdrawal_untested: boolgh#981: δ_c has been withdrawn and no factorization without it
has reported back yet. Only the first δ_c-free factor can
refute the withdrawal: a dependent row shows up as a zero pivot
at the very first rung, every time, whereas a zero pivot that
appears at one rung of a long δ_x climb and not at its
neighbours is round-off (measured on pooling_rt2stp, where
honouring the later ones moved the exact leg to a different
local optimum).
Implementations§
Source§impl PdPerturbationHandler
impl PdPerturbationHandler
pub fn new() -> PdPerturbationHandler
Sourcepub fn set_perturb_always_cd(&mut self, on: bool)
pub fn set_perturb_always_cd(&mut self, on: bool)
Configure perturb_always_cd_ and rebuild the initial jac
state. Mirrors upstream’s InitializeImpl.
Sourcepub fn consider_new_system(
&mut self,
mu: f64,
ip_data: Option<&dyn PerturbationSink>,
) -> Option<Deltas>
pub fn consider_new_system( &mut self, mu: f64, ip_data: Option<&dyn PerturbationSink>, ) -> Option<Deltas>
First call when starting a new aug-system. mu is the current
barrier parameter (used by the δ_cd formula).
Returns None if no suitable starting perturbation could be
found (the caller bails).
Sourcepub fn perturb_for_singular(
&mut self,
mu: f64,
ip_data: Option<&dyn PerturbationSink>,
) -> Option<Deltas>
pub fn perturb_for_singular( &mut self, mu: f64, ip_data: Option<&dyn PerturbationSink>, ) -> Option<Deltas>
Escalation after Singular factorization status. Mirrors
PerturbForSingularity (cpp:245-364).
Sourcepub fn perturb_for_singular_with(
&mut self,
mu: f64,
certified: bool,
ip_data: Option<&dyn PerturbationSink>,
) -> Option<Deltas>
pub fn perturb_for_singular_with( &mut self, mu: f64, certified: bool, ip_data: Option<&dyn PerturbationSink>, ) -> Option<Deltas>
Self::perturb_for_singular with the linear solver’s verdict on
the report attached (gh#981). certified is true when the
factorization found a zero pivot — a rank deficiency it measured
— and false when Singular stands in for an inertia count the
solver declined to trust (gh#540). The two differ only after a
gh#592 walk-back: a certified Singular from the δ_c-free
factor refutes the withdrawal, because the factor at that δ_x
with δ_c was nonsingular and only δ_c changed, so the
singularity is in the constraint block and no δ_x can remove it.
δ_c is then put back and the ladder resumes from the withdrawal
rung. An uncertified Singular is answered on the δ_x ladder as
before — on gh#884’s biactive MPCC every post-withdrawal Singular
is of that kind, and reinstating δ_c there costs the certificate.
Sourcepub fn perturb_for_wrong_inertia(
&mut self,
mu: f64,
ip_data: Option<&dyn PerturbationSink>,
) -> Option<Deltas>
pub fn perturb_for_wrong_inertia( &mut self, mu: f64, ip_data: Option<&dyn PerturbationSink>, ) -> Option<Deltas>
Escalation after WrongInertia factorization status. Mirrors
PerturbForWrongInertia (cpp:419-450).
Sourcepub fn current_perturbation(&self) -> Deltas
pub fn current_perturbation(&self) -> Deltas
Read the most recently committed perturbations.
Trait Implementations§
Source§impl Clone for PdPerturbationHandler
impl Clone for PdPerturbationHandler
Source§fn clone(&self) -> PdPerturbationHandler
fn clone(&self) -> PdPerturbationHandler
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PdPerturbationHandler
impl Debug for PdPerturbationHandler
Source§impl Default for PdPerturbationHandler
impl Default for PdPerturbationHandler
Source§fn default() -> PdPerturbationHandler
fn default() -> PdPerturbationHandler
Auto Trait Implementations§
impl Freeze for PdPerturbationHandler
impl RefUnwindSafe for PdPerturbationHandler
impl Send for PdPerturbationHandler
impl Sync for PdPerturbationHandler
impl Unpin for PdPerturbationHandler
impl UnsafeUnpin for PdPerturbationHandler
impl UnwindSafe for PdPerturbationHandler
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, U> Imply<T> for U
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 more