www.mooseframework.org
ComputeCosseratIncrementalSmallStrain.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 
12 // MOOSE includes
13 #include "PermutationTensor.h"
14 
15 #include "libmesh/quadrature.h"
16 
18 
20 
21 InputParameters
23 {
24  InputParameters params = ComputeIncrementalStrainBase::validParams();
25  params.addClassDescription("Compute incremental small Cosserat strains");
26  params.addRequiredCoupledVar("Cosserat_rotations", "The 3 Cosserat rotation variables");
27  return params;
28 }
29 
31  const InputParameters & parameters)
32  : ComputeIncrementalStrainBase(parameters),
33  _curvature(declareProperty<RankTwoTensor>("curvature")),
34  _nrots(coupledComponents("Cosserat_rotations")),
35  _wc(_nrots),
36  _wc_old(_nrots),
37  _grad_wc(_nrots),
38  _grad_wc_old(_nrots),
39  _curvature_old(getMaterialPropertyOld<RankTwoTensor>("curvature")),
40  _curvature_increment(declareProperty<RankTwoTensor>("curvature_increment"))
41 {
42  if (_nrots != 3)
43  mooseError("ComputeCosseratSmallStrain: This Material is only defined for 3-dimensional "
44  "simulations so 3 Cosserat rotation variables are needed");
45  for (unsigned i = 0; i < _nrots; ++i)
46  {
47  _wc[i] = &coupledValue("Cosserat_rotations", i);
48  _wc_old[i] = &coupledValueOld("Cosserat_rotations", i);
49  _grad_wc[i] = &coupledGradient("Cosserat_rotations", i);
50  _grad_wc_old[i] = &coupledGradientOld("Cosserat_rotations", i);
51  }
52 }
53 
54 void
56 {
58 
59  _curvature[_qp].zero();
60 }
61 
62 void
64 {
65  RankTwoTensor strain((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
66  RankTwoTensor strain_old(
67  (*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]);
68  RealVectorValue wc_vector((*_wc[0])[_qp], (*_wc[1])[_qp], (*_wc[2])[_qp]);
69  RealVectorValue wc_vector_old((*_wc_old[0])[_qp], (*_wc_old[1])[_qp], (*_wc_old[2])[_qp]);
70 
71  for (unsigned i = 0; i < LIBMESH_DIM; ++i)
72  for (unsigned j = 0; j < LIBMESH_DIM; ++j)
73  for (unsigned k = 0; k < LIBMESH_DIM; ++k)
74  {
75  strain(i, j) += PermutationTensor::eps(i, j, k) * wc_vector(k);
76  strain_old(i, j) += PermutationTensor::eps(i, j, k) * wc_vector_old(k);
77  }
78 
79  _deformation_gradient[_qp] = strain;
80  _deformation_gradient[_qp].addIa(1.0); // Gauss point deformation gradient
81 
82  const RankTwoTensor total_strain_increment = strain - strain_old;
83 
84  _strain_increment[_qp] = total_strain_increment;
85 
86  // Remove the eigenstrain increment
88 
89  _strain_rate[_qp] = _strain_increment[_qp] / _dt;
90 
91  _total_strain[_qp] = _total_strain_old[_qp] + total_strain_increment;
93 
94  RankTwoTensor curv((*_grad_wc[0])[_qp], (*_grad_wc[1])[_qp], (*_grad_wc[2])[_qp]);
95  RankTwoTensor curv_old((*_grad_wc_old[0])[_qp], (*_grad_wc_old[1])[_qp], (*_grad_wc_old[2])[_qp]);
96  _curvature_increment[_qp] = curv - curv_old;
98 
99  // incremental small strain does not include rotation
100  _rotation_increment[_qp].setToIdentity();
101 }
ComputeCosseratIncrementalSmallStrain
ComputeCosseratIncrementalSmallStrain defines various incremental versions of the Cossserat strain te...
Definition: ComputeCosseratIncrementalSmallStrain.h:23
ComputeIncrementalStrainBase::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: ComputeIncrementalStrainBase.C:51
ComputeCosseratIncrementalSmallStrain::_grad_wc_old
std::vector< const VariableGradient * > _grad_wc_old
Grad(Cosserat rotation)
Definition: ComputeCosseratIncrementalSmallStrain.h:51
ComputeCosseratIncrementalSmallStrain::initQpStatefulProperties
virtual void initQpStatefulProperties()
Definition: ComputeCosseratIncrementalSmallStrain.C:55
ComputeIncrementalStrainBase::_strain_rate
MaterialProperty< RankTwoTensor > & _strain_rate
Definition: ComputeIncrementalStrainBase.h:38
defineLegacyParams
defineLegacyParams(ComputeCosseratIncrementalSmallStrain)
ComputeCosseratIncrementalSmallStrain::validParams
static InputParameters validParams()
Definition: ComputeCosseratIncrementalSmallStrain.C:22
ComputeIncrementalStrainBase::subtractEigenstrainIncrementFromStrain
void subtractEigenstrainIncrementFromStrain(RankTwoTensor &strain)
Definition: ComputeIncrementalStrainBase.C:59
ComputeCosseratIncrementalSmallStrain::_nrots
const unsigned int _nrots
the number of Cosserat rotation variables supplied by the user (must be 3 in current implementation)
Definition: ComputeCosseratIncrementalSmallStrain.h:39
ComputeIncrementalStrainBase::_mechanical_strain_old
const MaterialProperty< RankTwoTensor > & _mechanical_strain_old
Definition: ComputeIncrementalStrainBase.h:44
ComputeIncrementalStrainBase::_grad_disp_old
std::vector< const VariableGradient * > _grad_disp_old
Definition: ComputeIncrementalStrainBase.h:36
ComputeCosseratIncrementalSmallStrain::_curvature
MaterialProperty< RankTwoTensor > & _curvature
the Cosserat curvature strain: curvature_ij = nabla_j CosseratRotation_i
Definition: ComputeCosseratIncrementalSmallStrain.h:36
ComputeIncrementalStrainBase::_rotation_increment
MaterialProperty< RankTwoTensor > & _rotation_increment
Definition: ComputeIncrementalStrainBase.h:40
ComputeCosseratIncrementalSmallStrain::ComputeCosseratIncrementalSmallStrain
ComputeCosseratIncrementalSmallStrain(const InputParameters &parameters)
Definition: ComputeCosseratIncrementalSmallStrain.C:30
ComputeCosseratIncrementalSmallStrain::_curvature_increment
MaterialProperty< RankTwoTensor > & _curvature_increment
_curvature_increment = (curvature - _curvature_old)
Definition: ComputeCosseratIncrementalSmallStrain.h:57
ComputeStrainBase::_mechanical_strain
MaterialProperty< RankTwoTensor > & _mechanical_strain
Definition: ComputeStrainBase.h:46
ComputeCosseratIncrementalSmallStrain::_grad_wc
std::vector< const VariableGradient * > _grad_wc
Grad(Cosserat rotation)
Definition: ComputeCosseratIncrementalSmallStrain.h:48
ComputeIncrementalStrainBase::_total_strain_old
const MaterialProperty< RankTwoTensor > & _total_strain_old
Definition: ComputeIncrementalStrainBase.h:45
ComputeIncrementalStrainBase::_deformation_gradient
MaterialProperty< RankTwoTensor > & _deformation_gradient
Definition: ComputeIncrementalStrainBase.h:42
ComputeIncrementalStrainBase
ComputeIncrementalStrainBase is the base class for strain tensors using incremental formulations.
Definition: ComputeIncrementalStrainBase.h:22
ComputeCosseratIncrementalSmallStrain.h
ComputeCosseratIncrementalSmallStrain::_curvature_old
const MaterialProperty< RankTwoTensor > & _curvature_old
the Cosserat curvature strain: curvature_ij = nabla_j CosseratRotation_i
Definition: ComputeCosseratIncrementalSmallStrain.h:54
registerMooseObject
registerMooseObject("TensorMechanicsApp", ComputeCosseratIncrementalSmallStrain)
ComputeCosseratIncrementalSmallStrain::computeQpProperties
virtual void computeQpProperties()
Definition: ComputeCosseratIncrementalSmallStrain.C:63
ComputeCosseratIncrementalSmallStrain::_wc_old
std::vector< const VariableValue * > _wc_old
The Cosserat rotations.
Definition: ComputeCosseratIncrementalSmallStrain.h:45
RankTwoTensorTempl
Definition: ACGrGrElasticDrivingForce.h:17
ComputeStrainBase::_total_strain
MaterialProperty< RankTwoTensor > & _total_strain
Definition: ComputeStrainBase.h:48
ComputeIncrementalStrainBase::validParams
static InputParameters validParams()
Definition: ComputeIncrementalStrainBase.C:16
ComputeIncrementalStrainBase::_strain_increment
MaterialProperty< RankTwoTensor > & _strain_increment
Definition: ComputeIncrementalStrainBase.h:39
ComputeStrainBase::_grad_disp
std::vector< const VariableGradient * > _grad_disp
Definition: ComputeStrainBase.h:42
ComputeCosseratIncrementalSmallStrain::_wc
std::vector< const VariableValue * > _wc
The Cosserat rotations.
Definition: ComputeCosseratIncrementalSmallStrain.h:42