XGC1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
uniform_range.hpp
Go to the documentation of this file.
1 #ifndef UNIFORM_RANGE_HPP
2 #define UNIFORM_RANGE_HPP
3 
4 #include "space_settings.hpp"
5 
6 // This struct is where we need to work with a linear range of values, but think it's more efficient
7 // to recalculate values than to store them.
8 struct UniformRange{
9  int n;
10  double val_min;
11  double val_max;
12  double dval;
13 
15 
16  UniformRange(int n, double val_min, double val_max)
17  : n(n),
18  val_min(val_min),
19  val_max(val_max),
20  dval( (val_max-val_min)/(n-1) )
21  {}
22 
23  KOKKOS_INLINE_FUNCTION double get_val(int i) const{
24  return val_min + i*dval;
25  }
26 
27  KOKKOS_INLINE_FUNCTION bool is_in_bounds(double val) const{
28  return (val<=val_max && val>=val_min);
29  }
30 
31  KOKKOS_INLINE_FUNCTION int get_index(double val) const{
32  return (int)((val - val_min)/dval);
33  }
34 
35  // Generate view containing the linear grid
36  template<class Device>
37  View<double*,CLayout,Device> generate_view(const std::string& name) const{
38  // Make a local copy of *this to pass into lambda
39  auto uniform_range = *this;
40  View<double*,CLayout,Device> view(NoInit(name), n);
41 
42  Kokkos::parallel_for("generate_view", Kokkos::RangePolicy<typename Device::execution_space>( 0,n ), KOKKOS_LAMBDA( const int i){
43  view(i) = uniform_range.get_val(i);
44  });
45  Kokkos::fence();
46  return view;
47  }
48 };
49 
50 #endif
UniformRange()
Definition: uniform_range.hpp:14
KOKKOS_INLINE_FUNCTION double get_val(int i) const
Definition: uniform_range.hpp:23
KOKKOS_INLINE_FUNCTION bool is_in_bounds(double val) const
Definition: uniform_range.hpp:27
UniformRange(int n, double val_min, double val_max)
Definition: uniform_range.hpp:16
View< double *, CLayout, Device > generate_view(const std::string &name) const
Definition: uniform_range.hpp:37
double dval
Definition: uniform_range.hpp:12
double val_max
Definition: uniform_range.hpp:11
Definition: uniform_range.hpp:8
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
double val_min
Definition: uniform_range.hpp:10
Kokkos::ViewAllocateWithoutInitializing NoInit
Definition: space_settings.hpp:69
int n
Definition: uniform_range.hpp:9
KOKKOS_INLINE_FUNCTION int get_index(double val) const
Definition: uniform_range.hpp:31