11 #include "RankFourTensor.h"
21 params.addClassDescription(
22 "Class for computing bond interaction for force-stabilized peridynamic correspondence model");
28 const InputParameters & parameters)
31 _sf_coeff(declareProperty<Real>(
"stabilization_force_coeff"))
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());
55 for (
unsigned int j = 0; j < neighbors.size(); ++j)
56 if (_bond_status_var->getElementalValue(_pdmesh.elemPtr(bonds[j])) > 0.5)
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());
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);
66 Real ori_len = ori_vec.norm();
67 for (
unsigned int k = 0; k < _dim; ++k)
69 for (
unsigned int l = 0; l < _dim; ++l)
71 _shape2[_qp](k, l) += vol_j * _horiz_rad[_qp] / ori_len * ori_vec(k) * ori_vec(l);
73 vol_j * _horiz_rad[_qp] / ori_len * cur_vec(k) * ori_vec(l);
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);
79 _ddgraddw[_qp](2, k) += -vol_j * _horiz_rad[_qp] / ori_len * ori_vec(k);
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];