6 #include <Kokkos_Core.hpp>
7 #include <Kokkos_DualView.hpp>
12 template<
class Device>
20 View<double***,CLayout,HostType>
mesh_r;
21 View<double***,CLayout,HostType>
mesh_z;
22 View<double***,CLayout,Device>
vol;
23 View<double***,CLayout,HostType>
vol_h;
27 View<double**,Kokkos::LayoutLeft,HostType>
mesh_dz_h;
28 View<double**,Kokkos::LayoutLeft,HostType>
mesh_dr_h;
30 View<double**,Kokkos::LayoutLeft,Device>
vpar_beg;
31 View<double**,Kokkos::LayoutLeft,Device>
mesh_dz;
32 View<double**,Kokkos::LayoutLeft,Device>
mesh_dr;
38 Kokkos::DualView<int*,CLayout,Device> nspecies_in_grid_tmp(
"nspecies_in_grid", col_spall.
s.h_view.extent(0));
40 for (
int isp = 0; isp < col_spall.
s.h_view.extent(0); isp++){
41 int gri = col_spall.
s.h_view(isp,0).grid_index;
42 nspecies_in_grid_tmp.h_view(gri)++;
44 return nspecies_in_grid_tmp;
62 n_species(col_spall.pdf_n.h_view.extent(1)),
63 nvz(col_spall.pdf_n.h_view.extent(2)),
64 nvr(col_spall.pdf_n.h_view.extent(3)),
82 for (
int isp = 0; isp <
n_species; isp++){
84 if(gri!=col_spall.s.h_view(isp,0).grid_index) isp_in_grid=0;
86 gri = col_spall.s.h_view(isp,0).grid_index;
102 void setup_one(
int isp,
int mesh_ind,
double vth,
double dsmu,
double dvp,
double vp_max) {
105 double pi4bb0vth3_dd =
TWOPI*vth*vth*vth*dsmu*dvp;
108 double smu_n = dsmu/3.0;
109 vol_h(mesh_ind,isp,0) = 0.5*pi4bb0vth3_dd*smu_n;
111 for (
int imu = 1; imu <
nvr-1; imu++){
113 vol_h(mesh_ind,isp,imu) = pi4bb0vth3_dd*smu_n;
117 smu_n = dsmu*(nvr-1);
118 vol_h(mesh_ind,isp,nvr-1) = 0.5*pi4bb0vth3_dd*smu_n;
124 double vpar_beg_l = -vp_max*vth;
125 double mesh_dz_l = dvp*vth;
126 double mesh_dr_l = dsmu*vth;
133 for (
int j = 0; j < nvr-1; j++){
134 mesh_r(mesh_ind,isp,j) = mesh_dr_l*j;
136 mesh_r(mesh_ind,isp,nvr-1) = mesh_dr_l*(nvr-1);
137 for (
int j = 0; j <
nvz-1; j++){
138 mesh_z(mesh_ind,isp,j) = vpar_beg_l + mesh_dz_l*j;
140 mesh_z(mesh_ind,isp,nvz-1) = vpar_beg_l + mesh_dz_l*(nvz-1);
143 KOKKOS_INLINE_FUNCTION
double mesh_r_half(
int ibatch,
int igrid,
int j)
const{
144 return mesh_dr(ibatch, igrid)*(j+0.5);
147 KOKKOS_INLINE_FUNCTION
double mesh_z_half(
int ibatch,
int igrid,
int j)
const{
156 const View<int**,HostType>& mesh_nodes,
int mesh_batch_ind){
158 for (
int mesh_ind = 0; mesh_ind<col_species.
s.h_view.extent(1); mesh_ind++){
159 for (
int gri = 0; gri <
n; gri++){
160 const int FIRST_SPECIES_OF_GRID = 0;
164 int inode = mesh_nodes(mesh_batch_ind,mesh_ind);
165 double vth = 1.0/all_species[col_species.
s.h_view(isp,mesh_ind).gid].f0.fg_vth_inv_h(inode);
177 View<double***,CLayout,Device> vol_tmp(
"vol_tmp",
vol_h.extent(0),
vol_h.extent(1),
vol_h.extent(2));
179 Kokkos::deep_copy(vol_tmp,
vol_h);
182 View<double***,CLayout,Device> lvol =
vol;
187 Kokkos::parallel_for(
"transpose_vol", Kokkos::RangePolicy<ExSpace>( 0, n2*
vol_h.extent(0)), KOKKOS_LAMBDA (
const int idx){
190 int i1 = rem/nvr_loc;
191 int i2 = rem%nvr_loc;
192 lvol(i2,i1,i0) = vol_tmp(i0,i1,i2);
View< double **, Kokkos::LayoutLeft, Device > vpar_beg
Definition: col_vgrids.hpp:30
const int n
Number of velocity grids.
Definition: col_vgrids.hpp:15
View< double **, Kokkos::LayoutLeft, HostType > vpar_beg_h
Definition: col_vgrids.hpp:26
Kokkos::DualView< int *, CLayout, Device > nspecies_in_grid
Definition: col_vgrids.hpp:14
KOKKOS_INLINE_FUNCTION double mesh_z_half(int ibatch, int igrid, int j) const
Definition: col_vgrids.hpp:147
View< double ****, Device > delta_z
Definition: col_vgrids.hpp:25
View< double ****, Device > delta_r
Definition: col_vgrids.hpp:24
double dvp
grid spacing in parallel velocity
Definition: vgrid_distribution.hpp:27
const int nvz
grid points in z
Definition: col_vgrids.hpp:19
Kokkos::DualView< CollisionSpeciesScalars **, Device > s
Definition: col_species.hpp:85
Definition: col_vgrids.hpp:13
const int nvr
grid points in r
Definition: col_vgrids.hpp:18
View< double ***, CLayout, Device > vol
Definition: col_vgrids.hpp:22
View< double ***, CLayout, HostType > mesh_r
Definition: col_vgrids.hpp:20
View< double **, Kokkos::LayoutLeft, Device > mesh_dz
Definition: col_vgrids.hpp:31
const int mb_n_nodes
Batch size.
Definition: col_vgrids.hpp:16
void setup_one(int isp, int mesh_ind, double vth, double dsmu, double dvp, double vp_max)
Definition: col_vgrids.hpp:102
const int n_species
Number of species total.
Definition: col_vgrids.hpp:17
Kokkos::DualView< int *, CLayout, Device > count_species_in_grid(const CollisionSpecies< Device > &col_spall) const
Definition: col_vgrids.hpp:37
double dsmu
grid spacing in mu
Definition: vgrid_distribution.hpp:29
Kokkos::DualView< int **, CLayout, Device > map_grid_to_species
Definition: col_vgrids.hpp:34
View< double ***, CLayout, HostType > mesh_z
Definition: col_vgrids.hpp:21
KOKKOS_INLINE_FUNCTION double mesh_r_half(int ibatch, int igrid, int j) const
Definition: col_vgrids.hpp:143
KOKKOS_INLINE_FUNCTION double local_center_volume(int ibatch, int igrid, int j) const
Definition: col_vgrids.hpp:151
View< double **, Kokkos::LayoutLeft, HostType > mesh_dr_h
Definition: col_vgrids.hpp:28
const VGridDistribution< HostType > f
Definition: col_species.hpp:83
View< double **, Kokkos::LayoutLeft, Device > mesh_dr
Definition: col_vgrids.hpp:32
View< double ***, CLayout, HostType > vol_h
Definition: col_vgrids.hpp:23
Definition: species.hpp:75
void parallel_for(const std::string name, int n_ptl, Function func, Option option, HostAoSoA aosoa_h, DeviceAoSoA aosoa_d)
Definition: streamed_parallel_for.hpp:252
void setup_all(const std::vector< Species< Device >> &all_species, const CollisionSpecies< Device > &col_species, const View< int **, HostType > &mesh_nodes, int mesh_batch_ind)
Definition: col_vgrids.hpp:155
int count_grids() const
Definition: col_vgrids.hpp:48
Definition: col_species.hpp:81
constexpr double TWOPI
Definition: constants.hpp:9
View< double **, Kokkos::LayoutLeft, HostType > mesh_dz_h
Definition: col_vgrids.hpp:27
double vp_max
max parallel velocity
Definition: vgrid_distribution.hpp:26