263      SUBROUTINE slals0( ICOMPQ, NL, NR, SQRE, NRHS, B, LDB, BX,
 
  265     $                   PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM,
 
  266     $                   POLES, DIFL, DIFR, Z, K, C, S, WORK, INFO )
 
  273      INTEGER            GIVPTR, ICOMPQ, INFO, K, LDB, LDBX, LDGCOL,
 
  274     $                   LDGNUM, NL, NR, NRHS, SQRE
 
  278      INTEGER            GIVCOL( LDGCOL, * ), PERM( * )
 
  279      REAL               B( LDB, * ), BX( LDBX, * ), DIFL( * ),
 
  280     $                   DIFR( LDGNUM, * ), GIVNUM( LDGNUM, * ),
 
  281     $                   poles( ldgnum, * ), work( * ), z( * )
 
  287      REAL               ONE, ZERO, NEGONE
 
  288      PARAMETER          ( ONE = 1.0e0, zero = 0.0e0, negone = -1.0e0 )
 
  291      INTEGER            I, J, M, N, NLP1
 
  292      REAL               DIFLJ, DIFRJ, DJ, DSIGJ, DSIGJP, TEMP
 
  301      EXTERNAL           SLAMC3, SNRM2
 
  313      IF( ( icompq.LT.0 ) .OR. ( icompq.GT.1 ) ) 
THEN 
  315      ELSE IF( nl.LT.1 ) 
THEN 
  317      ELSE IF( nr.LT.1 ) 
THEN 
  319      ELSE IF( ( sqre.LT.0 ) .OR. ( sqre.GT.1 ) ) 
THEN 
  321      ELSE IF( nrhs.LT.1 ) 
THEN 
  323      ELSE IF( ldb.LT.n ) 
THEN 
  325      ELSE IF( ldbx.LT.n ) 
THEN 
  327      ELSE IF( givptr.LT.0 ) 
THEN 
  329      ELSE IF( ldgcol.LT.n ) 
THEN 
  331      ELSE IF( ldgnum.LT.n ) 
THEN 
  333      ELSE IF( k.LT.1 ) 
THEN 
  337         CALL xerbla( 
'SLALS0', -info )
 
  344      IF( icompq.EQ.0 ) 
THEN 
  351            CALL srot( nrhs, b( givcol( i, 2 ), 1 ), ldb,
 
  352     $                 b( givcol( i, 1 ), 1 ), ldb, givnum( i, 2 ),
 
  358         CALL scopy( nrhs, b( nlp1, 1 ), ldb, bx( 1, 1 ), ldbx )
 
  360            CALL scopy( nrhs, b( perm( i ), 1 ), ldb, bx( i, 1 ),
 
  368            CALL scopy( nrhs, bx, ldbx, b, ldb )
 
  369            IF( z( 1 ).LT.zero ) 
THEN 
  370               CALL sscal( nrhs, negone, b, ldb )
 
  376               dsigj = -poles( j, 2 )
 
  378                  difrj = -difr( j, 1 )
 
  379                  dsigjp = -poles( j+1, 2 )
 
  381               IF( ( z( j ).EQ.zero ) .OR. ( poles( j, 2 ).EQ.zero ) )
 
  385                  work( j ) = -poles( j, 2 )*z( j ) / diflj /
 
  386     $                        ( poles( j, 2 )+dj )
 
  389                  IF( ( z( i ).EQ.zero ) .OR.
 
  390     $                ( poles( i, 2 ).EQ.zero ) ) 
THEN 
  398                     work( i ) = poles( i, 2 )*z( i ) /
 
  399     $                           ( slamc3( poles( i, 2 ), dsigj )-
 
  400     $                           diflj ) / ( poles( i, 2 )+dj )
 
  404                  IF( ( z( i ).EQ.zero ) .OR.
 
  405     $                ( poles( i, 2 ).EQ.zero ) ) 
THEN 
  408                     work( i ) = poles( i, 2 )*z( i ) /
 
  409     $                           ( slamc3( poles( i, 2 ), dsigjp )+
 
  410     $                           difrj ) / ( poles( i, 2 )+dj )
 
  414               temp = snrm2( k, work, 1 )
 
  415               CALL sgemv( 
'T', k, nrhs, one, bx, ldbx, work, 1,
 
  418               CALL slascl( 
'G', 0, 0, temp, one, 1, nrhs, b( j, 1 ),
 
  425         IF( k.LT.max( m, n ) )
 
  426     $      
CALL slacpy( 
'A', n-k, nrhs, bx( k+1, 1 ), ldbx,
 
  436            CALL scopy( nrhs, b, ldb, bx, ldbx )
 
  439               dsigj = poles( j, 2 )
 
  440               IF( z( j ).EQ.zero ) 
THEN 
  443                  work( j ) = -z( j ) / difl( j ) /
 
  444     $                        ( dsigj+poles( j, 1 ) ) / difr( j, 2 )
 
  447                  IF( z( j ).EQ.zero ) 
THEN 
  455                     work( i ) = z( j ) / ( slamc3( dsigj,
 
  457     $                           2 ) )-difr( i, 1 ) ) /
 
  458     $                           ( dsigj+poles( i, 1 ) ) / difr( i, 2 )
 
  462                  IF( z( j ).EQ.zero ) 
THEN 
  465                     work( i ) = z( j ) / ( slamc3( dsigj, -poles( i,
 
  466     $                           2 ) )-difl( i ) ) /
 
  467     $                           ( dsigj+poles( i, 1 ) ) / difr( i, 2 )
 
  470               CALL sgemv( 
'T', k, nrhs, one, b, ldb, work, 1, zero,
 
  479            CALL scopy( nrhs, b( m, 1 ), ldb, bx( m, 1 ), ldbx )
 
  480            CALL srot( nrhs, bx( 1, 1 ), ldbx, bx( m, 1 ), ldbx, c,
 
  483         IF( k.LT.max( m, n ) )
 
  484     $      
CALL slacpy( 
'A', n-k, nrhs, b( k+1, 1 ), ldb, bx( k+1,
 
  490         CALL scopy( nrhs, bx( 1, 1 ), ldbx, b( nlp1, 1 ), ldb )
 
  492            CALL scopy( nrhs, bx( m, 1 ), ldbx, b( m, 1 ), ldb )
 
  495            CALL scopy( nrhs, bx( i, 1 ), ldbx, b( perm( i ), 1 ),
 
  501         DO 100 i = givptr, 1, -1
 
  502            CALL srot( nrhs, b( givcol( i, 2 ), 1 ), ldb,
 
  503     $                 b( givcol( i, 1 ), 1 ), ldb, givnum( i, 2 ),
 
 
subroutine slals0(icompq, nl, nr, sqre, nrhs, b, ldb, bx, ldbx, perm, givptr, givcol, ldgcol, givnum, ldgnum, poles, difl, difr, z, k, c, s, work, info)
SLALS0 applies back multiplying factors in solving the least squares problem using divide and conquer...