# NAG FL Interfaced02tvf (bvp_​coll_​nlin_​setup)

## 1Purpose

d02tvf is a setup routine which must be called prior to the first call of the nonlinear two-point boundary value solver d02tlf.

## 2Specification

Fortran Interface
 Subroutine d02tvf ( neq, m, nlbc, nrbc, ncol, tols, mesh,
 Integer, Intent (In) :: neq, m(neq), nlbc, nrbc, ncol, mxmesh, nmesh, ipmesh(mxmesh), lrcomm, licomm Integer, Intent (Inout) :: ifail Integer, Intent (Out) :: icomm(licomm) Real (Kind=nag_wp), Intent (In) :: tols(neq), mesh(mxmesh) Real (Kind=nag_wp), Intent (Out) :: rcomm(lrcomm)
#include <nag.h>
 void d02tvf_ (const Integer *neq, const Integer m[], const Integer *nlbc, const Integer *nrbc, const Integer *ncol, const double tols[], const Integer *mxmesh, const Integer *nmesh, const double mesh[], const Integer ipmesh[], double rcomm[], const Integer *lrcomm, Integer icomm[], const Integer *licomm, Integer *ifail)
The routine may be called by the names d02tvf or nagf_ode_bvp_coll_nlin_setup.

## 3Description

d02tvf and its associated routines (d02tlf, d02txf, d02tyf and d02tzf) solve the two-point boundary value problem for a nonlinear system of ordinary differential equations
 $y1m1 x = f1 x,y1,y11,…,y1m1-1,y2,…,ynmn-1 y2m2 x = f2 x,y1,y11,…,y1m1-1,y2,…,ynmn-1 ⋮ ynmn x = fn x,y1,y11,…,y1m1-1,y2,…,ynmn-1$
over an interval $\left[a,b\right]$ subject to $p$ ($\text{}>0$) nonlinear boundary conditions at $a$ and $q$ ($\text{}>0$) nonlinear boundary conditions at $b$, where $p+q=\sum _{i=1}^{n}{m}_{i}$. Note that ${y}_{i}^{\left(m\right)}\left(x\right)$ is the $m$th derivative of the $i$th solution component. Hence ${y}_{i}^{\left(0\right)}\left(x\right)={y}_{i}\left(x\right)$. The left boundary conditions at $a$ are defined as
 $gizya=0, i=1,2,…,p,$
and the right boundary conditions at $b$ as
 $g¯jzyb=0, j=1,2,…,q,$
where $y=\left({y}_{1},{y}_{2},\dots ,{y}_{n}\right)$ and
 $zyx = y1x, y11 x ,…, y1m1-1 x ,y2x,…, ynmn-1 x .$
See Section 9 for information on how boundary value problems of a more general nature can be treated.
d02tvf is used to specify an initial mesh, error requirements and other details. d02tlf is then used to solve the boundary value problem.
The solution routine d02tlf proceeds as follows. A modified Newton method is applied to the equations
 $yi mi x-fix,zyx= 0, i= 1,…,n$
and the boundary conditions. To solve these equations numerically the components ${y}_{i}$ are approximated by piecewise polynomials ${v}_{ij}$ using a monomial basis on the $j$th mesh sub-interval. The coefficients of the polynomials ${v}_{ij}$ form the unknowns to be computed. Collocation is applied at Gaussian points
 $vij mi xjk-fixjk,zvxjk=0, i=1,2,…,n,$
where ${x}_{jk}$ is the $k$th collocation point in the $j$th mesh sub-interval. Continuity at the mesh points is imposed, that is
 $vijxj+1-vi,j+1xj+1=0, i=1,2,…,n,$
where ${x}_{j+1}$ is the right-hand end of the $j$th mesh sub-interval. The linearized collocation equations and boundary conditions, together with the continuity conditions, form a system of linear algebraic equations, an almost block diagonal system which is solved using special linear solvers. To start the modified Newton process, an approximation to the solution on the initial mesh must be supplied via the procedure argument guess of d02tlf.
The solver attempts to satisfy the conditions
 $yi-vi 1.0+vi ≤tolsi, i=1,2,…,n,$ (1)
where ${v}_{i}$ is the approximate solution for the $i$th solution component and tols is supplied by you. The mesh is refined by trying to equidistribute the estimated error in the computed solution over all mesh sub-intervals, and an extrapolation-like test (doubling the number of mesh sub-intervals) is used to check for (1).
The routines are based on modified versions of the codes COLSYS and COLNEW (see Ascher et al. (1979) and Ascher and Bader (1987)). A comprehensive treatment of the numerical solution of boundary value problems can be found in Ascher et al. (1988) and Keller (1992).

## 4References

Ascher U M and Bader G (1987) A new basis implementation for a mixed order boundary value ODE solver SIAM J. Sci. Stat. Comput. 8 483–500
Ascher U M, Christiansen J and Russell R D (1979) A collocation solver for mixed order systems of boundary value problems Math. Comput. 33 659–679
Ascher U M, Mattheij R M M and Russell R D (1988) Numerical Solution of Boundary Value Problems for Ordinary Differential Equations Prentice–Hall
Gill P E, Murray W and Wright M H (1981) Practical Optimization Academic Press
Keller H B (1992) Numerical Methods for Two-point Boundary-value Problems Dover, New York
Schwartz I B (1983) Estimating regions of existence of unstable periodic orbits using computer-based techniques SIAM J. Sci. Statist. Comput. 20(1) 106–120

## 5Arguments

1: $\mathbf{neq}$Integer Input
On entry: $n$, the number of ordinary differential equations to be solved.
Constraint: ${\mathbf{neq}}\ge 1$.
2: $\mathbf{m}\left({\mathbf{neq}}\right)$Integer array Input
On entry: ${\mathbf{m}}\left(\mathit{i}\right)$ must contain ${m}_{i}$, the order of the $\mathit{i}$th differential equation, for $\mathit{i}=1,2,\dots ,n$.
Constraint: $1\le {\mathbf{m}}\left(\mathit{i}\right)\le 4$, for $\mathit{i}=1,2,\dots ,n$.
3: $\mathbf{nlbc}$Integer Input
On entry: $p$, the number of left boundary conditions defined at the left-hand end, $a$ ($\text{}={\mathbf{mesh}}\left(1\right)$).
Constraint: ${\mathbf{nlbc}}\ge 1$.
4: $\mathbf{nrbc}$Integer Input
On entry: $q$, the number of right boundary conditions defined at the right-hand end, $b$ ($\text{}={\mathbf{mesh}}\left({\mathbf{nmesh}}\right)$).
Constraints:
• ${\mathbf{nrbc}}\ge 1$;
• ${\mathbf{nlbc}}+{\mathbf{nrbc}}=\sum _{i=1}^{n}{\mathbf{m}}\left(i\right)$.
5: $\mathbf{ncol}$Integer Input
On entry: the number of collocation points to be used in each mesh sub-interval.
Constraint: ${m}_{\mathrm{max}}\le {\mathbf{ncol}}\le 7$, where ${m}_{\mathrm{max}}=\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}}\left(i\right)\right)$.
6: $\mathbf{tols}\left({\mathbf{neq}}\right)$Real (Kind=nag_wp) array Input
On entry: ${\mathbf{tols}}\left(i\right)$ must contain the error requirement for the $i$th solution component.
Constraint: , for $\mathit{i}=1,2,\dots ,n$.
7: $\mathbf{mxmesh}$Integer Input
On entry: the maximum number of mesh points to be used during the solution process.
Constraint: ${\mathbf{mxmesh}}\ge 2×{\mathbf{nmesh}}-1$.
8: $\mathbf{nmesh}$Integer Input
On entry: the number of points to be used in the initial mesh of the solution process.
Constraint: ${\mathbf{nmesh}}\ge 6$.
9: $\mathbf{mesh}\left({\mathbf{mxmesh}}\right)$Real (Kind=nag_wp) array Input
On entry: the positions of the initial nmesh mesh points. The remaining elements of mesh need not be set. You should try to place the mesh points in areas where you expect the solution to vary most rapidly. In the absence of any other information the points should be equally distributed on $\left[a,b\right]$.
${\mathbf{mesh}}\left(1\right)$ must contain the left boundary point, $a$, and ${\mathbf{mesh}}\left({\mathbf{nmesh}}\right)$ must contain the right boundary point, $b$.
Constraint: ${\mathbf{mesh}}\left(\mathit{i}\right)<{\mathbf{mesh}}\left(\mathit{i}+1\right)$, for $\mathit{i}=1,2,\dots ,{\mathbf{nmesh}}-1$.
10: $\mathbf{ipmesh}\left({\mathbf{mxmesh}}\right)$Integer array Input
On entry: ${\mathbf{ipmesh}}\left(\mathit{i}\right)$ specifies whether or not the initial mesh point defined in ${\mathbf{mesh}}\left(\mathit{i}\right)$, for $\mathit{i}=1,2,\dots ,{\mathbf{nmesh}}$, should be a fixed point in all meshes computed during the solution process. The remaining elements of ipmesh need not be set.
${\mathbf{ipmesh}}\left(i\right)=1$
Indicates that ${\mathbf{mesh}}\left(i\right)$ should be a fixed point in all meshes.
${\mathbf{ipmesh}}\left(i\right)=2$
Indicates that ${\mathbf{mesh}}\left(i\right)$ is not a fixed point.
Constraints:
• ${\mathbf{ipmesh}}\left(1\right)=1$ and ${\mathbf{ipmesh}}\left({\mathbf{nmesh}}\right)=1$, (i.e., the left and right boundary points, $a$ and $b$, must be fixed points, in all meshes);
• ${\mathbf{ipmesh}}\left(\mathit{i}\right)=1$ or $2$, for $\mathit{i}=2,3,\dots ,{\mathbf{nmesh}}-1$.
11: $\mathbf{rcomm}\left({\mathbf{lrcomm}}\right)$Real (Kind=nag_wp) array Communication Array
On exit: contains information for use by d02tlf. This must be the same array as will be supplied to d02tlf. The contents of this array must remain unchanged between calls.
12: $\mathbf{lrcomm}$Integer Input
On entry: the dimension of the array rcomm as declared in the (sub)program from which d02tvf is called. If ${\mathbf{lrcomm}}=0$, a communication array size query is requested. In this case there is an immediate return with communication array dimensions stored in icomm; ${\mathbf{icomm}}\left(1\right)$ contains the required dimension of rcomm, while ${\mathbf{icomm}}\left(2\right)$ contains the required dimension of icomm.
Constraint: ${\mathbf{lrcomm}}=0$, or ${\mathbf{lrcomm}}\ge 51+{\mathbf{neq}}+{\mathbf{mxmesh}}×\left(2+{m}^{*}+{k}_{n}\right)-{k}_{n}+{\mathbf{mxmesh}}/2$, where ${m}^{*}=\sum _{i=1}^{n}{\mathbf{m}}\left(i\right)$ and ${k}_{n}={\mathbf{ncol}}×{\mathbf{neq}}$.
13: $\mathbf{icomm}\left({\mathbf{licomm}}\right)$Integer array Communication Array
On exit: contains information for use by d02tlf. This must be the same array as will be supplied to d02tlf. The contents of this array must remain unchanged between calls. If ${\mathbf{lrcomm}}=0$, a communication array size query is requested. In this case, on immediate return, ${\mathbf{icomm}}\left(1\right)$ will contain the required dimension for rcomm while ${\mathbf{icomm}}\left(2\right)$ will contain the required dimension for icomm.
14: $\mathbf{licomm}$Integer Input
On entry: the dimension of the array icomm as declared in the (sub)program from which d02tvf is called. If ${\mathbf{lrcomm}}=0$, a communication array size query is requested. In this case icomm need only be of dimension $2$ in order to hold the required communication array dimensions for the given problem and algorithmic parameters.
Constraints:
• if ${\mathbf{lrcomm}}=0$, ${\mathbf{licomm}}\ge 2$;
• otherwise ${\mathbf{licomm}}\ge 23+{\mathbf{neq}}+{\mathbf{mxmesh}}$.
15: $\mathbf{ifail}$Integer Input/Output
On entry: ifail must be set to $0$, . If you are unfamiliar with this argument you should refer to Section 4 in the Introduction to the NAG Library FL Interface for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value is recommended. If the output of error messages is undesirable, then the value $1$ is recommended. Otherwise, if you are not familiar with this argument, the recommended value is $0$. When the value is used it is essential to test the value of ifail on exit.
On exit: ${\mathbf{ifail}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see Section 6).

