SURFEX v8.1
General documentation of Surfex
lfieng.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 lfieng_fort &
4 & (lfi, knumer, knimes, kcode, ldfata, &
5 & cdmess, cdnspr,cdacti )
6 USE lfimod, ONLY : lficom
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
9 USE sdl_mod , ONLY : sdl_srlabort
10 USE lfi_precision
11 IMPLICIT NONE
12 !****
13 ! THIS SUBROUTINE PRINTS STANDARD MESSAGES FROM LFI INDEXED-
14 ! FILE SOFTWARE, ABORTING PROGRAM IF REQUIRED.
15 ! Messages related to "debugging mode" are directly printed
16 ! by concerned subroutines.
17 !
18 ! This subroutine is the english version, translated from the
19 ! the original (french) one, and is always called through the
20 ! "hat" routine LFIEMS.
21 ! For french version see subroutine LFIEFR.
22 ! ( Pour la version francaise, voir LFIEFR )
23 !**
24 ! DUMMY ARGUMENTS : KNUMER ==> Logical Unit concerned, if any;
25 ! ( all INPUT ones ) ( if LFI%JPNIL ==> no Logical Unit )
26 ! KNIMES ==> Level (0,1,2) of Message;
27 ! KCODE ==> Response code of action concerned;
28 ! LDFATA ==> True if Abort of program is required;
29 ! CDMESS ==> If KNIMES#0, Message to print;
30 ! CDNSPR ==> Subroutine name which calls LFIEMS;
31 ! CDACTI ==> Name of FORTRAN input/output action
32 ! if KCODE >0, else... it depends !
33 !*
34 ! !----------------------------------------------------------------!
35 ! ! TABLE OF POSSIBLE VALUES FOR RESPONSE CODES OF LFI SOFTWARE !
36 ! !----------------------------------------------------------------!
37 !
38 !-----------------------------------------------------------------------
39 ! 0 ==> No error has been detected, everything is OK.
40 !-----------------------------------------------------------------------
41 !positive==> It is the (absolute value of) FORTRAN response code
42 ! value from an OPEN, READ, WRITE, CLOSE or INQUIRE instruction;
43 ! see vendor's reference manual for exact meaning.
44 !-----------------------------------------------------------------------
45 ! -1 ==> Logical Unit currently not opened for the software.
46 !-----------------------------------------------------------------------
47 ! -2 ==> "LEVEL" value outside [0-2] range .
48 !-----------------------------------------------------------------------
49 ! -3 ==> Bad lock option (internal subroutine "LFIVER") .
50 !-----------------------------------------------------------------------
51 ! -4 ==> Explicit change for Multi-Tasking mode, but almost one unit
52 ! is currently open-problems may arise (subroutine "LFIINI").
53 !-----------------------------------------------------------------------
54 ! -5 ==> Logical Unit is currently opened (LFIOUV, LFIAFM, LFISFM) .
55 !-----------------------------------------------------------------------
56 ! -6 ==> Not enough space within tables to open requested Unit.
57 ! (LFIOUV)
58 !-----------------------------------------------------------------------
59 ! -7 ==> Invalid "STATUS" for FORTRAN instruction "OPEN" (LFIOUV) .
60 !-----------------------------------------------------------------------
61 ! -8 ==> Incompatible values given for "LDNOMM" and "CDSTTO":
62 ! a file which "STATUS" is 'OLD' or 'NEW' must have a name .
63 ! (LFIOUV) (THIS REPONSE CODE HAS CURRENTLY NO MORE SENSE)
64 !-----------------------------------------------------------------------
65 ! -9 ==> Incompatibility between "STATUS" 'NEW' or 'OLD' and (respe-
66 ! ctively) file existence or non-existence (LFIOUV) .
67 !-----------------------------------------------------------------------
68 ! -10 ==> The file is not a LFI one, or may not be treated through
69 ! this configuration or version of the software (LFIOUV) .
70 !-----------------------------------------------------------------------
71 ! -11 ==> File not closed after a modification (LFIOUV): this
72 ! error is not fatal if "LDERFA" is .FALSE., but in such a
73 ! case file integrity and data coherence are not guaranteed.
74 ! Note that once a file has got such problem, this response
75 ! code will stay even after a subsequent modification.
76 !-----------------------------------------------------------------------
77 ! -12 ==> File has a "STATUS" 'OLD' but an error occurred when
78 ! reading the first physical record of file (LFIOUV) .
79 !-----------------------------------------------------------------------
80 ! -13 ==> File is already open for another LFI logical unit.
81 ! (LFIOUV)
82 !-----------------------------------------------------------------------
83 ! -14 ==> Incorrect value for INTEGER argument (generally negative) .
84 !-----------------------------------------------------------------------
85 ! -15 ==> Incorrect CHARACTER argument (too long, for instance).
86 !-----------------------------------------------------------------------
87 ! -16 ==> Incoherence in Tables, File, internal calls, software.
88 ! THIS ERROR MAY NEVER BE FILTERED. ALWAYS FATAL.
89 !-----------------------------------------------------------------------
90 ! -17 ==> Too many logical records to store an extra one (LFIECR) .
91 ! (note that logical records consist of user-readable data
92 ! records, but also of holes cataloged in index... which are
93 ! created when existing records may not be rewritten in
94 ! place, or when records are suppressed; such holes may be
95 ! "re-cycled")
96 !-----------------------------------------------------------------------
97 ! -18 ==> A logical record name formed only with SPACES is invalid.
98 ! (for internal use of LFI software, holes in index are
99 ! described by a blank record name)
100 !-----------------------------------------------------------------------
101 ! -19 ==> File opened with "STATUS" set to 'SCRATCH', so may not be
102 ! kept at CLOSE time: 'KEEP' is illicit for "CDSTTC" (LFIFER)
103 ! if this error is not fatal, then a FORTRAN "CLOSE" without
104 ! "STATUS" parameter is performed, in the same manner as if
105 ! "CDSTTC" is neither 'KEEP' nor 'DELETE'.
106 !-----------------------------------------------------------------------
107 ! -20 ==> No logical record with such name found within logical unit.
108 ! (LFILEC, LFIREN, LFISUP)
109 !-----------------------------------------------------------------------
110 ! -21 ==> Requested logical record is LONGER (has more data) in file;
111 ! if this error is not fatal, then a PARTIAL read is
112 ! performed, at requested length.
113 ! (LFILAP, LFILAS, LFILEC)
114 !-----------------------------------------------------------------------
115 ! -22 ==> Requested logical record SHORTER (has less data) in file;
116 ! even if this error is not fatal, NO READING OF DATA OCCURS.
117 ! (LFILAP, LFILAS, LFILEC) .
118 !-----------------------------------------------------------------------
119 ! -23 ==> No or no more "NEXT" record to read (LFILAS) .
120 !-----------------------------------------------------------------------
121 ! -24 ==> The character variable given as actual output argument is
122 ! TOO SHORT to store the record NAME, even when suppressing
123 ! any spaces at the end of the name.
124 ! (LFICAP, LFICAS, LFILAP, LFILAS)
125 !-----------------------------------------------------------------------
126 ! -25 ==> The new name of the logical record is (already) used for
127 ! another logical record within the file (LFIREN).
128 !-----------------------------------------------------------------------
129 ! -26 ==> No or no more "PREVIOUS" logical record to read (LFILAP).
130 !-----------------------------------------------------------------------
131 ! -27 ==> Insufficient CONTIGUOUS space within tables to treat the
132 ! "multiple" file requested (LFIOUV) .
133 !-----------------------------------------------------------------------
134 ! -28 ==> Multiply factor (of elementary physical record length) too
135 ! big for the current configuration of the software.
136 ! (LFIOUV, LFIAFM, LFIFMD)
137 !-----------------------------------------------------------------------
138 ! -29 ==> Not enough space within tables to store the multiply factor
139 ! to be associated to logical unit (LFIAFM) .
140 !-----------------------------------------------------------------------
141 ! -30 ==> Logical unit number invalid for FORTRAN.
142 !-----------------------------------------------------------------------
143 ! -31 ==> Logical unit has no multiply factor predefined.
144 ! (LFISFM)
145 !-----------------------------------------------------------------------
146 !
147 !
148 TYPE(lficom) :: LFI
149 INTEGER (KIND=JPLIKB) KNUMER, KNIMES, KCODE, ILDMES
150 INTEGER (KIND=JPLIKB) ILBLAN, INLNOM, INUMER
151 INTEGER (KIND=JPLIKB) IDECBL, IPOSBL, ILACTI, ILACT2
152 INTEGER (KIND=JPLIKB) ILNSPR, ILMESU, IJL, J, IJ
153 INTEGER (KIND=JPLIKB) INBALO, ILMESA, INLIGN, IDECAL
154 !
155 LOGICAL LDFATA
156 !
157 CHARACTER(LEN=*) CDNSPR
158 CHARACTER(LEN=6) CLJOLI
159 CHARACTER(LEN=*) CDMESS
160 CHARACTER(LEN=80) CLMESA
161 CHARACTER(LEN=*) CDACTI
162 !
163 CHARACTER(LEN=LFI%JPLMES) CLMESS
164 
165 !**
166 ! 1. - INITIALISATIONS.
167 !-----------------------------------------------------------------------
168 !
169 ! Search for "useful" length of argument CDACTI.
170 ! (i.e. not taking into account any blank characters at the end)
171 !
172 REAL(KIND=JPRB) :: ZHOOK_HANDLE
173 IF (lhook) CALL dr_hook('LFIENG_FORT',0,zhook_handle)
174 idecbl=0
175 !
176 101 CONTINUE
177 iposbl=idecbl+int(index(cdacti(idecbl+1:),' '), jplikb)
178 !
179 IF (iposbl.LE.idecbl) THEN
180  ilacti=int(len(cdacti), jplikb)
181 ELSEIF (cdacti(iposbl:).EQ.' ') THEN
182  ilacti=iposbl-1
183 ELSE
184  idecbl=iposbl
185  GOTO 101
186 ENDIF
187 !
188 ilact2=min(ilacti,lfi%JPNCPN)
189 ilacti=min(ilact2,8_jplikb )
190 ilnspr=min(int(len(cdnspr), jplikb),lfi%JPLSPX)
191 !
192 ! Prefix (and possible suffix) for the message(s).
193 !
194 IF (ldfata) THEN
195  cljoli=' *****'
196 ELSEIF (knimes.EQ.0.OR.kcode.NE.0) THEN
197  cljoli=' */*/*'
198 ELSE
199  cljoli=' /////'
200 ENDIF
201 !
202 IF (knimes.NE.0) THEN
203 !**
204 ! 2. - PRINTS MESSAGE PREPARED BY SUBROUTINE WHICH CALLED LFIEMS.
205 !-----------------------------------------------------------------------
206 !
207  ilmesu=min(int(len(clmess), jplikb)- &
208 & int(len(cljoli), jplikb)-ilnspr-4, &
209 & int(len(cdmess), jplikb))
210  clmess=cljoli//' '//cdnspr(1:ilnspr)//' - ' &
211 & //cdmess(1:ilmesu)
212  WRITE (unit=lfi%NULOUT,fmt='(A)') trim(clmess)
213 ENDIF
214 !
215 IF (knimes.EQ.0.OR.ldfata) THEN
216 !**
217 ! 3. - CONSTITUTION OF "AD HOC" MESSAGE, DEPENDING OF *KCODE*.
218 !-----------------------------------------------------------------------
219 !
220 ! Before, check if logical unit considered corresponds to a logical
221 ! unit currently opened for LFI software (or not).
222 !
223  IF (knumer.EQ.lfi%JPNIL) THEN
224  ijl=0
225  ELSE
226 !
227  DO j=1,lfi%NBFIOU
228  ijl=lfi%NUMIND(j)
229  IF (knumer.EQ.lfi%NUMERO(ijl)) GOTO 302
230  ENDDO
231 !
232  ijl=0
233  ENDIF
234 !
235 302 CONTINUE
236 !
237  IF (kcode.GT.0) THEN
238 !
239  IF ((cdacti.EQ.'READ'.OR.cdacti.EQ.'WRITE') &
240 & .AND.lfi%NUMAPH(ijl).GT.0) THEN
241  WRITE (unit=clmess,fmt='(''ERROR "'',A,''"'',I7, &
242 & '',UNIT'',I3,'',REC.NUM'',I6,'',*'',I6, &
243 & '' WORDS'')') cdacti(1:ilacti),kcode,knumer, &
244 & lfi%NUMAPH(ijl), &
245 & lfi%JPLARD*lfi%MFACTM(ijl)
246  ELSE
247  WRITE (unit=clmess, &
248 & fmt='(''FORTRAN "'',A,''" ERROR, CODE='' &
249 & ,I7,'', UNIT='',I3)') cdacti(1:ilacti),kcode,knumer
250  ENDIF
251 !
252  ELSEIF (kcode.EQ.-1) THEN
253  WRITE (unit=clmess,fmt='(''LOGICAL UNIT'',I3, &
254 & '' NOT OPENED FOR LFI SOFTWARE'')') knumer
255 !
256  ELSEIF (kcode.EQ.-2) THEN
257 !
258  IF (knumer.EQ.lfi%JPNIL) THEN
259  clmess='ACTUAL VALUE FOR LEVEL "KNIVAU" '// &
260 & 'OUTSIDE [0-2] RANGE'
261  ELSE
262  WRITE (unit=clmess,fmt= &
263 & '(''MESSAGE LEVEL OUTSIDE [0-2] RANGE, UNIT'',I3)') knumer
264  ENDIF
265 !
266  ELSEIF (kcode.EQ.-3) THEN
267  ildmes=min(8_jplikb ,int(len(cdmess), jplikb))
268  clmess='UNKNOWN ACTION '''//cdmess(1:ildmes) &
269 & //''' ON LOCKS'
270 !
271  ELSEIF (kcode.EQ.-4) THEN
272  clmess='EXPL.CHANGE OF MULTI-TASKING MODE '// &
273 & 'WITH UNIT(S) OPENED'
274 !
275  ELSEIF (kcode.EQ.-5) THEN
276  WRITE (unit=clmess,fmt='(''LOGICAL UNIT'',I3, &
277 & '' ALREADY OPENED FOR LFI - AND SHOULD NOT.'')') knumer
278 !
279  ELSEIF (kcode.EQ.-6) THEN
280  WRITE (unit=clmess,fmt='(I3,'' ENTRIES,'', &
281 & '' NOT ENOUGH PLACE WITHIN TABLES FOR UNIT'',I3)') &
282 & lfi%JPNXFI,knumer
283 !
284  ELSEIF (kcode.EQ.-7) THEN
285  WRITE (unit=clmess,fmt='(''FORTRAN STATUS'''''',A, &
286 & '''''' UNKNOWN, UNIT'',I3)') cdacti(1:ilacti),knumer
287 !
288  ELSEIF (kcode.EQ.-8) THEN
289  WRITE (unit=clmess,fmt='(''UNIT'',I3,'' OF STATUS '''''' &
290 &,A,'''''' MUST HAVE AN EXPLICIT NAME'')') knumer,cdacti(1:ilacti)
291 !
292  ELSEIF (kcode.EQ.-9) THEN
293 !
294  IF (cdacti.EQ.'OLD') THEN
295  WRITE (unit=clmess,fmt= &
296 &'(''STATUS ''''OLD'''' BUT FILE DOES NOT EXIST, UNIT'', &
297 & I3)') knumer
298  ELSE
299  ilblan=int(index(cdacti(1:ilacti),' '), jplikb)
300  IF (ilblan.GT.1) ilacti=ilblan-1
301  WRITE (unit=clmess,fmt= &
302 &'(''STATUS '''''',A,'''''' BUT FILE ALREADY EXISTS, UNIT'', &
303 & I3)') cdacti(1:ilacti),knumer
304  ENDIF
305 !
306  ELSEIF (kcode.EQ.-10) THEN
307  WRITE (unit=clmess,fmt='(''INCOMPATIBILITY'', &
308 & '' FILE / SOFTWARE, UNIT'',I3)') knumer
309 !
310  ELSEIF (kcode.EQ.-11) THEN
311  WRITE (unit=clmess, &
312 & fmt='(''UNIT'',I3,'' NOT CLOSED AFTER '', &
313 & ''ITS LAST MODIFICATION'')') knumer
314 !
315  ELSEIF (kcode.EQ.-12) THEN
316  WRITE (unit=clmess,fmt='(''UNIT'',I3, &
317 & '' OF STATUS ''''OLD'''' - READ OF FIRST RECORD FAILED'')') &
318 & knumer
319 !
320  ELSEIF (kcode.EQ.-13) THEN
321  inlnom=1
322  inumer=lfi%JPNIL
323 !
324  DO j=1,lfi%NBFIOU
325  ij=lfi%NUMIND(j)
326 !
327  IF (cdacti.EQ.lfi%CNOMFI(ij)) THEN
328  inumer=lfi%NUMERO(ij)
329  inlnom=min(lfi%NLNOMF(ij), &
330 & int(len(clmess), jplikb)-3_jplikb )
331  GOTO 132
332  ENDIF
333 !
334  ENDDO
335 !
336 132 CONTINUE
337  clmess=' '''//cdacti(1:inlnom)//''''
338  WRITE (unit=lfi%NULOUT,fmt='(A)') trim(clmess)
339  WRITE (unit=clmess,fmt='(''UNIT'',I3,'' - FILE '', &
340 & ''ALREADY OPEN WITH UNIT'',I3)') knumer,inumer
341 !
342  ELSEIF (kcode.EQ.-14) THEN
343 !
344  IF (cdnspr.EQ.'LFIECR'.OR.cdnspr.EQ.'LFILEC'.OR. &
345 & cdnspr.EQ.'LFILAS'.OR.cdnspr.EQ.'LFILAP') THEN
346  WRITE (unit=clmess,fmt= &
347 & '(''INCORRECT RECORD LENGTH, UNIT'',I3)') knumer
348  ELSEIF (knumer.EQ.lfi%JPNIL) THEN
349  clmess='INCORRECT ENTRY IN *LFI%NUMERO* TABLE'
350  ELSE
351  WRITE (unit=clmess,fmt= &
352 & '(''INCORRECT INTEGER TYPE ARGUMENT, UNIT'',I3)') knumer
353  ENDIF
354 !
355  ELSEIF (kcode.EQ.-15) THEN
356  WRITE (unit=clmess,fmt='(''RECORD NAME INCORRECT OR '', &
357 & ''TOO LONG, UNIT'',I3)') knumer
358 !
359  ELSEIF (kcode.EQ.-16) THEN
360  WRITE (unit=clmess,fmt='(''INCOHERENCE (TABLES, FILE, '', &
361 & ''INTERNAL CALLS, SOFTWARE), UNIT'',I3)') knumer
362 !
363  ELSEIF (kcode.EQ.-17) THEN
364 !
365  IF (ijl.NE.0) THEN
366  inbalo=lfi%MDES1D(ixm(lfi%JPNALO,ijl))
367  ELSE
368  inbalo=lfi%JPNIL
369  ENDIF
370 !
371  WRITE (unit=clmess, &
372 & fmt='(I6,'' RECORDS, INDEX FULL, UNIT'', &
373 & I3)') inbalo,knumer
374 !
375  ELSEIF (kcode.EQ.-18) THEN
376  WRITE (unit=clmess,fmt='(''BLANK RECORD NAME IS INVALID'', &
377 & '', UNIT'',I3)') knumer
378 !
379  ELSEIF (kcode.EQ.-19) THEN
380  WRITE (unit=clmess,fmt='(''UNIT'',I3, &
381 & '' IS ''''SCRATCH'''', SO MAY NOT BE KEPT'')') knumer
382 !
383  ELSEIF (kcode.EQ.-20) THEN
384  WRITE (unit=clmess,fmt='(''RECORD "'',A, &
385 & ''" NOT FOUND, UNIT'',I3)') cdacti(1:ilact2),knumer
386 !
387  ELSEIF (kcode.EQ.-21) THEN
388  WRITE (unit=clmess,fmt='(''RECORD "'',A, &
389 & ''" *LONGER* THAN REQUESTED, UNIT'',I3)') &
390 & cdacti(1:ilact2),knumer
391 !
392  ELSEIF (kcode.EQ.-22) THEN
393  WRITE (unit=clmess,fmt='(''RECORD "'',A, &
394 & ''" *SHORTER* THAN REQUESTED-UNIT'',I3)') &
395 & cdacti(1:ilact2),knumer
396 !
397  ELSEIF (kcode.EQ.-23) THEN
398  WRITE (unit=clmess,fmt='(''NO/NO MORE NEXT RECORD'', &
399 & '' TO READ, UNIT'',I3)') knumer
400 !
401  ELSEIF (kcode.EQ.-24) THEN
402  WRITE (unit=clmess,fmt='(''CHARAC. VARIABLE TOO SHORT '', &
403 & ''FOR "'',A,''", UNIT'',I3)') &
404 & cdacti(1:ilact2),knumer
405 !
406  ELSEIF (kcode.EQ.-25) THEN
407  WRITE (unit=clmess,fmt='(''NEW RECORD NAME: "'',A, &
408 & ''" ALREADY USED, UNIT'',I3)') &
409 & cdacti(1:ilact2),knumer
410 !
411  ELSEIF (kcode.EQ.-26) THEN
412  WRITE (unit=clmess,fmt='(''NO/NO MORE PREVIOUS RECORD '', &
413 & '' TO READ, UNIT'',I3)') knumer
414 !
415  ELSEIF (kcode.EQ.-27) THEN
416  WRITE (unit=clmess, &
417 & fmt='(''INSUFFICIENT CONTIGUOUS SPACE WI'', &
418 & ''THIN TABLES, UNIT'',I3)') knumer
419 !
420  ELSEIF (kcode.EQ.-28) THEN
421 !
422  IF (knumer.EQ.lfi%JPNIL) THEN
423  WRITE (unit=clmess, &
424 & fmt='(''NEW DEFAULT MULTIPLY FACTOR EX'', &
425 & ''CEEDS MAXIMUM ('',I3,'')'')') lfi%JPFACX
426  ELSE
427  WRITE (unit=clmess,fmt='(''SPECIFIED MULTIPLY FACTOR '', &
428 & ''EXCEEDS MAXIMUM ('',I3,''), UNIT'',I3)') lfi%JPFACX,knumer
429  ENDIF
430 !
431  ELSEIF (kcode.EQ.-29) THEN
432  WRITE (unit=clmess,fmt='(I3,'' ENTRIES,'', &
433 & '' NO MORE PLACE FOR MULTIPLY FACTOR, UNIT'',I3)') &
434 & lfi%JPXUFM,knumer
435 !
436  ELSEIF (kcode.EQ.-30) THEN
437  WRITE (unit=clmess,fmt='(''INVALID FORTRAN LOGICAL UNIT'', &
438 & '' NUMBER:'',I8)') knumer
439 !
440  ELSEIF (kcode.EQ.-31) THEN
441  WRITE (unit=clmess,fmt='(''LOGICAL UNIT NUMBER'',I3, &
442 & '' HAS NO PREDEFINED MULTIPLY FACTOR'')') knumer
443 !
444 ! For unexpected error codes...
445 !
446  ELSEIF (knumer.EQ.lfi%JPNIL) THEN
447  WRITE (unit=clmess,fmt='(''*UNKNOWN* GLOBAL ERROR CODE'', &
448 & I6)') kcode
449  ELSE
450  WRITE (unit=clmess,fmt='(''*UNKNOWN* ERROR CODE'',I6, &
451 & '' ON LOGICAL UNIT'',I3)') kcode,knumer
452  ENDIF
453 !
454  ilmesa=int(len(clmesa), jplikb)
455  ilmesu=ilmesa-1-2*int(len(cljoli), jplikb)-ilnspr-4
456  clmesa=cljoli//' '//cdnspr(1:ilnspr)//' - '// &
457 & clmess(1:ilmesu)//cljoli
458  WRITE (unit=lfi%NULOUT,fmt='(A)') clmesa
459 !
460 ! If logical unit corresponds to a LFI logical unit
461 ! already opened, its name is printed.
462 !
463  IF (ijl.NE.0) THEN
464 !
465  IF (lfi%NLNOMF(ijl).LE.lfi%JPLFTX) THEN
466  WRITE (unit=lfi%NULOUT,fmt='(A,/)') cljoli &
467 & //' NAME - APPEARENT BUT' &
468 & //' COMPLETE - OF LFI LOGICAL UNIT CONCERNED:'
469  ELSE
470  WRITE (unit=clmess,fmt='(A, &
471 & '' NAME - APPEARENT, AND TRUNCATED BY'',I4, &
472 & '' CARACTERES - OF LFI LOGICAL UNIT CONCERNED:'')') &
473 & cljoli,lfi%NLNOMF(ijl)-lfi%JPLFTX
474  WRITE (unit=lfi%NULOUT,fmt='(A,/)') trim(clmess)
475  ENDIF
476 !
477  inlign=(lfi%NLNOMF(ijl)-1)/lfi%JPLFIX
478  idecal=0
479 !
480  DO j=1,inlign
481  WRITE (unit=lfi%NULOUT,fmt='(A)') &
482 & lfi%CNOMFI(ijl)(idecal+1:idecal+lfi%JPLFIX)//'...'
483  idecal=idecal+lfi%JPLFIX
484  ENDDO
485 !
486  IF (lfi%NLNOMF(ijl).LE.lfi%JPLFTX) THEN
487  WRITE (unit=lfi%NULOUT,fmt='(A,/)') &
488 & lfi%CNOMFI(ijl)(idecal+1:lfi%NLNOMF(ijl))
489  ELSE
490  WRITE (unit=lfi%NULOUT,fmt='(A,/)') &
491 & lfi%CNOMFI(ijl)(idecal+1:lfi%JPLFTX) &
492 & //'...'
493  ENDIF
494 !
495  IF (lfi%CNOMSY(ijl).NE.lfi%CNOMFI(ijl)) THEN
496  WRITE (unit=lfi%NULOUT,fmt='(A,/)') cljoli// &
497 & ' *SYSTEM* NAME (APPEARENT) OF LFI LOGICAL UNIT CONCERNED:'
498  inlign=(lfi%NLNOMS(ijl)-1)/lfi%JPLFIX
499  idecal=0
500 !
501  DO j=1,inlign
502  WRITE (unit=lfi%NULOUT,fmt='(A)') &
503 & lfi%CNOMSY(ijl)(idecal+1:idecal+lfi%JPLFIX)//'...'
504  idecal=idecal+lfi%JPLFIX
505  ENDDO
506 !
507  WRITE (unit=lfi%NULOUT,fmt='(A,/)') &
508 & lfi%CNOMSY(ijl)(idecal+1:lfi%NLNOMS(ijl))
509  ENDIF
510 !
511  ENDIF
512 !
513  WRITE (unit=lfi%NULOUT,fmt='(A)') clmesa
514  IF (ldfata.AND.kcode.NE.0) THEN
515 !
516 ! Aborts program.
517 !
518  CALL sdl_srlabort
519  ENDIF
520 !
521 ENDIF
522 !
523 IF (lhook) CALL dr_hook('LFIENG_FORT',1,zhook_handle)
524 
525 CONTAINS
526 
527 #include "lficom2.ixm.h"
528 
529 END SUBROUTINE lfieng_fort
530 
531 
532 
533 ! Oct-2012 P. Marguinaud 64b LFI
534 SUBROUTINE lfieng64 &
535 & (knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
536 & cdacti)
537 USE lfimod, ONLY : lfi => lficom_default, &
540 USE lfi_precision
541 IMPLICIT NONE
542 ! Arguments
543 INTEGER (KIND=JPLIKB) KNUMER ! IN
544 INTEGER (KIND=JPLIKB) KNIMES ! IN
545 INTEGER (KIND=JPLIKB) KCODE ! IN
546 LOGICAL LDFATA ! IN
547 CHARACTER (LEN=*) CDMESS ! IN
548 CHARACTER (LEN=*) CDNSPR ! IN
549 CHARACTER (LEN=*) CDACTI ! IN
550 
551 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
552 
553 CALL lfieng_fort &
554 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
555 & cdacti)
556 
557 END SUBROUTINE lfieng64
558 
559 SUBROUTINE lfieng &
560 & (knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
561 & cdacti)
562 USE lfimod, ONLY : lfi => lficom_default, &
565 USE lfi_precision
566 IMPLICIT NONE
567 ! Arguments
568 INTEGER (KIND=JPLIKM) KNUMER ! IN
569 INTEGER (KIND=JPLIKM) KNIMES ! IN
570 INTEGER (KIND=JPLIKM) KCODE ! IN
571 LOGICAL LDFATA ! IN
572 CHARACTER (LEN=*) CDMESS ! IN
573 CHARACTER (LEN=*) CDNSPR ! IN
574 CHARACTER (LEN=*) CDACTI ! IN
575 
576 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
577 
578 CALL lfieng_mt &
579 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
580 & cdacti)
581 
582 END SUBROUTINE lfieng
583 
584 SUBROUTINE lfieng_mt &
585 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
586 & cdacti)
587 USE lfimod, ONLY : lficom
588 USE lfi_precision
589 IMPLICIT NONE
590 ! Arguments
591 type(lficom) lfi ! INOUT
592 INTEGER (KIND=JPLIKM) KNUMER ! IN
593 INTEGER (KIND=JPLIKM) KNIMES ! IN
594 INTEGER (KIND=JPLIKM) KCODE ! IN
595 LOGICAL LDFATA ! IN
596 CHARACTER (LEN=*) CDMESS ! IN
597 CHARACTER (LEN=*) CDNSPR ! IN
598 CHARACTER (LEN=*) CDACTI ! IN
599 ! Local integers
600 INTEGER (KIND=JPLIKB) INUMER ! IN
601 INTEGER (KIND=JPLIKB) INIMES ! IN
602 INTEGER (KIND=JPLIKB) ICODE ! IN
603 ! Convert arguments
604 
605 inumer = int( knumer, jplikb)
606 inimes = int( knimes, jplikb)
607 icode = int( kcode, jplikb)
608 
609 CALL lfieng_fort &
610 & (lfi, inumer, inimes, icode, ldfata, cdmess, cdnspr, &
611 & cdacti)
612 
613 
614 END SUBROUTINE lfieng_mt
615 
616 !INTF KNUMER IN
617 !INTF KNIMES IN
618 !INTF KCODE IN
619 !INTF LDFATA IN
620 !INTF CDMESS IN
621 !INTF CDNSPR IN
622 !INTF CDACTI IN
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine lfieng64(KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfieng.F90:537
integer, parameter jplikb
subroutine new_lfi_default()
Definition: lfimod.F90:376
logical, save lficom_default_init
Definition: lfimod.F90:371
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfieng(KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfieng.F90:562
subroutine lfieng_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfieng.F90:6
subroutine lfieng_mt(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfieng.F90:587
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
Definition: lfimod.F90:1
ERROR in index
Definition: ecsort_shared.h:90
subroutine sdl_srlabort
Definition: sdl_srlabort.F90:2