SURFEX v7.3
General documentation of Surfex
|
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