dfspvn.f 1.5 KB

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