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;
183 Epetra_CrsMatrix *CastCrsMatrixA = dynamic_cast<Epetra_CrsMatrix*>(RowMatrixA) ;
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 ) ;
228 const Epetra_MpiComm & comm1 = dynamic_cast<const Epetra_MpiComm &> (Comm);
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 ) ;
328 Epetra_Vector *vecXvector = dynamic_cast<Epetra_Vector*>(vecX) ;
329 Epetra_Vector *vecBvector = dynamic_cast<Epetra_Vector*>(vecB) ;
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++ ) {