CTITLESAVSPLN -- SPLINE INTERPOLATION C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA CA DESIGNER JAMES SUN CA AUTHOR JAMES SUN CA LANGUAGE FORTRAN CA SYSTEM IBM AND CRAY CA WRITTEN 02/08/89 CA C REVISED 03/31/89 JCS - REAPPLY MUTE TO THE DEPTH SECTION C REVISED 01/20/90 JJC - MODIFIED TO MEET EDP STANDARDS. C REVISED 02/05/90 JJC - RENAMED VSPLINE TO SAVSPLN. C REVISED 07/24/90 CLJ - ALLOW PREP TO RUN ON THE IBM C CA CA CALLING PROCEDURE: CA FUNCTION SAVSPLN(N,XN,FN,S,INDEX,X) CA C CALLING ARGUMENTS CA CA INPUT N NO. OF INPUT DATA POINTS. I4 CA INPUT XN INPUT ARRAY (INDEPENDENT) R4 CA INPUT FN INPUT ARRAY (DEPENDENT ) R4 CA INPUT S COEFFICIENT ARRAY R4 CA INPUT INDEX COEFFICIENT ARRAY I4 CA INPUT X INTERPOLATED FN AT THIS X VALUE (INDEPENDENT) R4 C C FUNCTION SAVSPLN(N,XN,FN,S,INDEX,X) 05660000 C 05680000 IMPLICIT INTEGER(A-Z) C REAL A REAL B REAL FN REAL HL REAL HNM1 REAL H1 REAL R6 REAL S REAL SAVSPLN REAL X REAL XN DIMENSION XN(1),FN(1),S(1),INDEX(1) 05670000 C 05680000 C R6=1./6. 05690000 I1=INDEX(1) 05700000 IF(X .GE. XN(I1)) GO TO 100 05710000 JJ=2 05720000 I2=INDEX(JJ) 05730000 H1=XN(I2)-XN(I1) 05740000 SAVSPLN=FN(I1)+(X-XN(I1))*((FN(I2)-FN(I1))/H1-H1*S(JJ)*R6) 05750000 RETURN 05760000 100 IN=INDEX(N) 05770000 IF(X .LE. XN(IN))GO TO 120 05780000 INM1=INDEX(N-1) 05790000 HNM1=XN(IN)-XN(INM1) 05800000 SAVSPLN=FN(IN)+(X-XN(IN))*((FN(IN)-FN(INM1))/HNM1+HNM1*S(N-1)*R6) 05810000 RETURN 05820000 C 05830000 C 120 DO 140 I=2,N 05840000 II=INDEX(I) 05850000 IF(X .LE. XN(II))GO TO 160 05860000 140 CONTINUE 05870000 160 L=I-1 05880000 IL=INDEX(L) 05890000 ILP1=INDEX(L+1) 05900000 A=XN(ILP1)-X 05910000 B=X-XN(IL) 05920000 HL=XN(ILP1)-XN(IL) 05930000 SAVSPLN=A*S(L)*(A**2/HL-HL)*R6+B*S(L+1)*(B**2/HL-HL)*R6 05940000 1 +(A*FN(IL)+B*FN(ILP1))/HL 05950000 C 05960000 C RETURN 05970000 END 05980000