5
*********************************************************
7
* Guide to the SLATEC Common Mathematical Library *
9
*********************************************************
13
National Magnetic Fusion Energy Computer Center
14
Lawrence Livermore National Laboratory
18
Operating Systems Division
19
Sandia National Laboratories Livermore
23
Computing and Mathematics Research Division
24
Lawrence Livermore National Laboratory
28
Network Analysis Division
29
Sandia National Laboratories Albuquerque
36
*******************************************************************************
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
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
68
*******************************************************************************
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.
87
*******************************************************************************
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.
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
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.
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.
135
*******************************************************************************
137
SECTION 3. MEMBERS OF THE SLATEC COMMON MATHEMATICAL LIBRARY SUBCOMMITTEE
139
Current member sites and voting members of the subcommittee are the
143
Air Force Phillips Laboratory, Kirtland (PLK) Reginald Clemens
145
Lawrence Livermore National Laboratory (LCC) Fred N. Fritsch
147
Lawrence Livermore National Laboratory (NERSC) Steve Buonincontri
149
Los Alamos National Laboratory (LANL) W. Robert Boland
152
National Institute of Standards and Technology (NIST) Daniel W. Lozier
154
Oak Ridge National Laboratory (ORNL) Thomas H. Rowan
156
Sandia National Laboratories/California (SNL/CA) Thomas H. Jefferson
158
Sandia National Laboratories/New Mexico (SNL/NM) Sue Goudy
163
*******************************************************************************
165
SECTION 4. OBTAINING THE LIBRARY
167
The Library is in the public domain and distributed by the Energy Science
168
and Technology Software Center.
170
Energy Science and Technology Software Center
174
Telephone 615-576-2606
175
E-mail estsc%a1.adonis.mrouter@zeus.osti.gov
179
*******************************************************************************
181
SECTION 5. CODE SUBMISSION PROCEDURES
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
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?
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?
198
3. Maintainability. Is the author willing to respond to bugs in the routine?
199
Does the source code follow good programming practices?
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.
206
5. Good documentation. Is clear, concise computer readable documentation
207
built into the source code?
209
6. Freely distributable. Is the program in the public domain?
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.
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.
229
If codes adhered to the programming practices and formatting described in this
230
guide, the time for acceptance could be greatly reduced.
235
*******************************************************************************
237
SECTION 6. CODING GUIDELINES--GENERAL REQUIREMENTS FOR SLATEC
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.
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.
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.
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.
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.
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.
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.
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].
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.
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.
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.
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.
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.
338
*******************************************************************************
340
SECTION 7. SOURCE CODE FORMAT
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.
347
1. The first line of a subprogram must start with one of:
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)
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.
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
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).
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***".
383
4. The first line of the prologue is the comment line
385
C***BEGIN^PROLOGUE^^name
387
where "name", starting in column 21, is the name of the subprogram.
389
5. The last line of a subprogram is the word "END" starting in column 7.
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
395
7. In the prologue, the comment character in column 1 must be the upper
398
8. All subprogram, common block, and any formal parameter names mentioned in
399
the prologue must be in upper case.
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.
404
10. Before the first executable statement of every subprogram, user-callable
407
C***FIRST^EXECUTABLE^STATEMENT^^name
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.
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
421
12. The recommended order for the formal parameters is:
423
1. Names of external subprograms.
427
3. Variables that are both input and output (except error flags).
435
However, array dimensioning parameters should immediately follow the
436
associated array name.
441
*******************************************************************************
443
SECTION 8. PROLOGUE FORMAT FOR SUBPROGRAMS
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.
457
Section User-callable Subsidiary Quick Checks
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
475
***Note: The COMMON BLOCKS section appears in a subprogram prologue
476
if and only if the subprogram contains a common block.
478
In the prologue section descriptions that follow, the caret (^)
479
character is used for emphasis to indicate a required blank character.
483
This section is a single line that immediately follows the subprogram
484
declaration and its continuation lines. It is
486
C***BEGIN^PROLOGUE^^name
488
where "name" (beginning in column 21) is the name of the subprogram.
491
This section is the single line
495
and indicates the routine in which this appears is not intended to be
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
505
C***PURPOSE^^information
506
C^^^^^^^^^^^^more information
508
Information begins in column 14 of the first line and no earlier than
509
column 14 of continuation lines.
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
519
C***LIBRARY^^^SLATEC^(sublib1,^sublib2,^...sublibn)
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.
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
535
C***CATEGORY^^cat1,^cat2,^cat3,^...catn,
536
C^^^^^^^^^^^^^continued list
538
All alphabetic characters are in upper case.
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
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
551
C***TYPE^^^^^^routine_type^(equivalence list
552
C^^^^^^^^^^^^^continued equivalence list
553
C^^^^^^^^^^^^^continued equivalence list)
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
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,
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.
577
All alphabetic characters in this section are in upper case.
581
C***TYPE SINGLE PRECISION (ACOSH-S, DACOSH-D, CACOSH-C)
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
597
C^^^^^^^^^^^^^continued list
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
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
622
C***AUTHOR^^last-name[,^first-name[,^(org)]]
623
C^^^^^^^^^^^^^more information
624
C^^^^^^^^^^^^^more information
628
C^^^^^^^^^^^last-name[,^first-name[,^(org)]]
629
C^^^^^^^^^^^^^more information
634
Each author's name starts in column 13. Continued information starts in
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.
650
A suggested format for the DESCRIPTION section is given in Appendix E.
653
This section is used for listing other SLATEC routines whose prologues
654
contain documentation on the routine in which this section appears.
657
C***SEE ALSO^^name,^name,^name
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.
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
669
C***REFERENCES^^(NONE)
671
If there are references, they will be in the following format:
673
C***REFERENCES^^reference 1
674
C^^^^^^^^^^^^^^^^^continuation of reference 1
678
C^^^^^^^^^^^^^^^reference 2
679
C^^^^^^^^^^^^^^^^^continuation of reference 2
684
Information starts in column 17 of the first line of a reference and no
685
earlier than column 19 of continuation lines.
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.
697
A complete example of a journal reference is:
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.
703
A complete example of a book reference is:
705
C Carl de Boor, A Practical Guide to Splines, Applied
706
C Mathematics Series 27, Springer-Verlag, New York,
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
720
C***ROUTINES^CALLED^^name,^name,^name,^name,
721
C^^^^^^^^^^^^^^^^^^^^name,^name,^name
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
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
739
C***COMMON^BLOCKS^^^^name,^name,^name,^name,
740
C^^^^^^^^^^^^^^^^^^^^name,^name,^name^
742
The list starts in column 22.
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
748
C***REVISION^HISTORY^^(YYMMDD)
749
C^^^yymmdd^^DATE^WRITTEN
750
C^^^yymmdd^^revision description
751
C^^^^^^^^^^^more revision description
753
C^^^yymmdd^^revision description
754
C^^^^^^^^^^^more revision description
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
770
The last section is the single line
772
C***END^PROLOGUE^^name
774
where "name" is the name of the subprogram.
779
*******************************************************************************
781
SECTION 9. EXAMPLES OF PROLOGUES
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
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.
797
C***TYPE SINGLE PRECISION (ADDXY-S, DADDXY-D)
798
C***KEYWORDS ADD, ADDITION, ARITHMETIC, REAL, SUM,
800
C***AUTHOR Fong, K. W., (NMFECC)
802
C Lawrence Livermore National Laboratory
803
C Post Office Box 5509
804
C Livermore, CA 94550
805
C Jefferson, T. H., (SNLL)
807
C Sandia National Laboratories Livermore
808
C Livermore, CA 94550
809
C Suyehiro, T., (LLNL)
811
C Lawrence Livermore National Laboratory
812
C Post Office Box 808
813
C Livermore, CA 94550
821
C CALL ADDXY (X, Y, Z, IERR)
825
C X :IN This is one of the operands to be added. It will not
826
C be modified by ADDXY.
828
C Y :IN This is the other operand to be added. It will not be
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.
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.
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.
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.
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
861
C***FIRST EXECUTABLE STATEMENT ADDXY
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.
867
IF ( (ABS((X/BIG)+(Y/BIG))-1.0) .GT. 0.0 ) THEN
869
CALL XERMSG ( 'SLATEC', 'ADDXY', 'Addition of the operands '//
870
* 'is likely to cause overflow', IERR, 1 )
881
C***BEGIN PROLOGUE ADDZZ
883
C***PURPOSE This routine adds two single precision numbers.
885
C***AUTHOR Fong, K. W., (NMFECC)
887
C Lawrence Livermore National Laboratory
888
C Post Office Box 5509
889
C Livermore, CA 94550
890
C Jefferson, T. H., (SNLL)
892
C Sandia National Laboratories Livermore
893
C Livermore, CA 94550
894
C Suyehiro, T., (LLNL)
896
C Lawrence Livermore National Laboratory
897
C Post Office Box 808
898
C Livermore, CA 94550
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
907
C***FIRST EXECUTABLE STATEMENT ADDZZ
915
*******************************************************************************
918
SECTION 10. SLATEC QUICK CHECK PHILOSOPHY
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.
929
A list of the quick check guidelines follows.
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.
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
940
3. Some reasonable error conditions should be tested by the quick check by
941
purposefully referencing the routine incorrectly.
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.
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
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.
965
*******************************************************************************
967
SECTION 11. SPECIFIC PROGRAMMING STANDARDS FOR SLATEC QUICK CHECKS
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.
975
1. Each module must test only a few related library subprograms.
977
2. Each module must be in the form of a subroutine with three arguments.
980
SUBROUTINE ADTST (LUN, KPRINT, IPASS)
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.
987
LUN Unit number to which any output should be written.
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.
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.
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.
1004
= 3 (Possibly) quite detailed information is printed for all tests.
1005
Error messages describing the reason for failure should be
1008
IPASS = 0 Indicates failure of the quick check subroutine (i.e., at least
1011
= 1 Indicates that all tests passed in the quick check subroutine.
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
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.
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.
1024
4. Where possible, compute constants in a machine independent fashion. For
1025
example, PI = 4. * ATAN(1.0)
1027
5. Using one library routine to test another is permitted, though this should
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.
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).
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.
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.
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.
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.
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.
1072
*******************************************************************************
1074
SECTION 12. QUICK CHECK DRIVERS (MAIN PROGRAMS)
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.
1080
1. Each quick check driver will call one or more quick check subprograms.
1082
2. The input and output units for the tests are set in the driver.
1084
LIN = I1MACH(1) the input unit
1085
LUN = I1MACH(2) the output unit
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.
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.
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.
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.
1106
c. Quick check driver output should follow this chart:
1111
not 0 driver writes fail message
1112
0 driver writes pass message
1114
4. There are calls to three SLATEC error handler routines in each quick check
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.
1135
*******************************************************************************
1137
SECTION 13. QUICK CHECK SUBROUTINE EXAMPLE
1139
The following program provides a very minimal check of the sample routine
1143
SUBROUTINE ADTST (LUN, KPRINT, IPASS)
1144
C***BEGIN PROLOGUE ADTST
1146
C***PURPOSE Quick check for SLATEC routine ADDXY
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
1159
C***FIRST EXECUTABLE STATEMENT ADTST
1160
IF ( KPRINT .GE. 2 ) WRITE (LUN,99999)
1161
99999 FORMAT ('OUTPUT FROM ADTST')
1167
CALL ADDXY(X, Y, Z, IERR)
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 = ',
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***************')
1185
*******************************************************************************
1187
SECTION 14. QUICK CHECK MAIN PROGRAM EXAMPLE
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.
1197
C***BEGIN PROLOGUE TEST00
1199
C***PURPOSE Driver for testing SLATEC subprograms
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)
1210
C One input data record is required
1211
C READ (LIN,990) KPRINT
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.
1227
C Driver for testing SLATEC subprograms
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
1238
C***FIRST EXECUTABLE STATEMENT TEST00
1243
C Read KPRINT parameter
1245
READ (LIN,990) KPRINT
1248
IF ( KPRINT .LE. 1 ) THEN
1257
CALL ADTST(LUN, KPRINT, IPASS)
1258
IF ( IPASS .EQ. 0 ) NFAIL = NFAIL + 1
1262
CALL DADTST(LUN, KPRINT, IPASS)
1263
IF ( IPASS .EQ. 0 ) NFAIL = NFAIL + 1
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)
1270
* (/' --------------TEST00 PASSED ALL TESTS----------------')
1276
*******************************************************************************
1278
APPENDIX A. GAMS (AND SLATEC) CLASSIFICATION SCHEME
1280
SLATEC has adopted the GAMS (Guide to Available Mathematical Software)
1281
Classification Scheme for Mathematical and Statistical Software,
1285
GAMS (and SLATEC) Classification Scheme
1287
Mathematical and Statistical Software
1290
Version 1.2 October 1983
1295
A. Arithmetic, error analysis
1299
A3A. Single precision
1300
A3B. Double precision
1301
A3C. Extended precision
1304
A4A. Single precision
1305
A4B. Double precision
1306
A4C. Extended precision
1311
A6. Change of representation
1312
A6A. Type conversion
1313
A6B. Base conversion
1314
A6C. Decomposition, construction
1315
A7. Sequences (e.g., convergence acceleration)
1317
C. Elementary and special functions (search also class L5)
1318
C1. Integer-valued functions (e.g., floor, ceiling, factorial, binomial
1320
C2. Powers, roots, reciprocals
1324
C3A2. Chebyshev, Legendre
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
1336
C7A. Gamma, log gamma, reciprocal gamma
1339
C7D. Polygamma function
1340
C7E. Incomplete gamma
1341
C7F. Incomplete beta
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
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
1376
D1. Elementary vector and matrix operations
1377
D1A. Elementary vector operations
1378
D1A1. Set to constant
1379
D1A2. Minimum and maximum components
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)
1391
D1B. Elementary matrix operations
1392
D1B1. Set to zero, to identity
1395
D1B4. Multiplication by vector
1396
D1B5. Addition, subtraction
1397
D1B6. Multiplication
1398
D1B7. Matrix polynomial
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
1411
D2B. Real symmetric matrices
1414
D2B1B. Positive definite
1415
D2B2. Positive definite banded
1418
D2C. Complex non-Hermitian matrices
1424
D2D. Complex Hermitian matrices
1427
D2D1B. Positive definite
1428
D2D2. Positive definite banded
1431
D2E. Associated operations (e.g., matrix reorderings)
1433
D3A. Real nonsymmetric matrices
1439
D3B. Real symmetric matrices
1442
D3B1B. Positive definite
1443
D3B2. Positive definite banded
1446
D3C. Complex non-Hermitian matrices
1452
D3D. Complex Hermitian matrices
1455
D3D1B. Positive definite
1456
D3D2. Positive definite banded
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
1468
D4B. Generalized eigenvalue problems (e.g., Ax = (lambda)*Bx)
1469
D4B1. Real symmetric
1471
D4B3. Complex Hermitian
1472
D4B4. Complex general
1474
D4C. Associated operations
1475
D4C1. Transform problem
1476
D4C1A. Balance matrix
1477
D4C1B. Reduce to compact form
1481
D4C1C. Standardize problem
1482
D4C2. Compute eigenvalues of matrix in compact form
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
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)
1500
E1. Univariate data (curve fitting)
1501
E1A. Polynomial splines (piecewise polynomials)
1503
E1C. Other functions (e.g., rational, trigonometric)
1504
E2. Multivariate data (surface fitting)
1507
E3. Service routines (e.g., grid generation, evaluation of fitted functions)
1508
(search also class N5)
1509
F. Solution of nonlinear equations
1513
F1A1A. Real coefficients
1514
F1A1B. Complex coefficients
1516
F1B. General (no smoothness assumed)
1517
F2. System of equations
1519
F2B. General (no smoothness assumed)
1520
F3. Service routines (e.g., check user-supplied derivatives)
1521
G. Optimization (search also classes K, L8)
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)
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)
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
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)
1550
G2D2. Minimum spanning tree
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
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
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
1587
G2H3B2. General function and constraints (no smoothness assumed)
1588
G2I. Global solution to nonconvex problems
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
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
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
1657
I2A1A. One spatial dimension
1658
I2A1B. Two or more spatial dimensions
1660
I2B. Elliptic boundary value problems
1663
I2B1A1. Poisson (Laplace) or Helmholz equation
1664
I2B1A1A. Rectangular domain (or topologically rectangular in the coordinate
1666
I2B1A1B. Nonrectangular domain
1667
I2B1A2. Other separable problems
1668
I2B1A3. Nonseparable problems
1669
I2B1C. Higher order equations (e.g., biharmonic)
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
1681
J1A3. Trigonometric (sine, cosine)
1682
J1B. Multidimensional
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)
1690
K1A1A. Univariate data (curve fitting)
1691
K1A1A1. Polynomial splines (piecewise polynomials)
1693
K1A1A3. Other functions (e.g., rational, trigonometric, user-specified)
1694
K1A1B. Multivariate data (surface fitting)
1696
K1A2A. Linear constraints
1697
K1A2B. Nonlinear constraints
1698
K1B. Nonlinear least squares
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
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)
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
1721
L1A1D. Distribution, density
1722
L1A2. Ungrouped data with missing values
1727
L1C. One univariate qualitative (proportional) sample
1728
L1E. Two or more univariate samples or one multivariate sample
1729
L1E1. Ungrouped data
1732
L1E2. Ungrouped data with missing values
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)
1740
L3. Graphics (search also class Q)
1742
L3B. Distribution functions
1743
L3C. Scatter diagrams
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
1755
L3C4L. Lambda, logistic, lognormal
1756
L3C4N. Negative binomial, normal
1757
L3C4P. Pareto, Poisson
1758
L3C4T. t distribution
1761
L3C5. Time series plots (X(i) vs. i, vertical, lag)
1763
L4. Elementary statistical inference, hypothesis testing
1764
L4A. One univariate quantitative sample
1765
L4A1. Ungrouped data
1766
L4A1A. Parameter estimation
1768
L4A1A5. Extreme value
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
1780
L4A3A. Parameter estimation
1782
L4B. Two or more univariate quantitative samples
1783
L4B1. Ungrouped data
1784
L4B1A. Parameter estimation
1786
L4B1B. Distribution-free (nonparametric) analysis
1787
L4B2. Ungrouped data with missing values
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
1795
L4E1B. Distribution-free (nonparametric) analysis
1796
L4E2. Ungrouped data with missing values
1797
L4E2A. Parameter estimation
1798
L4E2B. Distribution-free (nonparametric) analysis
1800
L4E3A. Parameter estimation
1802
L4E3B. Distribution-free (nonparametric) analysis
1803
L4E4. Two or more multivariate samples
1804
L4E4A. Parameter estimation
1806
L5. Function evaluation (search also class C)
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
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
1831
L5A2L. Lambda, logistic, lognormal
1832
L5A2N. Negative binomial, normal, normal scores
1833
L5A2P. Pareto, Poisson
1834
L5A2T. t distribution
1838
L5B1. Cumulative distribution functions, probability density functions
1840
L6. Pseudo-random number generation
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
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
1860
L6B3. Contingency table, correlation matrix
1863
L6B15. Orthogonal matrix
1865
L6C. Service routines (e.g., seed)
1866
L7. Experimental design, including analysis of variance
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
1875
L7A2A1. Parametric analysis
1879
L7A2A2. Distribution-free (nonparametric) analysis
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
1890
L8. Regression (search also classes G, K)
1891
L8A. Linear least squares (L-2) (search also classes D5, D6, D9)
1895
L8A1A1A. No missing values
1896
L8A1A1B. Missing values
1898
L8A1B. Through the origin
1899
L8A1C. Errors in variables
1900
L8A1D. Calibration (inverse regression)
1902
L8A2A. Not using orthogonal polynomials
1905
L8A2B. Using orthogonal polynomials
1908
L8A3. Piecewise polynomial (i.e. multiphase or spline)
1912
L8A4A1A. No missing values
1913
L8A4A1B. Missing values
1914
L8A4A1C. From correlation data
1915
L8A4A1D. Using principal components
1916
L8A4A1E. Using preference pairs
1918
L8A4B. Errors in variables
1920
L8A5. Variable selection
1921
L8A6. Regression design
1922
L8A7. Several multiple regressions
1925
L8A10. Hypothesis testing, inference
1926
L8A10A. Lack-of-fit tests
1927
L8A10B. Analysis of residuals
1930
L8C. Linear least absolute value (L-1)
1931
L8D. Linear minimax (L-infinity)
1936
L8G1A. Derivatives not supplied
1937
L8G1B. Derivatives supplied
1939
L8G2A. Derivatives not supplied
1940
L8G2B. Derivatives supplied
1941
L8H. Service routines
1942
L9. Categorical data analysis
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
1955
L10F. Spectral analysis
1956
L10G. Cross-correlation analysis
1957
L10G1. Parameter estimation
1959
L11. Correlation analysis
1960
L12. Discriminant analysis
1961
L13. Factor analysis
1962
L13A. Principal components analysis
1963
L14. Cluster analysis
1966
L14A1A. Joining (e.g., single link)
1970
L14B1. One-dimensional
1971
L14B2. Two-dimensional
1973
L15. Life testing, survival analysis
1974
M. Simulation, stochastic modeling (search also classes L6, L10)
1977
M1B. Continuous (Markov models)
1980
M3A. Quality control
1981
M3B. Electrical network
1982
M4. Project optimization (e.g., PERT)
1983
N. Data handling (search also class L2)
1985
N2. Bit manipulation
1986
N3. Character manipulation
1987
N4. Storage management (e.g., stacks, heaps, trees)
1990
N5B. Insertion position
1994
N6A1. Passive (i.e. construct pointer array, rank)
1997
N6A1B1. Single precision
1998
N6A1B2. Double precision
2003
N6A2B1. Single precision
2004
N6A2B2. Double precision
2009
O. Symbolic computation
2010
P. Computational geometry (search also classes G, Q)
2015
P2A1A. Closest and farthest points
2017
P2A2. Graph construction
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)
2025
P3. Three dimensions
2026
P3A. Points, lines, planes
2029
P4. More than three dimensions
2030
Q. Graphics (search also classes L3, P)
2031
Q1. Line printer plotting
2033
R1. Machine-dependent constants
2034
R2. Error checking (e.g., check monotonicity)
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
2043
S3. Dynamic analysis
2049
*******************************************************************************
2051
APPENDIX B. MACHINE CONSTANTS
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:
2067
For integer constants:
2070
I = I1MACH(N) where 1 .LE. N .LE. 16
2072
For single precision constants:
2075
R = R1MACH(N) where 1 .LE. N .LE. 5
2077
For double precision constants:
2079
DOUBLE PRECISION D1MACH, D
2080
D = D1MACH(N) where 1 .LE. N .LE. 5
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.
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].
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.
2109
The subset model of floating point arithmetic is characterized by four
2112
B the number base or radix. This is usually 2 or 16.
2114
T the number of digits in base B of the coefficient of the floating
2117
EMIN the smallest (most negative) exponent (power of B)
2119
EMAX the largest exponent (power of B)
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
2124
+ or - ( f(1)*B**(-1) + ... + f(T)*B**(-T) )
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.
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.
2139
The complete set of machine constants (including those not related to floating
2140
point arithmetic) are:
2145
I1MACH( 1) = the FORTRAN unit number for the standard input device.
2147
I1MACH( 2) = the FORTRAN unit number for the standard output device.
2149
I1MACH( 3) = the FORTRAN unit number for the standard punch device.
2151
I1MACH( 4) = the FORTRAN unit number for the standard error message device.
2156
I1MACH( 5) = the number of bits per integer storage unit.
2158
I1MACH( 6) = the number of characters per integer storage unit.
2163
I1MACH( 7) = the base or radix for integer arithmetic.
2165
I1MACH( 8) = the number of digits in radix I1MACH(7) used in integer
2168
I1MACH( 9) = the largest magnitude integer for which the machine and compiler
2169
perform the complete set of arithmetic operations.
2171
Floating Point Arithmetic
2172
-------------------------
2174
I1MACH(10) = the base or radix for floating point arithmetic. This is the B
2175
of the floating point model.
2177
Single Precision Arithmetic
2178
---------------------------
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.
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.
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
2191
Double Precision Arithmetic
2192
---------------------------
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.
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.
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
2205
Special Single Precision Values
2206
-------------------------------
2208
R1MACH( 1) = B**(EMIN-1). This is the smallest, positive, single precision
2209
number in the range for safe, accurate arithmetic.
2211
R1MACH( 2) = B**EMAX*(1-B**(-T)). This is the largest, positive, single
2212
precision number in the range for safe, accurate arithmetic.
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
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
2226
R1MACH( 5) = logarithm to base ten of the machine's floating point number base.
2228
Special Double Precision Values
2229
-------------------------------
2231
D1MACH( 1) = B**(EMIN-1). This is the smallest, positive, double precision
2232
numbers in the range for safe, accurate arithmetic.
2234
D1MACH( 2) = B**EMAX*(1-B**(-T)). This is the largest, positive, double
2235
precision number in the range for safe, accurate arithmetic.
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
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
2249
D1MACH( 5) = logarithm to base ten of the machine's floating point number base.
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
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.
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.
2276
*******************************************************************************
2278
APPENDIX C. ERROR HANDLING
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.
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.
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.
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.
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).
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.
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
2333
Template: CALL XERMSG (library, routine, message, errornumber, level)
2335
Example: CALL XERMSG ('SLATEC', 'MMPY',
2336
1 'The order of the matrix exceeds the row dimension', 3, 1)
2338
where the meaning of the arguments is
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.
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
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.
2360
CALL XERMSG ('SLATEC', 'MMPY',
2361
* 'The order of the matrix exceeds the row dimension',
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.
2374
CHARACTER*5 CHARN, CHARL
2376
WRITE (CHARL,10) LDA
2378
CALL XERMSG ('SLATEC', 'MMPY', 'The order'//CHARN//
2379
* ' of the matrix exceeds its row dimension of'//
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 '$$'.
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.
2413
level An integer value in the range 0 to 2 that indicates the level
2414
(severity) of the error. Their meanings are
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.
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.
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.
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
2457
*******************************************************************************
2459
APPENDIX D. DISTRIBUTION FILE STRUCTURE
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.
2465
The SLATEC source code file has the following characteristics.
2467
1. All subprograms in the file are in alphabetic order. The collating
2468
sequence is 0 through 9 and then A through Z.
2470
2. Before each subprogram, of name for example XYZ, there is a line starting
2475
This allows the source file to be used as input for a source code
2476
maintenance program.
2478
3. No comments other than the *DECK lines appear between subprograms.
2483
*******************************************************************************
2485
APPENDIX E. SUGGESTED FORMAT FOR A SLATEC SUBPROGRAM
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.
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.
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.
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.
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!]
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.
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-
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
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]]
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.
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)
2594
C^^ CALL NAME (M, N, X, A, MDIMA, FCNS, WKS, IERR)
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.
2602
C^^ M :IN^ is the number of data points.
2604
C^^ N :IN^ is the number of unknowns. (Must have 0.lt.N.le.M .)
2606
C^^ X :IN^ is a real array containing ...
2607
C^^ (The dimensioned length of X must be at least N.)
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.)
2612
C^^ MDIMA:IN^ is the first dimension of array A.
2613
C^^ (Must have M.le.MDIMA .)
2615
C^^ FCNS:OUT^ will contain the six summary functions based on ...
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.
2621
C^^ IERR:OUT^ is an error flag with the following possible values:
2623
C^^ IERR = 0 (no errors)
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?
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.]
2637
C^^ Otherwise, something of the following sort is acceptable.
2638
C^^ SQRT : the square root of X.
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.
2648
C^^ Detailed examples of usage would go here, if desired.
2651
C^^ This optional subsection contains notes on the accuracy or
2652
C^^ precision of the results computed by the routine.
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!)
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.
2669
C^*Long^Description:
2670
C^^ An optional subsection containing much more detailed information.
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)
2692
C***END^PROLOGUE^^NAME
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.,
2701
C Emphasis is on INTERNALLY useful information.
2705
C Additional comments that are not appropriate even for an internal
2706
C document, but which the programmer feels should precede declarations.
2708
C Declare arguments.
2712
C Declare local variables.
2716
C***FIRST^EXECUTABLE^STATEMENT^^NAME
2723
*******************************************************************************
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
2735
*******************************************************************************
2739
[1] W. H. Vandevender and K. H. Haskell, The SLATEC mathematical subroutine
2740
library, SIGNUM Newsletter, 17, 3 (September 1982), pp. 16-21.
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.
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
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.
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.
2757
[6] American National Standard Programming Language FORTRAN, ANSI X3.9-1978,
2758
American National Standards Institute, 1430 Broadway, New York, New York
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.
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.