17 InputParameters params = validParams<Kernel>();
18 params.addClassDescription(
19 "Base class for calculating residual and Jacobian for peridynamic kernels");
21 params.addParam<
bool>(
"full_jacobian",
23 "Whether to include coupling terms with nodes connected to neighbors in "
24 "the Jacobian matrix for state based formulations");
31 _bond_status_var(&_subproblem.getStandardVariable(_tid,
"bond_status")),
32 _use_full_jacobian(getParam<bool>(
"full_jacobian")),
34 _dim(_pdmesh.dimension()),
37 _dg_vol_frac_ij(_nnodes),
45 for (
unsigned int nd = 0; nd <
_nnodes; ++nd)
48 dof_id_type id_ji_in_ij =
64 DenseVector<Number> & re = _assembly.residualBlock(_var.number());
65 mooseAssert(re.size() ==
_nnodes,
66 "PeridynamicsKernelBase is designed to only work with EDGE2 elements");
67 _local_re.resize(re.size());
76 Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
77 for (
unsigned int i = 0; i < _save_in.size(); ++i)
78 _save_in[i]->sys().solution().add_vector(_local_re, _save_in[i]->dofIndices());
91 DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), _var.number());
92 _local_ke.resize(ke.m(), ke.n());
99 if (_has_diag_save_in)
101 unsigned int rows = ke.m();
102 DenseVector<Number> diag(rows);
103 for (
unsigned int i = 0; i < rows; ++i)
104 diag(i) = _local_ke(i, i);
106 Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
107 for (
unsigned int i = 0; i < _diag_save_in.size(); ++i)
108 _diag_save_in[i]->sys().solution().add_vector(diag, _diag_save_in[i]->dofIndices());
114 computeNonlocalJacobian();