CTITLESADSA -- DYNAMIC STATICS ADJUSTMENT 00000010 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA AUTHOR DANIEL POLAK 00000020 CA DESIGNER DANIEL POLAK 00000030 CA LANGUAGE S/370 FORTRAN H 00000040 CA SYSTEM IBM OR CRAY 00000041 CA WRITTEN 07-25-80 00000050 C REVISED 00000060 C REVISED 02-19-86 JMP. NO REVISIONS, BUT I ADDED THIS ROUTINE 00000061 C TO THE CRAY LOAD LIBRARY. 00000062 CA 00000070 CA CALL SADSA (WNDW, SHFT, FSR, NWINDO, NOSAMP, POINTS) 00000080 CA INPUT WNDW = APPLICATION WINDOWS IN MILLISECONDS I4 00000090 CA INPUT SHFT = SHIFTS FOR EACH WINDOW IN SAMPLES R4 00000100 CA INPUT FSR = SAMPLE INTERVAL IN MILLISECONDS R4 00000110 CA INPUT NWINDO = NUMBER OF APPLICATION WINDOWS I4 00000120 CA INPUT NOSAMP = NUMBER OF TRACE SAMPLES I4 00000130 CA OUTPUT POINTS = INTERPOLATION POINTS FOR QUADRATIC R4 00000140 CA INTERPOLATION 00000150 CA 00000160 CA 00000170 CA THIS SUBROUTINE CALCULATES INTERPOLATION POINTS FOR QUADRATIC 00000180 CA INTERPOLATION OF AN INPUT TRACE RESULTING IN A DYNAMICALLY 00000190 CA ADJUSTED TRACE. 00000200 CA 00000210 C EJECT 00000220 CD 00000230 CD WARNIER DIAGRAM 00000240 CD --------------- 00000250 CD 00000260 CD |-- 00000270 CD | FIND MIDDLE OF APPLICA- 00000280 CD | TION WINDOWS (NWINDO) 00000290 CD | 00000300 CD | INCLUDE BEGINNING AND 00000310 CD | END OF TRACE AS WINDOW 00000320 CD | MIDPOINTS (1) 00000330 CD | 00000340 CD | FIND SAMPLE DIFFERENCES 00000350 CD INTERPOLATION POINTS | BETWEEN MIDPOINTS 00000360 CD FOR QUADRATIC INTER- --| (NWINDO+1) 00000370 CD POLATION | 00000380 CD | ADJUST MIDPOINTS BY 00000390 CD | APPROPRIATE SHIFT 00000400 CD | (NWINDO) 00000410 CD | | FIND # OF SAMPLES 00000420 CD | FIND SAMPLE DIFFERENCES| BETWEEN MIDPOINTS 00000430 CD | BETWEEN ADJUSTED MID- | (1) 00000440 CD | POINTS (NWINDO+1) | 00000450 CD | | FIND POINT INCRE- 00000460 CD |-- | MENT (1) 00000470 CD | 00000480 CD | GENERATE INTERPO- 00000490 CD | LATION POINTS 00000500 CD |-- (1) 00000510 CD 00000520 C 00000530 C LOCAL ARRAYS 00000540 C 00000550 C AMDPNT = ADJUSTED MIDPOINTS OF APPLICATION WINDOWS R4 00000560 C DELSAD = SAMPLE DIFFERENCE BETWEEN ADJUSTED WINDOW MIDPOINTS R4 00000570 C DELSIN = SAMPLE DIFFERENCE BETWEEN INITIAL WINDOW MIDPOINTS R4 00000580 C IMDPNT = INITIAL MIDPOINTS OF APPLICATION WINDOWS R4 00000590 C 00000600 C LOCAL VARIABLES 00000610 C 00000620 C SINC2 = SAMPLE INCREMENT R4 00000630 C NSAMPL = NEAREST INTEGER NUMBER OF SAMPLES IN THE INTERVALS I4 00000640 C BETWEEN WINDOW MIDPOINTS 00000650 C SMPINC = SAMPLE INCREMENT R4 00000660 C STARTP = STARTING INTERPOLATION POINT FOR EACH WINDOW R4 00000670 C 00000680 C EJECT 00000690 C 00000700 SUBROUTINE SADSA (WNDW, SHFT, FSR, NWINDO, NOSAMP, POINTS) 00000710 IMPLICIT INTEGER (I-M) 00000720 REAL AMDPNT (10) 00000730 REAL DELSAD (10) 00000740 REAL DELSIN (10) 00000750 REAL IMDPNT (10) 00000760 REAL SHFT ( 1) 00000770 REAL POINTS ( 1) 00000780 INTEGER WNDW ( 1) 00000790 C 00000800 C FIND APPLICATION WINDOW MIDPOINTS 00000810 C 00000820 N = NWINDO + 1 00000830 IMDPNT(1) = 0. 00000840 IMDPNT(N+1) = NOSAMP 00000850 J = 0 00000860 DO 10 00000870 * I = 2, N 00000880 J = J + 2 00000890 IMDPNT(I) = ((WNDW(J) + WNDW(J-1)) / 2) / FSR 00000900 C 00000910 10 CONTINUE 00000920 C 00000930 C FIND SAMPLE DIFFERENCES BETWEEN MIDPOINTS 00000940 C 00000950 DO 20 00000960 * I = 1, N 00000970 DELSIN(I) = IMDPNT(I+1) - IMDPNT(I) 00000980 C 00000990 20 CONTINUE 00001000 C 00001010 C ADJUST WINDOW MIDPOINTS BY CORRESPONDING SHIFTS 00001020 C 00001030 AMDPNT(1) = 0. 00001040 AMDPNT(N+1) = NOSAMP 00001050 DO 30 00001060 * I = 2, N 00001070 AMDPNT(I) = IMDPNT(I) + SHFT(I-1) 00001080 C 00001090 30 CONTINUE 00001100 C 00001110 C FIND SAMPLE DIFFERENCES BETWEEN ADJUSTED MIDPOINTS 00001120 C 00001130 DO 40 00001140 * I = 1, N 00001150 DELSAD(I) = AMDPNT(I+1) - AMDPNT(I) 00001160 C 00001170 40 CONTINUE 00001180 C 00001190 C BUILD INTERPOLATION POINTS ARRAY 00001200 C 00001210 L = 1 00001220 STARTP = 0. 00001230 POINTS(L) = 1.0 00001240 DO 80 00001250 * I = 1, N 00001260 C 00001270 C FIND SAMPLE INCREMENT FOR THIS INTERVAL 00001280 C 00001290 SMPINC = DELSIN(I) / DELSAD(I) 00001300 IF (I .NE. N) SINC2 = DELSIN(I+1) / DELSAD(I+1) 00001310 NSAMPL = AMDPNT(I+1) - AMDPNT(I) 00001320 K = L + 1 00001330 L = L + NSAMPL 00001340 Z = 0. 00001350 C 00001360 C BUILD INTERPOLATION POINTS FOR THIS INTERVAL 00001370 C 00001380 DO 50 00001390 * J = K, L 00001400 Z = Z + 1. 00001410 POINTS(J) = STARTP + Z * SMPINC 00001420 A = FLOAT(J) + 1. 00001430 IF (A .GT. AMDPNT(I+1)) GO TO 60 00001440 C 00001450 50 CONTINUE 00001460 GO TO 70 00001470 C 00001480 60 IF (I .EQ. N) GO TO 90 00001490 L = J + 1 00001500 POINTS(L) = IMDPNT(I+1) + (A - AMDPNT(I+1)) * SINC2 - 1 00001510 70 STARTP = POINTS(L) 00001520 C 00001530 80 CONTINUE 00001540 C 00001550 C MAKE SURE AN ENTIRE TRACE WILL BE INTERPOLATED 00001560 C 00001570 90 IF (POINTS(2) .LT. 1.) POINTS(2) = 1. 00001580 IF (L .EQ. NOSAMP) GO TO 110 00001590 M = NOSAMP - L 00001600 DO 100 00001610 * I = 1, M 00001620 POINTS(L) = POINTS(L-1) + SMPINC 00001630 L = L + 1 00001640 C 00001650 100 CONTINUE 00001660 C 00001670 110 RETURN 00001680 END 00001690