1 #ifndef VERTEXCFD_BOUNDARYSTATE_TURBULENCEKOMEGAWALLRESOLVED_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYSTATE_TURBULENCEKOMEGAWALLRESOLVED_IMPL_HPP
4 #include <Panzer_HierarchicParallelism.hpp>
8 namespace BoundaryCondition
13 template<
class EvalType,
class Traits>
14 TurbulenceKOmegaWallResolved<EvalType, Traits>::TurbulenceKOmegaWallResolved(
15 const panzer::IntegrationRule& ir,
const Teuchos::ParameterList& bc_params)
16 : _boundary_k(
"BOUNDARY_turb_kinetic_energy", ir.dl_scalar)
17 , _boundary_w(
"BOUNDARY_turb_specific_dissipation_rate", ir.dl_scalar)
18 , _boundary_grad_k(
"BOUNDARY_GRAD_turb_kinetic_energy", ir.dl_vector)
19 , _boundary_grad_w(
"BOUNDARY_GRAD_turb_specific_dissipation_rate",
21 , _k(
"turb_kinetic_energy", ir.dl_scalar)
22 , _grad_k(
"GRAD_turb_kinetic_energy", ir.dl_vector)
23 , _grad_w(
"GRAD_turb_specific_dissipation_rate", ir.dl_vector)
24 , _normals(
"Side Normal", ir.dl_vector)
25 , _omega_wall(bc_params.get<double>(
"Omega Wall Value"))
26 , _omega_wall_init(_omega_wall)
27 , _omega_ramp_time(0.0)
28 , _num_grad_dim(ir.spatial_dimension)
31 if (bc_params.isType<
double>(
"Omega Wall Initial Value"))
33 _omega_wall_init = bc_params.get<
double>(
"Omega Wall Initial Value");
34 _omega_ramp_time = bc_params.get<
double>(
"Omega Ramp Time");
38 this->addEvaluatedField(_boundary_k);
39 this->addEvaluatedField(_boundary_w);
40 this->addEvaluatedField(_boundary_grad_k);
41 this->addEvaluatedField(_boundary_grad_w);
44 this->addDependentField(_k);
45 this->addDependentField(_grad_k);
46 this->addDependentField(_grad_w);
47 this->addDependentField(_normals);
49 this->setName(
"Boundary State Turbulence Model KOmegaWallResolved "
50 + std::to_string(_num_grad_dim) +
"D");
54 template<
class EvalType,
class Traits>
55 void TurbulenceKOmegaWallResolved<EvalType, Traits>::evaluateFields(
56 typename Traits::EvalData workset)
60 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
62 Kokkos::parallel_for(this->getName(), policy, *
this);
66 template<
class EvalType,
class Traits>
67 KOKKOS_INLINE_FUNCTION
void
68 TurbulenceKOmegaWallResolved<EvalType, Traits>::operator()(
69 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
71 const int cell = team.league_rank();
72 const int num_point = _grad_k.extent(1);
75 double omega_wall = _omega_wall;
78 if (_time < _omega_ramp_time)
80 omega_wall = pow(_omega_wall_init, 1.0 - _time / _omega_ramp_time)
81 * pow(_omega_wall, _time / _omega_ramp_time);
85 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
87 _boundary_k(cell, point) = _k(cell, point);
88 _boundary_w(cell, point) = omega_wall;
91 for (
int d = 0; d < _num_grad_dim; ++d)
93 _boundary_grad_k(cell, point, d) = _grad_k(cell, point, d);
94 _boundary_grad_w(cell, point, d) = _grad_w(cell, point, d);
98 for (
int d = 0; d < _num_grad_dim; ++d)
100 for (
int grad_dim = 0; grad_dim < _num_grad_dim; ++grad_dim)
102 _boundary_grad_k(cell, point, d)
103 -= _grad_k(cell, point, grad_dim)
104 * _normals(cell, point, grad_dim)
105 * _normals(cell, point, d);
116 #endif // end VERTEXCFD_BOUNDARYSTATE_TURBULENCEKOMEGAWALLRESOLVED_IMPL_HPP