~ubuntu-branches/ubuntu/wily/julia/wily

« back to all changes in this revision

Viewing changes to deps/openlibm/slatec/guide

  • Committer: Package Import Robot
  • Author(s): Sébastien Villemot
  • Date: 2013-01-16 12:29:42 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20130116122942-x86e42akjq31repw
Tags: 0.0.0+20130107.gitd9656f41-1
* New upstream snashot
* No longer try to rebuild helpdb.jl.
   + debian/rules: remove helpdb.jl from build-arch rule
   + debian/control: move back python-sphinx to Build-Depends-Indep
* debian/copyright: reflect upstream changes
* Add Build-Conflicts on libatlas3-base (makes linalg tests fail)
* debian/rules: replace obsolete USE_DEBIAN makeflag by a list of
  USE_SYSTEM_* flags
* debian/rules: on non-x86 systems, use libm instead of openlibm
* dpkg-buildflags.patch: remove patch, applied upstream
* Refreshed other patches

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
 
 
3
 
 
4
 
 
5
           *********************************************************
 
6
           *                                                       *
 
7
           *    Guide to the SLATEC Common Mathematical Library    *
 
8
           *                                                       *
 
9
           *********************************************************
 
10
 
 
11
 
 
12
                                 Kirby W. Fong
 
13
                 National Magnetic Fusion Energy Computer Center
 
14
                     Lawrence Livermore National Laboratory
 
15
 
 
16
 
 
17
                              Thomas H. Jefferson
 
18
                           Operating Systems Division
 
19
                     Sandia National Laboratories Livermore
 
20
 
 
21
 
 
22
                               Tokihiko Suyehiro
 
23
                   Computing and Mathematics Research Division
 
24
                     Lawrence Livermore National Laboratory
 
25
 
 
26
 
 
27
                                   Lee Walton
 
28
                           Network Analysis Division
 
29
                    Sandia National Laboratories Albuquerque
 
30
 
 
31
                                   July 1993
 
32
 
 
33
 
 
34
 
 
35
 
 
36
*******************************************************************************
 
37
 
 
38
                               Table of Contents
 
39
 
 
40
 
 
41
SECTION 1.  ABSTRACT
 
42
SECTION 2.  BACKGROUND
 
43
SECTION 3.  MEMBERS OF THE SLATEC COMMON MATHEMATICAL LIBRARY SUBCOMMITTEE
 
44
SECTION 4.  OBTAINING THE LIBRARY
 
45
SECTION 5.  CODE SUBMISSION PROCEDURES
 
46
SECTION 6.  CODING GUIDELINES--GENERAL REQUIREMENTS FOR SLATEC
 
47
SECTION 7.  SOURCE CODE FORMAT
 
48
SECTION 8.  PROLOGUE FORMAT FOR SUBPROGRAMS
 
49
SECTION 9.  EXAMPLES OF PROLOGUES
 
50
SECTION 10. SLATEC QUICK CHECK PHILOSOPHY
 
51
SECTION 11. SPECIFIC PROGRAMMING STANDARDS FOR SLATEC QUICK CHECKS
 
52
SECTION 12. QUICK CHECK DRIVERS (MAIN PROGRAMS)
 
53
SECTION 13. QUICK CHECK SUBROUTINE EXAMPLE
 
54
SECTION 14. QUICK CHECK MAIN PROGRAM EXAMPLE
 
55
 
 
56
APPENDIX A.  GAMS (AND SLATEC) CLASSIFICATION SCHEME
 
57
APPENDIX B.  MACHINE CONSTANTS
 
58
APPENDIX C.  ERROR HANDLING
 
59
APPENDIX D.  DISTRIBUTION FILE STRUCTURE
 
60
APPENDIX E.  SUGGESTED FORMAT FOR A SLATEC SUBPROGRAM
 
61
 
 
62
ACKNOWLEDGEMENT
 
63
REFERENCES
 
64
 
 
65
 
 
66
 
 
67
 
 
68
*******************************************************************************
 
69
 
 
70
SECTION 1.  ABSTRACT
 
71
 
 
72
This document is a guide to the SLATEC Common Mathematical Library (CML) [1].
 
73
The SLATEC CML is written in FORTRAN 77 (ANSI standard FORTRAN as defined by
 
74
ANSI X3.9-1978, reference [6]) and contains general purpose mathematical and
 
75
statistical routines.  Included in this document are a Library description,
 
76
code submission procedures, and a detailed description of the source file
 
77
format.  This report serves as a guide for programmers who are preparing codes
 
78
for inclusion in the library.  It also provides the information needed to
 
79
process the source file automatically for purposes such as extracting
 
80
documentation or inserting usage monitoring calls.  This guide will be updated
 
81
periodically, so be sure to contact a SLATEC CML subcommittee member to ensure
 
82
you have the latest version.
 
83
 
 
84
 
 
85
 
 
86
 
 
87
*******************************************************************************
 
88
 
 
89
SECTION 2.  BACKGROUND
 
90
 
 
91
SLATEC is the acronym for the Sandia, Los Alamos, Air Force Weapons Laboratory
 
92
Technical Exchange Committee.  This organization was formed in 1974 by the
 
93
computer centers of Sandia National Laboratories Albuquerque, Los Alamos
 
94
National Laboratory, and Air Force Weapons Laboratory to foster the exchange of
 
95
technical information.  The parent committee established several subcommittees
 
96
to deal with various computing specialties.  The SLATEC Common Mathematical
 
97
Library (CML) Subcommittee decided in 1977 to construct a mathematical FORTRAN
 
98
subprogram library that could be used on a variety of computers at the three
 
99
sites. A primary impetus for the library development was to provide portable,
 
100
non-proprietary, mathematical software for member sites' supercomputers.
 
101
 
 
102
In l980 the computer centers of Sandia National Laboratories Livermore and the
 
103
Lawrence Livermore National Laboratory were admitted as members of the parent
 
104
committee and subcommittees. Lawrence Livermore National Laboratory, unlike the
 
105
others, has two separate computer centers: the National Magnetic Fusion Energy
 
106
Computer Center (NMFECC) and the Livermore Computer Center (LCC).  In 1981 the
 
107
National Bureau of Standards (now the National Institute of Standards and
 
108
Technology) and the Oak Ridge National Laboratory were invited to participate
 
109
in the math library subcommittee because of their great interest in the
 
110
project.
 
111
 
 
112
Version 1.0 of the CML was released in April 1982 with 114,328 records and 491
 
113
user-callable routines.  In May 1984 Version 2.0, with 151,864 records and 646
 
114
user-callable routines was released.  This was followed in April 1986 by
 
115
Version 3.0 with 196,013 records and 704 user-callable routines.  Version 3.1
 
116
followed in August 1987 with 197,931 records and 707 user-callable routines
 
117
and Version 3.2 in August 1989 with 203,587 records and 709 user-callable
 
118
routines.  The committee released Version 4.0 in December 1992 with 298,954
 
119
records and 901 user-callable routines.  Finally, on July 1, 1993, Version 4.1
 
120
was released with 290,907 records and 902 user-callable routines.
 
121
 
 
122
The sole documentation provided by SLATEC for the routines of the SLATEC
 
123
Library is via comment lines in the source code.  Although the library comes
 
124
with portable documentation programs to help users access the documentation in
 
125
the source code, various installations may wish to use their own documentation
 
126
programs.  To facilitate automatic extraction of documentation or further
 
127
processing by other computer programs, the source file for each routine must
 
128
be arranged in a precise format.  This document describes that format for the
 
129
benefit of potential library contributors and for those interested in
 
130
extracting library documentation from the source code.
 
131
 
 
132
 
 
133
 
 
134
 
 
135
*******************************************************************************
 
136
 
 
137
SECTION 3.  MEMBERS OF THE SLATEC COMMON MATHEMATICAL LIBRARY SUBCOMMITTEE
 
138
 
 
139
Current member sites and voting members of the subcommittee are the
 
140
following.
 
141
 
 
142
 
 
143
Air Force Phillips Laboratory, Kirtland (PLK)          Reginald Clemens
 
144
 
 
145
Lawrence Livermore National Laboratory (LCC)           Fred N. Fritsch
 
146
 
 
147
Lawrence Livermore National Laboratory (NERSC)         Steve Buonincontri
 
148
 
 
149
Los Alamos National Laboratory (LANL)                  W. Robert Boland
 
150
                                                       (Chairman)
 
151
 
 
152
National Institute of Standards and Technology (NIST)  Daniel W. Lozier
 
153
 
 
154
Oak Ridge National Laboratory (ORNL)                   Thomas H. Rowan
 
155
 
 
156
Sandia National Laboratories/California (SNL/CA)       Thomas H. Jefferson
 
157
 
 
158
Sandia National Laboratories/New Mexico (SNL/NM)       Sue Goudy
 
159
 
 
160
 
 
161
 
 
162
 
 
163
*******************************************************************************
 
164
 
 
165
SECTION 4.  OBTAINING THE LIBRARY
 
166
 
 
167
The Library is in the public domain and distributed by the Energy Science
 
168
and Technology Software Center.
 
169
 
 
170
               Energy Science and Technology Software Center
 
171
               P.O. Box 1020
 
172
               Oak Ridge, TN  37831
 
173
 
 
174
               Telephone  615-576-2606
 
175
               E-mail  estsc%a1.adonis.mrouter@zeus.osti.gov
 
176
 
 
177
 
 
178
 
 
179
*******************************************************************************
 
180
 
 
181
SECTION 5.  CODE SUBMISSION PROCEDURES
 
182
 
 
183
The SLATEC Library is continuously searching for portable high-quality routines
 
184
written in FORTRAN 77 that would be of interest to the member sites.  The
 
185
subcommittee meets several times annually with the member sites rotating as
 
186
meeting hosts.  At these meetings new routines are introduced, discussed, and
 
187
eventually voted on for inclusion in the library.  Some of the factors that are
 
188
considered in deciding whether to accept a routine into the Library are the
 
189
following:
 
190
 
 
191
 
 
192
1.  Usefulness.  Does the routine fill a void in the Library?  Will the routine
 
193
    have widespread appeal?  Will it add a new capability?
 
194
 
 
195
2.  Robustness.  Does the routine give accurate results over a wide range of
 
196
    problems?  Does it diagnose errors?  Is the routine well tested?
 
197
 
 
198
3.  Maintainability.  Is the author willing to respond to bugs in the routine?
 
199
    Does the source code follow good programming practices?
 
200
 
 
201
4.  Adherence to SLATEC standards and coding guidelines.  These standards
 
202
    are described further in this guide and include such things as the order
 
203
    of subprogram arguments, the presence of a correctly formatted prologue at
 
204
    the start of each routine, and the naming of routines.
 
205
 
 
206
5.  Good documentation.  Is clear, concise computer readable documentation
 
207
    built into the source code?
 
208
 
 
209
6.  Freely distributable.  Is the program in the public domain?
 
210
 
 
211
 
 
212
A typical submission procedure begins with contact between an author and a
 
213
Library committee member.  Preliminary discussions with the member are
 
214
encouraged for initial screening of any code and to gain insight into the
 
215
workings of SLATEC.  This member champions the routine to be considered.  The
 
216
code is introduced at a meeting where the author or committee member describes
 
217
the code and explains why it would be suitable for SLATEC.  Copies of the code
 
218
are distributed to all committee members.  Hopefully, the code already adheres
 
219
to SLATEC standards.  However, most codes do not.  At this first formal
 
220
discussion, the committee members are able to provide some useful suggestions
 
221
for improving the code and revising it for SLATEC.
 
222
 
 
223
Between meetings, changes are made to the code and the modified code is
 
224
distributed in machine readable format for testing.  The code is then
 
225
considered at a subsequent meeting, to be voted on and accepted. However,
 
226
because committee members and authors do not always see eye to eye, and because
 
227
time constraints affect all, the code is usually discussed at several meetings.
 
228
 
 
229
If codes adhered to the programming practices and formatting described in this
 
230
guide, the time for acceptance could be greatly reduced.
 
231
 
 
232
 
 
233
 
 
234
 
 
235
*******************************************************************************
 
236
 
 
237
SECTION 6.  CODING GUIDELINES--GENERAL REQUIREMENTS FOR SLATEC
 
238
 
 
239
A software collection of the size of the SLATEC Library that is designed to run
 
240
on a variety of computers demands uniformity in handling machine dependencies,
 
241
in handling error conditions, and in installation procedures.  Thus, while the
 
242
decision to add a new subroutine to the library depends mostly on its quality
 
243
and whether it fills a gap in the library, these are not the only
 
244
considerations.  Programming style must also be considered, so that the library
 
245
as a whole behaves in a consistent manner.  We now list the stylistic and
 
246
documentational recommendations and requirements for routines to be
 
247
incorporated into the library.
 
248
 
 
249
 
 
250
1.  The SLATEC Library is intended to have no restriction on its distribution;
 
251
    therefore, new routines must be in the public domain.  This is generally
 
252
    not a problem since most authors are proud of their work and would like
 
253
    their routines to be used widely.
 
254
 
 
255
2.  Routines must be written in FORTRAN 77 (ANSI standard FORTRAN as
 
256
    defined by ANSI X3.9-1978, reference [6]).  Care must be taken so that
 
257
    machine dependent features are not used.
 
258
 
 
259
3.  To enhance maintainability codes are to be modular in structure.  Codes
 
260
    must be composed of reasonably small subprograms which in turn are made
 
261
    up of easily understandable blocks.
 
262
 
 
263
4.  Equivalent routines of different precision are to look the same where
 
264
    possible.  That is, the logical structure, statement numbers, variable
 
265
    names, etc. are to be as close to identical as possible.  This implies
 
266
    that generic intrinsics must be used instead of specific intrinsics.
 
267
    Extraneous use of INT, REAL and DBLE are strongly discouraged;  use
 
268
    mixed-mode expressions in accordance with the Fortran 77 standard.
 
269
 
 
270
5.  New routines must build on existing routines in the Library, unless
 
271
    there are compelling reasons to do otherwise.  For example, the SLATEC
 
272
    Library contains the LINPACK and EISPACK routines, so new routines
 
273
    should use the existing linear system and eigensystem routines rather
 
274
    than introduce new ones.
 
275
 
 
276
6.  System or machine dependent values must be obtained by calling routines
 
277
    D1MACH, I1MACH, and R1MACH.  The SLATEC Library has adopted these routines
 
278
    from the Bell Laboratories' PORT Library [2] [3].  See Appendix B
 
279
    for a description of these machine dependent routines.
 
280
 
 
281
7.  The SLATEC Library has a set of routines for handling error messages.
 
282
    Each user-callable routine, if it can detect errors, must have as one
 
283
    of its arguments an error flag, whose value upon exiting the routine
 
284
    indicates the success or failure of the routine. It is acceptable for a
 
285
    routine to set the error flag and RETURN; however, if the routine wishes
 
286
    to write an error message, it must call XERMSG (see Appendix C) rather
 
287
    than use WRITE or PRINT statements.  In general, all errors (even serious
 
288
    ones) should be designated as "recoverable" rather than "fatal," and the
 
289
    routine should RETURN to the user.  This permits the user to try an
 
290
    alternate strategy if a routine decides a particular calculation is
 
291
    inappropriate.  A description of the entire original error handling
 
292
    package appears in reference [4].
 
293
 
 
294
8.  Each user-callable routine (and subsidiary routine if appropriate) must
 
295
    have a small demonstration routine that can be used as a quick check. This
 
296
    demonstration routine can be more exhaustive, but in general, it should be
 
297
    structured to provide a "pass" or "fail" answer on whether the library
 
298
    routine appears to be functioning properly.  A more detailed description
 
299
    of the required format of the quick checks appears later in this document.
 
300
 
 
301
9.  Common blocks and SAVEd variables must be avoided.  Use subprogram
 
302
    arguments for interprogram communication.  The use of these constructs
 
303
    often obstructs multiprocessing.
 
304
 
 
305
    Variables that are statically allocated in memory and are used as
 
306
    working storage cannot be used simultaneously by several processors.
 
307
    SAVEd variables and common block variables are most likely to fall into
 
308
    this category.  Such variables are acceptable if they are DATA loaded or
 
309
    set at run time to values that are to be read (but not written) since it
 
310
    does not matter in what order multiple processors read the values.
 
311
    However, such variables should not be used as working storage since no
 
312
    processor can use the work space while some other processor is using it.
 
313
    Library routines should ask the user to provide any needed work space
 
314
    by passing it in as an argument.  The user is then responsible for
 
315
    giving each processor a different work space even though each processor
 
316
    may be executing the same library routine.
 
317
 
 
318
10. Complete self-contained documentation must be supplied as comments in
 
319
    user-callable routines.  This documentation must be self-contained because
 
320
    SLATEC provides no other documentation for using the routines.  This
 
321
    documentation is called the "prologue" for the routine.  The rigid prologue
 
322
    format for user-callable routines is described below.  The prologue must
 
323
    tell the user how to call the routine but need not go into algorithmic
 
324
    details since such explanations often require diagrams or non-ASCII
 
325
    symbols.  Subsidiary routines are those called by other library routines
 
326
    but which are not intended to be called directly by the user.  Subsidiary
 
327
    routines also have prologues, but these prologues are considerably less
 
328
    elaborate than those of user-callable routines.
 
329
 
 
330
11. No output should be printed.  Instead, information should be returned
 
331
    to the user via the subprogram arguments or function values.  If there is
 
332
    some overriding reason that printed output is necessary, the user must be
 
333
    able to suppress all output by means of a subprogram input variable.
 
