SURFEX v8.1
General documentation of Surfex
lfiefr.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 Add FLUSH stdout
4 SUBROUTINE lfiefr_fort &
5 & (lfi, knumer, knimes, kcode, ldfata, &
6 & cdmess, cdnspr, cdacti )
7 USE lfimod, ONLY : lficom
8 USE parkind1, ONLY : jprb
9 USE yomhook , ONLY : lhook, dr_hook
10 USE sdl_mod , ONLY : sdl_srlabort
11 USE lfi_precision
12 IMPLICIT NONE
13 !****
14 ! CE SOUS-PROGRAMME EST CHARGE DE FAIRE L'IMPRESSION DES MESSAGES
15 ! STANDARD EMIS PAR LE LOGICIEL DE FICHIERS INDEXES LFI, EN FAISANT
16 ! SI BESOIN EST L'"ABORT" DU PROGRAMME .
17 ! Les messages lies au mode "mise au point" sont emis directement
18 ! par les sous-programmes concernes.
19 !
20 ! Ce sous-programme est la V.O. (Version Originale, francaise),
21 ! et est appele par le sous-programme "chapeau" LFIEMS.
22 ! Pour la version anglaise, voir LFIENG.
23 ! ( For english version see subroutine LFIENG )
24 !**
25 ! ARGUMENTS : KNUMER ==> Numero eventuel de l'Unite Logique;
26 ! ( tous ( si LFI%JPNIL ==> pas d'Unite Logique )
27 ! d'Entree ) KNIMES ==> Niveau (0,1,2) du Message;
28 ! KCODE ==> Code correspondant a l'action en cause;
29 ! LDFATA ==> Vrai si on doit avorter le programme;
30 ! CDMESS ==> Si KNIMES#0, Message a emettre;
31 ! CDNSPR ==> Nom du sous-programme appelant LFIEMS;
32 ! CDACTI ==> Nom de l'action d'entree/sortie FORTRAN
33 ! si KCODE >0), sinon fourre-tout (!) .
34 !*
35 ! !----------------------------------------------------------------!
36 ! ! TABLE DES VALEURS POSSIBLES DES CODES-REPONSES DU LOGICIEL LFI !
37 ! !----------------------------------------------------------------!
38 !
39 !-----------------------------------------------------------------------
40 ! 0 ==> Aucune erreur n'a ete detectee, tout est OK.
41 !-----------------------------------------------------------------------
42 ! valeur ==> Il s'agit (de la valeur absolue) du code-reponse FORTRAN
43 ! positive d'une instruction OPEN, READ, WRITE, CLOSE ou INQUIRE; pour
44 ! le sens exact voir le manuel de reference du constructeur.
45 !-----------------------------------------------------------------------
46 ! -1 ==> Unite Logique non ouverte pour le logiciel.
47 !-----------------------------------------------------------------------
48 ! -2 ==> Valeur d'un "NIVEAU" hors plage [0-2] .
49 !-----------------------------------------------------------------------
50 ! -3 ==> Option de verrou erronee (s/p a usage interne "LFIVER") .
51 !-----------------------------------------------------------------------
52 ! -4 ==> Changement explicite de mode Multi-Taches avec au moins une
53 ! unite logique ouverte-risque de problemes (s/p "LFIINI") .
54 !-----------------------------------------------------------------------
55 ! -5 ==> Unite Logique deja ouverte (LFIOUV, LFIAFM, LFISFM) .
56 !-----------------------------------------------------------------------
57 ! -6 ==> Pas assez de place dans les tables pour ouvrir l'Unite
58 ! Logique demandee (LFIOUV) .
59 !-----------------------------------------------------------------------
60 ! -7 ==> Argument illicite de "STATUS" pour l'instruction FORTRAN
61 ! "OPEN" (LFIOUV) .
62 !-----------------------------------------------------------------------
63 ! -8 ==> Incompatibilite entre "LDNOMM" et "CDSTTO" (LFIOUV) :
64 ! un fichier de "STATUS" 'OLD' ou 'NEW' doit etre nomme .
65 ! (CE CODE-REPONSE N'A PLUS DE SENS ACTUELLEMENT)
66 !-----------------------------------------------------------------------
67 ! -9 ==> Incompatibilite entre le "STATUS" 'NEW' ou 'OLD' et (respe-
68 ! ctivement) l'existence ou non du fichier (LFIOUV) .
69 !-----------------------------------------------------------------------
70 ! -10 ==> Le fichier considere n'est pas un fichier de type LFI, ou
71 ! ne peut pas etre traite par cette version du logiciel.
72 ! (LFIOUV)
73 !-----------------------------------------------------------------------
74 ! -11 ==> Fichier non ferme apres une modification (LFIOUV): cette
75 ! erreur n'est pas fatale si "LDERFA" est .FALSE., mais alors
76 ! integrite et coherence des donnees ne sont pas garanties.
77 ! Noter qu'une fois qu'un fichier a ce type de probleme, ce
78 ! code-reponse restera meme apres modification ulterieure.
79 !-----------------------------------------------------------------------
80 ! -12 ==> Fichier de "STATUS" 'OLD' mais erreur sur la lecture du
81 ! premier article physique du fichier (LFIOUV) .
82 !-----------------------------------------------------------------------
83 ! -13 ==> Fichier deja ouvert pour une autre unite logique LFI.
84 ! (LFIOUV)
85 !-----------------------------------------------------------------------
86 ! -14 ==> Argument d'appel de type ENTIER incorrect (souvent negatif)
87 !-----------------------------------------------------------------------
88 ! -15 ==> Argument d'appel de type CARACTERE incorrect (longueur).
89 !-----------------------------------------------------------------------
90 ! -16 ==> Incoherence Tables, Fichier, appels s/p internes, logiciel.
91 ! CETTE ERREUR NE PEUT PAS ETRE FILTREE. EST TOUJOURS FATALE.
92 !-----------------------------------------------------------------------
93 ! -17 ==> Trop d'articles logiques sur le fichier pour un de plus.
94 ! (par articles logiques on entend ceux lisibles par l'utili-
95 ! sateur, mais aussi les trous reperes dans l'index... qui
96 ! sont crees lors de reecritures d'articles de donnees ne
97 ! pouvant se faire sur place, et lors de suppression d'arti-
98 ! cles; ces trous peuvent etre "recycles" - LFIECR)
99 !-----------------------------------------------------------------------
100 ! -18 ==> Nom d'Article logique compose uniquement de BLANCS illicite
101 ! (pour le fonctionnement interne du logiciel LFI,
102 ! les trous d'index sont reperes par un nom d'article blanc)
103 !-----------------------------------------------------------------------
104 ! -19 ==> Un fichier ouvert avec le "STATUS" 'SCRATCH' ne peut pas
105 ! etre conserve: "CDSTTC" a 'KEEP' est illicite (LFIFER) .
106 ! si cette erreur n'est pas fatale, alors on execute un
107 ! "CLOSE" FORTRAN sans parametre "STATUS", de la meme maniere
108 ! que lorsque "CDSTTC" n'est ni a 'KEEP' ni a 'DELETE'.
109 !-----------------------------------------------------------------------
110 ! -20 ==> L'article logique demande n'existe pas dans le fichier.
111 ! (LFILEC, LFIREN, LFISUP)
112 !-----------------------------------------------------------------------
113 ! -21 ==> L'article logique demande est PLUS LONG sur le fichier;
114 ! si cette erreur n'est pas fatale, le resultat est une
115 ! lecture PARTIELLE de l'article, a la longueur demandee.
116 ! (LFILAP, LFILAS, LFILEC)
117 !-----------------------------------------------------------------------
118 ! -22 ==> L'article logique demande est PLUS COURT sur le fichier;
119 ! meme si cette erreur n'est pas fatale, AUCUNE LECTURE DE
120 ! DONNEES N'EST FAITE (LFILAP, LFILAS, LFILEC) .
121 !-----------------------------------------------------------------------
122 ! -23 ==> Il n'y a pas ou plus d'article "SUIVANT" a lire (LFILAS) .
123 !-----------------------------------------------------------------------
124 ! -24 ==> La variable caractere donnee en argument d'appel de sortie
125 ! est TROP COURTE pour y stocker le NOM de l'article, meme en
126 ! supprimant d'eventuels caracteres blancs en fin de nom.
127 ! (LFICAP, LFICAS, LFILAP, LFILAS)
128 !-----------------------------------------------------------------------
129 ! -25 ==> Le nouveau nom de l'article logique est (deja) celui d'un
130 ! autre article logique du fichier (LFIREN).
131 !-----------------------------------------------------------------------
132 ! -26 ==> Il n'y a pas ou plus d'article "PRECEDENT" a lire (LFILAP).
133 !-----------------------------------------------------------------------
134 ! -27 ==> Espace CONTIGU insuffisant dans les tables pour gerer le
135 ! fichier "multiple" demande (LFIOUV) .
136 !-----------------------------------------------------------------------
137 ! -28 ==> Facteur multiplicatif (de la longueur d'article physique
138 ! elementaire) trop grand pour la configuration du logiciel.
139 ! (LFIOUV, LFIAFM, LFIFMD)
140 !-----------------------------------------------------------------------
141 ! -29 ==> Pas assez de place dans les tables pour definir le facteur
142 ! multiplicatif a associer a l'Unite Logique (LFIAFM) .
143 !-----------------------------------------------------------------------
144 ! -30 ==> Numero d'Unite Logique FORTRAN illicite.
145 !-----------------------------------------------------------------------
146 ! -31 ==> Numero d'Unite Logique sans facteur multiplicatif predefini
147 ! (LFISFM)
148 !-----------------------------------------------------------------------
149 !
150 !
151 TYPE(lficom) :: LFI
152 INTEGER (KIND=JPLIKB) KNUMER, KNIMES, KCODE, ILDMES
153 INTEGER (KIND=JPLIKB) ILBLAN, INLNOM, INUMER
154 INTEGER (KIND=JPLIKB) ILACTI, ILACT2
155 INTEGER (KIND=JPLIKB) ILNSPR, ILMESU, IJL, J, IJ
156 INTEGER (KIND=JPLIKB) INBALO, ILMESA, INLIGN, IDECAL
157 !
158 LOGICAL LDFATA
159 !
160 CHARACTER(LEN=*) CDNSPR
161 CHARACTER(LEN=6) CLJOLI
162 CHARACTER(LEN=*) CDMESS
163 CHARACTER(LEN=80) CLMESA
164 CHARACTER(LEN=*) CDACTI
165 !
166 CHARACTER(LEN=LFI%JPLMES) CLMESS
167 
168 !**
169 ! 1. - INITIALISATIONS.
170 !-----------------------------------------------------------------------
171 !
172 ! Recherche de la longueur "utile" de l'argument CDACTI.
173 ! (c'est-a-dire sans tenir compte des blancs terminaux eventuels)
174 !
175 REAL(KIND=JPRB) :: ZHOOK_HANDLE
176 IF (lhook) CALL dr_hook('LFIEFR_FORT',0,zhook_handle)
177 ilacti=int(len(trim(cdacti)), jplikb)
178 !
179 ilact2=min(ilacti,lfi%JPNCPN)
180 ilacti=min(ilact2,8_jplikb )
181 ilnspr=min(int(len(cdnspr), jplikb),lfi%JPLSPX)
182 !
183 ! Prefixe (et eventuellement suffixe) pour le(s) message(s).
184 !
185 IF (ldfata) THEN
186  cljoli=' *****'
187 ELSEIF (knimes.EQ.0.OR.kcode.NE.0) THEN
188  cljoli=' */*/*'
189 ELSE
190  cljoli=' /////'
191 ENDIF
192 !
193 IF (knimes.NE.0) THEN
194 !**
195 ! 2. - ON IMPRIME LE MESSAGE PREPARE PAR LE S/P APPELLANT LFIEMS.
196 !-----------------------------------------------------------------------
197 !
198  ilmesu=min(int(len(clmess), jplikb) &
199 & -int(len(cljoli), jplikb) &
200 & -ilnspr-4, &
201 & int(len(cdmess), jplikb))
202  clmess=cljoli//' '//cdnspr(1:ilnspr)//' - '// &
203 & cdmess(1:ilmesu)
204  WRITE (unit=lfi%NULOUT,fmt='(A)') trim(clmess)
205 ENDIF
206 !
207 IF (knimes.EQ.0.OR.ldfata) THEN
208 !**
209 ! 3. - CONSTITUTION D'UN MESSAGE "AD HOC", EN FONCTION DE *KCODE*.
210 !-----------------------------------------------------------------------
211 !
212 ! En preambule, on cherche si l'unite logique concernee correspond
213 ! ou non a une unite logique ouverte pour le logiciel LFI.
214 !
215  IF (knumer.EQ.lfi%JPNIL) THEN
216  ijl=0
217  ELSE
218 !
219  DO j=1,lfi%NBFIOU
220  ijl=lfi%NUMIND(j)
221  IF (knumer.EQ.lfi%NUMERO(ijl)) GOTO 302
222  ENDDO
223 !
224  ijl=0
225  ENDIF
226 !
227 302 CONTINUE
228 !
229  IF (kcode.GT.0) THEN
230 !
231  IF ((cdacti.EQ.'READ'.OR.cdacti.EQ.'WRITE') &
232 & .AND.lfi%NUMAPH(ijl).GT.0) THEN
233  WRITE (unit=clmess,fmt='(''ERREUR "'',A,''"'',I7, &
234 & '',UNITE'',I3,'',NUM.ART'',I6,'',*'',I6, &
235 & '' MOTS'')') cdacti(1:ilacti),kcode,knumer, &
236 & lfi%NUMAPH(ijl), &
237 & lfi%JPLARD*lfi%MFACTM(ijl)
238  ELSE
239  WRITE (unit=clmess, &
240 & fmt='(''ERREUR "'',A,''" FORTRAN, CODE='' &
241 & ,I7,'', UNITE='',I3)') cdacti(1:ilacti),kcode,knumer
242  ENDIF
243 !
244  ELSEIF (kcode.EQ.-1) THEN
245  WRITE (unit=clmess,fmt='(''UNITE LOGIQUE'',I3, &
246 & '' NON OUVERTE POUR LE LOGICIEL LFI'')') knumer
247 !
248  ELSEIF (kcode.EQ.-2) THEN
249 !
250  IF (knumer.EQ.lfi%JPNIL) THEN
251  clmess='PARAMETRE DE NIVEAU "KNIVAU" HORS PLAGE [0-2]'
252  ELSE
253  WRITE (unit=clmess,fmt= &
254 & '(''NIVEAU DE MESSAGERIE HORS PLAGE [0-2], UNITE'',I3)') knumer
255  ENDIF
256 !
257  ELSEIF (kcode.EQ.-3) THEN
258  ildmes=min(8_jplikb ,int(len(cdmess), jplikb))
259  clmess='ACTION '''//cdmess(1:ildmes) &
260 & //''' INCONNUE SUR LES VERROUS'
261 !
262  ELSEIF (kcode.EQ.-4) THEN
263  clmess='CHANGEMENT MODE MULTI-TACHES AVEC ' &
264 & //'UNITE(S) OUVERTE(S)'
265 !
266  ELSEIF (kcode.EQ.-5) THEN
267  WRITE (unit=clmess,fmt='(''UNITE LOGIQUE'',I3, &
268 & '' DEJA OUVERTE POUR LFI - NE DEVRAIT PAS.'')') knumer
269 !
270  ELSEIF (kcode.EQ.-6) THEN
271  WRITE (unit=clmess,fmt='(I3,'' ENTREES,'', &
272 & '' PLUS ASSEZ DE PLACE DANS LES TABLES, UNITE'',I3)') &
273 & lfi%JPNXFI,knumer
274 !
275  ELSEIF (kcode.EQ.-7) THEN
276  WRITE (unit=clmess,fmt='(''STATUS FORTRAN '''''',A, &
277 & '''''' INCONNU, UNITE'',I3)') cdacti(1:ilacti),knumer
278 !
279  ELSEIF (kcode.EQ.-8) THEN
280  WRITE (unit=clmess, &
281 & fmt='(''L''''UNITE'',I3,'' DE STATUS '''''' &
282 &,A,'''''' DOIT AVOIR UN NOM EXPLICITE'')') knumer,cdacti(1:ilacti)
283 !
284  ELSEIF (kcode.EQ.-9) THEN
285 !
286  IF (cdacti.EQ.'OLD') THEN
287  WRITE (unit=clmess,fmt= &
288 &'(''STATUS ''''OLD'''' MAIS LE FICHIER N''''EXISTE PAS, UNITE'', &
289 & I3)') knumer
290  ELSE
291  ilblan=int(index(cdacti(1:ilacti),' '), jplikb)
292  IF (ilblan.GT.1) ilacti=ilblan-1
293  WRITE (unit=clmess,fmt= &
294 &'(''STATUS '''''',A,'''''' MAIS LE FICHIER EXISTE DEJA, UNITE'', &
295 & I3)') cdacti(1:ilacti),knumer
296  ENDIF
297 !
298  ELSEIF (kcode.EQ.-10) THEN
299  WRITE (unit=clmess,fmt='(''INCOMPATIBILITE'', &
300 & '' FICHIER / LOGICIEL, UNITE'',I3)') knumer
301 !
302  ELSEIF (kcode.EQ.-11) THEN
303  WRITE (unit=clmess, &
304 & fmt='(''UNITE'',I3,'' NON FERMEE APRES '', &
305 & ''LA DERNIERE MODIFICATION'')') knumer
306 !
307  ELSEIF (kcode.EQ.-12) THEN
308  WRITE (unit=clmess,fmt='(''UNITE'',I3, &
309 & '' DE STATUS ''''OLD'''' - ERREUR LECTURE PREMIER ARTICLE'')') &
310 & knumer
311 !
312  ELSEIF (kcode.EQ.-13) THEN
313  inlnom=1
314  inumer=lfi%JPNIL
315 !
316  DO j=1,lfi%NBFIOU
317  ij=lfi%NUMIND(j)
318 !
319  IF (cdacti.EQ.lfi%CNOMFI(ij)) THEN
320  inumer=lfi%NUMERO(ij)
321  inlnom=min(lfi%NLNOMF(ij),int(len(clmess), jplikb)-3)
322  GOTO 132
323  ENDIF
324 !
325  ENDDO
326 !
327 132 CONTINUE
328  clmess=' '''//cdacti(1:inlnom)//''''
329  WRITE (unit=lfi%NULOUT,fmt='(A)') trim(clmess)
330  WRITE (unit=clmess,fmt='(''UNITE'',I3,'' - FICHIER '', &
331 & ''DEJA OUVERT POUR L''''UNITE'',I3)') knumer,inumer
332 !
333  ELSEIF (kcode.EQ.-14) THEN
334 !
335  IF (cdnspr.EQ.'LFIECR'.OR.cdnspr.EQ.'LFILEC'.OR. &
336 & cdnspr.EQ.'LFILAS'.OR.cdnspr.EQ.'LFILAP') THEN
337  WRITE (unit=clmess,fmt= &
338 & '(''LONGUEUR D''''ARTICLE INCORRECTE, UNITE'',I3)') knumer
339  ELSEIF (knumer.EQ.lfi%JPNIL) THEN
340  clmess='RANG DANS LA TABLE *LFI%NUMERO* INCORRECT'
341  ELSE
342  WRITE (unit=clmess,fmt= &
343 & '(''ARGUMENT DE TYPE ENTIER INCORRECT, UNITE'',I3)') knumer
344  ENDIF
345 !
346  ELSEIF (kcode.EQ.-15) THEN
347  WRITE (unit=clmess, &
348 & fmt='(''NOM D''''ARTICLE INCORRECT OU '', &
349 & ''TROP LONG, UNITE'',I3)') knumer
350 !
351  ELSEIF (kcode.EQ.-16) THEN
352  WRITE (unit=clmess, &
353 & fmt='(''INCOHERENCE (TABLES, FICHIER, '', &
354 & ''APPELS S/P INT, LOGICIEL), UNITE'',I3)') knumer
355 !
356  ELSEIF (kcode.EQ.-17) THEN
357 !
358  IF (ijl.NE.0) THEN
359  inbalo=lfi%MDES1D(ixm(lfi%JPNALO,ijl))
360  ELSE
361  inbalo=lfi%JPNIL
362  ENDIF
363 !
364  WRITE (unit=clmess, &
365 & fmt='(I6,'' ARTICLES, INDEX PLEIN, UNITE'', &
366 & I3)') inbalo,knumer
367 !
368  ELSEIF (kcode.EQ.-18) THEN
369  WRITE (unit=clmess, &
370 & fmt='(''ARTICLE DE NOM BLANC ILLICITE'', &
371 & '', UNITE'',I3)') knumer
372 !
373  ELSEIF (kcode.EQ.-19) THEN
374  WRITE (unit=clmess,fmt='(''UNITE'',I3, &
375 & '' ''''SCRATCH'''', NE PEUT ETRE CONSERVEE'')') knumer
376 !
377  ELSEIF (kcode.EQ.-20) THEN
378  WRITE (unit=clmess,fmt='(''ARTICLE "'',A, &
379 & ''" NON TROUVE, UNITE'',I3)') cdacti(1:ilact2),knumer
380 !
381  ELSEIF (kcode.EQ.-21) THEN
382  WRITE (unit=clmess,fmt='(''ARTICLE "'',A, &
383 & ''" + *LONG* QUE DEMANDE, UNITE'',I3)') &
384 & cdacti(1:ilact2),knumer
385 !
386  ELSEIF (kcode.EQ.-22) THEN
387  WRITE (unit=clmess,fmt='(''ARTICLE "'',A, &
388 & ''" + *COURT* QUE DEMANDE, UNITE'',I3)') &
389 & cdacti(1:ilact2),knumer
390 !
391  ELSEIF (kcode.EQ.-23) THEN
392  WRITE (unit=clmess, &
393 & fmt='(''PAS OU PLUS D''''ARTICLE SUIVANT'', &
394 & '' A LIRE, UNITE'',I3)') knumer
395 !
396  ELSEIF (kcode.EQ.-24) THEN
397  WRITE (unit=clmess,fmt='(''VARIABLE CAR.TROP COURTE '', &
398 & ''POUR "'',A,''", UNITE'',I3)') &
399 & cdacti(1:ilact2),knumer
400 !
401  ELSEIF (kcode.EQ.-25) THEN
402  WRITE (unit=clmess, &
403 & fmt='(''NOUVEAU NOM D''''ARTICLE: "'',A, &
404 & ''" DEJA UTILISE, UNITE'',I3)') &
405 & cdacti(1:ilact2),knumer
406 !
407  ELSEIF (kcode.EQ.-26) THEN
408  WRITE (unit=clmess,fmt='(''PAS OU PLUS D''''ARTICLE '', &
409 & '' PRECEDENT A LIRE, UNITE'',I3)') knumer
410 !
411  ELSEIF (kcode.EQ.-27) THEN
412  WRITE (unit=clmess, &
413 & fmt='(''ESPACE CONTIGU INSUFFISANT DANS '', &
414 & '' LES TABLES, UNITE'',I3)') knumer
415 !
416  ELSEIF (kcode.EQ.-28) THEN
417 !
418  IF (knumer.EQ.lfi%JPNIL) THEN
419  WRITE (unit=clmess,fmt='(''FACTEUR MULTIPLICATIF PAR '', &
420 & ''DEFAUT SUPERIEUR AU MAXIMUM('',I3,'')'')') lfi%JPFACX
421  ELSE
422  WRITE (unit=clmess,fmt='(''FACTEUR MULTIPLICATIF '', &
423 & ''DEMANDE SUPERIEUR AU MAXIMUM ('',I3,''), UNITE'',I3)') &
424 & lfi%JPFACX,knumer
425  ENDIF
426 !
427  ELSEIF (kcode.EQ.-29) THEN
428  WRITE (unit=clmess,fmt='(I3,'' ENTREES,'', &
429 & '' PAS DE PLACE POUR FACTEUR MULTIPLIC, UNITE'',I3)') &
430 & lfi%JPXUFM,knumer
431 !
432  ELSEIF (kcode.EQ.-30) THEN
433  WRITE (unit=clmess, &
434 & fmt='(''LFI%NUMERO D''''UNITE LOGIQUE FORTRAN'' &
435 & ,I8,'' ILLICITE'')') knumer
436 !
437  ELSEIF (kcode.EQ.-31) THEN
438  WRITE (unit=clmess,fmt='(''LFI%NUMERO UNITE LOGIQ'',I3, &
439 & '' SANS FACTEUR MULTIPLICATIF PREDEFINI'')') knumer
440 !
441 ! Pour les codes d'erreur non prevus...
442 !
443  ELSEIF (knumer.EQ.lfi%JPNIL) THEN
444  WRITE (unit=clmess, &
445 & fmt='(''ERREUR GLOBALE *INCONNUE* LFI%NUMERO'', &
446 & I6)') kcode
447  ELSE
448  WRITE (unit=clmess, &
449 & fmt='(''ERREUR *INCONNUE* LFI%NUMERO'',I6, &
450 & '' SUR UNITE LOGIQUE'',I3)') kcode,knumer
451  ENDIF
452 !
453  ilmesa=int(len(clmesa), jplikb)
454  ilmesu=ilmesa-1-2*int(len(cljoli), jplikb)-ilnspr-4
455  clmesa=cljoli//' '//cdnspr(1:ilnspr)//' - ' &
456 & //clmess(1:ilmesu)//cljoli
457  WRITE (unit=lfi%NULOUT,fmt='(A)') clmesa
458 !
459 ! Si l'unite logique correspond a une unite logique LFI
460 ! deja ouverte, on en imprime le nom.
461 !
462  IF (ijl.NE.0) THEN
463 !
464  IF (lfi%NLNOMF(ijl).LE.lfi%JPLFTX) THEN
465  WRITE (unit=lfi%NULOUT,fmt='(A,/)') cljoli &
466 & //' NOM - APPARENT MAIS' &
467 & //' COMPLET - DE L''UNITE LOGIQUE LFI CONCERNEE:'
468  ELSE
469  WRITE (unit=clmess,fmt='(A, &
470 & '' NOM - APPARENT, ET TRONQUE DE'',I4, &
471 & '' CARACTERES - DE L''''UNITE LOGIQUE LFI CONCERNEE:'')') &
472 & cljoli,lfi%NLNOMF(ijl)-lfi%JPLFTX
473  WRITE (unit=lfi%NULOUT,fmt='(A,/)') trim(clmess)
474  ENDIF
475 !
476  inlign=(lfi%NLNOMF(ijl)-1)/lfi%JPLFIX
477  idecal=0
478 !
479  DO j=1,inlign
480  WRITE (unit=lfi%NULOUT,fmt='(A)') &
481 & lfi%CNOMFI(ijl)(idecal+1:idecal+lfi%JPLFIX)//'...'
482  idecal=idecal+lfi%JPLFIX
483  ENDDO
484 !
485  IF (lfi%NLNOMF(ijl).LE.lfi%JPLFTX) THEN
486  WRITE (unit=lfi%NULOUT,fmt='(A,/)') &
487 & lfi%CNOMFI(ijl)(idecal+1:lfi%NLNOMF(ijl))
488  ELSE
489  WRITE (unit=lfi%NULOUT,fmt='(A,/)') &
490 & lfi%CNOMFI(ijl)(idecal+1:lfi%JPLFTX)//'...'
491  ENDIF
492 !
493  IF (lfi%CNOMSY(ijl).NE.lfi%CNOMFI(ijl)) THEN
494  WRITE (unit=lfi%NULOUT,fmt='(A,/)') cljoli// &
495 & ' NOM *SYSTEME* (APPARENT) DE L''UNITE LOGIQUE LFI CONCERNEE:'
496  inlign=(lfi%NLNOMS(ijl)-1)/lfi%JPLFIX
497  idecal=0
498 !
499  DO j=1,inlign
500  WRITE (unit=lfi%NULOUT,fmt='(A)') &
501 & lfi%CNOMSY(ijl)(idecal+1:idecal+lfi%JPLFIX)//'...'
502  idecal=idecal+lfi%JPLFIX
503  ENDDO
504 !
505  WRITE (unit=lfi%NULOUT,fmt='(A,/)') &
506 & lfi%CNOMSY(ijl)(idecal+1:lfi%NLNOMS(ijl))
507  ENDIF
508 !
509  ENDIF
510 !
511  WRITE (unit=lfi%NULOUT,fmt='(A)') clmesa
512  IF (ldfata.AND.kcode.NE.0) THEN
513 !
514 ! Saborde le programme.
515 !
516  CALL flush (int(lfi%NULOUT))
517  CALL sdl_srlabort
518  ENDIF
519 !
520 ENDIF
521 !
522 IF (lhook) CALL dr_hook('LFIEFR_FORT',1,zhook_handle)
523 
524 CONTAINS
525 
526 #include "lficom2.ixm.h"
527 
528 END SUBROUTINE lfiefr_fort
529 
530 
531 
532 ! Oct-2012 P. Marguinaud 64b LFI
533 SUBROUTINE lfiefr64 &
534 & (knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
535 & cdacti)
536 USE lfimod, ONLY : lfi => lficom_default, &
539 USE lfi_precision
540 IMPLICIT NONE
541 ! Arguments
542 INTEGER (KIND=JPLIKB) KNUMER ! IN
543 INTEGER (KIND=JPLIKB) KNIMES ! IN
544 INTEGER (KIND=JPLIKB) KCODE ! IN
545 LOGICAL LDFATA ! IN
546 CHARACTER (LEN=*) CDMESS ! IN
547 CHARACTER (LEN=*) CDNSPR ! IN
548 CHARACTER (LEN=*) CDACTI ! IN
549 
550 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
551 
552 CALL lfiefr_fort &
553 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
554 & cdacti)
555 
556 END SUBROUTINE lfiefr64
557 
558 SUBROUTINE lfiefr &
559 & (knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
560 & cdacti)
561 USE lfimod, ONLY : lfi => lficom_default, &
564 USE lfi_precision
565 IMPLICIT NONE
566 ! Arguments
567 INTEGER (KIND=JPLIKM) KNUMER ! IN
568 INTEGER (KIND=JPLIKM) KNIMES ! IN
569 INTEGER (KIND=JPLIKM) KCODE ! IN
570 LOGICAL LDFATA ! IN
571 CHARACTER (LEN=*) CDMESS ! IN
572 CHARACTER (LEN=*) CDNSPR ! IN
573 CHARACTER (LEN=*) CDACTI ! IN
574 
575 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
576 
577 CALL lfiefr_mt &
578 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
579 & cdacti)
580 
581 END SUBROUTINE lfiefr
582 
583 SUBROUTINE lfiefr_mt &
584 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
585 & cdacti)
586 USE lfimod, ONLY : lficom
587 USE lfi_precision
588 IMPLICIT NONE
589 ! Arguments
590 type(lficom) lfi ! INOUT
591 INTEGER (KIND=JPLIKM) KNUMER ! IN
592 INTEGER (KIND=JPLIKM) KNIMES ! IN
593 INTEGER (KIND=JPLIKM) KCODE ! IN
594 LOGICAL LDFATA ! IN
595 CHARACTER (LEN=*) CDMESS ! IN
596 CHARACTER (LEN=*) CDNSPR ! IN
597 CHARACTER (LEN=*) CDACTI ! IN
598 ! Local integers
599 INTEGER (KIND=JPLIKB) INUMER ! IN
600 INTEGER (KIND=JPLIKB) INIMES ! IN
601 INTEGER (KIND=JPLIKB) ICODE ! IN
602 ! Convert arguments
603 
604 inumer = int( knumer, jplikb)
605 inimes = int( knimes, jplikb)
606 icode = int( kcode, jplikb)
607 
608 CALL lfiefr_fort &
609 & (lfi, inumer, inimes, icode, ldfata, cdmess, cdnspr, &
610 & cdacti)
611 
612 
613 END SUBROUTINE lfiefr_mt
614 
615 !INTF KNUMER IN
616 !INTF KNIMES IN
617 !INTF KCODE IN
618 !INTF LDFATA IN
619 !INTF CDMESS IN
620 !INTF CDNSPR IN
621 !INTF CDACTI IN
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
integer, parameter jplikb
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine lfiefr_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiefr.F90:7
subroutine lfiefr64(KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiefr.F90:536
logical, save lficom_default_init
Definition: lfimod.F90:371
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfiefr_mt(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiefr.F90:586
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
subroutine lfiefr(KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiefr.F90:561
Definition: lfimod.F90:1
ERROR in index
Definition: ecsort_shared.h:90
subroutine sdl_srlabort
Definition: sdl_srlabort.F90:2