MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_CoalesceDropFactory_kokkos_def.hpp File Reference
#include <Kokkos_Core.hpp>
#include <KokkosSparse_CrsMatrix.hpp>
#include <sstream>
#include <string>
#include <tuple>
#include "Xpetra_Matrix.hpp"
#include "MueLu_CoalesceDropFactory_kokkos_decl.hpp"
#include "MueLu_AmalgamationInfo.hpp"
#include "MueLu_Exceptions.hpp"
#include "MueLu_Level.hpp"
#include "MueLu_LWGraph_kokkos.hpp"
#include "MueLu_MasterList.hpp"
#include "MueLu_Monitor.hpp"
#include "MueLu_BoundaryDetection.hpp"
#include "MueLu_ClassicalDropping.hpp"
#include "MueLu_CutDrop.hpp"
#include "MueLu_DroppingCommon.hpp"
#include "MueLu_DistanceLaplacianDropping.hpp"
#include "MueLu_MatrixConstruction.hpp"

Go to the source code of this file.

Namespaces

 MueLu
 Namespace for MueLu classes and methods.
 

Macros

#define SET_VALID_ENTRY(name)   validParamList->setEntry(name, MasterList::getEntry(name))
 
#define MueLu_runBoundaryFunctors(...)
 
#define MueLu_runDroppingFunctorsImpl(...)
 
#define MueLu_runDroppingFunctors(...)
 
#define MueLu_runDroppingFunctors_on_A(SoC)
 
#define MueLu_runDroppingFunctors_on_dlap_inner(SoC)
 
#define MueLu_runDroppingFunctors_on_dlap(SoC)
 
#define MueLu_runBoundaryFunctors(...)
 
#define MueLu_runDroppingFunctorsImpl(...)
 
#define MueLu_runDroppingFunctors(...)
 
#define MueLu_runDroppingFunctors_on_A(SoC)
 
#define MueLu_runDroppingFunctors_on_dlap_inner(SoC)
 
#define MueLu_runDroppingFunctors_on_dlap(SoC)
 

Functions

template<class magnitudeType >
void MueLu::translateOldAlgoParam (const Teuchos::ParameterList &pL, std::string &droppingMethod, bool &useBlocking, std::string &socUsesMatrix, std::string &socUsesMeasure, bool &symmetrizeDroppedGraph, bool &generateColoringGraph, magnitudeType &threshold)
 

Macro Definition Documentation

