VertexCFD  0.0-dev
VertexCFD_ElectricPotentialBoundaryState_Factory.hpp
1 #ifndef VERTEXCFD_ELECTRICPOTENTIALBOUNDARYSTATE_FACTORY_HPP
2 #define VERTEXCFD_ELECTRICPOTENTIALBOUNDARYSTATE_FACTORY_HPP
3 
4 #include "induction_less_mhd_solver/boundary_conditions/VertexCFD_BoundaryState_ElectricCurrentDensityInsulating.hpp"
5 #include "induction_less_mhd_solver/boundary_conditions/VertexCFD_BoundaryState_ElectricPotentialFixed.hpp"
6 #include "induction_less_mhd_solver/boundary_conditions/VertexCFD_BoundaryState_ElectricPotentialInsulatingWall.hpp"
7 
8 #include <Panzer_Evaluator_WithBaseImpl.hpp>
9 
10 #include <Teuchos_ParameterList.hpp>
11 #include <Teuchos_RCP.hpp>
12 
13 namespace VertexCFD
14 {
15 namespace BoundaryCondition
16 {
17 //---------------------------------------------------------------------------//
18 template<class EvalType, class Traits, int NumSpaceDim>
20 {
21  public:
22  static Teuchos::RCP<PHX::Evaluator<Traits>>
23  create(const panzer::IntegrationRule& ir,
24  const Teuchos::ParameterList& bc_params,
25  const Teuchos::ParameterList& /*user_params*/)
26  {
27  constexpr int num_space_dim = NumSpaceDim;
28 
29  // Loop over boundary conditions
30  Teuchos::RCP<PHX::Evaluator<Traits>> state;
31  bool found_model = false;
32 
33  if (bc_params.isType<std::string>("Type"))
34  {
35  if (bc_params.get<std::string>("Type") == "Fixed")
36  {
37  state = Teuchos::rcp(
38  new ElectricPotentialFixed<EvalType, Traits>(ir, bc_params));
39  found_model = true;
40  }
41 
42  if (bc_params.get<std::string>("Type")
43  == "ElectricPotentialInsulatingWall")
44  {
45  state = Teuchos::rcp(
47  found_model = true;
48  }
49 
50  if (bc_params.get<std::string>("Type")
51  == "ElectricCurrentDensityInsulating")
52  {
53  state = Teuchos::rcp(
55  Traits,
56  num_space_dim>(ir));
57  found_model = true;
58  }
59  }
60 
61  if (!found_model)
62  {
63  std::string msg = "\n\nBoundary state "
64  + bc_params.get<std::string>("Type")
65  + " failed to build.\n";
66  msg += "The boundary conditions implemented in VertexCFD\n";
67  msg += "for the electric potential equation are:\n";
68  msg += "Fixed,\n";
69  msg += "ElectricCurrentDensityInsulating,\n";
70  msg += "ElectricPotentialInsulatingWall,\n";
71  msg += "\n";
72  throw std::runtime_error(msg);
73  }
74 
75  return state;
76  }
77 };
78 
79 //---------------------------------------------------------------------------//
80 
81 } // end namespace BoundaryCondition
82 } // end namespace VertexCFD
83 
84 #endif // end VERTEXCFD_ELECTRICPOTENTIALBOUNDARYSTATE_FACTORY_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::BoundaryCondition::ElectricPotentialInsulatingWall
Definition: VertexCFD_BoundaryState_ElectricPotentialInsulatingWall.hpp:23
VertexCFD::BoundaryCondition::ElectricCurrentDensityInsulating
Definition: VertexCFD_BoundaryState_ElectricCurrentDensityInsulating.hpp:23
VertexCFD::BoundaryCondition::ElectricPotentialBoundaryStateFactory
Definition: VertexCFD_ElectricPotentialBoundaryState_Factory.hpp:20
VertexCFD::BoundaryCondition::ElectricPotentialFixed
Definition: VertexCFD_BoundaryState_ElectricPotentialFixed.hpp:22