3      IMPLICIT NONE
    4
    5
    6      INTEGER            ISIDE, LDA, M, N, NB, NITRAF
    7
    8
    9      INTEGER            ITRAF( * )
   10      REAL               A( LDA, * ), DTRAF( * ), WORK( * )
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68 
   69
   70      REAL               ZERO, ONE
   71      parameter( zero = 0.0e+0, one = 1.0e+0 )
   72
   73
   74      INTEGER            I, IT, J, NNB, PD
   75      REAL               TAU
   76
   77
   78      EXTERNAL           slarfx, srot
   79
   81
   82
   83
   84
   85
   86      IF( m.LE.0 .OR. n.LE.0 )
   87     $   return
   88
   89      IF( iside.EQ.0 ) then
   90
   91
   92
   93         DO 20 j = 1, n, nb
   94            pd = 1
   95            nnb = 
min( nb, n - j + 1 )
 
   96            DO 10 i = 1, nitraf
   97               it = itraf(i)
   98               IF( it.LE.m ) then
   99
  100
  101
  102                  CALL srot( nnb, a(it,j), lda, a(it+1,j), lda,
  103     $                       dtraf(pd), dtraf(pd+1) )
  104                  pd = pd + 2
  105               ELSE IF( it.LE.2*m ) then
  106
  107
  108
  109                  tau = dtraf(pd)
  110                  dtraf(pd) = one
  111                  CALL slarfx( 'Left', 3, nnb, dtraf(pd), tau,
  112     $                         a(it-m,j), lda, work )
  113                  dtraf(pd) = tau
  114                  pd = pd + 3
  115               else
  116
  117
  118
  119                  tau = dtraf(pd+2)
  120                  dtraf(pd+2) = one
  121                  CALL slarfx( 'Left', 3, nnb, dtraf(pd), tau,
  122     $                         a(it-2*m,j), lda, work )
  123                  dtraf(pd+2) = tau
  124                  pd = pd + 3
  125               END IF
  126   10       continue
  127   20    continue
  128      else
  129         pd = 1
  130         DO 30 i = 1, nitraf
  131            it = itraf(i)
  132            IF( it.LE.n ) then
  133
  134
  135
  136               CALL srot( m, a(1,it), 1, a(1,it+1), 1, dtraf(pd),
  137     $                    dtraf(pd+1) )
  138               pd = pd + 2
  139            ELSE IF( it.LE.2*n ) then
  140
  141
  142
  143               tau = dtraf(pd)
  144               dtraf(pd) = one
  145               CALL slarfx( 'Right', m, 3, dtraf(pd), tau, a(1,it-n),
  146     $                      lda, work )
  147               dtraf(pd) = tau
  148               pd = pd + 3
  149            else
  150
  151
  152
  153               tau = dtraf(pd+2)
  154               dtraf(pd+2) = one
  155               CALL slarfx( 'Right', m, 3, dtraf(pd), tau, a(1,it-2*n),
  156     $                      lda, work )
  157               dtraf(pd+2) = tau
  158               pd = pd + 3
  159            END IF
  160   30    continue
  161      END IF
  162
  163      return
  164
  165
  166