1 #ifndef VERTEXCFD_BOUNDARYCONDITION_CONDUCTIONBOUNDARYFLUX_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYCONDITION_CONDUCTIONBOUNDARYFLUX_IMPL_HPP
4 #include "boundary_conditions/VertexCFD_BoundaryState_ViscousGradient.hpp"
5 #include "boundary_conditions/VertexCFD_BoundaryState_ViscousPenaltyParameter.hpp"
6 #include "boundary_conditions/VertexCFD_Integrator_BoundaryGradBasisDotVector.hpp"
8 #include "conduction/boundary_conditions/VertexCFD_ConductionBoundaryState_Factory.hpp"
9 #include "conduction/closure_models/VertexCFD_Closure_ConductionFlux.hpp"
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>
18 #include <Phalanx_DataLayout.hpp>
19 #include <Phalanx_DataLayout_MDALayout.hpp>
20 #include <Phalanx_MDField.hpp>
29 namespace BoundaryCondition
32 template<
class EvalType,
int NumSpaceDim>
34 const panzer::BC& bc,
const Teuchos::RCP<panzer::GlobalData>& global_data)
40 template<
class EvalType,
int NumSpaceDim>
42 const panzer::PhysicsBlock& side_pb,
43 const Teuchos::ParameterList& )
46 _equ_dof_cond_pair.insert({
"energy",
"temperature"});
50 this->initialize(side_pb, _equ_dof_cond_pair);
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& )
const
64 const Teuchos::ParameterList bc_params = *(this->m_bc.params());
67 std::string model_id =
"";
68 Teuchos::ParameterList side_pb_list;
69 this->getModelID(bc_params, side_pb, model_id, side_pb_list);
72 std::unordered_map<std::string, std::vector<std::string>> eq_vct_map;
75 const auto ir = this->integrationRule();
78 for (
auto& pair : _equ_dof_cond_pair)
80 this->registerDOFsGradient(fm, side_pb, pair.second);
84 this->registerSideNormals(fm, side_pb);
87 const auto closure_model = models.sublist(model_id);
88 const auto boundary_state_op
91 num_space_dim>::create(*ir,
95 for (std::size_t i = 0; i < boundary_state_op.size(); ++i)
97 this->
template registerEvaluator<EvalType>(fm, boundary_state_op[i]);
103 for (
auto& pair : _equ_dof_cond_pair)
105 this->registerPenaltyAndViscousGradientOperator(
106 pair, fm, side_pb, bc_params);
110 for (
auto& pair : this->bnd_prefix)
113 const std::string flux_prefix = pair.first;
114 const std::string gradient_prefix = pair.second;
116 auto viscous_flux_op = Teuchos::rcp(
118 *ir, flux_prefix, gradient_prefix));
119 this->
template registerEvaluator<EvalType>(fm, viscous_flux_op);
123 for (
auto& pair : _equ_dof_cond_pair)
125 this->registerViscousTypeFluxOperator(
126 pair, eq_vct_map,
"CONDUCTION", fm, side_pb, 1.0);
130 for (
auto& pair : _equ_dof_cond_pair)
132 this->registerResidual(pair, eq_vct_map, fm, side_pb);
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& )
const
144 for (
auto& pair : _equ_dof_cond_pair)
146 this->registerScatterOperator(pair, fm, side_pb, lof);
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
159 side_pb.buildAndRegisterGatherAndOrientationEvaluators(fm, lof, user_data);
163 template<
class EvalType,
int NumSpaceDim>
165 typename panzer::Traits::SetupData, PHX::FieldManager<panzer::Traits>&)
170 template<
class EvalType,
int NumSpaceDim>
172 typename panzer::Traits::EvalData)
181 #endif // end VERTEXCFD_BOUNDARYCONDITION_CONDUCTIONBOUNDARYFLUX_IMPL_HPP