VertexCFD  0.0-dev
VertexCFD_Closure_IncompressibleKEpsilonDiffusivityCoefficient_impl.hpp
1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLEKEPSILONDIFFUSIVITYCOEFFICIENT_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLEKEPSILONDIFFUSIVITYCOEFFICIENT_IMPL_HPP
3 
4 #include <Panzer_HierarchicParallelism.hpp>
5 
6 namespace VertexCFD
7 {
8 namespace ClosureModel
9 {
10 //---------------------------------------------------------------------------//
11 template<class EvalType, class Traits>
12 IncompressibleKEpsilonDiffusivityCoefficient<EvalType, Traits>::
13  IncompressibleKEpsilonDiffusivityCoefficient(
14  const panzer::IntegrationRule& ir,
15  const double sigma_k,
16  const double sigma_e,
17  const std::string field_prefix)
18  : _nu("kinematic_viscosity", ir.dl_scalar)
19  , _nu_t(field_prefix + "turbulent_eddy_viscosity", ir.dl_scalar)
20  , _sigma_k(sigma_k)
21  , _sigma_e(sigma_e)
22  , _num_grad_dim(ir.spatial_dimension)
23  , _diffusivity_var_k("diffusivity_turb_kinetic_energy", ir.dl_scalar)
24  , _diffusivity_var_e("diffusivity_turb_dissipation_rate", ir.dl_scalar)
25 {
26  // Add dependent fields
27  this->addDependentField(_nu);
28  this->addDependentField(_nu_t);
29 
30  // Add evaluated fields
31  this->addEvaluatedField(_diffusivity_var_k);
32  this->addEvaluatedField(_diffusivity_var_e);
33 
34  // Closure model name
35  this->setName("K-Epsilon Incompressible Diffusivity Coefficient "
36  + std::to_string(_num_grad_dim) + "D");
37 }
38 
39 //---------------------------------------------------------------------------//
40 template<class EvalType, class Traits>
41 void IncompressibleKEpsilonDiffusivityCoefficient<EvalType, Traits>::evaluateFields(
42  typename Traits::EvalData workset)
43 {
44  auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
45  workset.num_cells);
46  Kokkos::parallel_for(this->getName(), policy, *this);
47 }
48 
49 //---------------------------------------------------------------------------//
50 template<class EvalType, class Traits>
51 KOKKOS_INLINE_FUNCTION void
52 IncompressibleKEpsilonDiffusivityCoefficient<EvalType, Traits>::operator()(
53  const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team) const
54 {
55  const int cell = team.league_rank();
56  const int num_point = _diffusivity_var_k.extent(1);
57 
58  Kokkos::parallel_for(
59  Kokkos::TeamThreadRange(team, 0, num_point), [&](const int point) {
60  _diffusivity_var_k(cell, point)
61  = (_nu(cell, point) + _nu_t(cell, point) / _sigma_k);
62  _diffusivity_var_e(cell, point)
63  = (_nu(cell, point) + _nu_t(cell, point) / _sigma_e);
64  });
65 }
66 
67 //---------------------------------------------------------------------------//
68 
69 } // end namespace ClosureModel
70 } // end namespace VertexCFD
71 
72 #endif // end
73  // VERTEXCFD_CLOSURE_INCOMPRESSIBLEKEPSILONDIFFUSIVITYCOEFFICIENT_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23