SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/LFI/mt/lfiofm_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe LFI
00002       SUBROUTINE LFIOFM_MT (LFI, KREP, KNUMER, KFACTM, LDOUVR )
00003       USE LFIMOD, ONLY : LFICOM
00004       USE PARKIND1, ONLY : JPRB
00005       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
00006 C****
00007 C        Sous-Programme permettant d'obtenir le Facteur Multiplicatif:
00008 C
00009 C     - effectif d'une Unite Logique FORTRAN deja ouverte pour le
00010 C       logiciel de Fichiers Indexes *LFI*;
00011 C     - prevu pour une Unite Logique FORTRAN, destinee a etre ouverte
00012 C       ULTERIEUREMENT par le Logiciel de Fichiers Indexes *LFI*, en
00013 C       supposant que l'on n'appelle pas ensuite LFIAFM ou LFIFMD
00014 C       avant LFIOUV.
00015 C
00016 C       L'argument de sortie LDOUVR permet de savoir dans quel cas on se
00017 C     trouve.
00018 C**
00019 C    ARGUMENTS : KREP   (Sortie) ==> Code-REPonse du sous-programme;
00020 C                KNUMER (Entree) ==> NUMERo de l'unite logique;
00021 C                KFACTM (Sortie) ==> FACteur Multiplicatif;
00022 C                LDOUVR (Sortie) ==> Vrai si l'unite logique est deja
00023 C                                    ouverte pour le logiciel LFI.
00024 #ifndef f77
00025 #include "precision.h"
00026 #endif
00027 C
00028       TYPE(LFICOM) :: LFI
00029       INTEGER KREP, KNUMER, KFACTM, IRANG, IREP, IRANFM, INIMES
00030 C
00031       LOGICAL LLEXUL, LDOUVR
00032 C
00033 #include "lficom2.h"
00034 #include "lficom_mt.h"
00035 C
00036       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00037       IF (LHOOK) CALL DR_HOOK('LFIOFM_MT',0,ZHOOK_HANDLE)
00038       CALL LFINUM_MT (LFI, KNUMER,IRANG)
00039       LDOUVR=IRANG.NE.0
00040 C
00041       IF (LDOUVR) THEN
00042 C
00043 C        Unite logique deja ouverte pour le logiciel, on renvoie le
00044 C     facteur multiplicatif effectif sous verrouillage eventuel.
00045 C
00046         IF (LFI%LMULTI) CALL LFIVER_MT (LFI, LFI%VERRUE(IRANG),'ON')
00047         KFACTM=LFI%MFACTM(IRANG)
00048         IF (LFI%LMULTI) CALL LFIVER_MT (LFI, LFI%VERRUE(IRANG),'OFF')
00049       ELSE
00050 C
00051 C        Unite logique non (encore) ouverte pour le logiciel.
00052 C
00053 C        Controle de validite FORTRAN du Numero d'Unite Logique.
00054 C
00055         INQUIRE (UNIT=KNUMER,EXIST=LLEXUL,ERR=901,IOSTAT=IREP)
00056 C
00057         IF (.NOT.LLEXUL) THEN
00058           IREP=-30
00059           GOTO 1001
00060         ENDIF
00061 C
00062 C          On renvoie le facteur multiplicatif prevu,
00063 C          sous verrouillage Global eventuel.
00064 C
00065         IF (LFI%LMULTI) CALL LFIVER_MT (LFI, LFI%VERGLA,'ON')
00066         CALL LFIFMP_MT (LFI, KNUMER,IRANFM)
00067         KFACTM=LFI%MFACTU(IRANFM)
00068         IF (LFI%LMULTI) CALL LFIVER_MT (LFI, LFI%VERGLA,'OFF')
00069       ENDIF
00070 C
00071       IREP=0
00072       GOTO 1001
00073 C**
00074 C     9.  - CI-DESSOUS, ETIQUETTE DE BRANCHEMENT EN CAS D'ERREUR INQUIRE
00075 C-----------------------------------------------------------------------
00076 C
00077   901 CONTINUE
00078       CLACTI='INQUIRE'
00079 C
00080 C      AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
00081 C
00082       IREP=IABS (IREP)
00083 C**
00084 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00085 C            VIA LE SOUS-PROGRAMME "LFIEMS" .
00086 C-----------------------------------------------------------------------
00087 C
00088  1001 CONTINUE
00089       KREP=IREP
00090       LLFATA=LLMOER (IREP,IRANG)
00091 C
00092       IF (LLFATA) THEN
00093         INIMES=2
00094       ELSEIF (IRANG.EQ.0) THEN
00095         INIMES=LFI%NIMESG
00096       ELSE
00097         INIMES=IXNIMS (IRANG)
00098       ENDIF
00099 C
00100       IF (INIMES.EQ.2) THEN
00101         CLNSPR='LFIOFM'
00102         WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER='
00103 ',I3,     S         '', KFACTM='',I4,'', LDOUVR= '',L1)')
00104      S    KREP,KNUMER,KFACTM,LDOUVR
00105         CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,LLFATA,
00106      S                  CLMESS,CLNSPR,CLACTI)
00107       ENDIF
00108 C
00109       IF (LHOOK) CALL DR_HOOK('LFIOFM_MT',1,ZHOOK_HANDLE)
00110       END
00111