Rev 86632 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
subroutine dpbsl(abd,lda,n,m,b)integer lda,n,mdouble precision abd(lda,n),b(n)cc dpbsl solves the double precision symmetric positive definitec band system a*x = bc using the factors computed by dpbco or dpbfa.cc on entrycc abd double precision(lda, n)c the output from dpbco or dpbfa.cc lda integerc the leading dimension of the array abd .cc n integerc the order of the matrix a .cc m integerc the number of diagonals above the main diagonal.cc b double precision(n)c the right hand side vector.cc on returncc b the solution vector x .cc error conditioncc a division by zero will occur if the input factor containsc a zero on the diagonal. technically this indicatesc singularity but it is usually caused by improper subroutinec arguments. it will not occur if the subroutines are calledc correctly and info .eq. 0 .cc to compute inverse(a) * c where c is a matrixc with p columnsc call dpbco(abd,lda,n,rcond,z,info)c if (rcond is too small .or. info .ne. 0) go to ...c do 10 j = 1, pc call dpbsl(abd,lda,n,c(1,j))c 10 continuecc linpack. this version dated 08/14/78 .c cleve moler, university of new mexico, argonne national lab.cc subroutines and functionscc blas daxpy,ddotc fortran mincc internal variablescdouble precision ddot,tinteger k,kb,la,lb,lmcc solve trans(r)*y = bcdo 10 k = 1, nlm = min(k-1,m)la = m + 1 - lmlb = k - lmt = ddot(lm,abd(la,k),1,b(lb),1)b(k) = (b(k) - t)/abd(m+1,k)10 continuecc solve r*x = ycdo 20 kb = 1, nk = n + 1 - kblm = min(k-1,m)la = m + 1 - lmlb = k - lmb(k) = b(k)/abd(m+1,k)t = -b(k)call daxpy(lm,t,abd(la,k),1,b(lb),1)20 continuereturnend