#define SET_VALID_ENTRY (   name)    validParamList->setEntry(name, MasterList::getEntry(name))
#define MueLu_runBoundaryFunctors (   ...)
Value:
{ \
auto boundaries = BoundaryDetection::BoundaryFunctor(lclA, __VA_ARGS__); \
Kokkos::parallel_for("CoalesceDrop::BoundaryDetection", range, boundaries); \
}
#define MueLu_runDroppingFunctorsImpl (   ...)
Value:
{ \
auto countingFunctor = MatrixConstruction::PointwiseCountingFunctor(lclA, results, filtered_rowptr, __VA_ARGS__); \
Kokkos::parallel_scan("MueLu::CoalesceDrop::CountEntries", range, countingFunctor, nnz_filtered); \
}
#define MueLu_runDroppingFunctors (   ...)
Value:
{ \
if (useBlocking) { \
auto BlockNumber = Get<RCP<LocalOrdinalVector>>(currentLevel, "BlockNumber"); \
auto block_diagonalize = Misc::BlockDiagonalizeFunctor(*A, *BlockNumber, results); \
MueLu_runDroppingFunctorsImpl(block_diagonalize, __VA_ARGS__); \
}
#define MueLu_runDroppingFunctorsImpl(...)
#define MueLu_runDroppingFunctors_on_A (   SoC)
Value:
{ \
if (droppingMethod == "point-wise") { \
auto dropping = ClassicalDropping::make_drop_functor<SoC>(*A, threshold, results); \
\
if (aggregationMayCreateDirichlet) { \
drop_boundaries, \
preserve_diagonals, \
mark_singletons_as_boundary); \
} else { \
drop_boundaries, \
preserve_diagonals); \
} \
} else if (droppingMethod == "cut-drop") { \
auto comparison = CutDrop::make_comparison_functor<SoC>(*A, results); \
auto cut_drop = CutDrop::CutDropFunctor(comparison, threshold); \
MueLu_runDroppingFunctors(drop_boundaries, \
preserve_diagonals, \
cut_drop); \
} \
}
#define MueLu_runDroppingFunctors(...)
#define MueLu_runDroppingFunctors_on_dlap_inner (   SoC)
Value:
{ \
if (droppingMethod == "point-wise") { \
auto dist_laplacian_dropping = DistanceLaplacian::make_drop_functor<SoC>(*A, threshold, dist2, results); \
\
if (aggregationMayCreateDirichlet) { \
MueLu_runDroppingFunctors(dist_laplacian_dropping, \
drop_boundaries, \
preserve_diagonals, \
mark_singletons_as_boundary); \
} else { \
MueLu_runDroppingFunctors(dist_laplacian_dropping, \
drop_boundaries, \
preserve_diagonals); \
} \
} else if (droppingMethod == "cut-drop") { \
auto comparison = CutDrop::make_dlap_comparison_functor<SoC>(*A, dist2, results); \
auto cut_drop = CutDrop::CutDropFunctor(comparison, threshold); \
MueLu_runDroppingFunctors(drop_boundaries, \
preserve_diagonals, \
cut_drop); \
} \
}
#define MueLu_runDroppingFunctors(...)
#define MueLu_runDroppingFunctors_on_dlap (   SoC)
Value:
{ \
if (distanceLaplacianMetric == "unweighted") { \
auto dist2 = DistanceLaplacian::UnweightedDistanceFunctor(*A, coords); \
} else if (distanceLaplacianMetric == "material") { \
auto material = GetMaterial(currentLevel, coords->getNumVectors()); \
if (material->getNumVectors() == 1) { \
auto dist2 = DistanceLaplacian::ScalarMaterialDistanceFunctor(*A, coords, material); \
} else { \
auto dist2 = DistanceLaplacian::TensorMaterialDistanceFunctor(*A, coords, material); \
} \
} \
}
#define MueLu_runDroppingFunctors_on_dlap_inner(SoC)
#define MueLu_runBoundaryFunctors (   ...)
Value:
{ \
auto boundaries = BoundaryDetection::BoundaryFunctor(lclA, __VA_ARGS__); \
Kokkos::parallel_for("CoalesceDrop::BoundaryDetection", range, boundaries); \
}
#define MueLu_runDroppingFunctorsImpl (   ...)
Value:
{ \
auto countingFunctor = MatrixConstruction::VectorCountingFunctor(lclA, blkPartSize, colTranslation, results, filtered_rowptr, graph_rowptr, __VA_ARGS__); \
Kokkos::parallel_scan("MueLu::CoalesceDrop::CountEntries", range, countingFunctor, nnz); \
}
#define MueLu_runDroppingFunctors (   ...)
Value:
{ \
if (useBlocking) { \
auto BlockNumber = Get<RCP<LocalOrdinalVector>>(currentLevel, "BlockNumber"); \
auto block_diagonalize = Misc::BlockDiagonalizeVectorFunctor(*A, *BlockNumber, nonUniqueMap, results, rowTranslation, colTranslation); \
MueLu_runDroppingFunctorsImpl(block_diagonalize, __VA_ARGS__); \
}
#define MueLu_runDroppingFunctorsImpl(...)
#define MueLu_runDroppingFunctors_on_A (   SoC)
Value:
{ \
if (droppingMethod == "point-wise") { \
auto dropping = ClassicalDropping::make_drop_functor<SoC>(*A, threshold, results); \
\
if (aggregationMayCreateDirichlet) { \
preserve_diagonals, \
mark_singletons_as_boundary); \
} else { \
preserve_diagonals); \
} \
} else if (droppingMethod == "cut-drop") { \
auto comparison = CutDrop::make_comparison_functor<SoC>(*A, results); \
auto cut_drop = CutDrop::CutDropFunctor(comparison, threshold); \
MueLu_runDroppingFunctors(drop_boundaries, \
preserve_diagonals, \
cut_drop); \
} \
}
#define MueLu_runDroppingFunctors(...)
#define MueLu_runDroppingFunctors_on_dlap_inner (   SoC)
Value:
{ \
if (droppingMethod == "point-wise") { \
auto dist_laplacian_dropping = DistanceLaplacian::make_vector_drop_functor<SoC>(*A, *mergedA, threshold, dist2, results, rowTranslation, colTranslation); \
\
if (aggregationMayCreateDirichlet) { \
MueLu_runDroppingFunctors(dist_laplacian_dropping, \
preserve_diagonals, \
mark_singletons_as_boundary); \
} else { \
MueLu_runDroppingFunctors(dist_laplacian_dropping, \
preserve_diagonals); \
} \
} else if (droppingMethod == "cut-drop") { \
auto comparison = CutDrop::make_dlap_comparison_functor<SoC>(*A, dist2, results); \
auto cut_drop = CutDrop::CutDropFunctor(comparison, threshold); \
MueLu_runDroppingFunctors(drop_boundaries, \
preserve_diagonals, \
cut_drop); \
} \
}
#define MueLu_runDroppingFunctors(...)
#define MueLu_runDroppingFunctors_on_dlap (   SoC)
Value:
{ \
if (distanceLaplacianMetric == "unweighted") { \
auto dist2 = DistanceLaplacian::UnweightedDistanceFunctor(*mergedA, coords); \
} else if (distanceLaplacianMetric == "weighted") { \
auto k_dlap_weights_host = Kokkos::View<double*, Kokkos::HostSpace, Kokkos::MemoryTraits<Kokkos::Unmanaged>>(&dlap_weights[0], dlap_weights.size()); \
auto k_dlap_weights = Kokkos::View<double*>("dlap_weights", k_dlap_weights_host.extent(0)); \
Kokkos::deep_copy(k_dlap_weights, k_dlap_weights_host); \
auto dist2 = DistanceLaplacian::WeightedDistanceFunctor(*mergedA, coords, k_dlap_weights); \
} else if (distanceLaplacianMetric == "block weighted") { \
auto k_dlap_weights_host = Kokkos::View<double*, Kokkos::HostSpace, Kokkos::MemoryTraits<Kokkos::Unmanaged>>(&dlap_weights[0], dlap_weights.size()); \
auto k_dlap_weights = Kokkos::View<double*>("dlap_weights", k_dlap_weights_host.extent(0)); \
Kokkos::deep_copy(k_dlap_weights, k_dlap_weights_host); \
auto dist2 = DistanceLaplacian::BlockWeightedDistanceFunctor(*mergedA, coords, k_dlap_weights, interleaved_blocksize); \
} else if (distanceLaplacianMetric == "material") { \
auto material = GetMaterial(currentLevel, coords->getNumVectors()); \
if (material->getNumVectors() == 1) { \
auto dist2 = DistanceLaplacian::ScalarMaterialDistanceFunctor(*mergedA, coords, material); \
} else { \
auto dist2 = DistanceLaplacian::TensorMaterialDistanceFunctor(*mergedA, coords, material); \
} \
} \
}
#define MueLu_runDroppingFunctors_on_dlap_inner(SoC)