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