Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #include "ExponentialSoftening.h" 11 : 12 : #include "MooseMesh.h" 13 : 14 : registerMooseObject("SolidMechanicsApp", ExponentialSoftening); 15 : 16 : InputParameters 17 112 : ExponentialSoftening::validParams() 18 : { 19 112 : InputParameters params = SmearedCrackSofteningBase::validParams(); 20 112 : params.addClassDescription( 21 : "Softening model with an exponential softening response upon cracking. This " 22 : "class is intended to be used with ComputeSmearedCrackingStress."); 23 336 : params.addRangeCheckedParam<Real>( 24 : "residual_stress", 25 224 : 0.0, 26 : "residual_stress <= 1 & residual_stress >= 0", 27 : "The fraction of the cracking stress allowed to be maintained following a crack."); 28 336 : params.addRangeCheckedParam<Real>( 29 : "alpha", 30 224 : -1.0, 31 : "alpha <= 0", 32 : "Initial slope of the exponential softening curve at crack initiation. " 33 : "If not specified, it is equal to the negative of the Young's modulus."); 34 336 : params.addRangeCheckedParam<Real>( 35 : "beta", 36 224 : 1.0, 37 : "beta >= 0", 38 : "Multiplier applied to alpha to control the exponential softening " 39 : "behavior."); 40 112 : return params; 41 0 : } 42 : 43 84 : ExponentialSoftening::ExponentialSoftening(const InputParameters & parameters) 44 : : SmearedCrackSofteningBase(parameters), 45 84 : _residual_stress(getParam<Real>("residual_stress")), 46 168 : _alpha(getParam<Real>("alpha")), 47 84 : _alpha_set_by_user(parameters.isParamSetByUser("alpha")), 48 252 : _beta(getParam<Real>("beta")) 49 : { 50 84 : } 51 : 52 : void 53 128028 : ExponentialSoftening::computeCrackingRelease(Real & stress, 54 : Real & stiffness_ratio, 55 : const Real /*strain*/, 56 : const Real crack_initiation_strain, 57 : const Real crack_max_strain, 58 : const Real cracking_stress, 59 : const Real youngs_modulus, 60 : const Real /*poissons_ratio*/) 61 : { 62 : mooseAssert(crack_max_strain >= crack_initiation_strain, 63 : "crack_max_strain must be >= crack_initiation_strain"); 64 : 65 : Real alpha = 0.0; 66 128028 : if (_alpha_set_by_user) 67 0 : alpha = _alpha; 68 : else 69 128028 : alpha = -youngs_modulus; 70 : 71 : // Compute stress that follows exponental curve 72 128028 : stress = cracking_stress * 73 128028 : (_residual_stress + 74 128028 : (1.0 - _residual_stress) * std::exp(alpha * _beta / cracking_stress * 75 128028 : (crack_max_strain - crack_initiation_strain))); 76 : // Compute ratio of current stiffness to original stiffness 77 128028 : stiffness_ratio = stress * crack_initiation_strain / (crack_max_strain * cracking_stress); 78 128028 : }