30.12.2014 Views

Numerical solution of DAE problems

Numerical solution of DAE problems

Numerical solution of DAE problems

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!