https://mooseframework.inl.gov
ExponentialSoftening.C
Go to the documentation of this file.
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 
18 {
20  params.addClassDescription(
21  "Softening model with an exponential softening response upon cracking. This "
22  "class is intended to be used with ComputeSmearedCrackingStress.");
23  params.addRangeCheckedParam<Real>(
24  "residual_stress",
25  0.0,
26  "residual_stress <= 1 & residual_stress >= 0",
27  "The fraction of the cracking stress allowed to be maintained following a crack.");
28  params.addRangeCheckedParam<Real>(
29  "alpha",
30  -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  params.addRangeCheckedParam<Real>(
35  "beta",
36  1.0,
37  "beta >= 0",
38  "Multiplier applied to alpha to control the exponential softening "
39  "behavior.");
40  return params;
41 }
42 
44  : SmearedCrackSofteningBase(parameters),
45  _residual_stress(getParam<Real>("residual_stress")),
46  _alpha(getParam<Real>("alpha")),
47  _alpha_set_by_user(parameters.isParamSetByUser("alpha")),
48  _beta(getParam<Real>("beta"))
49 {
50 }
51 
52 void
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 {
61  mooseAssert(crack_max_strain >= crack_initiation_strain,
62  "crack_max_strain must be >= crack_initiation_strain");
63 
64  Real alpha = 0.0;
66  alpha = _alpha;
67  else
68  alpha = -youngs_modulus;
69 
70  // Compute stress that follows exponental curve
71  stress = cracking_stress *
73  (1.0 - _residual_stress) * std::exp(alpha * _beta / cracking_stress *
74  (crack_max_strain - crack_initiation_strain)));
75  // Compute ratio of current stiffness to original stiffness
76  stiffness_ratio = stress * crack_initiation_strain / (crack_max_strain * cracking_stress);
77 }
virtual void computeCrackingRelease(Real &stress, Real &stiffness_ratio, const Real strain, const Real crack_initiation_strain, const Real crack_max_strain, const Real cracking_stress, const Real youngs_modulus) override
Compute the effect of the cracking release model on the stress and stiffness in the direction of a si...
ExponentialSoftening(const InputParameters &parameters)
const Real & _alpha
Initial slope of the softening curve.
registerMooseObject("SolidMechanicsApp", ExponentialSoftening)
const Real & _residual_stress
Residual stress after full softening.
static InputParameters validParams()
const Real & _beta
Multiplier on alpha to determine the initial softening slope.
static InputParameters validParams()
ExponentialSoftening is a smeared crack softening model that uses an exponential softening curve...
SmearedCrackSofteningBase is the base class for a set of models that define the softening behavior of...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string alpha
Definition: NS.h:134
void addClassDescription(const std::string &doc_string)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
const bool _alpha_set_by_user
Variable to track whether _alpha was set by the user.