We address the following initial-value problem consisting of combinations of
N linear and nonlinear coupled, ordinary differential-algebraic
equations over the interval :
IVP:
with unknown state vector , known external inputs
, where
and
are the given initial-value,
derivative vectors, respectively. We will refer to Equation 9.11's
deviation from
as the residuals or residual vector. Evaluating the
residuals means computing
(``model
evaluation'') for specified arguments
,
,
and t.
DASSL's integration algorithm can be used to solve systems fully
implicit in and
and of index zero or one, and
specially structured forms of index two (and higher)
[Brenan:89a, Chapter 5], where the index is the minimum number of times
that part or all of Equation 9.11 must be differentiated with
respect to t in order to express
as a continuous function
of
and t [Brenan:89a, page 17].
By substituting a finite-difference approximation for
, we obtain:
a set of (in general) nonlinear staticized equations. A sequence of
Equation 9.12's will have to be solved, one at each discrete time
, in the numerical
approximation scheme; neither M nor the
's need be
predetermined. In DASSL, the variable step-size integration algorithm
picks the
's as the integration progresses, based on its
assessment of the local error. The discretization operator for
,
, varies during the numerical integration process and
hence is subscripted as
.
The usual way to solve an instance of the staticized equations,
Equation 9.12, is via the familiar Newton-Raphson iterative
method (yielding ):
given an initial, sufficiently good approximation . The
classical method is recovered for
and c = 1, whereas a modified
(damped) Newton-Raphson method results for
(respectively,
). In the original DASSL algorithm and in Concurrent
DASSL, the Jacobian
is
computed by finite differences rather than
analytically; this departure leads in another sense to a modified
Newton-Raphson method even though
and c = 1 might always
be satisfied. For termination, a limit
is imposed; a
further stopping criterion of the form
is also incorporated (see Brenan et al.
[Brenan:89a, pages 121-124]).
Following Brenan et al., the approximation is
replaced by a BDF-generated linear approximation,
,
and the Jacobian
From this approximation, we define in the intuitive way. We then consider Taylor's Theorem with
remainder, from which we can easily express a forward finite-difference
approximation for each Jacobian column (assuming sufficient smoothness of
) with a scaled difference of two residual vectors:
By picking proportional to
, the
junit vector in the natural basis for
, namely
, Equation 9.15 yields a
first-order-accurate approximation in
of the jcolumn of the
Jacobian matrix:
Each of these N Jacobian-column computations is independent and trivially parallelizable. It's well known, however, that for special structures such as banded and block n-diagonal matrices, and even for general sparse matrices, a single residual can be used to generate multiple Jacobian columns [Brenan:89a], [Duff:86a]. We discuss these issues as part of the concurrent formulation section below.
The solution of the Jacobian linear system of equations is required for each
k-iteration, either through a direct (e.g., LU-factorization) or
iterative (e.g., preconditioned-conjugate-gradient) method. The most
advantageous solution approach depends on N as well as special mathematical
properties and/or structure of the Jacobian matrix . Together, the inner (linear equation solution) and
outer (Newton-Raphson iteration) loops solve a single
time point; the overall algorithm generates a sequence of solution points
.
In the present work, we restrict our attention to direct, sparse linear algebra as described in [Skjellum:90d], although future versions of Concurrent DASSL will support the iterative linear algebra approaches by Ashby, Lee, Brown, Hindmarsh et al. [Ashby:90a], [Brown:91a]. For the sparse LU factorization, the factors are stored and reused in the modified Newton scenario. Then, repeated use of the old Jacobian implies just a forward- and back-solve step using the triangular factors L and U. Practically, we can use the Jacobian for up to about five steps [Brenan:89a]. The useful lifetime of a single Jacobian evidently depends somewhat strongly on details of the integration procedure [Brenan:89a].