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 "NavierStokesLHDGOutflowBC.h"
11 :
12 : registerMooseObject("NavierStokesApp", NavierStokesLHDGOutflowBC);
13 :
14 : InputParameters
15 556 : NavierStokesLHDGOutflowBC::validParams()
16 : {
17 556 : auto params = IntegratedBC::validParams();
18 556 : params += NavierStokesLHDGAssemblyHelper::validParams();
19 556 : params.addClassDescription("Implements an outflow boundary condition for use with a hybridized "
20 : "discretization of the incompressible Navier-Stokes equations");
21 1112 : params.renameParam("variable", "u", "The x-component of velocity");
22 556 : return params;
23 0 : }
24 :
25 278 : NavierStokesLHDGOutflowBC::NavierStokesLHDGOutflowBC(const InputParameters & parameters)
26 : : IntegratedBC(parameters),
27 278 : NavierStokesLHDGAssemblyHelper(this, this, this, this, _fe_problem, _sys, _mesh, _tid),
28 278 : _cached_side(libMesh::invalid_uint)
29 : {
30 278 : }
31 :
32 : void
33 278 : NavierStokesLHDGOutflowBC::initialSetup()
34 : {
35 278 : checkCoupling();
36 278 : }
37 :
38 : void
39 1088 : NavierStokesLHDGOutflowBC::jacobianSetup()
40 : {
41 1088 : _cached_elem = nullptr;
42 1088 : _cached_side = libMesh::invalid_uint;
43 1088 : }
44 :
45 : void
46 37744 : NavierStokesLHDGOutflowBC::computeOffDiagJacobian(const unsigned int)
47 : {
48 37744 : if ((_cached_elem != _current_elem) || (_cached_side != _current_side))
49 : {
50 5392 : computeJacobian();
51 5392 : _cached_elem = _current_elem;
52 5392 : _cached_side = _current_side;
53 : }
54 37744 : }
55 :
56 : void
57 17608 : NavierStokesLHDGOutflowBC::computeResidual()
58 : {
59 17608 : const Elem * const neigh = _current_elem->neighbor_ptr(_current_side);
60 :
61 17608 : _grad_u_vel_re.resize(_qu_dof_indices.size());
62 17608 : _u_vel_re.resize(_u_dof_indices.size());
63 17608 : _lm_u_vel_re.resize(_lm_u_dof_indices.size());
64 17608 : _grad_v_vel_re.resize(_qv_dof_indices.size());
65 17608 : _v_vel_re.resize(_v_dof_indices.size());
66 17608 : _lm_v_vel_re.resize(_lm_v_dof_indices.size());
67 17608 : _p_re.resize(_p_dof_indices.size());
68 :
69 : // qu, u, lm_u
70 17608 : vectorFaceResidual(_lm_u_sol, _JxW, *_qrule, _normals, _grad_u_vel_re);
71 17608 : scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, 0, _JxW, *_qrule, _normals, _u_vel_re);
72 17608 : lmFaceResidual(_qu_sol, _u_sol, _lm_u_sol, 0, _JxW, *_qrule, _normals, neigh, _lm_u_vel_re);
73 :
74 : // qv, v, lm_v
75 17608 : vectorFaceResidual(_lm_v_sol, _JxW, *_qrule, _normals, _grad_v_vel_re);
76 17608 : scalarFaceResidual(_qv_sol, _v_sol, _lm_v_sol, 1, _JxW, *_qrule, _normals, _v_vel_re);
77 17608 : lmFaceResidual(_qv_sol, _v_sol, _lm_v_sol, 1, _JxW, *_qrule, _normals, neigh, _lm_v_vel_re);
78 :
79 : // p
80 17608 : pressureFaceResidual(_JxW, *_qrule, _normals, _p_re);
81 :
82 17608 : addResiduals(_assembly, _grad_u_vel_re, _qu_dof_indices, _grad_u_var.scalingFactor());
83 17608 : addResiduals(_assembly, _u_vel_re, _u_dof_indices, _u_var.scalingFactor());
84 17608 : addResiduals(_assembly, _lm_u_vel_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
85 17608 : addResiduals(_assembly, _grad_v_vel_re, _qv_dof_indices, _grad_v_var.scalingFactor());
86 17608 : addResiduals(_assembly, _v_vel_re, _v_dof_indices, _v_var.scalingFactor());
87 17608 : addResiduals(_assembly, _lm_v_vel_re, _lm_v_dof_indices, _v_face_var.scalingFactor());
88 17608 : addResiduals(_assembly, _p_re, _p_dof_indices, _pressure_var.scalingFactor());
89 17608 : }
90 :
91 : void
92 5392 : NavierStokesLHDGOutflowBC::computeJacobian()
93 : {
94 5392 : const Elem * const neigh = _current_elem->neighbor_ptr(_current_side);
95 :
96 5392 : _grad_u_lm_u_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
97 5392 : _u_grad_u_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
98 5392 : _u_u_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
99 5392 : _u_lm_u_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
100 5392 : _u_lm_v_jac.resize(_u_dof_indices.size(), _lm_v_dof_indices.size());
101 5392 : _u_p_jac.resize(_u_dof_indices.size(), _p_dof_indices.size());
102 5392 : _lm_u_grad_u_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
103 5392 : _lm_u_u_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
104 5392 : _lm_u_lm_u_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
105 5392 : _lm_u_lm_v_jac.resize(_lm_u_dof_indices.size(), _lm_v_dof_indices.size());
106 5392 : _lm_u_p_jac.resize(_lm_u_dof_indices.size(), _p_dof_indices.size());
107 5392 : _grad_v_lm_v_jac.resize(_qv_dof_indices.size(), _lm_v_dof_indices.size());
108 5392 : _v_grad_v_jac.resize(_v_dof_indices.size(), _qv_dof_indices.size());
109 5392 : _v_v_jac.resize(_v_dof_indices.size(), _v_dof_indices.size());
110 5392 : _v_lm_u_jac.resize(_v_dof_indices.size(), _lm_u_dof_indices.size());
111 5392 : _v_lm_v_jac.resize(_v_dof_indices.size(), _lm_v_dof_indices.size());
112 5392 : _v_p_jac.resize(_v_dof_indices.size(), _p_dof_indices.size());
113 5392 : _lm_v_grad_v_jac.resize(_lm_v_dof_indices.size(), _qv_dof_indices.size());
114 5392 : _lm_v_v_jac.resize(_lm_v_dof_indices.size(), _v_dof_indices.size());
115 5392 : _lm_v_lm_u_jac.resize(_lm_v_dof_indices.size(), _lm_u_dof_indices.size());
116 5392 : _lm_v_lm_v_jac.resize(_lm_v_dof_indices.size(), _lm_v_dof_indices.size());
117 5392 : _lm_v_p_jac.resize(_lm_v_dof_indices.size(), _p_dof_indices.size());
118 5392 : _p_lm_u_jac.resize(_p_dof_indices.size(), _lm_u_dof_indices.size());
119 5392 : _p_lm_v_jac.resize(_p_dof_indices.size(), _lm_v_dof_indices.size());
120 :
121 : // qu, u, lm_u
122 5392 : vectorFaceJacobian(_JxW, *_qrule, _normals, _grad_u_lm_u_jac);
123 5392 : scalarFaceJacobian(0,
124 : _JxW,
125 5392 : *_qrule,
126 : _normals,
127 : _u_grad_u_jac,
128 : _u_u_jac,
129 : _u_lm_u_jac,
130 : _u_p_jac,
131 : _u_lm_u_jac,
132 : _u_lm_v_jac);
133 5392 : lmFaceJacobian(0,
134 : _JxW,
135 5392 : *_qrule,
136 : _normals,
137 : neigh,
138 : _lm_u_grad_u_jac,
139 : _lm_u_u_jac,
140 : _lm_u_lm_u_jac,
141 : _lm_u_p_jac,
142 : _lm_u_lm_u_jac,
143 : _lm_u_lm_v_jac);
144 :
145 : // qv, v, lm_v
146 5392 : vectorFaceJacobian(_JxW, *_qrule, _normals, _grad_v_lm_v_jac);
147 5392 : scalarFaceJacobian(1,
148 : _JxW,
149 5392 : *_qrule,
150 : _normals,
151 : _v_grad_v_jac,
152 : _v_v_jac,
153 : _v_lm_v_jac,
154 : _v_p_jac,
155 : _v_lm_u_jac,
156 : _v_lm_v_jac);
157 5392 : lmFaceJacobian(1,
158 : _JxW,
159 5392 : *_qrule,
160 : _normals,
161 : neigh,
162 : _lm_v_grad_v_jac,
163 : _lm_v_v_jac,
164 : _lm_v_lm_v_jac,
165 : _lm_v_p_jac,
166 : _lm_v_lm_u_jac,
167 : _lm_v_lm_v_jac);
168 :
169 : // p
170 5392 : pressureFaceJacobian(_JxW, *_qrule, _normals, _p_lm_u_jac, _p_lm_v_jac);
171 :
172 5392 : addJacobian(
173 5392 : _assembly, _grad_u_lm_u_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
174 5392 : addJacobian(_assembly, _u_grad_u_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
175 5392 : addJacobian(_assembly, _u_u_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
176 5392 : addJacobian(_assembly, _u_lm_u_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
177 5392 : addJacobian(_assembly, _u_lm_v_jac, _u_dof_indices, _lm_v_dof_indices, _u_var.scalingFactor());
178 5392 : addJacobian(_assembly, _u_p_jac, _u_dof_indices, _p_dof_indices, _u_var.scalingFactor());
179 5392 : addJacobian(
180 5392 : _assembly, _lm_u_grad_u_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
181 5392 : addJacobian(
182 5392 : _assembly, _lm_u_u_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
183 5392 : addJacobian(
184 5392 : _assembly, _lm_u_lm_u_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
185 5392 : addJacobian(
186 5392 : _assembly, _lm_u_lm_v_jac, _lm_u_dof_indices, _lm_v_dof_indices, _u_face_var.scalingFactor());
187 5392 : addJacobian(
188 5392 : _assembly, _lm_u_p_jac, _lm_u_dof_indices, _p_dof_indices, _u_face_var.scalingFactor());
189 5392 : addJacobian(
190 5392 : _assembly, _grad_v_lm_v_jac, _qv_dof_indices, _lm_v_dof_indices, _grad_v_var.scalingFactor());
191 5392 : addJacobian(_assembly, _v_grad_v_jac, _v_dof_indices, _qv_dof_indices, _v_var.scalingFactor());
192 5392 : addJacobian(_assembly, _v_v_jac, _v_dof_indices, _v_dof_indices, _v_var.scalingFactor());
193 5392 : addJacobian(_assembly, _v_lm_u_jac, _v_dof_indices, _lm_u_dof_indices, _v_var.scalingFactor());
194 5392 : addJacobian(_assembly, _v_lm_v_jac, _v_dof_indices, _lm_v_dof_indices, _v_var.scalingFactor());
195 5392 : addJacobian(_assembly, _v_p_jac, _v_dof_indices, _p_dof_indices, _v_var.scalingFactor());
196 5392 : addJacobian(
197 5392 : _assembly, _lm_v_grad_v_jac, _lm_v_dof_indices, _qv_dof_indices, _v_face_var.scalingFactor());
198 5392 : addJacobian(
199 5392 : _assembly, _lm_v_v_jac, _lm_v_dof_indices, _v_dof_indices, _v_face_var.scalingFactor());
200 5392 : addJacobian(
201 5392 : _assembly, _lm_v_lm_u_jac, _lm_v_dof_indices, _lm_u_dof_indices, _v_face_var.scalingFactor());
202 5392 : addJacobian(
203 5392 : _assembly, _lm_v_lm_v_jac, _lm_v_dof_indices, _lm_v_dof_indices, _v_face_var.scalingFactor());
204 5392 : addJacobian(
205 5392 : _assembly, _lm_v_p_jac, _lm_v_dof_indices, _p_dof_indices, _v_face_var.scalingFactor());
206 5392 : addJacobian(
207 5392 : _assembly, _p_lm_u_jac, _p_dof_indices, _lm_u_dof_indices, _pressure_var.scalingFactor());
208 5392 : addJacobian(
209 5392 : _assembly, _p_lm_v_jac, _p_dof_indices, _lm_v_dof_indices, _pressure_var.scalingFactor());
210 5392 : }
|