www.mooseframework.org
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
PlasticTruss Class Reference

#include <PlasticTruss.h>

Inheritance diagram for PlasticTruss:
[legend]

Public Member Functions

 PlasticTruss (const InputParameters &parameters)
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual void computeQpStrain ()
 
virtual void computeQpStress ()
 
virtual void initQpStatefulProperties ()
 
virtual Real computeHardeningValue (Real scalar)
 
virtual Real computeHardeningDerivative (Real scalar)
 
virtual void computeProperties ()
 

Protected Attributes

Real _yield_stress
 
const Real _hardening_constant
 
const Function * _hardening_function
 
Real _absolute_tolerance
 convergence tolerance More...
 
Real _relative_tolerance
 
const MaterialProperty< Real > & _total_stretch_old
 
MaterialProperty< Real > & _plastic_strain
 
const MaterialProperty< Real > & _plastic_strain_old
 
const MaterialProperty< Real > & _stress_old
 
MaterialProperty< Real > & _hardening_variable
 
const MaterialProperty< Real > & _hardening_variable_old
 
const unsigned int _max_its
 maximum no. of iterations More...
 
std::vector< MooseVariable * > _disp_var
 
const std::string _base_name
 
unsigned int _ndisp
 
const VariableValue & _youngs_modulus
 
MaterialProperty< Real > & _total_stretch
 
MaterialProperty< Real > & _elastic_stretch
 
MaterialProperty< Real > & _axial_stress
 
MaterialProperty< Real > & _e_over_l
 
Real _origin_length
 
Real _current_length
 

Private Attributes

const VariableValue & _T
 
Real _T0
 
Real _thermal_expansion_coeff
 

Detailed Description

Definition at line 19 of file PlasticTruss.h.

Constructor & Destructor Documentation

◆ PlasticTruss()

PlasticTruss::PlasticTruss ( const InputParameters &  parameters)

Definition at line 38 of file PlasticTruss.C.

39  : LinearElasticTruss(parameters),
40  _yield_stress(getParam<Real>("yield_stress")), // Read from input file
41  _hardening_constant(getParam<Real>("hardening_constant")),
42  _hardening_function(isParamValid("hardening_function") ? &getFunction("hardening_function")
43  : NULL),
44  _absolute_tolerance(parameters.get<Real>("absolute_tolerance")),
45  _relative_tolerance(parameters.get<Real>("relative_tolerance")),
46  _total_stretch_old(getMaterialPropertyOld<Real>(_base_name + "total_stretch")),
47  _plastic_strain(declareProperty<Real>(_base_name + "plastic_stretch")),
48  _plastic_strain_old(getMaterialPropertyOld<Real>(_base_name + "plastic_stretch")),
49  _stress_old(getMaterialPropertyOld<Real>(_base_name + "axial_stress")),
50  _hardening_variable(declareProperty<Real>(_base_name + "hardening_variable")),
51  _hardening_variable_old(getMaterialPropertyOld<Real>(_base_name + "hardening_variable")),
52  _max_its(1000)
53 {
54  if (!parameters.isParamSetByUser("hardening_constant") && !isParamValid("hardening_function"))
55  mooseError("PlasticTruss: Either hardening_constant or hardening_function must be defined");
56 
57  if (parameters.isParamSetByUser("hardening_constant") && isParamValid("hardening_function"))
58  mooseError("PlasticTruss: Only the hardening_constant or only the hardening_function can be "
59  "defined but not both");
60 }

Member Function Documentation

◆ computeHardeningDerivative()

Real PlasticTruss::computeHardeningDerivative ( Real  scalar)
protectedvirtual

Definition at line 140 of file PlasticTruss.C.

141 {
143  {
144  const Real strain_old = _plastic_strain_old[_qp];
145  const Point p;
146 
147  return _hardening_function->timeDerivative(std::abs(strain_old), p);
148  }
149 
150  return _hardening_constant;
151 }

Referenced by computeQpStress().

◆ computeHardeningValue()

Real PlasticTruss::computeHardeningValue ( Real  scalar)
protectedvirtual

Definition at line 127 of file PlasticTruss.C.

128 {
130  {
131  const Real strain_old = _plastic_strain_old[_qp];
132  const Point p;
133 
134  return _hardening_function->value(std::abs(strain_old) + scalar, p) - _yield_stress;
135  }
136 
137  return _hardening_variable_old[_qp] + _hardening_constant * scalar;
138 }

