tridq.f 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. *DECK TRIDQ
  2. SUBROUTINE TRIDQ (MR, A, B, C, Y, D)
  3. C***BEGIN PROLOGUE TRIDQ
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to POIS3D
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (TRIDQ-S)
  8. C***AUTHOR (UNKNOWN)
  9. C***SEE ALSO POIS3D
  10. C***ROUTINES CALLED (NONE)
  11. C***REVISION HISTORY (YYMMDD)
  12. C 801001 DATE WRITTEN
  13. C 891214 Prologue converted to Version 4.0 format. (BAB)
  14. C 900308 Renamed routine from TRID to TRIDQ. (WRB)
  15. C 900402 Added TYPE section. (WRB)
  16. C***END PROLOGUE TRIDQ
  17. DIMENSION A(*) ,B(*) ,C(*) ,Y(*) ,
  18. 1 D(*)
  19. C***FIRST EXECUTABLE STATEMENT TRIDQ
  20. M = MR
  21. MM1 = M-1
  22. Z = 1./B(1)
  23. D(1) = C(1)*Z
  24. Y(1) = Y(1)*Z
  25. DO 101 I=2,MM1
  26. Z = 1./(B(I)-A(I)*D(I-1))
  27. D(I) = C(I)*Z
  28. Y(I) = (Y(I)-A(I)*Y(I-1))*Z
  29. 101 CONTINUE
  30. Z = B(M)-A(M)*D(MM1)
  31. IF (Z .NE. 0.) GO TO 102
  32. Y(M) = 0.
  33. GO TO 103
  34. 102 Y(M) = (Y(M)-A(M)*Y(MM1))/Z
  35. 103 CONTINUE
  36. DO 104 IP=1,MM1
  37. I = M-IP
  38. Y(I) = Y(I)-D(I)*Y(I+1)
  39. 104 CONTINUE
  40. RETURN
  41. END