1 #ifndef VERTEXCFD_TURBULENCEBOUNDARYSTATE_FACTORY_HPP
2 #define VERTEXCFD_TURBULENCEBOUNDARYSTATE_FACTORY_HPP
4 #include "closure_models/VertexCFD_Closure_ElementLength.hpp"
5 #include "closure_models/VertexCFD_Closure_MeasureElementLength.hpp"
6 #include "closure_models/VertexCFD_Closure_MetricTensorElementLength.hpp"
7 #include "closure_models/VertexCFD_Closure_SingularValueElementLength.hpp"
8 #include "closure_models/VertexCFD_Closure_WallDistance.hpp"
10 #include "boundary_conditions/VertexCFD_BoundaryState_VariableExtrapolate.hpp"
11 #include "boundary_conditions/VertexCFD_BoundaryState_VariableFixed.hpp"
13 #include "turbulence_models/boundary_conditions/VertexCFD_BoundaryState_TurbulenceInletOutlet.hpp"
14 #include "turbulence_models/boundary_conditions/VertexCFD_BoundaryState_TurbulenceKEpsilonWallFunction.hpp"
15 #include "turbulence_models/boundary_conditions/VertexCFD_BoundaryState_TurbulenceKOmegaWallResolved.hpp"
16 #include "turbulence_models/boundary_conditions/VertexCFD_BoundaryState_TurbulenceSymmetry.hpp"
17 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleKEpsilonDiffusivityCoefficient.hpp"
18 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleKEpsilonEddyViscosity.hpp"
19 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleKOmegaDiffusivityCoefficient.hpp"
20 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleKOmegaEddyViscosity.hpp"
21 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleKTauDiffusivityCoefficient.hpp"
22 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleKTauEddyViscosity.hpp"
23 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleRealizableKEpsilonEddyViscosity.hpp"
24 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleSSTDiffusivityCoefficient.hpp"
25 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleSSTEddyViscosity.hpp"
26 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleSpalartAllmarasDiffusivityCoefficient.hpp"
27 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleSpalartAllmarasEddyViscosity.hpp"
28 #include "turbulence_models/closure_models/VertexCFD_Closure_IncompressibleWALEEddyViscosity.hpp"
30 #include <Panzer_Evaluator_WithBaseImpl.hpp>
32 #include <Teuchos_ParameterList.hpp>
33 #include <Teuchos_RCP.hpp>
37 namespace BoundaryCondition
40 template<
class EvalType,
class Traits,
int NumSpaceDim>
44 static std::vector<Teuchos::RCP<PHX::Evaluator<Traits>>>
45 create(
const panzer::IntegrationRule& ir,
46 const Teuchos::ParameterList& bc_params,
47 const Teuchos::ParameterList& user_params,
48 const std::string _turbulence_model_name)
51 std::vector<Teuchos::RCP<PHX::Evaluator<panzer::Traits>>> evaluators;
55 std::vector<std::string> turb_field_names_vct;
56 if (_turbulence_model_name !=
"No Turbulence Model")
60 != _turbulence_model_name.find(
"Spalart-Allmaras"))
63 turb_field_names_vct.push_back(
"spalart_allmaras_variable");
66 const auto diffusive_coeff_op = Teuchos::rcp(
70 evaluators.push_back(diffusive_coeff_op);
73 const auto eddy_visc_op = Teuchos::rcp(
77 evaluators.push_back(eddy_visc_op);
80 else if (std::string::npos
81 != _turbulence_model_name.find(
"K-Epsilon"))
84 turb_field_names_vct.push_back(
"turb_kinetic_energy");
85 turb_field_names_vct.push_back(
"turb_dissipation_rate");
89 != _turbulence_model_name.find(
"Realizable K-Epsilon"))
92 const auto diffusive_coeff_op = Teuchos::rcp(
95 panzer::Traits>(ir, 1.0, 1.2,
"BOUNDARY_"));
96 evaluators.push_back(diffusive_coeff_op);
99 const auto eddy_visc_op = Teuchos::rcp(
104 evaluators.push_back(eddy_visc_op);
110 const auto diffusive_coeff_op = Teuchos::rcp(
113 panzer::Traits>(ir, 1.0, 1.3,
"BOUNDARY_"));
114 evaluators.push_back(diffusive_coeff_op);
117 const auto eddy_visc_op = Teuchos::rcp(
120 panzer::Traits>(ir));
121 evaluators.push_back(eddy_visc_op);
125 else if (std::string::npos
126 != _turbulence_model_name.find(
"K-Omega"))
129 turb_field_names_vct.push_back(
"turb_kinetic_energy");
130 turb_field_names_vct.push_back(
131 "turb_specific_dissipation_rate");
134 const auto eval_coeff = Teuchos::rcp(
137 panzer::Traits>(ir, user_params));
138 evaluators.push_back(eval_coeff);
140 const auto eval_eddy = Teuchos::rcp(
144 NumSpaceDim>(ir, user_params));
145 evaluators.push_back(eval_eddy);
147 else if (std::string::npos != _turbulence_model_name.find(
"SST"))
150 turb_field_names_vct.push_back(
"turb_kinetic_energy");
151 turb_field_names_vct.push_back(
152 "turb_specific_dissipation_rate");
154 if (bc_params.get<std::string>(
"Type") ==
"No-Slip")
157 const auto eval_eddy = Teuchos::rcp(
161 NumSpaceDim>(ir, user_params,
true));
162 evaluators.push_back(eval_eddy);
167 const auto dist = Teuchos::rcp(
173 Teuchos::RCP<Mesh::Topology::SidesetGeometry>>(
174 "Sideset Geometry")));
175 evaluators.push_back(dist);
177 const auto eval_eddy = Teuchos::rcp(
181 NumSpaceDim>(ir, user_params));
182 evaluators.push_back(eval_eddy);
186 const auto eval_coeff = Teuchos::rcp(
189 panzer::Traits>(ir, user_params));
190 evaluators.push_back(eval_coeff);
193 else if (std::string::npos != _turbulence_model_name.find(
"K-Tau"))
196 turb_field_names_vct.push_back(
"turb_kinetic_energy");
197 turb_field_names_vct.push_back(
198 "turb_specific_dissipation_rate");
201 const auto eval_coeff = Teuchos::rcp(
204 panzer::Traits>(ir, user_params));
205 evaluators.push_back(eval_coeff);
207 const auto eval_eddy = Teuchos::rcp(
212 evaluators.push_back(eval_eddy);
215 else if (std::string::npos != _turbulence_model_name.find(
"WALE"))
218 const auto eddy_visc_op = Teuchos::rcp(
222 NumSpaceDim>(ir, user_params));
223 evaluators.push_back(eddy_visc_op);
226 const std::string delta_prefix =
"les_";
227 const auto turb_params
228 = user_params.isSublist(
"Turbulence Parameters")
229 ? user_params.sublist(
"Turbulence Parameters")
230 : Teuchos::ParameterList();
231 const std::string delta_type
232 = turb_params.isType<std::string>(
"LES Element Length")
233 ? turb_params.get<std::string>(
"LES Element Length")
236 if (delta_type ==
"ElementLength")
238 auto eval_delta = Teuchos::rcp(
242 evaluators.push_back(eval_delta);
244 else if (delta_type ==
"MeasureElementLength")
246 auto eval_delta = Teuchos::rcp(
251 evaluators.push_back(eval_delta);
253 else if (delta_type ==
"MetricTensorElementLength")
255 auto eval_delta = Teuchos::rcp(
257 MetricTensorElementLength<EvalType, panzer::Traits>(
260 evaluators.push_back(eval_delta);
262 else if (delta_type ==
"SingularValueElementLength")
264 const auto method = turb_params.get<std::string>(
265 "Element Length Method");
267 auto eval_delta = Teuchos::rcp(
270 panzer::Traits>(ir, method, delta_prefix));
272 evaluators.push_back(eval_delta);
276 std::string msg =
"Unknown Delta Closure Model:\n";
280 msg +=
"Please choose from:\n";
281 msg +=
"ElementLength\n";
282 msg +=
"MeasureElementLength\n";
283 msg +=
"MetricTensorElementLength\n";
284 msg +=
"SingularValueElementLength\n";
286 throw std::runtime_error(msg);
293 bool found_model =
false;
294 if (bc_params.isType<std::string>(
"Type")
295 && (turb_field_names_vct.size() > 0))
297 const auto bc_type = bc_params.get<std::string>(
"Type");
298 if (bc_type ==
"Fixed")
301 for (
auto& variable_name : turb_field_names_vct)
305 ir, bc_params, variable_name));
306 evaluators.push_back(state);
311 else if (bc_type ==
"Extrapolate")
314 for (
auto& variable_name : turb_field_names_vct)
316 const auto state = Teuchos::rcp(
319 evaluators.push_back(state);
324 else if (bc_type ==
"InletOutlet")
327 for (
auto& variable_name : turb_field_names_vct)
329 const auto state = Teuchos::rcp(
331 ir, bc_params, variable_name));
332 evaluators.push_back(state);
337 else if (bc_type ==
"Symmetry")
340 for (
auto& variable_name : turb_field_names_vct)
342 const auto state = Teuchos::rcp(
345 evaluators.push_back(state);
350 else if (bc_type ==
"K-Epsilon Wall Function")
353 const auto state = Teuchos::rcp(
356 evaluators.push_back(state);
361 else if (bc_type ==
"K-Omega Wall-Resolved")
363 const auto state = Teuchos::rcp(
366 evaluators.push_back(state);
374 std::string msg =
"\n\nBoundary state " + bc_type
375 +
" failed to build.\n";
376 msg +=
"The boundary conditions implemented in VERTEX-CFD\n";
377 msg +=
"for the turbulence model equations are:\n";
378 msg +=
"Extrapolate,\n";
380 msg +=
"InletOutlet,\n";
381 msg +=
"K-Epsilon Wall Function,\n";
382 msg +=
"K-Omega Wall-Resolved,\n";
385 throw std::runtime_error(msg);
399 #endif // end VERTEXCFD_TURBULENCEBOUNDARYSTATE_FACTORY_HPP