IFPACK
Development
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Ifpack_SparsityFilter.h
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
#ifndef IFPACK_SPARSITYFILTER_H
44
#define IFPACK_SPARSITYFILTER_H
45
46
#include "Ifpack_ConfigDefs.h"
47
#include "Epetra_RowMatrix.h"
48
#include "Teuchos_RefCountPtr.hpp"
49
50
class
Epetra_Comm
;
51
class
Epetra_Map
;
52
class
Epetra_MultiVector
;
53
class
Epetra_Import
;
54
class
Epetra_BlockMap
;
55
57
58
class
Ifpack_SparsityFilter :
public
virtual
Epetra_RowMatrix
{
59
60
public
:
61
Ifpack_SparsityFilter(
const
Teuchos::RefCountPtr<Epetra_RowMatrix>& Matrix,
62
int
AllowedNumEntries,
63
int
AllowedBandwidth = -1);
64
65
virtual
~Ifpack_SparsityFilter() {};
66
67
virtual
inline
int
NumMyRowEntries(
int
MyRow,
int
& NumEntries)
const
68
{
69
NumEntries = NumEntries_[MyRow];
70
return
(0);
71
}
72
73
virtual
int
MaxNumEntries
()
const
74
{
75
return
(MaxNumEntries_);
76
}
77
78
virtual
int
ExtractMyRowCopy(
int
MyRow,
int
Length,
int
& NumEntries,
double
*Values,
int
* Indices)
const
;
79
80
virtual
int
ExtractDiagonalCopy(
Epetra_Vector
& Diagonal)
const
;
81
82
virtual
int
Multiply(
bool
TransA,
const
Epetra_MultiVector
& X,
83
Epetra_MultiVector
& Y)
const
;
84
85
virtual
int
Solve(
bool
Upper,
bool
Trans,
bool
UnitDiagonal,
86
const
Epetra_MultiVector
& X,
87
Epetra_MultiVector
& Y)
const
;
88
89
virtual
int
Apply(
const
Epetra_MultiVector
& X,
90
Epetra_MultiVector
& Y)
const
;
91
92
virtual
int
ApplyInverse(
const
Epetra_MultiVector
& X,
93
Epetra_MultiVector
& Y)
const
;
94
95
virtual
int
InvRowSums(
Epetra_Vector
&
/* x */
)
const
96
{
97
return
(-98);
98
}
99
100
virtual
int
LeftScale(
const
Epetra_Vector
&
/* x */
)
101
{
102
return
(-98);
103
}
104
105
virtual
int
InvColSums(
Epetra_Vector
&
/* x */
)
const
106
{
107
return
(-98);
108
}
109
110
virtual
int
RightScale(
const
Epetra_Vector
& x)
111
{
112
return
(A_->RightScale(x));
113
}
114
115
virtual
bool
Filled
()
const
116
{
117
return
(A_->Filled());
118
}
119
120
virtual
double
NormInf
()
const
121
{
122
return
(-1.0);
123
}
124
125
virtual
double
NormOne
()
const
126
{
127
return
(-1.0);
128
}
129
130
#ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
131
virtual
int
NumGlobalNonzeros
()
const
132
{
133
return
(NumNonzeros_);
134
}
135
136
virtual
int
NumGlobalRows
()
const
137
{
138
return
(NumRows_);
139
}
140
141
virtual
int
NumGlobalCols
()
const
142
{
143
return
(NumRows_);
144
}
145
146
virtual
int
NumGlobalDiagonals
()
const
147
{
148
return
(NumRows_);
149
}
150
#endif
151
152
virtual
long
long
NumGlobalNonzeros64()
const
153
{
154
return
(NumNonzeros_);
155
}
156
157
virtual
long
long
NumGlobalRows64()
const
158
{
159
return
(NumRows_);
160
}
161
162
virtual
long
long
NumGlobalCols64()
const
163
{
164
return
(NumRows_);
165
}
166
167
virtual
long
long
NumGlobalDiagonals64()
const
168
{
169
return
(NumRows_);
170
}
171
172
virtual
int
NumMyNonzeros
()
const
173
{
174
return
(NumNonzeros_);
175
}
176
177
virtual
int
NumMyRows
()
const
178
{
179
return
(NumRows_);
180
}
181
182
virtual
int
NumMyCols
()
const
183
{
184
return
(NumRows_);
185
}
186
187
virtual
int
NumMyDiagonals
()
const
188
{
189
return
(NumRows_);
190
}
191
192
virtual
bool
LowerTriangular
()
const
193
{
194
return
(
false
);
195
}
196
197
virtual
bool
UpperTriangular
()
const
198
{
199
return
(
false
);
200
}
201
202
virtual
const
Epetra_Map
&
RowMatrixRowMap
()
const
203
{
204
return
(A_->RowMatrixRowMap());
205
}
206
207
virtual
const
Epetra_Map
&
RowMatrixColMap
()
const
208
{
209
return
(A_->RowMatrixColMap());
210
}
211
212
virtual
const
Epetra_Import
*
RowMatrixImporter
()
const
213
{
214
return
(A_->RowMatrixImporter());
215
}
216
217
int
SetUseTranspose(
bool
useTranspose)
218
{
219
return
(A_->SetUseTranspose(useTranspose));
220
}
221
222
bool
UseTranspose
()
const
223
{
224
return
(A_->UseTranspose());
225
}
226
227
bool
HasNormInf
()
const
228
{
229
return
(
false
);
230
}
231
232
const
Epetra_Comm
&
Comm
()
const
233
{
234
return
(A_->Comm());
235
}
236
237
const
Epetra_Map
&
OperatorDomainMap
()
const
238
{
239
return
(A_->OperatorDomainMap());
240
}
241
242
const
Epetra_Map
&
OperatorRangeMap
()
const
243
{
244
return
(A_->OperatorRangeMap());
245
}
246
247
const
Epetra_BlockMap
&
Map
()
const
248
{
249
return
(A_->Map());
250
}
251
252
const
char
*
Label
()
const
{
253
return
(Label_);
254
}
255
256
private
:
257
259
Teuchos::RefCountPtr<Epetra_RowMatrix> A_;
261
int
MaxNumEntries_;
262
int
MaxNumEntriesA_;
263
265
int
AllowedBandwidth_;
267
int
AllowedEntries_;
268
270
int
NumNonzeros_;
271
273
mutable
std::vector<int> Indices_;
275
mutable
std::vector<double> Values_;
277
char
Label_[80];
278
279
int
NumRows_;
280
std::vector<int> NumEntries_;
281
282
};
283
284
285
#endif
/* IFPACK_SPARSITYFILTER_H */
Epetra_BlockMap
Epetra_Comm
Epetra_Import
Epetra_Map
Epetra_MultiVector
Epetra_Operator::Comm
virtual const Epetra_Comm & Comm() const=0
Epetra_Operator::Label
virtual const char * Label() const=0
Epetra_Operator::OperatorDomainMap
virtual const Epetra_Map & OperatorDomainMap() const=0
Epetra_Operator::HasNormInf
virtual bool HasNormInf() const=0
Epetra_Operator::OperatorRangeMap
virtual const Epetra_Map & OperatorRangeMap() const=0
Epetra_Operator::UseTranspose
virtual bool UseTranspose() const=0
Epetra_RowMatrix
Epetra_RowMatrix::NumMyRows
virtual int NumMyRows() const=0
Epetra_RowMatrix::NumMyCols
virtual int NumMyCols() const=0
Epetra_RowMatrix::NumGlobalCols
virtual int NumGlobalCols() const=0
Epetra_RowMatrix::NumGlobalNonzeros
virtual int NumGlobalNonzeros() const=0
Epetra_RowMatrix::RowMatrixColMap
virtual const Epetra_Map & RowMatrixColMap() const=0
Epetra_RowMatrix::RowMatrixRowMap
virtual const Epetra_Map & RowMatrixRowMap() const=0
Epetra_RowMatrix::NumMyNonzeros
virtual int NumMyNonzeros() const=0
Epetra_RowMatrix::NumMyDiagonals
virtual int NumMyDiagonals() const=0
Epetra_RowMatrix::NumGlobalRows
virtual int NumGlobalRows() const=0
Epetra_RowMatrix::LowerTriangular
virtual bool LowerTriangular() const=0
Epetra_RowMatrix::NumGlobalDiagonals
virtual int NumGlobalDiagonals() const=0
Epetra_RowMatrix::MaxNumEntries
virtual int MaxNumEntries() const=0
Epetra_RowMatrix::RowMatrixImporter
virtual const Epetra_Import * RowMatrixImporter() const=0
Epetra_RowMatrix::UpperTriangular
virtual bool UpperTriangular() const=0
Epetra_RowMatrix::NormOne
virtual double NormOne() const=0
Epetra_RowMatrix::NormInf
virtual double NormInf() const=0
Epetra_RowMatrix::Filled
virtual bool Filled() const=0
Epetra_SrcDistObject::Map
virtual const Epetra_BlockMap & Map() const=0
Epetra_Vector
Generated by
1.17.0