1 #ifndef VERTEXCFD_CLOSURE_FULLINDUCTIONMODELERRORNORMS_IMPL_HPP
2 #define VERTEXCFD_CLOSURE_FULLINDUCTIONMODELERRORNORMS_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 FullInductionModelErrorNorms<EvalType, Traits, NumSpaceDim>::
23 FullInductionModelErrorNorms(
const panzer::IntegrationRule& ir)
24 : _volume(
"volume", ir.dl_scalar)
27 Utils::addDependentVectorField(*
this,
29 _exact_induced_magnetic_field,
30 "Exact_induced_magnetic_field_");
33 Utils::addDependentVectorField(*
this,
35 _induced_magnetic_field,
36 "induced_magnetic_field_");
39 Utils::addEvaluatedVectorField(
40 *
this, ir.dl_scalar, _L1_error_induced,
"L1_Error_induction_");
41 Utils::addEvaluatedVectorField(
42 *
this, ir.dl_scalar, _L2_error_induced,
"L2_Error_induction_");
44 this->addEvaluatedField(_volume);
46 this->setName(
"Full Induction Model Error Norms "
47 + std::to_string(num_space_dim) +
"D");
51 template<
class EvalType,
class Traits,
int NumSpaceDim>
52 void FullInductionModelErrorNorms<EvalType, Traits, NumSpaceDim>::evaluateFields(
53 typename Traits::EvalData workset)
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 FullInductionModelErrorNorms<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 = _induced_magnetic_field[0].extent(1);
70 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
75 for (
int i = 0; i < num_space_dim; ++i)
77 _L1_error_induced[i](cell, point)
78 = abs(_induced_magnetic_field[i](cell, point)
79 - _exact_induced_magnetic_field[i](cell, point));
80 _L2_error_induced[i](cell, point)
81 = pow(_induced_magnetic_field[i](cell, point)
82 - _exact_induced_magnetic_field[i](cell, point),
86 _volume(cell, point) = 1.0;
95 #endif // VERTEXCFD_CLOSURE_FULLINDUCTIONMODELERRORNORMS_IMPL_HPP