      SUBROUTINE FARFLU ( KXNIVV, KXTRON, KXLATI, KXLONG )
#include "facom0.h"
C****
C        Sous-programme servant a specifier des Limites Utilisateur
C     en termes de Resolutions horizontale et verticale, valides
C     globalement pour tous les Fichiers et Cadres ARPEGE.
C            ( Resolution Fichiers - Limites Utilisateur )
C**
C        Arguments : KXNIVV ==> Nombre maximum de niveaux verticaux;
C  (tous d'Entree)   KXTRON ==> Troncature maximum;
C                    KXLATI ==> Nombre maximum de latitudes pole a pole;
C                    KXLONG ==> Nombre maxi de longitudes par parallele.
C*
C        S'il y a des cadres deja definis (dynamiquement ou non) avec
C     des valeurs correspondantes plus grandes, cela provoque une erreur
C     globale.
C        Si les valeurs donnees en argument depassent les limites cor-
C     repondantes du logiciel, elles sont ecretees, avec un message.
C        Une messagerie de niveau 1 est emise dans le cas normal ou
C     ci-dessus.
C
#include "precision.h"
C
#include "facomp.h"
#include "facom1.h"
C
      INTEGER KXNIVV, KXTRON, KXLATI, KXLONG
C
      INTEGER INUMER, INIMES, IREP, IMINIM, IXNIVV, IXTRON, IXLATI, J
      INTEGER IXLONG, IRANGC
C
      LOGICAL LLPREA, LLDEPA, LLVERG
C
      SAVE LLPREA
C
      DATA LLPREA/ .TRUE. /
C
#include "facom2.h"
C**
C     1.  -  SI PREMIERE UTILISATION, APPEL AU SOUS-PROGRAMME "FARINE".
C-----------------------------------------------------------------------
C
      IF (LLPREA) THEN
        CALL FARINE (2)
        LLPREA=.FALSE.
      ENDIF
C**
C     2.  -  CONTROLES.
C-----------------------------------------------------------------------
C
      IMINIM=MIN (KXNIVV,KXTRON,KXLATI,KXLONG)
C
      IF (IMINIM.LE.0) THEN
        LLVERG=.FALSE.
        LLDEPA=.FALSE.
        IREP=-64
        GOTO 1001
      ELSE
        LLDEPA=KXNIVV.GT.JPXNIV.OR.KXTRON.GT.JPXTRO.OR.
     S         KXLATI.GT.JPXLAT.OR.KXLONG.GT.JPXLON
        IXNIVV=MIN (KXNIVV,JPXNIV)
        IXTRON=MIN (KXTRON,JPXTRO)
        IXLATI=MIN (KXLATI,JPXLAT)
        IXLONG=MIN (KXLONG,JPXLON)
      ENDIF
C
C             Verrouillage global, si necessaire.
C
      IF (LFAMUL) CALL LFIVER (VRGLAS,'ON')
      LLVERG=LFAMUL
C
      IF (IXTRON.LE.NSTROI) THEN
        IREP=-99
        GOTO 1001
      ENDIF
C
C        Controles vis-a-vis des cadres deja definis, s'il y en a.
C
      DO 201 J=1,NCADEF
      IRANGC=NCAIND(J)
C
      IF (MTRONC(IRANGC).GT.IXTRON) THEN
        IREP=-104
        GOTO 1001
      ELSEIF (NNIVER(IRANGC).GT.IXNIVV) THEN
        IREP=-105
        GOTO 1001
      ELSEIF (NLATIT(IRANGC).GT.IXLATI) THEN
        IREP=-106
        GOTO 1001
      ELSEIF (NXLOPA(IRANGC).GT.IXLONG) THEN
        IREP=-107
        GOTO 1001
      ENDIF
C
  201 CONTINUE
C**
C     3.  -  MODIFICATION DES LIMITES USAGER.
C-----------------------------------------------------------------------
C
      NXNIVV=IXNIVV
      NXTRON=IXTRON
      NXLATI=IXLATI
      NXLONG=IXLONG
      IREP=0
C**
C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
C            VIA LE sous-programme "FAIPAR" .
C-----------------------------------------------------------------------
C
 1001 CONTINUE
C
C          Deverrouillage global eventuel.
C
      IF (LLVERG) CALL LFIVER (VRGLAS,'OFF')
C
      LLFATA=IREP.NE.0.AND.NRFAGA.NE.2
C
      IF (LLFATA) THEN
        INIMES=2
      ELSEIF (NIMSGA.EQ.0) THEN
        RETURN
      ELSE
        INIMES=NIMSGA
      ENDIF
C
      CLNSPR='FARFLU'
      INUMER=JPNIIL
C
      IF (INIMES.EQ.2) THEN
        WRITE (UNIT=CLMESS,FMT='(''KXNIVV='',I4,'', KXTRON='',I4,
     S         '', KXLATI='',I4,'', KXLONG='',I4)')
     S     KXNIVV,KXTRON,KXLATI,KXLONG
        CALL FAIPAR (INUMER,INIMES,IREP,LLFATA,CLMESS,CLNSPR,CLACTI,
     S               .FALSE.)
      ENDIF
C
      IF (INIMES.GE.1) THEN
C
        IF (LLDEPA) THEN
          WRITE (UNIT=CLMESS,FMT=
     S           '(''LIMITES USAGER (***ECRETEES***): NXNIVV='',I4,
     S         '', NXTRON='',I4,'', NXLATI='',I4,'', NXLONG='',I4)')
     S     NXNIVV,NXTRON,NXLATI,NXLONG
        ELSE
          WRITE (UNIT=CLMESS,FMT=
     S           '(''LIMITES USAGER EFFECTIVES: NXNIVV='',I4,
     S         '', NXTRON='',I4,'', NXLATI='',I4,'', NXLONG='',I4)')
     S     NXNIVV,NXTRON,NXLATI,NXLONG
        ENDIF
C
        CALL FAIPAR (INUMER,INIMES,IREP,.FALSE.,CLMESS,CLNSPR,CLACTI,
     S               .FALSE.)
      ENDIF
C
      RETURN
      END
