https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ComputeFiniteStrainElasticStress.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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),
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
38void
42
43void
51
52void
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}
registerMooseObject("SolidMechanicsApp", ComputeFiniteStrainElasticStress)
ComputeFiniteStrainElasticStress computes the stress following elasticity theory for finite strains.
const std::string _elasticity_tensor_name
Name of the elasticity tensor material property.
ComputeFiniteStrainElasticStress(const InputParameters &parameters)
virtual void computeQpStress() override
Compute the stress and store it in the _stress material property for the current quadrature point.
const MaterialProperty< RankTwoTensor > & _strain_increment
Strain increment material property.
MaterialProperty< RankTwoTensor > & _rotation_total
Rotation up to current step "n" to compute anisotropic elasticity tensor.
const MaterialProperty< RankTwoTensor > & _rotation_increment
Rotation increment 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...
const MaterialProperty< RankTwoTensor > & _rotation_total_old
Rotation up to "n - 1" (previous) step to compute anisotropic elasticity tensor.
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
const MaterialProperty< RankTwoTensor > & _mechanical_strain
Mechanical strain material property.
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
virtual void initQpStatefulProperties() override
MaterialProperty< RankTwoTensor > & _elastic_strain
Elastic strain material property.
MaterialProperty< RankTwoTensor > & _stress
Stress material property.
ComputeStressBase is the base class for stress tensors computed from MOOSE's strain calculators.
static InputParameters validParams()
Add-on class that provides the functionality to check if guarantees for material properties are provi...
bool hasGuaranteedMaterialProperty(const MaterialPropertyName &prop, Guarantee guarantee)
void addClassDescription(const std::string &doc_string)
void rotate(const TypeTensor< T > &R)
RankTwoTensorTempl< T > transpose() const