CTITLESALMPAI -- UNIFORM RESAMPLING USING POLYNOMIAL FITTING C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CABS SALMPAI - UNIFORM RESAMPLING USING POLYNOMIAL FITTING CA CSUBROUTINE SALMPAI C C SUBROUTINE SALMPAI (X,Y,NX,ID,TA,S,YY,NYY) C C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991. C C ALL RIGHTS RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, C REPRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT THE C PRIOR CONSENT OF ATLANTIC RICHFIELD COMPANY. C CA AUTHOR DAVE THOMPSON CA DESIGNER DAVE THOMPSON CA LANGUAGE FORTRAN H CA SYSTEM S/370 C WRITTEN UNKNOWN CA CA PURPOSE OF PROGRAM: CA CA THIS SUBROUTINE DOES UNIFORM RESAMPLING USING POLYNOMIAL FITTING. CA YOU MUST SPECIFY THE DEGREE OF POLYNOMIAL YOU ARE USING. IT CA RESAMPLES USING UNIFORMED SPACING. CA CA CA CALLING SEQUENCE: CA CA CALL SALMPAI (X,Y,NX,ID,TA,S,YY,NYY) CA CA IN X R4 INDEPENDENT VARIABLE WITH NX VALUES. CA IN Y R4 DEPENDENT VARIABLE CA IN NX I4 NUMBER OF SAMPLES IN X AND Y CA IN ID I4 DEGREE OF POLYNOMIAL CA IN TA R4 X VALUE OF FIRST INTERPOLATION POSITION CA IN S R4 SAMPLE PERIOD OF UNIFORM INTERPOLATION CA OUT YY R4 OUTPUT WITH NYY VALUES CA IN NYY I4 THE NUMBER OF SAMPLES TO RETURN IN YY CA CA CA SUBROUTINES CALLED: SALMPAP C CA EJECT CAEND C********************************************************************** C C LOCAL VARIABLES C C IDD I*4 TEMPORARY VARIABLE USED TO STORE THE POWER C OF THE POLYNOMIAL WHICH CAN BE RESET BASED C ON THE NUMBER OF TRACES IN THE GATHER BEING C USED FOR ANGLE ANALYSIS. C J I*4 USED AS INDEX INTO INDEPENDENT VARIABLE C ARRAY FOR START OF INTERPOLATION. C P R*4 TEMPORARY AVERAGE USED FOR RESAMPLING. C PP R*4 TEMPORARY AVERAGE USED FOR RESAMPLING. C T R*4 LOCAL VARIABLE USED TO HOLD THE INPUT X C VALUE WHERE INTERPOLATION IS DESIRED. C SUBROUTINE SALMPAI(X,Y,NX,ID,TA,S,YY,NYY) IMPLICIT INTEGER (A-Z) C REAL X(1),Y(1),YY(1) REAL P,PP,S,T,TA C IDD = ID IF (NX .LT. ID+1) IDD = NX - 1 J = 1 NNX = NX - IDD T = TA DO 140 I = 1, NYY 100 CONTINUE IF (J .EQ. NNX) GO TO 120 P = (X(J) + X(J + ID) ) * .5 PP = (X(J + 1) + X(J + ID + 1) ) * .5 IF (ABS ( T - P ) .LE. ABS ( T-PP ) ) GO TO 120 J = J + 1 GO TO 100 120 CONTINUE C IF (T .LT. X(J)) THEN YY(I) = Y(J) ELSE IF (T .GT. X(J+IDD)) THEN YY(I) = Y(J + IDD) ELSE CALL SALMPAP ( X(J), Y(J), T, YY(I), IDD) ENDIF ENDIF C T = T + S 140 CONTINUE C RETURN END