1 #ifndef VERTEXCFD_INDUCTIONLESSCLOSUREMODELFACTORY_IMPL_HPP
2 #define VERTEXCFD_INDUCTIONLESSCLOSUREMODELFACTORY_IMPL_HPP
4 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_ElectricCurrentDensity.hpp"
5 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_ElectricPotentialCrossProductFlux.hpp"
6 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_ElectricPotentialDiffusionFlux.hpp"
7 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_HartmannProblemExact.hpp"
8 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_JouleHeatingSource.hpp"
9 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_LorentzForce.hpp"
10 #include "induction_less_mhd_solver/closure_models/VertexCFD_InductionlessClosureModelFactory.hpp"
14 namespace ClosureModel
17 template<
class EvalType,
int NumSpaceDim>
18 void InductionlessFactory<EvalType, NumSpaceDim>::buildClosureModel(
19 const std::string& closure_type,
20 const Teuchos::RCP<panzer::IntegrationRule>& ir,
21 const Teuchos::ParameterList& user_params,
22 const Teuchos::ParameterList& closure_params,
24 std::string& error_msg,
25 Teuchos::RCP<std::vector<Teuchos::RCP<PHX::Evaluator<panzer::Traits>>>>
29 constexpr
int num_space_dim = NumSpaceDim;
30 const Teuchos::RCP<PHX::Evaluator<panzer::Traits>> eval;
33 if (closure_type ==
"ElectricCurrentDensity")
35 auto eval = Teuchos::rcp(
36 new ElectricCurrentDensity<EvalType, panzer::Traits, num_space_dim>(
38 evaluators->push_back(eval);
42 if (closure_type ==
"ElectricPotentialCrossProductFlux")
44 auto eval = Teuchos::rcp(
45 new ElectricPotentialCrossProductFlux<EvalType,
48 evaluators->push_back(eval);
52 if (closure_type ==
"ElectricPotentialDiffusionFlux")
54 auto eval = Teuchos::rcp(
55 new ElectricPotentialDiffusionFlux<EvalType, panzer::Traits>(*ir));
56 evaluators->push_back(eval);
60 if (closure_type ==
"HartmannProblemExact")
62 auto eval = Teuchos::rcp(
63 new HartmannProblemExact<EvalType, panzer::Traits, num_space_dim>(
64 *ir, closure_params, user_params));
65 evaluators->push_back(eval);
69 if (closure_type ==
"JouleHeatingSource")
71 auto eval = Teuchos::rcp(
72 new JouleHeatingSource<EvalType, panzer::Traits, num_space_dim>(
74 evaluators->push_back(eval);
78 if (closure_type ==
"LorentzForce")
80 auto eval = Teuchos::rcp(
81 new LorentzForce<EvalType, panzer::Traits, num_space_dim>(*ir));
82 evaluators->push_back(eval);
88 error_msg =
"ElectricCurrentDensity\n";
89 error_msg +=
"ElectricPotentialCrossProductFlux\n";
90 error_msg +=
"ElectricPotentialDiffusionFlux\n";
91 error_msg +=
"ExternalMagneticField\n";
92 error_msg +=
"HartmannProblemExact\n";
93 error_msg +=
"JouleHeatingSource\n";
94 error_msg +=
"LorentzForce\n";
102 #endif // end VERTEXCFD_INDUCTIONLESSCLOSUREMODELFACTORY_IMPL_HPP