SURFEX v8.1
General documentation of Surfex
lfilaf.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 lfilaf_fort &
5 & (lfi, krep, knumer, ldtout )
6 USE lfimod, ONLY : lficom
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! Sous-programme donnant, pour une unite logique ouverte au sens
13 ! du logiciel de fichiers indexes *LFI*, la Liste des Articles logi-
14 ! ques de donnees presents dans le Fichier, liste donnee toutefois
15 ! dans l'ordre PHYSIQUE ou ceux-ci figurent dans le fichier.
16 ! Sur option on donne aussi des renseignements sur les articles
17 ! (physiques) de gestion propres au logiciel, ainsi que sur les
18 ! trous repertories dans l'index.
19 !**
20 ! Arguments : KREP (Sortie) ==> Code-reponse du sous-programme;
21 ! KNUMER (Entree) ==> Numero de l'unite logique;
22 ! LDTOUT (Entree) ==> Vrai si on doit donner les rensei-
23 ! gnements optionnels (qui ne concer-
24 ! nent pas directement les articles
25 ! logiques de donnees).
26 !
27 !
28 TYPE(lficom) :: LFI
29 INTEGER (KIND=JPLIKB) KREP, KNUMER, IMDESC, IREP, IRANG
30 INTEGER (KIND=JPLIKB) INTROU, INBPIR, INBALO
31 INTEGER (KIND=JPLIKB) INALDO, IFACTM, ILARPH, INALPP
32 INTEGER (KIND=JPLIKB) INTPPI, INPPIM, INIMES, J
33 INTEGER (KIND=JPLIKB) INAGES, IRESER, INUTIL, IPERTE
34 INTEGER (KIND=JPLIKB) IPOSFI, IPOSDE, INEXCE
35 INTEGER (KIND=JPLIKB) INABAL, INALDI, INTROI, INPIMD
36 INTEGER (KIND=JPLIKB) INPIMF, INPILE, JRGPIF
37 INTEGER (KIND=JPLIKB) IRGPFS, IRGPIM, IRANGM, IRPIMS
38 INTEGER (KIND=JPLIKB) INALPI, ILONGA, IRECPI
39 INTEGER (KIND=JPLIKB) IDERPU, IREC, IRETIN
40 !
41 LOGICAL LDTOUT
42 !
43 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
44 CHARACTER(LEN=LFI%JPLMES) CLMESS
45 CHARACTER(LEN=LFI%JPLFTX) CLACTI
46 LOGICAL LLFATA
47 
48 !**
49 ! 1. - CONTROLES DES PARAMETRES D'APPEL, PUIS INITIALISATIONS.
50 !-----------------------------------------------------------------------
51 !
52 REAL(KIND=JPRB) :: ZHOOK_HANDLE
53 IF (lhook) CALL dr_hook('LFILAF_FORT',0,zhook_handle)
54 clacti=''
55 irep=0
56 irang=0
57 clnspr='LFILAF'
58 CALL lfinum_fort &
59 & (lfi, knumer,irang)
60 !
61 IF (irang.EQ.0) THEN
62  irep=-1
63  GOTO 1001
64 ENDIF
65 !
66 IF (lfi%LMULTI) CALL lfiver_fort &
67 & (lfi, lfi%VERRUE(irang),'ON')
68 introu=lfi%MDES1D(ixm(lfi%JPNTRU,irang))+lfi%NBTROU(irang)
69 inbpir=lfi%MDES1D(ixm(lfi%JPNPIR,irang))
70 inbalo=lfi%MDES1D(ixm(lfi%JPNALO,irang))
71 inaldo=inbalo-introu
72 ifactm=lfi%MFACTM(irang)
73 ilarph=lfi%JPLARD*ifactm
74 inalpp=lfi%JPNAPP*ifactm
75 intppi=(inbalo-1+inalpp)/inalpp
76 inppim=lfi%NPPIMM(irang)
77 !
78 ! Envoi d'une banniere.
79 !
80 WRITE (unit=lfi%NULOUT,fmt='(///)')
81 !
82 IF (lfi%LFRANC) THEN
83  WRITE (unit=clmess, &
84 & fmt='(''Catalogue de l''''Unite Logique LFI'' &
85 & ,I3,'' dans l''''ordre *PHYSIQUE* (sequentiel) des articles'')') &
86 & knumer
87 ELSE
88  WRITE (unit=clmess,fmt='(''Catalog of LFI Logical Unit'',I3, &
89 & '' in *PHYSICAL* (sequential) record order'')') knumer
90 ENDIF
91 !
92 inimes=2
93 llfata=.false.
94 CALL lfiems_fort &
95 & (lfi, knumer,inimes,irep,llfata, &
96 & clmess,clnspr,clacti)
97 !**
98 ! 2. - SUR OPTION, RENSEIGNEMENTS SUR LES ARTICLES "DE GESTION".
99 ! (ARTICLE DOCUMENTAIRE, PAIRES D'ARTICLES D'INDEX)
100 !-----------------------------------------------------------------------
101 !
102 IF (ldtout) THEN
103  inages=1+2*inbpir
104  ireser=ilarph*inages
105 !
106  IF (lfi%LFRANC) THEN
107  WRITE (unit=lfi%NULOUT,fmt='(//,TR1,I6, &
108 & '' article(s) "physique(s)" de gestion,'',I6, &
109 & '' mots chacun, occupant donc'',I7,'' mots; detail:'', &
110 & /,TR10,''Article documentaire de la position 1 a'',I6,/,TR10,I6, &
111 &'' paire(s) d''''articles d''''index prereserves, de la position'' &
112 & ,I6,'' a'',I7)') &
113 & inages,ilarph,ireser,ilarph,inbpir,ilarph+1,ireser
114  ELSE
115  WRITE (unit=lfi%NULOUT,fmt='(//,TR1,I6, &
116 & '' "physical" records for file handling,'',I6, &
117 & '' words each, occupying then'',I7,'' words; detail:'', &
118 & /,TR10,''Documentary record from position 1 to'',I6,/,TR10,I6, &
119 &'' pair(s) of pre-reserved index records, from position'' &
120 & ,I6,'' to'',I7)') &
121 & inages,ilarph,ireser,ilarph,inbpir,ilarph+1,ireser
122  ENDIF
123 !
124  IF (intppi.LT.inbpir) THEN
125  inutil=inbpir-intppi
126  iperte=ilarph*inutil*2
127 !
128  IF (lfi%LFRANC) THEN
129  WRITE (unit=lfi%NULOUT, &
130 & fmt='(/,TR10,5(''=''),''> Il y a'',I3, &
131 & '' paire(s) d''''articles d''''index inutilises, representant'', &
132 & I8,'' mots'')') inutil,iperte
133  ELSE
134  WRITE (unit=lfi%NULOUT, &
135 & fmt='(/,TR10,5(''=''),''> There is (are)'',I3, &
136 & '' pair(s) of unused index records, leading to a loss of'', &
137 & I8,'' words'')') inutil,iperte
138  ENDIF
139 !
140  ELSEIF (intppi.EQ.inbpir) THEN
141 !
142  IF (lfi%LFRANC) THEN
143  WRITE (unit=lfi%NULOUT, &
144 & fmt='(TR15,5(''-''),TR3,''pas de paire '', &
145 & ''d''''articles d''''index inutilises ni excedentaires'', &
146 & TR3,5(''-''))')
147  ELSE
148  WRITE (unit=lfi%NULOUT, &
149 & fmt='(TR15,5(''-''),TR3,''no pair of '', &
150 & ''unused or overflow pages'', &
151 & TR3,5(''-''))')
152  ENDIF
153 !
154  ELSEIF (intppi.EQ.(inbpir+1)) THEN
155  iposfi=ilarph*(lfi%MDES1D(ixm(ilarph,irang))+1)
156  iposde=iposfi-2*ilarph+1
157 !
158  IF (lfi%LFRANC) THEN
159  WRITE (unit=lfi%NULOUT, &
160 & fmt='(TR10,''une paire d''''articles '', &
161 & ''d''''index excedentaires, de la position'', &
162 & I9,'' a'',I9)') &
163 & iposde,iposfi
164  ELSE
165  WRITE (unit=lfi%NULOUT, &
166 & fmt='(TR10,''one pair of overflow index '', &
167 & ''pages ,from position'', &
168 & I9,'' to'',I9)') &
169 & iposde,iposfi
170  ENDIF
171 !
172  ELSE
173  inexce=intppi-inbpir
174 !
175  IF (lfi%LFRANC) THEN
176  WRITE (unit=lfi%NULOUT, &
177 & fmt='(TR10,I6,'' paires d''''articles '', &
178 & ''d''''index excedentaires, des positions:'')') inexce
179 !
180  DO j=1,inexce
181  iposfi=ilarph*(lfi%MDES1D(ixm(ilarph+1-j,irang))+1)
182  iposde=iposfi-2*ilarph+1
183  WRITE (unit=lfi%NULOUT,fmt='(TR20,I9,'' a'',I9)') &
184 & iposde,iposfi
185  ENDDO
186 !
187  ELSE
188  WRITE (unit=lfi%NULOUT, &
189 & fmt='(TR10,I6,'' pairs of overflow index '', &
190 & ''pages, from positions:'')') inexce
191 !
192  DO j=1,inexce
193  iposfi=ilarph*(lfi%MDES1D(ixm(ilarph+1-j,irang))+1)
194  iposde=iposfi-2*ilarph+1
195  WRITE (unit=lfi%NULOUT,fmt='(TR20,I9,'' to'',I9)') &
196 & iposde,iposfi
197  ENDDO
198 !
199  ENDIF
200 !
201  ENDIF
202 !
203 ENDIF
204 !
205 WRITE (unit=lfi%NULOUT,fmt='(//)')
206 !**
207 ! 3. - RENSEIGNEMENTS INDIVIDUALISES SUR LES ARTICLES LOGIQUES.
208 ! (DONNEES, ET SUR OPTION TROUS REPERTORIES DANS L'INDEX)
209 !-----------------------------------------------------------------------
210 !
211 IF (lfi%LFRANC) THEN
212 !
213  IF (inbalo.EQ.0) THEN
214  WRITE (unit=lfi%NULOUT, &
215 & fmt='(/,TR10,5(''=''),''> L''''unite logique'', &
216 & I3,'' ne contient AUCUN ARTICLE LOGIQUE (ni donnees, ni trous)'', &
217 & //)') knumer
218  GOTO 1001
219  ELSEIF (inbalo.EQ.introu) THEN
220  WRITE (unit=lfi%NULOUT, &
221 & fmt='(/,TR10,5(''=''),''> L''''unite logique'', &
222 & I3,'' ne contient QUE DES TROUS, pas de donnees)'',//)') knumer
223  IF (.NOT.ldtout) GOTO 1001
224  ENDIF
225 !
226 ELSE
227 !
228  IF (inbalo.EQ.0) THEN
229  WRITE (unit=lfi%NULOUT, &
230 & fmt='(/,TR10,5(''=''),''> The logical unit'',I3, &
231 & '' contains NO LOGICAL RECORD AT ALL (neither data, nor holes)'', &
232 & //)') knumer
233  GOTO 1001
234  ELSEIF (inbalo.EQ.introu) THEN
235  WRITE (unit=lfi%NULOUT, &
236 & fmt='(/,TR10,5(''=''),''> The logical unit'',I3, &
237 & '' contains ONLY HOLES, no dat)'',//)') knumer
238  IF (.NOT.ldtout) GOTO 1001
239  ENDIF
240 !
241 ENDIF
242 !*
243 ! 3.1 - BALAYAGE DES PAIRES D'ARTICLES D'INDEX, PAR ORDRE CROISSANT
244 !-----------------------------------------------------------------------
245 !
246 inabal=0
247 inaldi=0
248 introi=0
249 inpimd=2
250 inpimf=inppim
251 IF (lfi%NPODPI(irang).EQ.2) inpimd=3
252 IF (lfi%NPODPI(irang).EQ.inppim) inpimf=inppim-1
253 inpile=2
254 !
255 DO jrgpif=1,intppi
256 irgpfs=jrgpif+1
257 !
258 ! On fait en sorte que la P.A.I. concernee, ainsi que sa suivante
259 ! eventuelle, soient toutes les deux en memoire.
260 !
261 IF (jrgpif.EQ.intppi) THEN
262  irgpim=lfi%MRGPIM(lfi%NPODPI(irang),irang)
263  GOTO 314
264 !
265 ELSEIF (jrgpif.NE.1) THEN
266 !
267 ! Recherche de la P.A.I. dans les Paires de Pages d'Index memoire.
268 !
269  DO j=inpimd,inpimf
270  irgpim=lfi%MRGPIM(j,irang)
271 !
272  IF (lfi%MRGPIF(irgpim).EQ.jrgpif) THEN
273 !
274  IF (.NOT.lfi%LPHASP(irgpim)) THEN
275 !
276  CALL lfipha_fort &
277 & (lfi, irep,irang,irgpim,iretin)
278 !
279  IF (iretin.EQ.1) THEN
280  GOTO 903
281  ELSEIF (iretin.EQ.2) THEN
282  GOTO 904
283  ELSEIF (iretin.NE.0) THEN
284  GOTO 1001
285  ENDIF
286 !
287  ENDIF
288 !
289  GOTO 312
290 !
291  ENDIF
292 !
293  ENDDO
294 !
295 ! Mise en memoire de la Paire d'Articles d'Index cherchee.
296 !
297  CALL lfipim_fort &
298 & (lfi, irep,irang,irangm,irgpim,jrgpif,irgpfs, &
299 & inpile,iretin)
300 !
301  IF (iretin.EQ.1) THEN
302  GOTO 903
303  ELSEIF (iretin.EQ.2) THEN
304  GOTO 904
305  ELSEIF (iretin.NE.0) THEN
306  GOTO 1001
307  ELSEIF (irangm.GT.inppim) THEN
308  inppim=irangm
309  inpimf=inppim
310  ENDIF
311 !
312 ELSE
313  irgpim=lfi%MRGPIM(1,irang)
314 !
315 ENDIF
316 !
317 312 CONTINUE
318 !
319 IF (irgpfs.EQ.intppi) THEN
320  irpims=lfi%MRGPIM(lfi%NPODPI(irang),irang)
321 !
322 ELSE
323 !
324 ! Recherche de la P.A.I. dans les Paires de Pages d'Index memoire.
325 !
326  DO j=inpimd,inpimf
327  irpims=lfi%MRGPIM(j,irang)
328 !
329  IF (lfi%MRGPIF(irpims).EQ.irgpfs) THEN
330 !
331  IF (.NOT.lfi%LPHASP(irpims)) THEN
332 !
333  CALL lfipha_fort &
334 & (lfi, irep,irang,irpims,iretin)
335 !
336  IF (iretin.EQ.1) THEN
337  GOTO 903
338  ELSEIF (iretin.EQ.2) THEN
339  GOTO 904
340  ELSEIF (iretin.NE.0) THEN
341  GOTO 1001
342  ENDIF
343 !
344  ENDIF
345 !
346  GOTO 314
347 !
348  ENDIF
349 !
350  ENDDO
351 !
352 ! Mise en memoire de la Paire d'Articles d'Index cherchee.
353 !
354  CALL lfipim_fort &
355 & (lfi, irep,irang,irangm,irpims,irgpfs,jrgpif, &
356 & inpile,iretin)
357 !
358  IF (iretin.EQ.1) THEN
359  GOTO 903
360  ELSEIF (iretin.EQ.2) THEN
361  GOTO 904
362  ELSEIF (iretin.NE.0) THEN
363  GOTO 1001
364  ELSEIF (irangm.GT.inppim) THEN
365  inppim=irangm
366  inpimf=inppim
367  ENDIF
368 !
369 ENDIF
370 !
371 314 CONTINUE
372 inalpi=min(inalpp,inbalo-inabal)
373 !
374 ! Balayage de la Paire d'Article d'Index concernee.
375 !
376 DO j=1,inalpi
377 !
378 IF (lfi%CNOMAR(ixc(j,irgpim)).NE.' ') THEN
379 !
380 ! Il s'agit d'un article logique de donnees; en plus de ses
381 ! caracteristiques tabulees, on verifie s'il n'y a pas de la
382 ! place "perdue" juste derriere les donnees, place recuperable
383 ! eventuellement en cas de reecriture plus longue de l'article
384 ! logique.
385 !
386  inaldi=inaldi+1
387  ilonga=lfi%MLGPOS(ixm(2*j-1,irgpim))
388  iposde=lfi%MLGPOS(ixm(2*j ,irgpim))
389  iposfi=iposde+ilonga-1
390 !
391  IF (j.EQ.1.AND.jrgpif.GT.inbpir) THEN
392 !
393 ! Cas du premier article logique d'une P.A.I. excedentaire;
394 ! dans ce cas, la P.A.I. est situee derriere l'article logique,
395 ! en occupant deux articles physiques.
396 !
397  irecpi=lfi%MDES1D(ixm(ilarph+1-(jrgpif-inbpir),irang))
398  iderpu=ilarph*(irecpi-1)
399 !
400  ELSEIF (j.EQ.inalpi.AND.jrgpif.EQ.intppi) THEN
401 !
402 ! Cas du dernier article logique du fichier, sans P.A.I. situee
403 ! derriere: la derniere position utilisable sans modifier le nombre
404 ! d'articles physiques du fichier correspond a la fin du dernier
405 ! article physique contenant des donnees, ou a la fin du dernier
406 ! article physique ecrit sur le fichier.
407 !
408  imdesc=lfi%MDES1D(ixm(lfi%JPNAPH,irang))
409  irec=max(1+(iposfi-1)/ilarph,imdesc)
410  iderpu=ilarph*irec
411 !
412 ! Si on arrive au test ci-dessous, on est sur que l'article lo-
413 ! gique n'est pas le dernier du fichier.
414 !
415  ELSEIF (j.NE.inalpp) THEN
416 !
417 ! Cas general, ou l'article logique n'est pas le dernier de sa
418 ! (Paire de) Page(s) d'Index.
419 !
420  iderpu=lfi%MLGPOS(ixm(2*j+2,irgpim))-1
421 !
422  ELSE
423 !
424 ! Cas particulier ou l'article logique est le dernier de sa
425 ! (Paire de) Page(s) d'Index.
426 !
427  iderpu=lfi%MLGPOS(ixm(2_jplikb ,irpims))-1
428  ENDIF
429 !
430  IF (iderpu.EQ.iposfi) THEN
431 !
432  IF (lfi%LFRANC) THEN
433  WRITE (unit=lfi%NULOUT, &
434 & fmt='(I7,''-eme article de donnees: "'',A, &
435 & ''",'',I7,'' mots, position'',I9,'' a'',I9)') &
436 & inaldi,lfi%CNOMAR(ixc(j,irgpim)),ilonga,iposde,iposfi
437  ELSE
438  WRITE (unit=lfi%NULOUT, &
439 & fmt='(I7,''-th data record: "'',A,''",'',I7, &
440 & '' words, position'',I9,'' to'',I9)') &
441 & inaldi,lfi%CNOMAR(ixc(j,irgpim)),ilonga,iposde,iposfi
442  ENDIF
443 !
444  ELSE
445 !
446 ! On visualise en plus la place "perdue" derriere l'article.
447 !
448  IF (lfi%LFRANC) THEN
449  WRITE (unit=lfi%NULOUT, &
450 & fmt='(I7,''-eme article de donnees: "'',A, &
451 & ''",'',I7,'' mots, position'',I9,'' a'',I9,'' <'',SP, &
452 & I8,'' >'')') &
453 & inaldi,lfi%CNOMAR(ixc(j,irgpim)),ilonga,iposde, &
454 & iposfi,iderpu-iposfi
455  ELSE
456  WRITE (unit=lfi%NULOUT, &
457 & fmt='(I7,''-th data record: '''''',A, &
458 & '''''','',I7,'' words, position'',I9,'' to'',I9,'' <'', &
459 & SP,I8,'' >'')') &
460 & inaldi,lfi%CNOMAR(ixc(j,irgpim)),ilonga,iposde, &
461 & iposfi,iderpu-iposfi
462  ENDIF
463 !
464  ENDIF
465 !
466 ELSEIF (ldtout) THEN
467  introi=introi+1
468  ilonga=lfi%MLGPOS(ixm(2*j-1,irgpim))
469  iposde=lfi%MLGPOS(ixm(2*j ,irgpim))
470  iposfi=iposde+ilonga-1
471 !
472  IF (lfi%LFRANC) THEN
473  WRITE (unit=lfi%NULOUT,fmt='(TR1,5(''=''),''>'',T10,I6, &
474 & ''-eme TROU repertorie dans l''''index, longueur reutilisable:'', &
475 & I7,'' mots, position'',I9,'' a'',I9)') &
476 & introi,ilonga,iposde,iposfi
477  ELSE
478  WRITE (unit=lfi%NULOUT,fmt='(TR1,5(''=''),''>'',T10,I6, &
479 & ''-th HOLE cataloged within index, re-usable length:'', &
480 & I7,'' words, position'',I9,'' to'',I9)') &
481 & introi,ilonga,iposde,iposfi
482  ENDIF
483 !
484 ENDIF
485 !
486 ENDDO
487 !
488 inabal=inabal+inalpi
489 ENDDO
490 !*
491 ! 3.2 - ENVOI DE MESSAGES RECAPITULATIFS.
492 !-----------------------------------------------------------------------
493 !
494 IF (lfi%LFRANC) THEN
495 !
496  IF (ldtout) THEN
497  WRITE (unit=lfi%NULOUT,fmt='(//,T5,8(''-''),TR3,I7, &
498 & '' articles logiques de donnees et'',I6, &
499 & '' trous repertories listes'',TR3,8(''-''),//)') &
500 & inaldi,introi
501  ELSE
502  WRITE (unit=lfi%NULOUT,fmt='(//,T5,8(''-''),TR3,I7, &
503 & '' articles logiques de donnees listes'',TR3,8(''-''),//)') &
504 & inaldi
505  ENDIF
506 !
507 ELSE
508 !
509  IF (ldtout) THEN
510  WRITE (unit=lfi%NULOUT,fmt='(//,T5,8(''-''),TR3,I7, &
511 & '' logical records of data and'',I6, &
512 & '' holes within index listed'',TR3,8(''-''),//)') &
513 & inaldi,introi
514  ELSE
515  WRITE (unit=lfi%NULOUT,fmt='(//,T5,8(''-''),TR3,I7, &
516 & '' logical records of data listed'',TR3,8(''-''),//)') &
517 & inaldi
518  ENDIF
519 !
520 ENDIF
521 !
522 IF (inaldi.EQ.inaldo.AND.(.NOT.ldtout.OR.introi.EQ.introu)) THEN
523 !
524  IF (lfi%LFRANC) THEN
525  WRITE (unit=clmess,fmt= &
526 & '(''Fin du catalogue de l''''Unite Logique'',I3,'' ---'',I7, &
527 & '' Articles logiques en tout'')') knumer,inbalo
528  ELSE
529  WRITE (unit=clmess,fmt= &
530 & '(''End of catalog of Logical Unit'',I3,'' ---'',I7, &
531 & '' logical Records for whole file'')') knumer,inbalo
532  ENDIF
533 !
534  CALL lfiems_fort &
535 & (lfi, knumer,inimes,irep,llfata, &
536 & clmess,clnspr,clacti)
537  WRITE (unit=lfi%NULOUT,fmt='(///)')
538 ELSE
539  irep=-16
540 ENDIF
541 !
542 GOTO 1001
543 !**
544 ! 9. - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
545 !-----------------------------------------------------------------------
546 !
547 903 CONTINUE
548 clacti='WRITE'
549 GOTO 909
550 !
551 904 CONTINUE
552 clacti='READ'
553 !
554 909 CONTINUE
555 !
556 ! AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
557 !
558 irep=abs(irep)
559 !**
560 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
561 ! VIA LE SOUS-PROGRAMME "LFIEMS" .
562 !-----------------------------------------------------------------------
563 !
564 1001 CONTINUE
565 krep=irep
566 llfata=llmoer(irep,irang)
567 !
568 IF (irang.NE.0) THEN
569  lfi%NDEROP(irang)=18
570  lfi%NDERCO(irang)=irep
571  IF (lfi%LMULTI) CALL lfiver_fort &
572 & (lfi, lfi%VERRUE(irang),'OFF')
573 ENDIF
574 !
575 IF (llfata.OR.ixnims(irang).EQ.2) THEN
576  inimes=2
577 ELSE
578  IF (lhook) CALL dr_hook('LFILAF_FORT',1,zhook_handle)
579  RETURN
580 ENDIF
581 !
582 WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
583 & '', LDTOUT= '',L1)') krep,knumer,ldtout
584 CALL lfiems_fort &
585 & (lfi, knumer,inimes,irep,llfata, &
586 & clmess,clnspr,clacti)
587 !
588 IF (lhook) CALL dr_hook('LFILAF_FORT',1,zhook_handle)
589 
590 CONTAINS
591 
592 #include "lficom2.ixc.h"
593 #include "lficom2.ixm.h"
594 #include "lficom2.ixnims.h"
595 #include "lficom2.llmoer.h"
596 
597 END SUBROUTINE lfilaf_fort
598 
599 
600 
601 ! Oct-2012 P. Marguinaud 64b LFI
602 SUBROUTINE lfilaf64 &
603 & (krep, knumer, ldtout)
604 USE lfimod, ONLY : lfi => lficom_default, &
607 USE lfi_precision
608 IMPLICIT NONE
609 ! Arguments
610 INTEGER (KIND=JPLIKB) KREP ! OUT
611 INTEGER (KIND=JPLIKB) KNUMER ! IN
612 LOGICAL LDTOUT ! IN
613 
614 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
615 
616 CALL lfilaf_fort &
617 & (lfi, krep, knumer, ldtout)
618 
619 END SUBROUTINE lfilaf64
620 
621 SUBROUTINE lfilaf &
622 & (krep, knumer, ldtout)
623 USE lfimod, ONLY : lfi => lficom_default, &
626 USE lfi_precision
627 IMPLICIT NONE
628 ! Arguments
629 INTEGER (KIND=JPLIKM) KREP ! OUT
630 INTEGER (KIND=JPLIKM) KNUMER ! IN
631 LOGICAL LDTOUT ! IN
632 
633 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
634 
635 CALL lfilaf_mt &
636 & (lfi, krep, knumer, ldtout)
637 
638 END SUBROUTINE lfilaf
639 
640 SUBROUTINE lfilaf_mt &
641 & (lfi, krep, knumer, ldtout)
642 USE lfimod, ONLY : lficom
643 USE lfi_precision
644 IMPLICIT NONE
645 ! Arguments
646 type(lficom) lfi ! INOUT
647 INTEGER (KIND=JPLIKM) KREP ! OUT
648 INTEGER (KIND=JPLIKM) KNUMER ! IN
649 LOGICAL LDTOUT ! IN
650 ! Local integers
651 INTEGER (KIND=JPLIKB) IREP ! OUT
652 INTEGER (KIND=JPLIKB) INUMER ! IN
653 ! Convert arguments
654 
655 inumer = int( knumer, jplikb)
656 
657 CALL lfilaf_fort &
658 & (lfi, irep, inumer, ldtout)
659 
660 krep = int( irep, jplikm)
661 
662 END SUBROUTINE lfilaf_mt
663 
664 !INTF KREP OUT
665 !INTF KNUMER IN
666 !INTF LDTOUT IN
integer, parameter jplikb
subroutine lfilaf64(KREP, KNUMER, LDTOUT)
Definition: lfilaf.F90:604
subroutine lfilaf_mt(LFI, KREP, KNUMER, LDTOUT)
Definition: lfilaf.F90:642
subroutine new_lfi_default()
Definition: lfimod.F90:376
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 lfilaf_fort(LFI, KREP, KNUMER, LDTOUT)
Definition: lfilaf.F90:6
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
subroutine lfipha_fort(LFI, KREP, KRANG, KRGPIM, KRETIN)
Definition: lfipha.F90:5
integer, parameter jplikm
subroutine lfiems_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:7
Definition: lfimod.F90:1
subroutine lfilaf(KREP, KNUMER, LDTOUT)
Definition: lfilaf.F90:623
subroutine lfipim_fort(LFI, KREP, KRANG, KRANGM, KRGPIM, KRGPIF, KRGFOR, KNPILE, KRETIN)
Definition: lfipim.F90:6