334
 
 
335
 
 
336
 
 
337
 
 
338
*******************************************************************************
 
339
 
 
340
SECTION 7.  SOURCE CODE FORMAT
 
341
 
 
342
In this section and the two sections on prologues, we use the caret (^)
 
343
character to indicate a position in which a single blank character must
 
344
appear. Upper case letters are used for information that appears literally.
 
345
Lower case is used for material specific to the routine.
 
346
 
 
347
1.  The first line of a subprogram must start with one of:
 
348
 
 
349
    SUBROUTINE^name^(arg1,^arg2,^...argn)
 
350
    FUNCTION^name^(arg1,^arg2,^...argn)
 
351
    COMPLEX^FUNCTION^name^(arg1,^arg2,^...argn)
 
352
    DOUBLE^PRECISION^FUNCTION^name^(arg1,^arg2,^...argn)
 
353
    INTEGER^FUNCTION^name^(arg1,^arg2,^...argn)
 
354
    REAL^FUNCTION^name^(arg1,^arg2,^...argn)
 
355
    LOGICAL^FUNCTION^name^(arg1,^arg2,^...argn)
 
356
    CHARACTER[*len]^FUNCTION^name^(arg1,^arg2,^...argn)
 
357
 
 
358
    Each of the above lines starts in column 7.  If there is an argument
 
359
    list, then there is exactly one blank after the subprogram name and
 
360
    after each comma (except if the comma appears in column 72).  There is
 
361
    no embedded blank in any formal parameter, after the leading left
 
362
    parenthesis, before the trailing right parenthesis,  or before any
 
363
    comma. Formal parameters are never split across lines. Any line to be
 
364
    continued must end with a comma.
 
365
 
 
366
    For continuation lines, any legal continuation character may be used in
 
367
    column 6, columns 7-9 must be blank and arguments or formal parameters
 
368
    start in column 10 of a continuation line and continue up to the right
 
369
    parenthesis (or comma if another continuation line is needed).  The
 
370
    brackets in the CHARACTER declaration do not appear literally but
 
371
    indicate the optional length specification described in the FORTRAN 77
 
372
    standard.
 
373
 
 
374
2.  The author must supply a prologue for each subprogram.  The prologue
 
375
    must be in the format that will subsequently be described.  The
 
376
    prologue begins with the first line after the subprogram declaration
 
377
    (including continuation lines for long argument lists).
 
378
 
 
379
3.  Except for the "C***" lines (to be described) in the prologue and
 
380
    the "C***" line marking the first executable statement, no other line
 
381
    may begin with "C***".
 
382
 
 
383
4.  The first line of the prologue is the comment line
 
384
 
 
385
    C***BEGIN^PROLOGUE^^name
 
386
 
 
387
    where "name", starting in column 21, is the name of the subprogram.
 
388
 
 
389
5.  The last line of a subprogram is the word "END" starting in column 7.
 
390
 
 
391
6.  All alphabetic characters, except for those on comment lines or in
 
392
    character constants, must be upper case, as specified by the FORTRAN 77
 
393
    standard (see [6]).
 
394
 
 
395
7.  In the prologue, the comment character in column 1 must be the upper
 
396
    case "C".
 
397
 
 
398
8.  All subprogram, common block, and any formal parameter names mentioned in
 
399
    the prologue must be in upper case.
 
400
 
 
401
9.  Neither FORTRAN statements nor comment lines can extend beyond column 72.
 
402
    Columns 73 through 80 are reserved for identification or sequence numbers.
 
403
 
 
404
10. Before the first executable statement of every subprogram, user-callable
 
405
    or not, is the line
 
406
 
 
407
    C***FIRST^EXECUTABLE^STATEMENT^^name
 
408
 
 
409
    where "name" (starting in column 33) is the name of the subprogram.
 
410
    Only comment lines may appear between the C***FIRST EXECUTABLE
 
411
    STATEMENT line and the first executable statement.
 
412
 
 
413
11. The subprogram name consists of a maximum of six characters.  Authors
 
414
    should choose unusual and distinctive subprogram names to minimize
 
415
    possible name conflicts.  Double precision routines should begin with
 
416
    "D".  Subprograms of type complex should begin with "C".  The letter "Z"
 
417
    is reserved for future use by possible double precision complex
 
418
    subprograms.  No other subprograms should begin with either "D", "C", or
 
419
    "Z".
 
420
 
 
421
12. The recommended order for the formal parameters is:
 
422
 
 
423
    1.  Names of external subprograms.
 
424
 
 
425
    2.  Input variables.
 
426
 
 
427
    3.  Variables that are both input and output (except error flags).
 
428
 
 
429
    4.  Output variables.
 
430
 
 
431
    5.  Work arrays.
 
432
 
 
433
    6.  Error flags.
 
434
 
 
435
    However, array dimensioning parameters should immediately follow the
 
436
    associated array name.
 
437
 
 
438
 
 
439
 
 
440
 
 
441
*******************************************************************************
 
442
 
 
443
SECTION 8.  PROLOGUE FORMAT FOR SUBPROGRAMS
 
444
 
 
445
Each subprogram has a section called a prologue that gives standardized
 
446
information about the routine.  The prologue consists of comment lines only.  A
 
447
subsidiary subprogram is one that is usually called by another SLATEC Library
 
448
subprogram only and is not meant to be called by a user's routine.  The
 
449
prologue for a user-callable subprogram is more extensive than the prologue for
 
450
a subsidiary subprogram.  The prologue for a user-callable subprogram has up to
 
451
14 sections, of which 12 are required and one is required if and only if a
 
452
common block is present.  Several of these sections are optional in subsidiary
 
453
programs and in the quick check routines.  The sections are always in the
 
454
order described in the table below.
 
455
 
 
456
 
 
457
          Section           User-callable      Subsidiary     Quick Checks
 
458
 
 
459
   1.   BEGIN PROLOGUE        Required         Required       Required
 
460
   2.   SUBSIDIARY            Not present      Required         Optional
 
461
   3.   PURPOSE               Required         Required       Required
 
462
   4.   LIBRARY   SLATEC      Required         Required       Required
 
463
   5.   CATEGORY              Required           Optional       Optional
 
464
   6.   TYPE                  Required         Required       Required
 
465
   7.   KEYWORDS              Required           Optional       Optional
 
466
   8.   AUTHOR                Required         Required       Required
 
467
   9.   DESCRIPTION           Required           Optional       Optional
 
468
  10.   SEE ALSO                Optional         Optional       Optional
 
469
  11.   REFERENCES            Required           Optional       Optional
 
470
  12.   ROUTINES CALLED       Required         Required       Required
 
471
  13.   COMMON BLOCKS         Required***      Required***    Required***
 
472
  14.   REVISION HISTORY      Required         Required       Required
 
473
  15.   END PROLOGUE          Required         Required       Required
 
474
 
 
475
    ***Note:  The COMMON BLOCKS section appears in a subprogram prologue
 
476
              if and only if the subprogram contains a common block.
 
477
 
 
478
In the prologue section descriptions that follow, the caret (^)
 
479
character is used for emphasis to indicate a required blank character.
 
480
 
 
481
 
 
482
1.  BEGIN PROLOGUE
 
483
    This section is a single line that immediately follows the subprogram
 
484
    declaration and its continuation lines.  It is
 
485
 
 
486
    C***BEGIN^PROLOGUE^^name
 
487
 
 
488
    where "name" (beginning in column 21) is the name of the subprogram.
 
489
 
 
490
2.  SUBSIDIARY
 
491
    This section is the single line
 
492
 
 
493
    C***SUBSIDIARY
 
494
 
 
495
    and indicates the routine in which this appears is not intended to be
 
496
    user-callable.
 
497
 
 
498
3.  PURPOSE
 
499
    This  section gives one to six lines of information on the purpose of the
 
500
    subprogram.  The letters may be in upper or lower case.  There are no blank
 
501
    lines in the purpose section; i.e., there are no lines consisting solely of
 
502
    a "C" in column 1.  The format for the first line and any continuation
 
503
    lines is
 
504
 
 
505
    C***PURPOSE^^information
 
506
    C^^^^^^^^^^^^more information
 
507
 
 
508
    Information begins in column 14 of the first line and no earlier than
 
509
    column 14 of continuation lines.
 
510
 
 
511
4.  LIBRARY   SLATEC
 
512
    The section is a single line used to show that the routine is a part
 
513
    of the SLATEC library and, optionally, to indicate other libraries,
 
514
    collections, or packages (sublibraries) of which the routine is a part
 
515
    or from which the routine has been derived.    The format is
 
516
 
 
517
    C***LIBRARY^^^SLATEC
 
518
            or
 
519
    C***LIBRARY^^^SLATEC^(sublib1,^sublib2,^...sublibn)
 
520
 
 
521
    The leading left parenthesis is immediately followed by the first member
 
522
    of the list.  Each member, except for the last, is immediately followed by
 
523
    a comma and a single blank.  The last member is immediately followed by
 
524
    the trailing right parenthesis.
 
525
 
 
526
5.  CATEGORY
 
527
    This section is a list of classification system categories to which
 
528
    this subprogram might reasonably be assigned.  There must be at least
 
529
    one list item.  The first category listed is termed the primary
 
530
    category, and others, if given, should be listed in monotonically
 
531
    decreasing order of importance.  Categories must be chosen from the
 
532
    classification scheme listed in Appendix A.  The required format for the
 
533
    initial line and any continuation lines is
 
534
 
 
535
    C***CATEGORY^^cat1,^cat2,^cat3,^...catn,
 
536
    C^^^^^^^^^^^^^continued list
 
537
 
 
538
    All alphabetic characters are in upper case.
 
539
 
 
540
    Items in the list are separated by the two characters, comma and space.
 
541
    If the list will not fit on one line, the line may be ended at a comma
 
542
    (with zero or more trailing spaces), and be continued on the next line.
 
543
    The list and any continuations of the list begin with a nonblank character
 
544
    in column 15.
 
545
 
 
546
6.  TYPE
 
547
    This section gives the datatype of the routine and indicates which
 
548
    routines, including itself,  are equivalent (except possibly for type) to
 
549
    the routine. The format for this section is
 
550
 
 
551
    C***TYPE^^^^^^routine_type^(equivalence list
 
552
    C^^^^^^^^^^^^^continued equivalence list
 
553
    C^^^^^^^^^^^^^continued equivalence list)
 
554
 
 
555
    Routine_type, starting in column 15, is the data type of the routine,
 
556
    and is either SINGLE PRECISION, DOUBLE PRECISION, COMPLEX, INTEGER,
 
557
    CHARACTER, LOGICAL, or ALL.  ALL is a pseudo-type given to routines that
 
558
    could not reasonably be converted to some other type.  Their purpose is
 
559
    typeless.  An example would be the SLATEC routine that prints error
 
560
    messages.
 
561
 
 
562
    Equivalence list is a list of the routines (including this one) that are
 
563
    equivalent to this one, but perhaps of a different type.  Each item in the
 
564
    list consists of a routine name followed by the "-" character and then
 
565
    followed by the first letter of the type (except use "H" for type
 
566
    CHARACTER) of the equivalent routine.  The order of the items is S, D, C,
 
567
    I, H, L and A.
 
568
 
 
569
    The initial item in the list is immediately preceded by a blank and a
 
570
    left parenthesis and the final item is immediately followed by a right
 
571
    parenthesis.  Items in the list are separated by the two characters,
 
572
    comma and space.  If the list will not fit on one line, the line may be
 
573
    ended at a comma (with zero or more trailing spaces), and be continued
 
574
    on the next line.  The list and any continuations of the list begin with
 
575
    a nonblank character in column 15.
 
576
 
 
577
    All alphabetic characters in this section are in upper case.
 
578
 
 
579
    Example
 
580
 
 
581
    C***TYPE      SINGLE PRECISION (ACOSH-S, DACOSH-D, CACOSH-C)
 
582
 
 
583
7.  KEYWORDS
 
584
    This section gives keywords or keyphrases that can be used by
 
585
    information retrieval systems to identify subprograms that pertain to
 
586
    the topic suggested by the keywords.  There must be at least one
 
587
    keyword.  Keywords can have embedded blanks but may not have leading or
 
588
    trailing blanks.  A keyword cannot be continued on the next line;  it
 
589
    must be short enough to fit on one line. No keyword can have an embedded
 
590
    comma. Characters are limited to the FORTRAN 77 character set (in
 
591
    particular, no lower case letters).  There is no comma after the last
 
592
    keyword in the list.  It is suggested that keywords be in either
 
593
    alphabetical order or decreasing order of importance.  The format for
 
594
    the initial line and any continuation lines is
 
595
 
 
596
    C***KEYWORDS^^list
 
597
    C^^^^^^^^^^^^^continued list
 
598
 
 
599
    Items in the list are separated by the two characters, comma and space.
 
600
    If the list will not fit on one line, the line may be ended at a comma
 
601
    (with zero or more trailing spaces), and be continued on the next line.
 
602
    The list and any continuations of the list begin with a nonblank character
 
603
    in column 15.
 
604
 
 
605
8.  AUTHOR
 
606
    This required section gives the author's name.  There must be at least one
 
607
    author, and there may be coauthors.  At least the last name of the author
 
608
    must be given.  The first name (or initials) is optional.  The company,
 
609
    organization, or affiliation of the author is also optional.  The brackets
 
610
    below indicate optional information.  Note that if an organization is to be
 
611
    listed, the remainder of the author's name must also be given.  If the
 
612
    remainder of the author's name is given, the last name is immediately
 
613
    followed by a comma.  If the organization is given, the first name (or
 
614
    initials) is immediately followed by a comma.  The remainder of the name
 
615
    and the organization name may have embedded blanks.  The remainder of the
 
616
    name may not have embedded commas.  This makes it possible for an
 
617
    information retrieval system to count commas to identify the remainder of
 
618
    the name and the name of an organization. Additional information about the
 
619
    author (e.g., address or telephone number) may be given on subsequent
 
620
    lines.  The templates used are
 
621
 
 
622
    C***AUTHOR^^last-name[,^first-name[,^(org)]]
 
623
    C^^^^^^^^^^^^^more information
 
624
    C^^^^^^^^^^^^^more information
 
625
        .
 
626
        .
 
627
        .
 
628
    C^^^^^^^^^^^last-name[,^first-name[,^(org)]]
 
629
    C^^^^^^^^^^^^^more information
 
630
        .
 
631
        .
 
632
        .
 
633
 
 
634
    Each author's name starts in column 13.  Continued information starts in
 
635
    column 15.
 
636
 
 
637
9.  DESCRIPTION
 
638
    This section is a description giving the program abstract, method used,
 
639
    argument descriptions, dimension information, consultants, etc.  The
 
640
    description of the arguments is in exactly the same order in which the
 
641
    arguments appear in the calling sequence.  The description section may use
 
642
    standard, 7-bit ASCII graphic characters, i.e., the 94 printing characters
 
643
    plus the blank.  Names of subprograms, common blocks, externals, and formal
 
644
    parameters are all in upper case.  Names of variables are also in upper
 
645
    case.  The first line of this section is "C***DESCRIPTION" starting in
 
646
    column 1.  All subsequent lines in this section start with a "C" in column
 
647
    1 and no character other than a blank in column 2.  Lines with only a "C"
 
648
    in column 1 may be used to improve the appearance of the description.
 
649
 
 
650
    A suggested format for the DESCRIPTION section is given in Appendix E.
 
651
 
 
652
10. SEE ALSO
 
653
    This section is used for listing other SLATEC routines whose prologues
 
654
    contain documentation on the routine in which this section appears.
 
655
    The form is
 
656
 
 
657
    C***SEE ALSO^^name,^name,^name
 
658
 
 
659
    where each "name" is the name of a user-callable SLATEC CML subprogram
 
660
    whose prologue provides a description of this routine. The names are
 
661
    given as a list (starting in column 15), with successive names separated
 
662
    by a comma and a single blank.
 
663
 
 
664
11. REFERENCES
 
665
    This section is for references.  Any of the 94 ASCII printing characters
 
666
    plus the blank may be used. There may be more than one reference.  If there
 
667
    are no references, the section will consist of the single line
 
668
 
 
669
    C***REFERENCES^^(NONE)
 
670
 
 
671
    If there are references, they will be in the following format:
 
672
 
 
673
    C***REFERENCES^^reference 1
 
674
    C^^^^^^^^^^^^^^^^^continuation of reference 1
 
675
        .
 
676
        .
 
677
        .
 
678
    C^^^^^^^^^^^^^^^reference 2
 
679
    C^^^^^^^^^^^^^^^^^continuation of reference 2
 
680
        .
 
681
        .
 
682
        .
 
683
 
 
684
    Information starts in column 17 of the first line of a reference and no
 
685
    earlier than column 19 of continuation lines.
 
686
 
 
687
    References should be listed in either alphabetical order by last name or
 
688
    order of citation.  They should be in upper and lower case, have initials
 
689
    or first names ahead of last names, and (for multiple authors) have
 
690
    "and" ahead of the last author's name instead of just a comma.  The first
 
691
    word of the title of journal articles should be capitalized as should all
 
692
    important words in titles of books, pamphlets, research reports, and
 
693
    proceedings.  Titles should be given without quotation marks.  The names
 
694
    of journals should be spelled out completely, or nearly so, because
 
695
    software users may not be familiar with them.
 
696
 
 
697
    A complete example of a journal reference is:
 
698
 
 
699
    C               F. N. Fritsch and R. E. Carlson, Monotone piecewise
 
700
    C                 cubic interpolation, SIAM Journal on Numerical Ana-
 
701
    C                 lysis, 17 (1980), pp. 238-246.
 
