119 integer,
intent(in) :: m, n, ldl, ldr
120 integer,
intent(inout) :: p(*)
121 real(real32),
intent(inout) :: L(ldl,*), R(ldr,*)
122 real(real32),
intent(in) :: u(*), v(*)
123 real(real32),
intent(out) :: w(*)
124 real(real32) one,tau,tmp
125 parameter(one = 1e0, tau = 1e-1)
126 integer k,info,i,j,itmp
127 external scopy,saxpy,strsv,sger,sgemv,sswap
137 else if (ldl < m)
then
139 else if (ldr < k)
then
150 call strsv(
'L',
'N',
'U',k,l,ldl,w,1)
153 call sgemv(
'N',m-k,k,-one,l(k+1,1),ldl,w,1,one,w(k+1),1)
157 if (abs(w(j)) < tau * abs(l(j+1,j)*w(j) + w(j+1)))
then
167 call sswap(m-j+1,l(j,j),1,l(j,j+1),1)
168 call sswap(j+1,l(j,1),ldl,l(j+1,1),ldl)
170 call sswap(n-j+1,r(j,j),ldr,r(j+1,j),ldr)
173 call saxpy(m-j+1,tmp,l(j,j),1,l(j,j+1),1)
175 call saxpy(n-j+1,-tmp,r(j+1,j),ldr,r(j,j),ldr)
177 w(j) = w(j) - tmp*w(j+1)
183 call saxpy(n-j+1,-tmp,r(j,j),ldr,r(j+1,j),ldr)
185 call saxpy(m-j,tmp,l(j+1,j+1),1,l(j+1,j),1)
188 call saxpy(n,w(1),v,1,r(1,1),ldr)
191 if (abs(r(j,j)) < tau * abs(l(j+1,j)*r(j,j) + r(j+1,j)))
then
198 call sswap(m-j+1,l(j,j),1,l(j,j+1),1)
199 call sswap(j+1,l(j,1),ldl,l(j+1,1),ldl)
201 call sswap(n-j+1,r(j,j),ldr,r(j+1,j),ldr)
204 call saxpy(m-j+1,tmp,l(j,j),1,l(j,j+1),1)
206 call saxpy(n-j+1,-tmp,r(j+1,j),ldr,r(j,j),ldr)
209 tmp = r(j+1,j)/r(j,j)
212 call saxpy(n-j,-tmp,r(j,j+1),ldr,r(j+1,j+1),ldr)
214 call saxpy(m-j,tmp,l(j+1,j+1),1,l(j+1,j),1)
218 call scopy(k,v,1,w,1)
219 call strsv(
'U',
'T',
'N',k,r,ldr,w,1)
220 call sger(m-k,k,one,w(k+1),1,w,1,l(k+1,1),ldl)