Referenced by computeQpStress().

◆ computeProperties()

void TrussMaterial::computeProperties ( )
protectedvirtualinherited

Definition at line 63 of file TrussMaterial.C.

64 {
65  // check for consistency of the number of element nodes
66  mooseAssert(_current_elem->n_nodes() == 2, "Truss element needs to have exactly two nodes.");
67 
68  // fetch the two end nodes for _current_elem
69  std::vector<const Node *> node;
70  for (unsigned int i = 0; i < 2; ++i)
71  node.push_back(_current_elem->node_ptr(i));
72 
73  // calculate original length of a truss element
74  RealGradient dxyz;
75  for (unsigned int i = 0; i < _ndisp; ++i)
76  dxyz(i) = (*node[1])(i) - (*node[0])(i);
77  _origin_length = dxyz.norm();
78 
79  // fetch the solution for the two end nodes
80  NonlinearSystemBase & nonlinear_sys = _fe_problem.getNonlinearSystemBase();
81  const NumericVector<Number> & sol = *nonlinear_sys.currentSolution();
82 
83  std::vector<Real> disp0, disp1;
84  for (unsigned int i = 0; i < _ndisp; ++i)
85  {
86  disp0.push_back(sol(node[0]->dof_number(nonlinear_sys.number(), _disp_var[i]->number(), 0)));
87  disp1.push_back(sol(node[1]->dof_number(nonlinear_sys.number(), _disp_var[i]->number(), 0)));
88  }
89 
90  // calculate current length of a truss element
91  for (unsigned int i = 0; i < _ndisp; ++i)
92  dxyz(i) += disp1[i] - disp0[i];
93  _current_length = dxyz.norm();
94 
95  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
96  {
98 
100  computeQpStress();
101  }
102 }

◆ computeQpStrain()

void PlasticTruss::computeQpStrain ( )
protectedvirtual

Reimplemented from LinearElasticTruss.

Definition at line 71 of file PlasticTruss.C.

72 {
74 }

◆ computeQpStress()

void PlasticTruss::computeQpStress ( )
protectedvirtual

Reimplemented from LinearElasticTruss.

Definition at line 77 of file PlasticTruss.C.

78 {
79  Real strain_increment = _total_stretch[_qp] - _total_stretch_old[_qp];
80  Real trial_stress = _stress_old[_qp] + _youngs_modulus[_qp] * strain_increment;
81 
84 
85  Real yield_condition = std::abs(trial_stress) - _hardening_variable[_qp] - _yield_stress;
86  Real iteration = 0;
87  Real plastic_strain_increment = 0.0;
88  Real elastic_strain_increment = strain_increment;
89 
90  if (yield_condition > 0.0)
91  {
92  Real residual = std::abs(trial_stress) - _hardening_variable[_qp] - _yield_stress -
93  _youngs_modulus[_qp] * plastic_strain_increment;
94 
95  Real reference_residual =
96  std::abs(trial_stress) - _youngs_modulus[_qp] * plastic_strain_increment;
97 
98  while (std::abs(residual) > _absolute_tolerance ||
99  std::abs(residual / reference_residual) > _relative_tolerance)
100  {
101  _hardening_variable[_qp] = computeHardeningValue(plastic_strain_increment);
102  Real hardening_slope = computeHardeningDerivative(plastic_strain_increment);
103 
104  Real scalar = (std::abs(trial_stress) - _hardening_variable[_qp] - _yield_stress -
105  _youngs_modulus[_qp] * plastic_strain_increment) /
106  (_youngs_modulus[_qp] + hardening_slope);
107  plastic_strain_increment += scalar;
108 
109  residual = std::abs(trial_stress) - _hardening_variable[_qp] - _yield_stress -
110  _youngs_modulus[_qp] * plastic_strain_increment;
111 
112  reference_residual = std::abs(trial_stress) - _youngs_modulus[_qp] * plastic_strain_increment;
113 
114  ++iteration;
115  if (iteration > _max_its) // not converging
116  throw MooseException("PlasticTruss: Plasticity model did not converge");
117  }
118  plastic_strain_increment *= MathUtils::sign(trial_stress);
119  _plastic_strain[_qp] += plastic_strain_increment;
120  elastic_strain_increment = strain_increment - plastic_strain_increment;
121  }
123  _axial_stress[_qp] = _stress_old[_qp] + _youngs_modulus[_qp] * elastic_strain_increment;
124 }

◆ initQpStatefulProperties()