702
 
 
703
    A complete example of a book reference is:
 
704
 
 
705
    C               Carl de Boor, A Practical Guide to Splines, Applied
 
706
    C                 Mathematics Series 27, Springer-Verlag, New York,
 
707
    C                 1978.
 
708
 
 
709
12. ROUTINES CALLED
 
710
    This section gives the names of routines in the SLATEC Common Mathematical
 
711
    Library that are either directly referenced or declared in an EXTERNAL
 
712
    statement and passed as an argument to a subprogram.  Note that the FORTRAN
 
713
    intrinsics and other formal parameters that represent externals are not
 
714
    listed.  A list is always given for routines called; however, if no routine
 
715
    is called, the list will be the single item "(NONE)" where the parentheses
 
716
    are included.  If there are genuine items in the list, the items are in
 
717
    alphabetical order.  The collating sequence has "0" through "9" first, then
 
718
    "A" through "Z".  The format is
 
719
 
 
720
    C***ROUTINES^CALLED^^name,^name,^name,^name,
 
721
    C^^^^^^^^^^^^^^^^^^^^name,^name,^name
 
722
 
 
723
    Items in the list are separated by the two characters, comma and space.
 
724
    If the list will not fit on one line, the line may be ended at a comma
 
725
    (with zero or more trailing spaces), and be continued on the next line.
 
726
    The list and any continuations of the list begin with a nonblank character
 
727
    in column 22.
 
728
 
 
729
13. COMMON BLOCKS
 
730
    This section, that may or may not be required, tells what common blocks are
 
731
    used by this subprogram.  If this subprogram uses no common blocks, this
 
732
    section does not appear.  If this subprogram does use common blocks, this
 
733
    section must appear.  The list of common blocks is in exactly the same
 
734
    format as the list of routines called and uses the same collating sequence.
 
735
    In addition, the name of blank common is "(BLANK)" where the parentheses
 
736
    are included.  Blank common should be last in the list if it appears. The
 
737
    format for this section is
 
738
 
 
739
    C***COMMON^BLOCKS^^^^name,^name,^name,^name,
 
740
    C^^^^^^^^^^^^^^^^^^^^name,^name,^name^
 
741
 
 
742
    The list starts in column 22.
 
743
 
 
744
14. REVISION HISTORY
 
745
    This section provides a summary of the revisions made to this code.
 
746
    Revision dates and brief reasons for revisions are given.  The format is
 
747
 
 
748
    C***REVISION^HISTORY^^(YYMMDD)
 
749
    C^^^yymmdd^^DATE^WRITTEN
 
750
    C^^^yymmdd^^revision description
 
751
    C^^^^^^^^^^^more revision description
 
752
    C^^^^^^^^^^^...
 
753
    C^^^yymmdd^^revision description
 
754
    C^^^^^^^^^^^more revision description
 
755
    C^^^^^^^^^^^...
 
756
    C^^^^^^^^^^^...
 
757
 
 
758
    where, for each revision,  "yy" (starting in column 5) is the last two
 
759
    digits of the year, "mm" is the month (01, 02, ..., 12), and "dd" is the
 
760
    day of the month (01, 02, ..., 31).  Because this ANSI standard form for
 
761
    the date may not be familiar to some people, the character string
 
762
    "(YYMMDD)" (starting in column 23) is included in the first line of the
 
763
    section to assist in interpreting the sequence of digits.  Each line of the
 
764
    revision descriptions starts in column 13.  The second line of this section
 
765
    contains the date the routine was written, with the characters "DATE
 
766
    WRITTEN" beginning in column 13.  These items must be in chronological
 
767
    order.
 
768
 
 
769
15. END PROLOGUE
 
770
    The last section is the single line
 
771
 
 
772
    C***END^PROLOGUE^^name
 
773
 
 
774
    where "name" is the name of the subprogram.
 
775
 
 
776
 
 
777
 
 
778
 
 
779
*******************************************************************************
 
780
 
 
781
SECTION 9.  EXAMPLES OF PROLOGUES
 
782
 
 
783
This section contains examples of prologues for both user-callable
 
784
and subsidiary routines.  The routines are not from the SLATEC CML and
 
785
should be used only as guidelines for preparing routines for SLATEC.
 
786
Note that the C***DESCRIPTION sections follow the suggested LDOC format that
 
787
is described in Appendix E.  Following the suggested LDOC format with its
 
788
"C *"subsections helps to ensure that all necessary descriptive information is
 
789
provided.
 
790
 
 
791
      SUBROUTINE ADDXY (X, Y, Z, IERR)
 
792
C***BEGIN PROLOGUE  ADDXY
 
793
C***PURPOSE  This routine adds two single precision numbers together
 
794
C            after forcing both operands to be stored in memory.
 
795
C***LIBRARY   SLATEC
 
796
C***CATEGORY  A3A
 
797
C***TYPE      SINGLE PRECISION (ADDXY-S, DADDXY-D)
 
798
C***KEYWORDS  ADD, ADDITION, ARITHMETIC, REAL, SUM,
 
799
C             SUMMATION
 
800
C***AUTHOR  Fong, K. W., (NMFECC)
 
801
C             Mail Code L-560
 
802
C             Lawrence Livermore National Laboratory
 
803
C             Post Office Box 5509
 
804
C             Livermore, CA  94550
 
805
C           Jefferson, T. H., (SNLL)
 
806
C             Org. 8235
 
807
C             Sandia National Laboratories Livermore
 
808
C             Livermore, CA  94550
 
809
C           Suyehiro, T., (LLNL)
 
810
C             Mail Code L-316
 
811
C             Lawrence Livermore National Laboratory
 
812
C             Post Office Box 808
 
813
C             Livermore, CA  94550
 
814
C***DESCRIPTION
 
815
C
 
816
C *Usage:
 
817
C
 
818
C     INTEGER IERR
 
819
C     REAL X, Y, Z
 
820
C
 
821
C     CALL ADDXY (X, Y, Z, IERR)
 
822
C
 
823
C *Arguments:
 
824
C
 
825
C  X :IN   This is one of the operands to be added.  It will not
 
826
C          be modified by ADDXY.
 
827
C
 
828
C  Y :IN   This is the other operand to be added.  It will not be
 
829
C          modified by ADDXY.
 
830
C
 
831
C  Z :OUT  This is the sum of X and Y.  In case of an error,
 
832
C          this argument will not be modified.
 
833
C
 
834
C  IERR:OUT  This argument will be set to 0 if ADDXY added the two
 
835
C          operands.  It will be set to 1 if it appears the addition
 
836
C          would generate a result that might overflow.
 
837
C
 
838
C *Description:
 
839
C
 
840
C  ADDXY first divides X and Y by the largest single precision number
 
841
C  and then adds the quotients.  If the absolute value of the sum is
 
842
C  greater than 1.0, ADDXY returns with IERR set to 1.  Otherwise
 
843
C  ADDXY stores X and Y into an internal array and calls ADDZZ to add
 
844
C  them.  This increases the probability (but does not guarantee) that
 
845
C  operands and result are stored into memory to avoid retention of
 
846
C  extra bits in overlength registers or cache.
 
847
C
 
848
C***REFERENCES  W. M. Gentleman and S. B. Marovich, More on algorithms
 
849
C                 that reveal properties of floating point arithmetic
 
850
C                 units, Communications of the ACM, 17 (1974), pp.
 
851
C                 276-277.
 
852
C***ROUTINES CALLED  ADDZZ, R1MACH, XERMSG
 
853
C***REVISION HISTORY  (YYMMDD)
 
854
C   831109  DATE WRITTEN
 
855
C   880325  Modified to meet new SLATEC prologue standards.  Only
 
856
C           comment lines were modified.
 
857
C   881103  Brought DESCRIPTION section up to Appendix E standards.
 
858
C   921215  REFERENCE section modified to reflect recommended style.
 
859
C***END PROLOGUE  ADDXY
 
860
      DIMENSION R(3)
 
861
C***FIRST EXECUTABLE STATEMENT  ADDXY
 
862
      BIG = R1MACH( 2 )
 
863
C
 
864
C  This is an example program, not meant to be taken seriously.  The
 
865
C  following illustrates the use of XERMSG to send an error message.
 
866
C
 
867
      IF ( (ABS((X/BIG)+(Y/BIG))-1.0) .GT. 0.0 ) THEN
 
868
         IERR = 1
 
869
         CALL XERMSG ( 'SLATEC', 'ADDXY', 'Addition of the operands '//
 
870
     *      'is likely to cause overflow', IERR, 1 )
 
871
      ELSE
 
872
         IERR = 0
 
873
         R(1) = X
 
874
         R(2) = Y
 
875
         CALL ADDZZ( R )
 
876
         Z    = R(3)
 
877
      ENDIF
 
878
      RETURN
 
879
      END
 
880
      SUBROUTINE ADDZZ (R)
 
881
C***BEGIN PROLOGUE  ADDZZ
 
882
C***SUBSIDIARY
 
883
C***PURPOSE  This routine adds two single precision numbers.
 
884
C***LIBRARY   SLATEC
 
885
C***AUTHOR  Fong, K. W., (NMFECC)
 
886
C             Mail Code L-560
 
887
C             Lawrence Livermore National Laboratory
 
888
C             Post Office Box 5509
 
889
C             Livermore, CA  94550
 
890
C           Jefferson, T. H., (SNLL)
 
891
C             Org. 8235
 
892
C             Sandia National Laboratories Livermore
 
893
C             Livermore, CA  94550
 
894
C           Suyehiro, T., (LLNL)
 
895
C             Mail Code L-316
 
896
C             Lawrence Livermore National Laboratory
 
897
C             Post Office Box 808
 
898
C             Livermore, CA  94550
 
899
C***SEE ALSO  ADDXY
 
900
C***ROUTINES CALLED  (NONE)
 
901
C***REVISION HISTORY  (YYMMDD)
 
902
C   831109  DATE WRITTEN
 
903
C   880325  Modified to meet new SLATEC prologue standards.  Only
 
904
C           comment lines were modified.
 
905
C***END PROLOGUE  ADDZZ
 
906
      DIMENSION R(3)
 
907
C***FIRST EXECUTABLE STATEMENT  ADDZZ
 
908
      R(3) = R(1) + R(2)
 
909
      RETURN
 
910
      END
 
911
 
 
912
 
 
913
 
 
914
 
 
915
*******************************************************************************
 
916
 
 
917
 
 
918
SECTION 10. SLATEC QUICK CHECK PHILOSOPHY
 
919
 
 
920
The SLATEC Library is distributed with a set of test programs that may be used
 
921
as an aid to insure that the Library is installed correctly.  This set of test
 
922
programs is known as the SLATEC quick checks.  The quick checks are not meant
 
923
to provide an exhaustive test of the Library.  Instead they are designed to
 
924
protect against gross errors, such as an unsatisfied external.  Because the
 
925
SLATEC Library runs on a great variety of computers, the quick checks often
 
926
detect arithmetic difficulties with either particular Library routines or with
 
927
a particular computational environment.
 
928
 
 
929
A list of the quick check guidelines follows.
 
930
 
 
931
1.  A quick check should test a few problems successfully solved by a
 
932
    particular library subprogram.  It is not intended to be an extensive
 
933
    test of a subprogram.
 
934
 
 
935
2.  A quick check should provide consistent and minimal output in most
 
936
    cases, including a "PASS" or "FAIL" indicator.  However, more detailed
 
937
    output should be available on request to help track down problems in the
 
938
    case of failures.
 
939
 
 
940
3.  Some reasonable error conditions should be tested by the quick check by
 
941
    purposefully referencing the routine incorrectly.
 
942
 
 
943
4.  A quick check subprogram is expected to execute correctly on any machine
 
944
    with an ANSI Fortran 77 compiler and library.  No test should have to be
 
945
    skipped to avoid an abort on a particular machine.
 
946
 
 
947
5.  As distributed on the SLATEC tape, the quick check package consists of a
 
948
    number of quick check main programs and a moderate number of subprograms.
 
949
    Each quick check main program, more frequently called a quick check driver,
 
950
    calls one or more quick check subprograms.  Usually, a given driver
 
951
    initiates the tests for a broadly related set of subprograms, e.g. for the
 
952
    single precision Basic Linear Algebra Subprograms (BLAS).  Each quick
 
953
    check subprogram will test one or more closely related library routines of
 
954
    the same precision.  For example, single precision routines and their
 
955
    double precision equivalents are not to be tested in the same quick check
 
956
    subprogram.
 
957
 
 
958
6.  The format of the quick check package does not rigidly dictate how it
 
959
    must be executed on a particular machine.  For example, memory size of the
 
960
    machine might preclude loading all quick check modules at once.
 
961
 
 
962
 
 
963
 
 
964
 
 
965
*******************************************************************************
 
966
 
 
967
SECTION 11. SPECIFIC PROGRAMMING STANDARDS FOR SLATEC QUICK CHECKS
 
968
 
 
969
Just as the routines in the SLATEC Common Mathematical Library must meet
 
970
certain standards, so must the quick checks.  These standards are meant to
 
971
ensure that the quick checks adhere to the SLATEC quick check philosophy and
 
972
to enhance maintainability.  The list of these quick check standards follow.
 
973
 
 
974
 
 
975
1.  Each module must test only a few related library subprograms.
 
976
 
 
977
2.  Each module must be in the form of a subroutine with three arguments.
 
978
    For example:
 
979
 
 
980
                SUBROUTINE ADTST (LUN, KPRINT, IPASS)
 
981
 
 
982
    The first is an input argument giving the unit number to which any output
 
983
    should be written.  The second is an input argument specifying the amount
 
984
    of printing to be done by the quick check subroutine.  The third is an
 
985
    output flag indicating passage or failure of the subroutine.
 
986
 
 
987
    LUN         Unit number to which any output should be written.
 
988
 
 
989
    KPRINT = 0  No printing is done (pass/fail is presumably monitored at a
 
990
                higher level, i.e. in the driver).  Error messages will not be
 
991
                printed since the quick check driver sets the error handling
 
992
                control flag to 0, using CALL XSETF(0) when KPRINT = 0 or 1.
 
993
 
 
994
           = 1  No printing is done for tests which pass; a short message
 
995
                (e.g., one line) is printed for tests which fail.  Error
 
996
                messages will not be printed since the quick check driver sets
 
997
                the error handling control flag to 0, using CALL XSETF(0)
 
998
                when KPRINT = 0 or 1.
 
999
 
 
1000
           = 2  A short message is printed for tests which pass; more detailed
 
1001
                information is printed for tests which fail.  Error messages
 
1002
                describing the reason for failure should be printed.
 
1003
 
 
1004
           = 3  (Possibly) quite detailed information is printed for all tests.
 
1005
                Error messages describing the reason for failure should be
 
1006
                printed.
 
1007
 
 
1008
    IPASS  = 0  Indicates failure of the quick check subroutine (i.e., at least
 
1009
                one test failed).
 
1010
 
 
1011
           = 1  Indicates that all tests passed in the quick check subroutine.
 
1012
 
 
1013
    In the case of a subroutine whose purpose is to produce output (e.g., a
 
1014
    printer-plotter), output of a more detailed nature might be produced for
 
1015
    KPRINT >= 1.
 
1016
 
 
1017
    The quick check must execute correctly and completely using each value
 
1018
    of KPRINT.  KPRINT is used only to control the printing and does not
 
1019
    affect the tests made of the SLATEC routine.
 
1020
 
 
1021
3.  The quick check subprograms must be written in ANSI Fortran 77 and
 
1022
    must make use of I1MACH, R1MACH, and D1MACH for pass/fail tolerances.
 
1023
 
 
1024
4.  Where possible, compute constants in a machine independent fashion.  For
 
1025
    example, PI = 4. * ATAN(1.0)
 
1026
 
 
1027
5.  Using one library routine to test another is permitted, though this should
 
1028
    be done with care.
 
1029
 
 
1030
6.  Known solutions can be stored using DATA or PARAMETER statements.  Some
 
1031
    subprograms return a "solution" which is more than one number - for
 
1032
    example, the eigenvalues of a matrix.  In these cases, take special care
 
1033
    that the quick check test passes for ALL orderings of the output which are
 
1034
    mathematically correct.
 
1035
 
 
1036
7.  Where subprograms are required by a routine being tested, they
 
1037
    should accompany the quick check.  However, care should be taken so that
 
1038
    no two such subprograms have the same name. Choosing esoteric or odd
 
1039
    names is a good idea.  It is extremely desirable that each such
 
1040
    subprogram contain comments indicating which quick check needed it
 
1041
    (a C***SEE ALSO line should be used).
 
1042
 
 
1043
8.  Detailed output should be self-contained yet concise.  No external
 
1044
    reference material or additional computations should be required to
 
1045
    determine what, for example, the correct solution to the problem really is.
 
1046
 
 
1047
9.  For purposes of tracking down the cause of a failure, external reference
 
1048
    material or the name of a (willing) qualified expert should be listed in
 
1049
    the comment section of the quick check.
 
1050
 
 
1051
10. Quick checks must have SLATEC prologues and be adequately commented
 
1052
    and cleanly written so that the average software librarian has some hope
 
1053
    of tracking down problems.  For example, if a test problem is known to
 
1054
    be tricky or if difficulties are expected for short word length
 
1055
    machines, an appropriate comment would be helpful.
 
1056
 
 
1057
11. After deliberately calling a library routine with incorrect arguments,
 
1058
    invoke the function IERR=NUMXER(NERR) to verify that the correct error
 
