SURFEX v8.1
General documentation of Surfex
lfipim.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe LFI
3 SUBROUTINE lfipim_fort &
4 & (lfi, krep ,krang, krangm, krgpim, &
5 & krgpif, krgfor, knpile, kretin )
6 USE lfimod, ONLY : lficom
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! SOUS-PROGRAMME *INTERNE* DU LOGICIEL DE FICHIERS INDEXES LFI
13 ! GESTION DES REQUETES D'ALLOCATION D'UNE PAIRE DE PAGES D'INDEX
14 ! SUPPLEMENTAIRE ( APPELS PAR LFIECR, LFILEC... ), ET LECTURE
15 ! EVENTUELLE SUR FICHIER D'ARTICLE(S) D'INDEX CORRESPONDANT(S) .
16 !**
17 ! ARGUMENTS : KREP (SORTIE) ==> CODE-REPONSE DU SOUS-PROGRAMME;
18 ! KRANG (ENTREE) ==> RANG ( DANS LA TABLE *LFI%NUMERO* )
19 ! DE L'UNITE LOGIQUE CONCERNEE;
20 ! KRANGM (SORTIE) ==> RANG ( DANS LA TABLE *LFI%MRGPIM* )
21 ! DE LA P.P.I. AFFECTEE;
22 ! ( ZERO SI PAS DE P.P.I. ALLOUEE )
23 ! KRGPIM (SORTIE) ==> RANG ( DANS LES TABLES DECRIVANT
24 ! LES PAIRES DE PAGES D'INDEX ) DE
25 ! LA P.P.I. SUPPLEMENTAIRE ALLOUEE,
26 ! ZERO SI PAS DE P.P.I. ALLOUEE;
27 ! KRGPIF (ENTREE) ==> RANG ( DANS LE FICHIER ) DE LA
28 ! P.P.I. SUPPLEMENTAIRE;
29 ! KRGFOR (ENTREE) ==> RANG ( DANS LE FICHIER ) D'UNE
30 ! EVENTUELLE P.P.I. A CONSERVER;
31 ! KNPILE (ENTREE) ==> NOMBRE D'ARTICLES D'INDEX A LIRE
32 ! ( 0==>RIEN, 1==>NOMS, 2==>LES 2 );
33 ! KRETIN (SORTIE) ==> CODE-RETOUR INTERNE.
34 !
35 ! SI L'ON NE TROUVE PLUS DE P.P.I. LIBRE, ON "RECYCLE" LA P.P.I.
36 ! ASSOCIEE AU PLUS GRAND RANG DANS LA TABLE *LFI%MRGPIM*,
37 ! EXCEPTION FAITE DE LA PREMIERE, DE LA DERNIERE, ET DE CELLE
38 ! DE RANG *KRGFOR* DANS LE FICHIER,
39 ! CECI POUR ASSURER QUE LORS D'UNE EXPLORATION DES P.P.I.,
40 ! ON NE REUTILISE PAS L'EMPLACEMENT D'UNE P.P.I. QU'ON A DEJA
41 ! EXPLOREE, OU QU'ON DOIT GARDER POUR LA LOGIQUE DU TRAITEMENT.
42 ! LE "FORCAGE" N'EST EFFECTIF QUE SI LE RANG DANS LE FICHIER EST
43 ! BIEN CELUI D'UNE P.P.I, MAIS NI LA PREMIERE NI LA DERNIERE
44 ! EN RANG DANS LE FICHIER.
45 !*
46 ! LE VERROUILLAGE EVENTUEL DE L'UNITE LOGIQUE DE RANG *KRANG*
47 ! DOIT AVOIR ETE FAIT EN AMONT, AVANT L'APPEL A CE SOUS-PROGRAMME.
48 !
49 ! Noter que la P.P.I. peut etre "multiple", et qu'elle occupe
50 ! autant de P.P.I. "elementaires" (de longueur LFI%JPLARD par page) ,
51 ! ces P.P.I. "elementaires" etant necessairement consecutives...
52 ! Dans ce cas KRGPIM designe le rang de la PREMIERE P.P.I. ele-
53 ! mentaire concernee.
54 !
55 !
56 TYPE(lficom) :: LFI
57 INTEGER (KIND=JPLIKB) KREP ,KRANG, KRANGM, KRGPIM
58 INTEGER (KIND=JPLIKB) KRGPIF, KRGFOR, KNPILE
59 INTEGER (KIND=JPLIKB) IRANG, INUMER, INPPIM, IFACTM
60 INTEGER (KIND=JPLIKB) IRGPIM, IRANGM, ICOMPT, J
61 INTEGER (KIND=JPLIKB) JR, IREC, INAPHY, IRETOU
62 INTEGER (KIND=JPLIKB) INIMES, KRETIN, IRETIN
63 !
64 LOGICAL LLAUX1, LLAUX2, LLADON
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('LFIPIM_FORT',0,zhook_handle)
77 clacti=''
78 krangm=0
79 krgpim=0
80 iretou=0
81 inaphy=0
82 lladon=.false.
83 !
84 IF (krang.LE.0.OR.krang.GT.lfi%JPNXFI.OR.krgpif.LE.0.OR. &
85 & knpile.LT.0.OR.knpile.GT.2) THEN
86  krep=-16
87  GOTO 1001
88 ELSE
89  irang=krang
90  inumer=lfi%NUMERO(krang)
91 !
92  IF (inumer.LT.0) THEN
93  krep=-16
94  GOTO 1001
95  ENDIF
96 !
97 ENDIF
98 !
99 inppim=lfi%NPPIMM(irang)
100 ifactm=lfi%MFACTM(irang)
101 !**
102 ! 2. - RECHERCHE D'UNE P.P.I. SUPPLEMENTAIRE .
103 !-----------------------------------------------------------------------
104 !
105 IF (inppim.LE.0) THEN
106  krep=-16
107  GOTO 1001
108 ELSEIF (inppim.LT.lfi%JPNPIA) THEN
109 !*
110 ! 2.1 - CAS OU L'UNE DES P.P.I. PREALLOUEES AU FICHIER EST
111 ! DISPONIBLE.
112 !-----------------------------------------------------------------------
113 !
114  irgpim=irang+inppim*lfi%JPNXFI
115  inppim=inppim+1
116  irangm=inppim
117  lfi%NPPIMM(irang)=inppim
118  GOTO 300
119 ELSEIF (lfi%JPNPIS.GT.0) THEN
120 !*
121 ! 2.2 - PLUS DE P.P.I. PREALLOUEE LIBRE; RECHERCHE DANS
122 ! LES P.P.I. ALLOUABLES DYNAMIQUEMENT.
123 !-----------------------------------------------------------------------
124 !
125 ! VERROUILLAGE EVENTUEL POUR L'UTILISATION DE *LFI%NPISAF*
126 !
127  IF (lfi%LMULTI) CALL lfiver_fort &
128 & (lfi, lfi%VERGLA,'ON')
129 !
130  IF (lfi%NPISAF.LT.lfi%JPNPIS) THEN
131  icompt=0
132 !
133  DO j=lfi%JPNPIA*lfi%JPNXFI+1,lfi%JPNXPI
134 !
135  IF (lfi%MCOPIF(j).EQ.lfi%JPNIL) THEN
136  icompt=icompt+1
137 !
138  IF (icompt.EQ.ifactm) THEN
139  irgpim=j+1-ifactm
140  GOTO 222
141  ENDIF
142 !
143  ELSE
144  icompt=0
145  ENDIF
146 !
147  ENDDO
148 !
149 ! Chou blanc... on deverrouille globalement.
150 !
151  IF (lfi%LMULTI) CALL lfiver_fort &
152 & (lfi, lfi%VERGLA,'OFF')
153  IF (ifactm.GT.1) GOTO 230
154 !
155 ! CAS D'INCOHERENCE DES TABLES DU LOGICIEL !
156 !
157  krep=-16
158  GOTO 1001
159 !
160 222 CONTINUE
161 !
162 ! UNE P.P.I. "LIBRE", eventuellement Multiple, A ETE TROUVEE.
163 !
164  lfi%NPISAF=lfi%NPISAF+ifactm
165 !
166  DO jr=irgpim,irgpim+ifactm-1
167  lfi%MCOPIF(jr)=irang
168  ENDDO
169 !
170 ! ON DEVERROUILLE "GLOBALEMENT", CAR CE QUI SUIT ALORS
171 ! NE CONCERNE PLUS QUE LE FICHIER.
172 !
173  IF (lfi%LMULTI) CALL lfiver_fort &
174 & (lfi, lfi%VERGLA,'OFF')
175  inppim=inppim+1
176  irangm=inppim
177  lfi%NPPIMM(irang)=inppim
178  lfi%MRGPIM(inppim,irang)=irgpim
179  GOTO 300
180 !
181  ELSE
182 !
183 ! CAS OU IL N'Y A PLUS DE P.P.I. "LIBRE" .
184 ! ON DEVERROUILLE "GLOBALEMENT", CAR CE QUI SUIT ALORS
185 ! NE CONCERNE PLUS QUE LE FICHIER.
186 !
187  IF (lfi%LMULTI) CALL lfiver_fort &
188 & (lfi, lfi%VERGLA,'OFF')
189  ENDIF
190 !
191 ENDIF
192 !
193 230 CONTINUE
194 !*
195 ! 2.3 - PLUS DE P.P.I. ( PREALLOUEE OU NON ) LIBRE.
196 !-----------------------------------------------------------------------
197 !
198 ! ON VA DONC RECYCLER LA P.P.I. ALLOUEE AU FICHIER
199 ! QUI SOIT ASSOCIEE AU PLUS GRAND RANG DANS LA TABLE *LFI%MRGPIM*,
200 ! TOUT EN N'ETANT NI LA PREMIERE, NI LA DERNIERE, NI CELLE DE
201 ! RANG *KRGFOR* DANS LE FICHIER .
202 ! C'est pour etre sur de trouver une telle page que l'on a besoin
203 ! d'avoir LFI%JPNPIA superieur ou egal a 4.
204 !
205 irangm=inppim
206 !
207 231 CONTINUE
208 !
209 IF (irangm.EQ.lfi%NPODPI(irang).OR. &
210 & lfi%MRGPIF(lfi%MRGPIM(irangm,irang)).EQ.krgfor) THEN
211  irangm=irangm-1
212  GOTO 231
213 ENDIF
214 !
215 irgpim=lfi%MRGPIM(irangm,irang)
216 llaux1=lfi%LECRPI(irgpim,1)
217 llaux2=lfi%LECRPI(irgpim,2).AND.lfi%LPHASP(irgpim)
218 !
219 ! SI NECESSAIRE, ON REECRIT SUR LE FICHIER
220 ! LA OU LES PAGES D'INDEX qu'on va reutiliser.
221 !
222 IF (llaux1.OR.llaux2) THEN
223  CALL lfirec_fort &
224 & (lfi, lfi%MRGPIF(irgpim),irang,irec)
225 !
226  IF (llaux1) THEN
227  inaphy=irec
228  CALL lfiecc_fort &
229 & (lfi, krep,inumer,irec, &
230 & lfi%CNOMAR(ixc(1_jplikb ,irgpim)), &
231 & lfi%NBWRIT(irang),ifactm, &
232 & lfi%YLFIC (irang),iretin)
233 !
234  IF (iretin.NE.0) THEN
235  GOTO 903
236  ENDIF
237 !
238  inaphy=0
239  ENDIF
240 !
241  IF (llaux2) THEN
242  CALL lfiecx_fort &
243 & (lfi, krep,irang,irec+1, &
244 & lfi%MLGPOS(ixm(1_jplikb ,irgpim)), &
245 & lladon, iretin)
246 !
247  IF (iretin.EQ.1) THEN
248  GOTO 903
249  ELSEIF (iretin.EQ.2) THEN
250  GOTO 904
251  ELSEIF (iretin.NE.0) THEN
252  GOTO 1001
253  ENDIF
254 !
255  ENDIF
256 !
257 ENDIF
258 !
259 300 CONTINUE
260 !**
261 ! 3. - MISE A JOUR DE TABLES, NE NECESSITANT PAS LA PROTECTION DU
262 ! VERROU GLOBAL; A PARTIR DU MOMENT OU *LFI%MCOPIF* A ETE MIS A
263 ! JOUR, LE SIMPLE VERROUILLAGE DE L'UNITE LOGIQUE SUFFIT.
264 ! ( ET EST CENSE AVOIR ETE FAIT DANS LE SOUS-PROGRAMME
265 ! APPELANT, EN MODE MULTI )
266 !-----------------------------------------------------------------------
267 !
268 lfi%LECRPI(irgpim,1)=.false.
269 lfi%LECRPI(irgpim,2)=.false.
270 lfi%LPHASP(irgpim)=.false.
271 lfi%MRGPIF(irgpim)=krgpif
272 !**
273 ! 4. - MISE EN MEMOIRE EVENTUELLE D'ARTICLE(S) D'INDEX
274 ! CORRESPONDANT A LA NOUVELLE P.P.I.
275 !-----------------------------------------------------------------------
276 !
277 IF (knpile.NE.0) THEN
278  CALL lfirec_fort &
279 & (lfi, krgpif,irang,irec)
280  inaphy=irec
281  CALL lfilcc_fort &
282 & (lfi, krep,inumer,irec, &
283 & lfi%CNOMAR(ixc(1_jplikb ,irgpim)), &
284 & lfi%NBREAD(irang),ifactm, &
285 & lfi%YLFIC (irang),iretin)
286 !
287  IF (iretin.NE.0) THEN
288  GOTO 904
289  ENDIF
290 !
291  IF (knpile.EQ.2) THEN
292 !
293 ! PHASAGE DIRECT, SANS APPEL AU SOUS-PROGRAMME "LFIPHA" .
294 !
295  inaphy=irec+1
296  CALL lfildo_fort &
297 & (lfi, krep,inumer,irec+1, &
298 & lfi%MLGPOS(ixm(1_jplikb ,irgpim)), &
299 & lfi%NBREAD(irang),ifactm, &
300 & lfi%YLFIC (irang),iretin)
301 !
302  IF (iretin.NE.0) THEN
303  GOTO 904
304  ENDIF
305 !
306  lfi%LPHASP(irgpim)=.true.
307 !
308  ENDIF
309 !
310 ENDIF
311 !
312 krep=0
313 krangm=irangm
314 krgpim=irgpim
315 GOTO 1001
316 !**
317 ! 9. - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
318 !-----------------------------------------------------------------------
319 !
320 903 CONTINUE
321 iretou=1
322 clacti='WRITE'
323 GOTO 909
324 !
325 904 CONTINUE
326 !
327 ! "DESALLOCATION" DE LA P.P.I. SUITE A ERREUR EN LECTURE
328 ! DE L'ARTICLE D'INDEX "NOMS".
329 !
330 IF (inppim.GT.lfi%JPNPIA) THEN
331  IF (lfi%LMULTI) CALL lfiver_fort &
332 & (lfi, lfi%VERGLA,'ON')
333  lfi%NPISAF=lfi%NPISAF-ifactm
334 !
335  DO jr=irgpim,irgpim+ifactm-1
336  lfi%MCOPIF(jr)=lfi%JPNIL
337  ENDDO
338 !
339  IF (lfi%LMULTI) CALL lfiver_fort &
340 & (lfi, lfi%VERGLA,'OFF')
341 ENDIF
342 !
343 lfi%NPPIMM(irang)=inppim-1
344 iretou=2
345 clacti='READ'
346 !
347 909 CONTINUE
348 !
349 ! ON FORCE LE CODE-REPONSE A ETRE POSITIF.
350 !
351 krep=abs(krep)
352 IF (inaphy.NE.0) lfi%NUMAPH(irang)=inaphy
353 !**
354 ! 10. - PHASE TERMINALE : MESSAGERIE INTERNE EVENTUELLE,
355 ! VIA LE SOUS-PROGRAMME "LFIEMS", PUIS RETOUR.
356 !-----------------------------------------------------------------------
357 !
358 1001 CONTINUE
359 llfata=llmoer(krep,krang)
360 !
361 IF (krep.EQ.0) THEN
362  kretin=0
363 ELSEIF (krep.GT.0) THEN
364  kretin=iretou
365 ELSE
366  kretin=3
367 ENDIF
368 !
369 IF (lfi%LMISOP.OR.llfata) THEN
370  inimes=2
371  clnspr='LFIPIM'
372  WRITE (unit=clmess,fmt='(''KREP='',I5,'', KRANG='',I3, &
373 & '', KRANGM='',I3,'', KRGPIM='',I3,'', KRGPIF='',I4, &
374 & '', KRGFOR='',I4,'', KNPILE='',I2,'', KRETIN='',I2)') &
375 & krep,krang,krangm,krgpim,krgpif,krgfor,knpile,kretin
376  CALL lfiems_fort &
377 & (lfi, inumer,inimes,krep,.false., &
378 & clmess,clnspr,clacti)
379 ENDIF
380 !
381 IF (lhook) CALL dr_hook('LFIPIM_FORT',1,zhook_handle)
382 
383 CONTAINS
384 
385 #include "lficom2.ixc.h"
386 #include "lficom2.ixm.h"
387 #include "lficom2.llmoer.h"
388 
389 END SUBROUTINE lfipim_fort
390 
391 
392 
393 ! Oct-2012 P. Marguinaud 64b LFI
394 SUBROUTINE lfipim64 &
395 & (krep, krang, krangm, krgpim, krgpif, krgfor, &
396 & knpile, kretin)
397 USE lfimod, ONLY : lfi => lficom_default, &
400 USE lfi_precision
401 IMPLICIT NONE
402 ! Arguments
403 INTEGER (KIND=JPLIKB) KREP ! OUT
404 INTEGER (KIND=JPLIKB) KRANG ! IN
405 INTEGER (KIND=JPLIKB) KRANGM ! OUT
406 INTEGER (KIND=JPLIKB) KRGPIM ! OUT
407 INTEGER (KIND=JPLIKB) KRGPIF ! IN
408 INTEGER (KIND=JPLIKB) KRGFOR ! IN
409 INTEGER (KIND=JPLIKB) KNPILE ! IN
410 INTEGER (KIND=JPLIKB) KRETIN ! OUT
411 
412 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
413 
414 CALL lfipim_fort &
415 & (lfi, krep, krang, krangm, krgpim, krgpif, krgfor, &
416 & knpile, kretin)
417 
418 END SUBROUTINE lfipim64
419 
420 SUBROUTINE lfipim &
421 & (krep, krang, krangm, krgpim, krgpif, krgfor, &
422 & knpile, kretin)
423 USE lfimod, ONLY : lfi => lficom_default, &
426 USE lfi_precision
427 IMPLICIT NONE
428 ! Arguments
429 INTEGER (KIND=JPLIKM) KREP ! OUT
430 INTEGER (KIND=JPLIKM) KRANG ! IN
431 INTEGER (KIND=JPLIKM) KRANGM ! OUT
432 INTEGER (KIND=JPLIKM) KRGPIM ! OUT
433 INTEGER (KIND=JPLIKM) KRGPIF ! IN
434 INTEGER (KIND=JPLIKM) KRGFOR ! IN
435 INTEGER (KIND=JPLIKM) KNPILE ! IN
436 INTEGER (KIND=JPLIKM) KRETIN ! OUT
437 
438 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
439 
440 CALL lfipim_mt &
441 & (lfi, krep, krang, krangm, krgpim, krgpif, krgfor, &
442 & knpile, kretin)
443 
444 END SUBROUTINE lfipim
445 
446 SUBROUTINE lfipim_mt &
447 & (lfi, krep, krang, krangm, krgpim, krgpif, krgfor, &
448 & knpile, kretin)
449 USE lfimod, ONLY : lficom
450 USE lfi_precision
451 IMPLICIT NONE
452 ! Arguments
453 type(lficom) lfi ! INOUT
454 INTEGER (KIND=JPLIKM) KREP ! OUT
455 INTEGER (KIND=JPLIKM) KRANG ! IN
456 INTEGER (KIND=JPLIKM) KRANGM ! OUT
457 INTEGER (KIND=JPLIKM) KRGPIM ! OUT
458 INTEGER (KIND=JPLIKM) KRGPIF ! IN
459 INTEGER (KIND=JPLIKM) KRGFOR ! IN
460 INTEGER (KIND=JPLIKM) KNPILE ! IN
461 INTEGER (KIND=JPLIKM) KRETIN ! OUT
462 ! Local integers
463 INTEGER (KIND=JPLIKB) IREP ! OUT
464 INTEGER (KIND=JPLIKB) IRANG ! IN
465 INTEGER (KIND=JPLIKB) IRANGM ! OUT
466 INTEGER (KIND=JPLIKB) IRGPIM ! OUT
467 INTEGER (KIND=JPLIKB) IRGPIF ! IN
468 INTEGER (KIND=JPLIKB) IRGFOR ! IN
469 INTEGER (KIND=JPLIKB) INPILE ! IN
470 INTEGER (KIND=JPLIKB) IRETIN ! OUT
471 ! Convert arguments
472 
473 irang = int( krang, jplikb)
474 irgpif = int( krgpif, jplikb)
475 irgfor = int( krgfor, jplikb)
476 inpile = int( knpile, jplikb)
477 
478 CALL lfipim_fort &
479 & (lfi, irep, irang, irangm, irgpim, irgpif, irgfor, &
480 & inpile, iretin)
481 
482 krep = int( irep, jplikm)
483 krangm = int( irangm, jplikm)
484 krgpim = int( irgpim, jplikm)
485 kretin = int( iretin, jplikm)
486 
487 END SUBROUTINE lfipim_mt
488 
489 !INTF KREP OUT
490 !INTF KRANG IN
491 !INTF KRANGM OUT
492 !INTF KRGPIM OUT
493 !INTF KRGPIF IN
494 !INTF KRGFOR IN
495 !INTF KNPILE IN
496 !INTF KRETIN OUT
subroutine lfipim_mt(LFI, KREP, KRANG, KRANGM, KRGPIM, KRGPIF, KRGFOR, KNPILE, KRETIN)
Definition: lfipim.F90:449
subroutine lfiecc_fort(LFI, KREP, KNUMER, KREC, CDTAB, KNBECR, KFACTM, YDFIC, KRETIN)
Definition: lfiecc.F90:6
integer, parameter jplikb
subroutine lfipim(KREP, KRANG, KRANGM, KRGPIM, KRGPIF, KRGFOR, KNPILE, KRETIN)
Definition: lfipim.F90:423
subroutine lfiecx_fort(LFI, KREP, KRANG, KREC, KZONE, LDADON, KRETIN)
Definition: lfiecx.F90:6
subroutine lfildo_fort(LFI, KREP, KNUMER, KREC, KTAB, KNBLEC, KFACTM, YDFIC, KRETIN)
Definition: lfildo.F90:6
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 lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfilcc_fort(LFI, KREP, KNUMER, KREC, CDTAB, KNBLEC, KFACTM, YDFIC, KRETIN)
Definition: lfilcc.F90:6
subroutine lfipim64(KREP, KRANG, KRANGM, KRGPIM, KRGPIF, KRGFOR, KNPILE, KRETIN)
Definition: lfipim.F90:397
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 lfipim_fort(LFI, KREP, KRANG, KRANGM, KRGPIM, KRGPIF, KRGFOR, KNPILE, KRETIN)
Definition: lfipim.F90:6