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