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 144 : LargeDeformationJ2PowerLawCreep::validParams() 12 : { 13 144 : InputParameters params = LargeDeformationJ2Plasticity::validParams(); 14 144 : 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 288 : params.addRequiredParam<Real>("coefficient", 18 : "The coefficient $A$ in the update formula for creep rate"); 19 288 : params.addRequiredParam<Real>("exponent", 20 : "The exponent $n$ in the update formula for creep rate"); 21 144 : 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 : using std::pow; 36 : const ADReal stress_delta = 37 : effective_trial_stress - 38 14736 : _elasticity_model->computeMandelStress(delta_ep * _Np[_qp], /*plasticity_update = */ true) 39 7368 : .doubleContraction(_Np[_qp]); 40 : const ADReal yield_stress = 41 14736 : _hardening_model->plasticEnergy(_ep_old[_qp] + delta_ep, 1) + 42 14736 : _hardening_model->plasticDissipation(delta_ep, _ep_old[_qp] + delta_ep, 1); 43 14736 : const ADReal creep_rate = _coefficient * pow(stress_delta / yield_stress, _exponent); 44 14736 : return creep_rate * _dt - delta_ep; 45 : } 46 : 47 : ADReal 48 5600 : LargeDeformationJ2PowerLawCreep::computeDerivative(const ADReal & effective_trial_stress, 49 : const ADReal & delta_ep) 50 : { 51 : using std::pow; 52 : const ADReal stress_delta = 53 : effective_trial_stress - 54 11200 : _elasticity_model->computeMandelStress(delta_ep * _Np[_qp], /*plasticity_update = */ true) 55 5600 : .doubleContraction(_Np[_qp]); 56 : const ADReal dstress_delta_ddelta_ep = 57 5600 : -_elasticity_model->computeMandelStress(_Np[_qp], /*plasticity_update = */ true) 58 5600 : .doubleContraction(_Np[_qp]); 59 : const ADReal yield_stress = 60 11200 : _hardening_model->plasticEnergy(_ep_old[_qp] + delta_ep, 1) + 61 11200 : _hardening_model->plasticDissipation(delta_ep, _ep_old[_qp] + delta_ep, 1); 62 : const ADReal dyield_stress_ddelta_ep = 63 11200 : _hardening_model->plasticEnergy(_ep_old[_qp] + delta_ep, 2) + 64 11200 : _hardening_model->plasticDissipation(delta_ep, _ep_old[_qp] + delta_ep, 2); 65 : const ADReal dcreep_rate = 66 16800 : _coefficient * _exponent * pow(stress_delta / yield_stress, _exponent - 1); 67 5600 : return dcreep_rate * 68 5600 : (dstress_delta_ddelta_ep * yield_stress - stress_delta * dyield_stress_ddelta_ep) / 69 5600 : yield_stress / yield_stress * _dt - 70 5600 : 1; 71 : }