10 #ifndef MUELU_SCALARDROPPINGDISTANCELAPLACIAN_DECL_HPP 
   11 #define MUELU_SCALARDROPPINGDISTANCELAPLACIAN_DECL_HPP 
   18 #include "MueLu_Utilities.hpp" 
   19 #include "MueLu_LWGraph_kokkos.hpp" 
   23 template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node, Misc::StrengthMeasure SoC>
 
   31   using rowptr_type         = 
typename local_graph_type::row_map_type::non_const_type;
 
   32   using entries_type        = 
typename local_graph_type::entries_type::non_const_type;
 
   33   using values_type         = 
typename local_matrix_type::values_type::non_const_type;
 
   41   template <
class DistanceFunctorType>
 
   47                                                 const std::string& droppingMethod,
 
   49                                                 const bool aggregationMayCreateDirichlet,
 
   50                                                 const bool symmetrizeDroppedGraph,
 
   51                                                 const bool useBlocking,
 
   52                                                 DistanceFunctorType& dist2,
 
   55     auto lclA               = A.getLocalMatrixDevice();
 
   58     if (droppingMethod == 
"point-wise") {
 
   59       auto dist_laplacian_dropping = DistanceLaplacian::make_drop_functor<SoC>(A, threshold, dist2, results);
 
   61       if (aggregationMayCreateDirichlet) {
 
   64         if (symmetrizeDroppedGraph) {
 
   67                                                                dist_laplacian_dropping,
 
   70                                                                mark_singletons_as_boundary);
 
   74                                                                dist_laplacian_dropping,
 
   77                                                                mark_singletons_as_boundary);
 
   80         if (symmetrizeDroppedGraph) {
 
   83                                                                dist_laplacian_dropping,
 
   89                                                                dist_laplacian_dropping,
 
   94     } 
else if (droppingMethod == 
"cut-drop") {
 
   95       auto comparison = CutDrop::make_dlap_comparison_functor<SoC>(A, dist2, results);
 
   98       if (symmetrizeDroppedGraph) {
 
  119                                           const std::string& droppingMethod,
 
  121                                           const bool aggregationMayCreateDirichlet,
 
  122                                           const bool symmetrizeDroppedGraph,
 
  123                                           const bool useBlocking,
 
  124                                           const std::string& distanceLaplacianMetric,
 
typename local_matrix_type::values_type::non_const_type values_type
 
typename device_type::memory_space memory_space
 
MueLu::DefaultLocalOrdinal LocalOrdinal
 
typename Teuchos::ScalarTraits< Scalar >::magnitudeType magnitudeType
 
typename crs_matrix_type::local_matrix_type local_matrix_type
 
static void runDroppingFunctors_on_dlap_inner(matrix_type &A, results_view &results, rowptr_type &filtered_rowptr, LocalOrdinal &nnz_filtered, boundary_nodes_type &boundaryNodes, const std::string &droppingMethod, const magnitudeType threshold, const bool aggregationMayCreateDirichlet, const bool symmetrizeDroppedGraph, const bool useBlocking, DistanceFunctorType &dist2, Level &level, const Factory &factory)
 
Kokkos::View< DecisionType *, memory_space > results_view
 
static void runDroppingFunctors(matrix_type &A, results_view &results, rowptr_type &filtered_rowptr, LocalOrdinal &nnz_filtered, const bool useBlocking, Level &level, const Factory &factory, Functors &...functors)
 
typename local_graph_type::row_map_type::non_const_type rowptr_type
 
typename MueLu::LWGraph_kokkos< LocalOrdinal, GlobalOrdinal, Node >::boundary_nodes_type boundary_nodes_type
 
Functor that drops boundary nodes for a blockSize == 1 problem. 
 
typename Node::device_type device_type
 
Functor that marks singletons (all off-diagonal entries in a row are dropped) as boundary. 
 
Kokkos::View< bool *, memory_space > boundary_nodes_type
 
Functor that drops boundary nodes for a blockSize == 1 problem. 
 
Class that holds all level-specific information. 
 
Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > matrix_type
 
Order each row by a criterion, compare the ratio of values and drop all entries once the ratio is bel...
 
typename GraphType::local_graph_type local_graph_type
 
Functor that marks diagonal as kept, unless the are already marked as boundary. 
 
static void runDroppingFunctors_on_dlap(matrix_type &A, results_view &results, rowptr_type &filtered_rowptr, LocalOrdinal &nnz_filtered, boundary_nodes_type &boundaryNodes, const std::string &droppingMethod, const magnitudeType threshold, const bool aggregationMayCreateDirichlet, const bool symmetrizeDroppedGraph, const bool useBlocking, const std::string &distanceLaplacianMetric, Level &level, const Factory &factory)
 
Kokkos::View< DecisionType *, memory_space > results_view
 
typename local_graph_type::row_map_type::non_const_type rowptr_type
 
typename local_graph_type::entries_type::non_const_type entries_type