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 56 : SolidMechanicsHardeningGaussian::validParams() 20 : { 21 56 : InputParameters params = SolidMechanicsHardeningModel::validParams(); 22 112 : params.addRequiredParam<Real>( 23 : "value_0", "The value of the parameter for all internal_parameter <= internal_0"); 24 112 : params.addParam<Real>("value_residual", 25 : "The value of the parameter for internal_parameter = " 26 : "infinity. Default = value_0, ie perfect plasticity"); 27 112 : params.addParam<Real>( 28 112 : "internal_0", 0, "The value of the internal_parameter when hardening begins"); 29 112 : params.addParam<Real>("rate", 30 112 : 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 56 : params.addClassDescription("Hardening is Gaussian"); 35 56 : return params; 36 0 : } 37 : 38 28 : SolidMechanicsHardeningGaussian::SolidMechanicsHardeningGaussian(const InputParameters & parameters) 39 : : SolidMechanicsHardeningModel(parameters), 40 28 : _val_0(getParam<Real>("value_0")), 41 84 : _val_res(parameters.isParamValid("value_residual") ? getParam<Real>("value_residual") : _val_0), 42 56 : _intnl_0(getParam<Real>("internal_0")), 43 84 : _rate(getParam<Real>("rate")) 44 : { 45 28 : } 46 : 47 : Real 48 53243 : SolidMechanicsHardeningGaussian::value(Real intnl) const 49 : { 50 53243 : Real x = intnl - _intnl_0; 51 53243 : if (x <= 0) 52 2387 : return _val_0; 53 : else 54 50856 : return _val_res + (_val_0 - _val_res) * std::exp(-0.5 * _rate * x * x); 55 : } 56 : 57 : Real 58 19800 : SolidMechanicsHardeningGaussian::derivative(Real intnl) const 59 : { 60 19800 : Real x = intnl - _intnl_0; 61 19800 : if (x <= 0) 62 : return 0; 63 : else 64 19296 : 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 : }