xref: /phasta/phSolver/common/ludcmp.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine ludcmp(aa,n,np,indx,d)
2*59599516SKenneth E. Jansenc---------------------------------------------------------------------
3*59599516SKenneth E. Jansenc
4*59599516SKenneth E. Jansenc  find the LU decomposition of a matrix.
5*59599516SKenneth E. Jansenc
6*59599516SKenneth E. Jansenc  Numerical Recipes: p. 38
7*59599516SKenneth E. Jansenc
8*59599516SKenneth E. Jansenc---------------------------------------------------------------------
9*59599516SKenneth E. Jansen      include "common.h"
10*59599516SKenneth E. Jansen
11*59599516SKenneth E. Jansen      dimension aa(np,np), indx(n), vv(500)
12*59599516SKenneth E. Jansen
13*59599516SKenneth E. Jansen      d=1.0
14*59599516SKenneth E. Jansen      do i=1,n
15*59599516SKenneth E. Jansen         aamax=0.0
16*59599516SKenneth E. Jansen         do j=1,n
17*59599516SKenneth E. Jansen            if (abs(aa(i,j)).gt.aamax) aamax=abs(aa(i,j))
18*59599516SKenneth E. Jansen         enddo
19*59599516SKenneth E. Jansen         vv(i)=1.0/aamax
20*59599516SKenneth E. Jansen      enddo
21*59599516SKenneth E. Jansen
22*59599516SKenneth E. Jansen      do j=1,n
23*59599516SKenneth E. Jansen         do i=1,j-1
24*59599516SKenneth E. Jansen            sum=aa(i,j)
25*59599516SKenneth E. Jansen            do k=1,i-1
26*59599516SKenneth E. Jansen               sum=sum-aa(i,k)*aa(k,j)
27*59599516SKenneth E. Jansen            enddo
28*59599516SKenneth E. Jansen            aa(i,j)=sum
29*59599516SKenneth E. Jansen         enddo
30*59599516SKenneth E. Jansen         aamax = 0.0
31*59599516SKenneth E. Jansen         do i=j,n
32*59599516SKenneth E. Jansen            sum=aa(i,j)
33*59599516SKenneth E. Jansen            do k=1,j-1
34*59599516SKenneth E. Jansen               sum=sum-aa(i,k)*aa(k,j)
35*59599516SKenneth E. Jansen            enddo
36*59599516SKenneth E. Jansen            aa(i,j)=sum
37*59599516SKenneth E. Jansen            dum=vv(i)*abs(sum)
38*59599516SKenneth E. Jansen            if (dum.ge.aamax) then
39*59599516SKenneth E. Jansen               imax=i
40*59599516SKenneth E. Jansen               aamax=dum
41*59599516SKenneth E. Jansen            endif
42*59599516SKenneth E. Jansen         enddo
43*59599516SKenneth E. Jansen         if (j.ne.imax) then
44*59599516SKenneth E. Jansen            do k=1,n
45*59599516SKenneth E. Jansen               dum=aa(imax,k)
46*59599516SKenneth E. Jansen               aa(imax,k)=aa(j,k)
47*59599516SKenneth E. Jansen               aa(j,k)=dum
48*59599516SKenneth E. Jansen            enddo
49*59599516SKenneth E. Jansen            d=-d
50*59599516SKenneth E. Jansen            vv(imax)=vv(j)
51*59599516SKenneth E. Jansen         endif
52*59599516SKenneth E. Jansen         indx(j)=imax
53*59599516SKenneth E. Jansen         if(j.ne.n)then
54*59599516SKenneth E. Jansen            dum=1.0/aa(j,j)
55*59599516SKenneth E. Jansen            do i=j+1,n
56*59599516SKenneth E. Jansen               aa(i,j)=aa(i,j)*dum
57*59599516SKenneth E. Jansen            enddo
58*59599516SKenneth E. Jansen         endif
59*59599516SKenneth E. Jansen      enddo
60*59599516SKenneth E. Jansen
61*59599516SKenneth E. Jansen      return
62*59599516SKenneth E. Jansen      end
63*59599516SKenneth E. Jansen
64*59599516SKenneth E. Jansen
65*59599516SKenneth E. Jansen
66*59599516SKenneth E. Jansen
67*59599516SKenneth E. Jansen
68