VertexCFD  0.0-dev
VertexCFD_Closure_IncompressibleKTauEddyViscosity_impl.hpp
1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLEKTAUEDDYVISCOSITY_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLEKTAUEDDYVISCOSITY_IMPL_HPP
3 
4 #include "utils/VertexCFD_Utils_SmoothMath.hpp"
5 #include "utils/VertexCFD_Utils_VectorField.hpp"
6 
7 #include <Panzer_HierarchicParallelism.hpp>
8 
9 namespace VertexCFD
10 {
11 namespace ClosureModel
12 {
13 //---------------------------------------------------------------------------//
14 template<class EvalType, class Traits, int NumSpaceDim>
15 IncompressibleKTauEddyViscosity<EvalType, Traits, NumSpaceDim>::
16  IncompressibleKTauEddyViscosity(const panzer::IntegrationRule& ir)
17  : _turb_kinetic_energy("turb_kinetic_energy", ir.dl_scalar)
18  , _turb_specific_dissipation_rate("turb_specific_dissipation_rate",
19  ir.dl_scalar)
20  , _nu_t("turbulent_eddy_viscosity", ir.dl_scalar)
21 {
22  // Add dependent fields
23  this->addDependentField(_turb_kinetic_energy);
24  this->addDependentField(_turb_specific_dissipation_rate);
25 
26  // Add evaluated fields
27  this->addEvaluatedField(_nu_t);
28 
29  // Closure model name
30  this->setName("Incompressible K-Tau Turbulent Eddy Viscosity "
31  + std::to_string(num_space_dim) + "D");
32 }
33 
34 //---------------------------------------------------------------------------//
35 template<class EvalType, class Traits, int NumSpaceDim>
36 void IncompressibleKTauEddyViscosity<EvalType, Traits, NumSpaceDim>::evaluateFields(
37  typename Traits::EvalData workset)
38 {
39  auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
40  workset.num_cells);
41  Kokkos::parallel_for(this->getName(), policy, *this);
42 }
43 
44 //---------------------------------------------------------------------------//
45 template<class EvalType, class Traits, int NumSpaceDim>
46 KOKKOS_INLINE_FUNCTION void
47 IncompressibleKTauEddyViscosity<EvalType, Traits, NumSpaceDim>::operator()(
48  const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team) const
49 {
50  const int cell = team.league_rank();
51  const int num_point = _nu_t.extent(1);
52  const double max_tol = 1.0e-20;
53 
54  Kokkos::parallel_for(
55  Kokkos::TeamThreadRange(team, 0, num_point), [&](const int point) {
56  _nu_t(cell, point)
57  = SmoothMath::max(
58  _turb_kinetic_energy(cell, point), max_tol, 0.0)
59  * SmoothMath::max(
60  _turb_specific_dissipation_rate(cell, point),
61  max_tol,
62  0.0);
63  });
64 }
65 
66 //---------------------------------------------------------------------------//
67 
68 } // end namespace ClosureModel
69 } // end namespace VertexCFD
70 
71 #endif // end
72  // VERTEXCFD_CLOSURE_INCOMPRESSIBLEKTAUEDDYVISCOSITY_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23