1 #ifndef VERTEXCFD_CLOSURE_SOLIDELECTRICPOTENTIALERRORNORMS_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_SOLIDELECTRICPOTENTIALERRORNORMS_IMPL_HPP
4 #include "utils/VertexCFD_Utils_VectorField.hpp"
6 #include "Panzer_GlobalIndexer.hpp"
7 #include "Panzer_PureBasis.hpp"
8 #include "Panzer_Workset_Utilities.hpp"
9 #include <Panzer_HierarchicParallelism.hpp>
11 #include <Teuchos_Array.hpp>
18 namespace ClosureModel
21 template<
class EvalType,
class Traits,
int NumSpaceDim>
22 SolidElectricPotentialErrorNorms<EvalType, Traits, NumSpaceDim>::
23 SolidElectricPotentialErrorNorms(
const panzer::IntegrationRule& ir)
24 : _L1_error_continuity(
"L1_Error_continuity", ir.dl_scalar)
25 , _L1_error_electric_potential_equation(
26 "L1_Error_electric_potential_equation", ir.dl_scalar)
27 , _L2_error_continuity(
"L2_Error_continuity", ir.dl_scalar)
28 , _L2_error_electric_potential_equation(
29 "L2_Error_electric_potential_equation", ir.dl_scalar)
30 , _volume(
"volume", ir.dl_scalar)
31 , _exact_electric_potential(
"Exact_electric_potential", ir.dl_scalar)
32 , _electric_potential(
"electric_potential", ir.dl_scalar)
35 this->addDependentField(_exact_electric_potential);
38 this->addDependentField(_electric_potential);
41 this->addEvaluatedField(_L1_error_continuity);
42 Utils::addEvaluatedVectorField(
43 *
this, ir.dl_scalar, _L1_error_momentum,
"L1_Error_momentum_");
44 this->addEvaluatedField(_L2_error_continuity);
45 Utils::addEvaluatedVectorField(
46 *
this, ir.dl_scalar, _L2_error_momentum,
"L2_Error_momentum_");
48 this->addEvaluatedField(_L1_error_electric_potential_equation);
49 this->addEvaluatedField(_L2_error_electric_potential_equation);
50 this->addEvaluatedField(_volume);
52 this->setName(
"SolidElectricPotential Error Norms "
53 + std::to_string(num_space_dim) +
"D");
57 template<
class EvalType,
class Traits,
int NumSpaceDim>
58 void SolidElectricPotentialErrorNorms<EvalType, Traits, NumSpaceDim>::evaluateFields(
59 typename Traits::EvalData workset)
61 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
63 Kokkos::parallel_for(this->getName(), policy, *
this);
67 template<
class EvalType,
class Traits,
int NumSpaceDim>
68 KOKKOS_INLINE_FUNCTION
void
69 SolidElectricPotentialErrorNorms<EvalType, Traits, NumSpaceDim>::operator()(
70 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
72 const int cell = team.league_rank();
73 const int num_point = _electric_potential.extent(1);
76 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
82 _L1_error_electric_potential_equation(cell, point)
83 = abs(_electric_potential(cell, point)
84 - _exact_electric_potential(cell, point));
86 _L2_error_electric_potential_equation(cell, point)
87 = pow(_electric_potential(cell, point)
88 - _exact_electric_potential(cell, point),
91 _L1_error_continuity(cell, point) = 0.0;
93 _L2_error_continuity(cell, point) = 0.0;
95 for (
int i = 0; i < num_space_dim; ++i)
97 _L1_error_momentum[i](cell, point) = 0.0;
98 _L2_error_momentum[i](cell, point) = 0.0;
101 _volume(cell, point) = 1.0;
110 #endif // VERTEXCFD_CLOSURE_SOLIDELECTRICPOTENTIALERRORNORMS_IMPL_HPP