MPI Application rank 3 killed before MPI_Finalize() with signal 10
this rank value changes each time i run it...
Does this has to do with LWORK value ? I dont know how to set LWORK so i set = -1 ...
My code after running SUCCESFULLY the routine PDGEQRF it calls the routine PDORMQR to multiply the Q returned from the previus routine, with the vector C. In that point the error appears. When i set LWORK = 200, 300 etc then it returns that the INFO parametre of PDORMQR is -5.
Here is the code :
- Code: Select all
PROGRAM TESTINGQR
*
* PARAMETERS
INTEGER M, N, MB, NB, RSRC, CSRC, MXLLDA,
$ IA, JA, LWORK , MXLOCC , NOUT, DLEN_ , K ,IC, JC,
$ NRHS, T , MXLLDC , NBRHS
PARAMETER ( M = 9, N = 9, MB = 2, NB = 2, RSRC = 0, CSRC = 0,
$ MXLLDA = 5, IA = 1, JA = 1, LWORK = -1, MXLOCC = 4,
$ NOUT = 6, DLEN_ = 9, K = 9, IC = 1, JC = 1,
$ MXLLDC = 5, NBRHS = 1, NRHS = 1)
* SCALARS *
INTEGER ICTXT, MYROW, MYCOL, NPCOL, NPROW, INFO
*
* ARRAYS
INTEGER DESCA(DLEN_) , DESCC(DLEN_)
DOUBLE PRECISION A(MXLLDA, MXLOCC), TAU(1,5), WORK(LWORK ),
$ C(5,1)
*
* EXTERNAL SUBROUTINES
EXTERNAL BLACS_EXIT, BLACS_GRIDEXIT, BLACS_GRIDINFO,
$ DESCINIT, MATINIT, SL_INIT
*
DATA NPROW / 2 /, NPCOL / 3 /
*
* ---------------------------
* INITIALIZE THE PROCESS GRID
* ---------------------------
CALL SL_INIT( ICTXT, NPROW, NPCOL )
CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
*
* If I'm not in the process grid, go to the end of the program
*
IF( MYROW.EQ.-1 )
$ GO TO 10
*
* -------------------------------------------
* DISTRIBUTE THE MATRIX OVER THE PROCESS GRID
* -------------------------------------------
CALL DESCINIT( DESCA, M, N, MB, NB, RSRC, CSRC, ICTXT,
$ MXLLDA, INFO )
CALL DESCINIT( DESCC, N, NRHS , NB, NBRHS , RSRC, CSRC, ICTXT,
$ MXLLDC, INFO )
*
* -------------------------------------------------------
* GENERATE MATRICES A / C AND DISTRIBUTE ON THE PROCESS GRID
* -------------------------------------------------------
CALL MATINIT( A, DESCA , C , DESCC )
*
*
* ------------------------
* CALL THE ROUTINE PDGEQRF
* ------------------------
CALL PDGEQRF( M, N, A, IA, JA, DESCA, TAU, WORK, LWORK,
$ INFO )
*
* -----------------------
* Multiplies Q determined by PDGEQRF with C
* -----------------------
CALL PDORMQR( 'L', 'T', M, 1, K, A, IA, JA, DESCA, TAU,
$ C, IC, JC, DESCC, WORK, LWORK, INFO )
* IF( MYROW.EQ.0 .AND. MYCOL.EQ.0 ) THEN
WRITE( NOUT, FMT = 9999 )
WRITE( NOUT, FMT = 9998 )M, N, NB
WRITE( NOUT, FMT = 9997 )NPROW*NPCOL, NPROW, NPCOL
WRITE( NOUT, FMT = 9996 )INFO
END IF
*
* ------------------------
* RELEASE THE PROCESS GRID
* ------------------------
*
CALL BLACS_GRIDEXIT( ICTXT )
*
10 CONTINUE
*
*
*
CALL BLACS_EXIT( 0 )
*
*
9999 FORMAT( / 'ScaLAPACK tESTING QR' )
9998 FORMAT( / 'COMPUTING A=QR WHERE A IS A ', I3, ' by ', I3,
$ ' matrix with a block size of ', I3 )
9997 FORMAT( 'Running on ', I3, ' processes, where the process grid',
$ ' is ', I3, ' by ', I3 )
9996 FORMAT( / 'INFO code returned = ', I3 )
STOP
END
*
*
*
SUBROUTINE MATINIT( AA, DESCA , CC , DESCC)
*
* MATINIT generates and distributes matrices A and B (depicted in
* figures 2.5 and 2.6) to a 2 x 3 process grid
*
* .. Array Arguments ..
INTEGER DESCA( * ), DESCC( * )
DOUBLE PRECISION AA( * ) , CC (*)
* .. Parameters ..
INTEGER CTXT_, LLD_
PARAMETER ( CTXT_ = 2, LLD_ = 9 )
* ..
* .. Local Scalars ..
INTEGER ICTXT, MXLLDA, MYCOL, MYROW, NPCOL, NPROW
DOUBLE PRECISION A, C, K, L, P, S
* ..
* .. External Subroutines ..
EXTERNAL BLACS_GRIDINFO
* ..
* .. Executable Statements ..
*
ICTXT = DESCA( CTXT_ )
CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
*
S = 19.0D0
C = 3.0D0
A = 1.0D0
L = 12.0D0
P = 16.0D0
K = 11.0D0
*
MXLLDA = DESCA( LLD_ )
*
IF( MYROW.EQ.0 .AND. MYCOL.EQ.0 ) THEN
AA( 1 ) = S
AA( 2 ) = -S
AA( 3 ) = -S
AA( 4 ) = -S
AA( 5 ) = -S
AA( 1+MXLLDA ) = C
AA( 2+MXLLDA ) = C
AA( 3+MXLLDA ) = -C
AA( 4+MXLLDA ) = -C
AA( 5+MXLLDA ) = -C
AA( 1+2*MXLLDA ) = A
AA( 2+2*MXLLDA ) = A
AA( 3+2*MXLLDA ) = A
AA( 4+2*MXLLDA ) = A
AA( 5+2*MXLLDA ) = -A
AA( 1+3*MXLLDA ) = C
AA( 2+3*MXLLDA ) = C
AA( 3+3*MXLLDA ) = C
AA( 4+3*MXLLDA ) = C
AA( 5+3*MXLLDA ) = -C
CC( 1 ) = 0.0D0
CC( 2 ) = 0.0D0
CC( 3 ) = 0.0D0
CC( 4 ) = 0.0D0
CC( 5 ) = 0.0D0
ELSE IF( MYROW.EQ.0 .AND. MYCOL.EQ.1 ) THEN
AA( 1 ) = A
AA( 2 ) = A
AA( 3 ) = -A
AA( 4 ) = -A
AA( 5 ) = -A
AA( 1+MXLLDA ) = L
AA( 2+MXLLDA ) = L
AA( 3+MXLLDA ) = -L
AA( 4+MXLLDA ) = -L
AA( 5+MXLLDA ) = -L
AA( 1+2*MXLLDA ) = K
AA( 2+2*MXLLDA ) = K
AA( 3+2*MXLLDA ) = K
AA( 4+2*MXLLDA ) = K
AA( 5+2*MXLLDA ) = K
ELSE IF( MYROW.EQ.0 .AND. MYCOL.EQ.2 ) THEN
AA( 1 ) = A
AA( 2 ) = A
AA( 3 ) = A
AA( 4 ) = -A
AA( 5 ) = -A
AA( 1+MXLLDA ) = P
AA( 2+MXLLDA ) = P
AA( 3+MXLLDA ) = P
AA( 4+MXLLDA ) = P
AA( 5+MXLLDA ) = -P
ELSE IF( MYROW.EQ.1 .AND. MYCOL.EQ.0 ) THEN
AA( 1 ) = -S
AA( 2 ) = -S
AA( 3 ) = -S
AA( 4 ) = -S
AA( 1+MXLLDA ) = -C
AA( 2+MXLLDA ) = -C
AA( 3+MXLLDA ) = -C
AA( 4+MXLLDA ) = C
AA( 1+2*MXLLDA ) = A
AA( 2+2*MXLLDA ) = A
AA( 3+2*MXLLDA ) = A
AA( 4+2*MXLLDA ) = -A
AA( 1+3*MXLLDA ) = C
AA( 2+3*MXLLDA ) = C
AA( 3+3*MXLLDA ) = C
AA( 4+3*MXLLDA ) = C
CC( 1 ) = 1.0D0
CC( 2 ) = 0.0D0
CC( 3 ) = 0.0D0
CC( 4 ) = 0.0D0
ELSE IF( MYROW.EQ.1 .AND. MYCOL.EQ.1 ) THEN
AA( 1 ) = A
AA( 2 ) = -A
AA( 3 ) = -A
AA( 4 ) = -A
AA( 1+MXLLDA ) = L
AA( 2+MXLLDA ) = L
AA( 3+MXLLDA ) = -L
AA( 4+MXLLDA ) = -L
AA( 1+2*MXLLDA ) = K
AA( 2+2*MXLLDA ) = K
AA( 3+2*MXLLDA ) = K
AA( 4+2*MXLLDA ) = K
ELSE IF( MYROW.EQ.1 .AND. MYCOL.EQ.2 ) THEN
AA( 1 ) = A
AA( 2 ) = A
AA( 3 ) = -A
AA( 4 ) = -A
AA( 1+MXLLDA ) = P
AA( 2+MXLLDA ) = P
AA( 3+MXLLDA ) = -P
AA( 4+MXLLDA ) = -P
END IF
RETURN
END
thanks a lot !!!!!

