1 #ifndef FIELD_ALIGNED_LOCAL_FIELDS_HPP
2 #define FIELD_ALIGNED_LOCAL_FIELDS_HPP
21 template<KinType KT, PhiInterpType PIT>
28 template<
class Device>
33 template<
class Device>
37 fields.
fields_at_point(push_controls, grid, B,gradpsi,fld_phi,itr,p,rho, fld);
67 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
70 double grad2 = gradpsi.
r[i_simd]*gradpsi.
r[i_simd] + gradpsi.
z[i_simd]*gradpsi.
z[i_simd];
73 E.r[i_simd] = (fld.
E.
r[i_simd] *gradpsi.
r[i_simd] + fld.
E.
z[i_simd] *gradpsi.
z[i_simd])/grad2;
74 E.z[i_simd] = (fld.
E.
r[i_simd] *B.
r[i_simd] + fld.
E.
z[i_simd] *B.
z[i_simd] )/Bp;
75 E.phi[i_simd] = (E.z[i_simd]*Bp + fld.
E.
phi[i_simd]*B.
phi[i_simd] )/Bmag;
79 dAh.r[i_simd] = (fld.dAh.r[i_simd]*gradpsi.
r[i_simd] + fld.dAh.z[i_simd]*gradpsi.
z[i_simd])/grad2;
80 dAh.z[i_simd] = (fld.dAh.r[i_simd]*B.
r[i_simd] + fld.dAh.z[i_simd]*B.
z[i_simd] )/Bp;
81 dAh.phi[i_simd] = (dAh.z[i_simd] *Bp + fld.dAh.phi[i_simd]*B.
phi[i_simd] )/Bmag;
86 dAs.r[i_simd] = (fld.dAs.r[i_simd]*gradpsi.
r[i_simd] + fld.dAs.z[i_simd]*gradpsi.
z[i_simd])/grad2;
87 dAs.z[i_simd] = (fld.dAs.r[i_simd]*B.
r[i_simd] + fld.dAs.z[i_simd]*B.
z[i_simd] )/Bp;
88 dAs.phi[i_simd] = (dAs.z[i_simd] *Bp + fld.dAs.phi[i_simd]*B.
phi[i_simd] )/Bmag;
95 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
98 double Br_norm = B.
r[i_simd] / Bp;
99 double Bz_norm = B.
z[i_simd] / Bp;
101 fld.
E.
r[i_simd] = E.r[i_simd]*gradpsi.
r[i_simd]+E.z[i_simd]*Br_norm;
102 fld.
E.
z[i_simd] = E.r[i_simd]*gradpsi.
z[i_simd]+E.z[i_simd]*Bz_norm;
103 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];
106 fld.dAh.r[i_simd] = dAh.r[i_simd]*gradpsi.
r[i_simd]+dAh.z[i_simd]*Br_norm;
107 fld.dAh.z[i_simd] = dAh.r[i_simd]*gradpsi.
z[i_simd]+dAh.z[i_simd]*Bz_norm;
108 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];
112 fld.dAs.r[i_simd] = dAs.r[i_simd]*gradpsi.
r[i_simd]+dAs.z[i_simd]*Br_norm;
113 fld.dAs.z[i_simd] = dAs.r[i_simd]*gradpsi.
z[i_simd]+dAs.z[i_simd]*Bz_norm;
114 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];
122 template<
class Device>
134 magnetic_field.
field(part.
ph.
x(), B, jacb, psi, gradpsi, tdb, rz_outside);
150 gfpack.
fields_at_point(push_controls, grid, B,gradpsi,fld_phi,itr,p,rho, fld);
153 convert_cyl_to_mag(B, gradpsi, fld);
160 ddpotdt = fld.ddpotdt;
165 Epar_em = fld.Epar_em;
170 template<
class Device>
174 convert_mag_to_cyl(B, gradpsi, fld);
181 fld.ddpotdt = ddpotdt;
186 fld.Epar_em = Epar_em;
Simd< double > r
Definition: simd.hpp:150
Definition: gyro_radius.hpp:24
Definition: push_controls.hpp:8
Definition: magnetic_field.hpp:12
Definition: grid_field_pack.hpp:20
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 Simd< double > &fld_phi, const Simd< int > &itr, const SimdGridVec &p, SimdGyroRadius< KT > &rho, LocalFields &fld) const
Definition: field_aligned_local_fields.hpp:34
Definition: local_fields.hpp:7
KOKKOS_INLINE_FUNCTION double poloidal_magnitude(const int i_simd) const
Definition: simd.hpp:181
PhiInterpType
Definition: globals.hpp:89
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:66
Simd< double > z
Definition: simd.hpp:141
Definition: globals.hpp:84
SimdPhase ph
Definition: particles.hpp:59
KOKKOS_INLINE_FUNCTION void wedge_modulo_phi(Simd< double > &phi_mod) const
Definition: grid.tpp:673
Simd< double > phi
Definition: simd.hpp:152
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, Simd< int > &itr)
Definition: field_aligned_local_fields.hpp:123
Definition: particles.hpp:58
Simd< double > z
Definition: simd.hpp:151
Definition: grid_structs.hpp:7
Simd< double > r
Definition: simd.hpp:140
Definition: field_aligned_local_fields.hpp:22
Simd< long long int > gid
Definition: particles.hpp:61
Simd< double > phi
Definition: particles.hpp:20
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, Simd< int > &itr)
Definition: field_aligned_local_fields.hpp:29
Definition: magnetic_field.F90:1
SimdVector E
Definition: field_aligned_local_fields.hpp:48
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:149
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:94
Definition: species.hpp:74
Definition: gyro_radius.hpp:74
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, PhiInterpType::Planes > fields, 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< GyroKin > &rho, LocalFields &fld) const
Definition: field_aligned_local_fields.hpp:171
SimdVector E
Definition: local_fields.hpp:8
KOKKOS_INLINE_FUNCTION void remove_particles(Simd< long long int > &gid, const Simd< bool > &deactivate)
Definition: particles.tpp:4
KOKKOS_INLINE_FUNCTION void charge_search_index(const MagneticField< Device > &magnetic_field, const SimdVector2D &x, const Simd< double > &phi, const Simd< double > &psi, SimdVector2D &xff, Simd< int > &itr, SimdGridVec &p) const
Definition: grid.tpp:591
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