1 #ifndef VERTEXCFD_CLOSURE_VECTORFIELDDIVERGENCE_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_VECTORFIELDDIVERGENCE_IMPL_HPP
4 #include <utils/VertexCFD_Utils_SmoothMath.hpp>
5 #include <utils/VertexCFD_Utils_VectorField.hpp>
7 #include <Panzer_HierarchicParallelism.hpp>
13 namespace ClosureModel
16 template<
class EvalType,
class Traits,
int NumSpaceDim>
17 VectorFieldDivergence<EvalType, Traits, NumSpaceDim>::VectorFieldDivergence(
18 const panzer::IntegrationRule& ir,
19 const std::string& field_name,
20 const std::string& closure_name)
21 : _num_grad_dim(ir.spatial_dimension)
22 , _use_abs(closure_name ==
"AbsVectorFieldDivergence" ? true : false)
23 , _vector_field_divergence(
24 (_use_abs ?
"abs_divergence_" :
"divergence_") + field_name,
28 this->addEvaluatedField(_vector_field_divergence);
31 Utils::addDependentVectorField(
32 *
this, ir.dl_vector, _grad_vector_field,
"GRAD_" + field_name +
"_");
34 this->setName(
"Vector Field Divergence " + std::to_string(_num_grad_dim)
39 template<
class EvalType,
class Traits,
int NumSpaceDim>
40 void VectorFieldDivergence<EvalType, Traits, NumSpaceDim>::evaluateFields(
41 typename Traits::EvalData workset)
43 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
45 Kokkos::parallel_for(this->getName(), policy, *
this);
49 template<
class EvalType,
class Traits,
int NumSpaceDim>
50 KOKKOS_INLINE_FUNCTION
void
51 VectorFieldDivergence<EvalType, Traits, NumSpaceDim>::operator()(
52 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
54 const int cell = team.league_rank();
55 const int num_point = _grad_vector_field[0].extent(1);
56 const double abs_tol = 1.0e-12;
59 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
60 _vector_field_divergence(cell, point) = 0.0;
61 for (
int d = 0; d < _num_grad_dim; ++d)
63 _vector_field_divergence(cell, point)
64 += _grad_vector_field[d](cell, point, d);
68 _vector_field_divergence(cell, point) = SmoothMath::abs(
69 _vector_field_divergence(cell, point), abs_tol);
79 #endif // end VERTEXCFD_CLOSURE_VECTORFIELDDIVERGENCE_IMPL_HPP