11 #include "MooseVariable.h"
21 params.addClassDescription(
"Class for calculating residual and Jacobian for peridynamic plane "
22 "stress model using weak formulation");
35 _local_re(0) =
_stress[0](2, 2) * _dg_vol_frac_ij[0] * _vols_ij[0] * _bond_status_ij;
36 _local_re(1) =
_stress[1](2, 2) * _dg_vol_frac_ij[1] * _vols_ij[1] * _bond_status_ij;
42 for (_i = 0; _i < _test.size(); _i++)
43 for (_j = 0; _j < _phi.size(); _j++)
44 _local_ke(_i, _j) += (_i == _j ? 1 : 0) *
_Jacobian_mult[_i](2, 2, 2, 2) *
45 _dg_vol_frac_ij[_i] * _vols_ij[_i] * _bond_status_ij;
52 if (coupled_component == 3)
54 std::vector<RankTwoTensor> dSdT(_nnodes);
55 for (
unsigned int nd = 0; nd < _nnodes; nd++)
59 for (_i = 0; _i < _test.size(); _i++)
60 for (_j = 0; _j < _phi.size(); _j++)
61 _local_ke(_i, _j) += (_i == _j ? 1 : 0) * dSdT[_i](2, 2) * _dg_vol_frac_ij[_i] *
62 _vols_ij[_i] * _bond_status_ij;
68 for (_i = 0; _i < _test.size(); _i++)
69 for (_j = 0; _j < _phi.size(); _j++)
70 _local_ke(_i, _j) += (_i == _j ? 1 : 0) *
computeDSDU(coupled_component, _j)(2, 2) *
71 _dg_vol_frac_ij[_j] * _vols_ij[_j] * _bond_status_ij;
77 unsigned int coupled_component)
79 if (coupled_component != 3)
81 for (
unsigned int cur_nd = 0; cur_nd < _nnodes; cur_nd++)
85 std::vector<dof_id_type> jvardofs_ijk(_nnodes);
86 jvardofs_ijk[0] = _current_elem->node_ptr(cur_nd)->dof_number(_sys.number(), jvar_num, 0);
87 std::vector<dof_id_type> neighbors = _pdmesh.getNeighbors(_current_elem->node_id(cur_nd));
89 std::find(neighbors.begin(), neighbors.end(), _current_elem->node_id(1 - cur_nd)) -
91 std::vector<dof_id_type> dg_neighbors =
92 _pdmesh.getDefGradNeighbors(_current_elem->node_id(cur_nd), nb);
93 std::vector<dof_id_type> bonds = _pdmesh.getBonds(_current_elem->node_id(cur_nd));
94 for (
unsigned int k = 0; k < dg_neighbors.size(); k++)
96 const Node * node_k = _pdmesh.nodePtr(neighbors[dg_neighbors[k]]);
97 jvardofs_ijk[1] = node_k->dof_number(_sys.number(), jvar_num, 0);
98 const Real vol_k = _pdmesh.getPDNodeVolume(neighbors[dg_neighbors[k]]);
102 *node_k - *_pdmesh.nodePtr(_current_elem->node_id(cur_nd));
106 for (
unsigned int j = 0; j < _dim; j++)
107 dFdUk(coupled_component, j) =
108 _horiz_rad[cur_nd] / origin_vec_ijk.norm() * origin_vec_ijk(j) * vol_k;
110 dFdUk *=
_shape2[cur_nd].inverse();
114 (dFdUk.transpose() *
_dgrad[cur_nd] +
_dgrad[cur_nd].transpose() * dFdUk);
117 Real bond_status_ijk =
118 _bond_status_var->getElementalValue(_pdmesh.elemPtr(bonds[dg_neighbors[k]]));
121 _local_ke(cur_nd, 1) = dPdUk(2, 2) * _dg_vol_frac_ij[cur_nd] * _vols_ij[cur_nd] *
122 _bond_status_ij * bond_status_ijk;
124 _assembly.cacheJacobianBlock(_local_ke,
_ivardofs_ij, jvardofs_ijk, _var.scalingFactor());