VertexCFD  0.0-dev
VertexCFD_InductionlessClosureModelFactory_impl.hpp
1 #ifndef VERTEXCFD_INDUCTIONLESSCLOSUREMODELFACTORY_IMPL_HPP
2 #define VERTEXCFD_INDUCTIONLESSCLOSUREMODELFACTORY_IMPL_HPP
3 
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"
11 
12 namespace VertexCFD
13 {
14 namespace ClosureModel
15 {
16 //---------------------------------------------------------------------------//
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,
23  bool& found_model,
24  std::string& error_msg,
25  Teuchos::RCP<std::vector<Teuchos::RCP<PHX::Evaluator<panzer::Traits>>>>
26  evaluators)
27 {
28  // Define local variables
29  constexpr int num_space_dim = NumSpaceDim;
30  const Teuchos::RCP<PHX::Evaluator<panzer::Traits>> eval;
31 
32  // Closure models
33  if (closure_type == "ElectricCurrentDensity")
34  {
35  auto eval = Teuchos::rcp(
36  new ElectricCurrentDensity<EvalType, panzer::Traits, num_space_dim>(
37  *ir));
38  evaluators->push_back(eval);
39  found_model = true;
40  }
41 
42  if (closure_type == "ElectricPotentialCrossProductFlux")
43  {
44  auto eval = Teuchos::rcp(
45  new ElectricPotentialCrossProductFlux<EvalType,
46  panzer::Traits,
47  num_space_dim>(*ir));
48  evaluators->push_back(eval);
49  found_model = true;
50  }
51 
52  if (closure_type == "ElectricPotentialDiffusionFlux")
53  {
54  auto eval = Teuchos::rcp(
55  new ElectricPotentialDiffusionFlux<EvalType, panzer::Traits>(*ir));
56  evaluators->push_back(eval);
57  found_model = true;
58  }
59 
60  if (closure_type == "HartmannProblemExact")
61  {
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);
66  found_model = true;
67  }
68 
69  if (closure_type == "JouleHeatingSource")
70  {
71  auto eval = Teuchos::rcp(
72  new JouleHeatingSource<EvalType, panzer::Traits, num_space_dim>(
73  *ir));
74  evaluators->push_back(eval);
75  found_model = true;
76  }
77 
78  if (closure_type == "LorentzForce")
79  {
80  auto eval = Teuchos::rcp(
81  new LorentzForce<EvalType, panzer::Traits, num_space_dim>(*ir));
82  evaluators->push_back(eval);
83  found_model = true;
84  }
85 
86  // Initialize 'error_msg' with list of closure models for Inductionless
87  // MHD equations
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";
95 }
96 
97 //---------------------------------------------------------------------------//
98 
99 } // end namespace ClosureModel
100 } // end namespace VertexCFD
101 
102 #endif // end VERTEXCFD_INDUCTIONLESSCLOSUREMODELFACTORY_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23