VertexCFD  0.0-dev
VertexCFD_Closure_RADDiffusionFlux_impl.hpp
1 #ifndef VERTEXCFD_CLOSURE_RADDIFFUSIONFLUX_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_RADDIFFUSIONFLUX_IMPL_HPP
3 
4 #include "utils/VertexCFD_Utils_ScalarFieldView.hpp"
5 
6 #include <Panzer_HierarchicParallelism.hpp>
7 
8 namespace VertexCFD
9 {
10 namespace ClosureModel
11 {
12 //---------------------------------------------------------------------------//
13 template<class EvalType, class Traits>
14 RADDiffusionFlux<EvalType, Traits>::RADDiffusionFlux(
15  const panzer::IntegrationRule& ir,
16  const SpeciesProperties::ConstantSpeciesProperties& species_prop,
17  const std::string& flux_prefix,
18  const std::string& gradient_prefix)
19  : _num_species(species_prop.numSpecies())
20  , _num_space_dim(ir.spatial_dimension)
21  , _nu(species_prop.constantDiffusionCoefficient())
22 {
23  // Evaluated fields
24  Utils::addEvaluatedScalarFieldView(*this, ir.dl_vector, _num_species, _species_flux,
25  flux_prefix + "DIFFUSION_FLUX_"
26  "reaction_advection_diffusion_equation_");
27 
28  // Dependent fields
29  Utils::addDependentScalarFieldView(*this,
30  ir.dl_vector,
31  _num_species,
32  _grad_species,
33  gradient_prefix + "GRAD_species_");
34 
35  this->setName("RAD Equation Diffusion Flux "
36  + std::to_string(_num_space_dim) + "D");
37 }
38 
39 //---------------------------------------------------------------------------//
40 template<class EvalType, class Traits>
41 void RADDiffusionFlux<EvalType, Traits>::evaluateFields(
42  typename Traits::EvalData workset)
43 {
44  auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
45  workset.num_cells);
46  Kokkos::parallel_for(this->getName(), policy, *this);
47 }
48 
49 //---------------------------------------------------------------------------//
50 template<class EvalType, class Traits>
51 KOKKOS_INLINE_FUNCTION void RADDiffusionFlux<EvalType, Traits>::operator()(
52  const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team) const
53 {
54  const int cell = team.league_rank();
55  const int num_point = _grad_species[0].extent(1);
56 
57  Kokkos::parallel_for(
58  Kokkos::TeamThreadRange(team, 0, num_point), [&](const int point) {
59  for (int dim = 0; dim < _num_space_dim; ++dim)
60  {
61  for (int num = 0; num < _num_species; ++num)
62  {
63  _species_flux[num](cell, point, dim)
64  = _nu * _grad_species[num](cell, point, dim);
65  }
66  }
67  });
68 }
69 
70 //---------------------------------------------------------------------------//
71 
72 } // end namespace ClosureModel
73 } // end namespace VertexCFD
74 
75 #endif // end VERTEXCFD_CLOSURE_RADDIFFUSIONFLUX_IMPL_HPP
VertexCFD
Definition: tstMethodManufacturedSolutionBC.cpp:23