1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLESPALARTALLMARASDIFFUSIVITYCOEFFICIENT_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLESPALARTALLMARASDIFFUSIVITYCOEFFICIENT_IMPL_HPP
4 #include <Panzer_HierarchicParallelism.hpp>
11 template<
class EvalType,
class Traits>
12 IncompressibleSpalartAllmarasDiffusivityCoefficient<EvalType, Traits>::
13 IncompressibleSpalartAllmarasDiffusivityCoefficient(
14 const panzer::IntegrationRule& ir)
15 : _sa_var(
"spalart_allmaras_variable", ir.dl_scalar)
16 , _nu(
"kinematic_viscosity", ir.dl_scalar)
20 , _num_grad_dim(ir.spatial_dimension)
21 , _diffusivity_var(
"diffusivity_spalart_allmaras_variable", ir.dl_scalar)
24 this->addDependentField(_sa_var);
25 this->addDependentField(_nu);
28 this->addEvaluatedField(_diffusivity_var);
31 this->setName(
"Spalart-Allmaras Incompressible Diffusivity Coefficient "
32 + std::to_string(_num_grad_dim) +
"D");
36 template<
class EvalType,
class Traits>
37 void IncompressibleSpalartAllmarasDiffusivityCoefficient<EvalType, Traits>::
38 evaluateFields(
typename Traits::EvalData workset)
40 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
42 Kokkos::parallel_for(this->getName(), policy, *
this);
46 template<
class EvalType,
class Traits>
47 KOKKOS_INLINE_FUNCTION
void
48 IncompressibleSpalartAllmarasDiffusivityCoefficient<EvalType, Traits>::operator()(
49 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
51 const int cell = team.league_rank();
52 const int num_point = _diffusivity_var.extent(1);
56 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
58 = pow(_sa_var(cell, point) / _nu(cell, point), 3.0);
59 const scalar_type f_n = _sa_var(cell, point) < 0.0
60 ? (_cn1 + xi3) / (_cn1 - xi3)
63 _diffusivity_var(cell, point)
64 = (_nu(cell, point) + _sa_var(cell, point) * f_n) / _sigma;