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 "SolidMechanicsHardeningGaussian.h" 11 : 12 : registerMooseObject("SolidMechanicsApp", SolidMechanicsHardeningGaussian); 13 : registerMooseObjectRenamed("SolidMechanicsApp", 14 : TensorMechanicsHardeningGaussian, 15 : "01/01/2025 00:00", 16 : SolidMechanicsHardeningGaussian); 17 : 18 : InputParameters 19 48 : SolidMechanicsHardeningGaussian::validParams() 20 : { 21 48 : InputParameters params = SolidMechanicsHardeningModel::validParams(); 22 96 : params.addRequiredParam<Real>( 23 : "value_0", "The value of the parameter for all internal_parameter <= internal_0"); 24 96 : params.addParam<Real>("value_residual", 25 : "The value of the parameter for internal_parameter = " 26 : "infinity. Default = value_0, ie perfect plasticity"); 27 96 : params.addParam<Real>( 28 96 : "internal_0", 0, "The value of the internal_parameter when hardening begins"); 29 96 : params.addParam<Real>("rate", 30 96 : 0, 31 : "Let p = internal_parameter. Then value = value_0 for " 32 : "p<internal_0, and value = value_residual + (value_0 - " 33 : "value_residual)*exp(-0.5*rate*(p - internal_0)^2)"); 34 48 : params.addClassDescription("Hardening is Gaussian"); 35 48 : return params; 36 0 : } 37 : 38 24 : SolidMechanicsHardeningGaussian::SolidMechanicsHardeningGaussian(const InputParameters & parameters) 39 : : SolidMechanicsHardeningModel(parameters), 40 24 : _val_0(getParam<Real>("value_0")), 41 72 : _val_res(parameters.isParamValid("value_residual") ? getParam<Real>("value_residual") : _val_0), 42 48 : _intnl_0(getParam<Real>("internal_0")), 43 72 : _rate(getParam<Real>("rate")) 44 : { 45 24 : } 46 : 47 : Real 48 41694 : SolidMechanicsHardeningGaussian::value(Real intnl) const 49 : { 50 41694 : Real x = intnl - _intnl_0; 51 41694 : if (x <= 0) 52 1854 : return _val_0; 53 : else 54 39840 : return _val_res + (_val_0 - _val_res) * std::exp(-0.5 * _rate * x * x); 55 : } 56 : 57 : Real 58 15456 : SolidMechanicsHardeningGaussian::derivative(Real intnl) const 59 : { 60 15456 : Real x = intnl - _intnl_0; 61 15456 : if (x <= 0) 62 : return 0; 63 : else 64 15072 : return -_rate * x * (_val_0 - _val_res) * std::exp(-0.5 * _rate * x * x); 65 : } 66 : 67 : std::string 68 0 : SolidMechanicsHardeningGaussian::modelName() const 69 : { 70 0 : return "Gaussian"; 71 : }