SURFEX v8.1
General documentation of Surfex
faisc2.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe FA
3 SUBROUTINE faisc2_fort &
4 & (fa, krep, krangc )
5 USE fa_mod, ONLY : fa_com, jpniil
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! Ce sous-programme initialise des tableaux "reference" de
12 ! l'en-tete GRIB, section 2: les differents types de grille
13 ! sont abordes (routine appelee une seule fois pour un cadre donne)
14 !**
15 ! Arguments : KREP (Sortie) ==> Code-reponse du sous-programme;
16 ! KRANGC (Entree) ==> Rang dans la table des cadres;
17 !*
18 !
19 !
20 !
21 TYPE(fa_com) :: FA
22 INTEGER (KIND=JPLIKB) KREP, KRANGC
23 !
24 REAL (KIND=JPDBLR) :: ZPI, ZRAMDE, ZLATPRE, &
25 & ZLATDER, ZLONPRE, ZLONDER
26 REAL (KIND=JPDBLR), PARAMETER :: ONE = 1.0_jpdblr
27 !
28 INTEGER (KIND=JPLIKB) INLAT, INIVAU, INUMER, INIMES
29 !
30 LOGICAL LLMLAM
31 !
32 CHARACTER(LEN=FA%JPLMES) CLMESS
33 CHARACTER(LEN=FA%JPLSPX) CLNSPR
34 
35 !**
36 ! 0. - INITIALISATIONS PREALABLES
37 !-----------------------------------------------------------------------
38 !
39 REAL(KIND=JPRB) :: ZHOOK_HANDLE
40 IF (lhook) CALL dr_hook('FAISC2_MT',0,zhook_handle)
41 krep=0
42 IF (krangc.LE.0.OR.krangc.GT.fa%JPNXCA) THEN
43  krep=-66
44  GOTO 1001
45 ENDIF
46 inlat = fa%CADRE(krangc)%NLATIT
47 inivau = fa%CADRE(krangc)%NNIVER
48 llmlam = fa%CADRE(krangc)%LIMLAM
49 zpi = 2._jpdblr*asin(1._jpdblr)
50 ! Conversion des radians en 1/1000 de degre
51 zramde = 180000._jpdblr/zpi
52 !
53 IF (llmlam) GOTO 300
54 !**
55 ! 1. - KSEC2 POUR LA REPRESENTATION SPECTRALE ARPEGE
56 !-----------------------------------------------------------------------
57 !
58 ! Type de representation de donnees
59 !
60 ! FA%SSLAPO=sinus latitude du pole d'interet
61 ! (si=1, pole=pole N et pas de rotation)
62 ! FA%SCODIL=coeff de dilation (si =1, pas de dilatation)
63 IF ((1._jpdblr-fa%CADRE(krangc)%SSLAPO).LE.1.e-10_jpdblr) THEN
64  fa%CADRE(krangc)%NSEC2SP(1)=70
65  IF (abs(fa%CADRE(krangc)%SCODIL-1._jpdblr).LE.1.e-10_jpdblr) THEN
66  fa%CADRE(krangc)%NSEC2SP(1)=50
67  ENDIF
68 ELSE
69  fa%CADRE(krangc)%NSEC2SP(1)=80
70  IF (abs(fa%CADRE(krangc)%SCODIL-1._jpdblr).LE.1.e-10_jpdblr) THEN
71  fa%CADRE(krangc)%NSEC2SP(1)=60
72  ENDIF
73 ENDIF
74 ! Troncature (3 fois la meme si triangulaire)
75 fa%CADRE(krangc)%NSEC2SP(2) =fa%CADRE(krangc)%MTRONC
76 fa%CADRE(krangc)%NSEC2SP(3) =fa%CADRE(krangc)%MTRONC
77 fa%CADRE(krangc)%NSEC2SP(4) =fa%CADRE(krangc)%MTRONC
78 ! Type de representation
79 fa%CADRE(krangc)%NSEC2SP(5) =1
80 ! Mode de representation (2->complex packing)
81 fa%CADRE(krangc)%NSEC2SP(6) =2
82 ! Reserves
83 fa%CADRE(krangc)%NSEC2SP(7:11)=0
84 ! Nb de parametres pour la coord verticale
85 ! On prend ici le cas de la coordonnee hybride
86 ! mais le cas de la coord pression sera aisement
87 ! pris en compte + tard (KSEC2(12)=0).
88 fa%CADRE(krangc)%NSEC2SP(12)=2*(inivau+1)
89 ! Latitude du pole sud de rotation
90 fa%CADRE(krangc)%NSEC2SP(13)=0
91 ! Longitude du pole sud de rotation
92 fa%CADRE(krangc)%NSEC2SP(14)=0
93 ! Lat et lon du pole d'etirement
94 IF (fa%CADRE(krangc)%NTYPTR.GE.2) THEN
95  fa%CADRE(krangc)%NSEC2SP(15)=int(zramde*asin(fa%CADRE(krangc)%SSLAPO), &
96 & jplikb)
97  fa%CADRE(krangc)%NSEC2SP(16)=int(zramde* &
98 & (sign(one,fa%CADRE(krangc)%SSLOPO)*acos(fa%CADRE(krangc)%SCLOPO)), &
99 & jplikb)
100 ELSE
101  fa%CADRE(krangc)%NSEC2SP(15)=0
102  fa%CADRE(krangc)%NSEC2SP(16)=0
103 ENDIF
104 ! Reserves
105 fa%CADRE(krangc)%NSEC2SP(17:22)=0
106 !**
107 ! 2. - KSEC2 POUR LA GRILLE DE GAUSS (ARPEGE)
108 !-----------------------------------------------------------------------
109 !
110 ! Type de representation de donnees
111 !
112 ! FA%SSLAPO=sinus latitude du pole d'interet
113 ! (si=1, pole=pole N et pas de rotation)
114 ! FA%SCODIL=coeff de dilation (si =1, pas de dilatation)
115 IF ((1._jpdblr-fa%CADRE(krangc)%SSLAPO).LE.1.e-10_jpdblr) THEN
116  fa%CADRE(krangc)%NSEC2GG(1)=24
117  IF (abs(fa%CADRE(krangc)%SCODIL-1._jpdblr).LE.1.e-10_jpdblr) THEN
118  fa%CADRE(krangc)%NSEC2GG(1)=4
119  ENDIF
120 ELSE
121  fa%CADRE(krangc)%NSEC2GG(1)=34
122  IF (abs(fa%CADRE(krangc)%SCODIL-1._jpdblr).LE.1.e-10_jpdblr) THEN
123  fa%CADRE(krangc)%NSEC2GG(1)=14
124  ENDIF
125 ENDIF
126 ! Nb de pts sur un parallele
127 fa%CADRE(krangc)%NSEC2GG(2)=fa%CADRE(krangc)%NXLOPA
128 ! Nb de pts sur une longitude
129 fa%CADRE(krangc)%NSEC2GG(3)=inlat
130 zlatpre=asin(max(-1._jpdblr,min(1._jpdblr,fa%CADRE(krangc)%SINLAT(1))))
131 ! Latitude (1/1000 degre) du premier pt de grille
132 fa%CADRE(krangc)%NSEC2GG(4)=int(zramde*zlatpre, jplikb)
133 ! Longitude (1/1000 degre) du premier pt de grille
134 fa%CADRE(krangc)%NSEC2GG(5)=0
135 ! Flag pour la resolution (0->on ne donne pas l'increment)
136 fa%CADRE(krangc)%NSEC2GG(6)=0
137 ! Latitude (1/1000 degre) du dernier pt de grille
138 fa%CADRE(krangc)%NSEC2GG(7)=-fa%CADRE(krangc)%NSEC2GG(4)
139 ! Longitude (1/1000 degre) du dernier pt de grille.
140 ! (FA%NLOPAR(1,KRANGC)=nb de longitudes sur le 1er parallele)
141 fa%CADRE(krangc)%NSEC2GG(8)=-360000/fa%CADRE(krangc)%NLOPAR(1)
142 ! Increment zonal (1/1000 degre)
143 ! Pas de sens ici.
144 fa%CADRE(krangc)%NSEC2GG(9)=0
145 ! Nb de paralleles entre le pole et l'equateur
146 fa%CADRE(krangc)%NSEC2GG(10)=(inlat+1)/2
147 ! Flag pour le mode de balayage
148 fa%CADRE(krangc)%NSEC2GG(11)=0
149 ! Nombre de parametres pour la coord. verticale
150 fa%CADRE(krangc)%NSEC2GG(12)=0
151 ! Latitude du pole sud de rotation
152 fa%CADRE(krangc)%NSEC2GG(13)=0
153 ! Longitude du pole sud de rotation
154 fa%CADRE(krangc)%NSEC2GG(14)=0
155 ! Latitude et longitude du pole d'etirement
156 IF (fa%CADRE(krangc)%NTYPTR.GE.2) THEN
157  fa%CADRE(krangc)%NSEC2GG(15)=int(zramde*asin(fa%CADRE(krangc)%SSLAPO), &
158 & jplikb)
159  fa%CADRE(krangc)%NSEC2GG(16)=int(zramde* &
160 & (sign(one,fa%CADRE(krangc)%SSLOPO)*acos(fa%CADRE(krangc)%SCLOPO)), &
161 & jplikb)
162 ELSE
163  fa%CADRE(krangc)%NSEC2GG(15)=0
164  fa%CADRE(krangc)%NSEC2GG(16)=0
165 ENDIF
166 ! Flag: 0 -> grille reguliere, 1 -> grille reduite
167 IF (fa%CADRE(krangc)%NLOPAR(1)==fa%CADRE(krangc)%NLOPAR((1+inlat)/2)) THEN
168  fa%CADRE(krangc)%NSEC2GG(17)=0
169 ELSE
170  fa%CADRE(krangc)%NSEC2GG(17)=1
171 ENDIF
172 ! Flag: 0 -> Terre ronde , 64 -> Terre ellipsoide
173 fa%CADRE(krangc)%NSEC2GG(18)=0
174 ! Flag sur les composantes des vecteurs (0->geographique, 8->grille)
175 fa%CADRE(krangc)%NSEC2GG(19)=0
176 ! Reserves
177 fa%CADRE(krangc)%NSEC2GG(20:22)=0
178 ! Pour les grilles reduites, nb de points sur chaque parallele
179 fa%CADRE(krangc)%NSEC2GG(23:22+(1+inlat)/2)= &
180 & fa%CADRE(krangc)%NLOPAR(1:(1+inlat)/2)
181 fa%CADRE(krangc)%NSEC2GG(23-mod(inlat,2_jplikb )+(1+inlat)/2:22+inlat)= &
182 & fa%CADRE(krangc)%NLOPAR((1+inlat)/2:1:-1)
183 GOTO 600
184 !**
185 ! 3. - KSEC2 POUR LA GRILLE LAT-LON (CAS FULL-POS, ARPEGE OU ALADIN)
186 !-------------------------------------------------------------------------
187 !
188 300 CONTINUE
189 ! TEST POUR NEW EGGX
190 IF (fa%CADRE(krangc)%SINLAT(1) .GE. 0) THEN
191 ! OLD EGGX
192 zlatpre=fa%CADRE(krangc)%SINLAT(7)
193 zlonpre=fa%CADRE(krangc)%SINLAT(4)
194 zlatder=fa%CADRE(krangc)%SINLAT(5)
195 zlonder=fa%CADRE(krangc)%SINLAT(6)
196 ! Type de representation de donnees
197 ELSE
198 ! NEW EGGX
199 zlatpre=fa%CADRE(krangc)%SINLAT(16)
200 zlonpre=fa%CADRE(krangc)%SINLAT(13)
201 zlatder=fa%CADRE(krangc)%SINLAT(14)
202 zlonder=fa%CADRE(krangc)%SINLAT(15)
203 ENDIF
204 !
205 ! Type de representation de donnees
206 fa%CADRE(krangc)%NSEC2LL(1)=0
207 ! Nb de pts sur un parallele
208 fa%CADRE(krangc)%NSEC2LL(2)=fa%CADRE(krangc)%NXLOPA
209 ! Nb de pts sur une longitude
210 fa%CADRE(krangc)%NSEC2LL(3)=inlat
211 ! Latitude (1/1000 degre) du premier pt de grille
212 fa%CADRE(krangc)%NSEC2LL(4)=nint(zramde*zlatpre,kind=jplikb)
213 ! Longitude (1/1000 degre) du premier pt de grille
214 fa%CADRE(krangc)%NSEC2LL(5)=nint(zramde*zlonpre,kind=jplikb)
215 !
216 CALL lon360000 (fa%CADRE(krangc)%NSEC2LL(5))
217 ! Flag pour la resolution (128->on donne l'increment: grille reguliere)
218 fa%CADRE(krangc)%NSEC2LL(6)=128
219 ! Latitude (1/1000 degre) du dernier pt de grille
220 fa%CADRE(krangc)%NSEC2LL(7)=nint(zramde*zlatder,kind=jplikb)
221 ! Longitude (1/1000 degre) du dernier pt de grille
222 fa%CADRE(krangc)%NSEC2LL(8)=nint(zramde*zlonder,kind=jplikb)
223 CALL lon360000 (fa%CADRE(krangc)%NSEC2LL(8))
224 ! Increment zonal (1/1000 degre)
225 IF (zlonpre.GT.zlonder) THEN
226  fa%CADRE(krangc)%NSEC2LL(9)= &
227 & nint((zlonder+2._jpdblr*zpi-zlonpre)*zramde &
228 & /(fa%CADRE(krangc)%NXLOPA-1), &
229 & kind=jplikb)
230 ELSE
231  fa%CADRE(krangc)%NSEC2LL(9)= &
232 & nint((zlonder-zlonpre)*zramde/(fa%CADRE(krangc)%NXLOPA-1), &
233 & kind=jplikb)
234 ENDIF
235 ! Increment meridien (1/1000 degre)
236 fa%CADRE(krangc)%NSEC2LL(10)= &
237 & nint((zlatpre-zlatder)*zramde/(inlat-1), &
238 & kind=jplikb)
239 ! Flag pour le mode de balayage: W->E et S->N = 64; W->E et N->S = 0
240 ! Full-Pos produit des champs lat-lon ranges S->N pour ARP et ALD.
241 ! Or la BDAP attend un rangt N->S pour les grilles lat-lon.
242 ! FA renverse donc les champs issus de Full-Pos avant codage GRIBEX.
243 !
244 fa%CADRE(krangc)%NSEC2LL(11)=0
245 ! Nombre de parametres pour la coord. verticale
246 fa%CADRE(krangc)%NSEC2LL(12)=0
247 ! Latitude du pole sud de rotation
248 fa%CADRE(krangc)%NSEC2LL(13)=0
249 ! Longitude du pole sud de rotation
250 fa%CADRE(krangc)%NSEC2LL(14)=0
251 ! Latitude et longitude du pole d'etirement
252 fa%CADRE(krangc)%NSEC2LL(15)=0
253 fa%CADRE(krangc)%NSEC2LL(16)=0
254 ! Flag: 0 -> grille reguliere, 1 -> grille reduite
255 fa%CADRE(krangc)%NSEC2LL(17)=0
256 ! Flag: 0 -> Terre ronde , 64 -> Terre ellipsoide
257 fa%CADRE(krangc)%NSEC2LL(18)=0
258 ! Flag sur les composantes des vecteurs (0->geographique, 8->grille)
259 fa%CADRE(krangc)%NSEC2LL(19)=0
260 ! Reserves
261 fa%CADRE(krangc)%NSEC2LL(20:22)=0
262 !**
263 ! 4. - KSEC2 POUR LA GRILLE LAT-LON QUASI-REGULIERE ALADIN
264 ! (en fait, tenue de camouflage pour les coeff spectraux
265 ! que l'on va ranger en balayant le 1/4 de l'ellipse
266 ! verticalement: axe X=axe n (nb d'onde meridien) et
267 ! axe Y=axe m (nb d'onde zonal) afin de suivre le rangt
268 ! dans le modele. Seuls les coeff spectraux qui seront
269 ! compactes sont stockes sur la grille lat-lon, soit
270 ! tous sauf ceux des axes et ceux inclus dans le carre
271 ! delimite par la ss-tronc de non-compactage).
272 !-----------------------------------------------------------------------
273 !
274 ! Type de representation de donnees
275 fa%CADRE(krangc)%NSEC2AL(1)=0
276 ! Nb de pts sur un parallele: valeur manquante
277 fa%CADRE(krangc)%NSEC2AL(2)=2**16 -1
278 ! Nb de pts sur une longitude: nombre d'onde zonal max -1
279 ! associe au nombre d'onde meridien 1 (les CSP sur les axes sont
280 ! extraits des champs de CSP puisque non compactes)
281 fa%CADRE(krangc)%NSEC2AL(3)=(fa%CADRE(krangc)%NOZPAR(6)- &
282 & fa%CADRE(krangc)%NOZPAR(5)+1)/4 -1
283 ! Latitude (1/1000 degre) du premier pt de grille: valeur bidon
284 fa%CADRE(krangc)%NSEC2AL(4)=0
285 ! Longitude (1/1000 degre) du premier pt de grille: valeur bidon
286 fa%CADRE(krangc)%NSEC2AL(5)=0
287 ! Flag pour la resolution (128->on donne l'increment: grille reguliere)
288 fa%CADRE(krangc)%NSEC2AL(6)=0
289 ! Latitude (1/1000 degre) du dernier pt de grille: valeur bidon
290 fa%CADRE(krangc)%NSEC2AL(7)=40000
291 ! Longitude (1/1000 degre) du dernier pt de grille: valeur bidon
292 fa%CADRE(krangc)%NSEC2AL(8)=40000
293 ! Increment zonal (1/1000 degre)
294 fa%CADRE(krangc)%NSEC2AL(9)=2**16 -1
295 ! Increment meridien (1/1000 degre): deduit des valeurs bidon
296 fa%CADRE(krangc)%NSEC2AL(10)=(fa%CADRE(krangc)%NSEC2AL(7)-fa%CADRE(krangc)%NSEC2AL(4))/ &
297 & (fa%CADRE(krangc)%NSEC2AL(3)-1)
298 ! Flag pour le mode de balayage
299 fa%CADRE(krangc)%NSEC2AL(11)=0
300 ! Nombre de parametres pour la coord. verticale
301 fa%CADRE(krangc)%NSEC2AL(12)=0
302 ! Latitude du pole sud de rotation
303 fa%CADRE(krangc)%NSEC2AL(13)=0
304 ! Longitude du pole sud de rotation
305 fa%CADRE(krangc)%NSEC2AL(14)=0
306 ! Latitude et longitude du pole d'etirement
307 fa%CADRE(krangc)%NSEC2AL(15)=0
308 fa%CADRE(krangc)%NSEC2AL(16)=0
309 ! Flag: 0 -> grille reguliere, 1 -> grille reduite
310 fa%CADRE(krangc)%NSEC2AL(17)=1
311 ! Flag: 0 -> Terre ronde , 64 -> Terre ellipsoide
312 fa%CADRE(krangc)%NSEC2AL(18)=0
313 ! Flag sur les composantes des vecteurs (0->geographique, 8->grille)
314 fa%CADRE(krangc)%NSEC2AL(19)=0
315 ! Reserves
316 fa%CADRE(krangc)%NSEC2AL(20:22)=0
317 ! Les valeurs (22+1:22+FA%MTRONC(KRANGC)-1) representant les nb de pts
318 ! le long de chaque parallele (ici, le nb de coeff spectraux
319 ! pour un meme n (et -n), excepte le triangle et les axes non
320 ! compactes) dependent de la ss-troncature qui depend du fichier
321 ! et ne seront donc pas stockes dans le tableau FA%NSEC2AL qui
322 ! depend du cadre. Le tableau FA%NSC2ALF(FA%JPXTRO-1,FA%JPNXFA) les
323 ! contiendra.
324 !
325 !**
326 ! 5. - KSEC2 POUR LA GRILLE LAMBERT CONFORME (CAS GENERAL ALADIN)
327 !-------------------------------------------------------------------------
328 !
329 ! Type de representation de donnees
330 fa%CADRE(krangc)%NSEC2LA(1)=3
331 ! Nb de pts sur un parallele
332 fa%CADRE(krangc)%NSEC2LA(2)=fa%CADRE(krangc)%NXLOPA
333 ! Nb de pts sur une longitude
334 fa%CADRE(krangc)%NSEC2LA(3)=inlat
335 !
336 ! Les parametres communs sont regroupes
337 ! Flag pour la resolution (128->on donne l'increment: grille reguliere)
338 fa%CADRE(krangc)%NSEC2LA(6)=128
339 ! Reserve
340 fa%CADRE(krangc)%NSEC2LA(8)=0
341 ! Flag pour le mode de balayage: W->E et S->N = 64; W->E et N->S = 0
342 fa%CADRE(krangc)%NSEC2LA(11)=64
343 ! Nombre de parametres pour la coord. verticale
344 fa%CADRE(krangc)%NSEC2LA(12)=0
345 ! Latitude (1/1000 degre) du premier pt de grille
346 fa%CADRE(krangc)%NSEC2LA(4)=nint(zramde*zlatpre,kind=jplikb)
347 ! Longitude (1/1000 degre) du premier pt de grille
348 fa%CADRE(krangc)%NSEC2LA(5)=nint(zramde*zlonpre,kind=jplikb)
349 !
350 CALL lon360000 (fa%CADRE(krangc)%NSEC2LA(5))
351 !
352 ! TEST POUR OLD/NEW EGGX
353 IF (fa%CADRE(krangc)%SINLAT(1) .GE. 0) THEN
354 ! Old EGGX
355 ! Orientation de la grille
356 fa%CADRE(krangc)%NSEC2LA(7)=nint(zramde*fa%CADRE(krangc)%SINLAT(8), &
357 & kind=jplikb)
358 !
359 CALL lon360000 (fa%CADRE(krangc)%NSEC2LA(7))
360 ! Dimension de la maille dans la direction X
361 fa%CADRE(krangc)%NSEC2LA(9)=nint(fa%CADRE(krangc)%SINLAT(15),kind=jplikb)
362 ! Dimension de la maille dans la direction Y
363 fa%CADRE(krangc)%NSEC2LA(10)=nint(fa%CADRE(krangc)%SINLAT(16),kind=jplikb)
364 ! Flag pour le centre de projection
365 ! (0: le pole Nord est sur le plan de projection
366 ! et 1 seul centre de projection est utilise;
367 ! 128: idem sauf que c'est le pole Sud)
368 IF (fa%CADRE(krangc)%SINLAT(9).GE.0) THEN
369  fa%CADRE(krangc)%NSEC2LA(13)=0
370 ELSE
371  fa%CADRE(krangc)%NSEC2LA(13)=128
372 ENDIF
373 ! Premiere latitude depuis le pole ou le cone coupe la sphere
374 fa%CADRE(krangc)%NSEC2LA(14)=nint(zramde*fa%CADRE(krangc)%SINLAT(9), &
375 & kind=jplikb)
376 ! Deuxieme latitude depuis le pole ou le cone coupe la sphere
377 ! Dans Aladin, le plan de projection est rarement secant (cela
378 ! releve plus d'un domaine mal defini que d'un choix) et cette
379 ! possibilite va disparaitre bientot. Comme le calcul de cette
380 ! seconde latitude n'est pas aise (pb de convergence), on va
381 ! declarer la grille tangente! mais avec un WARNING...
382 fa%CADRE(krangc)%NSEC2LA(15)=fa%CADRE(krangc)%NSEC2LA(14)
383 IF (abs(fa%CADRE(krangc)%SINLAT(10)-sin(fa%CADRE(krangc)%SINLAT(9))) &
384 & .GT.1.e-10_jpdblr .AND. fa%LFAMOP) THEN
385  WRITE (unit=fa%NULOUT,fmt=*) &
386 & ' FAISC2: WARNING !! La grille Lambert coupe en fait', &
387 & ' la sphere, mais sera consideree comme tangente'
388 ENDIF
389 ELSE
390 ! NEW EGGX
391 ! Orientation de la grille
392 fa%CADRE(krangc)%NSEC2LA(7)=nint(zramde*fa%CADRE(krangc)%SINLAT(3), &
393 & kind=jplikb)
394 !
395 CALL lon360000 (fa%CADRE(krangc)%NSEC2LA(7))
396 ! Dimension de la maille dans la direction X
397 fa%CADRE(krangc)%NSEC2LA(9)=nint(fa%CADRE(krangc)%SINLAT(7),kind=jplikb)
398 ! Dimension de la maille dans la direction Y
399 fa%CADRE(krangc)%NSEC2LA(10)=nint(fa%CADRE(krangc)%SINLAT(8),kind=jplikb)
400 ! Flag pour le centre de projection
401 ! (0: le pole Nord est sur le plan de projection
402 ! et 1 seul centre de projection est utilise;
403 ! 128: idem sauf que c'est le pole Sud)
404 IF (fa%CADRE(krangc)%SINLAT(4).GE.0) THEN
405  fa%CADRE(krangc)%NSEC2LA(13)=0
406 ELSE
407  fa%CADRE(krangc)%NSEC2LA(13)=128
408 ENDIF
409 ! Premiere latitude depuis le pole ou le cone coupe la sphere
410 fa%CADRE(krangc)%NSEC2LA(14)=nint(zramde*fa%CADRE(krangc)%SINLAT(4), &
411 & kind=jplikb)
412 ! NEW EGGX toujours tangent
413 fa%CADRE(krangc)%NSEC2LA(15)=fa%CADRE(krangc)%NSEC2LA(14)
414 ENDIF
415 
416 ! Reserve
417 fa%CADRE(krangc)%NSEC2LA(16)=0
418 ! Flag: 0 -> grille reguliere
419 fa%CADRE(krangc)%NSEC2LA(17)=0
420 ! Flag: 0 -> Terre ronde , 64 -> Terre ellipsoide
421 fa%CADRE(krangc)%NSEC2LA(18)=0
422 ! Flag sur les composantes des vecteurs (0->geographique, 8->grille)
423 fa%CADRE(krangc)%NSEC2LA(19)=8
424 ! Latitude du pole sud
425 fa%CADRE(krangc)%NSEC2LA(20)=0
426 ! Longitude du pole sud
427 fa%CADRE(krangc)%NSEC2LA(21)=0
428 ! Reserve
429 fa%CADRE(krangc)%NSEC2LA(22)=0
430 !**
431 ! 6. - PARTIE REELLE DE LA SECTION 2 DE GRIBEX
432 !-----------------------------------------------------------------------
433 !
434 600 CONTINUE
435 ! Angle de rotation
436 fa%CADRE(krangc)%XSEC2(1)=0._jpdblr
437 ! Coefficient d'etirement
438 fa%CADRE(krangc)%XSEC2(2)=fa%CADRE(krangc)%SCODIL
439 ! Reserve
440 fa%CADRE(krangc)%XSEC2(3:10)=0._jpdblr
441 ! Parametres pour la coordonnee verticale
442 fa%CADRE(krangc)%XSEC2(11:11+inivau)=fa%CADRE(krangc)%SFOHYB(1,0:inivau)* &
443 & fa%CADRE(krangc)%SPREFE
444 fa%CADRE(krangc)%XSEC2(12+inivau:12+2*inivau)= &
445 & fa%CADRE(krangc)%SFOHYB(2,0:inivau)
446 !**
447 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
448 ! VIA LE SOUS-PROGRAMME "FAIPAR" .
449 !-----------------------------------------------------------------------
450 !
451 1001 CONTINUE
452 !
453 IF (fa%LFAMOP.OR.krep.NE.0) THEN
454  inimes=2
455  clnspr='FAISC2'
456  inumer=jpniil
457 !
458  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KRANGC='',I4)') &
459 & krep, krangc
460  CALL faipar_fort &
461 & (fa, inumer,inimes,krep,.false.,clmess, &
462 & clnspr,clnspr,.false.)
463 ENDIF
464 
465 !
466 IF (lhook) CALL dr_hook('FAISC2_MT',1,zhook_handle)
467 
468 CONTAINS
469 
470 SUBROUTINE lon360000 (KLON)
472 INTEGER (KIND=JPLIKB) :: KLON
473 
474 klon = modulo(klon, 360000_jplikb)
475 
476 END SUBROUTINE lon360000
477 
478 END SUBROUTINE faisc2_fort
479 
480 
481 
482 ! Oct-2012 P. Marguinaud 64b LFI
483 SUBROUTINE faisc264 &
484 & (krep, krangc)
485 USE fa_mod, ONLY : fa => fa_com_default, &
488 USE lfi_precision
489 IMPLICIT NONE
490 ! Arguments
491 INTEGER (KIND=JPLIKB) KREP ! OUT
492 INTEGER (KIND=JPLIKB) KRANGC ! IN
493 
494 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
495 
496 CALL faisc2_fort &
497 & (fa, krep, krangc)
498 
499 END SUBROUTINE faisc264
500 
501 SUBROUTINE faisc2 &
502 & (krep, krangc)
503 USE fa_mod, ONLY : fa => fa_com_default, &
506 USE lfi_precision
507 IMPLICIT NONE
508 ! Arguments
509 INTEGER (KIND=JPLIKM) KREP ! OUT
510 INTEGER (KIND=JPLIKM) KRANGC ! IN
511 
512 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
513 
514 CALL faisc2_mt &
515 & (fa, krep, krangc)
516 
517 END SUBROUTINE faisc2
518 
519 SUBROUTINE faisc2_mt &
520 & (fa, krep, krangc)
521 USE fa_mod, ONLY : fa_com
522 USE lfi_precision
523 IMPLICIT NONE
524 ! Arguments
525 type(fa_com) fa ! INOUT
526 INTEGER (KIND=JPLIKM) KREP ! OUT
527 INTEGER (KIND=JPLIKM) KRANGC ! IN
528 ! Local integers
529 INTEGER (KIND=JPLIKB) IREP ! OUT
530 INTEGER (KIND=JPLIKB) IRANGC ! IN
531 ! Convert arguments
532 
533 irangc = int( krangc, jplikb)
534 
535 CALL faisc2_fort &
536 & (fa, irep, irangc)
537 
538 krep = int( irep, jplikm)
539 
540 END SUBROUTINE faisc2_mt
541 
542 !INTF KREP OUT
543 !INTF KRANGC IN
integer, parameter jplikb
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine faisc264(KREP, KRANGC)
Definition: faisc2.F90:485
subroutine new_fa_default()
Definition: fa_mod.F90:649
Definition: fa_mod.F90:1
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lon360000(KLON)
Definition: faisc2.F90:471
subroutine faisc2(KREP, KRANGC)
Definition: faisc2.F90:503
logical lhook
Definition: yomhook.F90:15
subroutine faisc2_mt(FA, KREP, KRANGC)
Definition: faisc2.F90:521
integer, parameter jplikm
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
subroutine faisc2_fort(FA, KREP, KRANGC)
Definition: faisc2.F90:5
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
Definition: faipar.F90:6
integer(kind=jplikb), parameter jpniil
Definition: fa_mod.F90:31