Ifpack Package Browser (Single Doxygen Collection)
Development
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Ifpack_Utils.h
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
#ifndef IFPACK_UTILS_H
44
#define IFPACK_UTILS_H
45
46
#include "
Ifpack_ConfigDefs.h
"
47
#include "
Epetra_Comm.h
"
48
#if !( defined(_WIN32) )
49
# include "unistd.h"
// Not a standard header file!
50
#endif
51
class
Epetra_RowMatrix
;
52
class
Epetra_CrsMatrix
;
53
class
Epetra_CrsGraph
;
54
class
Epetra_RowMatrix
;
55
class
Epetra_MultiVector
;
56
class
Epetra_Vector
;
57
60
62
void
Ifpack_PrintLine
();
63
65
void
Ifpack_BreakForDebugger
(
Epetra_Comm
&
Comm
);
66
68
Epetra_CrsMatrix
*
Ifpack_CreateOverlappingCrsMatrix
(
const
Epetra_RowMatrix
* Matrix,
69
const
int
OverlappingLevel);
70
72
Epetra_CrsGraph
*
Ifpack_CreateOverlappingCrsMatrix
(
const
Epetra_CrsGraph
*
Graph
,
73
const
int
OverlappingLevel);
74
76
std::string
Ifpack_toString
(
const
int
& x);
77
79
std::string
Ifpack_toString
(
const
double
& x);
80
82
int
Ifpack_PrintResidual
(
char
*
Label
,
const
Epetra_RowMatrix
& A,
83
const
Epetra_MultiVector
& X,
const
Epetra_MultiVector
&Y);
84
85
int
Ifpack_PrintResidual
(
const
int
iter,
const
Epetra_RowMatrix
& A,
86
const
Epetra_MultiVector
& X,
const
Epetra_MultiVector
&Y);
87
88
void
Ifpack_PrintSparsity_Simple
(
const
Epetra_RowMatrix
& A);
89
91
int
Ifpack_Analyze
(
const
Epetra_RowMatrix
& A,
const
bool
Cheap =
false
,
92
const
int
NumPDEEqns = 1);
93
95
103
int
Ifpack_AnalyzeMatrixElements
(
const
Epetra_RowMatrix
& A,
104
const
bool
abs =
false
,
105
const
int
steps = 10);
106
108
116
int
Ifpack_AnalyzeVectorElements
(
const
Epetra_Vector
& Diagonal,
117
const
bool
abs =
false
,
118
const
int
steps = 10);
119
121
133
int
Ifpack_PrintSparsity
(
const
Epetra_RowMatrix
& A,
const
char
* FileName = 0,
134
const
int
NumPDEEqns = 1);
135
136
//==============================================================================
137
class
Ifpack_Element
{
138
139
public
:
140
Ifpack_Element
() {};
141
142
Ifpack_Element
(
const
Ifpack_Element
& rhs) {
143
i_
= rhs.
Index
();
144
val_
= rhs.
Value
();
145
aval_
= rhs.
AbsValue
();
146
}
147
148
inline
int
Index
()
const
{
149
return
(
i_
);
150
}
151
152
inline
double
Value
()
const
{
153
return
(
val_
);
154
}
155
156
inline
double
AbsValue
()
const
{
157
return
(
aval_
);
158
}
159
160
inline
void
SetIndex
(
const
int
i)
161
{
162
i_
= i;
163
}
164
165
inline
void
SetValue
(
const
double
val)
166
{
167
val_
= val;
168
aval_
=
IFPACK_ABS
(
val_
);
169
}
170
171
inline
bool
operator <
(
const
Ifpack_Element
& rhs)
const
172
{
173
if
(rhs.
AbsValue
() >
AbsValue
())
174
return
(
false
);
175
else
if
(rhs.
AbsValue
() <
AbsValue
())
176
return
(
true
);
177
else
if
(rhs.
Index
() <
Index
())
178
return
(
true
);
179
return
(
false
);
180
}
181
182
private
:
183
int
i_
;
184
double
val_
;
185
double
aval_
;
186
187
};
188
189
#endif
// IFPACK_UTILS_H
Epetra_Comm.h
Ifpack_ConfigDefs.h
IFPACK_ABS
#define IFPACK_ABS(x)
Definition
Ifpack_ConfigDefs.h:146
Graph
adjacency_list< vecS, vecS, undirectedS, no_property, property< edge_weight_t, double > > Graph
Definition
Ifpack_SupportGraph.h:74
Ifpack_PrintResidual
int Ifpack_PrintResidual(char *Label, const Epetra_RowMatrix &A, const Epetra_MultiVector &X, const Epetra_MultiVector &Y)
Prints on cout the true residual.
Definition
Ifpack_Utils.cpp:258
Ifpack_BreakForDebugger
void Ifpack_BreakForDebugger(Epetra_Comm &Comm)
Stops the execution of code, so that a debugger can be attached.
Definition
Ifpack_Utils.cpp:61
Ifpack_CreateOverlappingCrsMatrix
Epetra_CrsMatrix * Ifpack_CreateOverlappingCrsMatrix(const Epetra_RowMatrix *Matrix, const int OverlappingLevel)
Creates an overlapping Epetra_CrsMatrix. Returns 0 if OverlappingLevel is 0.
Definition
Ifpack_Utils.cpp:102
Ifpack_PrintLine
void Ifpack_PrintLine()
Prints a line of `=' on cout.
Definition
Ifpack_Utils.cpp:55
Ifpack_Analyze
int Ifpack_Analyze(const Epetra_RowMatrix &A, const bool Cheap=false, const int NumPDEEqns=1)
Analyzes the basic properties of the input matrix A; see ifp_analyze.
Definition
Ifpack_Utils.cpp:418
Ifpack_toString
std::string Ifpack_toString(const int &x)
Converts an integer to std::string.
Definition
Ifpack_Utils.cpp:242
Ifpack_AnalyzeMatrixElements
int Ifpack_AnalyzeMatrixElements(const Epetra_RowMatrix &A, const bool abs=false, const int steps=10)
Analyzes the distribution of values of the input matrix A.
Definition
Ifpack_Utils.cpp:900
Ifpack_AnalyzeVectorElements
int Ifpack_AnalyzeVectorElements(const Epetra_Vector &Diagonal, const bool abs=false, const int steps=10)
Analyzes the distribution of values of the input vector Diagonal.
Definition
Ifpack_Utils.cpp:841
Ifpack_PrintSparsity_Simple
void Ifpack_PrintSparsity_Simple(const Epetra_RowMatrix &A)
Definition
Ifpack_Utils.cpp:299
Ifpack_PrintSparsity
int Ifpack_PrintSparsity(const Epetra_RowMatrix &A, const char *FileName=0, const int NumPDEEqns=1)
Definition
Ifpack_Utils.cpp:975
Epetra_Comm
Epetra_CrsGraph
Epetra_CrsMatrix
Epetra_DistObject::Comm
const Epetra_Comm & Comm() const
Epetra_MultiVector
Epetra_Object::Label
virtual const char * Label() const
Epetra_RowMatrix
Epetra_Vector
Ifpack_Element::Ifpack_Element
Ifpack_Element(const Ifpack_Element &rhs)
Definition
Ifpack_Utils.h:142
Ifpack_Element::operator<
bool operator<(const Ifpack_Element &rhs) const
Definition
Ifpack_Utils.h:171
Ifpack_Element::val_
double val_
Definition
Ifpack_Utils.h:184
Ifpack_Element::aval_
double aval_
Definition
Ifpack_Utils.h:185
Ifpack_Element::i_
int i_
Definition
Ifpack_Utils.h:183
Ifpack_Element::Value
double Value() const
Definition
Ifpack_Utils.h:152
Ifpack_Element::SetIndex
void SetIndex(const int i)
Definition
Ifpack_Utils.h:160
Ifpack_Element::Index
int Index() const
Definition
Ifpack_Utils.h:148
Ifpack_Element::AbsValue
double AbsValue() const
Definition
Ifpack_Utils.h:156
Ifpack_Element::SetValue
void SetValue(const double val)
Definition
Ifpack_Utils.h:165
Ifpack_Element::Ifpack_Element
Ifpack_Element()
Definition
Ifpack_Utils.h:140
Generated by
1.17.0