Initial commit
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
SUBROUTINE bandec(a,n,m1,m2,np,mp,al,mpl,indx,d)
|
||||
INTEGER m1,m2,mp,mpl,n,np,indx(n)
|
||||
REAL d,a(np,mp),al(np,mpl),TINY
|
||||
PARAMETER (TINY=1.e-20)
|
||||
INTEGER i,j,k,l,mm
|
||||
REAL dum
|
||||
mm=m1+m2+1
|
||||
if(mm.gt.mp.or.m1.gt.mpl.or.n.gt.np) pause 'bad args in bandec'
|
||||
l=m1
|
||||
do 13 i=1,m1
|
||||
do 11 j=m1+2-i,mm
|
||||
a(i,j-l)=a(i,j)
|
||||
11 continue
|
||||
l=l-1
|
||||
do 12 j=mm-l,mm
|
||||
a(i,j)=0.
|
||||
12 continue
|
||||
13 continue
|
||||
d=1.
|
||||
l=m1
|
||||
do 18 k=1,n
|
||||
dum=a(k,1)
|
||||
i=k
|
||||
if(l.lt.n)l=l+1
|
||||
do 14 j=k+1,l
|
||||
if(abs(a(j,1)).gt.abs(dum))then
|
||||
dum=a(j,1)
|
||||
i=j
|
||||
endif
|
||||
14 continue
|
||||
indx(k)=i
|
||||
if(dum.eq.0.) a(k,1)=TINY
|
||||
if(i.ne.k)then
|
||||
d=-d
|
||||
do 15 j=1,mm
|
||||
dum=a(k,j)
|
||||
a(k,j)=a(i,j)
|
||||
a(i,j)=dum
|
||||
15 continue
|
||||
endif
|
||||
do 17 i=k+1,l
|
||||
dum=a(i,1)/a(k,1)
|
||||
al(k,i-k)=dum
|
||||
do 16 j=2,mm
|
||||
a(i,j-1)=a(i,j)-dum*a(k,j)
|
||||
16 continue
|
||||
a(i,mm)=0.
|
||||
17 continue
|
||||
18 continue
|
||||
return
|
||||
END
|
||||
Reference in New Issue
Block a user