SURFEX v7.3
General documentation of Surfex
|
00001 C Jan-2011 P. Marguinaud Thread-safe FA 00002 SUBROUTINE FAINOC_MT (FA, 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 permet d'INterpreter, pour un fichier ARPEGE 00008 C ouvert, les Options par defaut (-1) du Codage GRIB des champs: 00009 C FA%NBFPDG(KRANG), FA%NBFCSP(KRANG), FA%NSTROF(KRANG), FA%NPUFLA(KRANG). 00010 C Cette routine doit etre appelee par FAITOU ou FANOUV ou FAGOTE 00011 C pour ne pas laisser le defaut -1 lors du decodage ou du codage 00012 C GRIB. 00013 C 00014 C** 00015 C Arguments : KRANG (Entree) ==> Rang de l'unite logique; 00016 C 00017 C 00018 #include "precision.h" 00019 C 00020 C 00021 TYPE(FA_COM) :: FA 00022 INTEGER KRANG 00023 C 00024 INTEGER IRANGC, ITRONC, INBITS, ITYPTR, IAUXIL, IREP, INIMES 00025 INTEGER INUMER 00026 C 00027 LOGICAL LLVERF, LLMLAM 00028 C 00029 #include "facom2.h" 00030 #include "facom_mt.h" 00031 C** 00032 C 1. - INITIALISATIONS PREALABLES. 00033 C----------------------------------------------------------------------- 00034 C 00035 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00036 IF (LHOOK) CALL DR_HOOK('FAINOC_MT',0,ZHOOK_HANDLE) 00037 LLVERF=.FALSE. 00038 C 00039 C Verrouillage eventuel du fichier. 00040 C 00041 IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRFICH(KRANG),'ON') 00042 LLVERF=FA%LFAMUL 00043 C 00044 IRANGC=FA%NUCADR(KRANG) 00045 LLMLAM=FA%LIMLAM(IRANGC) 00046 ITRONC=FA%MTRONC(IRANGC) 00047 ITYPTR=FA%NTYPTR(IRANGC) 00048 C 00049 C** 00050 C 2. - INTERPRETATION DES OPTIONS PAR DEFAUT. 00051 C----------------------------------------------------------------------- 00052 C 00053 C On distingue le cas ARPEGE du cas ALADIN (LLMLAM=.T.). 00054 C 00055 C 00056 C Evaluation du nombre de bits par valeur point-de-grille 00057 C 00058 IF (FA%NBFPDG(KRANG).LT.0) THEN 00059 IF (LLMLAM) THEN 00060 FA%NBFPDG(KRANG)=16 00061 ELSE 00062 FA%NBFPDG(KRANG)=16 00063 ENDIF 00064 ENDIF 00065 C 00066 C Evaluation du nombre de bits par partie reelle/imagin. de coeff. spectral 00067 C 00068 IF (FA%NBFCSP(KRANG).LT.0) THEN 00069 IF (LLMLAM) THEN 00070 FA%NBFCSP(KRANG)=18 00071 ELSE 00072 FA%NBFCSP(KRANG)=16 00073 ENDIF 00074 ENDIF 00075 C 00076 C Evaluation de la sous-troncature non compactee 00077 C 00078 IF (FA%NSTROF(KRANG).LT.0) THEN 00079 INBITS=FA%NBFCSP(KRANG) 00080 IF (LLMLAM) THEN 00081 IAUXIL=MAX ( ITRONC, -ITYPTR ) 00082 IAUXIL=MAX ( 10, ((1+IAUXIL)*25)/(10*INBITS), (1+IAUXIL)/10 ) 00083 IAUXIL=MIN ( IAUXIL, ITRONC-1, -ITYPTR-1 ) 00084 FA%NSTROF(KRANG)=IAUXIL 00085 ELSE 00086 IAUXIL=MAX ( 10, 480/INBITS-10, (1+ITRONC)/10 ) 00087 IAUXIL=MIN ( IAUXIL, ITRONC-1 ) 00088 FA%NSTROF(KRANG)=IAUXIL 00089 ENDIF 00090 ENDIF 00091 C 00092 C Evaluation de la puissance de laplacien 00093 C 00094 IF (FA%NPUFLA(KRANG).LT.0) THEN 00095 IF (LLMLAM) THEN 00096 FA%NPUFLA(KRANG)=2 00097 ELSE 00098 FA%NPUFLA(KRANG)=1 00099 ENDIF 00100 ENDIF 00101 C** 00102 C 10. - PHASE TERMINALE : MESSAGERIE, 00103 C VIA LE SOUS-PROGRAMME "FAIPAR" . 00104 C----------------------------------------------------------------------- 00105 C 00106 1001 CONTINUE 00107 C 00108 C Deverrouillage eventuel du fichier. 00109 C 00110 IF (LLVERF) CALL LFIVER_MT (FA%LFI, FA%VRFICH(KRANG),'OFF') 00111 C 00112 IF (IXNVMS(KRANG).NE.2) THEN 00113 IF (LHOOK) CALL DR_HOOK('FAINOC_MT',1,ZHOOK_HANDLE) 00114 RETURN 00115 ENDIF 00116 C 00117 INUMER=FA%JPNIIL 00118 INIMES=IXNVMS (KRANG) 00119 IREP=0 00120 CLNSPR='FAINOC' 00121 WRITE (UNIT=CLMESS,FMT='(''KRANG='',I4)') KRANG 00122 CALL FAIPAR_MT (FA, INUMER,INIMES,IREP,.FALSE.,CLMESS, 00123 S CLNSPR,' ',.FALSE.) 00124 C 00125 IF (LHOOK) CALL DR_HOOK('FAINOC_MT',1,ZHOOK_HANDLE) 00126 END 00127