void PlasticTruss::initQpStatefulProperties ( )
protectedvirtual

Reimplemented from TrussMaterial.

Definition at line 63 of file PlasticTruss.C.

64 {
66  _plastic_strain[_qp] = 0.0;
67  _hardening_variable[_qp] = 0.0;
68 }

◆ validParams()

InputParameters PlasticTruss::validParams ( )
static

Definition at line 20 of file PlasticTruss.C.

21 {
22  InputParameters params = LinearElasticTruss::validParams();
23  params.addClassDescription(
24  "Computes the stress and strain for a truss element with plastic behavior defined by either "
25  "linear hardening or a user-defined hardening function.");
26  params.addRequiredParam<Real>("yield_stress",
27  "Yield stress after which plastic strain starts accumulating");
28  params.addParam<Real>("hardening_constant", 0.0, "Hardening slope");
29  params.addParam<FunctionName>("hardening_function",
30  "Engineering stress as a function of plastic strain");
31  params.addParam<Real>(
32  "absolute_tolerance", 1e-10, "Absolute convergence tolerance for Newton iteration");
33  params.addParam<Real>(
34  "relative_tolerance", 1e-8, "Relative convergence tolerance for Newton iteration");
35  return params;
36 }

Member Data Documentation

◆ _absolute_tolerance

Real PlasticTruss::_absolute_tolerance
protected

convergence tolerance

Definition at line 40 of file PlasticTruss.h.

Referenced by computeQpStress().

◆ _axial_stress

MaterialProperty<Real>& TrussMaterial::_axial_stress
protectedinherited

◆ _base_name

const std::string TrussMaterial::_base_name
protectedinherited

Definition at line 36 of file TrussMaterial.h.

◆ _current_length

Real TrussMaterial::_current_length
protectedinherited

◆ _disp_var

std::vector<MooseVariable *> TrussMaterial::_disp_var
protectedinherited

◆ _e_over_l

MaterialProperty<Real>& TrussMaterial::_e_over_l
protectedinherited

Definition at line 44 of file TrussMaterial.h.

Referenced by TrussMaterial::computeProperties().

◆ _elastic_stretch

MaterialProperty<Real>& TrussMaterial::_elastic_stretch
protectedinherited

◆ _hardening_constant

const Real PlasticTruss::_hardening_constant
protected

Definition at line 36 of file PlasticTruss.h.

Referenced by computeHardeningDerivative(), and computeHardeningValue().

◆ _hardening_function

const Function* PlasticTruss::_hardening_function
protected

Definition at line 37 of file PlasticTruss.h.

Referenced by computeHardeningDerivative(), and computeHardeningValue().

◆ _hardening_variable

MaterialProperty<Real>& PlasticTruss::_hardening_variable
protected

Definition at line 48 of file PlasticTruss.h.

Referenced by computeQpStress(), and initQpStatefulProperties().

◆ _hardening_variable_old

const MaterialProperty<Real>& PlasticTruss::_hardening_variable_old
protected

Definition at line 49 of file PlasticTruss.h.

Referenced by computeHardeningValue(), and computeQpStress().

◆ _max_its

const unsigned int PlasticTruss::_max_its
protected

maximum no. of iterations

Definition at line 52 of file PlasticTruss.h.

Referenced by computeQpStress().

◆ _ndisp

unsigned int TrussMaterial::_ndisp
protectedinherited

◆ _origin_length

Real TrussMaterial::_origin_length
protectedinherited

◆ _plastic_strain

MaterialProperty<Real>& PlasticTruss::_plastic_strain
protected

Definition at line 44 of file PlasticTruss.h.

Referenced by computeQpStress(), and initQpStatefulProperties().

◆ _plastic_strain_old

const MaterialProperty<Real>& PlasticTruss::_plastic_strain_old
protected

◆ _relative_tolerance

Real PlasticTruss::_relative_tolerance
protected

Definition at line 41 of file PlasticTruss.h.

Referenced by computeQpStress().

◆ _stress_old

const MaterialProperty<Real>& PlasticTruss::_stress_old
protected

Definition at line 46 of file PlasticTruss.h.

Referenced by computeQpStress().

◆ _T

const VariableValue& LinearElasticTruss::_T
privateinherited

Definition at line 31 of file LinearElasticTruss.h.

Referenced by LinearElasticTruss::computeQpStrain().

◆ _T0

Real LinearElasticTruss::_T0
privateinherited

