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