We give technical details of the Sturm-Liouville test package SLTSTPAK, complementing the companion article (this issue) on its design. SLTSTPAK comprises the following: a specification of how to write a routine TSTSET containing a set of Sturm-Liouville problems; a number of routines that act as a harness between a TSTSET, written to this specification, and a driver program. A set of 60 standard problems is provided, but it is simple to replace this by another one.
Categories and Subject Descriptors: D.2.5 [Software Engineering]: Testing and Debugging; D.3.2 [Programming Languages]: Language Classifications--Fortran 77; Fortran 90; G.1.7 [Numerical Analysis]: Ordinary Differential Equations--boundary value problems; G.4 [Mathematics of Computing]: Mathematical Software--certification and testing
General Terms: Algorithms
Additional Key Words and Phrases: Sturm-Liouville problem, test-problem collection, testing software
This article gives technical details of of the Sturm-Liouville test package SLTSTPAK, complementing the companion article [Pryce 1999] on its design. SLTSTPAK comprises
--a specification of how to write a routine TSTSET containing a set of Sturm-Liouville problems;
--a number of routines that act as a harness between a TSTSET, written to this specification, and a driver program.
A TSTSET containing 60 standard problems from Pryce  is provided but it is simple to replace this by another one.
The problem at hand is that of finding eigenvalues of the classical Sturm-Liouville problem,
(1) - d/dx (p(x)du/dx) + q(x)u = [Lambda]w(x)u
on a finite or infinite interval a [is less than] x [is less than] b. At an endpoint (say x = a for definiteness) a boundary condition (BC) may be needed. A regular endpoint needs a regular BC
(2) [a.sub.1]u(a) = [a.sub.2]pu'(a).
A singular endpoint, if of limit-point type, needs no BC, while one of limit-circle type needs a BC of the form
(3) 0 = [u, h](a) = lim[u, h](x) def x [right arrow] a
for a suitable h, where [u, h](x) = ph'(x)u(x) - pu'(x)h(x), and in fact the general BC can be defined by varying [a.sub.1], [a.sub.2] in
(4) h = [a.sub.1]f + [a.sub.2]g,
for suitable, prechosen, functions f, g. The package requires the Problem-writer to provide f, g at any limit-circle endpoint. The companion article [Pryce 1999] gives more details on the theory.
This article provides the following information:
--specifications of the routines that form the interface to the driver;
--typical structure of a driver that uses SLTSTPAK;
--instructions on how to code up a (group of) Sturm-Liouville problems within the TSTSET routine.
There are also suggestions on how to implement features specific to some of the existing library SL solvers.
The code was first written in Fortran 77. Minor changes have been made to take advantage of Fortran 90, mainly (a) inclusion of the package in a module to ensure checking of argument-lists; (b) replacement of COMMON by global module-data.
2. USER-VISIBLE ROUTINES OF SLTSTPAK
The routines fall into four classes: setup routines which prepare a problem by using code in TSTSET to set appropriate internal state variables; coefficient-function and boundary condition routines for use by a Sturm-Liouville solver while solving a problem; a few routines that let the driver program alter state variables directly; …