//========================================================================== int Ifpack_CrsRiluk::InitValues(const Epetra_CrsMatrix & A) { UserMatrixIsCrs_ = true; if (!Allocated()) AllocateCrs(); Teuchos::RefCountPtr<Epetra_CrsMatrix> OverlapA = Teuchos::rcp( (Epetra_CrsMatrix *) &A, false ); if (IsOverlapped_) { OverlapA = Teuchos::rcp( new Epetra_CrsMatrix(Copy, *Graph_.OverlapGraph()) ); EPETRA_CHK_ERR(OverlapA->Import(A, *Graph_.OverlapImporter(), Insert)); EPETRA_CHK_ERR(OverlapA->FillComplete()); } // Get Maximun Row length int MaxNumEntries = OverlapA->MaxNumEntries(); // Set L range map and U domain map U_DomainMap_ = Teuchos::rcp( &(A.DomainMap()), false ); L_RangeMap_ = Teuchos::rcp( &(A.RangeMap()), false ); // Do the rest using generic Epetra_RowMatrix interface EPETRA_CHK_ERR(InitAllValues(*OverlapA, MaxNumEntries)); return(0); }
//========================================================================== int Ifpack_CrsRiluk::InitValues(const Epetra_VbrMatrix & A) { UserMatrixIsVbr_ = true; if (!Allocated()) AllocateVbr(); //cout << "Original Graph " << endl << A.Graph() << endl << flush; //A.Comm().Barrier(); //if (A.Comm().MyPID()==0) cout << "*****************************************************" <<endl; //cout << "Original Matrix " << endl << A << endl << flush; //A.Comm().Barrier(); //if (A.Comm().MyPID()==0) cout << "*****************************************************" <<endl; //cout << "Overlap Graph " << endl << *Graph_.OverlapGraph() << endl << flush; //A.Comm().Barrier(); //if (A.Comm().MyPID()==0) cout << "*****************************************************" <<endl; Teuchos::RefCountPtr<Epetra_VbrMatrix> OverlapA = Teuchos::rcp( (Epetra_VbrMatrix *) &A, false ); if (IsOverlapped_) { OverlapA = Teuchos::rcp( new Epetra_VbrMatrix(Copy, *Graph_.OverlapGraph()) ); EPETRA_CHK_ERR(OverlapA->Import(A, *Graph_.OverlapImporter(), Insert)); EPETRA_CHK_ERR(OverlapA->FillComplete()); } //cout << "Overlap Matrix " << endl << *OverlapA << endl << flush; // Get Maximun Row length int MaxNumEntries = OverlapA->MaxNumNonzeros(); // Do the rest using generic Epetra_RowMatrix interface EPETRA_CHK_ERR(InitAllValues(*OverlapA, MaxNumEntries)); return(0); }