www.mooseframework.org
ADComputeIncrementalStrainBase.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 "MooseMesh.h"
12 
14 
15 template <ComputeStage compute_stage>
16 InputParameters
18 {
19  InputParameters params = ADComputeStrainBase<compute_stage>::validParams();
20  return params;
21 }
22 
23 template <ComputeStage compute_stage>
25  const InputParameters & parameters)
26  : ADComputeStrainBase<compute_stage>(parameters),
27  _grad_disp_old(3),
28  _strain_rate(declareADProperty<RankTwoTensor>(_base_name + "strain_rate")),
29  _strain_increment(declareADProperty<RankTwoTensor>(_base_name + "strain_increment")),
30  _rotation_increment(declareADProperty<RankTwoTensor>(_base_name + "rotation_increment")),
31  _mechanical_strain_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "mechanical_strain")),
32  _total_strain_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "total_strain")),
33  _eigenstrains_old(_eigenstrain_names.size())
34 {
35  for (unsigned int i = 0; i < _eigenstrains_old.size(); ++i)
36  _eigenstrains_old[i] = &getMaterialPropertyOld<RankTwoTensor>(_eigenstrain_names[i]);
37 }
38 
39 template <ComputeStage compute_stage>
40 void
42 {
44  for (unsigned int i = 0; i < 3; ++i)
45  {
46  if (_fe_problem.isTransient() && i < _ndisp)
47  _grad_disp_old[i] = &coupledGradientOld("displacements", i);
48  else
49  _grad_disp_old[i] = &_grad_zero;
50  }
51 }
52 
53 template <ComputeStage compute_stage>
54 void
56 {
57  _mechanical_strain[_qp].zero();
58  _total_strain[_qp].zero();
59 }
60 
61 template <ComputeStage compute_stage>
62 void
64  ADRankTwoTensor & strain)
65 {
66  for (unsigned int i = 0; i < _eigenstrains.size(); ++i)
67  {
68  strain -= (*_eigenstrains[i])[_qp];
69  strain += (*_eigenstrains_old[i])[_qp];
70  }
71 }
72 
73 // explicit instantiation is required for AD base classes
ADComputeStrainBase::initialSetup
void initialSetup() override
Definition: ADComputeStrainBase.C:73
ADComputeIncrementalStrainBase::ADComputeIncrementalStrainBase
ADComputeIncrementalStrainBase(const InputParameters &parameters)
Definition: ADComputeIncrementalStrainBase.C:24
ADComputeIncrementalStrainBase::subtractEigenstrainIncrementFromStrain
void subtractEigenstrainIncrementFromStrain(ADRankTwoTensor &strain)
Definition: ADComputeIncrementalStrainBase.C:63
ADComputeIncrementalStrainBase::validParams
static InputParameters validParams()
Definition: ADComputeIncrementalStrainBase.C:17
ADComputeIncrementalStrainBase::_eigenstrains_old
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains_old
Definition: ADComputeIncrementalStrainBase.h:58
defineADLegacyParams
defineADLegacyParams(ADComputeIncrementalStrainBase)
ADComputeIncrementalStrainBase::initialSetup
void initialSetup() override
Definition: ADComputeIncrementalStrainBase.C:41
adBaseClass
adBaseClass(ADComputeIncrementalStrainBase)
ADComputeIncrementalStrainBase::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: ADComputeIncrementalStrainBase.C:55
ADComputeStrainBase::_eigenstrain_names
std::vector< MaterialPropertyName > _eigenstrain_names
Definition: ADComputeStrainBase.h:65
ADComputeIncrementalStrainBase.h
ADComputeIncrementalStrainBase
ADComputeIncrementalStrainBase is the base class for strain tensors using incremental formulations.
Definition: ADComputeIncrementalStrainBase.h:26
ADComputeStrainBase
ADADComputeStrainBase is the base class for strain tensors.
Definition: ADComputeStrainBase.h:30
RankTwoTensorTempl< Real >
ADComputeStrainBase::validParams
static InputParameters validParams()
Definition: ADComputeStrainBase.C:19