SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/mt/farflu_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe FA
00002       SUBROUTINE FARFLU_MT (FA,  KXNIVV, KXTRON, KXLATI, KXLONG )
00003       USE FA_MOD, ONLY : FA_COM
00004       USE PARKIND1, ONLY : JPRB
00005       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
00006 C****
00007 C        Sous-programme servant a specifier des Limites Utilisateur
00008 C     en termes de Resolutions horizontale et verticale, valides
00009 C     globalement pour tous les Fichiers et Cadres ARPEGE.
00010 C            ( Resolution Fichiers - Limites Utilisateur )
00011 C**
00012 C        Arguments : KXNIVV ==> Nombre maximum de niveaux verticaux;
00013 C  (tous d'Entree)   KXTRON ==> Troncature maximum;
00014 C                    KXLATI ==> Nombre maximum de latitudes pole a pole;
00015 C                    KXLONG ==> Nombre maxi de longitudes par parallele.
00016 C*
00017 C        S'il y a des cadres deja definis (dynamiquement ou non) avec
00018 C     des valeurs correspondantes plus grandes, cela provoque une erreur
00019 C     globale.
00020 C        Si les valeurs donnees en argument depassent les limites cor-
00021 C     repondantes du logiciel, elles sont ecretees, avec un message.
00022 C        Une messagerie de niveau 1 est emise dans le cas normal ou
00023 C     ci-dessus.
00024 C
00025 #include "precision.h"
00026 C
00027 C
00028       TYPE(FA_COM) :: FA
00029       INTEGER KXNIVV, KXTRON, KXLATI, KXLONG
00030 C
00031       INTEGER INUMER, INIMES, IREP, IMINIM, IXNIVV, IXTRON, IXLATI, J
00032       INTEGER IXLONG, IRANGC
00033 C
00034       LOGICAL LLDEPA, LLVERG
00035 C
00036 C
00037 C
00038 #include "facom2.h"
00039 #include "facom_mt.h"
00040 C**
00041 C     1.  -  SI PREMIERE UTILISATION, APPEL AU SOUS-PROGRAMME "FARINE".
00042 C-----------------------------------------------------------------------
00043 C
00044       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00045       IF (LHOOK) CALL DR_HOOK('FARFLU_MT',0,ZHOOK_HANDLE)
00046       IF (FA%FARFLU_LLPREA) THEN
00047         CALL FARINE_MT (FA, 2)
00048         FA%FARFLU_LLPREA=.FALSE.
00049       ENDIF
00050 C**
00051 C     2.  -  CONTROLES.
00052 C-----------------------------------------------------------------------
00053 C
00054       IMINIM=MIN (KXNIVV,KXTRON,KXLATI,KXLONG)
00055 C
00056       IF (IMINIM.LE.0) THEN
00057         LLVERG=.FALSE.
00058         LLDEPA=.FALSE.
00059         IREP=-64
00060         GOTO 1001
00061       ELSE
00062         LLDEPA=KXNIVV.GT.FA%JPXNIV.OR.KXTRON.GT.FA%JPXTRO.OR.
00063      S         KXLATI.GT.FA%JPXLAT.OR.KXLONG.GT.FA%JPXLON
00064         IXNIVV=MIN (KXNIVV,FA%JPXNIV)
00065         IXTRON=MIN (KXTRON,FA%JPXTRO)
00066         IXLATI=MIN (KXLATI,FA%JPXLAT)
00067         IXLONG=MIN (KXLONG,FA%JPXLON)
00068       ENDIF
00069 C
00070 C             Verrouillage global, si necessaire.
00071 C
00072       IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'ON')
00073       LLVERG=FA%LFAMUL
00074 C
00075       IF (IXTRON.LE.FA%NSTROI) THEN
00076         IREP=-99
00077         GOTO 1001
00078       ENDIF
00079 C
00080 C        Controles vis-a-vis des cadres deja definis, s'il y en a.
00081 C
00082       DO 201 J=1,FA%NCADEF
00083       IRANGC=FA%NCAIND(J)
00084 C
00085       IF (FA%MTRONC(IRANGC).GT.IXTRON) THEN
00086         IREP=-104
00087         GOTO 1001
00088       ELSEIF (FA%NNIVER(IRANGC).GT.IXNIVV) THEN
00089         IREP=-105
00090         GOTO 1001
00091       ELSEIF (FA%NLATIT(IRANGC).GT.IXLATI) THEN
00092         IREP=-106
00093         GOTO 1001
00094       ELSEIF (FA%NXLOPA(IRANGC).GT.IXLONG) THEN
00095         IREP=-107
00096         GOTO 1001
00097       ENDIF
00098 C
00099   201 CONTINUE
00100 C**
00101 C     3.  -  MODIFICATION DES LIMITES USAGER.
00102 C-----------------------------------------------------------------------
00103 C
00104       FA%NXNIVV=IXNIVV
00105       FA%NXTRON=IXTRON
00106       FA%NXLATI=IXLATI
00107       FA%NXLONG=IXLONG
00108       IREP=0
00109 C**
00110 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00111 C            VIA LE sous-programme "FAIPAR" .
00112 C-----------------------------------------------------------------------
00113 C
00114  1001 CONTINUE
00115 C
00116 C          Deverrouillage global eventuel.
00117 C
00118       IF (LLVERG) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'OFF')
00119 C
00120       LLFATA=IREP.NE.0.AND.FA%NRFAGA.NE.2
00121 C
00122       IF (LLFATA) THEN
00123         INIMES=2
00124       ELSEIF (FA%NIMSGA.EQ.0) THEN
00125         IF (LHOOK) CALL DR_HOOK('FARFLU_MT',1,ZHOOK_HANDLE)
00126         RETURN
00127       ELSE
00128         INIMES=FA%NIMSGA
00129       ENDIF
00130 C
00131       CLNSPR='FARFLU'
00132       INUMER=FA%JPNIIL
00133 C
00134       IF (INIMES.EQ.2) THEN
00135         WRITE (UNIT=CLMESS,FMT='(''KXNIVV='',I4,'', KXTRON='
00136 ',I4,     S         '', KXLATI='',I4,'', KXLONG='',I4)')
00137      S     KXNIVV,KXTRON,KXLATI,KXLONG
00138         CALL FAIPAR_MT (FA, INUMER,INIMES,IREP,LLFATA,CLMESS,
00139      S               CLNSPR,CLACTI,.FALSE.)
00140       ENDIF
00141 C
00142       IF (INIMES.GE.1) THEN
00143 C
00144         IF (LLDEPA) THEN
00145           WRITE (UNIT=CLMESS,FMT=
00146      S   '(''LIMITES USAGER (***ECRETEES***): FA%NXNIVV='
00147 ',I4,     S   '', FA%NXTRON='',I4,'', FA%NXLATI='',I4,'', FA%NXLONG='',I4)')
00148      S     FA%NXNIVV,FA%NXTRON,FA%NXLATI,FA%NXLONG
00149         ELSE
00150           WRITE (UNIT=CLMESS,FMT=
00151      S    '(''LIMITES USAGER EFFECTIVES: FA%NXNIVV='
00152 ',I4,     S    '', FA%NXTRON='',I4,'', FA%NXLATI='',I4,'', FA%NXLONG='',I4)')
00153      S     FA%NXNIVV,FA%NXTRON,FA%NXLATI,FA%NXLONG
00154         ENDIF
00155 C
00156         CALL FAIPAR_MT (FA, INUMER,INIMES,IREP,.FALSE.,CLMESS,
00157      S               CLNSPR,CLACTI,.FALSE.)
00158       ENDIF
00159 C
00160       IF (LHOOK) CALL DR_HOOK('FARFLU_MT',1,ZHOOK_HANDLE)
00161       END
00162