https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
14registerMooseObjectRenamed("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
46Real
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
61Real
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
91Real
93{
94 return _strength.value(internal_param);
95}
96
97Real
99{
100 return _strength.derivative(internal_param);
101}
102
103void
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
137std::string
139{
140 return "WeakPlaneTensile";
141}
Real f(Real x)
Test function for Brents method.
registerMooseObject("SolidMechanicsApp", SolidMechanicsPlasticWeakPlaneTensile)
registerMooseObjectRenamed("SolidMechanicsApp", TensorMechanicsPlasticWeakPlaneTensile, "01/01/2025 00:00", SolidMechanicsPlasticWeakPlaneTensile)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void mooseError(Args &&... args) const
virtual Real derivative(Real intnl) const
virtual Real value(Real intnl) const
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
const Real _f_tol
Tolerance on yield function.
static InputParameters validParams()
Rate-independent associative weak-plane tensile failure with hardening/softening of the tensile stren...
RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to stress.
RankTwoTensor dflowPotential_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to the internal parameter.
RankTwoTensor flowPotential(const RankTwoTensor &stress, Real intnl) const override
The flow potential.
const Real _a
Yield function = _a * stress_zz - _strength;.
SolidMechanicsPlasticWeakPlaneTensile(const InputParameters &parameters)
RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to stress.
Real dyieldFunction_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to the internal parameter.
Real yieldFunction(const RankTwoTensor &stress, Real intnl) const override
The following functions are what you should override when building single-plasticity models.
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
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.
const SolidMechanicsHardeningModel & _strength
Yield function = _a * stress_zz - _strength;.
virtual Real tensile_strength(const Real internal_param) const
tensile strength as a function of residual value, rate, and internal_param