CTITLESAINT -- QUADRATIC INTERPOLATION IN CORE C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA AUTHOR J. M. PONTON CA DESIGNER J. M. PONTON CA LANGUAGE VSFORTRAN CA SYSTEM IBM OR CRAY CA WRITTEN 01-23-86 C REVISED MO-DA-YR BY PROGRAMMER FOR REASON CA CA CALL SAINT(TRIN, TIMES, IWORK, S0, G1, OMEGA, NOSAMP, OTR) CA CA IN/OUT ARGUMENT TYPE DESCRIPTION CA ------ -------- ---- ----------- CA IN TRIN R4 INPUT ARRAY, NOSAMP SAMPLES LONG. CA CA IN/OUT TIMES R4 ARRAY OF INTERPOLATION TIMES, NOSAMP WORDS. CA CA OUT IWORK I4 SCRATCH ARRAY. MAY BE THE SAME ADDRESS AS CA TIMES ARRAY. CA CA IN S0 R4 S0 PARAMETER FOR INTERPOLATION ALGORITHM. CA CA IN G1 R4 G1 PARAMETER FOR INTERPOLATION ALGORITHM. CA CA IN OMEGA R4 OMEGA PARAMETER FOR INTERPOLATION ALGORITHM. CA CA IN NOSAMP I4 NUMBER OF SAMPLES TO INTERPOLATE. CA CA OUT OTR R4 ARRAY TO STORE INTERPOLATED OUTPUT. CA MUST NOT BE THE SAME AS 'TRIN' OR 'TIMES'. CA CA THIS ROUTINE SIMULATES THE OPERATION OF THE 'INT' ALGORITHM OF THE CA 3838 ARRAY PROCESSOR. SEE THE MANUAL "IBM 3838 ARRAY PROCESSOR CA FUNCTIONAL CHARACTERISTICS" FOR DETAILS OF THE ALGORITHM. THE PARA- CA METERS S0, G1, AND OMEGA ARE EXPLAINED IN THAT MANUAL. CA CA THE TIMES AND IWORK ARRAYS ARE USED AS SCRATCH ARRAYS. HOWEVER, THEY CA MAY ACTUALLY HAVE THE SAME STORAGE ADDRESSES IN MEMORY. CA CA OTR AND TRIN MAY NOT HAVE THE SAME ADDRESS. CA C EJECT SUBROUTINE SAINT(TRIN, TIMES, IWORK, S0, G1, OMEGA, NOSAMP, * OTR) C IMPLICIT INTEGER (A-Z) C REAL S0, G1, OMEGA,VAL REAL TRIN(NOSAMP), TIMES(NOSAMP), OTR(NOSAMP) INTEGER IWORK(NOSAMP) C C CALCULATE SAMPLE TIMES. (SKIP IF S0 = 0, G1 = 1.). C IF (S0 .NE. 0 .OR. G1 .NE. 1.) THEN DO 10 I = 1, NOSAMP TIMES(I) = S0 + TIMES(I) * G1 10 CONTINUE ENDIF C C CALCULATE INTEGER AND FRACTIONAL PARTS OF INTERPOLATION TIMES. C DO 20 I = 1, NOSAMP VAL = TIMES(I) IWORK(I) = INT(VAL) OTR(I) = VAL - IWORK(I) 20 CONTINUE C C QUADRATIC INTERPOLATION FORMULA. C DO 30 I = 1, NOSAMP - 2 OTR(I) = OMEGA * (OTR(I) * OTR(I) * (TRIN(IWORK(I)) - 2. * * TRIN(IWORK(I+1)) + TRIN(IWORK(I+2))) + * OTR(I) * (TRIN(IWORK(I+2)) - TRIN(IWORK(I))) * + 2. * TRIN(IWORK(I+1))) 30 CONTINUE C C KEEP THE LAST 2 SAMPLES. C OTR(NOSAMP-1) = TRIN(NOSAMP-1) OTR(NOSAMP) = TRIN(NOSAMP) C RETURN END