SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/mt/farine_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe FA
00002       SUBROUTINE FARINE_MT (FA,  KOPTIO )
00003       USE FA_MOD, ONLY : FA_COM
00004       USE PARKIND1, ONLY : JPRB
00005       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
00006 C****
00007 C        Ce sous-programme est charge des INITIALISATIONS du logiciel
00008 C     de Fichiers ARPEGE FA ( Routine d'INitialisation )
00009 C**
00010 C        Argument : KOPTIO  ==> OPTION concernant le mode d'utilisation.
00011 C                  (Entree)     (MULTI-TACHE ou NON)
00012 C     VALEURS POSSIBLES : 0 ==> Mode MONO-Tache prescrit;
00013 C                         1 ==> Mode MULTI-Taches prescrit;
00014 C                         2 ==> Utilisation du mode par defaut si c'est
00015 C                               le premier appel; sinon on garde le mode
00016 C                               prescrit anterieurement .
00017 C
00018 #include "precision.h"
00019 C
00020 C
00021       TYPE(FA_COM) :: FA
00022       INTEGER KOPTIO
00023 C
00024       INTEGER IREP, J, JN, IDEBUT, IFIN, INDM, INDN, INIMES, INUMER
00025       INTEGER JJPUIS, INCHIF
00026 C
00027       LOGICAL LLNMUL, LLASGN, LLREL
00028 C
00029 C
00030 #include "facom2.h"
00031 #include "facom_mt.h"
00032 C
00033       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00034       IF (LHOOK) CALL DR_HOOK('FARINE_MT',0,ZHOOK_HANDLE)
00035       IF (KOPTIO.LT.0.OR.KOPTIO.GT.2) THEN
00036         IREP=-52
00037         GOTO 1001
00038       ENDIF
00039 C
00040       IF (FA%FARINE_LLPREA) THEN
00041 C
00042 C         C'EST LE PREMIER APPEL AU sous-programme - INITIALISATIONS .
00043 C
00044         FA%NFIOUV=0
00045         FA%NCADEF=0
00046         FA%NRFAGA=1
00047         FA%NIMSGA=1
00048         FA%NBIPDG=24
00049         FA%NBICSP=24
00050         FA%NPUILA=1
00051         FA%NSTROI=10
00052         FA%NMIDPL=5
00053         FA%NIGRIB=2
00054         FA%LFAMOP=.FALSE.
00055         FA%LERRFA(0)=.TRUE.
00056         FA%NIVOMS(0)=0
00057         FA%NCPCAD=LEN (FA%CNOMCA(1))
00058         FA%SPSMIN=45000.
00059         FA%SPSMAX=110000.
00060         FA%MPRESX=100000
00061         FA%NBIMAC=64
00062         FA%NBIMAX=31
00063         FA%LIGARD=.FALSE.
00064         FA%NTYPTX=2
00065         FA%NXNIVV=FA%JPXNIV
00066         FA%NXTRON=FA%JPXTRO
00067         FA%NXLATI=FA%JPXLAT
00068         FA%NXLONG=FA%JPXLON
00069 C
00070         DO 101 J=1,FA%JPNXFA
00071           FA%NULOGI(J)=FA%JPNIIL
00072           FA%NRASHO(J)=0
00073           FA%NRASVE(J)=0
00074   101   CONTINUE
00075 C
00076         DO 102 J=1,FA%JPNXCA
00077           FA%CNOMCA(J)=' '
00078   102   CONTINUE
00079 C
00080         DO 1020 J=1,FA%JPXNOM
00081           FA%CHAINC(J:J)='?'
00082  1020   CONTINUE
00083 C
00084 C        Descripteurs lies aux types de niveaux verticaux:
00085 C        prefixes reconnus, extrema possibles du niveau dans le cas
00086 C        d'une coordonnee verticale, premiers elements de xB1PAR.
00087 C
00088         DO 111 J=0,FA%JPTNIV
00089 C
00090 C       Initialisation par defaut pour la serie d'affectations qui suit.
00091 C
00092           FA%NIVDSC(0,J)=0
00093           FA%NIVDSC(1,J)=0
00094           FA%NIVDSC(2,J)=0
00095 C
00096 C        Tous les cas sont reputes "niveau vrai" (pas des couches).
00097 C
00098           FA%NIVDSC(4,J)=0
00099   111   CONTINUE
00100 C
00101 C           Cas du type non reconnu.
00102 C
00103         FA%NIVDSC(0,0)=0
00104         FA%NIVDSC(3,0)=200
00105 C
00106 C           Niveau hybride.
00107 C
00108         FA%CTNPRF(1)='S'
00109         FA%NIVDSC(0,1)=3
00110         FA%NIVDSC(2,1)=FA%JPXNIV
00111         FA%NIVDSC(3,1)=109
00112 C
00113 C           Niveau isobare.
00114 C
00115         FA%CTNPRF(2)='P'
00116         FA%NIVDSC(0,2)=5
00117         FA%NIVDSC(1,2)=1
00118         FA%NIVDSC(2,2)=10**5
00119         FA%NIVDSC(3,2)=100
00120 C
00121 C           Niveau iso-hauteur (au-dessus d'un relief de reference).
00122 C
00123         FA%CTNPRF(3)='H'
00124         FA%NIVDSC(0,3)=5
00125         FA%NIVDSC(2,3)=10**5-1
00126         FA%NIVDSC(3,3)=105
00127 C
00128 C           Niveau iso-tourbillon_potentiel.
00129 C
00130         FA%CTNPRF(4)='V'
00131         FA%NIVDSC(0,4)=3
00132         FA%NIVDSC(2,4)=10**3-1
00133         FA%NIVDSC(3,4)=117
00134 C
00135 C           Niveau iso-temperature_potentielle.
00136 C
00137         FA%CTNPRF(5)='T'
00138         FA%NIVDSC(0,5)=3
00139         FA%NIVDSC(2,5)=10**3-1
00140         FA%NIVDSC(3,5)=113
00141 C
00142 C           Niveau surface.
00143 C
00144         FA%CTNPRF(6)='SURF'
00145         FA%NIVDSC(3,6)=1
00146 C
00147 C           Niveau de vent max (jet).
00148 C
00149         FA%CTNPRF(7)='JET'
00150         FA%NIVDSC(3,7)=6
00151 C
00152 C           Niveau surface.
00153 C
00154         FA%CTNPRF(8)='TROPO'
00155         FA%NIVDSC(3,8)=7
00156 C
00157 C           Niveau moyen de la mer.
00158 C
00159         FA%CTNPRF(9)='MER'
00160         FA%NIVDSC(3,9)=102
00161 C
00162 C           Niveau hybride bis pour MOCAGE
00163 C
00164         FA%CTNPRF(10)='L'
00165         FA%NIVDSC(0,10)=3
00166         FA%NIVDSC(2,10)=FA%JPXNIV
00167 C  
00168 C           Niveau iso-temperature.
00169 C
00170         FA%CTNPRF(11)='KB'
00171         FA%NIVDSC(0,11)=3
00172         FA%NIVDSC(2,11)=10**3-1
00173         FA%NIVDSC(3,11)=113
00174 C
00175         FA%CTNPRF(12)='KT'
00176         FA%NIVDSC(0,12)=3
00177         FA%NIVDSC(2,12)=10**3-1
00178         FA%NIVDSC(3,12)=113
00179 
00180 C
00181 C  Initialisations pour la mise en oeuvre de GRIBEX
00182 C
00183 C  1/ On force GRIBEX a calculer la puissance de laplacien
00184 C        CALL GRSMKP(1)
00185 C  2/ On retire l'arrondi du message GRIB a un multiple de 120 octets
00186 C        CALL GRSRND(0)
00187 C
00188 C  3/ Creation de la correspondance "nom article FA" et
00189 C                                   "descripteurs GRIBEX"
00190         CALL FAICOR_MT (FA)
00191 C
00192 C
00193 C  4/ Definition du codage GRIBEX par defaut:
00194 C
00195 C  Il s'agit d'une compression "APAC1" (meilleure solution entre
00196 C  l'absence de compression et la compression ligne a ligne)
00197 C  associee a la compression "general extended", a la differentiation
00198 C  spatiale (-1: calcul dynamique de l'ordre) et au rearrangement
00199 C  boustrophedonique.
00200 C
00201 C  "APAC1"
00202         FA%NCODGRI(1) = 1
00203         FA%NCODGRI(2) = 16
00204         FA%NCODGRI(3) = 0
00205         FA%NCODGRI(4) = 0
00206         FA%NCODGRI(5) = 16
00207         FA%NCODGRI(6) = 0
00208 C  compression "general extended"
00209         FA%NCODGRI(7) = 8
00210 C  arrangement boustrophedonique
00211         FA%NCODGRI(8) = 4
00212 C  differentiation spatiale
00213         FA%NCODGRI( 9)= 0
00214         FA%NCODGRI(10)= -1
00215 C
00216 C  5/ Initialisation de logiques pilotant des initialisations ulterieures
00217 C
00218 C  Il faudra initialiser XLAPxDx
00219         FA%LIXLAP=.TRUE.
00220 C  Il ne faut pas initialiser FLAP1Dx(): on attend l'ouverture du fichier
00221         FA%LIFLAP(:)=.FALSE.
00222 C  Il faudra initialiser le tableau FA%NSEC1 (section 1 GRIBEX) via FAISC1
00223         FA%LISEC1(:)=.TRUE.
00224 C  Il faudra initialiser les tableaux NSEC2xxx et FA%XSEC2
00225 C  (section 2 GRIBEX) via FAISC2
00226         FA%LISEC2(:)=.TRUE.
00227 C  Il faudra initialiser le tableau FA%NSC2ALF
00228 C  (section 2 GRIBEX) via FAIS2F
00229         FA%LISC2F(:)=.TRUE.
00230 C
00231         FA%FARINE_LLPREA=.FALSE.
00232         LLNMUL=(KOPTIO.EQ.1).OR.(KOPTIO.EQ.2.AND.FA%FARINE_LLDEFM)
00233         LLASGN=LLNMUL
00234         LLREL=.FALSE.
00235         CALL LFIINI_MT(FA%LFI, KOPTIO)
00236 C
00237       ELSEIF (KOPTIO.EQ.2) THEN
00238 C
00239 C         CE N'EST PAS LE PREMIER APPEL, MAIS COMME L'ARGUMENT VAUT 2,
00240 C         ON LAISSE LES CHOSES EN PLACE .
00241 C
00242         LLNMUL=FA%LFAMUL
00243         LLASGN=.FALSE.
00244         LLREL =.FALSE.
00245 C
00246       ELSE
00247         LLNMUL=KOPTIO.EQ.1
00248         LLASGN=LLNMUL.AND.(.NOT.FA%LFAMUL)
00249         LLREL =(.NOT.LLNMUL).AND.FA%LFAMUL
00250 C
00251 C     CE N'EST PAS LE PREMIER APPEL ET LE MODE EST PASSE 'EXPLICITEMENT'
00252 C
00253         IF ((LLASGN.OR.LLREL).AND.FA%NFIOUV.NE.0) THEN
00254           IREP=-54
00255           GOTO 1001
00256         ENDIF
00257 C
00258         CALL LFIINI_MT(FA%LFI, KOPTIO)
00259 C
00260       ENDIF
00261 C
00262       FA%LFAMUL=LLNMUL
00263       IREP=0
00264 C
00265       IF (LLASGN) THEN
00266         CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'ASGN')
00267       ELSEIF (LLREL) THEN
00268         CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'REL')
00269       ENDIF
00270 C
00271  1001 CONTINUE
00272 C
00273 C        MESSAGERIE EVENTUELLE, AVEC ABORT SI NECESSAIRE .
00274 C
00275       LLFATA=IREP.NE.0.AND.FA%NRFAGA.NE.2
00276 C
00277       IF (LLFATA.OR.FA%LFAMOP) THEN
00278         INIMES=2
00279       ELSEIF (IREP.NE.0) THEN
00280         INIMES=0
00281       ELSEIF (FA%NIMSGA.EQ.2) THEN
00282         INIMES=2
00283       ELSE
00284         IF (LHOOK) CALL DR_HOOK('FARINE_MT',1,ZHOOK_HANDLE)
00285         RETURN
00286       ENDIF
00287 C
00288       CLNSPR='FARINE'
00289       INUMER=FA%JPNIIL
00290 C
00291       IF (MAX (INIMES,FA%NIMSGA).EQ.2) THEN
00292         WRITE (UNIT=CLMESS,
00293      S         FMT='(''KOPTIO='',I5,'', CODE INTERNE='',I4)'
00294      S         ) KOPTIO,IREP
00295         IF (INIMES.NE.2) CALL FAIPAR_MT (FA, INUMER,FA%NIMSGA,IREP,
00296      S                                .FALSE.,CLMESS,
00297      S                                CLNSPR,CLACTI,.FALSE.)
00298       ENDIF
00299 C
00300       CALL FAIPAR_MT (FA, INUMER,INIMES,IREP,LLFATA,CLMESS,
00301      S             CLNSPR,CLACTI,.FALSE.)
00302 C
00303       IF (LHOOK) CALL DR_HOOK('FARINE_MT',1,ZHOOK_HANDLE)
00304       END
00305