1 SUBROUTINE chien(CDNAMC,KTYPTR,PSLAPO,PLOCEN,&
2 & PCODIL,KTRONC,KDGL,KNXLON,KNLOPA,KNOZPA,&
3 & KHTYP,KFLEV,PREF,PVALH,PVBH,KQUAD,KINF,&
4 & KDGSA,KDGEN,PEPS,LDFICP,KULOUT)
124 INTEGER(KIND=JPIM),
INTENT(IN) :: KFLEV
125 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGSA
126 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGEN
127 CHARACTER(LEN=16) ,
INTENT(IN) :: CDNAMC
128 INTEGER(KIND=JPIM),
INTENT(IN) :: KTYPTR
129 REAL(KIND=JPRB) ,
INTENT(IN) :: PSLAPO
130 REAL(KIND=JPRB) ,
INTENT(IN) :: PLOCEN
131 REAL(KIND=JPRB) ,
INTENT(IN) :: PCODIL
132 INTEGER(KIND=JPIM),
INTENT(IN) :: KTRONC
133 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGL
134 INTEGER(KIND=JPIM),
INTENT(IN) :: KNXLON
135 INTEGER(KIND=JPIM),
INTENT(IN) :: KNLOPA(kdgsa:kdgen)
136 INTEGER(KIND=JPIM),
INTENT(IN) :: KNOZPA(kdgsa:kdgen)
137 INTEGER(KIND=JPIM),
INTENT(IN) :: KHTYP
138 REAL(KIND=JPRB) ,
INTENT(IN) :: PREF
139 REAL(KIND=JPRB) ,
INTENT(IN) :: PVALH(0:kflev)
140 REAL(KIND=JPRB) ,
INTENT(IN) :: PVBH(0:kflev)
141 INTEGER(KIND=JPIM),
INTENT(IN) :: KQUAD
142 INTEGER(KIND=JPIM),
INTENT(IN) :: KINF
143 REAL(KIND=JPRB) ,
INTENT(IN) :: PEPS
144 LOGICAL ,
INTENT(OUT) :: LDFICP
145 INTEGER(KIND=JPIM),
INTENT(IN) :: KULOUT
149 INTEGER(KIND=JPIM),
ALLOCATABLE :: INLOPA(:),INOZPA(:)
150 REAL(KIND=JPRB),
ALLOCATABLE :: ZVALH(:),ZVBH(:)
151 REAL(KIND=JPRB),
ALLOCATABLE :: ZSINLA(:)
154 INTEGER(KIND=JPIM) :: IDGL, IDGNH, IERR, IERRA, IHTYP, INIVER, INLATI, &
155 & INXLON, IQUADF, ISTROW, ITRONC, ITYPTR, JFLEV, JL, JLAT, JLEV, IMAXLEV, &
156 & IMAXGL, IMAXLON, IMAXTRUNC
158 REAL(KIND=JPRB) :: ZCLOPO, ZCODIL, ZEPS, ZMUNPOL, ZREF, ZSLAPO, ZSLOPO, ZX1
159 REAL(KIND=JPRB) :: ZX2
160 REAL(KIND=JPRB) :: ZHOOK_HANDLE
164 #include "abor1.intfb.h" 175 CALL falimu(imaxlev,imaxtrunc,imaxgl,imaxlon)
176 ALLOCATE(inlopa(imaxgl))
177 ALLOCATE(inozpa(imaxgl))
178 ALLOCATE(zsinla(imaxgl))
179 ALLOCATE(zvalh(0:imaxlev))
180 ALLOCATE(zvbh(0:imaxlev))
185 WRITE(kulout,*)
' HAF, HAF : CADRE : ',cdnamc
186 CALL facies(cdnamc,ityptr,zslapo,zclopo,zslopo,zcodil,itronc,&
187 & inlati,inxlon,inlopa,inozpa,zsinla,iniver,zref,zvalh,zvbh,llgard)
190 IF (inlati > kdgen-kdgsa+1)
THEN 191 CALL abor1(
'CHIEN : MAX. NUMBER OF LATITUDE ROWS IN MODEL TOO SMALL !')
193 IF (iniver > kflev)
THEN 194 CALL abor1(
'CHIEN : MAX. NUMBER OF LEVEL IN MODEL TOO SMALL !')
204 WRITE(kulout,*)
'YOU ARE USING A FILE ALADIN ',&
205 &
'WHILE THE MODEL EXPECTS A FILE ARPEGE' 206 CALL abor1(
'CHIEN: ABOR1 CALLED 2a')
211 IF(inlopa(1) == inlopa(int(inlati/2)))
THEN 213 WRITE(kulout,*)
'FILE HAS REGULAR GRID ' 216 WRITE(kulout,*)
'FILE HAS REDUCED GRID ' 221 zmunpol = 0.9999999999_jprb
222 IF(zsinla(1) >= zmunpol)
THEN 223 WRITE(kulout,*)
' FILE CONTAINS THE POLES ' 229 IF(inlopa(1) /= inlopa(2))
THEN 230 WRITE(kulout,*)
' FILE ROWS #1 AND #2 DO NOT HAVE THE ',&
231 &
'SAME NUMBER OF LONGITUDES' 232 WRITE(kulout,*)
' THIS MAKES THE MODEL UNABLE TO READ THE '&
234 CALL abor1(
'CHIEN: ABOR1 CALLED 2b')
237 WRITE(kulout,*)
' FILE DOES NOT CONTAINS THE POLES ' 246 zx1 = 1.0_jprb - zsinla(2)
247 zx2 = zsinla(2) - zsinla(3)
250 WRITE(kulout,*)
'FILE HAS LOBATTO QUADRATURE' 251 IF(mod(inlati,2) == 0)
THEN 252 WRITE(kulout,*)
' WARNING ! INLATI IS EVEN !' 256 WRITE(kulout,*)
'FILE HAS GAUSSIAN QUADRATURE' 257 IF(mod(inlati,2) == 1)
THEN 258 WRITE(kulout,*)
' WARNING ! INLATI IS ODD !' 263 WRITE(kulout,*)
'FILE HAS GAUSSIAN QUADRATURE' 264 IF(mod(inlati,2) == 1)
THEN 265 WRITE(kulout,*)
' WARNING ! INLATI IS ODD !' 269 IF ((kinf == 0).OR.(kinf == -1))
THEN 278 IF(itronc /= ktronc)
THEN 279 WRITE(kulout,*)
' TRUNCATION MISMATCH : '&
280 & ,
'FILE = ',itronc,
' ; ARGUMENT = ',ktronc
286 IF(inxlon /= knxlon)
THEN 287 WRITE(kulout,*)
' MAX. NUMBER OF LONGITUDES MISMATCH : '&
288 & ,
'FILE = ',inxlon,
' ; ARGUMENT = ',knxlon
292 IF(inlati /= (kdgl+2))
THEN 293 WRITE(kulout,*)
'MAX. NUMBER OF LATITUDES MISMATCH : '&
294 & ,
'FILE = ',inlati,
' INCLUDING POLES ; ARGUMENT = ',kdgl
298 DO jlat = istrow, (inlati-1)/2
299 IF(knlopa(jlat) /= inlopa(jlat+1))
THEN 300 WRITE(kulout,*)
' NUMBER OF LONGITUDES MISMATCH ON ',&
301 &
'ROW ',jlat,
' : ', &
302 &
'FILE = ',inlopa(jlat+1),
' ; ARGUMENT = ',knlopa(jlat)
305 IF(knozpa(jlat) /= inozpa(jlat+1))
THEN 306 WRITE(kulout,*)
' WAVES NUMBER MISMATCH ON ',&
307 &
'ROW ',jlat,
' : ', &
308 &
'FILE = ',inozpa(jlat+1),
' ; ARGUMENT = ',knozpa(jlat)
314 IF(inlati /= (kdgl))
THEN 315 WRITE(kulout,*)
'NUMBER OF LATITUDES MISMATCH : '&
316 & ,
'FILE = ',inlati,
' (NO POLES) ; ARGUMENT = ',kdgl
319 DO jlat = 1, (inlati+1)/2
320 IF(knlopa(jlat) /= inlopa(jlat))
THEN 321 WRITE(kulout,*)
' NUMBER OF LONGITUDES MISMATCH ON ',&
322 &
'ROW ',jlat,
' : ', &
323 &
'FILE = ',inlopa(jlat),
' ; ARGUMENT = ',knlopa(jlat)
326 IF(knozpa(jlat) /= inozpa(jlat))
THEN 327 WRITE(kulout,*)
' WAVES NUMBER MISMATCH ON ',&
328 &
'ROW ',jlat,
' : ', &
329 &
'FILE = ',inozpa(jlat),
' ; ARGUMENT = ',knozpa(jlat)
338 IF(ihtyp /= khtyp)
THEN 339 WRITE(kulout,*)
' HORIZONTAL GRID MISMATCH : '&
340 & ,
'FILE = ',ihtyp,
' ; ARGUMENT = ',khtyp
343 IF(ityptr /= ktyptr)
THEN 344 WRITE(kulout,*)
' TRANSFORMATION MISMATCH : '&
345 & ,
'FILE = ',ityptr,
' ; ARGUMENT = ',ktyptr
348 IF(abs(pslapo-zslapo) > peps)
THEN 349 WRITE(kulout,*)
' SINE OF LATITUDE OF POLE MISMATCH : '&
350 & ,
'FILE = ',zslapo,
' ; ARGUMENT = ',pslapo
353 IF(abs(cos(plocen)-zclopo) > peps)
THEN 354 WRITE(kulout,*)
' COSINE OF LONGITUDE OF POLE MISMATCH : '&
355 & ,
'FILE = ',zclopo,
' ; ARGUMENT = ',cos(plocen)
358 IF(abs(sin(plocen)-zslopo) > peps)
THEN 359 WRITE(kulout,*)
' SINE OF LONGITUDE OF POLE MISMATCH : '&
360 & ,
'FILE = ',zslopo,
' ; ARGUMENT = ',sin(plocen)
363 IF(abs(zcodil-pcodil) > peps)
THEN 364 WRITE(kulout,*)
' STRETCHING MISMATCH : '&
365 & ,
'FILE = ',zcodil,
' ; ARGUMENT = ',pcodil
368 IF(kquad /= iquadf)
THEN 369 WRITE(kulout,*)
' QUADRATURE MISMATCH : ',&
370 &
'FILE = ',iquadf,
' ; ARGUMENT = ',kquad
377 IF(iniver /= kflev)
THEN 378 WRITE(kulout,*)
' NUMBER OF LEVELS MISMATCH : '&
379 & ,
'FILE = ',iniver,
' ; ARGUMENT = ',kflev
382 zeps=peps*10._jprb*max(zref,pref)
385 IF(abs(zvalh(jflev)*zref-pvalh(jflev)*pref) > zeps)
THEN 386 WRITE(kulout,*)
' VERTICAL FUNCTION *A* MISMATCH ON ',&
387 &
'LEVEL ',jflev,
' : ',&
388 &
'FILE = ',zvalh(jflev),
' ; ARGUMENT = ',pvalh(jflev)
392 IF(abs(zvbh(jflev)-pvbh(jflev)) > peps)
THEN 393 WRITE(kulout,*)
' VERTICAL FUNCTION *B* MISMATCH ON ',&
394 &
'LEVEL ',jflev,
' : ',&
395 &
'FILE = ',zvbh(jflev),
' ; ARGUMENT = ',pvbh(jflev)
400 WRITE(kulout,*)
' REFERENCE PRESSURE : ',&
401 &
'FILE = ',zref,
' ; ARGUMENT = ',pref
407 CALL abor1(
'CHIEN: ABOR1 CALLED 3.4')
410 ELSEIF(kinf == 1)
THEN 412 WRITE(kulout,*)
'CHIEN ERROR : CHIEN(..., KINF=1,...) HAS BEEN REPLACED BY RIEN(...)' 413 CALL abor1(
'CHIEN: ABOR1 CALLED 4.1')
416 WRITE(kulout,*)
'INTERNAL ERROR : KINF=',kinf
417 CALL abor1(
'CHIEN: ABOR1 CALLED 4.2')
subroutine falimu(KXNIVV, KXTRON, KXLATI, KXLONG)
subroutine facies(CDNOMC, KTYPTR, PSLAPO, PCLOPO, PSLOPO, PCODIL, KTRONC, KNLATI, KNXLON, KNLOPA, KNOZPA, PSINLA, KNIVER, PREFER, PAHYBR, PBHYBR, LDGARD)
subroutine chien(CDNAMC, KTYPTR, PSLAPO, PLOCEN, PCODIL, KTRONC, KDGL, KNXLON, KNLOPA, KNOZPA, KHTYP, KFLEV, PREF, PVALH, PVBH, KQUAD, KINF, KDGSA, KDGEN, PEPS, LDFICP, KULOUT)