@@ -29,7 +29,8 @@ ArrayNodalKernel::ArrayNodalKernel(const InputParameters & parameters)
2929 _var (* mooseVariable ()),
3030 _u (_var .dofValues ()),
3131 _count (_var .count ()),
32- _work_vector (_count )
32+ _work_vector (_count ),
33+ _scaling (_var .arrayScalingFactor ())
3334{
3435 addMooseVariableDependency (mooseVariable ());
3536}
@@ -41,7 +42,7 @@ ArrayNodalKernel::computeResidual()
4142 return ;
4243 _qp = 0 ;
4344 computeQpResidual (_work_vector );
44- addResiduals (_assembly , _work_vector , _var .dofIndices (), _var . arrayScalingFactor () );
45+ addResiduals (_assembly , _work_vector , _var .dofIndices (), _scaling );
4546}
4647
4748void
@@ -50,12 +51,12 @@ ArrayNodalKernel::computeJacobian()
5051 if (!_var .isNodalDefined ())
5152 return ;
5253 _qp = 0 ;
53- const auto jacobian = computeQpJacobian ();
54- const auto & dof_indices = _var .dofIndices ();
55- mooseAssert ( dof_indices . size () == _count , "The number of dofs should be equal to count" );
56- for ( const auto i : make_range ( _count ))
57- addJacobianElement (
58- _assembly , jacobian ( i ), dof_indices [ i ], dof_indices [ i ], _var . arrayScalingFactor ()[ i ] );
54+
55+ _ivar_indices = & _var .dofIndices ();
56+ _jvar_indices = & _var . dofIndices ( );
57+ mooseAssert ( _ivar_indices -> size () == _count , "The number of dofs should be equal to count" );
58+
59+ computeQpJacobian ( );
5960}
6061
6162void
@@ -69,31 +70,18 @@ ArrayNodalKernel::computeOffDiagJacobian(const unsigned int jvar_num)
6970 else
7071 {
7172 const auto & jvar = getVariable (jvar_num );
72- const auto jacobian = computeQpOffDiagJacobian (jvar );
73- const auto & ivar_indices = _var .dofIndices ();
74- const auto & jvar_indices = jvar .dofIndices ();
73+ _ivar_indices = & _var .dofIndices ();
74+ _jvar_indices = & jvar .dofIndices ();
75+ mooseAssert (_ivar_indices -> size () == _count , "The number of dofs should be equal to count" );
76+ mooseAssert (_jvar_indices -> size () == jvar .count (),
77+ "The number of dofs should be equal to count" );
7578
76- mooseAssert (ivar_indices .size () == _count , "The number of dofs should be equal to count" );
77- mooseAssert (jvar_indices .size () == jvar .count (), "The number of dofs should be equal to count" );
78-
79- for (const auto i : make_range (_var .count ()))
80- for (const auto j : make_range (jvar .count ()))
81- addJacobianElement (_assembly ,
82- jacobian (i , j ),
83- ivar_indices [i ],
84- jvar_indices [j ],
85- _var .arrayScalingFactor ()[i ]);
79+ computeQpOffDiagJacobian (jvar_num );
8680 }
8781}
8882
89- RealEigenVector
90- ArrayNodalKernel ::computeQpJacobian ()
91- {
92- return RealEigenVector ::Zero (_count );
93- }
94-
95- RealEigenMatrix
96- ArrayNodalKernel ::computeQpOffDiagJacobian (const MooseVariableFieldBase & jvar )
83+ void
84+ ArrayNodalKernel ::setJacobian (unsigned int i , unsigned int j , Real value )
9785{
98- return RealEigenMatrix :: Zero ( _count , jvar . count () );
86+ addJacobianElement ( _assembly , value , ( * _ivar_indices )[ i ], ( * _jvar_indices )[ j ], _scaling [ i ] );
9987}
0 commit comments