SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/mt/farpar_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe FA
00002       SUBROUTINE FARPAR_MT (FA,  KREP, CDPREF, CDSUFF, KCODPA, KNUM )
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 de reglage de la correspondance "nom d'article FA"
00008 C              <-> "descripteurs GRIB du parametre+niveau"
00009 C**
00010 C    Arguments : KREP   (Sortie) ==> Code-reponse du sous-programme;
00011 C    ( Tableau ) CDPREF (Entree) ==> Prefixe pour les KNUM noms d'article;
00012 C    ( Tableau ) CDSUFF (Entree) ==> Suffixe pour les KNUM noms d'article;
00013 C    ( Tableau ) KCODPA (Entree) ==> 6 descripteurs GRIB pour chacun
00014 C                                    des KNUM parametres:
00015 C      KCODPA(J,1) = KSEC1(1)  version de la table parametres
00016 C      KCODPA(J,2) = KSEC1(6)  indicateur du parametre
00017 C      KCODPA(J,3) = KSEC1(7)  indicateur du type de niveau
00018 C      KCODPA(J,4) = KSEC1(8)  niveau
00019 C      KCODPA(J,5) = KSEC1(9)  2ieme nv si couche, sinon 0
00020 C      KCODPA(J,6) = KSEC1(18) indicateur du type de champ
00021 C                              (0 sf si min/max:2 ou si cumul:4)
00022 C
00023 C                KNUM   (Entree  ==> Nombre de parametres a regler
00024 C                          et        (dimension de CDPREF, CDSUFF et KCODPA)
00025 C                        Sortie) ==> Nb de nouveaux parametres pouvant encore
00026 C                                    etre definis lors d'un appel ulterieur.
00027 C
00028 #include "precision.h"
00029 C
00030 C
00031       TYPE(FA_COM) :: FA
00032       INTEGER KREP, KNUM
00033       INTEGER KCODPA(KNUM,6)
00034 C
00035       CHARACTER (LEN=*) CDPREF(KNUM), CDSUFF(KNUM)
00036 C
00037       INTEGER J, JJ, INUMER, INIMES, JMEM
00038 #include "facom_mt.h"
00039 C
00040       INTRINSIC LEN_TRIM
00041 C
00042 C**
00043 C     0.  -  CONTROLES ET INITIALISATIONS PREALABLES
00044 C-----------------------------------------------------------------------
00045 C
00046       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00047       IF (LHOOK) CALL DR_HOOK('FARPAR_MT',0,ZHOOK_HANDLE)
00048       IF (KNUM.LT.1) THEN
00049         KREP=-129
00050         IF (FA%LFAMOP) THEN
00051           WRITE (UNIT=FA%NULOUT,FMT=*)
00052      S           'FARPAR: Nb de parametres ',KNUM,' incorrect'
00053         ENDIF
00054         GOTO 1001
00055       ENDIF
00056       DO J = 1,KNUM
00057         IF ( LEN_TRIM(CDPREF(J)).LE.0 .OR.
00058      S       LEN_TRIM(CDPREF(J)).GT.FA%JPXPRF ) THEN
00059           KREP=-129
00060           IF (FA%LFAMOP) THEN
00061             WRITE (UNIT=FA%NULOUT,FMT=*)
00062      S              'FARPAR: Longueur du prefixe ',CDPREF(J),
00063      S              ' incorrecte : ',LEN_TRIM(CDPREF(J))
00064           ENDIF
00065           GOTO 1001
00066         ENDIF
00067         IF ( LEN_TRIM(CDSUFF(J)).LE.0 .OR.
00068      S       LEN_TRIM(CDSUFF(J)).GT.FA%JPXNOM-LEN_TRIM(CDPREF(J)) ) THEN
00069           KREP=-129
00070           IF (FA%LFAMOP) THEN
00071             WRITE (UNIT=FA%NULOUT,FMT=*)
00072      S              'FARPAR: Longueur du suffixe ',CDSUFF(J),
00073      S              ' incorrecte : ',LEN_TRIM(CDSUFF(J))
00074           ENDIF
00075           GOTO 1001
00076         ENDIF
00077         DO JJ = 1,3
00078           IF (KCODPA(J,JJ).LT.1 .OR. KCODPA(J,JJ).GT.255) THEN
00079             KREP=-129
00080             IF (FA%LFAMOP) THEN
00081               WRITE (UNIT=FA%NULOUT,FMT=*)
00082      S                'FARPAR: descripteur GRIB num ',JJ,
00083      S                ' pour le parametre num ',J,' ( ',
00084      S                CDPREF(J)//CDSUFF(J),' ) incorrect : ',
00085      S                KCODPA(J,JJ)
00086             ENDIF
00087             GOTO 1001
00088           ENDIF
00089         ENDDO
00090         IF (KCODPA(J,6).LT.0 .OR. KCODPA(J,6).GT.124) THEN
00091           KREP=-129
00092           IF (FA%LFAMOP) THEN
00093             WRITE (UNIT=FA%NULOUT,FMT=*)
00094      S              'FARPAR: descripteur GRIB, KSEC1(18),',
00095      S              ' pour le parametre num ',J,' ( ',
00096      S              CDPREF(J)//CDSUFF(J),' ) incorrect : ',
00097      S              KCODPA(J,6)
00098           ENDIF
00099           GOTO 1001
00100         ENDIF
00101         IF (KCODPA(J,4).LT.0) THEN
00102           KREP=-129
00103           IF (FA%LFAMOP) THEN
00104             WRITE (UNIT=FA%NULOUT,FMT=*)
00105      S              'FARPAR: descripteur GRIB, KSEC1(8),',
00106      S              ' pour le parametre num ',J,' ( ',
00107      S              CDPREF(J)//CDSUFF(J),' ) incorrect : ',
00108      S              KCODPA(J,4)
00109           ENDIF
00110           GOTO 1001
00111         ENDIF
00112       ENDDO
00113 C
00114 C**
00115 C     2.  -  Prise en compte des nouvelles correspondances
00116 C---------------------------------------------------------
00117 C
00118 C
00119       DO J = 1,KNUM
00120 C Recherche prealable de l'eventuelle existence de la definition
00121 C de ce parametre (il faudra alors l'ecraser).
00122         JMEM = 0
00123         DO JJ = 1,FA%NBPARC
00124           IF (CDPREF(J )(1:LEN_TRIM(CDPREF(J ))).EQ.
00125      S        FA%CIPREF(JJ)(1:LEN_TRIM(FA%CIPREF(JJ))) .AND.
00126      S        CDSUFF(J )(1:LEN_TRIM(CDSUFF(J ))).EQ.
00127      S        FA%CISUFF(JJ)(1:LEN_TRIM(FA%CISUFF(JJ)))) THEN
00128             JMEM = JJ
00129             EXIT
00130           ENDIF
00131         ENDDO
00132         IF (JMEM==0) THEN
00133           IF (FA%NBPARC+1.GT.FA%JPXPAR) THEN
00134             KREP=-129
00135             IF (FA%LFAMOP) THEN
00136               WRITE (UNIT=FA%NULOUT,FMT=*)
00137      S                'FARPAR: le nb lim de parametres definissables ',
00138      S                FA%JPXPAR
00139               WRITE (UNIT=FA%NULOUT,FMT=*)
00140      S                '        est depasse avec la definition de ',
00141      S                KNUM,' nouveaux parametres'
00142             ENDIF
00143             GOTO 1001
00144           ENDIF
00145           JMEM = FA%NBPARC + 1
00146           FA%NBPARC = FA%NBPARC + 1
00147         ENDIF
00148         FA%CIPREF(JMEM)     = 
00149      S         CDPREF(J)(1:LEN_TRIM(CDPREF(J)))
00150         FA%CISUFF(JMEM)     = 
00151      S         CDSUFF(J)(1:LEN_TRIM(CDSUFF(J)))
00152         FA%NCODPA(JMEM,1:6) = KCODPA(J,1:6)
00153         IF (FA%LFAMOP) THEN
00154           WRITE (UNIT=FA%NULOUT,FMT=*)
00155      S           'FARPAR: Prise en compte de ',CDPREF(J)//CDSUFF(J)
00156           WRITE (UNIT=FA%NULOUT,FMT=*)
00157      S           '        associe a KSEC1(1,6:9 et 18) = ',
00158      S           FA%NCODPA(JMEM,1:6)
00159         ENDIF
00160       ENDDO
00161       KNUM = FA%JPXPAR - FA%NBPARC
00162 C
00163 C**
00164 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00165 C            VIA LE SOUS-PROGRAMME "FAIPAR" .
00166 C-----------------------------------------------------------------------
00167 C
00168  1001 CONTINUE
00169 C
00170       IF (FA%LFAMOP) THEN
00171         INIMES=2
00172         CLNSPR='FARPAR'
00173         INUMER=FA%JPNIIL
00174 C
00175         WRITE (UNIT=CLMESS,FMT='(''KREP='',I4)') KREP
00176         CALL FAIPAR_MT (FA, INUMER,INIMES,KREP,.FALSE.,CLMESS,
00177      S                  CLNSPR,CLNSPR,.FALSE.)
00178       ENDIF
00179 C
00180       IF (LHOOK) CALL DR_HOOK('FARPAR_MT',1,ZHOOK_HANDLE)
00181       END
00182