CTITLESAFX3DG -- OVERLAP PARAMETERS FOR 3D SPATIAL PREDICTION PROCESS C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** C*********************************************************************** CABS SAFX3DG - DETERMINE OVERLAP PARAMETERS FOR 3D SPATIAL PREDICTION 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 FX3OLP, ADD TO CRAY CA CA PURPOSE OF PROGRAM: CA CA DETERMINE THE OVERLAP PARAMETERS - OVERLAP CA ZONES, WEIGHTS, ETC. FOR THE 3-D SPATIAL CA PREDICTION PROCESS FX3D CA CA CALLING PROCEDURE: CA SUBROUTINE SAFX3DG( C,NCDP,NLIN,ICMN,ICMX,MLIN,FPMN, CA * LGI,LGX,LFI,LFX,NPAT,BUF,LBUF,FLG ) CA CA CALLING ARGUMENTS: CA CA ARGUMENTS (INPUT) CA CA CA C - NCDP BY NLIN ARRAY SPECIFYING WHICH CA TRACES IN THE RECTANGLE ARE LIVE CA C(JCDP,JLIN) = 1 FOR LIVE TRACES CA NCDP - TOTAL NUMBER OF CDPS PER LINE CA NLIN - TOTAL NUMBER OF LINES CA ICMN - FIRST LIVE CDP CA ICMX - LAST LIVE CDP CA MLIN - ACTUAL NUMBER OF LIVE LINES CA FPMN - FRACTION OF PATCH WHICH MUST BE FILLED IN CA ORDER THAT THE OPERATOR MAY BE DESIGNED CA LGI - LENGTH OF IN-LINE DESIGN GATE CA LGX - LENGTH OF X-LINE DESIGN GATE CA LFI - LENGTH OF IN-LINE FILTER CA LFX - LENGTH OF X-LINE FILTER CA FLG - TEMPORARY BUFFER TO HOLD FLAGS (NPAT) CA CA ARGUMENTS (OUTPUT) CA CA NPAT - NUMBER OF PATCHES TO DIVIDE INPUT INTO CA BUF - ARRAY SPECIFYING PATCH CONFIGURATIONS CA LBUF - LENGTH OF BUF CA CEND C*********************************************************************** C SUBROUTINE SAFX3DG( C,NCDP,NLIN,ICMN,ICMX,MLIN,FPMN, * LGI,LGX,LFI,LFX,NPAT,BUF,LBUF,FLG ) C IMPLICIT INTEGER(A-Z) C REAL FPMN REAL TLTR REAL SC REAL C(NCDP,NLIN) REAL BUF(1) REAL FLG(1) C C C FORMAT OF BUF FOR EACH PATCH: C C C BUF(1) = LENGTH FOR THIS PATCH C BUF(2) = FLAG FOR FILTER: C .EQ. 0 - NO FILTER APPLIED TO THIS C PATCH C .GT. 0 - APPLY FILTER TO THIS PATCH C WHICH WAS DESIGNED ON PATCH C BUF(2) C BUF(3) = FIRST CDP IN THIS PATCH (ICDP) C BUF(4) = FIRST LINE IN THIS PATCH (ILIN) C BUF(5) = LENGTH OF IN-LINE MERGE ZONE (LOI) C BUF(6) = LENGTH OF X-LINE MERGE ZONE (LOX) C C C BUF(7) º C . º = IN-LINE MERGE WEIGHTS C . º C BUF(7+LOI-1)º C C C C C BUF(7+LOI) º C . º = X-LINE MERGE WEIGHTS C . º C BUF(7+LOI )º C +LOX-1) C C C IN MERGE ZONE D = (1-W)*D + W*A C C ---------------------------------------------------------------------- C C DETERMINE IN-LINE WINDOW PARAMETERS C C SET NUMBER OF CDP IN LINE C MCDP = ICMX - ICMN + 1 CALL SAFX3DF( MCDP,LGI,LFI,NWI,MUI,MWI,IDI ) C C DETERMINE CROSS-LINE WINDOW PARAMETERS C CALL SAFX3DF( MLIN,LGX,LFX,NWX,MUX,MWX,IDX ) C C ---------------------------------------------------------------------- C C USE IN-LINE AND X-LINE PARAMETERS TO FILL UP BUFFER BUF C FOR EACH PATCH C C SET THE NUMBER OF PATCHES C NPAT = NWI*NWX LBUF = 0 IB = 1 ILIN = 1 C C FIND THE MINIMUM NUMBER OF TRACES ALLOWED IN A PATCH FOR DESIGNING C AN OPERATOR FOR THAT PATCH C NTMN = FPMN*FLOAT(LGI*LGX) C DO 200 IWX = 1,NWX LUX = MUX IF( IWX.GE.MWX ) LUX = MUX + IDX IF( IWX.EQ.1 ) THEN LOX = 0 ILIN = 1 ELSE ILIN = ILIN + LUX LOX = LGX - LUX ENDIF C C ICDP = ICMN DO 180 IWI = 1,NWI LUI = MUI IF( IWI.GE.MWI ) LUI = MUI + IDI IF( IWI.EQ.1 ) THEN LOI = 0 ICDP = ICMN ELSE ICDP = ICDP + LUI LOI = LGI - LUI ENDIF C C OBTAIN A COUNT OF THE NUMBER OF LIVE TRACES IN THIS PATCH C NLTR = 0 LBT = LOI + LOX + 6 C DO 120 JLIN = ILIN,ILIN+LGX-1 C CWRF CALL SVE( C(ICDP,JLIN),1,TLTR,LGI ) C TLTR = 0.0 DO 110 I = 1, LGI TLTR = TLTR + C(ICDP + I - 1, JLIN) 110 CONTINUE C NLTR = NLTR + TLTR 120 CONTINUE C C TEST IF THIS NUMBER OF TRACES IS ADEQUATE TO DESIGN OPERATOR C IPAT = IWI + (IWX-1)*NWI IFLG = -1 IF( NLTR.EQ.0 ) IFLG = 0 IF( NLTR.GE.NTMN ) IFLG = IPAT FLG(IPAT) = IFLG C BUF(IB+0) = LBT BUF(IB+1) = IFLG BUF(IB+2) = ICDP BUF(IB+3) = ILIN BUF(IB+4) = LOI BUF(IB+5) = LOX C C DETERMINE WEIGHTS FOR THIS PATCH C IB = IB + 6 SC = 1./FLOAT(LOI+1) DO 140 IOI = 1,LOI BUF(IB) = IOI*SC 140 IB = IB + 1 C SC = 1./FLOAT(LOX+1) DO 160 IOX = 1,LOX BUF(IB) = IOX*SC 160 IB = IB + 1 C C 180 LBUF = LBUF + LBT C C 200 CONTINUE C C --------------------------------------------------------------------- C C FOR PATCHES WITH IFLG = -1 C FIND THE NEAREST PATCH WITH AN ADEQUATE NUMBER OF TRACES C IB = 1 DO 240 IWX = 1,NWX DO 220 IWI = 1,NWI LBT = BUF(IB+0) IPAT = IWI + (IWX-1)*NWI IFLG = FLG(IPAT) C C IF( IFLG.LT.0 ) THEN CALL SAFX3DH( FLG,NWI,NWX,IWI,IWX,JPAT ) BUF(IB+1) = JPAT ENDIF C C 220 IB = IB + LBT 240 CONTINUE C C --------------------------------------------------------------------- C RETURN END