https://mooseframework.inl.gov
Loading...
Searching...
No Matches
DiffusionLHDGKernel.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
11#include "DiffusionLHDGKernel.h"
12#include "MooseVariableFE.h"
13#include "MooseVariableScalar.h"
14#include "SystemBase.h"
15#include "MooseMesh.h"
16#include "MooseObject.h"
18#include "NonlinearThread.h"
19
20using namespace libMesh;
21
23
26{
27 auto params = HDGKernel::validParams();
29 params.renameParam("variable", "u", "The diffusing specie concentration");
30 params.addParam<MooseFunctorName>("source", 0, "Source for the diffusing species");
31 params.addClassDescription("Adds the element and interior face weak forms for a hybridized local "
32 "discontinuous Galerkin discretization of a diffusion term.");
33 return params;
34}
35
37 : HDGKernel(params),
38 DiffusionLHDGAssemblyHelper(this, this, this, this, _fe_problem, _sys, _tid),
39 _source(getFunctor<Real>("source"))
40{
41}
42
43void
45{
46 // This check must occur after FEProblemBase::init()
48}
49
50void
63
64void
80
81void
99
100void
102{
110
111 // qu, u, lm_u
116
130}
131
132void
137
138void
147
148std::set<std::string>
registerMooseObject("MooseApp", DiffusionLHDGKernel)
Implements all the methods for assembling a hybridized local discontinuous Galerkin (LDG-H),...
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 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 MooseVariableFE< Real > & _u_var
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...
const MooseArray< Number > & _u_sol
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...
const std::vector< dof_id_type > & _lm_u_dof_indices
const MooseArray< libMesh::Gradient > & _qu_sol
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 Elem * _cached_elem
A data member used for determining when to compute the Jacobian.
const MooseArray< Number > & _lm_u_sol
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
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 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 MooseVariableFE< Real > & _u_face_var
const MooseVariableFE< RealVectorValue > & _grad_u_var
Implements the diffusion equation for a hybridized discretization.
virtual void computeOffDiagJacobian(unsigned int jvar) override
Forwards to computeJacobian() the first time this is called for a given element.
virtual void computeResidual() override
Compute this Kernel's contribution to the residual.
virtual void computeJacobianOnSide() override
DiffusionLHDGKernel(const InputParameters &params)
virtual void computeJacobian() override
Compute this object's entire Jacobian, both on- and off-diagonal.
static InputParameters validParams()
virtual void initialSetup() override
Gets called at the beginning of the simulation before this object is asked to do its job.
virtual void computeResidualOnSide() override
const Moose::Functor< Real > & _source
optional source
virtual void jacobianSetup() override
Gets called just before the Jacobian is computed and before this object is asked to do its job.
virtual std::set< std::string > additionalROVariables() override
Base kernel for hybridized finite element formulations.
Definition HDGKernel.h:18
const QBase *const & _qrule_face
The face quadrature rule.
Definition HDGKernel.h:35
const MooseArray< Point > & _normals
face normals
Definition HDGKernel.h:44
const MooseArray< Real > & _JxW_face
transformed Jacobian weights on the current element face
Definition HDGKernel.h:41
static InputParameters validParams()
Definition HDGKernel.C:14
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
const MooseArray< Point > & _q_point
The physical location of the element's quadrature Points, indexed by _qp.
Definition KernelBase.h:46
const MooseArray< Real > & _JxW
The current quadrature point weight value.
Definition KernelBase.h:52
const Elem *const & _current_elem
Current element.
Definition KernelBase.h:37
const QBase *const & _qrule
active quadrature rule
Definition KernelBase.h:49
const std::string & name() const
Get the name of the class.
Definition MooseBase.h:103
void scalingFactor(const std::vector< Real > &factor)
Set the scaling factor for this variable.
Assembly & _assembly
Reference to this Kernel's assembly object.
void addJacobian(Assembly &assembly, const Residuals &residuals, const Indices &dof_indices, Real scaling_factor)
Add the provided residual derivatives into the Jacobian for the provided dof indices.
void addResiduals(Assembly &assembly, const Residuals &residuals, const Indices &dof_indices, Real scaling_factor)
Add the provided incoming residuals corresponding to the provided dof indices.
void resize(const unsigned int new_m, const unsigned int new_n)
void resize(const unsigned int n)
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real