4 $ ISEED, WIN, MAXSIZE, VECSIZE, VALSIZE )
15 INTEGER IL, IU, MAXSIZE, N, VALSIZE, VECSIZE
16 DOUBLE PRECISION VL, VU
19 INTEGER DESCA( * ), ISEED( 4 )
20 DOUBLE PRECISION WIN( * )
104 INTEGER BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
105 $ mb_, nb_, rsrc_, csrc_, lld_
106 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
107 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
108 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
109 DOUBLE PRECISION TWENTY
110 parameter( twenty = 20.0d0 )
114 INTEGER CLUSTERSIZE, I, ILMIN, IUMAX, MAXCLUSTERSIZE,
115 $ mq0, mycol, myil, myiu, myrow, nb, neig, nn,
117 DOUBLE PRECISION ANORM, EPS, ORFAC, SAFMIN, VLMIN, VUMAX
123 INTEGER ICEIL, NUMROC
124 DOUBLE PRECISION DLARAN, PDLAMCH
125 EXTERNAL lsame, iceil, numroc, dlaran, pdlamch
131 INTRINSIC abs, dble, int,
max
135 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
142 eps = pdlamch( desca( ctxt_ ),
'Precision' )
143 safmin = pdlamch( desca( ctxt_ ),
'Safe Minimum' )
146 np0 = numroc( nn, nb, 0, 0, nprow )
155 IF( lsame( range,
'I' ) )
THEN
157 $ il = int( dlaran( iseed )*dble( n ) ) + 1
159 $ iu = int( dlaran( iseed )*dble( n-il ) ) + il
162 ELSE IF( lsame( range,
'V' ) )
THEN
164 myil = int( dlaran( iseed )*dble( n ) ) + 1
165 myiu = int( dlaran( iseed )*dble( n-myil ) ) + myil
166 vl = win( myil ) + twenty*eps*abs( win( myil ) )
167 vu = win( myiu ) + twenty*eps*abs( win( myiu ) )
168 vu =
max( vu, vl+eps*twenty*abs( vl )+safmin )
173 IF( lsame( range,
'V' ) )
THEN
178 vlmin = vl - twenty*eps*anorm
179 vumax = vu + twenty*eps*anorm
183 IF( win( i ).LT.vlmin )
185 IF( win( i ).LT.vumax )
192 ELSE IF( lsame( range,
'I' ) )
THEN
195 ELSE IF( lsame( range,
'A' ) )
THEN
200 neig = iumax - ilmin + 1
202 mq0 = numroc(
max( neig, nb, 2 ), nb, 0, 0, npcol )
203 vecsize = 4*n +
max( 5*nn, np0*mq0 ) +
204 $ iceil( neig, nprow*npcol )*nn
209 DO 20 i = ilmin + 1, iumax
210 IF( ( win( i )-win( i-1 ) ).LT.orfac*2*anorm )
THEN
211 clustersize = clustersize + 1
212 IF( clustersize.GT.maxclustersize )
213 $ maxclustersize = clustersize
218 IF( clustersize.GT.maxclustersize )
219 $ maxclustersize = clustersize
224 maxsize = vecsize +
max( ( maxclustersize