VertexCFD  0.0-dev
VertexCFD_BCStrategy_Factory.hpp
1 #ifndef VERTEXCFD_BOUNDARYCONDITION_FACTORY_HPP
2 #define VERTEXCFD_BOUNDARYCONDITION_FACTORY_HPP
3 
4 #include "VertexCFD_BCStrategy_IncompressibleBoundaryFlux.hpp"
5 #include "VertexCFD_BCStrategy_IncompressibleLSVOFBoundaryFlux.hpp"
6 #include "VertexCFD_BCStrategy_StrongDirichletMMS.hpp"
7 #include "conduction/boundary_conditions/VertexCFD_BCStrategy_ConductionBoundaryFlux.hpp"
8 #include "induction_less_mhd_solver/boundary_conditions/VertexCFD_BCStrategy_SolidElectricBoundaryFlux.hpp"
9 
10 #ifdef VERTEXCFD_ENABLE_FULL_INDUCTION_MHD
11 #include "full_induction_mhd_solver/boundary_conditions/VertexCFD_BCStrategy_FullInductionMHDBoundaryFlux.hpp"
12 #include "full_induction_mhd_solver/boundary_conditions/VertexCFD_BCStrategy_SolidFullInductionMHDBoundaryFlux.hpp"
13 #endif
14 
15 #include <Panzer_BCStrategy_Factory.hpp>
16 #include <Panzer_BCStrategy_TemplateManager.hpp>
17 #include <Panzer_GlobalData.hpp>
18 #include <Panzer_Traits.hpp>
19 
20 #include <Teuchos_RCP.hpp>
21 
22 namespace VertexCFD
23 {
24 namespace BoundaryCondition
25 {
26 //---------------------------------------------------------------------------//
27 namespace Impl
28 {
29 template<template<class, int... Dims> class Strategy, int... Dims>
31 {
32  public:
33  TemplateBuilder(const panzer::BC& bc,
34  const Teuchos::RCP<panzer::GlobalData>& global_data)
35  : _bc(bc)
36  , _global_data(global_data)
37  {
38  }
39 
40  template<class EvalT>
41  Teuchos::RCP<panzer::BCStrategyBase> build() const
42  {
43  Strategy<EvalT, Dims...>* ptr
44  = new Strategy<EvalT, Dims...>(_bc, _global_data);
45  return Teuchos::rcp(ptr);
46  }
47 
48  private:
49  const panzer::BC& _bc;
50  const Teuchos::RCP<panzer::GlobalData> _global_data;
51 };
52 } // namespace Impl
53 
54 //---------------------------------------------------------------------------//
55 template<int NumSpaceDim>
56 class Factory : public panzer::BCStrategyFactory
57 {
58  public:
59  Teuchos::RCP<panzer::BCStrategy_TemplateManager<panzer::Traits>>
60  buildBCStrategy(
61  const panzer::BC& bc,
62  const Teuchos::RCP<panzer::GlobalData>& global_data) const override
63  {
64  auto template_manager = Teuchos::rcp(
65  new panzer::BCStrategy_TemplateManager<panzer::Traits>{});
66 
67  const auto& bc_strategy = bc.strategy();
68 
69  if (bc_strategy == "IncompressibleBoundaryFlux")
70  {
72  builder(bc, global_data);
73  template_manager->buildObjects(builder);
74  }
75  else if (bc_strategy == "IncompressibleLSVOFBoundaryFlux")
76  {
78  builder(bc, global_data);
79  template_manager->buildObjects(builder);
80  }
81  else if (bc_strategy == "SolidInductionLessMHDBoundaryFlux")
82  {
84  builder(bc, global_data);
85  template_manager->buildObjects(builder);
86  }
87  else if (bc_strategy == "ConductionBoundaryFlux")
88  {
90  builder(bc, global_data);
91  template_manager->buildObjects(builder);
92  }
93  else if (bc_strategy == "StrongDirichletMMS")
94  {
96  bc, global_data);
97  template_manager->buildObjects(builder);
98  }
99 #ifdef VERTEXCFD_ENABLE_FULL_INDUCTION_MHD
100  else if (bc_strategy == "FullInductionMHDBoundaryFlux")
101  {
103  builder(bc, global_data);
104  template_manager->buildObjects(builder);
105  }
106  else if (bc_strategy == "SolidFullInductionMHDBoundaryFlux")
107  {
109  NumSpaceDim>
110  builder(bc, global_data);
111  template_manager->buildObjects(builder);
112  }
113 #endif
114  else
115  {
116  throw std::runtime_error("BC strategy not valid");
117  }
118 
119  // Return the manager.
120  return template_manager;
121  }
122 };
123 
124 //---------------------------------------------------------------------------//
125 
126 } // end namespace BoundaryCondition
127 } // end namespace VertexCFD
128 
129 #endif // VERTEXCFD_BOUNDARYCONDITION_FACTORY_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::BoundaryCondition::Impl::TemplateBuilder
Definition: VertexCFD_BCStrategy_Factory.hpp:31
VertexCFD::BoundaryCondition::SolidFullInductionMHDBoundaryFlux
Definition: VertexCFD_BCStrategy_SolidFullInductionMHDBoundaryFlux.hpp:29
VertexCFD::BoundaryCondition::Factory
Definition: VertexCFD_BCStrategy_Factory.hpp:57