1 #ifndef FIELD_ALIGNED_LOCAL_FIELDS_HPP
2 #define FIELD_ALIGNED_LOCAL_FIELDS_HPP
20 template<KinType KT, PhiInterpType PIT>
27 template<
class Device>
32 template<
class Device>
36 fields.
fields_at_point(push_controls, grid, B,gradpsi,grid_wts,rho_wts, fld);
54 #if defined(DELTAF_CONV) && !defined(EXPLICIT_EM)
66 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
69 double grad2 = gradpsi.
r[i_simd]*gradpsi.
r[i_simd] + gradpsi.
z[i_simd]*gradpsi.
z[i_simd];
72 E.r[i_simd] = (fld.
E.
r[i_simd] *gradpsi.
r[i_simd] + fld.
E.
z[i_simd] *gradpsi.
z[i_simd])/grad2;
73 E.z[i_simd] = (fld.
E.
r[i_simd] *B.
r[i_simd] + fld.
E.
z[i_simd] *B.
z[i_simd] )/Bp;
74 E.phi[i_simd] = (
E.z[i_simd]*Bp + fld.
E.
phi[i_simd]*B.
phi[i_simd] )/Bmag;
78 dAh.r[i_simd] = (fld.dAh.r[i_simd]*gradpsi.
r[i_simd] + fld.dAh.z[i_simd]*gradpsi.
z[i_simd])/grad2;
79 dAh.z[i_simd] = (fld.dAh.r[i_simd]*B.
r[i_simd] + fld.dAh.z[i_simd]*B.
z[i_simd] )/Bp;
80 dAh.phi[i_simd] = (
dAh.z[i_simd] *Bp + fld.dAh.phi[i_simd]*B.
phi[i_simd] )/Bmag;
85 dAs.r[i_simd] = (fld.dAs.r[i_simd]*gradpsi.
r[i_simd] + fld.dAs.z[i_simd]*gradpsi.
z[i_simd])/grad2;
86 dAs.z[i_simd] = (fld.dAs.r[i_simd]*B.
r[i_simd] + fld.dAs.z[i_simd]*B.
z[i_simd] )/Bp;
87 dAs.phi[i_simd] = (
dAs.z[i_simd] *Bp + fld.dAs.phi[i_simd]*B.
phi[i_simd] )/Bmag;
94 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
97 double Br_norm = B.
r[i_simd] / Bp;
98 double Bz_norm = B.
z[i_simd] / Bp;
100 fld.
E.
r[i_simd] =
E.r[i_simd]*gradpsi.
r[i_simd]+
E.z[i_simd]*Br_norm;
101 fld.
E.
z[i_simd] =
E.r[i_simd]*gradpsi.
z[i_simd]+
E.z[i_simd]*Bz_norm;
102 fld.
E.
phi[i_simd] = (
E.phi[i_simd]*Bmag - fld.
E.
r[i_simd]*B.
r[i_simd] - fld.
E.
z[i_simd]*B.
z[i_simd])/B.
phi[i_simd];
105 fld.dAh.r[i_simd] =
dAh.r[i_simd]*gradpsi.
r[i_simd]+
dAh.z[i_simd]*Br_norm;
106 fld.dAh.z[i_simd] =
dAh.r[i_simd]*gradpsi.
z[i_simd]+
dAh.z[i_simd]*Bz_norm;
107 fld.dAh.phi[i_simd] = (
dAh.phi[i_simd]*Bmag - fld.dAh.r[i_simd]*B.
r[i_simd] - fld.dAh.z[i_simd]*B.
z[i_simd])/B.
phi[i_simd];
111 fld.dAs.r[i_simd] =
dAs.r[i_simd]*gradpsi.
r[i_simd]+
dAs.z[i_simd]*Br_norm;
112 fld.dAs.z[i_simd] =
dAs.r[i_simd]*gradpsi.
z[i_simd]+
dAs.z[i_simd]*Bz_norm;
113 fld.dAs.phi[i_simd] = (
dAs.phi[i_simd]*Bmag - fld.dAs.r[i_simd]*B.
r[i_simd] - fld.dAs.z[i_simd]*B.
z[i_simd])/B.
phi[i_simd];
121 template<
class Device>
133 magnetic_field.
field(part.
ph.
x(), B, jacb, psi, gradpsi, tdb, rz_outside);
144 gfpack.
fields_at_point(push_controls, grid, B,gradpsi,grid_wts,rho_wts, fld);
147 convert_cyl_to_mag(B, gradpsi, fld);
150 #if defined(DELTAF_CONV) && !defined(EXPLICIT_EM)
164 template<
class Device>
168 convert_mag_to_cyl(B, gradpsi, fld);
171 #if defined(DELTAF_CONV) && !defined(EXPLICIT_EM)
Simd< double > r
Definition: simd.hpp:150
Definition: grid_weights.hpp:73
Definition: grid_weights.hpp:47
Definition: push_controls.hpp:9
Definition: magnetic_field.hpp:12
Definition: grid_field_pack.hpp:21
Definition: local_fields.hpp:7
KOKKOS_INLINE_FUNCTION double poloidal_magnitude(const int i_simd) const
Definition: simd.hpp:181
KOKKOS_INLINE_FUNCTION FieldAlignedLocalFields(const Grid< Device > &grid, const PushControls &push_controls, const Species< Device > &species, const MagneticField< Device > &magnetic_field, const GridFieldPack< Device, PIT > &gfpack, SimdParticles &part, SimdGridWeights< Order::One, PIT > &grid_wts)
Definition: field_aligned_local_fields.hpp:28
PhiInterpType
Definition: globals.hpp:95
Definition: gyro_radius.hpp:24
Definition: gyro_radius.hpp:84
KOKKOS_INLINE_FUNCTION SimdVector2D & x()
Definition: particles.hpp:27
KOKKOS_INLINE_FUNCTION SimdVector & v()
Definition: particles.hpp:39
KOKKOS_INLINE_FUNCTION void convert_cyl_to_mag(const SimdVector &B, const SimdVector2D &gradpsi, const LocalFields &fld)
Definition: field_aligned_local_fields.hpp:65
Simd< double > z
Definition: simd.hpp:141
Definition: globals.hpp:90
KOKKOS_INLINE_FUNCTION void fields_at_point(const GridFieldPack< Device, PhiInterpType::Planes > fields, const PushControls &push_controls, const Grid< Device > &grid, const SimdVector &B, const SimdVector2D &gradpsi, const SimdGridWeights< Order::One, PhiInterpType::Planes > &grid_wts, SimdGyroWeights< GyroKin > &rho_wts, LocalFields &fld) const
Definition: field_aligned_local_fields.hpp:165
SimdPhase ph
Definition: particles.hpp:59
Simd< double > phi
Definition: simd.hpp:152
Definition: particles.hpp:58
Simd< double > z
Definition: simd.hpp:151
KOKKOS_INLINE_FUNCTION FieldAlignedLocalFields(const Grid< Device > &grid, const PushControls &push_controls, const Species< Device > &species, const MagneticField< Device > &magnetic_field, const GridFieldPack< Device, PhiInterpType::Planes > &gfpack, SimdParticles &part, SimdGridWeights< Order::One, PhiInterpType::Planes > &grid_wts)
Definition: field_aligned_local_fields.hpp:122
Simd< double > r
Definition: simd.hpp:140
Definition: field_aligned_local_fields.hpp:21
Definition: magnetic_field.F90:1
SimdVector E
Definition: field_aligned_local_fields.hpp:47
KOKKOS_INLINE_FUNCTION void field(const SimdVector2D &x, SimdVector &bvec, SimdVector(&jacb)[3], Simd< double > &psivec, SimdVector2D &gradpsi, SimdVector &tdb, Simd< bool > &rz_outside) const
Definition: magnetic_field.tpp:131
SimdConstants ct
Definition: particles.hpp:60
KOKKOS_INLINE_FUNCTION void convert_mag_to_cyl(const SimdVector &B, const SimdVector2D &gradpsi, LocalFields &fld) const
Definition: field_aligned_local_fields.hpp:93
KOKKOS_INLINE_FUNCTION void fields_at_point(const PushControls &push_controls, const Grid< Device > &grid, const SimdVector &B, const SimdVector2D &gradpsi, const SimdGridWeights< Order::One, PIT_GLOBAL > &grid_wts, const SimdGyroWeights< PT > &rho_wts, LocalFields &fld) const
Definition: grid_field_pack.hpp:201
Definition: species.hpp:75
KOKKOS_INLINE_FUNCTION void get_grid_weights(const MagneticField< Device > &magnetic_field, const SimdVector &v, const Simd< double > &psi, SimdVector2D &xff, SimdGridWeights< Order::One, PIT > &grid_wts) const
Definition: grid.tpp:32
KOKKOS_INLINE_FUNCTION double magnitude(const int i_simd) const
Definition: simd.hpp:176
Simd< double > mu
Definition: particles.hpp:52
KOKKOS_INLINE_FUNCTION void fields_at_point(const GridFieldPack< Device, PIT > fields, const PushControls &push_controls, const Grid< Device > &grid, const SimdVector &B, const SimdVector2D &gradpsi, const SimdGridWeights< Order::One, PIT > &grid_wts, SimdGyroWeights< KT > &rho_wts, LocalFields &fld) const
Definition: field_aligned_local_fields.hpp:33
SimdVector E
Definition: local_fields.hpp:8
KOKKOS_INLINE_FUNCTION void deactivate(const Simd< bool > &mask)
Definition: particles.hpp:76