https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
11
12#include "MooseMesh.h"
13
15
18{
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
53void
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 const ADReal & /*poissons_ratio*/)
62{
63 using std::exp;
64
65 mooseAssert(crack_max_strain >= crack_initiation_strain,
66 "crack_max_strain must be >= crack_initiation_strain");
67
68 ADReal alpha = 0.0;
70 alpha = _alpha;
71 else
72 alpha = -youngs_modulus;
73
74 // Compute stress that follows exponental curve
75 stress =
76 cracking_stress * (_residual_stress + (1.0 - _residual_stress) *
77 exp(alpha * _beta / cracking_stress *
78 (crack_max_strain - crack_initiation_strain)));
79 // Compute ratio of current stiffness to original stiffness
80 stiffness_ratio = stress * crack_initiation_strain / (crack_max_strain * cracking_stress);
81}
registerMooseObject("SolidMechanicsApp", ADExponentialSoftening)
DualNumber< Real, DNDerivativeType, true > ADReal
ExponentialSoftening is a smeared crack softening model that uses an exponential softening curve.
const Real & _residual_stress
Residual stress after full softening.
const Real & _alpha
Initial slope of the softening curve.
const bool _alpha_set_by_user
Variable to track whether _alpha was set by the user.
const Real & _beta
Multiplier on alpha to determine the initial softening slope.
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, const ADReal &poissons_ratio) override
Compute the effect of the cracking release model on the stress and stiffness in the direction of a si...
ADExponentialSoftening(const InputParameters &parameters)
static InputParameters validParams()
ADSmearedCrackSofteningBase is the base class for a set of models that define the softening behavior ...
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)