www.mooseframework.org
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ADDynamicStressDivergenceTensors< compute_stage > Class Template Reference

ADDynamicStressDivergenceTensors is the automatic differentiation version of DynamicStressDivergenceTensors. More...

#include <ADDynamicStressDivergenceTensors.h>

Inheritance diagram for ADDynamicStressDivergenceTensors< compute_stage >:
[legend]

Public Member Functions

 ADDynamicStressDivergenceTensors (const InputParameters &parameters)
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

ADReal computeQpResidual ()
 
void initialSetup () override
 
void precalculateResidual () override
 
const ADMaterialProperty (RankTwoTensor) &_stress
 

Protected Attributes

const MaterialProperty< RankTwoTensor > & _stress_older
 
const MaterialProperty< RankTwoTensor > & _stress_old
 
const MaterialProperty< Real > & _zeta
 
const Real _alpha
 
const bool _static_initialization
 
 usingStressDivergenceTensorsMembers
 
const std::string _base_name
 
const unsigned int _component
 
const unsigned int _ndisp
 Coupled displacement variables. More...
 
std::vector< unsigned int > _disp_var
 
std::vector< ADReal > _avg_grad_test
 Gradient of test function averaged over the element. Used in volumetric locking correction calculation. More...
 
const bool _volumetric_locking_correction
 Flag for volumetric locking correction. More...
 
 usingKernelMembers
 

Detailed Description

template<ComputeStage compute_stage>
class ADDynamicStressDivergenceTensors< compute_stage >

ADDynamicStressDivergenceTensors is the automatic differentiation version of DynamicStressDivergenceTensors.

This kernel derives from ADStressDivergenceTensors and adds stress related Rayleigh and HHT time integration terms.

Definition at line 16 of file ADDynamicStressDivergenceTensors.h.

Constructor & Destructor Documentation

◆ ADDynamicStressDivergenceTensors()

template<ComputeStage compute_stage>
ADDynamicStressDivergenceTensors< compute_stage >::ADDynamicStressDivergenceTensors ( const InputParameters &  parameters)

Definition at line 40 of file ADDynamicStressDivergenceTensors.C.

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 }

Member Function Documentation

◆ ADMaterialProperty()

template<ComputeStage compute_stage>
const ADStressDivergenceTensors< compute_stage >::ADMaterialProperty ( RankTwoTensor  ) &
protectedinherited

◆ computeQpResidual()

template<ComputeStage compute_stage>
ADReal ADDynamicStressDivergenceTensors< compute_stage >::computeQpResidual ( )
protected

This kernel needs to be used only if either Rayleigh damping or numerical damping through HHT time integration scheme needs to be added to the problem thorugh the stiffness dependent damping parameter _zeta or HHT parameter _alpha, respectively.

The residual of _zeta*K*[(1+_alpha)vel-_alpha vel_old]+ alpha K [ u - uold] + K u is required = _zeta*[(1+_alpha)d/dt (Div sigma)-alpha d/dt(Div sigma_old)] +alpha [Div sigma - Div sigma_old]+ Div sigma = _zeta*[(1+alpha)(Div sigma - Div sigma_old)/dt - alpha (Div sigma_old - Div sigma_older)/dt]

  • alpha [Div sigma - Div sigma_old] +Div sigma = [(1+_alpha)*_zeta/dt +_alpha+1]* Div sigma - [(1+2_alpha)*_zeta/dt + _alpha] Div sigma_old + _alpha*_zeta/dt Div sigma_older

Definition at line 53 of file ADDynamicStressDivergenceTensors.C.

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 
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 
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 }

◆ initialSetup()

template<ComputeStage compute_stage>
void ADStressDivergenceTensors< compute_stage >::initialSetup ( )
overrideprotectedinherited

Definition at line 63 of file ADStressDivergenceTensors.C.

64 {
65  if (getBlockCoordSystem() != Moose::COORD_XYZ)
66  mooseError(
67  "The coordinate system in the Problem block must be set to XYZ for cartesian geometries.");
68 }

◆ precalculateResidual()

template<ComputeStage compute_stage>
void ADStressDivergenceTensors< compute_stage >::precalculateResidual ( )
overrideprotectedinherited

Definition at line 85 of file ADStressDivergenceTensors.C.

86 {
88  return;
89 
90  ADReal ad_current_elem_volume = 0.0;
91  for (unsigned int qp = 0; qp < _qrule->n_points(); qp++)
92  ad_current_elem_volume += _ad_JxW[qp] * _ad_coord[qp];
93 
94  // Calculate volume averaged value of shape function derivative
95  _avg_grad_test.resize(_test.size());
96  for (_i = 0; _i < _test.size(); ++_i)
97  {
98  _avg_grad_test[_i] = 0.0;
99  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
100  _avg_grad_test[_i] += _grad_test[_i][_qp](_component) * _ad_JxW[_qp] * _ad_coord[_qp];
101 
102  _avg_grad_test[_i] /= ad_current_elem_volume;
103  }
104 }

◆ validParams()

template<ComputeStage compute_stage>
InputParameters ADDynamicStressDivergenceTensors< compute_stage >::validParams ( )
static

