1 #ifndef VERTEXCFD_INITIALCONDITION_STEP_IMPL_HPP
2 #define VERTEXCFD_INITIALCONDITION_STEP_IMPL_HPP
4 #include <Panzer_GlobalIndexer.hpp>
5 #include <Panzer_HierarchicParallelism.hpp>
6 #include <Panzer_PureBasis.hpp>
7 #include <Panzer_Workset_Utilities.hpp>
9 #include <Teuchos_Array.hpp>
16 namespace InitialCondition
19 template<
class EvalType,
class Traits>
20 Step<EvalType, Traits>::Step(
const Teuchos::ParameterList& params,
21 const panzer::PureBasis& basis)
22 : _basis_name(basis.name())
24 _left_value = params.get<
double>(
"Left Value");
25 _right_value = params.get<
double>(
"Right Value");
26 _origin = params.get<
double>(
"Origin");
27 const std::string dof_name = params.get<std::string>(
"Equation Set Name");
28 _ic = PHX::MDField<scalar_type, panzer::Cell, panzer::BASIS>(
29 dof_name, basis.functional);
30 this->addEvaluatedField(_ic);
31 this->addUnsharedField(_ic.fieldTag().clone());
32 this->setName(
"Step Initial Condition: " + dof_name);
36 template<
class EvalType,
class Traits>
37 void Step<EvalType, Traits>::postRegistrationSetup(
typename Traits::SetupData sd,
38 PHX::FieldManager<Traits>&)
40 _basis_index = panzer::getPureBasisIndex(
41 _basis_name, (*sd.worksets_)[0], this->wda);
45 template<
class EvalType,
class Traits>
46 void Step<EvalType, Traits>::evaluateFields(
typename Traits::EvalData workset)
48 _basis_coords = this->wda(workset).bases[_basis_index]->basis_coordinates;
49 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
51 Kokkos::parallel_for(this->getName(), policy, *
this);
55 template<
class EvalType,
class Traits>
56 KOKKOS_INLINE_FUNCTION
void Step<EvalType, Traits>::operator()(
57 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
59 const int cell = team.league_rank();
60 const int num_basis = _ic.extent(1);
63 Kokkos::TeamThreadRange(team, 0, num_basis), [&](
const int basis) {
64 const double x = _basis_coords(cell, basis, 0);
65 _ic(cell, basis) = x < _origin ? _left_value : _right_value;
74 #endif // end VERTEXCFD_INITIALCONDITION_STEP_IMPL_HPP