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 3284 : DiffusionLHDGKernel::validParams()
26 : {
27 3284 : auto params = HDGKernel::validParams();
28 3284 : params += DiffusionLHDGAssemblyHelper::validParams();
29 19704 : params.renameParam("variable", "u", "The diffusing specie concentration");
30 13136 : params.addParam<MooseFunctorName>("source", 0, "Source for the diffusing species");
31 3284 : params.addClassDescription("Adds the element and interior face weak forms for a hybridized local "
32 : "discontinuous Galerkin discretization of a diffusion term.");
33 3284 : return params;
34 0 : }
35 :
36 112 : DiffusionLHDGKernel::DiffusionLHDGKernel(const InputParameters & params)
37 : : HDGKernel(params),
38 112 : DiffusionLHDGAssemblyHelper(this, this, this, this, _fe_problem, _sys, _tid),
39 224 : _source(getFunctor<Real>("source"))
40 : {
41 112 : }
42 :
43 : void
44 112 : DiffusionLHDGKernel::initialSetup()
45 : {
46 : // This check must occur after FEProblemBase::init()
47 112 : checkCoupling();
48 112 : }
49 :
50 : void
51 155130 : DiffusionLHDGKernel::computeResidual()
52 : {
53 155130 : _vector_re.resize(_qu_dof_indices.size());
54 155130 : _scalar_re.resize(_u_dof_indices.size());
55 :
56 : // qu and u
57 155130 : vectorVolumeResidual(_qu_sol, _u_sol, _JxW, *_qrule, _vector_re);
58 155130 : scalarVolumeResidual(_qu_sol, _source, _JxW, *_qrule, _current_elem, _q_point, _scalar_re);
59 :
60 155130 : addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
61 155130 : addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
62 155130 : }
63 :
64 : void
65 547202 : DiffusionLHDGKernel::computeResidualOnSide()
66 : {
67 547202 : _vector_re.resize(_qu_dof_indices.size());
68 547202 : _scalar_re.resize(_u_dof_indices.size());
69 547202 : _lm_re.resize(_lm_u_dof_indices.size());
70 :
71 : // qu, u, lm_u
72 547202 : vectorFaceResidual(_lm_u_sol, _JxW_face, *_qrule_face, _normals, _vector_re);
73 547202 : scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _scalar_re);
74 547202 : lmFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _lm_re);
75 :
76 547202 : addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
77 547202 : addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
78 547202 : addResiduals(_assembly, _lm_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
79 547202 : }
80 :
81 : void
82 101652 : DiffusionLHDGKernel::computeJacobian()
83 : {
84 101652 : _vector_vector_jac.resize(_qu_dof_indices.size(), _qu_dof_indices.size());
85 101652 : _vector_scalar_jac.resize(_qu_dof_indices.size(), _u_dof_indices.size());
86 101652 : _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
87 :
88 : // qu and u
89 101652 : vectorVolumeJacobian(_JxW, *_qrule, _vector_vector_jac, _vector_scalar_jac);
90 101652 : scalarVolumeJacobian(_JxW, *_qrule, _scalar_vector_jac);
91 :
92 203304 : addJacobian(
93 101652 : _assembly, _vector_vector_jac, _qu_dof_indices, _qu_dof_indices, _grad_u_var.scalingFactor());
94 203304 : addJacobian(
95 101652 : _assembly, _vector_scalar_jac, _qu_dof_indices, _u_dof_indices, _grad_u_var.scalingFactor());
96 203304 : addJacobian(
97 101652 : _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
98 101652 : }
99 :
100 : void
101 360260 : DiffusionLHDGKernel::computeJacobianOnSide()
102 : {
103 360260 : _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
104 360260 : _scalar_scalar_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
105 360260 : _scalar_lm_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
106 360260 : _lm_scalar_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
107 360260 : _lm_lm_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
108 360260 : _vector_lm_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
109 360260 : _lm_vector_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
110 :
111 : // qu, u, lm_u
112 360260 : vectorFaceJacobian(_JxW_face, *_qrule_face, _normals, _vector_lm_jac);
113 360260 : scalarFaceJacobian(
114 360260 : _JxW_face, *_qrule_face, _normals, _scalar_vector_jac, _scalar_scalar_jac, _scalar_lm_jac);
115 360260 : lmFaceJacobian(_JxW_face, *_qrule_face, _normals, _lm_vector_jac, _lm_scalar_jac, _lm_lm_jac);
116 :
117 720520 : addJacobian(
118 360260 : _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
119 720520 : addJacobian(
120 360260 : _assembly, _scalar_scalar_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
121 360260 : addJacobian(_assembly, _scalar_lm_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
122 720520 : addJacobian(
123 360260 : _assembly, _lm_scalar_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
124 720520 : addJacobian(
125 360260 : _assembly, _lm_lm_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
126 720520 : addJacobian(
127 360260 : _assembly, _vector_lm_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
128 720520 : addJacobian(
129 360260 : _assembly, _lm_vector_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
130 360260 : }
131 :
132 : void
133 209 : DiffusionLHDGKernel::jacobianSetup()
134 : {
135 209 : _cached_elem = nullptr;
136 209 : }
137 :
138 : void
139 304956 : DiffusionLHDGKernel::computeOffDiagJacobian(const unsigned int)
140 : {
141 304956 : if (_cached_elem != _current_elem)
142 : {
143 101652 : computeJacobian();
144 101652 : _cached_elem = _current_elem;
145 : }
146 304956 : }
147 :
148 : std::set<std::string>
149 111 : DiffusionLHDGKernel::additionalROVariables()
150 : {
151 444 : return {_grad_u_var.name(), _u_face_var.name()};
152 111 : }
|