80        material_state_variables)
 const 
   82    auto const& eps_m = std::get<MPL::SymmetricTensor<DisplacementDim>>(
 
   84    auto const& eps_m_prev = std::get<MPL::SymmetricTensor<DisplacementDim>>(
 
   86    auto const& sigma_prev = std::get<MPL::SymmetricTensor<DisplacementDim>>(
 
   87        variable_array_prev.
stress);
 
   92               &material_state_variables) != 
nullptr);
 
   97    auto local_lubby2_properties =
 
  101    auto const& P_dev = Invariants::deviatoric_projection;
 
  108    KelvinVector sigd_t = P_dev * sigma_prev / local_lubby2_properties.GM0;
 
  111    double sig_eff = Invariants::equivalentStress(sigd_j);
 
  112    local_lubby2_properties.update(sig_eff);
 
  114    using LocalJacobianMatrix =
 
  120    Eigen::FullPivLU<LocalJacobianMatrix> linear_solver;
 
  133    LocalJacobianMatrix K_loc;
 
  135        using LocalResidualVector =
 
  136            Eigen::Matrix<double, KelvinVectorSize * 3, 1>;
 
  138        auto const update_residual = [&](LocalResidualVector& residual)
 
  143                                     local_lubby2_properties);
 
  146        auto const update_jacobian = [&](LocalJacobianMatrix& jacobian)
 
  149                t, x, dt, jacobian, sig_eff, sigd_j, state.
eps_K_j,
 
  150                local_lubby2_properties);  
 
  153        auto const update_solution = [&](LocalResidualVector 
const& increment)
 
  156            sigd_j.noalias() += increment.template segment<KelvinVectorSize>(
 
  168            local_lubby2_properties.update(sig_eff);
 
  172            linear_solver, update_jacobian, update_residual, update_solution,
 
  175        auto const success_iterations = newton_solver.solve(K_loc);
 
  177        if (!success_iterations)
 
  185        if (*success_iterations == 0)
 
  187            linear_solver.compute(K_loc);
 
  193                                           local_lubby2_properties.KM0,
 
  197    double const delta_eps_m_trace = Invariants::trace(eps_m - eps_m_prev);
 
  198    double const sigma_trace_prev = Invariants::trace(sigma_prev);
 
  200        local_lubby2_properties.GM0 * sigd_j +
 
  201        (local_lubby2_properties.KM0 * delta_eps_m_trace +
 
  202         sigma_trace_prev / 3.) *
 
  203            Invariants::identity2;
 
  204    return {std::make_tuple(
 
 
  227    res.template segment<KelvinVectorSize>(0).noalias() =
 
  228        (stress_curr - stress_t) -
 
  229        2. * ((strain_curr - strain_t) - (strain_Kel_curr - strain_Kel_t) -
 
  230              (strain_Max_curr - strain_Max_t));
 
  234        (strain_Kel_curr - strain_Kel_t) -
 
  235        dt / (2. * properties.
etaK) *
 
  236            (properties.
GM0 * stress_curr -
 
  237             2. * properties.
GK * strain_Kel_curr);
 
  241        (strain_Max_curr - strain_Max_t) -
 
  242        dt * 0.5 * properties.
GM0 / properties.
etaM * stress_curr;
 
 
  259    Jac.template block<KelvinVectorSize, KelvinVectorSize>(0, 0)
 
  269    Jac.template block<KelvinVectorSize, KelvinVectorSize>(0,
 
  277        -0.5 * dt * properties.
GM0 / properties.
etaK * KelvinMatrix::Identity();
 
  281            1. / (properties.
etaK * properties.
etaK) *
 
  282            (properties.
GM0 * sig_i - 2. * properties.
GK * eps_K_i);
 
  285                                  properties.
GM0 / s_eff * sig_i;
 
  287                                    properties.
etaK / s_eff * sig_i;
 
  290            .noalias() += 0.5 * dt * eps_K_aid * dmu_vK.transpose() +
 
  291                          dt / properties.
etaK * eps_K_i * dG_K.transpose();
 
  298        .setConstant(1. + dt * properties.
GK / properties.
etaK);
 
  303    Jac.template block<KelvinVectorSize, KelvinVectorSize>(2 * 
KelvinVectorSize,
 
  306        -0.5 * dt * properties.
GM0 / properties.
etaM * KelvinMatrix::Identity();
 
  310                                    properties.
etaM / s_eff * sig_i;
 
  311        Jac.template block<KelvinVectorSize, KelvinVectorSize>(
 
  313            .noalias() += 0.5 * dt * properties.
GM0 /
 
  314                          (properties.
etaM * properties.
etaM) * sig_i *
 
  321    Jac.template block<KelvinVectorSize, KelvinVectorSize>(2 * 
KelvinVectorSize,
 
 
std::optional< std::tuple< KelvinVector, std::unique_ptr< typename MechanicsBase< DisplacementDim >::MaterialStateVariables >, KelvinMatrix > > integrateStress(MaterialPropertyLib::VariableArray const &variable_array_prev, MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x, double const dt, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &material_state_variables) const override
 
void calculateJacobianBurgers(double const t, ParameterLib::SpatialPosition const &x, double const dt, JacobianMatrix &Jac, double s_eff, const KelvinVector &sig_i, const KelvinVector &eps_K_i, detail::LocalLubby2Properties< DisplacementDim > const &properties) const
Calculates the 18x18 Jacobian.
 
void calculateResidualBurgers(double const dt, const KelvinVector &strain_curr, const KelvinVector &strain_t, const KelvinVector &stress_curr, const KelvinVector &stress_t, const KelvinVector &strain_Kel_curr, const KelvinVector &strain_Kel_t, const KelvinVector &strain_Max_curr, const KelvinVector &strain_Max_t, ResidualVector &res, detail::LocalLubby2Properties< DisplacementDim > const &properties) const
Calculates the 18x1 residual vector.