1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- *DECK PCHKT
- SUBROUTINE PCHKT (N, X, KNOTYP, T)
- C***BEGIN PROLOGUE PCHKT
- C***SUBSIDIARY
- C***PURPOSE Compute B-spline knot sequence for PCHBS.
- C***LIBRARY SLATEC (PCHIP)
- C***CATEGORY E3
- C***TYPE SINGLE PRECISION (PCHKT-S, DPCHKT-D)
- C***AUTHOR Fritsch, F. N., (LLNL)
- C***DESCRIPTION
- C
- C Set a knot sequence for the B-spline representation of a PCH
- C function with breakpoints X. All knots will be at least double.
- C Endknots are set as:
- C (1) quadruple knots at endpoints if KNOTYP=0;
- C (2) extrapolate the length of end interval if KNOTYP=1;
- C (3) periodic if KNOTYP=2.
- C
- C Input arguments: N, X, KNOTYP.
- C Output arguments: T.
- C
- C Restrictions/assumptions:
- C 1. N.GE.2 . (not checked)
- C 2. X(i).LT.X(i+1), i=1,...,N . (not checked)
- C 3. 0.LE.KNOTYP.LE.2 . (Acts like KNOTYP=0 for any other value.)
- C
- C***SEE ALSO PCHBS
- C***ROUTINES CALLED (NONE)
- C***REVISION HISTORY (YYMMDD)
- C 870701 DATE WRITTEN
- C 900405 Converted Fortran to upper case.
- C 900410 Converted prologue to SLATEC 4.0 format.
- C 900410 Minor cosmetic changes.
- C 930514 Changed NKNOTS from an output to an input variable. (FNF)
- C 930604 Removed unused variable NKNOTS from argument list. (FNF)
- C***END PROLOGUE PCHKT
- C
- C*Internal Notes:
- C
- C Since this is subsidiary to PCHBS, which validates its input before
- C calling, it is unnecessary for such validation to be done here.
- C
- C**End
- C
- C Declare arguments.
- C
- INTEGER N, KNOTYP
- REAL X(*), T(*)
- C
- C Declare local variables.
- C
- INTEGER J, K, NDIM
- REAL HBEG, HEND
- C***FIRST EXECUTABLE STATEMENT PCHKT
- C
- C Initialize.
- C
- NDIM = 2*N
- C
- C Set interior knots.
- C
- J = 1
- DO 20 K = 1, N
- J = J + 2
- T(J) = X(K)
- T(J+1) = T(J)
- 20 CONTINUE
- C Assertion: At this point T(3),...,T(NDIM+2) have been set and
- C J=NDIM+1.
- C
- C Set end knots according to KNOTYP.
- C
- HBEG = X(2) - X(1)
- HEND = X(N) - X(N-1)
- IF (KNOTYP.EQ.1 ) THEN
- C Extrapolate.
- T(2) = X(1) - HBEG
- T(NDIM+3) = X(N) + HEND
- ELSE IF ( KNOTYP.EQ.2 ) THEN
- C Periodic.
- T(2) = X(1) - HEND
- T(NDIM+3) = X(N) + HBEG
- ELSE
- C Quadruple end knots.
- T(2) = X(1)
- T(NDIM+3) = X(N)
- ENDIF
- T(1) = T(2)
- T(NDIM+4) = T(NDIM+3)
- C
- C Terminate.
- C
- RETURN
- C------------- LAST LINE OF PCHKT FOLLOWS ------------------------------
- END
|