SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/fa_mod.F
Go to the documentation of this file.
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