Ifpack Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
Ifpack_PointRelaxation.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_POINTRELAXATION_H
44#define IFPACK_POINTRELAXATION_H
45
46#include "Ifpack_ConfigDefs.h"
48
49#include "Epetra_Vector.h"
50#include "Epetra_Time.h"
51#include "Epetra_RowMatrix.h"
52#include "Epetra_Import.h"
53
54#include "Teuchos_RefCountPtr.hpp"
55
56namespace Teuchos {
57 class ParameterList;
58}
60class Epetra_Vector;
61class Epetra_Map;
62class Epetra_Comm;
64
66
131
132public:
133
135
141
144
146
153 virtual inline int SetUseTranspose(bool UseTranspose_in)
154 {
155 UseTranspose_ = UseTranspose_in;
156 return(0);
157 }
158
160
162
164
172 virtual inline int Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const
173 {
174 if (IsComputed() == false)
175 IFPACK_CHK_ERR(-3);
176
177 if (X.NumVectors() != Y.NumVectors())
178 IFPACK_CHK_ERR(-2);
179
180 IFPACK_CHK_ERR(Matrix_->Multiply(UseTranspose(),X,Y));
181 return(0);
182 }
183
185
195 virtual int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
196
198 virtual double NormInf() const
199 {
200 return(-1.0);
201 }
203
205
206 virtual const char * Label() const
207 {
208 return(Label_.c_str());
209 }
210
212 virtual bool UseTranspose() const
213 {
214 return(UseTranspose_);
215 }
216
218 virtual bool HasNormInf() const
219 {
220 return(false);
221 }
222
224 virtual const Epetra_Comm & Comm() const;
225
227 virtual const Epetra_Map & OperatorDomainMap() const;
228
230 virtual const Epetra_Map & OperatorRangeMap() const;
231
232 virtual int Initialize();
233
234 virtual bool IsInitialized() const
235 {
236 return(IsInitialized_);
237 }
238
240 virtual inline bool IsComputed() const
241 {
242 return(IsComputed_);
243 }
244
246 virtual int Compute();
247
249
251
252 virtual const Epetra_RowMatrix& Matrix() const
253 {
254 return(*Matrix_);
255 }
256
258 virtual double Condest(const Ifpack_CondestType CT = Ifpack_Cheap,
259 const int MaxIters = 1550,
260 const double Tol = 1e-9,
262
264 virtual double Condest() const
265 {
266 return(Condest_);
267 }
268
270 virtual int SetParameters(Teuchos::ParameterList& List);
271
273 virtual std::ostream& Print(std::ostream & os) const;
274
276
278
280 virtual int NumInitialize() const
281 {
282 return(NumInitialize_);
283 }
284
286 virtual int NumCompute() const
287 {
288 return(NumCompute_);
289 }
290
292 virtual int NumApplyInverse() const
293 {
294 return(NumApplyInverse_);
295 }
296
298 virtual double InitializeTime() const
299 {
300 return(InitializeTime_);
301 }
302
304 virtual double ComputeTime() const
305 {
306 return(ComputeTime_);
307 }
308
310 virtual double ApplyInverseTime() const
311 {
312 return(ApplyInverseTime_);
313 }
314
316 virtual double InitializeFlops() const
317 {
318 return(0.0);
319 }
320
322 virtual double ComputeFlops() const
323 {
324 return(ComputeFlops_);
325 }
326
328 virtual double ApplyInverseFlops() const
329 {
330 return(ApplyInverseFlops_);
331 }
332
333 // @}
334
335private:
336
337 // @{ Application of the preconditioner
338
340 virtual int ApplyInverseJacobi(const Epetra_MultiVector& X,
341 Epetra_MultiVector& Y) const;
342
344 virtual int ApplyInverseGS(const Epetra_MultiVector& X,
345 Epetra_MultiVector& Y) const;
346
347 virtual int ApplyInverseGS_RowMatrix(const Epetra_MultiVector& X,
348 Epetra_MultiVector& Y) const;
349
350 virtual int ApplyInverseGS_CrsMatrix(const Epetra_CrsMatrix* A,
351 const Epetra_MultiVector& X,
352 Epetra_MultiVector& Y) const;
353
355 const Epetra_MultiVector& X,
356 Epetra_MultiVector& Y) const;
358 const Epetra_MultiVector& X,
359 Epetra_MultiVector& Y) const;
360
362 virtual int ApplyInverseSGS(const Epetra_MultiVector& X,
363 Epetra_MultiVector& Y) const;
364
366 Epetra_MultiVector& Y) const;
367
368 virtual int ApplyInverseSGS_CrsMatrix(const Epetra_CrsMatrix* A,
369 const Epetra_MultiVector& X,
370 Epetra_MultiVector& Y) const;
371
373 const Epetra_MultiVector& X,
374 Epetra_MultiVector& Y) const;
375
377 const Epetra_MultiVector& X,
378 Epetra_MultiVector& Y) const;
379
380
382
383private:
384
386 virtual void SetLabel();
387
391
394 {
395 return(*this);
396 }
397
398 // @{ Initializations, timing and flops
408 mutable int NumApplyInverse_;
414 mutable double ApplyInverseTime_;
418 mutable double ApplyInverseFlops_;
419 // @}
420
421 // @{ Settings
429 double Condest_;
430#if 0
431 // Unused; commented out to avoid build warnings
432
434 bool ComputeCondest_;
435#endif // 0
437 std::string Label_;
440 // @}
441
442 // @{ Other data
448 long long NumGlobalRows_;
452 Teuchos::RefCountPtr<const Epetra_RowMatrix> Matrix_;
454 Teuchos::RefCountPtr<Epetra_Import> Importer_;
456 mutable Teuchos::RefCountPtr<Epetra_Vector> Diagonal_;
458 Teuchos::RefCountPtr<Epetra_Time> Time_;
468 double L1Eta_;
469
474
475 // @}
476
477
478
479};
480
481#endif // IFPACK_POINTRELAXATION_H
Ifpack_CondestType
Ifpack_CondestType: enum to define the type of condition number estimate.
@ Ifpack_Cheap
cheap estimate
#define IFPACK_CHK_ERR(ifpack_err)
int NumVectors() const
Ifpack_PointRelaxation: a class to define point relaxation preconditioners of for Epetra_RowMatrix's.
virtual const Epetra_RowMatrix & Matrix() const
Returns a pointer to the matrix to be preconditioned.
double ComputeTime_
Contains the time for all successful calls to Compute().
virtual int ApplyInverseJacobi(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Applies the Jacobi preconditioner to X, returns the result in Y.
virtual double ComputeFlops() const
Returns the number of flops in the computation phase.
bool IsParallel_
If true, more than 1 processor is currently used.
bool UseTranspose_
If true, use the tranpose of Matrix_.
virtual int ApplyInverseSGS_RowMatrix(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
virtual int Compute()
Computes the preconditioners.
bool DoL1Method_
Do L1 Jacobi/GS/SGS.
Teuchos::RefCountPtr< Epetra_Import > Importer_
Importer for parallel GS and SGS.
int NumInitialize_
Contains the number of successful calls to Initialize().
virtual int ApplyInverseGS_CrsMatrix(const Epetra_CrsMatrix *A, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
int NumMyNonzeros_
Number of local nonzeros.
virtual double ComputeTime() const
Returns the time spent in Compute().
virtual const Epetra_Map & OperatorRangeMap() const
Returns the Epetra_Map object associated with the range of this operator.
virtual int ApplyInverseSGS_CrsMatrix(const Epetra_CrsMatrix *A, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
virtual std::ostream & Print(std::ostream &os) const
Prints object to an output stream.
virtual double Condest() const
Returns the condition number estimate, or -1.0 if not computed.
virtual bool HasNormInf() const
Returns true if the this object can provide an approximate Inf-norm, false otherwise.
long long NumGlobalRows_
Number of global rows.
bool DoBackwardGS_
Backward-Mode Gauss Seidel.
bool IsComputed_
If true, the preconditioner has been computed successfully.
virtual int SetParameters(Teuchos::ParameterList &List)
Sets all the parameters for the preconditioner.
virtual double NormInf() const
Returns the infinity norm of the global matrix (not implemented)
virtual const char * Label() const
double DampingFactor_
Damping factor.
virtual int ApplyInverseSGS(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Applies the symmetric Gauss-Seidel preconditioner to X, returns the result in Y.
double InitializeTime_
Contains the time for all successful calls to Initialize().
int NumLocalSmoothingIndices_
Number of (local) unknowns for local smoothing.
Ifpack_PointRelaxation(const Ifpack_PointRelaxation &)
Copy constructor (PRIVATE, should not be used)
virtual const Epetra_Comm & Comm() const
Returns a pointer to the Epetra_Comm communicator associated with this operator.
int NumSweeps_
Number of application of the preconditioner (should be greater than 0).
Teuchos::RefCountPtr< const Epetra_RowMatrix > Matrix_
Pointers to the matrix to be preconditioned.
virtual double ApplyInverseFlops() const
Returns the number of flops for the application of the preconditioner.
virtual int ApplyInverseGS_FastCrsMatrix(const Epetra_CrsMatrix *A, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
int NumApplyInverse_
Contains the number of successful call to ApplyInverse().
double ApplyInverseTime_
Contains the time for all successful calls to ApplyInverse().
Ifpack_PointRelaxation(const Epetra_RowMatrix *Matrix)
Ifpack_PointRelaxation constructor with given Epetra_RowMatrix.
Ifpack_PointRelaxation & operator=(const Ifpack_PointRelaxation &)
operator = (PRIVATE, should not be used)
virtual double InitializeFlops() const
Returns the number of flops in the initialization phase.
virtual int ApplyInverseGS_RowMatrix(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
virtual bool IsInitialized() const
Returns true if the preconditioner has been successfully initialized, false otherwise.
virtual int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Applies the preconditioner to X, returns the result in Y.
virtual bool IsComputed() const
Returns true if the preconditioner has been successfully computed.
int * LocalSmoothingIndices_
List of (local) unknowns for local smoothing (if any)
bool ZeroStartingSolution_
If true, the starting solution is always the zero vector.
virtual void SetLabel()
Sets the label.
Teuchos::RefCountPtr< Epetra_Time > Time_
Time object to track timing.
virtual int ApplyInverseSGS_LocalFastCrsMatrix(const Epetra_CrsMatrix *A, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
virtual ~Ifpack_PointRelaxation()
Destructor.
virtual bool UseTranspose() const
Returns the current UseTranspose setting.
Teuchos::RefCountPtr< Epetra_Vector > Diagonal_
Contains the diagonal elements of Matrix.
virtual const Epetra_Map & OperatorDomainMap() const
Returns the Epetra_Map object associated with the domain of this operator.
double ComputeFlops_
Contains the number of flops for Compute().
virtual int NumApplyInverse() const
Returns the number of calls to ApplyInverse().
double Condest_
Contains the estimated condition number.
virtual double InitializeTime() const
Returns the time spent in Initialize().
long long NumGlobalNonzeros_
Number of global nonzeros.
virtual int ApplyInverseSGS_FastCrsMatrix(const Epetra_CrsMatrix *A, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
virtual int ApplyInverseGS_LocalFastCrsMatrix(const Epetra_CrsMatrix *A, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
virtual int ApplyInverseGS(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Applies the Gauss-Seidel preconditioner to X, returns the result in Y.
virtual double ApplyInverseTime() const
Returns the time spent in ApplyInverse().
std::string Label_
Contains the label of this object.
virtual int SetUseTranspose(bool UseTranspose_in)
virtual int NumInitialize() const
Returns the number of calls to Initialize().
int NumMyRows_
Number of local rows.
int NumCompute_
Contains the number of successful call to Compute().
virtual int Initialize()
Computes all it is necessary to initialize the preconditioner.
double ApplyInverseFlops_
Contain sthe number of flops for ApplyInverse().
bool IsInitialized_
If true, the preconditioner has been computed successfully.
double L1Eta_
Eta parameter for modified L1 method.
virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Applies the matrix to an Epetra_MultiVector.
virtual int NumCompute() const
Returns the number of calls to Compute().
Ifpack_Preconditioner: basic class for preconditioning in Ifpack.