Definition at line 33 of file LinearElasticTruss.h.

Referenced by LinearElasticTruss::computeQpStrain().

◆ _thermal_expansion_coeff

Real LinearElasticTruss::_thermal_expansion_coeff
privateinherited

Definition at line 34 of file LinearElasticTruss.h.

Referenced by LinearElasticTruss::computeQpStrain().

◆ _total_stretch

MaterialProperty<Real>& TrussMaterial::_total_stretch
protectedinherited

◆ _total_stretch_old

const MaterialProperty<Real>& PlasticTruss::_total_stretch_old
protected

Definition at line 43 of file PlasticTruss.h.

Referenced by computeQpStress().

◆ _yield_stress

Real PlasticTruss::_yield_stress
protected

Definition at line 35 of file PlasticTruss.h.

Referenced by computeHardeningValue(), and computeQpStress().

◆ _youngs_modulus

const VariableValue& TrussMaterial::_youngs_modulus
protectedinherited

The documentation for this class was generated from the following files:
TrussMaterial::_current_length
Real _current_length
Definition: TrussMaterial.h:47
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
PlasticTruss::_yield_stress
Real _yield_stress
Definition: PlasticTruss.h:35
TrussMaterial::computeQpStress
virtual void computeQpStress()=0
PlasticTruss::_hardening_function
const Function * _hardening_function
Definition: PlasticTruss.h:37
TrussMaterial::initQpStatefulProperties
virtual void initQpStatefulProperties()
Definition: TrussMaterial.C:55
TrussMaterial::_base_name
const std::string _base_name
Definition: TrussMaterial.h:36
PlasticTruss::_stress_old
const MaterialProperty< Real > & _stress_old
Definition: PlasticTruss.h:46
PlasticTruss::_total_stretch_old
const MaterialProperty< Real > & _total_stretch_old
Definition: PlasticTruss.h:43
PlasticTruss::_plastic_strain
MaterialProperty< Real > & _plastic_strain
Definition: PlasticTruss.h:44
PlasticTruss::_plastic_strain_old
const MaterialProperty< Real > & _plastic_strain_old
Definition: PlasticTruss.h:45
TrussMaterial::_ndisp
unsigned int _ndisp
Definition: TrussMaterial.h:38
PlasticTruss::_hardening_constant
const Real _hardening_constant
Definition: PlasticTruss.h:36
PlasticTruss::computeHardeningValue
virtual Real computeHardeningValue(Real scalar)
Definition: PlasticTruss.C:127
LinearElasticTruss::LinearElasticTruss
LinearElasticTruss(const InputParameters &parameters)
Definition: LinearElasticTruss.C:27
PlasticTruss::_absolute_tolerance
Real _absolute_tolerance
convergence tolerance
Definition: PlasticTruss.h:40
PlasticTruss::_hardening_variable_old
const MaterialProperty< Real > & _hardening_variable_old
Definition: PlasticTruss.h:49
TrussMaterial::_e_over_l
MaterialProperty< Real > & _e_over_l
Definition: TrussMaterial.h:44
PlasticTruss::computeHardeningDerivative
virtual Real computeHardeningDerivative(Real scalar)
Definition: PlasticTruss.C:140
TrussMaterial::computeQpStrain
virtual void computeQpStrain()=0
TrussMaterial::_total_stretch
MaterialProperty< Real > & _total_stretch
Definition: TrussMaterial.h:41
LinearElasticTruss::validParams
static InputParameters validParams()
Definition: LinearElasticTruss.C:17
TrussMaterial::_youngs_modulus
const VariableValue & _youngs_modulus
Definition: TrussMaterial.h:39
PlasticTruss::_hardening_variable
MaterialProperty< Real > & _hardening_variable
Definition: PlasticTruss.h:48
TrussMaterial::_axial_stress
MaterialProperty< Real > & _axial_stress
Definition: TrussMaterial.h:43
TrussMaterial::_origin_length
Real _origin_length
Definition: TrussMaterial.h:46
TrussMaterial::_elastic_stretch
MaterialProperty< Real > & _elastic_stretch
Definition: TrussMaterial.h:42
PlasticTruss::_relative_tolerance
Real _relative_tolerance
Definition: PlasticTruss.h:41
PlasticTruss::_max_its
const unsigned int _max_its
maximum no. of iterations
Definition: PlasticTruss.h:52
TrussMaterial::_disp_var
std::vector< MooseVariable * > _disp_var
Definition: TrussMaterial.h:34