CTITLESAFX3DD -- 3D-LINE LINKED LIST INFORMATION ARRAY C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** C*********************************************************************** CABS SAFX3DD - FORM A 3D-LINE LINKED LIST ARRAY OF TRACE INFORMATION C C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1989. 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 D CORRIGAN CA AUTHOR D CORRIGAN CA LANGUAGE VS FORTRAN CA SYSTEM IBM/CRAY CA WRITTEN 12-13-88 CA CA REVISED 10-19-90 CLJ RENAME FROM FX3LLC, ADD TO CRAY CA CA CALLING PROCEDURE: CA SUBROUTINE SAFX3DD( PA,NCDP,NTRC,C ) CA CA PURPOSE OF PROGRAM: CA CA COMPRESS THE INFORMATION ABOUT WHICH CA TRACES ARE LIVE/DEAD/MISSING FOR A GIVEN LINE CA INTO A LINKED LIST ARRAY CA CA ARGUMENTS (INPUT) CA CA PA - FLAG : CA = 0 / CDP IS MISSING / CA = 1 / CDP IS LIVE / CA = -1 / CDP IS DEAD / CA NCDP - TOTAL NUMBER OF CDPS PER LINE CA NTRC - NUMBER OF LIVE TRACES ON THIS LINE CA CA CA ARGUMENTS (OUTPUT) CA CA PA - FLAG : CA = 0 / CDP IS MISSING OR DEAD / CA = 1 / CDP IS LIVE / CA C - LINKED LIST: CA C(1) = LENGTH OF BUFFER CA (LBUF = 3 + 2*NZONE) CA C(2) = NUMBER OF LIVE TRACES (NTRC) CA C(3) = NUMBER OF ZONES OF SEQUENTIAL CA LIVE TRACES (NZONE) CA C(4) = FIRST LIVE TRACE IN ZONE 1 CA C(5) = LAST LIVE TRACE IN ZONE 1 CA . CA . CA . CA C(LBUF) = LAST LIVE TRACE IN ZONE NZONE CA CEND C*********************************************************************** C SUBROUTINE SAFX3DD( PA,NCDP,NTRC,C ) C IMPLICIT INTEGER(A-Z) REAL PA(1) REAL C(1) C C --------------------------------------------------------------------- C C INITIALIZE C NZONE = 0 C IF( NTRC.LE.0 ) GO TO 800 IP1 = 1 IC = 4 C C ---------------------------------------------------------------------- C C FIND NEXT LIVE/DEAD TRACE C 100 DO 200 IP = IP1,NCDP IF( PA(IP).NE.0. ) GO TO 300 200 CONTINUE C C NO MORE LIVE/DEAD TRACES C GO TO 800 C C ---------------------------------------------------------------------- C C FOUND START OF LIVE/DEAD TRACE ZONE C 300 C(IC) = IP NZONE = NZONE + 1 IF( IP.EQ.NCDP ) THEN C(IC+1) = IP GO TO 800 ENDIF C C LOCATE LAST SEQUENTIAL LIVE/DEAD TRACE IN THIS ZONE C IP1 = IP + 1 DO 400 IP = IP1,NCDP IF( PA(IP).EQ.0. ) GO TO 500 400 CONTINUE C C DATA ARE EXHAUSTED C C(IC+1) = NCDP GO TO 800 C C COMPLETE SPECIFICATION FOR THIS ZONE AND GO ON TO NEXT C 500 C(IC+1) = IP - 1 IP1 = IP IC = IC + 2 GO TO 100 C C ---------------------------------------------------------------------- C C REPLACE DEAD TRACE FLAGS WITH ZEROS C 800 DO 900 IP = 1,NCDP IF( PA(IP).LT.0. ) PA(IP) = 0. 900 CONTINUE C C ---------------------------------------------------------------------- C C CLOSE OUT C I1 = 1 I2 = 2 I3 = 3 LBUF = 3 + 2*NZONE C(I1) = LBUF C(I2) = NTRC C(I3) = NZONE C C --------------------------------------------------------------------- C RETURN END