MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_AggregationStructuredAlgorithm_kokkos_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // MueLu: A package for multigrid based preconditioning
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact
39 // Jonathan Hu (jhu@sandia.gov)
40 // Andrey Prokopenko (aprokop@sandia.gov)
41 // Ray Tuminaro (rstumin@sandia.gov)
42 //
43 // ***********************************************************************
44 //
45 // @HEADER
46 #ifndef MUELU_AGGREGATIONSTRUCTUREDALGORITHM_KOKKOS_DECL_HPP
47 #define MUELU_AGGREGATIONSTRUCTUREDALGORITHM_KOKKOS_DECL_HPP
48 
49 #include "MueLu_ConfigDefs.hpp"
52 
56 #include "MueLu_LWGraph_kokkos.hpp"
57 
58 namespace MueLu {
73  template<class LocalOrdinal = DefaultLocalOrdinal,
75  class Node = DefaultNode>
77  public MueLu::AggregationAlgorithmBase_kokkos<LocalOrdinal,GlobalOrdinal,Node> {
78 #undef MUELU_AGGREGATIONSTRUCTUREDALGORITHM_KOKKOS_SHORT
80 
81  public:
82 
83  using local_graph_type = typename LWGraph_kokkos::local_graph_type;
84  using non_const_row_map_type = typename local_graph_type::row_map_type::non_const_type;
85  using size_type = typename local_graph_type::size_type;
86  using entries_type = typename local_graph_type::entries_type;
87  using execution_space = typename local_graph_type::device_type::execution_space;
88  using memory_space = typename local_graph_type::device_type::memory_space;
89 
90  using LOVectorView = decltype(std::declval<LOVector>().template getLocalView<memory_space>());
93 
95 
96 
99 
102 
104 
105 
107 
108 
111  void BuildAggregates(const Teuchos::ParameterList& params,
112  const LWGraph_kokkos& graph,
113  Aggregates_kokkos& aggregates,
115  LO& numNonAggregatedNodes) const;
116 
119  void BuildGraph(const LWGraph_kokkos& graph,
120  RCP<IndexManager_kokkos>& geoData,
121  const LO dofsPerNode,
122  RCP<CrsGraph>& myGraph) const;
124 
125  std::string description() const { return "Aggretation: structured algorithm"; }
126 
128 
129  IndexManager_kokkos geoData_;
130  const int myRank_;
134 
136  const int myRank,
138  LOVectorView vertex2AggID,
139  LOVectorView procWinner);
140 
141  KOKKOS_INLINE_FUNCTION
142  void operator() (const LO nodeIdx, LO& lNumAggregatedNodes) const;
143 
144  }; // struct fillAggregatesFunctor
145 
147 
148  IndexManager_kokkos geoData_;
149  const int numGhostedNodes_;
150  const LO dofsPerNode_;
156 
157 
159  const LO numGhostedNodes, const LO dofsPerNode,
160  constIntTupleView coarseRate, constIntTupleView endRate,
161  constLOTupleView lFineNodesPerDir,
162  non_const_row_map_type rowPtr, entries_type colIndex);
163 
164  KOKKOS_INLINE_FUNCTION
165  void operator() (const LO nodeIdx) const;
166 
167  }; // struct computeGraphDataConstantFunctor
168 
170 
171  IndexManager_kokkos geoData_;
172  const LO dofsPerNode_;
174  const LO numLocalRows_;
178 
180  const LO dofsPerNode,
181  const int numInterpolationPoints, const LO numLocalRows,
182  constIntTupleView coarseRate, constLOTupleView lFineNodesPerDir,
183  non_const_row_map_type rowPtr);
184 
185  KOKKOS_INLINE_FUNCTION
186  void operator() (const LO rowIdx, GO& update, const bool final) const;
187  }; // struct computeGraphRowPtrFunctor
188 
190 
191  IndexManager_kokkos geoData_;
192  const int numDimensions_;
193  const int numGhostedNodes_;
194  const LO dofsPerNode_;
202 
203 
205  const int numDimensions,
206  const LO numGhostedNodes, const LO dofsPerNode,
207  const int numInterpolationPoints,
208  constIntTupleView coarseRate, constIntTupleView endRate,
209  constLOTupleView lFineNodesPerDir,
210  constLOTupleView ghostedNodesPerDir,
211  non_const_row_map_type rowPtr, entries_type colIndex);
212 
213  KOKKOS_INLINE_FUNCTION
214  void operator() (const LO nodeIdx) const;
215 
216  }; // struct computeGraphDataLinearFunctor
217 
218  }; // class AggregationStructuredAlgorithm_kokkos
219 
220 } //namespace MueLu
221 
222 #define MUELU_AGGREGATIONSTRUCTUREDALGORITHM_KOKKOS_SHORT
223 #endif /* MUELU_AGGREGATIONSTRUCTUREDALGORITHM_DECL_HPP_ */
typename local_graph_type::device_type::execution_space execution_space
typename local_graph_type::row_map_type::non_const_type non_const_row_map_type
MueLu::DefaultLocalOrdinal LocalOrdinal
KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
typename Kokkos::View< const int[3], memory_space > constIntTupleView
decltype(std::declval< LOVector >().template getLocalView< memory_space >()) LOVectorView
MueLu::DefaultNode Node
computeGraphRowPtrFunctor(RCP< IndexManager_kokkos > geoData, const LO dofsPerNode, const int numInterpolationPoints, const LO numLocalRows, constIntTupleView coarseRate, constLOTupleView lFineNodesPerDir, non_const_row_map_type rowPtr)
MueLu::DefaultGlobalOrdinal GlobalOrdinal
void BuildAggregates(const Teuchos::ParameterList &params, const LWGraph_kokkos &graph, Aggregates_kokkos &aggregates, Kokkos::View< unsigned *, memory_space > &aggStat, LO &numNonAggregatedNodes) const
Build aggregates object.
typename Kokkos::View< const LO[3], memory_space > constLOTupleView
KOKKOS_INLINE_FUNCTION void operator()(const LO rowIdx, GO &update, const bool final) const
computeGraphDataLinearFunctor(RCP< IndexManager_kokkos > geoData, const int numDimensions, const LO numGhostedNodes, const LO dofsPerNode, const int numInterpolationPoints, constIntTupleView coarseRate, constIntTupleView endRate, constLOTupleView lFineNodesPerDir, constLOTupleView ghostedNodesPerDir, non_const_row_map_type rowPtr, entries_type colIndex)
fillAggregatesFunctor(RCP< IndexManager_kokkos > geoData, const int myRank, Kokkos::View< unsigned *, memory_space > aggStat, LOVectorView vertex2AggID, LOVectorView procWinner)
KOKKOS_INLINE_FUNCTION void operator()(const LO nodeIdx, LO &lNumAggregatedNodes) const
typename local_graph_type::device_type::memory_space memory_space
computeGraphDataConstantFunctor(RCP< IndexManager_kokkos > geoData, const LO numGhostedNodes, const LO dofsPerNode, constIntTupleView coarseRate, constIntTupleView endRate, constLOTupleView lFineNodesPerDir, non_const_row_map_type rowPtr, entries_type colIndex)
void BuildGraph(const LWGraph_kokkos &graph, RCP< IndexManager_kokkos > &geoData, const LO dofsPerNode, RCP< CrsGraph > &myGraph) const
Build a CrsGraph instead of aggregates.