1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLESSTDIFFUSIVITYCOEFFICIENT_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLESSTDIFFUSIVITYCOEFFICIENT_IMPL_HPP
4 #include "utils/VertexCFD_Utils_SmoothMath.hpp"
6 #include <Panzer_HierarchicParallelism.hpp>
10 namespace ClosureModel
13 template<
class EvalType,
class Traits>
14 IncompressibleSSTDiffusivityCoefficient<EvalType, Traits>::
15 IncompressibleSSTDiffusivityCoefficient(
16 const panzer::IntegrationRule& ir,
17 const Teuchos::ParameterList& user_params)
18 : _nu_t(
"turbulent_eddy_viscosity", ir.dl_scalar)
19 , _sst_blending_function(
"sst_blending_function", ir.dl_scalar)
20 , _nu(
"kinematic_viscosity", ir.dl_scalar)
25 , _diffusivity_var_k(
"diffusivity_turb_kinetic_energy", ir.dl_scalar)
26 , _diffusivity_var_w(
"diffusivity_turb_specific_dissipation_rate",
30 if (user_params.isSublist(
"Turbulence Parameters"))
32 Teuchos::ParameterList turb_list
33 = user_params.sublist(
"Turbulence Parameters");
35 if (turb_list.isSublist(
"SST K-Omega Parameters"))
37 Teuchos::ParameterList sst_list
38 = turb_list.sublist(
"SST K-Omega Parameters");
40 if (sst_list.isType<
double>(
"sigma_k1"))
42 _sigma_k1 = sst_list.get<
double>(
"sigma_k1");
45 if (sst_list.isType<
double>(
"sigma_k2"))
47 _sigma_k2 = sst_list.get<
double>(
"sigma_k2");
50 if (sst_list.isType<
double>(
"sigma_w1"))
52 _sigma_w1 = sst_list.get<
double>(
"sigma_w1");
55 if (sst_list.isType<
double>(
"sigma_w2"))
57 _sigma_w2 = sst_list.get<
double>(
"sigma_w2");
63 this->addDependentField(_nu_t);
64 this->addDependentField(_sst_blending_function);
65 this->addDependentField(_nu);
68 this->addEvaluatedField(_diffusivity_var_k);
69 this->addEvaluatedField(_diffusivity_var_w);
72 this->setName(
"Incompressible SST Diffusivity Coefficient "
73 + std::to_string(ir.spatial_dimension) +
"D");
77 template<
class EvalType,
class Traits>
78 void IncompressibleSSTDiffusivityCoefficient<EvalType, Traits>::evaluateFields(
79 typename Traits::EvalData workset)
81 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
83 Kokkos::parallel_for(this->getName(), policy, *
this);
87 template<
class EvalType,
class Traits>
88 KOKKOS_INLINE_FUNCTION
void
89 IncompressibleSSTDiffusivityCoefficient<EvalType, Traits>::operator()(
90 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
92 const int cell = team.league_rank();
93 const int num_point = _diffusivity_var_k.extent(1);
96 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
97 _diffusivity_var_k(cell, point)
99 + (_sigma_k1 * _sst_blending_function(cell, point)
100 + _sigma_k2 * (1.0 - _sst_blending_function(cell, point)))
101 * _nu_t(cell, point);
102 _diffusivity_var_w(cell, point)
104 + (_sigma_w1 * _sst_blending_function(cell, point)
105 + _sigma_w2 * (1.0 - _sst_blending_function(cell, point)))
106 * _nu_t(cell, point);