1059
    number was set.  (NUMXER is a function in the SLATEC error handling
 
1060
    package that returns the number of the most recent error via both the
 
1061
    function value and the argument.)  Then CALL XERCLR to clear it before
 
1062
    this (or the next) quick check makes another error.
 
1063
 
 
1064
12. A quick check should be written in such a way that it will execute
 
1065
    identically if called several times in the same program.  In particular,
 
1066
    there should be no modification of DATA loaded variables which cause the
 
1067
    quick check to start with the wrong values on subsequent calls.
 
1068
 
 
1069
 
 
1070
 
 
1071
 
 
1072
*******************************************************************************
 
1073
 
 
1074
SECTION 12. QUICK CHECK DRIVERS (MAIN PROGRAMS)
 
1075
 
 
1076
Many people writing quick checks are not aware of the environment in which the
 
1077
individual quick check is called.  The following aspects of the quick check
 
1078
drivers are illustrated by the example driver in Section 14.
 
1079
 
 
1080
1.  Each quick check driver will call one or more quick check subprograms.
 
1081
 
 
1082
2.  The input and output units for the tests are set in the driver.
 
1083
 
 
1084
            LIN = I1MACH(1)        the input unit
 
1085
            LUN = I1MACH(2)        the output unit
 
1086
 
 
1087
    The output unit is communicated to the quick check subprograms
 
1088
    through the argument list.  All output should be directed to the unit LUN
 
1089
    that is in the argument list.
 
1090
 
 
1091
3.  Each quick check has three arguments LUN, KPRINT, and IPASS.  The
 
1092
    meaning of these arguments within the quick checks is detailed
 
1093
    thoroughly in the previous section.
 
1094
 
 
1095
    a.  The quick check driver reads in KPRINT without a prompt, and
 
1096
        passes KPRINT as an argument to each quick check it calls.  KPRINT must
 
1097
        not be changed by any driver or quick check.  The driver uses KPRINT to
 
1098
        help determine what output to write.
 
1099
 
 
1100
    b.  The variable IPASS must be set to 0 (for fail) or to 1 (for pass) by
 
1101
        each quick check before returning to the driver.  Within the driver,
 
1102
        the variable NFAIL is set to 0.  If IPASS = 0 upon return to the
 
1103
        driver, then NFAIL is incremented.  After calling all the quick checks,
 
1104
        NFAIL will then have the number of quick checks which failed.
 
1105
 
 
1106
    c.  Quick check driver output should follow this chart:
 
1107
 
 
1108
                NFAIL        OUTPUT
 
1109
                -----        ------
 
1110
 
 
1111
                not 0        driver writes fail message
 
1112
                  0          driver writes pass message
 
1113
 
 
1114
4.  There are calls to three SLATEC error handler routines in each quick check
 
1115
    driver:
 
1116
 
 
1117
 
 
1118
            CALL XSETUN(LUN)       Selects unit LUN as the unit to which
 
1119
                                      error messages will be sent.
 
1120
            CALL XSETF(1)          Only fatal (not recoverable) error messages
 
1121
              or XSETF(0)             will cause an abort.  XSETF sets the
 
1122
                                      KONTROL variable for the error handler
 
1123
                                      routines to the value of the XSETF
 
1124
                                      argument.  A value of either 0 or 1 will
 
1125
                                      make only fatal errors cause a program
 
1126
                                      abort.  A value of 1 will allow printing
 
1127
                                      of error messages, while a value of zero
 
1128
                                      will print only fatal error messages.
 
1129
            CALL XERMAX(1000)      Increase the number of times any
 
1130
                                      single message may be printed.
 
1131
 
 
1132
 
 
1133
 
 
1134
 
 
1135
*******************************************************************************
 
1136
 
 
1137
SECTION 13. QUICK CHECK SUBROUTINE EXAMPLE
 
1138
 
 
1139
The following program provides a very minimal check of the sample routine
 
1140
from Section 9.
 
1141
 
 
1142
 
 
1143
      SUBROUTINE ADTST (LUN, KPRINT, IPASS)
 
1144
C***BEGIN PROLOGUE  ADTST
 
1145
C***SUBSIDIARY
 
1146
C***PURPOSE  Quick check for SLATEC routine ADDXY
 
1147
C***LIBRARY   SLATEC
 
1148
C***CATEGORY  A3A
 
1149
C***TYPE      SINGLE PRECISION (ADTST-S, DADTST-D)
 
1150
C***KEYWORDS  QUICK CHECK, ADDXY,
 
1151
C***AUTHOR  Suyehiro, Tok, (LLNL)
 
1152
C           Walton, Lee, (SNL)
 
1153
C***ROUTINES CALLED  ADDXY, R1MACH
 
1154
C***REVISION HISTORY  (YYMMDD)
 
1155
C   880511  DATE WRITTEN
 
1156
C   880608  Revised to meet new prologue standards.
 
1157
C***END PROLOGUE  ADTST
 
1158
C
 
1159
C***FIRST EXECUTABLE STATEMENT  ADTST
 
1160
      IF ( KPRINT .GE. 2 ) WRITE (LUN,99999)
 
1161
99999 FORMAT ('OUTPUT FROM ADTST')
 
1162
      IPASS = 1
 
1163
C
 
1164
C EXAMPLE PROBLEM
 
1165
      X = 1.
 
1166
      Y = 2.
 
1167
      CALL ADDXY(X, Y, Z, IERR)
 
1168
      EPS = R1MACH(4)
 
1169
      IF( (ABS(Z-3.) .GT. EPS)  .OR.  (IERR .EQ. 1) ) IPASS = 0
 
1170
      IF ( KPRINT .GE. 2 ) THEN
 
1171
      WRITE (LUN,99995)X, Y, Z
 
1172
99995 FORMAT (/' EXAMPLE PROBLEM ',/' X = ',E20.13,' Y = ',E20.13,' Z = ',
 
1173
     *   E20.13)
 
1174
      ENDIF
 
1175
      IF ( (IPASS .EQ. 1 ) .AND. (KPRINT .GT. 1) ) WRITE (LUN,99994)
 
1176
      IF ( (IPASS .EQ. 0 ) .AND. (KPRINT .NE. 0) ) WRITE (LUN,99993)
 
1177
99994 FORMAT(/' ***************ADDXY  PASSED ALL TESTS***************')
 
1178
99993 FORMAT(/' ***************ADDXY  FAILED SOME TESTS***************')
 
1179
      RETURN
 
1180
      END
 
1181
 
 
1182
 
 
1183
 
 
1184
 
 
1185
*******************************************************************************
 
1186
 
 
1187
SECTION 14. QUICK CHECK MAIN PROGRAM EXAMPLE
 
1188
 
 
1189
The following is an example main program which should be used to drive a quick
 
1190
check.  The names of the quick check subroutines it calls, ADTST and DADTST,
 
1191
should be replaced with the name or names of real quick checks.  The dummy
 
1192
names of the SLATEC routines being tested, ADDXY and DADDXY, should be
 
1193
replaced with the names of the routines which are actually being tested.
 
1194
 
 
1195
 
 
1196
      PROGRAM TEST00
 
1197
C***BEGIN PROLOGUE  TEST00
 
1198
C***SUBSIDIARY
 
1199
C***PURPOSE  Driver for testing SLATEC subprograms
 
1200
C            ADDXY    DADDXY
 
1201
C***LIBRARY   SLATEC
 
1202
C***CATEGORY  A3
 
1203
C***TYPE      ALL (TEST00-A)
 
1204
C***KEYWORDS  QUICK CHECK DRIVER, ADDXY, DADDXY
 
1205
C***AUTHOR  Suyehiro, Tok, (LLNL)
 
1206
C           Walton, Lee, (SNL)
 
1207
C***DESCRIPTION
 
1208
C
 
1209
C *Usage:
 
1210
C     One input data record is required
 
1211
C         READ (LIN,990) KPRINT
 
1212
C     990 FORMAT (I1)
 
1213
C
 
1214
C *Arguments:
 
1215
C     KPRINT = 0  Quick checks - No printing.
 
1216
C                 Driver       - Short pass or fail message printed.
 
1217
C              1  Quick checks - No message printed for passed tests,
 
1218
C                                short message printed for failed tests.
 
1219
C                 Driver       - Short pass or fail message printed.
 
1220
C              2  Quick checks - Print short message for passed tests,
 
1221
C                                fuller information for failed tests.
 
1222
C                 Driver       - Pass or fail message printed.
 
1223
C              3  Quick checks - Print complete quick check results.
 
1224
C                 Driver       - Pass or fail message printed.
 
1225
C
 
1226
C *Description:
 
1227
C     Driver for testing SLATEC subprograms
 
1228
C        ADDXY    DADDXY
 
1229
C
 
1230
C***REFERENCES  (NONE)
 
1231
C***ROUTINES CALLED  ADTST, DADTST, I1MACH, XERMAX, XSETF, XSETUN
 
1232
C***REVISION HISTORY  (YYMMDD)
 
1233
C   880511  DATE WRITTEN
 
1234
C   880608  Revised to meet the new SLATEC prologue standards.
 
1235
C   881103  Brought DESCRIPTION section up to Appendix E standards.
 
1236
C***END PROLOGUE  TEST00
 
1237
C
 
1238
C***FIRST EXECUTABLE STATEMENT  TEST00
 
1239
      LUN   = I1MACH(2)
 
1240
      LIN   = I1MACH(1)
 
1241
      NFAIL = 0
 
1242
C
 
1243
C   Read KPRINT parameter
 
1244
C
 
1245
      READ (LIN,990) KPRINT
 
1246
  990 FORMAT (I1)
 
1247
      CALL XSETUN(LUN)
 
1248
      IF ( KPRINT .LE. 1 ) THEN
 
1249
         CALL XSETF(0)
 
1250
      ELSE
 
1251
         CALL XSETF(1)
 
1252
      ENDIF
 
1253
      CALL XERMAX(1000)
 
1254
C
 
1255
C   Test ADDXY
 
1256
C
 
1257
      CALL ADTST(LUN, KPRINT, IPASS)
 
1258
      IF ( IPASS .EQ. 0 ) NFAIL = NFAIL + 1
 
1259
C
 
1260
C   Test DADDXY
 
1261
C
 
1262
      CALL DADTST(LUN, KPRINT, IPASS)
 
1263
      IF ( IPASS .EQ. 0 ) NFAIL = NFAIL + 1
 
1264
C
 
1265
      IF ( NFAIL .GT. 0 ) WRITE (LUN,980) NFAIL
 
1266
  980 FORMAT (/' ************* WARNING -- ', I5,
 
1267
     * ' TEST(S) FAILED IN PROGRAM TEST00 *************' )
 
1268
      IF ( NFAIL .EQ. 0 ) WRITE (LUN,970)
 
1269
  970 FORMAT
 
1270
     * (/' --------------TEST00  PASSED ALL TESTS----------------')
 
1271
      END
 
1272
 
 
1273
 
 
1274
 
 
1275
 
 
1276
*******************************************************************************
 
1277
 
 
1278
APPENDIX A.  GAMS (AND SLATEC) CLASSIFICATION SCHEME
 
1279
 
 
1280
SLATEC has adopted the GAMS (Guide to Available Mathematical Software)
 
1281
Classification Scheme for Mathematical and Statistical Software,
 
1282
reference [5].
 
1283
 
 
1284
 
 
1285
                     GAMS (and SLATEC) Classification Scheme
 
1286
                                     for
 
1287
                     Mathematical and Statistical Software
 
1288
 
 
1289
 
 
1290
                           Version 1.2 October 1983
 
1291
 
 
1292
 
 
1293
 
 
1294
 
 
1295
A.  Arithmetic, error analysis
 
1296
A1.  Integer
 
1297
A2.  Rational
 
1298
A3.  Real
 
1299
A3A.  Single precision
 
1300
A3B.  Double precision
 
1301
A3C.  Extended precision
 
1302
A3D.  Extended range
 
1303
A4.  Complex
 
1304
A4A.  Single precision
 
1305
A4B.  Double precision
 
1306
A4C.  Extended precision
 
1307
A4D.  Extended range
 
1308
A5.  Interval
 
1309
A5A.  Real
 
1310
A5B.  Complex
 
1311
A6.  Change of representation
 
1312
A6A.  Type conversion
 
1313
A6B.  Base conversion
 
1314
A6C.  Decomposition, construction
 
1315
A7.  Sequences (e.g., convergence acceleration)
 
1316
B.  Number theory
 
1317
C.  Elementary and special functions (search also class L5)
 
1318
C1.  Integer-valued functions (e.g., floor, ceiling, factorial, binomial
 
1319
     coefficient)
 
1320
C2.  Powers, roots, reciprocals
 
1321
C3.  Polynomials
 
1322
C3A.  Orthogonal
 
1323
C3A1.  Trigonometric
 
1324
C3A2.  Chebyshev, Legendre
 
1325
C3A3.  Laguerre
 
1326
C3A4.  Hermite
 
1327
C3B.  Non-orthogonal
 
1328
C4.  Elementary transcendental functions
 
1329
C4A.  Trigonometric, inverse trigonometric
 
1330
C4B.  Exponential, logarithmic
 
1331
C4C.  Hyperbolic, inverse hyperbolic
 
1332
C4D.  Integrals of elementary transcendental functions
 
1333
C5.  Exponential and logarithmic integrals
 
1334
C6.  Cosine and sine integrals
 
1335
C7.  Gamma
 
1336
C7A.  Gamma, log gamma, reciprocal gamma
 
1337
C7B.  Beta, log beta
 
1338
C7C.  Psi function
 
1339
C7D.  Polygamma function
 
1340
C7E.  Incomplete gamma
 
1341
C7F.  Incomplete beta
 
1342
C7G.  Riemann zeta
 
1343
C8.  Error functions
 
1344
C8A.  Error functions, their inverses, integrals, including the normal
 
1345
      distribution function
 
1346
C8B.  Fresnel integrals
 
1347
C8C.  Dawson's integral
 
1348
C9.  Legendre functions
 
1349
C10.  Bessel functions
 
1350
C10A.  J, Y, H-(1), H-(2)
 
1351
C10A1.  Real argument, integer order
 
1352
C10A2.  Complex argument, integer order
 
1353
C10A3.  Real argument, real order
 
1354
C10A4.  Complex argument, real order
 
1355
C10A5.  Complex argument, complex order
 
1356
C10B.  I, K
 
1357
C10B1.  Real argument, integer order
 
1358
C10B2.  Complex argument, integer order
 
1359
C10B3.  Real argument, real order
 
1360
C10B4.  Complex argument, real order
 
1361
C10B5.  Complex argument, complex order
 
1362
C10C.  Kelvin functions
 
1363
C10D.  Airy and Scorer functions
 
1364
C10E.  Struve, Anger, and Weber functions
 
1365
C10F.  Integrals of Bessel functions
 
1366
C11.  Confluent hypergeometric functions
 
1367
C12.  Coulomb wave functions
 
1368
C13.  Jacobian elliptic functions, theta functions
 
1369
C14.  Elliptic integrals
 
1370
C15.  Weierstrass elliptic functions
 
1371
C16.  Parabolic cylinder functions
 
1372
C17.  Mathieu functions
 
1373
C18.  Spheroidal wave functions
 
1374
C19.  Other special functions
 
1375
D.  Linear Algebra
 
1376
D1.  Elementary vector and matrix operations
 
1377
D1A.  Elementary vector operations
 
1378
D1A1.  Set to constant
 
1379
D1A2.  Minimum and maximum components
 
1380
D1A3.  Norm
 
1381
D1A3A.  L-1 (sum of magnitudes)
 
1382
D1A3B.  L-2 (Euclidean norm)
 
1383
D1A3C.  L-infinity (maximum magnitude)
 
1384
D1A4.  Dot product (inner product)
 
1385
D1A5.  Copy or exchange (swap)
 
1386
D1A6.  Multiplication by scalar
 
1387
D1A7.  Triad (a*x+y for vectors x,y and scalar a)
 
1388
D1A8.  Elementary rotation (Givens transformation)
 
1389
D1A9.  Elementary reflection (Householder transformation)
 
1390
D1A10.  Convolutions
 
1391
D1B.  Elementary matrix operations
 
1392
D1B1.  Set to zero, to identity
 
1393
D1B2.  Norm
 
1394
D1B3.  Transpose
 
1395
D1B4.  Multiplication by vector
 
1396
D1B5.  Addition, subtraction
 
1397
D1B6.  Multiplication
 
1398
D1B7.  Matrix polynomial
 
1399
D1B8.  Copy
 
1400
D1B9.  Storage mode conversion
 
1401
D1B10.  Elementary rotation (Givens transformation)
 
1402
D1B11.  Elementary reflection (Householder transformation)
 
1403
D2.  Solution of systems of linear equations (including inversion, LU and
 
1404
     related decompositions)
 
1405
D2A.  Real nonsymmetric matrices
 
1406
D2A1.  General
 
1407
D2A2.  Banded
 
1408
D2A2A.  Tridiagonal
 
1409
D2A3.  Triangular
 
1410
D2A4.  Sparse
 
1411
D2B.  Real symmetric matrices
 
1412
D2B1.  General
 
1413
D2B1A.  Indefinite
 
1414
D2B1B.  Positive definite
 
1415
D2B2.  Positive definite banded
 
1416
D2B2A.  Tridiagonal
 
1417
D2B4.  Sparse
 
1418
D2C.  Complex non-Hermitian matrices
 
1419
D2C1.  General
 
1420
D2C2.  Banded
 
1421
D2C2A.  Tridiagonal
 
1422
D2C3.  Triangular
 
1423
D2C4.  Sparse
 
1424
D2D.  Complex Hermitian matrices
 
