ScaLAPACK  2.0.2
ScaLAPACK: Scalable Linear Algebra PACKage
pcseprreq.f
Go to the documentation of this file.
00001       SUBROUTINE PCSEPRREQ( HETERO, NIN, MEM, MEMSIZE, NOUT, ISEED,
00002      $                     NTESTS, NSKIPPED, NNOCHECK, NPASSED, INFO )
00003 *
00004 *  -- ScaLAPACK routine (@(MODE)version *TBA*) --
00005 *     University of California, Berkeley and
00006 *     University of Tennessee, Knoxville. 
00007 *     October 21, 2006
00008 *
00009       IMPLICIT NONE
00010 *
00011 *     .. Scalar Arguments ..
00012       CHARACTER          HETERO
00013       INTEGER            INFO, MEMSIZE, NIN, NNOCHECK, NOUT, NPASSED,
00014      $                   NSKIPPED, NTESTS
00015 *     ..
00016 *     .. Array Arguments ..
00017       INTEGER            ISEED( 4 )
00018       COMPLEX            MEM( MEMSIZE )     
00019 *
00020 *  Purpose
00021 *  =======
00022 *
00023 *  PCSEPRREQ performs one request from the input file 'SEPR.dat'
00024 *  A request is the cross product of the specifications in the
00025 *  input file. It prints one line per test.
00026 *
00027 *  Arguments
00028 *  =========
00029 *
00030 *  NIN      (local input) INTEGER
00031 *           The unit number for the input file 'SEPR.dat'
00032 *
00033 *  MEM      (local input ) COMPLEX          ARRAY, dimension MEMSIZE
00034 *           Array encompassing the available single precision memory
00035 *
00036 *  MEMSIZE  (local input)  INTEGER
00037 *           Size of MEM array
00038 *
00039 *  NOUT     (local input) INTEGER
00040 *           The unit number for output file.
00041 *           NOUT = 6, output to screen,
00042 *           NOUT = 0, output to stderr.
00043 *           NOUT = 13, output to file, divide thresh by 10
00044 *           NOUT = 14, output to file, divide thresh by 20
00045 *           Only used on node 0.
00046 *           NOUT = 13, 14 allow the threshold to be tighter for our
00047 *           internal testing which means that when a user reports
00048 *           a threshold error, it is more likely to be significant.
00049 *
00050 *  ISEED    (global input/output) INTEGER array, dimension 4
00051 *           Random number generator seed
00052 *
00053 *  NTESTS   (global input/output) INTEGER
00054 *           NTESTS = NTESTS + tests requested
00055 *
00056 *  NSKIPPED (global input/output) INTEGER
00057 *           NSKIPPED = NSKIPPED + tests skipped
00058 *
00059 *  NNOCHECK (global input/output) INTEGER
00060 *           NNOCHECK = NNOCHECK + tests completed but not checked
00061 *
00062 *  NPASSED  (global input/output) INTEGER
00063 *           NPASSED = NPASSED + tests which passed all checks
00064 *
00065 *  INFO     (global output) INTEGER
00066 *           0 = test request ran
00067 *          -1 = end of file
00068 *          -2 = incorrect .dat file
00069 *
00070 *     .. Parameters ..
00071 *
00072       INTEGER            DLEN_
00073       PARAMETER          ( DLEN_ = 9 )
00074       INTEGER            REALSZ, INTGSZ
00075       PARAMETER          ( REALSZ = 4, INTGSZ = 4 )
00076       INTEGER            KMPXSZ
00077       PARAMETER          ( KMPXSZ = 8 )
00078       INTEGER            MAXSETSIZE
00079       PARAMETER          ( MAXSETSIZE = 50 )
00080 *     ..
00081 *     .. Local Scalars ..
00082       CHARACTER          SUBTESTS
00083       INTEGER            CONTEXT, IAM, IMIDPAD, INITCON, IPOSTPAD,
00084      $                   IPREPAD, ISIZESUBTST, ISIZEEVR, ISIZETST,
00085      $                   LDA, LLWORK, MATSIZE, MATTYPE, MYCOL, MYROW, N,
00086      $                   NB, NMATSIZES, NMATTYPES, NNODES, NP, NPCOL,
00087      $                   NPCONFIGS, NPROW, NQ, NUPLOS, ORDER, PCONFIG,
00088      $                   PTRA, PTRCOPYA, PTRGAP, PTRICLUS, PTRIFAIL,
00089      $                   PTRIWRK, PTRW, PTRW2, PTRWORK, PTRZ, RES,
00090      $                   SIZECHK, SIZEMQRLEFT, SIZEMQRRIGHT, SIZEQRF,
00091      $                   SIZEQTQ, SIZESUBTST, SIZEEVR,
00092      $                   SIZETMS, SIZETST, UPLO
00093       INTEGER            PTRRWORK, RSIZEEVR, RSIZESUBTST, RSIZETST
00094 *
00095       REAL               ABSTOL, THRESH
00096 *     ..
00097 *     .. Local Arrays ..
00098       CHARACTER          UPLOS( 2 )
00099       INTEGER            DESCA( DLEN_ ), MATSIZES( MAXSETSIZE ),
00100      $                   MATTYPES( MAXSETSIZE ), NBS( MAXSETSIZE ),
00101      $                   NPCOLS( MAXSETSIZE ), NPROWS( MAXSETSIZE )
00102 *     ..
00103 *     .. External Functions ..
00104       INTEGER            ICEIL, NUMROC
00105       EXTERNAL           ICEIL, NUMROC
00106 *     ..
00107 *     .. External Subroutines ..
00108       EXTERNAL           BLACS_ABORT, BLACS_GET, BLACS_GRIDEXIT, 
00109      $                   BLACS_GRIDINFO, BLACS_GRIDINIT, BLACS_PINFO, 
00110      $                   DESCINIT, PCLASIZESEPR, PSSEPINFO, PCSEPRTST
00111 *     ..
00112 *     .. Intrinsic Functions ..
00113       INTRINSIC          MAX
00114 *     ..
00115 *     .. Executable Statements ..
00116 *
00117       CALL BLACS_PINFO( IAM, NNODES )
00118       CALL BLACS_GET( -1, 0, INITCON )
00119       CALL BLACS_GRIDINIT( INITCON, 'R', 1, NNODES )
00120 *
00121       CALL PSSEPINFO( INITCON, IAM, NIN, NOUT, MAXSETSIZE, NMATSIZES,
00122      $                MATSIZES, NUPLOS, UPLOS, NPCONFIGS, NPROWS,
00123      $                NPCOLS, NBS, NMATTYPES, MATTYPES, 22, SUBTESTS,
00124      $                THRESH, ORDER, ABSTOL, INFO )
00125 *
00126       CALL BLACS_GRIDEXIT( INITCON )
00127 *
00128       IF( INFO.EQ.0 ) THEN
00129 *
00130          DO 40 MATSIZE = 1, NMATSIZES
00131 *
00132             DO 30 PCONFIG = 1, NPCONFIGS
00133 *
00134                DO 20 MATTYPE = 1, NMATTYPES
00135 *
00136                   DO 10 UPLO = 1, NUPLOS
00137 *
00138                      N = MATSIZES( MATSIZE )
00139                      ORDER = N
00140 *
00141                      NPROW = NPROWS( PCONFIG )
00142                      NPCOL = NPCOLS( PCONFIG )
00143                      NB = NBS( PCONFIG )
00144 *
00145                      NP = NUMROC( N, NB, 0, 0, NPROW )
00146                      NQ = NUMROC( N, NB, 0, 0, NPCOL )
00147                      IPREPAD = MAX( NB, NP )
00148                      IMIDPAD = NB
00149                      IPOSTPAD = MAX( NB, NQ )
00150 *
00151                      LDA = MAX( NP, 1 ) + IMIDPAD
00152 *
00153                      CALL BLACS_GET( -1, 0, CONTEXT )
00154                      CALL BLACS_GRIDINIT( CONTEXT, 'R', NPROW, NPCOL )
00155                      CALL BLACS_GRIDINFO( CONTEXT, NPROW, NPCOL, MYROW,
00156      $                                    MYCOL )
00157 *
00158                      IF( MYROW.GE.0 ) THEN
00159                         CALL DESCINIT( DESCA, N, N, NB, NB, 0, 0,
00160      $                                 CONTEXT, LDA, INFO )
00161                         CALL PCLASIZESEPR( DESCA, IPREPAD, IPOSTPAD,
00162      $                                     SIZEMQRLEFT, SIZEMQRRIGHT,
00163      $                                     SIZEQRF, SIZETMS, SIZEQTQ,
00164      $                                     SIZECHK, SIZEEVR, RSIZEEVR,
00165      $                                     ISIZEEVR, SIZESUBTST, 
00166      $                                     RSIZESUBTST, ISIZESUBTST,
00167      $                                     SIZETST, RSIZETST, ISIZETST )
00168 *
00169                         PTRA = 1
00170                         PTRZ = PTRA + LDA*NQ + IPREPAD + IPOSTPAD
00171                         PTRCOPYA = PTRZ + LDA*NQ + IPREPAD + IPOSTPAD
00172                         PTRW = PTRCOPYA + LDA*NQ + IPREPAD + IPOSTPAD
00173                         PTRW2 = PTRW + ICEIL( MAX( N, 1 )+IPREPAD+
00174      $                          IPOSTPAD, KMPXSZ / REALSZ )
00175                         PTRWORK = PTRW2 + ICEIL( MAX( N, 1 )+IPREPAD+
00176      $                            IPOSTPAD, KMPXSZ / REALSZ )
00177                         PTRGAP = PTRWORK + SIZETST + IPREPAD + IPOSTPAD
00178                         PTRIFAIL = PTRGAP + ICEIL( NPROW*NPCOL+IPREPAD+
00179      $                             IPOSTPAD, KMPXSZ / REALSZ )
00180                         PTRICLUS = PTRIFAIL + ICEIL( N+IPREPAD+IPOSTPAD,
00181      $                             KMPXSZ / INTGSZ )
00182                         PTRIWRK = PTRICLUS + ICEIL( 2*NPROW*NPCOL+
00183      $                            IPREPAD+IPOSTPAD, KMPXSZ / INTGSZ )
00184                         PTRRWORK = PTRIWRK + ICEIL( ISIZETST+IPREPAD+
00185      $                             IPOSTPAD, KMPXSZ / INTGSZ )
00186                         LLWORK = ( MEMSIZE-PTRRWORK+1 )*KMPXSZ / REALSZ
00187 
00188                         NTESTS = NTESTS + 1
00189                         IF( LLWORK.LT.RSIZETST ) THEN
00190                            NSKIPPED = NSKIPPED + 1
00191                         ELSE
00192                            CALL PCSEPRTST( DESCA, UPLOS( UPLO ), N,
00193      $                                    MATTYPES( MATTYPE ), SUBTESTS,
00194      $                                    THRESH, N, ABSTOL, ISEED,
00195      $                                    MEM( PTRA ), MEM( PTRCOPYA ),
00196      $                                    MEM( PTRZ ), LDA, MEM( PTRW ),
00197      $                                    MEM( PTRW2 ), MEM( PTRIFAIL ),
00198      $                                    MEM( PTRICLUS ),
00199      $                                    MEM( PTRGAP ), IPREPAD,
00200      $                                    IPOSTPAD, MEM( PTRWORK ),
00201      $                                    SIZETST, MEM( PTRRWORK ),
00202      $                                    LLWORK, MEM( PTRIWRK ),
00203      $                                    ISIZETST, HETERO, NOUT, RES )
00204 *
00205                            IF( RES.EQ.0 ) THEN
00206                               NPASSED = NPASSED + 1
00207                            ELSE IF( RES.EQ.2 ) THEN
00208                               NNOCHECK = NNOCHECK + 1
00209                            ELSE IF( RES.EQ.3 ) THEN
00210                               NSKIPPED = NSKIPPED + 1
00211                               WRITE( NOUT, FMT = * )' PCSEPRREQ failed'
00212                               CALL BLACS_ABORT( CONTEXT, -1 )
00213                            END IF
00214                         END IF
00215                         CALL BLACS_GRIDEXIT( CONTEXT )
00216                      END IF
00217    10             CONTINUE
00218    20          CONTINUE
00219    30       CONTINUE
00220    40    CONTINUE
00221       END IF
00222 *
00223       RETURN
00224 *
00225 *     End of PCSEPRREQ
00226 *
00227       END