SURFEX v8.1
General documentation of Surfex
lfiafm.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe LFI
3 
4 SUBROUTINE lfiafm_fort &
5 & (lfi, krep, knumer, kfactm)
6 USE lfimod, ONLY : lficom
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! Sous-Programme permettant d'Attribuer un Facteur Multiplicatif
13 ! a une Unite Logique FORTRAN, destinee a etre ouverte
14 ! ULTERIEUREMENT par le Logiciel de Fichiers Indexes *LFI* .
15 ! Lors de cette ouverture ulterieure, LFIOUV essaiera de traiter
16 ! l'unite logique consideree comme un fichier a acces direct
17 ! non formatte de longueur d'article "Physique" LFI%JPLARD*KFACTM mots.
18 !**
19 ! ARGUMENTS : KREP (Sortie) ==> Code-REPonse du sous-programme;
20 ! KNUMER (Entree) ==> NUMero de l'unite logique;
21 ! KFACTM (Entree) ==> FACteur Multiplicatif a attribuer.
22 !
23 !
24 TYPE(lficom) :: LFI
25 INTEGER (KIND=JPLIKB) KREP, KNUMER, KFACTM, IRANG
26 INTEGER (KIND=JPLIKB) IREP, IRANFM, INIMES, IFACTM
27 !
28 LOGICAL LLVERG, LLEXUL
29 !
30 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
31 CHARACTER(LEN=LFI%JPLMES) CLMESS
32 CHARACTER(LEN=LFI%JPLFTX) CLACTI
33 LOGICAL LLFATA
34 
35 !**
36 ! 1. - CONTROLES DES PARAMETRES D'APPEL, INITIALISATIONS.
37 !-----------------------------------------------------------------------
38 !
39 ! Appel legerement anticipe a LFINUM, permettant une initialisa-
40 ! tion des variables globales du logiciel a la 1ere utilisation.
41 !
42 REAL(KIND=JPRB) :: ZHOOK_HANDLE
43 IF (lhook) CALL dr_hook('LFIAFM_FORT',0,zhook_handle)
44 clacti=''
45 ifactm=kfactm
46 llverg=.false.
47 CALL lfinum_fort &
48 & (lfi, knumer,irang)
49 !
50 IF (kfactm.LE.0) THEN
51  irep=-14
52  GOTO 1001
53 ELSEIF (kfactm.GT.lfi%JPFACX) THEN
54  irep=-28
55  GOTO 1001
56 ELSEIF (irang.NE.0) THEN
57  irep=-5
58  GOTO 1001
59 ENDIF
60 !
61 ! Controle de validite FORTRAN du Numero d'Unite Logique.
62 !
63 IF (knumer > 0) THEN
64  INQUIRE (unit=knumer,exist=llexul,err=901,iostat=irep)
65 ELSE
66  llexul=.true.
67 ENDIF
68 !
69 IF (.NOT.llexul) THEN
70  irep=-30
71  GOTO 1001
72 ENDIF
73 !
74 ! Verrouillage Global eventuel.
75 !
76  IF (lfi%LMULTI) CALL lfiver_fort &
77 & (lfi, lfi%VERGLA,'ON')
78 llverg=lfi%LMULTI
79 !**
80 ! 2. - TRAVAIL EFFECTIF SUR LES TABLES DECRIVANT LES ASSOCIATIONS
81 ! UNITES LOGIQUES/FACTEURS.
82 !-----------------------------------------------------------------------
83 !
84 CALL lfifmp_fort &
85 & (lfi, knumer,iranfm)
86 !
87 IF (iranfm.NE.0) THEN
88 !
89 ! Redefinition du facteur multiplicatif.
90 !
91  ifactm=lfi%MFACTU(iranfm)
92 ELSEIF (lfi%NULOFM.GE.lfi%JPXUFM) THEN
93 !
94 ! Tables pleines...
95 !
96  irep=-29
97  GOTO 1001
98 ELSE
99 !
100 ! Cas standard.
101 !
102  lfi%NULOFM=lfi%NULOFM+1
103  iranfm=lfi%NULOFM
104  lfi%MULOFM(iranfm)=knumer
105  ifactm=kfactm
106 ENDIF
107 !
108 lfi%MFACTU(iranfm)=kfactm
109 irep=0
110 GOTO 1001
111 !**
112 ! 9. - CI-DESSOUS, ETIQUETTE DE BRANCHEMENT EN CAS D'ERREUR INQUIRE
113 !-----------------------------------------------------------------------
114 !
115 901 CONTINUE
116 clacti='INQUIRE'
117 !
118 ! AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
119 !
120 irep=abs(irep)
121 !**
122 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
123 ! VIA LE SOUS-PROGRAMME "LFIEMS" .
124 !-----------------------------------------------------------------------
125 !
126 1001 CONTINUE
127 krep=irep
128 llfata=llmoer(irep,irang)
129 !
130 IF (llverg) CALL lfiver_fort &
131 & (lfi, lfi%VERGLA,'OFF')
132 !
133 IF (llfata) THEN
134  inimes=2
135 ELSEIF (irang.EQ.0) THEN
136  inimes=lfi%NIMESG
137 ELSE
138  inimes=ixnims(irang)
139 ENDIF
140 !
141 IF (inimes.EQ.0) THEN
142  IF (lhook) CALL dr_hook('LFIAFM_FORT',1,zhook_handle)
143  RETURN
144 ENDIF
145 clnspr='LFIAFM'
146 !
147 IF (inimes.EQ.2) THEN
148  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
149 & '', KFACTM='',I4)') krep,knumer,kfactm
150  CALL lfiems_fort &
151 & (lfi, knumer,inimes,irep,llfata, &
152 & clmess,clnspr,clacti)
153 ENDIF
154 !
155 IF (ifactm.EQ.kfactm) THEN
156 !
157  IF (lfi%LFRANC) THEN
158  WRITE (unit=clmess,fmt= &
159 & '(''Attribution du Facteur Multiplicatif'',I3, &
160 & '' a l''''Unite Logique'',I3)') kfactm,knumer
161  ELSE
162  WRITE (unit=clmess,fmt='(''Multiply Factor'',I3, &
163 & '' specified for Logical Unit'', &
164 & I3)') kfactm,knumer
165  ENDIF
166 !
167  CALL lfiems_fort &
168 & (lfi, knumer,inimes,irep,.false.,clmess, &
169 & clnspr,clacti)
170 ELSE
171 !
172  IF (lfi%LFRANC) THEN
173  WRITE (unit=clmess,fmt='(''Unite Logique'',I3, &
174 & '': *NOUVEAU* Facteur Multiplicatif attribue='',I3)') &
175 & knumer,kfactm
176  ELSE
177  WRITE (unit=clmess,fmt='(''Logical Unit'',I3, &
178 & '': *NEW* Multiply Factor specified='',I3)') &
179 & knumer,kfactm
180  ENDIF
181 !
182  CALL lfiems_fort &
183 & (lfi, knumer,inimes,irep,.false., &
184 & clmess,clnspr,clacti)
185 ENDIF
186 !
187 IF (lhook) CALL dr_hook('LFIAFM_FORT',1,zhook_handle)
188 
189 CONTAINS
190 
191 #include "lficom2.ixnims.h"
192 #include "lficom2.llmoer.h"
193 
194 END SUBROUTINE lfiafm_fort
195 
196 
197 
198 ! Oct-2012 P. Marguinaud 64b LFI
199 SUBROUTINE lfiafm64 &
200 & (krep, knumer, kfactm)
201 USE lfimod, ONLY : lfi => lficom_default, &
204 USE lfi_precision
205 IMPLICIT NONE
206 ! Arguments
207 INTEGER (KIND=JPLIKB) KREP ! OUT
208 INTEGER (KIND=JPLIKB) KNUMER ! IN
209 INTEGER (KIND=JPLIKB) KFACTM ! IN
210 
211 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
212 
213 CALL lfiafm_fort &
214 & (lfi, krep, knumer, kfactm)
215 
216 END SUBROUTINE lfiafm64
217 
218 SUBROUTINE lfiafm &
219 & (krep, knumer, kfactm)
220 USE lfimod, ONLY : lfi => lficom_default, &
223 USE lfi_precision
224 IMPLICIT NONE
225 ! Arguments
226 INTEGER (KIND=JPLIKM) KREP ! OUT
227 INTEGER (KIND=JPLIKM) KNUMER ! IN
228 INTEGER (KIND=JPLIKM) KFACTM ! IN
229 
230 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
231 
232 CALL lfiafm_mt &
233 & (lfi, krep, knumer, kfactm)
234 
235 END SUBROUTINE lfiafm
236 
237 SUBROUTINE lfiafm_mt &
238 & (lfi, krep, knumer, kfactm)
239 USE lfimod, ONLY : lficom
240 USE lfi_precision
241 IMPLICIT NONE
242 ! Arguments
243 type(lficom) lfi ! INOUT
244 INTEGER (KIND=JPLIKM) KREP ! OUT
245 INTEGER (KIND=JPLIKM) KNUMER ! IN
246 INTEGER (KIND=JPLIKM) KFACTM ! IN
247 ! Local integers
248 INTEGER (KIND=JPLIKB) IREP ! OUT
249 INTEGER (KIND=JPLIKB) INUMER ! IN
250 INTEGER (KIND=JPLIKB) IFACTM ! IN
251 ! Convert arguments
252 
253 inumer = int( knumer, jplikb)
254 ifactm = int( kfactm, jplikb)
255 
256 CALL lfiafm_fort &
257 & (lfi, irep, inumer, ifactm)
258 
259 krep = int( irep, jplikm)
260 
261 END SUBROUTINE lfiafm_mt
262 
263 !INTF KREP OUT
264 !INTF KNUMER IN
265 !INTF KFACTM IN
integer, parameter jplikb
subroutine lfifmp_fort(LFI, KNUMER, KRANFM)
Definition: lfifmp.F90:5
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine lfiafm(KREP, KNUMER, KFACTM)
Definition: lfiafm.F90:220
logical, save lficom_default_init
Definition: lfimod.F90:371
subroutine lfinum_fort(LFI, KNUMER, KRANG)
Definition: lfinum.F90:6
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfiafm_fort(LFI, KREP, KNUMER, KFACTM)
Definition: lfiafm.F90:6
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
integer, parameter jplikm
subroutine lfiems_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:7
Definition: lfimod.F90:1
subroutine lfiafm_mt(LFI, KREP, KNUMER, KFACTM)
Definition: lfiafm.F90:239
subroutine lfiafm64(KREP, KNUMER, KFACTM)
Definition: lfiafm.F90:201