1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLELSVOFBUBBLEEXACT_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLELSVOFBUBBLEEXACT_IMPL_HPP
4 #include <Panzer_GlobalIndexer.hpp>
5 #include <Panzer_HierarchicParallelism.hpp>
6 #include <Panzer_PureBasis.hpp>
7 #include <Panzer_Workset_Utilities.hpp>
13 namespace ClosureModel
16 template<
class EvalType,
class Traits,
int NumSpaceDim>
17 IncompressibleLSVOFBubbleExact<EvalType, Traits, NumSpaceDim>::
18 IncompressibleLSVOFBubbleExact(
const panzer::IntegrationRule& ir,
19 const Teuchos::ParameterList& closure_params)
20 : _dof_name(closure_params.get<std::string>(
"DOF Name"))
21 , _radius(closure_params.get<double>(
"Bubble Radius"))
22 , _ir_degree(ir.cubature_degree)
23 , _exact_dof(
"Exact_" + _dof_name, ir.dl_scalar)
27 = closure_params.get<Teuchos::Array<double>>(
"Bubble Location");
29 for (
int d = 0; d < num_space_dim; ++d)
31 _location[d] = location[d];
35 this->addEvaluatedField(_exact_dof);
37 this->setName(
"Exact Solution LSVOF " + _dof_name +
" Bubble");
41 template<
class EvalType,
class Traits,
int NumSpaceDim>
42 void IncompressibleLSVOFBubbleExact<EvalType, Traits, NumSpaceDim>::
43 postRegistrationSetup(
typename Traits::SetupData sd,
44 PHX::FieldManager<Traits>&)
46 _ir_index = panzer::getIntegrationRuleIndex(_ir_degree, (*sd.worksets_)[0]);
50 template<
class EvalType,
class Traits,
int NumSpaceDim>
51 void IncompressibleLSVOFBubbleExact<EvalType, Traits, NumSpaceDim>::evaluateFields(
52 typename Traits::EvalData workset)
54 _ip_coords = workset.int_rules[_ir_index]->ip_coordinates;
55 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
57 Kokkos::parallel_for(this->getName(), policy, *
this);
61 template<
class EvalType,
class Traits,
int NumSpaceDim>
62 KOKKOS_INLINE_FUNCTION
void
63 IncompressibleLSVOFBubbleExact<EvalType, Traits, NumSpaceDim>::operator()(
64 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
66 const int cell = team.league_rank();
67 const int num_point = _exact_dof.extent(1);
72 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
75 for (
int d = 0; d < num_space_dim; ++d)
77 r += pow(_location[d] - _ip_coords(cell, point, d), 2.0);
84 _exact_dof(cell, point) = 1.0;
88 _exact_dof(cell, point) = 0.0;
98 #endif // end VERTEXCFD_CLOSURE_INCOMPRESSIBLELSVOFBUBBLEEXACT_IMPL_HPP