1 SUBROUTINE echien(CDNAMC,KTYPTR,LDMAP,&
2 & KTRONC,KDGL,KNXLON,KNLOPA,PSINLA,&
3 & KFLEV,PREF,PVALH,PVBH,KINF,&
122 INTEGER(KIND=JPIM),
PARAMETER :: JPXGEO=18
123 INTEGER(KIND=JPIM),
PARAMETER :: JPXPAH=8
127 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KFLEV
128 CHARACTER(LEN=16),
INTENT(IN) :: CDNAMC
129 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KTYPTR
130 LOGICAL ,
INTENT(INOUT) :: LDMAP
131 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KTRONC
132 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KDGL
133 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KNXLON
134 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KNLOPA(jpxpah)
135 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PSINLA(jpxgeo)
136 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PREF
137 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PVALH(0:kflev)
138 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PVBH(0:kflev)
139 INTEGER(KIND=JPIM),
INTENT(IN) :: KINF
140 REAL(KIND=JPRB) ,
INTENT(IN) :: PEPS
141 INTEGER(KIND=JPIM),
INTENT(IN) :: KULOUT
145 INTEGER(KIND=JPIM),
ALLOCATABLE :: INLOPA(:),INOZPA(:)
146 REAL(KIND=JPRB),
ALLOCATABLE :: ZVALH(:),ZVBH(:)
147 REAL(KIND=JPRB),
ALLOCATABLE :: ZSINLA(:)
150 REAL(KIND=JPRB),
ALLOCATABLE :: ZGELAM(:,:), ZGELAT(:,:), ZGM(:,:),&
151 & ZGENORX(:,:),ZGENORY(:,:)
153 INTEGER(KIND=JPIM) :: IERR, IERRA, II, INIVER, INLATI, INXLON, ITRONC, &
154 & ITYPTR, JFLEV, JL, JLEV, IROTEQ, ISOTRP, IGIVO, IMAXLEV, IMAXGL, &
155 & IMAXLON, IMAXTRUNC , IBWX, IBWY
157 LOGICAL :: LLMAP, LLGARD
159 REAL(KIND=JPRB) :: Z2PI, ZCLOPO, ZCODIL, ZDIFF, ZREF, ZSLAPO, ZSLOPO, ZEPS
160 REAL(KIND=JPRB) :: ZRPK, ZLON0, ZLAT0, ZLONC, ZLATC, ZDELX, ZDELY, ZELX, ZELY
161 REAL(KIND=JPRB) :: ZEXWN,ZEYWN, ZLON1, ZLAT1, ZLON2, ZLAT2
162 REAL(KIND=JPRB) :: ZHOOK_HANDLE
168 #include "abor1.intfb.h" 179 CALL falimu(imaxlev,imaxtrunc,imaxgl,imaxlon)
180 ALLOCATE(inlopa(imaxgl))
181 ALLOCATE(inozpa(imaxgl))
182 ALLOCATE(zsinla(imaxgl))
183 ALLOCATE(zvalh(0:imaxlev))
184 ALLOCATE(zvbh(0:imaxlev))
189 WRITE(kulout,*)
' HAF, HAF : CADRE : ',cdnamc
191 CALL facies(cdnamc,ityptr,zslapo,zclopo,zslopo,zcodil,itronc,&
192 & inlati,inxlon,inlopa,inozpa,zsinla,iniver,zref,zvalh,&
196 IF (iniver > kflev)
THEN 197 CALL abor1(
'ECHIEN : MAX. NUMBER OF LEVEL IN MODEL TOO SMALL !')
207 WRITE(kulout,*)
'YOU ARE USING A FILE ARPEGE ',&
208 &
'WHILE THE MODEL EXPECTS A FILE ALADIN' 209 CALL abor1(
'ECHIEN: ABOR1 CALLED 2')
212 llmap=zcodil >= 0.0_jprb
217 IF(zsinla(1) >= 0.0_jprb)
THEN 219 WRITE(kulout,*)
' the cadre >>',cdnamc,
'<< has the old EGGX format' 220 WRITE(kulout,*)
' => consistency check of the geometry in the cadre& 221 & will be more forgiving' 241 IF (zrpk < 0.0_jprb)
THEN 243 IF (zlon1 <= zlon2)
THEN 244 zlonc=mod(0.5_jprb*(zlon1+zlon2),z2pi)
246 zlonc=mod(0.5_jprb*(zlon1-z2pi+zlon2),z2pi)
248 zlatc=0.5_jprb*(zlat1+zlat2)
253 ALLOCATE(zgelam(inlopa(3):inlopa(4),inlopa(5):inlopa(6)))
254 ALLOCATE(zgelat(inlopa(3):inlopa(4),inlopa(5):inlopa(6)))
255 ALLOCATE(zgm(inlopa(3):inlopa(4),inlopa(5):inlopa(6)))
256 ALLOCATE(zgenorx(inlopa(3):inlopa(4),inlopa(5):inlopa(6)))
257 ALLOCATE(zgenory(inlopa(3):inlopa(4),inlopa(5):inlopa(6)))
258 iroteq=int(zsinla(1))
259 isotrp=int(zsinla(11))
260 igivo=int(zsinla(12))
262 WRITE(kulout,*)
'Call EGGX_N by ECHIEN' 265 & zsinla(4),zsinla(5),zsinla(6),zsinla(7),zlon0,zlat0,&
266 & zsinla(10),kulout,isotrp,igivo,&
267 & zgelam,zgelat,zgm,zgenorx,zgenory,&
268 & inlopa(3),inlopa(4),inlopa(5),inlopa(6),&
269 & inlopa(3),inlopa(4),inlopa(5),inlopa(6),&
270 & zdelx,zdely,zlonc,zlatc)
276 zsinla(1)=
REAL(iroteq,
jprb)
277 zsinla(11)=
REAL(isotrp,
jprb)
278 zsinla(12)=
REAL(igivo,
jprb)
305 IF((kinf == 0).OR.(kinf == -1).OR.(kinf == -2).OR.(kinf == -3))
THEN 314 IF(inlopa(2) == 1.AND.knlopa(2) == 1)
THEN 315 IF(itronc /= ktronc)
THEN 316 WRITE(kulout,*)
' TRUNCATION NSMAX MISMATCH : '&
317 & ,
'FILE = ',itronc,
' ; ARGUMENT = ',ktronc
320 IF(ityptr /= ktyptr)
THEN 321 WRITE(kulout,*)
' TRUNCATION NMSMAX MISMATCH : '&
322 & ,
'FILE = ',ityptr,
' ; ARGUMENT = ',ktyptr
326 IF ((inlopa(2) /= 0.AND.knlopa(2) /= 0).OR.&
327 & (.NOT.llmap.AND..NOT.ldmap))
THEN 328 IF(inxlon /= knxlon)
THEN 329 WRITE(kulout,*)
' NUMBER OF LONGITUDES MISMATCH : '&
330 & ,
'FILE = ',inxlon,
' ; ARGUMENT = ',knxlon
333 IF(inlati /= kdgl)
THEN 334 WRITE(kulout,*)
' NUMBER OF LATITUDES MISMATCH : '&
335 & ,
'FILE = ',inlati,
' ; ARGUMENT = ',kdgl
342 IF((ldmap.AND..NOT.llmap).OR.(llmap.AND..NOT.ldmap))
THEN 344 WRITE(kulout,*)
' HORIZONTAL REPRESENTATION LMAP MISMATCH : '&
345 & ,
'FILE = ',llmap,
' ; ARGUMENT = ',ldmap
348 ELSEIF(llmap.AND.ldmap)
THEN 350 IF((zrpk >= 0.0_jprb .AND. psinla(2) < 0.0_jprb) .OR.&
351 & (zrpk < 0.0_jprb .AND. psinla(2) >= 0.0_jprb))
THEN 352 WRITE(kulout,*)
' PROJECTION TYPE MISMATCH : '&
353 & ,
'FILE = ',zrpk,
' ; ARGUMENT = ',psinla(2)
357 zdiff=abs(mod(zlon0-psinla(3),z2pi))
358 IF(zdiff > zeps.AND.(z2pi-zdiff) > zeps)
THEN 359 WRITE(kulout,*)
' REFERENCE LONGITUDE MISMATCH : '&
360 & ,
'FILE = ',zlon0,
' (',zlon0*180._jprb/
xrpi,
' DEGREES)', &
361 &
' ; ARGUMENT = ',psinla(3),
' (',psinla(3)*180._jprb/
xrpi,
' DEGREES)' 365 IF(abs(zlat0-psinla(4)) > zeps)
THEN 366 WRITE(kulout,*)
' REFERENCE LATITUDE MISMATCH : '&
367 & ,
'FILE = ',zlat0,
' (',zlat0*180._jprb/
xrpi,
' DEGREES)', &
368 &
' ; ARGUMENT = ',psinla(4),
' (',psinla(4)*180._jprb/
xrpi,
' DEGREES)' 372 zdiff=abs(mod(zlonc-psinla(5),z2pi))
373 IF(zdiff > zeps.AND.(z2pi-zdiff) > zeps)
THEN 374 WRITE(kulout,*)
' DOMAIN CENTRE LONGITUDE MISMATCH : '&
375 & ,
'FILE = ',zlonc,
' (',zlonc*180._jprb/
xrpi,
' DEGREES)', &
376 &
' ; ARGUMENT = ',psinla(5),
' (',psinla(5)*180._jprb/
xrpi,
' DEGREES)' 380 IF(abs(zlatc-psinla(6)) > zeps)
THEN 381 WRITE(kulout,*)
' DOMAIN CENTRE LATITUDE MISMATCH : '&
382 & ,
'FILE = ',zlatc,
' (',zlatc*180._jprb/
xrpi,
' DEGREES)', &
383 &
' ; ARGUMENT = ',psinla(6),
' (',psinla(6)*180._jprb/
xrpi,
' DEGREES)' 387 IF(abs(zdelx-psinla(7)) > zeps*10000.)
THEN 388 WRITE(kulout,*)
' RESOLUTION IN X MISMATCH : '&
389 & ,
'FILE = ',zdelx,
' ; ARGUMENT = ',psinla(7)
393 IF(abs(zdely-psinla(8)) > zeps*10000.)
THEN 394 WRITE(kulout,*)
' RESOLUTION IN Y MISMATCH : '&
395 & ,
'FILE = ',zdely,
' ; ARGUMENT = ',psinla(8)
399 IF(inlopa(2) == 0)
THEN 400 IF(knlopa(2) /= 0)
THEN 402 IF ((knlopa(4)-knlopa(3)+1 /= knxlon).OR.&
403 & (knlopa(6)-knlopa(5)+1 /= kdgl))
THEN 404 IF(kinf == 0.OR.kinf == -1)
THEN 405 WRITE(kulout,*)
'HORIZONTAL DOMAIN INDICATOR (NDOM) ',&
407 &
'FILE = ',inlopa(2),
' (C+I) ; ARGUMENT = ',knlopa(2),&
409 WRITE(kulout,*)
' PROPER INITIALIZATION OF (E) '&
410 & ,
'IS EXPECTED IN THE CALLING SUBROUTINE' 416 WRITE(kulout,*)
' WHEN THIS IS OK, SET KINF=',ii,&
417 &
' IN THE CALLING SUBROUTINE TO ANIHILATE THIS ABORT' 423 IF(knlopa(2) == 0)
THEN 425 IF ((inlopa(4)-inlopa(3)+1 /= inxlon).OR.&
426 & (inlopa(6)-inlopa(5)+1 /= inlati))
THEN 427 IF(kinf == 0.OR.kinf == -1)
THEN 428 WRITE(kulout,*)
'HORIZONTAL DOMAIN INDICATOR (NDOM) ',&
430 &
'FILE = ',inlopa(2),
' (C+I+E) ; ARGUMENT = ',&
432 WRITE(kulout,*)
' PROPER INITIALIZATION OF (E) '&
433 & ,
'IS EXPECTED IN THE CALLING SUBROUTINE' 439 WRITE(kulout,*)
' WHEN THIS IS OK, SET KINF=',ii,&
440 &
' IN THE CALLING SUBROUTINE TO ANIHILATE THIS ABORT' 444 ELSEIF(inlopa(2) == 1.AND.knlopa(2) == -1)
THEN 445 WRITE(kulout,*)
' CAUTION : FILE CONTAINS SPECTRALLY ',
'FITTED DATA' 446 ELSEIF(inlopa(2) == -1.AND.knlopa(2) == 1)
THEN 447 WRITE(kulout,*)
' CAUTION : FILE CONTAINS UNFITTED DATA' 451 IF(inlopa(3) /= knlopa(3))
THEN 452 WRITE(kulout,*)
' START INDEX FOR C+I IN X DIRECTION '&
453 & ,
'(NDLUNG) MISMATCH : '&
454 & ,
' FILE = ',inlopa(3),
' ; ARGUMENT = ',knlopa(3)
458 IF(inlopa(4) /= knlopa(4))
THEN 459 WRITE(kulout,*)
' END INDEX FOR C+I IN X DIRECTION '&
460 & ,
'(NDLUXG) MISMATCH : '&
461 & ,
' FILE = ',inlopa(4),
' ; ARGUMENT = ',knlopa(4)
465 IF(inlopa(5) /= knlopa(5))
THEN 466 WRITE(kulout,*)
' START INDEX FOR C+I IN Y DIRECTION '&
467 & ,
'(NDGUNG) MISMATCH : '&
468 & ,
' FILE = ',inlopa(5),
' ; ARGUMENT = ',knlopa(5)
472 IF(inlopa(6) /= knlopa(6))
THEN 473 WRITE(kulout,*)
' END INDEX FOR C+I IN Y DIRECTION '&
474 & ,
'(NDGUXG) MISMATCH : '&
475 & ,
' FILE = ',inlopa(6),
' ; ARGUMENT = ',knlopa(6)
479 IF(inlopa(7) /= knlopa(7))
THEN 480 WRITE(kulout,*)
'CAUTION : LENGTH OF I ZONE IN X DIRECTION '&
481 & ,
'(NBZONL) MISMATCH : '&
482 & ,
' FILE = ',inlopa(7),
' ; ARGUMENT = ',knlopa(7)
485 IF(inlopa(8) /= knlopa(8))
THEN 486 WRITE(kulout,*)
'CAUTION : LENGTH OF I ZONE IN Y DIRECTION '&
487 & ,
'(NBZONG) MISMATCH : '&
488 & ,
' FILE = ',inlopa(8),
' ; ARGUMENT = ',knlopa(8)
491 IF (kinf == 0 .AND. zsinla(1) < 0.0_jprb)
THEN 492 IF(ibwx < int(psinla(17)))
THEN 493 WRITE(kulout,*)
' PORTION OF SCIENTIFIC E-ZONE LYING INSIDE C+I (X AXIS) TOO BIG : '&
494 & ,
' FILE = ',ibwx,
' ; ARGUMENT = ',
REAL(PSINLA(17),KIND=
jprb)
497 IF(ibwy < int(psinla(18)))
THEN 498 WRITE(kulout,*)
' PORTION OF SCIENTIFIC E-ZONE LYING INSIDE C+I (Y AXIS) TOO BIG : '&
499 & ,
' FILE = ',ibwy,
' ; ARGUMENT = ',
REAL(PSINLA(18),KIND=
jprb)
506 IF(abs(zelx-psinla(9)) > zeps)
THEN 507 WRITE(kulout,*)
' WAVE LENGTH IN X DIRECTION MISMATCH : '&
508 & ,
'FILE = ',zelx,
' ; ARGUMENT = ',psinla(9)
512 IF(abs(zely-psinla(10)) > zeps)
THEN 513 WRITE(kulout,*)
' WAVE LENGTH IN Y DIRECTION MISMATCH : '&
514 & ,
'FILE = ',zely,
' ; ARGUMENT = ',psinla(10)
522 IF (kinf == 0.OR.kinf == -2)
THEN 523 IF(iniver /= kflev)
THEN 524 WRITE(kulout,*)
' NUMBER OF LEVELS MISMATCH : '&
525 & ,
'FILE = ',iniver,
' ; ARGUMENT = ',kflev
530 IF(abs(zvalh(jflev)*zref-pvalh(jflev)*pref) > peps)
THEN 531 WRITE(kulout,*)
' VERTICAL FUNCTION *A* MISMATCH ON ',&
532 &
'LEVEL ',jflev,
' : ',&
533 &
'FILE = ',zvalh(jflev),
' ; ARGUMENT = ',pvalh(jflev)
537 IF(abs(zvbh(jflev)-pvbh(jflev)) > peps)
THEN 538 WRITE(kulout,*)
' VERTICAL FUNCTION *B* MISMATCH ON ',&
539 &
'LEVEL ',jflev,
' : ',&
540 &
'FILE = ',zvbh(jflev),
' ; ARGUMENT = ',pvbh(jflev)
545 WRITE(kulout,*)
' REFERENCE PRESSURE : ',&
546 &
'FILE = ',zref,
' ; ARGUMENT = ',pref
553 IF(inlopa(1) /= knlopa(1) .AND. (llmap .OR. ldmap) )
THEN 554 WRITE(kulout,*)
' PACKING PARAMETER MISMATCH : '&
555 & ,
'FILE = ',inlopa(1),
' ; ARGUMENT = ',knlopa(1)
560 CALL abor1(
'ECHIEN: ABOR1 CALLED 3.5')
568 ELSEIF(kinf == 1)
THEN 573 ldmap = zcodil >= 0.0_jprb
578 pvalh(jlev) = zvalh(jlev)
579 pvbh(jlev) = zvbh(jlev)
586 IF (zsinla(1) >= 0.0_jprb)
THEN 587 psinla(1) = -1.0_jprb
589 psinla(1) = zsinla(1)
590 psinla(17)= zsinla(17)
591 psinla(18)= zsinla(18)
609 knlopa(jl) = inlopa(jl)
613 WRITE(kulout,*)
'INTERNAL ERROR : KINF = ',kinf
614 CALL abor1(
'ECHIEN: ABOR1 CALLED 4.2')
subroutine falimu(KXNIVV, KXTRON, KXLATI, KXLONG)
subroutine echien(CDNAMC, KTYPTR, LDMAP, KTRONC, KDGL, KNXLON, KNLOPA, PSINLA, KFLEV, PREF, PVALH, PVBH, KINF, PEPS, KULOUT)
subroutine facies(CDNOMC, KTYPTR, PSLAPO, PCLOPO, PSLOPO, PCODIL, KTRONC, KNLATI, KNXLON, KNLOPA, KNOZPA, PSINLA, KNIVER, PREFER, PAHYBR, PBHYBR, LDGARD)
subroutine eggx_n(PI, PRA, KROTEQ, PLONR, PLATR, PBETA, PLON1, PLAT1, PLON2, PLAT2, PLON0, PLAT0, PRPK, KULOUT, KSOTRP, KGIVO, PGELAM, PGELAT, PGM, PGNORX, PGNORY, KDLSA, KDLSUR, KDGSA, KDGEN, KDLUN, KDLUX, KDGUN, KDGUX, PDELX, PDELY, PLONC, PLATC)