SUBROUTINE ROBSGOES(PJO) #if defined (DOC) * ***s/r ROBSGOES - Refresh computation of Jo and the residuals to the * radiance (for GOES) observations * * *Author : N.Wagneur *CMDA/MSC July, 2002 * *Revision: * Y. Yang - Oct. 2004 * - Added include "comnumbr.cdk" * due to the dependence of the "cvcord.cdk" on JPNBRELEM * * ------------------- ** Purpose: * *Arguments * PJO: total value of Jo for GOES * #endif IMPLICIT NONE *implicits #include "pardim.cdk"
#include "comdim.cdk"
#include "comgem.cdk"
#include "comdimo.cdk"
#include "comlun.cdk"
#include "comcst.cdk"
#include "comoabdy.cdk"
#include "comoahdr.cdk"
#include "comoba.cdk"
#include "commvo.cdk"
#include "commvog.cdk"
#include "partov.cdk"
#include "cparamgoes.cdk"
#include "comgoes.cdk"
#include "comgoesst.cdk"
#include "comjacgoes.cdk"
#include "comnumbr.cdk"
#include "cvcord.cdk"
* C REAL*8 ZVAR, ZOER REAL*8 ZTODEG REAL*8 DLSUM REAL*8 PJO, ZQMIN, ZJOALL, ZAVGALL C REAL*8 ZPS (JPPFGO) REAL*8 ZTG (JPPFGO) REAL*8 ZLAT(JPPFGO),ZO3OBS(JPPFGO) REAL*8 ZVLEV(JPPFGO,NFLEV) REAL*8 ZT (JPPFGO,NFLEV) REAL*8 ZLQ (JPPFGO,NFLEV) REAL*8 ZQ (JPPFGO,NFLEV) REAL*8 PANGL(JPPFGO),PANGS(JPPFGO) REAL*8 ZTBO(JPCHPFGO),ZDTB(JPCHPFGO) REAL*8 ZDTBOM1(JPCHPFGO) REAL*8 ZJOCH (0:JPCHGO,JPNSATGO) REAL*8 ZAVGNRM(0:JPCHGO,JPNSATGO) REAL*8 PAV(NFLEV,JPNAVGO,JPPFGO),PSAV(JPNSAVGO,JPPFGO) REAL*8 PSSV(JPNSSVGO,JPPFGO),PCV(JPNCVGO,JPPFGO) REAL*8 PEMISGO(JPPFGO,JPCHGO) REAL*8 PGOES(JPCHPFGO),ZPTB(JPCHPFGO) REAL*8 TAUSFC(JPCHPFGO) C INTEGER J,JCH,I,ISAT,KSAT,JOFF,IO,JF,ISATON,KCNT INTEGER IBEGIN, IBEGINOB, ILAST, ILASTOB INTEGER ILOWLVL, IMODE INTEGER KNPF, KNCHPF, INOBSJO INTEGER JO, JDATA, IDATA, ITYP, IDATEND, IDATYP INTEGER JK, JN, ICHN, IPROCES, JL, INDX INTEGER ILANSEA, INDXREG, INDXCLD, INUMCHN INTEGER KLENPF,KNAV,KNSAV,KNSSV,KNCV C INTEGER KSURF(JPPFGO) INTEGER KCHAN(JPCHPFGO),KPROF(JPCHPFGO) INTEGER KCHNESDIS(JPCHPFGO) INTEGER KFAIL(JPCHPFGO) INTEGER IPTOBS (JPPFGO) INTEGER IPTDATA (JPCHPFGO) INTEGER IPTCHPF(JPPFGO,JPCHGO) INTEGER IPTREG(JPPFGO) INTEGER IPTCLD(JPPFGO) INTEGER ISCANPOS(JPPFGO) INTEGER ISATZEN(JPPFGO) INTEGER INOBSCH(0:JPCHGO,JPNSATGO) INTEGER IFAIL(JPPFGO,JPNSATGO) C INTEGER ISRCHEQ, MRFVOI, MRFCLS EXTERNAL ISRCHEQ, MRFVOI, MRFCLS EXTERNAL LINTV2, EXTRAP C LOGICAL ASSIM C if(nobgoes.eq.0) return C C* 1. Initialization C . -------------- C c KCNT = 0 C ZTODEG = 180.0 / RPI KLENPF = NFLEV KNAV = JPNAVGO KNSAV = JPNSAVGO KNSSV = JPNSSVGO KNCV = JPNCVGO C C C* 1.1 Set index for model's lowest level C . ---------------------------------- C IF ( VLEV(1) .LT. VLEV(NFLEV) ) THEN ILOWLVL = NFLEV ELSE ILOWLVL = 1 ENDIF C C* 1.2 Initialize RT global common block C . --------------------------------- C DO J = 1, NOBGOES MJOGO(J) = 0 ENDDO C C* 2. Computation of (HX - Z)/SIGMA for GOES data only C . ------------------------------------------------ C 200 CONTINUE C DLSUM = 0. INOBSJO = 0 DO J = 1, NSATGO DO I = 0, JPCHGO INOBSCH(I,J) = 0 ZJOCH (I,J) = 0.0 ZAVGNRM(I,J) = 0.0 ENDDO ENDDO DO I = 0, JPCHGO ZO3OBS(I) = 0.0 ENDDO C C** Loop over all files C DO 295 JF = 1, NFILES IF ( CFAMTYP(JF).EQ.'GO' .AND. NBEGINTYP(JF).GT.0 ) THEN IBEGIN = NBEGINTYP(JF) ILAST = NENDTYP (JF) IBEGINOB = MOBDATA(NCMOBS,IBEGIN) ILASTOB = MOBDATA(NCMOBS,ILAST ) C C** Loop over all satellites specified by user C DO 290 KSAT = 1, NSATGO KNPF=0 DO I = 1, JPCHPFGO ZPTB (I) = 0. PGOES (I) = 0. ZDTB (I) = 0. ZTBO (I) = 0. KFAIL (I) = 1 IPTDATA (I) = 1 ENDDO DO I = 1, JPPFGO DO J = 1, NFLEV ZT (I,J) = 0. ZQ (I,J) = 0. ZLQ (I,J) = 0. ZVLEV (I,J) = 0. ENDDO ZLAT (I) = 0. ZPS (I) = 0. ZTG (I) = 0. PANGL(I) = 0. DO J = 1, JPCHGO PEMISGO(I,J) = 0. ENDDO ENDDO DO 290 JO = IBEGINOB, ILASTOB C C* . 2.1 Extract general information for this observation point C . ------------------------------------------------------ C C* Only process GOES/RADIANCES data (codtype = 180) to be assimilated? C IDATYP = MOD(MOBHDR(NCMITY,JO),1000) IF ( IDATYP .EQ. 180 ) THEN IDATA = MOBHDR(NCMRLN,JO) IDATEND = MOBHDR(NCMNLV,JO) + IDATA - 1 ASSIM = .FALSE. DO JDATA= IDATA, IDATEND IF ( MOBDATA(NCMASS,JDATA).EQ.1 ) THEN ASSIM = .TRUE. ENDIF ENDDO C ISAT = MOD(MOBHDR(NCMITY,JO)/1000,1000) cnwa C C* Currently processed satellite C* N.B.: 252=GOES08, 253=GOES09, 254=GOES10, C* 255=GOES11, 256=GOES12, etc... C ISAT = ISAT - 244 C IF ( ASSIM .AND. (ISAT .EQ. NIDSATGO(KSAT)) ) THEN C KCNT = KCNT + 1 KNPF = KNPF + 1 C MJOGO(KCNT) = JO ISATON = ISAT C C* Extract Latitude C ZLAT(KNPF) = ROBHDR(NCMLAT,JO) * ZTODEG C C* Extract land/sea flag C ILANSEA = MOBHDR(NCMOFL,JO) cnwa INDXREG = ISRCHEQ ( MLISREG, NREGST, ILANSEA ) KSURF(KNPF) = ILANSEA C C* Extract processing technique C IPROCES = MOBHDR(NCMITY,JO)/1000000 cnwa INDXCLD = ISRCHEQ ( MLISCLD, NCLDST, IPROCES ) C C* Extract scan position C ISCANPOS(KNPF) = MOD(MOBHDR(NCMBOX,JO),100) C C* Extract satellite zenith angle C ISATZEN(KNPF) = MOBHDR(NCMBOX,JO)/10000 PANGL(KNPF) = (ISATZEN(KNPF)-9000) / 100.0 C IPTCLD(KNPF) = 1 IPTREG(KNPF) = 1 C ZTG(KNPF) = GOMTGRG(1,JO) + GOMTGR(1,JO) ZPS(KNPF) = GOMPSG(1,JO) + GOMPS(1,JO) C DO JL = 1, NFLEV ZT (KNPF,JL) = GOMTG(JL,JO) + GOMT(JL,JO) ZLQ (KNPF,JL) = GOMQG(JL,JO) + GOMQ(JL,JO) ZQ (KNPF,JL) = EXP(ZLQ(KNPF,JL)) ZVLEV(KNPF,JL) = RPPOBS(JL,JO) ENDDO c IPTOBS(KNPF) = JO DO JDATA = IDATA, IDATEND ITYP = MOBDATA(NCMVNM,JDATA) C C A emissivity (elements )? IF ( ITYP.EQ.12163 ) THEN ZVAR = ROBDATA8(NCMPRL,JDATA) ICHN = NINT(ROBDATA8(NCMPPP,JDATA)) PEMISGO(KNPF,ICHN) = ZVAR ENDIF ENDDO ENDIF ENDIF IF ( KNPF .LE. 0 ) GO TO 290 IF ( KNPF .NE. JPPFGO .AND. JO .NE. ILASTOB ) GO TO 290 C C C* . 2.4 Extrapolation of humidity profile above 300mb (kg/kg) C . ----------------------------------------------------- C cnwa Not done .... C IF ( LDBGGO ) THEN JOFF = 0 WRITE(NULOUT,*)'KNPF, KNCHPF, KSAT = ', & KNPF, KNCHPF, KSAT DO JN = 1, KNPF WRITE(NULOUT,*)'KFAIL = ', KFAIL(JN) WRITE(NULOUT,*)'IPTCLD = ', IPTCLD(JN) WRITE(NULOUT,*)'IPTREG = ', IPTREG(JN) WRITE(NULOUT,*)'Temperature profile (K)' WRITE(NULOUT,*)(JN,I,ZT(JN,I),ZQ(JN,I),I=1,NFLEV) WRITE(NULOUT,*)'Surface air variables: T(K),', & 'lnq(kg/kg),Ps(hpa)' WRITE(NULOUT,*)ZT(JN,28),LOG(ZQ(JN,28)),ZPS(JN) WRITE(NULOUT,*)'Surface skin variables: Tskin(K)' WRITE(NULOUT,*)ZTG(JN) INUMCHN = NCHNAGO(IPTCLD(JN),IPTREG(JN),KSAT) WRITE(NULOUT,*)'Angles: satzen,satazim,solzen,', & 'relsolazim(deg)' WRITE(NULOUT,*) PANGL(JN) WRITE(NULOUT,*)'Surface type' WRITE(NULOUT,*) KSURF(JN) JOFF = JOFF + INUMCHN ENDDO ENDIF c 290 CONTINUE C C* . 2.6 Forward RT model C . ---------------- C C* NIMODE du namelist permet d'activer le calcul de la matrice Jacobienne C IMODE = NIMODE C CALL RTGOES(ZPTB,PGOES,ZPS,ZT,ZQ, & ZTG,PANGL,ZLAT,ZO3OBS,NFLEV,PEMISGO, & KSURF,KNPF,ZVLEV,NIDSATGO(KSAT),KCNT,IMODE) C C C 9261 FORMAT(40I3) 9262 FORMAT(1X,10F8.3) 9263 FORMAT(1X,10F8.6) 9264 FORMAT(1X,10F8.6) 9265 FORMAT(1X,F8.3,1X,F8.6,1X,F8.6) C C C C** Next bunch ! c 285 KNPF = 0 DO I = 1, JPCHPFGO ZPTB (I) = 0. PGOES(I) = 0. c ZDTB (I) = 0. c ZTBO (I) = 0. ENDDO DO I = 1, JPPFGO DO J = 1, NFLEV ZT (I,J) = 0. ZQ (I,J) = 0. ZLQ (I,J) = 0. ZVLEV (I,J) = 0. ENDDO DO J = 1, JPCHGO PEMISGO(I,J) = 0. ENDDO ZLAT (I) = 0. ZPS (I) = 0. ZTG (I) = 0. PANGL(I) = 0. ENDDO C 290 CONTINUE C ENDIF 295 CONTINUE C C* 3. Close up C . -------- C 300 CONTINUE C NGOES = KCNT PJO = 0.0D0 * ** Printout of mean Jo and normalized average for each satellite. * 9000 FORMAT(//,10X,"-ROBSGOES: computing Jo and residuals to GOES" S ," observations") C 9001 CONTINUE RETURN END