|
ScaLAPACK
2.0.2
ScaLAPACK: Scalable Linear Algebra PACKage
|
00001 SUBROUTINE PDLASIZESEPR( DESCA, IPREPAD, IPOSTPAD, SIZEMQRLEFT, 00002 $ SIZEMQRRIGHT, SIZEQRF, SIZETMS, SIZEQTQ, 00003 $ SIZECHK, SIZESYEVR, ISIZESYEVR, 00004 $ SIZESUBTST, ISIZESUBTST, SIZETST, 00005 $ ISIZETST ) 00006 * 00007 * -- ScaLAPACK routine (@(MODE)version *TBA*) -- 00008 * University of California, Berkeley and 00009 * University of Tennessee, Knoxville. 00010 * October 21, 2006 00011 * 00012 IMPLICIT NONE 00013 * 00014 * .. Scalar Arguments .. 00015 INTEGER IPOSTPAD, IPREPAD, ISIZESUBTST, ISIZESYEVR, 00016 $ ISIZETST, SIZECHK, SIZEMQRLEFT, SIZEMQRRIGHT, 00017 $ SIZEQRF, SIZEQTQ, SIZESUBTST, SIZESYEVR, 00018 $ SIZETMS, SIZETST 00019 * .. 00020 * .. Array Arguments .. 00021 INTEGER DESCA( * ) 00022 * 00023 * Purpose 00024 * ======= 00025 * 00026 * PDLASIZESEPR computes the amount of memory needed by 00027 * various SEPR test routines, as well as PDSYEVR itself. 00028 * 00029 * Arguments 00030 * ========= 00031 * 00032 * DESCA (global input) INTEGER array dimension ( DLEN_ ) 00033 * Array descriptor for dense matrix. 00034 * 00035 * SIZEMQRLEFT LWORK for the 1st PDORMQR call in PDLAGSY 00036 * 00037 * SIZEMQRRIGHT LWORK for the 2nd PDORMQR call in PDLAGSY 00038 * 00039 * SIZEQRF LWORK for PDGEQRF in PDLAGSY 00040 * 00041 * SIZETMS LWORK for PDLATMS 00042 * 00043 * SIZEQTQ LWORK for PDSEPQTQ 00044 * 00045 * SIZECHK LWORK for PDSEPCHK 00046 * 00047 * SIZESYEVR LWORK for PDSYEVR 00048 * 00049 * ISIZESYEVR LIWORK for PDSYEVR 00050 * 00051 * SIZESUBTST LWORK for PDSEPRSUBTST 00052 * 00053 * ISIZESUBTST LIWORK for PDSEPRSUBTST 00054 * 00055 * SIZETST LWORK for PDSEPRTST 00056 * 00057 * ISIZETST LIWORK for PDSEPRTST 00058 * 00059 * 00060 * .. Parameters .. 00061 INTEGER CTXT_, M_, 00062 $ MB_, NB_, RSRC_, CSRC_, LLD_ 00063 PARAMETER ( 00064 $ CTXT_ = 2, M_ = 3, MB_ = 5, NB_ = 6, 00065 $ RSRC_ = 7, CSRC_ = 8, LLD_ = 9 ) 00066 * .. 00067 * .. Local Scalars .. 00068 INTEGER CSRC_A, IACOL, IAROW, ICOFFA, IROFFA, LCM, 00069 $ LCMQ, LDA, MQ0, MYCOL, MYROW, N, NB, NEIG, NN, 00070 $ NNP, NP, NP0, NPCOL, NPROW, NQ, RSRC_A 00071 * .. 00072 * .. External Functions .. 00073 INTEGER ICEIL, ILCM, INDXG2P, NUMROC 00074 EXTERNAL ICEIL, ILCM, INDXG2P, NUMROC 00075 * 00076 * .. External Subroutines .. 00077 EXTERNAL BLACS_GRIDINFO 00078 * .. 00079 * .. Intrinsic Functions .. 00080 INTRINSIC MAX 00081 * .. 00082 * .. Executable Statements .. 00083 * 00084 N = DESCA( M_ ) 00085 NB = DESCA( MB_ ) 00086 RSRC_A = DESCA( RSRC_ ) 00087 CSRC_A = DESCA( CSRC_ ) 00088 * 00089 LDA = DESCA( LLD_ ) 00090 CALL BLACS_GRIDINFO( DESCA( CTXT_ ), NPROW, NPCOL, MYROW, MYCOL ) 00091 * 00092 LCM = ILCM( NPROW, NPCOL ) 00093 LCMQ = LCM / NPCOL 00094 IROFFA = 0 00095 ICOFFA = 0 00096 IAROW = INDXG2P( 1, NB, MYROW, RSRC_A, NPROW ) 00097 IACOL = INDXG2P( 1, NB, MYCOL, CSRC_A, NPCOL ) 00098 NP = NUMROC( N+IROFFA, NB, MYROW, IAROW, NPROW ) 00099 NQ = NUMROC( N+ICOFFA, NB, MYCOL, IACOL, NPCOL ) 00100 SIZEMQRLEFT = MAX( ( NB*( NB-1 ) ) / 2, ( NP+NQ )*NB ) + NB*NB 00101 SIZEMQRRIGHT = MAX( ( NB*( NB-1 ) ) / 2, 00102 $ ( NQ+MAX( NP+NUMROC( NUMROC( N+ICOFFA, NB, 0, 0, 00103 $ NPCOL ), NB, 0, 0, LCMQ ), NP ) )*NB ) + NB*NB 00104 SIZEQRF = NB*NP + NB*NQ + NB*NB 00105 SIZETMS = ( LDA+1 )*MAX( 1, NQ ) + 00106 $ MAX( SIZEMQRLEFT, SIZEMQRRIGHT, SIZEQRF ) 00107 * 00108 NP0 = NUMROC( N, DESCA( MB_ ), 0, 0, NPROW ) 00109 MQ0 = NUMROC( N, DESCA( NB_ ), 0, 0, NPCOL ) 00110 SIZEQTQ = 2 + MAX( DESCA( MB_ ), 2 )*( 2*NP0+MQ0 ) 00111 SIZECHK = NUMROC( N, DESCA( NB_ ), MYCOL, 0, NPCOL ) 00112 * 00113 NEIG = N 00114 NN = MAX( N, NB, 2 ) + 1 00115 NP0 = NUMROC( NN, NB, 0, 0, NPROW ) 00116 MQ0 = NUMROC( MAX( NEIG, NB, 2 ), NB, 0, 0, NPCOL ) 00117 NNP = MAX( N, NPROW*NPCOL+1, 4 ) 00118 * 00119 * 00120 SIZESYEVR = 1 + 5*N + MAX( 18*NN, NP0*MQ0+2*NB*NB ) + 00121 $ (2 + ICEIL( NEIG, NPROW*NPCOL ))*NN 00122 SIZESYEVR = MAX(3, SIZESYEVR) 00123 * 00124 ISIZESYEVR = 12*NNP + 2*N 00125 * 00126 SIZESUBTST = MAX( SIZETMS, SIZEQTQ, SIZECHK, SIZESYEVR ) + 00127 $ IPREPAD + IPOSTPAD 00128 ISIZESUBTST = ISIZESYEVR + IPREPAD + IPOSTPAD 00129 * 00130 * Allow room for A, COPYA and Z and DIAG, WIN, WNEW, GAP, WORK 00131 * 00132 SIZETST = 3*( LDA*NP+IPREPAD+IPOSTPAD ) + 00133 $ 4*( N+IPREPAD+IPOSTPAD ) + SIZESUBTST 00134 * 00135 * Allow room for IFAIL, ICLUSTR, and IWORK 00136 * (only needed for PDSYEVX) 00137 * 00138 ISIZETST = N + 2*NPROW*NPCOL + 2*( IPREPAD+IPOSTPAD ) + 00139 $ ISIZESUBTST 00140 * 00141 * 00142 RETURN 00143 END