SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/LFI/mt/lfiafm_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe LFI
00002       SUBROUTINE LFIAFM_MT (LFI, KREP, KNUMER, KFACTM )
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'Attribuer un Facteur Multiplicatif
00008 C     a une Unite Logique FORTRAN, destinee a etre ouverte
00009 C     ULTERIEUREMENT par le Logiciel de Fichiers Indexes *LFI* .
00010 C        Lors de cette ouverture ulterieure, LFIOUV essaiera de traiter
00011 C     l'unite logique consideree comme un fichier a acces direct
00012 C     non formatte de longueur d'article "Physique" LFI%JPLARD*KFACTM mots.
00013 C**
00014 C    ARGUMENTS : KREP   (Sortie) ==> Code-REPonse du sous-programme;
00015 C                KNUMER (Entree) ==> NUMero de l'unite logique;
00016 C                KFACTM (Entree) ==> FACteur Multiplicatif a attribuer.
00017 C
00018 #ifndef f77
00019 #include "precision.h"
00020 #endif
00021 C
00022       TYPE(LFICOM) :: LFI
00023       INTEGER KREP, KNUMER, KFACTM, IRANG, IREP, IRANFM, INIMES, IFACTM
00024 C
00025       LOGICAL LLVERG, LLEXUL
00026 C
00027 #include "lficom2.h"
00028 #include "lficom_mt.h"
00029 C**
00030 C     1.  -  CONTROLES DES PARAMETRES D'APPEL, INITIALISATIONS.
00031 C-----------------------------------------------------------------------
00032 C
00033 C        Appel legerement anticipe a LFINUM, permettant une initialisa-
00034 C     tion des variables globales du logiciel a la 1ere utilisation.
00035 C
00036       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00037       IF (LHOOK) CALL DR_HOOK('LFIAFM_MT',0,ZHOOK_HANDLE)
00038       IFACTM=KFACTM
00039       LLVERG=.FALSE.
00040       CALL LFINUM_MT (LFI, KNUMER,IRANG)
00041 C
00042       IF (KFACTM.LE.0) THEN
00043         IREP=-14
00044         GOTO 1001
00045       ELSEIF (KFACTM.GT.LFI%JPFACX) THEN
00046         IREP=-28
00047         GOTO 1001
00048       ELSEIF (IRANG.NE.0) THEN
00049         IREP=-5
00050         GOTO 1001
00051       ENDIF
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              Verrouillage Global eventuel.
00063 C
00064        IF (LFI%LMULTI) CALL LFIVER_MT (LFI, LFI%VERGLA,'ON')
00065       LLVERG=LFI%LMULTI
00066 C**
00067 C     2.  -  TRAVAIL EFFECTIF SUR LES TABLES DECRIVANT LES ASSOCIATIONS
00068 C            UNITES LOGIQUES/FACTEURS.
00069 C-----------------------------------------------------------------------
00070 C
00071       CALL LFIFMP_MT (LFI, KNUMER,IRANFM)
00072 C
00073       IF (IRANFM.NE.0) THEN
00074 C
00075 C          Redefinition du facteur multiplicatif.
00076 C
00077         IFACTM=LFI%MFACTU(IRANFM)
00078       ELSEIF (LFI%NULOFM.GE.LFI%JPXUFM) THEN
00079 C
00080 C          Tables pleines...
00081 C
00082         IREP=-29
00083         GOTO 1001
00084       ELSE
00085 C
00086 C          Cas standard.
00087 C
00088         LFI%NULOFM=LFI%NULOFM+1
00089         IRANFM=LFI%NULOFM
00090         LFI%MULOFM(IRANFM)=KNUMER
00091         IFACTM=KFACTM
00092       ENDIF
00093 C
00094       LFI%MFACTU(IRANFM)=KFACTM
00095       IREP=0
00096       GOTO 1001
00097 C**
00098 C     9.  - CI-DESSOUS, ETIQUETTE DE BRANCHEMENT EN CAS D'ERREUR INQUIRE
00099 C-----------------------------------------------------------------------
00100 C
00101   901 CONTINUE
00102       CLACTI='INQUIRE'
00103 C
00104 C      AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
00105 C
00106       IREP=IABS (IREP)
00107 C**
00108 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00109 C            VIA LE SOUS-PROGRAMME "LFIEMS" .
00110 C-----------------------------------------------------------------------
00111 C
00112  1001 CONTINUE
00113       KREP=IREP
00114       LLFATA=LLMOER (IREP,IRANG)
00115 C
00116       IF (LLVERG) CALL LFIVER_MT (LFI, LFI%VERGLA,'OFF')
00117 C
00118       IF (LLFATA) THEN
00119         INIMES=2
00120       ELSEIF (IRANG.EQ.0) THEN
00121         INIMES=LFI%NIMESG
00122       ELSE
00123         INIMES=IXNIMS (IRANG)
00124       ENDIF
00125 C
00126       IF (INIMES.EQ.0)  THEN 
00127         IF (LHOOK) CALL DR_HOOK('LFIAFM_MT',1,ZHOOK_HANDLE)
00128         RETURN
00129       ENDIF
00130       CLNSPR='LFIAFM'
00131 C
00132       IF (INIMES.EQ.2) THEN
00133         WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER='
00134 ',I3,     S         '', KFACTM='',I4)') KREP,KNUMER,KFACTM
00135         CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,LLFATA,
00136      S                  CLMESS,CLNSPR,CLACTI)
00137       ENDIF
00138 C
00139       IF (IFACTM.EQ.KFACTM) THEN
00140 C
00141         IF (LFI%LFRANC) THEN
00142           WRITE (UNIT=CLMESS,FMT=
00143      S           '(''Attribution du Facteur Multiplicatif'
00144 ',I3,     S             '' a l''''Unite Logique'',I3)') KFACTM,KNUMER
00145         ELSE
00146           WRITE (UNIT=CLMESS,FMT='(''Multiply Factor'
00147 ',I3,     S           '' specified for Logical Unit'
00148 ',     S             I3)') KFACTM,KNUMER
00149         ENDIF
00150 C
00151         CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,CLMESS,
00152      S                  CLNSPR,CLACTI)
00153       ELSE
00154 C
00155         IF (LFI%LFRANC) THEN
00156           WRITE (UNIT=CLMESS,FMT='(''Unite Logique'
00157 ',I3,     S           '': *NOUVEAU* Facteur Multiplicatif attribue='',I3)')
00158      S    KNUMER,KFACTM
00159         ELSE
00160           WRITE (UNIT=CLMESS,FMT='(''Logical Unit'
00161 ',I3,     S           '': *NEW* Multiply Factor specified='',I3)')
00162      S    KNUMER,KFACTM
00163         ENDIF
00164 C
00165         CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00166      S                  CLMESS,CLNSPR,CLACTI)
00167       ENDIF
00168 C
00169       IF (LHOOK) CALL DR_HOOK('LFIAFM_MT',1,ZHOOK_HANDLE)
00170       END
00171