      SUBROUTINE FAIPAG ( KREP,   KRANG,  CDPREF, KNIVAU, CDSUFF,
     S                    KNIPAR )
#include "facom0.h"
C****
C      Sous-programme INTERNE du logiciel de Fichiers ARPEGE:
C      Initialisation de quelques descripteurs de l'entete Gribex
C      (section 1) relatifs au parametre, a partir du nom FA du champ.
C**
C    Arguments : KREP   (Sortie) ==> Code-reponse du sous-programme;
C                KRANG  (Entree) ==> Rang de l'unite logique;
C                CDPREF (Entree) ==> Prefixe eventuel du nom d'article;
C                KNIVAU (Entree) ==> Niveau vertical eventuel;
C                CDSUFF (Entree) ==> Suffixe eventuel du nom d'article;
C    ( Tableau ) KNIPAR (Sortie) ==> quelques descripteurs de la section 1 de
C                                    GRIBEX (KNIPAR(1)  =KSEC1(1),
C                                            KNIPAR(2:5)=KSEC1(6:9) ) et un
C                                    indicateur de type de champ (KNIPAR(6)=
C                                    KSEC1(18)):0->RAS; 2->min/max; 4->cumul
C
C     Original  : 06 juillet 2004, Denis Paradis DSI/DEV
C     --------
C
C     Modifications
C     -------------
C       R. El Ouaraini: 03-Oct-2006, enlever le commentaire de l'initialisation de KNIPAR(3) pour
C                  les types de niveaux :  hauteur, iso-tourb potent, isentrope et modele.
C
C*
C
      USE FAMODU   , ONLY : NBPARC, CIPREF, CISUFF, NCODPA
C
#include "precision.h"
C
#include "facomp.h"
#include "facom1.h"
C
      INTEGER KREP, KRANG, KNIVAU, KNIPAR(6)
C
      CHARACTER (LEN=*) CDPREF, CDSUFF
C
      INTEGER INUMER, INIMES, J
C
      INTRINSIC LEN_TRIM
C
#include "facom2.h"
C**
C     0.  -  INITIALISATIONS PREALABLES
C-----------------------------------------------------------------------
C
C
      KREP=0
      IF (KRANG.LE.0.OR.KRANG.GT.JPNXFA) THEN
        KREP=-66
        GOTO 1001
      ENDIF
C
C  DEFAUTS:
C
C Numero de version de la table de code parametres
      KNIPAR(1)=1
C Indicateur de parametre (255=> valeur manquante)
      KNIPAR(2)=255
C Indicateur de type de niveau (1=> surface)
      KNIPAR(3)=1
C Niveau 1, Niveau 2 et type de champs
      KNIPAR(4:6)=0
C**
C     1.  -  UTILISATION DE LA TABLE DE CORRESPONDANCE
C-----------------------------------------------------------------------
C
C
      JMEM = 0
      DO J = 1,NBPARC
        IF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.
     S      CIPREF(J)(1:LEN_TRIM(CIPREF(J))) .AND.
     S      CDSUFF(1:LEN_TRIM(CDSUFF)).EQ.
     S      CISUFF(J)(1:LEN_TRIM(CISUFF(J)))) THEN
          JMEM = J
          EXIT
        ENDIF
      ENDDO
      IF (LFAMOP.AND.JMEM.EQ.0) THEN
        PRINT *,'FAIPAG: WARNING, pas de reference GRIB pour ',
     S          CDPREF(1:LEN_TRIM(CDPREF))//CDSUFF(1:LEN_TRIM(CDSUFF))
        PRINT *,'       Les defauts seront utilises'
        GOTO 1001
      ENDIF
      IF (JMEM.NE.0) KNIPAR(1:6) = NCODPA(JMEM,1:6)
C**
C     2.  -  INITIALISATION DU NIVEAU (AUTRE QUE 0)
C--------------------------------------------------
C
C     2.1 -  Champs sur un niveau isobare
C
      IF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'P') THEN
C  La pression est sur 5 chiffres: on la ramene a l'hPa
C     et on recree le niveau 1000 hPa
C
C  Si KNIVAU < 100, la pression fait moins d'un hPa et
C  on utilise une extension du GRIB introduite par le CEP:
C       KSEC1(7) = 210 (au lieu de 100)
C    et KSEC1(8) = pression en Pa
C
        IF (KNIVAU .GE. 100) THEN
          KNIPAR(3)=100
          KNIPAR(4)=KNIVAU/100
        ELSEIF (KNIVAU==0) THEN
          KNIPAR(3)=100
          KNIPAR(4)=1000
        ELSE
          KNIPAR(3)=210
          KNIPAR(4)=KNIVAU
        ENDIF
C
C     2.2 -  Champs sur un niveau hauteur
C
      ELSEIF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'H') THEN
       KNIPAR(3)=105
        KNIPAR(4)=KNIVAU
C
C     2.3 -  Champs sur un niveau iso-tourbillon-potentiel
C
C            ( unite SI = K m2 s-1 kg-1 = 10+6 PVU
C              mais l'unite retenu est le milliPVU: 10-9 SI)
      ELSEIF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'V') THEN
       KNIPAR(3)=117
C KNIVAU est exprime en 1/10 PVU
        KNIPAR(4)=KNIVAU*100
        IF (KNIVAU==0) KNIPAR(4)=1000
C
C     2.4 -  Champs sur un niveau isentrope
C
      ELSEIF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'T') THEN
       KNIPAR(3)=113
        KNIPAR(4)=KNIVAU
C
C     2.5 -  Champs sur un niveau modele
C
      ELSEIF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'S') THEN
       KNIPAR(3)=109
        KNIPAR(4)=KNIVAU
      ENDIF
C
C**
C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
C            VIA LE SOUS-PROGRAMME "FAIPAR" .
C-----------------------------------------------------------------------
C
 1001 CONTINUE
      LLFATA=LLMOER (KREP,KRANG)
C
      IF (LFAMOP.OR.LLFATA) THEN
        INIMES=2
        CLNSPR='FAIPAG'
        INUMER=JPNIIL
C
        PRINT *,'FAIPAG: KNIPAR(1:6) = ',KNIPAR(1:6)
        PRINT *
        WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KRANG='',I4,
     S       '', CDPREF='''''',A,'''''', KNIVAU='',I6,
     S       '', CDSUFF='''''',A,'''''''')')
     S     KREP, KRANG, CDPREF(1:LEN_TRIM(CDPREF)), KNIVAU,
     S     CDSUFF(1:LEN_TRIM(CDSUFF))
        CALL FAIPAR (INUMER,INIMES,KREP,.FALSE.,CLMESS,CLNSPR,
     S               CDPREF,.FALSE.)
      ENDIF
C
      RETURN
      END
