SURFEX v7.3
General documentation of Surfex
|
00001 C Jan-2011 P. Marguinaud Interface to thread-safe FA 00002 MODULE FA_MOD 00003 00004 USE PARKIND1, ONLY : JPIM 00005 USE LFIMOD, ONLY : LFICOM 00006 00007 IMPLICIT NONE 00008 #include "precision.h" 00009 INTEGER, PARAMETER :: JPXNOM = 16 00010 INTEGER, PARAMETER :: JPXPRF = 8 00011 INTEGER, PARAMETER :: JPXSUF = JPXNOM+JPXPRF 00012 C**** 00013 C !-----------------------------------------------! 00014 C ! Sous-programme du Logiciel de Fichiers ARPEGE ! 00015 C !-----------------------------------------------! 00016 C 00017 C - Version originale du logiciel: Mars 1990, auteur: 00018 C Jean CLOCHARD, Meteorologie Nationale, FRANCE. 00019 C 00020 C - Juin 90: Ajout du "type de transformation horizontale" 00021 C aux elements definissant un cadre 00022 C (1=transformation de Frank-Schmidt "pure", 2=ARPEGE complete), 00023 C et ajout de la notion d'"Identificateur de Fichier". 00024 C 00025 C** 00026 C---------------- VARIABLES "SIMPLES" GLOBALES ------------------------- 00027 C 00028 C NFIOUV = Nombre de fichiers ouverts simultanement 00029 C NCADEF = " " cadres definis " 00030 C LFAMUL = Option "utilisation du logiciel en mode multi-taches" 00031 C LFAMOP = Option "mode mise au point du logiciel" 00032 C VRGLAS = Verrou global du lociciel (en mode multi-taches) 00033 C NIMSGA = Niveau global de messagerie du logiciel 00034 C NRFAGA = Niveau de filtrage global des erreurs fatales detectees ? 00035 C NBIPDG = Nombre de bits IMPLICITE par valeur point-de-grille 00036 C NBICSP = " " " IMPLICITE par coefficient spectral 00037 C NSTROI = Sous-troncature non compactee IMPLICITE (coef. spectraux) 00038 C NPUILA = "Puissance de laplacien" IMPLICITE pour coeffi. spectraux 00039 C NMIDPL = Degre de modulation IMPLICITE de puissance de laplacien 00040 C NIGRIB = Niveau IMPLICITE de codage GRIB 00041 C ( 0 ==> pas de codage, 1 ==> "standard", 2 => "Arpege" ) 00042 C ( -1 ==> pas de codage (rangt coeff spec selon modele) ) 00043 C ( 3 ==> "GRIBEX" (rangt coeff spec selon modele) ) 00044 C NCPCAD = Nombre maximum de caracteres possibles par nom de cadre. 00045 C SPSMIN = Pression sol minimum " " " " " " 00046 C SPSMAX = Pression sol maximum " " " " " " 00047 C MPRESX = Pression maximum pour designer un niveau isobare 00048 C NBIMAC = Nombre de bits par mot machine 00049 C NBIMAX = Nombre maximum de bits par valeur elementaire compactee 00050 C NTYPTX = Type maximum reconnu de transformation horizontale 00051 C LIGARD = Option de conservation des cadres definis dynamiquement 00052 C 00053 C Ci-dessous, limites en termes de dimensions reglables au niveau 00054 C usager, initialisees aux valeurs maximum du logiciel: 00055 C 00056 C NXNIVV = Nombre maximum de niveaux verticaux au niveau usager 00057 C NXTRON = Troncature maximum " " " 00058 C NXLATI = Nombre maximum de latitudes de pole a pole " " 00059 C NXLONG = Nombre maximum de longitudes par parallele " " 00060 C 00061 C CHAINC = Impression de substitut aux variables non reconnues 00062 C** 00063 C------------------------- TABLEAUX GLOBAUX ---------------------------- 00064 C 00065 C NULIND = Table d'indirection pour les autres tables "fichiers" 00066 C NCAIND = " " " " " " " "cadres" 00067 C** 00068 C--------- DESCRIPTIF DES ELEMENTS CONCERNANT UNE UNITE LOGIQUE -------- 00069 C 00070 C NULOGI = Numero de l'unite logique 00071 C NUCADR = Rang du cadre auquel le fichier est rattache 00072 C CIDENT = Identification (utilisateur) du fichier 00073 C LNOMME = Vrai si l'unite logique a un nom utilisateur (BOF...) 00074 C NIVOMS = Niveau de la messagerie defini par l'utilisateur 00075 C LERRFA = Vrai si toute erreur detectee doit etre fatale 00076 C LCREAF = Vrai si le fichier est en mode creation 00077 C NBFPDG = Nombre de bits EFFECTIF par valeur point-de-grille 00078 C NBFCSP = " " " EFFECTIF par coefficient spectral 00079 C NPUFLA = "Puissance de laplacien" EFFECTIVE pour coeffi. spectraux 00080 C NSTROF = Sous-troncature non compactee EFFECTIVE (coef. spectraux) 00081 C NMFDPL = Degre de modulation EFFECTIF de la puissance de laplacien 00082 C NFGRIB = Niveau EFFECTIF de codage GRIB 00083 C VRFICH = Verrou du fichier (en mode multi-taches) 00084 C 00085 C MADATE = Contenu de l'article 'DATE' 00086 C 00087 C CTNPRF = Prefixes de champ (re)connus. 00088 C NIVDSC = Descripteurs associes aux prefixes (re)connus. 00089 C NRASHO = Nombre de champs de coeff. spectraux ARPEGE ranges 00090 C horizontalement (donc a l'inverse du modele) detectes au 00091 C cours des lectures/ecritures 00092 C NRASVE = Nombre de champs de coeff. spectraux ARPEGE ranges 00093 C verticalement (donc comme le modele), detectes au cours 00094 C des lectures/ecritures 00095 C 00096 C** 00097 C----------- DESCRIPTIF DES ELEMENTS CONSTITUANT UN CADRE -------------- 00098 C 00099 C Elements DEFINISSANT un cadre: 00100 C 00101 C CNOMCA = Nom du cadre (conventionnel; non ecrit sur le fichier) 00102 C NLCCAD = Longueur en caracteres du nom de cadre 00103 C NULCAD = Nombre d'unites logiques rattachees au cadre 00104 C MTRONC = Troncature associee aux donnees contenues dans le fichier 00105 C NNIVER = Nombre de niveaux verticaux 00106 C NLATIT = " " latitudes de pole a pole 00107 C NXLOPA = " maximum de longitudes par cercle de latitude 00108 C NTYPTR = Type de transformation horizontale 00109 C SSLAPO = Sinus de la latitude du pole d'interet 00110 C SCLOPO = Cosinus " " " " " " 00111 C SSLOPO = Sinus " " " " " " 00112 C SCODIL = Coefficient de dilatation 00113 C SPREFE = Pression de reference (facteur multiplicatif de la premi- 00114 C ere fonction de la coordonnee hybride) 00115 C NLOPAR = Nombre de longitudes par parallele de l'hemisphere "nord" 00116 C NOZPAR = " d'onde zonal maximum " " " " " 00117 C SINLAT = Sinus des latitudes de la grille (*hemisphere nord seul*) 00118 C SFOHYB = Valeurs des fonctions "A" et "B" de la coordonnee hybride 00119 C (Definies aux LIMITES DE COUCHES) 00120 C 00121 C Autres elements rattaches a un cadre: 00122 C 00123 C NVAPDG = Nombre total de points de grille dans un champ horizontal 00124 C NGARDE = Option de conservation lors de la fermeture du dernier 00125 C fichier s'y rattachant. ( 0=Non, 1=selon LIGARD, 2=Oui ) 00126 C LIMLAM = IMPLICIT SWITCH FOR SETTING OF GLOBAL/LAM CASE 00127 C NSFLAM = TOTAL NUMBER OF SPECTRAL COEFFICIENTS FOR LAM CASE 00128 C 00129 TYPE FA_COM 00130 00131 TYPE(LFICOM), POINTER :: LFI => NULL () 00132 00133 INTEGER NFIOUV, NCADEF, NIMSGA, NRFAGA, NBIPDG, NBICSP, NPUILA 00134 INTEGER NIGRIB, NCPCAD, NSTROI, NMIDPL, NBIMAC, NBIMAX, MPRESX 00135 INTEGER NXNIVV, NXTRON, NXLATI, NXLONG, NTYPTX 00136 C 00137 INTEGER, POINTER :: NULIND (:), NCAIND (:) 00138 INTEGER, POINTER :: NULOGI (:), NUCADR (:), NIVOMS (:) 00139 INTEGER, POINTER :: NBFPDG (:), NBFCSP (:), NPUFLA (:) 00140 INTEGER, POINTER :: NFGRIB (:), NSTROF (:), NMFDPL (:) 00141 INTEGER, POINTER :: NRASHO (:), NRASVE (:) 00142 INTEGER, POINTER :: MADATE (:,:) 00143 INTEGER, POINTER :: MTRONC (:), NNIVER (:), NLATIT (:) 00144 INTEGER, POINTER :: NXLOPA (:), NULCAD (:), NLCCAD (:) 00145 INTEGER, POINTER :: NLOPAR (:,:), NOZPAR (:,:) 00146 INTEGER, POINTER :: NVAPDG (:), NTYPTR (:), NGARDE (:) 00147 INTEGER, POINTER :: NSFLAM (:), NIVDSC (:,:) 00148 C 00149 REAL (KIND=JPDBLR) SPSMIN, SPSMAX, VRGLAS 00150 C 00151 REAL (KIND=JPDBLR), POINTER :: SSLAPO (:), SCLOPO (:) 00152 REAL (KIND=JPDBLR), POINTER :: SCODIL (:), SINLAT (:,:) 00153 REAL (KIND=JPDBLR), POINTER :: SFOHYB (:,:,:), SPREFE (:) 00154 REAL (KIND=JPDBLR), POINTER :: VRFICH (:), SSLOPO (:) 00155 C 00156 LOGICAL LFAMUL, LFAMOP, LIGARD 00157 LOGICAL, POINTER :: LNOMME (:), LERRFA (:), LCREAF (:) 00158 LOGICAL, POINTER :: LIMLAM (:) 00159 C 00160 CHARACTER*(JPXNOM), POINTER :: CNOMCA (:), CIDENT (:) 00161 CHARACTER*(JPXNOM) CHAINC 00162 CHARACTER, POINTER :: CTNPRF (:)*8 00163 C 00164 C** 00165 C----- DESCRIPTION DES "PARAMETER" DU LOGICIEL DE "FICHIER ARPEGE" ----- 00166 C 00167 C JPNXFA = Nombre maximum de fichiers ouverts "simultanement" 00168 C JPNXCA = " " " cadres definissables "simultanement" 00169 C JPXNIV = " " " niveaux verticaux (champs d'altitude) 00170 C JPXTRO = Troncature maximum gerable 00171 C JPXLAT = Nombre maximum de latitudes de pole a pole 00172 C JPXLON = Nombre maximum de longitudes par parallele 00173 C JPLDAT = Longueur de l'article 'DATE', en mots 00174 C JPLB1P = Longueur du tableau "Bloc 1" pour sous-programmes GRIB 00175 C JPLB2P = Longueur du tableau "Bloc 2" pour sous-programmes GRIB 00176 C JPNIIL = Code "valeur absente" du logiciel pour les entiers 00177 C JPXCSP = Dimension maxi d'un champ en coefficients spectraux 00178 C JPXPDG = Dimension maxi d'un champ en points de grille 00179 C JPXCHA = Dimension maxi d'un champ ( maximum de JPXCSP et JPXPDG ) 00180 C JPXPAH = Nombre maximum de latitudes par hemisphere 00181 C JPXIND = DIMENSIONING OF NOZPAR() 00182 C JPXGEO = DIMENSIONING OF SINLAT() 00183 C JPNVER = Numero de version du logiciel (qui est le contenu de 00184 C l'article dont le nom est l'identificateur du fichier) 00185 C JPUILA = Puissance de laplacien maximum pour laquelle les tableaux 00186 C servant a calculer laplacien et inverse sont precalcules 00187 C JPXNOM = Nombre maximum de caracteres par NOM d'article LFI. 00188 C JPXPRF = " " " " par PReFixe de champ. 00189 C JPXSUF = JPXPRF+JPXNOM. 00190 C JPTNIV = Nombre de types de niveaux verticaux (re)connus. 00191 C CPDATE = Nom de l'article DATE 00192 C 00193 C Noms des articles contenant les differentes parties du CADRE: 00194 C 00195 C CPCADI = "Dimensions" (MTRONC, NNIVER, NLATIT, NXLOPA) 00196 C CPCAFS = Parametres de la transformation ARPEGE 00197 C (SSLAPO, SCLOPO, SSLOPO, SCODIL) 00198 C CPCARP = Tableaux lies a la reduction des points pres des poles 00199 C CPCASL = Tableau des sinus des latitudes 00200 C CPCACH = Valeurs des fonctions "A" et "B" de la coordonnee hybride 00201 C JPCADI et JPCAFS sont les longueurs des 2 premiers de ces articles 00202 C 00203 INTEGER JPNXFA, JPNXCA, JPLDAT, JPNIIL, JPXNIV, JPXTRO, JPXLAT 00204 INTEGER JPUILA, JPXAU1, JPXLON, JPXAU2, JPXPAH, JPXIND, JPXGEO 00205 INTEGER JPXCSP, JPXCHA, JPLB1P, JPLB2P, JPCADI, JPCAFS, JPNVER 00206 INTEGER JPXPDG, JPXNOM, JPXPRF, JPXSUF, JPTNIV 00207 C 00208 CHARACTER CPCADI*(16), CPCAFS*(16), CPCARP*(16), CPCACH*(16) 00209 CHARACTER CPCASL*(16), CPDATE*(16) 00210 C 00211 00212 00213 !* 00214 ! FAMODU - MODULE POUR LE LOGICIEL FA 00215 00216 ! D. PARADIS METEO FRANCE 21/7/00 00217 00218 ! ---------------------------------------------------------------------- 00219 ! 1 - COEFFICIENTS MULTIPLICATIFS DES COEFF SPECTRAUX 00220 ! 00221 ! XLAP1D = Coefficients elementaires pour "laplacien" [n*(n+1)], 00222 ! ainsi que leurs inverses. 00223 ! XLAP2D = Cf. XLAP1D, mais etale dans un champ complet, et calcules 00224 ! pour les puissances 1 a JPUILA, ainsi que les inverses. 00225 ! FLAP1D = Tableau des "puissances de laplacien" pour l'ecriture 00226 ! (n*(n+1))**NPUFLA() 00227 ! ( Ce dernier tableau n'est calcule que pour une 00228 ! puissance de laplacien non nulle ) 00229 ! XLAP1DA = ALADIN version de XLAP1D 00230 ! XLAP2DA = ALADIN version de XLAP2D 00231 ! FLAP1DA = ALADIN version de FLAP1D 00232 ! LIXLAP = .T. s'il faut initialiser XLAPxDx 00233 ! LIFLAP() = .T. s'il faut initialiser FLAP1Dx() 00234 ! 00235 ! 2 - EN-TETE POUR GRIBEX (SECTIONS 1 ET 2) 00236 ! 00237 ! JPSEC1 = taille du tableau contenant les elements de la section 1 00238 ! JPSEC2 = taille du tableau contenant les elements de la section 2 00239 ! JPSEC4 = taille du tableau contenant les elements de la section 4 00240 ! NSEC1 = tableau contenant les elts 2:21 de la section 1 de GRIBEX 00241 ! LISEC1() = .T. s'il faut initialiser le tableau NSEC1 ci-dessus 00242 ! 00243 ! Tableaux contenant des elements de la section 2 de GRIBEX: 00244 ! NSEC2SP = cas de la representation spectrale ARPEGE avec niveaux modele 00245 ! NSEC2GG = cas de la grille de Gauss 00246 ! NSEC2LL = cas de la grille latitude-longitude 00247 ! NSEC2LA = cas de la grille Lambert conforme (type general de Aladin) 00248 ! NSEC2AL = cas de la representation spectrale Aladin deguisee lat-lon 00249 ! NSC2ALF = supplement a NSEC2AL dependant du fichier 00250 ! XSEC2 = coordonnee verticale 00251 ! LISEC2() = .T. s'il faut initialiser les tableaux ci-dessus sauf NSC2ALF 00252 ! LISC2F() = .T. s'il faut initialiser NSC2ALF 00253 ! 00254 ! 3 - PARAMETRES DEFINISSANT LE CODAGE GRIBEX 00255 ! 00256 ! NCODGRI = tableau contenant les parametres de codage implicites 00257 ! NCOGRIF = tableau contenant les parametres de codage pour chaque fichier 00258 ! CIPREF = tableau contenant les prefixes des noms des champs connus 00259 ! CISUFF = tableau contenant les suffixes des noms des champs connus 00260 ! NCODPA = tableau contenant les 6 descripteurs GRIB des champs connus 00261 ! NCODPA(i,1)= numero de version de la table de code parametre, 00262 ! KSEC1(1) 00263 ! NCODPA(i,2)= indicateur de parametre, KSEC1(6) 00264 ! NCODPA(i,3)= indicateur de type de niveau, KSEC1(7) 00265 ! NCODPA(i,4)= niveau (premier niveau de la couche), KSEC1(8) 00266 ! NCODPA(i,5)= deuxieme niveau de la couche, KSEC1(9) 00267 ! NCODPA(i,6)= indicateur de type de champ, KSEC1(18) 00268 ! (0 sauf si min/max dans le temps => 2, 00269 ! ou si cumul dans le temps => 4 ) 00270 ! JPXPAR = nombre maximal de champs connus pour CISUFF, CIPREF et NCODPA 00271 ! NBPARC = nombre de champs connus pour CISUFF, CIPREF et NCODPA 00272 ! 00273 ! 4 - TABLEAU POUR CODER LES COEF SPECTRAUX ALADIN AVEC GRIBEX 00274 ! 00275 ! NOMPAR = tableau decrivant la position des coeff spectraux (CSP) ALADIN 00276 ! en fonction du nombre d'onde zonal dans un tableau de donnees 00277 ! stocke dans FA avec la methode de codage 3 ou -1 (rangt modele). 00278 ! NOMPAR est l'equivalent de NOZPAR mais pour un rangement vertical 00279 ! des CSP: NOMPAR(1)=NSMAX, NOMPAR(2)=NMSMAX (ces 2 valeurs de 00280 ! NOMPAR sont speciales commme pour NOZPAR) et pour un JM donne, 00281 ! compris entre 0 et NMSMAX, NOMPAR(2*JM+3) donne l'indice du 00282 ! premier CSP associe a JM qui est contenu dans un champ spectral 00283 ! et NOMPAR(2*JM+4) donne l'indice du dernier CSP associe a JM 00284 ! qui est contenu dans un champ spectral. 00285 ! 00286 ! ---------------------------------------------------------------------- 00287 00288 ! 1 - COEFFICIENTS MULTIPLICATIFS DES COEFF SPECTRAUX 00289 00290 REAL (KIND=JPDBLR), POINTER :: XLAP1D(:,:), XLAP1DA(:,:) 00291 REAL (KIND=JPDBLR), POINTER :: XLAP2D(:,:,:), XLAP2DA(:,:,:) 00292 REAL (KIND=JPDBLR), POINTER :: FLAP1D(:,:), FLAP1DA(:,:) 00293 00294 LOGICAL LIXLAP 00295 LOGICAL, POINTER :: LIFLAP(:) 00296 00297 ! 2 - EN-TETE POUR GRIBEX (SECTIONS 1 ET 2) 00298 00299 INTEGER :: JPSEC1, JPSEC2 00300 INTEGER :: JPSEC4 00301 INTEGER, POINTER :: NSEC1(:,:), NSEC2SP(:,:) 00302 INTEGER, POINTER :: NSEC2LL(:,:) 00303 INTEGER, POINTER :: NSEC2GG(:,:) 00304 INTEGER, POINTER :: NSEC2LA(:,:) 00305 INTEGER, POINTER :: NSEC2AL(:,:), NSC2ALF(:,:) 00306 00307 REAL (KIND=JPDBLR), POINTER :: XSEC2(:,:) 00308 00309 LOGICAL, POINTER :: LISEC1(:), LISEC2(:), LISC2F(:) 00310 00311 ! 3 - PARAMETRES DEFINISSANT LE CODAGE GRIBEX 00312 00313 INTEGER, POINTER :: NCODGRI(:), NCOGRIF(:,:) 00314 INTEGER JPXPAR 00315 INTEGER NBPARC 00316 CHARACTER(LEN=JPXPRF), POINTER :: CIPREF(:) 00317 CHARACTER(LEN=JPXSUF), POINTER :: CISUFF(:) 00318 INTEGER, POINTER :: NCODPA(:,:) 00319 00320 ! 4 - TABLEAU POUR CODER LES COEF SPECTRAUX ALADIN AVEC GRIBEX 00321 00322 INTEGER, POINTER :: NOMPAR(:,:) 00323 00324 INTEGER (KIND=JPDBLE), POINTER :: ICHAMP(:), ICHAUX(:) 00325 00326 LOGICAL :: FACADE_LLPREA = .TRUE. 00327 LOGICAL :: FACAGE_LLPREA = .TRUE. 00328 LOGICAL :: FACIES_LLPREA = .TRUE. 00329 LOGICAL :: FACTUM_LLPREA = .TRUE. 00330 LOGICAL :: FAGIOT_LLPREA = .TRUE. 00331 LOGICAL :: FAIFLA_LLPREA = .TRUE. 00332 LOGICAL :: FALIMU_LLPREA = .TRUE. 00333 LOGICAL :: FAMISO_LLPREA = .TRUE. 00334 LOGICAL :: FANERG_LLPREA = .TRUE. 00335 LOGICAL :: FANMSG_LLPREA = .TRUE. 00336 LOGICAL :: FANUCA_LLPREA = .TRUE. 00337 LOGICAL :: FANUMU_LLPREA = .TRUE. 00338 LOGICAL :: FAREGI_LLPREA = .TRUE. 00339 LOGICAL :: FARFLU_LLPREA = .TRUE. 00340 LOGICAL :: FARINE_LLPREA = .TRUE. 00341 LOGICAL :: FAVORI_LLPREA = .TRUE. 00342 LOGICAL :: FAXION_LLPREA = .TRUE. 00343 LOGICAL :: FARINE_LLDEFM = .FALSE. 00344 LOGICAL, POINTER :: FATRAN_LLINDIR(:) 00345 INTEGER, POINTER :: FATRAN_INDIRECT(:,:) 00346 INTEGER :: FAXION_ISCALX 00347 REAL (KIND=JPDBLR) FAXION_ZEPSIL 00348 00349 INTEGER :: NULOUT = 0 00350 LOGICAL :: LOPENMP = .TRUE. 00351 00352 END TYPE 00353 00354 TYPE(FA_COM), SAVE, TARGET :: FA_COM_DEFAULT 00355 LOGICAL, SAVE :: FA_COM_DEFAULT_INIT = .FALSE. 00356 00357 CONTAINS 00358 00359 SUBROUTINE NEW_FA_DEFAULT () 00360 USE LFIMOD, ONLY : LFICOM_DEFAULT, NEW_LFI_DEFAULT 00361 INTEGER(KIND=JPIM) :: IERR 00362 00363 CALL NEW_LFI_DEFAULT 00364 IF (.NOT. FA_COM_DEFAULT_INIT) THEN 00365 CALL NEW_FA (FA_COM_DEFAULT, IERR) 00366 FA_COM_DEFAULT_INIT = .TRUE. 00367 FA_COM_DEFAULT%LFI => LFICOM_DEFAULT 00368 ENDIF 00369 00370 END SUBROUTINE 00371 00372 SUBROUTINE NEW_FA (FA, KERR, KPXTRO, KPXLAT, 00373 S KPXNIV, KPNXFA, KPNXCA) 00374 TYPE(FA_COM) :: FA 00375 INTEGER(KIND=JPIM), INTENT(OUT) :: KERR 00376 INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KPXTRO 00377 INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KPXLAT 00378 INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KPXNIV 00379 INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KPNXFA 00380 INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KPNXCA 00381 00382 00383 FA%JPXNOM = JPXNOM 00384 FA%JPXPRF = JPXPRF 00385 FA%JPXSUF = JPXSUF 00386 00387 C 00388 C Reglage de la troncature maximum gerable (JPXTRO) 00389 C et du nombre maximum de niveaux verticaux (JPXNIV) 00390 C 00391 #if defined ( HIGHRES ) 00392 C 00393 C Setup high resolution parameters 00394 C 00395 FA%JPXTRO = 1280 00396 FA%JPXLAT = 2560 00397 FA%JPXNIV = 200 00398 C 00399 #else 00400 C 00401 C Setup low resolution parameters to save memory 00402 C 00403 FA%JPXTRO = 599 00404 FA%JPXLAT = 1200 00405 FA%JPXNIV = 200 00406 C 00407 #endif 00408 C 00409 C 00410 FA%JPNXFA=20 00411 FA%JPNXCA=20 00412 00413 IF (PRESENT (KPXTRO)) FA%JPXTRO = KPXTRO 00414 IF (PRESENT (KPXLAT)) FA%JPXLAT = KPXLAT 00415 IF (PRESENT (KPXNIV)) FA%JPXNIV = KPXNIV 00416 IF (PRESENT (KPNXFA)) FA%JPNXFA = KPNXFA 00417 IF (PRESENT (KPNXCA)) FA%JPNXFA = KPNXCA 00418 00419 FA%JPLDAT=11 00420 FA%JPNIIL=-999 00421 FA%JPUILA=3 00422 FA%JPTNIV=12 00423 FA%JPXAU1=(1+FA%JPXLAT)/2 00424 FA%JPXLON=2*FA%JPXLAT 00425 FA%JPXAU2=(2*FA%JPXTRO)+4 00426 FA%JPXPAH=(8*(8/FA%JPXAU1)+FA%JPXAU1*(FA%JPXAU1/8)) 00427 S /((8/FA%JPXAU1)+(FA%JPXAU1/8)) 00428 FA%JPXIND=(FA%JPXAU1*(FA%JPXAU1/FA%JPXAU2)+FA%JPXAU2* 00429 S (FA%JPXAU2/FA%JPXAU1)) 00430 S /((FA%JPXAU1/FA%JPXAU2)+(FA%JPXAU2/FA%JPXAU1)) 00431 FA%JPXGEO=(12*(12/FA%JPXAU1)+FA%JPXAU1*(FA%JPXAU1/12)) 00432 S /((12/FA%JPXAU1)+(FA%JPXAU1/12)) 00433 FA%JPXCSP=(1+FA%JPXTRO)*(2+FA%JPXTRO) 00434 FA%JPXPDG=FA%JPXLON*FA%JPXLAT 00435 FA%JPXCHA=(FA%JPXCSP*(FA%JPXCSP/FA%JPXPDG)+ 00436 S FA%JPXPDG*(FA%JPXPDG/FA%JPXCSP)) 00437 S /((FA%JPXCSP/FA%JPXPDG)+(FA%JPXPDG/FA%JPXCSP)) 00438 FA%JPLB1P=19 00439 FA%JPLB2P=17 00440 FA%JPCADI=5 00441 FA%JPCAFS=4 00442 FA%JPNVER=1 00443 FA%CPCADI='CADRE-DIMENSIONS' 00444 FA%CPCAFS='CADRE-FRANKSCHMI' 00445 FA%CPCARP='CADRE-REDPOINPOL' 00446 FA%CPCACH='CADRE-FOCOHYBRID' 00447 FA%CPCASL='CADRE-SINLATITUD' 00448 FA%CPDATE='DATE-DES-DONNEES' 00449 00450 FA%JPSEC1=37 00451 FA%JPSEC2=22+MAX(FA%JPXTRO-1,FA%JPXLAT) 00452 FA%JPSEC4=42 00453 FA%JPXPAR=500 00454 00455 FA%XLAP1D => NULL () 00456 FA%XLAP1DA => NULL () 00457 FA%XLAP2D => NULL () 00458 FA%XLAP2DA => NULL () 00459 FA%FLAP1D => NULL () 00460 FA%FLAP1DA => NULL () 00461 FA%ICHAMP => NULL () 00462 FA%ICHAUX => NULL () 00463 00464 ALLOCATE ( 00465 S FA%NULIND (FA%JPNXFA), FA%NCAIND (FA%JPNXFA), 00466 S FA%NULOGI (FA%JPNXFA), FA%NUCADR (FA%JPNXFA), 00467 S FA%NIVOMS (0:FA%JPNXFA), FA%NBFPDG (FA%JPNXFA), 00468 S FA%NBFCSP (FA%JPNXFA), FA%NPUFLA (FA%JPNXFA), 00469 S FA%NFGRIB (FA%JPNXFA), FA%NSTROF (FA%JPNXFA), 00470 S FA%NMFDPL (FA%JPNXFA), FA%NRASHO (FA%JPNXFA), 00471 S FA%NRASVE (FA%JPNXFA), FA%MADATE (FA%JPLDAT,FA%JPNXFA), 00472 S FA%MTRONC (FA%JPNXCA), FA%NNIVER (FA%JPNXCA), 00473 S FA%NLATIT (FA%JPNXCA), FA%NXLOPA (FA%JPNXCA), 00474 S FA%NULCAD (FA%JPNXCA), FA%NLCCAD (FA%JPNXCA), 00475 S FA%NLOPAR (FA%JPXPAH,FA%JPNXCA), 00476 S FA%NOZPAR (FA%JPXIND,FA%JPNXCA), 00477 S FA%NVAPDG (FA%JPNXCA), FA%NTYPTR (FA%JPNXCA), 00478 S FA%NGARDE (FA%JPNXCA), 00479 S FA%NSFLAM (FA%JPNXCA), FA%NIVDSC (0:4,0:FA%JPTNIV), 00480 S FA%SSLAPO (FA%JPNXCA), FA%SCLOPO (FA%JPNXCA), 00481 S FA%SCODIL (FA%JPNXCA), FA%SINLAT (FA%JPXGEO,FA%JPNXCA), 00482 S FA%SFOHYB (2,0:FA%JPXNIV,FA%JPNXCA), 00483 S FA%SPREFE (FA%JPNXCA), 00484 S FA%VRFICH (FA%JPNXFA), FA%SSLOPO (FA%JPNXCA), 00485 S FA%LNOMME (FA%JPNXFA), FA%LERRFA (0:FA%JPNXFA), 00486 S FA%LCREAF (FA%JPNXFA), FA%LIMLAM (FA%JPNXCA), 00487 S FA%CNOMCA (FA%JPNXCA), FA%CIDENT (FA%JPNXFA), 00488 S FA%CTNPRF (FA%JPTNIV), FA%LIFLAP (FA%JPNXFA), 00489 S STAT = KERR ) 00490 IF (KERR /= 0) RETURN 00491 00492 00493 ALLOCATE ( 00494 S FA%NSEC1(2:21,FA%JPNXFA), 00495 S FA%NSEC2SP(22,FA%JPNXCA), 00496 S FA%NSEC2LL(22,FA%JPNXCA), 00497 S FA%NSEC2GG(22+FA%JPXLAT,FA%JPNXCA), 00498 S FA%NSEC2LA(22,FA%JPNXCA), 00499 S FA%NSEC2AL(22,FA%JPNXCA), 00500 S FA%NSC2ALF(FA%JPXTRO-1,FA%JPNXFA), 00501 S FA%XSEC2(10+2*(FA%JPXNIV+1),FA%JPNXCA), 00502 S FA%LISEC1(FA%JPNXFA), 00503 S FA%LISEC2(FA%JPNXCA), 00504 S FA%LISC2F(FA%JPNXFA), 00505 S STAT = KERR ) 00506 IF (KERR /= 0) RETURN 00507 00508 ALLOCATE ( 00509 S FA%NCODGRI(10), 00510 S FA%NCOGRIF(10,FA%JPNXFA), 00511 S FA%CIPREF(FA%JPXPAR), 00512 S FA%CISUFF(FA%JPXPAR), 00513 S FA%NCODPA(FA%JPXPAR,6), 00514 S FA%NOMPAR(2*FA%JPXTRO+4,FA%JPNXCA), 00515 S STAT = KERR ) 00516 IF (KERR /= 0) RETURN 00517 00518 ALLOCATE ( 00519 S FA%FATRAN_LLINDIR(FA%JPNXCA), 00520 S FA%FATRAN_INDIRECT((FA%JPXTRO+1)*(FA%JPXTRO+2),FA%JPNXCA), 00521 S STAT = KERR) 00522 IF (KERR /= 0) RETURN 00523 00524 FA%FATRAN_LLINDIR = .TRUE. 00525 00526 END SUBROUTINE 00527 00528 SUBROUTINE FREE_FA (FA, KERR) 00529 TYPE(FA_COM) :: FA 00530 INTEGER(KIND=JPIM), INTENT(OUT) :: KERR 00531 00532 IF (ASSOCIATED (FA%XLAP1D )) DEALLOCATE (FA%XLAP1D ) 00533 IF (ASSOCIATED (FA%XLAP1DA )) DEALLOCATE (FA%XLAP1DA ) 00534 IF (ASSOCIATED (FA%XLAP2D )) DEALLOCATE (FA%XLAP2D ) 00535 IF (ASSOCIATED (FA%XLAP2DA )) DEALLOCATE (FA%XLAP2DA ) 00536 IF (ASSOCIATED (FA%FLAP1D )) DEALLOCATE (FA%FLAP1D ) 00537 IF (ASSOCIATED (FA%FLAP1DA )) DEALLOCATE (FA%FLAP1DA ) 00538 IF (ASSOCIATED (FA%ICHAMP )) DEALLOCATE (FA%ICHAMP ) 00539 IF (ASSOCIATED (FA%ICHAUX )) DEALLOCATE (FA%ICHAUX ) 00540 00541 DEALLOCATE ( 00542 S FA%NULOGI, FA%NUCADR, 00543 S FA%NIVOMS, FA%NBFPDG, 00544 S FA%NBFCSP, FA%NPUFLA, 00545 S FA%NFGRIB, FA%NSTROF, 00546 S FA%NMFDPL, FA%NRASHO, 00547 S FA%NRASVE, FA%MADATE, 00548 S FA%MTRONC, FA%NNIVER, 00549 S FA%NLATIT, FA%NXLOPA, 00550 S FA%NULCAD, FA%NLCCAD, 00551 S FA%NLOPAR, 00552 S FA%NOZPAR, 00553 S FA%NVAPDG, FA%NTYPTR, 00554 S FA%NGARDE, 00555 S FA%NSFLAM, FA%NIVDSC, 00556 S FA%SSLAPO, FA%SCLOPO, 00557 S FA%SCODIL, FA%SINLAT, 00558 S FA%SFOHYB, 00559 S FA%SPREFE, 00560 S FA%VRFICH, FA%SSLOPO, 00561 S FA%LNOMME, FA%LERRFA, 00562 S FA%LCREAF, FA%LIMLAM, 00563 S FA%CNOMCA, FA%CIDENT, 00564 S FA%CTNPRF, FA%LIFLAP, 00565 S STAT = KERR ) 00566 IF (KERR /= 0) RETURN 00567 00568 00569 DEALLOCATE ( 00570 S FA%NSEC1, 00571 S FA%NSEC2SP, 00572 S FA%NSEC2LL, 00573 S FA%NSEC2GG, 00574 S FA%NSEC2LA, 00575 S FA%NSEC2AL, 00576 S FA%NSC2ALF, 00577 S FA%XSEC2, 00578 S FA%LISEC1, 00579 S FA%LISEC2, 00580 S FA%LISC2F, 00581 S STAT = KERR ) 00582 IF (KERR /= 0) RETURN 00583 00584 DEALLOCATE ( 00585 S FA%NCODGRI, 00586 S FA%NCOGRIF, 00587 S FA%CIPREF, 00588 S FA%CISUFF, 00589 S FA%NCODPA, 00590 S FA%NOMPAR, 00591 S STAT = KERR ) 00592 IF (KERR /= 0) RETURN 00593 00594 DEALLOCATE ( 00595 S FA%FATRAN_LLINDIR, 00596 S FA%FATRAN_INDIRECT, 00597 S STAT = KERR ) 00598 IF (KERR /= 0) RETURN 00599 00600 END SUBROUTINE 00601 00602 END MODULE FA_MOD 00603