www.mooseframework.org
ComputeMultipleInelasticCosseratStress.C
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
8 
9 template <>
10 InputParameters
12 {
13  InputParameters params = validParams<ComputeMultipleInelasticStress>();
14  params.addClassDescription("Compute state (stress and other quantities such as plastic "
15  "strains and internal parameters) using an iterative process, as well "
16  "as Cosserat versions of these quantities. Only elasticity is "
17  "currently implemented for the Cosserat versions."
18  "Combinations of creep models and plastic models may be used");
19  return params;
20 }
21 
23  const InputParameters & parameters)
24  : ComputeMultipleInelasticStress(parameters),
25  _curvature(getMaterialProperty<RankTwoTensor>("curvature")),
26  _elastic_flexural_rigidity_tensor(
27  getMaterialProperty<RankFourTensor>("elastic_flexural_rigidity_tensor")),
28  _couple_stress(declareProperty<RankTwoTensor>("couple_stress")),
29  _couple_stress_old(getMaterialPropertyOld<RankTwoTensor>("couple_stress")),
30  _Jacobian_mult_couple(declareProperty<RankFourTensor>("couple_Jacobian_mult")),
31  _compliance(getMaterialProperty<RankFourTensor>(_base_name + "compliance_tensor"))
32 {
33 }
34 
35 void
37 {
39  _couple_stress[_qp].zero();
40 }
41 
42 void
44 {
46 
48  if (_fe_problem.currentlyComputingJacobian())
50 
52  {
53  _couple_stress[_qp] =
54  _rotation_increment[_qp] * _couple_stress[_qp] * _rotation_increment[_qp].transpose();
56  }
57 }
58 
59 void
61 {
64  else
65  {
67  for (unsigned i_rmm = 1; i_rmm < _num_models; ++i_rmm)
68  _Jacobian_mult[_qp] =
70  }
71 }
72 
73 void
75  unsigned model_number,
76  RankTwoTensor & elastic_strain_increment,
77  RankTwoTensor & inelastic_strain_increment,
78  RankFourTensor & consistent_tangent_operator)
79 {
80  const RankTwoTensor trial_stress = _stress[_qp];
81  const RankTwoTensor applied_strain_increment = elastic_strain_increment;
82 
84  elastic_strain_increment,
85  inelastic_strain_increment,
86  consistent_tangent_operator);
87 
88  inelastic_strain_increment = _compliance[_qp] * (trial_stress - _stress[_qp]);
89  elastic_strain_increment = applied_strain_increment - inelastic_strain_increment;
90 }
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, _comsistent_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
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...
const MaterialProperty< RankTwoTensor > & _curvature
The Cosserat curvature strain.
ComputeMultipleInelasticCosseratStress(const InputParameters &parameters)
MaterialProperty< RankTwoTensor > & _stress
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
const unsigned _num_models
number of plastic models
MaterialProperty< RankTwoTensor > & _couple_stress
the Cosserat couple-stress
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Rank-4 and Rank-2 elasticity and elastic strain tensors.
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 >()
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...
InputParameters validParams< ComputeMultipleInelasticStress >()