1 #ifndef VERTEXCFD_BOUNDARYCONDITION_SOLIDELECTRICBOUNDARYFLUX_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYCONDITION_SOLIDELECTRICBOUNDARYFLUX_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 "induction_less_mhd_solver/boundary_conditions/VertexCFD_SolidElectricBoundaryState_Factory.hpp"
9 #include "induction_less_mhd_solver/closure_models/VertexCFD_Closure_SolidElectricPotentialDiffusionFlux.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>
28 namespace BoundaryCondition
31 template<
class EvalType,
int NumSpaceDim>
32 SolidElectricBoundaryFlux<EvalType, NumSpaceDim>::SolidElectricBoundaryFlux(
33 const panzer::BC& bc,
const Teuchos::RCP<panzer::GlobalData>& global_data)
34 : BoundaryFluxBase<EvalType, NumSpaceDim>(bc, global_data)
39 template<
class EvalType,
int NumSpaceDim>
41 const panzer::PhysicsBlock& side_pb,
42 const Teuchos::ParameterList& )
46 _equ_dof_cond_pair.insert(
47 {
"electric_potential_equation",
"electric_potential"});
51 this->initialize(side_pb, _equ_dof_cond_pair);
55 template<
class EvalType,
int NumSpaceDim>
57 PHX::FieldManager<panzer::Traits>& fm,
58 const panzer::PhysicsBlock& side_pb,
59 const panzer::ClosureModelFactory_TemplateManager<panzer::Traits>&,
60 const Teuchos::ParameterList& models,
61 const Teuchos::ParameterList& user_data)
const
65 const auto bc_params = *(this->m_bc.params());
69 std::string model_id =
"";
70 Teuchos::ParameterList side_pb_list;
71 this->getModelID(bc_params, side_pb, model_id, side_pb_list);
75 std::unordered_map<std::string, std::vector<std::string>> eq_vct_map;
78 const auto ir = this->integrationRule();
82 for (
auto& pair : _equ_dof_cond_pair)
84 this->registerDOFsGradient(fm, side_pb, pair.second);
88 this->registerSideNormals(fm, side_pb);
92 const auto closure_model = models.sublist(model_id);
93 const auto boundary_state_op
94 = SolidElectricBoundaryStateFactory<EvalType,
96 num_space_dim>::create(*ir,
100 for (std::size_t i = 0; i < boundary_state_op.size(); ++i)
102 this->
template registerEvaluator<EvalType>(fm, boundary_state_op[i]);
109 for (
auto& pair : _equ_dof_cond_pair)
111 this->registerPenaltyAndViscousGradientOperator(
112 pair, fm, side_pb, user_data);
116 for (
auto& pair : this->bnd_prefix)
119 const std::string flux_prefix = pair.first;
120 const std::string gradient_prefix = pair.second;
122 auto viscous_flux_op = Teuchos::rcp(
123 new ClosureModel::SolidElectricPotentialDiffusionFlux<EvalType,
125 *ir, flux_prefix, gradient_prefix));
126 this->
template registerEvaluator<EvalType>(fm, viscous_flux_op);
130 for (
auto& pair : _equ_dof_cond_pair)
132 this->registerViscousTypeFluxOperator(
133 pair, eq_vct_map,
"ELECTRIC_POTENTIAL", fm, side_pb, 1.0);
137 for (
auto& pair : _equ_dof_cond_pair)
139 this->registerResidual(pair, eq_vct_map, fm, side_pb);
144 template<
class EvalType,
int NumSpaceDim>
145 void SolidElectricBoundaryFlux<EvalType, NumSpaceDim>::buildAndRegisterScatterEvaluators(
146 PHX::FieldManager<panzer::Traits>& fm,
147 const panzer::PhysicsBlock& side_pb,
148 const panzer::LinearObjFactory<panzer::Traits>& lof,
149 const Teuchos::ParameterList& )
const
151 for (
auto& pair : _equ_dof_cond_pair)
153 this->registerScatterOperator(pair, fm, side_pb, lof);
158 template<
class EvalType,
int NumSpaceDim>
159 void SolidElectricBoundaryFlux<EvalType, NumSpaceDim>::
160 buildAndRegisterGatherAndOrientationEvaluators(
161 PHX::FieldManager<panzer::Traits>& fm,
162 const panzer::PhysicsBlock& side_pb,
163 const panzer::LinearObjFactory<panzer::Traits>& lof,
164 const Teuchos::ParameterList& user_data)
const
166 side_pb.buildAndRegisterGatherAndOrientationEvaluators(fm, lof, user_data);
170 template<
class EvalType,
int NumSpaceDim>
171 void SolidElectricBoundaryFlux<EvalType, NumSpaceDim>::postRegistrationSetup(
172 typename panzer::Traits::SetupData, PHX::FieldManager<panzer::Traits>&)
177 template<
class EvalType,
int NumSpaceDim>
178 void SolidElectricBoundaryFlux<EvalType, NumSpaceDim>::evaluateFields(
179 typename panzer::Traits::EvalData)
188 #endif // end VERTEXCFD_BOUNDARYCONDITION_SOLIDELECTRICBOUNDARYFLUX_IMPL_HPP