https://mooseframework.inl.gov
SolidMechanicsPlasticWeakPlaneTensile.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 #include "RankFourTensor.h"
12 
14 registerMooseObjectRenamed("SolidMechanicsApp",
15  TensorMechanicsPlasticWeakPlaneTensile,
16  "01/01/2025 00:00",
18 
21 {
23  params.addParam<Real>("stress_coefficient",
24  1.0,
25  "The yield function is stress_coefficient * stress_zz - tensile_strength");
26  params.addRequiredParam<UserObjectName>("tensile_strength",
27  "A SolidMechanicsHardening "
28  "UserObject that defines hardening "
29  "of the weak-plane tensile strength");
30  params.addClassDescription("Associative weak-plane tensile plasticity with hardening/softening");
31 
32  return params;
33 }
34 
36  const InputParameters & parameters)
37  : SolidMechanicsPlasticModel(parameters),
38  _a(getParam<Real>("stress_coefficient")),
39  _strength(getUserObject<SolidMechanicsHardeningModel>("tensile_strength"))
40 {
41  // cannot check the following for all values of strength, but this is a start
42  if (_strength.value(0) < 0)
43  mooseError("Weak plane tensile strength must not be negative");
44 }
45 
46 Real
48 {
49  return _a * stress(2, 2) - tensile_strength(intnl);
50 }
51 
54  Real /*intnl*/) const
55 {
56  RankTwoTensor df_dsig;
57  df_dsig(2, 2) = _a;
58  return df_dsig;
59 }
60 
61 Real
63  Real intnl) const
64 {
65  return -dtensile_strength(intnl);
66 }
67 
70  Real /*intnl*/) const
71 {
72  RankTwoTensor df_dsig;
73  df_dsig(2, 2) = _a;
74  return df_dsig;
75 }
76 
79  Real /*intnl*/) const
80 {
81  return RankFourTensor();
82 }
83 
86  Real /*intnl*/) const
87 {
88  return RankTwoTensor();
89 }
90 
91 Real
93 {
94  return _strength.value(internal_param);
95 }
96 
97 Real
99 {
100  return _strength.derivative(internal_param);
101 }
102 
103 void
105  const RankTwoTensor & stress,
106  Real intnl,
107  const RankFourTensor & Eijkl,
108  std::vector<bool> & act,
109  RankTwoTensor & returned_stress) const
110 {
111  act.assign(1, false);
112 
113  if (f[0] <= _f_tol)
114  {
115  returned_stress = stress;
116  return;
117  }
118 
119  Real str = tensile_strength(intnl);
120 
121  RankTwoTensor n; // flow direction
122  for (unsigned i = 0; i < 3; ++i)
123  for (unsigned j = 0; j < 3; ++j)
124  n(i, j) = _a * Eijkl(i, j, 2, 2);
125 
126  // returned_stress = _a * stress - alpha*n
127  // where alpha = (_a * stress(2, 2) - str)/n(2, 2)
128  Real alpha = (_a * stress(2, 2) - str) / n(2, 2);
129 
130  for (unsigned i = 0; i < 3; ++i)
131  for (unsigned j = 0; j < 3; ++j)
132  returned_stress(i, j) = _a * stress(i, j) - alpha * n(i, j);
133 
134  act[0] = true;
135 }
136 
137 std::string
139 {
140  return "WeakPlaneTensile";
141 }
RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to stress.
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
registerMooseObject("SolidMechanicsApp", SolidMechanicsPlasticWeakPlaneTensile)
RankTwoTensor flowPotential(const RankTwoTensor &stress, Real intnl) const override
The flow potential.
RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to stress.
SolidMechanicsPlasticWeakPlaneTensile(const InputParameters &parameters)
Real yieldFunction(const RankTwoTensor &stress, Real intnl) const override
The following functions are what you should override when building single-plasticity models...
virtual Real value(Real intnl) const
void addRequiredParam(const std::string &name, const std::string &doc_string)
static InputParameters validParams()
Real f(Real x)
Test function for Brents method.
Rate-independent associative weak-plane tensile failure with hardening/softening of the tensile stren...
virtual Real tensile_strength(const Real internal_param) const
tensile strength as a function of residual value, rate, and internal_param
const SolidMechanicsHardeningModel & _strength
Yield function = _a * stress_zz - _strength;.
const Real _f_tol
Tolerance on yield function.
virtual Real derivative(Real intnl) const
const Real _a
Yield function = _a * stress_zz - _strength;.
virtual Real dtensile_strength(const Real internal_param) const
d(tensile strength)/d(internal_param) as a function of residual value, rate, and internal_param ...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string alpha
Definition: NS.h:134
virtual void activeConstraints(const std::vector< Real > &f, const RankTwoTensor &stress, Real intnl, const RankFourTensor &Eijkl, std::vector< bool > &act, RankTwoTensor &returned_stress) const override
The active yield surfaces, given a vector of yield functions.
RankTwoTensor dflowPotential_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to the internal parameter.
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
Real dyieldFunction_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to the internal parameter.
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
registerMooseObjectRenamed("SolidMechanicsApp", TensorMechanicsPlasticWeakPlaneTensile, "01/01/2025 00:00", SolidMechanicsPlasticWeakPlaneTensile)