5 * Revision 1.1.1.1 1996/04/01 15:02:25 mclareni
10 SUBROUTINE DSPCD1(K,M,NDER,T,C,D,NERR)
12 #include "gen/imp64.inc"
13 DIMENSION T(*),C(*),D(*)
16 PARAMETER (NAME = 'DSPCD1')
18 ************************************************************************
19 * NORBAS, VERSION: 15.03.1993
20 ************************************************************************
22 * DSPCD1 COMPUTES FROM GIVEN COEFFICIENTS C(1),...,C(M-K-1) OF A
23 * POLYNOMIAL SPLINE S(X) IN B-SPLINE REPRESENTATION
25 * S(X) = SUMME(I=1,...,M-K-1) C(I) * B(I,K)(X)
27 * THE CORRESPONDING COEFFICIENTS D(1),...,D(M-K-NDER-1) OF THE
28 * NDER-TH DERIVATIVE OF S(X).
30 * THE FUNCTIONS B(I,K)(X) ARE NORMALIZED B-SPLINES OF DEGREE K
31 * (0<= K <= 25) WITH INDEX I (1 <= I <= M-K-1) OVER A SET OF
33 * T(1),T(2), ... ,T(M) ( M >= 2*K+2 )
34 * (KNOTS IN ASCENDING ORDER, WITH MULTIPLICITIES NOT GREATER
36 * THE FUNCTION VALUE OF THE NORMALIZED B-SPLINE B(I,K)(X) IS
37 * IDENTICALLY ZERO OUTSIDE THE INTERVAL T(I) <= X < T(I+K+1).
38 * THE NORMALIZATION OF N(X) = B(I,K)(X) IS SUCH THAT THE INTGRAL OF
39 * N(X) OVER THE WHOLE X-RANGE EQUALS
40 * ( T(I+K+1) - T(I) ) / (K+1) .
44 * K (INTEGER) DEGREE (= ORDER - 1) OF B-SPLINES.
45 * M (INTEGER) NUMBER OF KNOTS FOR THE B-SPLINES.
46 * NDER (INTEGER) ORDER OF DERIVATIVE
47 * T (DOUBLE PRECISION) ARRAY OF AT LEAST ORDER M CONTAINING THE
49 * C (DOUBLE PRECISION) ARRAY OF AT LEAST ORDER M-K-1. ON ENTRY
50 * C(1),...,C(M-K-1) MUST CONTAIN THE COEFFICIENTS OF THE
51 * POLYNOMIAL SPLINE S(X) IN B-SPLINE REPRESENTATION.
52 * D (DOUBLE PRECISION) ARRAY OF AT LEAST ORDER M-K-1.
53 * ON EXIT D(1),...,D(M-K-NDER-1) CONTAIN THE COEFFICIENTS
54 * OF THE NDER-TH DERIVATIVE OF S(X) IN B-SPLINE REPRESENTATION.
55 * (THE REMAINING ARRAY ELEMENTS D(M-K-NDER),...,D(M-K-1) ARE
56 * USED AS WORKING SPACE).
57 * NERR (INTEGER) ERROR INDICATOR. ON EXIT:
58 * = 0: NO ERROR DETECTED
59 * = 1: AT LEAST ONE OF THE CONSTANTS K , M , NDER IS ILLEGAL
63 * IF ONE OF THE FOLLOWING RELATION IS SATISFIED BY THE CHOSEN INPUT-
64 * PARAMETERS THE PROGRAM RETURNS, AND AN ERROR MESSAGE IS PRINTED:
67 * NDER < 1 OR NDER > K .
69 ************************************************************************
74 IF(K .LT. 0 .OR. K .GT. 25) THEN
75 WRITE(ERRTXT,101) 'K',K
76 CALL MTLPRT(NAME,'E210.1',ERRTXT)
77 ELSEIF(M .LT. 2*K+2) THEN
78 WRITE(ERRTXT,101) 'M',M
79 CALL MTLPRT(NAME,'E210.2',ERRTXT)
80 ELSEIF(NDER .LT. 1 .OR. NDER .GT. K) THEN
81 WRITE(ERRTXT,101) 'NDER',NDER
82 CALL MTLPRT(NAME,'E210.5',ERRTXT)
85 CALL DVCPY(M-K-1,C(1),C(2),D(1),D(2))
91 IF(DIF .NE. 0) D0=A*(D(I+1)-D(I))/DIF
97 101 FORMAT(1X,A5,' =',I6,' NOT IN RANGE')