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