www.mooseframework.org
ADDynamicStressDivergenceTensors.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 "ElasticityTensorTools.h"
12 
14 
16 
17 template <ComputeStage compute_stage>
18 InputParameters
20 {
22  params.addClassDescription(
23  "Residual due to stress related Rayleigh damping and HHT time integration terms");
24  params.addParam<MaterialPropertyName>("zeta",
25  0.0,
26  "Name of material property or a constant real "
27  "number defining the zeta parameter for the "
28  "Rayleigh damping.");
29  params.addParam<Real>("alpha", 0, "alpha parameter for HHT time integration");
30  params.addParam<bool>("static_initialization",
31  false,
32  "Set to true to get the system to "
33  "equilibrium under gravity by running a "
34  "quasi-static analysis (by solving Ku = F) "
35  "in the first time step");
36  return params;
37 }
38 
39 template <ComputeStage compute_stage>
41  const InputParameters & parameters)
42  : ADStressDivergenceTensors<compute_stage>(parameters),
43  _stress_older(getMaterialPropertyOlder<RankTwoTensor>(_base_name + "stress")),
44  _stress_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "stress")),
45  _zeta(getMaterialProperty<Real>("zeta")),
46  _alpha(getParam<Real>("alpha")),
47  _static_initialization(getParam<bool>("static_initialization"))
48 {
49 }
50 
51 template <ComputeStage compute_stage>
52 ADReal
54 {
69  ADReal residual;
70  if (_static_initialization && _t == _dt)
71  {
72  // If static inialization is true, then in the first step residual is only Ku which is
73  // stress.grad(test).
74  residual = _stress[_qp].row(_component) * _grad_test[_i][_qp];
75 
76  if (_volumetric_locking_correction)
77  residual +=
78  _stress[_qp].trace() / 3.0 * (_avg_grad_test[_i] - _grad_test[_i][_qp](_component));
79  }
80  else if (_dt > 0)
81  {
82  residual =
83  _stress[_qp].row(_component) * _grad_test[_i][_qp] *
84  (1.0 + _alpha + (1.0 + _alpha) * _zeta[_qp] / _dt) -
85  (_alpha + (1.0 + 2.0 * _alpha) * _zeta[_qp] / _dt) * _stress_old[_qp].row(_component) *
86  _grad_test[_i][_qp] +
87  (_alpha * _zeta[_qp] / _dt) * _stress_older[_qp].row(_component) * _grad_test[_i][_qp];
88 
89  if (_volumetric_locking_correction)
90  residual += (_stress[_qp].trace() * (1.0 + _alpha + (1.0 + _alpha) * _zeta[_qp] / _dt) -
91  (_alpha + (1.0 + 2.0 * _alpha) * _zeta[_qp] / _dt) * _stress_old[_qp].trace() +
92  (_alpha * _zeta[_qp] / _dt) * _stress_older[_qp].trace()) /
93  3.0 * (_avg_grad_test[_i] - _grad_test[_i][_qp](_component));
94  }
95  else
96  residual = 0.0;
97 
98  return residual;
99 }
ADDynamicStressDivergenceTensors
ADDynamicStressDivergenceTensors is the automatic differentiation version of DynamicStressDivergenceT...
Definition: ADDynamicStressDivergenceTensors.h:16
ADDynamicStressDivergenceTensors::ADDynamicStressDivergenceTensors
ADDynamicStressDivergenceTensors(const InputParameters &parameters)
Definition: ADDynamicStressDivergenceTensors.C:40
ADStressDivergenceTensors
ADStressDivergenceTensors is the automatic differentiation version of StressDivergenceTensors.
Definition: ADStressDivergenceTensors.h:26
registerADMooseObject
registerADMooseObject("TensorMechanicsApp", ADDynamicStressDivergenceTensors)
ADDynamicStressDivergenceTensors.h
ADStressDivergenceTensors::validParams
static InputParameters validParams()
Definition: ADStressDivergenceTensors.C:20
ADDynamicStressDivergenceTensors::computeQpResidual
ADReal computeQpResidual()
Definition: ADDynamicStressDivergenceTensors.C:53
ElasticityTensorTools.h
defineADLegacyParams
defineADLegacyParams(ADDynamicStressDivergenceTensors)
ADDynamicStressDivergenceTensors::validParams
static InputParameters validParams()
Definition: ADDynamicStressDivergenceTensors.C:19
RankTwoTensorTempl< Real >