1 #ifndef VERTEXCFD_CLOSURE_BUOYANCYSOURCE_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_BUOYANCYSOURCE_IMPL_HPP
4 #include "utils/VertexCFD_Utils_VectorField.hpp"
6 #include <Panzer_HierarchicParallelism.hpp>
12 namespace ClosureModel
15 template<
class EvalType,
class Traits,
int NumSpaceDim>
16 IncompressibleLSVOFBuoyancySource<EvalType, Traits, NumSpaceDim>::
17 IncompressibleLSVOFBuoyancySource(
const panzer::IntegrationRule& ir,
18 const Teuchos::ParameterList& user_params,
19 const std::string& field_prefix)
20 : _rho(field_prefix +
"density", ir.dl_scalar)
22 const auto gravity = user_params.get<Teuchos::Array<double>>(
"Gravity");
23 for (
int dim = 0; dim < num_space_dim; ++dim)
25 _gravity[dim] = gravity[dim];
29 Utils::addEvaluatedVectorField(*
this,
31 _buoyancy_momentum_source,
32 "LSVOF_BUOYANCY_SOURCE_"
36 this->addDependentField(_rho);
38 this->setName(
"Incompressible LSVOF Buoyancy Source "
39 + std::to_string(num_space_dim) +
"D");
43 template<
class EvalType,
class Traits,
int NumSpaceDim>
44 void IncompressibleLSVOFBuoyancySource<EvalType, Traits, NumSpaceDim>::evaluateFields(
45 typename Traits::EvalData workset)
47 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
49 Kokkos::parallel_for(this->getName(), policy, *
this);
53 template<
class EvalType,
class Traits,
int NumSpaceDim>
54 KOKKOS_INLINE_FUNCTION
void
55 IncompressibleLSVOFBuoyancySource<EvalType, Traits, NumSpaceDim>::operator()(
56 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
58 const int cell = team.league_rank();
59 const int num_point = _buoyancy_momentum_source[0].extent(1);
62 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
63 for (
int mom_dim = 0; mom_dim < num_space_dim; ++mom_dim)
65 _buoyancy_momentum_source[mom_dim](cell, point)
66 = _rho(cell, point) * _gravity[mom_dim];
76 #endif // end VERTEXCFD_CLOSURE_BUOYANCYSOURCE_IMPL_HPP