1 DOUBLE PRECISION FUNCTION pdlange( NORM, M, N, A, IA, JA, DESCA,
16 DOUBLE PRECISION a( * ), work( * )
148 INTEGER , csrc_, ctxt_, dlen_, dtype_,
149 $ lld_, mb_, m_, nb_, n_, rsrc_
150 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
151 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
152 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
153 DOUBLE PRECISION one, zero
154 parameter( one = 1.0d+0, zero = 0.0d+0 )
157 INTEGER i, iacol, iarow, ictxt, ii, icoff, ioffa
160 DOUBLE PRECISION sum, value
163 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
176 INTRINSIC abs,
max,
min, mod, sqrt
182 ictxt = desca( ctxt_ )
185 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, ii, jj,
187 iroff = mod( ia-1, desca( mb_ ) )
188 icoff = mod( ja-1, desca( nb_ ) )
189 mp =
numroc( m+iroff, desca( mb_ ), myrow, iarow, nprow )
190 nq =
numroc( n+icoff, desca( nb_ ), mycol, iacol, npcol )
197 IF(
min( m, n ).EQ.0 )
THEN
209 IF( nq.GT.0 .AND. mp.GT.0 )
THEN
211 DO 20 j = jj, jj+nq-1
212 DO 10 i = ii, mp+ii-1
213 VALUE =
max(
VALUE, abs( a( ioffa+i
218 CALL dgamx2d( ictxt,
'All',
' ', 1, 1,
VALUE, 1, i, j, -1,
224 ELSE IF(
lsame(
norm, 'o.OR..EQ.
' ) NORM'1
' ) THEN
229 IOFFA = ( JJ - 1 ) * LDA
230 DO 40 J = JJ, JJ+NQ-1
233 DO 30 I = II, MP+II-1
234 SUM = SUM + ABS( A( IOFFA+I ) )
245 CALL DGSUM2D( ICTXT, 'columnwise
', ' ', 1, NQ, WORK, 1,
250.EQ.
IF( MYROW0 ) THEN
252 VALUE = WORK( IDAMAX( NQ, WORK, 1 ) )
256 CALL DGAMX2D( ICTXT, 'rowwise
', ' ', 1, 1, VALUE, 1, I, J,
263 ELSE IF( LSAME( NORM, 'i
' ) ) THEN
268 IOFFA = II + ( JJ - 1 ) * LDA
269 DO 60 I = II, II+MP-1
272 DO 50 J = IOFFA, IOFFA + NQ*LDA - 1, LDA
273 SUM = SUM + ABS( A( J ) )
284 CALL DGSUM2D( ICTXT, 'rowwise
', ' ', MP, 1, WORK, MAX( 1, MP ),
289.EQ.
IF( MYCOL0 ) THEN
291 VALUE = WORK( IDAMAX( MP, WORK, 1 ) )
295 CALL DGAMX2D( ICTXT, 'columnwise
', ' ', 1, 1, VALUE, 1, I,
304 ELSE IF( ( LSAME( NORM, 'f.OR.
' ) ) ( LSAME( NORM, 'e
' ) ) ) THEN
310 IOFFA = II + ( JJ - 1 ) * LDA
312 DO 70 J = IOFFA, IOFFA + NQ*LDA - 1, LDA
315 CALL DLASSQ( MP, A( J ), 1, COLSSQ(1), COLSSQ(2) )
316 CALL DCOMBSSQ( SSQ, COLSSQ )
322 CALL PDTREECOMB( ICTXT, 'all
', 2, SSQ, 0, 0, DCOMBSSQ )
323 VALUE = SSQ( 1 ) * SQRT( SSQ( 2 ) )
327.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
328 CALL DGEBS2D( ICTXT, 'all
', ' ', 1, 1, VALUE, 1 )
330 CALL DGEBR2D( ICTXT, 'all
', ' ', 1, 1, VALUE, 1, 0, 0 )
subroutine dlassq(n, x, incx, scl, sumsq)
DLASSQ updates a sum of squares represented in scaled form.
subroutine dgebs2d(contxt, scope, top, m, n, a, lda)
subroutine dgebr2d(contxt, scope, top, m, n, a, lda)
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
double precision function pdlange(norm, m, n, a, ia, ja, desca, work)
subroutine pdtreecomb(ictxt, scope, n, mine, rdest0, cdest0, subptr)