## 6Error Indicators and Warnings

If on entry ${\mathbf{ifail}}=0$ or $-1$, explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
${\mathbf{ifail}}=1$
On entry, ${\mathbf{ipmesh}}\left(1\right)$ or ${\mathbf{ipmesh}}\left({\mathbf{nmesh}}\right)$ does not equal $1$.
On entry, ${\mathbf{ipmesh}}\left(i\right)\ne 1$ or $2$ for some $i$.
On entry, ${\mathbf{licomm}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{licomm}}\ge 〈\mathit{\text{value}}〉$.
On entry, ${\mathbf{lrcomm}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{lrcomm}}=0$ or ${\mathbf{lrcomm}}\ge 〈\mathit{\text{value}}〉$.
On entry, ${\mathbf{m}}\left(〈\mathit{\text{value}}〉\right)=〈\mathit{\text{value}}〉$.
Constraint: $1\le {\mathbf{m}}\left(i\right)\le 4$ for all $i$.
On entry, ${\mathbf{mxmesh}}=〈\mathit{\text{value}}〉$ and ${\mathbf{nmesh}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{mxmesh}}\ge 2×{\mathbf{nmesh}}-1$.
On entry, ${\mathbf{ncol}}=〈\mathit{\text{value}}〉$ and $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}}\left(i\right)\right)=〈\mathit{\text{value}}〉$.
Constraint: $\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{m}}\left(\mathit{i}\right)\right)\le {\mathbf{ncol}}\le 7$.
On entry, ${\mathbf{neq}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{neq}}\ge 1$.
On entry, ${\mathbf{nlbc}}=〈\mathit{\text{value}}〉$, ${\mathbf{nrbc}}=〈\mathit{\text{value}}〉$ and $\mathrm{sum}\left({\mathbf{m}}\left(i\right)\right)=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{nlbc}}+{\mathbf{nrbc}}=\mathrm{sum}\left({\mathbf{m}}\left(i\right)\right)$.
On entry, ${\mathbf{nlbc}}=〈\mathit{\text{value}}〉$ and ${\mathbf{nrbc}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{nlbc}}\ge 1$ and ${\mathbf{nrbc}}\ge 1$.
On entry, ${\mathbf{nmesh}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{nmesh}}\ge 6$.
On entry, the elements of mesh are not strictly increasing.
On entry, ${\mathbf{tols}}\left(〈\mathit{\text{value}}〉\right)=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{tols}}\left(i\right)>〈\mathit{\text{value}}〉$ for all $i$.
${\mathbf{ifail}}=-99$
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.

