www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ComputeForceStabilizedSmallStrainNOSPD Class Reference

Material class for conventional correspondence material model with fictitious force stabilization for small strain. More...

#include <ComputeForceStabilizedSmallStrainNOSPD.h>

Inheritance diagram for ComputeForceStabilizedSmallStrainNOSPD:
[legend]

Public Member Functions

 ComputeForceStabilizedSmallStrainNOSPD (const InputParameters &parameters)
 
virtual void initQpStatefulProperties () override
 

Protected Member Functions

virtual void computeQpDeformationGradient () override
 Function to compute bond-associated deformation gradient. More...
 
virtual void computeQpStrain () override
 Function to compute strain tensors. More...
 
virtual void computeQpTotalStrain ()
 Function to compute the total strain tensor for small strain case. More...
 
virtual void computeProperties () override
 
virtual void computeBondStretch () override
 

Protected Attributes

const MaterialProperty< RankFourTensor > & _Cijkl
 Elasticity tensor. More...
 
MaterialProperty< Real > & _sf_coeff
 Material property for fictitious force. More...
 
const bool _plane_strain
 Plane strain problem or not, this is only used for mechanical stretch calculation. More...
 
std::vector< MaterialPropertyName > _eigenstrain_names
 
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
 
MaterialProperty< RankTwoTensor > & _shape2
 Material properties to store. More...
 
MaterialProperty< RankTwoTensor > & _deformation_gradient
 
MaterialProperty< RankTwoTensor > & _ddgraddu
 
MaterialProperty< RankTwoTensor > & _ddgraddv
 
MaterialProperty< RankTwoTensor > & _ddgraddw
 
MaterialProperty< RankTwoTensor > & _total_strain
 
MaterialProperty< RankTwoTensor > & _mechanical_strain
 
MaterialProperty< Real > & _multi
 

Detailed Description

Material class for conventional correspondence material model with fictitious force stabilization for small strain.

Definition at line 23 of file ComputeForceStabilizedSmallStrainNOSPD.h.

Constructor & Destructor Documentation

◆ ComputeForceStabilizedSmallStrainNOSPD()

ComputeForceStabilizedSmallStrainNOSPD::ComputeForceStabilizedSmallStrainNOSPD ( const InputParameters &  parameters)

Definition at line 27 of file ComputeForceStabilizedSmallStrainNOSPD.C.

29  : ComputeSmallStrainNOSPD(parameters),
30  _Cijkl(getMaterialProperty<RankFourTensor>("elasticity_tensor")),
31  _sf_coeff(declareProperty<Real>("stabilization_force_coeff"))
32 {
33 }

Member Function Documentation

◆ computeBondStretch()

void ComputeStrainBaseNOSPD::computeBondStretch ( )
overrideprotectedvirtualinherited

Definition at line 156 of file ComputeStrainBaseNOSPD.C.

157 {
158  _total_stretch[0] = _current_length / _origin_length - 1.0;
159  _total_stretch[1] = _total_stretch[0];
160  _mechanical_stretch[0] = _total_stretch[0];
161 
162  Real factor = 1.0;
163  if (_plane_strain)
165 
166  for (auto es : _eigenstrains)
167  _mechanical_stretch[0] -= 0.5 * factor * ((*es)[0](2, 2) + (*es)[1](2, 2));
168 
169  _mechanical_stretch[1] = _mechanical_stretch[0];
170 }

Referenced by ComputeStrainBaseNOSPD::computeProperties().

◆ computeProperties()

void ComputeStrainBaseNOSPD::computeProperties ( )
overrideprotectedvirtualinherited

Definition at line 145 of file ComputeStrainBaseNOSPD.C.

146 {
147  setupMeshRelatedData(); // function from base class
148  computeBondCurrentLength(); // current length of a bond from base class
149  computeBondStretch(); // stretch of a bond
150 
151  for (_qp = 0; _qp < _nnodes; ++_qp)
152  computeQpStrain();
153 }

◆ computeQpDeformationGradient()

void ComputeForceStabilizedSmallStrainNOSPD::computeQpDeformationGradient ( )
overrideprotectedvirtual