1425
D2D1.  General
 
1426
D2D1A.  Indefinite
 
1427
D2D1B.  Positive definite
 
1428
D2D2.  Positive definite banded
 
1429
D2D2A.  Tridiagonal
 
1430
D2D4.  Sparse
 
1431
D2E.  Associated operations (e.g., matrix reorderings)
 
1432
D3.  Determinants
 
1433
D3A.  Real nonsymmetric matrices
 
1434
D3A1.  General
 
1435
D3A2.  Banded
 
1436
D3A2A.  Tridiagonal
 
1437
D3A3.  Triangular
 
1438
D3A4.  Sparse
 
1439
D3B.  Real symmetric matrices
 
1440
D3B1.  General
 
1441
D3B1A.  Indefinite
 
1442
D3B1B.  Positive definite
 
1443
D3B2.  Positive definite banded
 
1444
D3B2A.  Tridiagonal
 
1445
D3B4.  Sparse
 
1446
D3C.  Complex non-Hermitian matrices
 
1447
D3C1.  General
 
1448
D3C2.  Banded
 
1449
D3C2A.  Tridiagonal
 
1450
D3C3.  Triangular
 
1451
D3C4.  Sparse
 
1452
D3D.  Complex Hermitian matrices
 
1453
D3D1.  General
 
1454
D3D1A.  Indefinite
 
1455
D3D1B.  Positive definite
 
1456
D3D2.  Positive definite banded
 
1457
D3D2A.  Tridiagonal
 
1458
D3D4.  Sparse
 
1459
D4.  Eigenvalues, eigenvectors
 
1460
D4A.  Ordinary eigenvalue problems (Ax = (lambda) * x)
 
1461
D4A1.  Real symmetric
 
1462
D4A2.  Real nonsymmetric
 
1463
D4A3.  Complex Hermitian
 
1464
D4A4.  Complex non-Hermitian
 
1465
D4A5.  Tridiagonal
 
1466
D4A6.  Banded
 
1467
D4A7.  Sparse
 
1468
D4B.  Generalized eigenvalue problems (e.g., Ax = (lambda)*Bx)
 
1469
D4B1.  Real symmetric
 
1470
D4B2.  Real general
 
1471
D4B3.  Complex Hermitian
 
1472
D4B4.  Complex general
 
1473
D4B5.  Banded
 
1474
D4C.  Associated operations
 
1475
D4C1.  Transform problem
 
1476
D4C1A.  Balance matrix
 
1477
D4C1B.  Reduce to compact form
 
1478
D4C1B1.  Tridiagonal
 
1479
D4C1B2.  Hessenberg
 
1480
D4C1B3.  Other
 
1481
D4C1C.  Standardize problem
 
1482
D4C2.  Compute eigenvalues of matrix in compact form
 
1483
D4C2A.  Tridiagonal
 
1484
D4C2B.  Hessenberg
 
1485
D4C2C.  Other
 
1486
D4C3.  Form eigenvectors from eigenvalues
 
1487
D4C4.  Back transform eigenvectors
 
1488
D4C5.  Determine Jordan normal form
 
1489
D5.  QR decomposition, Gram-Schmidt orthogonalization
 
1490
D6.  Singular value decomposition
 
1491
D7.  Update matrix decompositions
 
1492
D7A.  LU
 
1493
D7B.  Cholesky
 
1494
D7C.  QR
 
1495
D7D.  Singular value
 
1496
D8.  Other matrix equations (e.g., AX+XB=C)
 
1497
D9.  Overdetermined or underdetermined systems of equations, singular systems,
 
1498
     pseudo-inverses (search also classes D5, D6, K1a, L8a)
 
1499
E.  Interpolation
 
1500
E1.  Univariate data (curve fitting)
 
1501
E1A.  Polynomial splines (piecewise polynomials)
 
1502
E1B.  Polynomials
 
1503
E1C.  Other functions (e.g., rational, trigonometric)
 
1504
E2.  Multivariate data (surface fitting)
 
1505
E2A.  Gridded
 
1506
E2B.  Scattered
 
1507
E3.  Service routines (e.g., grid generation, evaluation of fitted functions)
 
1508
     (search also class N5)
 
1509
F.  Solution of nonlinear equations
 
1510
F1.  Single equation
 
1511
F1A.  Smooth
 
1512
F1A1.  Polynomial
 
1513
F1A1A.  Real coefficients
 
1514
F1A1B.  Complex coefficients
 
1515
F1A2.  Nonpolynomial
 
1516
F1B.  General (no smoothness assumed)
 
1517
F2.  System of equations
 
1518
F2A.  Smooth
 
1519
F2B.  General (no smoothness assumed)
 
1520
F3.  Service routines (e.g., check user-supplied derivatives)
 
1521
G.  Optimization (search also classes K, L8)
 
1522
G1.  Unconstrained
 
1523
G1A.  Univariate
 
1524
G1A1.  Smooth function
 
1525
G1A1A.  User provides no derivatives
 
1526
G1A1B.  User provides first derivatives
 
1527
G1A1C.  User provides first and second derivatives
 
1528
G1A2.  General function (no smoothness assumed)
 
1529
G1B.  Multivariate
 
1530
G1B1.  Smooth function
 
1531
G1B1A.  User provides no derivatives
 
1532
G1B1B.  User provides first derivatives
 
1533
G1B1C.  User provides first and second derivatives
 
1534
G1B2.  General function (no smoothness assumed)
 
1535
G2.  Constrained
 
1536
G2A.  Linear programming
 
1537
G2A1.  Dense matrix of constraints
 
1538
G2A2.  Sparse matrix of constraints
 
1539
G2B.  Transportation and assignments problem
 
1540
G2C.  Integer programming
 
1541
G2C1.  Zero/one
 
1542
G2C2.  Covering and packing problems
 
1543
G2C3.  Knapsack problems
 
1544
G2C4.  Matching problems
 
1545
G2C5.  Routing, scheduling, location problems
 
1546
G2C6.  Pure integer programming
 
1547
G2C7.  Mixed integer programming
 
1548
G2D.  Network (for network reliability search class M)
 
1549
G2D1.  Shortest path
 
1550
G2D2.  Minimum spanning tree
 
1551
G2D3.  Maximum flow
 
1552
G2D3A.  Generalized networks
 
1553
G2D3B.  Networks with side constraints
 
1554
G2D4.  Test problem generation
 
1555
G2E.  Quadratic programming
 
1556
G2E1.  Positive definite Hessian (i.e. convex problem)
 
1557
G2E2.  Indefinite Hessian
 
1558
G2F.  Geometric programming
 
1559
G2G.  Dynamic programming
 
1560
G2H.  General nonlinear programming
 
1561
G2H1.  Simple bounds
 
1562
G2H1A.  Smooth function
 
1563
G2H1A1.  User provides no derivatives
 
1564
G2H1A2.  User provides first derivatives
 
1565
G2H1A3.  User provides first and second derivatives
 
1566
G2H1B.  General function (no smoothness assumed)
 
1567
G2H2.  Linear equality or inequality constraints
 
1568
G2H2A.  Smooth function
 
1569
G2H2A1.  User provides no derivatives
 
1570
G2H2A2.  User provides first derivatives
 
1571
G2H2A3.  User provides first and second derivatives
 
1572
G2H2B.  General function (no smoothness assumed)
 
1573
G2H3.  Nonlinear constraints
 
1574
G2H3A.  Equality constraints only
 
1575
G2H3A1.  Smooth function and constraints
 
1576
G2H3A1A.  User provides no derivatives
 
1577
G2H3A1B.  User provides first derivatives of function and constraints
 
1578
G2H3A1C.  User provides first and second derivatives of function and
 
1579
          constraints
 
1580
G2H3A2.  General function and constraints (no smoothness assumed)
 
1581
G2H3B.  Equality and inequality constraints
 
1582
G2H3B1.  Smooth function and constraints
 
1583
G2H3B1A.  User provides no derivatives
 
1584
G2H3B1B.  User provides first derivatives of function and constraints
 
1585
G2H3B1C.  User provides first and second derivatives of function and
 
1586
          constraints
 
1587
G2H3B2.  General function and constraints (no smoothness assumed)
 
1588
G2I.  Global solution to nonconvex problems
 
1589
G3.  Optimal control
 
1590
G4.  Service routines
 
1591
G4A.  Problem input (e.g., matrix generation)
 
1592
G4B.  Problem scaling
 
1593
G4C.  Check user-supplied derivatives
 
1594
G4D.  Find feasible point
 
1595
G4E.  Check for redundancy
 
1596
G4F.  Other
 
1597
H.  Differentiation, integration
 
1598
H1.  Numerical differentiation
 
1599
H2.  Quadrature (numerical evaluation of definite integrals)
 
1600
H2A.  One-dimensional integrals
 
1601
H2A1.  Finite interval (general integrand)
 
1602
H2A1A.  Integrand available via user-defined procedure
 
1603
H2A1A1.  Automatic (user need only specify required accuracy)
 
1604
H2A1A2.  Nonautomatic
 
1605
H2A1B.  Integrand available only on grid
 
1606
H2A1B1.  Automatic (user need only specify required accuracy)
 
1607
H2A1B2.  Nonautomatic
 
1608
H2A2.  Finite interval (specific or special type integrand including weight
 
1609
       functions, oscillating and singular integrands, principal value
 
1610
       integrals, splines, etc.)
 
1611
H2A2A.  Integrand available via user-defined procedure
 
1612
H2A2A1.  Automatic (user need only specify required accuracy)
 
1613
H2A2A2.  Nonautomatic
 
1614
H2A2B.  Integrand available only on grid
 
1615
H2A2B1.  Automatic (user need only specify required accuracy)
 
1616
H2A2B2.  Nonautomatic
 
1617
H2A3.  Semi-infinite interval (including e**(-x) weight function)
 
1618
H2A3A.  Integrand available via user-defined procedure
 
1619
H2A3A1.  Automatic (user need only specify required accuracy)
 
1620
H2A3A2.  Nonautomatic
 
1621
H2A4.  Infinite interval (including e**(-x**2)) weight function)
 
1622
H2A4A.  Integrand available via user-defined procedure
 
1623
H2A4A1.  Automatic (user need only specify required accuracy)
 
1624
H2A4A2.  Nonautomatic
 
1625
H2B.  Multidimensional integrals
 
1626
H2B1.  One or more hyper-rectangular regions
 
1627
H2B1A.  Integrand available via user-defined procedure
 
1628
H2B1A1.  Automatic (user need only specify required accuracy)
 
1629
H2B1A2.  Nonautomatic
 
1630
H2B1B.  Integrand available only on grid
 
1631
H2B1B1.  Automatic (user need only specify required accuracy)
 
1632
H2B1B2.  Nonautomatic
 
1633
H2B2.  Nonrectangular region, general region
 
1634
H2B2A.  Integrand available via user-defined procedure
 
1635
H2B2A1.  Automatic (user need only specify required accuracy)
 
1636
H2B2A2.  Nonautomatic
 
1637
H2B2B.  Integrand available only on grid
 
1638
H2B2B1.  Automatic (user need only specify required accuracy)
 
1639
H2B2B2.  Nonautomatic
 
1640
H2C.  Service routines (compute weight and nodes for quadrature formulas)
 
1641
I.  Differential and integral equations
 
1642
I1.  Ordinary differential equations
 
1643
I1A.  Initial value problems
 
1644
I1A1.  General, nonstiff or mildly stiff
 
1645
I1A1A.  One-step methods (e.g., Runge-Kutta)
 
