VertexCFD  0.0-dev
VertexCFD_Closure_IncompressibleSSTDiffusivityCoefficient_impl.hpp
1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLESSTDIFFUSIVITYCOEFFICIENT_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLESSTDIFFUSIVITYCOEFFICIENT_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 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)
21  , _sigma_k1(0.85)
22  , _sigma_k2(1.0)
23  , _sigma_w1(0.5)
24  , _sigma_w2(0.856)
25  , _diffusivity_var_k("diffusivity_turb_kinetic_energy", ir.dl_scalar)
26  , _diffusivity_var_w("diffusivity_turb_specific_dissipation_rate",
27  ir.dl_scalar)
28 {
29  // Check for user-defined coefficients or parameters
30  if (user_params.isSublist("Turbulence Parameters"))
31  {
32  Teuchos::ParameterList turb_list
33  = user_params.sublist("Turbulence Parameters");
34 
35  if (turb_list.isSublist("SST K-Omega Parameters"))
36  {
37  Teuchos::ParameterList sst_list
38  = turb_list.sublist("SST K-Omega Parameters");
39 
40  if (sst_list.isType<double>("sigma_k1"))
41  {
42  _sigma_k1 = sst_list.get<double>("sigma_k1");
43  }
44 
45  if (sst_list.isType<double>("sigma_k2"))
46  {
47  _sigma_k2 = sst_list.get<double>("sigma_k2");
48  }
49 
50  if (sst_list.isType<double>("sigma_w1"))
51  {
52  _sigma_w1 = sst_list.get<double>("sigma_w1");
53  }
54 
55  if (sst_list.isType<double>("sigma_w2"))
56  {
57  _sigma_w2 = sst_list.get<double>("sigma_w2");
58  }
59  }
60  }
61 
62  // Add dependent fields
63  this->addDependentField(_nu_t);
64  this->addDependentField(_sst_blending_function);
65  this->addDependentField(_nu);
66 
67  // Add evaluated fields
68  this->addEvaluatedField(_diffusivity_var_k);
69  this->addEvaluatedField(_diffusivity_var_w);
70 
71  // Closure model name
72  this->setName("Incompressible SST Diffusivity Coefficient "
73  + std::to_string(ir.spatial_dimension) + "D");
74 }
75 
76 //---------------------------------------------------------------------------//
77 template<class EvalType, class Traits>
78 void IncompressibleSSTDiffusivityCoefficient<EvalType, Traits>::evaluateFields(
79  typename Traits::EvalData workset)
80 {
81  auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
82  workset.num_cells);
83  Kokkos::parallel_for(this->getName(), policy, *this);
84 }
85 
86 //---------------------------------------------------------------------------//
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
91 {
92  const int cell = team.league_rank();
93  const int num_point = _diffusivity_var_k.extent(1);
94 
95  Kokkos::parallel_for(
96  Kokkos::TeamThreadRange(team, 0, num_point), [&](const int point) {
97  _diffusivity_var_k(cell, point)
98  = _nu(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)
103  = _nu(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);
107  });
108 }
109 
110 //---------------------------------------------------------------------------//
111 
112 } // end namespace ClosureModel
113 } // end namespace VertexCFD
114 
115 #endif // end
116  // VERTEXCFD_CLOSURE_INCOMPRESSIBLESSTDIFFUSIVITYCOEFFICIENT_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23