diff --git a/include/kernels/VectorGradScalar.h b/include/kernels/VectorGradScalar.h index 82a6380..9161e62 100755 --- a/include/kernels/VectorGradScalar.h +++ b/include/kernels/VectorGradScalar.h @@ -16,13 +16,13 @@ class VectorGradScalar : public VectorKernel protected: virtual Real computeQpResidual() override; virtual Real computeQpJacobian() override; - // virtual Real computeQpOffDiagJacobian(unsigned jvar) override; + virtual Real computeQpOffDiagJacobian(unsigned jvar) override; const Real & _coef; const VariableGradient & _grad_eta; - // const unsigned _eta_id; - // MooseVariable & _eta_var; - // const VariablePhiGradient & _grad_standard_phi; + const unsigned _scalar_id; + MooseVariable & _scalar_var; + const VariablePhiGradient & _grad_standard_phi; }; #endif /* VECTORGRADSCALAR_H */ diff --git a/src/kernels/VectorGradScalar.C b/src/kernels/VectorGradScalar.C index 169cee8..55880ee 100755 --- a/src/kernels/VectorGradScalar.C +++ b/src/kernels/VectorGradScalar.C @@ -24,7 +24,10 @@ validParams() VectorGradScalar::VectorGradScalar(const InputParameters & parameters) : VectorKernel(parameters), _coef(getParam("coef")), - _grad_eta(coupledGradient("scalar")) + _grad_eta(coupledGradient("scalar")), + _scalar_id(coupled("scalar")), + _scalar_var(*getVar("scalar", 0)), + _grad_standard_phi(_assembly.gradPhi(_scalar_var)) { } @@ -39,3 +42,12 @@ VectorGradScalar::computeQpJacobian() { return 0; } + +Real +VectorGradScalar::computeQpOffDiagJacobian(unsigned jvar) +{ + if (jvar == _scalar_id) + return -_coef * _grad_standard_phi[_j][_qp] * _test[_i][_qp]; + else + return 0; +}