bsppp.f 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. *DECK BSPPP
  2. SUBROUTINE BSPPP (T, A, N, K, LDC, C, XI, LXI, WORK)
  3. C***BEGIN PROLOGUE BSPPP
  4. C***PURPOSE Convert the B-representation of a B-spline to the piecewise
  5. C polynomial (PP) form.
  6. C***LIBRARY SLATEC
  7. C***CATEGORY E3, K6
  8. C***TYPE SINGLE PRECISION (BSPPP-S, DBSPPP-D)
  9. C***KEYWORDS B-SPLINE, PIECEWISE POLYNOMIAL
  10. C***AUTHOR Amos, D. E., (SNLA)
  11. C***DESCRIPTION
  12. C
  13. C Written by Carl de Boor and modified by D. E. Amos
  14. C
  15. C Abstract
  16. C BSPPP is the BSPLPP routine of the reference.
  17. C
  18. C BSPPP converts the B-representation (T,A,N,K) to the
  19. C piecewise polynomial (PP) form (C,XI,LXI,K) for use with
  20. C PPVAL. Here XI(*), the break point array of length LXI, is
  21. C the knot array T(*) with multiplicities removed. The columns
  22. C of the matrix C(I,J) contain the right Taylor derivatives
  23. C for the polynomial expansion about XI(J) for the intervals
  24. C XI(J) .LE. X .LE. XI(J+1), I=1,K, J=1,LXI. Function PPVAL
  25. C makes this evaluation at a specified point X in
  26. C XI(1) .LE. X .LE. XI(LXI(1) .LE. X .LE. XI+1)
  27. C
  28. C Description of Arguments
  29. C Input
  30. C T - knot vector of length N+K
  31. C A - B-spline coefficient vector of length N
  32. C N - number of B-spline coefficients
  33. C N = sum of knot multiplicities-K
  34. C K - order of the B-spline, K .GE. 1
  35. C LDC - leading dimension of C, LDC .GE. K
  36. C
  37. C Output
  38. C C - matrix of dimension at least (K,LXI) containing
  39. C right derivatives at break points
  40. C XI - XI break point vector of length LXI+1
  41. C LXI - number of break points, LXI .LE. N-K+1
  42. C WORK - work vector of length K*(N+3)
  43. C
  44. C Error Conditions
  45. C Improper input is a fatal error
  46. C
  47. C***REFERENCES Carl de Boor, Package for calculating with B-splines,
  48. C SIAM Journal on Numerical Analysis 14, 3 (June 1977),
  49. C pp. 441-472.
  50. C***ROUTINES CALLED BSPDR, BSPEV, XERMSG
  51. C***REVISION HISTORY (YYMMDD)
  52. C 800901 DATE WRITTEN
  53. C 890831 Modified array declarations. (WRB)
  54. C 890831 REVISION DATE from Version 3.2
  55. C 891214 Prologue converted to Version 4.0 format. (BAB)
  56. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  57. C 900326 Removed duplicate information from DESCRIPTION section.
  58. C (WRB)
  59. C 920501 Reformatted the REFERENCES section. (WRB)
  60. C***END PROLOGUE BSPPP
  61. C
  62. INTEGER ILEFT, INEV, K, LDC, LXI, N, NK
  63. REAL A, C, T, WORK, XI
  64. C DIMENSION T(N+K),XI(LXI+1),C(LDC,*)
  65. C HERE, * = THE FINAL VALUE OF THE OUTPUT PARAMETER LXI.
  66. DIMENSION T(*), A(*), WORK(*), XI(*), C(LDC,*)
  67. C***FIRST EXECUTABLE STATEMENT BSPPP
  68. IF(K.LT.1) GO TO 100
  69. IF(N.LT.K) GO TO 105
  70. IF(LDC.LT.K) GO TO 110
  71. CALL BSPDR(T, A, N, K, K, WORK)
  72. LXI = 0
  73. XI(1) = T(K)
  74. INEV = 1
  75. NK = N*K + 1
  76. DO 10 ILEFT=K,N
  77. IF (T(ILEFT+1).EQ.T(ILEFT)) GO TO 10
  78. LXI = LXI + 1
  79. XI(LXI+1) = T(ILEFT+1)
  80. CALL BSPEV(T,WORK(1),N,K, K,XI(LXI),INEV,C(1,LXI),WORK(NK))
  81. 10 CONTINUE
  82. RETURN
  83. 100 CONTINUE
  84. CALL XERMSG ('SLATEC', 'BSPPP', 'K DOES NOT SATISFY K.GE.1', 2,
  85. + 1)
  86. RETURN
  87. 105 CONTINUE
  88. CALL XERMSG ('SLATEC', 'BSPPP', 'N DOES NOT SATISFY N.GE.K', 2,
  89. + 1)
  90. RETURN
  91. 110 CONTINUE
  92. CALL XERMSG ('SLATEC', 'BSPPP', 'LDC DOES NOT SATISFY LDC.GE.K',
  93. + 2, 1)
  94. RETURN
  95. END