home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / fortran / library / linpack / sppsl.for < prev    next >
Text File  |  1984-01-06  |  2KB  |  67 lines

  1.       SUBROUTINE SPPSL(AP,N,B)
  2.       INTEGER N
  3.       REAL AP(1),B(1)
  4. C
  5. C     SPPSL SOLVES THE REAL SYMMETRIC POSITIVE DEFINITE
  6. C     SYSTEM A * X = B
  7. C     USING THE FACTORS COMPUTED BY SPPCO OR SPPFA.
  8. C
  9. C     ON ENTRY
  10. C
  11. C        AP      REAL (N*(N+1)/2)
  12. C                THE OUTPUT FROM SPPCO OR SPPFA.
  13. C
  14. C        N       INTEGER
  15. C                THE ORDER OF THE MATRIX  A .
  16. C
  17. C        B       REAL(N)
  18. C                THE RIGHT HAND SIDE VECTOR.
  19. C
  20. C     ON RETURN
  21. C
  22. C        B       THE SOLUTION VECTOR  X .
  23. C
  24. C     ERROR CONDITION
  25. C
  26. C        A DIVISION BY ZERO WILL OCCUR IF THE INPUT FACTOR CONTAINS
  27. C        A ZERO ON THE DIAGONAL.  TECHNICALLY THIS INDICATES
  28. C        SINGULARITY BUT IT IS USUALLY CAUSED BY IMPROPER SUBROUTINE
  29. C        ARGUMENTS.  IT WILL NOT OCCUR IF THE SUBROUTINES ARE CALLED
  30. C        CORRECTLY AND  INFO .EQ. 0 .
  31. C
  32. C     TO COMPUTE  INVERSE(A) * C  WHERE  C  IS A MATRIX
  33. C     WITH  P  COLUMNS
  34. C           CALL SPPCO(AP,N,RCOND,Z,INFO)
  35. C           IF (RCOND IS TOO SMALL .OR. INFO .NE. 0) GO TO ...
  36. C           DO 10 J = 1, P
  37. C              CALL SPPSL(AP,N,C(1,J))
  38. C        10 CONTINUE
  39. C
  40. C     LINPACK.  THIS VERSION DATED 08/14/78 .
  41. C     CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB.
  42. C
  43. C     SUBROUTINES AND FUNCTIONS
  44. C
  45. C     BLAS SAXPY,SDOT
  46. C
  47. C     INTERNAL VARIABLES
  48. C
  49.       REAL SDOT,T
  50.       INTEGER K,KB,KK
  51. C
  52.       KK = 0
  53.       DO 10 K = 1, N
  54.          T = SDOT(K-1,AP(KK+1),1,B(1),1)
  55.          KK = KK + K
  56.          B(K) = (B(K) - T)/AP(KK)
  57.    10 CONTINUE
  58.       DO 20 KB = 1, N
  59.          K = N + 1 - KB
  60.          B(K) = B(K)/AP(KK)
  61.          KK = KK - K
  62.          T = -B(K)
  63.          CALL SAXPY(K-1,T,AP(KK+1),1,B(1),1)
  64.    20 CONTINUE
  65.       RETURN
  66.       END
  67.