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 }
1.3.9.1