C HEADER SAVADJ 00010000 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CTITLESAVADJ -- ADJUST INPUT VELOCITY FUNCTION 00020000 C INDSAVADJ 00030000 CA AUTHOR STEVE SVATEK 00040000 CA DESIGNER STEVE SVATEK 00050000 CA LANGUAGE FORTRAN 00060000 CA SYSTEM IBM AND CRAY 00070000 CA WRITTEN 09-05-79 00080000 C REVISED 03-11-86 BY ESN - FOR CRAY COMPATABILITY. 00090000 C REVISED MO-DA-YR BY PROGRAMMER - DESCRIPTION OF CHANGE. 00100000 CA 00110000 CA CALL SAVSMP(INVBUF, NK, INXBUF, NTXP, SAMPR, DTADJ, OUTBUF) 00120000 CA 00130000 CA INPUT INVBUF = ARRAY CONTAINING INPUT TIME -RMS 00140000 CA VELOCITY PAIRS. I4 00150000 CA INPUT NK = NO. VELOCITY KNEES (TIME-VEL PAIRS) I4 00160000 CA INPUT INXBUF = ARRAY CONTAINING TIME - OFFSET PAIRS 00170000 CA (TIMES ARE FORTRAN INDEXES -FLV-) I4 00180000 CA OR, 00190000 CA ARRAY CONTAINING NK VELOCITY KNEE 00200000 CA INCREMENTS 00210000 CA INPUT NTXP = NO. TIME-OFFSET PAIRS OR VELOCITY INC 00220000 CA SWITCH. 00230000 CA > 0 => NO. T-X PAIRS IN INXBUF. 00240000 CA < 0 => INXBUF CONTAINS NK VELOCITY 00250000 CA KNEE INCREMENTS. 00260000 CA INPUT SAMPR = SAMPLE RATE I4 00270000 CA INPUT DTADJ = MOVEOUT ADJUSTMENT FOR INPUT VELOCITY 00280000 CA FUNCTION OR, R4 00290000 CA INPUT VELOCITY INCREMENT FACTOR. 00300000 CA OUTPUT OUTBUF = ARRAY CONTAINING THE ADJUSTED OUTPUT 00310000 CA VELOCITY FUNCTION. I4 00320000 CA 00330000 CA THIS APPLICATION ROUTINE WILL ADJUST AN INPUT TIME-RMS 00340000 CA VELOCITY FUNCTION BY A DESIRED MOVEOUT OR VELOCITY. 00350000 CA 00360000 CA 00370000 CA FOR MOVEOUT ADJUSTMENT, NTXP > 0, THE STANDARD MOVEOUT 00380000 CA EQUATION IS USED TO CONVERT EACH TIME-VEL KNEE TO MOVEOUT. 00390000 CA THE OFFSET USED FOR EACH KNEE CONVERSION IS DETERMINED FROM 00400000 CA THE INPUT TIME-OFFSET PAIRS. THE TIME-OFFSET PAIRS ARE 00410000 CA SCANNED TO DETERMINE THE OFFSET JUST GREATER THAN THE KNEE 00420000 CA TIME. IF THE KNEE TIME IS GREATER THAN ALL THE INPUT TIME- 00430000 CA OFFSET TIMES, THEN THE MAXIMUM OFFSET OF THE GROUP IS USED 00440000 CA FOR THE MOVEOUT CONVERSION. AFTER COMPUTATION THE MOVEOUT 00450000 CA VALUE IS ADJUSTED THE DESIRED AMMOUNT AND A NEW VELOCITY VALUE 00460000 CA IS COMPUTED FOR EACH INPUT KNEE. 00470000 CA 00480000 CA FOR VELOCITY ADJUSTMENT, NTXP < 0, EACH INPUT TIME - RMS VELOCITY00490000 CA PAIR IS ADJUSTED BY AN ASSOCIATED VELOCITY INCREMENT IN INXBUF. 00500000 CA NOTE THAT FOR VELOCITY ADJUSTMENT, DTADJ IS A FACTOR TO APPLY 00510000 CA TO THE INCREMENT BEFORE ADJUSTMENT. 00520000 CAEND 00530000 C 00540000 C EJECT 00550000 C 00560000 SUBROUTINE SAVADJ (INVBUF, NK, INXBUF, NTXP, SAMPR, DTADJ, 00570000 * OUTBUF) 00580000 C 00590000 IMPLICIT INTEGER (A-Z) 00600000 C 00610000 C INTEGER ARRAYS IN PARAMETER LIST 00620000 C 00630000 INTEGER INVBUF (1) 00640000 INTEGER INXBUF (1) 00650000 INTEGER OUTBUF (1) 00660000 C 00670000 C REAL VARIABLES IN PARAMETER LIST 00680000 C 00690000 REAL DTADJ 00700000 C 00710000 C 00720000 C REAL VARIABLES AND CONSTANTS--LOCAL (INTERNAL 00730000 C TO SUBROUTINE). 00740000 C 00750000 REAL RDT 00760000 REAL RTEMP 00770000 REAL RTI 00780000 REAL RVI 00790000 REAL RXDST 00800000 DOUBLE PRECISION RXSQ 00810000 C 00820000 C 00830000 C 00840000 NVK = NK 00850000 NP = NTXP 00860000 C 00870000 C ADJUST EACH VELOCITY OF EACH INPUT TIME-RMS 00880000 C CONTROL POINT KNEE. 00890000 C 00900000 DO 500 00910000 * I = 1, NVK 00920000 C 00930000 INDX = I * 2 - 1 00940000 TI = INVBUF(INDX) 00950000 RVI = INVBUF(INDX+1) 00960000 C 00970000 C CHECK FOR VELOCITY OR MOVEOUT ADJUSTMENT 00980000 C 00990000 IF (NP .GT. 0) GO TO 100 01000000 RTEMP = RVI + (DTADJ * INXBUF(I)) 01010000 GO TO 400 01020000 C 01030000 C FIND THE MAX OFFSET FOR RESPECTIVE TIME AT 01040000 C THIS INPUT KNEE. 01050000 C 01060000 100 CXDST = 0 01070000 CDIFF = 999999 01080000 MXDST = 0 01090000 C 01100000 DO 300 01110000 * J = 1, NP 01120000 C 01130000 JNDX = J * 2 - 1 01140000 TJ = (INXBUF(JNDX) - 1) * SAMPR 01150000 XD = INXBUF(JNDX + 1) 01160000 C 01170000 IF (XD .GT. MXDST) MXDST = XD 01180000 C 01190000 IF (TJ .LT. TI) GO TO 300 01200000 DIFF = TJ - TI 01210000 C 01220000 IF (DIFF .GT. CDIFF) GO TO 300 01230000 IF (DIFF .LT. CDIFF) GO TO 200 01240000 C 01250000 IF (XD .LE. CXDST) GO TO 300 01260000 C 01270000 200 CXDST = XD 01280000 CDIFF = DIFF 01290000 C 01300000 300 CONTINUE 01310000 C 01320000 IF (CDIFF .EQ. 999999) CXDST = MXDST 01330000 C 01340000 C 01350000 C CONVERT THE KNEE VELOCITY TO MOVEOUT USING 01360000 C THE DETERMINED OFFSET. 01370000 C 01380000 RXDST = CXDST 01390000 RTI = TI 01400000 C 01410000 RXSQ = (RXDST*1000.) * (RXDST*1000.) 01420000 C 01430000 RTEMP = (RTI*RTI) + (RXSQ / (RVI*RVI)) 01440000 RDT = SQRT(RTEMP) - RTI 01450000 C 01460000 C NOW ADJUST THE MOVEOUT AND RECOMPUTE THE KNEE 01470000 C VELOCITY. 01480000 C 01490000 RDT = RDT + DTADJ 01500000 C 01510000 C CHECK NEW RDT LESS THAN 1 MS 01520000 C 01530000 IF (RDT .LT. 1.0) RDT = 1.0 01540000 C 01550000 RTEMP = RXSQ / ((RDT*RDT) + (2.*RTI*RDT)) 01560000 RTEMP = SQRT(RTEMP) + 0.5 01570000 C 01580000 400 OUTBUF(INDX) = TI 01590000 OUTBUF(INDX+1) = RTEMP 01600000 C 01610000 500 CONTINUE 01620000 C 01630000 RETURN 01640000 C 01650000 END 01660000