1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLELSVOFTIMEDERIVATIVE_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLELSVOFTIMEDERIVATIVE_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 IncompressibleLSVOFTimeDerivative<EvalType, Traits, NumSpaceDim>::
17 IncompressibleLSVOFTimeDerivative(
const panzer::IntegrationRule& ir,
18 const Teuchos::ParameterList& lsvof_params)
19 : _dqdt_continuity(
"DQDT_continuity", ir.dl_scalar)
20 , _rho(
"density", ir.dl_scalar)
21 , _dxdt_pressure(
"DXDT_lagrange_pressure", ir.dl_scalar)
22 , _dxdt_density(
"DXDT_density", ir.dl_scalar)
23 , _beta(lsvof_params.get<double>(
"Mixture Artificial Compressibility"))
26 this->addEvaluatedField(_dqdt_continuity);
28 Utils::addEvaluatedVectorField(
29 *
this, ir.dl_scalar, _dqdt_momentum,
"DQDT_momentum_");
32 this->addDependentField(_rho);
33 this->addDependentField(_dxdt_pressure);
34 this->addDependentField(_dxdt_density);
35 Utils::addDependentVectorField(*
this, ir.dl_scalar, _velocity,
"velocity_");
36 Utils::addDependentVectorField(
37 *
this, ir.dl_scalar, _dxdt_velocity,
"DXDT_velocity_");
39 this->setName(
"Incompressible LSVOF Time Derivative "
40 + std::to_string(num_space_dim) +
"D");
44 template<
class EvalType,
class Traits,
int NumSpaceDim>
45 void IncompressibleLSVOFTimeDerivative<EvalType, Traits, NumSpaceDim>::evaluateFields(
46 typename Traits::EvalData workset)
48 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
50 Kokkos::parallel_for(this->getName(), policy, *
this);
54 template<
class EvalType,
class Traits,
int NumSpaceDim>
55 KOKKOS_INLINE_FUNCTION
void
56 IncompressibleLSVOFTimeDerivative<EvalType, Traits, NumSpaceDim>::operator()(
57 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
59 const int cell = team.league_rank();
60 const int num_point = _dqdt_continuity.extent(1);
63 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
64 _dqdt_continuity(cell, point) = _dxdt_pressure(cell, point) / _beta;
66 for (
int dim = 0; dim < num_space_dim; ++dim)
68 _dqdt_momentum[dim](cell, point)
69 = _rho(cell, point) * _dxdt_velocity[dim](cell, point)
70 + _dxdt_density(cell, point)
71 * _velocity[dim](cell, point);
81 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLELSVOFTIMEDERIVATIVE_IMPL_HPP