1 #ifndef VERTEXCFD_BOUNDARYSTATE_INCOMPRESSIBLEPRESSUREOUTFLOW_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYSTATE_INCOMPRESSIBLEPRESSUREOUTFLOW_IMPL_HPP
4 #include "utils/VertexCFD_Utils_SmoothMath.hpp"
5 #include "utils/VertexCFD_Utils_VectorField.hpp"
7 #include <Panzer_HierarchicParallelism.hpp>
11 namespace BoundaryCondition
14 template<
class EvalType,
class Traits,
int NumSpaceDim>
15 IncompressiblePressureOutflow<EvalType, Traits, NumSpaceDim>::
16 IncompressiblePressureOutflow(
const panzer::IntegrationRule& ir,
17 const Teuchos::ParameterList& fluid_params,
18 const Teuchos::ParameterList& bc_params,
20 : _boundary_lagrange_pressure(
"BOUNDARY_lagrange_pressure", ir.dl_scalar)
21 , _boundary_grad_lagrange_pressure(
"BOUNDARY_GRAD_lagrange_pressure",
23 , _boundary_temperature(
"BOUNDARY_temperature", ir.dl_scalar)
24 , _boundary_grad_temperature(
"BOUNDARY_GRAD_temperature", ir.dl_vector)
25 , _grad_lagrange_pressure(
"GRAD_lagrange_pressure", ir.dl_vector)
26 , _temperature(
"temperature", ir.dl_scalar)
27 , _grad_temperature(
"GRAD_temperature", ir.dl_vector)
28 , _solve_temp(fluid_params.get<bool>(
"Build Temperature Equation"))
30 , _p_back(bc_params.get<double>(
"Back Pressure"))
33 this->addEvaluatedField(_boundary_lagrange_pressure);
35 this->addEvaluatedField(_boundary_grad_lagrange_pressure);
38 this->addEvaluatedField(_boundary_temperature);
39 this->addEvaluatedField(_boundary_grad_temperature);
41 Utils::addEvaluatedVectorField(
42 *
this, ir.dl_scalar, _boundary_velocity,
"BOUNDARY_velocity_");
44 Utils::addEvaluatedVectorField(*
this,
46 _boundary_grad_velocity,
47 "BOUNDARY_GRAD_velocity_");
51 this->addDependentField(_grad_lagrange_pressure);
52 Utils::addDependentVectorField(*
this, ir.dl_scalar, _velocity,
"velocity_");
55 this->addDependentField(_temperature);
56 this->addDependentField(_grad_temperature);
59 Utils::addDependentVectorField(
60 *
this, ir.dl_vector, _grad_velocity,
"GRAD_velocity_");
62 this->setName(
"Boundary State Incompressible Pressure Outflow "
63 + std::to_string(num_space_dim) +
"D");
67 template<
class EvalType,
class Traits,
int NumSpaceDim>
68 void IncompressiblePressureOutflow<EvalType, Traits, NumSpaceDim>::evaluateFields(
69 typename Traits::EvalData workset)
71 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
73 Kokkos::parallel_for(this->getName(), policy, *
this);
77 template<
class EvalType,
class Traits,
int NumSpaceDim>
78 KOKKOS_INLINE_FUNCTION
void
79 IncompressiblePressureOutflow<EvalType, Traits, NumSpaceDim>::operator()(
80 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
82 const int cell = team.league_rank();
83 const int num_point = _boundary_velocity[0].extent(1);
84 const int num_grad_dim = _boundary_grad_velocity[0].extent(2);
87 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
89 for (
int vel_dim = 0; vel_dim < num_space_dim; ++vel_dim)
91 _boundary_velocity[vel_dim](cell, point)
92 = _velocity[vel_dim](cell, point);
96 _boundary_lagrange_pressure(cell, point) = _p_back;
100 _boundary_temperature(cell, point) = _temperature(cell, point);
103 for (
int d = 0; d < num_grad_dim; ++d)
107 _boundary_grad_lagrange_pressure(cell, point, d)
108 = _grad_lagrange_pressure(cell, point, d);
113 _boundary_grad_temperature(cell, point, d)
114 = _grad_temperature(cell, point, d);
117 for (
int vel_dim = 0; vel_dim < num_space_dim; ++vel_dim)
119 _boundary_grad_velocity[vel_dim](cell, point, d)
120 = _grad_velocity[vel_dim](cell, point, d);
131 #endif // VERTEXCFD_BOUNDARYSTATE_INCOMPRESSIBLEPRESSUREOUTFLOW_IMPL_HPP