1 #ifndef VERTEXCFD_BOUNDARYCONDITION_FACTORY_HPP
2 #define VERTEXCFD_BOUNDARYCONDITION_FACTORY_HPP
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"
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"
15 #include <Panzer_BCStrategy_Factory.hpp>
16 #include <Panzer_BCStrategy_TemplateManager.hpp>
17 #include <Panzer_GlobalData.hpp>
18 #include <Panzer_Traits.hpp>
20 #include <Teuchos_RCP.hpp>
24 namespace BoundaryCondition
29 template<
template<
class,
int... Dims>
class Strategy, int... Dims>
34 const Teuchos::RCP<panzer::GlobalData>& global_data)
36 , _global_data(global_data)
41 Teuchos::RCP<panzer::BCStrategyBase> build()
const
43 Strategy<EvalT, Dims...>* ptr
44 =
new Strategy<EvalT, Dims...>(_bc, _global_data);
45 return Teuchos::rcp(ptr);
49 const panzer::BC& _bc;
50 const Teuchos::RCP<panzer::GlobalData> _global_data;
55 template<
int NumSpaceDim>
56 class Factory :
public panzer::BCStrategyFactory
59 Teuchos::RCP<panzer::BCStrategy_TemplateManager<panzer::Traits>>
62 const Teuchos::RCP<panzer::GlobalData>& global_data)
const override
64 auto template_manager = Teuchos::rcp(
65 new panzer::BCStrategy_TemplateManager<panzer::Traits>{});
67 const auto& bc_strategy = bc.strategy();
69 if (bc_strategy ==
"IncompressibleBoundaryFlux")
72 builder(bc, global_data);
73 template_manager->buildObjects(builder);
75 else if (bc_strategy ==
"IncompressibleLSVOFBoundaryFlux")
78 builder(bc, global_data);
79 template_manager->buildObjects(builder);
81 else if (bc_strategy ==
"SolidInductionLessMHDBoundaryFlux")
84 builder(bc, global_data);
85 template_manager->buildObjects(builder);
87 else if (bc_strategy ==
"ConductionBoundaryFlux")
90 builder(bc, global_data);
91 template_manager->buildObjects(builder);
93 else if (bc_strategy ==
"StrongDirichletMMS")
97 template_manager->buildObjects(builder);
99 #ifdef VERTEXCFD_ENABLE_FULL_INDUCTION_MHD
100 else if (bc_strategy ==
"FullInductionMHDBoundaryFlux")
103 builder(bc, global_data);
104 template_manager->buildObjects(builder);
106 else if (bc_strategy ==
"SolidFullInductionMHDBoundaryFlux")
110 builder(bc, global_data);
111 template_manager->buildObjects(builder);
116 throw std::runtime_error(
"BC strategy not valid");
120 return template_manager;
129 #endif // VERTEXCFD_BOUNDARYCONDITION_FACTORY_HPP