Ifpack Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
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//==============================================================================
51Ifpack_Graph_Epetra_RowMatrix::Ifpack_Graph_Epetra_RowMatrix(const Teuchos::RefCountPtr<const Epetra_RowMatrix>& RowMatrix) :
52RowMatrix_(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
89long long Ifpack_Graph_Epetra_RowMatrix::GRID64(int LRID_in) const
90{
91 return(RowMatrix_->RowMatrixRowMap().GID64(LRID_in));
92}
93
94//==============================================================================
95long 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
115int Ifpack_Graph_Epetra_RowMatrix::LRID(long long GRID_in) const
116{
117 return(RowMatrix_->RowMatrixRowMap().LID(GRID_in));
118}
119
120//==============================================================================
121int Ifpack_Graph_Epetra_RowMatrix::LCID(long long GCID_in) const
122{
123 return(RowMatrix_->RowMatrixColMap().LID(GCID_in));
124}
125#endif
126//==============================================================================
128ExtractMyRowCopy(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// ======================================================================
143std::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 GCID(int) const
Returns the global column ID of input local column.
std::vector< double > Values_
Vectors that can be used in calls to ExtractMyRowView of the Row matrix.
int LCID(int) const
Returns the local column ID of input global column.
const Epetra_Comm & Comm() const
Returns the communicator object of the graph.
int GRID(int) const
Returns the global row ID of input local row.
int ExtractMyRowCopy(int GlobalRow, int LenOfIndices, int &NumIndices, int *Indices) const
Extracts a copy of input local row.
bool Filled() const
Returns true is graph is filled.
long long NumGlobalCols_
Number of global columns.
long long NumGlobalRows_
Number of global rows.
long long GCID64(int) const
Returns the global column ID of input local column.
Ifpack_Graph_Epetra_RowMatrix(const Teuchos::RefCountPtr< const Epetra_RowMatrix > &RowMatrix)
Constructor.
Teuchos::RefCountPtr< const Epetra_RowMatrix > RowMatrix_
Pointer to the wrapped Epetra_CrsGraph.
int MaxNumIndices_
Maximum number of indices per row.
int NumMyNonzeros() const
Returns the number of local nonzero entries.
int LRID(int) const
Returns the local row ID of input global row.
std::ostream & Print(std::ostream &os) const
Prints basic information abobut the graph object.