vcoord_gen  1.12.0
 All Files Functions Pages
matrix_utils.f90
Go to the documentation of this file.
1 
4 
20 subroutine ludcmp(a,n,np,indx,d)
21  implicit none
22  integer,intent(in):: n,np
23  real,intent(inout):: a(np,np)
24  integer,intent(out):: indx(n)
25  real,intent(out):: d
26  integer i,j,k,imax
27  real aamax,sum,dum
28  real vv(n)
29 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
30  d=1
31  do i=1,n
32  aamax=0
33  do j=1,n
34  if(abs(a(i,j))>aamax) aamax=abs(a(i,j))
35  enddo
36  if(aamax==0) then
37  d=0
38  return
39  endif
40  vv(i)=1/aamax
41  enddo
42  do j=1,n
43  do i=1,j-1
44  sum=a(i,j)
45  do k=1,i-1
46  sum=sum-a(i,k)*a(k,j)
47  enddo
48  a(i,j)=sum
49  enddo
50  aamax=0.
51  do i=j,n
52  sum=a(i,j)
53  do k=1,j-1
54  sum=sum-a(i,k)*a(k,j)
55  enddo
56  a(i,j)=sum
57  dum=vv(i)*abs(sum)
58  if(dum>=aamax) then
59  imax=i
60  aamax=dum
61  endif
62  enddo
63  if (j/=imax)then
64  do k=1,n
65  dum=a(imax,k)
66  a(imax,k)=a(j,k)
67  a(j,k)=dum
68  enddo
69  d=-d
70  vv(imax)=vv(j)
71  endif
72  indx(j)=imax
73  if(a(j,j)==0) then
74  d=0
75  return
76  endif
77  if(j/=n)then
78  dum=1/a(j,j)
79  do i=j+1,n
80  a(i,j)=a(i,j)*dum
81  enddo
82  endif
83  enddo
84 end subroutine
85 
100 subroutine lubksb(a,n,np,indx,b)
101  implicit none
102  integer,intent(in):: n,np
103  real,intent(in):: a(np,np)
104  integer,intent(in):: indx(n)
105  real,intent(inout):: b(n)
106  integer i,j,ii,ll
107  real sum
108 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
109  ii=0
110  do i=1,n
111  ll=indx(i)
112  sum=b(ll)
113  b(ll)=b(i)
114  if (ii/=0)then
115  do j=ii,i-1
116  sum=sum-a(i,j)*b(j)
117  enddo
118  elseif(sum/=0) then
119  ii=i
120  endif
121  b(i)=sum
122  enddo
123  do i=n,1,-1
124  sum=b(i)
125  do j=i+1,n
126  sum=sum-a(i,j)*b(j)
127  enddo
128  b(i)=sum/a(i,i)
129  enddo
130 end subroutine
subroutine ludcmp(a, n, np, indx, d)
This subprogram decomposes a matrix into a product of lower and upper triangular matrices.
subroutine lubksb(a, n, np, indx, b)
Lower and upper triangular back substitution.