1 #ifndef VERTEXCFD_CLOSURE_RADDIFFUSIONFLUX_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_RADDIFFUSIONFLUX_IMPL_HPP
4 #include "utils/VertexCFD_Utils_ScalarFieldView.hpp"
6 #include <Panzer_HierarchicParallelism.hpp>
10 namespace ClosureModel
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())
24 Utils::addEvaluatedScalarFieldView(*
this, ir.dl_vector, _num_species, _species_flux,
25 flux_prefix +
"DIFFUSION_FLUX_"
26 "reaction_advection_diffusion_equation_");
29 Utils::addDependentScalarFieldView(*
this,
33 gradient_prefix +
"GRAD_species_");
35 this->setName(
"RAD Equation Diffusion Flux "
36 + std::to_string(_num_space_dim) +
"D");
40 template<
class EvalType,
class Traits>
41 void RADDiffusionFlux<EvalType, Traits>::evaluateFields(
42 typename Traits::EvalData workset)
44 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
46 Kokkos::parallel_for(this->getName(), policy, *
this);
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
54 const int cell = team.league_rank();
55 const int num_point = _grad_species[0].extent(1);
58 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
59 for (
int dim = 0; dim < _num_space_dim; ++dim)
61 for (
int num = 0; num < _num_species; ++num)
63 _species_flux[num](cell, point, dim)
64 = _nu * _grad_species[num](cell, point, dim);
75 #endif // end VERTEXCFD_CLOSURE_RADDIFFUSIONFLUX_IMPL_HPP