Ifpack Package Browser (Single Doxygen Collection)  Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Ifpack_Graph_Epetra_RowMatrix.cpp
Go to the documentation of this file.
1 /*@HEADER
2 // ***********************************************************************
3 //
4 // Ifpack: Object-Oriented Algebraic Preconditioner Package
5 // Copyright (2002) 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 #include "Ifpack_ConfigDefs.h"
44 #include "Ifpack_Graph.h"
46 #include "Epetra_Comm.h"
47 #include "Epetra_Map.h"
48 #include "Epetra_RowMatrix.h"
49 
50 //==============================================================================
51 Ifpack_Graph_Epetra_RowMatrix::Ifpack_Graph_Epetra_RowMatrix(const Teuchos::RefCountPtr<const Epetra_RowMatrix>& RowMatrix) :
52 RowMatrix_(RowMatrix)
53 {
54  NumMyRows_ = RowMatrix_->NumMyRows();
55  NumMyCols_ = RowMatrix_->NumMyCols();
56  NumGlobalRows_ = RowMatrix_->NumGlobalRows64();
57  NumGlobalCols_ = RowMatrix_->NumGlobalCols64();
58  MaxNumIndices_ = RowMatrix_->MaxNumEntries();
59 
60  Values_.resize(MaxNumIndices_);
61 }
62 
63 //==============================================================================
65 {
66  return(RowMatrix_->Comm());
67 }
68 
69 //==============================================================================
71 {
72  return(RowMatrix_->Filled());
73 }
74 
75 //==============================================================================
76 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
78 {
79  return(RowMatrix_->RowMatrixRowMap().GID(LRID_in));
80 }
81 
82 //==============================================================================
84 {
85  return(RowMatrix_->RowMatrixColMap().GID(LCID_in));
86 }
87 #endif
88 
89 long long Ifpack_Graph_Epetra_RowMatrix::GRID64(int LRID_in) const
90 {
91  return(RowMatrix_->RowMatrixRowMap().GID64(LRID_in));
92 }
93 
94 //==============================================================================
95 long long Ifpack_Graph_Epetra_RowMatrix::GCID64(int LCID_in) const
96 {
97  return(RowMatrix_->RowMatrixColMap().GID64(LCID_in));
98 }
99 
100 //==============================================================================
101 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
103 {
104  return(RowMatrix_->RowMatrixRowMap().LID(GRID_in));
105 }
106 
107 //==============================================================================
109 {
110  return(RowMatrix_->RowMatrixColMap().LID(GCID_in));
111 }
112 #endif
113 //==============================================================================
114 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
115 int Ifpack_Graph_Epetra_RowMatrix::LRID(long long GRID_in) const
116 {
117  return(RowMatrix_->RowMatrixRowMap().LID(GRID_in));
118 }
119 
120 //==============================================================================
121 int Ifpack_Graph_Epetra_RowMatrix::LCID(long long GCID_in) const
122 {
123  return(RowMatrix_->RowMatrixColMap().LID(GCID_in));
124 }
125 #endif
126 //==============================================================================
128 ExtractMyRowCopy(int MyRow, int LenOfIndices,
129  int &NumIndices, int *Indices) const
130 {
131  return(RowMatrix_->ExtractMyRowCopy(MyRow, LenOfIndices,
132  NumIndices, &Values_[0],
133  Indices));
134 }
135 
136 //==============================================================================
138 {
139  return(RowMatrix_->NumMyNonzeros());
140 }
141 
142 // ======================================================================
143 std::ostream& Ifpack_Graph_Epetra_RowMatrix::Print(std::ostream& os) const
144 {
145  using std::endl;
146 
147  if (Comm().MyPID())
148  return(os);
149 
150  os << "================================================================================" << endl;
151  os << "Ifpack_Graph_Epetra_RowMatrix" << endl;
152  os << "Number of local rows = " << NumMyRows_ << endl;
153  os << "Number of global rows = " << NumGlobalRows_ << endl;
154  os << "================================================================================" << endl;
155 
156  return(os);
157 
158 }
159 
int ExtractMyRowCopy(int GlobalRow, int LenOfIndices, int &NumIndices, int *Indices) const
Extracts a copy of input local row.
std::vector< double > Values_
Vectors that can be used in calls to ExtractMyRowView of the Row matrix.
int NumMyNonzeros() const
Returns the number of local nonzero entries.
int MaxNumIndices_
Maximum number of indices per row.
int NumMyCols_
Number of local columns.
int GRID(int) const
Returns the global row ID of input local row.
long long NumGlobalRows_
Number of global rows.
long long GCID64(int) const
Returns the global column ID of input local column.
const Epetra_Comm & Comm() const
Returns the communicator object of the graph.
std::ostream & Print(std::ostream &os) const
Prints basic information abobut the graph object.
long long NumGlobalCols_
Number of global columns.
int GCID(int) const
Returns the global column ID of input local column.
bool Filled() const
Returns true is graph is filled.
int LCID(int) const
Returns the local column ID of input global column.
Teuchos::RefCountPtr< const Epetra_RowMatrix > RowMatrix_
Pointer to the wrapped Epetra_CrsGraph.
int LRID(int) const
Returns the local row ID of input global row.
Ifpack_Graph_Epetra_RowMatrix(const Teuchos::RefCountPtr< const Epetra_RowMatrix > &RowMatrix)
Constructor.