!-------------------------------------- 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 sigmaopgl,22
#if defined (DOC)
*Author : Luc Fillion - ARMA/EC - May 2010 - Grdtyp = 'GU', lcva_hemis = .true. : For Regional system.
! N.B.: Amplification factor totally discarded here.
! N.B.: Validated only for Input fields defined on same Gaussian grid and dimensions as ni,nj.
*Author : Luc Fillion - ARMA/EC - 6 Aug 2010 - Improve naming of
* cletiket where we expect 3D global st-dev of basic gridpoint variables for background check.
*
*Revision:
#endif
IMPLICIT NONE
#include "comlun.cdk"
#include "comcst.cdk"
#include "pardim.cdk"
#include "comdim.cdk"
#include "comcva.cdk"
#include "comgem.cdk"
#include "comgd0.cdk"
#include "compstat.cdk"
#include "comgrd_param.cdk"
#include "comgemla.cdk"
!
logical llinterp
INTEGER JLAT, JLON
CHARACTER*8 CLETIKET,cletiket2
CHARACTER*1 CLTYPVAR,CLGRTYP
CHARACTER*2 CLNOMVAR
INTEGER IULSSF,IDATEO
INTEGER VFSTLIR,FSTPRM,FNOM,FSTOUV,FCLOS,FSTFRM
INTEGER IKEY,IERR,IDATE
integer ikind,ibrpstamp,fstinf
integer ip1_pak_trl,ip1_vco_trl
integer :: k,koutmpg ! the unit which has the selected records.
!
INTEGER INI,INJ,INK, INPAS, INBITS, IDATYP, IDEET
+ ,IP1,IP2,IP3,IG1,IG2,IG3,IG4,ISWA,ILENGTH,IDLTF
+ ,IUBC,IEXTR1,IEXTR2,IEXTR3
integer iini
integer jj,ig1tic,ig2tic,ig3tic,ig4tic
integer inlev,jk,ji,ezgdef_fmem,ezqkdef
integer igridid_glb,itargetid
integer iip1s_trl(jpnflev)
integer iip2,iip3
!
real zptop4, zpref4,zrcoef4,zdummy
!
!
real*8 z2dglb(ni,nj)
!
!!
!
!*1. Set global grid identifier and dimensions assumed present in the statistics file
! It is assumed the input st-dev are on a non-rotated Gaussian grid
! of same ni,nj
! --------------------------------------------------------------------------------
!
ibrpstamp = -1
cletiket = 'GDGUSDEV'
write(nulout,*) 'sigmaopgl: Look for etiket = ',CLETIKET
cltypvar = ' '
!
ikey = fstinf(nulbgst,ini,inj,ink,-1,cletiket,
& -1,-1,-1,' ','TT')
write(nulout,*) 'sigmaopgl: ini,inj = ',ini,inj
write(nulout,*) 'sigmaopgl: ni,nj = ',ni,nj
if(ini.ne.ni.or.inj.ne.nj) then
call abort3d
(nulout,'sigmaopgl: Input grid ini,inj not OK !!')
endif
!
! Get IP1 values from trial field
!
call getfldprm2
(IIP1S_TRL,IIP2,IIP3,INK,cletiket2,cltypvar
& ,igridid_glb,'TT',-1,nflev,nulbgst
& ,nulout,ip1_pak_trl,ip1_vco_trl,ntrials,koutmpg)
!
!*3. READ IN STANDARD DEVIATION FOR EACH OBSERVATION TYPE
! ----------------------------------------------------
!
IULSSF=NULBGST
!
IDATE = -1
IP1 = -1
IP2 = -1
IP3 = -1
CLTYPVAR =' '
!
CLNOMVAR = 'P0'
IKEY = VFSTLIR
(z2dglb,IULSSF,INI,INJ,INK,IDATE
& ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
!
DO JLAT = 1, INJ
DO JLON=1,INI
if(IG2 .eq. 0) then
GPS0(JLON,1,INJ-JLAT+1) = z2dglb(jlon,JLAT)*RMBTPA
else
GPS0(JLON,1,JLAT) = z2dglb(jlon,JLAT)*RMBTPA
endif
END DO
END DO
!
! Loop over Levels for each 3D Variables
! --------------------------------------
!
DO jk = 1, NFLEV
ip1 = iip1s_trl(jk)
!
CLNOMVAR = 'UU'
IKEY = VFSTLIR
(z2dglb,IULSSF,INI,INJ,INK,IDATE
& ,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 JLAT = 1, INJ
DO JLON=1,INI
if(IG2 .eq. 0) then
UT0(JLON,jk,INJ-JLAT+1) = (z2dglb(jlon,JLAT)/CONPHY(JLAT))*RMSKNT
else
UT0(JLON,jk,JLAT) = (z2dglb(jlon,JLAT)/CONPHY(JLAT))*RMSKNT
endif
END DO
END DO
!
CLNOMVAR = 'VV'
IKEY = VFSTLIR
(z2dglb,IULSSF,INI,INJ,INK,IDATE
& ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
!
DO JLAT = 1, INJ
DO JLON=1,INI
if(IG2 .eq. 0) then
VT0(JLON,jk,INJ-JLAT+1) = (z2dglb(jlon,JLAT)/CONPHY(JLAT))*RMSKNT
else
VT0(JLON,jk,JLAT) = (z2dglb(jlon,JLAT)/CONPHY(JLAT))*RMSKNT
endif
END DO
END DO
!
CLNOMVAR = 'ES'
IKEY = VFSTLIR
(z2dglb,IULSSF,INI,INJ,INK,IDATE
& ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
!
DO JLAT = 1, INJ
DO JLON=1,INI
if(IG2 .eq. 0) then
q0(JLON,jk,INJ-JLAT+1) = z2dglb(jlon,JLAT)
else
q0(JLON,jk,JLAT) = z2dglb(jlon,JLAT)
endif
END DO
END DO
!
CLNOMVAR = 'GZ' ! n.b. Being put into tt0 below....
IKEY = VFSTLIR
(z2dglb,IULSSF,INI,INJ,INK,IDATE
& ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
!
DO JLAT = 1, INJ
DO JLON=1,INI
if(IG2 .eq. 0) then
tt0(JLON,jk,INJ-JLAT+1) = z2dglb(jlon,JLAT)*RG*10.
else
tt0(JLON,jk,JLAT) = z2dglb(jlon,JLAT)*RG*10.
endif
END DO
END DO
END DO ! end loop on jk
!
call bilin
!cluc call bilin_sigmab
CALL TRQTOES
!cluc CALL TRTTOGZ j'ai deja rempli gomgz et gomtt proprement...
!
! SET THE FIRST-GUESS ERRORS FOR CONVENTIONAL DATA ON PRESSURE LEVELS
! --------------------------------------------------------------------
!
CALL SETFGEFAM
('AI')
CALL SETFGEFAM
('SW')
CALL SETFGEFAM
('UA')
CALL SETFGEFAM
('SF')
CALL SETFGEFAM
('HU')
CALL SETFGEFAMZ
('PR')
!
! SET THE FIRST-GUESS ERRORS FOR RADIO OCCULTATION DATA
! -----------------------------------------------------
!
CALL SETFGEDIF
('RO')
C
C DO TEMPERATURE FIRST-GUESS ERROR
C ---------------------------------
C
CLNOMVAR = 'TT'
IKEY = VFSTLIR
(z2dglb,IULSSF,INI,INJ,INK,IDATE
& ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
!
DO JLAT = 1, INJ
DO JLON=1,INI
if(IG2 .eq. 0) then
tt0(JLON,jk,INJ-JLAT+1) = z2dglb(jlon,JLAT)
else
tt0(JLON,jk,JLAT) = z2dglb(jlon,JLAT)
endif
END DO
END DO
!
CALL SETFGETT
!
! SET THE FIRST-GUESS ERRORS FOR THE SURFACE DATA
! ------------------------------------------------
!
CALL SETFGESURF
! READ IN LN Q FIRST-GUESS ERRORS FOR SETFGEGPS
! ---------------------------------------------
!
CLNOMVAR = 'LQ'
!
DO jk = 1, NFLEV
IKEY = VFSTLIR
(z2dglb,IULSSF,INI,INJ,INK,IDATE
& ,CLETIKET,IP1,IP2,IP3,CLTYPVAR,CLNOMVAR)
!
DO JLAT = 1, inj
DO JLON=1, ini
if(IG2 .eq. 0) then
Q0(JLON,jk,INJ-JLAT+1) = z2dglb(jlon,JLAT)
else
Q0(JLON,jk,JLAT) = z2dglb(jlon,JLAT)
endif
END DO
END DO
END DO
!
CALL bilin
!cluc CALL bilin_sigmab
!
! SET THE FIRST-GUESS ERRORS FOR GB-GPS ZTD DATA
! ----------------------------------------------
!
CALL SETFGEGPS
!
!
RETURN
END