CTITLESACRIV -- CONVERT RMS VELOCITY TO INTERVAL VELOCITY 00000010 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA AUTHOR R. C. DECKER 00000020 CA DESIGNER R. C. DECKER 00000030 CA LANGUAGE S/370 FORTRAN H EXTENDED 00000040 CA WRITTEN 11-09-76 00000050 C REVISED 06-22-78 R. MCMILLAN. ADD CHECK TO 00000060 C PREVENT VELOCITY FOR TIME > 00000070 C RLENG. 00000080 CA 00000090 CA 00000100 CA CALL SACRIV (VEL, NPTS, RLENG, SAMPR, IPR, VSI, PTS, ERROR) 00000110 CA IN/OUT VEL = INTEGER IN/OUT TIME RMS VELOCITY I4 00000120 CA T/V ARRAY WHERE T IS I4, AND V IS R4 00000130 CA INPUT NPTS = NUMBER OF POINTS IN VEL I4 00000140 CA INPUT IPR = INTERNAL PRINTER UNIT I4 00000150 CA INPUT RLENG = RECORD LENGTH (MS) I4 00000160 CA INPUT SAMPR = SAMPLE RATE (MS) I4 00000170 CA OUTPUT VSI = INTERVAL VELOCITIES (EACH SAMPLE) R4 00000180 CA OUTPUT PTS = NUMBER OF POINTS IN VSI I4 00000190 CA OUTPUT ERROR = RETURNED ERROR FLAG I4 00000200 CA 00000210 CA 00000220 CA THE FUNCTION OF 'SACRIV' IS TO CONVERT TIME- 00000230 CA RMS VELOCITY PAIRS TO TIME-INTERVAL VELOCITY PAIRS 00000240 CA AND GENERATE AN ARRAY OF INTERVAL VELOCITIES FOR 00000250 CA EACH SAMPLE. 00000260 CA THE INPUT DATA IS WRITTEN BY THE ROUTINE 'SPVELF' 00000270 CA IN TIME-RMS PAIRS, AND PASSED IN THE ARRAY VEL. THE 00000280 CA OUTPUT IS RETURNED IN THE ARRAY VSI. 00000290 CA 00000300 CA 00000310 C 00000320 C SUBROUTINES CALLED: ARMVE (S1ATP) 00000330 C 00000340 C EJECT 00000350 C 00000360 C LOCAL OR INTERNAL ARRAYS. 00000370 C 00000380 C VEL ( 1) = ARRAY TO HOLD TIME-RMS VELOCITIES I4 00000390 C VSI ( 1) = ARRAY TO HOLD VELOCITIES R4 00000400 C T ( 250) = ARRAY FOR TIMES R4 00000410 C VR ( 250) = ARRAY FOR RMS VELOCITIES R4 00000420 C VI ( 250) = ARRAY FOR INTEVERAL VELOCITIES R4 00000430 C 00000440 C LOCAL OR INTERNAL VARIABLES AND CONSTANTS. 00000450 C 00000460 C IPR = PRINTER UNIT I4 00000470 C IVP = NUMBER OF VELOCITY POINTS I4 00000480 C IVPM1 = NUMBER OF VELOCITY POINTS MINUS ONE I4 00000490 C NPTS = NUMBER OF POINTS IN THE INPUT VELOCITY ARRAY I4 00000500 C PTS = NUMBER OF POINTS IN THE COMPUTED INTERVAL VEL ARRAY I4 00000510 C RLENG = RECORD LENGTH I4 00000520 C SAMPR = SAMPLE RATE I4 00000530 C EJECT 00000540 C====================================================================== 00000550 C 00000560 SUBROUTINE SACRIV (VEL,NPTS,RLENG, 00000570 *SAMPR,IPR,VSI,PTS,ERROR) 00000580 IMPLICIT INTEGER (A-Z) 00000590 C 00000600 C 00000610 C ARRAYS PASSED IN THE PARAMENTER LIST 00000620 C 00000630 INTEGER VEL (1) 00000640 REAL VSI (1) 00000650 C LOCAL ARRAYS 00000660 REAL T (250) /250 * 0.0 / 00000670 REAL VR (250) /250 * 0.0 / 00000680 REAL VI (250) /250 * 0.0 / 00000690 C 00000700 EXTERNAL S1ATP 00000710 C 00000720 C LOCAL VARIABLES - REAL 00000730 C 00000740 REAL TT 00000750 REAL FRACT 00000760 C 00000770 C FILL THE TIME ARRAY (T) AND RMS 00000780 C VELOCITY ARRAY (VR) WITH THE 00000790 C INPUT TIME-VELOCITY PAIRS IN 00000800 C THE ARRAY VEL. 00000810 C 00000820 IVP = NPTS/2 00000830 J = 0 00000840 C 00000850 DO 10 00000860 * I= 1 , NPTS , 2 00000870 J = J + 1 00000880 T(J) = VEL(I) 00000890 CALL ARMVE (VEL(I+1),VR(J),1) 00000900 C 00000910 10 CONTINUE 00000920 C 00000930 C CONVERT RMS TO INTERVAL VELOCITIES 00000940 C FOR INTERPOLATION. 00000950 C 00000960 C COMPUTE THE INTERVAL VELOCITIES. 00000970 C 00000980 IVPM1 = IVP - 1 00000990 C 00001000 DO 20 00001010 * I = 1,IVPM1 00001020 VI(I)=(VR(I+1)*VR(I+1)*T(I+1)- VR(I)*VR(I)*T(I)) 00001030 * /(T(I+1)-T(I)) 00001040 IF(VI(I).LT.0.) VI(I) = 0.0 00001050 VI(I) = SQRT(VI(I)) 00001060 C 00001070 20 CONTINUE 00001080 C 00001090 C FILL IN THE SAMPLE CONTROL POINTS 00001100 C IN VSI BY LINEAR INTERPOLATION OF THE 00001110 C ACCUMUALTED VR INFORMATION. 00001120 C 00001130 TT = 0. 00001140 PTS = 0 00001150 VI(IVP) = VI(IVPM1) 00001160 C 00001170 30 DO 40 00001180 * I = 1, IVP 00001190 IF (T(I).GE.T(I+1)) GO TO 80 00001200 IF (TT.GE.T(I).AND.TT.LE.T(I+1)) GO TO 50 00001210 C 00001220 40 CONTINUE 00001230 C 00001240 GO TO 60 00001250 C 00001260 50 PTS = PTS + 1 00001270 FRACT = (TT-T(I))/(T(I+1)-T(I)) 00001280 VSI(PTS) = VI(I) + FRACT*(VI(I+1)-VI(I)) 00001290 TT = TT + SAMPR 00001300 IF (TT .GE. RLENG) GO TO 60 00001310 IF (TT .LE. T(I+1)) GO TO 50 00001320 GO TO 30 00001330 C 00001340 60 CONTINUE 00001350 C 00001360 C CONVERT THE INTERVAL VELOCITIES 00001370 C TO INTERVAL TRANSIT TIMES. 00001380 C 00001390 DO 70 00001400 * I=1,PTS 00001410 C 00001420 70 VSI(I) = 1000000./VSI(I) 00001430 C 00001440 RETURN 00001450 C 00001460 80 WRITE(IPR, 9000 ) T 00001470 GO TO 90 00001480 C 00001490 90 ERROR =-1 00001500 RETURN 00001510 C 00001520 C --- FORMAT STATEMENTS --- 00001530 C 00001540 9000 FORMAT (' *** BACKUP IN TIMES FOR TIMES ',5X, 00001550 * 20F6.0/4(11X,20F6.0/)) 00001560 END 00001570