33 This code cannot be compiled without mpi.h.
34 #include
"Epetra_Comm.h" 44 #include "supermatrix.h" 45 #include "superlu_ddefs.h" 50 #include "Comm_assert_equal.h" 53 #ifdef EPETRA_CRSMATRIX_CONSTRUCT_FROM_ROWMATRIX 54 #include "ExtractCrsFromRowMatrix.h" 69 for ( i = 1; i*i <= NumProcs; i++ )
72 for ( numrows = i-1 ; done == false ; ) {
73 int NumCols = NumProcs / numrows ;
74 if ( numrows * NumCols == NumProcs )
109 SUPERLU_FREE(
A.Store);
176 bool CheckExtraction =
false;
184 #ifdef EPETRA_CRSMATRIX_CONSTRUCT_FROM_ROWMATRIX 190 int iam = Comm.
MyPID() ;
196 if ( iam == 0 ) cin >> hatever ;
206 if ( CastCrsMatrixA != 0 && ! CheckExtraction ) {
207 Phase2Mat = CastCrsMatrixA ;
209 #ifdef EPETRA_CRSMATRIX_CONSTRUCT_FROM_ROWMATRIX 212 Phase2Mat = ExtractCrsMatrixA ;
214 if ( CheckExtraction )
215 assert( CrsMatricesAreIdentical( CastCrsMatrixA, ExtractCrsMatrixA ) ) ;
222 assert( Phase2Mat !=
NULL ) ;
229 MPI_Comm MPIC = comm1.
Comm() ;
235 assert( Comm_assert_equal( &Comm, IsLocal ) );
244 int NumMyElements_ = 0 ;
245 if (iam==0) NumMyElements_ = NumGlobalElements_;
246 Epetra_Map SerialMap( NumGlobalElements_, NumMyElements_, 0, Comm );
251 Phase3Mat = Phase2Mat ;
256 SerialCrsMatrixA.
Export( *Phase2Mat, export_to_serial,
Add );
259 Phase3Mat = &SerialCrsMatrixA ;
279 Phase4Mat = Phase3Mat ;
282 Phase4Mat = &Phase3MatTrans ;
289 int * AllIDs =
new int[
numrows];
290 for (
int i = 0; i <
numrows ; i++ ) AllIDs[i] = i ;
317 nrhs = vecX->NumVectors() ;
324 #ifdef ONE_VECTOR_ONLY 325 assert( vecX->NumVectors() == 1 ) ;
331 assert( vecXvector != 0 ) ;
332 assert( vecBvector != 0 ) ;
344 Epetra_Import ImportToReplicated( ReplicatedMap, Phase2Matmap);
346 vecXreplicated.
Import( *vecXvector, ImportToReplicated,
Insert ) ;
347 vecBreplicated.
Import( *vecBvector, ImportToReplicated,
Insert ) ;
349 assert( nArows == vecXreplicated.
MyLength() ) ;
350 assert( nAcols == vecBreplicated.
MyLength() ) ;
356 assert( vecBreplicated.
ExtractView( &bValues, &bLda ) == 0 ) ;
357 assert( vecXreplicated.
ExtractView( &xValues, &xLda ) == 0 ) ;
372 for ( MyRow = 0; MyRow <
numrows; MyRow++ ) {
373 int status = Phase5Mat.
ExtractMyRowView( MyRow, NumEntries, RowValues, ColIndices ) ;
374 assert( status == 0 ) ;
375 Ap[MyRow] = Ai_index ;
376 for (
int j = 0; j < NumEntries; j++ ) {
377 Ai[Ai_index] = ColIndices[j] ;
378 Aval[Ai_index] = RowValues[j] ;
401 assert( Comm_assert_equal( &Comm, numentries ) );
402 assert( Comm_assert_equal( &Comm,
numrows ) );
403 assert( Comm_assert_equal( &Comm, numcols ) );
419 for (
int ii = 0; ii < min( numentries, 10 ) ; ii++ ) {
420 assert( Comm_assert_equal( &Comm,
Aval[ii] ) ) ;
422 for (
int ii = 0; ii < min( numcols+1, 10 ) ; ii++ ) {
423 assert( Comm_assert_equal( &Comm,
Ai[ii] ) );
424 assert( Comm_assert_equal( &Comm,
Ap[ii] ) );
426 for (
int ii = 0; ii < min(
numrows, 10 ) ; ii++ ) {
427 assert( Comm_assert_equal( &Comm, bValues[ii] ) );
434 if ( !(
berr = doubleMalloc_dist(nrhs)) )
438 dCreate_CompCol_Matrix_dist(&
A,
numrows, numcols,
439 numentries, &
Aval[0], &
Ai[0],
440 &
Ap[0], SLU_NC, SLU_D, SLU_GE);
444 cout <<
" Here is A " << endl ;
445 dPrint_CompCol_Matrix_dist( &
A );
446 cout <<
" That was A " <<
"numrows = " <<
numrows << endl ;
447 cout <<
"numcols = " << numcols << endl ;
454 assert(
options.Fact == DOFACT );
466 for (
int j = 0 ; j < nrhs; j++ )
467 for (
int i = 0 ; i <
numrows; i++ ) xValues[i+j*xLda] = bValues[i+j*xLda];
488 for (
int i = 0 ; i <
numrows; i++ ) {
490 lid[0] = Phase2Matmap.
LID( i ) ;
492 for (
int j = 0 ; j < nrhs; j++ ) {
const Epetra_Map & RowMap() const
const Epetra_LinearProblem * Problem_
int ReplaceMyValue(int MyRow, int VectorIndex, double ScalarValue)
int SLU_NumRows(int NumProcs)
superlu_options_t options
int CrsMatrixTranspose(Epetra_CrsMatrix *In, Epetra_CrsMatrix *Out)
int NumGlobalCols() const
ScalePermstruct_t ScalePermstruct
virtual void Barrier() const=0
int ExtractMyRowView(int MyRow, int &NumEntries, double *&Values, int *&Indices) const
virtual int MyPID() const=0
int FillComplete(bool OptimizeDataStorage=true)
SuperludistOO(const Epetra_LinearProblem &LinearProblem)
SuperludistOO Constructor.
virtual ~SuperludistOO(void)
SuperludistOO Destructor.
int Export(const Epetra_SrcDistObject &A, const Epetra_Import &Importer, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex *Indexor=0)
virtual const Epetra_Comm & Comm() const=0
int NumMyElements() const
int Solve(bool Factor)
All computation is performed during the call to Solve()
#define EPETRA_CHK_ERR(xxx)
bool GetTrans() const
Return the transpose flag.
virtual int Broadcast(double *MyVals, int Count, int Root) const=0
Epetra_MultiVector * GetRHS() const
virtual int NumProc() const=0
int NumGlobalElements() const
Epetra_MultiVector * GetLHS() const
int ExtractView(double **A, int *MyLDA) const
int NumGlobalRows() const
Epetra_Operator * GetOperator() const
int NumGlobalNonzeros() const
int Import(const Epetra_SrcDistObject &A, const Epetra_Import &Importer, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex *Indexor=0)