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