MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_AmalgamationInfo_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 /*
47  * MueLu_AmalgamationInfo_decl.hpp
48  *
49  * Created on: Mar 28, 2012
50  * Author: wiesner
51  */
52 
53 #ifndef MUELU_AMALGAMATIONINFO_KOKKOS_DECL_HPP_
54 #define MUELU_AMALGAMATIONINFO_KOKKOS_DECL_HPP_
55 
56 #include <Xpetra_ConfigDefs.hpp> // global_size_t
57 #include <Xpetra_Map_fwd.hpp>
59 
60 #include "MueLu_ConfigDefs.hpp"
61 
62 #include "MueLu_BaseClass.hpp"
63 
66 
67 namespace MueLu {
68 
77  template<class LocalOrdinal = DefaultLocalOrdinal,
79  class Node = DefaultNode>
81  : public BaseClass {
82 #undef MUELU_AMALGAMATIONINFO_KOKKOS_SHORT
84 
85  public:
86 
88  RCP<Array<LO> > colTranslation,
89  RCP<const Map> nodeRowMap,
90  RCP<const Map> nodeColMap,
91  RCP< const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node> > const &columnMap,
92  LO fullblocksize, GO offset, LO blockid, LO nStridedOffset, LO stridedblocksize) :
93  rowTranslation_(rowTranslation),
94  colTranslation_(colTranslation),
95  nodeRowMap_(nodeRowMap),
96  nodeColMap_(nodeColMap),
97  columnMap_(columnMap),
98  fullblocksize_(fullblocksize),
99  offset_(offset),
100  blockid_(blockid),
101  nStridedOffset_(nStridedOffset),
102  stridedblocksize_(stridedblocksize),
103  indexBase_(columnMap->getIndexBase())
104  {}
105 
107 
109  std::string description() const { return "AmalgamationInfo"; }
110 
112  //using MueLu::Describable::describe; // overloading, not hiding
113  //void describe(Teuchos::FancyOStream &out, const VerbLevel verbLevel = Default) const;;
114  void print(Teuchos::FancyOStream &out, const VerbLevel verbLevel = Default) const;
115 
118 
119  /* @brief Translation arrays
120  *
121  * Returns translation arrays providing local node ids given local dof ids built from either
122  * the non-overlapping (unique) row map or the overlapping (non-unique) column map.
123  * The getColTranslation routine, e.g., is used for the MergeRows routine in CoalesceDropFactory.
124  */
129 
135  void UnamalgamateAggregatesLO(const Aggregates_kokkos& aggregates, Teuchos::ArrayRCP<LocalOrdinal>& aggStart, Teuchos::ArrayRCP<LO>& aggToRowMap) const;
136 
141 
149  GO ComputeGlobalDOF(GO const &gNodeID, LO const &k=0) const;
150 
153  GO GlobalOffset() { return offset_; }
155 
157  void GetStridingInformation(LO& fullBlockSize, LO& blockID, LO& stridingOffset, LO& stridedBlockSize, GO& indexBase) {
158  fullBlockSize = fullblocksize_;
159  blockID = blockid_;
160  stridingOffset = nStridedOffset_;
161  stridedBlockSize = stridedblocksize_;
162  indexBase = indexBase_;
163  }
164 
165  private:
166 
168 
169 
170  // arrays containing local node ids given local dof ids
173 
174  // node row and column map of graph (built from row and column map of A)
177 
179  // keep an RCP on the column map to make sure that the map is still valid when it is used
181 
183 
185 
193 
194  };
195 
196 } // namespace MueLu
197 
198 #define MUELU_AMALGAMATIONINFO_KOKKOS_SHORT
199 #endif /* MUELU_AMALGAMATIONINFO_KOKKOS_DECL_HPP_ */
Teuchos::RCP< Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > ComputeUnamalgamatedImportDofMap(const Aggregates_kokkos &aggregates) const
ComputeUnamalgamatedImportDofMap build overlapping dof row map from aggregates needed for overlapping...
MueLu::DefaultLocalOrdinal LocalOrdinal
void GetStridingInformation(LO &fullBlockSize, LO &blockID, LO &stridingOffset, LO &stridedBlockSize, GO &indexBase)
returns striding information
Tpetra::KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
RCP< const Map > getNodeColMap() const
&lt; returns the node row map for the graph
GlobalOrdinal GO
LocalOrdinal LO
MueLu::DefaultNode Node
AmalgamationInfo_kokkos(RCP< Array< LO > > rowTranslation, RCP< Array< LO > > colTranslation, RCP< const Map > nodeRowMap, RCP< const Map > nodeColMap, RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > const &columnMap, LO fullblocksize, GO offset, LO blockid, LO nStridedOffset, LO stridedblocksize)
Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > columnMap_
DOF map (really column map of A)
GO GlobalOffset()
returns offset of global dof ids
MueLu::DefaultGlobalOrdinal GlobalOrdinal
RCP< Array< LO > > getRowTranslation() const
&lt; returns the node column map for the graph
std::string description() const
Return a simple one-line description of this object.
minimal container class for storing amalgamation information
void print(Teuchos::FancyOStream &out, const VerbLevel verbLevel=Default) const
Print the object with some verbosity level to an FancyOStream object.
Base class for MueLu classes.
void UnamalgamateAggregates(const Aggregates_kokkos &aggregates, Teuchos::ArrayRCP< LocalOrdinal > &aggStart, Teuchos::ArrayRCP< GlobalOrdinal > &aggToRowMap) const
UnamalgamateAggregates.
void UnamalgamateAggregatesLO(const Aggregates_kokkos &aggregates, Teuchos::ArrayRCP< LocalOrdinal > &aggStart, Teuchos::ArrayRCP< LO > &aggToRowMap) const
GO ComputeGlobalDOF(GO const &gNodeID, LO const &k=0) const
ComputeGlobalDOF return global dof id associated with global node id gNodeID and dof index k...