1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLEFLUIDPROPERTIES_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLEFLUIDPROPERTIES_IMPL_HPP
4 #include <Panzer_HierarchicParallelism.hpp>
6 #include <Teuchos_StandardParameterEntryValidators.hpp>
10 namespace FluidProperties
13 template<
class EvalType,
class Traits>
14 IncompressibleFluidProperties<EvalType, Traits>::IncompressibleFluidProperties(
15 const panzer::IntegrationRule& ir,
16 const Teuchos::ParameterList& fluid_params)
17 : _density(
"density", ir.dl_scalar)
18 , _kinematic_viscosity(
"kinematic_viscosity", ir.dl_scalar)
19 , _thermal_conductivity(
"thermal_conductivity", ir.dl_scalar)
20 , _specific_heat_capacity(
"specific_heat_capacity", ir.dl_scalar)
21 , _electrical_conductivity(
"electrical_conductivity", ir.dl_scalar)
23 , _nu(std::numeric_limits<double>::quiet_NaN())
24 , _k(std::numeric_limits<double>::quiet_NaN())
25 , _cp(std::numeric_limits<double>::quiet_NaN())
26 , _sigma(std::numeric_limits<double>::quiet_NaN())
27 , _fluid_prop_type(FluidPropertyType::constant)
30 this->addEvaluatedField(_density);
31 this->addEvaluatedField(_kinematic_viscosity);
34 if (fluid_params.isType<std::string>(
"Fluid Property Type"))
36 const auto type_validator = Teuchos::rcp(
37 new Teuchos::StringToIntegralParameterEntryValidator<FluidPropertyType>(
38 Teuchos::tuple<std::string>(
"constant"),
"constant"));
39 _fluid_prop_type = type_validator->getIntegralValue(
40 fluid_params.get<std::string>(
"Thermal Conductivity Type"));
44 if (_fluid_prop_type == FluidPropertyType::constant)
46 if (fluid_params.isType<
double>(
"Density"))
47 _rho = fluid_params.get<
double>(
"Density");
48 _nu = fluid_params.get<
double>(
"Kinematic viscosity");
49 if (fluid_params.isType<
double>(
"Thermal conductivity"))
51 _k = fluid_params.get<
double>(
"Thermal conductivity");
52 this->addEvaluatedField(_thermal_conductivity);
54 if (fluid_params.isType<
double>(
"Specific heat capacity"))
56 _cp = fluid_params.get<
double>(
"Specific heat capacity");
57 this->addEvaluatedField(_specific_heat_capacity);
59 if (fluid_params.isType<
double>(
"Electrical conductivity"))
61 _sigma = fluid_params.get<
double>(
"Electrical conductivity");
62 this->addEvaluatedField(_electrical_conductivity);
66 this->setName(
"Fluid properties");
70 template<
class EvalType,
class Traits>
71 void IncompressibleFluidProperties<EvalType, Traits>::evaluateFields(
72 typename Traits::EvalData workset)
74 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
76 Kokkos::parallel_for(this->getName(), policy, *
this);
80 template<
class EvalType,
class Traits>
81 KOKKOS_INLINE_FUNCTION
void
82 IncompressibleFluidProperties<EvalType, Traits>::operator()(
83 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
85 const int cell = team.league_rank();
86 const int num_point = _kinematic_viscosity.extent(1);
89 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
90 if (_fluid_prop_type == FluidPropertyType::constant)
92 _density(cell, point) = _rho;
93 _kinematic_viscosity(cell, point) = _nu;
95 _thermal_conductivity(cell, point) = _k;
97 _specific_heat_capacity(cell, point) = _cp;
98 if (!std::isnan(_sigma))
99 _electrical_conductivity(cell, point) = _sigma;
109 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLEFLUIDPROPERTIES_IMPL_HPP