SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/mt/fagote_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe FA
00002       SUBROUTINE FAGOTE_MT (FA,  KREP, KNUMER, KNGRIB, KNBPDG, KNBCSP, 
00003      S                      KSTRON, KPUILA, KDMOPL )
00004       USE FA_MOD, ONLY : FA_COM
00005       USE PARKIND1, ONLY : JPRB
00006       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
00007 C****
00008 C        Ce sous-programme permet d'ajuster, pour un fichier ARPEGE
00009 C     ouvert, les options liees au codage GRIB des champs.
00010 C     CES OPTIONS NE SONT UTILISEES QUE POUR (RE)ECRIRE DES CHAMPS
00011 C     codes en GRIB.
00012 C       ( Grib, Options Techniques Effectives )
00013 C**
00014 C     Arguments : KREP   (Sortie) ==> Code-reponse du sous-programme;
00015 C                 KNUMER (Entree) ==> Numero d'Unite Logique concernee;
00016 C                 KNGRIB (Entree) ==> Niveau de codage GRIB (-1,0,1,2,3);
00017 C                 KNBPDG (Entree) ==> Nombre de bits par valeur point-
00018 C                                     de-grille;
00019 C                 KNBCSP (Entree) ==> Nombre de bits par partie reelle/
00020 C                                     imaginaire de coeff. spectral;
00021 C                 KSTRON (Entree) ==> Sous-troncature non compactee;
00022 C                 KPUILA (Entree) ==> Puissance de laplacien;
00023 C                 KDMOPL (Entree) ==> Degre de modulation de KPUILA.
00024 C
00025 C     Remarque:  KSTRON egal a -1 est accepte; dans ce cas on indexera
00026 C                (pour chaque champ spectral ecrit) la sous-troncature
00027 C                effective sur la troncature et sur le nombre de bits
00028 C                par valeur compactee.
00029 C                 
00030 C     MODIF : 30/03/2007 JM AUDOIN  FA%LFAMOP Pour limiter Impression
00031 C
00032 #include "precision.h"
00033 C
00034 C
00035       TYPE(FA_COM) :: FA
00036       INTEGER KREP, KNUMER, KNGRIB, KNBPDG, KNBCSP, KSTRON, KPUILA
00037       INTEGER KDMOPL
00038 C
00039       INTEGER IMINIM, IREP, IRANGC, ITRONC, J, INIMES, IRANG, ITYPTR
00040 C
00041       LOGICAL LLVERF, LLMLAM
00042 C
00043 #include "facom2.h"
00044 #include "facom_mt.h"
00045 C**
00046 C     1.  -  CONTROLES ET INITIALISATIONS.
00047 C-----------------------------------------------------------------------
00048 C
00049       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00050       IF (LHOOK) CALL DR_HOOK('FAGOTE_MT',0,ZHOOK_HANDLE)
00051       LLVERF=.FALSE.
00052       IMINIM=MIN (2+KNGRIB,2+KNBPDG,2+KNBCSP,2+KSTRON,1+KDMOPL)
00053       CALL FANUMU_MT (FA, KNUMER,IRANG)
00054 C
00055       IF (IRANG.EQ.0) THEN
00056         IREP=-51
00057         GOTO 1001
00058       ELSEIF (IMINIM.LE.0) THEN
00059         IREP=-64
00060         GOTO 1001
00061       ELSEIF (KNBPDG*KNBCSP.EQ.0 .AND. KNGRIB.GT.0) THEN
00062         IREP=-124
00063         GOTO 1001
00064       ELSEIF (KNGRIB.GT.3) THEN
00065         IREP=-96
00066         GOTO 1001
00067       ELSEIF (MAX (KNBPDG,KNBCSP).GT.FA%NBIMAX) THEN
00068         IREP=-97
00069         GOTO 1001
00070       ELSEIF (IABS (KPUILA).GT.2**15-1) THEN
00071         IREP=-98
00072         GOTO 1001
00073       ENDIF
00074 C
00075 C         Verrouillage eventuel du fichier.
00076 C
00077       IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'ON')
00078       LLVERF=FA%LFAMUL
00079 C
00080       IRANGC=FA%NUCADR(IRANG)
00081       ITRONC=FA%MTRONC(IRANGC)
00082       ITYPTR=FA%NTYPTR(IRANGC)
00083       LLMLAM=FA%LIMLAM(IRANGC)
00084 C
00085       IF (KSTRON.GE.ITRONC) THEN
00086         IREP=-99
00087         GOTO 1001
00088       ELSEIF (ITYPTR.LT.0.AND.KSTRON.GE.(-ITYPTR)) THEN
00089         IREP=-99
00090         GOTO 1001
00091       ENDIF
00092 C**
00093 C     2.  -  STOCKAGE DES NOUVEAUX PARAMETRES.
00094 C-----------------------------------------------------------------------
00095 C
00096       IF (KPUILA.NE.FA%NPUFLA(IRANG)) THEN
00097         FA%NPUFLA(IRANG)=KPUILA
00098         FA%LIFLAP(IRANG)=.TRUE.
00099       ENDIF
00100       IF (KSTRON.NE.FA%NSTROF(IRANG)) THEN
00101         FA%NSTROF(IRANG)=KSTRON
00102         FA%LISC2F(IRANG)=.TRUE.
00103       ENDIF
00104 C
00105       IF (FA%LFAMOP.AND.(FA%NFGRIB(IRANG).EQ.3
00106      S   .OR.FA%NFGRIB(IRANG).EQ.-1)
00107      S  .AND.(KNGRIB.LT.3.AND.KNGRIB.GT.-1))           THEN
00108         WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------'
00109         WRITE (UNIT=FA%NULOUT,FMT=*)
00110      S        'FAGOTE: WARNING!! Les champs spectraux NE devront',
00111      S        ' PAS etre ranges comme dans le modele (rangt horiz.)',
00112      S        ' pour l''unite logique ',KNUMER
00113         WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------'
00114       ENDIF
00115       IF (FA%LFAMOP.AND.(FA%NFGRIB(IRANG).LT.3
00116      S   .AND.FA%NFGRIB(IRANG).GT.-1)
00117      S  .AND.(KNGRIB.EQ.3.OR.KNGRIB.EQ.-1))           THEN
00118         WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------'
00119         WRITE (UNIT=FA%NULOUT,FMT=*)
00120      S        'FAGOTE: WARNING!! Les champs spectraux devront',
00121      S        ' etre ranges comme dans le modele (rangt verti.) pour',
00122      S        ' l''unite logique ',KNUMER
00123         WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------'
00124       ENDIF
00125       FA%NFGRIB(IRANG)=KNGRIB
00126       FA%NBFPDG(IRANG)=KNBPDG
00127       FA%NBFCSP(IRANG)=KNBCSP
00128       FA%NMFDPL(IRANG)=KDMOPL
00129       IREP=0
00130 C
00131 C Appel a FAINOC pour interpreter les eventuels defauts
00132 C de -1 pris par FA%NBFPDG, FA%NBFCSP, FA%NSTROF et FA%NPUFLA en
00133 C IRANG-ieme position.
00134 C
00135       CALL FAINOC_MT (FA,  IRANG )
00136 C
00137 C**
00138 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00139 C            VIA LE SOUS-PROGRAMME "FAIPAR" .
00140 C-----------------------------------------------------------------------
00141 C
00142  1001 CONTINUE
00143       KREP=IREP
00144       LLFATA=LLMOER (IREP,IRANG)
00145 C
00146 C        Deverrouillage eventuel du fichier.
00147 C
00148       IF (LLVERF) CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'OFF')
00149 C
00150       IF (LLFATA) THEN
00151         INIMES=2
00152       ELSE
00153         INIMES=IXNVMS(IRANG)
00154       ENDIF
00155 C
00156       IF (.NOT.LLFATA.AND.INIMES.NE.2)  THEN 
00157         IF (LHOOK) CALL DR_HOOK('FAGOTE_MT',1,ZHOOK_HANDLE)
00158         RETURN
00159       ENDIF
00160 C
00161       CLNSPR='FAGOTE'
00162 C
00163 C***** FAZZZZ - KREP=iiii, KNUMER=iii, KNGRIB=ii, KNBPDG=iii,   *****
00164 C*****          KNBCSP=iii, KSTRON=ii, KPUILA=iii, KDMOPL=iii  *****
00165       WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER='
00166 ',I3,     S       '', KNGRIB='',I2,'', KNBPDG='',I3,'', KNBCSP='
00167 ',I3,     S       '', KSTRON='',I2,'', KPUILA='',I3,'', KDMOPL='',I3)')
00168      S   KREP,KNUMER,KNGRIB,KNBPDG,KNBCSP,KSTRON,KPUILA,KDMOPL
00169       CALL FAIPAR_MT (FA, KNUMER,INIMES,IREP,LLFATA,CLMESS,
00170      S                CLNSPR, CLACTI,.FALSE.)
00171 C
00172       IF (LHOOK) CALL DR_HOOK('FAGOTE_MT',1,ZHOOK_HANDLE)
00173       END
00174