1 #ifndef VERTEXCFD_INCOMPRESSIBLECLOSUREMODELFACTORY_IMPL_HPP
2 #define VERTEXCFD_INCOMPRESSIBLECLOSUREMODELFACTORY_IMPL_HPP
4 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleBuoyancySource.hpp"
5 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleConstantSource.hpp"
6 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleConvectiveFlux.hpp"
7 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleConvectiveFluxMachineLearning.hpp"
8 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleEnstrophy.hpp"
9 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleErrorNorms.hpp"
10 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleGradDiv.hpp"
11 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleLiftDrag.hpp"
12 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleLocalTimeStepSize.hpp"
13 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleNusseltNumber.hpp"
14 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressiblePlanarPoiseuilleExact.hpp"
15 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleRotatingAnnulusExact.hpp"
16 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleSUPGExactSolution.hpp"
17 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleSUPGFlux.hpp"
18 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleShearVariables.hpp"
19 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleTauSUPG.hpp"
20 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleTaylorGreenVortexExactSolution.hpp"
21 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleTimeDerivative.hpp"
22 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleViscousFlux.hpp"
23 #include "incompressible_solver/closure_models/VertexCFD_Closure_IncompressibleViscousHeat.hpp"
24 #include "incompressible_solver/closure_models/VertexCFD_IncompressibleClosureModelFactory.hpp"
26 #include "closure_models/VertexCFD_Closure_MethodManufacturedSolution.hpp"
27 #include "closure_models/VertexCFD_Closure_MethodManufacturedSolutionSource.hpp"
31 namespace ClosureModel
34 template<
class EvalType,
int NumSpaceDim>
35 void IncompressibleFactory<EvalType, NumSpaceDim>::buildClosureModel(
36 const std::string& closure_type,
37 const Teuchos::RCP<panzer::IntegrationRule>& ir,
38 const Teuchos::RCP<panzer::GlobalData>& global_data,
39 const Teuchos::ParameterList& fluid_params,
40 const Teuchos::ParameterList& user_params,
41 const Teuchos::ParameterList& closure_params,
42 const bool use_turbulence_model,
44 std::string& error_msg,
45 Teuchos::RCP<std::vector<Teuchos::RCP<PHX::Evaluator<panzer::Traits>>>>
49 constexpr
int num_space_dim = NumSpaceDim;
50 const Teuchos::RCP<PHX::Evaluator<panzer::Traits>> eval;
53 const Teuchos::ParameterList stability_param_list
54 = user_params.sublist(
"Stability Parameters");
57 if (closure_type ==
"IncompressibleTimeDerivative")
59 auto eval = Teuchos::rcp(
60 new IncompressibleTimeDerivative<EvalType, panzer::Traits, num_space_dim>(
62 evaluators->push_back(eval);
66 if (closure_type ==
"IncompressibleLiftDrag")
68 auto eval = Teuchos::rcp(
69 new IncompressibleLiftDrag<EvalType, panzer::Traits, num_space_dim>(
70 *ir, user_params, use_turbulence_model));
71 evaluators->push_back(eval);
75 if (closure_type ==
"IncompressibleConvectiveFlux")
77 auto eval = Teuchos::rcp(
78 new IncompressibleConvectiveFlux<EvalType, panzer::Traits, num_space_dim>(
80 evaluators->push_back(eval);
84 #ifdef VERTEXCFD_HAVE_TENSORFLOW
85 if (closure_type ==
"IncompressibleConvectiveFluxMachineLearning")
87 auto eval = Teuchos::rcp(
88 new IncompressibleConvectiveFluxMachineLearning<EvalType,
91 *ir, fluid_params, closure_params));
92 evaluators->push_back(eval);
99 if (closure_type ==
"IncompressibleViscousFlux")
101 auto eval = Teuchos::rcp(
102 new IncompressibleViscousFlux<EvalType, panzer::Traits, num_space_dim>(
103 *ir, fluid_params, user_params, use_turbulence_model));
104 evaluators->push_back(eval);
108 if (closure_type ==
"IncompressibleGradDiv")
110 auto eval = Teuchos::rcp(
111 new IncompressibleGradDiv<EvalType, panzer::Traits, num_space_dim>(
112 *ir, stability_param_list));
113 evaluators->push_back(eval);
117 if (closure_type ==
"IncompressibleLocalTimeStepSize")
119 auto eval = Teuchos::rcp(
120 new IncompressibleLocalTimeStepSize<EvalType,
122 num_space_dim>(*ir));
123 evaluators->push_back(eval);
127 if (closure_type ==
"IncompressibleConstantSource")
129 auto eval = Teuchos::rcp(
130 new IncompressibleConstantSource<EvalType, panzer::Traits, num_space_dim>(
131 *ir, fluid_params, global_data, closure_params));
132 evaluators->push_back(eval);
136 if (closure_type ==
"IncompressibleBuoyancySource")
138 auto eval = Teuchos::rcp(
139 new IncompressibleBuoyancySource<EvalType, panzer::Traits, num_space_dim>(
140 *ir, fluid_params, user_params));
141 evaluators->push_back(eval);
145 if (closure_type ==
"IncompressibleViscousHeat")
147 auto eval = Teuchos::rcp(
148 new IncompressibleViscousHeat<EvalType, panzer::Traits, num_space_dim>(
150 evaluators->push_back(eval);
154 if (closure_type ==
"IncompressibleRotatingAnnulusExact")
156 auto eval = Teuchos::rcp(
157 new IncompressibleRotatingAnnulusExact<EvalType,
160 *ir, closure_params));
161 evaluators->push_back(eval);
165 if (closure_type ==
"IncompressiblePlanarPoiseuilleExact")
167 auto eval = Teuchos::rcp(
168 new IncompressiblePlanarPoiseuilleExact<EvalType,
171 *ir, closure_params));
172 evaluators->push_back(eval);
176 if (closure_type ==
"IncompressibleErrorNorm")
178 auto eval = Teuchos::rcp(
179 new IncompressibleErrorNorms<EvalType, panzer::Traits, num_space_dim>(
181 evaluators->push_back(eval);
185 if (closure_type ==
"IncompressibleTaylorGreenVortexExactSolution")
187 auto eval = Teuchos::rcp(
188 new IncompressibleTaylorGreenVortexExactSolution<EvalType,
191 *ir, closure_params));
192 evaluators->push_back(eval);
196 if (closure_type ==
"IncompressibleShearVariables")
198 auto eval = Teuchos::rcp(
199 new IncompressibleShearVariables<EvalType, panzer::Traits, num_space_dim>(
201 evaluators->push_back(eval);
205 if (closure_type ==
"IncompressibleNusseltNumber")
207 auto eval = Teuchos::rcp(
208 new IncompressibleNusseltNumber<EvalType, panzer::Traits>(*ir));
209 evaluators->push_back(eval);
213 if (closure_type ==
"IncompressibleEnstrophy")
215 auto eval = Teuchos::rcp(
216 new IncompressibleEnstrophy<EvalType, panzer::Traits, num_space_dim>(
218 evaluators->push_back(eval);
222 if (closure_type ==
"IncompressibleTauSUPG")
224 auto eval = Teuchos::rcp(
225 new IncompressibleTauSUPG<EvalType, panzer::Traits, num_space_dim>(
226 *ir, fluid_params, closure_params));
227 evaluators->push_back(eval);
231 if (closure_type ==
"IncompressibleSUPGFlux")
233 auto eval = Teuchos::rcp(
234 new IncompressibleSUPGFlux<EvalType, panzer::Traits, num_space_dim>(
235 *ir, fluid_params, closure_params));
236 evaluators->push_back(eval);
240 if (closure_type ==
"IncompressibleSUPGExactSolution")
243 = Teuchos::rcp(
new IncompressibleSUPGExactSolution<EvalType,
246 *ir, closure_params));
247 evaluators->push_back(eval);
254 if (closure_type ==
"MethodManufacturedSolution")
256 auto eval = Teuchos::rcp(
257 new MethodManufacturedSolution<EvalType, panzer::Traits, num_space_dim>(
259 evaluators->push_back(eval);
263 if (closure_type ==
"MethodManufacturedSolutionSource")
265 bool build_viscous_flux =
true;
266 if (fluid_params.isType<
bool>(
"Build Viscous Flux"))
268 build_viscous_flux = fluid_params.get<
bool>(
"Build Viscous Flux");
271 = Teuchos::rcp(
new MethodManufacturedSolutionSource<EvalType,
274 *ir, build_viscous_flux, closure_params));
275 evaluators->push_back(eval);
281 error_msg +=
"IncompressibleBuoyancySource\n";
282 error_msg +=
"IncompressibleConstantSource\n";
283 error_msg +=
"IncompressibleConvectiveFlux\n";
284 error_msg +=
"IncompressibleConvectiveFluxMachineLearning\n";
285 error_msg +=
"IncompressibleEnstrophy\n";
286 error_msg +=
"IncompressibleErrorNorm\n";
287 error_msg +=
"IncompressibleGradDiv\n";
288 error_msg +=
"IncompressibleLiftDrag\n";
289 error_msg +=
"IncompressibleLocalTimeStepSize\n";
290 error_msg +=
"IncompressibleNusseltNumber\n";
291 error_msg +=
"IncompressiblePlanarPoiseuilleExact\n";
292 error_msg +=
"IncompressibleRotatingAnnulusExact\n";
293 error_msg +=
"IncompressibleShearVariables\n";
294 error_msg +=
"IncompressibleSUPGExactSolution\n";
295 error_msg +=
"IncompressibleSUPGFlux\n";
296 error_msg +=
"IncompressibleTauSUPG\n";
297 error_msg +=
"IncompressibleTimeDerivative\n";
298 error_msg +=
"IncompressibleViscousFlux\n";
299 error_msg +=
"IncompressibleViscousHeat\n";
300 error_msg +=
"MethodManufacturedSolution\n";
301 error_msg +=
"MethodManufacturedSolutionSource\n";
309 #endif // end VERTEXCFD_INCOMPRESSIBLECLOSUREMODELFACTORY_IMPL_HPP