Numerical solution of DAE problems
Numerical solution of DAE problems
Numerical solution of DAE problems
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Numerical</strong> <strong>solution</strong> <strong>of</strong> <strong>DAE</strong> <strong>problems</strong><br />
DAVIDE MANCA, GUIDO BUZZI-FERRARIS<br />
CMIC Department, Politecnico di Milano P.zza Leonardo da Vinci, 32 – 20133 MILAN – ITALY<br />
The paper describes a modern approach to the <strong>solution</strong> <strong>of</strong> Differential and Algebraic Equation (<strong>DAE</strong>) Systems<br />
through a C++ routine: BzzDae belonging to BzzMath that is a freeware library. After an introduction on<br />
BzzMath and the object oriented approach to numerical <strong>problems</strong> the manuscript focuses the attention on<br />
the robustness and efficiency features that characterize BzzDae respect the Fortran routine counterparts. A<br />
number <strong>of</strong> clarifications are given to describe the capabilities <strong>of</strong> BzzDae over the other solvers. Finally, a<br />
quite simple but challenging case-study applied to catalytic oxidation is reported to quantify the performance<br />
improvement <strong>of</strong> BzzDae while emphasizing its robustness.<br />
Keywords: <strong>DAE</strong> systems, numerical solver, efficiency, robustness, object oriented programming.<br />
The <strong>solution</strong> <strong>of</strong> applied numerical <strong>problems</strong> dealing with<br />
the integration <strong>of</strong> Differential and Algebraic Equation (<strong>DAE</strong>)<br />
Systems calls for the adoption <strong>of</strong> a suitable solver. The<br />
complexity <strong>of</strong> the problem resides mainly in the intrinsic<br />
stiffness <strong>of</strong> the <strong>DAE</strong> system as reported by Shampine in<br />
1985. This means that specific attention has to be paid to<br />
both numerical methods and solver routines. In fact, the<br />
<strong>DAE</strong> problem is quite challenging, not only for the precision<br />
required, but also in terms <strong>of</strong> robustness and efficiency.<br />
For example, when combustion processes are involved,<br />
the robustness feature can be referred to sudden ignitions,<br />
steep pr<strong>of</strong>iles, high gradients, cool flames, and highly<br />
discontinuous temperature, pressure, and concentration<br />
pr<strong>of</strong>iles. On the other hand, the efficiency feature is mainly<br />
concerned with numerical simulations that can take<br />
several hours <strong>of</strong> CPU time. The relevant number <strong>of</strong><br />
equations, the structure <strong>of</strong> the Jacobian matrix (banded,<br />
block, sparse) as well as its evaluation and update are <strong>of</strong><br />
paramount importance when trying to address the<br />
efficiency feature. This manuscript presents the BzzDae<br />
solver, which is an object oriented class written in C++,<br />
belonging to the BzzMath library [6, 17].<br />
Generally speaking, BzzMath can be though <strong>of</strong> a<br />
s<strong>of</strong>tware library for the <strong>solution</strong> <strong>of</strong> specific numerical<br />
<strong>problems</strong>. Actually, BzzMath can be better defined as a<br />
numerical project that was born more sixteen years ago<br />
to address and solve applied numerical <strong>problems</strong>. Large<br />
projects on scientific computing date back to the seventies<br />
<strong>of</strong> last century with well-known packages such as IMSL<br />
from Visual Numerics and NAG from NAG Ltd. Both libraries<br />
were first developed in Fortran. In the following, less<br />
successful and extended versions were ported also to C,<br />
C++ and finally to Java. C++ was a catalyst for this rapid<br />
evolution in the programming world. Both operating<br />
systems and compilers, in a cyclic and virtuous interaction,<br />
took advantage from object orientation and allowed<br />
building new development tools that were more and more<br />
powerful and user friendlier. As it is <strong>of</strong>ten recommended<br />
when programming techniques are involved, a clear cut is<br />
better than a progressive migration. A sudden switch from<br />
old legacy code, developed in Fortran 66 and 77, to the<br />
new way <strong>of</strong> thinking in C++ allowed starting from scratch<br />
the BzzMath project. No previous Fortran code was ported<br />
nor translated to C++. First <strong>of</strong> all a new way <strong>of</strong> conceiving<br />
the implementation <strong>of</strong> a numerical algorithm within the<br />
C++ language had to be understood and finally<br />
implemented. There was need for organizing and<br />
* davide.manca@polimi.it<br />
410<br />
structuring a numerical method into an object. Actually,<br />
the procedural approach is put aside from C++; no more<br />
separation between routines and data is allowed. A C++<br />
object contains (encapsulates) both data and instructions.<br />
A C++ object belongs to a class that exports methods and<br />
properties to exchange data and actions with other objects.<br />
A program puts together one or more objects that finally<br />
interact with the user in terms <strong>of</strong> input and output data<br />
(numbers, strings, diagrams, windows, objects).<br />
The BzzMath project<br />
Starting from the main three features <strong>of</strong> C++:<br />
encapsulation, polymorphism and inheritance [15] an<br />
articulate tree <strong>of</strong> classes was progressively coded into<br />
BzzMath to cover the following numerical analysis topics:<br />
vectors, arrays, complex numbers, linear algebra, root<br />
finding, non linear algebraic systems, ordinary differential<br />
equations and differential algebraic equations with initial<br />
conditions, linear and non linear regressions, mono and<br />
multidimensional unconstrained optimization,<br />
interpolation and quadrature. Some algorithms are still<br />
under development: constrained optimization, ODE<br />
systems with boundary conditions, partial differential<br />
equations. Each <strong>of</strong> the aforementioned numerical subjects<br />
branches into several other subclasses that are meant to<br />
solve dedicated <strong>problems</strong> whose structure is well defined<br />
and peculiar.<br />
One <strong>of</strong> the advantages <strong>of</strong> C++, i.e. inheritance, allows<br />
to simply developing a new customized class <strong>of</strong> objects<br />
that inherits the properties and methods <strong>of</strong> the parent class<br />
while implementing new features and superimposing other<br />
characteristics. BzzMath was developed with a main<br />
objective in mind: analytical rigor in the implementation<br />
coupled to easiness for the user. The user is guided and<br />
preserved from common coding errors. It is rather<br />
impossible to overwrite input data, to destroy reserved<br />
properties or to make an inconsistent use <strong>of</strong> available<br />
methods within a BzzMath object. This feature is <strong>of</strong><br />
paramount importance since it avoids either devious<br />
runtime errors or semantic mistakes. A further objective<br />
that deeply characterized the programming approach <strong>of</strong><br />
BzzMath is efficiency coupled to robustness. Robustness<br />
is for sure preferred to efficiency in the sense that the first<br />
issue to be addressed is the algorithm and code robustness.<br />
Once robustness is achieved then comes efficiency that in<br />
the world <strong>of</strong> numerical analysis means CPU time<br />
optimization. This feature was always pursued by<br />
REV. CHIM. (Bucureºti) ♦ 58 ♦ Nr. 4 ♦ 2007
numerically fine tuning the algorithm through<br />
measurement <strong>of</strong> benchmark <strong>problems</strong> and comparison<br />
with both freeware and commercial routines. Contrary to<br />
common sense, it happens frequently to find public domain<br />
routines that are far better than commercial counterparts<br />
both in terms <strong>of</strong> features and performance. When we<br />
speak <strong>of</strong> benchmark <strong>problems</strong> we do not refer to literature<br />
case studies only, but also to applied and challenging<br />
<strong>problems</strong> that require significant amounts <strong>of</strong> CPU time.<br />
Frequently, the BzzMath project released new classes<br />
specifically intended to solve and improve difficult<br />
numerical <strong>problems</strong> coming from several branches <strong>of</strong><br />
chemical engineering calculus.<br />
BzzMath is available on the Internet at<br />
www.chem.polimi.it/homes/gbuzzi/ and is downloadable<br />
as freeware s<strong>of</strong>tware for non commercial use. A<br />
compressed archive <strong>of</strong> about 20 MB contains hundreds <strong>of</strong><br />
files and dozens <strong>of</strong> directories well organized in a<br />
hierarchical structure.<br />
<strong>Numerical</strong> methods and routines for <strong>DAE</strong> systems<br />
Before addressing the <strong>DAE</strong> subject, it is worth spending<br />
some words on the numerical algorithms for the <strong>solution</strong><br />
<strong>of</strong> ordinary differential equation (ODE) systems. As the<br />
ancestors <strong>of</strong> <strong>DAE</strong> packages, ODE solvers share several<br />
peculiarities and a common theoretical background with<br />
them. Starting from DIFSUB [12] and passing to GEAR [13],<br />
LSODE [14], VODE [4, 9] and BzzOde [7], the improvement<br />
in terms <strong>of</strong> the features and capabilities <strong>of</strong> ODE solvers<br />
has been continuous, mainly in terms <strong>of</strong> robustness and<br />
efficiency. As far as the <strong>DAE</strong> systems are concerned,<br />
besides the well known LSODI routine [14], the most<br />
recent decades were characterized by the evolution <strong>of</strong> the<br />
DASSL routine [18] into DASPK [5] and by the introduction<br />
<strong>of</strong> BzzDae ]16]. Other integration routines such as: LIMEX<br />
from Nowak and Zugck [11], <strong>DAE</strong>SOL from Bock [1] and<br />
SPRINT [2] are also mentioned in the literature but are not<br />
so widely diffused as the previous ones. The aim <strong>of</strong> this<br />
paper is to present and discuss a few modifications and<br />
numerical expedients introduced into BzzDae respect the<br />
well known Fortran routines to increase the computational<br />
efficiency <strong>of</strong> the methods while overcoming their<br />
numerical instability.<br />
Usually speaking, when chemical engineering <strong>problems</strong><br />
are involved, the dynamic simulation <strong>of</strong> a process/system/<br />
equipment calls for the <strong>solution</strong> <strong>of</strong> a differentialalgebraic<br />
equation (<strong>DAE</strong>) system. The differential equations, which<br />
describe the time or space evolution <strong>of</strong> the investigated<br />
system are <strong>of</strong>ten first order with initial value conditions.<br />
The algebraic portion usually comes from equations <strong>of</strong><br />
state, chemical and physical equilibria, stoichiometric<br />
consistency and boundary conditions. As before said, a<br />
quite important feature <strong>of</strong> <strong>DAE</strong> systems is their intrinsic<br />
stiffness [20]. As a consequence, a dedicated numerical<br />
routine must be adopted when solving these stiff <strong>problems</strong>.<br />
Often the simulation <strong>of</strong> such processes is quite challenging<br />
in terms <strong>of</strong>: precision (unbalance in the dynamics <strong>of</strong><br />
reactants/products and radicals) efficiency (a simulation<br />
can take more several hours and even days <strong>of</strong> CPU time)<br />
and robustness (short-lived species, sudden ignition, steep<br />
pr<strong>of</strong>iles, high gradients) here following is reported a rather<br />
concise description <strong>of</strong> the main features <strong>of</strong> BzzDae.<br />
On the robustness side BzzDae is characterized by the<br />
following features:<br />
1.If the real modeled problem is based on variables that<br />
are physically bounded, the only Fortran routine able to deal<br />
with constraints is DASPK. DASPK apparently allows<br />
assigning a nonnegative constraint to the <strong>solution</strong> vector<br />
REV. CHIM. (Bucureºti) ♦ 58 ♦ Nr. 4 ♦ 2007<br />
y throughout the integration path. By setting an internal<br />
index, when calling DASPK, the user can specify that<br />
should not be negative. This option is the first step towards<br />
the extended feature <strong>of</strong> BzzDae that allows specifying both<br />
minimum and maximum constraints. With reference to<br />
DASPK, if the model subroutine (FEX) comprises functions,<br />
which cannot accept negative arguments, then the<br />
integration program will abort during the execution, with a<br />
floating point exception, as soon as y becomes negative.<br />
This could seem to be nonsensical since DASPK has been<br />
informed that negative y elements should be avoided. The<br />
problem is that DASPK checks for nonnegative values,<br />
setting the negative variables equal to zero, only after the<br />
corrector procedure has reached the convergence within<br />
the required precision limit. This means that if, during the<br />
predictor step or the corrector iterations, any value <strong>of</strong> y<br />
become negative, the solver will not take any action to<br />
overcome the negative value problem. This is the reason<br />
for the possible math error here described. The DASPK<br />
solver also relies on another method to address this issue:<br />
the user can check the consistency <strong>of</strong> input vector<br />
through a communication status variable and immediately<br />
return the control to the solver. In this case, DASPK reduces<br />
the step size and checks again the convergence within the<br />
corrector, but if the integration routine, at the last successful<br />
step n, has found and then any predictor<br />
action on the following n+1 step will be negative<br />
: inducing DASPK to reduce the step size<br />
indefinitely, until DASPK finally aborts the integration<br />
procedure due to a step size h → 0. The correct approach<br />
to the constrained problem should come from the <strong>DAE</strong><br />
solver in terms <strong>of</strong> decisions to be made at each step <strong>of</strong> the<br />
integration procedure. This is the only way in which the<br />
<strong>DAE</strong> system routine is safe and math errors are avoided a<br />
priori. Within BzzDae the user (if required by the problem’s<br />
nature) simply assigns the maximum and/or minimum<br />
constraint vectors. The solver automatically handles the<br />
constraints, taking care not to violate the assigned bounds.<br />
The control is performed before passing any illegal values<br />
to the <strong>DAE</strong> system routine. The correction vector, b, is<br />
accepted only when the nonlinear system, resulting from<br />
the <strong>DAE</strong> problem, is accurately solved within the assigned<br />
precision and, at the same time complies with the<br />
constraints. Doing so, the <strong>DAE</strong> function is always computed<br />
with safe values.<br />
2.BzzDae adopts a stabilization technique when<br />
repeated convergence failures occur. The integration order<br />
is automatically reduced to one and the <strong>DAE</strong> solver restarts<br />
from the last successful convergence point. By doing so,<br />
the numerical problem becomes completely consistent as<br />
shown in detail by [7] and [16].<br />
3.Both the order and step size are reduced when there<br />
are convergence <strong>problems</strong>.<br />
4.As suggested by [3] the order is reduced when the<br />
elements <strong>of</strong> the Nordsieck vector are not decreasing.<br />
On the efficiency side BzzDae is characterized by the<br />
following features:<br />
1.As it happens within DASPK, and contrary to LSODI,<br />
there is a distinct memory allocation for both the Jacobian<br />
matrix, J, and its factorization G =(I - hr o<br />
J). A direct<br />
consequence <strong>of</strong> such a feature is an overall efficiency<br />
improvement since when a different step size or method<br />
order is chosen, there is no need to reevaluate the Jacobian<br />
matrix, J, and then superimpose its factorization, G, that<br />
is needed by the nonlinear system solver based on the<br />
Newton method. Most <strong>of</strong> the <strong>DAE</strong> chemical <strong>problems</strong> have<br />
the following characteristics: (1) each function evaluation<br />
(<strong>DAE</strong> system) is highly time consuming, (2) the Jacobian<br />
411
matrix, J, is evaluated numerically by finite differences, (3)<br />
the number <strong>of</strong> equations is quite relevant. From this point<br />
<strong>of</strong> view, it is evident that function evaluations have the<br />
greatest impact on the CPU time [15]. The Jacobian<br />
evaluation becomes more and more exacting when the<br />
equations number increases.<br />
2.BzzDae follows a different criterion with respect to<br />
DASPK in determining when to update the Jacobian matrix.<br />
The first significant difference is that BzzDae checks<br />
whether J is out <strong>of</strong> date through the following equation:<br />
, where<br />
are the variables at the and iterations n +1 and is the<br />
time derivative <strong>of</strong> the <strong>DAE</strong> system. When the equations<br />
number, n eq<br />
, is high, the Jacobian numerical evaluation is<br />
rather time consuming so it is advisable to delay the update<br />
<strong>of</strong> J as far as possible. Conversely, if the system has few<br />
equations, it is convenient to evaluate J more frequently<br />
in order to increase the Newton method efficiency with a<br />
reduced effort. Due to these considerations, BzzDae<br />
evaluates a new Jacobian matrix at most after m steps,<br />
with m function <strong>of</strong> n eq<br />
. Since the Jacobian consistency is<br />
controlled in a deeper and more accurate way, respect to<br />
the conventional <strong>DAE</strong> routines, it is also safer to increase<br />
the maximum allowed steps performed, by keeping the<br />
Jacobian matrix constant.<br />
3.<strong>DAE</strong> systems characterized by sparse and not<br />
necessarily structured Jacobian matrices can be easily<br />
solved by exploiting the automatic memory allocation and<br />
matrix rearrangement <strong>of</strong> the C++ classes.<br />
The aforementioned features improve the overall<br />
performance <strong>of</strong> BzzDae when dealing with <strong>problems</strong><br />
characterized by:<br />
<strong>DAE</strong> systems with Jacobian matrices with complex λ<br />
eigenvalues having a negative real part Re(λ) < 0 and a<br />
large imaginary part |Im(λ) >>1. Physically speaking this<br />
means: highly oscillating <strong>problems</strong>;<br />
<strong>DAE</strong> systems with large discontinuities in the derivatives<br />
(i.e. discontinuous or piecewise physical properties, IF …<br />
THEN structures, code branching);<br />
<strong>DAE</strong> systems that require constrained integration<br />
variables, i.e. the dependent variables, , must belong to a<br />
feasible interval defined by lower and/or upper bound<br />
vectors.<br />
BzzDae integrates <strong>DAE</strong> systems <strong>of</strong> index 1 and 2 in the<br />
form: .<br />
In contrast with the DASSL/DASPK approach, BzzDae<br />
normalizes the algebraic portion <strong>of</strong> the Jacobian matrix by<br />
the step size: . With reference to the Jacobian matrix, G, <strong>of</strong><br />
the nonlinear system, the BzzDae formulation exploits the<br />
following structure:<br />
as opposite to the DASSL/DASPK structure:<br />
where: y 1<br />
are the differential variables, y 2<br />
are the algebraic<br />
variables, h is the stepsize and r o<br />
is the first coefficient <strong>of</strong><br />
BDF method. In [3] the user is suggested to divide the<br />
412<br />
algebraic equations for a constant proportional to h. The<br />
DASPK guide (Brown et al., 1992) suggests to multiply the<br />
algebraic equations by a constant which is proportional to<br />
the inverse <strong>of</strong> the stepsize . Since the second row elements<br />
<strong>of</strong> the original G matrix are multiplied by h, it is correct<br />
and advisable to automatically simplify such elements<br />
through an a priori division by h. This simple trick<br />
significantly increases the robustness and precision <strong>of</strong> the<br />
solver.<br />
An applied case-study: Methanol oxidation to<br />
formaldehyde in a gas-solid tubular catalytic reactor<br />
For the sake <strong>of</strong> conciseness, we will report only one<br />
applied numerical case-study. A larger number <strong>of</strong> casestudies<br />
can be found in [16]. The proposed case-study is<br />
based on the simulation <strong>of</strong> a fixedbed catalytic reactor.<br />
Catalyst pellets <strong>of</strong> a few millimeters are placed in small<br />
diameter tubes. Process gas flows through the catalyst and<br />
an external fluid removes reaction heat. The catalytic<br />
oxidation <strong>of</strong> methanol, as well as the successive oxidation<br />
<strong>of</strong> formaldehyde on a Fe-Mo catalyst, were studied and<br />
modeled by [10]. Relevant kinetic and catalyst data are<br />
given in that paper.<br />
The <strong>DAE</strong> system, describing the mass and energy<br />
balances on gas and solid phases is constituted by only 7<br />
differential and 6 algebraic equations[16]. This system is<br />
numerically solved by five different numerical routines:<br />
BzzDae, DASPK, LSODI, SPRINT and VODEBUNLSI. The<br />
coupled VODEBUNLSI routine solves the algebraic<br />
equations within the differential system with a very efficient<br />
nonlinear algebraic solver: BUNLSI [8]. Two different<br />
conditions are here considered. The first, and most severe<br />
one, allows the robustness <strong>of</strong> BzzDae to be demonstrated.<br />
Actually, this routine was the only one capable <strong>of</strong> finalizing<br />
the integration. The second situation (mild condition), still<br />
very simplified, compares the relative performances <strong>of</strong> the<br />
different codes.<br />
Case 1- Severe operating condition<br />
A stream containing 5% molar fraction <strong>of</strong> methanol in<br />
air feeds the aforementioned tubular reactor.<br />
Concentration is rather close to the lower flammability limit<br />
<strong>of</strong> the mixture. The integration is performed for one <strong>of</strong> the<br />
several thousands <strong>of</strong> tubes that are externally refrigerated<br />
by a cold fluid at constant temperature.<br />
Table 1 shows how BzzDae is able to integrate the <strong>DAE</strong><br />
system up to the total reactor volume, evaluating 1035<br />
functions and 17 Jacobians. On the contrary, DASPK,<br />
LSODI, SPRINT and VODEBUNLSI fail the integration due<br />
to a recurring problem in the molar fraction <strong>of</strong> methanol<br />
that, being consumed by the partial oxidation, becomes<br />
numerically negative. Since the kinetic equations require<br />
the square root evaluation <strong>of</strong> the molar fractions, it is<br />
evident that a mathematical error takes place as soon as<br />
such variables become negative. No effective improvement<br />
is taken in DASPK even if the user specifies that the<br />
dependent integration variables should be positive. As<br />
discussed in the previous section, such lower nonnegative<br />
bounds are considered only after a successful step is<br />
performed. In this case, it is necessary to preserve the<br />
system consistency along all the numerical evaluations<br />
since no negative mass fractions should be assumed.<br />
It seems relevant to observe that it is not convenient<br />
and it would not be correct, in terms <strong>of</strong> both numerical<br />
consistency and physical conditions, to force or to modify<br />
the integration variables within the system routine. For the<br />
sake <strong>of</strong> clarity, it is not convenient to force negative<br />
variables to zero or to assume absolute values, when a<br />
REV. CHIM. (Bucureºti) ♦ 58 ♦ Nr. 4 ♦ 2007
Table 1<br />
METHANOL OXIDATION: SEVERE OPERATING CONDITION<br />
Table 2<br />
METHANOL OXIDATION: SMILD OPERATING CONDITION<br />
square root is involved. Actually, the usermodified system<br />
can generate unexpected discontinuities either in the<br />
functions or in the derivatives, with the consequent failure<br />
<strong>of</strong> the multi-value solver.<br />
Case 2 - Mild operating condition<br />
A simpler and smoother <strong>solution</strong> is obtained when the<br />
inlet stream has a lower methanol fraction (2% mol). In<br />
this case, the five routines were able to cover the whole<br />
integration interval and produced the same results. Table<br />
2 reports the statistics <strong>of</strong> the computations in terms <strong>of</strong><br />
relative CPU time, integration steps, function and Jacobian<br />
evaluations. In this example, the enhanced efficiency <strong>of</strong><br />
BzzDae is still evident.<br />
Conclusions<br />
When addressing <strong>DAE</strong> <strong>problems</strong>, the presented<br />
examples clearly single out two major points. It is very<br />
advantageous to make use <strong>of</strong> <strong>DAE</strong> solvers and to avoid any<br />
decoupled implementation <strong>of</strong> the differential and the<br />
algebraic portions. The performance losses are evident<br />
when solving the algebraic portion inside the ordinary<br />
differential system.<br />
A second relevant aspect refers to the boundaries on<br />
the integration variables. As a matter <strong>of</strong> fact, the direct<br />
manipulation made by the solver itself <strong>of</strong> the lower and<br />
upper limits within the predictor/corrector steps is a critical<br />
feature in terms <strong>of</strong> both robustness and efficiency.<br />
Robustness and efficiency are not two antithetic terms.<br />
Conversely, when the numerical solver encompasses a<br />
crisis, during the <strong>DAE</strong> integration, the increment in<br />
robustness is tightly coupled to a performance<br />
enhancement. In this sense a robust numerical routine<br />
REV. CHIM. (Bucureºti) ♦ 58 ♦ Nr. 4 ♦ 2007<br />
should be able to debottleneck several stagnant situations,<br />
with evident performance improvements.<br />
The adoption <strong>of</strong> C++ classes for the <strong>solution</strong> <strong>of</strong> both<br />
ODE and <strong>DAE</strong> systems is not a problem also working in<br />
Fortran. A mixed language approach makes the integration<br />
seamless and effective. There is no need to modify the<br />
Fortran structure <strong>of</strong> the program. A direct call to the C++<br />
numerical solver is even simpler than calling the Fortran<br />
counterpart.<br />
References<br />
1. BAUER I., F. FINOCCHI, W.J. DUSCHL, H.-P. GAIL , J.P. SCHLÖDER,<br />
Simulation <strong>of</strong> chemical reactions and dust destruction in protoplanetary<br />
accretion disks, Astron. Astrophys., 317, 1997, p. 273<br />
2. BERZINS M., R. M. FURZELAND, A User’s Manual for SPRINT - A<br />
Versatile S<strong>of</strong>tware Package for Solving Systems <strong>of</strong> Algebraic Ordinary<br />
and Partial Differential Equations: Part 1 - Algebraic and Ordinary<br />
Differential Equations, Report TNER.85.058, Shell Research Ltd,<br />
Thornton Research Centre, Chester, 1985<br />
3. BRENAN K. E., S. L. CAMPBELL ,L. R. PETZOLD, <strong>Numerical</strong> Solution<br />
<strong>of</strong> Initial-Value Problems in Differential-Algebraic Equations, North-<br />
Holland, New York, 1989<br />
4. BROWN P.N., G.D. BYRNE, A.C. HINDMARSH, VODE: A Variable<br />
Coefficient ODE Solver, Siam J. Sci. Stat. Comput., 10, 1989, p, 1038.<br />
5. BROWN P.N., A.C. HINDMARSH, L.R. PETZOLD, A Description <strong>of</strong><br />
DASPK: A Solver for Large-Scale Differential-Algebraic Systems,<br />
Lawrence Livermore National Report UCRL, 1992<br />
6. BUZZI-FERRARIS G., Scientific C++: Building <strong>Numerical</strong> Libraries<br />
the Object-Oriented Way, Addison Wesley Longman, New York, 1993<br />
7. BUZZI-FERRARIS G., D. MANCA, BZZODE, A New C++ Class for the<br />
Solution <strong>of</strong> Stiff and Non Stiff Ordinary Differential Equation Systems,<br />
Comp. & Chem. Eng., 22,11, 1998, p. 1595<br />
413
8. BUZZIFERRARIS G., E. TRONCONI, Comp. & Chem. Eng.., 10, 1986,<br />
p. 129<br />
9. BYRNE G.D., A.M. DEAN, The <strong>Numerical</strong> Solution <strong>of</strong> Some Kinetics<br />
Models with VODE and CHEMKIN II, Comp. & Chem. Eng., 17 (1993)<br />
297-302.<br />
10. DENTE M., R. Poppi, I. Pasquon, Chim. Industria, 46,1964, p. 1326<br />
11.DEUFLHARD P., U. NOWAK, Extrapolation Integrators For Quasilinear<br />
Implicit Ode’s, University Of Heidelberg, SFB 123, Tech. Rep. 332, 1985,<br />
12. GEAR C.W., Algorithm 407, DIFSUB for Solution <strong>of</strong> Ordinary<br />
Differential Equations, Comm. ACM, 14, 3, 1971, p. 185<br />
13. HINDMARSH A.C., GEAR: Ordinary Differential Equation System<br />
Solver, Report UCID 30001, Rev. 3, Lawrence Livermore Laboratory,<br />
Livermore, CA, 1974<br />
14. HINDMARSH A.C., LSODE , LSODI, Two New Initial Value Ordinary<br />
Differential Equation Solvers, ACM SIGNUM Newsletters, 15 , 1980,<br />
p. 10<br />
15. MANCA D., T. FARAVELLI, G. PENNATI, G. BUZZI FERRARIS AND E.<br />
RANZI, <strong>Numerical</strong> Integration <strong>of</strong> Large Kinetic Systems, ICheaP-2 Conf.<br />
Ser., ERIS, 1995, p. 115<br />
16. MANCA D., G. BUZZI-FERRARIS, T. FARAVELLI, E. RANZI, Combust.<br />
Theory Modelling, 5, 2001, p. 185<br />
17. MANCA D., G. Buzzi-Ferraris, BzzMath: an Object Oriented<br />
<strong>Numerical</strong> Project, Proceedings <strong>of</strong> ICheaP 7, Taormina Italy, 15-18 May,<br />
2005<br />
18. PETZOLD L.R., A Description <strong>of</strong> DASSL: a Differential/Algebraic<br />
System Solver, Scientific Computing, R. S. Stepleman et al. (Eds.), North-<br />
Holland, Amsterdam, 1983<br />
19. RADHAKRISHNAN K., A. C. HINDMARSH, Description and Use <strong>of</strong><br />
LSODE, the Livermore Solver for Ordinary Differential Equations, NASA<br />
Ref. Publ. 1327, Livermore, 1993<br />
20. SHAMPINE L.F., What is Stiffness Stiff Computation, R. C. Aiken<br />
ed., Oxford University Press, New York, 1985<br />
Manuscript received: 10.04.2007<br />
414<br />
REV. CHIM. (Bucureºti) ♦ 58 ♦ Nr. 4 ♦ 2007