MueLu  Version of the Day
MueLu_AlgebraicPermutationStrategy_decl.hpp
Go to the documentation of this file.
1 /*
2  * MueLu_AlgebraicPermutationStrategy_decl.hpp
3  *
4  * Created on: Feb 20, 2013
5  * Author: tobias
6  */
7 
8 #ifndef MUELU_ALGEBRAICPERMUTATIONSTRATEGY_DECL_HPP_
9 #define MUELU_ALGEBRAICPERMUTATIONSTRATEGY_DECL_HPP_
10 
11 #include <Xpetra_MultiVector_fwd.hpp>
12 #include <Xpetra_Matrix_fwd.hpp>
13 #include <Xpetra_CrsGraph_fwd.hpp>
14 #include <Xpetra_Vector_fwd.hpp>
15 #include <Xpetra_VectorFactory_fwd.hpp>
16 #include <Xpetra_CrsMatrixWrap_fwd.hpp>
17 #include <Xpetra_Export_fwd.hpp>
18 #include <Xpetra_ExportFactory_fwd.hpp>
19 #include <Xpetra_Import_fwd.hpp>
20 #include <Xpetra_ImportFactory_fwd.hpp>
21 
22 #include "MueLu_ConfigDefs.hpp"
23 #include "MueLu_Level.hpp"
24 #include "MueLu_BaseClass.hpp"
25 
26 namespace MueLu {
27 
28 // template struct for comparing pairs
29 template<class Scalar = double, class LocalOrdinal = int>
30 struct CompPairs {
31  CompPairs(const std::vector<Scalar> & v) : vinternal_(v) {}
32  std::vector<Scalar> vinternal_;
33  bool operator()(LocalOrdinal a, LocalOrdinal b) {
34  //return vinternal_[a] < vinternal_[b];
35  return Teuchos::ScalarTraits<Scalar>::magnitude(vinternal_[a]) > Teuchos::ScalarTraits<Scalar>::magnitude(vinternal_[b]);
36  }
37 };
38 
39 // template function for comparison
40 template<class Scalar, class LocalOrdinal>
41 CompPairs<Scalar,LocalOrdinal> CreateCmpPairs(const std::vector<Scalar> & v) {
43 }
44 
45 // template function for sorting permutations
46 template<class Scalar, class LocalOrdinal>
47 void sortingPermutation(const std::vector<Scalar> & values, std::vector<LocalOrdinal> & v) {
48  size_t size = values.size();
49  v.clear(); v.reserve(size);
50  for(size_t i=0; i<size; ++i)
51  v.push_back(i);
52 
53  std::sort(v.begin(),v.end(), MueLu::CreateCmpPairs<Scalar,LocalOrdinal>(values));
54 }
55 
57 
63  template<class Scalar = double,
64  class LocalOrdinal = int,
65  class GlobalOrdinal = LocalOrdinal,
66  class Node = KokkosClassic::DefaultNode::DefaultNodeType>
68 #undef MUELU_ALGEBRAICPERMUTATIONSTRATEGY_SHORT
69 #include "MueLu_UseShortNames.hpp"
70  public:
71 
77 
79 
81 
94  void BuildPermutation(const Teuchos::RCP<Matrix> & A, const Teuchos::RCP<const Map> permRowMap, Level & currentLevel, const FactoryBase* genFactory) const;
95 
97 
98 
99  private:
100  };
101 
102 } // namespace MueLu
103 
104 #define MUELU_ALGEBRAICPERMUTATIONSTRATEGY_SHORT
105 
106 
107 #endif /* MUELU_ALGEBRAICPERMUTATIONSTRATEGY_DECL_HPP_ */
void sortingPermutation(const std::vector< Scalar > &values, std::vector< LocalOrdinal > &v)
Namespace for MueLu classes and methods.
bool operator()(LocalOrdinal a, LocalOrdinal b)
Base class for factories (e.g., R, P, and A_coarse).
Class that holds all level-specific information.
Definition: MueLu_Level.hpp:99
CompPairs(const std::vector< Scalar > &v)
CompPairs< Scalar, LocalOrdinal > CreateCmpPairs(const std::vector< Scalar > &v)
Base class for MueLu classes.