Function to compute bond-associated deformation gradient.

Reimplemented from ComputeStrainBaseNOSPD.

Definition at line 36 of file ComputeForceStabilizedSmallStrainNOSPD.C.

37 {
38  _shape2[_qp].zero();
39  _deformation_gradient[_qp].zero();
40  _ddgraddu[_qp].zero();
41  _ddgraddv[_qp].zero();
42  _ddgraddw[_qp].zero();
43 
44  if (_dim == 2)
45  _shape2[_qp](2, 2) = _deformation_gradient[_qp](2, 2) = 1.0;
46 
47  const Node * cur_nd = _current_elem->node_ptr(_qp);
48  std::vector<dof_id_type> neighbors = _pdmesh.getNeighbors(cur_nd->id());
49  std::vector<dof_id_type> bonds = _pdmesh.getBonds(cur_nd->id());
50 
51  // calculate the shape tensor and prepare the deformation gradient tensor
52  RealGradient ori_vec(_dim);
53  RealGradient cur_vec(_dim);
54 
55  for (unsigned int j = 0; j < neighbors.size(); ++j)
56  if (_bond_status_var->getElementalValue(_pdmesh.elemPtr(bonds[j])) > 0.5)
57  {
58  Node * node_j = _pdmesh.nodePtr(neighbors[j]);
59  Real vol_j = _pdmesh.getPDNodeVolume(neighbors[j]);
60  ori_vec = *node_j - *_pdmesh.nodePtr(cur_nd->id());
61 
62  for (unsigned int k = 0; k < _dim; ++k)
63  cur_vec(k) = ori_vec(k) + _disp_var[k]->getNodalValue(*node_j) -
64  _disp_var[k]->getNodalValue(*cur_nd);
65 
66  Real ori_len = ori_vec.norm();
67  for (unsigned int k = 0; k < _dim; ++k)
68  {
69  for (unsigned int l = 0; l < _dim; ++l)
70  {
71  _shape2[_qp](k, l) += vol_j * _horiz_rad[_qp] / ori_len * ori_vec(k) * ori_vec(l);
72  _deformation_gradient[_qp](k, l) +=
73  vol_j * _horiz_rad[_qp] / ori_len * cur_vec(k) * ori_vec(l);
74  }
75  // calculate derivatives of deformation_gradient w.r.t displacements of node i
76  _ddgraddu[_qp](0, k) += -vol_j * _horiz_rad[_qp] / ori_len * ori_vec(k);
77  _ddgraddv[_qp](1, k) += -vol_j * _horiz_rad[_qp] / ori_len * ori_vec(k);
78  if (_dim == 3)
79  _ddgraddw[_qp](2, k) += -vol_j * _horiz_rad[_qp] / ori_len * ori_vec(k);
80  }
81  }
82 
83  // finalize the deformation gradient tensor
84  _deformation_gradient[_qp] *= _shape2[_qp].inverse();
85  _ddgraddu[_qp] *= _shape2[_qp].inverse();
86  _ddgraddv[_qp] *= _shape2[_qp].inverse();
87  _ddgraddw[_qp] *= _shape2[_qp].inverse();
88 
89  Real youngs_modulus = ElasticityTensorTools::getIsotropicYoungsModulus(_Cijkl[_qp]);
90  _sf_coeff[_qp] = youngs_modulus * _pdmesh.getNodeAvgSpacing(_current_elem->node_id(_qp)) *
91  _horiz_rad[_qp] / _origin_length;
92  _multi[_qp] = _horiz_rad[_qp] / _origin_length * _node_vol[0] * _node_vol[1];
93 }

◆ computeQpStrain()

void ComputeSmallStrainNOSPD::computeQpStrain ( )
overrideprotectedvirtualinherited

Function to compute strain tensors.

Implements ComputeStrainBaseNOSPD.

Definition at line 33 of file ComputeSmallStrainNOSPD.C.

34 {
36 
38 
40 
41  // Subtract Eigen strains
42  for (auto es : _eigenstrains)
43  _mechanical_strain[_qp] -= (*es)[_qp];
44 }

