SURFEX v7.3
General documentation of Surfex
|
00001 C Jan-2011 P. Marguinaud Thread-safe FA 00002 SUBROUTINE FAGOTE_MT (FA, KREP, KNUMER, KNGRIB, KNBPDG, KNBCSP, 00003 S KSTRON, KPUILA, KDMOPL ) 00004 USE FA_MOD, ONLY : FA_COM 00005 USE PARKIND1, ONLY : JPRB 00006 USE YOMHOOK , ONLY : LHOOK, DR_HOOK 00007 C**** 00008 C Ce sous-programme permet d'ajuster, pour un fichier ARPEGE 00009 C ouvert, les options liees au codage GRIB des champs. 00010 C CES OPTIONS NE SONT UTILISEES QUE POUR (RE)ECRIRE DES CHAMPS 00011 C codes en GRIB. 00012 C ( Grib, Options Techniques Effectives ) 00013 C** 00014 C Arguments : KREP (Sortie) ==> Code-reponse du sous-programme; 00015 C KNUMER (Entree) ==> Numero d'Unite Logique concernee; 00016 C KNGRIB (Entree) ==> Niveau de codage GRIB (-1,0,1,2,3); 00017 C KNBPDG (Entree) ==> Nombre de bits par valeur point- 00018 C de-grille; 00019 C KNBCSP (Entree) ==> Nombre de bits par partie reelle/ 00020 C imaginaire de coeff. spectral; 00021 C KSTRON (Entree) ==> Sous-troncature non compactee; 00022 C KPUILA (Entree) ==> Puissance de laplacien; 00023 C KDMOPL (Entree) ==> Degre de modulation de KPUILA. 00024 C 00025 C Remarque: KSTRON egal a -1 est accepte; dans ce cas on indexera 00026 C (pour chaque champ spectral ecrit) la sous-troncature 00027 C effective sur la troncature et sur le nombre de bits 00028 C par valeur compactee. 00029 C 00030 C MODIF : 30/03/2007 JM AUDOIN FA%LFAMOP Pour limiter Impression 00031 C 00032 #include "precision.h" 00033 C 00034 C 00035 TYPE(FA_COM) :: FA 00036 INTEGER KREP, KNUMER, KNGRIB, KNBPDG, KNBCSP, KSTRON, KPUILA 00037 INTEGER KDMOPL 00038 C 00039 INTEGER IMINIM, IREP, IRANGC, ITRONC, J, INIMES, IRANG, ITYPTR 00040 C 00041 LOGICAL LLVERF, LLMLAM 00042 C 00043 #include "facom2.h" 00044 #include "facom_mt.h" 00045 C** 00046 C 1. - CONTROLES ET INITIALISATIONS. 00047 C----------------------------------------------------------------------- 00048 C 00049 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00050 IF (LHOOK) CALL DR_HOOK('FAGOTE_MT',0,ZHOOK_HANDLE) 00051 LLVERF=.FALSE. 00052 IMINIM=MIN (2+KNGRIB,2+KNBPDG,2+KNBCSP,2+KSTRON,1+KDMOPL) 00053 CALL FANUMU_MT (FA, KNUMER,IRANG) 00054 C 00055 IF (IRANG.EQ.0) THEN 00056 IREP=-51 00057 GOTO 1001 00058 ELSEIF (IMINIM.LE.0) THEN 00059 IREP=-64 00060 GOTO 1001 00061 ELSEIF (KNBPDG*KNBCSP.EQ.0 .AND. KNGRIB.GT.0) THEN 00062 IREP=-124 00063 GOTO 1001 00064 ELSEIF (KNGRIB.GT.3) THEN 00065 IREP=-96 00066 GOTO 1001 00067 ELSEIF (MAX (KNBPDG,KNBCSP).GT.FA%NBIMAX) THEN 00068 IREP=-97 00069 GOTO 1001 00070 ELSEIF (IABS (KPUILA).GT.2**15-1) THEN 00071 IREP=-98 00072 GOTO 1001 00073 ENDIF 00074 C 00075 C Verrouillage eventuel du fichier. 00076 C 00077 IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'ON') 00078 LLVERF=FA%LFAMUL 00079 C 00080 IRANGC=FA%NUCADR(IRANG) 00081 ITRONC=FA%MTRONC(IRANGC) 00082 ITYPTR=FA%NTYPTR(IRANGC) 00083 LLMLAM=FA%LIMLAM(IRANGC) 00084 C 00085 IF (KSTRON.GE.ITRONC) THEN 00086 IREP=-99 00087 GOTO 1001 00088 ELSEIF (ITYPTR.LT.0.AND.KSTRON.GE.(-ITYPTR)) THEN 00089 IREP=-99 00090 GOTO 1001 00091 ENDIF 00092 C** 00093 C 2. - STOCKAGE DES NOUVEAUX PARAMETRES. 00094 C----------------------------------------------------------------------- 00095 C 00096 IF (KPUILA.NE.FA%NPUFLA(IRANG)) THEN 00097 FA%NPUFLA(IRANG)=KPUILA 00098 FA%LIFLAP(IRANG)=.TRUE. 00099 ENDIF 00100 IF (KSTRON.NE.FA%NSTROF(IRANG)) THEN 00101 FA%NSTROF(IRANG)=KSTRON 00102 FA%LISC2F(IRANG)=.TRUE. 00103 ENDIF 00104 C 00105 IF (FA%LFAMOP.AND.(FA%NFGRIB(IRANG).EQ.3 00106 S .OR.FA%NFGRIB(IRANG).EQ.-1) 00107 S .AND.(KNGRIB.LT.3.AND.KNGRIB.GT.-1)) THEN 00108 WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------' 00109 WRITE (UNIT=FA%NULOUT,FMT=*) 00110 S 'FAGOTE: WARNING!! Les champs spectraux NE devront', 00111 S ' PAS etre ranges comme dans le modele (rangt horiz.)', 00112 S ' pour l''unite logique ',KNUMER 00113 WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------' 00114 ENDIF 00115 IF (FA%LFAMOP.AND.(FA%NFGRIB(IRANG).LT.3 00116 S .AND.FA%NFGRIB(IRANG).GT.-1) 00117 S .AND.(KNGRIB.EQ.3.OR.KNGRIB.EQ.-1)) THEN 00118 WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------' 00119 WRITE (UNIT=FA%NULOUT,FMT=*) 00120 S 'FAGOTE: WARNING!! Les champs spectraux devront', 00121 S ' etre ranges comme dans le modele (rangt verti.) pour', 00122 S ' l''unite logique ',KNUMER 00123 WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------' 00124 ENDIF 00125 FA%NFGRIB(IRANG)=KNGRIB 00126 FA%NBFPDG(IRANG)=KNBPDG 00127 FA%NBFCSP(IRANG)=KNBCSP 00128 FA%NMFDPL(IRANG)=KDMOPL 00129 IREP=0 00130 C 00131 C Appel a FAINOC pour interpreter les eventuels defauts 00132 C de -1 pris par FA%NBFPDG, FA%NBFCSP, FA%NSTROF et FA%NPUFLA en 00133 C IRANG-ieme position. 00134 C 00135 CALL FAINOC_MT (FA, IRANG ) 00136 C 00137 C** 00138 C 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL, 00139 C VIA LE SOUS-PROGRAMME "FAIPAR" . 00140 C----------------------------------------------------------------------- 00141 C 00142 1001 CONTINUE 00143 KREP=IREP 00144 LLFATA=LLMOER (IREP,IRANG) 00145 C 00146 C Deverrouillage eventuel du fichier. 00147 C 00148 IF (LLVERF) CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'OFF') 00149 C 00150 IF (LLFATA) THEN 00151 INIMES=2 00152 ELSE 00153 INIMES=IXNVMS(IRANG) 00154 ENDIF 00155 C 00156 IF (.NOT.LLFATA.AND.INIMES.NE.2) THEN 00157 IF (LHOOK) CALL DR_HOOK('FAGOTE_MT',1,ZHOOK_HANDLE) 00158 RETURN 00159 ENDIF 00160 C 00161 CLNSPR='FAGOTE' 00162 C 00163 C***** FAZZZZ - KREP=iiii, KNUMER=iii, KNGRIB=ii, KNBPDG=iii, ***** 00164 C***** KNBCSP=iii, KSTRON=ii, KPUILA=iii, KDMOPL=iii ***** 00165 WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER=' 00166 ',I3, S '', KNGRIB='',I2,'', KNBPDG='',I3,'', KNBCSP=' 00167 ',I3, S '', KSTRON='',I2,'', KPUILA='',I3,'', KDMOPL='',I3)') 00168 S KREP,KNUMER,KNGRIB,KNBPDG,KNBCSP,KSTRON,KPUILA,KDMOPL 00169 CALL FAIPAR_MT (FA, KNUMER,INIMES,IREP,LLFATA,CLMESS, 00170 S CLNSPR, CLACTI,.FALSE.) 00171 C 00172 IF (LHOOK) CALL DR_HOOK('FAGOTE_MT',1,ZHOOK_HANDLE) 00173 END 00174