Ifpack2 Templated Preconditioning Package  Version 1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Ifpack2_OverlappingPartitioner_decl.hpp
1 /*@HEADER
2 // ***********************************************************************
3 //
4 // Ifpack2: Templated Object-Oriented Algebraic Preconditioner Package
5 // Copyright (2009) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ***********************************************************************
40 //@HEADER
41 */
42 
43 #ifndef IFPACK2_OVERLAPPINGPARTITIONER_DECL_HPP
44 #define IFPACK2_OVERLAPPINGPARTITIONER_DECL_HPP
45 
46 #include "Ifpack2_ConfigDefs.hpp"
47 #include "Ifpack2_Partitioner.hpp"
48 #include "Tpetra_RowGraph.hpp"
49 
50 namespace Ifpack2 {
51 
77 template<class GraphType>
78 class OverlappingPartitioner : public Partitioner<GraphType> {
79 public:
80  typedef typename GraphType::local_ordinal_type local_ordinal_type;
81  typedef typename GraphType::global_ordinal_type global_ordinal_type;
82  typedef typename GraphType::node_type node_type;
83  typedef Tpetra::RowGraph<local_ordinal_type, global_ordinal_type, node_type> row_graph_type;
84 
87 
89  virtual ~OverlappingPartitioner();
90 
96  int numLocalParts () const;
97 
99  int overlappingLevel() const;
100 
104  local_ordinal_type operator () (const local_ordinal_type MyRow) const;
105 
107  local_ordinal_type
108  operator () (const local_ordinal_type i, const local_ordinal_type j) const;
109 
111  size_t numRowsInPart (const local_ordinal_type Part) const;
112 
114  void rowsInPart (const local_ordinal_type Part, Teuchos::ArrayRCP<local_ordinal_type>& List) const;
115 
118  nonOverlappingPartition () const;
119 
121 
126  virtual void setParameters (Teuchos::ParameterList& List);
127 
129 
133  virtual void setPartitionParameters (Teuchos::ParameterList& List) = 0;
134 
136  virtual void compute();
137 
139  virtual void computePartitions() = 0;
140 
142  virtual void computeOverlappingPartitions();
143 
145  virtual bool isComputed() const;
146 
148  virtual std::ostream& print(std::ostream& os) const;
149 
151 
152 
154  std::string description() const;
155 
158 
160 
161 protected:
162 
169 
176 
182 
185 
188 
191 
193  bool verbose_;
194 
200 }; // class Ifpack2::OverlappingPartitioner
201 
202 }// namespace Ifpack2
203 
204 #endif // IFPACK2_OVERLAPPINGPARTITIONER_DECL_HPP
Teuchos::Array< local_ordinal_type > Partition_
Mapping from local row to partition number.
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:175
Teuchos::Array< Teuchos::ArrayRCP< local_ordinal_type > > Parts_
Mapping from partition to all local rows it contains.
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:181
void rowsInPart(const local_ordinal_type Part, Teuchos::ArrayRCP< local_ordinal_type > &List) const
Fill List with the local indices of the rows in the (overlapping) partition Part. ...
Definition: Ifpack2_OverlappingPartitioner_def.hpp:138
virtual Teuchos::ArrayView< const local_ordinal_type > nonOverlappingPartition() const
A view of the local indices of the nonoverlapping partitions of each local row.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:151
OverlappingPartitioner(const Teuchos::RCP< const row_graph_type > &graph)
Constructor.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:57
int OverlappingLevel_
Level of overlap.
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:187
int overlappingLevel() const
The number of levels of overlap.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:80
int numLocalParts() const
Number of computed local partitions.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:73
Ifpack2::Partitioner:
Definition: Ifpack2_Partitioner.hpp:179
Teuchos::RCP< const row_graph_type > Graph_
The graph to be partitioned.
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:184
virtual void computeOverlappingPartitions()
Computes the partitions. Returns 0 if successful.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:243
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with some verbosity level to an FancyOStream object.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:466
virtual ~OverlappingPartitioner()
Destructor.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:68
virtual bool isComputed() const
Returns true if partitions have been computed successfully.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:432
int NumLocalParts_
Number of local subgraphs.
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:168
std::string description() const
Return a simple one-line description of this object.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:450
virtual void computePartitions()=0
Computes the partitions. Returns 0 if successful.
static const EVerbosityLevel verbLevel_default
virtual void compute()
Computes the partitions. Returns 0 if successful.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:191
virtual std::ostream & print(std::ostream &os) const
Prints basic information on iostream. This function is used by operator&lt;&lt;.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:440
local_ordinal_type operator()(const local_ordinal_type MyRow) const
Local index of the nonoverlapping partition of the given row.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:89
bool verbose_
If true, information are reported to stdout.
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:193
virtual void setParameters(Teuchos::ParameterList &List)
Set all the parameters for the partitioner.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:160
bool maintainSparsity_
If true, only add row to partition (block) if doing so won&#39;t add new columns to the column map...
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:199
size_t numRowsInPart(const local_ordinal_type Part) const
the number of rows contained in the given partition.
Definition: Ifpack2_OverlappingPartitioner_def.hpp:124
Create overlapping partitions of a local graph.
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:78
virtual void setPartitionParameters(Teuchos::ParameterList &List)=0
Set all the parameters for the partitioner.
bool IsComputed_
If true, the graph has been successfully partitioned.
Definition: Ifpack2_OverlappingPartitioner_decl.hpp:190