SURFEX v7.3
General documentation of Surfex
|
00001 C Jan-2011 P. Marguinaud Thread-safe FA 00002 SUBROUTINE FAGIOT_MT (FA, KNGRIB, KNBPDG, KNBCSP, KSTRON, KPUILA, 00003 S 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 de modifier les options implicites 00009 C liees au codage GRIB des champs. 00010 C CES OPTIONS NE SONT UTILISEES QUE POUR (RE)ECRIRE DES CHAMPS 00011 C codes en GRIB, et les nouvelles valeurs implicites ne serviront 00012 C que LORS d'une OUVERTURE de FICHIER ULTERIEURE. 00013 C ( Grib, Implicites Options Techniques ) 00014 C** 00015 C Arguments : KNGRIB (Entree) ==> Niveau de codage GRIB (-1,0,1,2,3); 00016 C KNBPDG (Entree) ==> Nombre de bits par valeur point- 00017 C de-grille; 00018 C KNBCSP (Entree) ==> Nombre de bits par partie reelle/ 00019 C imaginaire de coeff. spectral; 00020 C KSTRON (Entree) ==> Sous-troncature non compactee; 00021 C KPUILA (Entree) ==> Puissance de laplacien; 00022 C KDMOPL (Entree) ==> Degre de modulation de KPUILA. 00023 C 00024 C N.B.: Il doit y avoir coherence vis-a-vis des cadres deja definis 00025 C et vis-a-vis des limites usagers. 00026 C ( ce qui en pratique, ne concerne que KSTRON ) 00027 C 00028 C Remarque: KSTRON egal a -1 est accepte, et dans ce cas 00029 C on indexera (a chaque ouverture de fichier) la sous- 00030 C troncature effective sur la troncature. 00031 C 00032 C MODIF 30/03/2007 JM AUDOIN FA%LFAMOP pour limiter IMPRESSION 00033 C 00034 #include "precision.h" 00035 C 00036 C 00037 TYPE(FA_COM) :: FA 00038 INTEGER KNGRIB, KNBPDG, KNBCSP, KSTRON, KPUILA, KDMOPL 00039 C 00040 INTEGER IMINIM, IREP, INIMES, INUMER, J, IRANGC 00041 C 00042 LOGICAL LLVERG 00043 C 00044 C 00045 C 00046 #include "facom2.h" 00047 #include "facom_mt.h" 00048 C** 00049 C 1. - CONTROLES ET INITIALISATIONS. 00050 C----------------------------------------------------------------------- 00051 C 00052 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00053 IF (LHOOK) CALL DR_HOOK('FAGIOT_MT',0,ZHOOK_HANDLE) 00054 IF (FA%FAGIOT_LLPREA) THEN 00055 C 00056 C A la premiere utilisation, appel au sous-programme "FARINE". 00057 C 00058 CALL FARINE_MT(FA, 2) 00059 FA%FAGIOT_LLPREA=.FALSE. 00060 ENDIF 00061 C 00062 LLVERG=.FALSE. 00063 IMINIM=MIN (2+KNGRIB,2+KNBPDG,2+KNBCSP,2+KSTRON,1+KDMOPL) 00064 C 00065 IF (IMINIM.LE.0) THEN 00066 IREP=-64 00067 GOTO 1001 00068 ELSEIF (KNBPDG*KNBCSP.EQ.0) THEN 00069 IREP=-64 00070 GOTO 1001 00071 ELSEIF (KNGRIB.GT.3) THEN 00072 IREP=-96 00073 GOTO 1001 00074 ELSEIF (MAX (KNBPDG,KNBCSP).GT.FA%NBIMAX) THEN 00075 IREP=-97 00076 GOTO 1001 00077 ELSEIF (IABS (KPUILA).GT.2**15-1) THEN 00078 IREP=-98 00079 GOTO 1001 00080 ENDIF 00081 C 00082 C Verrouillage global eventuel. 00083 C 00084 IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'ON') 00085 LLVERG=FA%LFAMUL 00086 C 00087 IF (KSTRON.GE.FA%NXTRON) THEN 00088 IREP=-113 00089 GOTO 1001 00090 ENDIF 00091 C 00092 C Coherence de "KSTRON" vis-a-vis de la troncature des cadres 00093 C deja definis. 00094 C 00095 DO 101 J=1,FA%NCADEF 00096 IRANGC=FA%NCAIND(J) 00097 C 00098 IF (KSTRON.GE.FA%MTRONC(IRANGC)) THEN 00099 IREP=-99 00100 GOTO 1001 00101 ENDIF 00102 C 00103 101 CONTINUE 00104 C** 00105 C 2. - STOCKAGE DES NOUVEAUX PARAMETRES. 00106 C----------------------------------------------------------------------- 00107 C 00108 IF (FA%LFAMOP.AND.(FA%NIGRIB.EQ.-1.OR.FA%NIGRIB.EQ.3).AND. 00109 S (KNGRIB.GT.-1.AND.KNGRIB.LT.3)) THEN 00110 WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------' 00111 WRITE (UNIT=FA%NULOUT,FMT=*) 00112 S 'FAGIOT: CAUTION!! Les champs spectraux ARPEGE ne', 00113 S ' devront pas etre ranges comme dans le modele ARPEGE' 00114 WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------' 00115 ENDIF 00116 IF (FA%LFAMOP.AND.(KNGRIB.EQ.-1.OR.KNGRIB.EQ.3).AND. 00117 S (FA%NIGRIB.GT.-1.AND.FA%NIGRIB.LT.3)) THEN 00118 WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------' 00119 WRITE (UNIT=FA%NULOUT,FMT=*) 00120 S 'FAGIOT: CAUTION!! Les champs spectraux ARPEGE devront', 00121 S ' etre ranges comme dans le modele ARPEGE' 00122 WRITE (UNIT=FA%NULOUT,FMT=*)'-----------------' 00123 ENDIF 00124 FA%NIGRIB=KNGRIB 00125 FA%NBIPDG=KNBPDG 00126 FA%NBICSP=KNBCSP 00127 FA%NSTROI=KSTRON 00128 FA%NPUILA=KPUILA 00129 FA%NMIDPL=KDMOPL 00130 IREP=0 00131 C** 00132 C 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL, 00133 C VIA LE SOUS-PROGRAMME "FAIPAR" . 00134 C----------------------------------------------------------------------- 00135 C 00136 1001 CONTINUE 00137 LLFATA=LLMOER (IREP,0) 00138 C 00139 C Deverrouillage global eventuel. 00140 C 00141 IF (LLVERG) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'OFF') 00142 C 00143 IF (LLFATA) THEN 00144 INIMES=2 00145 ELSE 00146 INIMES=FA%NIMSGA 00147 ENDIF 00148 C 00149 IF (.NOT.LLFATA.AND.INIMES.NE.2) THEN 00150 IF (LHOOK) CALL DR_HOOK('FAGIOT_MT',1,ZHOOK_HANDLE) 00151 RETURN 00152 ENDIF 00153 C 00154 CLNSPR='FAGIOT' 00155 C 00156 WRITE (UNIT=CLMESS,FMT='(''KNGRIB='',I2,'', KNBPDG=' 00157 ',I3, S '', KNBCSP='',I3,'', KSTRON='',I2,'', KPUILA=' 00158 ',I3, S '', KDMOPL='',I3)') 00159 S KNGRIB,KNBPDG,KNBCSP,KSTRON,KPUILA,KDMOPL 00160 INUMER=FA%JPNIIL 00161 CALL FAIPAR_MT (FA, INUMER,INIMES,IREP,LLFATA,CLMESS, 00162 S CLNSPR,CLACTI,.FALSE.) 00163 C 00164 IF (LHOOK) CALL DR_HOOK('FAGIOT_MT',1,ZHOOK_HANDLE) 00165 END 00166