VertexCFD  0.0-dev
VertexCFD_BCStrategy_ConductionBoundaryFlux_impl.hpp
1 #ifndef VERTEXCFD_BOUNDARYCONDITION_CONDUCTIONBOUNDARYFLUX_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYCONDITION_CONDUCTIONBOUNDARYFLUX_IMPL_HPP
3 
4 #include "boundary_conditions/VertexCFD_BoundaryState_ViscousGradient.hpp"
5 #include "boundary_conditions/VertexCFD_BoundaryState_ViscousPenaltyParameter.hpp"
6 #include "boundary_conditions/VertexCFD_Integrator_BoundaryGradBasisDotVector.hpp"
7 
8 #include "conduction/boundary_conditions/VertexCFD_ConductionBoundaryState_Factory.hpp"
9 #include "conduction/closure_models/VertexCFD_Closure_ConductionFlux.hpp"
10 
11 #include <Panzer_DOF.hpp>
12 #include <Panzer_DOFGradient.hpp>
13 #include <Panzer_DotProduct.hpp>
14 #include <Panzer_Integrator_BasisTimesScalar.hpp>
15 #include <Panzer_Normals.hpp>
16 #include <Panzer_Sum.hpp>
17 
18 #include <Phalanx_DataLayout.hpp>
19 #include <Phalanx_DataLayout_MDALayout.hpp>
20 #include <Phalanx_MDField.hpp>
21 
22 #include <iostream>
23 #include <map>
24 #include <string>
25 #include <vector>
26 
27 namespace VertexCFD
28 {
29 namespace BoundaryCondition
30 {
31 //---------------------------------------------------------------------------//
32 template<class EvalType, int NumSpaceDim>
34  const panzer::BC& bc, const Teuchos::RCP<panzer::GlobalData>& global_data)
35  : BoundaryFluxBase<EvalType, NumSpaceDim>(bc, global_data)
36 {
37 }
38 
39 //---------------------------------------------------------------------------//
40 template<class EvalType, int NumSpaceDim>
42  const panzer::PhysicsBlock& side_pb,
43  const Teuchos::ParameterList& )
44 {
45  // Initialize equation names and variable names for conduction equation
46  _equ_dof_cond_pair.insert({"energy", "temperature"});
47 
48  // Initialize parent class variables (only needed with one set of
49  // equations)
50  this->initialize(side_pb, _equ_dof_cond_pair);
51 }
52 
53 //---------------------------------------------------------------------------//
54 template<class EvalType, int NumSpaceDim>
56  PHX::FieldManager<panzer::Traits>& fm,
57  const panzer::PhysicsBlock& side_pb,
58  const panzer::ClosureModelFactory_TemplateManager<panzer::Traits>&,
59  const Teuchos::ParameterList& models,
60  const Teuchos::ParameterList& /*user_data*/) const
61 {
62  // Create boundary state operators for conduction equation
63  // Get bc sublist
64  const Teuchos::ParameterList bc_params = *(this->m_bc.params());
65 
66  // Get model id from boundary conditions or physics block
67  std::string model_id = "";
68  Teuchos::ParameterList side_pb_list;
69  this->getModelID(bc_params, side_pb, model_id, side_pb_list);
70 
71  // Map to store residuals for each equation listed in `_equ_dof_cond_pair`
72  std::unordered_map<std::string, std::vector<std::string>> eq_vct_map;
73 
74  // Get integration rule for closure models
75  const auto ir = this->integrationRule();
76 
77  // Create degree of freedom and gradients for conduction equation
78  for (auto& pair : _equ_dof_cond_pair)
79  {
80  this->registerDOFsGradient(fm, side_pb, pair.second);
81  }
82 
83  // Register normals
84  this->registerSideNormals(fm, side_pb);
85 
86  // Register conduction boundary condition and closure models
87  const auto closure_model = models.sublist(model_id);
88  const auto boundary_state_op
90  panzer::Traits,
91  num_space_dim>::create(*ir,
92  bc_params,
93  closure_model);
94 
95  for (std::size_t i = 0; i < boundary_state_op.size(); ++i)
96  {
97  this->template registerEvaluator<EvalType>(fm, boundary_state_op[i]);
98  }
99 
100  // Second-order flux //
101 
102  // Register penalty and viscous gradient operators for each equation.
103  for (auto& pair : _equ_dof_cond_pair)
104  {
105  this->registerPenaltyAndViscousGradientOperator(
106  pair, fm, side_pb, bc_params);
107  }
108 
109  // Create boundary fluxes to be used with the penalty method
110  for (auto& pair : this->bnd_prefix)
111  {
112  // Prefix names
113  const std::string flux_prefix = pair.first;
114  const std::string gradient_prefix = pair.second;
115 
116  auto viscous_flux_op = Teuchos::rcp(
118  *ir, flux_prefix, gradient_prefix));
119  this->template registerEvaluator<EvalType>(fm, viscous_flux_op);
120  }
121 
122  // Create viscous flux integrals.
123  for (auto& pair : _equ_dof_cond_pair)
124  {
125  this->registerViscousTypeFluxOperator(
126  pair, eq_vct_map, "CONDUCTION", fm, side_pb, 1.0);
127  }
128 
129  // Compose total residual for conduction equation
130  for (auto& pair : _equ_dof_cond_pair)
131  {
132  this->registerResidual(pair, eq_vct_map, fm, side_pb);
133  }
134 }
135 
136 //---------------------------------------------------------------------------//
137 template<class EvalType, int NumSpaceDim>
139  PHX::FieldManager<panzer::Traits>& fm,
140  const panzer::PhysicsBlock& side_pb,
141  const panzer::LinearObjFactory<panzer::Traits>& lof,
142  const Teuchos::ParameterList& /*user_data*/) const
143 {
144  for (auto& pair : _equ_dof_cond_pair)
145  {
146  this->registerScatterOperator(pair, fm, side_pb, lof);
147  }
148 }
149 
150 //---------------------------------------------------------------------------//
151 template<class EvalType, int NumSpaceDim>
154  PHX::FieldManager<panzer::Traits>& fm,
155  const panzer::PhysicsBlock& side_pb,
156  const panzer::LinearObjFactory<panzer::Traits>& lof,
157  const Teuchos::ParameterList& user_data) const
158 {
159  side_pb.buildAndRegisterGatherAndOrientationEvaluators(fm, lof, user_data);
160 }
161 
162 //---------------------------------------------------------------------------//
163 template<class EvalType, int NumSpaceDim>
165  typename panzer::Traits::SetupData, PHX::FieldManager<panzer::Traits>&)
166 {
167 }
168 
169 //---------------------------------------------------------------------------//
170 template<class EvalType, int NumSpaceDim>
172  typename panzer::Traits::EvalData)
173 {
174 }
175 
176 //---------------------------------------------------------------------------//
177 
178 } // end namespace BoundaryCondition
179 } // end namespace VertexCFD
180 
181 #endif // end VERTEXCFD_BOUNDARYCONDITION_CONDUCTIONBOUNDARYFLUX_IMPL_HPP
VertexCFD::BoundaryCondition::ConductionBoundaryFlux::buildAndRegisterEvaluators
void buildAndRegisterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const Teuchos::ParameterList &models, const Teuchos::ParameterList &user_data) const override
Build and register field evaluators for the conduction flux.
Definition: VertexCFD_BCStrategy_ConductionBoundaryFlux_impl.hpp:55
VertexCFD::BoundaryCondition::BoundaryFluxBase
Definition: VertexCFD_BCStrategy_BoundaryFluxBase.hpp:25
VertexCFD::BoundaryCondition::ConductionBoundaryFlux::buildAndRegisterGatherAndOrientationEvaluators
void buildAndRegisterGatherAndOrientationEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const override
Build and register gather and orientation evaluators.
Definition: VertexCFD_BCStrategy_ConductionBoundaryFlux_impl.hpp:153
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23
VertexCFD::BoundaryCondition::ConductionBoundaryFlux::evaluateFields
void evaluateFields(typename panzer::Traits::EvalData d) override
Evaluate the conduction flux on the side set.
Definition: VertexCFD_BCStrategy_ConductionBoundaryFlux_impl.hpp:171
VertexCFD::BoundaryCondition::ConductionBoundaryFlux::postRegistrationSetup
void postRegistrationSetup(typename panzer::Traits::SetupData d, PHX::FieldManager< panzer::Traits > &vm) override
Perform post‑registration setup.
Definition: VertexCFD_BCStrategy_ConductionBoundaryFlux_impl.hpp:164
VertexCFD::BoundaryCondition::ConductionBoundaryStateFactory
Factory for creating boundary‑state evaluators for the conduction equation.
Definition: VertexCFD_ConductionBoundaryState_Factory.hpp:39
VertexCFD::BoundaryCondition::ConductionBoundaryFlux::buildAndRegisterScatterEvaluators
void buildAndRegisterScatterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const override
Build and register scatter evaluators for the boundary flux.
Definition: VertexCFD_BCStrategy_ConductionBoundaryFlux_impl.hpp:138
VertexCFD::ClosureModel::ConductionFlux
Evaluator that computes the conductive heat flux for a given temperature gradient and thermal conduc...
Definition: VertexCFD_Closure_ConductionFlux.hpp:37
VertexCFD::BoundaryCondition::ConductionBoundaryFlux::setup
void setup(const panzer::PhysicsBlock &side_pb, const Teuchos::ParameterList &user_data) override
Set up the evaluator using side physics block information.
Definition: VertexCFD_BCStrategy_ConductionBoundaryFlux_impl.hpp:41
VertexCFD::BoundaryCondition::ConductionBoundaryFlux::ConductionBoundaryFlux
ConductionBoundaryFlux(const panzer::BC &bc, const Teuchos::RCP< panzer::GlobalData > &global_data)
Constructor.
Definition: VertexCFD_BCStrategy_ConductionBoundaryFlux_impl.hpp:33