www.mooseframework.org
ADComputeStressBase.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 
10 #include "ADComputeStressBase.h"
11 #include "RankTwoTensor.h"
12 #include "RankFourTensor.h"
13 
15 
16 template <ComputeStage compute_stage>
17 InputParameters
19 {
20  InputParameters params = ADMaterial<compute_stage>::validParams();
21  params.addParam<std::string>("base_name",
22  "Optional parameter that allows the user to define "
23  "multiple mechanics material systems on the same "
24  "block, i.e. for multiple phases");
25  params.suppressParameter<bool>("use_displaced_mesh");
26  params.addParam<std::vector<MaterialPropertyName>>(
27  "extra_stress_names",
28  std::vector<MaterialPropertyName>(),
29  "Material property names of rank two tensors to be added to the stress.");
30  return params;
31 }
32 
33 template <ComputeStage compute_stage>
35  : ADMaterial<compute_stage>(parameters),
36  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
37  _mechanical_strain(getADMaterialProperty<RankTwoTensor>(_base_name + "mechanical_strain")),
38  _stress(declareADProperty<RankTwoTensor>(_base_name + "stress")),
39  _elastic_strain(declareADProperty<RankTwoTensor>(_base_name + "elastic_strain")),
40  _extra_stresses(getParam<std::vector<MaterialPropertyName>>("extra_stress_names").size())
41 {
42  if (getParam<bool>("use_displaced_mesh"))
43  mooseError("The stress calculator needs to run on the undisplaced mesh.");
44 
45  const std::vector<MaterialPropertyName> extra_stress_names =
46  getParam<std::vector<MaterialPropertyName>>("extra_stress_names");
47  for (MooseIndex(_extra_stresses) i = 0; i < _extra_stresses.size(); ++i)
48  _extra_stresses[i] = &getMaterialProperty<RankTwoTensor>(extra_stress_names[i]);
49 }
50 
51 template <ComputeStage compute_stage>
52 void
54 {
55  _elastic_strain[_qp].zero();
56  _stress[_qp].zero();
57 }
58 
59 template <ComputeStage compute_stage>
60 void
62 {
63  computeQpStress();
64 
65  // Add in extra stress
66  for (MooseIndex(_extra_stresses) i = 0; i < _extra_stresses.size(); ++i)
67  _stress[_qp] += (*_extra_stresses[i])[_qp];
68 }
69 
70 // explicit instantiation is required for AD base classes
adBaseClass
adBaseClass(ADComputeStressBase)
defineADLegacyParams
defineADLegacyParams(ADComputeStressBase)
ADComputeStressBase::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: ADComputeStressBase.C:53
ADComputeStressBase::computeQpProperties
virtual void computeQpProperties() override
Definition: ADComputeStressBase.C:61
ADComputeStressBase::ADComputeStressBase
ADComputeStressBase(const InputParameters &parameters)
Definition: ADComputeStressBase.C:34
validParams
InputParameters validParams()
ADComputeStressBase
ADComputeStressBase is the base class for stress tensors.
Definition: ADComputeStressBase.h:25
ADComputeStressBase::_extra_stresses
std::vector< const MaterialProperty< RankTwoTensor > * > _extra_stresses
Extra stress tensors.
Definition: ADComputeStressBase.h:60
ADComputeStressBase.h
ADComputeStressBase::validParams
static InputParameters validParams()
Definition: ADComputeStressBase.C:18
RankTwoTensorTempl< Real >