SURFEX v8.1
General documentation of Surfex
eggmlt.F90
Go to the documentation of this file.
1 SUBROUTINE eggmlt (PRPI, KDLUX, KDLUN, KDGUX, KDGUN, KULOUT,&
2  & KPRINT, PRPK, PLON0U, PLON1U, PLON2U, KSOTRP, PLAT1R, PLAT2R,&
3  & PHSUD,PBETA)
4 
5 !--------------------------------------------------------------------------
6 ! GEOGRAPHY OF GRID-POINTS AUXILLARY ROUTINE
7 ! LATITUDE FOR ISOTROPIC GRID
8 ! ARPEGE-ALADIN
9 ! ------------------------------------------
10 
11 ! GIVEN THE PROJECTION PARAMETER (PRPK), THE LONGITUDES AND
12 ! ONE LATITUDE, EGGMLT PROVIDES THE OTHER LATITUDE IN SUCH A WAY
13 ! THAT THE GRID SIZE WILL BE THE SAME FOLLOWING X AND Y
14 
15 ! THIS ROUTINE IS CALLED AND CAN BE USED ONLY IN CONNECTION WITH
16 ! SUBROUTINE EGGX
17 
18 ! INPUT PARAMETERS
19 ! ----------------
20 ! PRPI : PI
21 ! KDLUN, KDLUX : ADRESSES OF EXTREME POINTS OF USEFUL DOMAIN IN X
22 ! KDGUN, KDGUX : Y
23 ! KULOUT : OUTPUT FILE UNIT
24 ! KPRINT : IMPRESSIONS SEULEMENT SI KPRINT = 1
25 ! PRPK : PROJECTION PARAMETER, SEE EGGX
26 ! PLON0U : REFERENCE LONGITUDE (MODIFIED FOR DOMAINS ASTRIDE GREEWICH)
27 ! PLON1U : LONGITUDE OF SW CORNER (EQUALLY MODIFIED)
28 ! PLON2U : LONGITUDE OF NE CORNER
29 ! KSOTRP = 0, PLAT1R, PLAT2R KNOWN : EGGMLT SHOULD NOT BE CALLED
30 ! = 1, PLAT1R KNOWN, EGGMLT COMPUTES PLAT2R
31 ! = 2, PLAT2R KONWN, EGGMLT COMPUTES PLAT1R
32 ! PLAT1R : LATITUDE OF SW CORNER
33 ! PLAT2R : LATITUDE OF NE CORNER
34 ! PHSUD = 1., NORTH HEMISPHERE MAPPING OR MERCATOR
35 ! = -1., SOUTH HEMISPHERE MAPPING
36 ! PBETA : ANGLE BETWEEN X-AXIS AND LATITUDE AT PLON0
37 
38 ! OUTPUT PARAMETERS
39 ! -----------------
40 ! EITHER PLAT1R IF KSOTRP = 2
41 ! OR PLAT2R IF KSOTRP = 1
42 
43 ! WRITTEN BY
44 ! ---------- ALAIN JOLY
45 
46 ! ORIGINAL NORTHERN HEMISPHERE VERSION : 31/1/92
47 ! SOUTH HEMISPEHER VERSION : 27/1/93
48 !--------------------------------------------------------------------------
49 
50 USE parkind1 ,ONLY : jpim ,jprb
51 USE yomhook ,ONLY : lhook, dr_hook
52 
53 !--------------------------------------------------------------------------
54 
55 IMPLICIT NONE
56 
57 REAL(KIND=JPRB) ,INTENT(IN) :: PRPI
58 INTEGER(KIND=JPIM),INTENT(IN) :: KDLUX
59 INTEGER(KIND=JPIM),INTENT(IN) :: KDLUN
60 INTEGER(KIND=JPIM),INTENT(IN) :: KDGUX
61 INTEGER(KIND=JPIM),INTENT(IN) :: KDGUN
62 INTEGER(KIND=JPIM),INTENT(IN) :: KULOUT
63 INTEGER(KIND=JPIM),INTENT(IN) :: KPRINT
64 REAL(KIND=JPRB) ,INTENT(IN) :: PRPK
65 REAL(KIND=JPRB) ,INTENT(IN) :: PLON0U
66 REAL(KIND=JPRB) ,INTENT(IN) :: PLON1U
67 REAL(KIND=JPRB) ,INTENT(IN) :: PLON2U
68 INTEGER(KIND=JPIM),INTENT(IN) :: KSOTRP
69 REAL(KIND=JPRB) ,INTENT(INOUT) :: PLAT1R
70 REAL(KIND=JPRB) ,INTENT(INOUT) :: PLAT2R
71 REAL(KIND=JPRB) ,INTENT(IN) :: PHSUD
72 REAL(KIND=JPRB) ,INTENT(IN) :: PBETA
73 
74 !--------------------------------------------------------------------------
75 
76 REAL(KIND=JPRB) :: ZCS, ZCS1, ZCS2, ZDCLA1, ZDCLA2, ZPIS2, ZPIS4,&
77  & ZRAPP, ZTG1, ZTG2, ZTGK1, ZTGK2
78 REAL(KIND=JPRB) :: ZHOOK_HANDLE
79 
80 !--------------------------------------------------------------------------
81 IF (lhook) CALL dr_hook('EGGMLT',0,zhook_handle)
82 !--------------------------------------------------------------------------
83 
84 IF ( kprint == 1 ) THEN
85  WRITE (kulout,*) ' '
86  WRITE (kulout,*) ' --- EGGMLT --- '
87  WRITE (kulout,*) ' '
88 ENDIF
89 zpis2 = prpi*0.5_jprb
90 zpis4 = prpi*0.25_jprb
91 
92 IF ( ksotrp >= 1.AND. prpk /= 0.0_jprb ) THEN
93 
94  ! * STEREO LAMBERT PROJECTION
95  zrapp = phsud*(REAL( kdlux-kdlun ,jprb)/REAL( kdgux-kdgun ,jprb))
96  zcs1 = cos( prpk*(plon1u-plon0u)-pbeta )*zrapp +&
97  & sin( prpk*(plon1u-plon0u)-pbeta )
98  IF ( kprint == 1 ) THEN
99  WRITE (kulout,*) ' ZRAPP = ',zrapp
100  WRITE (kulout,*) ' PLON1U = ',plon1u,' 0U = ',plon0u
101  WRITE (kulout,*) ' PLON1U-PLON0U ',plon1u-plon0u
102  ENDIF
103  zcs2 = cos( prpk*(plon2u-plon0u)-pbeta )*zrapp +&
104  & sin( prpk*(plon2u-plon0u)-pbeta )
105  IF ( ksotrp == 1 ) THEN
106  zdcla1 = zpis4 - 0.5_jprb*plat1r
107  ztgk1 = tan( zdcla1 )**prpk
108  ztg2 = ( ztgk1*zcs1/zcs2 )**(1.0_jprb/prpk)
109  plat2r = zpis2 - 2.0_jprb*atan( ztg2 )
110  IF ( kprint == 1 ) THEN
111  WRITE (kulout,*) ' '
112  WRITE (kulout,*) ' NE LATITUDE PLAT2 MODIFIED '
113  WRITE (kulout,*) ' ZTGK1 = ',ztgk1
114  WRITE (kulout,*) ' ZCS1 = ',zcs1
115  WRITE (kulout,*) ' ZCS2 = ',zcs2
116  WRITE (kulout,*) ' ROTATED LATITUDE LAT2 R = ',plat2r
117  ENDIF
118  ENDIF
119  IF ( ksotrp == 2 ) THEN
120  zdcla2 = zpis4 - 0.5_jprb*plat2r
121  ztgk2 = tan( zdcla2 )**prpk
122  ztg1 = ( ztgk2*zcs2/zcs1 )**(1.0_jprb/prpk)
123  plat1r = zpis2 - 2.0_jprb*atan( ztg1 )
124  IF ( kprint == 1 ) THEN
125  WRITE (kulout,*) ' '
126  WRITE (kulout,*) ' NE LATITUDE PLAT1 MODIFIED '
127  WRITE (kulout,*) ' ROTATED LATITUDE LAT1 R = ',plat1r
128  ENDIF
129  ENDIF
130 ELSEIF ( ksotrp >= 1.AND. prpk == 0.0_jprb ) THEN
131 
132  ! * MERCATOR PROJECTION
133  zrapp = REAL( kdgux-kdgun ,jprb)/REAL( kdlux-kdlun ,jprb)
134  zcs = ( plon2u - plon1u )*(zrapp*cos(pbeta)+sin(pbeta))&
135  & /(cos(pbeta)-zrapp*sin(pbeta))
136  IF ( ksotrp == 1 ) THEN
137  zdcla1 = zpis4 - 0.5_jprb*plat1r
138  ztgk1 = log( tan( zdcla1 ) )
139  ztg2 = exp( ztgk1 - zcs )
140  plat2r = zpis2 - 2.0_jprb*atan( ztg2 )
141  IF ( kprint == 1 ) THEN
142  WRITE (kulout,*) ' '
143  WRITE (kulout,*) ' NE LATITUDE PLAT2 MODIFIED '
144  WRITE (kulout,*) ' ROTATED LATITUDE LAT2 R = ',plat2r
145  ENDIF
146  ENDIF
147  IF ( ksotrp == 2 ) THEN
148  zdcla2 = zpis4 - 0.5_jprb*plat2r
149  ztgk2 = log( tan( zdcla2 ) )
150  ztg1 = exp( ztgk2 + zcs )
151  plat1r = zpis2 - 2.0_jprb*atan( ztg1 )
152  IF ( kprint == 1 ) THEN
153  WRITE (kulout,*) ' '
154  WRITE (kulout,*) ' NE LATITUDE PLAT1 MODIFIED '
155  WRITE (kulout,*) ' ROTATED LATITUDE LAT1 R = ',plat1r
156  ENDIF
157  ENDIF
158 ELSEIF (ksotrp == 0 ) THEN
159  WRITE (kulout,*) ' EGGMLT USELESSLY CALLED '
160 ENDIF
161 
162 IF ( kprint == 1 ) THEN
163  WRITE (kulout,*) ' EGGMLT OVER '
164  WRITE (kulout,*) ' '
165 ENDIF
166 
167 !--------------------------------------------------------------------------
168 IF (lhook) CALL dr_hook('EGGMLT',1,zhook_handle)
169 END SUBROUTINE eggmlt
integer, parameter jpim
Definition: parkind1.F90:13
subroutine eggmlt(PRPI, KDLUX, KDLUN, KDGUX, KDGUN, KULOUT, KPRINT, PRPK, PLON0U, PLON1U, PLON2U, KSOTRP, PLAT1R, PLAT2R, PHSUD, PBETA)
Definition: eggmlt.F90:4
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15