www.mooseframework.org
ComputeFiniteStrainElasticStress.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 
16 {
18  params.addClassDescription("Compute stress using elasticity for finite strains");
19  return params;
20 }
21 
23  const InputParameters & parameters)
24  : ComputeStressBase(parameters),
25  GuaranteeConsumer(this),
26  _elasticity_tensor_name(_base_name + "elasticity_tensor"),
27  _elasticity_tensor(getMaterialPropertyByName<RankFourTensor>(_elasticity_tensor_name)),
28  _rotation_total(declareProperty<RankTwoTensor>(_base_name + "rotation_total")),
29  _rotation_total_old(getMaterialPropertyOldByName<RankTwoTensor>(_base_name + "rotation_total")),
30  _strain_increment(getMaterialPropertyByName<RankTwoTensor>(_base_name + "strain_increment")),
31  _rotation_increment(
32  getMaterialPropertyByName<RankTwoTensor>(_base_name + "rotation_increment")),
33  _stress_old(getMaterialPropertyOldByName<RankTwoTensor>(_base_name + "stress")),
34  _elastic_strain_old(getMaterialPropertyOldByName<RankTwoTensor>(_base_name + "elastic_strain"))
35 {
36 }
37 
38 void
40 {
41 }
42 
43 void
45 {
47  RankTwoTensor identity_rotation(RankTwoTensor::initIdentity);
48 
49  _rotation_total[_qp] = identity_rotation;
50 }
51 
52 void
54 {
55  // Calculate the stress in the intermediate configuration
56  RankTwoTensor intermediate_stress;
57 
59  {
60  intermediate_stress =
62 
63  // Compute dstress_dstrain
64  _Jacobian_mult[_qp] = _elasticity_tensor[_qp]; // This is NOT the exact jacobian
65  }
66  else
67  {
68  // Rotate elasticity tensor to the intermediate configuration
69  // That is, elasticity tensor is defined in the previous time step
70  // This is consistent with the definition of strain increment
71  // The stress is projected onto the current configuration a few lines below
72  RankFourTensor elasticity_tensor_rotated = _elasticity_tensor[_qp];
73  elasticity_tensor_rotated.rotate(_rotation_total_old[_qp]);
74 
75  intermediate_stress =
76  elasticity_tensor_rotated * (_elastic_strain_old[_qp] + _strain_increment[_qp]);
77 
78  // Update current total rotation matrix to be used in next step
80 
81  // Compute dstress_dstrain
82  _Jacobian_mult[_qp] = elasticity_tensor_rotated; // This is NOT the exact jacobian
83  }
84 
85  // Rotate the stress state to the current configuration
86  _stress[_qp] =
87  _rotation_increment[_qp] * intermediate_stress * _rotation_increment[_qp].transpose();
88 
89  // Assign value for elastic strain, which is equal to the mechanical strain
91 }
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
const MaterialProperty< RankTwoTensor > & _rotation_increment
Rotation increment material property.
ComputeStressBase is the base class for stress tensors computed from MOOSE&#39;s strain calculators...
const MaterialProperty< RankTwoTensor > & _mechanical_strain
Mechanical strain material property.
static InputParameters validParams()
const MaterialProperty< RankTwoTensor > & _strain_increment
Strain increment material property.
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
const std::string _elasticity_tensor_name
Name of the elasticity tensor material property.
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
The old elastic strain is used to calculate the old stress in the case of variable elasticity tensors...
virtual void initQpStatefulProperties() override
MaterialProperty< RankTwoTensor > & _rotation_total
Rotation up to current step "n" to compute anisotropic elasticity tensor.
ComputeFiniteStrainElasticStress(const InputParameters &parameters)
void rotate(const TypeTensor< T > &R)
ComputeFiniteStrainElasticStress computes the stress following elasticity theory for finite strains...
registerMooseObject("SolidMechanicsApp", ComputeFiniteStrainElasticStress)
virtual void computeQpStress() override
Compute the stress and store it in the _stress material property for the current quadrature point...
MaterialProperty< RankTwoTensor > & _elastic_strain
Elastic strain material property.
void addClassDescription(const std::string &doc_string)
MaterialProperty< RankTwoTensor > & _stress
Stress material property.
const MaterialProperty< RankTwoTensor > & _rotation_total_old
Rotation up to "n - 1" (previous) step to compute anisotropic elasticity tensor.
bool hasGuaranteedMaterialProperty(const MaterialPropertyName &prop, Guarantee guarantee)
Add-on class that provides the functionality to check if guarantees for material properties are provi...