LCOV - code coverage report
Current view: top level - src/userobjects - TensorMechanicsHardeningCubic.C (source / functions) Hit Total Coverage
Test: idaholab/moose tensor_mechanics: d6b47a Lines: 35 37 94.6 %
Date: 2024-02-27 11:53:14 Functions: 5 5 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://www.mooseframework.org
       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 "TensorMechanicsHardeningCubic.h"
      11             : #include "libmesh/utility.h"
      12             : 
      13             : registerMooseObject("TensorMechanicsApp", TensorMechanicsHardeningCubic);
      14             : 
      15             : InputParameters
      16         716 : TensorMechanicsHardeningCubic::validParams()
      17             : {
      18         716 :   InputParameters params = TensorMechanicsHardeningModel::validParams();
      19        1432 :   params.addRequiredParam<Real>(
      20             :       "value_0", "The value of the parameter for all internal_parameter <= internal_0");
      21        1432 :   params.addParam<Real>("value_residual",
      22             :                         "The value of the parameter for internal_parameter >= "
      23             :                         "internal_limit.  Default = value_0, ie perfect "
      24             :                         "plasticity");
      25        1432 :   params.addParam<Real>(
      26        1432 :       "internal_0", 0.0, "The value of the internal_parameter when hardening begins");
      27        1432 :   params.addParam<Real>("internal_limit",
      28        1432 :                         1.0,
      29             :                         "The value of the internal_parameter when hardening "
      30             :                         "ends.  This hardening forms a cubic between "
      31             :                         "(internal_0, value_0) and (internal_limit, "
      32             :                         "value_residual) that is smooth at internal_0 and "
      33             :                         "internal_limit");
      34         716 :   params.addClassDescription("Hardening is Cubic");
      35         716 :   return params;
      36           0 : }
      37             : 
      38         358 : TensorMechanicsHardeningCubic::TensorMechanicsHardeningCubic(const InputParameters & parameters)
      39             :   : TensorMechanicsHardeningModel(parameters),
      40         358 :     _val_0(getParam<Real>("value_0")),
      41        1062 :     _val_res(parameters.isParamValid("value_residual") ? getParam<Real>("value_residual") : _val_0),
      42         716 :     _intnl_0(getParam<Real>("internal_0")),
      43         716 :     _intnl_limit(getParam<Real>("internal_limit")),
      44         358 :     _half_intnl_limit(0.5 * (_intnl_limit - _intnl_0)),
      45         358 :     _alpha((_val_0 - _val_res) / (4.0 * Utility::pow<3>(_half_intnl_limit))),
      46         358 :     _beta(-3.0 * _alpha * Utility::pow<2>(_half_intnl_limit))
      47             : {
      48         358 :   if (_intnl_limit <= _intnl_0)
      49           0 :     mooseError("internal_limit must be greater than internal_0 in Cubic Hardening");
      50         358 : }
      51             : 
      52             : Real
      53     7123462 : TensorMechanicsHardeningCubic::value(Real intnl) const
      54             : {
      55     7123462 :   const Real x = intnl - _intnl_0;
      56     7123462 :   if (x <= 0.0)
      57     2802804 :     return _val_0;
      58     4320658 :   else if (intnl >= _intnl_limit)
      59        9748 :     return _val_res;
      60             :   else
      61     4310910 :     return _alpha * Utility::pow<3>(x - _half_intnl_limit) + _beta * (x - _half_intnl_limit) +
      62     4310910 :            0.5 * (_val_0 + _val_res);
      63             : }
      64             : 
      65             : Real
      66     2559306 : TensorMechanicsHardeningCubic::derivative(Real intnl) const
      67             : {
      68     2559306 :   const Real x = intnl - _intnl_0;
      69     2559306 :   if (x <= 0.0)
      70             :     return 0.0;
      71     1878150 :   else if (intnl >= _intnl_limit)
      72             :     return 0.0;
      73             :   else
      74     1873958 :     return 3.0 * _alpha * Utility::pow<2>(x - _half_intnl_limit) + _beta;
      75             : }
      76             : 
      77             : std::string
      78        4172 : TensorMechanicsHardeningCubic::modelName() const
      79             : {
      80        4172 :   return "Cubic";
      81             : }

Generated by: LCOV version 1.14