www.mooseframework.org
ComputeCosseratSmallStrain.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 
17 registerMooseObject("TensorMechanicsApp", ComputeCosseratSmallStrain);
18 
20 
21 InputParameters
23 {
24  InputParameters params = ComputeStrainBase::validParams();
25  params.addClassDescription("Compute small Cosserat strains");
26  params.addRequiredCoupledVar("Cosserat_rotations", "The 3 Cosserat rotation variables");
27  return params;
28 }
29 
30 ComputeCosseratSmallStrain::ComputeCosseratSmallStrain(const InputParameters & parameters)
31  : ComputeStrainBase(parameters),
32  _curvature(declareProperty<RankTwoTensor>("curvature")),
33  _nrots(coupledComponents("Cosserat_rotations")),
34  _wc(_nrots),
35  _grad_wc(_nrots)
36 {
37  if (_nrots != 3)
38  mooseError("ComputeCosseratSmallStrain: This Material is only defined for 3-dimensional "
39  "simulations so 3 Cosserat rotation variables are needed");
40  for (unsigned i = 0; i < _nrots; ++i)
41  {
42  _wc[i] = &coupledValue("Cosserat_rotations", i);
43  _grad_wc[i] = &coupledGradient("Cosserat_rotations", i);
44  }
45 }
46 
47 void
49 {
50  RankTwoTensor strain((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
51  RealVectorValue wc_vector((*_wc[0])[_qp], (*_wc[1])[_qp], (*_wc[2])[_qp]);
52 
53  for (unsigned i = 0; i < LIBMESH_DIM; ++i)
54  for (unsigned j = 0; j < LIBMESH_DIM; ++j)
55  for (unsigned k = 0; k < LIBMESH_DIM; ++k)
56  strain(i, j) += PermutationTensor::eps(i, j, k) * wc_vector(k);
57 
58  _total_strain[_qp] = strain;
59 
60  _mechanical_strain[_qp] = strain;
61  for (auto es : _eigenstrains)
62  _mechanical_strain[_qp] -= (*es)[_qp];
63 
64  _curvature[_qp] = RankTwoTensor((*_grad_wc[0])[_qp], (*_grad_wc[1])[_qp], (*_grad_wc[2])[_qp]);
65 }
registerMooseObject
registerMooseObject("TensorMechanicsApp", ComputeCosseratSmallStrain)
ComputeCosseratSmallStrain::ComputeCosseratSmallStrain
ComputeCosseratSmallStrain(const InputParameters &parameters)
Definition: ComputeCosseratSmallStrain.C:30
ComputeStrainBase
ComputeStrainBase is the base class for strain tensors.
Definition: ComputeStrainBase.h:26
ComputeCosseratSmallStrain.h
ComputeCosseratSmallStrain::_grad_wc
std::vector< const VariableGradient * > _grad_wc
Grad(Cosserat rotation)
Definition: ComputeCosseratSmallStrain.h:42
ComputeCosseratSmallStrain::_curvature
MaterialProperty< RankTwoTensor > & _curvature
the Cosserat curvature strain: curvature_ij = nabla_j CosseratRotation_i
Definition: ComputeCosseratSmallStrain.h:33
ComputeStrainBase::_mechanical_strain
MaterialProperty< RankTwoTensor > & _mechanical_strain
Definition: ComputeStrainBase.h:46
RankTwoTensor
RankTwoTensorTempl< Real > RankTwoTensor
Definition: ACGrGrElasticDrivingForce.h:17
ComputeStrainBase::validParams
static InputParameters validParams()
Definition: ComputeStrainBase.C:17
ComputeCosseratSmallStrain
ComputeCosseratSmallStrain defines Cossserat strain tensor, assuming small strains.
Definition: ComputeCosseratSmallStrain.h:22
ComputeCosseratSmallStrain::validParams
static InputParameters validParams()
Definition: ComputeCosseratSmallStrain.C:22
defineLegacyParams
defineLegacyParams(ComputeCosseratSmallStrain)
ComputeCosseratSmallStrain::_nrots
const unsigned int _nrots
the number of Cosserat rotation variables supplied by the user (must be 3 in current implementation)
Definition: ComputeCosseratSmallStrain.h:36
ComputeCosseratSmallStrain::_wc
std::vector< const VariableValue * > _wc
The Cosserat rotations.
Definition: ComputeCosseratSmallStrain.h:39
ComputeStrainBase::_eigenstrains
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
Definition: ComputeStrainBase.h:51
ComputeCosseratSmallStrain::computeQpProperties
virtual void computeQpProperties() override
Definition: ComputeCosseratSmallStrain.C:48
RankTwoTensorTempl< Real >
ComputeStrainBase::_total_strain
MaterialProperty< RankTwoTensor > & _total_strain
Definition: ComputeStrainBase.h:48
ComputeStrainBase::_grad_disp
std::vector< const VariableGradient * > _grad_disp
Definition: ComputeStrainBase.h:42