1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLECONVECTIVEFLUX_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLECONVECTIVEFLUX_IMPL_HPP
4 #include "utils/VertexCFD_Utils_VectorField.hpp"
6 #include <Panzer_HierarchicParallelism.hpp>
7 #include <Teuchos_StandardParameterEntryValidators.hpp>
13 namespace ClosureModel
16 template<
class EvalType,
class Traits,
int NumSpaceDim>
17 IncompressibleConvectiveFlux<EvalType, Traits, NumSpaceDim>::
18 IncompressibleConvectiveFlux(
const panzer::IntegrationRule& ir,
19 const Teuchos::ParameterList& fluid_params,
20 const std::string& flux_prefix,
21 const std::string& field_prefix)
22 : _continuity_flux(flux_prefix +
"CONVECTIVE_FLUX_continuity", ir.dl_vector)
23 , _energy_flux(flux_prefix +
"CONVECTIVE_FLUX_energy", ir.dl_vector)
24 , _energy_source(
"NON_CONSERVATIVE_SOURCE_energy", ir.dl_scalar)
25 , _lagrange_pressure(field_prefix +
"lagrange_pressure", ir.dl_scalar)
26 , _rho(
"density", ir.dl_scalar)
27 , _cp(
"specific_heat_capacity", ir.dl_scalar)
28 , _temperature(field_prefix +
"temperature", ir.dl_scalar)
29 , _grad_temp(
"GRAD_temperature", ir.dl_vector)
30 , _beta(fluid_params.get<double>(
"Artificial compressibility"))
31 , _solve_temp(fluid_params.get<bool>(
"Build Temperature Equation"))
32 , _continuity_model(ConModel::AC)
35 if (fluid_params.isType<std::string>(
"Continuity Model"))
37 const auto type_validator = Teuchos::rcp(
38 new Teuchos::StringToIntegralParameterEntryValidator<ConModel>(
39 Teuchos::tuple<std::string>(
"AC",
"EDAC",
"EDACTempNC"),
"AC"));
40 _continuity_model = type_validator->getIntegralValue(
41 fluid_params.get<std::string>(
"Continuity Model"));
45 this->addEvaluatedField(_continuity_flux);
47 Utils::addEvaluatedVectorField(*
this, ir.dl_vector, _momentum_flux,
48 flux_prefix +
"CONVECTIVE_FLUX_"
53 if (_continuity_model == ConModel::EDACTempNC)
55 this->addEvaluatedField(_energy_source);
59 this->addEvaluatedField(_energy_flux);
64 Utils::addDependentVectorField(
65 *
this, ir.dl_scalar, _velocity, field_prefix +
"velocity_");
66 this->addDependentField(_lagrange_pressure);
67 this->addDependentField(_rho);
71 this->addDependentField(_cp);
72 this->addDependentField(_temperature);
73 if (_continuity_model == ConModel::EDACTempNC)
75 this->addDependentField(_grad_temp);
79 this->setName(
"Incompressible Convective Flux "
80 + std::to_string(num_space_dim) +
"D");
84 template<
class EvalType,
class Traits,
int NumSpaceDim>
85 void IncompressibleConvectiveFlux<EvalType, Traits, NumSpaceDim>::evaluateFields(
86 typename Traits::EvalData workset)
88 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
90 Kokkos::parallel_for(this->getName(), policy, *
this);
94 template<
class EvalType,
class Traits,
int NumSpaceDim>
95 KOKKOS_INLINE_FUNCTION
void
96 IncompressibleConvectiveFlux<EvalType, Traits, NumSpaceDim>::operator()(
97 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
99 const int cell = team.league_rank();
100 const int num_point = _continuity_flux.extent(1);
102 Kokkos::parallel_for(
103 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
104 if (_solve_temp && _continuity_model == ConModel::EDACTempNC)
105 _energy_source(cell, point) = 0.0;
107 for (
int dim = 0; dim < num_space_dim; ++dim)
109 const auto vel_dim = _velocity[dim](cell, point);
110 _continuity_flux(cell, point, dim) = _rho(cell, point)
113 if (_continuity_model != ConModel::AC)
115 _continuity_flux(cell, point, dim)
116 += _lagrange_pressure(cell, point) * vel_dim / _beta;
119 for (
int mom_dim = 0; mom_dim < num_space_dim; ++mom_dim)
121 _momentum_flux[mom_dim](cell, point, dim)
122 = _rho(cell, point) * vel_dim
123 * _velocity[mom_dim](cell, point);
126 _momentum_flux[mom_dim](cell, point, dim)
127 += _lagrange_pressure(cell, point);
133 if (_continuity_model == ConModel::EDACTempNC)
135 _energy_source(cell, point)
136 += _rho(cell, point) * _cp(cell, point)
137 * _grad_temp(cell, point, dim)
138 * _velocity[dim](cell, point);
142 _energy_flux(cell, point, dim)
143 = _rho(cell, point) * _cp(cell, point) * vel_dim
144 * _temperature(cell, point);
156 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLECONVECTIVEFLUX_IMPL_HPP