www.mooseframework.org
MechanicsBaseNOSPD.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 
10 #include "MechanicsBaseNOSPD.h"
11 #include "RankTwoTensor.h"
12 #include "RankFourTensor.h"
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<MechanicsBasePD>();
19  params.addClassDescription("Base class for kernels using Self-stabilized Non-Ordinary "
20  "State-based PeriDynamic (SNOSPD) formulation");
21 
22  params.addParam<std::vector<MaterialPropertyName>>(
23  "eigenstrain_names",
24  "List of eigenstrains to be coupled in non-ordinary state-based mechanics kernels");
25 
26  return params;
27 }
28 
29 MechanicsBaseNOSPD::MechanicsBaseNOSPD(const InputParameters & parameters)
30  : MechanicsBasePD(parameters),
31  _multi(getMaterialProperty<Real>("multi")),
32  _stress(getMaterialProperty<RankTwoTensor>("stress")),
33  _shape2(getMaterialProperty<RankTwoTensor>("rank_two_shape_tensor")),
34  _dgrad(getMaterialProperty<RankTwoTensor>("deformation_gradient")),
35  _ddgraddu(getMaterialProperty<RankTwoTensor>("ddeformation_gradient_du")),
36  _ddgraddv(getMaterialProperty<RankTwoTensor>("ddeformation_gradient_dv")),
37  _ddgraddw(getMaterialProperty<RankTwoTensor>("ddeformation_gradient_dw")),
38  _Jacobian_mult(getMaterialProperty<RankFourTensor>("Jacobian_mult")),
39  _eigenstrain_names(getParam<std::vector<MaterialPropertyName>>("eigenstrain_names")),
40  _deigenstrain_dT(_eigenstrain_names.size())
41 {
42  if (_temp_coupled)
43  for (unsigned int i = 0; i < _deigenstrain_dT.size(); ++i)
44  _deigenstrain_dT[i] =
45  &getMaterialPropertyDerivative<RankTwoTensor>(_eigenstrain_names[i], _temp_var->name());
46 }
47 
49 MechanicsBaseNOSPD::computeDSDU(unsigned int component, unsigned int nd)
50 {
51  // compute the derivative of stress w.r.t the solution components for small strain
52  RankTwoTensor dSdU;
53  if (component == 0)
54  dSdU = _Jacobian_mult[nd] * 0.5 * (_ddgraddu[nd].transpose() + _ddgraddu[nd]);
55  else if (component == 1)
56  dSdU = _Jacobian_mult[nd] * 0.5 * (_ddgraddv[nd].transpose() + _ddgraddv[nd]);
57  else if (component == 2)
58  dSdU = _Jacobian_mult[nd] * 0.5 * (_ddgraddw[nd].transpose() + _ddgraddw[nd]);
59 
60  return dSdU;
61 }
MechanicsBaseNOSPD::MechanicsBaseNOSPD
MechanicsBaseNOSPD(const InputParameters &parameters)
Definition: MechanicsBaseNOSPD.C:29
MechanicsBasePD::_temp_var
MooseVariable * _temp_var
Definition: MechanicsBasePD.h:54
MechanicsBasePD::_temp_coupled
const bool _temp_coupled
Temperature variable.
Definition: MechanicsBasePD.h:53
MechanicsBaseNOSPD::_Jacobian_mult
const MaterialProperty< RankFourTensor > & _Jacobian_mult
Definition: MechanicsBaseNOSPD.h:44
MechanicsBaseNOSPD::_ddgraddw
const MaterialProperty< RankTwoTensor > & _ddgraddw
Definition: MechanicsBaseNOSPD.h:43
MechanicsBaseNOSPD::_ddgraddu
const MaterialProperty< RankTwoTensor > & _ddgraddu
Definition: MechanicsBaseNOSPD.h:41
MechanicsBaseNOSPD::_ddgraddv
const MaterialProperty< RankTwoTensor > & _ddgraddv
Definition: MechanicsBaseNOSPD.h:42
MechanicsBaseNOSPD.h
MechanicsBaseNOSPD::computeDSDU
virtual RankTwoTensor computeDSDU(unsigned int component, unsigned int nd)
Function to compute derivative of stress with respect to displacements.
Definition: MechanicsBaseNOSPD.C:49
MechanicsBaseNOSPD::_eigenstrain_names
const std::vector< MaterialPropertyName > _eigenstrain_names
Definition: MechanicsBaseNOSPD.h:45
MaterialTensorCalculatorTools::component
Real component(const SymmTensor &symm_tensor, unsigned int index)
Definition: MaterialTensorCalculatorTools.C:16
validParams< MechanicsBasePD >
InputParameters validParams< MechanicsBasePD >()
Definition: MechanicsBasePD.C:15
RankFourTensorTempl
Definition: ACGrGrElasticDrivingForce.h:20
MechanicsBasePD
Base kernel class for peridynamic solid mechanics models.
Definition: MechanicsBasePD.h:23
RankTwoTensorTempl< Real >
MechanicsBaseNOSPD::_deigenstrain_dT
std::vector< const MaterialProperty< RankTwoTensor > * > _deigenstrain_dT
Definition: MechanicsBaseNOSPD.h:46
validParams< MechanicsBaseNOSPD >
InputParameters validParams< MechanicsBaseNOSPD >()
Definition: MechanicsBaseNOSPD.C:16