Not applicable.

## 8Parallelism and Performance

d02tvf is not threaded in any implementation.

For problems where sharp changes of behaviour are expected over short intervals it may be advisable to:
• use a large value for ncol;
• cluster the initial mesh points where sharp changes in behaviour are expected;
• maintain fixed points in the mesh using the argument ipmesh to ensure that the remeshing process does not inadvertently remove mesh points from areas of known interest before they are detected automatically by the algorithm.

### 9.1Nonseparated Boundary Conditions

A boundary value problem with nonseparated boundary conditions can be treated by transformation to an equivalent problem with separated conditions. As a simple example consider the system
 $y1′=f1x,y1,y2 y2′=f2x,y1,y2$
on $\left[a,b\right]$ subject to the boundary conditions
 $g1y1a=0 g2y2a,y2b=0.$
By adjoining the trivial ordinary differential equation
 $r′=0,$
which implies $r\left(a\right)=r\left(b\right)$, and letting $r\left(b\right)={y}_{2}\left(b\right)$, say, we have a new system
 $y1′ = f1x,y1,y2 y2′ = f2x,y1,y2 r′ = 0,$
subject to the separated boundary conditions
 $g1y1a=0 g2y2a,ra=0 y2b-rb=0.$
There is an obvious overhead in adjoining an extra differential equation: the system to be solved is increased in size.

