1 #ifndef GRID_FIELD_PACK_HPP
2 #define GRID_FIELD_PACK_HPP
19 template<
class Device, PhiInterpType PIT>
98 vec.
phi[i_simd]=(vec.
phi[i_simd]*Bmag - vec.
r[i_simd]*B.
r[i_simd] - vec.
z[i_simd]*B.
z[i_simd]) / B.
phi[i_simd];
106 E_rho(node,0).gather(fld.
E,i_simd, wp, corr);
109 E_phi_ff(i_phi,node).gather(fld.
E,i_simd, wp, wts.phi.w, corr);
111 Ah_phi_ff(i_phi,node).gather(fld.Ah,i_simd, wp, wts.phi.w);
112 dAh_phi_ff(i_phi,node).gather(fld.dAh,i_simd, wp, wts.phi.w, corr);
114 if(push_controls.em_mixed_variable) {
115 dAs_phi_ff(i_phi,node).gather(fld.dAs,i_simd, wp, wts.phi.w, corr);
116 As_phi_ff(i_phi,node).gather(fld.As,i_simd, wp, wts.phi.w);
118 if(push_controls.em_mixed_variable && (push_controls.em_pullback_mode==4)) {
119 Epar_em_phi_ff(i_phi,node).gather(fld.Epar_em,i_simd,wp,wts.phi.w);
124 #if defined(XGC1) && defined(DELTAF_CONV)
125 E00_ff(node).gather(fld.E00,i_simd, wp, wts.phi.w, corr);
126 ddpotdt_phi_ff(i_phi,node).gather(fld.ddpotdt,i_simd, wp, wts.phi.w);
134 int irho = wts.rho[0].i;
136 int irho = wts.rho.i;
139 E_rho(node,irho).gather(fld.
E,i_simd, wp, wts, corr, E_rho(node,irho+1));
141 dEr_B2_rho(node,0).gather(fld.dEr_B2,i_simd, wp, corr);
142 dEz_B2_rho(node,0).gather(fld.dEz_B2,i_simd, wp, corr);
143 du2_E_rho(node,0).gather(fld.du2_E,i_simd, wp, corr);
148 Ah_rho_ff(node,irho).gather(fld.Ah,i_simd, wp, wts, Ah_rho_ff(node,irho+1));
149 dAh_rho_ff(node,irho).gather(fld.dAh,i_simd, wp, wts, corr, dAh_rho_ff(node,irho+1));
151 if(push_controls.em_mixed_variable) {
152 dAs_rho_ff(node,irho).gather(fld.dAs,i_simd, wp, wts, corr, dAs_rho_ff(node,irho+1));
153 As_rho_ff(node,irho).gather(fld.As,i_simd, wp, wts, As_rho_ff(node,irho+1));
155 if(push_controls.em_mixed_variable && (push_controls.em_pullback_mode==4)) {
156 Epar_em_rho_ff(node,irho).gather(fld.Epar_em,i_simd,wp,wts, Epar_em_rho_ff(node,irho+1));
196 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
198 int itr_work = itr[i_simd]>0 ? itr[i_simd] : 1;
200 double phi= itr[i_simd]>0 ? fld_phi[i_simd] : 0.0;
209 for (
int ip = 0; ip<3; ip++){
211 double wp = itr[i_simd]>0 ? p[ip][i_simd] : 0.0;
218 #ifdef NEOCLASSICAL_TEST
219 fld.
E.
phi[i_simd]=0.0;
233 fld.
E.
phi[i_simd]=0.0;
235 fld.dAh.phi[i_simd]=0.0;
236 fld.dAs.phi[i_simd]=0.0;
251 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
253 int itr_work = itr[i_simd]>0 ? itr[i_simd] : 1;
254 double phi= itr[i_simd]>0 ? fld_phi[i_simd] : 0.0;
260 int irho = wts.rho[0].i;
262 int irho = wts.rho.i;
266 for (
int ip = 0; ip<3; ip++){
268 double wp = itr[i_simd]>0 ? p[ip][i_simd] : 0.0;
270 Ah_rho_ff(node,irho).gather(Ah,i_simd, wp, wts, Ah_rho_ff(node,irho+1));
282 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
284 int itr_work = itr[i_simd]>0 ? itr[i_simd] : 1;
285 double phi= itr[i_simd]>0 ? fld_phi[i_simd] : 0.0;
291 for (
int ip = 0; ip<3; ip++){
292 int i_node = itr[i_simd]>0 ? grid.
get_node_index(itr_work, ip) : 0;
293 double wp = itr[i_simd]>0 ? p[ip][i_simd] : 0.0;
298 Ah_phi_ff(i_phi,node).gather(Ah,i_simd, wp, wts.phi.w);
308 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
310 int itr_work = itr[i_simd]>0 ? itr[i_simd] : 1;
312 double phi = itr[i_simd]>0 ? fld_phi[i_simd] : 0.0;
316 for(
int ip=0; ip<3; ip++){
318 double wp = itr[i_simd]>0 ? p[ip][i_simd] : 0.0;
323 dpot_ff(node).gather(dpot_out,i_simd, wp, wts.phi.w);
329 dpot(node).gather(dpot_out,i_simd,wp);
KOKKOS_INLINE_FUNCTION void set(int i_simd, double basis, const SimdVector2D &gradpsi)
Definition: field.hpp:40
Simd< double > r
Definition: simd.hpp:150
GridFieldPack()
Definition: grid_field_pack.hpp:67
Definition: gyro_radius.hpp:24
KOKKOS_INLINE_FUNCTION void get_dpot(const Grid< Device > &grid, const Simd< double > &fld_phi, const Simd< int > &itr, const SimdGridVec &p, Simd< double > &dpot_out) const
Definition: grid_field_pack.hpp:304
KOKKOS_INLINE_FUNCTION void get_Ah(const Grid< Device > &grid, const Simd< double > &fld_phi, const Simd< int > &itr, const SimdGridVec &p, SimdGyroRadius< GyroKin > &rho, Simd< double > &Ah) const
Definition: grid_field_pack.hpp:245
bool turb_efield
Definition: grid_field_pack.hpp:27
double inv_drho
1.0 over rho spacing - Used if kintype==Gyrokin
Definition: grid_field_pack.hpp:33
Definition: field_weights.hpp:13
Definition: globals.hpp:83
Definition: push_controls.hpp:8
int phi_offset
Offset for phi_ff field decomposition.
Definition: grid_field_pack.hpp:29
int nplanes
Number of planes.
Definition: grid.hpp:247
Definition: grid_field_pack.hpp:20
GridField< Device, vec2d_if_axisym< PIT >), PIT, TorType::MultiplePlanes, KinType::DriftKin > E_phi_ff
Definition: grid_field_pack.hpp:37
KOKKOS_INLINE_FUNCTION void gather_all_fields(const PushControls &push_controls, int i_simd, int i_node, double wp, const FieldCorrection &corr, const FieldWeights< DriftKin, PIT > &wts, LocalFields &fld) const
Definition: grid_field_pack.hpp:103
KOKKOS_INLINE_FUNCTION int uses_rz_basis(const int inode) const
Definition: grid.tpp:915
Definition: local_fields.hpp:7
Definition: grid_field.hpp:25
bool can_reuse(KinType kintype_in)
Definition: grid_field_pack.hpp:79
GridFieldPack(KinType kintype_in, bool turb_efield_in, int nrho_in, double inv_drho_in)
Definition: grid_field_pack.hpp:70
KOKKOS_INLINE_FUNCTION void get_Ah(const Grid< Device > &grid, const Simd< double > &fld_phi, const Simd< int > &itr, const SimdGridVec &p, SimdGyroRadius< DriftKin > &rho, Simd< double > &Ah) const
Definition: grid_field_pack.hpp:276
KinType kintype
Definition: grid_field_pack.hpp:22
int nrho
Gyroavg dimension (not including 0) - Used if kintype==GyroKin.
Definition: grid_field_pack.hpp:32
KOKKOS_INLINE_FUNCTION int get_node_index(int triangle_index, int tri_vertex_index) const
Definition: grid.tpp:792
KOKKOS_INLINE_FUNCTION void phi_from_para(SimdVector &vec, int i_simd, const SimdVector &B, double Bmag) const
Definition: grid_field_pack.hpp:97
Definition: globals.hpp:84
GridField< Device, vec2d_if_axisym< PIT >), PIT, TorType::OnePlane, KinType::GyroKin > E_rho_ff
Definition: grid_field_pack.hpp:38
Simd< double > phi
Definition: simd.hpp:152
int node_offset
Offset for phi_ff field decomposition.
Definition: grid_field_pack.hpp:30
Simd< double > z
Definition: simd.hpp:151
KinType
Definition: globals.hpp:82
KOKKOS_INLINE_FUNCTION void zero()
Definition: simd.hpp:76
Definition: grid_structs.hpp:7
GridField< Device, VarType::Scalar, PIT, TorType::OnePlane, KinType::DriftKin > dpot_ff
Definition: grid_field_pack.hpp:39
KOKKOS_INLINE_FUNCTION void zero()
Definition: simd.hpp:167
bool is_initialized
Definition: grid_field_pack.hpp:23
Definition: gyro_radius.hpp:96
KOKKOS_INLINE_FUNCTION void gather_all_fields(const PushControls &push_controls, int i_simd, int node, double wp, const FieldCorrection &corr, const FieldWeights< GyroKin, PIT > &wts, LocalFields &fld) const
Definition: grid_field_pack.hpp:131
Definition: gyro_radius.hpp:74
KOKKOS_INLINE_FUNCTION double magnitude(const int i_simd) const
Definition: simd.hpp:176
Definition: grid_field_pack.hpp:16
SimdVector E
Definition: local_fields.hpp:8
KOKKOS_INLINE_FUNCTION void fields_at_point(const PushControls &push_controls, const Grid< Device > &grid, const SimdVector &B, const SimdVector2D &gradpsi, const Simd< double > &fld_phi, const Simd< int > &itr, const SimdGridVec &p, SimdGyroRadius< PT > &rho, LocalFields &fld) const
Definition: grid_field_pack.hpp:175