where is the vector of solution components and is the independent variable.
nag_ode_ivp_rkts_range (d02pec) is designed for the usual task, namely to compute an approximate solution at a sequence of points. You must first call nag_ode_ivp_rkts_setup (d02pqc) to specify the problem and how it is to be solved. Thereafter you call nag_ode_ivp_rkts_range (d02pec) repeatedly with successive values of twant, the points at which you require the solution, in the range from tstart to tend (as specified in nag_ode_ivp_rkts_setup (d02pqc)). In this manner nag_ode_ivp_rkts_range (d02pec) returns the point at which it has computed a solution tgot (usually twant), the solution there (ygot) and its derivative (ypgot). If nag_ode_ivp_rkts_range (d02pec) encounters some difficulty in taking a step toward twant, then it returns the point of difficulty (tgot) and the solution and derivative computed there (ygot and ypgot, respectively).
Pointer to structure of type Nag_Comm; the following members are relevant to f.
user – double *
iuser – Integer *
p – Pointer
The type Pointer will be void *. Before calling nag_ode_ivp_rkts_range (d02pec) you may allocate memory and initialize these pointers with various quantities for use by f when called from nag_ode_ivp_rkts_range (d02pec) (see Section 18.104.22.168 in the Essential Introduction).
n – IntegerInput
On entry: , the number of ordinary differential equations in the system to be solved.
twant – doubleInput
On entry: , the next value of the independent variable where a solution is desired.
On exit: information about the integration for use on subsequent calls to nag_ode_ivp_rkts_range (d02pec) or other associated functions.
fail – NagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).
6 Error Indicators and Warnings
On entry, argument had an illegal value.
On entry, , but the value passed to the setup function was .
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
On entry, a previous call to the setup function has not been made or the communication arrays have become corrupted.
On entry, the communication arrays have become corrupted, or a catastrophic error has already been detected elsewhere. You cannot continue integrating the problem.
You cannot call this function after it has returned an error.
You must call the setup function to start another problem.
The global error assessment algorithm failed at start of integration.
The integration is being terminated.
The global error assessment may not be reliable for times beyond .
The integration is being terminated.
You cannot call this function when you have specified, in the setup function, that the step integrator will be used.
This function is being used inefficiently because the step size has been reduced drastically many times to obtain answers at many points. Using the order and pair method at setup is more appropriate here. You can continue integrating this problem.
In order to satisfy your error requirements the solver has to use a step size of at the current time, . This step size is too small for the machine precision, and is smaller than .
tend (setup) had already been reached in a previous call. To start a new problem, you will need to call the setup function.
twant does not lie in the direction of integration. .
twant lies beyond tend (setup) in the direction of integration. and .
twant lies beyond tend (setup) in the direction of integration, but is very close to tend. You may have intended . .
twant is too close to the last value of tgot (tstart on setup). When using the method of order at setup, these must differ by at least . Their absolute difference is .
Approximately function evaluations have been used to compute the solution since the integration started or since this message was last printed. Your problem has been diagnosed as stiff. If the situation persists, it will cost roughly times as much to reach tend (setup) as it has cost to reach the current time. You should probably call functions intended for stiff problems. However, you can continue integrating the problem.
Approximately function evaluations have been used to compute the solution since the integration started or since this message was last printed. However, you can continue integrating the problem.
The accuracy of integration is determined by the arguments tol and thresh in a prior call to nag_ode_ivp_rkts_setup (d02pqc) (see the function document for nag_ode_ivp_rkts_setup (d02pqc) for further details and advice). Note that only the local error at each step is controlled by these arguments. The error estimates obtained are not strict bounds but are usually reliable over one step. Over a number of steps the overall error may accumulate in various ways, depending on the properties of the differential system.
8 Parallelism and Performance
nag_ode_ivp_rkts_range (d02pec) is not threaded by NAG in any implementation.
nag_ode_ivp_rkts_range (d02pec) makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.
Please consult the Users' Note for your implementation for any additional implementation-specific information.
9 Further Comments
If nag_ode_ivp_rkts_range (d02pec) returns with NE_RK_STEP_TOO_SMALL and the accuracy specified by tol and thresh is really required then you should consider whether there is a more fundamental difficulty. For example, the solution may contain a singularity. In such a region the solution components will usually be large in magnitude. Successive output values of ygot and ymax should be monitored (or nag_ode_ivp_rkts_onestep (d02pfc) should be used since this takes one integration step at a time) with the aim of trapping the solution before the singularity. In any case numerical integration cannot be continued through a singularity, and analytical treatment may be necessary.
If nag_ode_ivp_rkts_range (d02pec) returns with NE_STIFF_PROBLEM then it is advisable to change to another code more suited to the solution of stiff problems. nag_ode_ivp_rkts_range (d02pec) will not return with NE_STIFF_PROBLEM if the problem is actually stiff but it is estimated that integration can be completed using less function evaluations than already computed.
This example solves the equation
over the range with initial conditions and . Relative error control is used with threshold values of for each solution component and compute the solution at intervals of length across the range. A low-order Runge–Kutta method (see nag_ode_ivp_rkts_setup (d02pqc)) is also used with tolerances and in turn so that the solutions can be compared.
See also Section 10 in nag_ode_ivp_rkts_errass (d02puc).