### 9.2Multipoint Boundary Value Problems

Multipoint boundary value problems, that is problems where conditions are specified at more than two points, can also be transformed to an equivalent problem with two boundary points. Each sub-interval defined by the multipoint conditions can be transformed onto the interval $\left[0,1\right]$, say, leading to a larger set of differential equations. The boundary conditions of the transformed system consist of the original boundary conditions and the conditions imposed by the requirement that the solution components be continuous at the interior break-points. For example, consider the equation
 $y 3 =ft,y,y 1 ,y 2 on a,c$
subject to the conditions
 $ya=A yb=B y1c=C$
where $a. This can be transformed to the system
 $y1 3 = ft,y1,y1 1 ,y1 2 y2 3 = ft,y2,y2 1 ,y2 2 on ​ 0,1$
where
 $y1 ≡ y on a,b y2 ≡ y on b,c,$
subject to the boundary conditions
 $y10 = A y11 = B y2 1 1 = C y20 = B from ​ y11=y20 y1 1 1 = y2 1 0 y1 2 1 = y2 2 0.$
In this instance two of the resulting boundary conditions are nonseparated but they may next be treated as described above.

### 9.3High Order Systems

Systems of ordinary differential equations containing derivatives of order greater than four can always be reduced to systems of order suitable for treatment by d02tvf and its related routines. For example suppose we have the sixth-order equation
 $y 6 =-y.$
