SURFEX v7.3
General documentation of Surfex
|
00001 C Jan-2011 P. Marguinaud Thread-safe FA 00002 SUBROUTINE FARFLU_MT (FA, KXNIVV, KXTRON, KXLATI, KXLONG ) 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 servant a specifier des Limites Utilisateur 00008 C en termes de Resolutions horizontale et verticale, valides 00009 C globalement pour tous les Fichiers et Cadres ARPEGE. 00010 C ( Resolution Fichiers - Limites Utilisateur ) 00011 C** 00012 C Arguments : KXNIVV ==> Nombre maximum de niveaux verticaux; 00013 C (tous d'Entree) KXTRON ==> Troncature maximum; 00014 C KXLATI ==> Nombre maximum de latitudes pole a pole; 00015 C KXLONG ==> Nombre maxi de longitudes par parallele. 00016 C* 00017 C S'il y a des cadres deja definis (dynamiquement ou non) avec 00018 C des valeurs correspondantes plus grandes, cela provoque une erreur 00019 C globale. 00020 C Si les valeurs donnees en argument depassent les limites cor- 00021 C repondantes du logiciel, elles sont ecretees, avec un message. 00022 C Une messagerie de niveau 1 est emise dans le cas normal ou 00023 C ci-dessus. 00024 C 00025 #include "precision.h" 00026 C 00027 C 00028 TYPE(FA_COM) :: FA 00029 INTEGER KXNIVV, KXTRON, KXLATI, KXLONG 00030 C 00031 INTEGER INUMER, INIMES, IREP, IMINIM, IXNIVV, IXTRON, IXLATI, J 00032 INTEGER IXLONG, IRANGC 00033 C 00034 LOGICAL LLDEPA, LLVERG 00035 C 00036 C 00037 C 00038 #include "facom2.h" 00039 #include "facom_mt.h" 00040 C** 00041 C 1. - SI PREMIERE UTILISATION, APPEL AU SOUS-PROGRAMME "FARINE". 00042 C----------------------------------------------------------------------- 00043 C 00044 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00045 IF (LHOOK) CALL DR_HOOK('FARFLU_MT',0,ZHOOK_HANDLE) 00046 IF (FA%FARFLU_LLPREA) THEN 00047 CALL FARINE_MT (FA, 2) 00048 FA%FARFLU_LLPREA=.FALSE. 00049 ENDIF 00050 C** 00051 C 2. - CONTROLES. 00052 C----------------------------------------------------------------------- 00053 C 00054 IMINIM=MIN (KXNIVV,KXTRON,KXLATI,KXLONG) 00055 C 00056 IF (IMINIM.LE.0) THEN 00057 LLVERG=.FALSE. 00058 LLDEPA=.FALSE. 00059 IREP=-64 00060 GOTO 1001 00061 ELSE 00062 LLDEPA=KXNIVV.GT.FA%JPXNIV.OR.KXTRON.GT.FA%JPXTRO.OR. 00063 S KXLATI.GT.FA%JPXLAT.OR.KXLONG.GT.FA%JPXLON 00064 IXNIVV=MIN (KXNIVV,FA%JPXNIV) 00065 IXTRON=MIN (KXTRON,FA%JPXTRO) 00066 IXLATI=MIN (KXLATI,FA%JPXLAT) 00067 IXLONG=MIN (KXLONG,FA%JPXLON) 00068 ENDIF 00069 C 00070 C Verrouillage global, si necessaire. 00071 C 00072 IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'ON') 00073 LLVERG=FA%LFAMUL 00074 C 00075 IF (IXTRON.LE.FA%NSTROI) THEN 00076 IREP=-99 00077 GOTO 1001 00078 ENDIF 00079 C 00080 C Controles vis-a-vis des cadres deja definis, s'il y en a. 00081 C 00082 DO 201 J=1,FA%NCADEF 00083 IRANGC=FA%NCAIND(J) 00084 C 00085 IF (FA%MTRONC(IRANGC).GT.IXTRON) THEN 00086 IREP=-104 00087 GOTO 1001 00088 ELSEIF (FA%NNIVER(IRANGC).GT.IXNIVV) THEN 00089 IREP=-105 00090 GOTO 1001 00091 ELSEIF (FA%NLATIT(IRANGC).GT.IXLATI) THEN 00092 IREP=-106 00093 GOTO 1001 00094 ELSEIF (FA%NXLOPA(IRANGC).GT.IXLONG) THEN 00095 IREP=-107 00096 GOTO 1001 00097 ENDIF 00098 C 00099 201 CONTINUE 00100 C** 00101 C 3. - MODIFICATION DES LIMITES USAGER. 00102 C----------------------------------------------------------------------- 00103 C 00104 FA%NXNIVV=IXNIVV 00105 FA%NXTRON=IXTRON 00106 FA%NXLATI=IXLATI 00107 FA%NXLONG=IXLONG 00108 IREP=0 00109 C** 00110 C 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL, 00111 C VIA LE sous-programme "FAIPAR" . 00112 C----------------------------------------------------------------------- 00113 C 00114 1001 CONTINUE 00115 C 00116 C Deverrouillage global eventuel. 00117 C 00118 IF (LLVERG) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'OFF') 00119 C 00120 LLFATA=IREP.NE.0.AND.FA%NRFAGA.NE.2 00121 C 00122 IF (LLFATA) THEN 00123 INIMES=2 00124 ELSEIF (FA%NIMSGA.EQ.0) THEN 00125 IF (LHOOK) CALL DR_HOOK('FARFLU_MT',1,ZHOOK_HANDLE) 00126 RETURN 00127 ELSE 00128 INIMES=FA%NIMSGA 00129 ENDIF 00130 C 00131 CLNSPR='FARFLU' 00132 INUMER=FA%JPNIIL 00133 C 00134 IF (INIMES.EQ.2) THEN 00135 WRITE (UNIT=CLMESS,FMT='(''KXNIVV='',I4,'', KXTRON=' 00136 ',I4, S '', KXLATI='',I4,'', KXLONG='',I4)') 00137 S KXNIVV,KXTRON,KXLATI,KXLONG 00138 CALL FAIPAR_MT (FA, INUMER,INIMES,IREP,LLFATA,CLMESS, 00139 S CLNSPR,CLACTI,.FALSE.) 00140 ENDIF 00141 C 00142 IF (INIMES.GE.1) THEN 00143 C 00144 IF (LLDEPA) THEN 00145 WRITE (UNIT=CLMESS,FMT= 00146 S '(''LIMITES USAGER (***ECRETEES***): FA%NXNIVV=' 00147 ',I4, S '', FA%NXTRON='',I4,'', FA%NXLATI='',I4,'', FA%NXLONG='',I4)') 00148 S FA%NXNIVV,FA%NXTRON,FA%NXLATI,FA%NXLONG 00149 ELSE 00150 WRITE (UNIT=CLMESS,FMT= 00151 S '(''LIMITES USAGER EFFECTIVES: FA%NXNIVV=' 00152 ',I4, S '', FA%NXTRON='',I4,'', FA%NXLATI='',I4,'', FA%NXLONG='',I4)') 00153 S FA%NXNIVV,FA%NXTRON,FA%NXLATI,FA%NXLONG 00154 ENDIF 00155 C 00156 CALL FAIPAR_MT (FA, INUMER,INIMES,IREP,.FALSE.,CLMESS, 00157 S CLNSPR,CLACTI,.FALSE.) 00158 ENDIF 00159 C 00160 IF (LHOOK) CALL DR_HOOK('FARFLU_MT',1,ZHOOK_HANDLE) 00161 END 00162