1 #ifndef VERTEXCFD_INCOMPRESSIBLEBOUNDARYSTATE_FACTORY_HPP
2 #define VERTEXCFD_INCOMPRESSIBLEBOUNDARYSTATE_FACTORY_HPP
4 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleCavityLid.hpp"
5 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleDirichlet.hpp"
6 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleFreeSlip.hpp"
7 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleLaminarFlow.hpp"
8 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleNoSlip.hpp"
9 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressiblePressureOutflow.hpp"
10 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleRotatingWall.hpp"
11 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleSymmetry.hpp"
12 #include "incompressible_solver/boundary_conditions/VertexCFD_BoundaryState_IncompressibleWallFunction.hpp"
14 #include <Panzer_Evaluator_WithBaseImpl.hpp>
16 #include <Teuchos_ParameterList.hpp>
17 #include <Teuchos_RCP.hpp>
21 namespace BoundaryCondition
24 template<
class EvalType,
class Traits,
int NumSpaceDim>
28 static Teuchos::RCP<PHX::Evaluator<Traits>>
29 create(
const panzer::IntegrationRule& ir,
30 const Teuchos::ParameterList& bc_params,
31 const Teuchos::ParameterList& fluid_params)
34 constexpr
int num_space_dim = NumSpaceDim;
37 const std::string continuity_model_name
38 = fluid_params.isType<std::string>(
"Continuity Model")
39 ? fluid_params.get<std::string>(
"Continuity Model")
43 = continuity_model_name.find(
"EDAC") != std::string::npos ? true
47 Teuchos::RCP<PHX::Evaluator<Traits>> state;
48 bool found_model =
false;
50 if (bc_params.isType<std::string>(
"Type"))
52 if (bc_params.get<std::string>(
"Type") ==
"No-Slip")
56 ir, fluid_params, bc_params, is_edac));
60 if (bc_params.get<std::string>(
"Type") ==
"Dirichlet")
64 ir, fluid_params, bc_params, is_edac));
68 if (bc_params.get<std::string>(
"Type") ==
"Pressure Outflow")
72 ir, fluid_params, bc_params, is_edac));
76 if (bc_params.get<std::string>(
"Type") ==
"Free Slip")
80 ir, fluid_params, is_edac));
84 if (bc_params.get<std::string>(
"Type") ==
"Symmetry")
88 ir, fluid_params, is_edac));
92 if (bc_params.get<std::string>(
"Type") ==
"Rotating Wall")
96 ir, fluid_params, bc_params, is_edac));
100 if (bc_params.get<std::string>(
"Type") ==
"Laminar Flow")
102 state = Teuchos::rcp(
104 ir, fluid_params, bc_params, continuity_model_name));
108 if (bc_params.get<std::string>(
"Type") ==
"Cavity Lid")
110 state = Teuchos::rcp(
112 ir, fluid_params, bc_params, is_edac));
116 if (bc_params.get<std::string>(
"Type") ==
"Velocity Wall Function")
118 state = Teuchos::rcp(
120 ir, fluid_params, is_edac));
127 std::string msg =
"\n\nBoundary state "
128 + bc_params.get<std::string>(
"Type")
129 +
" failed to build.\n";
130 msg +=
"The boundary conditions implemented in VertexCFD are:\n";
132 msg +=
"Dirichlet,\n";
133 msg +=
"Free Slip,\n";
134 msg +=
"Pressure Outflow,\n";
135 msg +=
"Rotating Wall,\n";
136 msg +=
"Laminar Flow,\n";
137 msg +=
"Symmetry,\n";
138 msg +=
"Cavity Lid\n";
139 msg +=
"Velocity Wall Function\n";
141 throw std::runtime_error(msg);
153 #endif // end VERTEXCFD_INCOMPRESSIBLEBOUNDARYSTATE_FACTORY_HPP