https://mooseframework.inl.gov
ADExponentialSoftening.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 "ADExponentialSoftening.h"
11 
12 #include "MooseMesh.h"
13 
14 registerMooseObject("SolidMechanicsApp", ADExponentialSoftening);
15 
18 {
20  params.addClassDescription(
21  "Softening model with an exponential softening response upon cracking. This "
22  "class is intended to be used with ADComputeSmearedCrackingStress and relies on automatic "
23  "differentiation.");
24  params.addRangeCheckedParam<Real>(
25  "residual_stress",
26  0.0,
27  "residual_stress <= 1 & residual_stress >= 0",
28  "The fraction of the cracking stress allowed to be maintained following a crack.");
29  params.addRangeCheckedParam<Real>(
30  "alpha",
31  -1.0,
32  "alpha <= 0",
33  "Initial slope of the exponential softening curve at crack initiation. "
34  "If not specified, it is equal to the negative of the Young's modulus.");
35  params.addRangeCheckedParam<Real>(
36  "beta",
37  1.0,
38  "beta >= 0",
39  "Multiplier applied to alpha to control the exponential softening "
40  "behavior.");
41  return params;
42 }
43 
45  : ADSmearedCrackSofteningBase(parameters),
46  _residual_stress(getParam<Real>("residual_stress")),
47  _alpha(getParam<Real>("alpha")),
48  _alpha_set_by_user(parameters.isParamSetByUser("alpha")),
49  _beta(getParam<Real>("beta"))
50 {
51 }
52 
53 void
55  ADReal & stiffness_ratio,
56  const ADReal & /*strain*/,
57  const ADReal & crack_initiation_strain,
58  const ADReal & crack_max_strain,
59  const ADReal & cracking_stress,
60  const ADReal & youngs_modulus)
61 {
62  mooseAssert(crack_max_strain >= crack_initiation_strain,
63  "crack_max_strain must be >= crack_initiation_strain");
64 
65  ADReal alpha = 0.0;
67  alpha = _alpha;
68  else
69  alpha = -youngs_modulus;
70 
71  // Compute stress that follows exponental curve
72  stress = cracking_stress *
74  (1.0 - _residual_stress) * std::exp(alpha * _beta / cracking_stress *
75  (crack_max_strain - crack_initiation_strain)));
76  // Compute ratio of current stiffness to original stiffness
77  stiffness_ratio = stress * crack_initiation_strain / (crack_max_strain * cracking_stress);
78 }
static InputParameters validParams()
const bool _alpha_set_by_user
Variable to track whether _alpha was set by the user.
ExponentialSoftening is a smeared crack softening model that uses an exponential softening curve...
static InputParameters validParams()
virtual void computeCrackingRelease(ADReal &stress, ADReal &stiffness_ratio, const ADReal &strain, const ADReal &crack_initiation_strain, const ADReal &crack_max_strain, const ADReal &cracking_stress, const ADReal &youngs_modulus) override
Compute the effect of the cracking release model on the stress and stiffness in the direction of a si...
const Real & _alpha
Initial slope of the softening curve.
const Real & _beta
Multiplier on alpha to determine the initial softening slope.
ADExponentialSoftening(const InputParameters &parameters)
ADSmearedCrackSofteningBase is the base class for a set of models that define the softening behavior ...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string alpha
Definition: NS.h:134
const Real & _residual_stress
Residual stress after full softening.
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)
registerMooseObject("SolidMechanicsApp", ADExponentialSoftening)