ScaLAPACK  2.0.2
ScaLAPACK: Scalable Linear Algebra PACKage
pclasizesep.f
Go to the documentation of this file.
00001       SUBROUTINE PCLASIZESEP( DESCA, IPREPAD, IPOSTPAD, SIZEMQRLEFT,
00002      $                        SIZEMQRRIGHT, SIZEQRF, SIZETMS, RSIZEQTQ,
00003      $                        RSIZECHK, SIZEHEEVX, RSIZEHEEVX,
00004      $                        ISIZEHEEVX, SIZEHEEVD, RSIZEHEEVD,
00005      $                        ISIZEHEEVD, SIZESUBTST, RSIZESUBTST,
00006      $                        ISIZESUBTST, SIZETST, RSIZETST, ISIZETST )
00007 *
00008 *  -- ScaLAPACK routine (version 1.7) --
00009 *     University of Tennessee, Knoxville, Oak Ridge National Laboratory,
00010 *     and University of California, Berkeley.
00011 *     May 1, 1997
00012 *
00013 *     .. Scalar Arguments ..
00014       INTEGER            IPOSTPAD, IPREPAD, ISIZEHEEVD, ISIZEHEEVX,
00015      $                   ISIZESUBTST, ISIZETST, RSIZECHK, RSIZEHEEVD,
00016      $                   RSIZEHEEVX, RSIZEQTQ, RSIZESUBTST, RSIZETST,
00017      $                   SIZEHEEVD, SIZEHEEVX, SIZEMQRLEFT,
00018      $                   SIZEMQRRIGHT, SIZEQRF, SIZESUBTST, SIZETMS,
00019      $                   SIZETST
00020 *     ..
00021 *     .. Array Arguments ..
00022       INTEGER            DESCA( * )
00023 *     ..
00024 *
00025 *  Purpose
00026 *  =======
00027 *
00028 *  PCLASIZESEP computes the amount of memory needed by
00029 *    various SEP test routines, as well as HEEVX itself
00030 *
00031 *  Arguments
00032 *  =========
00033 *
00034 *  DESCA        (global input) INTEGER array dimension ( DLEN_ )
00035 *               Array descriptor as passed to PCHEEVX
00036 *
00037 *  SIZEMQRLEFT  LWORK for the 1st PCUNMQR call in PCLAGHE
00038 *
00039 *  SIZEMQRRIGHT LWORK for the 2nd PCUNMQR call in PCLAGHE
00040 *
00041 *  SIZEQRF      LWORK for PCGEQRF in PCLAGHE
00042 *
00043 *  SIZETMS      LWORK for PCLATMS
00044 *
00045 *  RSIZEQTQ      LWORK for PCSEPQTQ (nexer complex)
00046 *
00047 *  RSIZECHK      LWORK for PCSEPCHK
00048 *
00049 *  SIZEHEEVX    LWORK for PCHEEVX
00050 *
00051 *  RSIZEHEEVX   LRWORK for PCHEEVX
00052 *
00053 *  ISIZEHEEVX   LIWORK for PCHEEVX
00054 *
00055 *  SIZEHEEVD    LWORK for PCHEEVD
00056 *
00057 *  RSIZEHEEVD   LRWORK for PCHEEVD
00058 *
00059 *  ISIZEHEEVD   LIWORK for PCHEEVD
00060 *
00061 *  SIZESUBTST   LWORK for PCSUBTST
00062 *
00063 *  RSIZESUBTST  LRWORK for PCSUBTST
00064 *
00065 *  ISIZESUBTST  LIWORK for PCSUBTST
00066 *
00067 *  SIZETST      LWORK for PCTST
00068 *
00069 *  RSIZETST     LRWORK for PCTST
00070 *
00071 *  ISIZETST     LIWORK for PCTST
00072 *
00073 *     .. Parameters ..
00074       INTEGER            BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
00075      $                   MB_, NB_, RSRC_, CSRC_, LLD_
00076       PARAMETER          ( BLOCK_CYCLIC_2D = 1, DLEN_ = 9, DTYPE_ = 1,
00077      $                   CTXT_ = 2, M_ = 3, N_ = 4, MB_ = 5, NB_ = 6,
00078      $                   RSRC_ = 7, CSRC_ = 8, LLD_ = 9 )
00079 *     ..
00080 *     .. Local Scalars ..
00081       INTEGER            ANB, CSRC_A, IACOL, IAROW, ICOFFA, ICTXT,
00082      $                   IROFFA, LCM, LCMQ, LDA, MQ0, MYCOL, MYROW, N,
00083      $                   NB, NEIG, NHETRD_LWOPT, NN, NNP, NP, NP0,
00084      $                   NPCOL, NPROW, NPS, NQ, RSRC_A, SIZECHK,
00085      $                   SIZEQTQ, SQNPC
00086 *     ..
00087 *     .. External Functions ..
00088       INTEGER            ICEIL, ILCM, INDXG2P, NUMROC, PJLAENV
00089       EXTERNAL           ICEIL, ILCM, INDXG2P, NUMROC, PJLAENV
00090 *     ..
00091 **     .. Executable Statements ..
00092 *       This is just to keep ftnchek happy
00093 *     .. External Subroutines ..
00094       EXTERNAL           BLACS_GRIDINFO
00095 *     ..
00096 *     .. Intrinsic Functions ..
00097       INTRINSIC          INT, MAX, REAL, SQRT
00098 *     ..
00099 *     .. Executable Statements ..
00100       IF( BLOCK_CYCLIC_2D*CSRC_*CTXT_*DLEN_*DTYPE_*LLD_*MB_*M_*NB_*N_*
00101      $    RSRC_.LT.0 )RETURN
00102 *
00103       N = DESCA( M_ )
00104       NB = DESCA( MB_ )
00105       RSRC_A = DESCA( RSRC_ )
00106       CSRC_A = DESCA( CSRC_ )
00107 *
00108       LDA = DESCA( LLD_ )
00109       CALL BLACS_GRIDINFO( DESCA( CTXT_ ), NPROW, NPCOL, MYROW, MYCOL )
00110 *
00111       LCM = ILCM( NPROW, NPCOL )
00112       LCMQ = LCM / NPCOL
00113       IROFFA = 0
00114       ICOFFA = 0
00115       IAROW = INDXG2P( 1, NB, MYROW, RSRC_A, NPROW )
00116       IACOL = INDXG2P( 1, NB, MYCOL, CSRC_A, NPCOL )
00117       NP = NUMROC( N+IROFFA, NB, MYROW, IAROW, NPROW )
00118       NQ = NUMROC( N+ICOFFA, NB, MYCOL, IACOL, NPCOL )
00119       SIZEMQRLEFT = MAX( ( NB*( NB-1 ) ) / 2, ( NP+NQ )*NB ) + NB*NB
00120       SIZEMQRRIGHT = MAX( ( NB*( NB-1 ) ) / 2,
00121      $               ( NQ+MAX( NP+NUMROC( NUMROC( N+ICOFFA, NB, 0, 0,
00122      $               NPCOL ), NB, 0, 0, LCMQ ), NP ) )*NB ) + NB*NB
00123       SIZEQRF = NB*NP + NB*NQ + NB*NB
00124       SIZETMS = ( LDA+1 )*MAX( 1, NQ ) +
00125      $          MAX( SIZEMQRLEFT, SIZEMQRRIGHT, SIZEQRF )
00126 *
00127       NP0 = NUMROC( N, DESCA( MB_ ), 0, 0, NPROW )
00128       MQ0 = NUMROC( N, DESCA( NB_ ), 0, 0, NPCOL )
00129       SIZEQTQ = 0
00130       SIZECHK = 0
00131       RSIZEQTQ = 2 + MAX( DESCA( MB_ ), 2 )*( 2*NP0+MQ0 )
00132       RSIZECHK = NUMROC( N, DESCA( NB_ ), MYCOL, 0, NPCOL )
00133 *
00134       NEIG = N
00135       NN = MAX( N, NB, 2 )
00136       NP0 = NUMROC( NN, NB, 0, 0, NPROW )
00137       MQ0 = NUMROC( MAX( NEIG, NB, 2 ), NB, 0, 0, NPCOL )
00138       SIZEHEEVX = N + ( NP0+MQ0+NB )*NB
00139       RSIZEHEEVX = 4*N + MAX( 5*NN, NP0*MQ0 ) +
00140      $             ICEIL( NEIG, NPROW*NPCOL )*NN
00141       NNP = MAX( N, NPROW*NPCOL+1, 4 )
00142       ISIZEHEEVX = 6*NNP
00143 *
00144       ICTXT = DESCA( CTXT_ )
00145       ANB = PJLAENV( ICTXT, 3, 'PCHETTRD', 'L', 0, 0, 0, 0 )
00146       SQNPC = INT( SQRT( REAL( NPROW*NPCOL ) ) )
00147       NPS = MAX( NUMROC( N, 1, 0, 0, SQNPC ), 2*ANB )
00148       NHETRD_LWOPT = 2*( ANB+1 )*( 4*NPS+2 ) + ( NPS+2 )*NPS
00149 *
00150       SIZEHEEVX = MAX( SIZEHEEVX, N+NHETRD_LWOPT )
00151 *
00152       SIZEHEEVD = SIZEHEEVX
00153       RSIZEHEEVD = 7*N + 3*NP0*MQ0
00154       ISIZEHEEVD = 7*N + 8*NPCOL + 2
00155       SIZESUBTST = MAX( SIZETMS, SIZEQTQ, SIZECHK, SIZEHEEVX,
00156      $             SIZEHEEVD ) + IPREPAD + IPOSTPAD
00157       RSIZESUBTST = MAX( RSIZEHEEVX, RSIZEHEEVD, RSIZEQTQ, RSIZECHK ) +
00158      $              IPREPAD + IPOSTPAD
00159       ISIZESUBTST = MAX( ISIZEHEEVX, ISIZEHEEVD ) + IPREPAD + IPOSTPAD
00160 *
00161 *     Allow room for A, COPYA and Z and WORK
00162 *
00163       SIZETST = 3*( LDA*NP+IPREPAD+IPOSTPAD ) + SIZESUBTST
00164 *
00165 *     Room for DIAG, WIN, WNEW, GAP and RWORK
00166 *
00167       RSIZETST = 4*( N+IPREPAD+IPOSTPAD ) + RSIZESUBTST
00168 *
00169 *     Allow room for IFAIL, ICLUSTR, and IWORK (all in PCHEEVX)
00170 *
00171       ISIZETST = N + 2*NPROW*NPCOL + 2*( IPREPAD+IPOSTPAD ) +
00172      $           ISIZESUBTST
00173 *
00174       RETURN
00175       END