C C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CTITLESAPEAKT -- FIND INDEXES OF PEAKS AND TROUGHS 00020001 CA AUTHOR B. S. BOX 00030001 CA DESIGNER B. S. BOK 00040001 CA LANGUAGE FORTRAN 00050001 CA SYSTEM IBM 00060001 CA WRITTEN AUGUST, 1990 00070001 C REVISED 12-21-91 JJC - MODIFIED TO MEET EDP STANDARDS. C 00080001 CA 00090001 CA CALL SAPEAKT (A, NPNT, AMAX, NDX) 00100001 CA 00110001 CA INPUT A = INPUT ARRAY R4 00120001 CA INPUT NPNT = NO. OF POINT OF ARRAY A I4 00130001 CA OUTPUT AMAX = VALUE OF HIGHEST PEAK R4 00140001 CA IOUTPUT NDX = INDEXES OF CONSEQUTIVE PEAK AND TROUGHS I4 00150001 CA 00160001 CA THIS SUBROUTINE IS TO FIND INDEXES OF PEAKS AND TROUGHS 00170001 C 00180001 C REMARKS: FIRST AND LAST INDEXES ARE ALWAYS INCLUDED. 00190001 C INDEX AFTER LAST PEAK (OR TROUGH) WILL BE SET ZERO 00200001 C************************************************************** C * C SUBROUTINES AND FUNCTIONS CALLED FROM THIS ROUTINE * C * C NO SUBROUTINES OR FUNCTIONS CALLED FROM THIS PROGRAM UNIT * C * C************************************************************** C 00210001 SUBROUTINE SAPEAKT (A, NPNT, AMAX, NDX) 00130000 C 00140001 IMPLICIT INTEGER (A-Z) 00150001 C 00160001 DIMENSION A(NPNT), NDX(NPNT) 00190000 C REAL A 00170001 REAL AMAX 00180001 C 00200001 K = 0 NDX(1) = 1 IF (A(2) .LT. A(1)) K = 1 AMAX = A(1) N2 = 2 C 00260000 C FIND NEXT TROUGH 00270000 C 00280000 100 CONTINUE DO 120 N1 = N2, NPNT IF (A(N1) .GT. A(N1-1)) GO TO 140 120 CONTINUE GO TO 200 140 CONTINUE K = K + 1 NDX(K) = N1 - 1 N1 = N1 + 1 IF (N1 .EQ. NPNT) GO TO 200 C 00370000 C FIND NEXT PEAK 00380000 C 00390000 DO 160 N2 = N1, NPNT IF (A(N2) .LT. A(N2-1)) GO TO 180 160 CONTINUE GO TO 200 180 CONTINUE K = K + 1 NDX(K) = N2 - 1 AMAX = AMAX1 ( A(N2 - 1), AMAX ) N2 = N2 + 1 IF (N2 .LT. NPNT) GO TO 100 200 CONTINUE K = K + 1 NDX(K) = NPNT NDX(K + 1) = 0 C 00520000 C 00540000 RETURN END