1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLEKOMEGADIFFUSIVITYCOEFFICIENT_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLEKOMEGADIFFUSIVITYCOEFFICIENT_IMPL_HPP
4 #include "utils/VertexCFD_Utils_SmoothMath.hpp"
6 #include <Panzer_HierarchicParallelism.hpp>
10 namespace ClosureModel
13 template<
class EvalType,
class Traits>
14 IncompressibleKOmegaDiffusivityCoefficient<EvalType, Traits>::
15 IncompressibleKOmegaDiffusivityCoefficient(
16 const panzer::IntegrationRule& ir,
17 const Teuchos::ParameterList& user_params)
18 : _turb_kinetic_energy(
"turb_kinetic_energy", ir.dl_scalar)
19 , _turb_specific_dissipation_rate(
"turb_specific_dissipation_rate",
21 , _nu(
"kinematic_viscosity", ir.dl_scalar)
24 , _diffusivity_var_k(
"diffusivity_turb_kinetic_energy", ir.dl_scalar)
25 , _diffusivity_var_w(
"diffusivity_turb_specific_dissipation_rate",
29 if (user_params.isSublist(
"Turbulence Parameters"))
31 const Teuchos::ParameterList turb_list
32 = user_params.sublist(
"Turbulence Parameters");
34 if (turb_list.isSublist(
"K-Omega Parameters"))
36 const Teuchos::ParameterList k_w_list
37 = turb_list.sublist(
"K-Omega Parameters");
39 if (k_w_list.isType<
double>(
"sigma_w"))
41 _sigma_w = k_w_list.get<
double>(
"sigma_w");
44 if (k_w_list.isType<
double>(
"sigma_k"))
46 _sigma_k = k_w_list.get<
double>(
"sigma_k");
52 this->addDependentField(_turb_kinetic_energy);
53 this->addDependentField(_turb_specific_dissipation_rate);
54 this->addDependentField(_nu);
57 this->addEvaluatedField(_diffusivity_var_k);
58 this->addEvaluatedField(_diffusivity_var_w);
61 this->setName(
"K-Omega Incompressible Diffusivity Coefficient "
62 + std::to_string(ir.spatial_dimension) +
"D");
66 template<
class EvalType,
class Traits>
67 void IncompressibleKOmegaDiffusivityCoefficient<EvalType, Traits>::evaluateFields(
68 typename Traits::EvalData workset)
70 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
72 Kokkos::parallel_for(this->getName(), policy, *
this);
76 template<
class EvalType,
class Traits>
77 KOKKOS_INLINE_FUNCTION
void
78 IncompressibleKOmegaDiffusivityCoefficient<EvalType, Traits>::operator()(
79 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
81 const int cell = team.league_rank();
82 const int num_point = _diffusivity_var_k.extent(1);
83 const double k_tol = 1e-20;
84 const double w_tol = 1e-10;
87 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
88 const scalar_type turb_ratio
89 = SmoothMath::max(_turb_kinetic_energy(cell, point), k_tol, 0.0)
91 _turb_specific_dissipation_rate(cell, point), w_tol, 0.0);
92 _diffusivity_var_k(cell, point) = _nu(cell, point)
93 + _sigma_k * turb_ratio;
94 _diffusivity_var_w(cell, point) = _nu(cell, point)
95 + _sigma_w * turb_ratio;