pub trait RootRkmkDae<Y>where
Y: Differentiable + Tensor,{
// Required methods
fn root_rkmk_dae<Tab: ButcherTableau>(
&self,
applied_load: AppliedLoad<'_>,
solver: impl FirstOrderRootFinding<FirstPiolaKirchhoffStress, FirstPiolaKirchhoffTangentStiffness, DeformationGradient>,
) -> Result<(Times, DeformationGradients, ViscoplasticStateVariablesHistory<Y>), ConstitutiveError>;
fn root_rkmk_dae_adaptive<Tab: EmbeddedTableau>(
&self,
applied_load: AppliedLoad<'_>,
solver: impl FirstOrderRootFinding<FirstPiolaKirchhoffStress, FirstPiolaKirchhoffTangentStiffness, DeformationGradient>,
abs_tol: Scalar,
rel_tol: Scalar,
) -> Result<(Times, DeformationGradients, ViscoplasticStateVariablesHistory<Y>), ConstitutiveError>;
}Expand description
RKMK-DAE stage-equilibrium methods for elastic-viscoplastic solid constitutive
models. The sibling of FirstOrderRoot that keeps F_p on its manifold
instead of marching it additively, by resolving F from equilibrium at
every stage abscissa rather than freezing it across the window — so the
coupling is the tableau’s own order, not first order. Blanket over any
ElasticViscoplastic model, same as FirstOrderRoot itself.
Required Methods§
Sourcefn root_rkmk_dae<Tab: ButcherTableau>(
&self,
applied_load: AppliedLoad<'_>,
solver: impl FirstOrderRootFinding<FirstPiolaKirchhoffStress, FirstPiolaKirchhoffTangentStiffness, DeformationGradient>,
) -> Result<(Times, DeformationGradients, ViscoplasticStateVariablesHistory<Y>), ConstitutiveError>
fn root_rkmk_dae<Tab: ButcherTableau>( &self, applied_load: AppliedLoad<'_>, solver: impl FirstOrderRootFinding<FirstPiolaKirchhoffStress, FirstPiolaKirchhoffTangentStiffness, DeformationGradient>, ) -> Result<(Times, DeformationGradients, ViscoplasticStateVariablesHistory<Y>), ConstitutiveError>
F is re-solved from equilibrium at every stage abscissa of the
window while F_p advances on its group, generic over the hardening
variable Y. Stage i reconstructs F_p at σᵢ, solves
P(F, F_p^i) - λ(t + cᵢ Δt) - P_0 = 0 for F there, and evaluates the
plastic rate at that consistent pair.
This is the half-explicit RK treatment of the index-1 DAE that
FirstOrderRoot::root already performs, with the state leg moved off
the additive march onto expm/dexpinv — so det F_p = 1 is kept
rather than drifting.
Sourcefn root_rkmk_dae_adaptive<Tab: EmbeddedTableau>(
&self,
applied_load: AppliedLoad<'_>,
solver: impl FirstOrderRootFinding<FirstPiolaKirchhoffStress, FirstPiolaKirchhoffTangentStiffness, DeformationGradient>,
abs_tol: Scalar,
rel_tol: Scalar,
) -> Result<(Times, DeformationGradients, ViscoplasticStateVariablesHistory<Y>), ConstitutiveError>
fn root_rkmk_dae_adaptive<Tab: EmbeddedTableau>( &self, applied_load: AppliedLoad<'_>, solver: impl FirstOrderRootFinding<FirstPiolaKirchhoffStress, FirstPiolaKirchhoffTangentStiffness, DeformationGradient>, abs_tol: Scalar, rel_tol: Scalar, ) -> Result<(Times, DeformationGradients, ViscoplasticStateVariablesHistory<Y>), ConstitutiveError>
As Self::root_rkmk_dae, but the whole span is stepped under
embedded (Tab::D) error control rather than on the supplied load
grid.
Two times in applied_load give only the span, and the controller’s
own accepted steps are reported. More than two are requested report
times — the convention of the flat DAE loop — and F_p is served at
each from the geodesic HermiteSegment of the accepted step
containing it, so it is on the unimodular group at every reported time
and not just at the accepted ones; F is then re-solved from
equilibrium there.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".