Definition at line 19 of file ADDynamicStressDivergenceTensors.C.

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 }

Member Data Documentation

◆ _alpha

template<ComputeStage compute_stage>
const Real ADDynamicStressDivergenceTensors< compute_stage >::_alpha
protected

Definition at line 42 of file ADDynamicStressDivergenceTensors.h.

◆ _avg_grad_test

template<ComputeStage compute_stage>
std::vector<ADReal> ADStressDivergenceTensors< compute_stage >::_avg_grad_test
protectedinherited

Gradient of test function averaged over the element. Used in volumetric locking correction calculation.

Definition at line 61 of file ADStressDivergenceTensors.h.

◆ _base_name

template<ComputeStage compute_stage>
const std::string ADStressDivergenceTensors< compute_stage >::_base_name
protectedinherited

Definition at line 51 of file ADStressDivergenceTensors.h.

◆ _component

template<ComputeStage compute_stage>
const unsigned int ADStressDivergenceTensors< compute_stage >::_component
protectedinherited

◆ _disp_var

template<ComputeStage compute_stage>
std::vector<unsigned int> ADStressDivergenceTensors< compute_stage >::_disp_var
protectedinherited

◆ _ndisp

template<ComputeStage compute_stage>
const unsigned int ADStressDivergenceTensors< compute_stage >::_ndisp
protectedinherited

Coupled displacement variables.

Definition at line 57 of file ADStressDivergenceTensors.h.

Referenced by ADStressDivergenceTensors< compute_stage >::ADStressDivergenceTensors().

◆ _static_initialization

template<ComputeStage compute_stage>
const bool ADDynamicStressDivergenceTensors< compute_stage >::_static_initialization
protected

Definition at line 43 of file ADDynamicStressDivergenceTensors.h.

◆ _stress_old

template<ComputeStage compute_stage>
const MaterialProperty<RankTwoTensor>& ADDynamicStressDivergenceTensors< compute_stage >::_stress_old
protected

Definition at line 38 of file ADDynamicStressDivergenceTensors.h.

◆ _stress_older

template<ComputeStage compute_stage>
const MaterialProperty<RankTwoTensor>& ADDynamicStressDivergenceTensors< compute_stage >::_stress_older
protected

Definition at line 37 of file ADDynamicStressDivergenceTensors.h.

◆ _volumetric_locking_correction

template<ComputeStage compute_stage>
const bool ADStressDivergenceTensors< compute_stage >::_volumetric_locking_correction
protectedinherited

Flag for volumetric locking correction.

Definition at line 64 of file ADStressDivergenceTensors.h.

Referenced by ADStressDivergenceTensors< compute_stage >::ADStressDivergenceTensors().

◆ _zeta

template<ComputeStage compute_stage>
const MaterialProperty<Real>& ADDynamicStressDivergenceTensors< compute_stage >::_zeta
protected

Definition at line 41 of file ADDynamicStressDivergenceTensors.h.

◆ usingKernelMembers

template<ComputeStage compute_stage>
ADStressDivergenceTensors< compute_stage >::usingKernelMembers
protectedinherited

Definition at line 66 of file ADStressDivergenceTensors.h.

◆ usingStressDivergenceTensorsMembers

template<ComputeStage compute_stage>
ADDynamicStressDivergenceTensors< compute_stage >::usingStressDivergenceTensorsMembers
protected

Definition at line 45 of file ADDynamicStressDivergenceTensors.h.


The documentation for this class was generated from the following files:
ADStressDivergenceTensors
ADStressDivergenceTensors is the automatic differentiation version of StressDivergenceTensors.
Definition: ADStressDivergenceTensors.h:26
ADStressDivergenceTensors::_volumetric_locking_correction
const bool _volumetric_locking_correction
Flag for volumetric locking correction.
Definition: ADStressDivergenceTensors.h:64
ADStressDivergenceTensors::_avg_grad_test
std::vector< ADReal > _avg_grad_test
Gradient of test function averaged over the element. Used in volumetric locking correction calculatio...
Definition: ADStressDivergenceTensors.h:61
ADStressDivergenceTensors::_base_name
const std::string _base_name
Definition: ADStressDivergenceTensors.h:51
ADDynamicStressDivergenceTensors::_zeta
const MaterialProperty< Real > & _zeta
Definition: ADDynamicStressDivergenceTensors.h:41
ADDynamicStressDivergenceTensors::_stress_older
const MaterialProperty< RankTwoTensor > & _stress_older
Definition: ADDynamicStressDivergenceTensors.h:37
ADStressDivergenceTensors::validParams
static InputParameters validParams()
Definition: ADStressDivergenceTensors.C:20
ADStressDivergenceTensors::_component
const unsigned int _component
Definition: ADStressDivergenceTensors.h:54
ADDynamicStressDivergenceTensors::_static_initialization
const bool _static_initialization
Definition: ADDynamicStressDivergenceTensors.h:43
ADDynamicStressDivergenceTensors::_alpha
const Real _alpha
Definition: ADDynamicStressDivergenceTensors.h:42
ADDynamicStressDivergenceTensors::_stress_old
const MaterialProperty< RankTwoTensor > & _stress_old
Definition: ADDynamicStressDivergenceTensors.h:38