CTITLESAFX3DC -- APPLY 3D SPATIAL PREDICTION FILTER TO DATA C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** C*********************************************************************** CABS SAFX3DC - APPLY 3D SPATIAL PREDICITION FILTER TO DATA 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 FX3FAP, ADD TO CRAY CA CA PURPOSE OF PROGRAM: CA CA APPLY THE FX3D SPATIAL PREDICTION FILTER TO THE DATA CA CA CALLING PROCEDURE: CA SUBROUTINE SAFX3DC( D,NCDP,NLIN,ICDP,ILIN,F,LFI,LFX, CA * B,MGI,MGX,C,LGI,LGX ) CA CA CALLING ARGUMENTS: CA CA ARGUMENTS (INPUT) CA CA D - DATA FOR ONE FREQUENCY (NCDP,NLIN) CA NCDP - NUMBER OF CDP CA NLIN - NUMBER OF LINES CA ICDP - FIRST CDP TO APPLY FILTER CA ILIN - FIRST LINE TO APPLY FILTER CA F - FILTER (LFX,LFI) CA LFI - LENGTH OF IN-LINE FILTER (ODD) CA LFX - LENGTH OF CROSS-LINE FILTER (ODD) CA MGI - LGI + LFI - 1 CA MGX - LGX + LFX - 1 CA LGI - IN-LINE DESIGN GATE LENGTH CA LGX - X -LINE DESIGN GATE LENGTH CA CA ARGUMENTS (WORK AREA) CA CA B - DATA PADDED (MGI,MGX) CA CA ARGUMENTS (OUTPUT) CA CA B - FILTERED DATA (LGI,LGX) CA C C SUBROUTINES CALLED: C C CAXPY (ESSL/CRAY LIBRARY) C CCOPY (ESSL/CRAY LIBRARY) C CEND C*********************************************************************** C SUBROUTINE SAFX3DC( D,NCDP,NLIN,ICDP,ILIN,F,LFI,LFX, * B,MGI,MGX,C,LGI,LGX ) C IMPLICIT INTEGER(A-Z) C --------------------------------------------------------------------- C COMPLEX D(NCDP,NLIN) COMPLEX B(MGI,MGX) COMPLEX C(LGI,LGX) COMPLEX F(LFX,LFI) COMPLEX ZERO C DATA ZERO / (0.,0.) / C C --------------------------------------------------------------------- C C MOVE AS MUCH INPUT DATA AS POSSIBLE TO B C AND ZERO PAD THE REST C CALL CCOPY( MGI*MGX,ZERO,0,B,1 ) C IDL = ILIN - LFX/2 IBL = 1 C IF( IDL.LT.1 ) THEN IDL = 1 IBL = 2 - ILIN + LFX/2 ENDIF C JDL = MIN0(NLIN,ILIN+LGX-1+LFX/2) NL = JDL - IDL + 1 C IDC = ICDP - LFI/2 IBC = 1 C IF( IDC.LT.1 ) THEN IDC = 1 IBC = 2 - ICDP + LFI/2 ENDIF C JDC = MIN0(NCDP,ICDP+LGI-1+LFI/2) NC = JDC - IDC + 1 C DO 100 IL = 1,NL 100 CALL CCOPY( NC,D(IDC,IDL+IL-1),1,B(IBC,IBL+IL-1),1 ) C C --------------------------------------------------------------------- C C ZERO C AND APPLY FILTER C CALL CCOPY( LGI*LGX,ZERO,0,C,1 ) C DO 400 IFX = 1,LFX DO 300 IFI = 1,LFI DO 200 IDX = 1,LGX ICX = IDX + IFX - 1 CALL CAXPY( LGI,F(IFX,IFI),B(IFI,ICX),1,C(1,IDX),1 ) 200 CONTINUE 300 CONTINUE 400 CONTINUE C C --------------------------------------------------------------------- C RETURN END