Writing the variables ${y}_{1}=y$ and ${y}_{2}={y}^{\left(4\right)}$ we obtain the system
 $y1 4 = y2 y2 2 = -y1$
which has maximal order four, or writing the variables ${y}_{1}=y$ and ${y}_{2}={y}^{\left(3\right)}$ we obtain the system
 $y1 3 = y2 y2 3 = -y1$
which has maximal order three. The best choice of reduction by choosing new variables will depend on the structure and physical meaning of the system. Note that you will control the error in each of the variables ${y}_{1}$ and ${y}_{2}$. Indeed, if you wish to control the error in certain derivatives of the solution of an equation of order greater than $1$, then you should make those derivatives new variables.

### 9.4Fixed Points and Singularities

The solver routine d02tlf employs collocation at Gaussian points in each sub-interval of the mesh. Hence the coefficients of the differential equations are not evaluated at the mesh points. Thus, fixed points should be specified in the mesh where either the coefficients are singular, or the solution has less smoothness, or where the differential equations should not be evaluated. Singular coefficients at boundary points often arise when physical symmetry is used to reduce partial differential equations to ordinary differential equations. These do not pose a direct numerical problem for using this code but they can severely impact its convergence.

### 9.5Numerical Jacobians

The solver routine d02tlf requires an external routine fjac to evaluate the partial derivatives of ${f}_{i}$ with respect to the elements of $z\left(y\right)$ ($\text{}=\left({y}_{1},{y}_{1}^{1},\dots ,{y}_{1}^{\left({m}_{1}-1\right)},{y}_{2},\dots ,{y}_{n}^{\left({m}_{n}-1\right)}\right)$). In cases where the partial derivatives are difficult to evaluate, numerical approximations can be used. However, this approach might have a negative impact on the convergence of the modified Newton method. You could consider the use of symbolic mathematic packages and/or automatic differentiation packages if available to you.
See Section 10 in d02tzf for an example using numerical approximations to the Jacobian. There central differences are used and each ${f}_{i}$ is assumed to depend on all the components of $z$. This requires two evaluations of the system of differential equations for each component of $z$. The perturbation used depends on the size of each component of $z$ and a minimum quantity dependent on the machine precision. The cost of this approach could be reduced by employing an alternative difference scheme and/or by only perturbing the components of $z$ which appear in the definitions of the ${f}_{i}$. A discussion on the choice of perturbation factors for use in finite difference approximations to partial derivatives can be found in Gill et al. (1981).

## 10Example

The following example is used to illustrate the treatment of nonseparated boundary conditions. See also d02tlf, d02txf, d02tyf and d02tzf, for the illustration of other facilities.
The following equations model of the spread of measles. See Schwartz (1983). Under certain assumptions the dynamics of the model can be expressed as
 $y1′=μ-βxy1y3 y2′=βxy1y3-y2/λ y3′=y2/λ-y3/η$
subject to the periodic boundary conditions
 $yi0=yi1 , i= 1,2,3.$
Here ${y}_{1},{y}_{2}$ and ${y}_{3}$ are respectively the proportions of susceptibles, infectives and latents to the whole population. $\lambda$ ($\text{}=0.0279$ years) is the latent period, $\eta$ ($\text{}=0.01$ years) is the infectious period and $\mu$ ($\text{}=0.02$) is the population birth rate. $\beta \left(x\right)={\beta }_{0}\left(1.0+\mathrm{cos}2\pi x\right)$ is the contact rate where ${\beta }_{0}=1575.0$.
The nonseparated boundary conditions are treated as described in Section 9 by adjoining the trivial differential equations
 $y4′=0 y5′=0 y6′=0$
that is ${y}_{4},{y}_{5}$ and ${y}_{6}$ are constants. The boundary conditions of the augmented system can then be posed in the separated form
 $y10-y40=0 y20-y50=0 y30-y60=0 y11-y41=0 y21-y51=0 y31-y61=0.$
This is a relatively easy problem and an (arbitrary) initial guess of $1$ for each component suffices, even though two components of the solution are much smaller than $1$.

### 10.1Program Text

Program Text (d02tvfe.f90)

### 10.2Program Data

Program Data (d02tvfe.d)

### 10.3Program Results

Program Results (d02tvfe.r)