1 #ifndef VERTEXCFD_CLOSURE_INCOMPRESSIBLECLSNONRECONSTRUCTEDNORMAL_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_INCOMPRESSIBLECLSNONRECONSTRUCTEDNORMAL_IMPL_HPP
4 #include <Panzer_HierarchicParallelism.hpp>
10 namespace ClosureModel
13 template<
class EvalType,
class Traits,
int NumSpaceDim>
14 IncompressibleCLSNonReconstructedNormal<EvalType, Traits, NumSpaceDim>::
15 IncompressibleCLSNonReconstructedNormal(
const panzer::IntegrationRule& ir)
16 : _q(
"CLS_interface_normal", ir.dl_vector)
17 , _grad_phi_0(
"STAR_GRAD_level_set", ir.dl_vector)
20 this->addEvaluatedField(_q);
23 this->addDependentField(_grad_phi_0);
25 this->setName(
"Incompressible CLS Non-Reconstructed Interface Normal "
26 + std::to_string(num_space_dim) +
"D");
30 template<
class EvalType,
class Traits,
int NumSpaceDim>
31 void IncompressibleCLSNonReconstructedNormal<EvalType, Traits, NumSpaceDim>::
32 evaluateFields(
typename Traits::EvalData workset)
34 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
36 Kokkos::parallel_for(this->getName(), policy, *
this);
40 template<
class EvalType,
class Traits,
int NumSpaceDim>
41 KOKKOS_INLINE_FUNCTION
void
42 IncompressibleCLSNonReconstructedNormal<EvalType, Traits, NumSpaceDim>::operator()(
43 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
45 const int cell = team.league_rank();
46 const int num_point = _q.extent(1);
48 const double tol = 1e-15;
49 const int N = num_space_dim - 1;
54 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
56 _q(cell, point, N) = 0.0;
58 for (
int dim = 0; dim < num_space_dim; ++dim)
60 _q(cell, point, N) += pow(_grad_phi_0(cell, point, dim), 2.0);
63 _q(cell, point, N) = pow(_q(cell, point, N) + tol, 0.5);
66 for (
int dim = 0; dim < num_space_dim; ++dim)
68 _q(cell, point, dim) = _grad_phi_0(cell, point, dim)