Struct GeneralImplicitProgram
pub struct GeneralImplicitProgram { /* private fields */ }Description
Canonical continuous Relation proven to require residual-native execution.
Unlike crate::FirstOrderProgram, this projection retains both y and
y_dot as runtime inputs and exposes the paired residual JVP. It accepts
only a structural nonconstant/nonlinear derivative-Jacobian obstruction;
a valid constant first-order system must use the narrower projection.
Implementations§
§impl GeneralImplicitProgram
impl GeneralImplicitProgram
pub fn lower(
program: &CpuProgram,
relation: Id<Relation>,
) -> Result<GeneralImplicitProgram, Diagnostic>
pub fn lower( program: &CpuProgram, relation: Id<Relation>, ) -> Result<GeneralImplicitProgram, Diagnostic>
Lower one continuously activated Relation after proving that it cannot enter the constant first-order seam.
§Errors
Returns EQ0705 for invalid activation/symbol/shape data, a pure
algebraic Relation, a malformed derivative analysis, or a Relation that
is already representable by crate::FirstOrderProgram.
pub const fn relation(&self) -> Id<Relation>
pub const fn relation(&self) -> Id<Relation>
Canonical Relation represented by this projection.
pub fn state_fields(&self) -> &[Id<Field>]
pub fn state_fields(&self) -> &[Id<Field>]
Deterministic state coordinate order.
pub fn initial_derivative(&self) -> &[f64]
pub fn initial_derivative(&self) -> &[f64]
Initial derivative guess in state order.
pub fn parameter_fields(&self) -> &[Id<Parameter>]
pub fn parameter_fields(&self) -> &[Id<Parameter>]
Deterministic first-occurrence Parameter order.
pub const fn lowering_proof(&self) -> &GeneralImplicitLoweringProof
pub const fn lowering_proof(&self) -> &GeneralImplicitLoweringProof
Structural witness behind residual-native admission.
pub fn implicit_problem(&self) -> Result<ImplicitDaeProblem<'_>, Diagnostic>
pub fn implicit_problem(&self) -> Result<ImplicitDaeProblem<'_>, Diagnostic>
Construct the residual-native problem and its consistency policy.
§Errors
Retains ImplicitDaeProblem validation diagnostics if its invariants
change.
pub fn linearize_implicit_euler_step(
&self,
previous_time: f64,
next_time: f64,
previous_state: &[f64],
next_state: &[f64],
) -> Result<ImplicitEulerStepLinearization<'_>, Diagnostic>
pub fn linearize_implicit_euler_step( &self, previous_time: f64, next_time: f64, previous_state: &[f64], next_state: &[f64], ) -> Result<ImplicitEulerStepLinearization<'_>, Diagnostic>
Linearize one accepted implicit-Euler step as a discrete residual.
The returned relation has next_state as its unknown vector. Its
parameter vector is the explicit direct sum
[previous_state, canonical model Parameters]while model time and step size remain frozen realization data. The step residual is
G(y_next; y_previous, p)
= F(next_time, y_next, (y_next - y_previous) / step, p).§Errors
Returns EQ0705 for invalid time/step/state data and retains Operator
IR linearization diagnostics for an invalid point.
Trait Implementations§
§impl Clone for GeneralImplicitProgram
impl Clone for GeneralImplicitProgram
§impl Debug for GeneralImplicitProgram
impl Debug for GeneralImplicitProgram
§impl ImplicitTimeSystem for GeneralImplicitProgram
impl ImplicitTimeSystem for GeneralImplicitProgram
§fn dimension(&self) -> usize
fn dimension(&self) -> usize
§fn residual(
&self,
time: f64,
state: &[f64],
derivative: &[f64],
output: &mut [f64],
) -> Result<(), Diagnostic>
fn residual( &self, time: f64, state: &[f64], derivative: &[f64], output: &mut [f64], ) -> Result<(), Diagnostic>
§fn residual_jvp(
&self,
time: f64,
state: &[f64],
derivative: &[f64],
state_direction: &[f64],
derivative_direction: &[f64],
output: &mut [f64],
) -> Result<(), Diagnostic>
fn residual_jvp( &self, time: f64, state: &[f64], derivative: &[f64], state_direction: &[f64], derivative_direction: &[f64], output: &mut [f64], ) -> Result<(), Diagnostic>
F_y state_direction + F_y_dot derivative_direction. Read more§impl PartialEq for GeneralImplicitProgram
impl PartialEq for GeneralImplicitProgram
§fn eq(&self, other: &GeneralImplicitProgram) -> bool
fn eq(&self, other: &GeneralImplicitProgram) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for GeneralImplicitProgram
Auto Trait Implementations§
impl Freeze for GeneralImplicitProgram
impl RefUnwindSafe for GeneralImplicitProgram
impl Send for GeneralImplicitProgram
impl Sync for GeneralImplicitProgram
impl Unpin for GeneralImplicitProgram
impl UnsafeUnpin for GeneralImplicitProgram
impl UnwindSafe for GeneralImplicitProgram
Blanket Implementations§
Source§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
§fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
§impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
§type Err = <Dst as ApproxFrom<Src, Scheme>>::Err
type Err = <Dst as ApproxFrom<Src, Scheme>>::Err
§fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
Source§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
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, Dst> ConvAsUtil<Dst> for T
impl<T, Dst> ConvAsUtil<Dst> for T
§fn approx(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
fn approx(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
§impl<T> ConvUtil for T
impl<T> ConvUtil for T
§fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
§fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst, Scheme>,
Scheme: ApproxScheme,
fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst, Scheme>,
Scheme: ApproxScheme,
§fn into_as<Dst>(self) -> Dstwhere
Self: Sized + Into<Dst>,
fn into_as<Dst>(self) -> Dstwhere
Self: Sized + Into<Dst>,
§fn try_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + TryInto<Dst>,
fn try_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + TryInto<Dst>,
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
Source§impl<T> From<T> for T
impl<T> From<T> for T
Source§impl<T, U> Into<U> for Twhere
U: From<T>,
impl<T, U> Into<U> for Twhere
U: From<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>where
F: FnOnce(&Self) -> bool,
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>where
F: FnOnce(&Self) -> bool,
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
Source§impl<T> Same for T
impl<T> Same 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.