SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/mt/fagiot_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe FA
00002       SUBROUTINE FAGIOT_MT (FA,  KNGRIB, KNBPDG, KNBCSP, KSTRON, KPUILA,
00003      S                    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 de modifier les options implicites
00009 C     liees au codage GRIB des champs.
00010 C     CES OPTIONS NE SONT UTILISEES QUE POUR (RE)ECRIRE DES CHAMPS
00011 C     codes en GRIB, et les nouvelles valeurs implicites ne serviront
00012 C     que LORS d'une OUVERTURE de FICHIER ULTERIEURE.
00013 C       ( Grib, Implicites Options Techniques )
00014 C**
00015 C     Arguments : KNGRIB (Entree) ==> Niveau de codage GRIB (-1,0,1,2,3);
00016 C                 KNBPDG (Entree) ==> Nombre de bits par valeur point-
00017 C                                     de-grille;
00018 C                 KNBCSP (Entree) ==> Nombre de bits par partie reelle/
00019 C                                     imaginaire de coeff. spectral;
00020 C                 KSTRON (Entree) ==> Sous-troncature non compactee;
00021 C                 KPUILA (Entree) ==> Puissance de laplacien;
00022 C                 KDMOPL (Entree) ==> Degre de modulation de KPUILA.
00023 C
00024 C     N.B.: Il doit y avoir coherence vis-a-vis des cadres deja definis
00025 C           et vis-a-vis des limites usagers.
00026 C           ( ce qui en pratique, ne concerne que KSTRON )
00027 C
00028 C     Remarque:  KSTRON egal a -1 est accepte, et dans ce cas
00029 C                on indexera (a chaque ouverture de fichier) la sous-
00030 C                troncature effective sur la troncature.
00031 C
00032 C      MODIF 30/03/2007 JM AUDOIN FA%LFAMOP pour limiter IMPRESSION
00033 C
00034 #include "precision.h"
00035 C
00036 C
00037       TYPE(FA_COM) :: FA
00038       INTEGER KNGRIB, KNBPDG, KNBCSP, KSTRON, KPUILA, KDMOPL
00039 C
00040       INTEGER IMINIM, IREP, INIMES, INUMER, J, IRANGC
00041 C
00042       LOGICAL LLVERG
00043 C
00044 C
00045 C
00046 #include "facom2.h"
00047 #include "facom_mt.h"
00048 C**
00049 C     1.  -  CONTROLES ET INITIALISATIONS.
00050 C-----------------------------------------------------------------------
00051 C
00052       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00053       IF (LHOOK) CALL DR_HOOK('FAGIOT_MT',0,ZHOOK_HANDLE)
00054       IF (FA%FAGIOT_LLPREA) THEN
00055 C
00056 C          A la premiere utilisation, appel au sous-programme "FARINE".
00057 C
00058         CALL FARINE_MT(FA, 2)
00059         FA%FAGIOT_LLPREA=.FALSE.
00060       ENDIF
00061 C
00062       LLVERG=.FALSE.
00063       IMINIM=MIN (2+KNGRIB,2+KNBPDG,2+KNBCSP,2+KSTRON,1+KDMOPL)
00064 C
00065       IF (IMINIM.LE.0) THEN
00066         IREP=-64
00067         GOTO 1001
00068       ELSEIF (KNBPDG*KNBCSP.EQ.0) THEN
00069         IREP=-64
00070         GOTO 1001
00071       ELSEIF (KNGRIB.GT.3) THEN
00072         IREP=-96
00073         GOTO 1001
00074       ELSEIF (MAX (KNBPDG,KNBCSP).GT.FA%NBIMAX) THEN
00075         IREP=-97
00076         GOTO 1001
00077       ELSEIF (IABS (KPUILA).GT.2**15-1) THEN
00078         IREP=-98
00079         GOTO 1001
00080       ENDIF
00081 C
00082 C         Verrouillage global eventuel.
00083 C
00084       IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'ON')
00085       LLVERG=FA%LFAMUL
00086 C
00087       IF (KSTRON.GE.FA%NXTRON) THEN
00088         IREP=-113
00089         GOTO 1001
00090       ENDIF
00091 C
00092 C        Coherence de "KSTRON" vis-a-vis de la troncature des cadres
00093 C     deja definis.
00094 C
00095       DO 101 J=1,FA%NCADEF
00096       IRANGC=FA%NCAIND(J)
00097 C
00098       IF (KSTRON.GE.FA%MTRONC(IRANGC)) THEN
00099         IREP=-99
00100         GOTO 1001
00101       ENDIF
00102 C
00103   101 CONTINUE
00104 C**
00105 C     2.  -  STOCKAGE DES NOUVEAUX PARAMETRES.
00106 C-----------------------------------------------------------------------
00107 C
00108       IF (FA%LFAMOP.AND.(FA%NIGRIB.EQ.-1.OR.FA%NIGRIB.EQ.3).AND.
00109      S    (KNGRIB.GT.-1.AND.KNGRIB.LT.3))     THEN
00110         WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------'
00111         WRITE (UNIT=FA%NULOUT,FMT=*)
00112      S          'FAGIOT: CAUTION!! Les champs spectraux ARPEGE ne',
00113      S          ' devront pas etre ranges comme dans le modele ARPEGE'
00114         WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------'
00115       ENDIF
00116       IF (FA%LFAMOP.AND.(KNGRIB.EQ.-1.OR.KNGRIB.EQ.3).AND.
00117      S    (FA%NIGRIB.GT.-1.AND.FA%NIGRIB.LT.3))     THEN
00118         WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------'
00119         WRITE (UNIT=FA%NULOUT,FMT=*)
00120      S          'FAGIOT: CAUTION!! Les champs spectraux ARPEGE devront',
00121      S          ' etre ranges comme dans le modele ARPEGE'
00122         WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------'
00123       ENDIF
00124       FA%NIGRIB=KNGRIB
00125       FA%NBIPDG=KNBPDG
00126       FA%NBICSP=KNBCSP
00127       FA%NSTROI=KSTRON
00128       FA%NPUILA=KPUILA
00129       FA%NMIDPL=KDMOPL
00130       IREP=0
00131 C**
00132 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00133 C            VIA LE SOUS-PROGRAMME "FAIPAR" .
00134 C-----------------------------------------------------------------------
00135 C
00136  1001 CONTINUE
00137       LLFATA=LLMOER (IREP,0)
00138 C
00139 C        Deverrouillage global eventuel.
00140 C
00141       IF (LLVERG) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'OFF')
00142 C
00143       IF (LLFATA) THEN
00144         INIMES=2
00145       ELSE
00146         INIMES=FA%NIMSGA
00147       ENDIF
00148 C
00149       IF (.NOT.LLFATA.AND.INIMES.NE.2)  THEN 
00150         IF (LHOOK) CALL DR_HOOK('FAGIOT_MT',1,ZHOOK_HANDLE)
00151         RETURN
00152       ENDIF
00153 C
00154       CLNSPR='FAGIOT'
00155 C
00156       WRITE (UNIT=CLMESS,FMT='(''KNGRIB='',I2,'', KNBPDG='
00157 ',I3,     S       '', KNBCSP='',I3,'', KSTRON='',I2,'', KPUILA='
00158 ',I3,     S       '', KDMOPL='',I3)')
00159      S   KNGRIB,KNBPDG,KNBCSP,KSTRON,KPUILA,KDMOPL
00160       INUMER=FA%JPNIIL
00161       CALL FAIPAR_MT (FA, INUMER,INIMES,IREP,LLFATA,CLMESS,
00162      S                CLNSPR,CLACTI,.FALSE.)
00163 C
00164       IF (LHOOK) CALL DR_HOOK('FAGIOT_MT',1,ZHOOK_HANDLE)
00165       END
00166