1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLEGRADDIV_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLEGRADDIV_IMPL_HPP
4 #include <utils/VertexCFD_Utils_VectorField.hpp>
6 #include <Panzer_HierarchicParallelism.hpp>
10 namespace ClosureModel
13 template<
class EvalType,
class Traits,
int NumSpaceDim>
14 IncompressibleGradDiv<EvalType, Traits, NumSpaceDim>::IncompressibleGradDiv(
15 const panzer::IntegrationRule& ir,
16 const Teuchos::ParameterList& stability_param_list,
17 const std::string& flux_prefix,
18 const std::string& gradient_prefix)
19 : _gamma(stability_param_list.get<double>(
"GradDiv Stabilization "
24 Utils::addContributedVectorField(*
this, ir.dl_vector, _momentum_flux,
25 flux_prefix +
"VISCOUS_FLUX_"
29 Utils::addDependentVectorField(*
this,
32 gradient_prefix +
"GRAD_velocity_");
34 this->setName(
"Incompressible Grad-Div Source "
35 + std::to_string(num_space_dim) +
"D");
39 template<
class EvalType,
class Traits,
int NumSpaceDim>
40 void IncompressibleGradDiv<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 IncompressibleGradDiv<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 = _momentum_flux[0].extent(1);
58 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
60 for (
int i = 0; i < num_space_dim; ++i)
62 for (
int j = 0; j < num_space_dim; ++j)
64 _momentum_flux[i](cell, point, i)
65 += _gamma * _grad_velocity[j](cell, point, j);
76 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLEGRADDIV_IMPL_HPP