SUBROUTINE SIGMAOP 2,29
#if defined (DOC)
*Author : P. Koklas CMDA/SMC
*
*Revision:
* JM Belanger CMDA/SMC Jan 2001
* . 32 bits conversion
* C Charette ARMA/SMC Oct 2001
* . Replace logical unit NULSTAT by NULBGST
* S. Pellerin *ARMA/SMC nov. 2001
* . reordering of declaration dependencies (for Linux compilation)
* Y. Yang Nov. 2003
* . Added reading for background ozone and other species.
* . Changed calls from BILIN to NEWBILIN.
* J. St-James *CMDA/SMC - July 2003
* . Add code for profiler data
* J.M. Aparicio *ARMA/MSC* October 2006
* . Adapt for GPSRO
*
* Y.J. Rochon ARQX/EC Feb 2006
* . Use of NULBGSTR for 'TR' family.
* . Added call to ch_setfge for 'TR' family.
* Y.J. Rochon ARQX/EC Feb 2007
* . Changes for allowance of water vapour obs in
* 'TR' family. Requires LQ std. dev. instead of
* ES std. dev.
* Y.J. Rochon ARQX/EC June 2010
* . Updated use of DAMPLIBG for GTR0 and PS0
*
#endif
IMPLICIT NONE
#include "comlun.cdk"
#include "comcst.cdk"
#include "pardim.cdk"
#include "comdim.cdk"
#include "comchem.cdk"
#include "comstate.cdk"
#include "comgem.cdk"
#include "comgd0.cdk"
#include "compstat.cdk"
INTEGER JLAT, JLON ,J
CHARACTER*12 CLETIKET
CHARACTER*2 CLTYPVAR
CHARACTER*1 CLGRTYP
CHARACTER*4 CLNOMVAR
INTEGER IULSSF,IDATEO
INTEGER VFSTLIR,FSTPRM,FNOM,FSTOUV,FCLOS,FSTFRM
INTEGER IKEY,ILEN,IERR,IDATE
REAL*8 ZBUFFER(NJ,NFLEV),ZTRANS(NI,NJ),ZJO
POINTER (PXZBUFFER,ZBUFFER),(PXTRANS,ZTRANS)
INTEGER INI,INJ,INK, INPAS, INBITS, IDATYP, IDEET
+ ,IP1,IP2,IP3,IG1,IG2,IG3,IG4,ISWA,ILENGTH,IDLTF
+ ,IUBC,IEXTR1,IEXTR2,IEXTR3
INTEGER LL, NLEV
C----------------------------------------------------------------------
ILEN = NJ*NFLEV
CALL HPALLOC(PXZBUFFER,MAX(1,ILEN),IERR,8)
ILEN = NJ*NI
CALL HPALLOC(PXTRANS,MAX(1,ILEN),IERR,8)
C
C 1. Opening the statistics file
C
IULSSF=NULBGST
C
C . 2.1 Background error standard deviations
C
CLETIKET = 'STDDEV'
IDATE = -1
IP1 = -1
IP2 = -1
IP3 = -1
CLTYPVAR =' '
ILEN = (NJEND -NJBEG +1)*NKGDIM
C
C READ IN STANDARD DEVIATION FOR EACH OBSERVATION TYPE
C
CLNOMVAR = 'UU'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
S ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
IERR = FSTPRM(IKEY,IDATEO,IDEET,INPAS
+ ,INI,INJ,INK, INBITS, IDATYP
+ ,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR,CLETIKET,CLGRTYP
+ ,IG1,IG2,IG3,IG4,ISWA,ILENGTH,IDLTF
+ ,IUBC,IEXTR1,IEXTR2,IEXTR3)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
ZTRANS(JLON,JLAT) = ZBUFFER(JLAT,J)*RMSKNT
if(IG2 .eq. 0) then
UT0(JLON,J,INJ-JLAT+1) =
1 (ZBUFFER(JLAT,J)/CONPHY(JLAT))*RMSKNT
else
UT0(JLON,J,JLAT) =
1 (ZBUFFER(JLAT,J)/CONPHY(JLAT))*RMSKNT
endif
END DO
END DO
END DO
C
CLNOMVAR = 'VV'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
ZTRANS(JLON,JLAT) = ZBUFFER(JLAT,J)*RMSKNT
if(IG2 .eq. 0) then
VT0(JLON,J,INJ-JLAT+1) = (ZBUFFER(JLAT,J)/CONPHY(JLAT))*RMSKNT
else
VT0(JLON,J,JLAT) = (ZBUFFER(JLAT,J)/CONPHY(JLAT))*RMSKNT
endif
END DO
END DO
END DO
CLNOMVAR = 'ES'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
Q0(JLON,J,INJ-JLAT+1) = ZBUFFER(JLAT,J)
else
Q0(JLON,J,JLAT) = ZBUFFER(JLAT,J)
endif
ZTRANS(JLON,JLAT) = ZBUFFER(JLAT,J)
END DO
END DO
END DO
CLNOMVAR = 'GZ'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
TT0(JLON,J,INJ-JLAT+1) = ZBUFFER(JLAT,J)*RG*10.
else
TT0(JLON,J,JLAT) = ZBUFFER(JLAT,J)*RG*10.
endif
ZTRANS(JLON,JLAT) = ZBUFFER(JLAT,J)
END DO
END DO
END DO
C
C Apply 3D amplification factor
C
DO JLAT = 1, NJ
DO J = 1, NFLEV
DO JLON = 1, NI
UT0(JLON,J,JLAT)=
+ UT0(JLON,J,JLAT)*damplibg(JLON,J,JLAT)
VT0(JLON,J,JLAT)=
+ VT0(JLON,J,JLAT)*damplibg(JLON,J,JLAT)
cbue comment out, because tuning is for LQ, not ES
cbue Q0(JLON,J,JLAT)=
cbue + Q0(JLON,J,JLAT)*damplibg(JLON,J+3*NFLEV,JLAT)
END DO
END DO
END DO
C
C* Background species
C
DO LL = 1, NGCMT
CLNOMVAR = CGCMT(LL)
IF(NGEXIST(NGTR(LL)) .EQ. 1) THEN
if (NULBGSTR.EQ.0)
& CALL ABORT3D(NULOUT,
& 'SIGMAOP: NO SPECIES BACKGROUND STAT FILE!!')
IKEY = VFSTLIR
(ZBUFFER,NULBGSTR,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
NLEV = (LL-1)*NFLEV
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
GTR0(JLON,NLEV+J,INJ-JLAT+1) = ZBUFFER(JLAT,J)
else
GTR0(JLON,NLEV+J,JLAT) = ZBUFFER(JLAT,J)
endif
ZTRANS(JLON,JLAT) = ZBUFFER(JLAT,J)
END DO
END DO
END DO
C
C Apply 3D amplification factor
C
GTR0(1:NI,1+NLEV:NFLEV+NLEV,1:NJ)=GTR0(1:NI,1+NLEV:NFLEV+NLEV,1:NJ)
1 *DAMPLIBG(1:NI,1+(LL-1+4)*NFLEV:NFLEV+(LL-1+4)*NFLEV,1:NJ)
C
ENDIF
ENDDO
c CALL BILIN
CALL NEWBILIN
CALL TRQTOES
CALL TRTTOGZ
C
C SET THE FIRST-GUESS ERRORS FOR CONVENTIONAL DATA ON PRESSURE LEVELS
C --------------------------------------------------------------------
C
CALL SETFGEFAM
('AI')
CALL SETFGEFAM
('SW')
CALL SETFGEFAM
('UA')
CALL SETFGEFAM
('SF')
CALL SETFGEFAM
('HU')
CALL SETFGEFAMZ
('PR')
C
C SET THE FIRST-GUESS ERRORS FOR RADIO OCCULTATION DATA
C -----------------------------------------------------
C
CALL SETFGEDIF
('RO')
C
C SET THE FIRST-GUESS ERRORS FOR 'TR' FAMILY DATA
C -----------------------------------------------
C
C 'TR' family (mostly chemical species obs)
C
C First reload with LQ std. dev. instead of ES std. dev.
C in case it is needed for water vapour obs.
C
CLNOMVAR = 'LQ'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
Q0(JLON,J,INJ-JLAT+1) = ZBUFFER(JLAT,J)
else
Q0(JLON,J,JLAT) = ZBUFFER(JLAT,J)
endif
END DO
END DO
END DO
call gd2mvo
('Q0',nflev)
C
CALL CH_SETFGE
C
C DO TEMPERATURE FIRST-GUESS ERROR
C ---------------------------------
C
CLNOMVAR = 'TT'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
TT0(JLON,J,INJ-JLAT+1) = ZBUFFER(JLAT,J)
else
TT0(JLON,J,JLAT) = ZBUFFER(JLAT,J)
endif
ZTRANS(JLON,JLAT) = ZBUFFER(JLAT,J)
END DO
END DO
END DO
C
C Apply 3D amplification factor
C
DO JLAT = 1, NJ
DO J = 1, NFLEV
DO JLON = 1, NI
TT0(JLON,J,JLAT)=
+ TT0(JLON,J,JLAT)*damplibg(JLON,J+2*NFLEV,JLAT)
END DO
END DO
END DO
CALL BILIN
CALL SETFGETT
C
C
C DO SATEM FIRST-GUESS ERROR
C --------------------------
C
CLNOMVAR = 'DZ'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, INK
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
TT0(JLON,J,INJ-JLAT+1) = ZBUFFER(JLAT,J)*10.
else
TT0(JLON,J,JLAT) = ZBUFFER(JLAT,J)*10.
endif
ZTRANS(JLON,JLAT) = ZBUFFER(JLAT,J)
END DO
END DO
END DO
CALL BILIN
call trttogz
CALL SETFGEST
C
C RELOAD DATA TO DO SURFACE FIRST-GUESS ERRORS
C ---------------------------------------------
C
CLNOMVAR = 'P0'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, INK
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
GPS0(JLON,J,INJ-JLAT+1) = ZBUFFER(JLAT,J)*RMBTPA
else
GPS0(JLON,J,JLAT) = ZBUFFER(JLAT,J)*RMBTPA
endif
END DO
END DO
END DO
C
CLNOMVAR = 'UU'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
UT0(JLON,J,INJ-JLAT+1) = (ZBUFFER(JLAT,J)/CONPHY(JLAT))*RMSKNT
else
UT0(JLON,J,JLAT) = (ZBUFFER(JLAT,J)/CONPHY(JLAT))*RMSKNT
endif
END DO
END DO
END DO
CLNOMVAR = 'VV'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
VT0(JLON,J,INJ-JLAT+1) = (ZBUFFER(JLAT,J)/CONPHY(JLAT))*RMSKNT
else
VT0(JLON,J,JLAT) = (ZBUFFER(JLAT,J)/CONPHY(JLAT))*RMSKNT
endif
END DO
END DO
END DO
CLNOMVAR = 'TT'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
TT0(JLON,J,INJ-JLAT+1) = ZBUFFER(JLAT,J)
else
TT0(JLON,J,JLAT) = ZBUFFER(JLAT,J)
endif
END DO
END DO
END DO
CLNOMVAR = 'ES'
IKEY = VFSTLIR
(ZBUFFER,IULSSF,INI,INJ,INK,IDATE
+ ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
DO J = 1, NFLEV
DO JLAT = 1, NJ
DO JLON=1,NI
if(IG2 .eq. 0) then
Q0(JLON,J,INJ-JLAT+1) = ZBUFFER(JLAT,J)
else
Q0(JLON,J,JLAT) = ZBUFFER(JLAT,J)
endif
END DO
END DO
END DO
C
C Apply 3D amplification factor
C
DO JLAT = 1, NJ
DO JLON = 1, NI
GPS0(JLON,1,JLAT) =
+ GPS0(JLON,1,JLAT)*damplibg(JLON,1+(nvgd+nvgaux)*NFLEV,JLAT)
END DO
END DO
DO JLAT = 1, NJ
DO J = 1, NFLEV
DO JLON = 1, NI
UT0(JLON,J,JLAT)=
+ UT0(JLON,J,JLAT)*damplibg(JLON,J,JLAT)
VT0(JLON,J,JLAT)=
+ VT0(JLON,J,JLAT)*damplibg(JLON,J,JLAT)
TT0(JLON,J,JLAT)=
+ TT0(JLON,J,JLAT)*damplibg(JLON,J+2*NFLEV,JLAT)
cbue comment out, because tuning is for LQ, not ES
cbue Q0(JLON,J,JLAT)=
cbue + Q0(JLON,J,JLAT)*damplibg(JLON,J+3*NFLEV,JLAT)
END DO
END DO
END DO
CALL BILIN
C
C SET THE FIRST-GUESS ERRORS FOR THE SURFACE DATA
C ------------------------------------------------
C
CALL SETFGESURF
C
CALL HPDEALLC(PXZBUFFER,IERR,1)
CALL HPDEALLC(PXTRANS,IERR,1)
RETURN
END