SURFEX v7.3
General documentation of Surfex
|
00001 C Jan-2011 P. Marguinaud Thread-safe FA 00002 SUBROUTINE FAIRNO_MT (FA, KREP, KNUMER, CDSTTU ) 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 FERMETURE d'une unite logique "Fichier ARPEGE" 00008 C** 00009 C Arguments : KREP (Sortie) ==> Code-reponse du sous-programme; 00010 C KNUMER (Entree) ==> Numero de l'unite logique; 00011 C CDSTTU (Entree) ==> "STATUS" eventuel pour "CLOSE". 00012 C 00013 #include "precision.h" 00014 C 00015 C 00016 TYPE(FA_COM) :: FA 00017 INTEGER KREP, KNUMER 00018 C 00019 INTEGER IREP, IRANG, J, IPOSNU, IRANGC, INIMES, ILNOMC 00020 C 00021 CHARACTER CDSTTU*(*), CLSTTU*7 00022 C 00023 LOGICAL LLSTTU, LLVERF, LLRLFI 00024 C 00025 #include "facom2.h" 00026 #include "facom_mt.h" 00027 C** 00028 C 1. - CONTROLES DES PARAMETRES D'APPEL, PUIS INITIALISATIONS. 00029 C----------------------------------------------------------------------- 00030 C 00031 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00032 IF (LHOOK) CALL DR_HOOK('FAIRNO_MT',0,ZHOOK_HANDLE) 00033 IREP=0 00034 LLVERF=.FALSE. 00035 LLRLFI=.FALSE. 00036 CALL FANUMU_MT (FA, KNUMER,IRANG) 00037 C 00038 C Verrouillage global eventuel. 00039 C 00040 IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'ON') 00041 C 00042 IF (IRANG.EQ.0) THEN 00043 IREP=-51 00044 GOTO 1001 00045 ELSEIF (LEN (CDSTTU).LE.0) THEN 00046 IREP=-65 00047 GOTO 1001 00048 ELSE 00049 LLSTTU=CDSTTU.EQ.'KEEP'.OR.CDSTTU.EQ.'DELETE' 00050 C 00051 IF (LLSTTU) THEN 00052 CLSTTU=CDSTTU(1:MIN (LEN (CDSTTU),LEN (CLSTTU))) 00053 ELSE 00054 CLSTTU='DEFAUT' 00055 ENDIF 00056 C 00057 ENDIF 00058 C 00059 IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'ON') 00060 LLVERF=FA%LFAMUL 00061 C 00062 IF (FA%LCREAF(IRANG).AND..NOT.LLSTTU) THEN 00063 C 00064 C On force le relachement d'un fichier "parasite". 00065 C 00066 LLSTTU=.TRUE. 00067 CLSTTU='DELETE' 00068 ENDIF 00069 C** 00070 C 2. - FERMETURE DU FICHIER, AU SENS DU LOGICIEL LFI. 00071 C----------------------------------------------------------------------- 00072 C 00073 ! CALL LFIFER_MT (FA%LFI, IREP,KNUMER,CLSTTU) 00074 C 00075 ! IF (IREP.NE.0) THEN 00076 ! LLRLFI=.TRUE. 00077 ! GOTO 1001 00078 ! ENDIF 00079 C** 00080 C 3. - "NETTOYAGE" DES TABLES AYANT PERMIS DE GERER LE FICHIER. 00081 C ( au moins celles ayant un caractere "global" ) 00082 C----------------------------------------------------------------------- 00083 C 00084 FA%NULOGI(IRANG)=FA%JPNIIL 00085 C 00086 DO 301 J=1,FA%NFIOUV 00087 C 00088 IF (FA%NULIND(J).EQ.IRANG) THEN 00089 IPOSNU=J 00090 GOTO 302 00091 ENDIF 00092 C 00093 301 CONTINUE 00094 C 00095 IREP=-66 00096 GOTO 1001 00097 C 00098 302 CONTINUE 00099 C 00100 FA%NFIOUV=FA%NFIOUV-1 00101 C 00102 DO 303 J=IPOSNU,FA%NFIOUV 00103 FA%NULIND(J)=FA%NULIND(J+1) 00104 303 CONTINUE 00105 C 00106 IF (FA%LFAMUL) THEN 00107 CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'OFF') 00108 CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'REL') 00109 ENDIF 00110 C 00111 LLVERF=.FALSE. 00112 IRANGC=FA%NUCADR(IRANG) 00113 FA%NULCAD(IRANGC)=FA%NULCAD(IRANGC)-1 00114 C 00115 C Si le cadre auquel etait rattache le fichier n'a plus d'autre 00116 C fichier rattache, et qu'on ne devait pas conserver ce cadre, 00117 C on le supprime. 00118 C 00119 IF (FA%NULCAD(IRANGC).LE.0.AND. 00120 S (FA%NGARDE(IRANGC).EQ.0.OR.(FA%NGARDE(IRANGC).EQ.1.AND. 00121 S .NOT.FA%LIGARD))) 00122 S CALL FACTUI_MT (FA, IREP,IRANGC) 00123 C** 00124 C 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL, 00125 C VIA LE SOUS-PROGRAMME "FAIPAR" . 00126 C----------------------------------------------------------------------- 00127 C 00128 1001 CONTINUE 00129 KREP=IREP 00130 LLFATA=LLMOER (IREP,IRANG) 00131 C 00132 C Deverrouillage(s) eventuel(s). 00133 C 00134 IF (LLVERF) CALL LFIVER_MT (FA%LFI, FA%VRFICH(IRANG),'OFF') 00135 IF (FA%LFAMUL) CALL LFIVER_MT (FA%LFI, FA%VRGLAS,'OFF') 00136 C 00137 IF (LLFATA) THEN 00138 INIMES=2 00139 ELSE 00140 INIMES=IXNVMS(IRANG) 00141 ENDIF 00142 C 00143 IF (INIMES.EQ.0) THEN 00144 IF (LHOOK) CALL DR_HOOK('FAIRNO_MT',1,ZHOOK_HANDLE) 00145 RETURN 00146 ENDIF 00147 C 00148 CLNSPR='FAIRME' 00149 C 00150 IF (IREP.EQ.-65) THEN 00151 ILNOMC=8 00152 CLACTI(1:ILNOMC)=FA%CHAINC(:ILNOMC) 00153 ELSE 00154 ILNOMC=MIN ( LEN (CLACTI), LEN (CDSTTU) ) 00155 CLACTI(1:ILNOMC)=CDSTTU(1:ILNOMC) 00156 ENDIF 00157 C 00158 IF (INIMES.EQ.2) THEN 00159 C 00160 ILNOMC=MIN (ILNOMC,FA%NCPCAD) 00161 WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER=' 00162 ',I3, S '', CDSTTU='''''',A,'''''''')') KREP,KNUMER, 00163 S CLACTI(1:ILNOMC) 00164 CALL FAIPAR_MT (FA, KNUMER,INIMES,IREP,LLFATA,CLMESS, 00165 S CLNSPR,CLACTI(1:ILNOMC),LLRLFI) 00166 C 00167 ENDIF 00168 C 00169 IF (LHOOK) CALL DR_HOOK('FAIRNO_MT',1,ZHOOK_HANDLE) 00170 END 00171