1 #ifndef VGRID_DISTRIBUTION_HPP
2 #define VGRID_DISTRIBUTION_HPP
23 w_00(vr_wt.w[0]*vz_wt.w[0]),
24 w_01(vr_wt.w[0]*vz_wt.w[1]),
25 w_10(vr_wt.w[1]*vz_wt.w[0]),
26 w_11(vr_wt.w[1]*vz_wt.w[1])
30 template<
class Device>
36 View<double****,CLayout, Device>
f;
39 View<double*,CLayout, Device, Kokkos::MemoryTraits<Kokkos::Unmanaged>>
f_1D;
53 :
f(
"f", nsp, vgrid.nvr, pol_decomp.nnodes, vgrid.nvz),
63 KOKKOS_INLINE_FUNCTION
double&
operator()(
int isp,
int ivr,
int inode,
int ivz)
const {
return f(isp, ivr, inode, ivz);}
68 double*
data(){
return f.data();}
87 Kokkos::parallel_for(label, Kokkos::MDRangePolicy<Kokkos::Rank<4>,
exec_space>({0, 0, 0, 0}, {
f.extent(0),
f.extent(1),
f.extent(2),
f.extent(3)}), lambda_func);
94 const double& vr = smu;
104 vr_wt.
w[0] *= inv_vgrid_vol * (vr_wt.
i==0 ? 2.0 : 1.0);
105 vr_wt.
w[1] *= inv_vgrid_vol * (vr_wt.
i==
n_vr()-2 ? 2.0 : 1.0);
112 Kokkos::atomic_add(&(
f(wt.
i_vr+0,i_node,wt.
i_vz+0)),value*wt.
w_00);
113 Kokkos::atomic_add(&(
f(wt.
i_vr+0,i_node,wt.
i_vz+1)),value*wt.
w_01);
114 Kokkos::atomic_add(&(
f(wt.
i_vr+1,i_node,wt.
i_vz+0)),value*wt.
w_10);
115 Kokkos::atomic_add(&(
f(wt.
i_vr+1,i_node,wt.
i_vz+1)),value*wt.
w_11);
131 KOKKOS_INLINE_FUNCTION
int n_vr()
const {
139 KOKKOS_INLINE_FUNCTION
int n_vz()
const{
143 KOKKOS_INLINE_FUNCTION
int size()
const{
KOKKOS_INLINE_FUNCTION int n_vr() const
Definition: vgrid_distribution.hpp:131
KOKKOS_INLINE_FUNCTION int size() const
Definition: vgrid_distribution.hpp:143
double w_00
Definition: vgrid_distribution.hpp:15
Definition: linear_weights.hpp:7
Definition: velocity_grid.hpp:7
double get_smu_n(int imu) const
Definition: vgrid_distribution.hpp:148
KOKKOS_INLINE_FUNCTION double gather(int i_node, const VGridWeights &wt) const
Definition: vgrid_distribution.hpp:119
double smu_max
max mu
Definition: vgrid_distribution.hpp:46
KOKKOS_INLINE_FUNCTION VGridWeights get_weights(double smu, double vp, double inv_vgrid_vol) const
Definition: vgrid_distribution.hpp:92
double dvp
grid spacing in parallel velocity
Definition: vgrid_distribution.hpp:45
double w_01
Definition: vgrid_distribution.hpp:16
View< double ****, CLayout, Device > f
Definition: vgrid_distribution.hpp:36
KOKKOS_INLINE_FUNCTION int n_species() const
Definition: vgrid_distribution.hpp:127
KOKKOS_INLINE_FUNCTION double & operator()(int isp, int ivr, int inode, int ivz) const
Definition: vgrid_distribution.hpp:63
double inv_mu0_factor
Definition: vgrid_distribution.hpp:48
double w_11
Definition: vgrid_distribution.hpp:18
VGridDistribution()
Definition: vgrid_distribution.hpp:50
KOKKOS_INLINE_FUNCTION int n_vz() const
Definition: vgrid_distribution.hpp:139
View< double *, CLayout, Device, Kokkos::MemoryTraits< Kokkos::Unmanaged > > f_1D
Definition: vgrid_distribution.hpp:39
VGridDistribution(int nsp, const VelocityGrid &vgrid, const DomainDecomposition< DeviceType > &pol_decomp)
Definition: vgrid_distribution.hpp:52
double w[2]
Definition: linear_weights.hpp:9
typename HostType::execution_space exec_space
Definition: vgrid_distribution.hpp:34
Definition: vgrid_distribution.hpp:31
int i
Definition: linear_weights.hpp:8
int i_vr
Definition: vgrid_distribution.hpp:13
int i_vz
Definition: vgrid_distribution.hpp:14
double dsmu
grid spacing in mu
Definition: vgrid_distribution.hpp:47
void for_each_element(const std::string label, F lambda_func) const
Definition: vgrid_distribution.hpp:86
Definition: vgrid_distribution.hpp:12
KOKKOS_INLINE_FUNCTION VGridWeights(const LinearWeights &vr_wt, const LinearWeights &vz_wt)
Definition: vgrid_distribution.hpp:20
double * data()
Definition: vgrid_distribution.hpp:68
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
KOKKOS_INLINE_FUNCTION int n_nodes() const
Definition: vgrid_distribution.hpp:135
void for_all_elements(const std::string label, F lambda_func) const
Definition: vgrid_distribution.hpp:76
KOKKOS_INLINE_FUNCTION double & operator[](int i) const
Definition: vgrid_distribution.hpp:66
double w_10
Definition: vgrid_distribution.hpp:17
double vp_max
max parallel velocity
Definition: vgrid_distribution.hpp:44
KOKKOS_INLINE_FUNCTION void scatter(int i_node, const VGridWeights &wt, double value) const
Definition: vgrid_distribution.hpp:111