VertexCFD  0.0-dev
VertexCFD_Closure_IncompressibleKOmegaDiffusivityCoefficient_impl.hpp
1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLEKOMEGADIFFUSIVITYCOEFFICIENT_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLEKOMEGADIFFUSIVITYCOEFFICIENT_IMPL_HPP
3 
4 #include "utils/VertexCFD_Utils_SmoothMath.hpp"
5 
6 #include <Panzer_HierarchicParallelism.hpp>
7 
8 namespace VertexCFD
9 {
10 namespace ClosureModel
11 {
12 //---------------------------------------------------------------------------//
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",
20  ir.dl_scalar)
21  , _nu("kinematic_viscosity", ir.dl_scalar)
22  , _sigma_k(0.6)
23  , _sigma_w(0.5)
24  , _diffusivity_var_k("diffusivity_turb_kinetic_energy", ir.dl_scalar)
25  , _diffusivity_var_w("diffusivity_turb_specific_dissipation_rate",
26  ir.dl_scalar)
27 {
28  // Check for user-defined coefficients or parameters
29  if (user_params.isSublist("Turbulence Parameters"))
30  {
31  const Teuchos::ParameterList turb_list
32  = user_params.sublist("Turbulence Parameters");
33 
34  if (turb_list.isSublist("K-Omega Parameters"))
35  {
36  const Teuchos::ParameterList k_w_list
37  = turb_list.sublist("K-Omega Parameters");
38 
39  if (k_w_list.isType<double>("sigma_w"))
40  {
41  _sigma_w = k_w_list.get<double>("sigma_w");
42  }
43 
44  if (k_w_list.isType<double>("sigma_k"))
45  {
46  _sigma_k = k_w_list.get<double>("sigma_k");
47  }
48  }
49  }
50 
51  // Add dependent fields
52  this->addDependentField(_turb_kinetic_energy);
53  this->addDependentField(_turb_specific_dissipation_rate);
54  this->addDependentField(_nu);
55 
56  // Add evaluated fields
57  this->addEvaluatedField(_diffusivity_var_k);
58  this->addEvaluatedField(_diffusivity_var_w);
59 
60  // Closure model name
61  this->setName("K-Omega Incompressible Diffusivity Coefficient "
62  + std::to_string(ir.spatial_dimension) + "D");
63 }
64 
65 //---------------------------------------------------------------------------//
66 template<class EvalType, class Traits>
67 void IncompressibleKOmegaDiffusivityCoefficient<EvalType, Traits>::evaluateFields(
68  typename Traits::EvalData workset)
69 {
70  auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
71  workset.num_cells);
72  Kokkos::parallel_for(this->getName(), policy, *this);
73 }
74 
75 //---------------------------------------------------------------------------//
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
80 {
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;
85 
86  Kokkos::parallel_for(
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)
90  / SmoothMath::max(
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;
96  });
97 }
98 
99 //---------------------------------------------------------------------------//
100 
101 } // end namespace ClosureModel
102 } // end namespace VertexCFD
103 
104 #endif // end
105  // VERTEXCFD_CLOSURE_INCOMPRESSIBLEKOMEGADIFFUSIVITYCOEFFICIENT_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23