www.mooseframework.org
ComputeMultipleInelasticCosseratStress.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 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<ComputeMultipleInelasticStress>();
19  params.addClassDescription("Compute state (stress and other quantities such as plastic "
20  "strains and internal parameters) using an iterative process, as well "
21  "as Cosserat versions of these quantities. Only elasticity is "
22  "currently implemented for the Cosserat versions."
23  "Combinations of creep models and plastic models may be used");
24  return params;
25 }
26 
28  const InputParameters & parameters)
29  : ComputeMultipleInelasticStress(parameters),
30  _curvature(getMaterialProperty<RankTwoTensor>("curvature")),
31  _elastic_flexural_rigidity_tensor(
32  getMaterialProperty<RankFourTensor>("elastic_flexural_rigidity_tensor")),
33  _couple_stress(declareProperty<RankTwoTensor>("couple_stress")),
34  _couple_stress_old(getMaterialPropertyOld<RankTwoTensor>("couple_stress")),
35  _Jacobian_mult_couple(declareProperty<RankFourTensor>("couple_Jacobian_mult")),
36  _compliance(getMaterialProperty<RankFourTensor>(_base_name + "compliance_tensor"))
37 {
38 }
39 
40 void
42 {
44  _couple_stress[_qp].zero();
45 }
46 
47 void
49 {
51 
53  if (_fe_problem.currentlyComputingJacobian())
55 
57  {
58  _couple_stress[_qp] =
59  _rotation_increment[_qp] * _couple_stress[_qp] * _rotation_increment[_qp].transpose();
61  }
62 }
63 
64 void
66 {
69  else
70  {
72  for (unsigned i_rmm = 1; i_rmm < _num_models; ++i_rmm)
73  _Jacobian_mult[_qp] =
75  }
76 }
77 
78 void
80  unsigned model_number,
81  RankTwoTensor & elastic_strain_increment,
82  RankTwoTensor & inelastic_strain_increment,
83  RankFourTensor & consistent_tangent_operator)
84 {
85  const RankTwoTensor trial_stress = _stress[_qp];
86  const RankTwoTensor applied_strain_increment = elastic_strain_increment;
87 
89  elastic_strain_increment,
90  inelastic_strain_increment,
91  consistent_tangent_operator);
92 
93  inelastic_strain_increment = _compliance[_qp] * (trial_stress - _stress[_qp]);
94  elastic_strain_increment = applied_strain_increment - inelastic_strain_increment;
95 }
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
virtual void computeQpJacobianMult() override
Using _elasticity_tensor[_qp] and the consistent tangent operators, _consistent_tangent_operator[...] computed by the inelastic models, compute _Jacobian_mult[_qp].
std::vector< RankFourTensor > _consistent_tangent_operator
the consistent tangent operators computed by each plastic model
ComputeMultipleInelasticStress computes the stress, the consistent tangent operator (or an approximat...
const MaterialProperty< RankTwoTensor > & _rotation_increment
Rotation increment material property.
registerMooseObject("TensorMechanicsApp", ComputeMultipleInelasticCosseratStress)
const MaterialProperty< RankFourTensor > & _compliance
Inverse of the elasticity tensor.
virtual void computeAdmissibleState(unsigned model_number, RankTwoTensor &elastic_strain_increment, RankTwoTensor &inelastic_strain_increment, RankFourTensor &consistent_tangent_operator) override
The current Cosserat models do not know they might be using the "host" version of the elasticity tens...
virtual void computeQpStress() override
Compute the stress and store it in the _stress material property for the current quadrature point...
const MaterialProperty< RankTwoTensor > & _curvature
The Cosserat curvature strain.
ComputeMultipleInelasticCosseratStress(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< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
MaterialProperty< RankTwoTensor > & _stress
Stress material property.
const MaterialProperty< RankFourTensor > & _elastic_flexural_rigidity_tensor
The Cosserat elastic flexural rigidity tensor.
MaterialProperty< RankFourTensor > & _Jacobian_mult_couple
derivative of couple-stress w.r.t. curvature
ComputeMultipleInelasticStress computes the stress, the consistent tangent operator (or an approximat...
const unsigned _num_models
number of plastic models
MaterialProperty< RankTwoTensor > & _couple_stress
the Cosserat couple-stress
virtual void computeAdmissibleState(unsigned model_number, RankTwoTensor &elastic_strain_increment, RankTwoTensor &inelastic_strain_increment, RankFourTensor &consistent_tangent_operator)
Given a trial stress (_stress[_qp]) and a strain increment (elastic_strain_increment) let the model_n...
InputParameters validParams< ComputeMultipleInelasticCosseratStress >()
InputParameters validParams< ComputeMultipleInelasticStress >()
enum ComputeMultipleInelasticStress::TangentOperatorEnum _tangent_operator_type
const bool _perform_finite_strain_rotations
after updateQpState, rotate the stress, elastic_strain, inelastic_strain and Jacobian_mult using _rot...