Rev 42390 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
subroutine dpbfa(abd,lda,n,m,info)integer lda,n,m,infodouble precision abd(lda,n)cc dpbfa factors a double precision symmetric positive definitec matrix stored in band form.cc dpbfa is usually called by dpbco, but it can be calledc directly with a saving in time if rcond is not needed.cc on entrycc abd double precision(lda, n)c the matrix to be factored. the columns of the upperc triangle are stored in the columns of abd and thec diagonals of the upper triangle are stored in thec rows of abd . see the comments below for details.cc lda integerc the leading dimension of the array abd .c lda must be .ge. m + 1 .cc n integerc the order of the matrix a .cc m integerc the number of diagonals above the main diagonal.c 0 .le. m .lt. n .cc on returncc abd an upper triangular matrix r , stored in bandc form, so that a = trans(r)*r .cc info integerc = 0 for normal return.c = k if the leading minor of order k is notc positive definite.cc band storagecc if a is a symmetric positive definite band matrix,c the following program segment will set up the input.cc m = (band width above diagonal)c do 20 j = 1, nc i1 = max(1, j-m)c do 10 i = i1, jc k = i-j+m+1c abd(k,j) = a(i,j)c 10 continuec 20 continuecc linpack. this version dated 08/14/78 .c cleve moler, university of new mexico, argonne national lab.cc subroutines and functionscc blas ddotc fortran max,sqrtcc internal variablescdouble precision ddot,tdouble precision sinteger ik,j,jk,k,muc begin block with ...exits to 40ccdo 30 j = 1, ninfo = js = 0.0d0ik = m + 1jk = max(j-m,1)mu = max(m+2-j,1)if (m .lt. mu) go to 20do 10 k = mu, mt = abd(k,j) - ddot(k-mu,abd(ik,jk),1,abd(mu,j),1)t = t/abd(m+1,jk)abd(k,j) = ts = s + t*tik = ik - 1jk = jk + 110 continue20 continues = abd(m+1,j) - sc ......exitif (s .le. 0.0d0) go to 40abd(m+1,j) = sqrt(s)30 continueinfo = 040 continuereturnend