VertexCFD  0.0-dev
VertexCFD_IncompressibleBoundaryState_Factory.hpp
1 #ifndef VERTEXCFD_INCOMPRESSIBLEBOUNDARYSTATE_FACTORY_HPP
2 #define VERTEXCFD_INCOMPRESSIBLEBOUNDARYSTATE_FACTORY_HPP
3 
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"
13 
14 #include <Panzer_Evaluator_WithBaseImpl.hpp>
15 
16 #include <Teuchos_ParameterList.hpp>
17 #include <Teuchos_RCP.hpp>
18 
19 namespace VertexCFD
20 {
21 namespace BoundaryCondition
22 {
23 //---------------------------------------------------------------------------//
24 template<class EvalType, class Traits, int NumSpaceDim>
26 {
27  public:
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)
32  {
33  // Space dimension
34  constexpr int num_space_dim = NumSpaceDim;
35 
36  // EDAC vs AC
37  const std::string continuity_model_name
38  = fluid_params.isType<std::string>("Continuity Model")
39  ? fluid_params.get<std::string>("Continuity Model")
40  : "AC";
41 
42  const bool is_edac
43  = continuity_model_name.find("EDAC") != std::string::npos ? true
44  : false;
45 
46  // Loop over boundary conditions
47  Teuchos::RCP<PHX::Evaluator<Traits>> state;
48  bool found_model = false;
49 
50  if (bc_params.isType<std::string>("Type"))
51  {
52  if (bc_params.get<std::string>("Type") == "No-Slip")
53  {
54  state = Teuchos::rcp(
56  ir, fluid_params, bc_params, is_edac));
57  found_model = true;
58  }
59 
60  if (bc_params.get<std::string>("Type") == "Dirichlet")
61  {
62  state = Teuchos::rcp(
64  ir, fluid_params, bc_params, is_edac));
65  found_model = true;
66  }
67 
68  if (bc_params.get<std::string>("Type") == "Pressure Outflow")
69  {
70  state = Teuchos::rcp(
72  ir, fluid_params, bc_params, is_edac));
73  found_model = true;
74  }
75 
76  if (bc_params.get<std::string>("Type") == "Free Slip")
77  {
78  state = Teuchos::rcp(
80  ir, fluid_params, is_edac));
81  found_model = true;
82  }
83 
84  if (bc_params.get<std::string>("Type") == "Symmetry")
85  {
86  state = Teuchos::rcp(
88  ir, fluid_params, is_edac));
89  found_model = true;
90  }
91 
92  if (bc_params.get<std::string>("Type") == "Rotating Wall")
93  {
94  state = Teuchos::rcp(
96  ir, fluid_params, bc_params, is_edac));
97  found_model = true;
98  }
99 
100  if (bc_params.get<std::string>("Type") == "Laminar Flow")
101  {
102  state = Teuchos::rcp(
104  ir, fluid_params, bc_params, continuity_model_name));
105  found_model = true;
106  }
107 
108  if (bc_params.get<std::string>("Type") == "Cavity Lid")
109  {
110  state = Teuchos::rcp(
112  ir, fluid_params, bc_params, is_edac));
113  found_model = true;
114  }
115 
116  if (bc_params.get<std::string>("Type") == "Velocity Wall Function")
117  {
118  state = Teuchos::rcp(
120  ir, fluid_params, is_edac));
121  found_model = true;
122  }
123  }
124 
125  if (!found_model)
126  {
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";
131  msg += "No-Slip,\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";
140  msg += "\n";
141  throw std::runtime_error(msg);
142  }
143 
144  return state;
145  }
146 };
147 
148 //---------------------------------------------------------------------------//
149 
150 } // end namespace BoundaryCondition
151 } // end namespace VertexCFD
152 
153 #endif // end VERTEXCFD_INCOMPRESSIBLEBOUNDARYSTATE_FACTORY_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::BoundaryCondition::IncompressibleRotatingWall
Definition: VertexCFD_BoundaryState_IncompressibleRotatingWall.hpp:27
VertexCFD::BoundaryCondition::IncompressibleFreeSlip
Definition: VertexCFD_BoundaryState_IncompressibleFreeSlip.hpp:22
VertexCFD::BoundaryCondition::IncompressibleDirichlet
Definition: VertexCFD_BoundaryState_IncompressibleDirichlet.hpp:20
VertexCFD::BoundaryCondition::IncompressibleBoundaryStateFactory
Definition: VertexCFD_IncompressibleBoundaryState_Factory.hpp:26
VertexCFD::BoundaryCondition::IncompressibleNoSlip
Definition: VertexCFD_BoundaryState_IncompressibleNoSlip.hpp:24
VertexCFD::BoundaryCondition::IncompressibleLaminarFlow
Definition: VertexCFD_BoundaryState_IncompressibleLaminarFlow.hpp:27
VertexCFD::BoundaryCondition::IncompressibleSymmetry
Definition: VertexCFD_BoundaryState_IncompressibleSymmetry.hpp:22
VertexCFD::BoundaryCondition::IncompressiblePressureOutflow
Definition: VertexCFD_BoundaryState_IncompressiblePressureOutflow.hpp:27
VertexCFD::BoundaryCondition::IncompressibleCavityLid
Definition: VertexCFD_BoundaryState_IncompressibleCavityLid.hpp:26
VertexCFD::BoundaryCondition::IncompressibleWallFunction
Definition: VertexCFD_BoundaryState_IncompressibleWallFunction.hpp:23