VertexCFD  0.0-dev
VertexCFD_BCStrategy_BoundaryFluxBase.hpp
1 #ifndef VERTEXCFD_BOUNDARYCONDITION_BOUNDARYFLUXBASE_HPP
2 #define VERTEXCFD_BOUNDARYCONDITION_BOUNDARYFLUXBASE_HPP
3 
4 #include <Panzer_BCStrategy.hpp>
5 #include <Panzer_Evaluator_WithBaseImpl.hpp>
6 #include <Panzer_GlobalDataAcceptor_DefaultImpl.hpp>
7 #include <Panzer_PhysicsBlock.hpp>
8 #include <Panzer_Traits.hpp>
9 
10 #include <Phalanx_Evaluator_WithBaseImpl.hpp>
11 #include <Phalanx_FieldManager.hpp>
12 #include <Phalanx_MDField.hpp>
13 
14 #include <Teuchos_RCP.hpp>
15 
16 namespace VertexCFD
17 {
18 namespace BoundaryCondition
19 {
20 //---------------------------------------------------------------------------//
21 template<class EvalType, int NumSpaceDim>
22 class BoundaryFluxBase : public panzer::BCStrategy<EvalType>,
23  public panzer::GlobalDataAcceptorDefaultImpl,
24  public panzer::EvaluatorWithBaseImpl<panzer::Traits>
25 {
26  public:
27  // Space dimension
28  static constexpr int num_space_dim = NumSpaceDim;
29 
30  BoundaryFluxBase(const panzer::BC& bc,
31  const Teuchos::RCP<panzer::GlobalData>& global_data);
32 
33  virtual void setup(const panzer::PhysicsBlock& side_pb,
34  const Teuchos::ParameterList& user_data)
35  = 0;
36 
37  virtual void buildAndRegisterEvaluators(
38  PHX::FieldManager<panzer::Traits>& fm,
39  const panzer::PhysicsBlock& side_pb,
40  const panzer::ClosureModelFactory_TemplateManager<panzer::Traits>& factory,
41  const Teuchos::ParameterList& models,
42  const Teuchos::ParameterList& user_data) const
43  = 0;
44 
45  virtual void buildAndRegisterScatterEvaluators(
46  PHX::FieldManager<panzer::Traits>& fm,
47  const panzer::PhysicsBlock& side_pb,
48  const panzer::LinearObjFactory<panzer::Traits>& lof,
49  const Teuchos::ParameterList& user_data) const
50  = 0;
51 
52  virtual void buildAndRegisterGatherAndOrientationEvaluators(
53  PHX::FieldManager<panzer::Traits>& fm,
54  const panzer::PhysicsBlock& side_pb,
55  const panzer::LinearObjFactory<panzer::Traits>& lof,
56  const Teuchos::ParameterList& user_data) const
57  = 0;
58 
59  virtual void postRegistrationSetup(typename panzer::Traits::SetupData d,
60  PHX::FieldManager<panzer::Traits>& vm)
61  = 0;
62 
63  virtual void evaluateFields(typename panzer::Traits::EvalData d) = 0;
64 
65  // Local members
66  void initialize(const panzer::PhysicsBlock& side_pb,
67  std::unordered_map<std::string, std::string>& dof_eq_map);
68 
69  void getModelID(const Teuchos::ParameterList& bc_params,
70  const panzer::PhysicsBlock& side_pb,
71  std::string& model_id,
72  Teuchos::ParameterList& side_pb_list) const;
73 
74  auto getBasisIRLayout(const panzer::PhysicsBlock& side_pb,
75  const std::string& dof_name) const;
76 
77  void registerDOFsGradient(PHX::FieldManager<panzer::Traits>& fm,
78  const panzer::PhysicsBlock& side_pb,
79  const std::string& dof_name) const;
80 
81  void registerSideNormals(PHX::FieldManager<panzer::Traits>& fm,
82  const panzer::PhysicsBlock& side_pb) const;
83 
84  void registerConvectionTypeFluxOperator(
85  std::pair<const std::string, std::string> dof_eq_pair,
86  std::unordered_map<std::string, std::vector<std::string>>& eq_vct_map,
87  const std::string& closure_name,
88  PHX::FieldManager<panzer::Traits>& fm,
89  const panzer::PhysicsBlock& side_pb,
90  const double& multiplier) const;
91 
92  void registerPenaltyAndViscousGradientOperator(
93  std::pair<const std::string, std::string> dof_eq_pair,
94  PHX::FieldManager<panzer::Traits>& fm,
95  const panzer::PhysicsBlock& side_pb,
96  const Teuchos::ParameterList& bc_params) const;
97 
98  void registerViscousTypeFluxOperator(
99  std::pair<const std::string, std::string> dof_eq_pair,
100  std::unordered_map<std::string, std::vector<std::string>>& eq_vct_map,
101  const std::string closure_name,
102  PHX::FieldManager<panzer::Traits>& fm,
103  const panzer::PhysicsBlock& side_pb,
104  const double& multiplier) const;
105 
106  void registerResidual(
107  std::pair<const std::string, std::string> dof_eq_pair,
108  std::unordered_map<std::string, std::vector<std::string>>& eq_vct_map,
109  PHX::FieldManager<panzer::Traits>& fm,
110  const panzer::PhysicsBlock& side_pb) const;
111 
113  std::pair<const std::string, std::string> dof_eq_pair,
114  PHX::FieldManager<panzer::Traits>& fm,
115  const panzer::PhysicsBlock& side_pb,
116  const panzer::LinearObjFactory<panzer::Traits>& lof) const;
117 
118  auto integrationRule() const { return _ir; }
119 
120  protected:
121  std::string _model_id;
122  Teuchos::ParameterList _side_pb_list;
123  Teuchos::ParameterList _bc_params;
124  std::unordered_map<std::string, std::string> bnd_prefix;
125  std::unordered_map<std::string, Teuchos::RCP<panzer::PureBasis>>
126  _dof_basis_pair;
127 
128  private:
129  Teuchos::RCP<panzer::IntegrationRule> _ir;
130 };
131 
132 //---------------------------------------------------------------------------//
133 
134 } // end namespace BoundaryCondition
135 } // end namespace VertexCFD
136 
137 #endif // end VERTEXCFD_BOUNDARYCONDITION_BOUNDARYFLUXBASE_HPP
VertexCFD::BoundaryCondition::BoundaryFluxBase::initialize
void initialize(const panzer::PhysicsBlock &side_pb, std::unordered_map< std::string, std::string > &dof_eq_map)
Definition: VertexCFD_BCStrategy_BoundaryFluxBase_impl.hpp:43
VertexCFD::BoundaryCondition::BoundaryFluxBase
Definition: VertexCFD_BCStrategy_BoundaryFluxBase.hpp:25
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::BoundaryCondition::BoundaryFluxBase::registerScatterOperator
void registerScatterOperator(std::pair< const std::string, std::string > dof_eq_pair, PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const panzer::LinearObjFactory< panzer::Traits > &lof) const
Definition: VertexCFD_BCStrategy_BoundaryFluxBase_impl.hpp:369
VertexCFD::BoundaryCondition::BoundaryFluxBase::getBasisIRLayout
auto getBasisIRLayout(const panzer::PhysicsBlock &side_pb, const std::string &dof_name) const
Definition: VertexCFD_BCStrategy_BoundaryFluxBase_impl.hpp:117