1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLETIMEDERIVATIVE_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLETIMEDERIVATIVE_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 IncompressibleTimeDerivative<EvalType, Traits, NumSpaceDim>::
15 IncompressibleTimeDerivative(
const panzer::IntegrationRule& ir,
16 const Teuchos::ParameterList& fluid_params)
17 : _dqdt_continuity(
"DQDT_continuity", ir.dl_scalar)
18 , _dqdt_energy(
"DQDT_energy", ir.dl_scalar)
19 , _dxdt_lagrange_pressure(
"DXDT_lagrange_pressure", ir.dl_scalar)
20 , _rho(
"density", ir.dl_scalar)
21 , _cp(
"specific_heat_capacity", ir.dl_scalar)
22 , _dxdt_temperature(
"DXDT_temperature", ir.dl_scalar)
23 , _solve_temp(fluid_params.get<bool>(
"Build Temperature Equation"))
24 , _beta(fluid_params.get<double>(
"Artificial compressibility"))
27 this->addEvaluatedField(_dqdt_continuity);
30 this->addDependentField(_rho);
31 Utils::addEvaluatedVectorField(
32 *
this, ir.dl_scalar, _dqdt_momentum,
"DQDT_momentum_");
33 Utils::addDependentVectorField(
34 *
this, ir.dl_scalar, _dxdt_velocity,
"DXDT_velocity_");
35 this->addDependentField(_dxdt_lagrange_pressure);
40 this->addDependentField(_cp);
41 this->addEvaluatedField(_dqdt_energy);
42 this->addDependentField(_dxdt_temperature);
45 this->setName(
"Incompressible Time Derivative "
46 + std::to_string(num_space_dim) +
"D");
50 template<
class EvalType,
class Traits,
int NumSpaceDim>
51 void IncompressibleTimeDerivative<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 IncompressibleTimeDerivative<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 = _dqdt_continuity.extent(1);
69 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
70 _dqdt_continuity(cell, point)
71 = _dxdt_lagrange_pressure(cell, point) / _beta;
73 for (
int dim = 0; dim < num_space_dim; ++dim)
74 _dqdt_momentum[dim](cell, point)
75 = _rho(cell, point) * _dxdt_velocity[dim](cell, point);
79 _dqdt_energy(cell, point) = _rho(cell, point) * _cp(cell, point)
80 * _dxdt_temperature(cell, point);
90 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLETIMEDERIVATIVE_IMPL_HPP