◆ computeQpTotalStrain()

void ComputeSmallStrainNOSPD::computeQpTotalStrain ( )
protectedvirtualinherited

Function to compute the total strain tensor for small strain case.

Reimplemented in ComputePlaneSmallStrainNOSPD.

Definition at line 47 of file ComputeSmallStrainNOSPD.C.

48 {
49  // the small strain tensor
50  _total_strain[_qp] = 0.5 * (_deformation_gradient[_qp].transpose() + _deformation_gradient[_qp]) -
51  RankTwoTensor(RankTwoTensor::initIdentity);
52 }

Referenced by ComputeSmallStrainNOSPD::computeQpStrain().

◆ initQpStatefulProperties()

void ComputeStrainBaseNOSPD::initQpStatefulProperties ( )
overridevirtualinherited

Definition at line 57 of file ComputeStrainBaseNOSPD.C.

58 {
59  _mechanical_strain[_qp].zero();
60  _total_strain[_qp].zero();
61  _deformation_gradient[_qp].zero();
62  _deformation_gradient[_qp].addIa(1.0);
63 
64  if (_qrule->n_points() < 2) // Gauss_Lobatto: order = 2n-3 (n is number of qp)
65  mooseError(
66  "NOSPD models require Gauss_Lobatto rule and a minimum of 2 quadrature points, i.e., "
67  "order of FIRST");
68 }

Member Data Documentation

◆ _Cijkl

const MaterialProperty<RankFourTensor>& ComputeForceStabilizedSmallStrainNOSPD::_Cijkl
protected

Elasticity tensor.

Definition at line 32 of file ComputeForceStabilizedSmallStrainNOSPD.h.

Referenced by computeQpDeformationGradient().

◆ _ddgraddu

MaterialProperty<RankTwoTensor>& ComputeStrainBaseNOSPD::_ddgraddu
protectedinherited

◆ _ddgraddv

MaterialProperty<RankTwoTensor>& ComputeStrainBaseNOSPD::_ddgraddv
protectedinherited

◆ _ddgraddw

MaterialProperty<RankTwoTensor>& ComputeStrainBaseNOSPD::_ddgraddw
protectedinherited

◆ _deformation_gradient

MaterialProperty<RankTwoTensor>& ComputeStrainBaseNOSPD::_deformation_gradient
protectedinherited

◆ _eigenstrain_names

std::vector<MaterialPropertyName> ComputeStrainBaseNOSPD::_eigenstrain_names
protectedinherited

◆ _eigenstrains

std::vector<const MaterialProperty<RankTwoTensor> *> ComputeStrainBaseNOSPD::_eigenstrains
protectedinherited

◆ _mechanical_strain

MaterialProperty<RankTwoTensor>& ComputeStrainBaseNOSPD::_mechanical_strain
protectedinherited

◆ _multi

MaterialProperty<Real>& ComputeStrainBaseNOSPD::_multi
protectedinherited

◆ _plane_strain

const bool ComputeStrainBaseNOSPD::_plane_strain
protectedinherited

Plane strain problem or not, this is only used for mechanical stretch calculation.

Definition at line 45 of file ComputeStrainBaseNOSPD.h.

Referenced by ComputeStrainBaseNOSPD::computeBondStretch().

◆ _sf_coeff

MaterialProperty<Real>& ComputeForceStabilizedSmallStrainNOSPD::_sf_coeff
protected

Material property for fictitious force.

Definition at line 35 of file ComputeForceStabilizedSmallStrainNOSPD.h.

Referenced by computeQpDeformationGradient().

◆ _shape2

MaterialProperty<RankTwoTensor>& ComputeStrainBaseNOSPD::_shape2
protectedinherited

Material properties to store.

Definition at line 54 of file ComputeStrainBaseNOSPD.h.

Referenced by computeQpDeformationGradient(), and ComputeStrainBaseNOSPD::computeQpDeformationGradient().

◆ _total_strain

MaterialProperty<RankTwoTensor>& ComputeStrainBaseNOSPD::_total_strain
protectedinherited

