6 #include <Kokkos_Core.hpp>
7 #include <Kokkos_DualView.hpp>
12 template<
class Device>
20 Kokkos::View<double***,Kokkos::LayoutRight,HostType>
mesh_r;
21 Kokkos::View<double***,Kokkos::LayoutRight,HostType>
mesh_z;
22 Kokkos::View<double***,Kokkos::LayoutRight,Device>
vol;
23 Kokkos::View<double***,Kokkos::LayoutRight,HostType>
vol_h;
32 Kokkos::DualView<double**,Device>
mesh_dz;
33 Kokkos::DualView<double**,Device>
mesh_dr;
39 Kokkos::DualView<int*,Kokkos::LayoutRight,Device> nspecies_in_grid_tmp(
"nspecies_in_grid", col_spall.
s.h_view.extent(0));
41 for (
int isp = 0; isp < col_spall.
s.h_view.extent(0); isp++){
42 int gri = col_spall.
s.h_view(isp,0).grid_index;
43 nspecies_in_grid_tmp.h_view(gri)++;
45 return nspecies_in_grid_tmp;
63 n_species(col_spall.pdf_n.h_view.extent(1)),
64 nvz(col_spall.pdf_n.h_view.extent(2)),
65 nvr(col_spall.pdf_n.h_view.extent(3)),
83 for (
int isp = 0; isp <
n_species; isp++){
85 if(gri!=col_spall.s.h_view(isp,0).grid_index) isp_in_grid=0;
87 gri = col_spall.s.h_view(isp,0).grid_index;
103 void setup_one(
int isp,
int mesh_ind,
double vth,
double dsmu,
double dvp,
double vp_max) {
106 double pi4bb0vth3_dd =
TWOPI*vth*vth*vth*dsmu*dvp;
109 double smu_n = dsmu/3.0;
110 vol_h(mesh_ind,isp,0) = 0.5*pi4bb0vth3_dd*smu_n;
112 for (
int imu = 1; imu <
nvr-1; imu++){
114 vol_h(mesh_ind,isp,imu) = pi4bb0vth3_dd*smu_n;
117 smu_n = dsmu*((nvr-1)-1.0/3.0);
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;
128 vpar_beg.h_view(mesh_ind, isp) = vpar_beg_l;
129 mesh_dz.h_view(mesh_ind, isp) = mesh_dz_l;
130 mesh_dr.h_view(mesh_ind, isp) = mesh_dr_l;
133 for (
int j = 0; j < nvr-1; j++){
134 mesh_r(mesh_ind,isp,j) = mesh_dr_l*j;
135 mesh_r_half.h_view(mesh_ind,j,isp) = mesh_dr_l*(j+0.5);
137 mesh_r(mesh_ind,isp,nvr-1) = mesh_dr_l*(nvr-1);
138 for (
int j = 0; j <
nvz-1; j++){
139 mesh_z(mesh_ind,isp,j) = vpar_beg_l + mesh_dz_l*j;
140 mesh_z_half.h_view(mesh_ind,j,isp) = vpar_beg_l + mesh_dz_l*(j+0.5);
142 mesh_z(mesh_ind,isp,nvz-1) = vpar_beg_l + mesh_dz_l*(nvz-1);
145 for (
int j = 0; j < (nvr-1); j++){
152 const Kokkos::View<int**,HostType>& mesh_nodes,
int mesh_batch_ind){
154 for (
int mesh_ind = 0; mesh_ind<col_species.
s.h_view.extent(1); mesh_ind++){
155 for (
int gri = 0; gri <
n; gri++){
156 const int FIRST_SPECIES_OF_GRID = 0;
160 int inode = mesh_nodes(mesh_batch_ind,mesh_ind);
161 double vth = all_species[col_species.
s.h_view(isp,mesh_ind).gid].get_f0_eq_thermal_velocity_lnode_h(inode);
177 Kokkos::View<double***,Kokkos::LayoutRight,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 Kokkos::View<double***,Kokkos::LayoutRight,Device> lvol =
vol;
190 int i1 = rem/nvr_loc;
191 int i2 = rem%nvr_loc;
192 lvol(i2,i1,i0) = vol_tmp(i0,i1,i2);
Kokkos::View< double ****, Device > delta_r
Definition: col_vgrids.hpp:24
Kokkos::View< double ***, Kokkos::LayoutRight, Device > vol
Definition: col_vgrids.hpp:22
const int n
Number of velocity grids.
Definition: col_vgrids.hpp:15
Kokkos::DualView< double **, Device > mesh_dr
Definition: col_vgrids.hpp:33
Kokkos::DualView< double **, Device > mesh_dz
Definition: col_vgrids.hpp:32
Kokkos::View< double ***, Kokkos::LayoutRight, HostType > mesh_z
Definition: col_vgrids.hpp:21
Kokkos::View< double ****, Device > delta_z
Definition: col_vgrids.hpp:25
void setup_all(const std::vector< Species< Device >> &all_species, const CollisionSpecies< Device > &col_species, const Kokkos::View< int **, HostType > &mesh_nodes, int mesh_batch_ind)
Definition: col_vgrids.hpp:151
Kokkos::DualView< double ***, Device > mesh_z_half
Definition: col_vgrids.hpp:29
Kokkos::View< double ***, Kokkos::LayoutRight, HostType > vol_h
Definition: col_vgrids.hpp:23
double dvp
grid spacing in parallel velocity
Definition: vgrid_distribution.hpp:25
const int nvz
grid points in z
Definition: col_vgrids.hpp:19
Kokkos::DualView< int **, Kokkos::LayoutRight, Device > map_grid_to_species
Definition: col_vgrids.hpp:35
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
Kokkos::DualView< int *, Kokkos::LayoutRight, Device > count_species_in_grid(const CollisionSpecies< Device > &col_spall) const
Definition: col_vgrids.hpp:38
idx
Definition: diag_f0_df_port1.hpp:32
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:103
Kokkos::DualView< int *, Kokkos::LayoutRight, Device > nspecies_in_grid
Definition: col_vgrids.hpp:14
Kokkos::DualView< double ***, Device > mesh_r_half
Definition: col_vgrids.hpp:28
Kokkos::DualView< double **, Device > vpar_beg
Definition: col_vgrids.hpp:31
const int n_species
Number of species total.
Definition: col_vgrids.hpp:17
Kokkos::DualView< double ***, Device > local_center_volume
Definition: col_vgrids.hpp:30
double dsmu
grid spacing in mu
Definition: vgrid_distribution.hpp:27
const VGridDistribution< HostType > f
Definition: col_species.hpp:83
Definition: species.hpp:74
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
int count_grids() const
Definition: col_vgrids.hpp:49
Definition: col_species.hpp:81
constexpr double TWOPI
Definition: constants.hpp:9
Kokkos::View< double ***, Kokkos::LayoutRight, HostType > mesh_r
Definition: col_vgrids.hpp:20
double vp_max
max parallel velocity
Definition: vgrid_distribution.hpp:24