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