2 SUBROUTINE xermsg (LIBRAR, SUBROU, MESSG, NERR, LEVEL)
188 CHARACTER*(*) LIBRAR, SUBROU, MESSG
189 CHARACTER*8 XLIBR, XSUBR
192 INTEGER NERR, LEVEL, LKNTRL
193 INTEGER J4SAVE, MAXMES, KDUMMY, I, KOUNT, LERR, LLEVEL
194 INTEGER MKNTRL, LTEMP
196 lkntrl = j4save(2, 0, .
false.)
197 maxmes = j4save(4, 0, .
false.)
207 IF (nerr.LT.-9999999 .OR. nerr.GT.99999999 .OR. nerr.EQ.0 .OR.
208 * level.LT.-1 .OR. level.GT.2)
THEN
209 CALL xerprn (
' ***', -1,
'FATAL ERROR IN...$$ ' //
210 *
'XERMSG -- INVALID ERROR NUMBER OR LEVEL$$ '//
211 *
'JOB ABORT DUE TO FATAL ERROR.', 72)
212 CALL xersve (
' ',
' ',
' ', 0, 0, 0, kdummy)
213 CALL xerhlt (
' ***XERMSG -- INVALID INPUT')
219 i = j4save(1, nerr, .
true.)
220 CALL xersve (librar, subrou, messg, 1, nerr, level, kount)
224 IF (level.EQ.-1 .AND. kount.GT.1)
RETURN
233 CALL xercnt (xlibr, xsubr, lfirst, lerr, llevel, lkntrl)
235 lkntrl = max(-2, min(2,lkntrl))
241 IF (level.LT.2 .AND. lkntrl.EQ.0)
GO TO 30
242 IF (level.EQ.0 .AND. kount.GT.maxmes)
GO TO 30
243 IF (level.EQ.1 .AND. kount.GT.maxmes .AND. mkntrl.EQ.1)
GO TO 30
244 IF (level.EQ.2 .AND. kount.GT.max(1,maxmes))
GO TO 30
251 IF (lkntrl .NE. 0)
THEN
252 temp(1:21) =
'MESSAGE FROM ROUTINE '
253 i = min(len(subrou), 16)
254 temp(22:21+i) = subrou(1:i)
255 temp(22+i:33+i) =
' IN LIBRARY '
257 i = min(len(librar), 16)
258 temp(ltemp+1:ltemp+i) = librar(1:i)
259 temp(ltemp+i+1:ltemp+i+1) =
'.'
260 ltemp = ltemp + i + 1
261 CALL xerprn (
' ***', -1, temp(1:ltemp), 72)
283 IF (lkntrl .GT. 0)
THEN
287 IF (level .LE. 0)
THEN
288 temp(1:20) =
'INFORMATIVE MESSAGE,'
290 ELSEIF (level .EQ. 1)
THEN
291 temp(1:30) =
'POTENTIALLY RECOVERABLE ERROR,'
294 temp(1:12) =
'FATAL ERROR,'
300 IF ((mkntrl.EQ.2 .AND. level.GE.1) .OR.
301 * (mkntrl.EQ.1 .AND. level.EQ.2))
THEN
302 temp(ltemp+1:ltemp+14) =
' PROG ABORTED,'
305 temp(ltemp+1:ltemp+16) =
' PROG CONTINUES,'
311 IF (lkntrl .GT. 0)
THEN
312 temp(ltemp+1:ltemp+20) =
' TRACEBACK REQUESTED'
315 temp(ltemp+1:ltemp+24) =
' TRACEBACK NOT REQUESTED'
318 CALL xerprn (
' ***', -1, temp(1:ltemp), 72)
323 CALL xerprn (
' * ', -1, messg, 72)
328 IF (lkntrl .GT. 0)
THEN
329 WRITE (temp,
'(''ERROR NUMBER = '', I8)') nerr
331 IF (temp(i:i) .NE.
' ')
GO TO 20
334 20
CALL xerprn (
' * ', -1, temp(1:15) // temp(i:23), 72)
340 IF (lkntrl .NE. 0)
THEN
341 CALL xerprn (
' * ', -1,
' ', 72)
342 CALL xerprn (
' ***', -1,
'END OF MESSAGE', 72)
343 CALL xerprn (
' ', 0,
' ', 72)
349 30
IF (level.LE.0 .OR. (level.EQ.1 .AND. mkntrl.LE.1))
RETURN
355 IF (lkntrl.GT.0 .AND. kount.LT.max(1,maxmes))
THEN
356 IF (level .EQ. 1)
THEN
358 * (
' ***', -1,
'JOB ABORT DUE TO UNRECOVERED ERROR.', 72)
360 CALL xerprn(
' ***', -1,
'JOB ABORT DUE TO FATAL ERROR.', 72)
362 CALL xersve (
' ',
' ',
' ', -1, 0, 0, kdummy)
subroutine xerprn(PREFIX, NPREF, MESSG, NWRAP)
subroutine xersve(LIBRAR, SUBROU, MESSG, KFLAG, NERR, LEVEL, ICOUNT)
subroutine xercnt(LIBRAR, SUBROU, MESSG, NERR, LEVEL, KONTRL)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
subroutine xermsg(LIBRAR, SUBROU, MESSG, NERR, LEVEL)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true