SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/mt/fairno_mt.F
Go to the documentation of this file.
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