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 IncompressibleBuoyancySource<EvalType, Traits, NumSpaceDim>::
17 IncompressibleBuoyancySource(
const panzer::IntegrationRule& ir,
18 const Teuchos::ParameterList& closure_params,
19 const Teuchos::ParameterList& user_params)
20 : _buoyancy_continuity_source(
"BUOYANCY_SOURCE_continuity", ir.dl_scalar)
21 , _buoyancy_energy_source(
"BUOYANCY_SOURCE_energy", ir.dl_scalar)
22 , _temperature(
"temperature", ir.dl_scalar)
23 , _beta_T(closure_params.get<double>(
"Expansion coefficient"))
24 , _T_ref(closure_params.get<double>(
"Reference temperature"))
26 const auto gravity = user_params.get<Teuchos::Array<double>>(
"Gravity");
27 for (
int dim = 0; dim < num_space_dim; ++dim)
29 _gravity[dim] = gravity[dim];
33 this->addEvaluatedField(_buoyancy_continuity_source);
34 this->addEvaluatedField(_buoyancy_energy_source);
36 Utils::addEvaluatedVectorField(*
this,
38 _buoyancy_momentum_source,
43 this->addDependentField(_temperature);
45 this->setName(
"Incompressible Buoyancy Source "
46 + std::to_string(num_space_dim) +
"D");
50 template<
class EvalType,
class Traits,
int NumSpaceDim>
51 void IncompressibleBuoyancySource<EvalType, Traits, NumSpaceDim>::evaluateFields(
52 typename Traits::EvalData workset)
54 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
56 Kokkos::parallel_for(this->getName(), policy, *
this);
60 template<
class EvalType,
class Traits,
int NumSpaceDim>
61 KOKKOS_INLINE_FUNCTION
void
62 IncompressibleBuoyancySource<EvalType, Traits, NumSpaceDim>::operator()(
63 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
65 const int cell = team.league_rank();
66 const int num_point = _buoyancy_continuity_source.extent(1);
69 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
70 _buoyancy_continuity_source(cell, point) = 0.0;
71 _buoyancy_energy_source(cell, point) = 0.0;
73 for (
int mom_dim = 0; mom_dim < num_space_dim; ++mom_dim)
75 _buoyancy_momentum_source[mom_dim](cell, point)
76 = -_beta_T * _gravity[mom_dim]
77 * (_temperature(cell, point) - _T_ref);
87 #endif // end VERTEXCFD_CLOSURE_BUOYANCYSOURCE_IMPL_HPP