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$