https://mooseframework.inl.gov
Loading...
Searching...
No Matches
DiffusionLHDGAssemblyHelper.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
12#include "MooseVariableFE.h"
13#include "SystemBase.h"
14#include "MooseObject.h"
16#include "NonlinearThread.h"
17#include "TransientInterface.h"
18
19using namespace libMesh;
20
23{
24 auto params = emptyInputParameters();
25 params.addRequiredParam<NonlinearVariableName>(
26 "gradient_variable", "The gradient of the diffusing specie concentration");
27 params.addRequiredParam<NonlinearVariableName>(
28 "face_variable", "The concentration of the diffusing specie on faces");
29 params.addRequiredParam<MaterialPropertyName>("diffusivity", "The diffusivity");
30 params.addParam<Real>("tau",
31 1,
32 "The stabilization coefficient required for discontinuous Galerkin "
33 "schemes. This may be set to 0 for a mixed method with Raviart-Thomas.");
34 return params;
35}
36
38 const MooseObject * const moose_obj,
39 MaterialPropertyInterface * const mpi,
41 const TransientInterface * const ti,
42 const FEProblemBase & fe_problem,
43 SystemBase & sys,
44 const THREAD_ID tid)
45 : ADFunctorInterface(moose_obj),
46 _u_var(sys.getFieldVariable<Real>(tid, moose_obj->getParam<NonlinearVariableName>("variable"))),
47 _grad_u_var(sys.getFieldVariable<RealVectorValue>(
48 tid, moose_obj->getParam<NonlinearVariableName>("gradient_variable"))),
49 _u_face_var(sys.getFieldVariable<Real>(
50 tid, moose_obj->getParam<NonlinearVariableName>("face_variable"))),
51 _qu_dof_indices(_grad_u_var.dofIndices()),
52 _u_dof_indices(_u_var.dofIndices()),
53 _lm_u_dof_indices(_u_face_var.dofIndices()),
54 _qu_sol(_grad_u_var.sln()),
55 _u_sol(_u_var.sln()),
56 _lm_u_sol(_u_face_var.sln()),
57 _vector_phi(_grad_u_var.phi()),
58 _scalar_phi(_u_var.phi()),
59 _grad_scalar_phi(_u_var.gradPhi()),
60 _div_vector_phi(_grad_u_var.divPhi()),
61 _vector_phi_face(_grad_u_var.phiFace()),
62 _scalar_phi_face(_u_var.phiFace()),
63 _lm_phi_face(_u_face_var.phiFace()),
64 _diff(mpi->getMaterialProperty<Real>("diffusivity")),
65 _ti(*ti),
66 _tau(moose_obj->getParam<Real>("tau")),
67 _cached_elem(nullptr),
68 _moose_obj(*moose_obj),
69 _dhah_fe_problem(fe_problem),
70 _dhah_sys(sys)
71{
74}
75
76void
78{
79 // This check must occur after FEProblemBase::init()
81 return;
83 {
84 const auto * const cm = _dhah_fe_problem.couplingMatrix(_dhah_sys.number());
85 for (const auto i : make_range(cm->size()))
86 for (const auto j : make_range(cm->size()))
87 if ((*cm)(i, j) != true)
88 goto error;
89
90 return;
91 }
92
93error:
95 "This class encodes the full Jacobian regardless of user input file specification, "
96 "so please request full coupling for system ",
98 " in your Preconditioning block for consistency");
99}
100
101void
103 const MooseArray<Number> & scalar_sol,
104 const MooseArray<Real> & JxW,
105 const QBase & qrule,
106 DenseVector<Number> & vector_re)
107{
108 for (const auto qp : make_range(qrule.n_points()))
109 {
110 const auto vector_qp_term = JxW[qp] * vector_sol[qp];
111 const auto scalar_qp_term = JxW[qp] * scalar_sol[qp];
112 for (const auto i : index_range(vector_re))
113 {
114 // Vector equation dependence on vector dofs
115 vector_re(i) += _vector_phi[i][qp] * vector_qp_term;
116
117 // Vector equation dependence on scalar dofs
118 vector_re(i) += _div_vector_phi[i][qp] * scalar_qp_term;
119 }
120 }
121}
122
123void
125 const QBase & qrule,
126 DenseMatrix<Number> & vector_vector_jac,
127 DenseMatrix<Number> & vector_scalar_jac)
128{
129 for (const auto qp : make_range(qrule.n_points()))
130 for (const auto i : make_range(vector_vector_jac.m()))
131 {
132 // Vector equation dependence on vector dofs
133 const auto vector_qpi_term = JxW[qp] * _vector_phi[i][qp];
134 for (const auto j : make_range(vector_vector_jac.n()))
135 vector_vector_jac(i, j) += vector_qpi_term * _vector_phi[j][qp];
136
137 // Vector equation dependence on scalar dofs
138 const auto scalar_qpi_term = JxW[qp] * _div_vector_phi[i][qp];
139 for (const auto j : make_range(vector_scalar_jac.n()))
140 vector_scalar_jac(i, j) += scalar_qpi_term * _scalar_phi[j][qp];
141 }
142}
143
144void
146 const Moose::Functor<Real> & source,
147 const MooseArray<Real> & JxW,
148 const QBase & qrule,
149 const Elem * const current_elem,
150 const MooseArray<Point> & q_point,
151 DenseVector<Number> & scalar_re)
152{
153 for (const auto qp : make_range(qrule.n_points()))
154 {
155 const auto vector_qp_term = JxW[qp] * _diff[qp] * vector_field[qp];
156 // Evaluate source
157 const auto f =
158 source(Moose::ElemQpArg{current_elem, qp, &qrule, q_point[qp]}, _ti.determineState());
159 const auto source_qp_term = JxW[qp] * f;
160
161 for (const auto i : index_range(scalar_re))
162 {
163 scalar_re(i) += _grad_scalar_phi[i][qp] * vector_qp_term;
164
165 // Scalar equation RHS
166 scalar_re(i) -= _scalar_phi[i][qp] * source_qp_term;
167 }
168 }
169}
170
171void
173 const QBase & qrule,
174 DenseMatrix<Number> & scalar_vector_jac)
175{
176 for (const auto qp : make_range(qrule.n_points()))
177 {
178 const auto qp_term = JxW[qp] * _diff[qp];
179 for (const auto i : make_range(scalar_vector_jac.m()))
180 {
181 const auto qpi_term = qp_term * _grad_scalar_phi[i][qp];
182 // Scalar equation dependence on vector dofs
183 for (const auto j : make_range(scalar_vector_jac.n()))
184 scalar_vector_jac(i, j) += qpi_term * _vector_phi[j][qp];
185 }
186 }
187}
188
189void
191 const MooseArray<Real> & JxW_face,
192 const QBase & qrule_face,
193 const MooseArray<Point> & normals,
194 DenseVector<Number> & vector_re)
195{
196 // Vector equation dependence on LM dofs
197 for (const auto qp : make_range(qrule_face.n_points()))
198 {
199 const auto qp_term = JxW_face[qp] * lm_sol[qp] * normals[qp];
200 for (const auto i : index_range(vector_re))
201 vector_re(i) -= _vector_phi_face[i][qp] * qp_term;
202 }
203}
204
205void
207 const QBase & qrule_face,
208 const MooseArray<Point> & normals,
209 DenseMatrix<Number> & vector_lm_jac)
210{
211 for (const auto qp : make_range(qrule_face.n_points()))
212 {
213 const auto qp_term = JxW_face[qp] * normals[qp];
214 // Vector equation dependence on LM dofs
215 for (const auto i : make_range(vector_lm_jac.m()))
216 {
217 const auto qpi_term = qp_term * _vector_phi_face[i][qp];
218 for (const auto j : make_range(vector_lm_jac.n()))
219 vector_lm_jac(i, j) -= qpi_term * _lm_phi_face[j][qp];
220 }
221 }
222}
223
224void
226 const MooseArray<Number> & scalar_sol,
227 const MooseArray<Number> & lm_sol,
228 const MooseArray<Real> & JxW_face,
229 const QBase & qrule_face,
230 const MooseArray<Point> & normals,
231 DenseVector<Number> & scalar_re)
232{
233 for (const auto qp : make_range(qrule_face.n_points()))
234 {
235 // vector
236 const auto vector_qp_term = JxW_face[qp] * _diff[qp] * (vector_sol[qp] * normals[qp]);
237 // stabilization term
238 const auto stab_qp_term = JxW_face[qp] * _tau * (normals[qp] * normals[qp]);
239 // scalar from stabilization term
240 const auto scalar_qp_term = stab_qp_term * scalar_sol[qp];
241 // lm from stabilization term
242 const auto lm_qp_term = stab_qp_term * lm_sol[qp];
243 for (const auto i : index_range(scalar_re))
244 scalar_re(i) += _scalar_phi_face[i][qp] * (scalar_qp_term - vector_qp_term - lm_qp_term);
245 }
246}
247
248void
250 const QBase & qrule_face,
251 const MooseArray<Point> & normals,
252 DenseMatrix<Number> & scalar_vector_jac,
253 DenseMatrix<Number> & scalar_scalar_jac,
254 DenseMatrix<Number> & scalar_lm_jac)
255{
256 for (const auto qp : make_range(qrule_face.n_points()))
257 {
258 const auto vector_qp_term = JxW_face[qp] * _diff[qp] * normals[qp];
259 const auto stab_qp_term = JxW_face[qp] * _tau * normals[qp] * normals[qp];
260
261 for (const auto i : make_range(scalar_vector_jac.m()))
262 {
263 const auto vector_qpi_term = vector_qp_term * _scalar_phi_face[i][qp];
264 for (const auto j : make_range(scalar_vector_jac.n()))
265 scalar_vector_jac(i, j) -= vector_qpi_term * _vector_phi_face[j][qp];
266
267 const auto scalar_qpi_term = stab_qp_term * _scalar_phi_face[i][qp];
268 for (const auto j : make_range(scalar_scalar_jac.n()))
269 scalar_scalar_jac(i, j) += scalar_qpi_term * _scalar_phi_face[j][qp];
270 for (const auto j : make_range(scalar_lm_jac.n()))
271 scalar_lm_jac(i, j) -= scalar_qpi_term * _lm_phi_face[j][qp];
272 }
273 }
274}
275
276void
278 const MooseArray<Number> & scalar_sol,
279 const MooseArray<Number> & lm_sol,
280 const MooseArray<Real> & JxW_face,
281 const QBase & qrule_face,
282 const MooseArray<Point> & normals,
283 DenseVector<Number> & lm_re)
284{
285 for (const auto qp : make_range(qrule_face.n_points()))
286 {
287 // vector
288 const auto vector_qp_term = JxW_face[qp] * _diff[qp] * (vector_sol[qp] * normals[qp]);
289 // stabilization term
290 const auto stab_qp_term = JxW_face[qp] * _tau * (normals[qp] * normals[qp]);
291 // scalar from stabilization term
292 const auto scalar_qp_term = stab_qp_term * scalar_sol[qp];
293 // lm from stabilization term
294 const auto lm_qp_term = stab_qp_term * lm_sol[qp];
295 for (const auto i : index_range(lm_re))
296 lm_re(i) += _lm_phi_face[i][qp] * (scalar_qp_term - vector_qp_term - lm_qp_term);
297 }
298}
299
300void
302 const QBase & qrule_face,
303 const MooseArray<Point> & normals,
304 DenseMatrix<Number> & lm_vec_jac,
305 DenseMatrix<Number> & lm_scalar_jac,
306 DenseMatrix<Number> & lm_lm_jac)
307{
308 for (const auto qp : make_range(qrule_face.n_points()))
309 {
310 const auto vector_qp_term = JxW_face[qp] * _diff[qp] * normals[qp];
311 const auto stab_qp_term = JxW_face[qp] * _tau * normals[qp] * normals[qp];
312
313 for (const auto i : make_range(lm_vec_jac.m()))
314 {
315 const auto vector_qpi_term = vector_qp_term * _lm_phi_face[i][qp];
316 for (const auto j : make_range(lm_vec_jac.n()))
317 lm_vec_jac(i, j) -= vector_qpi_term * _vector_phi_face[j][qp];
318
319 const auto lm_qpi_term = stab_qp_term * _lm_phi_face[i][qp];
320 for (const auto j : make_range(lm_scalar_jac.n()))
321 lm_scalar_jac(i, j) += lm_qpi_term * _scalar_phi_face[j][qp];
322 for (const auto j : make_range(lm_lm_jac.n()))
323 lm_lm_jac(i, j) -= lm_qpi_term * _lm_phi_face[j][qp];
324 }
325 }
326}
327
328void
330 const MooseArray<Real> & JxW_face,
331 const QBase & qrule_face,
332 const MooseArray<Point> & normals,
333 const Elem * const current_elem,
334 const unsigned int current_side,
335 const MooseArray<Point> & q_point_face,
336 DenseVector<Number> & vector_re)
337{
338 for (const auto qp : make_range(qrule_face.n_points()))
339 {
340 const auto scalar_value = dirichlet_value(
341 Moose::ElemSideQpArg{current_elem, current_side, qp, &qrule_face, q_point_face[qp]},
343 const auto qp_term = JxW_face[qp] * normals[qp] * scalar_value;
344
345 // External boundary -> Dirichlet faces -> Vector equation RHS
346 for (const auto i : index_range(_qu_dof_indices))
347 vector_re(i) -= qp_term * _vector_phi_face[i][qp];
348 }
349}
350
351void
353 const MooseArray<Number> & scalar_sol,
354 const Moose::Functor<Real> & dirichlet_value,
355 const MooseArray<Real> & JxW_face,
356 const QBase & qrule_face,
357 const MooseArray<Point> & normals,
358 const Elem * const current_elem,
359 const unsigned int current_side,
360 const MooseArray<Point> & q_point_face,
361 DenseVector<Number> & scalar_re)
362{
363 for (const auto qp : make_range(qrule_face.n_points()))
364 {
365 const auto scalar_value = dirichlet_value(
366 Moose::ElemSideQpArg{current_elem, current_side, qp, &qrule_face, q_point_face[qp]},
368 const auto vector_qp_term = JxW_face[qp] * _diff[qp] * (vector_sol[qp] * normals[qp]);
369 const auto stab_qp_term = JxW_face[qp] * _tau * normals[qp] * normals[qp];
370 const auto scalar_qp_term = stab_qp_term * scalar_sol[qp];
371 const auto lm_qp_term = stab_qp_term * scalar_value;
372
373 for (const auto i : index_range(_u_dof_indices))
374 scalar_re(i) += (scalar_qp_term - vector_qp_term - lm_qp_term) * _scalar_phi_face[i][qp];
375 }
376}
377
378void
380 const QBase & qrule_face,
381 const MooseArray<Point> & normals,
382 DenseMatrix<Number> & scalar_vector_jac,
383 DenseMatrix<Number> & scalar_scalar_jac)
384{
385 for (const auto qp : make_range(qrule_face.n_points()))
386 {
387 const auto vector_qp_term = JxW_face[qp] * _diff[qp] * normals[qp];
388 const auto scalar_qp_term = JxW_face[qp] * _tau * normals[qp] * normals[qp];
389 for (const auto i : index_range(_u_dof_indices))
390 {
391 const auto vector_qpi_term = vector_qp_term * _scalar_phi_face[i][qp];
392 for (const auto j : index_range(_qu_dof_indices))
393 scalar_vector_jac(i, j) -= vector_qpi_term * _vector_phi_face[j][qp];
394
395 const auto scalar_qpi_term = scalar_qp_term * _scalar_phi_face[i][qp];
396 for (const auto j : index_range(_u_dof_indices))
397 scalar_scalar_jac(i, j) += scalar_qpi_term * _scalar_phi_face[j][qp];
398 }
399 }
400}
401
402void
404 const QBase & qrule,
405 const MooseArray<std::vector<Real>> & phi,
406 const MooseArray<Number> & sol,
408{
409 for (const auto qp : make_range(qrule.n_points()))
410 {
411 const auto qp_term = JxW[qp] * sol[qp];
412 for (const auto i : index_range(phi))
413 re(i) -= phi[i][qp] * qp_term;
414 }
415}
416
417void
419 const QBase & qrule,
420 const MooseArray<std::vector<Real>> & phi,
422{
423 for (const auto qp : make_range(qrule.n_points()))
424 for (const auto i : index_range(phi))
425 {
426 const auto qpi_term = JxW[qp] * phi[i][qp];
427 for (const auto j : index_range(phi))
428 ke(i, j) -= phi[j][qp] * qpi_term;
429 }
430}
InputParameters emptyInputParameters()
unsigned int THREAD_ID
Definition MooseTypes.h:237
An interface for accessing Moose::Functors for systems that care about automatic differentiation,...
void vectorVolumeResidual(const MooseArray< Gradient > &vector_sol, const MooseArray< Number > &scalar_sol, const MooseArray< Real > &JxW, const libMesh::QBase &qrule, DenseVector< Number > &vector_re)
Computes a local residual vector for the weak form: (q, v) + (u, div(v)) where q is the vector field ...
void scalarDirichletJacobian(const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, DenseMatrix< Number > &scalar_vector_jac, DenseMatrix< Number > &scalar_scalar_jac)
Computes the Jacobian for a Dirichlet condition for the scalar field in the scalar field equation.
void scalarFaceResidual(const MooseArray< Gradient > &vector_sol, const MooseArray< Number > &scalar_sol, const MooseArray< Number > &lm_sol, const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, DenseVector< Number > &scalar_re)
Computes a local residual vector for the weak form: -<Dq*n, w> + <\tau * (u - \hat{u}) * n * n,...
const std::vector< dof_id_type > & _qu_dof_indices
const MooseArray< std::vector< Real > > & _scalar_phi
void createIdentityResidual(const MooseArray< Real > &JxW, const libMesh::QBase &qrule, const MooseArray< std::vector< Real > > &phi, const MooseArray< Number > &sol, DenseVector< Number > &re)
Creates residuals corresponding to the weak form (v, \hat{u}), or stated simply this routine can be u...
const SystemBase & _dhah_sys
A reference to the nonlinear system used for coupling checks.
const FEProblemBase & _dhah_fe_problem
A reference to the finite element problem used for coupling checks.
void createIdentityJacobian(const MooseArray< Real > &JxW, const libMesh::QBase &qrule, const MooseArray< std::vector< Real > > &phi, DenseMatrix< Number > &ke)
As above, but for the Jacobians.
const MooseArray< std::vector< RealVectorValue > > & _vector_phi_face
void vectorFaceResidual(const MooseArray< Number > &lm_sol, const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, DenseVector< Number > &vector_re)
Computes a local residual vector for the weak form: -<\hat{u}, n*v> where \hat{u} is the trace of the...
void lmFaceJacobian(const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, DenseMatrix< Number > &lm_vec_jac, DenseMatrix< Number > &lm_scalar_jac, DenseMatrix< Number > &lm_lm_jac)
Computes a local Jacobian matrix for the weak form: -<Dq*n, \mu> + <\tau * (u - \hat{u}) * n * n,...
void vectorVolumeJacobian(const MooseArray< Real > &JxW, const libMesh::QBase &qrule, DenseMatrix< Number > &vector_vector_jac, DenseMatrix< Number > &vector_scalar_jac)
Computes a local Jacobian matrix for the weak form: (q, v) + (u, div(v)) where q is the vector field ...
void vectorFaceJacobian(const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, DenseMatrix< Number > &vector_lm_jac)
Computes a local Jacobian matrix for the weak form: -<\hat{u}, n*v> where \hat{u} is the trace of the...
void vectorDirichletResidual(const Moose::Functor< Real > &dirichlet_value, const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, const Elem *const current_elem, const unsigned int current_side, const MooseArray< Point > &q_point_face, DenseVector< Number > &vector_re)
Weakly imposes a Dirichlet condition for the scalar field in the vector (gradient) equation.
const MooseArray< std::vector< Real > > & _lm_phi_face
const MooseArray< std::vector< RealVectorValue > > & _grad_scalar_phi
const MooseArray< std::vector< Real > > & _div_vector_phi
void lmFaceResidual(const MooseArray< Gradient > &vector_sol, const MooseArray< Number > &scalar_sol, const MooseArray< Number > &lm_sol, const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, DenseVector< Number > &lm_re)
Computes a local residual vector for the weak form: -<Dq*n, \mu> + <\tau * (u - \hat{u}) * n * n,...
const MaterialProperty< Real > & _diff
The diffusivity.
const MooseObject & _moose_obj
A reference to our associated MooseObject for error reporting.
const TransientInterface & _ti
Reference to transient interface.
void scalarVolumeJacobian(const MooseArray< Real > &JxW, const libMesh::QBase &qrule, DenseMatrix< Number > &scalar_vector_jac)
Computes a local Jacobian matrix for the weak form: (Dq, grad(w)) - (f, w) where D is the diffusivity...
const std::vector< dof_id_type > & _u_dof_indices
const MooseArray< std::vector< RealVectorValue > > & _vector_phi
void scalarVolumeResidual(const MooseArray< Gradient > &vector_field, const Moose::Functor< Real > &source, const MooseArray< Real > &JxW, const libMesh::QBase &qrule, const Elem *const current_elem, const MooseArray< Point > &q_point, DenseVector< Number > &scalar_re)
Computes a local residual vector for the weak form: (Dq, grad(w)) - (f, w) where D is the diffusivity...
void scalarDirichletResidual(const MooseArray< Gradient > &vector_sol, const MooseArray< Number > &scalar_sol, const Moose::Functor< Real > &dirichlet_value, const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, const Elem *const current_elem, const unsigned int current_side, const MooseArray< Point > &q_point_face, DenseVector< Number > &scalar_re)
Weakly imposes a Dirichlet condition for the scalar field in the scalar field equation.
void scalarFaceJacobian(const MooseArray< Real > &JxW_face, const libMesh::QBase &qrule_face, const MooseArray< Point > &normals, DenseMatrix< Number > &scalar_vector_jac, DenseMatrix< Number > &scalar_scalar_jac, DenseMatrix< Number > &scalar_lm_jac)
Computes a local Jacobian matrix for the weak form: -<Dq*n, w> + <\tau * (u - \hat{u}) * n * n,...
const Real _tau
Our stabilization coefficient.
const MooseVariableFE< Real > & _u_face_var
const MooseArray< std::vector< Real > > & _scalar_phi_face
DiffusionLHDGAssemblyHelper(const MooseObject *const moose_obj, MaterialPropertyInterface *const mpi, MooseVariableDependencyInterface *const mvdi, const TransientInterface *const ti, const FEProblemBase &fe_problem, SystemBase &sys, const THREAD_ID tid)
const MooseVariableFE< RealVectorValue > & _grad_u_var
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
const libMesh::CouplingMatrix * couplingMatrix(const unsigned int nl_sys_num) const override
The coupling matrix defining what blocks exist in the preconditioning matrix.
Moose::CouplingType coupling() const
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
An interface for accessing Materials.
forward declarations
Definition MooseArray.h:18
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
Definition MooseBase.h:271
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
void addMooseVariableDependency(MooseVariableFieldBase *var)
Call this function to add the passed in MooseVariableFieldBase as a variable that this object depends...
Class for stuff related to variables.
This is a wrapper that forwards calls to the implementation, which can be switched out at any time wi...
Base class for a system (of equations)
Definition SystemBase.h:87
unsigned int number() const
Gets the number of this system.
virtual const std::string & name() const
Interface for objects that needs transient capabilities.
Moose::StateArg determineState() const
Create a functor state argument that corresponds to the implicit state of this object.
unsigned int n() const
unsigned int m() const
unsigned int n_points() const
@ COUPLING_FULL
Definition MooseTypes.h:787
@ COUPLING_CUSTOM
Definition MooseTypes.h:788
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
auto index_range(const T &sizable)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)
Argument for requesting functor evaluation at a quadrature point location in an element.
Argument for requesting functor evaluation at quadrature point locations on an element side.