VertexCFD  0.0-dev
VertexCFD_BoundaryState_IncompressibleWallFunctionStress_impl.hpp
1 #ifndef VERTEXCFD_BOUNDARYSTATE_INCOMPRESSIBLEWALLFUNCTIONSTRESS_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYSTATE_INCOMPRESSIBLEWALLFUNCTIONSTRESS_IMPL_HPP
3 
4 #include <utils/VertexCFD_Utils_VectorField.hpp>
5 
6 #include <Panzer_HierarchicParallelism.hpp>
7 
8 namespace VertexCFD
9 {
10 namespace BoundaryCondition
11 {
12 //---------------------------------------------------------------------------//
13 template<class EvalType, class Traits, int NumSpaceDim>
14 IncompressibleWallFunctionStress<EvalType, Traits, NumSpaceDim>::
15  IncompressibleWallFunctionStress(const panzer::IntegrationRule& ir,
16  const std::string& flux_prefix)
17  : _boundary_u_tau("BOUNDARY_friction_velocity", ir.dl_scalar)
18  , _boundary_y_plus("BOUNDARY_y_plus", ir.dl_scalar)
19 {
20  Utils::addEvaluatedVectorField(*this,
21  ir.dl_scalar,
22  _wall_func_shear_stress,
23  flux_prefix + "momentum_");
24 
25  // Turbulence quantites obtained from corresponding wall function boundary
26  // state used for turbulence quantities.
27  this->addDependentField(_boundary_u_tau);
28  this->addDependentField(_boundary_y_plus);
29  Utils::addDependentVectorField(*this, ir.dl_scalar, _velocity, "velocity_");
30 
31  this->setName("Boundary State Incompressible Wall Function Stress "
32  + std::to_string(num_space_dim) + "D");
33 }
34 
35 //---------------------------------------------------------------------------//
36 template<class EvalType, class Traits, int NumSpaceDim>
37 void IncompressibleWallFunctionStress<EvalType, Traits, NumSpaceDim>::evaluateFields(
38  typename Traits::EvalData workset)
39 {
40  auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
41  workset.num_cells);
42  Kokkos::parallel_for(this->getName(), policy, *this);
43 }
44 
45 //---------------------------------------------------------------------------//
46 template<class EvalType, class Traits, int NumSpaceDim>
47 KOKKOS_INLINE_FUNCTION void
48 IncompressibleWallFunctionStress<EvalType, Traits, NumSpaceDim>::operator()(
49  const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team) const
50 {
51  const int cell = team.league_rank();
52  const int num_point = _boundary_y_plus.extent(1);
53 
54  Kokkos::parallel_for(Kokkos::TeamThreadRange(team, 0, num_point),
55  [&](const int point) {
56  // Set wall function shear stress components
57  for (int dim = 0; dim < num_space_dim; ++dim)
58  {
59  _wall_func_shear_stress[dim](cell, point)
60  = _boundary_u_tau(cell, point)
61  / _boundary_y_plus(cell, point)
62  * _velocity[dim](cell, point);
63  }
64  });
65 }
66 
67 //---------------------------------------------------------------------------//
68 
69 } // end namespace BoundaryCondition
70 } // end namespace VertexCFD
71 
72 #endif // VERTEXCFD_BOUNDARYSTATE_INCOMPRESSIBLEWALLFUNCTIONSTRESS_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23