CTITLEMACONV - TIME DOMAIN VECTORIZED CONVOLUTION 00010000 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** C@PROCESS VECTOR(LEVEL(2) REPORT(XLIST)) 00020000 C 00030000 CA AUTHOR H. W. SWAN 00040000 CA DESIGNER H. W. SWAN 00050000 CA SYSTEMS IBM/CRAY 00060000 CA LANGUAGE VS FORTRAN VERSION 2.2 00070000 CA WRITTEN 04-26-88 00080000 C REVISED 05-23-91 JJC - CHANGED IMPLICIT NONE TO (A-Z). 00090001 C REVISED 12-17-91 JJC - MODIFIED TO MEET SPARC STANDARDS. 00100003 CA 00110000 CA CALLING SEQUENCE: 00120000 CA CALL MACONV(A, F, B, NAB, NF, NOFF) 00130000 CA 00140000 CA IN/OUT ARGUMENT TYPE DESCRIPTION 00150000 CA ------ -------- ---- ----------- 00160000 CA 00170000 CA IN A (R4) THE INPUT VECTOR TO CONVOLVE 00180000 CA IN F (R4) THE FILTER FUNCTION TO CONVOLVE WITH 00190000 CA OUT B (R4) THE CONVOLVED ARRAY 00200000 CA IN NAB I4 THE DIMENSIONED LENGTHS OF 'A' AND 'B'. 00210000 CA IN NF I4 THE LENGTH OF FILTER FUNCTION 00220000 CA IN NOFF I4 THE INDEX THE FILTER FUNCTION WHICH 00230000 CA MULTIPLIES THE I-TH VALUE OF 'A' INTO 00240000 CA THE I-TH VALUE OF 'B'. 00250000 CA 00260000 CA PURPOSE: 00270000 CA 00280000 CA THIS SUBROUTINE A GENERALIZES THE SPARC ROUTINE 00290000 CA 'ARCON', BY PROVIDING THE ARGUMENT 'NOFF'. IT ALSO FEATURES 00300000 CA ENHANCED EFFICIENCY, SINCE IT VECTORIZES ON THE 00310000 CA 'I' LOOP OF DIMENSION 'NAB', RATHER THAN THE 'J' LOOP 00320000 CA OF DIMENSION 'NF'. SINCE 'NAB' IS USUALLY GREATER THAN 00330000 CA 'NF', THIS REORDERING RESULTS IN INCREASED EXECUTION SPEED. 00340000 CA 00350000 CA 00360000 CA MATHEMATICAL DESCRIPTION: 00370000 CA 00380000 CA NF 00390000 CA __ 00400000 CA \ 00410000 CA B(I) = > F(J) A(I-J+|NOFF|) , FOR I=1,2,...,NAB 00420000 CA /_ 00430000 CA J=1 00440000 CA 00450000 CA 00460000 CA PICTORIAL EXAMPLE: (NAB = 5, NF = 3, NOFF = 2, I=3) 00470000 CA 00480000 CA 00490000 CA A1 A2 A3 A4 A5 00500000 CA * * * 00510000 CA F3 F2 F1 00520000 CA V V V 00530000 CA \ |(J=2) / 00540000 CA \ | / 00550000 CA \ | / 00560000 CA (J=3) \ | / (J=1) 00570000 CA \ / 00580000 CA + 00590000 CA | 00600000 CA V 00610000 CA B1 B2 B3 B4 B5 00620000 CA 00630000 CA 00640000 CA 00650000 CA SUBROUTINES CALLED: NONE 00660000 CA 00670000 SUBROUTINE MACONV(A, F, B, NAB, NF, NOFF) 00680000 C 00690002 CJJ IMPLICIT NONE 00700002 IMPLICIT INTEGER (A-Z) 00710002 C 00720002 INTEGER NAB, NF, NOFF, I, J, LIM1, LIM2, NOABS 00730000 REAL A(NAB), F(NF), B(NAB) 00740000 C 00750000 C INITIALIZE THE OUTPUT ARRAY WITH ZEROS. 00760000 C 00770000 NOABS = ABS(NOFF) 00780000 DO 100 I = 1, NAB 00790000 100 B(I) = 0.0 00800000 C 00810000 C PERFORM THE CONVOLUTION. 00820000 C 00830000 DO 200 J = 1, NF 00840000 C LIM1 = MAX0(J-NOABS+1, 1) 00850000 C LIM2 = MIN0(J-NOABS+NAB, NAB) 00860000 LIM1 = J-NOABS+1 00870000 LIM2 = J-NOABS+NAB 00880000 IF(LIM1 .LT. 1) LIM1 = 1 00890000 IF(LIM2 .GT. NAB) LIM2 = NAB 00900000 DO 200 I = LIM1, LIM2 00910000 200 B(I) = B(I) + F(J)*A(I-J+NOABS) 00920000 RETURN 00930000 END 00940000