!-------------------------------------- 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 SUCOVO 1,27
#if defined (DOC)
*
*s/r SUCOVO -SET OBSERVATION ERROR
*
*Author : P. Koclas *CMC/AES April 1996
*Revision:
* . S. Pellerin *ARMA/AES Sept 97.
* - Change from TT to GZ states variable
* - Control of the different model state of the 3Dvar
* through COMSTATE, COMSTATEC and COMSTNUM common
* blocks variables (comstate.cdk).
* . S. Pellerin *ARMA/AES June 98.
* - Bug fix to the opening of stat file
* Now the logical unit NULSTAT is specified and binded to
* the stat file in sulun.
* . C. Charette *ARMA/AES Sept 98.
* - Pressure levels in Pascal (nilv,nislv,nihulv)
* - No more dependence on the vector vlev
* from the namelist
* . P. Koclas *CMC/CMDA June 99.
* - Y2K
* . P. Koclas *CMC/CMDA dec 99.
* - Lowered ERRORS FOR ACARS ADS TEMPERATURES
* - Code for upper air temperature observation errors.
* . R. Sarrazin *CMC/CMDA Feb 2000
* - change the obs errors
* . C. Charette *ARMA/AES jun 2000.
* - Added surface elements
* 11215,11216,12004,12203,10004,10051
* - Added table of observation errors std for sfc elements
* Based on values from ECMWF Tech. Memo no.241
* JM Belanger CMDA/SMC Oct 2000
* . 32 bits conversion
* (obs error variances as double precision constants)
* . R. Sarrazin *CMC/CMDA Jul 2001
* - change the obs errors of satwinds
* . C. Charette *ARMA/AES Dec 2001.
* - Added idburp 34,37,38,159,sucovo.ftn__Version1,162 in IDLISTUA
* JM Belanger CMDA/SMC Dec 2003
* . Set observation error std dev for Quisckat
* (codtyp = 254)
* . R. Sarrazin *CMC March 2004.
* - initialisation of xstdevlv for satwinds errors
* . R. Sarrazin *CMC July 2008.
* - change errors of satwinds
* R. Sarrazin, Nov 2006
* - include ES error values for AI family
*
** Purpose:
* -initialize observation error standard deviations
* and vertical error correlation matrices
*
*Arguments
* none
*
#endif
C
IMPLICIT NONE
*implicits
#include "comlun.cdk"
#include "comcst.cdk"
#include "comnumbr.cdk"
#include "comstato.cdk"
*
C
REAL*8 ZEIGENV(JPRLEV),ZEIGEN(JPRLEV,JPRLEV),ZEIGMIN,ZALPHA
REAL*8 ZPROJ(JPRLEV,JPRLEV)
REAL*8 ZVCOR(JPRLEV,JPRLEV),UVCOR(JPRLEV,JPRLEV),
$ ESVCOR(JPRLEV,JPRLEV)
REAL*8 PHISTD(JPRLEV,JPBANDS),USTD(JPRLEV,JPBANDS),
$ ESSTD(JPRLEV,JPBANDS),TTSTD(JPRLEV,JPBANDS)
REAL*8 DZCOR(JPSALEV,JPSALEV)
REAL*8 HUCOR(JPHLEV ,JPHLEV)
*
INTEGER IDUM,IERR,IKEY,JTYP
INTEGER INI,INJ,INK,IDATE,ISTAMP,IDT,INP
INTEGER IP1,IP2,IP3
INTEGER IJ,JI,J
REAL*8 DHEURES
CHARACTER*1 CTYPVAR,CGRTYP
CHARACTER*2 CNOMVAR
CHARACTER*8 CETIKET,CETIKETV
CHARACTER*1 CTVAR
CHARACTER*2 CNVAR
LOGICAL LLPRESNT,LLOK,LLPROB,LLTT
INTEGER FSTLIR,VFSTLIR,FSTPRM
EXTERNAL FSTLIR,VFSTLIR,FSTPRM
C
INTEGER JPMXIDUA
PARAMETER (JPMXIDUA=23)
INTEGER IDLISTUA(JPMXIDUA)
DATA IDLISTUA/ 32, 33, 34, 35, 36, 37, 38, 135, 136, 137, 138
& ,139, 140 ,141 ,142 ,150, 151, 152, 153
& ,159, 160, 161, 162 /
C
INTEGER JLEV,JBAND,JN,JELM,JID,IID
INTEGER ILYR,ILEMU,ILEMV,ILEMGZ,ILEMTT,ILEMES
INTEGER ILEMUS,ILEMVS,ILEMTS,ILEMESS,ILEMPS,ILEMPN
REAL*8 ZLYR, ZLEV, ZCONGZ
INTEGER IFIND
C
C
C AIREP : ASDAR : SATOB
C ---------------------
C STANDARD DEVIATIONS TABLES (FROM OI CODE:DORES)
C -----------------------------------------------------
C Kts**2 Dam**2 DEG**2 DEG**2
C
DATA (XSTDEV(J,1),J=1,5)/25.0D0,100.0D0,-5000.D0,4.50D0,-5000.D0/
DATA (XSTDEV(J,2),J=1,5)/36.0D0,49.0D0,-5000.D0,3.00D0,9.0D0/
DATA (XSTDEV(J,3),J=1,5)/25.0D0,36.0D0,-5000.D0,1.50D0,5.0D0/
DATA (XSTDEV(J,4),J=1,5)/49.D0,49.D0, .36D0, 2.25D0, 9.0D0/
C
DATA (XSTDEVLV(J,1),J=1,10)/2.5D0,2.5D0,3.0D0,4.0D0,4.5D0,
& 5.0D0,5.5D0,5.5D0,5.5D0,6.0D0/
DATA (XSTDEVLV(J,2),J=1,10)/1000.0D0,850.0D0,700.0D0,500.0D0,
& 400.0D0,300.0D0,250.0D0,200.0D0,
& 150.0D0,100.0D0/
C
C CONVERSION FACTORS:
C
C TO GEOPOTENTIAL
C ---------------
ZCONGZ=RG
C ---------------
C
C*0. DEFAULT VALUES
C ----------------
C
ILEMGZ=IFIND
( NEGZ )
ILEMU=IFIND
( NEUU )
ILEMV=IFIND
( NEVV )
ILEMTT=IFIND
( NETT )
ILEMES=IFIND
( NEES )
C
ILEMUS=IFIND
( NEUS )
ILEMVS=IFIND
( NEVS )
ILEMTS=IFIND
( NETS )
ILEMESS=IFIND
( NESS )
ILEMPS=IFIND
( NEPS )
ILEMPN=IFIND
( NEPN )
C
DO JELM =1,JPNBRELEM
DO JID =1,JPIDBRP
XSFCOBERR(JELM,1,JID) = -1
END DO
END DO
C
DO JBAND =1,JPBANDS
DO JLEV =1,JPRLEV
IF(ILEMU .NE. -1) XOSTDEV( ILEMU, JLEV,JBAND)= 2.235764D0
IF(ILEMV .NE. -1) XOSTDEV( ILEMV, JLEV,JBAND)= 2.235764D0
IF(ILEMGZ .NE. -1) XOSTDEV( ILEMGZ,JLEV,JBAND)= 0.75D0
IF(ILEMTT .NE. -1) XOSTDEV( ILEMTT,JLEV,JBAND)= .82462113D0
IF(ILEMES .NE. -1) XOSTDEV( ILEMES,JLEV,JBAND)= 3.00D0
END DO
END DO
C
C The following std(us,vs,ts,ps,pn) are taken or are derived from
C ECMWF Tech. Memo no.241
C "The ECMWF implementation of three dimensional variational
C assimilation Part I: Formulation" (P.Courtier and al. 1997)
C Units are: US,VS---> M/S
C TS ---> K
C ESS ---> K
C PS,PN---> PA
C We assume that the values for wind in the ECMWF document are
C for the wind vector. We want values for the wind component.
DO JELM =1,JPNBRELEM
IF(ILEMUS .NE. -1 .AND. ILEMVS .NE. -1) THEN
XSFCOBERR( ILEMUS,1,12) = 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,12) = 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMUS,1,13) = 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,13) = 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMUS,1,14) = 2.4D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,14) = 2.4D0/SQRT(2.0D0)
XSFCOBERR( ILEMUS,1,18) = 2.4D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,18) = 2.4D0/SQRT(2.0D0)
XSFCOBERR( ILEMUS,1,145)= 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,145) = 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMUS,1,146) = 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,146) = 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMUS,1,147) = 2.4D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,147) = 2.4D0/SQRT(2.0D0)
XSFCOBERR( ILEMUS,1,254) = 2.4D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,254) = 2.4D0/SQRT(2.0D0)
DO JID =1,JPMXIDUA
IID = IDLISTUA(JID)
XSFCOBERR( ILEMUS,1,IID) = 3.0D0/SQRT(2.0D0)
XSFCOBERR( ILEMVS,1,IID) = 3.0D0/SQRT(2.0D0)
END DO
ENDIF
IF(ILEMTS .NE. -1 ) THEN
XSFCOBERR( ILEMTS,1,12) = 2.0D0
XSFCOBERR( ILEMTS,1,13) = 1.8D0
XSFCOBERR( ILEMTS,1,14) = 1.8D0
XSFCOBERR( ILEMTS,1,18) = 1.8D0
XSFCOBERR( ILEMTS,1,145)= 1.8D0
XSFCOBERR( ILEMTS,1,146)= 2.0D0
XSFCOBERR( ILEMTS,1,147)= 1.8D0
DO JID =1,JPMXIDUA
IID = IDLISTUA(JID)
XSFCOBERR( ILEMTS,1,IID) = 1.8D0
END DO
ENDIF
IF(ILEMESS .NE. -1 ) THEN
XSFCOBERR( ILEMESS,1,12) = 3.0D0
XSFCOBERR( ILEMESS,1,13) = 3.0D0
XSFCOBERR( ILEMESS,1,14) = 3.0D0
XSFCOBERR( ILEMESS,1,18) = 3.0D0
XSFCOBERR( ILEMESS,1,145)= 3.0D0
XSFCOBERR( ILEMESS,1,146)= 3.0D0
XSFCOBERR( ILEMESS,1,147)= 3.0D0
DO JID =1,JPMXIDUA
IID = IDLISTUA(JID)
XSFCOBERR( ILEMESS,1,IID) = 3.0D0
END DO
ENDIF
IF(ILEMPS .NE. -1 ) THEN
ccc XSFCOBERR( ILEMPS,1,12) = SQRT((0.7*0.7)/(0.8*0.8))*100.
XSFCOBERR( ILEMPS,1,12) =
$ SQRT((0.6D0*0.6D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPS,1,13) =
$ SQRT((1.4D0*1.4D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPS,1,14) =
$ SQRT((1.15D0*1.15D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPS,1,18) =
$ SQRT((1.15D0*1.15D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPS,1,145)=
$ SQRT((1.4D0*1.4D0)/(0.8D0*0.8D0))*100.D0
ccc XSFCOBERR( ILEMPS,1,146)= SQRT((0.7*0.7)/(0.8*0.8))*100.
XSFCOBERR( ILEMPS,1,146)=
$ SQRT((0.6D0*0.6D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPS,1,147)=
$ SQRT((1.4D0*1.4D0)/(0.8D0*0.8D0))*100.D0
DO JID =1,JPMXIDUA
IID = IDLISTUA(JID)
XSFCOBERR( ILEMPS,1,IID) =
$ SQRT((0.7D0*0.7D0)/(0.8D0*0.8D0))*100.D0
END DO
ENDIF
IF(ILEMPN .NE. -1 ) THEN
XSFCOBERR( ILEMPN,1,12) =
$ SQRT((0.7D0*0.7D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPN,1,13) =
$ SQRT((1.4D0*1.4D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPN,1,14) =
$ SQRT((1.15D0*1.15D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPN,1,18) =
$ SQRT((1.15D0*1.15D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPN,1,145)=
$ SQRT((1.4D0*1.4D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPN,1,146)=
$ SQRT((0.7D0*0.7D0)/(0.8D0*0.8D0))*100.D0
XSFCOBERR( ILEMPN,1,147)=
$ SQRT((1.4D0*1.4D0)/(0.8D0*0.8D0))*100.D0
DO JID =1,JPMXIDUA
IID = IDLISTUA(JID)
XSFCOBERR( ILEMPN,1,IID) =
$ SQRT((0.7D0*0.7D0)/(0.8D0*0.8D0))*100.D0
END DO
ENDIF
END DO
LLPROB=.FALSE.
LLTT = .TRUE.
IP1=-1
IP2=-1
IP3=1
C
C*1. READ LEVELS FROM FILE
C ---------------------
C
100 CONTINUE
C
CETIKET='RAOBOERR'
CTYPVAR='K'
CNOMVAR='LV'
IKEY=FSTLIR(NILV,NULSTAT,INI,INJ,INK,-1,CETIKET,IP1,IP2,IP3,
+ CTYPVAR,CNOMVAR)
LLPRESNT = (IKEY .GE. 0)
if(llpresnt) then
IERR = FSTPRM (IKEY,ISTAMP,IDT,INP,INI,INJ,INK,IDUM,IDUM,
+ IDUM,IDUM,IDUM,CTVAR,CNVAR,CETIKET,CGRTYP,IDUM,
+ IDUM,IDUM,IDUM,IDUM,IDUM,IDUM,IDUM,IDUM,IDUM,IDUM)
C
DHEURES = DBLE(INP*IDT/3600)
CALL INCDATR(IDATE,ISTAMP,DHEURES)
C
DO JLEV = 1,JPRLEV
NILV(JLEV) = NILV(JLEV)*RMBTPA
END DO
C
C SORT LEVELS SO THAT THEY ARE STORED IN INCREASING ORDER
C FOR 3D-VAR
C
C ========================
CALL ISORT(NILV,JPRLEV)
C ========================
C
C ------------------------------------------------------------
C READ DATA FROM STATISTICS FILE
C ------------------------------------------------------------
C -----------
CTYPVAR='O'
C -----------
C
CNOMVAR='GZ'
CETIKET='RAOBSTD'
IERR=VFSTLIR
(PHISTD,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
LLPRESNT = (IERR .GE. 0)
CETIKET='RAOBVCOR'
IERR=VFSTLIR
(ZVCOR,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
LLPRESNT = (IERR .GE. 0) .AND. LLPRESNT
C
CNOMVAR='TT'
CETIKET='RAOBSTD'
IERR=VFSTLIR
(TTSTD,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
IF ( IERR .LT. 0 ) LLTT=.FALSE.
C
CNOMVAR='ES'
CETIKET='RAOBSTD'
IERR=VFSTLIR
(ESSTD,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
LLPRESNT = (IERR .GE. 0) .AND. LLPRESNT
CETIKET='RAOBVCOR'
IERR=VFSTLIR
(ESVCOR,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
LLPRESNT = (IERR .GE. 0) .AND. LLPRESNT
C
C
CNOMVAR='UU'
CETIKET='RAOBSTD'
IERR=VFSTLIR
(USTD,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
LLPRESNT = (IERR .GE. 0) .AND. LLPRESNT
CETIKET='RAOBVCOR'
IERR=VFSTLIR
(UVCOR,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
LLPRESNT = (IERR .GE. 0) .AND. LLPRESNT
endif
C ------------------------------------------------------------
C
C
C -------------------------------------
C FILTER AND FILL CORRELATION MATRICES
C -------------------------------------
C
CALL ZERO
(JPMAXILEV*JPMAXILEV*JPCORBANDS,GZOBSCOR)
CALL ZERO
(JPMAXILEV*JPMAXILEV*JPCORBANDS,ESOBSCOR)
CALL ZERO
(JPMAXILEV*JPMAXILEV*JPCORBANDS,UUOBSCOR)
if(llpresnt) then
DO JBAND =1,JPCORBANDS
WRITE(NULOUT,*) " "
WRITE(NULOUT,*) " -----------------------------"
WRITE(NULOUT,*) " BAND NUMBER IS : ",JBAND
WRITE(NULOUT,*) " -----------------------------"
WRITE(NULOUT,*) " "
C
C FILTER THE MATRICES "TO REMOVE SINGULARITIES..."
C
C 1. GEOPOTENTIAL
C ------------
ZEIGMIN=0.2
ZALPHA=0.1
WRITE(NULOUT,*) " filtering GZ correlation matrix"
CALL FILTMATRIX
(ZVCOR,ZPROJ,ZEIGEN,ZEIGENV,
& JPRLEV,ZEIGMIN,ZALPHA)
C
C 2. T-Td
C -----
ZEIGMIN=0.0
ZALPHA=0.0
WRITE(NULOUT,*) " filtering ES correlation matrix"
CALL FILTMATRIX
(ESVCOR,ZPROJ,ZEIGEN,ZEIGENV,
& JPRLEV,ZEIGMIN,ZALPHA)
C
DO JI=1,JPRLEV
DO J=1,JPRLEV
GZOBSCOR(JI,J,JBAND)= ZVCOR(JI,J)
ESOBSCOR(JI,J,JBAND)=ESVCOR(JI,J)
UUOBSCOR(JI,J,JBAND)= UVCOR(JI,J)
END DO
END DO
END DO
endif
C
C -------------------------------------------------------------------
C -------------------------------------
C PRINT FINAL CORRELATION MATRICES
C -------------------------------------
C
DO JBAND =1,JPCORBANDS
WRITE(NULOUT,*) " "
WRITE(NULOUT,*) " -----------------------------"
WRITE(NULOUT,*) " BAND NUMBER IS : ",JBAND
WRITE(NULOUT,*) " -----------------------------"
WRITE(NULOUT,*) " "
WRITE(NULOUT,*) " GZ correlation matrix"
WRITE(NULOUT,*) " -------------------------------------------------"
WRITE(NULOUT,1245)( (GZOBSCOR(JI,J,JBAND),JI=1,JPRLEV),J=1,JPRLEV)
WRITE(NULOUT,*) " -------------------------------------------------"
C
C -------------------------------------------------------------------
C
WRITE(NULOUT,*) " UU-VV correlation matrix"
WRITE(NULOUT,*) " -------------------------------------------------"
WRITE(NULOUT,1245)( (UUOBSCOR(JI,J,JBAND),JI=1,JPRLEV),J=1,JPRLEV)
WRITE(NULOUT,*) " -------------------------------------------------"
C
C -------------------------------------------------------------------
C
WRITE(NULOUT,*) " T-Td correlation matrix"
WRITE(NULOUT,*) " -------------------------------------------------"
WRITE(NULOUT,1245)( (ESOBSCOR(JI,J,JBAND),JI=1,JPRLEV),J=1,JPRLEV)
WRITE(NULOUT,*) " -------------------------------------------------"
END DO
C
C
C*3. Initialize observation standard deviation errors
C -------------------------------------------------------------------
C
LLOK= ( LLPRESNT .AND. ( ILEMU .NE. -1 ) )
& .AND. ( LLPRESNT .AND. ( ILEMV .NE. -1 ) )
& .AND. ( LLPRESNT .AND. ( ILEMES.NE. -1 ) )
& .AND. ( LLPRESNT .AND. ( ILEMGZ.NE. -1 ) )
C
IF ( LLOK ) THEN
C
C COMPUTE OBSERVATION STANDARD DEVIATION ERRORS
C
DO JBAND =1,JPBANDS
DO JLEV =1,JPRLEV
ILYR=0
ZLEV=FLOAT(NILV(JLEV))
DO JN =1,JPRLEV
ZLYR=SIGN(1.0D0,(ZLEV- FLOAT(NILV(JN)) ) )
ILYR=ILYR + MAX(0.0D0,ZLYR)
END DO
*pik
XOSTDEV(ILEMGZ,ILYR,JBAND)= RG*PHISTD(ILYR,JBAND)
XOSTDEV(ILEMU, ILYR,JBAND)= USTD(ILYR,JBAND)
XOSTDEV(ILEMV, ILYR,JBAND)= USTD(ILYR,JBAND)
XOSTDEV(ILEMES,ILYR,JBAND)= ESSTD(ILYR,JBAND)
IF( LLTT ) THEN
XOSTDEV(ILEMTT,ILYR,JBAND)= TTSTD(ILYR,JBAND)
ELSE
write(nulout,*) ' DEFAULT VALUES FOR TT RAOB OBS ERRORS'
ENDIF
*pik
END DO
END DO
ELSE
LLPROB=.TRUE.
WRITE(NULOUT,*)" DEFAULT VALUES ARE USED FOR RAOBS ERRORS "
ENDIF
C
C
IF ( .NOT. LLPROB ) THEN
WRITE(NULOUT,*)" ----------------- "
WRITE(NULOUT,*)" SUBROUTINE ERROBS:"
WRITE(NULOUT,*)" RAOBS ERRORS SET "
WRITE(NULOUT,*)" ----------------- "
ELSE
WRITE(NULOUT,*)" ------------------------------- "
WRITE(NULOUT,*)" SUBROUTINE ERROBS:"
WRITE(NULOUT,*)" PROBLEM WITH STATISTICS FILE "
WRITE(NULOUT,*)" DEFAULT VALUES FOR RAOBS ERRORS "
WRITE(NULOUT,*)" ------------------------------- "
ENDIF
C
C================================================================
C
C SATEM OBSERVATION ERRORS
C
C================================================================
C
IP1=-1
IP2=-1
IP3=1
C
C
C*1. READ LEVELS FROM FILE
C ---------------------
C
CTYPVAR='K'
CNOMVAR='LV'
CETIKET='SATMOERR'
IKEY=FSTLIR(NISLV,NULSTAT,INI,INJ,INK,-1,CETIKET,IP1,IP2,IP3,
+ CTYPVAR,CNOMVAR)
LLPRESNT = (IKEY .GE. 0)
IERR = FSTPRM (IKEY,ISTAMP,IDT,INP,INI,INJ,INK,IDUM,IDUM,
+ IDUM,IDUM,IDUM,CTVAR,CNVAR,CETIKET,CGRTYP,IDUM,
+ IDUM,IDUM,IDUM,IDUM,IDUM,IDUM,IDUM,IDUM,IDUM,IDUM)
C
DO JLEV = 1,JPSATLV
NISLV(JLEV) =NISLV(JLEV)*RMBTPA
END DO
C
C =========================
CALL ISORT(NISLV,JPSATLV)
C =========================
C
CTYPVAR='O'
CNOMVAR='DZ'
IP3=7
DO JTYP =1,JPNTYP
IF ( JTYP .EQ. 1) THEN
CETIKET= 'STMCLRCR'
CETIKETV='STMCLRST'
ELSE
CETIKET= 'STMCLOCR'
CETIKETV='STMCLOST'
ENDIF
C-----------------------------------------------------------------------
IKEY=VFSTLIR
(DZCOR,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
LLPRESNT = (IKEY .GE. 0) .AND. LLPRESNT
LLOK =LLPRESNT .AND. (INI.EQ.JPSALEV) .AND.(INJ.EQ.JPSALEV)
IKEY=VFSTLIR
(XSATDEV(1,JTYP),NULSTAT,INI,INJ,INK,IDATE,CETIKETV
+ ,IP1,IP2,IP3,CTYPVAR,CNOMVAR)
LLOK = (IKEY .GE. 0) .AND. LLOK
C-----------------------------------------------------------------------
C
IF ( LLOK ) THEN
C
C MOVE INTO FULL CORRELATION MATRIX
C
DO J = 1, JPSALEV
DO JI=1,JPSALEV
DZOBSCOR(JI,J,JTYP) = DZCOR(JI,J)
END DO
END DO
WRITE(NULOUT,*)" correlation matrix for satems with TYPE:",CETIKET
WRITE(NULOUT,*)" ------------------------------------------------"
WRITE(NULOUT,1244)((DZOBSCOR(JI,J,JTYP),JI=1,JPSALEV),J=1,JPSALEV)
WRITE(NULOUT,*)" ------------------------------------------------"
ELSE
LLPROB=.TRUE.
WRITE(NULOUT,*) " PROBLEM WITH SATEM STATISTICS "
ENDIF
END DO
C
C=======================================================================
C
C HUMSAT CORRELATION MATRIX (7x7 matrix )
C STORED FROM 300-1000 MB
C
C JPHLEV = 7
C================================================================
C
C
C
C*1. READ LEVELS FROM FILE
C ---------------------
C
CTYPVAR='K'
CNOMVAR='LV'
CETIKET='HUMOERR '
IP1=-1
IP2=-1
IP3=-1
IKEY=FSTLIR(NIHULV,NULSTAT,INI,INJ,INK,-1,CETIKET,IP1,IP2,IP3,
+ CTYPVAR,CNOMVAR)
LLPRESNT = (IKEY .GE. 0)
C
DO JLEV = 1,JPHLEV
NIHULV(JLEV) = NIHULV(JLEV)*RMBTPA
END DO
C-----------------------------------------------------------------------
CTYPVAR='O'
CNOMVAR='ES'
CETIKET='HUMVCOR '
IKEY=VFSTLIR
(HUCOR,NULSTAT,INI,INJ,INK,IDATE,CETIKET,IP1,IP2,IP3
+ ,CTYPVAR,CNOMVAR)
LLOK =LLPRESNT .AND. (INI.EQ.JPHLEV) .AND.(INJ.EQ.JPHLEV)
LLOK = (IKEY .GE. 0) .AND. LLOK
C-----------------------------------------------------------------------
C
C MOVE INTO FULL CORRELATION MATRIX
C
IF ( LLOK) THEN
CALL ZERO
(JPMAXILEV*JPMAXILEV,HUOBSCOR)
DO J = 1, JPHLEV
DO JI=1,JPHLEV
HUOBSCOR(JI,J) = HUCOR(JI,J)
END DO
END DO
WRITE(NULOUT,*) " correlation matrix for humsat "
WRITE(NULOUT,*)" ------------------------------------------------"
WRITE(NULOUT,1244)( (HUOBSCOR(JI,J),JI=1,JPHLEV),J=1,JPHLEV)
WRITE(NULOUT,*)" ------------------------------------------------"
ELSE
LLPROB=.TRUE.
WRITE(NULOUT,*) " PROBLEM WITH HUMSAT STATISTICS "
ENDIF
C
IF ( .NOT. LLPROB ) THEN
WRITE(NULOUT,*)" ----------------------- "
WRITE(NULOUT,*)" SUBROUTINE SUCOVO:"
WRITE(NULOUT,*)" OBSERVATION ERRORS SET "
WRITE(NULOUT,*)" ----------------------- "
ELSE
WRITE(NULOUT,*)" ------------------------------- "
WRITE(NULOUT,*)" SUBROUTINE SUCOVO:"
WRITE(NULOUT,*)" PROBLEM WITH STATISTICS FILE "
WRITE(NULOUT,*)" DEFAULT VALUES FOR RAOBS ERRORS "
WRITE(NULOUT,*)" ------------------------------- "
ENDIF
C
1244 FORMAT( 7(1x,f5.2))
1245 FORMAT(16(1x,f5.2))
RETURN
END