bsplvd.f 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. *DECK BSPLVD
  2. SUBROUTINE BSPLVD (T, K, X, ILEFT, VNIKX, NDERIV)
  3. C***BEGIN PROLOGUE BSPLVD
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to FC
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (BSPLVD-S, DFSPVD-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C Calculates value and deriv.s of all B-splines which do not vanish at X
  12. C
  13. C Fill VNIKX(J,IDERIV), J=IDERIV, ... ,K with nonzero values of
  14. C B-splines of order K+1-IDERIV , IDERIV=NDERIV, ... ,1, by repeated
  15. C calls to BSPLVN
  16. C
  17. C***SEE ALSO FC
  18. C***ROUTINES CALLED BSPLVN
  19. C***REVISION HISTORY (YYMMDD)
  20. C 780801 DATE WRITTEN
  21. C 890531 Changed all specific intrinsics to generic. (WRB)
  22. C 890831 Modified array declarations. (WRB)
  23. C 891214 Prologue converted to Version 4.0 format. (BAB)
  24. C 900328 Added TYPE section. (WRB)
  25. C***END PROLOGUE BSPLVD
  26. DIMENSION T(*),VNIKX(K,*)
  27. DIMENSION A(20,20)
  28. C***FIRST EXECUTABLE STATEMENT BSPLVD
  29. CALL BSPLVN(T,K+1-NDERIV,1,X,ILEFT,VNIKX(NDERIV,NDERIV))
  30. IF (NDERIV .LE. 1) GO TO 99
  31. IDERIV = NDERIV
  32. DO 15 I=2,NDERIV
  33. IDERVM = IDERIV-1
  34. DO 11 J=IDERIV,K
  35. 11 VNIKX(J-1,IDERVM) = VNIKX(J,IDERIV)
  36. IDERIV = IDERVM
  37. CALL BSPLVN(T,0,2,X,ILEFT,VNIKX(IDERIV,IDERIV))
  38. 15 CONTINUE
  39. C
  40. DO 20 I=1,K
  41. DO 19 J=1,K
  42. 19 A(I,J) = 0.
  43. 20 A(I,I) = 1.
  44. KMD = K
  45. DO 40 M=2,NDERIV
  46. KMD = KMD-1
  47. FKMD = KMD
  48. I = ILEFT
  49. J = K
  50. 21 JM1 = J-1
  51. IPKMD = I + KMD
  52. DIFF = T(IPKMD) - T(I)
  53. IF (JM1 .EQ. 0) GO TO 26
  54. IF (DIFF .EQ. 0.) GO TO 25
  55. DO 24 L=1,J
  56. 24 A(L,J) = (A(L,J) - A(L,J-1))/DIFF*FKMD
  57. 25 J = JM1
  58. I = I - 1
  59. GO TO 21
  60. 26 IF (DIFF .EQ. 0.) GO TO 30
  61. A(1,1) = A(1,1)/DIFF*FKMD
  62. C
  63. 30 DO 40 I=1,K
  64. V = 0.
  65. JLOW = MAX(I,M)
  66. DO 35 J=JLOW,K
  67. 35 V = A(I,J)*VNIKX(J,M) + V
  68. 40 VNIKX(I,M) = V
  69. 99 RETURN
  70. END