www.mooseframework.org
ADComputeFiniteStrainElasticStress.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 
13 
15 
16 template <ComputeStage compute_stage>
17 InputParameters
19 {
20  InputParameters params = ADComputeStressBase<compute_stage>::validParams();
21  params.addClassDescription("Compute stress using elasticity for finite strains");
22  return params;
23 }
24 
25 template <ComputeStage compute_stage>
27  const InputParameters & parameters)
28  : ADComputeStressBase<compute_stage>(parameters),
29  GuaranteeConsumer(this),
30  _elasticity_tensor_name(_base_name + "elasticity_tensor"),
31  _elasticity_tensor(getADMaterialProperty<RankFourTensor>(_elasticity_tensor_name)),
32  _strain_increment(getADMaterialPropertyByName<RankTwoTensor>(_base_name + "strain_increment")),
33  _rotation_increment(
34  getADMaterialPropertyByName<RankTwoTensor>(_base_name + "rotation_increment")),
35  _stress_old(getMaterialPropertyOldByName<RankTwoTensor>(_base_name + "stress")),
36  _elastic_strain_old(getMaterialPropertyOldByName<RankTwoTensor>(_base_name + "elastic_strain"))
37 {
38 }
39 
40 template <ComputeStage compute_stage>
41 void
43 {
44  if (!hasGuaranteedMaterialProperty(_elasticity_tensor_name, Guarantee::ISOTROPIC))
45  mooseError(
46  "ADComputeFiniteStrainElasticStress can only be used with elasticity tensor materials "
47  "that guarantee isotropic tensors.");
48 }
49 
50 template <ComputeStage compute_stage>
51 void
53 {
54  // Calculate the stress in the intermediate configuration
55  ADRankTwoTensor intermediate_stress;
56 
57  intermediate_stress =
58  _elasticity_tensor[_qp] * (_strain_increment[_qp] + _elastic_strain_old[_qp]);
59 
60  // Rotate the stress state to the current configuration
61  _stress[_qp] =
62  _rotation_increment[_qp] * intermediate_stress * _rotation_increment[_qp].transpose();
63 
64  // Assign value for elastic strain, which is equal to the mechanical strain
65  _elastic_strain[_qp] = _mechanical_strain[_qp];
66 }
67 
68 // explicit instantiation is required for AD base classes
ADComputeFiniteStrainElasticStress::ADComputeFiniteStrainElasticStress
ADComputeFiniteStrainElasticStress(const InputParameters &parameters)
Definition: ADComputeFiniteStrainElasticStress.C:26
ADComputeFiniteStrainElasticStress::computeQpStress
virtual void computeQpStress() override
Definition: ADComputeFiniteStrainElasticStress.C:52
ADComputeFiniteStrainElasticStress::initialSetup
void initialSetup() override
Definition: ADComputeFiniteStrainElasticStress.C:42
registerADMooseObject
registerADMooseObject("TensorMechanicsApp", ADComputeFiniteStrainElasticStress)
ADComputeFiniteStrainElasticStress.h
adBaseClass
adBaseClass(ADComputeFiniteStrainElasticStress)
ADComputeFiniteStrainElasticStress
ADComputeFiniteStrainElasticStress computes the stress following elasticity theory for finite strains...
Definition: ADComputeFiniteStrainElasticStress.h:25
GuaranteeConsumer
Add-on class that provides the functionality to check if guarantees for material properties are provi...
Definition: GuaranteeConsumer.h:25
ADComputeStressBase
ADComputeStressBase is the base class for stress tensors.
Definition: ADComputeStressBase.h:25
RankFourTensorTempl< Real >
ADComputeStressBase::validParams
static InputParameters validParams()
Definition: ADComputeStressBase.C:18
RankTwoTensorTempl
Definition: ACGrGrElasticDrivingForce.h:17
ADComputeFiniteStrainElasticStress::validParams
static InputParameters validParams()
Definition: ADComputeFiniteStrainElasticStress.C:18
defineADLegacyParams
defineADLegacyParams(ADComputeFiniteStrainElasticStress)
Guarantee::ISOTROPIC