119 integer,
intent(in) :: m, n, ldl, ldr
120 integer,
intent(inout) :: p(*)
121 complex(real32),
intent(inout) :: L(ldl,*)
122 complex(real32),
intent(inout) :: R(ldr,*)
123 complex(real32),
intent(in) :: u(*)
124 complex(real32),
intent(in) :: v(*)
125 complex(real32),
intent(out) :: w(*)
126 complex(real32) one,tmp
128 parameter(one = 1e0, tau = 1e-1)
129 integer k,info,i,j,itmp
130 external ccopy,caxpy,ctrsv,cgeru,cgemv,cswap
140 else if (ldl < m)
then
142 else if (ldr < k)
then
153 call ctrsv(
'L',
'N',
'U',k,l,ldl,w,1)
156 call cgemv(
'N',m-k,k,-one,l(k+1,1),ldl,w,1,one,w(k+1),1)
160 if (abs(w(j)) < tau * abs(l(j+1,j)*w(j) + w(j+1)))
then
170 call cswap(m-j+1,l(j,j),1,l(j,j+1),1)
171 call cswap(j+1,l(j,1),ldl,l(j+1,1),ldl)
173 call cswap(n-j+1,r(j,j),ldr,r(j+1,j),ldr)
176 call caxpy(m-j+1,tmp,l(j,j),1,l(j,j+1),1)
178 call caxpy(n-j+1,-tmp,r(j+1,j),ldr,r(j,j),ldr)
180 w(j) = w(j) - tmp*w(j+1)
186 call caxpy(n-j+1,-tmp,r(j,j),ldr,r(j+1,j),ldr)
188 call caxpy(m-j,tmp,l(j+1,j+1),1,l(j+1,j),1)
191 call caxpy(n,w(1),v,1,r(1,1),ldr)
194 if (abs(r(j,j)) < tau * abs(l(j+1,j)*r(j,j) + r(j+1,j)))
then
201 call cswap(m-j+1,l(j,j),1,l(j,j+1),1)
202 call cswap(j+1,l(j,1),ldl,l(j+1,1),ldl)
204 call cswap(n-j+1,r(j,j),ldr,r(j+1,j),ldr)
207 call caxpy(m-j+1,tmp,l(j,j),1,l(j,j+1),1)
209 call caxpy(n-j+1,-tmp,r(j+1,j),ldr,r(j,j),ldr)
212 tmp = r(j+1,j)/r(j,j)
215 call caxpy(n-j,-tmp,r(j,j+1),ldr,r(j+1,j+1),ldr)
217 call caxpy(m-j,tmp,l(j+1,j+1),1,l(j+1,j),1)
221 call ccopy(k,v,1,w,1)
222 call ctrsv(
'U',
'T',
'N',k,r,ldr,w,1)
223 call cgeru(m-k,k,one,w(k+1),1,w,1,l(k+1,1),ldl)