1 #ifndef VERTEXCFD_BOUNDARYSTATE_VARIABLEEXTRAPOLATE_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYSTATE_VARIABLEEXTRAPOLATE_IMPL_HPP
4 #include <Panzer_HierarchicParallelism.hpp>
8 namespace BoundaryCondition
13 template<
class EvalType,
class Traits>
14 VariableExtrapolate<EvalType, Traits>::VariableExtrapolate(
15 const panzer::IntegrationRule& ir,
const std::string variable_name)
16 : _boundary_variable(
"BOUNDARY_" + variable_name, ir.dl_scalar)
17 , _boundary_grad_variable(
"BOUNDARY_GRAD_" + variable_name, ir.dl_vector)
18 , _variable(variable_name, ir.dl_scalar)
19 , _grad_variable(
"GRAD_" + variable_name, ir.dl_vector)
20 , _num_grad_dim(ir.spatial_dimension)
23 this->addEvaluatedField(_boundary_variable);
24 this->addEvaluatedField(_boundary_grad_variable);
27 this->addDependentField(_variable);
28 this->addDependentField(_grad_variable);
30 this->setName(variable_name +
" Boundary State Variable Extrapolate "
31 + std::to_string(_num_grad_dim) +
"D");
35 template<
class EvalType,
class Traits>
36 void VariableExtrapolate<EvalType, Traits>::evaluateFields(
37 typename Traits::EvalData workset)
39 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
41 Kokkos::parallel_for(this->getName(), policy, *
this);
45 template<
class EvalType,
class Traits>
46 KOKKOS_INLINE_FUNCTION
void VariableExtrapolate<EvalType, Traits>::operator()(
47 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
49 const int cell = team.league_rank();
50 const int num_point = _grad_variable.extent(1);
53 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
55 _boundary_variable(cell, point) = _variable(cell, point);
58 for (
int d = 0; d < _num_grad_dim; ++d)
60 _boundary_grad_variable(cell, point, d)
61 = _grad_variable(cell, point, d);
71 #endif // end VERTEXCFD_BOUNDARYSTATE_VARIABLEEXTRAPOLATE_IMPL_HPP