SURFEX v7.3
General documentation of Surfex
|
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