1 SUBROUTINE eggx (PRPI, PRA, KROTEQ, PLONR, PLATR, PBETA,&
2 & PLON1, PLAT1, PLON2, PLAT2, PLON0, PLAT0, PRPK, KULOUT,&
4 & PGELAM, PGELAT, PGM, PGNORX, PGNORY,&
5 & KDLSA, KDLSUR, KDGSA, KDGEN, KDLUN, KDLUX, KDGUN, KDGUX,&
252 INTEGER(KIND=JPIM),
INTENT(IN) :: KDLSA
253 INTEGER(KIND=JPIM),
INTENT(IN) :: KDLSUR
254 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGSA
255 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGEN
256 REAL(KIND=JPRB) ,
INTENT(IN) :: PRPI
257 REAL(KIND=JPRB) ,
INTENT(IN) :: PRA
258 INTEGER(KIND=JPIM),
INTENT(IN) :: KROTEQ
259 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PLONR
260 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PLATR
261 REAL(KIND=JPRB) ,
INTENT(IN) :: PBETA
262 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PLON1
263 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PLAT1
264 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PLON2
265 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PLAT2
266 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PLON0
267 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PLAT0
268 REAL(KIND=JPRB) ,
INTENT(INOUT) :: PRPK
269 INTEGER(KIND=JPIM),
INTENT(IN) :: KULOUT
270 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KSOTRP
271 INTEGER(KIND=JPIM),
INTENT(IN) :: KGIV0
272 REAL(KIND=JPRB) ,
INTENT(OUT) :: PGELAM(kdlsa:kdlsur,kdgsa:kdgen)
273 REAL(KIND=JPRB) ,
INTENT(OUT) :: PGELAT(kdlsa:kdlsur,kdgsa:kdgen)
274 REAL(KIND=JPRB) ,
INTENT(OUT) :: PGM(kdlsa:kdlsur,kdgsa:kdgen)
275 REAL(KIND=JPRB) ,
INTENT(OUT) :: PGNORX(kdlsa:kdlsur,kdgsa:kdgen)
276 REAL(KIND=JPRB) ,
INTENT(OUT) :: PGNORY(kdlsa:kdlsur,kdgsa:kdgen)
277 INTEGER(KIND=JPIM),
INTENT(IN) :: KDLUN
278 INTEGER(KIND=JPIM),
INTENT(IN) :: KDLUX
279 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGUN
280 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGUX
281 REAL(KIND=JPRB) ,
INTENT(OUT) :: PDELX
282 REAL(KIND=JPRB) ,
INTENT(OUT) :: PDELY
286 INTEGER(KIND=JPIM) :: INBESS, INNEGA, ISPECA, ITERK, ITERKX, JLAT, JLON
287 INTEGER(KIND=JPIM) :: ISOTRP
289 LOGICAL :: LLGWH, LL510, LL520
293 REAL(KIND=JPRB) :: ZCONDEG, ZCONRAD, ZCOSA, ZCOSO, ZDCLA0, ZDCLA1,&
294 & ZDCLA2, ZDLON, ZDM, ZDMMAX, ZDMMIN, ZDRK, &
295 & ZDTLAT, ZFACE, ZIPV, ZJPV, ZLAT, ZLAT2R, &
296 & ZLATLIM, ZLON, ZLON2U, ZPIS2, ZPIS4, ZRKAX, &
297 & ZRKI, ZRKII, ZRKIN, ZRKOLD, ZRKT, ZRPK, ZSECAN, &
298 & ZSECUR, ZSINA, ZSINO, ZUSKP
299 REAL(KIND=JPRB) :: ZHOOK_HANDLE
306 #include "abor1.intfb.h" 312 zpis2 = prpi*0.5_jprb
313 zpis4 = prpi*0.25_jprb
320 zconrad = prpi/180._jprb
321 zcondeg = 180._jprb/prpi
324 WRITE (kulout,*)
' ---------------------------------- ' 326 WRITE (kulout,*)
' ARPEGE-ALADIN ' 328 WRITE (kulout,*)
' GEOGRAPHY OF GRID-POINTS ' 330 WRITE (kulout,*)
' ---------------------------------- ' 332 WRITE (kulout,*)
' INPUT PARAMETERS ' 334 WRITE (kulout,*)
' PI = ',prpi
335 WRITE (kulout,*)
' RADIUS OF PLANET A = ',pra*1.e-03_jprb,
' KM ' 337 WRITE (kulout,*)
' X-SIZE OF ARRAYS ',kdlsur-kdlsa+1
338 WRITE (kulout,*)
' Y-SIZE OF ARRAYS ',kdgen-kdgsa+1
340 WRITE (kulout,*)
' X WINDOW KDLUN = ',kdlun,
' KDLUX = ',kdlux
341 WRITE (kulout,*)
' SIZE = ',kdlux-kdlun+1
342 WRITE (kulout,*)
' Y WINDOW KDGUN = ',kdgun,
' KDGUX = ',kdgux
343 WRITE (kulout,*)
' SIZE = ',kdgux-kdgun+1
345 WRITE (kulout,*)
' ROTATION PARAMETER KROTEQ = ',kroteq
346 WRITE (kulout,*)
' PLONR = ',plonr
347 WRITE (kulout,*)
' PLATR = ',platr
349 WRITE (kulout,*)
' ANGLE WITH X/LATITUDE AT PLON0 = ',pbeta
351 WRITE (kulout,*)
' SW CORNER PLON1 = ',plon1
352 WRITE (kulout,*)
' PLAT1 = ',plat1
354 WRITE (kulout,*)
' NE CORNER PLON2 = ',plon2
355 WRITE (kulout,*)
' PLAT2 = ',plat2
357 WRITE (kulout,*)
' PROJECTION PARAMETER PRPK = ',prpk
358 WRITE (kulout,*)
' REF POINT PLON0 = ',plon0
359 WRITE (kulout,*)
' PLAT0 = ',plat0
361 WRITE (kulout,*)
' ISOTROPY PARAMETER KSOTRP = ',ksotrp
363 WRITE (kulout,*)
' PROJECTION REF POINT KGIV0 = ',kgiv0
365 WRITE (kulout,*)
' ---------------------------------- ' 369 llplanex = kdlun == kdlux
370 llplaney = kdgun == kdgux
372 IF( llplanex.OR.llplaney )
THEN 376 WRITE (kulout,*)
'YOU RUN PLANE MODEL' 377 WRITE (kulout,*)
'KSOTRP LOCALLY RESET TO 0 (ISOTROPIC PARAMETER) ' 378 WRITE (kulout,*)
'ISOTROPY PARAMETER KSOTRP = ',ksotrp
383 IF ( kroteq == 0 )
THEN 387 IF ( prpk < 0.0_jprb )
THEN 392 IF ( kroteq == 1 )
THEN 393 IF ( plonr < 0.0_jprb )
THEN 394 plonr = plonr + 2.0_jprb*prpi
395 WRITE (kulout,*)
' *** EGGX ERROR *** WRONG CONVENTION',&
396 &
' USED FOR LONGITUDES ' 397 WRITE (kulout,*)
' *** NEW PLONR = ',plonr
400 IF ( plon1 < 0.0_jprb )
THEN 401 plon1 = plon1 + 2.0_jprb*prpi
402 WRITE (kulout,*)
' *** EGGX ERROR *** WRONG CONVENTION',&
403 &
' USED FOR LONGITUDES ' 404 WRITE (kulout,*)
' *** NEW PLON1 = ',plon1
406 IF ( plon2 < 0.0_jprb )
THEN 407 plon2 = plon2 + 2.0_jprb*prpi
408 WRITE (kulout,*)
' *** EGGX ERROR *** WRONG CONVENTION',&
409 &
' USED FOR LONGITUDES ' 410 WRITE (kulout,*)
' *** NEW PLON2 = ',plon2
412 IF ( kgiv0 == 0.OR. kgiv0 == 2 )
THEN 413 IF ( plon0 < 0.0_jprb )
THEN 414 plon0 = plon0 + 2.0_jprb*prpi
415 WRITE (kulout,*)
' *** EGGX ERROR *** WRONG CONVENTION',&
416 &
' USED FOR LONGITUDES ' 417 WRITE (kulout,*)
' *** NEW PLON0 = ',plon0
430 IF ( kroteq == 0 )
THEN 432 IF ( prpk == 10._jprb .OR. (prpk > 0.0_jprb .AND. prpk <= 1.0_jprb) )
THEN 436 IF ( ksotrp == 0 )
THEN 437 IF ( plat1 < 0.0_jprb .AND. plat2 < 0.0_jprb )
THEN 442 ELSEIF (ksotrp == 1 )
THEN 443 IF ( plat1 < 0.0_jprb )
THEN 444 IF ( zpis2 >= plat2.AND. plat2 >= -zpis2 )
THEN 445 IF ( plat2 < 0.0_jprb )
THEN 449 ELSEIF ( prpk == 10._jprb .AND. plat2 >= 0.0_jprb )
THEN 452 WRITE (kulout,*)
' *** EGGX WARNING *** ',&
453 &
' YOU SHOULD USE MERCATOR PROJECTION ' 455 ELSEIF ( prpk /= 10._jprb )
THEN 459 WRITE (kulout,*)
' *** EGGX ERROR *** ',&
460 &
' REFERENCE POLE (HSUD) CANNOT BE DECIDED ' 461 WRITE (kulout,*)
' RERUN WITH A REASONABLE GUESS ',
' FOR PLAT2 ' 462 CALL abor1(
' EGGX: abor1 2.1')
466 ELSEIF ( ksotrp == 2 )
THEN 467 IF ( plat2 < 0.0_jprb )
THEN 468 IF ( zpis2 >= plat1.AND. plat1 >= -zpis2 )
THEN 469 IF ( plat1 < 0.0_jprb )
THEN 473 ELSEIF ( plat1 >= 0.0_jprb )
THEN 474 WRITE (kulout,*)
' *** EGGX ERROR *** ',&
475 &
' PLAT1 CANNOT BE GREATER THAN PLAT2 ' 476 WRITE (kulout,*)
' RERUN WITH A REASONABLE GUESS ',
' FOR PLAT1 ' 477 CALL abor1(
' EGGX: abor1 2.2')
479 ELSEIF ( prpk /= 10._jprb )
THEN 483 WRITE (kulout,*)
' *** EGGX ERROR *** ',&
484 &
' REFERENCE POLE (HSUD) CANNOT BE DECIDED ' 485 WRITE (kulout,*)
' RERUN WITH A REASONABLE GUESS ',
' FOR PLAT1 ' 486 CALL abor1(
' EGGX: abor1 2.3')
493 IF (
hsud < 0.0_jprb )
THEN 498 xlon1r =mod(plon1,2.0_jprb*prpi)
499 IF ( ksotrp /= 2 )
xlat1r = plat1
500 xlon2r = mod(plon2,2.0_jprb*prpi)
501 IF ( ksotrp /= 1 ) zlat2r = plat2
502 IF ( kgiv0 == 0.OR. kgiv0 == 2 )
xlon0r = plon0
503 IF ( kgiv0 == 0.OR. kgiv0 == 1 )
xlat0r = plat0
507 IF ( ksotrp == 0.OR. ksotrp == 1 )
THEN 510 zsina = cos( platr )*sin( plat1 )&
511 & - sin( platr )*cos( plat1 )*cos( plon1-plonr )
513 IF ( abs(
xlat1r ) >= zpis2 )
THEN 517 zcoso = ( sin( platr )*sin( plat1 ) +&
518 & cos( platr )*cos( plat1 )*cos( plon1-plonr ) )/zcosa
519 zcoso = min(1.0_jprb,max(-1.0_jprb,zcoso))
520 zsino = ( cos( plat1 )*sin( plon1-plonr ) )/zcosa
521 zsino = min(1.0_jprb,max(-1.0_jprb,zsino))
523 IF ( asin( zsino ) < 0.0_jprb )
xlon1r = 2.0_jprb*prpi -
xlon1r 527 IF ( ksotrp == 0.OR. ksotrp == 2 )
THEN 530 zsina = cos( platr )*sin( plat2 )&
531 & - sin( platr )*cos( plat2 )*cos( plon2-plonr )
532 zlat2r = asin( zsina )
533 IF ( abs( zlat2r ) >= zpis2 )
THEN 536 zcosa = cos( zlat2r )
537 zcoso = ( sin( platr )*sin( plat2 ) +&
538 & cos( platr )*cos( plat2 )*cos( plon2-plonr ) )/zcosa
539 zcoso = min(1.0_jprb,max(-1.0_jprb,zcoso))
540 zsino = ( cos( plat2 )*sin( plon2-plonr ) )/zcosa
541 zsino = min(1.0_jprb,max(-1.0_jprb,zsino))
543 IF ( asin( zsino ) < 0.0_jprb )
xlon2r = 2.0_jprb*prpi -
xlon2r 549 IF ( kgiv0 == 2 )
THEN 550 WRITE (kulout,*)
' *** EGGX ERROR ' 551 WRITE (kulout,*)
' KGIV0 = 2 IMPOSSIBLE WITH KROTEQ = 1 ' 552 CALL abor1(
' EGGX: abor1 2.4')
554 IF ( kgiv0 == 0.OR. kgiv0 == 1 )
THEN 555 zsina = cos( platr )*sin( plat0 )&
556 & - sin( platr )*cos( plat0 )*cos( plon0-plonr )
559 IF ( kgiv0 == 0 )
THEN 560 IF ( abs(
xlat0r ) >= zpis2 )
THEN 563 zcosa = max( cos(
xlat0r ) , zsecur )
564 zcoso = ( sin( platr )*sin( plat0 ) +&
565 & cos( platr )*cos( plat0 )*cos( plon0-plonr ) )/zcosa
566 zcoso = min(1.0_jprb,max(-1.0_jprb,zcoso))
567 zsino = ( cos( plat0 )*sin( plon0-plonr ) )/zcosa
568 zsino = min(1.0_jprb,max(-1.0_jprb,zsino))
570 IF ( asin( zsino ) < 0.0_jprb )
xlon0r = 2.0_jprb*prpi -
xlon0r 575 IF ( kroteq /= 0 )
THEN 576 IF ( prpk > 0.0_jprb )
THEN 577 WRITE (kulout,*)
' *** EGGX WARNING ',&
578 &
' USE OF ROTATION + NON-MERCATOR PROJECTION WILL LEAD ',&
579 &
' TO UNPREDICTABLE RESULTS, ESP. IN SOUTH HEMISPHERE ' 580 IF (
xlat1r < 0.0_jprb .AND. zlat2r < 0.0_jprb )
THEN 583 zlat2r = abs( zlat2r )
590 WRITE (kulout,*)
' HEMISPHERE INDICATOR HSUD = ',
hsud 592 WRITE (kulout,*)
' ROTATED COORDINATES ' 593 WRITE (kulout,*)
' SW CORNER XLON1R = ',
xlon1r 594 WRITE (kulout,*)
' XLAT1R = ',
xlat1r 596 WRITE (kulout,*)
' NE CORNER XLON2R = ',
xlon2r 597 WRITE (kulout,*)
' ZLAT2R = ',zlat2r
599 WRITE (kulout,*)
' REF POINT XLON0R = ',
xlon0r 600 WRITE (kulout,*)
' XLAT0R = ',
xlat0r 607 IF ( prpk < 0.0_jprb )
THEN 614 IF ( ksotrp == 0 )
THEN 617 IF ( zlon2u <
xlon1u ) zlon2u = 2.0_jprb*prpi + zlon2u
620 IF ( ksotrp == 1 )
THEN 624 &
REAL(kdlux-kdlun,
jprb)/
REAL(KDGUX-KDGUN,JPRB) 626 IF ( zlon2u >= 2.0_jprb*prpi )
xlon2r = zlon2u - 2.0_jprb*prpi
628 IF ( ksotrp == 2 )
THEN 632 &
REAL(kdlux-kdlun,
jprb)/
REAL(KDGUX-KDGUN,JPRB) 637 IF( .NOT.llplanex.AND..NOT.llplaney )
THEN 638 pdelx = ( zlon2u-
xlon1u )/
REAL( kdlux-kdlun ,
jprb)
639 pdely = ( zlat2r-
xlat1r )/
REAL( kdgux-kdgun ,
jprb)
640 ELSEIF( llplanex )
THEN 641 pdely = ( zlat2r-
xlat1r )/
REAL( kdgux-kdgun )
643 ELSEIF( llplaney )
THEN 644 pdelx = ( zlon2u-
xlon1u )/
REAL( kdlux-kdlun )
654 DO jlat = kdgun, kdgux
655 zlat =
REAL(jlat-kdgun,
jprb)*PDELY
657 DO jlon = kdlun, kdlux
658 zlon =
REAL(jlon-kdlun,
jprb)*PDELX
659 pgelam(jlon,jlat) = zlon
660 pgelat(jlon,jlat) = zlat
663 CALL eggrvs (prpi, pra, pdelx, pdely, kdlsur-kdlsa+1,&
664 & 1, kdlux-kdlun+1, kulout,&
665 & pgelam(kdlun,jlat), pgelat(kdlun,jlat), pgm(kdlun,jlat),&
666 & pgnorx(kdlun,jlat), pgnory(kdlun,jlat))
678 IF ( prpk >= 0.0_jprb )
THEN 692 zlon2u =
xlon2r + 2.0_jprb*prpi
695 IF ( kgiv0 == 1.OR. kgiv0 == 3 )
THEN 696 IF ( abs(abs(zlon2u-
xlon1u)-prpi) > zsecan )
THEN 697 WRITE (kulout,*)
' NORMAL LONGITUDE DIFFERENCE ' 701 WRITE (kulout,*)
' LONGITUDE DIFFERENCE = PI ' 707 WRITE (kulout,*)
' PROJECTION REFERENCE LONGITUDE ' 708 WRITE (kulout,*)
' (ON ROTATED SPHERE) LON0R = ',
xlon0r 709 WRITE (kulout,*)
' GREENWICH LOGICAL = ',llgwh
721 IF ( prpk <= 1.0_jprb )
THEN 724 IF ( ksotrp >= 1 )
THEN 727 CALL eggmlt (prpi,kdlux,kdlun,kdgux,kdgun,kulout,1,&
735 IF ( kgiv0 == 2.OR. kgiv0 == 3 )
THEN 739 WRITE (kulout,*)
' PROJECTION REFERENCE LATITUDE ',&
740 &
' (ON ROTATED SPHERE) ' 741 WRITE (kulout,*)
' LAT0R = ',
xlat0r 749 IF ( prpk == 10._jprb )
THEN 754 zlatlim = prpi/6._jprb
756 IF ( ksotrp == 0 )
THEN 758 IF (
xlat1r < zlatlim ) zrpk = 0.0_jprb
759 ELSEIF ( ksotrp == 1 )
THEN 761 IF (
xlat1r < zlatlim ) zrpk = 0.0_jprb
762 ELSEIF ( ksotrp == 2 )
THEN 764 IF ( zlat2r < zlatlim ) zrpk = 0.0_jprb
768 IF ( ksotrp >= 1 )
THEN 769 CALL eggmlt (prpi,kdlux,kdlun,kdgux,kdgun,kulout,1,&
774 IF ( kgiv0 == 2.OR. kgiv0 == 3 )
THEN 794 IF (
xlat1r*zlat2r <= 0.0_jprb )
THEN 799 ELSEIF (
hsud > 0.0_jprb .AND.abs(zlat2r) <= abs(
xlat1r) )
THEN 804 ELSEIF (
hsud < 0.0_jprb .AND.abs(
xlat1r) <= abs(zlat2r) )
THEN 809 ELSEIF ( abs(abs(zlat2r)-zpis2) < zsecan )
THEN 812 ELSEIF ( abs(abs(
xlat1r)-zpis2) < zsecan )
THEN 817 IF ( ispeca /= 1 )
THEN 834 IF ( zrkt == 0.0_jprb )
THEN 836 ELSEIF ( zrkt /= 1.0_jprb )
THEN 837 zdm = (cos(
xlat0r)**(1.0_jprb-zrkt))*&
838 & ((1.0_jprb+sin(
xlat0r))**zrkt)*( (cos(
xlat1r)**(zrkt-1.0_jprb))*&
839 & ((1.0_jprb+sin(
xlat1r))**(-zrkt)) - (cos(zlat2r)**(zrkt-1.0_jprb))*&
840 & ((1.0_jprb+sin(zlat2r))**(-zrkt)) )
841 ELSEIF ( zrkt == 1.0_jprb )
THEN 842 zdm = (1.0_jprb+sin(
xlat0r))*( 1.0_jprb/(1.0_jprb+sin(
xlat1r)) -&
843 & 1.0_jprb/(1.0_jprb+sin(zlat2r)) )
846 IF ( zdm <= 0.0_jprb )
THEN 849 IF ( zdm >= zdmmax .AND. zdm > 0.0_jprb )
THEN 853 IF ( zdm <= zdmmin .AND. zdm > 0.0_jprb )
THEN 858 ll520=(zrkt <= 1.0_jprb)
862 WRITE (kulout,*)
' CHOICE OF OPTIMAL RK ITERATION ',iterk
863 WRITE (kulout,*)
' PREVIOUS RK ',zrkold
864 WRITE (kulout,*)
' TEST OVER ',inbess,
' VALUES ' 865 WRITE (kulout,*)
' INCLUDING ',innega,
' NEGATIVE VALUES' 866 WRITE (kulout,*)
' RK MINI = ',zrki,
' INCRMENT = ',zdrk
868 WRITE (kulout,*)
' DELTA(M) MAXI = ',zdmmax,
' AT RK = ',zrkax
869 WRITE (kulout,*)
' DELTA(M) MINI = ',zdmmin,
' AT RK = ',zrkin
877 IF ( ksotrp == 0 )
THEN 880 ELSEIF ( ksotrp >= 1 )
THEN 882 CALL eggmlt (prpi,kdlux,kdlun,kdgux,kdgun,kulout,1,&
887 IF ( kgiv0 == 2.OR. kgiv0 == 3 )
THEN 894 IF ( iterk > iterkx )
THEN 895 WRITE (kulout,*)
' *** EGGX **** TROUBLE ' 896 WRITE (kulout,*)
' NO CONVERGENCE OF AUTOMATIC CHOICE ' 897 CALL abor1(
' EGGX: abor1 5.1')
900 ll510=(abs(zrpk-zrkold) > zdrk)
906 WRITE (kulout,*)
' --- EGGX AUTOMATIC CHOICE ' 908 WRITE (kulout,*)
' FINAL VALUE OF PRPK = ',prpk
910 WRITE (kulout,*)
' PROJECTION REFERENCE LATITUDE ',&
911 &
' (ON ROTATED SPHERE) ' 912 WRITE (kulout,*)
' FINAL LATITUDE LAT1 R = ',
xlat1r 913 WRITE (kulout,*)
' FINAL LATITUDE LAT2 R = ',zlat2r
914 WRITE (kulout,*)
' LAT0R = ',
xlat0r 929 IF ( prpk > 1.0_jprb )
THEN 930 WRITE (kulout,*)
' *** EGGX ERROR : NON-EXISTING PROJ.' 931 CALL abor1(
' EGGX: abor1 6.1')
934 IF ( prpk > 0.0_jprb )
THEN 935 WRITE (kulout,*)
' STEREO OR LAMBERT PROJECTION ' 936 IF ( prpk == 1.0_jprb )
WRITE (kulout,*)&
937 &
' EFFECTIVELY STREOGRAPHIC PROJECTION ' 943 zdcla1 = zpis4 - 0.5_jprb*
xlat1r 944 zdcla2 = zpis4 - 0.5_jprb*zlat2r
945 zdcla0 = zpis4 - 0.5_jprb*
xlat0r 947 IF ( prpk < 1.0_jprb )
THEN 949 & ( ( 1.0_jprb + sin(
xlat0r ) )**prpk )
960 IF( .NOT.llplanex.AND..NOT.llplaney )
THEN 961 pdelx = pra*zuskp*( (tan(zdcla2)**prpk)*sin( prpk*(&
964 pdely =
hsud*pra*zuskp*( (tan(zdcla1)**prpk)*cos( prpk*(&
966 & cos( prpk*(zlon2u-
xlon0u)-
xbeta ) )/
REAL(KDGUX-KDGUN,JPRB) 967 ELSEIF( llplanex )
THEN 968 pdely =
hsud*pra*zuskp*( (tan(zdcla1)**prpk)*cos( prpk*(&
970 & cos( prpk*(zlon2u-
xlon0u)-
xbeta ) )/
REAL(KDGUX-KDGUN) 972 ELSEIF( llplaney )
THEN 973 pdelx = pra*zuskp*( (tan(zdcla2)**prpk)*sin( prpk*(&
980 WRITE (kulout,*)
' MAP FACTOR BASE XGGM0 = ',
xggm0 981 WRITE (kulout,*)
' ZUSKP = ',zuskp
983 WRITE (kulout,*)
' X GRID SIZE (KM) = ',pdelx*1.e-03_jprb
985 WRITE (kulout,*)
' Y GRID SIZE (KM) = ',pdely*1.e-03_jprb
991 xipore = - pra*zuskp*( tan( zdcla1 )**prpk )*&
993 xjpore =
hsud*pra*zuskp*( tan( zdcla1 )**prpk )*&
998 WRITE (kulout,*)
' POLE LOCATION ON GRID IP = ',
xipore,
' JP = ',
xjpore 1000 zipv =
REAL( KDLUX ,JPRB) - PRA*ZUSKP*( tan( zdcla2 )**prpk )*&
1001 & SIN( PRPK*(ZLON2U-XLON0U)-XBETA )/PDELX - REAL(KDLUN,JPRB)
1002 ZJPV =
real( kdgux ,
jprb) + pra*zuskp*( tan( zdcla2 )**prpk )*&
1006 WRITE (kulout,*)
' VRF POLE LOCATION ON GRID IP = ',zipv,
' JP = ',zjpv
1011 DO jlat = kdgun, kdgux
1013 DO jlon = kdlun, kdlux
1014 pgelam(jlon,jlat) =
REAL(jlon-kdlun,
jprb)*PDELX
1015 pgelat(jlon,jlat) =
REAL(jlat-kdgun,
jprb)*PDELY
1018 CALL eggrvs (prpi, pra, pdelx, pdely, kdlsur-kdlsa+1,&
1019 & 1, kdlux-kdlun+1, kulout,&
1020 & pgelam(kdlun,jlat), pgelat(kdlun,jlat), pgm(kdlun,jlat),&
1021 & pgnorx(kdlun,jlat), pgnory(kdlun,jlat))
1026 IF ( prpk == 0.0_jprb )
THEN 1027 WRITE (kulout,*)
' MERCATOR PROJECTION ' 1033 zdcla1 = zpis4 - 0.5_jprb*
xlat1r 1034 zdcla2 = zpis4 - 0.5_jprb*zlat2r
1035 zdcla0 = zpis4 - 0.5_jprb*
xlat0r 1040 zface = pra*cos(
xlat0r )
1042 zdtlat = log( tan(zdcla1)/tan(zdcla2) )
1043 IF( .NOT.llplanex.AND..NOT.llplaney )
THEN 1044 pdelx = zface*( zdlon*cos(
xbeta) + zdtlat*sin(
xbeta) )&
1045 & /
REAL( KDLUX-KDLUN ,JPRB) 1046 pdely = zface*( -zdlon*sin(
xbeta) + zdtlat*cos(
xbeta) )&
1047 & /
REAL( KDGUX-KDGUN ,JPRB) 1048 ELSEIF( llplanex )
THEN 1049 pdely = zface*( -zdlon*sin(
xbeta) + zdtlat*cos(
xbeta) )&
1050 & /
REAL( KDGUX-KDGUN ) 1052 ELSEIF( llplaney )
THEN 1053 pdelx = zface*( zdlon*cos(
xbeta) + zdtlat*sin(
xbeta) )&
1054 & /
REAL( KDLUX-KDLUN ) 1058 WRITE (kulout,*)
' ' 1059 WRITE (kulout,*)
' MAP FACTOR BASE COS( LAT0 ) = ',cos(
xlat0r )
1060 WRITE (kulout,*)
' ' 1061 WRITE (kulout,*)
' X GRID SIZE (KM) = ',pdelx*1.e-03_jprb
1062 WRITE (kulout,*)
' ' 1063 WRITE (kulout,*)
' Y GRID SIZE (KM) = ',pdely*1.e-03_jprb
1064 WRITE (kulout,*)
' ' 1075 WRITE (kulout,*)
' ' 1076 WRITE (kulout,*)
' EQUATOR LOCATION ON GRID IE = ',
xipore,
' JE = ',
xjpore 1081 DO jlat = kdgun, kdgux
1083 DO jlon = kdlun, kdlux
1084 pgelam(jlon,jlat) =
REAL(jlon-kdlun,
jprb)*PDELX
1085 pgelat(jlon,jlat) =
REAL(jlat-kdgun,
jprb)*PDELY
1088 CALL eggrvs (prpi, pra, pdelx, pdely, kdlsur-kdlsa+1,&
1089 & 1, kdlux-kdlun+1, kulout,&
1090 & pgelam(kdlun,jlat), pgelat(kdlun,jlat), pgm(kdlun,jlat),&
1091 & pgnorx(kdlun,jlat), pgnory(kdlun,jlat))
1104 IF ( ksotrp == 1 )
THEN 1105 plat2 = pgelat(kdlux,kdgux)
1106 plon2 = pgelam(kdlux,kdgux)
1108 IF ( ksotrp == 2 )
THEN 1109 plat1 = pgelat(kdlun,kdgun)
1110 plon1 = pgelam(kdlun,kdgun)
1115 plon1=mod(plon1,2*prpi)
1116 plon2=mod(plon2,2*prpi)
1118 IF (
hsud < 0.0_jprb )
THEN 1119 IF ( ksotrp /= 2 )
THEN 1122 IF ( ksotrp /= 1 )
THEN 1129 IF( llplanex.OR.llplaney )
THEN 1133 WRITE (kulout,*)
' ' 1134 WRITE (kulout,*)
' ---------- ' 1135 WRITE (kulout,*)
' ' 1136 WRITE (kulout,*)
' EGGX IS OVER ' 1137 WRITE (kulout,*)
' ' 1138 WRITE (kulout,*)
' ---------- ' 1139 WRITE (kulout,*)
' ' 1140 WRITE (kulout,*)
' ' integer(kind=jpim) nymggr
subroutine eggmlt(PRPI, KDLUX, KDLUN, KDGUX, KDGUN, KULOUT, KPRINT, PRPK, PLON0U, PLON1U, PLON2U, KSOTRP, PLAT1R, PLAT2R, PHSUD, PBETA)
integer(kind=jpim) nymggi
integer(kind=jpim) nymggwh
subroutine eggrvs(PRPI, PRA, PDELX, PDELY, KPROF, KBEG, KEND, KULOUT, PGELAM, PGELAT, PGM, PGNORX, PGNORY)
subroutine eggx(PRPI, PRA, KROTEQ, PLONR, PLATR, PBETA, PLON1, PLAT1, PLON2, PLAT2, PLON0, PLAT0, PRPK, KULOUT, KSOTRP, KGIV0, PGELAM, PGELAT, PGM, PGNORX, PGNORY, KDLSA, KDLSUR, KDGSA, KDGEN, KDLUN, KDLUX, KDGUN, KDGUX, PDELX, PDELY)