CTITLEMASMTH - FAST CONVOLUTION WITH A RECTANGULAR FILTER C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** C@PROCESS VECTOR(LEVEL(2) REPORT(XLIST)) C CA AUTHOR H. W. SWAN CA DESIGNER S. H. BICKEL CA SYSTEM IBM/CRAY CA LANGUAGE VS FORTRAN VERSION 2.2 CA WRITTEN 12-03-87 C REVISED 05-23-91 JJC - CHANGED IMPLICIT NONE TO (A-Z). CA CA CALLING SEQUENCE: CA CALL MASMTH(NX,ISTRID,ID,X,Y,L) CA CA IN/OUT ARGUMENT TYPE DESCRIPTION CA ------ -------- ---- ----------- CA CA IN NX I4 LENGTH OF INPUT AND OUTPUT VECTORS CA IN ISTRID I4 STRIDE OF INPUT VECTOR CA (THE STRIDE OF THE OUTPUT VECTOR IS 1) CA IN X (R4) INPUT VECTOR, CONTAINING 'NX' ELEMENTS CA OUT Y (R4) OUTPUT VECTOR, TO RECEIVE 'NX' CA SMOOTHED ELEMENTS. CA IN L I4 THE HALF-LENGTH OF THE BOXCAR SMOOTHING CA FILTER CA CA PURPOSE: TO CONVOLVE A VECTOR WITH A CA RECTANGULAR FILTER. CA CA ALGORITHM: THIS PROCEDURE ADDS AND SUBTRACTS ELEMENTS CA A RUNNING SUM. COMPUTATION IS OF ORDER O(NX). CA CA CA SUBROUTINES CALLED: NONE CA CA C SUBROUTINE MASMTH(NX,ISTRID,ID,X,Y,L) C CJJ IMPLICIT NONE IMPLICIT INTEGER (A-Z) C INTEGER NX, ISTRID, ID, L, LEN, I, N, J, LD REAL X(ISTRID,NX),Y(NX) REAL*8 YI,YJ LEN=MIN(L,NX/2) IF(LEN .LE. 0) THEN DO 1 I=1,NX 1 Y(I) = X(ID,I) RETURN ENDIF Y(1)=X(ID,1) YI =X(ID,1) Y(NX)=X(ID,NX) YJ =X(ID,NX) N=1 DO 2 I=2,LEN J=NX+1-I YI = YI +X(ID,N+1) +X(ID,N+2) YJ = YJ +X(ID,NX-N-1)+X(ID,NX-N) Y(I)=YI Y(J)=YJ N=N+2 Y(I)=Y(I)/N 2 Y(J)=Y(J)/N LD=LEN+LEN+1 IF(NX .LT. LD) GO TO 5 YI =YI+X(ID,LD-1)+X(ID,LD) Y(1+LEN)=YI DO 3 I=LEN+2,NX-LEN YI=YI+X(ID,I+LEN)-X(ID,I-1-LEN) 3 Y(I)=YI DO 4 I=LEN+1,NX-LEN 4 Y(I)=Y(I)/LD 5 DO 6 I=1,NX 6 X(ID,I)=Y(I) RETURN END