www.mooseframework.org
MechanicsBasePD.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 "MechanicsBasePD.h"
11 #include "RankTwoTensor.h"
12 
13 template <>
14 InputParameters
16 {
17  InputParameters params = validParams<PeridynamicsKernelBase>();
18  params.addClassDescription(
19  "Base class for calculating residual and Jacobian for peridynamic mechanic kernels");
20 
21  params.addCoupledVar("temperature", "Nonlinear variable name for the temperature");
22  params.addCoupledVar("out_of_plane_strain",
23  "Nonlinear variable name for the out_of_plane strain for "
24  "plane stress analysis using SNOSPD formulation");
25 
26  return params;
27 }
28 
29 MechanicsBasePD::MechanicsBasePD(const InputParameters & parameters)
30  : DerivativeMaterialInterface<PeridynamicsKernelBase>(parameters),
31  _temp_coupled(isCoupled("temperature")),
32  _temp_var(_temp_coupled ? getVar("temperature", 0) : nullptr),
33  _ndisp(coupledComponents("displacements")),
34  _out_of_plane_strain_coupled(isCoupled("out_of_plane_strain")),
35  _out_of_plane_strain_var(_out_of_plane_strain_coupled ? getVar("out_of_plane_strain", 0)
36  : nullptr),
37  _orientation(nullptr)
38 {
39  if (_ndisp != _dim)
40  mooseError("Number of displacements should be consistent with mesh dimension!");
41 
42  for (unsigned int i = 0; i < _ndisp; ++i)
43  _disp_var.push_back(getVar("displacements", i));
44 }
45 
46 void
48 {
49  _orientation = &_assembly.getFE(FEType(), 1)->get_dxyzdxi();
50 }
51 
52 void
54 {
56 
57  _ivardofs_ij.resize(_nnodes);
58 
59  for (unsigned int i = 0; i < _nnodes; ++i)
60  _ivardofs_ij[i] = _current_elem->node_ptr(i)->dof_number(_sys.number(), _var.number(), 0);
61 
62  for (unsigned int i = 0; i < _dim; ++i)
63  _cur_ori_ij(i) = _origin_vec_ij(i) + _disp_var[i]->getNodalValue(*_current_elem->node_ptr(1)) -
64  _disp_var[i]->getNodalValue(*_current_elem->node_ptr(0));
65 
66  _cur_len_ij = _cur_ori_ij.norm();
68 }
69 
70 void
71 MechanicsBasePD::computeOffDiagJacobian(MooseVariableFEBase & jvar)
72 {
73  prepare();
74 
75  if (jvar.number() == _var.number())
76  computeJacobian();
77  else
78  {
79  unsigned int coupled_component = 0;
80  bool active = false;
81 
82  for (unsigned int i = 0; i < _dim; ++i)
83  if (jvar.number() == _disp_var[i]->number())
84  {
85  coupled_component = i;
86  active = true;
87  }
88 
89  if (_temp_coupled && jvar.number() == _temp_var->number())
90  {
91  coupled_component = 3;
92  active = true;
93  }
94 
95  if (_out_of_plane_strain_coupled && jvar.number() == _out_of_plane_strain_var->number())
96  {
97  coupled_component = 4;
98  active = true;
99  }
100 
101  if (active)
102  {
103  DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), jvar.number());
104  _local_ke.resize(ke.m(), ke.n());
105  _local_ke.zero();
106 
107  computeLocalOffDiagJacobian(coupled_component);
108 
109  ke += _local_ke;
110 
111  if (_use_full_jacobian)
112  computePDNonlocalOffDiagJacobian(jvar.number(), coupled_component);
113  }
114  }
115 }
MechanicsBasePD::MechanicsBasePD
MechanicsBasePD(const InputParameters &parameters)
Definition: MechanicsBasePD.C:29
MechanicsBasePD::_cur_ori_ij
RealGradient _cur_ori_ij
Vector of bond in current configuration.
Definition: MechanicsBasePD.h:72
MechanicsBasePD::_temp_var
MooseVariable * _temp_var
Definition: MechanicsBasePD.h:54
MechanicsBasePD::_temp_coupled
const bool _temp_coupled
Temperature variable.
Definition: MechanicsBasePD.h:53
validParams< PeridynamicsKernelBase >
InputParameters validParams< PeridynamicsKernelBase >()
Definition: PeridynamicsKernelBase.C:15
validParams< MechanicsBasePD >
InputParameters validParams< MechanicsBasePD >()
Definition: MechanicsBasePD.C:15
MechanicsBasePD::computeOffDiagJacobian
virtual void computeOffDiagJacobian(MooseVariableFEBase &jvar) override
Definition: MechanicsBasePD.C:71
MechanicsBasePD::_ndisp
unsigned int _ndisp
number of displacement components
Definition: MechanicsBasePD.h:58
MechanicsBasePD::_orientation
const std::vector< RealGradient > * _orientation
Vector of bond in current configuration.
Definition: MechanicsBasePD.h:66
MechanicsBasePD::computeLocalOffDiagJacobian
virtual void computeLocalOffDiagJacobian(unsigned int)
Function to compute local contribution to the off-diagonal Jacobian at the current nodes.
Definition: MechanicsBasePD.h:35
MechanicsBasePD::_out_of_plane_strain_var
MooseVariable * _out_of_plane_strain_var
Definition: MechanicsBasePD.h:62
MechanicsBasePD.h
PeridynamicsKernelBase::prepare
virtual void prepare()
Function to precalculate data which will be used in the derived classes.
Definition: PeridynamicsKernelBase.C:43
MechanicsBasePD::_out_of_plane_strain_coupled
const bool _out_of_plane_strain_coupled
Parameters for out-of-plane strain in weak plane stress formulation.
Definition: MechanicsBasePD.h:61
PeridynamicsKernelBase
Base kernel class for peridynamic models.
Definition: PeridynamicsKernelBase.h:25
MechanicsBasePD::_ivardofs_ij
std::vector< dof_id_type > _ivardofs_ij
Current variable dof numbers for nodes i and j.
Definition: MechanicsBasePD.h:69
MechanicsBasePD::computePDNonlocalOffDiagJacobian
virtual void computePDNonlocalOffDiagJacobian(unsigned int, unsigned int)
Function to compute nonlocal contribution to the off-diagonal Jacobian at the current nodes.
Definition: MechanicsBasePD.h:42
MechanicsBasePD::prepare
virtual void prepare() override
Definition: MechanicsBasePD.C:53
MechanicsBasePD::initialSetup
virtual void initialSetup() override
Definition: MechanicsBasePD.C:47
MechanicsBasePD::_cur_len_ij
Real _cur_len_ij
Current bond length.
Definition: MechanicsBasePD.h:75
MechanicsBasePD::_disp_var
std::vector< MooseVariable * > _disp_var
displacement variables
Definition: MechanicsBasePD.h:50