SURFEX v8.1
General documentation of Surfex
fa_mod.F90
Go to the documentation of this file.
1 MODULE fa_mod
2 ! Feb-2013 P. Marguinaud Define JNGEOM & JNEXPL
3 ! Fix bug in cadre allocation
4 ! Jan-2011 P. Marguinaud Interface to thread-safe FA
5 ! Sep-2012 P. Marguinaud DrHook
6 
7 USE parkind1, ONLY : jpim, jprb, jpia
8 USE yomhook, ONLY : lhook, dr_hook
9 USE lfimod, ONLY : lficom, jplspx
10 
11 USE lfi_precision
12 IMPLICIT NONE
13 
14 ! Date index
15 
16 INTEGER (KIND=JPLIKB), PARAMETER :: &
17 & JD_YEA = 1, JD_MON = 2, JD_DAY = 3, & ! Base year, month, day
18 & JD_HOU = 4, JD_MIN = 5, JD_TUN = 6, & ! Base hour, minute, term unit (1=hour, 2=day)
19 & JD_THO = 7, JD_GR8 = 8, JD_IAN = 9, & ! Term hour or day, ?, forecast/initialised analysis flag
20 & JD_CU1 = 10, JD_CU2 = 11, & ! Time of event1 (hour or day), time of event2 (hour or day)
21 & JD_DEX = 12, JD_SEM = 14, & ! Extended date flag, base seconds
22 & JD_SET = 15, JD_CE1 = 16, JD_CE2 = 17, & ! Term in seconds, seconds of event1, seconds of event2
23 & JD_TST = 18, JD_FMT = 19, & ! Time step, time format
24 & JD_SIZ = 22
25 
26 INTEGER (KIND=JPLIKB), PARAMETER :: jpprcm = jpdbld / jpdblr
27 
28 INTEGER (KIND=JPLIKB), PARAMETER :: jngeom = 18_jplikb
29 INTEGER (KIND=JPLIKB), PARAMETER :: jnexpl = 8_jplikb
30 
31 INTEGER (KIND=JPLIKB), PARAMETER :: jpniil =-999_jplikb
32 INTEGER (KIND=JPLIKB), PARAMETER :: jpxnom = 16_jplikb
33 INTEGER (KIND=JPLIKB), PARAMETER :: jpxprf = 8_jplikb
34 INTEGER (KIND=JPLIKB), PARAMETER :: jpxsuf = jpxnom+jpxprf
35 
36 INTEGER (KIND=JPLIKB), PARAMETER :: nundef = jpniil
37 REAL (KIND=JPDBLR), PARAMETER :: xundef = -99._jpdbld
38 LOGICAL, PARAMETER :: lundef = .false.
39 CHARACTER, PARAMETER :: cundef = char (0)
40 !****
41 ! !-----------------------------------------------!
42 ! ! Sous-programme du Logiciel de Fichiers ARPEGE !
43 ! !-----------------------------------------------!
44 !
45 ! - Version originale du logiciel: Mars 1990, auteur:
46 ! Jean CLOCHARD, Meteorologie Nationale, FRANCE.
47 !
48 ! - Juin 90: Ajout du "type de transformation horizontale"
49 ! aux elements definissant un cadre
50 ! (1=transformation de Frank-Schmidt "pure", 2=ARPEGE complete),
51 ! et ajout de la notion d'"Identificateur de Fichier".
52 !
53 !**
54 !---------------- VARIABLES "SIMPLES" GLOBALES -------------------------
55 !
56 ! NFIOUV = Nombre de fichiers ouverts simultanement
57 ! NCADEF = " " cadres definis "
58 ! LFAMUL = Option "utilisation du logiciel en mode multi-taches"
59 ! LFAMOP = Option "mode mise au point du logiciel"
60 ! VRGLAS = Verrou global du lociciel (en mode multi-taches)
61 ! NIMSGA = Niveau global de messagerie du logiciel
62 ! NRFAGA = Niveau de filtrage global des erreurs fatales detectees ?
63 ! NBIPDG = Nombre de bits IMPLICITE par valeur point-de-grille
64 ! NBICSP = " " " IMPLICITE par coefficient spectral
65 ! NSTROI = Sous-troncature non compactee IMPLICITE (coef. spectraux)
66 ! NPUILA = "Puissance de laplacien" IMPLICITE pour coeffi. spectraux
67 ! NMIDPL = Degre de modulation IMPLICITE de puissance de laplacien
68 ! NIGRIB = Niveau IMPLICITE de codage GRIB
69 ! ( 0 ==> pas de codage, 1 ==> "standard", 2 => "Arpege" )
70 ! ( -1 ==> pas de codage (rangt coeff spec selon modele) )
71 ! ( 3 ==> "GRIBEX" (rangt coeff spec selon modele) )
72 ! NCPCAD = Nombre maximum de caracteres possibles par nom de cadre.
73 ! SPSMIN = Pression sol minimum " " " " " "
74 ! SPSMAX = Pression sol maximum " " " " " "
75 ! MPRESX = Pression maximum pour designer un niveau isobare
76 ! NBIMAC = Nombre de bits par mot machine
77 ! NBIMAX = Nombre maximum de bits par valeur elementaire compactee
78 ! NTYPTX = Type maximum reconnu de transformation horizontale
79 ! LIGARD = Option de conservation des cadres definis dynamiquement
80 !
81 ! Ci-dessous, limites en termes de dimensions reglables au niveau
82 ! usager, initialisees aux valeurs maximum du logiciel:
83 !
84 ! NXNIVV = Nombre maximum de niveaux verticaux au niveau usager
85 ! NXTRON = Troncature maximum " " "
86 ! NXLATI = Nombre maximum de latitudes de pole a pole " "
87 ! NXLONG = Nombre maximum de longitudes par parallele " "
88 !
89 ! CHAINC = Impression de substitut aux variables non reconnues
90 !**
91 !------------------------- TABLEAUX GLOBAUX ----------------------------
92 !
93 ! NULIND = Table d'indirection pour les autres tables "fichiers"
94 ! NCAIND = " " " " " " " "cadres"
95 !**
96 !--------- DESCRIPTIF DES ELEMENTS CONCERNANT UNE UNITE LOGIQUE --------
97 !
98 ! NULOGI = Numero de l'unite logique
99 ! NUCADR = Rang du cadre auquel le fichier est rattache
100 ! CIDENT = Identification (utilisateur) du fichier
101 ! LNOMME = Vrai si l'unite logique a un nom utilisateur (BOF...)
102 ! NIVOMS = Niveau de la messagerie defini par l'utilisateur
103 ! LERRFA = Vrai si toute erreur detectee doit etre fatale
104 ! LCREAF = Vrai si le fichier est en mode creation
105 ! NBFPDG = Nombre de bits EFFECTIF par valeur point-de-grille
106 ! NBFCSP = " " " EFFECTIF par coefficient spectral
107 ! NPUFLA = "Puissance de laplacien" EFFECTIVE pour coeffi. spectraux
108 ! NSTROF = Sous-troncature non compactee EFFECTIVE (coef. spectraux)
109 ! NMFDPL = Degre de modulation EFFECTIF de la puissance de laplacien
110 ! NFGRIB = Niveau EFFECTIF de codage GRIB
111 ! VRFICH = Verrou du fichier (en mode multi-taches)
112 !
113 ! MADATE = Contenu de l'article 'DATE'
114 !
115 ! CTNPRF = Prefixes de champ (re)connus.
116 ! NIVDSC = Descripteurs associes aux prefixes (re)connus.
117 ! NRASHO = Nombre de champs de coeff. spectraux ARPEGE ranges
118 ! horizontalement (donc a l'inverse du modele) detectes au
119 ! cours des lectures/ecritures
120 ! NRASVE = Nombre de champs de coeff. spectraux ARPEGE ranges
121 ! verticalement (donc comme le modele), detectes au cours
122 ! des lectures/ecritures
123 !
124 !**
125 !----------- DESCRIPTIF DES ELEMENTS CONSTITUANT UN CADRE --------------
126 !
127 ! Elements DEFINISSANT un cadre:
128 !
129 ! CNOMCA = Nom du cadre (conventionnel; non ecrit sur le fichier)
130 ! NLCCAD = Longueur en caracteres du nom de cadre
131 ! NULCAD = Nombre d'unites logiques rattachees au cadre
132 ! MTRONC = Troncature associee aux donnees contenues dans le fichier
133 ! NNIVER = Nombre de niveaux verticaux
134 ! NLATIT = " " latitudes de pole a pole
135 ! NXLOPA = " maximum de longitudes par cercle de latitude
136 ! NTYPTR = Type de transformation horizontale
137 ! SSLAPO = Sinus de la latitude du pole d'interet
138 ! SCLOPO = Cosinus " " " " " "
139 ! SSLOPO = Sinus " " " " " "
140 ! SCODIL = Coefficient de dilatation
141 ! SPREFE = Pression de reference (facteur multiplicatif de la premi-
142 ! ere fonction de la coordonnee hybride)
143 ! NLOPAR = Nombre de longitudes par parallele de l'hemisphere "nord"
144 ! NOZPAR = " d'onde zonal maximum " " " " "
145 ! SINLAT = Sinus des latitudes de la grille (*hemisphere nord seul*)
146 ! SFOHYB = Valeurs des fonctions "A" et "B" de la coordonnee hybride
147 ! (Definies aux LIMITES DE COUCHES)
148 !
149 ! Autres elements rattaches a un cadre:
150 !
151 ! NVAPDG = Nombre total de points de grille dans un champ horizontal
152 ! NGARDE = Option de conservation lors de la fermeture du dernier
153 ! fichier s'y rattachant. ( 0=Non, 1=selon LIGARD, 2=Oui )
154 ! LIMLAM = IMPLICIT SWITCH FOR SETTING OF GLOBAL/LAM CASE
155 ! NSFLAM = TOTAL NUMBER OF SPECTRAL COEFFICIENTS FOR LAM CASE
156 !
157 
158 TYPE facadr
159  INTEGER (KIND=JPLIKB) :: mtronc = nundef
160  INTEGER (KIND=JPLIKB) :: nniver = nundef
161  INTEGER (KIND=JPLIKB) :: nlatit = nundef
162  INTEGER (KIND=JPLIKB) :: nxlopa = nundef
163  INTEGER (KIND=JPLIKB) :: nulcad = nundef
164  INTEGER (KIND=JPLIKB) :: nlccad = nundef
165  INTEGER (KIND=JPLIKB) :: ngarde = nundef
166  INTEGER (KIND=JPLIKB) :: nvapdg = nundef
167  INTEGER (KIND=JPLIKB) :: ntyptr = nundef
168  INTEGER (KIND=JPLIKB) :: nsflam = nundef
169  REAL (KIND=JPDBLR) :: sslapo = xundef
170  REAL (KIND=JPDBLR) :: sclopo = xundef
171  REAL (KIND=JPDBLR) :: sprefe = xundef
172  REAL (KIND=JPDBLR) :: sslopo = xundef
173  LOGICAL :: limlam = lundef
174  CHARACTER*(JPXNOM) :: cnomca = cundef
175  REAL (KIND=JPDBLR) :: scodil = xundef
176  REAL (KIND=JPDBLR), POINTER :: sinlat (:) => null ()
177  INTEGER (KIND=JPLIKB), POINTER :: nlopar (:) => null ()
178  INTEGER (KIND=JPLIKB), POINTER :: nozpar (:) => null ()
179  REAL (KIND=JPDBLR), POINTER :: sfohyb (:,:) => null ()
180 
181 ! EN-TETE POUR GRIBEX (SECTIONS 1 ET 2)
182 
183  INTEGER (KIND=JPLIKB), POINTER :: nsec2sp(:) => null ()
184  INTEGER (KIND=JPLIKB), POINTER :: nsec2ll(:) => null ()
185  INTEGER (KIND=JPLIKB), POINTER :: nsec2gg(:) => null ()
186  INTEGER (KIND=JPLIKB), POINTER :: nsec2la(:) => null ()
187  INTEGER (KIND=JPLIKB), POINTER :: nsec2al(:) => null ()
188  REAL (KIND=JPDBLR), POINTER :: xsec2(:) => null ()
189  LOGICAL :: lisec2 = .true.
190 
191  INTEGER (KIND=JPLIKB), POINTER :: nompar(:) => null ()
192 
193  INTEGER (KIND=JPLIKB) :: nsefre = nundef
194  INTEGER (KIND=JPLIKB) :: nsmax = nundef
195  INTEGER (KIND=JPLIKB) :: nmsmax = nundef
196  INTEGER (KIND=JPLIKB), POINTER :: ncpl4m (:) => null ()
197  INTEGER (KIND=JPLIKB), POINTER :: nismax (:) => null ()
198  INTEGER (KIND=JPLIKB), POINTER :: nisnax (:) => null ()
199  INTEGER (KIND=JPLIKB), POINTER :: ndim0gg (:) => null ()
200  INTEGER (KIND=JPLIKB) :: iaddpk = 0_jplikb
201 
202 END TYPE facadr
203 
204 TYPE fafich
205  INTEGER (KIND=JPLIKB) :: nulogi = jpniil ! From farine.F90
206  INTEGER (KIND=JPIA) :: nfilep = 0_jpia ! Auxiliary FILE pointer
207  INTEGER (KIND=JPLIKB) :: noffst = 0_jplikb ! Auxiliary FILE offset
208  INTEGER (KIND=JPLIKB) :: nucadr = nundef
209  INTEGER (KIND=JPLIKB) :: nivoms = nundef
210  INTEGER (KIND=JPLIKB) :: nbfpdg = nundef
211  INTEGER (KIND=JPLIKB) :: nbfcsp = nundef
212  INTEGER (KIND=JPLIKB) :: npufla = nundef
213  INTEGER (KIND=JPLIKB) :: nfgrib = nundef
214  INTEGER (KIND=JPLIKB) :: nstrof = nundef
215  INTEGER (KIND=JPLIKB) :: nmfdpl = nundef
216  INTEGER (KIND=JPLIKB) :: nrasho = 0_jplikb ! From farine.F90
217  INTEGER (KIND=JPLIKB) :: nrasve = 0_jplikb ! From farine.F90
218  INTEGER (KIND=JPLIKB), POINTER :: madate (:) => null ()
219  INTEGER (KIND=JPLIKB), POINTER :: madatx (:) => null ()
220  LOGICAL :: lerrfa = lundef
221  REAL (KIND=JPDBLR) :: vrfich = xundef
222  LOGICAL :: lcreaf = lundef
223  CHARACTER*(JPXNOM) :: cident = cundef
224  LOGICAL :: liflap = .false. ! From farine.F90
225  LOGICAL :: lnomme = lundef
226  INTEGER (KIND=JPLIKB) :: nsec1 (2:21)
227  INTEGER (KIND=JPLIKB), POINTER :: nsc2alf(:) => null ()
228  LOGICAL :: lisec1 = .true. ! From farine.F90
229  LOGICAL :: lisc2f = .true. ! From farine.F90
230  INTEGER (KIND=JPLIKB) :: ncogrif(12)
231  REAL (KIND=JPDBLR), POINTER :: flap1d(:) => null ()
232  REAL (KIND=JPDBLR), POINTER :: flap1da(:) => null ()
233  INTEGER (KIND=JPLIKB) :: ncplsize = nundef
234  INTEGER (KIND=JPLIKB) :: ncplbits = nundef
235  INTEGER (KIND=JPLIKB) :: ioptgrsx2o = nundef
236  INTEGER (KIND=JPLIKB) :: ioptgrsn2o = nundef
237  CHARACTER (LEN=64) :: cmodel = ''
238  INTEGER (KIND=JPLIKB) :: nidcen = 85_jplikb
239 END TYPE fafich
240 
242 
243  CHARACTER(LEN=JPXPRF) :: cipref = cundef
244  CHARACTER(LEN=JPXSUF) :: cisuff = cundef
245  INTEGER (KIND=JPLIKB) :: ncodpa(8) = (/ nundef, nundef, nundef, nundef, nundef, nundef, nundef, nundef /)
246  LOGICAL :: lfniva = .false.
247  REAL (KIND=JPDBLR) :: fmulti = xundef ! Facteur multiplicatif avant encodage
248  LOGICAL :: lmulti = .false. ! Appliquer FMULTI ou non
249 
250 END TYPE fagr1tab
251 
252 TYPE fa_com
253 
254  TYPE(lficom), POINTER :: lfi => null ()
255 
256  INTEGER (KIND=JPLIKB), POINTER :: nulind (:) => null ()
257  INTEGER (KIND=JPLIKB), POINTER :: ncaind (:) => null ()
258 
259  INTEGER (KIND=JPLIKB) nfiouv, ncadef, nimsga, nrfaga
260  INTEGER (KIND=JPLIKB) nbipdg, nbicsp, npuila
261  INTEGER (KIND=JPLIKB) nigrib, ncpcad, nstroi, nmidpl
262  INTEGER (KIND=JPLIKB) nbimac, nbimax, mpresx
263  INTEGER (KIND=JPLIKB) nxnivv, nxtron, nxlati, nxlong, ntyptx
264 !
265  INTEGER (KIND=JPLIKB), POINTER :: nivdsc (:,:) => null ()
266 !
267  REAL (KIND=JPDBLR) spsmin, spsmax, vrglas
268 !
269 !
270  LOGICAL lfamul, lfamop, ligard
271 !
272  CHARACTER*(JPXNOM) chainc
273  CHARACTER(LEN=8), POINTER :: ctnprf (:) => null ()
274 !
275 !**
276 !----- DESCRIPTION DES "PARAMETER" DU LOGICIEL DE "FICHIER ARPEGE" -----
277 !
278 ! JPNXFA = Nombre maximum de fichiers ouverts "simultanement"
279 ! JPNXCA = " " " cadres definissables "simultanement"
280 ! JPXNIV = " " " niveaux verticaux (champs d'altitude)
281 ! JPXTRO = Troncature maximum gerable
282 ! JPXLAT = Nombre maximum de latitudes de pole a pole
283 ! JPXLON = Nombre maximum de longitudes par parallele
284 ! JPLDAT = Longueur de l'article 'DATE', en mots
285 ! JPLB1P = Longueur du tableau "Bloc 1" pour sous-programmes GRIB
286 ! JPLB2P = Longueur du tableau "Bloc 2" pour sous-programmes GRIB
287 ! JPNIIL = Code "valeur absente" du logiciel pour les entiers
288 ! JPXCSP = Dimension maxi d'un champ en coefficients spectraux
289 ! JPXPDG = Dimension maxi d'un champ en points de grille
290 ! JPXCHA = Dimension maxi d'un champ ( maximum de JPXCSP et JPXPDG )
291 ! JPXPAH = Nombre maximum de latitudes par hemisphere
292 ! JPXIND = DIMENSIONING OF NOZPAR()
293 ! JPXGEO = DIMENSIONING OF SINLAT()
294 ! JPNVER = Numero de version du logiciel (qui est le contenu de
295 ! l'article dont le nom est l'identificateur du fichier)
296 ! JPUILA = Puissance de laplacien maximum pour laquelle les tableaux
297 ! servant a calculer laplacien et inverse sont precalcules
298 ! JPXNOM = Nombre maximum de caracteres par NOM d'article LFI.
299 ! JPXPRF = " " " " par PReFixe de champ.
300 ! JPXSUF = JPXPRF+JPXNOM.
301 ! JPTNIV = Nombre de types de niveaux verticaux (re)connus.
302 ! CPDATE = Nom de l'article DATE
303 !
304 ! Noms des articles contenant les differentes parties du CADRE:
305 !
306 ! CPCADI = "Dimensions" (MTRONC, NNIVER, NLATIT, NXLOPA)
307 ! CPCAFS = Parametres de la transformation ARPEGE
308 ! (SSLAPO, SCLOPO, SSLOPO, SCODIL)
309 ! CPCARP = Tableaux lies a la reduction des points pres des poles
310 ! CPCASL = Tableau des sinus des latitudes
311 ! CPCACH = Valeurs des fonctions "A" et "B" de la coordonnee hybride
312 ! JPCADI et JPCAFS sont les longueurs des 2 premiers de ces articles
313 !
314  INTEGER (KIND=JPLIKB) jpnxfa, jpnxca, jpldat
315  INTEGER (KIND=JPLIKB) jpxniv, jpxtro, jpxlat
316  INTEGER (KIND=JPLIKB) jpuila, jpxau1, jpxlon
317  INTEGER (KIND=JPLIKB) jpxau2, jpxpah, jpxind, jpxgeo
318  INTEGER (KIND=JPLIKB) jpxcsp, jpxcha, jplb1p
319  INTEGER (KIND=JPLIKB) jplb2p, jpcadi, jpcafs, jpnver
320  INTEGER (KIND=JPLIKB) jpxpdg, jpxnom, jpxprf, jpxsuf, jptniv
321 !
322  CHARACTER cpcadi*(16), cpcafs*(16), cpcarp*(16), cpcach*(16)
323  CHARACTER cpcasl*(16), cpdate*(16), cpdatx*(16)
324 !
325 
326 
327 !*
328 ! FAMODU - MODULE POUR LE LOGICIEL FA
329 
330 ! D. PARADIS METEO FRANCE 21/7/00
331 
332 ! ----------------------------------------------------------------------
333 ! 1 - COEFFICIENTS MULTIPLICATIFS DES COEFF SPECTRAUX
334 !
335 ! XLAP1D = Coefficients elementaires pour "laplacien" [n*(n+1)],
336 ! ainsi que leurs inverses.
337 ! XLAP2D = Cf. XLAP1D, mais etale dans un champ complet, et calcules
338 ! pour les puissances 1 a JPUILA, ainsi que les inverses.
339 ! FLAP1D = Tableau des "puissances de laplacien" pour l'ecriture
340 ! (n*(n+1))**NPUFLA()
341 ! ( Ce dernier tableau n'est calcule que pour une
342 ! puissance de laplacien non nulle )
343 ! XLAP1DA = ALADIN version de XLAP1D
344 ! XLAP2DA = ALADIN version de XLAP2D
345 ! FLAP1DA = ALADIN version de FLAP1D
346 ! LIXLAP = .T. s'il faut initialiser XLAPxDx
347 ! LIFLAP() = .T. s'il faut initialiser FLAP1Dx()
348 !
349 ! 2 - EN-TETE POUR GRIBEX (SECTIONS 1 ET 2)
350 !
351 ! JPSEC1 = taille du tableau contenant les elements de la section 1
352 ! JPSEC2 = taille du tableau contenant les elements de la section 2
353 ! JPSEC4 = taille du tableau contenant les elements de la section 4
354 ! NSEC1 = tableau contenant les elts 2:21 de la section 1 de GRIBEX
355 ! LISEC1() = .T. s'il faut initialiser le tableau NSEC1 ci-dessus
356 !
357 ! Tableaux contenant des elements de la section 2 de GRIBEX:
358 ! NSEC2SP = cas de la representation spectrale ARPEGE avec niveaux modele
359 ! NSEC2GG = cas de la grille de Gauss
360 ! NSEC2LL = cas de la grille latitude-longitude
361 ! NSEC2LA = cas de la grille Lambert conforme (type general de Aladin)
362 ! NSEC2AL = cas de la representation spectrale Aladin deguisee lat-lon
363 ! NSC2ALF = supplement a NSEC2AL dependant du fichier
364 ! XSEC2 = coordonnee verticale
365 ! LISEC2() = .T. s'il faut initialiser les tableaux ci-dessus sauf NSC2ALF
366 ! LISC2F() = .T. s'il faut initialiser NSC2ALF
367 !
368 ! 3 - PARAMETRES DEFINISSANT LE CODAGE GRIBEX
369 !
370 ! NCODGRI = tableau contenant les parametres de codage implicites
371 ! NCOGRIF = tableau contenant les parametres de codage pour chaque fichier
372 ! CIPREF = tableau contenant les prefixes des noms des champs connus
373 ! CISUFF = tableau contenant les suffixes des noms des champs connus
374 ! NCODPA = tableau contenant les 6 descripteurs GRIB des champs connus
375 ! NCODPA(1)= numero de version de la table de code parametre,
376 ! KSEC1(1)
377 ! NCODPA(2)= indicateur de parametre, KSEC1(6)
378 ! NCODPA(3)= indicateur de type de niveau, KSEC1(7)
379 ! NCODPA(4)= niveau (premier niveau de la couche), KSEC1(8)
380 ! NCODPA(5)= deuxieme niveau de la couche, KSEC1(9)
381 ! NCODPA(6)= indicateur de type de champ, KSEC1(18)
382 ! (0 sauf si min/max dans le temps => 2,
383 ! ou si cumul dans le temps => 4,
384 ! ou cumul depuis le debut => 8 )
385 ! NCODPA(7)= facteur d'echelle decimal, KSEC1(23)
386 ! JPXPAR = nombre maximal de champs connus pour CISUFF, CIPREF et NCODPA
387 ! NBPARC = nombre de champs connus pour CISUFF, CIPREF et NCODPA
388 !
389 ! 4 - TABLEAU POUR CODER LES COEF SPECTRAUX ALADIN AVEC GRIBEX
390 !
391 ! NOMPAR = tableau decrivant la position des coeff spectraux (CSP) ALADIN
392 ! en fonction du nombre d'onde zonal dans un tableau de donnees
393 ! stocke dans FA avec la methode de codage 3 ou -1 (rangt modele).
394 ! NOMPAR est l'equivalent de NOZPAR mais pour un rangement vertical
395 ! des CSP: NOMPAR(1)=NSMAX, NOMPAR(2)=NMSMAX (ces 2 valeurs de
396 ! NOMPAR sont speciales commme pour NOZPAR) et pour un JM donne,
397 ! compris entre 0 et NMSMAX, NOMPAR(2*JM+3) donne l'indice du
398 ! premier CSP associe a JM qui est contenu dans un champ spectral
399 ! et NOMPAR(2*JM+4) donne l'indice du dernier CSP associe a JM
400 ! qui est contenu dans un champ spectral.
401 !
402 ! ----------------------------------------------------------------------
403 
404 ! 1 - COEFFICIENTS MULTIPLICATIFS DES COEFF SPECTRAUX
405 
406  REAL (KIND=JPDBLR), POINTER :: xlap1d(:,:) => null ()
407  REAL (KIND=JPDBLR), POINTER :: xlap1da(:,:) => null ()
408  REAL (KIND=JPDBLR), POINTER :: xlap2d(:,:,:) => null ()
409  REAL (KIND=JPDBLR), POINTER :: xlap2da(:,:,:) => null ()
410 
411  LOGICAL lixlap
412 
413 ! 2 - EN-TETE POUR GRIBEX (SECTIONS 1 ET 2)
414 
415  INTEGER (KIND=JPLIKB) :: jpsec1, jpsec2
416  INTEGER (KIND=JPLIKB) :: jpsec4
417 
418  INTEGER (KIND=JPLIKB) :: ioptgrsx2o = nundef
419  INTEGER (KIND=JPLIKB) :: ioptgrsn2o = nundef
420 
421 ! 3 - PARAMETRES DEFINISSANT LE CODAGE GRIBEX
422 
423  INTEGER (KIND=JPLIKB) :: ncodgri(12) = (/ nundef, nundef, nundef, nundef, nundef, nundef, &
425  INTEGER (KIND=JPLIKB) jpxpar
426  INTEGER (KIND=JPLIKB) nbparc
427  INTEGER (KIND=JPLIKB) :: nidcen = 85_jplikb
428 
429 
430  type(fagr1tab), POINTER :: ygr1tab(:) => null()
431 
432 ! 4 - TABLEAU POUR CODER LES COEF SPECTRAUX ALADIN AVEC GRIBEX
433 
434 
435  LOGICAL :: facade_llprea = .true.
436  LOGICAL :: facage_llprea = .true.
437  LOGICAL :: facies_llprea = .true.
438  LOGICAL :: factum_llprea = .true.
439  LOGICAL :: fagiot_llprea = .true.
440  LOGICAL :: falimu_llprea = .true.
441  LOGICAL :: famiso_llprea = .true.
442  LOGICAL :: fanerg_llprea = .true.
443  LOGICAL :: fanmsg_llprea = .true.
444  LOGICAL :: fanuca_llprea = .true.
445  LOGICAL :: fanumu_llprea = .true.
446  LOGICAL :: faregi_llprea = .true.
447  LOGICAL :: farflu_llprea = .true.
448  LOGICAL :: farine_llprea = .true.
449  LOGICAL :: favori_llprea = .true.
450  LOGICAL :: faxion_llprea = .true.
451  LOGICAL :: farine_lldefm = .false.
452  INTEGER (KIND=JPLIKB) :: faxion_iscalx
453  REAL (KIND=JPDBLR) faxion_zepsil
454 
455  INTEGER (KIND=JPLIKB) :: nulout = 0
456  LOGICAL :: lopenmp = .true.
457 
458  INTEGER (KIND=JPLIKB) :: jplspx = jplspx
459  INTEGER (KIND=JPLIKB) :: jplmes = 1024
460 
461  TYPE(facadr), POINTER :: cadre (:) => null ()
462  TYPE(fafich), POINTER :: fichier (:) => null ()
463 
464 END TYPE fa_com
465 
466 INTEGER, SAVE :: ngrib2_glo_sh = nundef ! Spherical harmonics
467 INTEGER, SAVE :: ngrib2_glo_gp = nundef ! Gaussian grid
468 INTEGER, SAVE :: ngrib2_lam_gp = nundef ! Grid-point LAM
469 INTEGER, SAVE :: ngrib2_lam_bf = nundef ! LAM bi-Fourier
470 INTEGER, SAVE :: ngrib1_latlon = nundef
471 INTEGER, SAVE :: ngrib2_latlon = nundef
472 LOGICAL, SAVE :: lgrib2_lam_ex = .false. ! Extension zone metadata are available
473 LOGICAL, SAVE :: lgrib2_lam_bf = .false. ! LAM bi-Fourier is available
474 LOGICAL, SAVE :: lgrib2_init = .false.
475 
476 TYPE(fa_com), SAVE, TARGET :: fa_com_default
477 LOGICAL, SAVE :: fa_com_default_init = .false.
478 
479 CONTAINS
480 
481 SUBROUTINE new_cadre (CA, KTYPTR, KPXLAT, KPXTRO, KPXNIV)
482 type(facadr) :: ca
483 INTEGER (KIND=JPLIKB), INTENT (IN) :: KTYPTR, KPXLAT, KPXTRO, KPXNIV
484 LOGICAL :: LLMLAM
485 
486 INTEGER (KIND=JPLIKB) :: &
487 & IPXAU1, IPXLON, IPXAU2, IPXPAH, &
488 & IPXIND, IPXGEO, IPXCSP, IPXPDG, &
489 & IPXCHA
490 INTEGER (KIND=JPLIKB) :: INPAHE
491 INTEGER (KIND=JPLIKB) :: JM, JN, IPOS
492 
493 llmlam = ktyptr .LE. 0
494 
495 CALL cparams (kpxlat, kpxtro, ipxau1, &
496 & ipxlon, ipxau2, ipxpah, ipxind, &
497 & ipxgeo, ipxcsp, ipxpdg, ipxcha)
498 
499 IF (.NOT. llmlam) THEN
500  inpahe=(1+kpxlat)/2
501  ALLOCATE ( &
502  & ca%NLOPAR (inpahe), &
503  & ca%NOZPAR (inpahe), &
504  & ca%SINLAT (inpahe), &
505  & ca%NOMPAR (2*kpxtro+4))
506 ELSE
507  ALLOCATE ( &
508  & ca%NLOPAR (jnexpl), &
509  & ca%NOZPAR (2*kpxtro+4), &
510  & ca%SINLAT (jngeom), &
511  & ca%NOMPAR (2*max(-ktyptr, kpxtro)+4))
512 ENDIF
513 
514 ALLOCATE ( &
515 & ca%SFOHYB (2,0:kpxniv), &
516 & ca%NSEC2SP (22), &
517 & ca%NSEC2LL (22), &
518 & ca%NSEC2GG (22+kpxlat), &
519 & ca%NSEC2LA (22), &
520 & ca%NSEC2AL (22), &
521 & ca%XSEC2 (10+2*(kpxniv+1)))
522 
523 IF (llmlam) THEN
524 
525  ca%NSMAX = kpxtro
526  ca%NMSMAX = - ktyptr
527 
528  ALLOCATE (ca%NISNAX (0:ca%NMSMAX), ca%NISMAX (0:ca%NSMAX), &
529  & ca%NCPL4M (0:ca%NMSMAX), ca%NDIM0GG (0:ca%NMSMAX))
530 
531  CALL ellips64 (ca%NSMAX, ca%NMSMAX, ca%NISNAX, ca%NISMAX)
532 
533  ca%NSEFRE = 0
534  DO jm = 0, ca%NMSMAX
535  ca%NSEFRE = ca%NSEFRE + 4*(ca%NISNAX(jm)+1)
536  ENDDO
537 
538  DO jm = 0, ca%NMSMAX
539  ca%NCPL4M(jm) = 4*(ca%NISNAX(jm)+1)
540  ENDDO
541 
542  ipos = 1
543  DO jm = 0, ca%NMSMAX
544  ca%NDIM0GG (jm) = ipos
545  ipos = ipos + ca%NCPL4M (jm)
546  ENDDO
547 
548 ELSE
549  ca%NSMAX = kpxtro
550  ca%NMSMAX = kpxtro
551  ca%NSEFRE = (ca%NSMAX+1)*(ca%NSMAX+1)
552  ALLOCATE (ca%NDIM0GG (0:ca%NSMAX))
553 
554  ipos = 1
555  DO jn = 0, ca%NSMAX
556  ca%NDIM0GG (jn) = ipos
557  ipos = ipos + (ca%NSMAX+1-jn) * 2
558  ENDDO
559 
560 ENDIF
561 
562 END SUBROUTINE new_cadre
563 
564 SUBROUTINE free_cadre (CA)
566 type(facadr) :: ca
567 
568 type(facadr) :: cadum
569 
570 IF (ASSOCIATED (ca%NLOPAR )) DEALLOCATE (ca%NLOPAR )
571 IF (ASSOCIATED (ca%NOZPAR )) DEALLOCATE (ca%NOZPAR )
572 IF (ASSOCIATED (ca%SINLAT )) DEALLOCATE (ca%SINLAT )
573 IF (ASSOCIATED (ca%SFOHYB )) DEALLOCATE (ca%SFOHYB )
574 IF (ASSOCIATED (ca%NSEC2SP)) DEALLOCATE (ca%NSEC2SP)
575 IF (ASSOCIATED (ca%NSEC2LL)) DEALLOCATE (ca%NSEC2LL)
576 IF (ASSOCIATED (ca%NSEC2GG)) DEALLOCATE (ca%NSEC2GG)
577 IF (ASSOCIATED (ca%NSEC2LA)) DEALLOCATE (ca%NSEC2LA)
578 IF (ASSOCIATED (ca%NSEC2AL)) DEALLOCATE (ca%NSEC2AL)
579 IF (ASSOCIATED (ca%XSEC2 )) DEALLOCATE (ca%XSEC2 )
580 IF (ASSOCIATED (ca%NOMPAR )) DEALLOCATE (ca%NOMPAR )
581 
582 IF (ASSOCIATED (ca%NCPL4M )) DEALLOCATE (ca%NCPL4M )
583 IF (ASSOCIATED (ca%NISMAX )) DEALLOCATE (ca%NISMAX )
584 IF (ASSOCIATED (ca%NISNAX )) DEALLOCATE (ca%NISNAX )
585 IF (ASSOCIATED (ca%NDIM0GG)) DEALLOCATE (ca%NDIM0GG)
586 
587 NULLIFY (ca%NLOPAR )
588 NULLIFY (ca%NOZPAR )
589 NULLIFY (ca%SINLAT )
590 NULLIFY (ca%SFOHYB )
591 NULLIFY (ca%NSEC2SP)
592 NULLIFY (ca%NSEC2LL)
593 NULLIFY (ca%NSEC2GG)
594 NULLIFY (ca%NSEC2LA)
595 NULLIFY (ca%NSEC2AL)
596 NULLIFY (ca%XSEC2 )
597 NULLIFY (ca%NOMPAR )
598 
599 NULLIFY (ca%NCPL4M )
600 NULLIFY (ca%NISMAX )
601 NULLIFY (ca%NISNAX )
602 NULLIFY (ca%NDIM0GG)
603 
604 ca = cadum
605 
606 END SUBROUTINE free_cadre
607 
608 SUBROUTINE new_fichier (FA, FI, KPLDAT, KPXTRO, KTYPTR)
610 type(fa_com) :: fa
611 type(fafich) :: fi
612 INTEGER (KIND=JPLIKB), INTENT (IN) :: KPLDAT, KPXTRO, KTYPTR
613 LOGICAL :: LLMLAM
614 
615 llmlam = ktyptr .LE. 0
616 
617 ALLOCATE (fi%MADATE (kpldat), fi%MADATX (kpldat))
618 
619 fi%MADATE = nundef
620 fi%MADATX = nundef
621 fi%NCOGRIF = nundef
622 fi%NSEC1 = nundef
623 fi%NIDCEN = fa%NIDCEN
624 
625 IF (llmlam) THEN
626  ALLOCATE (fi%NSC2ALF (max(-ktyptr, kpxtro)-1))
627 ELSE
628  ALLOCATE (fi%NSC2ALF (kpxtro-1))
629 ENDIF
630 
631 END SUBROUTINE new_fichier
632 
633 SUBROUTINE free_fichier (FI)
635 type(fafich) :: fi
636 type(fafich) :: fidum
637 
638 IF (ASSOCIATED (fi%MADATE )) DEALLOCATE (fi%MADATE )
639 IF (ASSOCIATED (fi%MADATX )) DEALLOCATE (fi%MADATX )
640 IF (ASSOCIATED (fi%NSC2ALF)) DEALLOCATE (fi%NSC2ALF)
641 IF (ASSOCIATED (fi%FLAP1D )) DEALLOCATE (fi%FLAP1D )
642 IF (ASSOCIATED (fi%FLAP1DA)) DEALLOCATE (fi%FLAP1DA)
643 
644 fi = fidum
645 
646 END SUBROUTINE free_fichier
647 
648 SUBROUTINE new_fa_default ()
650 INTEGER :: IERR
651 REAL (KIND=JPRB) :: ZHOOK_HANDLE
652 
653 IF (lhook) CALL dr_hook ('FA_COM:NEW_FA_DEFAULT',0,zhook_handle)
654 
655 CALL new_lfi_default
656 IF (.NOT. fa_com_default_init) THEN
657  CALL new_fa (fa_com_default, ierr)
658  fa_com_default_init = .true.
660 ENDIF
661 
662 IF (lhook) CALL dr_hook ('FA_COM:NEW_FA_DEFAULT',1,zhook_handle)
663 
664 END SUBROUTINE new_fa_default
665 
666 SUBROUTINE new_fa (FA, KERR, KPXTRO, KPXLAT, &
667 & KPXNIV, KPNXFA, KPNXCA)
668 TYPE(fa_com) :: FA
669 INTEGER, INTENT(OUT) :: KERR
670 INTEGER, OPTIONAL, INTENT(IN) :: KPXTRO
671 INTEGER, OPTIONAL, INTENT(IN) :: KPXLAT
672 INTEGER, OPTIONAL, INTENT(IN) :: KPXNIV
673 INTEGER, OPTIONAL, INTENT(IN) :: KPNXFA
674 INTEGER, OPTIONAL, INTENT(IN) :: KPNXCA
675 REAL (KIND=JPRB) :: ZHOOK_HANDLE
676 
677 IF (lhook) CALL dr_hook ('FA_COM:NEW_FA',0,zhook_handle)
678 
679 
680 fa%JPXNOM = jpxnom
681 fa%JPXPRF = jpxprf
682 fa%JPXSUF = jpxsuf
683 
684 !
685 ! Reglage de la troncature maximum gerable (JPXTRO)
686 ! et du nombre maximum de niveaux verticaux (JPXNIV)
687 !
688 #if defined ( HIGHRES )
689 !
690 ! Setup high resolution parameters
691 !
692 fa%JPXTRO = 1280
693 fa%JPXLAT = 2560
694 fa%JPXNIV = 200
695 !
696 #else
697 !
698 ! Setup low resolution parameters to save memory
699 !
700 fa%JPXTRO = 599
701 fa%JPXLAT = 1200
702 fa%JPXNIV = 200
703 !
704 #endif
705 !
706 !
707 fa%JPNXFA=20
708 fa%JPNXCA=20
709 
710 IF (PRESENT (kpxtro)) fa%JPXTRO = int(kpxtro, jplikb)
711 IF (PRESENT (kpxlat)) fa%JPXLAT = int(kpxlat, jplikb)
712 IF (PRESENT (kpxniv)) fa%JPXNIV = int(kpxniv, jplikb)
713 IF (PRESENT (kpnxfa)) fa%JPNXFA = int(kpnxfa, jplikb)
714 IF (PRESENT (kpnxca)) fa%JPNXCA = int(kpnxca, jplikb)
715 
716 fa%JPLDAT=11
717 fa%JPUILA=3
718 fa%JPTNIV=14
719 CALL cparams (fa%JPXLAT, fa%JPXTRO, &
720 & fa%JPXAU1, fa%JPXLON, fa%JPXAU2, fa%JPXPAH, &
721 & fa%JPXIND, fa%JPXGEO, fa%JPXCSP, fa%JPXPDG, &
722 & fa%JPXCHA)
723 fa%JPLB1P=19
724 fa%JPLB2P=17
725 fa%JPCADI=5
726 fa%JPCAFS=4
727 fa%JPNVER=1
728 fa%CPCADI='CADRE-DIMENSIONS'
729 fa%CPCAFS='CADRE-FRANKSCHMI'
730 fa%CPCARP='CADRE-REDPOINPOL'
731 fa%CPCACH='CADRE-FOCOHYBRID'
732 fa%CPCASL='CADRE-SINLATITUD'
733 fa%CPDATE='DATE-DES-DONNEES'
734 fa%CPDATX='DATX-DES-DONNEES'
735 
736 fa%JPSEC1=37
737 fa%JPSEC2=22+max(fa%JPXTRO-1,fa%JPXLAT)
738 fa%JPSEC4=100
739 fa%JPXPAR=500
740 
741 fa%XLAP1D => null()
742 fa%XLAP1DA => null()
743 fa%XLAP2D => null()
744 fa%XLAP2DA => null()
745 
746 ALLOCATE ( &
747 & fa%CTNPRF (fa%JPTNIV), fa%NIVDSC (0:4,0:fa%JPTNIV), &
748 & fa%CADRE (fa%JPNXCA), fa%FICHIER (0:fa%JPNXFA), &
749 & fa%NULIND (fa%JPNXFA), fa%NCAIND (fa%JPNXCA), &
750 & stat = kerr )
751 IF (kerr /= 0) GOTO 999
752 
753 fa%FACADE_LLPREA = .true.
754 fa%FACAGE_LLPREA = .true.
755 fa%FACIES_LLPREA = .true.
756 fa%FACTUM_LLPREA = .true.
757 fa%FAGIOT_LLPREA = .true.
758 fa%FALIMU_LLPREA = .true.
759 fa%FAMISO_LLPREA = .true.
760 fa%FANERG_LLPREA = .true.
761 fa%FANMSG_LLPREA = .true.
762 fa%FANUCA_LLPREA = .true.
763 fa%FANUMU_LLPREA = .true.
764 fa%FAREGI_LLPREA = .true.
765 fa%FARFLU_LLPREA = .true.
766 fa%FARINE_LLPREA = .true.
767 fa%FAVORI_LLPREA = .true.
768 fa%FAXION_LLPREA = .true.
769 fa%FARINE_LLDEFM = .false.
770 fa%NULOUT = 0
771 fa%LOPENMP = .true.
772 
773 999 CONTINUE
774 
775 IF (lhook) CALL dr_hook ('FA_COM:NEW_FA',1,zhook_handle)
776 
777 END SUBROUTINE new_fa
778 
779 SUBROUTINE free_fa (FA, KERR)
780 TYPE(fa_com) :: FA
781 INTEGER, INTENT(OUT) :: KERR
782 
783 INTEGER (KIND=JPLIKB) :: ICAD, IFIC
784 
785 REAL (KIND=JPRB) :: ZHOOK_HANDLE
786 
787 IF (lhook) CALL dr_hook ('FA_COM:FREE_FA',0,zhook_handle)
788 
789 IF (ASSOCIATED (fa%XLAP1D )) DEALLOCATE (fa%XLAP1D )
790 IF (ASSOCIATED (fa%XLAP1DA )) DEALLOCATE (fa%XLAP1DA )
791 IF (ASSOCIATED (fa%XLAP2D )) DEALLOCATE (fa%XLAP2D )
792 IF (ASSOCIATED (fa%XLAP2DA )) DEALLOCATE (fa%XLAP2DA )
793 
794 NULLIFY (fa%XLAP1D )
795 NULLIFY (fa%XLAP1DA )
796 NULLIFY (fa%XLAP2D )
797 NULLIFY (fa%XLAP2DA )
798 
799 DEALLOCATE ( &
800 & fa%NIVDSC, fa%CTNPRF, &
801 & stat = kerr )
802 IF (kerr /= 0) GOTO 999
803 
804 NULLIFY (fa%NIVDSC, fa%CTNPRF)
805 
806 
807 IF (ASSOCIATED (fa%YGR1TAB)) THEN
808  DEALLOCATE (fa%YGR1TAB, stat = kerr)
809  IF (kerr /= 0) GOTO 999
810  NULLIFY (fa%YGR1TAB)
811 ENDIF
812 
813 DO icad = 1, int(ubound(fa%CADRE, 1), jplikb)
814  CALL free_cadre (fa%CADRE (icad))
815 ENDDO
816 
817 DO ific = 0, int(ubound(fa%FICHIER, 1), jplikb)
818  CALL free_fichier (fa%FICHIER (ific))
819 ENDDO
820 
821 DEALLOCATE (fa%CADRE, fa%FICHIER, stat = kerr)
822 NULLIFY (fa%CADRE, fa%FICHIER)
823 
824 999 CONTINUE
825 
826 IF (lhook) CALL dr_hook ('FA_COM:FREE_FA',1,zhook_handle)
827 
828 END SUBROUTINE free_fa
829 
830 
831 SUBROUTINE cparams (KPXLAT, KPXTRO, &
832 & KPXAU1, KPXLON, KPXAU2, KPXPAH, &
833 & KPXIND, KPXGEO, KPXCSP, KPXPDG, &
834 & KPXCHA)
836 INTEGER (KIND=JPLIKB), INTENT (IN) :: KPXLAT, KPXTRO
837 INTEGER (KIND=JPLIKB), INTENT (OUT) :: &
838 & KPXAU1, KPXLON, KPXAU2, KPXPAH, &
839 & KPXIND, KPXGEO, KPXCSP, KPXPDG, &
840 & KPXCHA
841 
842 kpxau1=(1+kpxlat)/2
843 kpxlon=2*kpxlat
844 kpxau2=(2*kpxtro)+4
845 kpxpah=(8*(8/kpxau1)+kpxau1*(kpxau1/8)) &
846 & /((8/kpxau1)+(kpxau1/8))
847 kpxind=(kpxau1*(kpxau1/kpxau2)+kpxau2* &
848 & (kpxau2/kpxau1)) &
849 & /((kpxau1/kpxau2)+(kpxau2/kpxau1))
850 kpxgeo=(12*(12/kpxau1)+kpxau1*(kpxau1/12)) &
851 & /((12/kpxau1)+(kpxau1/12))
852 kpxcsp=(1+kpxtro)*(2+kpxtro)
853 kpxpdg=kpxlon*kpxlat
854 kpxcha=(kpxcsp*(kpxcsp/kpxpdg)+ &
855 & kpxpdg*(kpxpdg/kpxcsp)) &
856 & /((kpxcsp/kpxpdg)+(kpxpdg/kpxcsp))
857 END SUBROUTINE cparams
858 
859 END MODULE fa_mod
860 
integer, parameter jplikb
integer(kind=jplikb), parameter jpxsuf
Definition: fa_mod.F90:34
integer, save ngrib2_glo_sh
Definition: fa_mod.F90:466
integer, save ngrib2_lam_bf
Definition: fa_mod.F90:469
integer, save ngrib1_latlon
Definition: fa_mod.F90:470
integer(kind=jplikb), parameter jplspx
Definition: lfimod.F90:65
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jplikb), parameter nundef
Definition: fa_mod.F90:36
logical, save fa_com_default_init
Definition: fa_mod.F90:477
integer, save ngrib2_lam_gp
Definition: fa_mod.F90:468
subroutine new_fa_default()
Definition: fa_mod.F90:649
integer(kind=jplikb), parameter jnexpl
Definition: fa_mod.F90:29
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine cparams(KPXLAT, KPXTRO, KPXAU1, KPXLON, KPXAU2, KPXPAH, KPXIND, KPXGEO, KPXCSP, KPXPDG, KPXCHA)
Definition: fa_mod.F90:835
subroutine free_fa(FA, KERR)
Definition: fa_mod.F90:780
integer, parameter jpdbld
Definition: fa_mod.F90:1
subroutine new_cadre(CA, KTYPTR, KPXLAT, KPXTRO, KPXNIV)
Definition: fa_mod.F90:482
character, parameter cundef
Definition: fa_mod.F90:39
integer, parameter jprb
Definition: parkind1.F90:32
logical, save lgrib2_init
Definition: fa_mod.F90:474
integer(kind=jplikb), parameter jpprcm
Definition: fa_mod.F90:26
integer, parameter jpdblr
integer, save ngrib2_glo_gp
Definition: fa_mod.F90:467
subroutine new_fa(FA, KERR, KPXTRO, KPXLAT, KPXNIV, KPNXFA, KPNXCA)
Definition: fa_mod.F90:668
integer, parameter jpia
Definition: parkind1.F90:19
real(kind=jpdblr), parameter xundef
Definition: fa_mod.F90:37
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
subroutine free_cadre(CA)
Definition: fa_mod.F90:565
integer, save ngrib2_latlon
Definition: fa_mod.F90:471
subroutine new_fichier(FA, FI, KPLDAT, KPXTRO, KTYPTR)
Definition: fa_mod.F90:609
! Fonction servant a rendre fatale ou non une erreur ! a l aide du code reponse du niveau de filtrage ! et de l option d erreur fatale propre au fichier ! s il n y a pas de fichier(I5678=0, d 'ou dimensionnement de ! *LERRFA *)
logical, save lgrib2_lam_ex
Definition: fa_mod.F90:472
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
integer(kind=jplikb), parameter jngeom
Definition: fa_mod.F90:28
Definition: lfimod.F90:1
logical, save lgrib2_lam_bf
Definition: fa_mod.F90:473
integer(kind=jplikb), parameter jpxnom
Definition: fa_mod.F90:32
logical, parameter lundef
Definition: fa_mod.F90:38
integer(kind=jplikb), parameter jpxprf
Definition: fa_mod.F90:33
integer(kind=jplikb), parameter jpniil
Definition: fa_mod.F90:31
subroutine free_fichier(FI)
Definition: fa_mod.F90:634