SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/mt/faisc1_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe FA
00002       SUBROUTINE FAISC1_MT (FA,  KREP, KRANG )
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 initialise un tableau "reference" de
00008 C      l'en-tete GRIB, section 1.
00009 C      (routine appelee une seule fois pour un fichier donne)
00010 C**
00011 C    Arguments : KREP   (Sortie) ==> Code-reponse du sous-programme;
00012 C                KRANG  (Entree) ==> Rang de l'unite logique;
00013 C*
00014 C
00015 #include "precision.h"
00016 C
00017 C
00018       TYPE(FA_COM) :: FA
00019       INTEGER KREP, KRANG
00020 C
00021       INTEGER I, INUMER, INIMES, IRANGC
00022 C
00023 #include "facom2.h"
00024 #include "facom_mt.h"
00025 C**
00026 C     0.  -  INITIALISATIONS ET CONTROLES
00027 C-----------------------------------------------------------------------
00028 C
00029       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00030       IF (LHOOK) CALL DR_HOOK('FAISC1_MT',0,ZHOOK_HANDLE)
00031       KREP=0
00032       IF (KRANG.LE.0.OR.KRANG.GT.FA%JPNXFA) THEN
00033         KREP=-66
00034         GOTO 1001
00035       ENDIF
00036       IRANGC=FA%NUCADR(KRANG)
00037 C**
00038 C     1.  -  INIT. DU TAB. FA%NSEC1 REPRESENTANT LA SECTION 1 DE GRIBEX
00039 C-----------------------------------------------------------------------
00040 C
00041 C  2: identification of centre
00042 C
00043 C (defaut=85 pour Toulouse; pour en changer, utiliser FAREGU)
00044       FA%NSEC1(2,KRANG) = 85
00045 C  3: generating process identification number, alloc by the orig. centre
00046       IF (FA%LIMLAM(IRANGC)) THEN
00047 C Il s'agit du modele Aladin
00048         FA%NSEC1(3,KRANG) = 177
00049       ELSE
00050 C Il s'agit du modele Arpege
00051         IF (FA%MADATE(7,KRANG).GT.0) THEN
00052 C     prevision
00053           FA%NSEC1(3,KRANG) = 211
00054         ELSE
00055 C     analyse
00056           FA%NSEC1(3,KRANG) = 201
00057 C     analyse initialisee -> prevision
00058           IF (FA%MADATE(9,KRANG).EQ.1) FA%NSEC1(3,KRANG) = 211
00059         ENDIF
00060       ENDIF
00061 C  4: grid definition
00062 C     =255 for a non-catalogued grid (description follows in KSEC2)
00063       FA%NSEC1(4,KRANG) = 255
00064 C  5: flag showing whether sections 2 and 3 are present
00065 C     128 --> Section 2 is included, Section 3 is omitted (no bitmap)
00066       FA%NSEC1(5,KRANG) = 128
00067 C  6 a 9: to be initialized later (specific to each field)
00068       FA%NSEC1(6:9,KRANG) = 0
00069 C 10 a 21: valeurs deduites de FA%MADATE(1:11,KRANG)
00070 C
00071 C rappel :   2000 -->  an 100 (=FA%NSEC1(10))  siecle 20 (=FA%NSEC1(21))
00072 C            2001 -->  an   1  "        "   siecle 21  "        "
00073 C
00074       FA%NSEC1(10,KRANG) = 1 + MOD(FA%MADATE(1,KRANG) - 1 , 100)
00075       FA%NSEC1(21,KRANG) = 1 + (FA%MADATE(1,KRANG) - 1) / 100
00076       DO I=1,10
00077         FA%NSEC1(10+I,KRANG) = FA%MADATE(1+I,KRANG)
00078       ENDDO
00079 C FA%NSEC1(18,KRANG)=10 signifie un codage sur 2 octets de l'echeance
00080 C Ce n'est pas le cas, donc on revient a 0 pour GRIBEX
00081       IF (FA%NSEC1(18,KRANG)==10) FA%NSEC1(18,KRANG)=0
00082 C FA%MADATE(10,KRANG) peut contenir l'echeance precedente dans le cas
00083 C d'un calcul sur une periode (min, max par exemple): c'est une
00084 C convention dans FA (depuis fin 2000) qui est incompatible avec
00085 C GRIBEX. On retire donc cette valeur ici dans FA%NSEC1, sachant
00086 C qu'elle sera utilisee plus tard.
00087       FA%NSEC1(19,KRANG) = 0
00088 C
00089 C**
00090 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00091 C            VIA LE SOUS-PROGRAMME "FAIPAR" .
00092 C-----------------------------------------------------------------------
00093 C
00094  1001 CONTINUE
00095       LLFATA=LLMOER (KREP,KRANG)
00096 C
00097       IF (FA%LFAMOP.OR.LLFATA) THEN
00098         INIMES=2
00099         CLNSPR='FAISC1'
00100         INUMER=FA%JPNIIL
00101 C
00102         WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KRANG='',I4)')
00103      S     KREP, KRANG
00104         CALL FAIPAR_MT (FA, INUMER,INIMES,KREP,.FALSE.,CLMESS,
00105      S                  CLNSPR, CLNSPR,.FALSE.)
00106       ENDIF
00107 C
00108       IF (LHOOK) CALL DR_HOOK('FAISC1_MT',1,ZHOOK_HANDLE)
00109       END
00110