XGC1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sort.hpp
Go to the documentation of this file.
1 #ifndef SORT_HPP
2 #define SORT_HPP
3 
5 #include "grid.hpp"
6 #include "sheath.hpp"
7 
8 template<class Device>
9 struct SortViews{
10  Kokkos::View<double**,Kokkos::LayoutRight,Device> tmp_const;
11  Kokkos::View<int*,Kokkos::LayoutRight,Device> iperm;
12  Kokkos::View<int*,Kokkos::LayoutRight,Device> key;
13 
14  // Permutation
15  Kokkos::View<int*,Kokkos::LayoutRight,Device> count;
16  Kokkos::View<unsigned int*,Kokkos::LayoutRight,Device> place;
17 
18  SortViews(int n_ptl, int n_bins)
19  : tmp_const(Kokkos::ViewAllocateWithoutInitializing("tmp_const"), 4,n_ptl),
20  iperm(Kokkos::ViewAllocateWithoutInitializing("iperm"), n_ptl),
21  key(Kokkos::ViewAllocateWithoutInitializing("key"), n_ptl),
22  count(Kokkos::ViewAllocateWithoutInitializing("count"), n_bins),
23  place(Kokkos::ViewAllocateWithoutInitializing("place"), n_bins) {}
24 
25  inline void resize_key_max(int n_ptl){
26  // Resize to zero first to avoid temporary double allocation
27  Kokkos::resize(tmp_const,4,0);
28  Kokkos::resize(iperm,0);
29  Kokkos::resize(key,0);
30 
31  // Reallocate
32  Kokkos::resize(tmp_const,4,n_ptl);
33  Kokkos::resize(iperm,n_ptl);
34  Kokkos::resize(key,n_ptl);
35  }
36 
37  inline void resize_bin_max(int n_bins){
38  // Resize to zero first to avoid temporary double allocation
39  Kokkos::resize(count,0);
40  Kokkos::resize(place,0);
41 
42  // Reallocate
43  Kokkos::resize(count,n_bins);
44  Kokkos::resize(place,n_bins);
45  }
46 };
47 
48 void sort_particles_by_triangle(SortViews<DeviceType> &sort_views, const Grid<DeviceType> &grid, const MagneticField<DeviceType> &magnetic_field, const Species<DeviceType> &species, const SheathParticles<DeviceType> &sheath_particles, bool sort_sheath_ptl, bool sort_phase0);
49 
50 void sort_particles_by_pid(SortViews<DeviceType> &sort_views, const Grid<DeviceType> &grid, const MagneticField<DeviceType> &magnetic_field, const DomainDecomposition<DeviceType> &pol_decomp, const Species<DeviceType> &species, bool sort_phase0, bool plane_sort_only);
51 
52 void sort_particles_by_key(SortViews<DeviceType> &sort_views, const Species<DeviceType> &species, int n_bins, Cabana::AoSoA<PhaseDataTypes,DeviceType,VEC_LEN>& phase0, Cabana::AoSoA<PhaseDataTypes,DeviceType,VEC_LEN>& dy_sum, bool sort_intermediate_values);
53 
54 int sort_particles_by_field_id(SortViews<DeviceType> &sort_views, const Grid<DeviceType> &grid, const MagneticField<DeviceType> &magnetic_field, const DomainDecomposition<DeviceType> &pol_decomp, const Species<DeviceType> &species, Cabana::AoSoA<PhaseDataTypes,DeviceType,VEC_LEN>& phase0, Cabana::AoSoA<PhaseDataTypes,DeviceType,VEC_LEN>& dy_sum, bool sort_intermediate_values);
55 #endif
Kokkos::View< int *, Kokkos::LayoutRight, Device > key
Sorting key.
Definition: sort.hpp:12
int sort_particles_by_field_id(SortViews< DeviceType > &sort_views, const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field, const DomainDecomposition< DeviceType > &pol_decomp, const Species< DeviceType > &species, Cabana::AoSoA< PhaseDataTypes, DeviceType, VEC_LEN > &phase0, Cabana::AoSoA< PhaseDataTypes, DeviceType, VEC_LEN > &dy_sum, bool sort_intermediate_values)
Definition: sort.cpp:203
void resize_key_max(int n_ptl)
Definition: sort.hpp:25
Definition: magnetic_field.hpp:12
void sort_particles_by_triangle(SortViews< DeviceType > &sort_views, const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field, const Species< DeviceType > &species, const SheathParticles< DeviceType > &sheath_particles, bool sort_sheath_ptl, bool sort_phase0)
Definition: sort.cpp:153
Definition: sheath.hpp:10
void resize_bin_max(int n_bins)
Definition: sort.hpp:37
SortViews(int n_ptl, int n_bins)
Definition: sort.hpp:18
Kokkos::View< int *, Kokkos::LayoutRight, Device > count
How many particles in each bin.
Definition: sort.hpp:15
void sort_particles_by_pid(SortViews< DeviceType > &sort_views, const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field, const DomainDecomposition< DeviceType > &pol_decomp, const Species< DeviceType > &species, bool sort_phase0, bool plane_sort_only)
Definition: sort.cpp:178
Definition: sort.hpp:9
Kokkos::View< int *, Kokkos::LayoutRight, Device > iperm
New order of data to be sorted.
Definition: sort.hpp:11
Kokkos::View< double **, Kokkos::LayoutRight, Device > tmp_const
Temporary array for sorting.
Definition: sort.hpp:10
Definition: magnetic_field.F90:1
Kokkos::View< unsigned int *, Kokkos::LayoutRight, Device > place
Where we are in the particle list.
Definition: sort.hpp:16
Definition: species.hpp:75
void sort_particles_by_key(SortViews< DeviceType > &sort_views, const Species< DeviceType > &species, int n_bins, Cabana::AoSoA< PhaseDataTypes, DeviceType, VEC_LEN > &phase0, Cabana::AoSoA< PhaseDataTypes, DeviceType, VEC_LEN > &dy_sum, bool sort_intermediate_values)
Definition: sort.cpp:234