The documentation for this class was generated from the following files:
ComputeStrainBaseNOSPD::_mechanical_strain
MaterialProperty< RankTwoTensor > & _mechanical_strain
Definition: ComputeStrainBaseNOSPD.h:62
ComputeStrainBaseNOSPD::_ddgraddv
MaterialProperty< RankTwoTensor > & _ddgraddv
Definition: ComputeStrainBaseNOSPD.h:58
ComputeStrainBaseNOSPD::_shape2
MaterialProperty< RankTwoTensor > & _shape2
Material properties to store.
Definition: ComputeStrainBaseNOSPD.h:54
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
ComputeStrainBaseNOSPD::_plane_strain
const bool _plane_strain
Plane strain problem or not, this is only used for mechanical stretch calculation.
Definition: ComputeStrainBaseNOSPD.h:45
ComputeStrainBaseNOSPD::_deformation_gradient
MaterialProperty< RankTwoTensor > & _deformation_gradient
Definition: ComputeStrainBaseNOSPD.h:55
ElasticityTensorTools::getIsotropicPoissonsRatio
T getIsotropicPoissonsRatio(const RankFourTensorTempl< T > &elasticity_tensor)
Get the Poisson's modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must...
Definition: ElasticityTensorTools.h:115
ComputeStrainBaseNOSPD::_Cijkl
const MaterialProperty< RankFourTensor > & _Cijkl
Material properties to fetch.
Definition: ComputeStrainBaseNOSPD.h:48
ComputeStrainBaseNOSPD::computeQpDeformationGradient
virtual void computeQpDeformationGradient()
Function to compute bond-associated deformation gradient.
Definition: ComputeStrainBaseNOSPD.C:71
ElasticityTensorTools::getIsotropicYoungsModulus
T getIsotropicYoungsModulus(const RankFourTensorTempl< T > &elasticity_tensor)
Get the Young's modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must b...
Definition: ElasticityTensorTools.h:98
ComputeStrainBaseNOSPD::_multi
MaterialProperty< Real > & _multi
Definition: ComputeStrainBaseNOSPD.h:64
ComputeStrainBaseNOSPD::_ddgraddw
MaterialProperty< RankTwoTensor > & _ddgraddw
Definition: ComputeStrainBaseNOSPD.h:59
ComputeForceStabilizedSmallStrainNOSPD::_Cijkl
const MaterialProperty< RankFourTensor > & _Cijkl
Elasticity tensor.
Definition: ComputeForceStabilizedSmallStrainNOSPD.h:32
ComputeStrainBaseNOSPD::_eigenstrains
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
Definition: ComputeStrainBaseNOSPD.h:50
ComputeSmallStrainNOSPD::computeQpTotalStrain
virtual void computeQpTotalStrain()
Function to compute the total strain tensor for small strain case.
Definition: ComputeSmallStrainNOSPD.C:47
RankTwoTensor
RankTwoTensorTempl< Real > RankTwoTensor
Definition: ACGrGrElasticDrivingForce.h:17
ComputeStrainBaseNOSPD::computeQpStrain
virtual void computeQpStrain()=0
Function to compute strain tensors.
ComputeStrainBaseNOSPD::computeBondStretch
virtual void computeBondStretch() override
Definition: ComputeStrainBaseNOSPD.C:156
ComputeStrainBaseNOSPD::_ddgraddu
MaterialProperty< RankTwoTensor > & _ddgraddu
Definition: ComputeStrainBaseNOSPD.h:57
ComputeStrainBaseNOSPD::_total_strain
MaterialProperty< RankTwoTensor > & _total_strain
Definition: ComputeStrainBaseNOSPD.h:61
ComputeForceStabilizedSmallStrainNOSPD::_sf_coeff
MaterialProperty< Real > & _sf_coeff
Material property for fictitious force.
Definition: ComputeForceStabilizedSmallStrainNOSPD.h:35
ComputeSmallStrainNOSPD::ComputeSmallStrainNOSPD
ComputeSmallStrainNOSPD(const InputParameters &parameters)
Definition: ComputeSmallStrainNOSPD.C:27