SURFEX v8.1
General documentation of Surfex
lfifer.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe LFI
3 ! Sep-2012 P. Marguinaud Fix uninitialized variables
4 
5 SUBROUTINE lfifer_fort &
6 & (lfi, krep, knumer, cdsttc )
7 USE lfimod, ONLY : lficom
8 USE parkind1, ONLY : jprb
9 USE yomhook , ONLY : lhook, dr_hook
10 USE lfi_precision
11 IMPLICIT NONE
12 !****
13 ! SOUS-PROGRAMME DE FERMETURE D'UN FICHIER INDEXE AU SENS DU
14 ! LOGICIEL DE FICHIERS INDEXES LFI.
15 ! CETTE FERMETURE EST VITALE SI LE FICHIER A ETE MODIFIE DEPUIS
16 ! LA DERNIERE OUVERTURE, ET EST DE TOUTE MANIERE CHAUDEMENT
17 ! RECOMMANDEE AVANT DE SORTIR DU PROGRAMME UTILISATEUR.
18 !
19 ! De maniere generale, il vaut mieux fermer une unite logique
20 ! des que l'on n'en a plus besoin, de maniere a ne pas bloquer un
21 ! espace dans les tables qui pourrait faire defaut lors d'une
22 ! ouverture ulterieure, particulierement pour un fichier "multiple"
23 ! qui a besoin d'espace CONTIGU dans les tables des unites logiques.
24 ! Par ailleurs, tout fichier ouvert (au sens FORTRAN du terme cette
25 ! fois) "occupe" generalement un morceau de la memoire du programme.
26 !**
27 ! ARGUMENTS : KREP (SORTIE) ==> CODE-REPONSE DU SOUS-PROGRAMME;
28 ! KNUMER (ENTREE) ==> LFI%NUMERO DE L'UNITE LOGIQUE;
29 ! CDSTTC (ENTREE) ==> "STATUS" EVENTUEL POUR "CLOSE".
30 !
31 ! Modifications:
32 !
33 ! 02/06/97, Jean Clochard.
34 !
35 ! -Modification des impressions pour que l'annee puisse
36 ! etre imprimee avec 4 chiffres.
37 !
38 !
39 TYPE(lficom) :: LFI
40 CHARACTER (LEN=*) CDSTTC
41 CHARACTER (LEN=LFI%JPLSTX) CLSTTC
42 CHARACTER (LEN=3) CLAUXI
43 !
44 INTEGER (KIND=JPLIKB) ITAMPO (lfi%jplarx)
45 INTEGER (KIND=JPLIKB) KREP, KNUMER
46 INTEGER (KIND=JPLIKB) IEXPLO (lfi%jpnpia+lfi%jpnpis)
47 INTEGER (KIND=JPLIKB) ILSTTU, IREPX, INAPHY, IRANG, IREP
48 INTEGER (KIND=JPLIKB) ILSTTC, IREC, INPPIM
49 INTEGER (KIND=JPLIKB) IFACTM, ILARPH, INALPP, INBALO, INTPPI
50 INTEGER (KIND=JPLIKB) INTRLZ, IDECAL, J
51 INTEGER (KIND=JPLIKB) IPOTZC, IRGPFC, IRGPMC, ILFORC, INPILE
52 INTEGER (KIND=JPLIKB) INIMES, IPOTZS, JJ
53 INTEGER (KIND=JPLIKB) IRGPFS, IPOTZE, IRGPMS, INTCON, IPOSFE
54 INTEGER (KIND=JPLIKB) JNPAGE, IRGPFE, JR
55 INTEGER (KIND=JPLIKB) IRGPME, IRANGM, IDECDB, INBARE, IRGPC2
56 INTEGER (KIND=JPLIKB) IRGPS2, IDECDC
57 INTEGER (KIND=JPLIKB) INBARC, IDECDS, INBARS, INBART, INTPPN
58 INTEGER (KIND=JPLIKB) ILOMIN, ILOMAX
59 INTEGER (KIND=JPLIKB) IRPIFN, INPIME, IDEBEX, IRGPIM, IRGPIF
60 INTEGER (KIND=JPLIKB) INLNOM, IDEBUT
61 INTEGER (KIND=JPLIKB) ILONGA, INALDO, IPOSNU, IRANIE, IRETIN
62 INTEGER (KIND=JPLIKB) IAUXIL
63 !
64 LOGICAL LLSTTU, LLVERF, LLVERG, LLECRD, LLIMST
65 !
66 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
67 CHARACTER(LEN=LFI%JPLMES) CLMESS
68 CHARACTER(LEN=LFI%JPLFTX) CLACTI
69 LOGICAL LLFATA
70 
71 !**
72 ! 1. - CONTROLES DES PARAMETRES D'APPEL, PUIS INITIALISATIONS.
73 !-----------------------------------------------------------------------
74 !
75 REAL(KIND=JPRB) :: ZHOOK_HANDLE
76 IF (lhook) CALL dr_hook('LFIFER_FORT',0,zhook_handle)
77 clacti=''
78 itampo=0
79 
80 IF (lfi%LMISOP) WRITE (unit=lfi%NULOUT,fmt=*)'DEBUT LFIFER'
81 clacti=''
82 clnspr='LFIFER'
83 ilsttu=min(int(len(clsttc), jplikb), &
84 & int(len(cdsttc), jplikb))
85 clsttc=cdsttc(:ilsttu)
86 irepx=0
87 inaphy=0
88 llverf=.false.
89 llverg=.false.
90 CALL lfinum_fort &
91 & (lfi, knumer,irang)
92 !
93 IF (irang.EQ.0) THEN
94  irep=-1
95  GOTO 1001
96 ENDIF
97 !
98  IF (lfi%LMULTI) CALL lfiver_fort &
99 & (lfi, lfi%VERRUE(irang),'ON')
100 llverf=lfi%LMULTI
101 !
102 IF (cdsttc.EQ.'KEEP'.AND.lfi%CSTAOP(irang).EQ.'SCRATCH') THEN
103  irep=-19
104  llfata=llmoer(irep,irang)
105 !
106  IF (llfata) THEN
107  GOTO 1001
108  ELSE
109 !
110 ! SI L'ERREUR (-19) N'EST PAS FATALE, ON FERME L'UNITE LOGIQUE,
111 ! MAIS SANS PRECISER DE DIRECTIVE "STATUS" DANS LE "CLOSE".
112 !
113  llsttu=.false.
114  GOTO 105
115  ENDIF
116 !
117 ELSE
118  llsttu=cdsttc.EQ.'KEEP'.OR.cdsttc.EQ.'DELETE'
119 !
120  IF (llsttu) THEN
121  ilsttc=int(index(cdsttc,' '), jplikb)-1
122  IF (ilsttc.GT.0) ilsttu=ilsttc
123  clsttc=cdsttc(:ilsttu)
124  ELSE
125  clsttc=lfi%CHINCO(:ilsttu)
126  ENDIF
127 !
128 ENDIF
129 !
130 irep=0
131 !
132 105 CONTINUE
133 irepx=irep
134 inppim=lfi%NPPIMM(irang)
135 ifactm=lfi%MFACTM(irang)
136 ilarph=lfi%JPLARD*ifactm
137 inalpp=lfi%JPNAPP*ifactm
138 inbalo=lfi%MDES1D(ixm(lfi%JPNALO,irang))
139 intppi=(inbalo-1+inalpp)/inalpp
140 !**
141 ! 2. - TRAITEMENT D'EVENTUELS "TROUS" D'INDEX DE LONGUEUR ZERO.
142 ! CES "PARASITES" PEUVENT AVOIR ETE CREES PAR LE RECYCLAGE
143 ! DE TROUS DANS LE FICHIER; ON VA LES SUPPRIMER.
144 !
145 ! L'ALGORITHME CHOISI N'EST PEUT-ETRE PAS LE PLUS EFFICACE;
146 ! MAIS A PARTIR DU MOMENT OU LA PROBABILITE DE GENERER DES TROUS
147 ! DE LONGUEUR NULLE EST FAIBLE, ET OU ON NE LES RETASSE
148 ! QU'A LA FERMETURE, IL N'Y A PAS LIEU DE RAFFINER A OUTRANCE !
149 !-----------------------------------------------------------------------
150 !
151 intrlz=lfi%NTRULZ(irang)
152 IF (intrlz.EQ.0) GOTO 300
153 !
154 idecal=0
155 ipotzc=lfi%NRFPTZ(irang)
156 irgpfc=1+(ipotzc-1)/inalpp
157 !*
158 ! 2.1 - MISE EN MEMOIRE DE LA PREMIERE P.A.I. AYANT UN TEL TROU.
159 !-----------------------------------------------------------------------
160 !
161 DO j=1,inppim
162 irgpmc=lfi%MRGPIM(j,irang)
163 !
164 IF (lfi%MRGPIF(irgpmc).EQ.irgpfc) THEN
165 !
166 IF (.NOT.lfi%LPHASP(irgpmc)) THEN
167 !
168  CALL lfipha_fort &
169 & (lfi, irep,irang,irgpmc,iretin)
170 !
171  IF (iretin.EQ.1) THEN
172  GOTO 903
173  ELSEIF (iretin.EQ.2) THEN
174  GOTO 904
175  ELSEIF (iretin.NE.0) THEN
176  GOTO 1001
177  ENDIF
178 !
179  ENDIF
180 !
181  GOTO 220
182 !
183 ENDIF
184 !
185 ENDDO
186 !
187 ilforc=irgpfc+1
188 inpile=2
189 CALL lfipim_fort &
190 & (lfi, irep,irang,irangm,irgpmc,irgpfc, &
191 & ilforc,inpile,iretin)
192 !
193 IF (iretin.EQ.1) THEN
194  GOTO 903
195 ELSEIF (iretin.EQ.2) THEN
196  GOTO 904
197 ELSEIF (iretin.NE.0) THEN
198  GOTO 1001
199 ENDIF
200 !
201 inppim=max(inppim,irangm)
202 !
203 220 CONTINUE
204 !*
205 ! 2.2 - AMORCAGE DE LA RECHERCHE DU NOMBRE DE TROUS NULS CONSECUTIFS
206 ! ET DE L'EVENTUEL TROU NUL "SUIVANT" CE PAQUET.
207 !-----------------------------------------------------------------------
208 !
209 ipotzs=ipotzc+idecal
210 irgpfs=1+(ipotzs-1)/inalpp
211 ipotze=ipotzs
212 irgpms=0
213 !
214 ! ON ELIMINE LES CAS "TRIVIAUX"
215 !
216 IF (intrlz.EQ.1.OR.ipotze+intrlz.GT.inbalo) THEN
217  intcon=intrlz
218  iposfe=inbalo
219  GOTO 250
220 ENDIF
221 !*
222 ! 2.3 - DECOMPTE DU NOMBRE DE TROUS NULS CONSECUTIFS.
223 !-----------------------------------------------------------------------
224 !
225 DO jnpage=irgpfs,intppi
226 irgpfe=jnpage
227 !
228 DO j=1,inppim
229 irgpme=lfi%MRGPIM(j,irang)
230 !
231 IF (lfi%MRGPIF(irgpme).EQ.irgpfe) THEN
232 !
233  IF (.NOT.lfi%LPHASP(irgpme)) THEN
234 !
235  CALL lfipha_fort &
236 & (lfi, irep,irang,irgpme,iretin)
237 !
238  IF (iretin.EQ.1) THEN
239  GOTO 903
240  ELSEIF (iretin.EQ.2) THEN
241  GOTO 904
242  ELSEIF (iretin.NE.0) THEN
243  GOTO 1001
244  ENDIF
245 !
246  ENDIF
247 !
248  GOTO 233
249 !
250 ENDIF
251 !
252 ENDDO
253 !
254 inpile=2
255 CALL lfipim_fort &
256 & (lfi, irep,irang,irangm,irgpme, &
257 & irgpfe,irgpfc,inpile,iretin)
258 !
259 IF (iretin.EQ.1) THEN
260  GOTO 903
261 ELSEIF (iretin.EQ.2) THEN
262  GOTO 904
263 ELSEIF (iretin.NE.0) THEN
264  GOTO 1001
265 ENDIF
266 !
267 inppim=max(inppim,irangm)
268 !
269 233 CONTINUE
270 IF (irgpms.EQ.0) irgpms=irgpme
271 idecdb=ipotze-1-(irgpfe-1)*inalpp
272 inbare=min(inbalo,irgpfe*inalpp)-ipotze+1
273 intcon=0
274 !
275 DO j=1,inbare
276 !
277 IF (lfi%MLGPOS(ixm(2*(j+idecdb)-1,irgpme)).NE.0) THEN
278  intcon=intcon+j-1
279  GOTO 240
280 ENDIF
281 !
282 ENDDO
283 !
284 intcon=intcon+inbare
285 ipotze=ipotze+inbare
286 ENDDO
287 !*
288 ! 2.4 - RECHERCHE DU PROCHAIN TROU NUL, APRES LE PAQUET TROUVE.
289 !-----------------------------------------------------------------------
290 !
291 240 CONTINUE
292 ipotze=ipotze+intcon
293 !
294 ! D'ABORD, ELIMINATION DES CAS "TRIVIAUX"
295 !
296 IF (intcon.EQ.intrlz) THEN
297 !
298 ! ON A TROUVE TOUS LES TROUS NULS RESTANT.
299 !
300  iposfe=inbalo
301 ELSEIF (intcon.EQ.(intrlz-1)) THEN
302 !
303 ! PLUS QU'UN SEUL TROU NUL... CE SERA DONC CELUI DE RANG MAXIMUM.
304 !
305  iposfe=lfi%NRFDTZ(irang)-1
306 ELSE
307 !
308 ! CAS GENERAL.
309 !
310  DO jnpage=irgpfe,intppi
311 !
312  IF (jnpage.NE.irgpfe) THEN
313 !
314  DO j=1,inppim
315  irgpme=lfi%MRGPIM(j,irang)
316 !
317  IF (lfi%MRGPIF(irgpme).EQ.jnpage) THEN
318 !
319  IF (.NOT.lfi%LPHASP(irgpme)) THEN
320 !
321  CALL lfipha_fort &
322 & (lfi, irep,irang,irgpme,iretin)
323 !
324  IF (iretin.EQ.1) THEN
325  GOTO 903
326  ELSEIF (iretin.EQ.2) THEN
327  GOTO 904
328  ELSEIF (iretin.NE.0) THEN
329  GOTO 1001
330  ENDIF
331 !
332  ENDIF
333 !
334  GOTO 243
335 !
336  ENDIF
337 !
338  ENDDO
339 !
340  inpile=2
341  CALL lfipim_fort &
342 & (lfi, irep,irang,irangm,irgpme,jnpage, &
343 & irgpfc,inpile,iretin)
344 !
345  IF (iretin.EQ.1) THEN
346  GOTO 903
347  ELSEIF (iretin.EQ.2) THEN
348  GOTO 904
349  ELSEIF (iretin.NE.0) THEN
350  GOTO 1001
351  ENDIF
352 !
353  inppim=max(inppim,irangm)
354  ENDIF
355 !
356 243 CONTINUE
357  idecdb=ipotze-1-(jnpage-1)*inalpp
358  inbare=min(inbalo,jnpage*inalpp)-ipotze+1
359 !
360  DO j=1,inbare
361 !
362  IF (lfi%MLGPOS(ixm(2*(j+idecdb)-1,irgpme)).EQ.0) THEN
363  iposfe=(jnpage-1)*inalpp+j-1
364  GOTO 250
365  ENDIF
366 !
367  ENDDO
368 !
369  ENDDO
370 !
371 ENDIF
372 !
373 250 CONTINUE
374 !*
375 ! 2.5 - RETASSAGE "A GAUCHE" D'UNE PARTIE DE L'INDEX.
376 !-----------------------------------------------------------------------
377 !
378 idecal=idecal+intcon
379 !
380 251 CONTINUE
381 ipotzs=ipotzc+idecal
382 irgpc2=1+(ipotzc-1)/inalpp
383 irgps2=1+(ipotzs-1)/inalpp
384 !
385 IF (irgpc2.NE.irgpfc) THEN
386  irgpfc=irgpc2
387 !
388  DO j=2,inppim
389  irgpmc=lfi%MRGPIM(j,irang)
390 !
391  IF (lfi%MRGPIF(irgpmc).EQ.irgpfc) THEN
392 !
393  IF (.NOT.lfi%LPHASP(irgpmc)) THEN
394 !
395  CALL lfipha_fort &
396 & (lfi, irep,irang,irgpmc,iretin)
397 !
398  IF (iretin.EQ.1) THEN
399  GOTO 903
400  ELSEIF (iretin.EQ.2) THEN
401  GOTO 904
402  ELSEIF (iretin.NE.0) THEN
403  GOTO 1001
404  ENDIF
405 !
406  ENDIF
407 !
408  GOTO 254
409 !
410  ENDIF
411 !
412  ENDDO
413 !
414  inpile=2
415  CALL lfipim_fort &
416 & (lfi, irep,irang,irangm,irgpmc,irgpfc, &
417 & irgps2,inpile,iretin)
418 !
419  IF (iretin.EQ.1) THEN
420  GOTO 903
421  ELSEIF (iretin.EQ.2) THEN
422  GOTO 904
423  ELSEIF (iretin.NE.0) THEN
424  GOTO 1001
425  ENDIF
426 !
427  inppim=max(inppim,irangm)
428 ENDIF
429 !
430 254 CONTINUE
431 !
432 IF (irgps2.NE.irgpfs) THEN
433  irgpfs=irgps2
434 !
435  DO j=2,inppim
436  irgpms=lfi%MRGPIM(j,irang)
437 !
438  IF (lfi%MRGPIF(irgpms).EQ.irgpfs) THEN
439 !
440  IF (.NOT.lfi%LPHASP(irgpms)) THEN
441 !
442  CALL lfipha_fort &
443 & (lfi, irep,irang,irgpms,iretin)
444 !
445  IF (iretin.EQ.1) THEN
446  GOTO 903
447  ELSEIF (iretin.EQ.2) THEN
448  GOTO 904
449  ELSEIF (iretin.NE.0) THEN
450  GOTO 1001
451  ENDIF
452 !
453  ENDIF
454 !
455  GOTO 257
456 !
457  ENDIF
458 !
459  ENDDO
460 !
461  inpile=2
462  CALL lfipim_fort &
463 & (lfi, irep,irang,irangm,irgpms,irgpfs, &
464 & irgpfc,inpile,iretin)
465 !
466  IF (iretin.EQ.1) THEN
467  GOTO 903
468  ELSEIF (iretin.EQ.2) THEN
469  GOTO 904
470  ELSEIF (iretin.NE.0) THEN
471  GOTO 1001
472  ENDIF
473 !
474  inppim=max(inppim,irangm)
475 ENDIF
476 !
477 257 CONTINUE
478 idecdc=ipotzc-1+(irgpfc-1)/inalpp
479 inbarc=min(inbalo-idecal,irgpfc*inalpp)-ipotzc+1
480 idecds=ipotzs-1+(irgpfs-1)/inalpp
481 inbars=min(inbalo,irgpfs*inalpp)-ipotzs+1
482 inbart=min(inbarc,inbars)
483 !
484 DO j=1,inbart
485 lfi%CNOMAR(ixc(idecdc+j,irgpmc))=lfi%CNOMAR(ixc(idecds+j,irgpms))
486 ENDDO
487 !
488 DO j=1,2*inbart
489 lfi%MLGPOS(ixm(2*idecdc+j,irgpmc))= &
490 & lfi%MLGPOS(ixm(2*idecds+j,irgpms))
491 ENDDO
492 !
493 ipotzc=ipotzc+inbart
494 !
495 IF (ipotzs+inbart.LT.iposfe) THEN
496  GOTO 251
497 ELSEIF (iposfe.LT.inbalo) THEN
498  GOTO 220
499 ENDIF
500 !*
501 ! 2.6 - MISE A JOUR DE CERTAINES TABLES.
502 !-----------------------------------------------------------------------
503 !
504 lfi%NBTROU(irang)=lfi%NBTROU(irang)-idecal
505 inbalo=inbalo-idecal
506 lfi%MDES1D(ixm(lfi%JPNALO,irang))=inbalo
507 intppn=(inbalo-1+inalpp)/inalpp
508 lfi%NALDPI(irang)=inbalo-(intppn-1)*inalpp
509 !
510 IF (intppn.NE.intppi) THEN
511 !
512 ! ON A DONC LAISSE DES P.P.I. "PARASITES" EN MEMOIRE.
513 ! A PRIORI CE N'EST PAS GENANT, CAR ON VA BIENTOT RELACHER
514 ! TOUTES CELLES RELATIVES AU FICHIER QUE L'ON TRAITE.
515 ! NEANMOINS IL EST PREFERABLE DE REDEFINIR LE RANG EN MEMOIRE
516 ! DE LA DERNIERE P.P.I. DU FICHIER.
517 !
518  lfi%NPODPI(irang)=irgpmc
519  intppi=intppn
520 ENDIF
521 !
522 300 CONTINUE
523 !**
524 ! 3. - CAS OU IL FAUT RECALCULER LES LONGUEURS EXTREMES DES
525 ! ARTICLES DE DONNEES.
526 !-----------------------------------------------------------------------
527 !
528 IF (.NOT.lfi%LMIMAL(irang)) GOTO 400
529 !*
530 ! 3.1 - EXPLORATION DES P.P.I., PUIS EVENTUELLEMENT DES P.A.I. .
531 !-----------------------------------------------------------------------
532 !
533 ilomin=0
534 ilomax=0
535 irpifn=1
536 inpime=0
537 !
538 IF (lfi%NPODPI(irang).EQ.2) THEN
539  idebex=3
540 ELSE
541  idebex=2
542 ENDIF
543 !
544 DO jnpage=1,intppi
545 !
546 IF (jnpage.LE.inppim) THEN
547 !
548 ! IL S'AGIT D'UNE EXPLORATION EN MEMOIRE ( PAGES D'INDEX ).
549 !
550  irgpim=lfi%MRGPIM(jnpage,irang)
551  irgpif=lfi%MRGPIF(irgpim)
552  inpime=inpime+1
553  iexplo(inpime)=irgpif
554  IF (irgpif.EQ.(irpifn+1)) irpifn=irgpif
555 !
556  IF (.NOT.lfi%LPHASP(irgpim)) THEN
557 !
558  CALL lfipha_fort &
559 & (lfi, irep,irang,irgpim,iretin)
560 !
561  IF (iretin.EQ.1) THEN
562  GOTO 903
563  ELSEIF (iretin.EQ.2) THEN
564  GOTO 904
565  ELSEIF (iretin.NE.0) THEN
566  GOTO 1001
567  ENDIF
568 !
569  ENDIF
570 !
571 ELSE
572 !
573 ! IL S'AGIT D'UNE EXPLORATION "HORS MEMOIRE";
574 ! ON CHERCHE LA PROCHAINE P.A.I. NON EXPLOREE .
575 !
576  IF (jnpage.EQ.inppim+1) irgpif=irpifn
577 !
578 311 CONTINUE
579  irgpif=irgpif+1
580 !
581  DO j=idebex,inpime
582  IF (iexplo(j).EQ.irgpif) GOTO 311
583  ENDDO
584 !
585  ilforc=1
586  inpile=2
587  CALL lfipim_fort &
588 & (lfi, irep,irang,irangm,irgpim,irgpif, &
589 & ilforc,inpile,iretin)
590 !
591  IF (iretin.EQ.1) THEN
592  GOTO 903
593  ELSEIF (iretin.EQ.2) THEN
594  GOTO 904
595  ELSEIF (iretin.NE.0) THEN
596  GOTO 1001
597  ENDIF
598 !
599 ENDIF
600 !
601 inbart=min(inalpp,inbalo-(irgpif-1)*inalpp)
602 !
603 IF (ilomin.EQ.0) THEN
604 !
605  DO j=1,inbart
606 !
607  IF (lfi%CNOMAR(ixc(j,irgpim)).NE.' ') THEN
608  ilomin=lfi%MLGPOS(ixm(2*j-1,irgpim))
609  ilomax=ilomin
610  idebut=j+1
611  GOTO 315
612  ENDIF
613 !
614  ENDDO
615 !
616  cycle
617 ELSE
618  idebut=1
619 ENDIF
620 !
621 315 CONTINUE
622 !
623 DO j=idebut,inbart
624 !
625 IF (lfi%CNOMAR(ixc(j,irgpim)).NE.' ') THEN
626  ilonga=lfi%MLGPOS(ixm(2*j-1,irgpim))
627  ilomin=min(ilonga,ilomin)
628  ilomax=max(ilonga,ilomax)
629 ENDIF
630 !
631 ENDDO
632 !
633 ENDDO
634 !*
635 ! 3.2 - MISE A JOUR DES TABLES CONCERNEES.
636 !-----------------------------------------------------------------------
637 !
638 lfi%MDES1D(ixm(lfi%JPLNAL,irang))=ilomin
639 lfi%MDES1D(ixm(lfi%JPLXAL,irang))=ilomax
640 !
641 400 CONTINUE
642 !**
643 ! 4. - "VIDAGE" SUR FICHIER DES PAGES RESTANT A ECRIRE.
644 !-----------------------------------------------------------------------
645 !*
646 ! 4.1 - PAGES DE *DONNEES* RESTANT A ECRIRE.
647 !-----------------------------------------------------------------------
648 !
649 DO j=0,lfi%JPNPDF-1
650 !
651 IF (lfi%LECRPD(j,irang)) THEN
652 !
653  CALL lfivid_fort &
654 & (lfi, irep,irang,j,itampo(1),iretin)
655 !
656  IF (iretin.EQ.1) THEN
657  GOTO 903
658  ELSEIF (iretin.EQ.2) THEN
659  GOTO 904
660  ELSEIF (iretin.NE.0) THEN
661  GOTO 1001
662  ENDIF
663 !
664 ENDIF
665 !
666 ENDDO
667 !*
668 ! 4.2 - (PAIRES DE) PAGES D'*INDEX* RESTANT A ECRIRE.
669 !-----------------------------------------------------------------------
670 !
671 inppim=lfi%NPPIMM(irang)
672 !
673 DO j=1,inppim
674 irgpim=lfi%MRGPIM(j,irang)
675 irgpif=lfi%MRGPIF(irgpim)
676 CALL lfirec_fort &
677 & (lfi, irgpif,irang,irec)
678 !
679 IF (lfi%LECRPI(irgpim,1)) THEN
680 !
681  IF (j.EQ.lfi%NPODPI(irang).AND.lfi%NALDPI(irang).NE.inalpp) THEN
682 !
683 ! COMPLEMENT DE LA DERNIERE PAGE D'INDEX NOMS AVEC UN NOM
684 ! CONVENTIONNEL.
685 !
686  DO jj=lfi%NALDPI(irang)+1,lfi%JPNXNA*ifactm
687  lfi%CNOMAR(ixc(jj,irgpim))='**FIN D''INDEX**'
688  ENDDO
689 !
690  ENDIF
691 !
692  inaphy=irec
693  CALL lfiecc_fort &
694 & (lfi, irep,knumer,irec, &
695 & lfi%CNOMAR(ixc(1_jplikb ,irgpim)), &
696 & lfi%NBWRIT(irang),ifactm, &
697 & lfi%YLFIC (irang),iretin)
698 !
699  IF (iretin.EQ.1) THEN
700  GOTO 903
701  ELSEIF (iretin.NE.0) THEN
702  GOTO 1001
703  ENDIF
704 !
705  lfi%LECRPI(irgpim,1)=.false.
706 ENDIF
707 !
708 IF (lfi%LECRPI(irgpim,2).AND.lfi%LPHASP(irgpim)) THEN
709 !
710  IF (j.EQ.lfi%NPODPI(irang).AND.lfi%NALDPI(irang).NE.inalpp) THEN
711 !
712 ! COMPLEMENT DE LA DERNIERE PAGE D'INDEX LONGUEUR/POSITION
713 ! AVEC DES ZEROS.
714 !
715  DO jj=2*lfi%NALDPI(irang)+1,ilarph
716  lfi%MLGPOS(ixm(jj,irgpim))=0
717  ENDDO
718 !
719  ENDIF
720 !
721  inaphy=irec+1
722  CALL lfiedo_fort &
723 & (lfi, irep,knumer,irec+1, &
724 & lfi%MLGPOS(ixm(1_jplikb ,irgpim)), &
725 & lfi%NBWRIT(irang),ifactm, &
726 & lfi%YLFIC (irang),iretin)
727 !
728  IF (iretin.EQ.1) THEN
729  GOTO 903
730  ELSEIF (iretin.NE.0) THEN
731  GOTO 1001
732  ENDIF
733 !
734  lfi%LECRPI(irgpim,2)=.false.
735 ENDIF
736 !
737 ENDDO
738 !*
739 ! 4.3 - CAS DE L'ARTICLE DOCUMENTAIRE, SI NECESSAIRE.
740 !-----------------------------------------------------------------------
741 !
742 llecrd=lfi%LMODIF(irang).OR.lfi%NBWRIT(irang).NE.0
743 !
744 IF (llecrd) THEN
745 !
746 ! AU PREALABLE, MISE A JOUR DE CET ARTICLE DOCUMENTAIRE.
747 !
748  iauxil=ixm(lfi%JPNRES,irang)
749  lfi%MDES1D(iauxil)=lfi%MDES1D(iauxil)+lfi%NREESP(irang)
750  iauxil=ixm(lfi%JPNREC,irang)
751  lfi%MDES1D(iauxil)=lfi%MDES1D(iauxil)+lfi%NREECO(irang)
752  iauxil=ixm(lfi%JPNREL,irang)
753  lfi%MDES1D(iauxil)=lfi%MDES1D(iauxil)+lfi%NREELO(irang)
754  iauxil=ixm(lfi%JPNTRU,irang)
755  lfi%MDES1D(iauxil)=lfi%MDES1D(iauxil)+lfi%NBTROU(irang)
756  CALL lfidah_fort &
757 & (lfi, lfi%MDES1D(ixm(lfi%JPDDMG,irang)), &
758 & lfi%MDES1D(ixm(lfi%JPHDMG,irang)))
759  irec=1
760  inaphy=irec
761  CALL lfiedo_fort &
762 & (lfi, irep,knumer,irec, &
763 & lfi%MDES1D(ixm(1_jplikb ,irang)), &
764 & lfi%NBWRIT(irang),ifactm, &
765 & lfi%YLFIC (irang),iretin)
766 !
767  IF (iretin.EQ.1) THEN
768  GOTO 903
769  ELSEIF (iretin.NE.0) THEN
770  GOTO 1001
771  ENDIF
772 !
773 ENDIF
774 !**
775 ! 5. - FERMETURE EFFECTIVE (*CLOSE*) DU FICHIER.
776 !-----------------------------------------------------------------------
777 !
778 inaldo=inbalo-lfi%MDES1D(ixm(lfi%JPNTRU,irang))
779 inaphy=0
780 !
781 IF (llsttu) THEN
782  IF (knumer < 0) THEN
783  CALL closec (irep, clsttc)
784  IF (irep /= 0) GOTO 905
785  ELSE
786  CLOSE (unit=knumer,status=clsttc,err=905,iostat=irep)
787  ENDIF
788 ELSE
789 !
790  IF (inaldo.EQ.0) THEN
791 !
792 ! SI ON SE RETROUVE AVEC UN FICHIER "VIDE" ET QUE L'ON N'A PAS DE
793 ! PARAMETRE "STATUS" POUR LE "CLOSE", ON VA ESSAYER DE RELACHER LE
794 ! FICHIER, AFIN DE NE PAS LAISSER TRAINER UN TEL FICHIER "ZOMBIE".
795 ! ( "VIDE" = SANS ARTICLE LOGIQUE DE DONNEES )
796 ! ON N'A PAS DE GARANTIE D'Y ARRIVER, DANS LA MESURE OU ON N'EST
797 ! PAS SUR D'AVOIR DES DROITS D'ACCES SUFFISANTS.
798 !
799  IF (knumer < 0) THEN
800  CALL closec (irep, 'DELETE')
801  IF (irep /= 0) GOTO 511
802  ELSE
803  CLOSE (unit=knumer,status='DELETE',err=511)
804  ENDIF
805  clsttc='DELETE'
806  llsttu=.true.
807  GOTO 600
808  ENDIF
809 !
810 511 CONTINUE
811 !
812 IF (knumer < 0) THEN
813  CALL closec (irep, 'KEEP')
814  IF (irep /= 0) GOTO 905
815 ELSE
816  CLOSE (unit=knumer,err=905,iostat=irep)
817 ENDIF
818 !
819 ENDIF
820 !
821 600 CONTINUE
822 !**
823 ! 6. - IMPRESSION EVENTUELLE DE STATISTIQUES D'UTILISATION.
824 !-----------------------------------------------------------------------
825 !
826 lfi%NDEROP(irang)=9
827 lfi%NDERCO(irang)=irep
828 llimst=lfi%NISTAG.EQ.2.OR.(lfi%NISTAG.EQ.1.AND.lfi%LISTAT(irang))
829 IF (llimst) CALL lfiist_fort &
830 & (lfi, irang,.true.)
831 !**
832 ! 7. - "NETTOYAGE" DES TABLES AYANT PERMIS DE GERER LE FICHIER.
833 ! ( AU MOINS CELLES AYANT UN CARACTERE "GLOBAL"; A NOTER
834 ! TOUTEFOIS QU'ON NE TOUCHE PAS AUX CARACTERISTIQUES DES
835 ! PAGES D'INDEX PREAFFECTEES )
836 !-----------------------------------------------------------------------
837 !
838  IF (lfi%LMULTI) CALL lfiver_fort &
839 & (lfi, lfi%VERGLA,'ON')
840 llverg=lfi%LMULTI
841 !
842 DO j=2,min(inppim,lfi%JPNPIA)
843 irgpim=lfi%MRGPIM(j,irang)
844 !
845 DO jr=irgpim,irgpim+ifactm-1
846 lfi%MRGPIF(jr)=lfi%JPNIL
847 ENDDO
848 !
849 ENDDO
850 !
851 DO j=lfi%JPNPIA+1,inppim
852 irgpim=lfi%MRGPIM(j,irang)
853 !
854 DO jr=irgpim,irgpim+ifactm-1
855 lfi%MCOPIF(jr)=lfi%JPNIL
856 lfi%MRGPIF(jr)=lfi%JPNIL
857 ENDDO
858 !
859 ENDDO
860 !
861 lfi%NPISAF=lfi%NPISAF-max(0_jplikb ,(inppim-lfi%JPNPIA)*ifactm)
862 !
863 DO jr=irang,irang+ifactm-1
864 lfi%NUMERO(jr)=lfi%JPNIL
865 ENDDO
866 !
867 DO j=1,lfi%NBFIOU
868 !
869 IF (lfi%NUMIND(j).EQ.irang) THEN
870  iposnu=j
871  GOTO 707
872 ENDIF
873 !
874 ENDDO
875 !
876 irep=-16
877 GOTO 1001
878 !
879 707 CONTINUE
880 !
881 lfi%NBFIOU=lfi%NBFIOU-1
882 lfi%NFACTM=lfi%NFACTM-ifactm
883 !
884 DO j=iposnu,lfi%NBFIOU
885 lfi%NUMIND(j)=lfi%NUMIND(j+1)
886 ENDDO
887 !*
888 ! 7.1 - ASPECTS SPECIFIQUES AUX TABLES D'IMPORT/EXPORT.
889 !-----------------------------------------------------------------------
890 !
891 IF (lfi%NEXPOR(irang).GT.0.OR.lfi%NIMPOR(irang).GT.0) THEN
892  iranie=max(lfi%NEXPOR(irang),lfi%NIMPOR(irang))
893  inimes=ixnims(irang)
894 !
895  IF (inimes.GE.1) THEN
896  WRITE (unit=clmess,fmt='(''KNUMER='',I3, &
897 & '', ATTENTION: IMPORT/EXPORT NON TERMINE'')') knumer
898  CALL lfiems_fort &
899 & (lfi, knumer,inimes,irep,.false., &
900 & clmess,clnspr,clacti)
901  ENDIF
902 !
903  DO j=1,lfi%NUIMEX
904 !
905  IF (lfi%NINIEX(j).EQ.iranie) THEN
906  iposnu=j
907  GOTO 712
908  ENDIF
909 !
910  ENDDO
911 !
912  irep=-16
913  GOTO 1001
914 !
915 712 CONTINUE
916 !
917  lfi%MNUIEX(irang)=lfi%JPNIL
918  lfi%NUIMEX=lfi%NUIMEX-1
919 !
920  DO j=iposnu,lfi%NUIMEX
921  lfi%NINIEX(j)=lfi%NINIEX(j+1)
922  ENDDO
923 !
924 ENDIF
925 !
926  IF (lfi%LMULTI) THEN
927  CALL lfiver_fort &
928 & (lfi, lfi%VERRUE(irang),'OFF')
929  CALL lfiver_fort &
930 & (lfi, lfi%VERRUE(irang),'REL')
931  ENDIF
932 !
933 llverf=.false.
934 irep=irepx
935 GOTO 1001
936 !**
937 ! 9. - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
938 !-----------------------------------------------------------------------
939 !
940 903 CONTINUE
941 clacti='WRITE'
942 GOTO 909
943 !
944 904 CONTINUE
945 clacti='READ'
946 GOTO 909
947 !
948 905 CONTINUE
949 clacti='CLOSE'
950 !
951 909 CONTINUE
952 IF (inaphy.NE.0) lfi%NUMAPH(irang)=inaphy
953 !
954 ! AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
955 !
956 irep=abs(irep)
957 !**
958 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
959 ! VIA LE SOUS-PROGRAMME "LFIEMS" .
960 !-----------------------------------------------------------------------
961 !
962 1001 CONTINUE
963 krep=irep
964 llfata=llmoer(irep,irang)
965 !
966 IF (llfata) THEN
967  inimes=2
968 ELSE
969  inimes=ixnims(irang)
970 ENDIF
971 !
972  IF (llverf) CALL lfiver_fort &
973 & (lfi, lfi%VERRUE(irang),'OFF')
974  IF (llverg) CALL lfiver_fort &
975 & (lfi, lfi%VERGLA,'OFF')
976 !
977 IF (.NOT.llfata.AND.inimes.EQ.0) THEN
978  IF (lhook) CALL dr_hook('LFIFER_FORT',1,zhook_handle)
979  RETURN
980 ENDIF
981 !
982 IF (inimes.EQ.2) THEN
983  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
984 & '', CDSTTC='''''',A,'''''''')') &
985 & krep,knumer,clsttc(:ilsttu)
986  CALL lfiems_fort &
987 & (lfi, knumer,inimes,irep,llfata, &
988 & clmess,clnspr,clacti)
989 ENDIF
990 !
991 ! LA MESSAGERIE QUI SUIT N'EST PAS EMISE EN CAS D'ERREUR FATALE.
992 !
993 IF (inimes.GE.1.AND.(irep.EQ.0.OR.irep.EQ.-19)) THEN
994  clauxi=' '
995 !
996  IF (lfi%LFRANC) THEN
997  WRITE (unit=clmess,fmt='(''Unite'',I3, &
998 & '' traitee, Fichier'',A)') &
999 & knumer,clauxi
1000  ELSE
1001  WRITE (unit=clmess,fmt='(''Unit'',I3, &
1002 & '' processed, File'',A)') &
1003 & knumer,clauxi
1004  ENDIF
1005 !
1006  idecal=int(index(clmess,clauxi), jplikb)
1007 !
1008  IF (inbalo.EQ.0) THEN
1009 !
1010  IF (lfi%LFRANC) THEN
1011  clmess(idecal+1:)='*VIDE*'//clauxi
1012  ELSE
1013  clmess(idecal+1:)='*EMPTY*'//clauxi
1014  ENDIF
1015 !
1016  idecal=idecal+int(index(clmess(idecal+1:),clauxi), jplikb)
1017  ENDIF
1018 !
1019  IF (lfi%LFRANC) THEN
1020 !
1021  IF (lfi%LNOUFI(irang)) THEN
1022  clmess(idecal+1:)='$CREE$ &'//clauxi
1023  ELSEIF (llecrd) THEN
1024  clmess(idecal+1:)='$MODIFIE$ &'//clauxi
1025  ELSE
1026  clmess(idecal+1:)='non modifie &'//clauxi
1027  ENDIF
1028 !
1029  idecal=idecal+int(index(clmess(idecal+1:),clauxi), jplikb)
1030 !
1031  IF (.NOT.llsttu) THEN
1032  clmess(idecal+1:)='FERME'//clauxi
1033  ELSEIF (clsttc.EQ.'KEEP') THEN
1034  clmess(idecal+1:)='GARDE'//clauxi
1035  ELSE
1036  clmess(idecal+1:)='*RELACHE*'//clauxi
1037  ENDIF
1038 !
1039  IF (lfi%LNOUFI(irang).OR.llecrd) THEN
1040  idecal=idecal+int(index(clmess(idecal+1:),clauxi), jplikb)
1041  WRITE (unit=clmess(idecal+1:), &
1042 & fmt='(''a'',I9.6,''_'',I6.6, &
1043 & '','',I7,'' Articles de donnees,'',I9,'' mots en tout'')') &
1044 & lfi%MDES1D(ixm(lfi%JPDDMG,irang)), &
1045 & lfi%MDES1D(ixm(lfi%JPHDMG,irang)), &
1046 & inaldo,ilarph*lfi%MDES1D(ixm(lfi%JPNAPH,irang))
1047  ENDIF
1048 !
1049  ELSE
1050 !
1051  IF (lfi%LNOUFI(irang)) THEN
1052  clmess(idecal+1:)='$CREATED$ &'//clauxi
1053  ELSEIF (llecrd) THEN
1054  clmess(idecal+1:)='$MODIFIED$ &'//clauxi
1055  ELSE
1056  clmess(idecal+1:)='not modified &'//clauxi
1057  ENDIF
1058 !
1059  idecal=idecal+int(index(clmess(idecal+1:),clauxi), jplikb)
1060 !
1061  IF (.NOT.llsttu) THEN
1062  clmess(idecal+1:)='CLOSED'//clauxi
1063  ELSEIF (clsttc.EQ.'KEEP') THEN
1064  clmess(idecal+1:)='KEPT'//clauxi
1065  ELSE
1066  clmess(idecal+1:)='*RELEASED*'//clauxi
1067  ENDIF
1068 !
1069  IF (lfi%LNOUFI(irang).OR.llecrd) THEN
1070  idecal=idecal+int(index(clmess(idecal+1:),clauxi), jplikb)
1071  WRITE (unit=clmess(idecal+1:),fmt='(''at'',I9.6,''_'', &
1072 & I6.6,'','',I7,'' data Records,'',I9,'' words for a whole'')') &
1073 & lfi%MDES1D(ixm(lfi%JPDDMG,irang)), &
1074 & lfi%MDES1D(ixm(lfi%JPHDMG,irang)), &
1075 & inaldo,ilarph*lfi%MDES1D(ixm(lfi%JPNAPH,irang))
1076  ENDIF
1077 !
1078  ENDIF
1079 !
1080  CALL lfiems_fort &
1081 & (lfi, knumer,inimes,irep,.false., &
1082 & clmess,clnspr,clacti)
1083 !
1084  IF (lfi%LFRANC) THEN
1085  inlnom=min(lfi%NLNOMF(irang),lfi%JPLFIX, &
1086 & int(len(clmess), jplikb)-6)
1087  clmess='Nom='''//lfi%CNOMFI(irang)(1:inlnom)//''''
1088  ELSE
1089  inlnom=min(lfi%NLNOMF(irang),lfi%JPLFIX, &
1090 & int(len(clmess), jplikb)-7)
1091  clmess='Name='''//lfi%CNOMFI(irang)(1:inlnom)//''''
1092  ENDIF
1093 !
1094  CALL lfiems_fort &
1095 & (lfi, knumer,inimes,irep,.false., &
1096 & clmess,clnspr,clacti)
1097 !
1098  IF (lfi%CNOMSY(irang)(1:lfi%NLNOMS(irang)).NE. &
1099 & lfi%CNOMFI(irang)(1:lfi%NLNOMF(irang))) THEN
1100 !
1101  IF (lfi%LFRANC) THEN
1102  inlnom=min(lfi%NLNOMS(irang),lfi%JPLFIX, &
1103 & int(len(clmess), jplikb)-14)
1104  clmess='Nom SYSTEME='''// &
1105 & lfi%CNOMSY(irang)(1:inlnom)//''''
1106  ELSE
1107  inlnom=min(lfi%NLNOMS(irang),lfi%JPLFIX, &
1108 & int(len(clmess), jplikb)-14)
1109  clmess='SYSTEM Name='''// &
1110 & lfi%CNOMSY(irang)(1:inlnom)//''''
1111  ENDIF
1112 !
1113  CALL lfiems_fort &
1114 & (lfi, knumer,inimes,irep,.false., &
1115 & clmess,clnspr,clacti)
1116  ENDIF
1117 !
1118 ENDIF
1119 !
1120 IF (lhook) CALL dr_hook('LFIFER_FORT',1,zhook_handle)
1121 
1122 CONTAINS
1123 
1124 #include "lficom2.ixc.h"
1125 #include "lficom2.ixm.h"
1126 #include "lficom2.ixnims.h"
1127 #include "lficom2.llmoer.h"
1128 
1129 SUBROUTINE closec (KREP, CDSTTC)
1130 USE parkind1, ONLY : jpim
1131 
1132 INTEGER (KIND=JPLIKB) KREP
1133 CHARACTER (LEN=*) CDSTTC
1134 
1135 INTEGER (KIND=JPIM) IREP4
1136 
1137 krep=0
1138 
1139 CALL fi_fclose (irep4, lfi%YLFIC (irang)%N_C_FPDESC)
1140 IF (irep4 /= 0) THEN
1141  CALL fi_errno (irep4)
1142  krep=irep4
1143 ENDIF
1144 
1145 IF (cdsttc .EQ. 'DELETE') CALL fi_unlink (irep4, trim(lfi%CNOMFI(irang)))
1146 
1147 lfi%YLFIC (irang)%N_C_FPDESC = 0
1148 lfi%YLFIC (irang)%N_C_OFFSET = 0
1149 lfi%YLFIC (irang)%L_C_BTSWAP = .false.
1150 NULLIFY (lfi%YLFIC (irang)%CNOMFI)
1151 
1152 END SUBROUTINE closec
1153 
1154 END SUBROUTINE lfifer_fort
1155 
1156 
1157 
1158 ! Oct-2012 P. Marguinaud 64b LFI
1159 SUBROUTINE lfifer64 &
1160 & (krep, knumer, cdsttc)
1161 USE lfimod, ONLY : lfi => lficom_default, &
1164 USE lfi_precision
1165 IMPLICIT NONE
1166 ! Arguments
1167 INTEGER (KIND=JPLIKB) KREP ! OUT
1168 INTEGER (KIND=JPLIKB) KNUMER ! IN
1169 CHARACTER (LEN=*) CDSTTC ! IN
1170 
1171 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
1172 
1173 CALL lfifer_fort &
1174 & (lfi, krep, knumer, cdsttc)
1175 
1176 END SUBROUTINE lfifer64
1177 
1178 SUBROUTINE lfifer &
1179 & (krep, knumer, cdsttc)
1180 USE lfimod, ONLY : lfi => lficom_default, &
1183 USE lfi_precision
1184 IMPLICIT NONE
1185 ! Arguments
1186 INTEGER (KIND=JPLIKM) KREP ! OUT
1187 INTEGER (KIND=JPLIKM) KNUMER ! IN
1188 CHARACTER (LEN=*) CDSTTC ! IN
1189 
1190 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
1191 
1192 CALL lfifer_mt &
1193 & (lfi, krep, knumer, cdsttc)
1194 
1195 END SUBROUTINE lfifer
1196 
1197 SUBROUTINE lfifer_mt &
1198 & (lfi, krep, knumer, cdsttc)
1199 USE lfimod, ONLY : lficom
1200 USE lfi_precision
1201 IMPLICIT NONE
1202 ! Arguments
1203 type(lficom) lfi ! INOUT
1204 INTEGER (KIND=JPLIKM) KREP ! OUT
1205 INTEGER (KIND=JPLIKM) KNUMER ! IN
1206 CHARACTER (LEN=*) CDSTTC ! IN
1207 ! Local integers
1208 INTEGER (KIND=JPLIKB) IREP ! OUT
1209 INTEGER (KIND=JPLIKB) INUMER ! IN
1210 ! Convert arguments
1211 
1212 inumer = int( knumer, jplikb)
1213 
1214 CALL lfifer_fort &
1215 & (lfi, irep, inumer, cdsttc)
1216 
1217 krep = int( irep, jplikm)
1218 
1219 END SUBROUTINE lfifer_mt
1220 
1221 !INTF KREP OUT
1222 !INTF KNUMER IN
1223 !INTF CDSTTC IN
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine lfiecc_fort(LFI, KREP, KNUMER, KREC, CDTAB, KNBECR, KFACTM, YDFIC, KRETIN)
Definition: lfiecc.F90:6
integer, parameter jplikb
integer, parameter jpim
Definition: parkind1.F90:13
subroutine lfifer(KREP, KNUMER, CDSTTC)
Definition: lfifer.F90:1180
subroutine lfirec_fort(LFI, KRGPIF, KRANG, KREC)
Definition: lfirec.F90:5
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
subroutine lfiist_fort(LFI, KRANG, LDAPFE)
Definition: lfiist.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine closec(KREP, CDSTTC)
Definition: lfifer.F90:1130
subroutine lfidah_fort(LFI, KDATE, KHEURE)
Definition: lfidah.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
subroutine lfifer_mt(LFI, KREP, KNUMER, CDSTTC)
Definition: lfifer.F90:1199
subroutine lfifer64(KREP, KNUMER, CDSTTC)
Definition: lfifer.F90:1161
integer, parameter jplikm
subroutine lfifer_fort(LFI, KREP, KNUMER, CDSTTC)
Definition: lfifer.F90:7
subroutine lfiems_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:7
subroutine lfivid_fort(LFI, KREP, KRANG, KNUMPD, KTAMPO, KRETIN)
Definition: lfivid.F90:5
Definition: lfimod.F90:1
ERROR in index
Definition: ecsort_shared.h:90
subroutine lfiedo_fort(LFI, KREP, KNUMER, KREC, KTAB, KNBECR, KFACTM, YDFIC, KRETIN)
Definition: lfiedo.F90:6
subroutine lfipim_fort(LFI, KREP, KRANG, KRANGM, KRGPIM, KRGPIF, KRGFOR, KNPILE, KRETIN)
Definition: lfipim.F90:6