VertexCFD  0.0-dev
VertexCFD_Closure_IncompressibleFluidProperties_impl.hpp
1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLEFLUIDPROPERTIES_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLEFLUIDPROPERTIES_IMPL_HPP
3 
4 #include <Panzer_HierarchicParallelism.hpp>
5 
6 #include <Teuchos_StandardParameterEntryValidators.hpp>
7 
8 namespace VertexCFD
9 {
10 namespace FluidProperties
11 {
12 //---------------------------------------------------------------------------//
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)
22  , _rho(1.0)
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)
28 {
29  // Evaluated fields
30  this->addEvaluatedField(_density);
31  this->addEvaluatedField(_kinematic_viscosity);
32 
33  // Get fluid property type
34  if (fluid_params.isType<std::string>("Fluid Property Type"))
35  {
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"));
41  }
42 
43  // Get values based on the fluid property type
44  if (_fluid_prop_type == FluidPropertyType::constant)
45  {
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"))
50  {
51  _k = fluid_params.get<double>("Thermal conductivity");
52  this->addEvaluatedField(_thermal_conductivity);
53  }
54  if (fluid_params.isType<double>("Specific heat capacity"))
55  {
56  _cp = fluid_params.get<double>("Specific heat capacity");
57  this->addEvaluatedField(_specific_heat_capacity);
58  }
59  if (fluid_params.isType<double>("Electrical conductivity"))
60  {
61  _sigma = fluid_params.get<double>("Electrical conductivity");
62  this->addEvaluatedField(_electrical_conductivity);
63  }
64  }
65 
66  this->setName("Fluid properties");
67 }
68 
69 //---------------------------------------------------------------------------//
70 template<class EvalType, class Traits>
71 void IncompressibleFluidProperties<EvalType, Traits>::evaluateFields(
72  typename Traits::EvalData workset)
73 {
74  auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
75  workset.num_cells);
76  Kokkos::parallel_for(this->getName(), policy, *this);
77 }
78 
79 //---------------------------------------------------------------------------//
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
84 {
85  const int cell = team.league_rank();
86  const int num_point = _kinematic_viscosity.extent(1);
87 
88  Kokkos::parallel_for(
89  Kokkos::TeamThreadRange(team, 0, num_point), [&](const int point) {
90  if (_fluid_prop_type == FluidPropertyType::constant)
91  {
92  _density(cell, point) = _rho;
93  _kinematic_viscosity(cell, point) = _nu;
94  if (!std::isnan(_k))
95  _thermal_conductivity(cell, point) = _k;
96  if (!std::isnan(_cp))
97  _specific_heat_capacity(cell, point) = _cp;
98  if (!std::isnan(_sigma))
99  _electrical_conductivity(cell, point) = _sigma;
100  }
101  });
102 }
103 
104 //---------------------------------------------------------------------------//
105 
106 } // end namespace FluidProperties
107 } // end namespace VertexCFD
108 
109 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLEFLUIDPROPERTIES_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23