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 88068 : params.renameParam("variable", "u", "The diffusing specie concentration");
30 58712 : 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 414 : _source(getFunctor<Real>("source"))
40 : {
41 207 : }
42 :
43 : void
44 207 : DiffusionLHDGKernel::initialSetup()
45 : {
46 : // This check must occur after FEProblemBase::init()
47 207 : checkCoupling();
48 207 : }
49 :
50 : void
51 356368 : DiffusionLHDGKernel::computeResidual()
52 : {
53 356368 : _vector_re.resize(_qu_dof_indices.size());
54 356368 : _scalar_re.resize(_u_dof_indices.size());
55 :
56 : // qu and u
57 356368 : vectorVolumeResidual(_qu_sol, _u_sol, _JxW, *_qrule, _vector_re);
58 356368 : scalarVolumeResidual(_qu_sol, _source, _JxW, *_qrule, _current_elem, _q_point, _scalar_re);
59 :
60 356368 : addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
61 356368 : addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
62 356368 : }
63 :
64 : void
65 1262904 : DiffusionLHDGKernel::computeResidualOnSide()
66 : {
67 1262904 : _vector_re.resize(_qu_dof_indices.size());
68 1262904 : _scalar_re.resize(_u_dof_indices.size());
69 1262904 : _lm_re.resize(_lm_u_dof_indices.size());
70 :
71 : // qu, u, lm_u
72 1262904 : vectorFaceResidual(_lm_u_sol, _JxW_face, *_qrule_face, _normals, _vector_re);
73 1262904 : scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _scalar_re);
74 1262904 : lmFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _lm_re);
75 :
76 1262904 : addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
77 1262904 : addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
78 1262904 : addResiduals(_assembly, _lm_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
79 1262904 : }
80 :
81 : void
82 236336 : DiffusionLHDGKernel::computeJacobian()
83 : {
84 236336 : _vector_vector_jac.resize(_qu_dof_indices.size(), _qu_dof_indices.size());
85 236336 : _vector_scalar_jac.resize(_qu_dof_indices.size(), _u_dof_indices.size());
86 236336 : _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
87 :
88 : // qu and u
89 236336 : vectorVolumeJacobian(_JxW, *_qrule, _vector_vector_jac, _vector_scalar_jac);
90 236336 : scalarVolumeJacobian(_JxW, *_qrule, _scalar_vector_jac);
91 :
92 472672 : addJacobian(
93 236336 : _assembly, _vector_vector_jac, _qu_dof_indices, _qu_dof_indices, _grad_u_var.scalingFactor());
94 472672 : addJacobian(
95 236336 : _assembly, _vector_scalar_jac, _qu_dof_indices, _u_dof_indices, _grad_u_var.scalingFactor());
96 472672 : addJacobian(
97 236336 : _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
98 236336 : }
99 :
100 : void
101 839056 : DiffusionLHDGKernel::computeJacobianOnSide()
102 : {
103 839056 : _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
104 839056 : _scalar_scalar_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
105 839056 : _scalar_lm_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
106 839056 : _lm_scalar_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
107 839056 : _lm_lm_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
108 839056 : _vector_lm_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
109 839056 : _lm_vector_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
110 :
111 : // qu, u, lm_u
112 839056 : vectorFaceJacobian(_JxW_face, *_qrule_face, _normals, _vector_lm_jac);
113 839056 : scalarFaceJacobian(
114 839056 : _JxW_face, *_qrule_face, _normals, _scalar_vector_jac, _scalar_scalar_jac, _scalar_lm_jac);
115 839056 : lmFaceJacobian(_JxW_face, *_qrule_face, _normals, _lm_vector_jac, _lm_scalar_jac, _lm_lm_jac);
116 :
117 1678112 : addJacobian(
118 839056 : _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
119 1678112 : addJacobian(
120 839056 : _assembly, _scalar_scalar_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
121 839056 : addJacobian(_assembly, _scalar_lm_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
122 1678112 : addJacobian(
123 839056 : _assembly, _lm_scalar_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
124 1678112 : addJacobian(
125 839056 : _assembly, _lm_lm_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
126 1678112 : addJacobian(
127 839056 : _assembly, _vector_lm_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
128 1678112 : addJacobian(
129 839056 : _assembly, _lm_vector_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
130 839056 : }
131 :
132 : void
133 392 : DiffusionLHDGKernel::jacobianSetup()
134 : {
135 392 : _cached_elem = nullptr;
136 392 : }
137 :
138 : void
139 709008 : DiffusionLHDGKernel::computeOffDiagJacobian(const unsigned int)
140 : {
141 709008 : if (_cached_elem != _current_elem)
142 : {
143 236336 : computeJacobian();
144 236336 : _cached_elem = _current_elem;
145 : }
146 709008 : }
147 :
148 : std::set<std::string>
149 206 : DiffusionLHDGKernel::additionalROVariables()
150 : {
151 824 : return {_grad_u_var.name(), _u_face_var.name()};
152 206 : }
|