Ifpack Package Browser (Single Doxygen Collection)
Development
src
Ifpack_Euclid.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_EUCLID_H
44
#define IFPACK_EUCLID_H
45
46
#include "
Ifpack_ConfigDefs.h
"
47
#ifdef HAVE_EUCLID
48
49
#include "
Ifpack_Condest.h
"
50
#include "
Ifpack_ScalingType.h
"
51
#include "Epetra_CompObject.h"
52
#include "Epetra_MultiVector.h"
53
#include "Epetra_Vector.h"
54
#include "Epetra_CrsGraph.h"
55
#include "Epetra_CrsMatrix.h"
56
#include "Epetra_BlockMap.h"
57
#include "Epetra_Map.h"
58
#include "Epetra_Object.h"
59
#include "Epetra_Comm.h"
60
#include "Epetra_CrsMatrix.h"
61
#include "Epetra_Time.h"
62
#include "Teuchos_RefCountPtr.hpp"
63
#include "Teuchos_ParameterList.hpp"
64
#include "Epetra_MpiComm.h"
65
66
#include "
Mem_dh.h
"
67
#include "
io_dh.h
"
68
#include "
TimeLog_dh.h
"
69
#include "
Parser_dh.h
"
70
#include "
Euclid_dh.h
"
71
72
namespace
Teuchos
{
73
class
ParameterList;
74
}
75
77
82
//The other files that were modified for Trilinos are getRow.c, call_epetra.{cpp,h}.
83
84
class
Ifpack_Euclid:
public
Epetra_Object
,
public
Epetra_CompObject
,
public
virtual
Epetra_Operator
{
85
86
friend
std::ostream&
operator <<
(std::ostream& os,
const
Ifpack_Euclid&
A
);
87
88
public
:
89
// @{ Constructors and destructors.
91
Ifpack_Euclid(
Epetra_CrsMatrix
*
A
);
92
94
~Ifpack_Euclid(){ Destroy();}
95
96
// @}
97
// @{ Construction methods
98
100
int
Initialize();
101
103
bool
IsInitialized()
const
{
return
(IsInitialized_);}
104
106
108
int
Compute();
109
111
bool
IsComputed()
const
{
return
(IsComputed_);}
112
113
115
127
int
SetParameters(
Teuchos::ParameterList
& parameterlist);
128
130
136
int
SetParameter(std::string name,
int
Value);
137
139
145
int
SetParameter(std::string name,
double
Value);
146
148
int
SetUseTranspose
(
bool
UseTranspose_in) {UseTranspose_ = UseTranspose_in;
return
(0);};
149
// @}
150
151
// @{ Mathematical functions.
152
// Applies the matrix to X, returns the result in Y.
153
int
Apply
(
const
Epetra_MultiVector
& X,
154
Epetra_MultiVector
& Y)
const
{
return
(Multiply(
false
,X,Y));}
155
157
167
int
Multiply(
bool
Trans,
const
Epetra_MultiVector
& X,
Epetra_MultiVector
& Y)
const
{
return
A_->Multiply(Trans, X, Y); }
168
170
183
int
ApplyInverse
(
const
Epetra_MultiVector
& X,
Epetra_MultiVector
& Y)
const
;
184
186
double
Condest(
const
Ifpack_CondestType
CT =
Ifpack_Cheap
,
const
int
MaxIters = 1550,
187
const
double
Tol = 1e-9,
Epetra_RowMatrix
* Matrix_in = 0);
188
190
double
Condest()
const
{
return
(Condest_);}
191
192
// @}
193
// @{ Query methods
194
196
const
char
*
Label
()
const
{
return
(Label_);}
197
199
void
SetLabel
(
const
char
* Label_in){ strcpy(Label_,Label_in);}
200
202
const
Epetra_Map
&
OperatorDomainMap
()
const
{
return
A_->DomainMap();}
203
205
const
Epetra_Map
&
OperatorRangeMap
()
const
{
return
A_->RangeMap();}
206
208
double
NormInf
()
const
{
return
(0.0);};
209
211
bool
HasNormInf
()
const
{
return
(
false
);};
212
214
bool
UseTranspose
()
const
{
return
(UseTranspose_);};
215
217
const
Epetra_Comm
&
Comm
()
const
{
return
(A_->Comm());};
218
220
const
Epetra_CrsMatrix
& Matrix()
const
{
return
(*A_);}
221
223
virtual
int
NumInitialize()
const
{
return
(NumInitialize_);}
224
226
virtual
int
NumCompute()
const
{
return
(NumCompute_);}
227
229
virtual
int
NumApplyInverse()
const
{
return
(NumApplyInverse_);}
230
232
virtual
double
InitializeTime()
const
{
return
(InitializeTime_);}
233
235
virtual
double
ComputeTime()
const
{
return
(ComputeTime_);}
236
238
virtual
double
ApplyInverseTime()
const
{
return
(ApplyInverseTime_);}
239
241
virtual
double
InitializeFlops()
const
{
return
(0.0);}
242
244
virtual
double
ComputeFlops()
const
{
return
(ComputeFlops_);}
245
247
virtual
double
ApplyInverseFlops()
const
{
return
(ApplyInverseFlops_);}
248
249
private
:
250
251
// @}
252
// @{ Private methods
253
255
Ifpack_Euclid(
const
Ifpack_Euclid&
RHS
) : Time_(
RHS
.Comm()){}
256
258
Ifpack_Euclid&
operator=
(
const
Ifpack_Euclid&
RHS
){
return
(*
this
);}
259
261
void
Destroy();
262
264
MPI_Comm GetMpiComm()
const
{
return
(dynamic_cast<const Epetra_MpiComm*>(&A_->Comm()))->GetMpiComm();}
265
267
int
CallEuclid(
double
*x,
double
*y)
const
;
268
270
280
int
Solve
(
bool
Trans,
const
Epetra_MultiVector
& X,
Epetra_MultiVector
& Y)
const
;
281
283
int
NumGlobalRows()
const
{
return
(A_->NumGlobalRows());};
284
286
int
NumGlobalCols()
const
{
return
(A_->NumGlobalCols());};
287
289
int
NumMyRows()
const
{
return
(A_->NumMyRows());};
290
292
int
NumMyCols()
const
{
return
(A_->NumMyCols());};
293
294
// @}
295
// @{ Internal data
296
298
Teuchos::RefCountPtr<Epetra_CrsMatrix> A_;
300
Teuchos::ParameterList
List_;
302
bool
UseTranspose_;
304
double
Condest_;
306
bool
IsInitialized_;
308
bool
IsComputed_;
310
char
Label_[160];
312
int
NumInitialize_;
314
int
NumCompute_;
316
mutable
int
NumApplyInverse_;
318
double
InitializeTime_;
320
double
ComputeTime_;
322
mutable
double
ApplyInverseTime_;
324
double
ComputeFlops_;
326
mutable
double
ApplyInverseFlops_;
328
mutable
Epetra_Time
Time_;
330
Euclid_dh
eu;
332
int
SetLevel_;
334
int
SetBJ_;
336
int
SetStats_;
338
int
SetMem_;
340
double
SetSparse_;
342
int
SetRowScale_;
344
double
SetILUT_;
345
};
346
348
std::ostream&
operator <<
(std::ostream& os,
const
Ifpack_Euclid&
A
);
349
350
#endif // HAVE_EUCLID
351
#endif
/* IFPACK_EUCLID_H */
Epetra_Operator::Comm
virtual const Epetra_Comm & Comm() const=0
Epetra_Object
Epetra_Operator::Apply
virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const=0
Epetra_Operator::NormInf
virtual double NormInf() const=0
Parser_dh.h
RHS
#define RHS(a)
Definition:
MatGenFD.c:60
TimeLog_dh.h
Ifpack_ScalingType.h
Ifpack_ScalingType enumerable type.
Epetra_Operator::HasNormInf
virtual bool HasNormInf() const=0
Epetra_Comm
Ifpack_CondestType
Ifpack_CondestType
Ifpack_CondestType: enum to define the type of condition number estimate.
Definition:
Ifpack_CondestType.h:48
Ifpack_Cheap
cheap estimate
Definition:
Ifpack_CondestType.h:49
Epetra_CrsMatrix
Ifpack_ConfigDefs.h
operator<<
std::ostream & operator<<(std::ostream &os, const Ifpack_Container &obj)
Definition:
Ifpack_Container.h:176
Epetra_CompObject::operator=
Epetra_CompObject & operator=(const Epetra_CompObject &src)
Epetra_RowMatrix
Solve
int Solve(int, TYPE *, TYPE *, TYPE *)
Epetra_Operator::ApplyInverse
virtual int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const=0
Epetra_Object::SetLabel
virtual void SetLabel(const char *const Label)
Epetra_Object::Label
virtual const char * Label() const
Euclid_dh.h
io_dh.h
Epetra_Time
Epetra_MultiVector
A
_mpi_interface_dh
Definition:
Euclid_dh.h:136
Epetra_Operator::OperatorRangeMap
virtual const Epetra_Map & OperatorRangeMap() const=0
Epetra_CompObject
Teuchos::ParameterList
Epetra_Operator::SetUseTranspose
virtual int SetUseTranspose(bool UseTranspose)=0
Teuchos
Mem_dh.h
Epetra_Operator
Epetra_Operator::OperatorDomainMap
virtual const Epetra_Map & OperatorDomainMap() const=0
Epetra_Operator::UseTranspose
virtual bool UseTranspose() const=0
Epetra_Map
Ifpack_Condest.h
Generated by
1.8.16