The LAPACK forum has moved to https://github.com/Reference-LAPACK/lapack/discussions.

Whats wrong with my code ????? HELP

Open discussion regarding features, bugs, issues, vendors, etc.

Whats wrong with my code ????? HELP

Postby arad » Mon May 05, 2008 2:40 pm

Hi guys

I m trying to make a program that calls the routine PDGEQRF for computing the QR form of a matrix A.

I use the matrix and the block size exactly as it given in example 1.
(So A = 9 x 9 and mb=nb=2 in a 2x3 process grid)

However I get error messages !!
Here is the code :

Code: Select all
--------------------------------------
PROGRAM TESTINGQR
*
*
*      PARAMETERS
       INTEGER      M, N, MB, NB, RSRC, CSRC, MXLLDA,
$                   IA, JA, LWORK , MXLOCC , NOUT
       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 )
*      SCALARS   *
       INTEGER      ICTXT, MYROW, MYCOL, NPCOL, NPROW, INFO
*
*      ARRAYS
       INTEGER DESCA(9)
       DOUBLE PRECISION A(MXLLDA, MXLOCC), TAU(9), WORK( LWORK )
*
*      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 )
*
*      -------------------------------------------------------
*      GENERATE MATRIX A AND DISTRIBUTE IT ON THE PROCESS GRID
*      -------------------------------------------------------
       CALL MATINIT( A, DESCA )
*
*      ------------------------
*      CALL THE ROUTINE PDGEQRF
*      ------------------------
       CALL PDGEQRF( M, N, A, IA, JA, DESCA, TAU, 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 by PDGEQRF = ', I3 )
       STOP
       END
*
*
*
      SUBROUTINE MATINIT( AA, DESCA )
*
*     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( * )
      DOUBLE PRECISION   AA( * )
*     .. 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
      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
      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
------------------------------


and the error messages i get are :
INTEGER M, N, MB, NB, RSRC, CSRC, MXLLDA,
^
Error 707 at (5: incomplete statement)

PARAMETER ( M = 9, N = 9, MB = 2, NB = 2, RSRC = 0, CSRC = 0,
^
Error 703 at (7) : unbalanced parenthesis

Error 707 at (7) : incomplete statement

CALL DESCINIT( DESCA, M, N, MB, NB, RSRC, CSRC, ICTXT, MXLLDA

Error 703 at (37) : unbalanced parenthesis

Error 739 : In program unit TESTINGQR label 10 is not set


WHAT AM I DOING WRONG ???? :( :( :(
The example1 runs perfectly but my program not..

I m not very familiar to Scalapack and it took me long to write this.
Please help !
arad
 
Posts: 17
Joined: Wed Apr 16, 2008 4:12 pm

Postby Julie » Mon May 05, 2008 3:01 pm

arad,

This is just a problem if indentation in Fortran77.

Each line in a FORTRAN 77 each line can only be 72 characters long. This causes problems because any text in columns 73 onwards is simply ignored (line numbers used to be placed in these columns).
- comments can only be initiated by marking the first column with a special character;
- the first 5 columns are reserved for line number;
- the 6th column can only be used to indicate a continuation line;

Below is your code with a proper indentation,
You code still has some problem of coding, but I did not look at those.
Julie

Code: Select all
       PROGRAM TESTINGQR
*
*
*      PARAMETERS
       INTEGER      M, N, MB, NB, RSRC, CSRC, MXLLDA,
     $              IA, JA, LWORK , MXLOCC , NOUT
       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 )
*      SCALARS   *
       INTEGER      ICTXT, MYROW, MYCOL, NPCOL, NPROW, INFO
*
*      ARRAYS
       INTEGER DESCA(9)
       DOUBLE PRECISION A(MXLLDA, MXLOCC), TAU(9), WORK( LWORK )
*
*      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 )
*
*      -------------------------------------------------------
*      GENERATE MATRIX A AND DISTRIBUTE IT ON THE PROCESS GRID
*      -------------------------------------------------------
       CALL MATINIT( A, DESCA )
*
*      ------------------------
*      CALL THE ROUTINE PDGEQRF
*      ------------------------
       CALL PDGEQRF( M, N, A, IA, JA, DESCA, TAU, 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 by PDGEQRF = ', I3 )
       STOP
       END
*
*
*
      SUBROUTINE MATINIT( AA, DESCA )
*
*     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( * )
      DOUBLE PRECISION   AA( * )
*     .. 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
      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
      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
Julie
 
Posts: 299
Joined: Wed Feb 23, 2005 12:32 am
Location: ICL, Denver. Colorado


Return to User Discussion

Who is online

Users browsing this forum: No registered users and 6 guests