1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLENUSSELTNUMBER_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLENUSSELTNUMBER_IMPL_HPP
4 #include "utils/VertexCFD_Utils_SmoothMath.hpp"
5 #include "utils/VertexCFD_Utils_VectorField.hpp"
7 #include <Panzer_HierarchicParallelism.hpp>
11 namespace ClosureModel
14 template<
class EvalType,
class Traits>
15 IncompressibleNusseltNumber<EvalType, Traits>::IncompressibleNusseltNumber(
16 const panzer::IntegrationRule& ir)
17 : _nusselt_number(
"nusselt_number", ir.dl_scalar)
18 , _grad_temperature(
"GRAD_temperature", ir.dl_vector)
19 , _normals(
"Side Normal", ir.dl_vector)
20 , _num_space_dim(ir.spatial_dimension)
23 this->addEvaluatedField(_nusselt_number);
26 this->addDependentField(_grad_temperature);
27 this->addDependentField(_normals);
29 this->setName(
"Incompressible Nusselt Number "
30 + std::to_string(_num_space_dim) +
"D");
34 template<
class EvalType,
class Traits>
35 void IncompressibleNusseltNumber<EvalType, Traits>::evaluateFields(
36 typename Traits::EvalData workset)
38 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
40 Kokkos::parallel_for(this->getName(), policy, *
this);
44 template<
class EvalType,
class Traits>
45 KOKKOS_INLINE_FUNCTION
void
46 IncompressibleNusseltNumber<EvalType, Traits>::operator()(
47 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
49 const int cell = team.league_rank();
50 const int num_point = _grad_temperature.extent(1);
51 Kokkos::parallel_for(Kokkos::TeamThreadRange(team, 0, num_point),
52 [&](
const int point) {
59 _nusselt_number(cell, point) = 0;
60 for (
int i = 0; i < _num_space_dim; ++i)
62 _nusselt_number(cell, point)
63 += _grad_temperature(cell, point, i)
64 * _normals(cell, point, i);
74 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLENUSSELTNUMBER_IMPL_HPP