|
SURFEX v7.3
General documentation of Surfex
|
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
1.8.0