VertexCFD  0.0-dev
VertexCFD_BCStrategy_IncompressibleBoundaryFlux_impl.hpp
1 #ifndef VERTEXCFD_BOUNDARYCONDITION_INCOMPRESSIBLEBOUNDARYFLUX_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYCONDITION_INCOMPRESSIBLEBOUNDARYFLUX_IMPL_HPP
3 
4 #include "VertexCFD_BoundaryState_ViscousGradient.hpp"
5 #include "VertexCFD_BoundaryState_ViscousPenaltyParameter.hpp"
6 #include "VertexCFD_Integrator_BoundaryGradBasisDotVector.hpp"
7 
8 #include "closure_models/VertexCFD_Closure_ExternalMagneticField.hpp"
9 #include "closure_models/VertexCFD_Closure_VariableConvectiveFlux.hpp"
10 #include "closure_models/VertexCFD_Closure_VariableDiffusionFlux.hpp"
11 
12 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleWallFunctionStress.hpp"
13 #include "incompressible_solver/boundary_conditions/VertexCFD_IncompressibleBoundaryState_Factory.hpp"
14 
15 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleConvectiveFlux.hpp"
16 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleGradDiv.hpp"
17 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleViscousFlux.hpp"
18 
19 #include "incompressible_solver/fluid_properties/VertexCFD_Closure_IncompressibleFluidProperties.hpp"
20 
21 #include "induction_less_mhd_solver/boundary_conditions/VertexCFD_ElectricPotentialBoundaryState_Factory.hpp"
22 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_ElectricPotentialCrossProductFlux.hpp"
23 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_ElectricPotentialDiffusionFlux.hpp"
24 
25 #include "turbulence_models/boundary_conditions/VertexCFD_BoundaryState_TurbulenceBoundaryEddyViscosity.hpp"
26 #include "turbulence_models/boundary_conditions/VertexCFD_TurbulenceBoundaryState_Factory.hpp"
27 
28 #include <Panzer_DOF.hpp>
29 #include <Panzer_DOFGradient.hpp>
30 #include <Panzer_DotProduct.hpp>
31 #include <Panzer_Integrator_BasisTimesScalar.hpp>
32 #include <Panzer_Normals.hpp>
33 #include <Panzer_Sum.hpp>
34 
35 #include <Phalanx_DataLayout.hpp>
36 #include <Phalanx_DataLayout_MDALayout.hpp>
37 #include <Phalanx_MDField.hpp>
38 
39 #include <map>
40 #include <string>
41 #include <vector>
42 
43 namespace VertexCFD
44 {
45 namespace BoundaryCondition
46 {
47 //---------------------------------------------------------------------------//
48 template<class EvalType, int NumSpaceDim>
49 IncompressibleBoundaryFlux<EvalType, NumSpaceDim>::IncompressibleBoundaryFlux(
50  const panzer::BC& bc, const Teuchos::RCP<panzer::GlobalData>& global_data)
51  : BoundaryFluxBase<EvalType, NumSpaceDim>(bc, global_data)
52 {
53  // Check if boundary is an internal interface between solid and fluid
54  // regions
55  _internal_interface = bc.params()->isType<bool>("Fluid/Solid Interface")
56  ? bc.params()->get<bool>("Fluid/Solid Interface")
57  : false;
58 }
59 
60 //---------------------------------------------------------------------------//
61 template<class EvalType, int NumSpaceDim>
63  const panzer::PhysicsBlock& side_pb,
64  const Teuchos::ParameterList& )
65 {
66  // Parameter list for physics block and boundary condition
67  this->_bc_params = *(this->m_bc.params());
68  this->getModelID(
69  this->_bc_params, side_pb, this->_model_id, this->_side_pb_list);
70 
71  // Temperature equation boolean
72  const std::string continuity_model
73  = this->_side_pb_list.template isType<std::string>("Continuity Model")
74  ? this->_side_pb_list.template get<std::string>(
75  "Continuity Model")
76  : "AC";
77 
78  if (continuity_model == "AC")
79  {
80  _continuity_model = ConModel::AC;
81  }
82  else if (continuity_model == "EDAC")
83  {
84  _continuity_model = ConModel::EDAC;
85  }
86  else if (continuity_model == "EDACTempNC")
87  {
88  _continuity_model = ConModel::EDACTempNC;
89  }
90 
91  // Viscous flux boolean.
92  _build_viscous_flux
93  = this->_side_pb_list.template get<bool>("Build Viscous Flux");
94 
95  // Temperature equation boolean
96  _build_temp_equ = this->_side_pb_list.template isType<bool>(
97  "Build Temperature Equation")
98  ? this->_side_pb_list.template get<bool>(
99  "Build Temperature Equation")
100  : false;
101 
102  // Electric potential equation boolean
103  _build_ind_less_equ = this->_side_pb_list.template isType<bool>(
104  "Build Inductionless MHD Equation")
105  ? this->_side_pb_list.template get<bool>(
106  "Build Inductionless MHD Equation")
107  : false;
108 
109  // Internal interface case: temperature and electric potential equations do
110  // not need boundary conditions.
111  if (_internal_interface)
112  {
113  _build_temp_equ = false;
114  _build_ind_less_equ = false;
115  }
116 
117  // Turbulence model boolean
118  _turbulence_model_name
119  = this->_side_pb_list.template isType<std::string>("Turbulence Model")
120  ? this->_side_pb_list.template get<std::string>(
121  "Turbulence Model")
122  : "No Turbulence Model";
123  _turbulence_model = _turbulence_model_name == "No Turbulence Model" ? false
124  : true;
125 
126  // Initialize equation names and variable names for NS equations
127  // and temperature equation. Note that temperature equation is not
128  // added to the list if there is a solid/fluid interface.
129  _equ_dof_ns_pair.insert({"continuity", "lagrange_pressure"});
130  for (int d = 0; d < num_space_dim; ++d)
131  {
132  const std::string ds = std::to_string(d);
133  _equ_dof_ns_pair.insert({"momentum_" + ds, "velocity_" + ds});
134  }
135  if (_build_temp_equ)
136  _equ_dof_ns_pair.insert({"energy", "temperature"});
137 
138  // Initialize equation name and variable name for EP equation
139  if (_build_ind_less_equ)
140  {
141  _equ_dof_ep_pair.insert(
142  {"electric_potential_equation", "electric_potential"});
143  }
144 
145  // Initialize equation name and variable name for TM equations
146  if (_turbulence_model)
147  {
148  if (std::string::npos
149  != _turbulence_model_name.find("Spalart-Allmaras"))
150  {
151  _equ_dof_tm_pair.insert(
152  {"spalart_allmaras_equation", "spalart_allmaras_variable"});
153  }
154  else if (std::string::npos != _turbulence_model_name.find("K-Epsilon"))
155  {
156  _equ_dof_tm_pair.insert(
157  {"turb_kinetic_energy_equation", "turb_kinetic_energy"});
158  _equ_dof_tm_pair.insert(
159  {"turb_dissipation_rate_equation", "turb_dissipation_rate"});
160  }
161  else if (std::string::npos != _turbulence_model_name.find("K-Omega"))
162  {
163  _equ_dof_tm_pair.insert(
164  {"turb_kinetic_energy_equation", "turb_kinetic_energy"});
165  _equ_dof_tm_pair.insert({"turb_specific_dissipation_rate_equation",
166  "turb_specific_dissipation_rate"});
167  }
168  else if (std::string::npos != _turbulence_model_name.find("SST"))
169  {
170  _equ_dof_tm_pair.insert(
171  {"turb_kinetic_energy_equation", "turb_kinetic_energy"});
172  _equ_dof_tm_pair.insert({"turb_specific_dissipation_rate_equation",
173  "turb_specific_dissipation_rate"});
174  }
175  else if (std::string::npos != _turbulence_model_name.find("K-Tau"))
176  {
177  _equ_dof_tm_pair.insert(
178  {"turb_kinetic_energy_equation", "turb_kinetic_energy"});
179  _equ_dof_tm_pair.insert({"turb_specific_dissipation_rate_equation",
180  "turb_specific_dissipation_rate"});
181  }
182  }
183 
184  // Initialize parent class variables (only needed with one set of
185  // equations)
186  this->initialize(side_pb, _equ_dof_ns_pair);
187 }
188 
189 //---------------------------------------------------------------------------//
190 template<class EvalType, int NumSpaceDim>
192  PHX::FieldManager<panzer::Traits>& fm,
193  const panzer::PhysicsBlock& side_pb,
194  const panzer::ClosureModelFactory_TemplateManager<panzer::Traits>&,
195  const Teuchos::ParameterList& closure_models,
196  const Teuchos::ParameterList& user_data) const
197 {
198  // Map to store residuals for each equation listed in `_equ_dof_ns_pair`
199  std::unordered_map<std::string, std::vector<std::string>> eq_vct_map;
200 
201  // Get integration rule for closure models
202  const auto ir = this->integrationRule();
203 
204  // Create degree of freedom and gradients for NS equations
205  for (auto& pair : _equ_dof_ns_pair)
206  {
207  this->registerDOFsGradient(fm, side_pb, pair.second);
208  }
209 
210  // Create degree of freedom and gradients for EP equations
211  for (auto& pair : _equ_dof_ep_pair)
212  {
213  this->registerDOFsGradient(fm, side_pb, pair.second);
214  }
215 
216  // Create degree of freedom and gradients for TM equations
217  for (auto& pair : _equ_dof_tm_pair)
218  {
219  this->registerDOFsGradient(fm, side_pb, pair.second);
220  }
221 
222  // Register normals
223  this->registerSideNormals(fm, side_pb);
224 
225  // Stabilization method: model id is stored in a sublist called `child0`.
226  const std::string stabilization_method
227  = this->_side_pb_list.template get<std::string>(
228  "Stabilization Method");
229 
230  // Define the stability parameter list as an empty list then populate the
231  // list if parameter list exists in the input file.
232  Teuchos::ParameterList stability_param_list;
233  if (closure_models.sublist(this->_model_id).isSublist("Stability Parameters"))
234  {
235  stability_param_list = closure_models.sublist(this->_model_id)
236  .sublist("Stability Parameters");
237  }
238 
239  // Fluid properties
240  Teuchos::ParameterList fluid_prop_list
241  = closure_models.sublist(this->_model_id).sublist("Fluid Properties");
242 
243  const bool build_buoyancy
244  = fluid_prop_list.isType<bool>("Build Buoyancy Source")
245  ? fluid_prop_list.get<bool>("Build Buoyancy Source")
246  : false;
247 
248  fluid_prop_list.set<bool>("Build Temperature Equation", _build_temp_equ);
249  fluid_prop_list.set<bool>("Build Buoyancy Source", build_buoyancy);
250  fluid_prop_list.set<bool>("Build Inductionless MHD Equation",
251  _build_ind_less_equ);
252 
253  auto eval = Teuchos::rcp(
254  new FluidProperties::IncompressibleFluidProperties<EvalType,
255  panzer::Traits>(
256  *ir, fluid_prop_list));
257  this->template registerEvaluator<EvalType>(fm, eval);
258 
259  // Create boundary state operators for NS equations and EP equation
260  // NS equations
261  const auto ns_bc_sublist = this->_bc_params.isSublist("Navier-Stokes")
262  ? this->_bc_params.sublist("Navier-Stokes")
263  : this->_bc_params;
264  auto incomp_ns_boundary_state_op = IncompressibleBoundaryStateFactory<
265  EvalType,
266  panzer::Traits,
267  num_space_dim>::create(*ir, ns_bc_sublist, fluid_prop_list);
268  this->template registerEvaluator<EvalType>(fm, incomp_ns_boundary_state_op);
269 
270  // EP equations
271  if (_build_ind_less_equ)
272  {
273  const auto ep_bc_sublist
274  = this->_bc_params.sublist("Electric Potential");
275  auto ep_boundary_state_op = ElectricPotentialBoundaryStateFactory<
276  EvalType,
277  panzer::Traits,
278  num_space_dim>::create(*ir, ep_bc_sublist, user_data);
279  this->template registerEvaluator<EvalType>(fm, ep_boundary_state_op);
280  }
281 
282  // First-order flux //
283 
284  // Create boundary convective fluxes for NS equations
285  auto convective_flux_op = Teuchos::rcp(
286  new ClosureModel::IncompressibleConvectiveFlux<EvalType,
287  panzer::Traits,
288  num_space_dim>(
289  *ir, fluid_prop_list, "BOUNDARY_", "BOUNDARY_"));
290  this->template registerEvaluator<EvalType>(fm, convective_flux_op);
291 
292  for (auto& pair : _equ_dof_ns_pair)
293  {
294  if (_continuity_model == ConModel::EDACTempNC
295  && std::string::npos != pair.first.find("energy"))
296  {
297  continue;
298  }
299  this->registerConvectionTypeFluxOperator(
300  pair, eq_vct_map, "CONVECTIVE", fm, side_pb, 1.0);
301  }
302 
303  // Create boundary cross-product flux for EP equation
304  if (_build_ind_less_equ)
305  {
306  // Cross product term
307  auto cross_product_flux_op = Teuchos::rcp(
308  new ClosureModel::ElectricPotentialCrossProductFlux<EvalType,
309  panzer::Traits,
310  num_space_dim>(
311  *ir, "BOUNDARY_", "BOUNDARY_"));
312  this->template registerEvaluator<EvalType>(fm, cross_product_flux_op);
313 
314  // External magnetic field
315  auto ext_magn_field_op = Teuchos::rcp(
316  new ClosureModel::ExternalMagneticField<EvalType, panzer::Traits>(
317  *ir, user_data));
318  this->template registerEvaluator<EvalType>(fm, ext_magn_field_op);
319 
320  for (auto& pair : _equ_dof_ep_pair)
321  {
322  this->registerConvectionTypeFluxOperator(
323  pair, eq_vct_map, "ELECTRIC_POTENTIAL", fm, side_pb, 1.0);
324  }
325  }
326 
327  // Second-order flux //
328 
329  // NS equations
330  if (_build_viscous_flux)
331  {
332  // Create list of equations for use with viscous flux
333  std::unordered_map<std::string, std::string> _equ_dof_ns_visc_pair
334  = _equ_dof_ns_pair;
335 
336  // Check if the BC is a wall function type
337  const Teuchos::ParameterList ns_bc_params
338  = this->_bc_params.isSublist("Navier-Stokes")
339  ? this->_bc_params.sublist("Navier-Stokes")
340  : this->_bc_params;
341  const std::string bc_type = ns_bc_params.get<std::string>("Type");
342 
343  const bool is_wall_func
344  = std::string::npos != bc_type.find("Wall Function") ? true : false;
345 
346  // Add shear stress residual for wall function boundaries
347  if (is_wall_func)
348  {
349  // Remove momentum equations from viscous equation set so that
350  // the penalty method residual is not built in addition to the
351  // wall function residual
352  for (auto eqn = _equ_dof_ns_visc_pair.begin();
353  eqn != _equ_dof_ns_visc_pair.end();)
354  {
355  if (std::string::npos != eqn->first.find("momentum"))
356  {
357  eqn = _equ_dof_ns_visc_pair.erase(eqn);
358  }
359  else
360  {
361  ++eqn;
362  }
363  }
364 
365  // Create evaluator for wall function shear stress components
366  const std::string wall_func_stress_prefix = "wall_func_stress_";
367 
368  const auto wall_func_stress_op = Teuchos::rcp(
369  new BoundaryCondition::IncompressibleWallFunctionStress<
370  EvalType,
371  panzer::Traits,
372  num_space_dim>(*ir, wall_func_stress_prefix));
373 
374  this->template registerEvaluator<EvalType>(fm, wall_func_stress_op);
375 
376  // Create wall shear stress integrals
377  const auto add_wall_stress_op = [&, this](
378  const std::string& eqn_name,
379  const std::string& dof_name) {
380  // Construct basis
381  const auto basis_layout
382  = this->getBasisIRLayout(side_pb, dof_name);
383 
384  // Shear stress op
385  const std::string stress_residual_name
386  = "WALL_FUNC_STRESS_RESIDUAL_" + eqn_name;
387 
388  const auto shear_stress_op = Teuchos::rcp(
389  new panzer::Integrator_BasisTimesScalar<EvalType,
390  panzer::Traits>(
391  panzer::EvaluatorStyle::EVALUATES,
392  stress_residual_name,
393  wall_func_stress_prefix + eqn_name,
394  *basis_layout,
395  *ir,
396  1.0));
397 
398  this->template registerEvaluator<EvalType>(fm, shear_stress_op);
399  };
400 
401  // Create shear stress residual for all velocity components
402  for (auto& pair : _equ_dof_ns_pair)
403  {
404  if (std::string::npos != pair.first.find("momentum"))
405  {
406  add_wall_stress_op(pair.first, pair.second);
407  eq_vct_map[pair.first].push_back(
408  "WALL_FUNC_STRESS_RESIDUAL_" + pair.first);
409  }
410  }
411  }
412 
413  // Register penalty and viscous gradient operators for each equation.
414  for (auto& pair : _equ_dof_ns_pair)
415  {
416  this->registerPenaltyAndViscousGradientOperator(
417  pair, fm, side_pb, this->_bc_params);
418  }
419 
420  // Create boundary fluxes to be used with the penalty method
421  for (auto& pair : this->bnd_prefix)
422  {
423  // Prefix names
424  const std::string flux_prefix = pair.first;
425  const std::string gradient_prefix = pair.second;
426 
427  auto viscous_flux_op = Teuchos::rcp(
428  new ClosureModel::IncompressibleViscousFlux<EvalType,
429  panzer::Traits,
430  num_space_dim>(
431  *ir,
432  fluid_prop_list,
433  user_data,
434  _turbulence_model,
435  flux_prefix,
436  gradient_prefix));
437  this->template registerEvaluator<EvalType>(fm, viscous_flux_op);
438 
439  if (std::string::npos != stabilization_method.find("Grad-Div"))
440  {
441  auto div_grad_op = Teuchos::rcp(
442  new ClosureModel::IncompressibleGradDiv<EvalType,
443  panzer::Traits,
444  num_space_dim>(
445  *ir, stability_param_list, flux_prefix, gradient_prefix));
446  this->template registerEvaluator<EvalType>(fm, div_grad_op);
447  }
448  }
449 
450  // Create viscous flux integrals.
451  for (auto& pair : _equ_dof_ns_visc_pair)
452  {
453  this->registerViscousTypeFluxOperator(
454  pair, eq_vct_map, "VISCOUS", fm, side_pb, 1.0);
455  }
456  }
457 
458  // EP equation
459  if (_build_ind_less_equ)
460  {
461  // Register penalty and viscous gradient operators for each equation.
462  for (auto& pair : _equ_dof_ep_pair)
463  {
464  this->registerPenaltyAndViscousGradientOperator(
465  pair, fm, side_pb, this->_bc_params);
466  }
467 
468  // Create boundary fluxes to be used with the penalty method
469  for (auto& pair : this->bnd_prefix)
470  {
471  // Prefix names
472  const std::string flux_prefix = pair.first;
473  const std::string gradient_prefix = pair.second;
474 
475  auto diffusion_flux_op = Teuchos::rcp(
476  new ClosureModel::ElectricPotentialDiffusionFlux<EvalType,
477  panzer::Traits>(
478  *ir, flux_prefix, gradient_prefix));
479  this->template registerEvaluator<EvalType>(fm, diffusion_flux_op);
480  }
481 
482  // Create diffusion flux integral
483  for (auto& pair : _equ_dof_ep_pair)
484  {
485  this->registerViscousTypeFluxOperator(
486  pair, eq_vct_map, "ELECTRIC_POTENTIAL", fm, side_pb, 1.0);
487  }
488  }
489 
490  // Turbulence model boundary fluxes //
491 
492  // TM equation: create first-order and second-order boundary fluxes
493  if (_turbulence_model)
494  {
495  // Use correct parameter list based on model equation count
496  const auto turb_bc_params
497  = _equ_dof_tm_pair.empty()
498  ? Teuchos::ParameterList()
499  : this->_bc_params.sublist("Turbulence Model");
500 
501  // Define turbulent eddy viscosity on boundaries for wall functions
502  for (auto& pair : this->bnd_prefix)
503  {
504  // Prefix names
505  const std::string flux_prefix = pair.first;
506 
507  // Create evaluator for boundary turbulent eddy viscosity
508  auto eddy_visc_op = Teuchos::rcp(
509  new TurbulenceBoundaryEddyViscosity<EvalType, panzer::Traits>(
510  *ir, turb_bc_params, flux_prefix));
511 
512  this->template registerEvaluator<EvalType>(fm, eddy_visc_op);
513  }
514 
515  // Register diffusivity coefficients and boundary conditions for each
516  // turbulence model equation
517  const auto tm_boundary_state_op = TurbulenceBoundaryStateFactory<
518  EvalType,
519  panzer::Traits,
520  num_space_dim>::create(*ir,
521  turb_bc_params,
522  user_data,
523  _turbulence_model_name);
524 
525  for (std::size_t i = 0; i < tm_boundary_state_op.size(); ++i)
526  {
527  this->template registerEvaluator<EvalType>(
528  fm, tm_boundary_state_op[i]);
529  }
530 
531  // Loop over each pair of the turbulence model equation(s)
532  for (auto& pair_tm : _equ_dof_tm_pair)
533  {
534  Teuchos::ParameterList tm_name_list;
535  tm_name_list.set("Field Name", pair_tm.second);
536  tm_name_list.set("Equation Name", pair_tm.first);
537 
538  // Create boundary convective flux for each equation
539  const auto convective_flux_op = Teuchos::rcp(
540  new ClosureModel::VariableConvectiveFlux<EvalType,
541  panzer::Traits,
542  num_space_dim>(
543  *ir, tm_name_list, "BOUNDARY_", "BOUNDARY_"));
544  this->template registerEvaluator<EvalType>(fm, convective_flux_op);
545 
546  BoundaryFluxBase<EvalType, NumSpaceDim>::registerConvectionTypeFluxOperator(
547  pair_tm, eq_vct_map, "CONVECTIVE", fm, side_pb, 1.0);
548 
549  // Register penalty and viscous gradient operators for each
550  // equation.
551  BoundaryFluxBase<EvalType, NumSpaceDim>::
552  registerPenaltyAndViscousGradientOperator(
553  pair_tm, fm, side_pb, this->_bc_params);
554 
555  // Create boundary fluxes to be used with the penalty method
556  for (auto& pair_bnd :
557  BoundaryFluxBase<EvalType, NumSpaceDim>::bnd_prefix)
558  {
559  const std::string flux_prefix = pair_bnd.first;
560  const std::string gradient_prefix = pair_bnd.second;
561 
562  const auto diffusion_flux_op = Teuchos::rcp(
563  new ClosureModel::VariableDiffusionFlux<EvalType,
564  panzer::Traits>(
565  *ir, tm_name_list, flux_prefix, gradient_prefix));
566  this->template registerEvaluator<EvalType>(fm,
567  diffusion_flux_op);
568  }
569 
570  // Create diffusion flux integral
571  BoundaryFluxBase<EvalType, NumSpaceDim>::registerViscousTypeFluxOperator(
572  pair_tm, eq_vct_map, "DIFFUSION", fm, side_pb, 1.0);
573  }
574  }
575 
576  // Compose total residual for NS equations
577  for (auto& pair : _equ_dof_ns_pair)
578  {
579  this->registerResidual(pair, eq_vct_map, fm, side_pb);
580  }
581 
582  // Compose total residual for EP equation
583  for (auto& pair : _equ_dof_ep_pair)
584  {
585  this->registerResidual(pair, eq_vct_map, fm, side_pb);
586  }
587 
588  // Compose total residual for TM equation
589  for (auto& pair : _equ_dof_tm_pair)
590  {
591  BoundaryFluxBase<EvalType, NumSpaceDim>::registerResidual(
592  pair, eq_vct_map, fm, side_pb);
593  }
594 }
595 
596 //---------------------------------------------------------------------------//
597 template<class EvalType, int NumSpaceDim>
598 void IncompressibleBoundaryFlux<EvalType, NumSpaceDim>::
599  buildAndRegisterScatterEvaluators(
600  PHX::FieldManager<panzer::Traits>& fm,
601  const panzer::PhysicsBlock& side_pb,
602  const panzer::LinearObjFactory<panzer::Traits>& lof,
603  const Teuchos::ParameterList& /*user_data*/) const
604 {
605  for (auto& pair : _equ_dof_ns_pair)
606  {
607  this->registerScatterOperator(pair, fm, side_pb, lof);
608  }
609 
610  for (auto& pair : _equ_dof_ep_pair)
611  {
612  this->registerScatterOperator(pair, fm, side_pb, lof);
613  }
614 
615  for (auto& pair : _equ_dof_tm_pair)
616  {
618  pair, fm, side_pb, lof);
619  }
620 }
621 
622 //---------------------------------------------------------------------------//
623 template<class EvalType, int NumSpaceDim>
624 void IncompressibleBoundaryFlux<EvalType, NumSpaceDim>::
625  buildAndRegisterGatherAndOrientationEvaluators(
626  PHX::FieldManager<panzer::Traits>& fm,
627  const panzer::PhysicsBlock& side_pb,
628  const panzer::LinearObjFactory<panzer::Traits>& lof,
629  const Teuchos::ParameterList& user_data) const
630 {
631  side_pb.buildAndRegisterGatherAndOrientationEvaluators(fm, lof, user_data);
632 }
633 
634 //---------------------------------------------------------------------------//
635 template<class EvalType, int NumSpaceDim>
636 void IncompressibleBoundaryFlux<EvalType, NumSpaceDim>::postRegistrationSetup(
637  typename panzer::Traits::SetupData, PHX::FieldManager<panzer::Traits>&)
638 {
639 }
640 
641 //---------------------------------------------------------------------------//
642 template<class EvalType, int NumSpaceDim>
643 void IncompressibleBoundaryFlux<EvalType, NumSpaceDim>::evaluateFields(
644  typename panzer::Traits::EvalData)
645 {
646 }
647 
648 //---------------------------------------------------------------------------//
649 
650 } // end namespace BoundaryCondition
651 } // end namespace VertexCFD
652 
653 #endif // end VERTEXCFD_BOUNDARYCONDITION_INCOMPRESSIBLEBOUNDARYFLUX_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::BoundaryCondition::IncompressibleBoundaryFlux::setup
void setup(const panzer::PhysicsBlock &side_pb, const Teuchos::ParameterList &user_data) override
Definition: VertexCFD_BCStrategy_IncompressibleBoundaryFlux_impl.hpp:62
VertexCFD::BoundaryCondition::BoundaryFluxBase::registerScatterOperator
void registerScatterOperator(std::pair< const std::string, std::string > dof_eq_pair, PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const panzer::LinearObjFactory< panzer::Traits > &lof) const
Definition: VertexCFD_BCStrategy_BoundaryFluxBase_impl.hpp:369
VertexCFD::BoundaryCondition::IncompressibleBoundaryFlux
Definition: VertexCFD_BCStrategy_IncompressibleBoundaryFlux.hpp:29