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 155674 : DiffusionLHDGKernel::computeResidual()
52 : {
53 155674 : _vector_re.resize(_qu_dof_indices.size());
54 155674 : _scalar_re.resize(_u_dof_indices.size());
55 :
56 : // qu and u
57 155674 : vectorVolumeResidual(_qu_sol, _u_sol, _JxW, *_qrule, _vector_re);
58 155674 : scalarVolumeResidual(_qu_sol, _source, _JxW, *_qrule, _current_elem, _q_point, _scalar_re);
59 :
60 155674 : addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
61 155674 : addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
62 155674 : }
63 :
64 : void
65 548754 : DiffusionLHDGKernel::computeResidualOnSide()
66 : {
67 548754 : _vector_re.resize(_qu_dof_indices.size());
68 548754 : _scalar_re.resize(_u_dof_indices.size());
69 548754 : _lm_re.resize(_lm_u_dof_indices.size());
70 :
71 : // qu, u, lm_u
72 548754 : vectorFaceResidual(_lm_u_sol, _JxW_face, *_qrule_face, _normals, _vector_re);
73 548754 : scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _scalar_re);
74 548754 : lmFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _lm_re);
75 :
76 548754 : addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
77 548754 : addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
78 548754 : addResiduals(_assembly, _lm_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
79 548754 : }
80 :
81 : void
82 102196 : DiffusionLHDGKernel::computeJacobian()
83 : {
84 102196 : _vector_vector_jac.resize(_qu_dof_indices.size(), _qu_dof_indices.size());
85 102196 : _vector_scalar_jac.resize(_qu_dof_indices.size(), _u_dof_indices.size());
86 102196 : _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
87 :
88 : // qu and u
89 102196 : vectorVolumeJacobian(_JxW, *_qrule, _vector_vector_jac, _vector_scalar_jac);
90 102196 : scalarVolumeJacobian(_JxW, *_qrule, _scalar_vector_jac);
91 :
92 204392 : addJacobian(
93 102196 : _assembly, _vector_vector_jac, _qu_dof_indices, _qu_dof_indices, _grad_u_var.scalingFactor());
94 204392 : addJacobian(
95 102196 : _assembly, _vector_scalar_jac, _qu_dof_indices, _u_dof_indices, _grad_u_var.scalingFactor());
96 204392 : addJacobian(
97 102196 : _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
98 102196 : }
99 :
100 : void
101 361812 : DiffusionLHDGKernel::computeJacobianOnSide()
102 : {
103 361812 : _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
104 361812 : _scalar_scalar_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
105 361812 : _scalar_lm_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
106 361812 : _lm_scalar_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
107 361812 : _lm_lm_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
108 361812 : _vector_lm_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
109 361812 : _lm_vector_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
110 :
111 : // qu, u, lm_u
112 361812 : vectorFaceJacobian(_JxW_face, *_qrule_face, _normals, _vector_lm_jac);
113 361812 : scalarFaceJacobian(
114 361812 : _JxW_face, *_qrule_face, _normals, _scalar_vector_jac, _scalar_scalar_jac, _scalar_lm_jac);
115 361812 : lmFaceJacobian(_JxW_face, *_qrule_face, _normals, _lm_vector_jac, _lm_scalar_jac, _lm_lm_jac);
116 :
117 723624 : addJacobian(
118 361812 : _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
119 723624 : addJacobian(
120 361812 : _assembly, _scalar_scalar_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
121 361812 : addJacobian(_assembly, _scalar_lm_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
122 723624 : addJacobian(
123 361812 : _assembly, _lm_scalar_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
124 723624 : addJacobian(
125 361812 : _assembly, _lm_lm_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
126 723624 : addJacobian(
127 361812 : _assembly, _vector_lm_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
128 723624 : addJacobian(
129 361812 : _assembly, _lm_vector_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
130 361812 : }
131 :
132 : void
133 211 : DiffusionLHDGKernel::jacobianSetup()
134 : {
135 211 : _cached_elem = nullptr;
136 211 : }
137 :
138 : void
139 306588 : DiffusionLHDGKernel::computeOffDiagJacobian(const unsigned int)
140 : {
141 306588 : if (_cached_elem != _current_elem)
142 : {
143 102196 : computeJacobian();
144 102196 : _cached_elem = _current_elem;
145 : }
146 306588 : }
147 :
148 : std::set<std::string>
149 111 : DiffusionLHDGKernel::additionalROVariables()
150 : {
151 444 : return {_grad_u_var.name(), _u_face_var.name()};
152 111 : }
|