SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/mt/faipag_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe FA
00002       SUBROUTINE FAIPAG_MT (FA,  KREP,   KRANG,  CDPREF, KNIVAU, CDSUFF,
00003      S                      KNIPAR )
00004       USE FA_MOD, ONLY : FA_COM
00005       USE PARKIND1, ONLY : JPRB
00006       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
00007 C****
00008 C      Sous-programme INTERNE du logiciel de Fichiers ARPEGE:
00009 C      Initialisation de quelques descripteurs de l'entete Gribex
00010 C      (section 1) relatifs au parametre, a partir du nom FA du champ.
00011 C**
00012 C    Arguments : KREP   (Sortie) ==> Code-reponse du sous-programme;
00013 C                KRANG  (Entree) ==> Rang de l'unite logique;
00014 C                CDPREF (Entree) ==> Prefixe eventuel du nom d'article;
00015 C                KNIVAU (Entree) ==> Niveau vertical eventuel;
00016 C                CDSUFF (Entree) ==> Suffixe eventuel du nom d'article;
00017 C    ( Tableau ) KNIPAR (Sortie) ==> quelques descripteurs de la section 1 de
00018 C                                    GRIBEX (KNIPAR(1)  =KSEC1(1),
00019 C                                            KNIPAR(2:5)=KSEC1(6:9) ) et un
00020 C                                    indicateur de type de champ (KNIPAR(6)=
00021 C                                    KSEC1(18)):0->RAS; 2->min/max; 4->cumul
00022 C
00023 C     Original  : 06 juillet 2004, Denis Paradis DSI/DEV
00024 C     --------
00025 C
00026 C     Modifications
00027 C     -------------
00028 C       R. El Ouaraini: 03-Oct-2006, enlever le commentaire de l'initialisation de KNIPAR(3) pour
00029 C                  les types de niveaux :  hauteur, iso-tourb potent, isentrope et modele.
00030 C
00031 C*
00032 #include "precision.h"
00033 C
00034 C
00035       TYPE(FA_COM) :: FA
00036       INTEGER KREP, KRANG, KNIVAU, KNIPAR(6)
00037 C
00038       CHARACTER (LEN=*) CDPREF, CDSUFF
00039 C
00040       INTEGER INUMER, INIMES, J
00041 C
00042       INTRINSIC LEN_TRIM
00043 C
00044 #include "facom2.h"
00045 #include "facom_mt.h"
00046 C**
00047 C     0.  -  INITIALISATIONS PREALABLES
00048 C-----------------------------------------------------------------------
00049 C
00050 C
00051       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00052       IF (LHOOK) CALL DR_HOOK('FAIPAG_MT',0,ZHOOK_HANDLE)
00053       KREP=0
00054       IF (KRANG.LE.0.OR.KRANG.GT.FA%JPNXFA) THEN
00055         KREP=-66
00056         GOTO 1001
00057       ENDIF
00058 C
00059 C  DEFAUTS:
00060 C
00061 C Numero de version de la table de code parametres
00062       KNIPAR(1)=1
00063 C Indicateur de parametre (255=> valeur manquante)
00064       KNIPAR(2)=255
00065 C Indicateur de type de niveau (1=> surface)
00066       KNIPAR(3)=1
00067 C Niveau 1, Niveau 2 et type de champs
00068       KNIPAR(4:6)=0
00069 C**
00070 C     1.  -  UTILISATION DE LA TABLE DE CORRESPONDANCE
00071 C-----------------------------------------------------------------------
00072 C
00073 C
00074       JMEM = 0
00075       DO J = 1,FA%NBPARC
00076         IF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.
00077      S      FA%CIPREF(J)(1:LEN_TRIM(FA%CIPREF(J))) .AND.
00078      S      CDSUFF(1:LEN_TRIM(CDSUFF)).EQ.
00079      S      FA%CISUFF(J)(1:LEN_TRIM(FA%CISUFF(J)))) THEN
00080           JMEM = J
00081           EXIT
00082         ENDIF
00083       ENDDO
00084       IF (FA%LFAMOP.AND.JMEM.EQ.0) THEN
00085         WRITE (UNIT=FA%NULOUT,FMT=*)
00086      S         'FAIPAG: WARNING, pas de reference GRIB pour ',
00087      S         CDPREF(1:LEN_TRIM(CDPREF))//CDSUFF(1:LEN_TRIM(CDSUFF))
00088         WRITE (UNIT=FA%NULOUT,FMT=*)'       Les defauts seront utilises'
00089         GOTO 1001
00090       ENDIF
00091       IF (JMEM.NE.0) KNIPAR(1:6) = FA%NCODPA(JMEM,1:6)
00092 C**
00093 C     2.  -  INITIALISATION DU NIVEAU (AUTRE QUE 0)
00094 C--------------------------------------------------
00095 C
00096 C     2.1 -  Champs sur un niveau isobare
00097 C
00098       IF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'P') THEN
00099 C  La pression est sur 5 chiffres: on la ramene a l'hPa
00100 C     et on recree le niveau 1000 hPa
00101 C
00102 C  Si KNIVAU < 100, la pression fait moins d'un hPa et
00103 C  on utilise une extension du GRIB introduite par le CEP:
00104 C       KSEC1(7) = 210 (au lieu de 100)
00105 C    et KSEC1(8) = pression en Pa
00106 C
00107         IF (KNIVAU .GE. 100) THEN
00108           KNIPAR(3)=100
00109           KNIPAR(4)=KNIVAU/100
00110         ELSEIF (KNIVAU==0) THEN
00111           KNIPAR(3)=100
00112           KNIPAR(4)=1000
00113         ELSE
00114           KNIPAR(3)=210
00115           KNIPAR(4)=KNIVAU
00116         ENDIF
00117 C
00118 C     2.2 -  Champs sur un niveau hauteur
00119 C
00120       ELSEIF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'H') THEN
00121        KNIPAR(3)=105
00122         KNIPAR(4)=KNIVAU
00123 C
00124 C     2.3 -  Champs sur un niveau iso-tourbillon-potentiel
00125 C
00126 C            ( unite SI = K m2 s-1 kg-1 = 10+6 PVU
00127 C              mais l'unite retenu est le milliPVU: 10-9 SI)
00128       ELSEIF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'V') THEN
00129        KNIPAR(3)=117
00130 C KNIVAU est exprime en 1/10 PVU
00131         KNIPAR(4)=KNIVAU*100
00132         IF (KNIVAU==0) KNIPAR(4)=1000
00133 C
00134 C     2.4 -  Champs sur un niveau isentrope
00135 C
00136       ELSEIF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'T') THEN
00137        KNIPAR(3)=113
00138         KNIPAR(4)=KNIVAU
00139 C
00140 C     2.5 -  Champs sur un niveau modele
00141 C
00142       ELSEIF (CDPREF(1:LEN_TRIM(CDPREF)).EQ.'S') THEN
00143        KNIPAR(3)=109
00144         KNIPAR(4)=KNIVAU
00145       ENDIF
00146 C
00147 C**
00148 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00149 C            VIA LE SOUS-PROGRAMME "FAIPAR" .
00150 C-----------------------------------------------------------------------
00151 C
00152  1001 CONTINUE
00153       LLFATA=LLMOER (KREP,KRANG)
00154 C
00155       IF (FA%LFAMOP.OR.LLFATA) THEN
00156         INIMES=2
00157         CLNSPR='FAIPAG'
00158         INUMER=FA%JPNIIL
00159 C
00160         WRITE (UNIT=FA%NULOUT,FMT=*)'FAIPAG: KNIPAR(1:6) = ',KNIPAR(1:6)
00161         WRITE (UNIT=FA%NULOUT,FMT=*)
00162         WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KRANG='
00163 ',I4,     S       '', CDPREF='''''',A,'''''', KNIVAU='
00164 ',I6,     S       '', CDSUFF='''''',A,'''''''')')
00165      S     KREP, KRANG, CDPREF(1:LEN_TRIM(CDPREF)), KNIVAU,
00166      S     CDSUFF(1:LEN_TRIM(CDSUFF))
00167         CALL FAIPAR_MT (FA, INUMER,INIMES,KREP,.FALSE.,CLMESS,
00168      S                  CLNSPR,CDPREF,.FALSE.)
00169       ENDIF
00170 C
00171       IF (LHOOK) CALL DR_HOOK('FAIPAG_MT',1,ZHOOK_HANDLE)
00172       END
00173