bsplvn.f 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. *DECK BSPLVN
  2. SUBROUTINE BSPLVN (T, JHIGH, INDEX, X, ILEFT, VNIKX)
  3. C***BEGIN PROLOGUE BSPLVN
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to FC
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (BSPLVN-S, DFSPVN-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C Calculates the value of all possibly nonzero B-splines at *X* of
  12. C order MAX(JHIGH,(J+1)(INDEX-1)) on *T*.
  13. C
  14. C***SEE ALSO FC
  15. C***ROUTINES CALLED (NONE)
  16. C***REVISION HISTORY (YYMMDD)
  17. C 780801 DATE WRITTEN
  18. C 891214 Prologue converted to Version 4.0 format. (BAB)
  19. C 900328 Added TYPE section. (WRB)
  20. C***END PROLOGUE BSPLVN
  21. DIMENSION T(*),VNIKX(*)
  22. DIMENSION DELTAM(20),DELTAP(20)
  23. SAVE J, DELTAM, DELTAP
  24. DATA J/1/,(DELTAM(I),I=1,20),(DELTAP(I),I=1,20)/40*0./
  25. C***FIRST EXECUTABLE STATEMENT BSPLVN
  26. GO TO (10,20),INDEX
  27. 10 J = 1
  28. VNIKX(1) = 1.
  29. IF (J .GE. JHIGH) GO TO 99
  30. C
  31. 20 IPJ = ILEFT+J
  32. DELTAP(J) = T(IPJ) - X
  33. IMJP1 = ILEFT-J+1
  34. DELTAM(J) = X - T(IMJP1)
  35. VMPREV = 0.
  36. JP1 = J+1
  37. DO 26 L=1,J
  38. JP1ML = JP1-L
  39. VM = VNIKX(L)/(DELTAP(L) + DELTAM(JP1ML))
  40. VNIKX(L) = VM*DELTAP(L) + VMPREV
  41. 26 VMPREV = VM*DELTAM(JP1ML)
  42. VNIKX(JP1) = VMPREV
  43. J = JP1
  44. IF (J .LT. JHIGH) GO TO 20
  45. C
  46. 99 RETURN
  47. END