1 SUBROUTINE svd_solve(m, n, mp, np, a, b, v, w, nw, small)
7 INTEGER m, n, mp, np, nw
8 REAL(rprec),
DIMENSION(mp,np) :: a
9 REAL(rprec),
DIMENSION(n,n) :: v
10 REAL(rprec),
DIMENSION(n) :: w
11 REAL(rprec),
DIMENSION(m) :: b
20 INTEGER :: istat, i, j
21 REAL(rprec),
ALLOCATABLE :: u(:,:)
56 ALLOCATE (u(m,n), stat=istat)
57 IF(istat.ne.0) stop
'Stop: No memory in svd_nesc'
68 CALL svdcmp (u, m, n, m, n, w, v)
72 CALL sortsvd (m, n, m, n, w, u, v)
76 IF ( abs(w(nw)/w(1)) .gt. small)
EXIT
88 v(:n,1) = sum(u(:m,1)*b(:m)) *v(:n,1) /w(1)
92 v(:n,i) = v(:n,j) + sum(u(:m,i)*b(:m)) *v(:n,i) / w(i)
96 DEALLOCATE (u, stat=istat)
98 END SUBROUTINE svd_solve