*DECK DAIGBT
SUBROUTINE DAIGBT (RES, ADDA, NEQ, T, Y, YDOT,
1 MB, NB, PW, IPVT, IER )
EXTERNAL RES, ADDA
INTEGER NEQ, MB, NB, IPVT, IER
INTEGER I, LENPW, LBLOX, LPB, LPC
DOUBLE PRECISION T, Y, YDOT, PW
DIMENSION Y(*), YDOT(*), PW(*), IPVT(*), NEQ(*)
C-----------------------------------------------------------------------
C This subroutine computes the initial value
C of the vector YDOT satisfying
C A * YDOT = g(t,y)
C when A is nonsingular. It is called by DLSOIBT for
C initialization only, when ISTATE = 0 .
C DAIGBT returns an error flag IER:
C IER = 0 means DAIGBT was successful.
C IER .ge. 2 means RES returned an error flag IRES = IER.
C IER .lt. 0 means the A matrix was found to have a singular
C diagonal block (hence YDOT could not be solved for).
C-----------------------------------------------------------------------
LBLOX = MB*MB*NB
LPB = 1 + LBLOX
LPC = LPB + LBLOX
LENPW = 3*LBLOX
DO 10 I = 1,LENPW
10 PW(I) = 0.0D0
IER = 1
CALL RES (NEQ, T, Y, PW, YDOT, IER)
IF (IER .GT. 1) RETURN
CALL ADDA (NEQ, T, Y, MB, NB, PW(1), PW(LPB), PW(LPC) )
CALL DDECBT (MB, NB, PW, PW(LPB), PW(LPC), IPVT, IER)
IF (IER .EQ. 0) GO TO 20
IER = -IER
RETURN
20 CALL DSOLBT (MB, NB, PW, PW(LPB), PW(LPC), YDOT, IPVT)
RETURN
C----------------------- End of Subroutine DAIGBT ----------------------
END