Line data Source code
1 : //* This file is part of the RACCOON application 2 : //* being developed at Dolbow lab at Duke University 3 : //* http://dolbow.pratt.duke.edu 4 : 5 : #include "LargeDeformationJ2PowerLawCreep.h" 6 : #include "RaccoonUtils.h" 7 : 8 : registerMooseObject("raccoonApp", LargeDeformationJ2PowerLawCreep); 9 : 10 : InputParameters 11 146 : LargeDeformationJ2PowerLawCreep::validParams() 12 : { 13 146 : InputParameters params = LargeDeformationJ2Plasticity::validParams(); 14 146 : params.addClassDescription("Large deformation $J_2$ power-law creep. This is an approximation to " 15 : "the consistent plasticity model using the update formula $\\epdot " 16 : "= A \\dfrac{\\bar{\\sigma}}{\\sigma_y}^n$."); 17 292 : params.addRequiredParam<Real>("coefficient", 18 : "The coefficient $A$ in the update formula for creep rate"); 19 292 : params.addRequiredParam<Real>("exponent", 20 : "The exponent $n$ in the update formula for creep rate"); 21 146 : return params; 22 0 : } 23 : 24 6 : LargeDeformationJ2PowerLawCreep::LargeDeformationJ2PowerLawCreep(const InputParameters & parameters) 25 : : LargeDeformationJ2Plasticity(parameters), 26 6 : _coefficient(getParam<Real>("coefficient")), 27 18 : _exponent(getParam<Real>("exponent")) 28 : { 29 6 : } 30 : 31 : ADReal 32 7368 : LargeDeformationJ2PowerLawCreep::computeResidual(const ADReal & effective_trial_stress, 33 : const ADReal & delta_ep) 34 : { 35 : const ADReal stress_delta = 36 : effective_trial_stress - 37 14736 : _elasticity_model->computeMandelStress(delta_ep * _Np[_qp], /*plasticity_update = */ true) 38 7368 : .doubleContraction(_Np[_qp]); 39 : const ADReal yield_stress = 40 14736 : _hardening_model->plasticEnergy(_ep_old[_qp] + delta_ep, 1) + 41 14736 : _hardening_model->plasticDissipation(delta_ep, _ep_old[_qp] + delta_ep, 1); 42 14736 : const ADReal creep_rate = _coefficient * std::pow(stress_delta / yield_stress, _exponent); 43 14736 : return creep_rate * _dt - delta_ep; 44 : } 45 : 46 : ADReal 47 5600 : LargeDeformationJ2PowerLawCreep::computeDerivative(const ADReal & effective_trial_stress, 48 : const ADReal & delta_ep) 49 : { 50 : const ADReal stress_delta = 51 : effective_trial_stress - 52 11200 : _elasticity_model->computeMandelStress(delta_ep * _Np[_qp], /*plasticity_update = */ true) 53 5600 : .doubleContraction(_Np[_qp]); 54 : const ADReal dstress_delta_ddelta_ep = 55 5600 : -_elasticity_model->computeMandelStress(_Np[_qp], /*plasticity_update = */ true) 56 5600 : .doubleContraction(_Np[_qp]); 57 : const ADReal yield_stress = 58 11200 : _hardening_model->plasticEnergy(_ep_old[_qp] + delta_ep, 1) + 59 11200 : _hardening_model->plasticDissipation(delta_ep, _ep_old[_qp] + delta_ep, 1); 60 : const ADReal dyield_stress_ddelta_ep = 61 11200 : _hardening_model->plasticEnergy(_ep_old[_qp] + delta_ep, 2) + 62 11200 : _hardening_model->plasticDissipation(delta_ep, _ep_old[_qp] + delta_ep, 2); 63 : const ADReal dcreep_rate = 64 16800 : _coefficient * _exponent * std::pow(stress_delta / yield_stress, _exponent - 1); 65 5600 : return dcreep_rate * 66 5600 : (dstress_delta_ddelta_ep * yield_stress - stress_delta * dyield_stress_ddelta_ep) / 67 5600 : yield_stress / yield_stress * _dt - 68 5600 : 1; 69 : }