388 DOUBLE PRECISION FUNCTION d1mach (I)
391 DOUBLE PRECISION :: b, x
448 d1mach = b**(minexponent(x)-1)
452 d1mach = b**(-digits(x))
454 d1mach = b**(1-digits(x))
458 WRITE (*, fmt = 9000)
459 9000
FORMAT (
'1ERROR 1 IN D1MACH - I OUT OF BOUNDS')
465 INTEGER FUNCTION i1mach(I)
539 INTEGER imach(16),output
541 equivalence(imach(4),output)
917 DATA imach( 5) / 32 /
920 DATA imach( 8) / 31 /
921 DATA imach( 9) / 2147483647 /
923 DATA imach(11) / 24 /
924 DATA imach(12) / -125 /
925 DATA imach(13) / 127 /
926 DATA imach(14) / 53 /
927 DATA imach(15) / -1021 /
928 DATA imach(16) / 1023 /
1085 IF (i .LT. 1 .OR. i .GT. 16)
GO TO 10
1091 WRITE (unit = output, fmt = 9000)
1092 9000
FORMAT (
'1ERROR 1 IN I1MACH - I OUT OF BOUNDS')
1099 SUBROUTINE xerror(MESSG,NMESSG,NERR,LEVEL)
1147 CALL xerrwv(messg,nmessg,nerr,level,0,0,0,0,0.,0.)
1149 END SUBROUTINE xerror
1151 SUBROUTINE xerrwv(MESSG,NMESSG,NERR,LEVEL,NI,I1,I2,NR,R1,R2)
1219 lkntrl = j4save(2,0,.false.)
1220 maxmes = j4save(4,0,.false.)
1222 IF ((nmessg.GT.0).AND.(nerr.NE.0).AND. &
1223 (level.GE.(-1)).AND.(level.LE.2))
GO TO 10
1224 IF (lkntrl.GT.0)
CALL xerprt(
'FATAL ERROR IN...',17)
1225 CALL xerprt(
'XERROR -- INVALID INPUT',23)
1226 IF (lkntrl.GT.0)
CALL fdump
1227 IF (lkntrl.GT.0)
CALL xerprt(
'JOB ABORT DUE TO FATAL ERROR.', &
1229 IF (lkntrl.GT.0)
CALL xersav(
' ',0,0,0,kdummy)
1230 CALL xerabt(
'XERROR -- INVALID INPUT',23)
1234 junk = j4save(1,nerr,.true.)
1235 CALL xersav(messg,nmessg,nerr,level,kount)
1241 CALL xerctl(lfirst,lmessg,lerr,llevel,lkntrl)
1246 lkntrl = max(-2,min(2,lkntrl))
1247 mkntrl = abs(lkntrl)
1249 IF ((llevel.LT.2).AND.(lkntrl.EQ.0))
GO TO 100
1250 IF (((llevel.EQ.(-1)).AND.(kount.GT.min(1,maxmes))) &
1251 .OR.((llevel.EQ.0) .AND.(kount.GT.maxmes)) &
1252 .OR.((llevel.EQ.1) .AND.(kount.GT.maxmes).AND.(mkntrl.EQ.1)) &
1253 .OR.((llevel.EQ.2) .AND.(kount.GT.max(1,maxmes))))
GO TO 100
1254 IF (lkntrl.LE.0)
GO TO 20
1257 IF (llevel.EQ.(-1))
CALL xerprt &
1258 (
'WARNING MESSAGE...THIS MESSAGE WILL ONLY BE PRINTED ONCE.',57)
1259 IF (llevel.EQ.0)
CALL xerprt(
'WARNING IN...',13)
1260 IF (llevel.EQ.1)
CALL xerprt &
1261 (
'RECOVERABLE ERROR IN...',23)
1262 IF (llevel.EQ.2)
CALL xerprt(
'FATAL ERROR IN...',17)
1265 CALL xerprt(messg,lmessg)
1266 CALL xgetua(lun,nunit)
1267 isizei = log10(
REAL(i1mach(9))) + 1.0
1268 isizef = log10(
REAL(i1mach(10))**i1mach(11)) + 1.0
1271 IF (iunit.EQ.0) iunit = i1mach(4)
1273 WRITE (form,21) i,isizei
1274 21
FORMAT (
'(11X,21HIN ABOVE MESSAGE, I',i1,
'=,I',i2,
') ')
1275 IF (i.EQ.1)
WRITE (iunit,form) i1
1276 IF (i.EQ.2)
WRITE (iunit,form) i2
1279 WRITE (form,23) i,isizef+10,isizef
1280 23
FORMAT (
'(11X,21HIN ABOVE MESSAGE, R',i1,
'=,E', &
1282 IF (i.EQ.1)
WRITE (iunit,form) r1
1283 IF (i.EQ.2)
WRITE (iunit,form) r2
1285 IF (lkntrl.LE.0)
GO TO 40
1287 WRITE (iunit,30) lerr
1288 30
FORMAT (15h error number =,i10)
1292 IF (lkntrl.GT.0)
CALL fdump
1295 IF ((llevel.EQ.2).OR.((llevel.EQ.1).AND.(mkntrl.EQ.2))) &
1298 IF (ifatal.LE.0)
RETURN 1299 IF ((lkntrl.LE.0).OR.(kount.GT.max(1,maxmes)))
GO TO 120
1301 IF (llevel.EQ.1)
CALL xerprt &
1302 (
'JOB ABORT DUE TO UNRECOVERED ERROR.',35)
1303 IF (llevel.EQ.2)
CALL xerprt &
1304 (
'JOB ABORT DUE TO FATAL ERROR.',29)
1306 CALL xersav(
' ',-1,0,0,kdummy)
1309 IF ((llevel.EQ.2).AND.(kount.GT.max(1,maxmes))) lmessg = 0
1310 CALL xerabt(messg,lmessg)
1312 END SUBROUTINE xerrwv
1314 FUNCTION j4save(IWHICH,IVALUE,ISET)
1359 DATA iparam(1),iparam(2),iparam(3),iparam(4)/0,2,0,10/
1361 DATA iparam(6),iparam(7),iparam(8),iparam(9)/0,0,0,0/
1363 j4save = iparam(iwhich)
1364 IF (iset) iparam(iwhich) = ivalue
1368 SUBROUTINE xersav(MESSG,NMESSG,NERR,LEVEL,ICOUNT)
1402 CHARACTER*20 mestab(10),mes
1403 dimension nertab(10),levtab(10),kount(10)
1404 SAVE mestab,nertab,levtab,kount,kountx
1407 DATA kount(1),kount(2),kount(3),kount(4),kount(5), &
1408 kount(6),kount(7),kount(8),kount(9),kount(10) &
1409 /0,0,0,0,0,0,0,0,0,0/
1412 IF (nmessg.GT.0)
GO TO 80
1414 IF (kount(1).EQ.0)
RETURN 1416 CALL xgetua(lun,nunit)
1419 IF (iunit.EQ.0) iunit = i1mach(4)
1422 10
FORMAT (32h0 error message summary/ &
1423 51h message start nerr level count)
1426 IF (kount(i).EQ.0)
GO TO 30
1427 WRITE (iunit,15) mestab(i),nertab(i),levtab(i),kount(i)
1428 15
FORMAT (1x,a20,3i10)
1432 IF (kountx.NE.0)
WRITE (iunit,40) kountx
1433 40
FORMAT (41h0other errors not individually tabulated=,i10)
1437 IF (nmessg.LT.0)
RETURN 1450 IF (kount(i).EQ.0)
GO TO 110
1451 IF (mes.NE.mestab(i))
GO TO 90
1452 IF (nerr.NE.nertab(i))
GO TO 90
1453 IF (level.NE.levtab(i))
GO TO 90
1462 100 kount(ii) = kount(ii) + 1
1466 110 mestab(ii) = mes
1472 END SUBROUTINE xersav
1474 SUBROUTINE xgetua(IUNITA,N)
1513 n = j4save(5,0,.false.)
1516 IF (i.EQ.1) index = 3
1517 iunita(i) = j4save(index,0,.false.)
1520 END SUBROUTINE xgetua
1522 SUBROUTINE xerctl(MESSG1,NMESSG,NERR,LEVEL,KONTRL)
1569 END SUBROUTINE xerctl
1571 SUBROUTINE xerprt(MESSG,NMESSG)
1602 CALL xgetua(lun,nunit)
1606 IF (iunit.EQ.0) iunit = i1mach(4)
1607 DO 10 ichar=1,lenmes,72
1608 last = min(ichar+71 , lenmes)
1609 WRITE (iunit,
'(1X,A)') messg(ichar:last)
1613 END SUBROUTINE xerprt
1639 END SUBROUTINE fdump
1641 SUBROUTINE xerabt(MESSG,NMESSG)
1672 END SUBROUTINE xerabt