FTN,L,B 
C 
C HP92406A INTERPOLATION PACKAGE
C 
C SOURCE TAPE 92406-80001 REV. A
C RELOC. TAPE 92406-60001 REV. A
C 
C AUTHOR - T.A. SAPONAS 
C 
C VERSION 2 OCTOBER 1973
C 
C 
      FUNCTION FRSTU(XR,Y,NPTS,START,DELTA,IERR)
C  "FRSTU" PERFORMS 1ST ORDER INTERPOLATION ON THE UNIFORMLY
C   SPACED DATA IN ARRAY "Y".  "Y" IS COMPOSED OF "NPTS" POINTS 
C   WITH THE FIRST POINT CORRESPONDING TO "START" AND THE DISTANCE
C   BETWEEN POINTS IS "DELTA".  IF THE ARGUMENT OF THE INTERPOLATION
C   "XR" IS OUTSIDE THE BOUNDS OF THE TABLE, THE ERROR FLAG "IERR"
C   IS SET NEGATIVE AND AN EXTRAPOLATION BASED ON THE FIRST OR LAST 
C   POINTS IN THE TABLE IS PERFORMED. 
      DIMENSION Y(1)
      IERR=-1 
C 
C  DETERMINE INTERVAL TO BE INTERPOLATED
      RM=(XR-START)/DELTA 
      K=1 
      M=RM
C 
C  IF INTERVAL < LOWER BOUND OF TABLE, USE FIRST INTERVAL 
      IF(RM)110,20
   20 K=NPTS-1
C 
C  IF INTERVAL > UPPER BOUND, USE LAST INTERVAL 
      IF(K-1-M)110,105,100
  100 K=M+1 
C 
C  XR WITHIN RANGE OF TABLE SO RESET ERROR FLAG 
  105 IERR=0
  110 P=RM-FLOAT(K-1) 
C 
C  EVALUATE INTERPOLATION ALGORITHM 
      FRSTU=(1.-P)*Y(K)+P*Y(K+1)
      RETURN
      END 
      FUNCTION SCNDU(XR,Y,NPTS,START,DELTA,IERR)
C  "SCNDU" PERFORMS 2ND ORDER INTERPOLATION ON THE UNIFORMLY
C   SPACED DATA IN ARRAY "Y".  "Y" IS COMPOSED OF "NPTS" POINTS 
C   WITH THE FIRST POINT CORRESPONDING TO "START" AND THE DISTANCE
C   BETWEEN POINTS IS "DELTA".  IF THE ARGUMENT OF THE INTERPOLATION
C   "XR" IS OUTSIDE THE BOUNDS OF THE TABLE, THE ERROR FLAG "IERR"
C   IS SET NEGATIVE AND AN EXTRAPOLATION BASED ON THE FIRST OR LAST 
C   POINTS IN THE TABLE IS PERFORMED. 
      DIMENSION Y(1)
      IERR=-1 
C 
C  DETERMINE INTERVAL TO BE INTERPOLATED
      RM=(XR-START)/DELTA 
      K=1 
      M=RM
C 
C  IF INTERVAL < LOWER BOUND OF TABLE, USE FIRST INTERVAL 
      IF(RM)110,20
   20 K=NPTS-2
C 
C  IF INTERVAL > UPPER BOUND, USE LAST INTERVAL 
      IF(K-M)110,105,100
  100 K=M+1 
C 
C  XR WITHIN RANGE OF TABLE SO RESET ERROR FLAG 
  105 IERR=0
  110 P=RM-FLOAT(K) 
C 
C  EVALUATE INTERPOLATION ALGORITHM 
      SCNDU=P*((P-1.)*Y(K)+(P+1.)*Y(K+2))/2.+(1.-P*P)*Y(K+1)
      RETURN
      END 
      FUNCTION FRSTR(XR,Y,X,NPTS,IERR)
C 
C  "FRSTR" PERFORMS 1ST ORDER INTERPOLATION ON THE FUNCTION VALUES
C   IN ARRAY "Y" WHICH CORRESPOND TO THE FUNCTION ARGUMENT VALUES 
C   IN ARRAY "X".  IF THE ARGUMENT OF THE INTERPOLATION "XR" IS 
C   LESS THAN X(1) OR GREATER THAN X(NPTS), THE ERROR FLAG "IERR" 
C   IS SET NEGATIVE AND EXTRAPOLATION IS PERFORMED. 
      DIMENSION X(1),Y(1) 
C 
C  SET ERROR FLAG 
      IERR=-1 
      I=2 
C 
C  IF XR < X(1) EXTRAPOLATE USING FIRST INTERVAL
      IF(XR-X(1))110,40 
C 
C  FIND INTERVAL CONTAINING XR
   40 DO 90 I=2,NPTS
      IF(X(I)-XR)90,100 
   90 CONTINUE
C 
C  XR > X(NPTS) EXTRAPOLATE USING LAST INTERVAL 
      I=NPTS
      GO TO 110 
C 
C  XR WAS WITHIN BOUNDS, SO RESET ERROR FLAG
  100 IERR=0
C 
C  EVALUATE INTERPOLATION ALGORITHM 
  110 FRSTR=Y(I-1)+(Y(I)-Y(I-1))*(XR-X(I-1))/(X(I)-X(I-1))
      RETURN
      END 
      FUNCTION SCNDR(XR,Y,X,NPTS,IERR)
C 
C  "SCNDR" PERFORMS 2ND ORDER INTERPOLATION ON THE FUNCTION VALUES
C   IN ARRAY "Y" WHICH CORRESPOND TO THE FUNCTION ARGUMENT VALUES 
C   IN ARRAY "X".  IF THE ARGUMENT OF THE INTERPOLATION "XR" IS 
C   LESS THAN X(1) OR GREATER THAN X(NPTS), THE ERROR FLAG "IERR" 
C   IS SET NEGATIVE AND EXTRAPOLATION IS PERFORMED. 
      DIMENSION X(1),Y(1) 
C 
C  SET ERROR FLAG 
      IERR=-1 
      I=2 
C 
C  IF XR < X(1) EXTRAPOLATE USING FIRST INTERVAL
      IF(XR-X(1))110,40 
40    NM1=NPTS-1
      I=NM1 
C 
C  IF XR > X(NPTS) EXTRAPOLATE USING LAST INTERVAL
      IF(X(NPTS)-XR)110,80
C 
C  FIND INTERVAL CONTAINING XR
   80 DO 90 I=2,NM1 
      IF(X(I)-XR)90,100 
   90 CONTINUE
C 
C  XR IN LAST INTERVAL, SO SET I=NM1 AND RESET ERROR FLAG 
      I=NM1 
C 
C  XR WAS WITHIN BOUNDS, SO RESET ERROR FLAG
  100 IERR=0
C 
C  EVALUATE INTERPOLATION ALGORITHM 
  110 A=Y(I-1)+(Y(I)-Y(I-1))*(XR-X(I-1))/(X(I)-X(I-1))
      B=Y(I-1)+(Y(I+1)-Y(I-1))*(XR-X(I-1))/(X(I+1)-X(I-1))
      SCNDR=(A*(X(I+1)-XR)-B*(X(I)-XR))/(X(I+1)-X(I)) 
      RETURN
      END 
      END$
                                                        