1 #ifndef VERTEXCFD_BOUNDARYSTATE_ELECTRICCURRENTDENSITYINSULATING_IMPL_HPP
2 #define VERTEXCFD_BOUNDARYSTATE_ELECTRICCURRENTDENSITYINSULATING_IMPL_HPP
4 #include "utils/VertexCFD_Utils_VectorField.hpp"
6 #include <Panzer_HierarchicParallelism.hpp>
10 namespace BoundaryCondition
13 template<
class EvalType,
class Traits,
int NumSpaceDim>
14 ElectricCurrentDensityInsulating<EvalType, Traits, NumSpaceDim>::
15 ElectricCurrentDensityInsulating(
const panzer::IntegrationRule& ir)
16 : _boundary_electric_potential(
"BOUNDARY_electric_potential", ir.dl_scalar)
17 , _boundary_grad_electric_potential(
"BOUNDARY_GRAD_electric_potential",
19 , _electric_potential(
"electric_potential", ir.dl_scalar)
20 , _grad_electric_potential(
"GRAD_electric_potential", ir.dl_vector)
21 , _normals(
"Side Normal", ir.dl_vector)
23 this->addDependentField(_electric_potential);
24 this->addEvaluatedField(_boundary_electric_potential);
26 this->addDependentField(_grad_electric_potential);
27 this->addEvaluatedField(_boundary_grad_electric_potential);
29 this->addDependentField(_normals);
31 Utils::addDependentVectorField(
32 *
this, ir.dl_scalar, _boundary_velocity,
"BOUNDARY_velocity_");
33 Utils::addDependentVectorField(*
this, ir.dl_scalar, _velocity,
"velocity_");
34 Utils::addDependentVectorField(
35 *
this, ir.dl_scalar, _ext_magn_field,
"external_magnetic_field_");
37 this->setName(
"Boundary State Electric Current Density Insulating");
41 template<
class EvalType,
class Traits,
int NumSpaceDim>
42 void ElectricCurrentDensityInsulating<EvalType, Traits, NumSpaceDim>::evaluateFields(
43 typename Traits::EvalData workset)
45 auto policy = panzer::HP::inst().teamPolicy<scalar_type, PHX::Device>(
47 Kokkos::parallel_for(this->getName(), policy, *
this);
51 template<
class EvalType,
class Traits,
int NumSpaceDim>
52 KOKKOS_INLINE_FUNCTION
void
53 ElectricCurrentDensityInsulating<EvalType, Traits, NumSpaceDim>::operator()(
54 const Kokkos::TeamPolicy<PHX::exec_space>::member_type& team)
const
56 const int cell = team.league_rank();
57 const int num_point = _electric_potential.extent(1);
58 const int num_grad_dim = _normals.extent(2);
61 Kokkos::TeamThreadRange(team, 0, num_point), [&](
const int point) {
66 _boundary_grad_electric_potential(cell, point, 0)
67 = _velocity[1](cell, point) * _ext_magn_field[2](cell, point);
69 _boundary_grad_electric_potential(cell, point, 1)
70 = -_velocity[0](cell, point) * _ext_magn_field[2](cell, point);
71 if (num_grad_dim == 3)
74 _boundary_grad_electric_potential(cell, point, 0)
75 -= _velocity[2](cell, point)
76 * _ext_magn_field[1](cell, point);
77 _boundary_grad_electric_potential(cell, point, 1)
78 += _velocity[2](cell, point)
79 * _ext_magn_field[0](cell, point);
81 _boundary_grad_electric_potential(cell, point, 2)
82 = _velocity[0](cell, point)
83 * _ext_magn_field[1](cell, point);
84 _boundary_grad_electric_potential(cell, point, 2)
85 -= _velocity[1](cell, point)
86 * _ext_magn_field[0](cell, point);
90 auto&& grad_phi_dot_n = _boundary_electric_potential(cell, point);
92 for (
int dim = 0; dim < num_grad_dim; ++dim)
95 += (_grad_electric_potential(cell, point, dim)
96 - _boundary_grad_electric_potential(cell, point, dim))
97 * _normals(cell, point, dim);
104 _boundary_grad_electric_potential(cell, point, 0)
105 -= _boundary_velocity[1](cell, point)
106 * _ext_magn_field[2](cell, point);
108 _boundary_grad_electric_potential(cell, point, 1)
109 -= -_boundary_velocity[0](cell, point)
110 * _ext_magn_field[2](cell, point);
111 if (num_grad_dim == 3)
114 _boundary_grad_electric_potential(cell, point, 0)
115 += _boundary_velocity[2](cell, point)
116 * _ext_magn_field[1](cell, point);
117 _boundary_grad_electric_potential(cell, point, 1)
118 -= _boundary_velocity[2](cell, point)
119 * _ext_magn_field[0](cell, point);
121 _boundary_grad_electric_potential(cell, point, 2)
122 -= _boundary_velocity[0](cell, point)
123 * _ext_magn_field[1](cell, point);
124 _boundary_grad_electric_potential(cell, point, 2)
125 += _boundary_velocity[1](cell, point)
126 * _ext_magn_field[0](cell, point);
130 for (
int dim = 0; dim < num_grad_dim; ++dim)
132 _boundary_grad_electric_potential(cell, point, dim)
133 += _grad_electric_potential(cell, point, dim)
134 - grad_phi_dot_n * _normals(cell, point, dim);
137 _boundary_electric_potential(cell, point)
138 = _electric_potential(cell, point);
147 #endif // VERTEXCFD_BOUNDARYSTATE_ELECTRICCURRENTDENSITYINSULATING_IMPL_HPP