4 $ ISEED, WIN, MAXSIZE, VECSIZE, VALSIZE )
15 INTEGER IL, IU, MAXSIZE, N, VALSIZE, VECSIZE
19 INTEGER DESCA( * ), ISEED( 4 )
104 INTEGER BLOCK_CYCLIC_2D, , DTYPE_, CTXT_, M_, N_,
105 $ mb_, nb_, rsrc_, csrc_, lld_
106 parameter( block_cyclic_2d = 1
107 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
108 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
110 parameter( twenty = 20.0e0 )
114 INTEGER CLUSTERSIZE, I, ILMIN, IUMAX, MAXCLUSTERSIZE,
117 REAL ANORM, EPS, ORFAC, SAFMIN, VLMIN, VUMAX
123 INTEGER ICEIL, NUMROC
125 EXTERNAL lsame, iceil, numroc, pslamch, slaran
131 INTRINSIC abs, int,
max, real
135 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
142 eps = pslamch( desca( ctxt_ ),
'Precision' )
143 safmin = pslamch( desca( ctxt_ ),
'Safe Minimum' )
146 np0 = numroc( nn, nb, 0, 0, nprow )
153 $ anorm =
max( abs( win( 1 ) ), abs( win( n ) ), anorm )
155 IF( lsame( range,
'I' ) )
THEN
157 $ il = int( slaran( iseed )*real( n ) ) + 1
159 $ iu = int( slaran( iseed )*real( n-il ) ) + il
162 ELSE IF( lsame( range,
'V' ) )
THEN
164 myil = int( slaran( iseed )*real( n ) ) + 1
165 myiu = int( slaran( iseed )*real( 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-1 ), 0 )*n