1646
I1A1B.  Multistep methods (e.g., Adams' predictor-corrector)
 
1647
I1A1C.  Extrapolation methods (e.g., Bulirsch-Stoer)
 
1648
I1A2.  Stiff and mixed algebraic-differential equations
 
1649
I1B.  Multipoint boundary value problems
 
1650
I1B1.  Linear
 
1651
I1B2.  Nonlinear
 
1652
I1B3.  Eigenvalue (e.g., Sturm-Liouville)
 
1653
I1C.  Service routines (e.g., interpolation of solutions, error handling)
 
1654
I2.  Partial differential equations
 
1655
I2A.  Initial boundary value problems
 
1656
I2A1.  Parabolic
 
1657
I2A1A.  One spatial dimension
 
1658
I2A1B.  Two or more spatial dimensions
 
1659
I2A2.  Hyperbolic
 
1660
I2B.  Elliptic boundary value problems
 
1661
I2B1.  Linear
 
1662
I2B1A.  Second order
 
1663
I2B1A1.  Poisson (Laplace) or Helmholz equation
 
1664
I2B1A1A.  Rectangular domain (or topologically rectangular in the coordinate
 
1665
          system)
 
1666
I2B1A1B.  Nonrectangular domain
 
1667
I2B1A2.  Other separable problems
 
1668
I2B1A3.  Nonseparable problems
 
1669
I2B1C.  Higher order equations (e.g., biharmonic)
 
1670
I2B2.  Nonlinear
 
1671
I2B3.  Eigenvalue
 
1672
I2B4.  Service routines
 
1673
I2B4A.  Domain triangulation (search also class P2a2c1)
 
1674
I2B4B.  Solution of discretized elliptic equations
 
1675
I3.  Integral equations
 
1676
J.  Integral transforms
 
1677
J1.  Fast Fourier transforms (search class L10 for time series analysis)
 
1678
J1A.  One-dimensional
 
1679
J1A1.  Real
 
1680
J1A2.  Complex
 
1681
J1A3.  Trigonometric (sine, cosine)
 
1682
J1B.  Multidimensional
 
1683
J2.  Convolutions
 
1684
J3.  Laplace transforms
 
1685
J4.  Hilbert transforms
 
1686
K.  Approximation (search also class L8)
 
1687
K1.  Least squares (L-2) approximation
 
1688
K1A.  Linear least squares (search also classes D5, D6, D9)
 
1689
K1A1.  Unconstrained
 
1690
K1A1A.  Univariate data (curve fitting)
 
1691
K1A1A1.  Polynomial splines (piecewise polynomials)
 
1692
K1A1A2.  Polynomials
 
1693
K1A1A3.  Other functions (e.g., rational, trigonometric, user-specified)
 
1694
K1A1B.  Multivariate data (surface fitting)
 
1695
K1A2.  Constrained
 
1696
K1A2A.  Linear constraints
 
1697
K1A2B.  Nonlinear constraints
 
1698
K1B.  Nonlinear least squares
 
1699
K1B1.  Unconstrained
 
1700
K1B1A.  Smooth functions
 
1701
K1B1A1.  User provides no derivatives
 
1702
K1B1A2.  User provides first derivatives
 
1703
K1B1A3.  User provides first and second derivatives
 
1704
K1B1B.  General functions
 
1705
K1B2.  Constrained
 
1706
K1B2A.  Linear constraints
 
1707
K1B2B.  Nonlinear constraints
 
1708
K2.  Minimax (L-infinity) approximation
 
1709
K3.  Least absolute value (L-1) approximation
 
1710
K4.  Other analytic approximations (e.g., Taylor polynomial, Pade)
 
1711
K5.  Smoothing
 
1712
K6.  Service routines (e.g., mesh generation, evaluation of fitted functions)
 
1713
     (search also class N5)
 
1714
L.  Statistics, probability
 
1715
L1.  Data summarization
 
1716
L1A.  One univariate quantitative sample
 
1717
L1A1.  Ungrouped data
 
1718
L1A1A.  Location
 
1719
L1A1B.  Dispersion
 
1720
L1A1C.  Shape
 
1721
L1A1D.  Distribution, density
 
1722
L1A2.  Ungrouped data with missing values
 
1723
L1A3.  Grouped data
 
1724
L1A3A.  Location
 
1725
L1A3B.  Dispersion
 
1726
L1A3C.  Shape
 
1727
L1C.  One univariate qualitative (proportional) sample
 
1728
L1E.  Two or more univariate samples or one multivariate sample
 
1729
L1E1.  Ungrouped data
 
1730
L1E1A.  Location
 
1731
L1E1B.  Correlation
 
1732
L1E2.  Ungrouped data with missing values
 
1733
L1E3.  Grouped data
 
1734
L1F.  Two or more multivariate samples
 
1735
L2.  Data manipulation (search also class N)
 
1736
L2A.  Transform (search also class N6 for sorting, ranking)
 
1737
L2B.  Group
 
1738
L2C.  Sample
 
1739
L2D.  Subset
 
1740
L3.  Graphics (search also class Q)
 
1741
L3A.  Histograms
 
1742
L3B.  Distribution functions
 
1743
L3C.  Scatter diagrams
 
1744
L3C1.  Y vs. X
 
1745
L3C2.  Symbol plots
 
1746
L3C3.  Multiple plots
 
1747
L3C4.  Probability plots
 
1748
L3C4B.  Beta, binomial
 
1749
L3C4C.  Cauchy, chi-squared
 
1750
L3C4D.  Double exponential
 
1751
L3C4E.  Exponential, extreme value
 
1752
L3C4F.  F distribution
 
1753
L3C4G.  Gamma, geometric
 
1754
L3C4H.  Halfnormal
 
1755
L3C4L.  Lambda, logistic, lognormal
 
1756
L3C4N.  Negative binomial, normal
 
1757
L3C4P.  Pareto, Poisson
 
1758
L3C4T.  t distribution
 
1759
L3C4U.  Uniform
 
1760
L3C4W.  Weibull
 
1761
L3C5.  Time series plots (X(i) vs. i, vertical, lag)
 
1762
L3D.  EDA graphics
 
1763
L4.  Elementary statistical inference, hypothesis testing
 
1764
L4A.  One univariate quantitative sample
 
1765
L4A1.  Ungrouped data
 
1766
L4A1A.  Parameter estimation
 
1767
L4A1A2.  Binomial
 
1768
L4A1A5.  Extreme value
 
1769
L4A1A14.  Normal
 
1770
L4A1A16.  Poisson
 
1771
L4A1A21.  Uniform
 
1772
L4A1A23.  Weibull
 
1773
L4A1B.  Distribution-free (nonparametric) analysis
 
1774
L4A1C.  Goodness-of-fit tests
 
1775
L4A1D.  Tests on sequences of numbers
 
1776
L4A1E.  Density and distribution function estimation
 
1777
L4A1F.  Tolerance limits
 
1778
L4A2.  Ungrouped data with missing values
 
1779
L4A3.  Grouped data
 
1780
L4A3A.  Parameter estimation
 
1781
L4A3A14.  Normal
 
1782
L4B.  Two or more univariate quantitative samples
 
1783
L4B1.  Ungrouped data
 
1784
L4B1A.  Parameter estimation
 
1785
L4B1A14.  Normal
 
1786
L4B1B.  Distribution-free (nonparametric) analysis
 
1787
L4B2.  Ungrouped data with missing values
 
1788
L4B3.  Grouped data
 
1789
L4C.  One univariate qualitative (proportional) sample
 
1790
L4D.  Two or more univariate samples
 
1791
L4E.  One multivariate sample
 
1792
L4E1.  Ungrouped data
 
1793
L4E1A.  Parameter estimation
 
1794
L4E1A14.  Normal
 
1795
L4E1B.  Distribution-free (nonparametric) analysis
 
1796
L4E2.  Ungrouped data with missing values
 
1797
L4E2A.  Parameter estimation
 
1798
L4E2B.  Distribution-free (nonparametric) analysis
 
1799
L4E3.  Grouped data
 
1800
L4E3A.  Parameter estimation
 
1801
L4E3A14.  Normal
 
1802
L4E3B.  Distribution-free (nonparametric) analysis
 
1803
L4E4.  Two or more multivariate samples
 
1804
L4E4A.  Parameter estimation
 
1805
L4E4A14.  Normal
 
1806
L5.  Function evaluation (search also class C)
 
1807
L5A.  Univariate
 
1808
L5A1.  Cumulative distribution functions, probability density functions
 
1809
L5A1B.  Beta, binomial
 
1810
L5A1C.  Cauchy, chi-squared
 
1811
L5A1D.  Double exponential
 
1812
L5A1E.  Error function, exponential, extreme value
 
1813
L5A1F.  F distribution
 
1814
L5A1G.  Gamma, general, geometric
 
1815
L5A1H.  Halfnormal, hypergeometric
 
1816
L5A1K.  Kolmogorov-Smirnov
 
1817
L5A1L.  Lambda, logistic, lognormal
 
1818
L5A1N.  Negative binomial, normal
 
1819
L5A1P.  Pareto, Poisson
 
1820
L5A1T.  t distribution
 
1821
L5A1U.  Uniform
 
1822
L5A1W.  Weibull
 
1823
L5A2.  Inverse cumulative distribution functions, sparsity functions
 
1824
L5A2B.  Beta, binomial
 
1825
L5A2C.  Cauchy, chi-squared
 
1826
L5A2D.  Double exponential
 
1827
L5A2E.  Exponential, extreme value
 
1828
L5A2F.  F distribution
 
1829
L5A2G.  Gamma, general, geometric
 
1830
L5A2H.  Halfnormal
 
1831
L5A2L.  Lambda, logistic, lognormal
 
1832
L5A2N.  Negative binomial, normal, normal scores
 
1833
L5A2P.  Pareto, Poisson
 
1834
L5A2T.  t distribution
 
1835
L5A2U.  Uniform
 
1836
L5A2W.  Weibull
 
1837
L5B.  Multivariate
 
1838
L5B1.  Cumulative distribution functions, probability density functions
 
1839
L5B1N.  Normal
 
1840
L6.  Pseudo-random number generation
 
1841
L6A.  Univariate
 
1842
L6A2.  Beta, binomial, Boolean
 
1843
L6A3.  Cauchy, chi-squared
 
1844
L6A4.  Double exponential
 
1845
L6A5.  Exponential, extreme value
 
1846
L6A6.  F distribution
 
1847
L6A7.  Gamma, general (continuous, discrete) distributions, geometric
 
1848
L6A8.  Halfnormal, hypergeometric
 
1849
L6A9.  Integers
 
1850
L6A12.  Lambda, logical, logistic, lognormal
 
1851
L6A14.  Negative binomial, normal
 
1852
L6A15.  Order statistics
 
1853
L6A16.  Pareto, permutations, Poisson
 
1854
L6A19.  Samples, stable distribution
 
1855
L6A20.  t distribution, time series, triangular
 
1856
L6A21.  Uniform
 
1857
L6A22.  Von Mises
 
1858
L6A23.  Weibull
 
1859
L6B.  Multivariate
 
1860
L6B3.  Contingency table, correlation matrix
 
1861
L6B13.  Multinomial
 
1862
L6B14.  Normal
 
1863
L6B15.  Orthogonal matrix
 
1864
L6B21.  Uniform
 
1865
L6C.  Service routines (e.g., seed)
 
1866
L7.  Experimental design, including analysis of variance
 
1867
L7A.  Univariate
 
1868
L7A1.  One-way analysis of variance
 
1869
L7A1A.  Parametric analysis
 
1870
L7A1A1.  Contrasts, multiple comparisons
 
1871
L7A1A2.  Analysis of variance components
 
1872
L7A1B.  Distribution-free (nonparametric) analysis
 
1873
L7A2.  Balanced multiway design
 
1874
L7A2A.  Complete
 
1875
L7A2A1.  Parametric analysis
 
1876
L7A2A1A.  Two-way
 
1877
L7A2A1B.  Factorial
 
1878
L7A2A1C.  Nested
 
1879
L7A2A2.  Distribution-free (nonparametric) analysis
 
1880
L7A2B.  Incomplete
 
1881
L7A2B1.  Parametric analysis
 
1882
L7A2B1A.  Latin square
 
1883
L7A2B1B.  Lattice designs
 
1884
L7A2B2.  Distribution-free (nonparametric) analysis
 
1885
L7A3.  Analysis of covariance
 
1886
L7A4.  General linear model (unbalanced design)
 
1887
L7A4A.  Parametric analysis
 
1888
L7A4B.  Distribution-free (nonparametric) analysis
 
1889
L7B.  Multivariate
 
1890
L8.  Regression (search also classes G, K)
 
1891
L8A.  Linear least squares (L-2) (search also classes D5, D6, D9)
 
1892
L8A1.  Simple
 
1893
L8A1A.  Ordinary
 
1894
L8A1A1.  Unweighted
 
1895
L8A1A1A.  No missing values
 
1896
L8A1A1B.  Missing values
 
1897
L8A1A2.  Weighted
 
1898
L8A1B.  Through the origin
 
1899
L8A1C.  Errors in variables
 
1900
L8A1D.  Calibration (inverse regression)
 
1901
L8A2.  Polynomial
 
1902
L8A2A.  Not using orthogonal polynomials
 
1903
L8A2A1.  Unweighted
 
1904
L8A2A2.  Weighted
 
1905
L8A2B.  Using orthogonal polynomials
 
1906
L8A2B1.  Unweighted
 
1907
L8A2B2.  Weighted
 
1908
L8A3.  Piecewise polynomial (i.e. multiphase or spline)
 
1909
L8A4.  Multiple
 
1910
L8A4A.  Ordinary
 
1911
L8A4A1.  Unweighted
 
1912
L8A4A1A.  No missing values
 
1913
L8A4A1B.  Missing values
 
1914
L8A4A1C.  From correlation data
 
1915
L8A4A1D.  Using principal components
 
1916
L8A4A1E.  Using preference pairs
 
1917
L8A4A2.  Weighted
 
1918
L8A4B.  Errors in variables
 
1919
L8A4D.  Logistic
 
1920
L8A5.  Variable selection
 
1921
L8A6.  Regression design
 
1922
L8A7.  Several multiple regressions
 
1923
L8A8.  Multivariate
 
1924
L8A9.  Diagnostics
 
1925
L8A10.  Hypothesis testing, inference
 
1926
L8A10A.  Lack-of-fit tests
 
1927
L8A10B.  Analysis of residuals
 
1928
L8A10C.  Inference
 
1929
L8B.  Biased (ridge)
 
1930
L8C.  Linear least absolute value (L-1)
 
1931
L8D.  Linear minimax (L-infinity)
 
1932
L8E.  Robust
 
1933
L8F.  EDA
 
1934
L8G.  Nonlinear
 
1935
L8G1.  Unweighted
 
1936
L8G1A.  Derivatives not supplied
 
1937
L8G1B.  Derivatives supplied
 
1938
L8G2.  Weighted
 
1939
L8G2A.  Derivatives not supplied
 
1940
L8G2B.  Derivatives supplied
 
1941
L8H.  Service routines
 
1942
L9.  Categorical data analysis
 
1943
L9A.  2-by-2 tables
 
1944
L9B.  Two-way tables
 
1945
L9C.  Log-linear model
 
1946
L9D.  EDA (e.g., median polish)
 
1947
L10.  Time series analysis (search also class L3c5 for time series graphics)
 
1948
L10A.  Transformations, transforms (search also class J1)
 
1949
L10B.  Smoothing, filtering
 
1950
L10C.  Autocorrelation analysis
 
1951
L10D.  Complex demodulation
 
1952
L10E.  ARMA and ARIMA modeling and forecasting
 
1953
L10E1.  Model and parameter estimation
 
1954
L10E2.  Forecasting
 
1955
L10F.  Spectral analysis
 
1956
L10G.  Cross-correlation analysis
 
1957
L10G1.  Parameter estimation
 
1958
L10G2.  Forecasting
 
1959
L11.  Correlation analysis
 
1960
L12.  Discriminant analysis
 
1961
L13.  Factor analysis
 
1962
L13A.  Principal components analysis
 
1963
L14.  Cluster analysis
 
1964
L14A.  Unconstrained
 
1965
L14A1.  Nested
 
1966
L14A1A.  Joining (e.g., single link)
 
1967
L14A1B.  Divisive
 
1968
L14A2.  Non-nested
 
1969
L14B.  Constrained
 
1970
L14B1.  One-dimensional
 
1971
L14B2.  Two-dimensional
 
1972
L14C.  Display
 
1973
L15.  Life testing, survival analysis
 
1974
M.  Simulation, stochastic modeling (search also classes L6, L10)
 
1975
M1.  Simulation
 
1976
M1A.  Discrete
 
1977
M1B.  Continuous (Markov models)
 
1978
M2.  Queueing
 
1979
M3.  Reliability
 
1980
M3A.  Quality control
 
1981
M3B.  Electrical network
 
1982
M4.  Project optimization (e.g., PERT)
 
1983
N.  Data handling (search also class L2)
 
1984
N1.  Input, output
 
1985
N2.  Bit manipulation
 
1986
N3.  Character manipulation
 
1987
N4.  Storage management (e.g., stacks, heaps, trees)
 
1988
N5.  Searching
 
1989
N5A.  Extreme value
 
1990
N5B.  Insertion position
 
1991
N5C.  On a key
 
1992
N6.  Sorting
 
1993
N6A.  Internal
 
1994
N6A1.  Passive (i.e. construct pointer array, rank)
 
1995
N6A1A.  Integer
 
1996
N6A1B.  Real
 
1997
N6A1B1.  Single precision
 
1998
N6A1B2.  Double precision
 
1999
N6A1C.  Character
 
2000
N6A2.  Active
 
2001
N6A2A.  Integer
 
2002
N6A2B.  Real
 
2003
N6A2B1.  Single precision
 
2004
N6A2B2.  Double precision
 
2005
N6A2C.  Character
 
2006
N6B.  External
 
2007
N7.  Merging
 
2008
N8.  Permuting
 
2009
O.  Symbolic computation
 
2010
P.  Computational geometry (search also classes G, Q)
 
2011
P1.  One dimension
 
2012
P2.  Two dimensions
 
2013
P2A.  Points, lines
 
2014
P2A1.  Relationships
 
2015
P2A1A.  Closest and farthest points
 
2016
P2A1B.  Intersection
 
2017
P2A2.  Graph construction
 
2018
P2A2A.  Convex hull
 
2019
P2A2B.  Minimum spanning tree
 
2020
P2A2C.  Region partitioning
 
2021
P2A2C1.  Triangulation
 
2022
P2A2C2.  Voronoi diagram
 
2023
P2B.  Polygons (e.g., intersection, hidden line problems)
 
2024
P2C.  Circles
 
2025
P3.  Three dimensions
 
2026
P3A.  Points, lines, planes
 
2027
P3B.  Polytopes
 
2028
P3C.  Spheres
 
2029
P4.  More than three dimensions
 
2030
Q.  Graphics (search also classes L3, P)
 
2031
Q1.  Line printer plotting
 
2032
R.  Service routines
 
2033
R1.  Machine-dependent constants
 
2034
R2.  Error checking (e.g., check monotonicity)
 
2035
R3.  Error handling
 
2036
R3A.  Set criteria for fatal errors
 
2037
R3B.  Set unit number for error messages
 
2038
R3C.  Other utility programs
 
2039
R4.  Documentation retrieval
 
2040
S.  Software development tools
 
2041
S1.  Program transformation
 
2042
S2.  Static analysis
 
2043
S3.  Dynamic analysis
 
2044
Z.  Other
 
2045
 
 
2046
 
 
2047
 
 
2048
 
 
2049
*******************************************************************************
 
2050
 
 
2051
APPENDIX B.  MACHINE CONSTANTS
 
2052
 
 
2053
The SLATEC Common Math Library uses three functions for keeping machine
 
2054
constants.  In order to keep the source code for the Library as portable as
 
2055
possible, no other Library routines should attempt to DATA load machine
 
2056
dependent constants.  Due to the subtlety of trying to calculate machine
 
2057
constants at run time in a manner that yields correct constants for all
 
2058
possible computers, no Library routines should attempt to calculate them.
 
2059
Routines I1MACH, R1MACH, and D1MACH in the SLATEC Common Math Library are
 
2060
derived from the routines of these names in the Bell Laboratories' PORT Library
 
2061
and should be called whenever machines constants are needed.  These functions
 
2062
are DATA loaded with carefully determined constants of type integer, single
 
2063
precision, and double precision, respectively, for a wide range of computers.
 
2064
Each is called with one input argument to indicate which constant is desired.
 
2065
The appropriate Fortran statements are:
 
2066
 
 
2067
For integer constants:
 
2068
 
 
2069
      INTEGER I1MACH, I
 
2070
      I = I1MACH(N)                 where 1 .LE. N .LE. 16
 
2071
 
 
2072
For single precision constants:
 
2073
 
 
2074
      REAL R1MACH, R
 
2075
      R = R1MACH(N)                 where 1 .LE. N .LE. 5
 
2076
 
 
2077
For double precision constants:
 
2078
 
 
2079
      DOUBLE PRECISION D1MACH, D
 
2080
      D = D1MACH(N)                 where 1 .LE. N .LE. 5
 
2081
 
 
2082
The different constants that can be retrieved will be explained below after we
 
2083
give a summary of the floating point arithmetic model which they characterize.
 
2084
 
 
2085
The PORT and SLATEC machine constant routines acknowledge that a computer
 
2086
can have some minor flaws in how it performs arithmetic and that the purpose of
 
2087
machine constant routines is to keep other library routines out of trouble.
 
2088
For example, a computer may have a 48-bit coefficient, but due to round-off or
 
2089
other deficiencies may be able to perform only 47-bit (or even 46-bit)
 
2090
arithmetic reliably.  A machine can also misbehave at the extreme ends of its
 
2091
exponent range.  The machine constants are chosen to describe a subset of the
 
2092
floating point numbers of a computer on which operations such as addition,
 
2093
subtraction, multiplication, reciprocation, and comparison work as your
 
2094
intuition would expect.  If the actual performance of the machine is such that
 
2095
results fall into the "expected" intervals of the subset floating point system,
 
2096
then the usual forms of error analysis will apply.  For details, see [7].
 
2097
 
 
2098
The machine constants normally cannot be determined by reading a computer's
 
2099
hardware reference manual.  Such manuals tell the range and representation of
 
2100
floating point numbers but usually do not describe the errors in the floating
 
2101
point addition, subtraction, multiplication, reciprocation, or division units.
 
2102
The constants for I1MACH, R1MACH, and D1MACH are found by doing extensive
 
2103
testing using operands on which the hardware is most likely to fail.  Failure
 
2104
is most likely to occur at the extreme ends of the exponent range and near
 
2105
powers of the number base.  If such failures are relatively minor, we can
 
2106
choose machine constants for I1MACH, R1MACH, and D1MACH to restrict the domain
 
2107
of floating point numbers to a subset on which arithmetic operations work.
 
2108
 
 
2109
The subset model of floating point arithmetic is characterized by four
 
2110
parameters:
 
2111
 
 
2112
     B     the number base or radix.  This is usually 2 or 16.
 
2113
 
 
2114
     T     the number of digits in base B of the coefficient of the floating
 
2115
           point number.
 
2116
 
 
2117
     EMIN  the smallest (most negative) exponent (power of B)
 
2118
 
 
2119
     EMAX  the largest exponent (power of B)
 
2120
 
 
2121
A floating point number is modeled as FRACTION*(B**EXP) where EXP falls between
 
2122
EMIN and EMAX and the FRACTION is of the form
 
2123
 
 
2124
     + or - ( f(1)*B**(-1) + ... + f(T)*B**(-T) )
 
2125
 
 
2126
     with f(1) in the range 1 to B-1 inclusive and
 
2127
          f(2) through f(T) in the range 0 to B-1 inclusive.
 
2128
 
 
2129
In this model the fraction has the radix point at the left end.  Some computers
 
2130
have their radix point at the right end so that when their representation is
 
2131
mapped onto this model, they appear to have an unbalanced exponent range (i.e.,
 
2132
EMIN is not close to the negative of EMAX).  If the computer cannot correctly
 
2133
calculate results near underflow, EMIN is increased to a more conservative
 
2134
value.  Likewise, if the computer cannot correctly calculate results near
 
2135
overflow, EMAX is decreased.  If a base 2 machine with a 48-bit fraction is
 
2136
unable to calculate 48-bit results due to hardware round-off, T may be set to
 
2137
47 (or even 46) to account for the loss of accuracy.
 
2138
 
 
2139
The complete set of machine constants (including those not related to floating
 
2140
point arithmetic) are:
 
2141
 
 
2142
I/O Unit Numbers
 
2143
----------------
 
2144
 
 
2145
I1MACH( 1) = the FORTRAN unit number for the standard input device.
 
2146
 
 
2147
I1MACH( 2) = the FORTRAN unit number for the standard output device.
 
2148
 
 
2149
I1MACH( 3) = the FORTRAN unit number for the standard punch device.
 
2150
 
 
2151
I1MACH( 4) = the FORTRAN unit number for the standard error message device.
 
2152
 
 
2153
Word Properties
 
2154
---------------
 
2155
 
 
2156
I1MACH( 5) = the number of bits per integer storage unit.
 
2157
 
 
2158
I1MACH( 6) = the number of characters per integer storage unit.
 
2159
 
 
2160
Integer Arithmetic
 
2161
------------------
 
2162
 
 
2163
I1MACH( 7) = the base or radix for integer arithmetic.
 
2164
 
 
2165
I1MACH( 8) = the number of digits in radix I1MACH(7) used in integer
 
2166
             arithmetic.
 
2167
 
 
2168
I1MACH( 9) = the largest magnitude integer for which the machine and compiler
 
2169
             perform the complete set of arithmetic operations.
 
2170
 
 
2171
Floating Point Arithmetic
 
2172
-------------------------
 
2173
 
 
2174
I1MACH(10) = the base or radix for floating point arithmetic.  This is the B
 
2175
             of the floating point model.
 
2176
 
 
2177
Single Precision Arithmetic
 
2178
---------------------------
 
2179
 
 
2180
I1MACH(11) = the number of digits in radix I1MACH(10) used in single precision
 
2181
             arithmetic.  This is the T in the floating point model.
 
2182
 
 
2183
I1MACH(12) = the most negative usable exponent short of underflow of radix
 
2184
             I1MACH(10) for a single precision number.  This is the EMIN in the
 
2185
             floating point model.
 
2186
 
 
2187
I1MACH(13) = the largest usable exponent short of overflow of radix I1MACH(10)
 
2188
             for a single precision number.  This is the EMAX in the floating
 
2189
             point model.
 
2190
 
 
2191
Double Precision Arithmetic
 
2192
---------------------------
 
2193
 
 
2194
I1MACH(14) = the number of digits in radix I1MACH(10) used in double precision
 
2195
             arithmetic.  This is the T of the floating point model.
 
2196
 
 
2197
I1MACH(15) = the most negative usable exponent short of underflow of radix
 
2198
             I1MACH(10) for a double precision number.  This is the EMIN of
 
2199
             the floating point model.
 
2200
 
 
2201
I1MACH(16) = the largest usable exponent short of overflow of radix I1MACH(10)
 
2202
             for a double precision number.  This is the EMAX of the floating
 
2203
             point model.
 
2204
 
 
2205
Special Single Precision Values
 
2206
-------------------------------
 
2207
 
 
2208
R1MACH( 1) = B**(EMIN-1).  This is the smallest, positive, single precision
 
2209
             number in the range for safe, accurate arithmetic.
 
2210
 
 
2211
R1MACH( 2) = B**EMAX*(1-B**(-T)).  This is the largest, positive, single
 
2212
             precision number in the range for safe, accurate arithmetic.
 
2213
 
 
2214
R1MACH( 3) = B**(-T).  This is the smallest relative spacing between two
 
2215
             adjacent single precision numbers in the floating point model.
 
2216
             This constant is not machine epsilon; see below for machine
 
2217
             epsilon.
 
2218
 
 
2219
R1MACH( 4) = B**(1-T).  This is the largest relative spacing between two
 
2220
             adjacent single precision numbers in the floating point model.
 
2221
             Any two single precision numbers that have a greater relative
 
2222
             spacing than R1MACH(4) can be compared correctly (with operators
 
2223
             like .EQ. or .LT.). This constant is an upper bound on theoretical
 
2224
             machine epsilon.
 
2225
 
 
2226
R1MACH( 5) = logarithm to base ten of the machine's floating point number base.
 
2227
 
 
2228
Special Double Precision Values
 
2229
-------------------------------
 
2230
 
 
2231
D1MACH( 1) = B**(EMIN-1).  This is the smallest, positive, double precision
 
2232
             numbers in the range for safe, accurate arithmetic.
 
2233
 
 
2234
D1MACH( 2) = B**EMAX*(1-B**(-T)).  This is the largest, positive, double
 
2235
             precision number in the range for safe, accurate arithmetic.
 
2236
 
 
2237
D1MACH( 3) = B**(-T).  This is the smallest relative spacing between two
 
2238
             adjacent double precision numbers in the floating point model.
 
2239
             This constant is not machine epsilon; see below for machine
 
2240
             epsilon.
 
2241
 
 
2242
D1MACH( 4) = B**(1-T).  This is the largest relative spacing between two
 
2243
             adjacent double precision numbers in the floating point model.
 
2244
             Any two double precision numbers that have a greater relative
 
2245
             spacing than D1MACH(4) can be compared correctly (with operators
 
2246
             like .EQ. or .LT.). This constant is an upper bound on theoretical
 
2247
             machine epsilon.
 
2248
 
 
2249
D1MACH( 5) = logarithm to base ten of the machine's floating point number base.
 
2250
 
 
2251
In theory, all of the R1MACH and D1MACH values can be calculated from I1MACH
 
2252
values; however, they are provided (1) to save having to calculate them and (2)
 
2253
to avoid rousing any bugs in the exponentiation (** operator ) or logarithm
 
2254
routines.
 
2255
 
 
2256
Machine epsilon (the smallest number that can be added to 1.0 or 1.0D0
 
2257
that yields a result different from 1.0 or 1.0D0) is not one of the special
 
2258
values that comes from this model.  If the purpose of machine epsilon is to
 
2259
decide when iterations have converged, the proper constants to use are
 
2260
R1MACH(4) or D1MACH(4).  These may be slightly larger than machine epsilon;
 
2261
however, trying to iterate to smaller relative differences may not be possible
 
2262
due to hardware round-off error.
 
2263
 
 
2264
The Fortran standard requires that the amount of storage assigned to an INTEGER
 
2265
and a REAL be the same.  Thus, the number of bits that can be used to represent
 
2266
an INTEGER will almost always be larger than the number of bits in the mantissa
 
2267
of a REAL.  In converting from an INTEGER to a REAL, some machines will
 
2268
correctly round or truncate, but some will not.  Authors are therefore advised
 
2269
to check the magnitude of INTEGERs and not attempt to convert INTEGERs to REALs
 
2270
that can not be represented exactly as REALs.  Similar problems can occur when
 
2271
converting INTEGERs to DOUBLEs.
 
2272
 
 
2273
 
 
2274
 
 
2275
 
 
2276
*******************************************************************************
 
2277
 
 
2278
APPENDIX C.  ERROR HANDLING
 
2279
 
 
2280
Authors of Library routines must use at least the first and preferably both of
 
2281
the following techniques to handle errors that their routines detect.
 
2282
 
 
2283
1.  One argument, preferably the last, in the calling sequence must be an
 
2284
    error flag if the routine can detect errors.  This is an integer variable
 
2285
    to which a value is assigned before returning to the caller.  A value of
 
2286
    zero means the routine completed successfully. A positive value (preferably
 
2287
    in the range 1 to 999) should be used to indicate potential, partial, or
 
2288
    total failure.  Separate values should be used for distinct conditions so
 
2289
    that the caller can determine the nature of the failure.  Of course, the
 
2290
    possible values of this error flag and their meanings must be documented in
 
2291
    the description section of the prologue of the routine.
 
2292
 
 
2293
2.  In addition to returning an error flag, the routine can supply more
 
2294
    information by writing an error message via a call to XERMSG.  XERMSG
 
2295
    has an error number as one of its arguments, and the same value that will
 
2296
    be returned in the error flag argument must be used in calling XERMSG.
 
2297
 
 
2298
XERMSG is part of the SLATEC Common Math Library error handling package
 
2299
which consists of a number of routines.  It is not necessary for authors to
 
2300
learn about the entire package.  Instead we summarize here a few aspects of the
 
2301
package that an author must know in order to use XERMSG correctly.
 
2302
 
 
2303
1.  Although XERMSG supports three levels of severity (warning, recoverable
 
2304
    error, and fatal error), be sparing in the use of fatal errors.  XERMSG
 
2305
    will terminate the program for fatal errors but may return for recoverable
 
2306
    errors, and will definitely return after warning messages.  An error should
 
2307
    be designated fatal only if returning to the caller is likely to be
 
2308
    disastrous (e.g. result in an infinite loop).
 
2309
 
 
2310
2.  The error handling package remembers the value of the error number and has
 
2311
    an entry point whereby the user can retrieve the most recent error number.
 
2312
    Successive calls to XERMSG replace this retained value.  In the case of
 
2313
    warning messages, it is permissible to issue multiple warnings.  In the
 
2314
    case of a recoverable error, no additional calls to XERMSG must be made by
 
2315
    the Library routine before returning to the caller since the caller must be
 
2316
    given a chance to retrieve and clear the error number (and error condition)
 
2317
    from the error handling package.  In particular, if the user calls Library
 
2318
    routine X and X calls a lower level Library Y, it is permissible for Y
 
2319
    to call XERMSG, but after it returns to X, X must be careful to note any
 
2320
    recoverable errors detected in Y and not make any additional calls to
 
2321
    XERMSG in that case.  In practice, it would be simpler if subsidiary
 
2322
    routines did not call XERMSG but only returned error flags indicating a
 
2323
    serious problem.  Then the highest level Library routine could call XERMSG
 
2324
    just before returning to its caller.  This also allows the highest level
 
2325
    routine the most flexibility in assigning error numbers and assures that
 
2326
    all possible error conditions are documented in one prologue rather than
 
2327
    being distributed through prologues of subsidiary routines.
 
2328
 
 
2329
Below we describe only subroutine XERMSG.  Other routines in the error
 
2330
handling package are described in their prologues and in Reference [4].
 
2331
The call to XERMSG looks like
 
2332
 
 
2333
Template:  CALL XERMSG (library, routine, message, errornumber, level)
 
2334
 
 
2335
Example:   CALL XERMSG ('SLATEC', 'MMPY',
 
2336
          1   'The order of the matrix exceeds the row dimension', 3, 1)
 
2337
 
 
2338
where the meaning of the arguments is
 
2339
 
 
2340
library       A character constant (or character variable) with the name of
 
2341
              the library.  This will be 'SLATEC' for the SLATEC Common Math
 
2342
              Library.  The error handling package is general enough to be used
 
2343
              by many libraries simultaneously, so it is desirable for the
 
2344
              routine that detects and reports an error to identify the library
 
2345
              name as well as the routine name.
 
2346
 
 
2347
routine       A character constant (or character variable) with the name of the
 
2348
              routine that detected the error.  Usually it is the name of the
 
2349
              routine that is calling XERMSG.  There are some instances where a
 
2350
              user callable library routine calls lower level subsidiary
 
2351
              routines where the error is detected.  In such cases it may be
 
2352
              more informative to supply the name of the routine the user
 
2353
              called rather than the name of the subsidiary routine that
 
2354
              detected the error.
 
2355
 
 
2356
message       A character constant (or character variable) with the text of the
 
2357
              error or warning message.  In the example below, the message is a
 
2358
              character constant that contains a generic message.
 
2359
 
 
2360
                    CALL XERMSG ('SLATEC', 'MMPY',
 
2361
                   *   'The order of the matrix exceeds the row dimension',
 
2362
                   *   3, 1)
 
2363
 
 
2364
              It is possible (and is sometimes desirable) to generate a
 
2365
              specific message--e.g., one that contains actual numeric values.
 
2366
              Specific numeric values can be converted into character strings
 
2367
              using formatted WRITE statements into character variables.  This
 
2368
              is called standard Fortran internal file I/O and is exemplified
 
2369
              in the first three lines of the following example.  You can also
 
2370
              catenate substrings of characters to construct the error message.
 
2371
              Here is an example showing the use of both writing to an internal
 
2372
              file and catenating character strings.
 
2373
 
 
2374
                    CHARACTER*5 CHARN, CHARL
 
2375
                    WRITE (CHARN,10) N
 
2376
                    WRITE (CHARL,10) LDA
 
2377
                 10 FORMAT(I5)
 
2378
                    CALL XERMSG ('SLATEC', 'MMPY', 'The order'//CHARN//
 
2379
                   *   ' of the matrix exceeds its row dimension of'//
 
2380
                   *   CHARL, 3, 1)
 
2381
 
 
2382
              There are two subtleties worth mentioning.  One is that the //
 
2383
              for character catenation is used to construct the error message
 
2384
              so that no single character constant is continued to the next
 
2385
              line.  This avoids confusion as to whether there are trailing
 
2386
              blanks at the end of the line.  The second is that by catenating
 
2387
              the parts of the message as an actual argument rather than
 
2388
              encoding the entire message into one large character variable,
 
2389
              we avoid having to know how long the message will be in order to
 
2390
              declare an adequate length for that large character variable.
 
2391
              XERMSG calls XERPRN to print the message using multiple lines if
 
2392
              necessary.  If the message is very long, XERPRN will break it
 
2393
              into pieces of 72 characters (as requested by XERMSG) for
 
2394
              printing on multiple lines.  Also, XERMSG asks XERPRN to prefix
 
2395
              each line with ' *  ' so that the total line length could be 76
 
2396
              characters.  Note also that XERPRN scans the error message
 
2397
              backwards to ignore trailing blanks.  Another feature is that the
 
2398
              substring '$$' is treated as a new line sentinel by XERPRN.  If
 
2399
              you want to construct a multiline message without having to count
 
2400
              out multiples of 72 characters, just use '$$' as a separator.
 
2401
              '$$' obviously must occur within 72 characters of the start of
 
2402
              each line to have its intended effect since XERPRN is asked to
 
2403
              wrap around at 72 characters in addition to looking for '$$'.
 
2404
 
 
2405
errornumber   An integer value that is chosen by the library routine's author.
 
2406
              It must be in the range 1 to 999.  Each distinct error should
 
2407
              have its own error number.  These error numbers should be
 
2408
              described in the machine readable documentation for the routine.
 
2409
              The error numbers need be unique only within each routine, so it
 
2410
              is reasonable for each routine to start enumerating errors from 1
 
2411
              and proceeding to the next integer.
 
2412
 
 
2413
level         An integer value in the range 0 to 2 that indicates the level
 
2414
              (severity) of the error.  Their meanings are
 
2415
 
 
2416
              0  A warning message.  This is used if it is not clear that there
 
2417
                 really is an error, but the user's attention may be needed.
 
2418
 
 
2419
              1  A recoverable error.  This is used even if the error is so
 
2420
                 serious that the routine cannot return any useful answer.  If
 
2421
                 the user has told the error package to return after
 
2422
                 recoverable errors, then XERMSG will return to the Library
 
2423
                 routine which can then return to the user's routine.  The user
 
2424
                 may also permit the error package to terminate the program
 
2425
                 upon encountering a recoverable error.
 
2426
 
 
2427
              2  A fatal error.  XERMSG will not return to its caller after it
 
2428
                 receives a fatal error.  This level should hardly ever be
 
2429
                 used; it is much better to allow the user a chance to recover.
 
2430
                 An example of one of the few cases in which it is permissible
 
2431
                 to declare a level 2 error is a reverse communication Library
 
2432
                 routine that is likely to be called repeatedly until it
 
2433
                 integrates across some interval.  If there is a serious error
 
2434
                 in the input such that another step cannot be taken and the
 
2435
                 Library routine is called again without the input error having
 
2436
                 been corrected by the caller, the Library routine will
 
2437
                 probably be called forever with improper input.  In this case,
 
2438
                 it is reasonable to declare the error to be fatal.
 
2439
 
 
2440
Each of the arguments to XERMSG is input; none will be modified by XERMSG.  A
 
2441
routine may make multiple calls to XERMSG with warning level messages; however,
 
2442
after a call to XERMSG with a recoverable error, the routine should return to
 
2443
the user.  Do not try to call XERMSG with a second recoverable error after the
 
2444
first recoverable error because the error package saves the error number.  The
 
2445
user can retrieve this error number by calling another entry point in the error
 
2446
handling package and then clear the error number when recovering from the
 
2447
error.  Calling XERMSG in succession causes the old error number to be
 
2448
overwritten by the latest error number.  This is considered harmless for error
 
2449
numbers associated with warning messages but must not be done for error numbers
 
2450
of serious errors.  After a call to XERMSG with a recoverable error, the user
 
2451
must be given a chance to call NUMXER or XERCLR to retrieve or clear the error
 
2452
number.
 
2453
 
 
2454
 
 
2455
 
 
2456
 
 
2457
*******************************************************************************
 
2458
 
 
2459
APPENDIX D.  DISTRIBUTION FILE STRUCTURE
 
2460
 
 
2461
The source files of the SLATEC library distribution tape are ASCII text files.
 
2462
Each line image consists of exactly 80 characters.  The first file of the tape
 
2463
is text file describing the contents of the tape.
 
2464
 
 
2465
The SLATEC source code file has the following characteristics.
 
2466
 
 
2467
1.  All subprograms in the file are in alphabetic order.  The collating
 
2468
    sequence is 0 through 9 and then A through Z.
 
2469
 
 
2470
2.  Before each subprogram, of name for example XYZ, there is a line starting
 
2471
    in column 1 with
 
2472
 
 
2473
    *DECK XYZ
 
2474
 
 
2475
    This allows the source file to be used as input for a source code
 
2476
    maintenance program.
 
2477
 
 
2478
3.  No comments other than the *DECK lines appear between subprograms.
 
2479
 
 
2480
 
 
2481
 
 
2482
 
 
2483
*******************************************************************************
 
2484
 
 
2485
APPENDIX E.  SUGGESTED FORMAT FOR A SLATEC SUBPROGRAM
 
2486
 
 
2487
A template embodying the suggested format for a SLATEC subprogram is given
 
2488
below.  As elsewhere in this Guide, the caret (^) denotes a required blank
 
2489
character.  These should be replaced with blanks AFTER filling out the
 
2490
template.  The template itself begins with the *DECK line, below.  All
 
2491
occurrences of "NAME" are to be replaced with the actual name of the
 
2492
subprogram, of course.  Items in brackets [] are either explanations or
 
2493
optional information.  Lines that do not have C or * in column 1 are
 
2494
explanatory remarks that are intended to be deleted by the programmer.  In all
 
2495
cases where "or" is used, exactly one of the indicated forms must occur.
 
2496
 
 
2497
Lines that begin with C*** are standard SLATEC lines.  These must be in the
 
2498
indicated order.  See Section 8 of this Guide for information on required vs
 
2499
optional lines.  In all but the C***DESCRIPTION section, the exact spacing and
 
2500
punctuation are as mandated by this Guide.  Spacing within this section is only
 
2501
suggestive, except as noted below.  The SLATEC standard mandates that no other
 
2502
comments may begin "C***".  All other lines between the C***BEGIN^PROLOGUE
 
2503
and the C***END^PROLOGUE must be comment lines with "C^" in columns 1-2.
 
2504
 
 
2505
Within the C***DESCRIPTION section, lines that begin with "C^*" are for the
 
2506
LLNL LDOC standard [9].  If present, these lines must be exactly as given here.
 
2507
They should be in the indicated order.  All other lines in this section must
 
2508
have "C^^" in columns 1-3.
 
2509
 
 
2510
In the Arguments subsection, each argument must be followed by exactly one
 
2511
argument qualifier.  The qualifier must be preceded by a colon and followed
 
2512
by at least one blank.  The allowable qualifiers and their meanings follow.
 
2513
 
 
2514
  Qualifier     Meaning
 
2515
  ---------    ---------
 
2516
   :IN      input variable.  Must be set by the user prior to the call
 
2517
            (unless otherwise indicated).  Must NOT be changed by the
 
2518
            routine under any circumstances.
 
2519
   :OUT     output variable.  Values will be set by the routine.
 
2520
            Must be initialized before first usage in the routine.
 
2521
   :INOUT   input/output variable.  Must be set by the user prior to
 
2522
            the call (as indicated in argument description); value(s)
 
2523
            may be set or changed by the routine.
 
2524
   :WORK    workspace.  Simply working storage required by the routine.
 
2525
            Need not be set prior to the call and will not contain
 
2526
            information meaningful to the user on return.  (Some
 
2527
            routines require the contents of a work array to remain
 
2528
            unchanged between successive calls.  Such usage should be
 
2529
            carefully explained in the argument description.)
 
2530
   :EXT     external procedure.  The actual argument must be the name of
 
2531
            a SUBROUTINE, FUNCTION, or BLOCK DATA subprogram.  It must
 
2532
            appear in an EXTERNAL statement in the calling program.  The
 
2533
            argument description following should precisely specify the
 
2534
            expected calling sequence.
 
2535
   :DUMMY   dummy argument.  Need not be set by user; will not be
 
2536
            referenced by the routine.  [Use discouraged!]
 
2537
 
 
2538
To avoid potential problems with automatic formatting of argument descriptions,
 
2539
none of these key words should appear anywhere else in the text immediately
 
2540
preceded by a colon.
 
2541
 
 
2542
NOTES:
 
2543
   1. Make a template by copying the following "*DECK^NAME" through
 
2544
      "^^^^^^END" lines, inclusive, from this Guide.
 
2545
   2. You will probably want to customize this template by filling
 
2546
      in the C***AUTHOR section and adding other things you customarily
 
2547
      include in your prologues.  If all of your routines are in the same
 
2548
      category(ies), you may wish to fill in the C***CATEGORY and
 
2549
      C***KEYWORDS sections, too.  Be sure to eliminate the brackets [].
 
2550
   3. Be sure to delete the "C***SUBSIDIARY" line if this is a user-
 
2551
      callable routine.
 
2552
 
 
2553
 
 
2554
*DECK^NAME
 
2555
^^^^^^SUBROUTINE^NAME[^(ARG1[,^ARG2[,^...]])]               or
 
2556
^^^^^^FUNCTION^NAME^(ARG1[,^ARG2[,^...]])                   or
 
2557
^^^^^^COMPLEX^FUNCTION^NAME^(ARG1[,^ARG2[,^...]])           or
 
2558
^^^^^^DOUBLE^PRECISION^FUNCTION^NAME^(ARG1[,^ARG2[,^...]])  or
 
2559
^^^^^^INTEGER^FUNCTION^NAME^(ARG1[,^ARG2[,^...]])           or
 
2560
^^^^^^REAL^FUNCTION^NAME^(ARG1[,^ARG2[,^...]])              or
 
2561
^^^^^^LOGICAL^FUNCTION^NAME^(ARG1[,^ARG2[,^...]])           or
 
2562
^^^^^^CHARACTER[*len]^FUNCTION^NAME^(ARG1[,^ARG2[,^...]])
 
2563
C***BEGIN^PROLOGUE^^NAME
 
2564
C***SUBSIDIARY
 
2565
C***PURPOSE^^Brief (1-6 lines) summary of the purpose of this routine.
 
2566
C^^^^^^^^^^^^(To best fit LDOC standards, first line should be suitable
 
2567
C^^^^^^^^^^^^for a table of contents entry for this routine.)
 
2568
C***LIBRARY^^^SLATEC[^(Package)]
 
2569
C***CATEGORY^^CAT1[,^CAT2]
 
2570
C***TYPE^^^^^^SINGLE PRECISION^(NAME-S,^DNAME-D)
 
2571
C***KEYWORDS^^KEY1[,^KEY2[,
 
2572
C^^^^^^^^^^^^^MORE]]
 
2573
C***AUTHOR^^Last-name[,^First-name[,^(Organization)]][
 
2574
C^^^^^^^^^^^^^More information][
 
2575
C^^^^^^^^^^^Second-last-name[,^First-name[,^(Organization)]][
 
2576
C^^^^^^^^^^^^^More information]]
 
2577
C***DESCRIPTION
 
2578
C^^
 
2579
C^*Usage:
 
2580
C^^ This subsection should have declarations for all arguments to the
 
2581
C^^   routine and a model call of the routine.  Use the actual names of
 
2582
C^^   the arguments here. Ideally, arguments should be named in a way
 
2583
C^^   that suggests their meaning.
 
2584
C^^ The following example illustrates the use of dummy identifiers (in
 
2585
C^^   lower case) to indicate that the required size of an array is
 
2586
C^^   some function of the values of the other arguments.  This may not
 
2587
C^^   be legal Fortran, but should be easier for a knowledgeable user
 
2588
C^^   to understand than giving the required size somewhere else.
 
2589
C^^
 
2590
C^^      INTEGER  M, N, MDIMA, IERR
 
2591
C^^      PARAMETER  (nfcns = 6, nwks = 3*nfcns+M+7)
 
2592
C^^      REAL  X(nmax), A(MDIMA,nmax), FCNS(nfcns), WKS(nwks)
 
2593
C^^
 
2594
C^^      CALL NAME (M, N, X, A, MDIMA, FCNS, WKS, IERR)
 
2595
C^^
 
2596
C^*Arguments:
 
2597
C^^ Arguments should be described in exactly the same order as in the
 
2598
C^^   CALL list.  Include any restrictions, etc.
 
2599
C^^ The following illustrates the recommended form of argument descrip-
 
2600
C^^   tions for the example given above.  Note the use of qualifiers.
 
2601
C^^
 
2602
C^^   M :IN^    is the number of data points.
 
2603
C^^
 
2604
C^^   N :IN^    is the number of unknowns.  (Must have  0.lt.N.le.M .)
 
2605
C^^
 
2606
C^^   X :IN^    is a real array containing ...
 
2607
C^^             (The dimensioned length of X must be at least N.)
 
2608
C^^
 
2609
C^^   A :INOUT^ should contain ... on input; will be destroyed on
 
2610
C^^             return.  (The second dimension of A must be at least N.)
 
2611
C^^
 
2612
C^^   MDIMA:IN^ is the first dimension of array A.
 
2613
C^^             (Must have  M.le.MDIMA .)
 
2614
C^^
 
2615
C^^   FCNS:OUT^ will contain the six summary functions based on ...
 
2616
C^^
 
2617
C^^   WKS:WORK^ is a real array of working storage.  Its length is a
 
2618
C^^             function of the length of FCNS and the number of data
 
2619
C^^             points, as indicated above.
 
2620
C^^
 
2621
C^^   IERR:OUT^ is an error flag with the following possible values:
 
2622
C^^             Normal return:
 
2623
C^^                IERR = 0  (no errors)
 
2624
C^^             Warning error:
 
2625
C^^                IERR > 0  means what?
 
2626
C^^             "Recoverable" errors:
 
2627
C^^                IERR =-1  if M < 1 or N < 1 .
 
2628
C^^                IERR =-2  if M > MDIMA .
 
2629
C^^                IERR =-3  means what?
 
2630
C^^
 
2631
C^*Function^Return^Values:
 
2632
C^^ This subsection is present only in a FUNCTION subprogram.
 
2633
C^^ In case of an integer- or character-valued function with a discrete
 
2634
C^^   set of values, list all possible return values, with their
 
2635
C^^   meanings, in the following form.  [The colon is significant.]
 
2636
C^^      value : meaning
 
2637
C^^   Otherwise, something of the following sort is acceptable.
 
2638
C^^      SQRT : the square root of X.
 
2639
C^^
 
2640
C^*Description:
 
2641
C^^ One or more paragraphs describing the intended routine use,
 
2642
C^^   dependencies on other routines, etc.  Specific algorithm
 
2643
C^^   descriptions could go here, if appropriate.
 
2644
C^^ The emphasis should be on information useful to a user (as opposed
 
2645
C^^   to developer or maintainer) of the routine.
 
2646
C^^
 
2647
C^*Examples:
 
2648
C^^ Detailed examples of usage would go here, if desired.
 
2649
C^^
 
2650
C^*Accuracy:
 
2651
C^^ This optional subsection contains notes on the accuracy or
 
2652
C^^   precision of the results computed by the routine.
 
2653
C^^
 
2654
C^*Cautions:
 
2655
C^^ List any known problems or potentially hazardous side effects
 
2656
C^^   that are not otherwise described, such as not being safe for
 
2657
C^^   multiprocessing or exceptional cases for arguments.
 
2658
C^^   (Ideally, there should be none in a SLATEC routine!)
 
2659
C^^
 
2660
C^*See^Also:
 
2661
C^^ This subsection would contain notes that refer to other library
 
2662
C^^   routines that interrelate to this routine in important ways.
 
2663
C^^   Examples include a solver for a LU factorization routine or an
 
2664
C^^   evaluator for an interpolation or approximation routine.
 
2665
C^^ This subsection may amplify information in the C***SEE ALSO
 
2666
C^^   section, below, which should appear only if the prologue of the
 
2667
C^^   listed routine(s) contains documentation for this routine.
 
2668
C^^
 
2669
C^*Long^Description:
 
2670
C^^ An optional subsection containing much more detailed information.
 
2671
C^^
 
2672
C***SEE^ALSO^^RTN1[,^RTN2[,
 
2673
C^^^^^^^^^^^^^RTNn]]
 
2674
C***REFERENCES^^(NONE)              or
 
2675
C***REFERENCES^^1. Reference 1 ...
 
2676
C^^^^^^^^^^^^^^^^^Continuation of reference 1.
 
2677
C^^^^^^^^^^^^^^^2. Reference 2 ...
 
2678
C^^^^^^^^^^^^^^^^^Continuation of reference 2.
 
2679
C***ROUTINES^CALLED^^(NONE)         or
 
2680
C***ROUTINES^CALLED^^RTN1[,^RTN2[,
 
2681
C^^^^^^^^^^^^^^^^^^^^RTNn]]
 
2682
   [Do not include standard Fortran intrinsics or externals.]
 
2683
C***COMMON^BLOCKS^^^^BLOCK1[,^BLOCK2]
 
2684
C***REVISION^HISTORY^^(YYMMDD)
 
2685
   [ This section should contain a record of the origin and ]
 
2686
   [ modification history of this routine.                  ]
 
2687
C^^^871105^^DATE^WRITTEN
 
2688
C^^^880121^^Various editorial changes.       (Version 6)
 
2689
C^^^881102^^Converted to new SLATEC format.  (Version 7)
 
2690
C^^^881128^^Various editorial changes.       (Version 8)
 
2691
C^
 
2692
C***END^PROLOGUE^^NAME
 
2693
C
 
2694
C*Internal Notes:
 
2695
C   Implementation notes that explain details of the routine's design
 
2696
C     or coding, tricky dependencies that might trip up a maintainer
 
2697
C     later, environmental assumptions made, alternate designs that
 
2698
C     were considered but not used, etc.
 
2699
C   Details on contents of common blocks referenced, locks used, etc.,
 
2700
C     would go here.
 
2701
C   Emphasis is on INTERNALLY useful information.
 
2702
C
 
2703
C**End
 
2704
C
 
2705
C  Additional comments that are not appropriate even for an internal
 
2706
C  document, but which the programmer feels should precede declarations.
 
2707
C
 
2708
C  Declare arguments.
 
2709
C
 
2710
   < Declarations >
 
2711
C
 
2712
C  Declare local variables.
 
2713
C
 
2714
   < Declarations >
 
2715
C
 
2716
C***FIRST^EXECUTABLE^STATEMENT^^NAME
 
2717
   < Body of NAME >
 
2718
^^^^^^END
 
2719
 
 
2720
 
 
2721
 
 
2722
 
 
2723
*******************************************************************************
 
2724
 
 
2725
ACKNOWLEDGEMENT
 
2726
 
 
2727
The authors wish to acknowledge the assistance provided by  Dr. Frederick N.
 
2728
Fritsch of the Computing and Mathematics Research Division, Lawrence Livermore
 
2729
National Laboratory, who wrote Appendix E and made corrections and comments on
 
2730
the manuscript.
 
2731
 
 
2732
 
 
2733
 
 
2734
 
 
2735
*******************************************************************************
 
2736
 
 
2737
REFERENCES
 
2738
 
 
2739
[1]  W. H. Vandevender and K. H. Haskell, The SLATEC mathematical subroutine
 
2740
     library, SIGNUM Newsletter, 17, 3 (September 1982), pp. 16-21.
 
2741
 
 
2742
[2]  P. A. Fox, A. D. Hall and N. L. Schryer, The PORT mathematical subroutine
 
2743
     library, ACM Transactions on Mathematical Software, 4, 2 (June 1978), pp.
 
2744
     104-126.
 
2745
 
 
2746
[3]  P. A. Fox, A. D. Hall and N. L. Schryer, Algorithm 528: framework for a
 
2747
     portable library, ACM Transactions on Mathematical Software, 4, 2 (June
 
2748
     1978), pp. 177-188.
 
2749
 
 
2750
[4]  R. E. Jones and D. K. Kahaner, XERROR, the SLATEC error-handling package,
 
2751
     Software - Practice and Experience, 13, 3 (March 1983), pp. 251-257.
 
2752
 
 
2753
[5]  R. F. Boisvert, S. E. Howe and D. K. Kahaner, GAMS: a framework for the
 
2754
     management of scientific software, ACM Transactions on Mathematical
 
2755
     Software, 11, 4 (December 1985), pp. 313-355.
 
2756
 
 
2757
[6]  American National Standard Programming Language FORTRAN, ANSI X3.9-1978,
 
2758
     American National Standards Institute, 1430 Broadway, New York, New York
 
2759
     10018, April 1978.
 
2760
 
 
2761
[7]  W. S. Brown, A simple but realistic model of floating point computation,
 
2762
     ACM Transactions on Mathematical Software, 7, 4 (December 1981), pp.
 
2763
     445-480.
 
2764
 
 
2765
[8]  F. N. Fritsch, SLATEC/LDOC prologue: template and conversion program,
 
2766
     Report UCID-21357, Rev.1, Lawrence Livermore National Laboratory,
 
2767
     Livermore, California, November 1988.
 
2768