Line data Source code
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 :
10 : #include "DiffusionLHDGAssemblyHelper.h"
11 : #include "DiffusionLHDGKernel.h"
12 : #include "MooseVariableFE.h"
13 : #include "MooseVariableScalar.h"
14 : #include "SystemBase.h"
15 : #include "MooseMesh.h"
16 : #include "MooseObject.h"
17 : #include "MaterialPropertyInterface.h"
18 : #include "NonlinearThread.h"
19 :
20 : using namespace libMesh;
21 :
22 : registerMooseObject("MooseApp", DiffusionLHDGKernel);
23 :
24 : InputParameters
25 14678 : DiffusionLHDGKernel::validParams()
26 : {
27 14678 : auto params = HDGKernel::validParams();
28 14678 : params += DiffusionLHDGAssemblyHelper::validParams();
29 14678 : params.renameParam("variable", "u", "The diffusing specie concentration");
30 14678 : params.addParam<MooseFunctorName>("source", 0, "Source for the diffusing species");
31 14678 : params.addClassDescription("Adds the element and interior face weak forms for a hybridized local "
32 : "discontinuous Galerkin discretization of a diffusion term.");
33 14678 : return params;
34 0 : }
35 :
36 207 : DiffusionLHDGKernel::DiffusionLHDGKernel(const InputParameters & params)
37 : : HDGKernel(params),
38 207 : DiffusionLHDGAssemblyHelper(this, this, this, this, _fe_problem, _sys, _tid),
39 207 : _source(getFunctor<Real>("source")),
40 207 : _qrule_face(_assembly.qRuleFace()),
41 207 : _q_point_face(_assembly.qPointsFace()),
42 207 : _JxW_face(_assembly.JxWFace()),
43 414 : _normals(_assembly.normals())
44 : {
45 207 : }
46 :
47 : void
48 207 : DiffusionLHDGKernel::initialSetup()
49 : {
50 : // This check must occur after FEProblemBase::init()
51 207 : checkCoupling();
52 207 : }
53 :
54 : void
55 356368 : DiffusionLHDGKernel::computeResidual()
56 : {
57 356368 : _vector_re.resize(_qu_dof_indices.size());
58 356368 : _scalar_re.resize(_u_dof_indices.size());
59 :
60 : // qu and u
61 356368 : vectorVolumeResidual(_qu_sol, _u_sol, _JxW, *_qrule, _vector_re);
62 356368 : scalarVolumeResidual(_qu_sol, _source, _JxW, *_qrule, _current_elem, _q_point, _scalar_re);
63 :
64 356368 : addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
65 356368 : addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
66 356368 : }
67 :
68 : void
69 1262904 : DiffusionLHDGKernel::computeResidualOnSide()
70 : {
71 1262904 : _vector_re.resize(_qu_dof_indices.size());
72 1262904 : _scalar_re.resize(_u_dof_indices.size());
73 1262904 : _lm_re.resize(_lm_u_dof_indices.size());
74 :
75 : // qu, u, lm_u
76 1262904 : vectorFaceResidual(_lm_u_sol, _JxW_face, *_qrule_face, _normals, _vector_re);
77 1262904 : scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _scalar_re);
78 1262904 : lmFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _lm_re);
79 :
80 1262904 : addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
81 1262904 : addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
82 1262904 : addResiduals(_assembly, _lm_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
83 1262904 : }
84 :
85 : void
86 236336 : DiffusionLHDGKernel::computeJacobian()
87 : {
88 236336 : _vector_vector_jac.resize(_qu_dof_indices.size(), _qu_dof_indices.size());
89 236336 : _vector_scalar_jac.resize(_qu_dof_indices.size(), _u_dof_indices.size());
90 236336 : _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
91 :
92 : // qu and u
93 236336 : vectorVolumeJacobian(_JxW, *_qrule, _vector_vector_jac, _vector_scalar_jac);
94 236336 : scalarVolumeJacobian(_JxW, *_qrule, _scalar_vector_jac);
95 :
96 472672 : addJacobian(
97 236336 : _assembly, _vector_vector_jac, _qu_dof_indices, _qu_dof_indices, _grad_u_var.scalingFactor());
98 472672 : addJacobian(
99 236336 : _assembly, _vector_scalar_jac, _qu_dof_indices, _u_dof_indices, _grad_u_var.scalingFactor());
100 472672 : addJacobian(
101 236336 : _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
102 236336 : }
103 :
104 : void
105 839056 : DiffusionLHDGKernel::computeJacobianOnSide()
106 : {
107 839056 : _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
108 839056 : _scalar_scalar_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
109 839056 : _scalar_lm_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
110 839056 : _lm_scalar_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
111 839056 : _lm_lm_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
112 839056 : _vector_lm_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
113 839056 : _lm_vector_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
114 :
115 : // qu, u, lm_u
116 839056 : vectorFaceJacobian(_JxW_face, *_qrule_face, _normals, _vector_lm_jac);
117 839056 : scalarFaceJacobian(
118 839056 : _JxW_face, *_qrule_face, _normals, _scalar_vector_jac, _scalar_scalar_jac, _scalar_lm_jac);
119 839056 : lmFaceJacobian(_JxW_face, *_qrule_face, _normals, _lm_vector_jac, _lm_scalar_jac, _lm_lm_jac);
120 :
121 1678112 : addJacobian(
122 839056 : _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
123 1678112 : addJacobian(
124 839056 : _assembly, _scalar_scalar_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
125 839056 : addJacobian(_assembly, _scalar_lm_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
126 1678112 : addJacobian(
127 839056 : _assembly, _lm_scalar_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
128 1678112 : addJacobian(
129 839056 : _assembly, _lm_lm_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
130 1678112 : addJacobian(
131 839056 : _assembly, _vector_lm_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
132 1678112 : addJacobian(
133 839056 : _assembly, _lm_vector_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
134 839056 : }
135 :
136 : void
137 392 : DiffusionLHDGKernel::jacobianSetup()
138 : {
139 392 : _cached_elem = nullptr;
140 392 : }
141 :
142 : void
143 709008 : DiffusionLHDGKernel::computeOffDiagJacobian(const unsigned int)
144 : {
145 709008 : if (_cached_elem != _current_elem)
146 : {
147 236336 : computeJacobian();
148 236336 : _cached_elem = _current_elem;
149 : }
150 709008 : }
151 :
152 : std::set<std::string>
153 206 : DiffusionLHDGKernel::additionalROVariables()
154 : {
155 618 : return {_grad_u_var.name(), _u_face_var.name()};
156 206 : }
|