void ComputeMultipleInelasticStress::computeQpStress() { computeQpStressIntermediateConfiguration(); if (_perform_finite_strain_rotations) finiteStrainRotation(); }
void ComputeSmearedCrackingStress::computeQpStress() { bool force_elasticity_rotation = false; if (!previouslyCracked()) computeQpStressIntermediateConfiguration(); else { _elastic_strain[_qp] = _elastic_strain_old[_qp] + _strain_increment[_qp]; // Propagate behavior from the (now inactive) inelastic models _inelastic_strain[_qp] = _inelastic_strain_old[_qp]; for (auto model : _models) { model->setQp(_qp); model->propagateQpStatefulProperties(); } // Since the other inelastic models are inactive, they will not limit the time step _matl_timestep_limit[_qp] = std::numeric_limits<Real>::max(); // update _local_elasticity_tensor based on cracking state in previous time step updateLocalElasticityTensor(); // Calculate stress in intermediate configuration _stress[_qp] = _local_elasticity_tensor * _elastic_strain[_qp]; _Jacobian_mult[_qp] = _local_elasticity_tensor; force_elasticity_rotation = true; } // compute crack status and adjust stress updateCrackingStateAndStress(); if (_perform_finite_strain_rotations) { finiteStrainRotation(force_elasticity_rotation); _crack_rotation[_qp] = _rotation_increment[_qp] * _crack_rotation[_qp]; } }