!-------------------------------------- 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 SUCHECK(CDCTL,CDFG,CDIMP,LDOK),3
IMPLICIT NONE
#if defined (DOC)
*
*s/r SUCHECK :
* Author P. KOCLAS (CMC) FEBRUARY 1994.
*Revision:
* C. Charette *ARMA/AES Jan 96
* . -Abort if trial fields are missing
* P. Gauthier *ARMA/AES March 96
* . In the incremental case (NINCREM = 1), the resolution ( NI and NJ)
* . of the increments can be different from that of the trial field
* C. Charette *ARMA/AES Dec 96
* . -Error messages when CETIKETT is not in trial field file
* P. KOCLAS CMC/CMSV Jan 97
* . -Add common comvfiles and changed call to fnom
* P. KOCLAS CMC/CMSV June 98
* . - Y2K conversion
* S. Pellerin *ARMA/SMC May 2000
* . - Logical unit cleanup
* C. Charette *ARMA/SMC feb 2002
* - Added NPAKANL
*-----------------------------------------------------------------------
*
* 1. READ DIRECTORY OF RPN STANDARD FILES
* TO VERIFY THAT ALL FIELDS REQUESTED
* VIA INPUT NAMELIST FILE ARE PRESENT.
*
* 2. CROSSCHECK INTERNAL CONSISTENCY BETWEEN STANDARD
* FILES AND DATA STORED INTO CMC ADE BURP FILES.
*
* 3. SET ETIQUETTE AND DATESTAMP OF ANALYSIS FILE.
*
*-----------------------------------------------------------------------
*
* ARGUMENTS:
*
* i CDCTL: CONTROL VARIABLE TO INDICATE TYPE
* . OF STORAGE IN STANDARD FILE
* . 'S' : SPECTRAL 'G' : GRID
* i CDFG : CONTROL VARIABLE FOR FIRST GUESS
* . 'F' : FILE
* i CDIMP: CONTROL VARIABLE FOR INITIAL MINIMISATION POINT
* . 'F' : FILE
* o LDOK: LOGICAL VARIABLE --->
* . .TRUE. : NO PROBLEM DETECTED
* . .FALSE.: PROBLEM DETECTED
*
#endif
*
#include "pardim.cdk"
#include "comct0.cdk"
#include "comdim.cdk"
#include "comgem.cdk"
#include "comlun.cdk"
#include "comgdpar.cdk"
#include "compost.cdk"
#include "comcva.cdk"
*
CHARACTER*1 CDCTL,CDFG,CDIMP
LOGICAL LDOK
*
INTEGER IBRPRUN,IFSTRUN,IHH
REAL*8 DHOURS,DINCHRS
INTEGER IKEY,IERR,IGRCHK,INI, INJ, INK, JI, JJ
*
INTEGER IP2I,IP2T
INTEGER IDTYP, IP1, IP2, IP3, IG1, IG2, IG3, IG4, IDT, IPAS
+ , IBITS,ISWA, ILNG, IDLTF, IUBC, IX1, IX2, IX3
CHARACTER*2 CNOM
CHARACTER*8 CETIKET
CHARACTER*1 CLGR,CTYP
*
INTEGER IDHOURS,INHOURS
INTEGER ISTAMPI,IDATET,IDATEI,IDATDF
INTEGER ITIME,IDATE,IRUNN
LOGICAL LLTRCHK,LLDACHK,LLIACHK,LLADECHK
*
INTEGER FNOM, FSTOUV, FSTFRM, FSTINF, FSTPRM, FCLOS
EXTERNAL FNOM, FSTOUV, FSTFRM, FSTINF, FSTPRM, FCLOS
*
*
* DEFAULT VALUES FOR VARIABLES IN NAMELIST
*---------------------------------------------
*
NFSTVAR = 3
CFSTVAR(1) = 'UU'
CFSTVAR(2) = 'VV'
CFSTVAR(3) = 'TT'
*
CMCRUN='g112'
*
CETIKETA ='3DVARANA'
*
CETIKETT =' '
*
CETIKETI =' '
*
CETIKINC = 'ANALINCR'
*
NITER = -1
NPAKANL = -30
*
*---------------------------------------------
*
* OTHER DEFAULTS
*-------------------------
LLADECHK =.TRUE.
LLTRCHK =.TRUE.
LDOK =.TRUE.
CGRTYP ='G'
IG2 =1
*-------------------------
if (nconf.ne.141.and.NINT(NCONF/100.0).ne.6) then
write(nulout,*) 'SUCHECK: reading from unit ',ninmpg
*
c IF(IERR.GE.0)THEN
c IERR = FSTOUV(NINMPG,'RND')
c ELSE
c CALL ABORT3D(NULOUT,'SUCHECK')
c END IF
*
CALL READNML
('NAMGDPAR',IERR)
*
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*) ' REQUESTS FROM NAMELIST FILE'
WRITE(NULOUT,*) ' ---------------------------'
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*) ' ETIQUETTES OF STANDARD FILES'
WRITE(NULOUT,*)
S '=================================================='
WRITE(NULOUT,*) ' ANALYSIS:',CETIKETA
WRITE(NULOUT,*) ' TRIAL FIELD:',CETIKETT
WRITE(NULOUT,*) ' INITIAL MINIMISATION POINT:',CETIKETI
WRITE(NULOUT,*) ' ITERATION NUMBER (IP3):',NITER
WRITE(NULOUT,*)
S '=================================================='
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*) ' ***************************'
WRITE(NULOUT,*) ' ***************** '
*
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*) ' REQUESTS FROM STANDARD FILES'
WRITE(NULOUT,*) ' ----------------------------'
IF ( CDFG .EQ. 'F') THEN
*
************************************************************************
* TRIAL FIELD
************************************************************************
*
WRITE(NULOUT,*) ' '
WRITE(NULOUT,'(10X,"SUCHECK: LOOKING FOR TRIAL FIELD")')
WRITE(NULOUT,'(10X," CETIKETT= ",A8)')CETIKETT
WRITE(NULOUT,*)' '
*
************************************************************************
* FIND THE KEY OF THE FIRST RECORD WITH PARAMETER
* " CETIKETT "
************************************************************************
IKEY = FSTINF(NINMPG,INI,INJ,INK,-1,CETIKETT,
+ -1,-1,-1,' ',' ')
IF(IKEY .LT.0 ) THEN
IKEY = FSTINF(NINMPG,INI,INJ,INK,-1,' ',
+ -1,-1,-1,' ',' ')
IERR = FSTPRM(IKEY,IDATET,IDT,IPAS,INI,INJ,INK,IBITS,IDTYP,
+ IP1,IP2,IP3,CTYP,CNOM,CETIKET,CLGR,IG1,IG2,IG3,IG4,
+ ISWA,ILNG,IDLTF,IUBC,IX1,IX2,IX3)
WRITE(NULOUT,9600)CETIKETT, CETIKET, INI,INJ
9600 FORMAT(///,4X,'In SUCHECK: label specified '
S ,'for the trial field in the namelist ',A8,/
S ,10X,' IS INCONSISTENT WITH THE LABEL ',A8
S ,' FOUND IN THE TRIAL FIELD FILE.',/
S ,10X,'JOB IS ABORTED',//
S ,' THE DIMENSIONS NI,NJ FOUND'
S ,' ON THE TRIAL FIELD FILE ARE: ',2I6 )
CALL ABORT3D
(NULOUT
S ,'SUCHECK: Problem with trial field file')
ENDIF
IERR = FSTPRM(IKEY,IDATET,IDT,IPAS,INI,INJ,INK,IBITS,IDTYP,
+ IP1,IP2,IP3,CTYP,CNOM,CETIKET,CLGR,IG1,IG2,IG3,IG4,
+ ISWA,ILNG,IDLTF,IUBC,IX1,IX2,IX3)
*
*========================
*
* Transfer trial field parameters to COMGDPAR
*
NDEETT = IDT
NPAST = IPAS
NIP2T = IP2
NIG2T = IG2
*
* Transfer analysis field parameters to COMGDPAR
*
NDEETA = 0
NPASA = 0
NIP2 = 0
NIG2A = IG2
*
CTYPVART =CTYP
IP2T =IP2
WRITE(NULOUT,'(10X,"PARAMETERS READ FROM TRIAL FIELD FILE")')
WRITE(NULOUT,'(10X," CTYPVART= ",A1," IDATET= ",I10)')
+ CTYPVART,IDATET
WRITE(NULOUT,'(10X," IP2T= ",I5," CETIKET= ",A8)')
+ IP2T, CETIKET
*========================
*
INHOURS=IDT*IPAS/3600
DINCHRS=DBLE(INHOURS)
CALL INCDATR( NSTAMPA, IDATET,DINCHRS)
NSTAMPT = NSTAMPA
IF (CETIKETT .EQ. ' ') CETIKETT=CETIKET
*
LLTRCHK=LLTRCHK .AND. (CLGR .EQ. CGRTYP) .AND. (IERR .GE. 0)
*
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*)' TRIAL FIELD'
WRITE(NULOUT,9000)'NOMVAR','TYPVAR','ETIKET','DATE','IP1','IP2'
& ,'IP3'
WRITE(NULOUT,*)
S '----------------------------------------------------'
WRITE(NULOUT,*)' '
DO JJ = 1,NFSTVAR
IF ( LLTRCHK) THEN
DO JI = 1,NFLEV
IP1 =NIP1(JI)
*=======================================================================
IKEY= FSTINF(NINMPG,INI,INJ,INK,
+ NSTAMPA,CETIKETT,IP1,IP2T,IP3,CTYP,CFSTVAR(JJ))
*=======================================================================
IGRCHK = IABS(INI-NI) + IABS(INJ-NJ)
IF(NINCREM.EQ.1.AND.IGRCHK.NE.0.OR.
S NINCREM.EQ.2.OR.NINCREM.EQ.3) THEN
WRITE(NULOUT,*)
S ' In SUCHECK,Trial field grid (INI,INJ)'
S ,' = (',INI,',',INJ,')'
S ,' Grid of the increments (NI,NJ) = ('
S ,NI,',',NJ,')'
IGRCHK = 0
END IF
LLTRCHK=(LLTRCHK .AND. (IKEY .GE. 0) .AND. (IGRCHK .EQ.
& 0))
WRITE(NULOUT,9100) CFSTVAR(JJ),CTYP,CETIKETT,NSTAMPA,IP1,IP2
& ,IP3
END DO
ENDIF
END DO
IF ( .NOT. LLTRCHK) THEN
WRITE(NULOUT,*)
& 'SUCHECK: ***>> PROBLEM WITH TRIAL FIELD<<***'
WRITE(NULOUT,'(10X,"Namelist "," NI=",I5," NJ=",I5,/,
+ 10X,"File "," NI=",I5," NJ=",I5," NK=",I5)')
+ NI,NJ,INI,INJ,INK
* CALL ABORT3D (NULOUT,'SUCHECK: Problem with NI, NJ ')
ENDIF
ELSE
NSTAMPA=IDATDF
NSTAMPT=IDATDF
CTYPVART='A'
CETIKETT='FIRSTGSS'
LLADECHK=.FALSE.
ENDIF
*
IF ( CDIMP .EQ. 'F') THEN
LLTRCHK=(LLTRCHK .AND. .TRUE.)
*
************************************************************************
* INITIAL MINIMISATION POINT
************************************************************************
*
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*)' INITIAL MINIMISATION POINT '
WRITE(NULOUT,9000)'NOMVAR','TYPVAR','ETIKET','DATE'
+ ,'IP1','IP2','IP3'
WRITE(NULOUT,*)
S '----------------------------------------------------'
WRITE(NULOUT,*)' '
*
************************************************************************
* FIND THE KEY OF THE FIRST RECORD WITH PARAMETER
* " CETIKETI "
************************************************************************
*
IKEY =FSTINF(NINMPG,
+ INI,INJ,INK,-1,CETIKETI,-1,-1,NITER,' ',' ')
*
************************************************************************
* THEN OBTAIN CTYPVARI AND IP2I
************************************************************************
*
IERR = FSTPRM(IKEY,IDATEI,IDT,IPAS,INI,INJ,INK,IBITS,IDTYP,
+ IP1,IP2,IP3,CTYP,CNOM,CETIKET,CLGR,IG1,IG2,IG3,IG4,
+ ISWA,ILNG,IDLTF,IUBC,IX1,IX2,IX3)
*
*=========================
*
* Transfer Initial minimisation point parameters to COMGDPAR
*
NDEETI = IDT
NPASI = IPAS
NIP2I = IP2
NIG2I = IG2
*
CTYPVARI =CTYP
IP2I =IP2
NITER =IP3
*=========================
*
INHOURS=IDT*IPAS/3600
DINCHRS=DBLE(INHOURS)
CALL INCDATR( NSTAMPI, IDATEI,DINCHRS)
IF (CETIKETI .EQ. ' ') CETIKETI=CETIKET
*
LLTRCHK=LLTRCHK .AND. (CLGR .EQ. CGRTYP) .AND. (IERR .GE. 0)
DO JJ = 1,NFSTVAR
IF ( LLTRCHK) THEN
DO JI = 1,NFLEV
IP1 =NIP1(JI)
*=======================================================================
IKEY= FSTINF(NINMPG,INI,INJ,INK, NSTAMPA,CETIKETI
+ ,IP1,IP2I,NITER,CTYP,CFSTVAR(JJ))
*=======================================================================
IGRCHK = IABS(INI-NI) + IABS(INJ-NJ)
LLTRCHK=(LLTRCHK .AND. (IKEY .GE. 0)
+ .AND. (IGRCHK .EQ. 0))
WRITE(NULOUT,9100) CFSTVAR(JJ),CTYP,CETIKETI
+ ,NSTAMPI,IP1,IP2,IP3
END DO
ENDIF
END DO
IF ( .NOT. LLTRCHK) THEN
WRITE(NULOUT,*)
S '***>> PROBLEM WITH INITIAL MINIMISATION POINT <<***'
LDOK=.FALSE.
ELSE
WRITE(NULOUT,*) ' '
WRITE(NULOUT,*) ' ***************************'
WRITE(NULOUT,*) ' ***************** '
INHOURS=IDT*IPAS/3600
DINCHRS=DBLE(INHOURS)
CALL INCDATR( ISTAMPI, IDATEI,DINCHRS)
CALL DIFDATR(ISTAMPI, NSTAMPA,DHOURS)
IDHOURS=DHOURS
*==========================================
LLIACHK= ( IDHOURS .EQ. 0 )
LDOK = ( LDOK .AND. LLIACHK)
*==========================================
IF ( .NOT. LLIACHK) THEN
WRITE(NULOUT,*)
S '* MINEXP00 AND ANALYSIS STAMPS ARE INCONSISTENT *'
ENDIF
ENDIF
ELSE
NSTAMPI= NSTAMPA
CTYPVARI='A'
CETIKETI='MINEXP00'
NITER=0
ENDIF
endif
*
***********************************************************************
* VERIFY DATA AND ANALYSIS STAMPS
***********************************************************************
*
IF ( LLADECHK.AND.(.NOT.LSIMOB) ) THEN
CALL NEWDATE (NSTAMPA,IFSTRUN,IHH,-3)
IFSTRUN=IFSTRUN*100 + IHH/1000000
CALL BRPCHECK
(ITIME,IDATE,IRUNN)
IBRPRUN=IDATE*100 + ITIME/100
IDHOURS=(IHH/1000000 - ITIME/100)/3
IDHOURS=IABS(IDHOURS)
WRITE(NULOUT, *)' BURP FILE STAMP: ',IBRPRUN
WRITE(NULOUT, *)' STANDARD FILE STAMP: ',IFSTRUN
*===========================================
LLDACHK = ( IDHOURS .LE. 1 )
LDOK = ( LDOK .AND. LLDACHK )
*===========================================
IF ( .NOT. LLDACHK) THEN
WRITE(NULOUT,*)
S ' ADE AND ANALYSIS STAMPS ARE INCONSISTENT'
* CALL ABORT3D(NULOUT,'SUCHECK')
ENDIF
ENDIF
*
************************************************************************
* TRANSFER TO COMGDPAR
************************************************************************
*
CTYPVARA='A'
NIG =IG2
*
***********************************************************************
* TRANSFER TO COMPOST
***********************************************************************
*
NIG2 =IG2
NSTAMP =NSTAMPA
*
9000 FORMAT(3(1X,A6),5X,A4,8X,A3,2(3X,A3))
9100 FORMAT(1X,A2,5X,A2,5X,A8,3X,I9,3(1X,I5))
*
* 5. Close the file and release memory
* . ---------------------------------
*
RETURN
END