965 INTEGER iband, ibegin, idid, ier, iinteg, ijac,
init, intflg,
966 1 iowns, ipar, iquit, itol, itstop, iwm, jstart, k, kflag,
967 2 ksteps, l, lacor, ldum, lewt, lsavf, ltol, lwm, lyh, maxnum,
968 3 maxord, meth, miter, n, natolp, neq, nfe, nje, nq, nqu,
970 DOUBLE PRECISION absdel, acor, atol, big,
d1mach, del,
971 1 delsgn, dt,
dvnrms, el0, ewt,
972 2 h, ha, hmin, hmxi, hu, rowns, rpar, rtol, savf, t, tol,
973 3 told, tolfac, tout, tstop, u, wm, x, y, yh, yh1, ypout
976 CHARACTER*16 xern3, xern4
978 dimension y(*),ypout(*),yh(neq,6),yh1(*),ewt(*),savf(*),
979 1 acor(*),wm(*),iwm(*),rtol(*),atol(*),rpar(*),ipar(*)
982 COMMON /ddebd1/ told,rowns(210),el0,h,hmin,hmxi,hu,x,u,iquit,
init,
983 1 lyh,lewt,lacor,lsavf,lwm,ksteps,ibegin,itol,
984 2 iinteg,itstop,ijac,iband,iowns(6),ier,jstart,
985 3 kflag,ldum,meth,miter,maxord,n,nq,nst,nfe,nje,nqu
1002 IF (ibegin .EQ. 0)
THEN 1028 IF (ijac .EQ. 0 .AND. iband .EQ. 0) miter = 2
1029 IF (ijac .EQ. 1 .AND. iband .EQ. 0) miter = 1
1030 IF (ijac .EQ. 0 .AND. iband .EQ. 1) miter = 5
1031 IF (ijac .EQ. 1 .AND. iband .EQ. 1) miter = 4
1048 IF (neq .LT. 1)
THEN 1049 WRITE (xern1,
'(I8)') neq
1050 CALL xermsg (
'SLATEC',
'DLSOD',
1051 *
'IN DDEBDF, THE NUMBER OF EQUATIONS MUST BE A ' //
1052 *
'POSITIVE INTEGER.$$YOU HAVE CALLED THE CODE WITH NEQ = ' //
1060 IF (nrtolp .LE. 0)
THEN 1061 IF (rtol(k) .LT. 0.)
THEN 1062 WRITE (xern1,
'(I8)') k
1063 WRITE (xern3,
'(1PE15.6)') rtol(k)
1064 CALL xermsg (
'SLATEC',
'DLSOD',
1065 *
'IN DDEBDF, THE RELATIVE ERROR TOLERANCES MUST ' //
1066 *
'BE NON-NEGATIVE.$$YOU HAVE CALLED THE CODE WITH ' //
1067 *
'RTOL(' // xern1 //
') = ' // xern3 //
'$$IN THE ' //
1068 *
'CASE OF VECTOR ERROR TOLERANCES, NO FURTHER ' //
1069 *
'CHECKING OF RTOL COMPONENTS IS DONE.', 7, 1)
1071 IF (natolp .GT. 0)
GO TO 70
1073 ELSEIF (natolp .GT. 0)
THEN 1078 IF (atol(k) .LT. 0.)
THEN 1079 WRITE (xern1,
'(I8)') k
1080 WRITE (xern3,
'(1PE15.6)') atol(k)
1081 CALL xermsg (
'SLATEC',
'DLSOD',
1082 *
'IN DDEBDF, THE ABSOLUTE ERROR ' //
1083 *
'TOLERANCES MUST BE NON-NEGATIVE.$$YOU HAVE CALLED ' //
1084 *
'THE CODE WITH ATOL(' // xern1 //
') = ' // xern3 //
1085 *
'$$IN THE CASE OF VECTOR ERROR TOLERANCES, NO FURTHER ' 1086 * //
'CHECKING OF ATOL COMPONENTS IS DONE.', 8, 1)
1088 IF (nrtolp .GT. 0)
GO TO 70
1091 50
IF (itol .EQ. 0)
GO TO 70
1094 70
IF (itstop .EQ. 1)
THEN 1095 IF (sign(1.0d0,tout-t) .NE. sign(1.0d0,tstop-t) .OR.
1096 1 abs(tout-t) .GT. abs(tstop-t))
THEN 1097 WRITE (xern3,
'(1PE15.6)') tout
1098 WRITE (xern4,
'(1PE15.6)') tstop
1099 CALL xermsg (
'SLATEC',
'DLSOD',
1100 *
'IN DDEBDF, YOU HAVE CALLED THE ' //
1101 *
'CODE WITH TOUT = ' // xern3 //
'$$BUT YOU HAVE ' //
1102 *
'ALSO TOLD THE CODE NOT TO INTEGRATE PAST THE POINT ' //
1103 *
'TSTOP = ' // xern4 //
' BY SETTING INFO(4) = 1.$$' //
1104 *
'THESE INSTRUCTIONS CONFLICT.', 14, 1)
1111 IF (
init .NE. 0)
THEN 1112 IF (t .EQ. tout)
THEN 1113 WRITE (xern3,
'(1PE15.6)') t
1114 CALL xermsg (
'SLATEC',
'DLSOD',
1115 *
'IN DDEBDF, YOU HAVE CALLED THE CODE WITH T = TOUT = ' //
1116 * xern3 //
'$$THIS IS NOT ALLOWED ON CONTINUATION CALLS.',
1121 IF (t .NE. told)
THEN 1122 WRITE (xern3,
'(1PE15.6)') told
1123 WRITE (xern4,
'(1PE15.6)') t
1124 CALL xermsg (
'SLATEC',
'DLSOD',
1125 *
'IN DDEBDF, YOU HAVE CHANGED THE VALUE OF T FROM ' //
1126 * xern3 //
' TO ' // xern4 //
1127 *
' THIS IS NOT ALLOWED ON CONTINUATION CALLS.', 10, 1)
1131 IF (
init .NE. 1)
THEN 1132 IF (delsgn*(tout-t) .LT. 0.0d0)
THEN 1133 WRITE (xern3,
'(1PE15.6)') tout
1134 CALL xermsg (
'SLATEC',
'DLSOD',
1135 *
'IN DDEBDF, BY CALLING THE CODE WITH TOUT = ' //
1136 * xern3 //
' YOU ARE ATTEMPTING TO CHANGE THE ' //
1137 *
'DIRECTION OF INTEGRATION.$$THIS IS NOT ALLOWED ' //
1138 *
'WITHOUT RESTARTING.', 11, 1)
1144 IF (idid .EQ. (-33))
THEN 1145 IF (iquit .NE. (-33))
THEN 1150 CALL xermsg (
'SLATEC',
'DLSOD',
1151 *
'IN DDEBDF, INVALID INPUT WAS DETECTED ON ' //
1152 *
'SUCCESSIVE ENTRIES. IT IS IMPOSSIBLE TO PROCEED ' //
1153 *
'BECAUSE YOU HAVE NOT CORRECTED THE PROBLEM, ' //
1154 *
'SO EXECUTION IS BEING TERMINATED.', 12, 2)
1168 IF (rtol(k) + atol(k) .GT. 0.0d0)
GO TO 170
1173 IF (itol .EQ. 0)
GO TO 190
1177 IF (idid .NE. (-2))
GO TO 200
1196 IF (
init .EQ. 0)
GO TO 210
1198 IF (
init .EQ. 1)
GO TO 230
1210 CALL df(t,y,yh(1,2),rpar,ipar)
1213 IF (t .NE. tout)
GO TO 230
1230 IF (itol .EQ. 1) ltol = l
1231 tol = rtol(ltol)*abs(y(l)) + atol(ltol)
1232 IF (tol .EQ. 0.0d0)
GO TO 390
1237 CALL dhstrt(
df,neq,t,tout,y,yh(1,2),ewt,1,u,big,
1238 1 yh(1,3),yh(1,4),yh(1,5),yh(1,6),rpar,
1241 delsgn = sign(1.0d0,tout-t)
1267 IF (abs(x-t) .LT. absdel)
GO TO 290
1268 CALL dintyd(tout,0,yh,neq,y,intflg)
1269 CALL dintyd(tout,1,yh,neq,ypout,intflg)
1271 IF (x .NE. tout)
GO TO 280
1284 IF (itstop .NE. 1)
GO TO 310
1285 IF (abs(tstop-x) .GE. 100.0d0*u*abs(x))
1289 y(l) = yh(l,1) + (dt/h)*yh(l,2)
1291 CALL df(tout,y,ypout,rpar,ipar)
1300 IF (iinteg .EQ. 0 .OR. .NOT.intout)
GO TO 320
1312 IF (ksteps .LE. maxnum)
GO TO 330
1326 hmin = 100.0d0*u*abs(x)
1327 ha =
max(abs(h),hmin)
1329 1 ha =
min(ha,abs(tstop-x))
1333 IF (itol .EQ. 1) ltol = l
1334 ewt(l) = rtol(ltol)*abs(yh(l,1))
1337 IF (ewt(l) .LE. 0.0d0)
GO TO 380
1339 tolfac = u*
dvnrms(neq,yh,ewt)
1341 IF (tolfac .LE. 1.0d0)
GO TO 400
1345 tolfac = 2.0d0*tolfac
1346 rtol(1) = tolfac*rtol(1)
1347 atol(1) = tolfac*atol(1)
1348 IF (itol .EQ. 0)
GO TO 360
1350 rtol(l) = tolfac*rtol(l)
1351 atol(l) = tolfac*atol(l)
1372 CALL dstod(neq,y,yh,neq,yh1,ewt,savf,acor,wm,iwm,
1377 IF (kflag .EQ. 0)
GO TO 270
1381 IF (kflag .EQ. -1)
GO TO 410
1401 ypout(l) = yh(l,2)/h
subroutine init(nktet, inodfa, ipofa, netet_)
Definition: init.f:20
subroutine dintyd(T, K, YH, NYH, DKY, IFLAG)
Definition: ddebdf.f:2288
#define max(a, b)
Definition: cascade.c:32
double precision function d1mach(I)
Definition: ddeabm.f:2012
subroutine df(x, u, uprime, rpar, nev)
Definition: subspace.f:133
subroutine xermsg(LIBRAR, SUBROU, MESSG, NERR, LEVEL)
Definition: ddeabm.f:1265
#define min(a, b)
Definition: cascade.c:31
double precision function dvnrms(N, V, W)
Definition: ddebdf.f:2252
subroutine djac(x, u, pd, nrowpd, rpar, nev)
Definition: subspace.f:163
subroutine dstod(NEQ, Y, YH, NYH, YH1, EWT, SAVF, ACOR, WM, IWM, DF, DJAC, RPAR, IPAR)
Definition: ddebdf.f:1413
subroutine dhstrt(DF, NEQ, A, B, Y, YPRIME, ETOL, MORDER, SMALL, BIG, SPY, PV, YP, SF, RPAR, IPAR, H)
Definition: ddeabm.f:4092