6 #include <Kokkos_Core.hpp> 
    7 #include <Kokkos_DualView.hpp> 
   63 template<
class Device>
 
   70     Kokkos::View<double***,Device> 
fhalf;
 
   71     Kokkos::View<double***,Device> 
dfdr;
 
   72     Kokkos::View<double***,Device> 
dfdz;
 
   73     Kokkos::View<double****,Device> 
EDs;
 
   74     Kokkos::View<double******,Device> 
M_ab;
 
   75     Kokkos::View<double*****,Device> 
M_s;
 
   80           fhalf(
"fhalf",mb_n_nodes,nvz-1,nvr-1),
 
   81           dfdr(
"dfdr",mb_n_nodes,nvz-1,nvr-1),
 
   82           dfdz(
"dfdz",mb_n_nodes,nvz-1,nvr-1),
 
   83           EDs(
"EDs",mb_n_nodes,nvz-1,nvr-1,
ED::
N),
 
   84           M_s(
"M_s",mb_n_nodes,n_vgrids, (nvr-1)*(nvz-1), 
ED::
N, nvr-1),
 
   85           M_ab(
"M_ab",mb_n_nodes,n_vgrids, n_vgrids-1, (nvr-1)*(nvz-1), 3, (nvr-1)*(nvz-1)),
 
   89             int mat_loc[16] = {4,5,7,8,
 
   94             for (
int i=0;i<16;i++)
 
  106         if(inner_psi_bound <= grid.
psi(inode) &&
 
  107            outer_psi_bound >= grid.
psi(inode) &&
 
  117 template<
class Device>
 
  174 #if defined(USE_GINKGO) && defined(USE_GPU) 
  181         batch_size = nlr.
get<
int>(
"mesh_batch_size", default_batch_size); 
 
  182         if(nlr.
present(
"collisions_solver")){
 
  183             std::string linalg_backend_str = nlr.
get<std::string>(
"collisions_solver", 
"lapack"); 
 
  189             else exit_XGC(
"\nError: Invalid input option. collisions_solver must be 'lapack' or 'ginkgo'.\n");
 
  212         diag_on = nlr.
get<
bool>(
"diag_col_convergence_stat_on",
false); 
 
  215             io_stream = std::make_shared<XGC_IO_Stream>();
 
  235         int n_threads = omp_get_max_threads();
 
  236         int dbs=1; 
while ( dbs < n_threads ) dbs*=2; 
 
  246         int plasma_nspecies = nlr.
get<
int>(
"ptl_nsp",1);
 
  255         int col_grid_batch_size;
 
  257         col_grid_batch_size = nlr.
get<
int>(
"mesh_batch_size", default_batch_size);
 
  259         double device_col_GB_per_vertex = plasma_nspecies*std::max(plasma_nspecies-1,1)*(vgrid.
nvp*vgrid.
nmu)*(vgrid.
nvp*vgrid.
nmu)*8*
BYTES_TO_GB;
 
  260         double gpu_memory_usage = (col_grid_batch_size*device_col_GB_per_vertex);
 
  264         return memory_prediction;
 
  268     static KOKKOS_INLINE_FUNCTION 
double get_maxw_fac(
double mesh_dr, 
double mesh_r, 
double numeric_vth2) ;
 
  277     static KOKKOS_INLINE_FUNCTION 
void LU_matrix_ftn(
int mesh_ind, 
int gri, 
int grj, 
int spi, 
int cell_i,
int cell_j,
const CollisionVelocityGrids<Device>& col_vgrids,
int mprl_col, 
int mat_pos,
double coeff1,
double coeff2, 
const TmpColData<Device>& tcd, 
const Kokkos::View<int**,Device>& index_map_LU_d,
typename Collisions::GridMatrix<Device>::values_array_t LU_values);
 
  289     static KOKKOS_INLINE_FUNCTION 
void E_and_D_s(
int idx, 
int mb_n_nodes, 
int nvrm1, 
int nvzm1, 
const TmpColData<Device>& tcd, 
int gri) ;
 
  310     void collision(
const CollisionSpecies<Device>& col_spall, 
const VertexList& assigned, 
const View<int*,CLayout,HostType>& n_subcycles_local, 
double dt, 
const VGridDistribution<HostType>& df_out, 
const View<int*,CLayout,HostType>& converged_local, 
const View<double*,CLayout,HostType>& node_cost) 
const;
 
Definition: col_grid.hpp:118
 
int ginkgo_max_iterations
Definition: col_grid.hpp:127
 
void LU_matrix(int mb_n_nodes, int gri, int grj, int spi, const CollisionVelocityGrids< Device > &col_vgrids, const TmpColData< Device > &tcd, Collisions::GridMatrix< Device > *const mtx) const
Definition: col_grid.cpp:1240
 
static int get_default_batch_size()
Definition: col_grid.hpp:229
 
View< double *, Device > get_numeric_v_thermal_equil(int mb_n_nodes, int spi, int grj, const CollisionVelocityGrids< Device > &col_vgrids, const CollisionSpecies< Device > &col_spall) const
Definition: col_grid.cpp:1097
 
bool diag_on
Definition: col_grid.hpp:139
 
void picard_loop(int vpic_inner_iter_max, const CollisionVelocityGrids< Device > &col_vgrids, const CollisionSpecies< Device > &col_spall, TmpColData< Device > &tcd, const std::unique_ptr< Collisions::GridMatrix< Device >> &matrix, int mb_n_nodes, Kokkos::View< Convergence::Status *, HostType > &convergence_status) const
Definition: col_grid.cpp:628
 
void f_df(int mb_n_nodes, const CollisionVelocityGrids< Device > &col_vgrids, const CollisionSpecies< Device > &col_spall, int spi, int grj, TmpColData< Device > &tcd) const
Definition: col_grid.cpp:977
 
VertexList vertices
Definition: col_grid.hpp:135
 
Collisions::LinAlgBackend labackend
Definition: col_grid.hpp:124
 
int start_step
starting step for collisions; should be part of step trigger
Definition: col_grid.hpp:129
 
void angle_avg(int mb_n_nodes, int gri, int grj, CollisionVelocityGrids< Device > &col_vgrids, TmpColData< Device > &tcd) const
Definition: col_grid.cpp:733
 
CollisionGrid(NLReader::NamelistReader &nlr, const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid, bool exclude_private_region, bool overwrite_existing_files)
Definition: col_grid.hpp:145
 
static KOKKOS_INLINE_FUNCTION void LU_matrix_ftn(int mesh_ind, int gri, int grj, int spi, int cell_i, int cell_j, const CollisionVelocityGrids< Device > &col_vgrids, int mprl_col, int mat_pos, double coeff1, double coeff2, const TmpColData< Device > &tcd, const Kokkos::View< int **, Device > &index_map_LU_d, typename Collisions::GridMatrix< Device >::values_array_t LU_values)
Definition: col_grid.cpp:1195
 
View< float *, CLayout, HostType > timing_all
Definition: col_grid.hpp:133
 
std::shared_ptr< XGC_IO_Stream > io_stream
Definition: col_grid.hpp:140
 
void collision(const CollisionSpecies< Device > &col_spall, const VertexList &assigned, const View< int *, CLayout, HostType > &n_subcycles_local, double dt, const VGridDistribution< HostType > &df_out, const View< int *, CLayout, HostType > &converged_local, const View< double *, CLayout, HostType > &node_cost) const
Definition: col_grid.cpp:19
 
void E_and_D(int mb_n_nodes, int gri, int grj, const CollisionVelocityGrids< Device > &col_vgrids, TmpColData< Device > &tcd) const
Definition: col_grid.cpp:821
 
static KOKKOS_INLINE_FUNCTION double get_maxw_fac(double mesh_dr, double mesh_r, double numeric_vth2)
Definition: col_grid.cpp:1077
 
static KOKKOS_INLINE_FUNCTION void angle_avg_s(int idx, int mb_n_nodes, int nvrm1, int nvzm1, const CollisionVelocityGrids< Device > &col_vgrids, const TmpColData< Device > &tcd, int gri)
Definition: col_grid.cpp:912
 
int batch_size
Definition: col_grid.hpp:122
 
Kokkos::View< Convergence::Status *, HostType > core(CollisionVelocityGrids< Device > &col_vgrids, const CollisionSpecies< Device > &col_spall, TmpColData< Device > &tcd, const std::unique_ptr< Collisions::GridMatrix< Device >> &solve_matrix, int mb_n_nodes) const
Definition: col_grid.cpp:516
 
void core_delta_init(int mb_n_nodes, int gri, int grj, int spi, CollisionVelocityGrids< Device > &col_vgrids, const CollisionSpecies< Device > &col_spall) const
Definition: col_grid.cpp:1134
 
View< bool[1], CLayout, HostType > timing_available
Definition: col_grid.hpp:134
 
double ginkgo_residual_reduction
Definition: col_grid.hpp:126
 
static KOKKOS_INLINE_FUNCTION void E_and_D_s(int idx, int mb_n_nodes, int nvrm1, int nvzm1, const TmpColData< Device > &tcd, int gri)
Definition: col_grid.cpp:1032
 
CollisionGrid()
Definition: col_grid.hpp:142
 
bool timing_is_available() const
Definition: col_grid.hpp:225
 
int max_n_subcycles
Maximum number of subcycles that may be attempted.
Definition: col_grid.hpp:131
 
bool async_reassign
Definition: col_grid.hpp:137
 
View< int *, CLayout, HostType > n_subcycles
Number of subcycles for each vertex.
Definition: col_grid.hpp:132
 
static KOKKOS_INLINE_FUNCTION void angle_avg_ab(int idx, int mb_n_nodes, int nvrm1, int nvzm1, const CollisionVelocityGrids< Device > &col_vgrids, const TmpColData< Device > &tcd, int gri, int grj)
Definition: col_grid.cpp:751
 
static MemoryPrediction estimate_memory_usage(NLReader::NamelistReader &nlr)
Definition: col_grid.hpp:244
 
static KOKKOS_INLINE_FUNCTION void E_and_D_ab(int idx, int mb_n_nodes, int nvrm1, int nvzm1, const CollisionVelocityGrids< Device > &col_vgrids, const TmpColData< Device > &tcd, int gri, int grj)
Definition: col_grid.cpp:859
 
Definition: col_species.hpp:105
 
Definition: col_grid_matrix.hpp:24
 
Kokkos::View< value_type ***, Kokkos::LayoutRight, Device, Kokkos::MemoryTraits< Kokkos::Unmanaged > > values_array_t
Definition: col_grid_matrix.hpp:31
 
Kokkos::View< double *, Kokkos::LayoutRight, Device > psi
An array of psi coordinates.
Definition: grid.hpp:185
 
KOKKOS_INLINE_FUNCTION bool node_is_in_included_region(const int inode, const bool exclude_private_region) const
Definition: grid.tpp:239
 
int nnode
Number of grid nodes.
Definition: grid.hpp:174
 
Definition: magnetic_field.hpp:12
 
Definition: NamelistReader.hpp:193
 
T get(const string ¶m, const T default_val, int val_ind=0)
Definition: NamelistReader.hpp:386
 
void use_namelist(const string &namelist, Options required=Required)
Definition: NamelistReader.hpp:360
 
@ Optional
Definition: NamelistReader.hpp:287
 
bool present(const string ¶m)
Definition: NamelistReader.hpp:374
 
Definition: vertex_list.hpp:53
 
VertexList vertices_in_range(const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid, bool exclude_private_region, double inner_psi_bound, double outer_psi_bound)
Definition: col_grid.hpp:104
 
constexpr double BYTES_TO_GB
Definition: constants.hpp:13
 
void exit_XGC(std::string msg)
Definition: globals.hpp:37
 
bool is_rank_zero()
Definition: globals.hpp:27
 
MPI_Comm SML_COMM_WORLD
Definition: my_mpi.cpp:4
 
LinAlgBackend
Definition: col_grid_matrix.hpp:227
 
Definition: col_grid.hpp:39
 
Status
Definition: col_grid.hpp:43
 
@ NaNOrInfFound
Definition: col_grid.hpp:44
 
@ InProgress
Definition: col_grid.hpp:51
 
@ TooManyNegValues
Definition: col_grid.hpp:46
 
@ MaxedIter
Definition: col_grid.hpp:45
 
@ PosCorrectionFail
Definition: col_grid.hpp:47
 
@ FirstStepFail
Definition: col_grid.hpp:48
 
@ NotAttempted
Definition: col_grid.hpp:49
 
@ Success
Definition: col_grid.hpp:50
 
bool is_okay(Status convergence_status)
Definition: col_grid.hpp:54
 
Definition: col_grid.hpp:28
 
@ ZZ
Definition: col_grid.hpp:32
 
@ RR
Definition: col_grid.hpp:30
 
@ EZ
Definition: col_grid.hpp:34
 
@ N
Definition: col_grid.hpp:35
 
@ ER
Definition: col_grid.hpp:33
 
@ RZ
Definition: col_grid.hpp:31
 
Definition: magnetic_field.F90:1
 
logical sml_electron_on
Whether to run with adiabatic (.false.) or kinetic (.true.) electrons.
Definition: module.F90:242
 
Kokkos::ViewAllocateWithoutInitializing NoInit
Definition: space_settings.hpp:69
 
Definition: col_vgrids.hpp:13
 
Definition: memory_prediction.hpp:4
 
Definition: col_grid.hpp:64
 
Kokkos::DualView< int[4][4], Device > mat_pos_rel_indx
Definition: col_grid.hpp:68
 
Kokkos::View< double ****, Device > EDs
Definition: col_grid.hpp:73
 
Kokkos::View< double *****, Device > M_s
Definition: col_grid.hpp:75
 
Kokkos::View< double ***, Device > dfdz
Definition: col_grid.hpp:72
 
Kokkos::View< double ***, Device > fhalf
Definition: col_grid.hpp:70
 
Kokkos::View< double ***, Device > dfdr
Definition: col_grid.hpp:71
 
Kokkos::View< double ******, Device > M_ab
Definition: col_grid.hpp:74
 
Kokkos::View< double ***, Device > gammac_spall
Definition: col_grid.hpp:67
 
Definition: velocity_grid.hpp:8
 
int nmu
n points in mu (not including zero)
Definition: velocity_grid.hpp:13
 
int nvp
n points in parallel velocity (not including zero)
Definition: velocity_grid.hpp:9