147 SUBROUTINE dggbak( JOB, SIDE, N, ILO, IHI, LSCALE, RSCALE, M, V,
157 INTEGER ihi, ilo, info, ldv, m, n
160 DOUBLE PRECISION lscale( * ), rscale( * ), v( ldv, * )
166 LOGICAL leftv, rightv
183 rightv =
lsame( side,
'R' )
184 leftv =
lsame( side,
'L' )
187 IF( .NOT.
lsame( job,
'N' ) .AND. .NOT.
lsame( job,
'P' ) .AND.
188 $ .NOT.
lsame( job,
'S' ) .AND. .NOT.
lsame( job,
'B' ) )
THEN
190 ELSE IF( .NOT.rightv .AND. .NOT.leftv )
THEN
192 ELSE IF( n.LT.0 )
THEN
194 ELSE IF( ilo.LT.1 )
THEN
196 ELSE IF( n.EQ.0 .AND. ihi.EQ.0 .AND. ilo.NE.1 )
THEN
198 ELSE IF( n.GT.0 .AND. ( ihi.LT.ilo .OR. ihi.GT.max( 1, n ) ) )
201 ELSE IF( n.EQ.0 .AND. ilo.EQ.1 .AND. ihi.NE.0 )
THEN
203 ELSE IF( m.LT.0 )
THEN
205 ELSE IF( ldv.LT.max( 1, n ) )
THEN
209 CALL
xerbla(
'DGGBAK', -info )
219 IF(
lsame( job,
'N' ) )
227 IF(
lsame( job,
'S' ) .OR.
lsame( job,
'B' ) )
THEN
233 CALL
dscal( m, rscale( i ), v( i, 1 ), ldv )
241 CALL
dscal( m, lscale( i ), v( i, 1 ), ldv )
249 IF(
lsame( job,
'P' ) .OR.
lsame( job,
'B' ) )
THEN
257 DO 40 i = ilo - 1, 1, -1
261 CALL
dswap( m, v( i, 1 ), ldv, v( k, 1 ), ldv )
271 CALL
dswap( m, v( i, 1 ), ldv, v( k, 1 ), ldv )
281 DO 80 i = ilo - 1, 1, -1
285 CALL
dswap( m, v( i, 1 ), ldv, v( k, 1 ), ldv )
291 DO 100 i = ihi + 1, n
295 CALL
dswap( m, v( i, 1 ), ldv, v( k, 1 ), ldv )