Ifpack_DiagPreconditioner.cpp

Go to the documentation of this file.
00001 #include "Ifpack_ConfigDefs.h"
00002 #include "Ifpack_DiagPreconditioner.h"
00003 #include "Epetra_BlockMap.h"
00004 #include "Epetra_Map.h"
00005 #include "Epetra_MultiVector.h"
00006 #include "Epetra_Vector.h"
00007 #include "Epetra_Comm.h"
00008 
00009 // ============================================================================ 
00010 Ifpack_DiagPreconditioner::
00011 Ifpack_DiagPreconditioner(const Epetra_Map& DomainMap,
00012                           const Epetra_Map& RangeMap,
00013                           const Epetra_Vector& diag) : 
00014   UseTranspose_(false),
00015   DomainMap_(DomainMap),
00016   RangeMap_(RangeMap),
00017   diag_(diag)
00018 { }
00019 
00020 // ============================================================================ 
00021 Ifpack_DiagPreconditioner::~Ifpack_DiagPreconditioner()
00022 { }
00023 
00024 
00025 // ============================================================================ 
00026 int Ifpack_DiagPreconditioner::Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const
00027 {
00028   IFPACK_RETURN(-1); // not defined
00029 }
00030 
00031 // ============================================================================ 
00032  int Ifpack_DiagPreconditioner::ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const
00033 {
00034   if (X.NumVectors() != Y.NumVectors())
00035     IFPACK_CHK_ERR(-1); 
00036 
00037   for (int v = 0; v < X.NumVectors(); ++v)
00038     for (int i = 0; i < X.MyLength(); ++i)
00039       Y[v][i] = diag_[i] * X[v][i];
00041 
00042   return(0);
00043 }

Generated on Thu Sep 18 12:37:21 2008 for Ifpack Package Browser (Single Doxygen Collection) by doxygen 1.3.9.1