1 SUBROUTINE zlascl( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
9 INTEGER info, kl, ku, lda, m, n
10 DOUBLE PRECISION cfrom, cto
13 COMPLEX*16 a( lda, * )
78 DOUBLE PRECISION zero, one
79 parameter( zero = 0.0d0, one = 1.0d0 )
83 INTEGER i,
itype, j, k1, k2, k3, k4
84 DOUBLE PRECISION bignum, cfrom1, cfromc, cto1, ctoc, mul, smlnum
88 DOUBLE PRECISION dlamch
89 EXTERNAL lsame, dlamch, disnan
103 IF( lsame( type,
'G' ) )
THEN
105 ELSE IF( lsame( type,
'L' ) )
THEN
107 ELSE IF( lsame( type,
'U' ) )
THEN
109 ELSE IF( lsame( type,
'H' ) )
THEN
111 ELSE IF( lsame( type,
'B' ) )
THEN
113 ELSE IF( lsame( type,
'Q' ) )
THEN
115 ELSE IF( lsame( type,
'Z' ) )
THEN
121 IF(
itype.EQ.-1 )
THEN
123 ELSE IF( cfrom.EQ.zero .OR. disnan(cfrom) )
THEN
125 ELSE IF( disnan(cto) )
THEN
127 ELSE IF( m.LT.0 )
THEN
129 ELSE IF( n.LT.0 .OR. (
itype.EQ.4 .AND. n.NE.m ) .OR.
130 $ (
itype.EQ.5 .AND. n.NE.m ) )
THEN
132 ELSE IF(
itype.LE.3 .AND. lda.LT.
max( 1, m ) )
THEN
134 ELSE IF(
itype.GE.4 )
THEN
135 IF( kl.LT.0 .OR. kl.GT.
max( m-1, 0 ) )
THEN
137 ELSE IF( ku.LT.0 .OR. ku.GT.
max( n-1, 0 ) .OR.
138 $ ( (
itype.EQ.4 .OR.
itype.EQ.5 ) .AND. kl.NE.ku ) )
141 ELSE IF( (
itype.EQ.4 .AND. lda.LT.kl+1 ) .OR.
142 $ (
itype.EQ.5 .AND. lda.LT.ku+1 ) .OR.
143 $ (
itype.EQ.6 .AND. lda.LT.2*kl+ku+1 ) )
THEN
149 CALL
xerbla(
'ZLASCL', -info )
155 IF( n.EQ.0 .OR. m.EQ.0 )
160 smlnum = dlamch(
'S' )
161 bignum = one / smlnum
167 cfrom1 = cfromc*smlnum
168 IF( cfrom1.EQ.cfromc )
THEN
176 IF( cto1.EQ.ctoc )
THEN
182 ELSE IF( abs( cfrom1 ).GT.abs( ctoc ) .AND. ctoc.NE.zero )
THEN
186 ELSE IF( abs( cto1 ).GT.abs( cfromc ) )
THEN
196 IF(
itype.EQ.0 )
THEN
202 a( i, j ) = a( i, j )*mul
206 ELSE IF(
itype.EQ.1 )
THEN
212 a( i, j ) = a( i, j )*mul
216 ELSE IF(
itype.EQ.2 )
THEN
221 DO 60 i = 1,
min( j, m )
222 a( i, j ) = a( i, j )*mul
226 ELSE IF(
itype.EQ.3 )
THEN
231 DO 80 i = 1,
min( j+1, m )
232 a( i, j ) = a( i, j )*mul
236 ELSE IF(
itype.EQ.4 )
THEN
243 DO 100 i = 1,
min( k3, k4-j )
244 a( i, j ) = a( i, j )*mul
248 ELSE IF(
itype.EQ.5 )
THEN
255 DO 120 i =
max( k1-j, 1 ), k3
256 a( i, j ) = a( i, j )*mul
260 ELSE IF(
itype.EQ.6 )
THEN
269 DO 140 i =
max( k1-j, k2 ),
min( k3, k4-j )
270 a( i, j ) = a( i, j )*mul