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