7#ifndef KERNEL_LAFEM_ARCH_UNIT_FILTER_BLOCKED_HPP 
    8#define KERNEL_LAFEM_ARCH_UNIT_FILTER_BLOCKED_HPP 1 
   12#include <kernel/backend.hpp> 
   21      struct UnitFilterBlocked
 
   23        template <
typename DT_, 
typename IT_>
 
   24        static void filter_rhs(DT_ * v, 
int block_size, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   26          filter_rhs_generic(v, block_size, sv_elements, sv_indices, ue, ign_nans);
 
   29        template <
typename IT_>
 
   30        static void filter_rhs(
double * v, 
int block_size, 
const double * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   32          BACKEND_SKELETON_VOID(filter_rhs_cuda, filter_rhs_generic, filter_rhs_generic, v, block_size, sv_elements, sv_indices, ue, ign_nans)
 
   35        template <
typename IT_>
 
   36        static void filter_rhs(
float * v, 
int block_size, 
const float * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   38          BACKEND_SKELETON_VOID(filter_rhs_cuda, filter_rhs_generic, filter_rhs_generic, v, block_size, sv_elements, sv_indices, ue, ign_nans)
 
   41        template <
typename DT_, 
typename IT_>
 
   42        static void filter_def(DT_ * v, 
int block_size, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   44          filter_def_generic(v, block_size, sv_elements, sv_indices, ue, ign_nans);
 
   47        template <
typename IT_>
 
   48        static void filter_def(
double * v, 
int block_size, 
const double * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   50          BACKEND_SKELETON_VOID(filter_def_cuda, filter_def_generic, filter_def_generic, v, block_size, sv_elements, sv_indices, ue, ign_nans)
 
   53        template <
typename IT_>
 
   54        static void filter_def(
float * v, 
int block_size, 
const float * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   56          BACKEND_SKELETON_VOID(filter_def_cuda, filter_def_generic, filter_def_generic, v, block_size, sv_elements, sv_indices, ue, ign_nans)
 
   59        template<
typename DT_, 
typename IT_>
 
   60        static void filter_unit_mat(DT_* mat, 
const IT_* 
const row_ptr, 
const IT_* 
const col_idx, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   62          filter_unit_mat_generic(mat, row_ptr, col_idx, block_height, block_width, sv_elements, sv_indices, ue, ign_nans);
 
   65        template<
typename IT_>
 
   66        static void filter_unit_mat(
double* mat, 
const IT_* 
const row_ptr, 
const IT_* 
const col_idx, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   68          BACKEND_SKELETON_VOID(filter_unit_mat_cuda, filter_unit_mat_generic, filter_unit_mat_generic, mat, row_ptr, col_idx, block_height, block_width, sv_elements, sv_indices, ue, ign_nans)
 
   71        template<
typename IT_>
 
   72        static void filter_unit_mat(
float* mat, 
const IT_* 
const row_ptr, 
const IT_* 
const col_idx, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   74          BACKEND_SKELETON_VOID(filter_unit_mat_cuda, filter_unit_mat_generic, filter_unit_mat_generic, mat, row_ptr, col_idx, block_height, block_width, sv_elements, sv_indices, ue, ign_nans)
 
   77        template<
typename DT_, 
typename IT_>
 
   78        static void filter_offdiag_row_mat(DT_* mat, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   80          filter_offdiag_row_mat_generic(mat, row_ptr, block_height, block_width, sv_elements, sv_indices, ue, ign_nans);
 
   83        template<
typename IT_>
 
   84        static void filter_offdiag_row_mat(
double* mat, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   86          BACKEND_SKELETON_VOID(filter_offdiag_row_mat_cuda, filter_offdiag_row_mat_generic, filter_offdiag_row_mat_generic, mat, row_ptr, block_height, block_width, sv_elements, sv_indices, ue, ign_nans)
 
   89        template<
typename IT_>
 
   90        static void filter_offdiag_row_mat(
float* mat, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans)
 
   92          BACKEND_SKELETON_VOID(filter_offdiag_row_mat_cuda, filter_offdiag_row_mat_generic, filter_offdiag_row_mat_generic, mat, row_ptr, block_height, block_width, sv_elements, sv_indices, ue, ign_nans)
 
   95        template<
typename DT_, 
typename IT_>
 
   96        static void filter_weak_matrix_rows(DT_* mat_a, 
const DT_* 
const mat_m, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue)
 
   98          filter_weak_matrix_rows_generic(mat_a, mat_m, row_ptr, block_height, block_width, sv_elements, sv_indices, ue);
 
  101        template<
typename IT_>
 
  102        static void filter_weak_matrix_rows(
double* mat_a, 
const double* 
const mat_m, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue)
 
  104          BACKEND_SKELETON_VOID(filter_weak_matrix_rows_cuda, filter_weak_matrix_rows_generic, filter_weak_matrix_rows_generic, mat_a, mat_m, row_ptr, block_height, block_width, sv_elements, sv_indices, ue)
 
  107        template<
typename IT_>
 
  108        static void filter_weak_matrix_rows(
float* mat_a, 
const float* 
const mat_m, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue)
 
  110          BACKEND_SKELETON_VOID(filter_weak_matrix_rows_cuda, filter_weak_matrix_rows_generic, filter_weak_matrix_rows_generic, mat_a, mat_m, row_ptr, block_height, block_width, sv_elements, sv_indices, ue)
 
  113        template <
typename DT_, 
typename IT_>
 
  114        static void filter_rhs_generic(DT_ * v, 
int block_size, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  116        template <
typename DT_, 
typename IT_>
 
  117        static void filter_def_generic(DT_ * v, 
int block_size, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  119        template <
typename DT_, 
typename IT_>
 
  120        static void filter_rhs_cuda(DT_ * v, 
int block_size, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  122        template <
typename DT_, 
typename IT_>
 
  123        static void filter_def_cuda(DT_ * v, 
int block_size, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  125        template<
typename DT_, 
typename IT_>
 
  126        static void filter_unit_mat_generic(DT_* mat, 
const IT_* 
const row_ptr, 
const IT_* 
const col_idx, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  128        template<
typename DT_, 
typename IT_>
 
  129        static void filter_unit_mat_cuda(DT_* mat, 
const IT_* 
const row_ptr, 
const IT_* 
const col_idx, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  131        template<
typename DT_, 
typename IT_>
 
  132        static void filter_offdiag_row_mat_generic(DT_* mat, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  134        template<
typename DT_, 
typename IT_>
 
  135        static void filter_offdiag_row_mat_cuda(DT_* mat, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  137        template<
typename DT_, 
typename IT_>
 
  138        static void filter_weak_matrix_rows_generic(DT_* mat_a, 
const DT_* 
const mat_m, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue);
 
  140        template<
typename DT_, 
typename IT_>
 
  141        static void filter_weak_matrix_rows_cuda(DT_* mat_a, 
const DT_* 
const mat_m, 
const IT_* 
const row_ptr, 
int block_height, 
int block_width, 
const DT_ * 
const sv_elements, 
const IT_ * 
const sv_indices, 
const Index ue);
 
  147      extern template void UnitFilterBlocked::filter_rhs_generic<float, std::uint64_t>(
float * v, 
int block_size, 
const float * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  148      extern template void UnitFilterBlocked::filter_rhs_generic<double, std::uint64_t>(
double * v, 
int block_size, 
const double * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  149      extern template void UnitFilterBlocked::filter_rhs_generic<float, std::uint32_t>(
float * v, 
int block_size, 
const float * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  150      extern template void UnitFilterBlocked::filter_rhs_generic<double, std::uint32_t>(
double * v, 
int block_size, 
const double * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  152      extern template void UnitFilterBlocked::filter_def_generic<float, std::uint64_t>(
float * v, 
int block_size, 
const float * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  153      extern template void UnitFilterBlocked::filter_def_generic<double, std::uint64_t>(
double * v, 
int block_size, 
const double * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  154      extern template void UnitFilterBlocked::filter_def_generic<float, std::uint32_t>(
float * v, 
int block_size, 
const float * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  155      extern template void UnitFilterBlocked::filter_def_generic<double, std::uint32_t>(
double * v, 
int block_size, 
const double * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  157      extern template void UnitFilterBlocked::filter_unit_mat_generic<float, std::uint64_t>(
float* mat, 
const std::uint64_t* 
const row_ptr, 
const std::uint64_t* 
const col_idx, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  158      extern template void UnitFilterBlocked::filter_unit_mat_generic<double, std::uint64_t>(
double* mat, 
const std::uint64_t* 
const row_ptr, 
const std::uint64_t* 
const col_idx, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  159      extern template void UnitFilterBlocked::filter_unit_mat_generic<float, std::uint32_t>(
float* mat, 
const std::uint32_t* 
const row_ptr, 
const std::uint32_t* 
const col_idx, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  160      extern template void UnitFilterBlocked::filter_unit_mat_generic<double, std::uint32_t>(
double* mat, 
const std::uint32_t* 
const row_ptr, 
const std::uint32_t* 
const col_idx, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  162      extern template void UnitFilterBlocked::filter_offdiag_row_mat_generic<float, std::uint64_t>(
float* mat, 
const std::uint64_t* 
const row_ptr, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  163      extern template void UnitFilterBlocked::filter_offdiag_row_mat_generic<double, std::uint64_t>(
double* mat, 
const std::uint64_t* 
const row_ptr, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  164      extern template void UnitFilterBlocked::filter_offdiag_row_mat_generic<float, std::uint32_t>(
float* mat, 
const std::uint32_t* 
const row_ptr, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  165      extern template void UnitFilterBlocked::filter_offdiag_row_mat_generic<double, std::uint32_t>(
double* mat, 
const std::uint32_t* 
const row_ptr, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue, 
bool ign_nans);
 
  167      extern template void UnitFilterBlocked::filter_weak_matrix_rows_generic<float, std::uint64_t>(
float* mat_a, 
const float* 
const mat_m, 
const std::uint64_t* 
const row_ptr, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue);
 
  168      extern template void UnitFilterBlocked::filter_weak_matrix_rows_generic<double, std::uint64_t>(
double* mat_a, 
const double* 
const mat_m, 
const std::uint64_t* 
const row_ptr, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const std::uint64_t * 
const sv_indices, 
const Index ue);
 
  169      extern template void UnitFilterBlocked::filter_weak_matrix_rows_generic<float, std::uint32_t>(
float* mat_a, 
const float* 
const mat_m, 
const std::uint32_t* 
const row_ptr, 
int block_height, 
int block_width, 
const float * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue);
 
  170      extern template void UnitFilterBlocked::filter_weak_matrix_rows_generic<double, std::uint32_t>(
double* mat_a, 
const double* 
const mat_m, 
const std::uint32_t* 
const row_ptr, 
int block_height, 
int block_width, 
const double * 
const sv_elements, 
const std::uint32_t * 
const sv_indices, 
const Index ue);
 
  179#include <kernel/lafem/arch/unit_filter_blocked_generic.hpp> 
std::uint64_t Index
Index data type.