!-------------------------------------- LICENCE BEGIN ------------------------------------ !Environment Canada - Atmospheric Science and Technology License/Disclaimer, ! version 3; Last Modified: May 7, 2008. !This is free but copyrighted software; you can use/redistribute/modify it under the terms !of the Environment Canada - Atmospheric Science and Technology License/Disclaimer !version 3 or (at your option) any later version that should be found at: !http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html ! !This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; !without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. !See the above mentioned License/Disclaimer for more details. !You should have received a copy of the License/Disclaimer along with this software; !if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), !CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca !-------------------------------------- LICENCE END -------------------------------------- !SUBROUTINE SOBSHUMSAT 1 #if defined (DOC) * ***s/r SOBSHUMSAT * *Author : P. Koclas *CMC/AES October 1998 *Revision: * C. Charette *ARMA/AES Jan 2000 * - Added llprint for diagnostics * P. KOCLAS CMC/CMDA Jan 2000 * -MODIFIY HEADER FLAG IN CASE OF REJECT * C. Charette *ARMA/AES MAR2000 * - Remove setting of qc flags 6 and 9 * C. Charette *ARMA/AES OCT2000 * - Remove displacement of accepted observation to the model C surface pressure when the observed pressure is greater than C the model surface pressure. * * ** Purpose: * Refuse elements which are too far away from the surface. * Replace the pressure of elements which are slightly below * the model surface by the pressure of the trial field. * *Arguments: * * none #endif IMPLICIT NONE *implicits #include "comlun.cdk"
#include "comdimo.cdk"
#include "comoabdy.cdk"
#include "comoahdr.cdk"
#include "comoba.cdk"
#include "commvohr.cdk"
#include "cvcord.cdk"
#include "comnumbr.cdk"
* INTEGER JPINEL PARAMETER(JPINEL=1) INTEGER J,JD,JF,JOBS,JDATA,IOBS1,IOBS2,IBAD,IFLG LOGICAL LLNOIR,LLPRINT REAL*8 ZVAL,ZDIFF INTEGER ITYP,IDATA,IDATEND INTEGER ILEM,ICRIT,IELHU,IBEGIN,ILAST INTEGER ILISTEL(JPINEL) INTEGER IKOUNTREA(JPINEL),IKOUNTREJ(JPINEL),IKOUNTT REAL*8 RLISTCRIT(JPINEL) ccc DATA ILISTEL/12192/ DATA RLISTCRIT/50./ C C ILISTEL(1) = NEES IELHU = ILISTEL(1) LLPRINT = .FALSE. ccc LLPRINT = .TRUE. C WRITE(NULOUT,* ) ' ' WRITE(NULOUT,* ) ' SUBROUTINE SOBSHUMSAT ' WRITE(NULOUT,* ) ' ' WRITE(NULOUT,* ) '****************************************************' WRITE(NULOUT,222)'ELEMENTS ', ( ILISTEL(J),J=1,jpinel) WRITE(NULOUT,223)'REJECTION BOUNDARY(HPA) ', (RLISTCRIT(J),J=1,jpinel) WRITE(NULOUT,* ) '****************************************************' WRITE(NULOUT,* ) ' ' C C SET COUNTERS TO ZERO C DO J=1,JPINEL IKOUNTREJ(J)=0 IKOUNTREA(J)=0 END DO IKOUNTT=0 C C LOOP OVER OBSERVATION FILES C DO JF = 1,NFILES IF ( (CFAMTYP(JF) .EQ. 'HU') .AND. (NBEGINTYP(JF) .GT. 0) ) THEN IBEGIN=NBEGINTYP(JF) ILAST=NENDTYP(JF) IOBS1=MOBDATA(NCMOBS,NBEGINTYP(JF)) IOBS2=MOBDATA(NCMOBS,NENDTYP(JF)) WRITE(NULOUT,*)' FAMILY = ',CFAMTYP(JF) C C DO JOBS=IOBS1,IOBS2 C IDATA = MOBHDR(NCMRLN,JOBS) IDATEND = MOBHDR(NCMNLV,JOBS) + IDATA - 1 C C REJECT DATA TOO FAR BELOW MODEL OROGRAPHY C DO JDATA= IDATA, IDATEND IKOUNTT=IKOUNTT+1 ZVAL=ROBDATA8(NCMPPP,JDATA) cjmb ZDIFF= (ZVAL- GOMPSHR(1,JOBS) )/100. cjmb Surface pressure artificially modified to account cjmb for difference in rejections caused by 32 bits cjmb conversion (MRBCVT) of observed pressure. cjmb (Same modification in VOBSLYRS or previously VLAYERS) ZDIFF= (ZVAL- (GOMPSHR(1,JOBS)+ 0.01D0) )/100. IF(LLPRINT) THEN WRITE(NULOUT,*) 'SOBSHUMSAT:zval,psg,zdiff' & ,ZVAL,GOMPSHR(1,JOBS),ZDIFF ENDIF IF ( ZDIFF .GT. 0. ) THEN ZVAL=ROBDATA8(NCMVAR,JDATA) ITYP=MOBDATA(NCMVNM,JDATA) DO J=1,JPINEL ICRIT=RLISTCRIT(J) ILEM=ILISTEL(J) IF ( ITYP .EQ. ILEM ) THEN IF ( ZDIFF .LE. ICRIT) THEN IKOUNTREA(J)=IKOUNTREA(J)+1 ccc ROBDATA8(NCMPPP,JDATA)=GOMPSHR(1,JOBS) IF(LLPRINT) THEN WRITE(NULOUT,224) ' Keep OBS below sfc ',jobs,ITYP & ,CSTNID(JOBS),ROBDATA8(NCMPPP,JDATA),ZDIFF ENDIF ELSE IF(LLPRINT) THEN WRITE(NULOUT,224) 'Rej OBS below sfc ',jobs,ITYP & ,CSTNID(JOBS),ROBDATA8(NCMPPP,JDATA),ZDIFF ENDIF MOBDATA(NCMASS,JDATA)=0 IKOUNTREJ(J)=IKOUNTREJ(J)+1 MOBDATA(NCMFLG,JDATA)= & ibset( MOBDATA(NCMFLG,JDATA) , 18 ) ENDIF ENDIF END DO ENDIF END DO C END DO C C WRITE(NULOUT,* ) ' ' WRITE(NULOUT,* ) '*****************************************************' WRITE(NULOUT,222 )'ELEMENTS ',( ILISTEL(J),J=1,JPINEL) WRITE(NULOUT,222)'ACCEPTED below sfc ',(IKOUNTREA(J),J=1,JPINEL) WRITE(NULOUT,222)'REJECTED below sfc ',(IKOUNTREJ(J),J=1,JPINEL) WRITE(NULOUT,* ) '*****************************************************' WRITE(NULOUT,* ) ' ' 222 FORMAT(2x,a29,5(2x,i5)) 223 FORMAT(2x,a29,5(2x,f5.0)) 224 FORMAT(2x,a20,2x,I6,2X,I5,2x,A9,2x,2(2x,f9.2)) C ENDIF END DO C IKOUNTT=0 DO JDATA=1,NDATA IF ( MOBDATA(NCMASS,JDATA) .EQ. 1) IKOUNTT=IKOUNTT+1 END DO WRITE(NULOUT,'(1X," NUMBER OF DATA ASSIMILATED BY 3D-VAR " & ,"AFTER ADJUSTMENTS:",i10)')IKOUNTT WRITE(NULOUT,* ) ' ' RETURN END