dbksol.f 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. *DECK DBKSOL
  2. SUBROUTINE DBKSOL (N, A, X)
  3. C***BEGIN PROLOGUE DBKSOL
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DBVSUP
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (BKSOL-S, DBKSOL-D)
  8. C***AUTHOR Watts, H. A., (SNLA)
  9. C***DESCRIPTION
  10. C
  11. C **********************************************************************
  12. C Solution of an upper triangular linear system by
  13. C back-substitution
  14. C
  15. C The matrix A is assumed to be stored in a linear
  16. C array proceeding in a row-wise manner. The
  17. C vector X contains the given constant vector on input
  18. C and contains the solution on return.
  19. C The actual diagonal of A is unity while a diagonal
  20. C scaling matrix is stored there.
  21. C **********************************************************************
  22. C
  23. C***SEE ALSO DBVSUP
  24. C***ROUTINES CALLED DDOT
  25. C***REVISION HISTORY (YYMMDD)
  26. C 750601 DATE WRITTEN
  27. C 890831 Modified array declarations. (WRB)
  28. C 891214 Prologue converted to Version 4.0 format. (BAB)
  29. C 900328 Added TYPE section. (WRB)
  30. C 910722 Updated AUTHOR section. (ALS)
  31. C***END PROLOGUE DBKSOL
  32. C
  33. DOUBLE PRECISION DDOT
  34. INTEGER J, K, M, N, NM1
  35. DOUBLE PRECISION A(*), X(*)
  36. C
  37. C***FIRST EXECUTABLE STATEMENT DBKSOL
  38. M = (N*(N + 1))/2
  39. X(N) = X(N)*A(M)
  40. NM1 = N - 1
  41. IF (NM1 .LT. 1) GO TO 20
  42. DO 10 K = 1, NM1
  43. J = N - K
  44. M = M - K - 1
  45. X(J) = X(J)*A(M) - DDOT(K,A(M+1),1,X(J+1),1)
  46. 10 CONTINUE
  47. 20 CONTINUE
  48. C
  49. RETURN
  50. END