119 integer,
intent(in) :: m, n, ldl, ldr
120 integer,
intent(inout) :: p(*)
121 real(real64),
intent(inout) :: L(ldl,*)
122 real(real64),
intent(inout) :: R(ldr,*)
123 real(real64),
intent(in) :: u(*)
124 real(real64),
intent(in) :: v(*)
125 real(real64),
intent(out) :: w(*)
126 real(real64) one,tau,tmp
127 parameter(one = 1d0, tau = 1d-1)
128 integer k,info,i,j,itmp
129 external dcopy,daxpy,dtrsv,dger,dgemv,dswap
139 else if (ldl < m)
then
141 else if (ldr < k)
then
152 call dtrsv(
'L',
'N',
'U',k,l,ldl,w,1)
155 call dgemv(
'N',m-k,k,-one,l(k+1,1),ldl,w,1,one,w(k+1),1)
159 if (abs(w(j)) < tau * abs(l(j+1,j)*w(j) + w(j+1)))
then
169 call dswap(m-j+1,l(j,j),1,l(j,j+1),1)
170 call dswap(j+1,l(j,1),ldl,l(j+1,1),ldl)
172 call dswap(n-j+1,r(j,j),ldr,r(j+1,j),ldr)
175 call daxpy(m-j+1,tmp,l(j,j),1,l(j,j+1),1)
177 call daxpy(n-j+1,-tmp,r(j+1,j),ldr,r(j,j),ldr)
179 w(j) = w(j) - tmp*w(j+1)
185 call daxpy(n-j+1,-tmp,r(j,j),ldr,r(j+1,j),ldr)
187 call daxpy(m-j,tmp,l(j+1,j+1),1,l(j+1,j),1)
190 call daxpy(n,w(1),v,1,r(1,1),ldr)
193 if (abs(r(j,j)) < tau * abs(l(j+1,j)*r(j,j) + r(j+1,j)))
then
200 call dswap(m-j+1,l(j,j),1,l(j,j+1),1)
201 call dswap(j+1,l(j,1),ldl,l(j+1,1),ldl)
203 call dswap(n-j+1,r(j,j),ldr,r(j+1,j),ldr)
206 call daxpy(m-j+1,tmp,l(j,j),1,l(j,j+1),1)
208 call daxpy(n-j+1,-tmp,r(j+1,j),ldr,r(j,j),ldr)
211 tmp = r(j+1,j)/r(j,j)
214 call daxpy(n-j,-tmp,r(j,j+1),ldr,r(j+1,j+1),ldr)
216 call daxpy(m-j,tmp,l(j+1,j+1),1,l(j+1,j),1)
220 call dcopy(k,v,1,w,1)
221 call dtrsv(
'U',
'T',
'N',k,r,ldr,w,1)
222 call dger(m-k,k,one,w(k+1),1,w,1,l(k+1,1),ldl)