Skip to main content

RootRkmkDae

Trait RootRkmkDae 

Source
pub trait RootRkmkDae<Y>{
    // 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§

Source

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.

Source

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".

Implementors§