CTITLE SALMPAD - CALCULATE ANGLE RANGE AND PARTIAL STACK C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CABS SALMPAD - CALCULATE ANGLE RANGE AND PARTIAL STACK C CSUBROUTINE SALMPAD C C SUBROUTINE SALMPAD(DATAIN,VEL,VELINT,NS,DX,FLV,NX,ANG,NANG,JBEG, C 1 JEND,FSR,TAKOFF,P,DATA,IDB,IPR) 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 C CA DESIGNER C. Y. YOUNG CA AUTHOR C. Y. YOUNG CA LANGUAGE VS FORTRAN CA SYSTEM IBM CA WRITTEN JULY 1988 CA CA PURPOSE OF PROGRAM: CA CA THIS SUBROUTINE CALCULATES THE ANGLE RANGE AND PARTIAL STACK CA WITHIN THE ANGLE RANGES CA CA CA ARGUMENTS: CA CA CA DATAIN INPUT REAL REAL ARRAY OF LENGTH NS * NX WHICH CA CONTAINS THE INPUT CDP DATA. CA CA VEL INPUT REAL REAL ARRAY OF THE SPATIALLY INTERPO- CA LATED RMS VELOCITY FUNCTION FOR THIS CA CDP FROM THE 'VELF' FUNCTION. CA CA VELINT INPUT INT REAL ARRAY OF LENGTH NS WHICH CONTAINS CA THE INTERVAL VELOCITY FOR THE SAMPLE CA POINTS. CA CA NS INPUT INT NUMBER OF SAMPLES IN A TRACE. CA CA DX INPUT INT INTEGER ARRAY OF LENGTH NX WHICH CON- CA TAINS THE OFFSETS FOR THE CDP GATHER. CA CA FLV INPUT INT INTEGER ARRAY OF LENGTH NX WHICH CON- CA TAINS THE SAMPLE INDEX OF THE FIRST CA LIVE VALUE. CA CA NX INPUT INT MAXIMUM NUMBER OF TRACES IN A CDP THAT CA WILL BE USED FOR INCIDENT ANGLE CA ANALYSIS. THIS VALUE MAY BE FEWER THAN CA THE NUMBER OF TRACES IN A GATHER. CA CA ANG INPUT REAL REAL ARRAY OF LENGTH 2 * NANG WHICH CA CONTAINS THE INCIDENT ANGLE RANGES CA FOR ANALYSIS. (ACTUALLY THE SINE OF CA THE ANGLES.) CA CA NANG INPUT INT THE NUMBER OF START ANGLES FOR THE CA ANGLE RANGES. THERE CAN BE OVERLAP CA OF THE ANGLE RANGES. CA CA JBEG INPUT INT TIME SAMPLE INDEX FOR THE TOP OF THE CA ANALYSIS WINDOW FOR THIS CDP. CA CA JEND INPUT INT TIME SAMPLE INDEX FOR THE BOTTOM OF CA THE ANALYSIS WINDOW FOR THIS CDP. CA CA FSR INPUT REAL SAMPLE RATE IN SECONDS. CA CA TAKOFF INPUT CHAR KIND OF INCIDENT ANGLE TO BE USED IN CA THE CALCULATION. 'TAKOF' FOR THE USE CA OF THE RAY TAKE-OFF ANGLES AT THE SUR- CA FACE. 'LOCAL' FOR THE USE OF THE LOCAL CA ANGLES OF INCIDENCE. CA CA P OUTPUT REAL REAL ARRAY OF LENGTH NX WHICH WILL CA CONTAIN THE INCIDENT ANGLE (SINE OF CA THE ANGLE) FOR A GIVEN ZERO OFFSET CA TIME WITHIN THE JBEG TO JEND TIME CA WINDOW CA CA DATA OUTPUT REAL REAL ARRAY OF LENGTH NS * NANG WHICH CA WILL CONTAIN THE PARTIAL STACK OF IN- CA CIDENT ANGLE TRACES. CA CA IDB INPUT INT DEBUG PRINT FLAG. IF A POSITIVE NON- CA ZERO INTEGER THEN DEBUG PRINTS WILL CA OCCUR. CA CA IPR INPUT INT SPARC LOGICAL PRINT DEVICE FOR PRINT- CA ING INFORMATION FROM THIS SUBROUTINE. CA CA EJECT CAEND C*********************************************************************** C C LOCAL VARIABLES C C IHIN I*4 LOCAL NUMBER OF TRACES IN GATHER FOR C ANALYSIS. MAY BE DIFFERENCT THAN NX. C JT I*4 INDEX OF TRACE NUMBER WITH INCIDENT ANGLE C IN THE RANGE. C K I*4 INDEX TO INCIDENT ANGLE. C NANG2 I*4 MAXIMUM NUMBER OF WINDOW START INCIDENT C ANGLES. C TX R*4 LOCAL VARIABLE USED TO CALCULATE NMO TIME. C T0 R*4 LOCAL ZERO-OFFSET TIME INDEX. C T1 R*4 LOCAL VARIABLE USED IN CALCULATING OUTPUT C ANGLE TRACE. C C*********************************************************************** C SUBROUTINE SALMPAD(DATAIN,VEL,VELINT,NS,DX,FLV,NX,ANG,NANG,JBEG, 1 JEND,FSR,TAKOFF,P,DATA,IDB,IPR) IMPLICIT INTEGER (A-Z) C C CALCULATE ANGLE RANGE AND PARTIAL STACK WITHIN THE ANGLE RANGE C REAL DATA(NS,*),DATAIN(NS,*) REAL VELINT(*),DX(*),P(*),VEL(*),FLV(*),ANG(*) REAL FSR,TX,T0,T1 C CHARACTER*5 TAKOFF C IHIN = NX NANG2 = NANG * 2 C C CHECK FOR DEBUG PRINT C IF (IDB .GT. 0) THEN WRITE ( IPR, * ) 'JBEG,JEND,FSR,NANG,TAKOFF,NS', JBEG, JEND, 1 FSR, NANG, TAKOFF, NS WRITE ( IPR, 9000 ) ( DX(I), I = 1, IHIN ) 9000 FORMAT ('0*** XDST ***'/(2X,10E12.5)) WRITE ( IPR, * ) 'ANG(NANG2) ', ANG(NANG2) WRITE ( IPR, 9010 ) ( ANG(I), I = 1, NANG2 ) 9010 FORMAT ('0*** ANG ***'/(2X,10E12.5)) WRITE ( IPR, 9020 ) ( DATAIN(I, 1), I = 1, NS, 50 ) 9020 FORMAT ('0*** DATAIN ***'/(2X,10E12.5)) ENDIF C DO 200 J = JBEG, JEND T0 = J * FSR T0 = T0 * T0 C C DETERMINE HOW MANY TRACES ARE USED. C I = NX + 1 100 CONTINUE C I = I - 1 IF (J .LT. FLV(I)) GO TO 100 IF (I .NE. 0) THEN C IHIN = I DO 120 I = 1, IHIN TX = SQRT ( T0 + (DX(I) / VEL(J) ) ** 2 ) P(I) = (VELINT(1) / VEL(J) ) * DX(I) / TX / VEL(J) 120 CONTINUE C IF (TAKOFF .EQ. 'LOCAL') THEN DO 140 I = 1, IHIN P(I) = (VELINT(J) / VELINT(1) ) * P(I) 140 CONTINUE C ENDIF C C CHECK FOR DEBUG PRINT C IF (IDB .GT. 0) THEN IF (J .EQ. 450 .OR. J .EQ. 500) THEN WRITE ( IPR, * ) 'TIME STEP = ', J WRITE ( IPR, 9030 ) ( P(I), I = 1, IHIN ) 9030 FORMAT ('0*** RAY ***'/(2X,10E12.5)) ENDIF C ENDIF C DO 180 K = 1, NANG JT = 0 T1 = 0.0 C DO 160 I = 1, IHIN IF (P(I) .LE. ANG(NANG2)) THEN IF (DATAIN(J, I) .NE. 0.0) THEN IF (P(I) .GE. ANG(2*K-1) .AND. P(I) .LT. ANG(2*K 1 )) THEN JT = JT + 1 T1 = T1 + DATAIN(J, I) ENDIF ENDIF C ENDIF 160 CONTINUE C C CHECK FOR DEBUG PRINT C IF (IDB .GT. 0) THEN IF (J .EQ. 450 .OR. J .EQ. 500) WRITE ( IPR, * ) 1 'TIME STEP = ', J, T1, JT ENDIF IF (JT .NE. 0) DATA(J, K) = T1 / FLOAT ( JT ) C 180 CONTINUE C ENDIF C 200 CONTINUE C C CHECK FOR DEBUG PRINT C IF (IDB .GT. 0) THEN DO 220 K = 1, NANG WRITE ( IPR, * ) 'ANGLE TRACE = ', K WRITE ( IPR, 9040 ) ( DATA(I, K), I = 1, NS, 10 ) 9040 FORMAT ('0*** OTRA ***'/(2X,10E12.5)) 220 CONTINUE C ENDIF C RETURN END