subroutine su1obsbg 1,13
*
#if defined (DOC)
*
***s/r su1obsbg - Get first guess fields on analysis grid and store in
* in GOMOBSG for ONEOBS
*
*Author : M. Buehner *ARMA/MSC - nov 2001
*Revision: C. Charette *ARMA/MSC - jun 2002
* - replaced subackgrd by subasic
* M. Buehner *ARMA/MSC - jan 2003
* - fixed bugs for reading in bg field
* C. Charette - ARMA/SMC - Sep. 2004
* - Conversion to hybrid vertical coordinate
* Y. Yang and Y. Rochon MSC Apr.2004
* - Added include "comchem.cdk" for chemistry
* - Added treatment for ozone and other chemical species
*
* -------------------
** Purpose: Setup for Project Background statistics into observation space
* . using first guess for background fields
*Arguments
*
#endif
C
IMPLICIT NONE
*implicits
#include "pardim.cdk"
#include "comdim.cdk"
#include "comlun.cdk"
#include "comcst.cdk"
#include "comdimo.cdk"
#include "commvog.cdk"
#include "commvo.cdk"
#include "comgem.cdk"
#include "comgdpar.cdk"
#include "rpnstd.cdk"
#include "comnumbr.cdk"
#include "cvcord.cdk"
#include "comchem.cdk"
C
INTEGER jlev,ji,jj,ILAT,ilon,igdgid,ezqkdef
INTEGER ILEN,IDATA,JDATA,IDATA2
INTEGER nn, kk
REAL*8 ZTRANS(NI,NJ,NFLEV),ZTRANS2(NI,NFLEV,NJ),
+ zvvg(ni,nj,nflev),ZTRANS2D(NI,1,NJ)
REAL*8 ZPS(1)
POINTER (PXTRANS,ZTRANS),(PXTRANS2,ZTRANS2),(PXTRANS2D,ZTRANS2D),
+ (pxvvg,zvvg),(pxps,zps)
C
EXTERNAL ABORT3D
*-----------------------------------------------------------
WRITE(NULOUT,FMT='(/,4X,"Starting SU1OBSBG",//)')
igdgid = ezqkdef(ni, nj, 'G', 0,0,0,0,0)
C
C* 2 Allocate space for the buffers
C -----------------------------
C
200 CONTINUE
CALL HPALLOC(PXTRANS ,MAX(ni*nj*nflev,1),IERR,8)
CALL HPALLOC(PXTRANS2 ,MAX(ni*nj*nflev,1),IERR,8)
CALL HPALLOC(PXTRANS2D,MAX(ni*nj,1),IERR,8)
CALL HPALLOC(PXvvg,max(ni*nj*nflev,1),IERR,8)
CALL HPALLOC(PXps,max(ni*nj,1),IERR,8)
C
C* 3. Read desired fields
C . -------------------
C
c Temperature
c
write(nulout,*)'reading TT'
CLNOMVAR = 'TT'
call vhfstfld
(ztrans,ni*nj,igdgid,zvvg,ni*nj,igdgid,nflev
& ,vhybinc,clnomvar,nbrpstamp,ninmpg,nulout,jpnflev,.true.
& ,'LINEAR')
CALL INITGDG2
(ztrans2,ztrans,NI,NJ,NFLEV,0,CLNOMVAR)
do JLEV = 1,NFLEV
IDATA=0
do JI=1,NI
do JJ = 1, NJ
IDATA=IDATA+1
gomtg(JLEV,IDATA) = ZTRANS2(JI,JLEV,JJ)
enddo
enddo
enddo
c
c Geopotential Height
c
write(nulout,*)'reading GZ'
call vflush(nulout)
CLNOMVAR = 'GZ'
call vhfstfld
(ztrans,ni*nj,igdgid,zvvg,ni*nj,igdgid,nflev
& ,vlev,clnomvar,nbrpstamp,ninmpg,nulout,jpnflev,.true.
& ,'LINEAR')
C
CALL INITGDG2
(ztrans2,ztrans,NI,NJ,NFLEV,0,CLNOMVAR)
c
do JLEV = 1,NFLEV
IDATA=0
do JI=1,NI
do JJ = 1, NJ
IDATA=IDATA+1
gomgzg(JLEV,IDATA) = ZTRANS2(JI,JLEV,JJ)
enddo
enddo
enddo
c
c Specific humidity
c
write(nulout,*)'reading HU'
CLNOMVAR = 'HU'
call vhfstfld
(ztrans,ni*nj,igdgid,zvvg,ni*nj,igdgid,nflev
& ,vhybinc,clnomvar,nbrpstamp,ninmpg,nulout,jpnflev,.true.
& ,'LINEAR')
CALL INITGDG2
(ztrans2,ztrans,NI,NJ,NFLEV,0,CLNOMVAR)
do JLEV = 1,NFLEV
IDATA=0
do JI=1,NI
do JJ = 1, NJ
IDATA=IDATA+1
gomqg(jlev,IDATA) = log(max(ZTRANS2(JI,JLEV,JJ),rminhu))
if(gomqg(jlev,idata).gt.1000.0)
+ write(nulout,*) 'LOG HU=',jlev,idata,gomqg(jlev,idata)
enddo
enddo
enddo
c
c U-component
c
write(nulout,*)'reading UU and VV'
CLNOMVAR = 'UU'
call vhfstfld
(ztrans,ni*nj,igdgid,zvvg,ni*nj,igdgid,nflev
& ,vhybinc,'UV',nbrpstamp,ninmpg,nulout,jpnflev,.true.
& ,'LINEAR')
CALL INITGDG2
(ztrans2,ztrans,NI,NJ,NFLEV,0,CLNOMVAR)
do JLEV = 1,NFLEV
IDATA=0
do JI=1,NI
do JJ = 1, NJ
IDATA=IDATA+1
gomug(jlev,IDATA) = ZTRANS2(JI,JLEV,JJ)*CONPHY(JJ)
enddo
enddo
enddo
c
c V wind component
c
CLNOMVAR = 'VV'
CALL INITGDG2
(ztrans2,zvvg,NI,NJ,NFLEV,0,CLNOMVAR)
do JLEV = 1,NFLEV
IDATA=0
do JI=1,NI
do JJ = 1, NJ
IDATA=IDATA+1
gomvg(jlev,IDATA) = ZTRANS2(JI,JLEV,JJ)*CONPHY(JJ)
enddo
enddo
enddo
c
c Surface pressure
c
write(nulout,*)'reading P0'
CLNOMVAR = 'P0'
call vhfstfld
(ztrans,ni*nj,igdgid,zvvg,ni*nj,igdgid,1
& ,vhybinc,clnomvar,nbrpstamp,ninmpg,nulout,jpnflev,.true.
& ,'LINEAR')
CALL INITGDG2
(ZTRANS2D,ZTRANS,NI,NJ,1,0,CLNOMVAR)
IDATA=0
do JI=1,NI
do JJ = 1, NJ
IDATA=IDATA+1
gompsg(1,IDATA) = ZTRANS2D(JI,1,JJ)
zps(idata) = gompsg(1,IDATA)
enddo
enddo
c
c TEMPORARY: SET ALL BG GRIDPOINTS TO VALUES AT OBS LOCATION
c IDATA = ((NI1OBSLO-1)*NJ)+NI1OBSLA
c do JLEV = 1,NFLEV
c do IDATA2=1,NOBTOT
c gomug(jlev,IDATA2) = gomug(jlev,IDATA)
c gomvg(jlev,IDATA2) = gomvg(jlev,IDATA)
c gomtg(jlev,IDATA2) = gomtg(jlev,IDATA)
c gomqg(jlev,IDATA2) = gomqg(jlev,IDATA)
c gomgzg(jlev,IDATA2)= gomgzg(jlev,IDATA)
c enddo
c enddo
c do IDATA2=1,NOBTOT
c gompsg(1,IDATA2) = gompsg(1,IDATA)
c enddo
C
C Setup RPPOBS, RMTMOBS, other variable types in gomobsg
C
do ji = 1,nobtot
zps(ji) = gompsg(1,ji)
enddo
call calcpres(RPPOBS(1,1),vhybinc,nflev,zps,rptopinc
& ,rprefinc,rcoefinc,nobtot)
DO JI=1, NOBTOT
RMTMOBS(JI) = gomgzg(nflev,ji)
enddo
c
c Chemistry species
c
do kk= 1, NFSTVAR
DO NN= 1, NOCMT
IF(CFSTVAR(kk).EQ.CMVOCMT(NN)) THEN
write(nulout,*)'reading ', CFSTVAR(kk)
CLNOMVAR = CFSTVAR(kk)
call vhfstfld
(ztrans,ni*nj,igdgid,zvvg,ni*nj,igdgid,nflev
& ,vhybinc,clnomvar,nbrpstamp,ninmpg,nulout,jpnflev,.true.
& ,'LINEAR')
CALL INITGDG2
(ztrans2,ztrans,NI,NJ,NFLEV,0,CLNOMVAR)
do JLEV = 1,NFLEV
IDATA=0
do JI=1,NI
do JJ = 1, NJ
IDATA=IDATA+1
gomtrg((NN-1)*nflev+jlev,IDATA) = ZTRANS2(JI,JLEV,JJ)
enddo
enddo
enddo
ENDIF
ENDDO
enddo !nfstvar
C
call subasic_obs
call preobs
C
C* 4. Close the file and release memory
C . ---------------------------------
C
call hpdeallc(pxvvg,ierr,1)
CALL HPDEALLC(PXTRANS ,IERR,1)
CALL HPDEALLC(PXTRANS2 ,IERR,1)
CALL HPDEALLC(PXTRANS2D,IERR,1)
C
RETURN
END