26 params.template addRequiredParam<NonlinearVariableName>(
27 "variable",
"The name of the variable that this RayKernel operates on");
42 _var(*this->mooseVariable()),
43 _u(_is_implicit ? _var.sln() : _var.slnOld()),
44 _grad_u(_is_implicit ? _var.gradSln() : _var.gradSlnOld()),
46 _grad_test(_var.gradPhi()),
47 _phi(_assembly.phi(_var)),
48 _grad_phi(_assembly.gradPhi(_var))
57 mooseError(
"Not valid on coordinate systems other than XYZ");
66 mooseAssert(_current_subdomain_id == _assembly.currentSubdomainID(),
"Subdomain IDs not in sync");
67 mooseAssert(_fe_problem.currentlyComputingJacobian() || _fe_problem.currentlyComputingResidual(),
68 "Not computing residual or Jacobian");
70 if (_fe_problem.currentlyComputingJacobian())
72 else if (_fe_problem.currentlyComputingResidual())
80 prepareVectorTag(_assembly, _var.number());
82 precalculateResidual();
83 for (_i = 0; _i < _test.size(); ++_i)
84 for (_qp = 0; _qp < _q_point.size(); ++_qp)
85 _local_re(_i) += _JxW[_qp] * computeQpResidual();
87 accumulateTaggedLocalResidual();
97 _subproblem.prepareShapes(_var.number(), _tid);
99 precalculateJacobian();
101 const auto & ce = _fe_problem.couplingEntries(_tid, _nl->number());
102 for (
const auto & it : ce)
107 const auto ivar = ivariable.
number();
108 if (ivar != _var.number() || !jvariable.
activeOnSubdomain(_current_subdomain_id))
112 mooseAssert(jvariable.
count() == 1,
"ArrayMooseVariable objects are not coupleable");
114 const auto jvar = jvariable.
number();
116 prepareMatrixTag(_assembly, _var.number(), jvar);
117 if (_local_ke.m() != _test.size())
122 precalculateJacobian();
123 for (_i = 0; _i < _test.size(); _i++)
124 for (_j = 0; _j < _phi.size(); _j++)
125 for (_qp = 0; _qp < _JxW.size(); _qp++)
126 _local_ke(_i, _j) += _JxW[_qp] * computeQpJacobian();
130 precalculateOffDiagJacobian(jvar);
131 for (_i = 0; _i < _test.size(); _i++)
132 for (_j = 0; _j < _phi.size(); _j++)
133 for (_qp = 0; _qp < _JxW.size(); _qp++)
134 _local_ke(_i, _j) += _JxW[_qp] * computeQpOffDiagJacobian(jvar);
137 accumulateTaggedLocalMatrix();
Base class for a RayKernel that integrates along a Ray segment.
unsigned int number() const
static InputParameters validParams()
unsigned int count() const
FEProblemBase & _fe_problem
The FEProblemBase.
MooseMesh & _mesh
The MooseMesh.
Base class for a ray kernel that contributes to the residual and/or Jacobian.
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
static InputParameters validParams()
void onSegment() override final
Called on each segment of a Ray.
MooseVariableFE< T > & variable()
The MooseVariable this RayKernel contributes to.
void addMooseVariableDependency(MooseVariableFieldBase *var)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
RayKernelTempl(const InputParameters ¶ms)
void mooseError(Args &&... args) const
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
bool activeOnSubdomain(SubdomainID subdomain) const
static InputParameters validParams()
void computeResidual()
Computes and contributes to the residual for a segment.
void computeJacobian()
Computes and contributes to the Jacobian for a segment.
const std::set< SubdomainID > & meshSubdomains() const