FUNCTION SMOOTH(NL,NSR,NER,I,ZA,RAD,SIG,ZMX) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SMOOTH APPLIES A BOXCAR OR GAUSSIAN SMOOTHING TO RADIANCES. C C SOFTWARE WRITTEN BY Benjamin T. Marshall C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C (c) Copyright 1987-1999 by GATS, Inc. C 11864 Canon Blvd., Suite 101, Newport News, VA 23606 C Phone: (804) 865-7491 C C All Rights Reserved. No part of this software or publication may be C reproduced, stored in a retrieval system, or transmitted, in any form C or by any means, electronic, mechanical, photocopying, recording, or C otherwise without the prior written permission of GATS, Inc. C C INPUT PARAMETERS C C NL------ NUMBER OF POINTS IN INPUT ARRAY C NSR----- INDEX OF FIRST FILLED RADIANCE VALUE C NER----- INDEX OF LAST FILLED RADIANCE VALUE C I------- INDEX OF CENTER POINT FOR CONVOLUTION C ZA------ ARRAY OF ALTITUDES C RAD----- PARAMETER ARRAY C SIG----- STANDARD DEVIATION OF GAUSSIAN SMOOTH FUNCTION IN ALTITUDE C LESS THAN OR EQUAL TO ZERO IF BOXCAR C ZMX----- ALTITUDE DIFFERENCE CUT-OFF (SHOULD BE AT LEAST 3*SIG), FOR C BOXCAR THIS IS HALF WIDTH OF BOXCAR C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IMPLICIT NONE INTEGER NL REAL*4 ZA(NL),RAD(NL),SIG,ZMX,DNM,DZ1,DZ2,DZ,ZD,ZZ,Z,X,GG,G, &GSUM1,GSUM2,GRSUM,GGSUM,AGRSUM,SMOOTH INTEGER NSR,NER,I,J,JD,J1,J2 IF(I.GT.NSR.AND.I.LT.NER.AND.ZMX.GT.0.0) THEN IF(SIG.GT.0.0) DNM=1.0/(SIG*SQRT(2.0)) DZ1=ZA(I)-ZA(I+1) DZ2=ZA(I-1)-ZA(I) DZ=(DZ1+DZ2)*0.5 JD=ZMX*1.01/DZ J1=I-JD IF(J1.LT.NSR) THEN J1=NSR JD=I-NSR ENDIF J2=I+JD IF(J2.GT.NER) THEN J2=NER JD=NER-I J1=I-JD ENDIF ZZ=ZA(I) IF(SIG.GT.0.0) THEN GSUM1=0.5 GSUM2=0.5 ELSE GSUM1=0.0 GSUM2=0.0 ENDIF GRSUM=0.0 DO 10 J=I,J1,-1 IF(SIG.GT.0.0) THEN IF(J.NE.J1) THEN ZD=ZA(J-1)-ZA(J) ELSE ZD=ZA(J)-ZA(J+1) ENDIF Z=ZA(J)-ZZ+0.5*ZD X=Z*DNM GG=0.5*(1.0+ERF(X)) G=GG-GSUM1 GRSUM=GRSUM+G*RAD(J) GSUM1=GG C WRITE(98,*) I,J,G ELSE G=1.0 GRSUM=GRSUM+G*RAD(J) GSUM1=GSUM1+G C WRITE(98,*) I,J,G ENDIF 10 CONTINUE DO 20 J=I,J2 IF(SIG.GT.0.0) THEN IF(J.NE.J2) THEN ZD=ZA(J)-ZA(J+1) ELSE ZD=ZA(J-1)-ZA(J) ENDIF Z=ZZ-ZA(J)+0.5*ZD X=Z*DNM GG=0.5*(1.0+ERF(X)) G=GG-GSUM2 GRSUM=GRSUM+G*RAD(J) GSUM2=GG C WRITE(98,*) I,J,G ELSE IF(J.GT.I) THEN G=1.0 GRSUM=GRSUM+G*RAD(J) GSUM2=GSUM2+G C WRITE(98,*) I,J,G ENDIF ENDIF 20 CONTINUE IF(SIG.GT.0.0) THEN GGSUM=GSUM1+GSUM2-1.0 ELSE GGSUM=GSUM1+GSUM2 ENDIF AGRSUM=ABS(GRSUM) IF(AGRSUM.GT.0.0) THEN SMOOTH=GRSUM/GGSUM ELSE SMOOTH=RAD(I) ENDIF ELSE SMOOTH=RAD(I) ENDIF RETURN END