CONTENTS Title Page Copyright Page Preface 1 Introduction to the Digital Extended Math Library for VMS 1.1 Overview of the Digital Extended Math Library for VMS 1.1.1 DXML's Hardware and Operating System Environment 1.1.2 DXML's Versions for Certain Data Types 1.1.3 DXML's Scalar and Vector Versions 1.2 DXML's Programming Language Environment 1.3 How DXML Gets High Performance 1.4 Accuracy of Computations and Effects of Roundoff 1.5 Vector Processing and Scalar Processing 1.5.1 Vectorizing Compilers 1.5.2 Vectorizable Applications 1.5.3 For More Information on Vector Processing 2 Preparing and Storing Program Data 2.1 Scalar Data 2.1.1 DXML's FORTRAN Data Types 2.1.2 VAX Double-Precision Implementations 2.2 FORTRAN Data Representation 2.2.1 CHARACTER * 1 and CHARACTER * ( * ) Representation 2.2.2 LOGICAL Representation 2.2.3 INTEGER * 4 Representation 2.2.4 Real Floating-Point Representations 2.2.4.1 REAL * 4 (F_floating) 2.2.4.2 REAL * 8 (D_floating) 2.2.4.3 REAL * 8 (G_floating) 2.2.5 Complex Floating-Point Representations 2.2.5.1 COMPLEX * 8 (F_floating complex) 2.2.5.2 COMPLEX * 16 (D_floating complex) 2.2.5.3 COMPLEX * 16 (G_floating complex) 2.3 Array Data 2.4 Programming Language Array Storage Techniques 2.4.1 FORTRAN Arrays 2.4.1.1 One-Dimensional FORTRAN Array Storage 2.4.1.2 Two-Dimensional FORTRAN Array Storage 2.4.1.3 Array Elements 2.4.2 Arrays in Other Programming Languages 2.5 DXML's Data Structures 2.5.1 Vectors 2.5.2 Transpose and Conjugate Transpose of a Vector 2.5.3 Defining a Vector in an Array 2.5.3.1 The Length of a Vector 2.5.3.2 The Location of a Vector 2.5.3.3 Positive, Negative, and Zero Increments 2.5.3.4 Using the Increment to Select Vector Elements from an Array 2.5.4 Storing a Vector in an Array 2.5.5 Matrices 2.5.6 Transpose and Conjugate Transpose of a Matrix 2.5.7 Defining a Matrix in an Array 2.5.7.1 The Location of a Matrix 2.5.7.2 The First Dimension of the Array 2.5.7.3 The Number of Rows and Columns of the Matrix 2.5.7.4 Using the First Dimension to Select Matrix Elements from an Array 2.5.8 Symmetric and Hermitian Matrices 2.5.9 Storage of Symmetric and Hermitian Matrices 2.5.9.1 Two-Dimensional Upper- or Lower-Triangular Storage 2.5.9.2 One-Dimensional Packed Storage 2.5.10 Triangular Matrices 2.5.11 Storage of Triangular Matrices 2.5.12 General Band Matrices 2.5.13 Storage of General Band Matrices 2.5.14 Real Symmetric Band Matrices and Complex Hermitian Band Matrices 2.5.15 Storage of Real Symmetric Band Matrices or Complex Hermitian Band Matrices 2.5.16 Upper- and Lower-Triangular Band Matrices 2.5.17 Storage of Upper- and Lower-Triangular Band Matrices 3 Coding an Application Program 3.1 Choosing the Appropriate Subprogram Version 3.1.1 Vector or Scalar Version 3.1.2 Version Associated with the Data Type 3.1.3 Subprogram Data Structure and Storage Method 3.1.4 Considerations for Improving Performance 3.2 DXML Subprogram Calling Sequences 3.3 Understanding the DXML Subprogram Reference Descriptions 3.4 Arguments 3.4.1 Required and Optional Arguments 3.4.2 Omitting Optional Arguments 3.4.3 Input and Output Arguments 3.4.4 Passing of Arguments 3.4.5 Coding Arguments Implicitly or Explicitly 3.5 Subprogram Names in an Application Program 3.6 Calling Subroutines and Functions in FORTRAN 3.7 Using DXML from Non-FORTRAN Programming Languages 3.8 Coding Programs with Calls to BLAS Level 1 Subprograms 3.9 DXML Error Handling 3.9.1 BLAS Error Handling 3.9.1.1 BLAS Level 2 and Level 3 Invalid Arguments 3.9.1.2 Errors from Internal Exceptions 3.9.1.3 Errors While Using Triangular Equation Solution Subroutines 3.9.2 Signal Processing Error Handling 3.9.3 Including Signal Processing Error Code and Data Structure Definitions 3.9.4 Status Value Descriptions 3.9.5 Error Handling Example 4 Linking an Application Program 4.1 DXML's Libraries 4.2 Using DXML's Shareable Images 4.3 Linking with a Shareable Image 4.4 Using DXML's Object Library 4.4.1 Transfer Vector Files for DXML's Object Library 4.4.2 Linking with the Object Library 4.4.3 Linking When Subprogram Names Are DXML Subprogram Names 4.5 Linking with the BLAS Level 1 Subprograms 4.6 Linking Errors 4.7 For More Information About Linking 5 Using the Level 1 BLAS Subprograms and Their Extensions 5.1 Types of Level 1 Operations 5.2 Calling Level 1 BLAS and the Extensions Subprograms 5.3 Level 1 Vector Storage 5.4 Vector and Scalar Accuracy 5.5 Level 1 BLAS and the Extensions Subprogram Naming Conventions 5.6 Level 1 BLAS Subprogram Summary 5.7 Level 1 BLAS Extensions Subprogram Summary 5.8 Level 1 BLAS Argument Conventions 5.8.1 Argument Defining the Length of the Input Vectors 5.8.2 Argument Defining the Input Scalar 5.8.3 Arguments Describing the Input-Output Vectors 5.9 Definition of Absolute Value Used in the Subprograms 5.10 A Look at a Level 1 Extensions Subprogram 5.11 For More Information About Level 1 BLAS Subprograms Real Level 1 BLAS Subprograms ISAMAX and IDAMAX SASUM and DASUM SAXPY and DAXPY SCOPY and DCOPY SDOT and DDOT SNRM2 and DNRM2 SROT and DROT SROTG and DROTG SSCAL and DSCAL SSWAP and DSWAP Complex Level 1 BLAS Subprograms CAXPY and ZAXPY CCOPY and ZCOPY CDOTC and ZDOTC CDOTU and ZDOTU CROTG and ZROTG CSCAL and ZSCAL CSROT and ZDROT CSSCAL and ZDSCAL CSWAP and ZSWAP ICAMAX and IZAMAX SCASUM and DZASUM SCNRM2 and DZNRM2 Real Level 1 BLAS Extensions Subprograms ISAMIN and IDAMIN ISMAX and IDMAX ISMIN and IDMIN SAMAX and DAMAX SAMIN and DAMIN SMAX and DMAX SMIN and DMIN SNORM2 and DNORM2 SNRSQ and DNRSQ SSET and DSET SSUM and DSUM SVCAL and DVCAL SZAXPY and DZAXPY Complex Level 1 BLAS Extensions Subprograms CSET and ZSET CSUM and ZSUM CSVCAL and ZDVCAL CVCAL and ZVCAL CZAXPY and ZZAXPY ICAMIN and IZAMIN SCAMAX and DZAMAX SCAMIN and DZAMIN SCNORM2 and DZNORM2 SCNRSQ and DZNRSQ 6 Using the Level 2 BLAS Subprograms 6.1 Types of Level 2 BLAS Operations 6.2 Calling the Level 2 BLAS Subprograms 6.3 Level 2 BLAS Vector and Matrix Storage 6.4 Level 2 BLAS Subroutine Naming Conventions 6.5 Level 2 BLAS Subroutine Summary 6.6 Level 2 BLAS Argument Conventions 6.6.1 Arguments Specifying Matrix Options 6.6.2 Arguments Defining the Size of the Input-Output Matrix 6.6.3 Arguments Describing the Input-Output Matrix 6.6.4 Arguments Describing the Input Scalars 6.6.5 Arguments Describing the Input-Output Vectors 6.7 Invalid Arguments 6.8 A Look at a BLAS Level 2 Subroutine 6.9 Performing Rank-One and Rank-Two Updates to Band Matrices 6.10 For More Information About Level 2 BLAS Subroutines Real Level 2 BLAS Subroutines SGBMV and DGBMV SGEMV and DGEMV SGER and DGER SSBMV and DSBMV SSPMV and DSPMV SSPR and DSPR SSPR2 and DSPR2 SSYMV and DSYMV SSYR and DSYR SSYR2 and DSYR2 STBMV and DTBMV STBSV and DTBSV STPMV and DTPMV STPSV and DTPSV STRMV and DTRMV STRSV and DTRSV Complex Level 2 BLAS Subroutines CGBMV and ZGBMV CGEMV and ZGEMV CGERC and ZGERC CGERU and ZGERU CHBMV and ZHBMV CHEMV and ZHEMV CHER and ZHER CHER2 and ZHER2 CHPMV and ZHPMV CHPR and ZHPR CHPR2 and ZHPR2 CTBMV and ZTBMV CTBSV and ZTBSV CTPMV and ZTPMV CTPSV and ZTPSV CTRMV and ZTRMV CTRSV and ZTRSV 7 Using the Level 3 BLAS Subprograms 7.1 Types of Level 3 BLAS Operations 7.2 Calling the Level 3 BLAS Subprograms 7.3 Level 3 BLAS Matrix Storage 7.4 Level 3 BLAS Subroutine Naming Conventions 7.5 Level 3 BLAS Subroutine Summary 7.6 Level 3 BLAS Argument Conventions 7.6.1 Arguments Specifying Matrix Options 7.6.2 Arguments Defining the Size of the Matrices 7.6.3 Arguments Specifying the Input Scalar 7.6.4 Arguments Describing the Input Matrices 7.6.5 Arguments Specifying the Input Scalar Associated with the Input-Output Matrix 7.6.6 Arguments Describing the Input-Output Matrix 7.7 Invalid Arguments 7.8 A Look at a BLAS Level 3 Subroutine 7.9 For More Information About the Level 3 BLAS Subroutines Real Level 3 BLAS Subroutines SGEMM and DGEMM SSYMM and DSYMM SSYRK and DSYRK SSYR2K and DSYR2K STRMM and DTRMM STRSM and DTRSM Complex Level 3 BLAS Subroutines CGEMM and ZGEMM CHEMM and ZHEMM CHERK and ZHERK CHER2K and ZHER2K CSYMM and ZSYMM CSYRK and ZSYRK CSYR2K and ZSYR2K CTRMM and ZTRMM CTRSM and ZTRSM 8 Using the Signal Processing Subprograms 8.1 Definition of the Fourier Transform 8.1.1 Mathematical Definition of the One-Dimensional Continuous Fourier Transform 8.1.2 Mathematical Definition of the One-Dimensional Discrete Fourier Transform 8.1.3 Mathematical Definition of the Two-Dimensional Discrete Fourier Transform 8.2 The Fast Fourier Transform 8.3 Data Storage for One-Dimensional Real Transforms 8.4 Data Storage for Two-Dimensional Real Transforms 8.5 Data Storage for One- and Two-Dimensional Complex Transforms 8.6 Choosing Data Lengths for Real and Complex Transforms 8.7 Choosing Data Lengths for High Performance 8.8 Input and Output Data for Real and Complex Transforms 8.9 Internal Data Structures in the Three-Step FFTs 8.10 Fourier Transform Subroutine Overview 8.10.1 Types of FFT Subroutines 8.10.2 Fourier Transform Subroutine Naming Conventions 8.10.3 Fourier Transform Subroutine Summary 8.11 Definition of Convolution and Correlation 8.11.1 Mathematical Definition of the Discrete Nonperiodic Convolution 8.11.2 Mathematical Definition of the Discrete Nonperiodic Correlation 8.11.3 Periodic Convolution and Correlation 8.12 Convolution and Correlation Using Fast Fourier Transform Methods 8.13 Convolution and Correlation Subroutine Overview 8.13.1 Convolution and Correlation Subroutine Naming Conventions 8.13.2 Convolution and Correlation Subroutine Summary 8.14 Definition of Digital Filtering 8.14.1 Mathematical Definition of the Nonrecursive Filter 8.14.2 Controlling Filter Type 8.14.3 Controlling Filter Sharpness and Smoothness 8.15 Digital Filter Subroutine Overview 8.15.1 Digital Filter Subroutine Naming Conventions 8.15.2 Digital Filter Subroutine Summary 8.16 Including Signal Processing Error Code and Data Structure Definitions 8.17 Signal Processing Error Handling 8.18 For More Information About Signal Processing Fast Fourier Transforms SFFT and DFFT CFFT and ZFFT SFFT_2D and DFFT_2D CFFT_2D and ZFFT_2D SFFT_INIT and DFFT_INIT SFFT_APPLY and DFFT_APPLY SFFT_EXIT and DFFT_EXIT CFFT_INIT and ZFFT_INIT CFFT_APPLY and ZFFT_APPLY CFFT_EXIT and ZFFT_EXIT SFFT_INIT_2D and DFFT_INIT_2D SFFT_APPLY_2D and DFFT_APPLY_2D SFFT_EXIT_2D and DFFT_EXIT_2D CFFT_INIT_2D and ZFFT_INIT_2D CFFT_APPLY_2D and ZFFT_APPLY_2D CFFT_EXIT_2D and ZFFT_EXIT_2D Convolutions and Correlations SCONV_NONPERIODIC and DCONV_NONPERIODIC CCONV_NONPERIODIC and ZCONV_NONPERIODIC SCONV_PERIODIC and DCONV_PERIODIC CCONV_PERIODIC and ZCONV_PERIODIC SCORR_NONPERIODIC and DCORR_NONPERIODIC CCORR_NONPERIODIC and ZCORR_NONPERIODIC SCORR_PERIODIC and DCORR_PERIODIC CCORR_PERIODIC and ZCORR_PERIODIC Filters SFILTER_NONREC SFILTER_INIT_NONREC SFILTER_APPLY_NONREC FIGURES 8-1 Digital Filter Transfer Function Forms 8-2 Lowpass Nonrecursive Filter for Varying Nterms 8-3 Lowpass Nonrecursive Filter for Varying Wiggles TABLES 1 DXML Font Usage 2 DXML Symbols and Expressions 3 DXML Conventions 2-1 FORTRAN Data Types 2-2 One-Dimensional FORTRAN Array Storage 2-3 Two-Dimensional FORTRAN Array Storage 3-1 DXML Error Symbols 5-1 Level 1 BLAS Subprogram Naming Conventions 5-2 Level 1 BLAS Subprogram Summary 5-3 Level 1 Extensions BLAS Subprogram Summary 6-1 Level 2 BLAS Subroutine Naming Conventions 6-2 Level 2 BLAS Subroutine Summary 6-3 Values for the Argument TRANS 6-4 Values for the Argument UPLO 6-5 Values for the Argument DIAG 7-1 Level 3 BLAS Subroutine Naming Conventions 7-2 Level 3 BLAS Subroutine Summary 7-3 Values for the Argument SIDE 7-4 Values for the Arguments TRANSA and TRANSB 7-5 Values for the Argument UPLO 7-6 Values for the Argument DIAG 8-1 Fourier Transform of a Real Dataset 8-2 Input and Output Format Argument Values 8-3 Status Values for Unsupported Input and Output Combinations 8-4 Fourier Transform Subroutine Naming Conventions 8-5 One-Step Fourier Transform Subroutine Summary 8-6 Three-Step Fourier Transform Subroutine Summary 8-7 Convolution and Correlation Subroutine Naming Conventions 8-8 Convolution Subroutine Summary 8-9 Correlation Subroutine Summary 8-10 Controlling Filtering Type 8-11 Digital Filter Subroutine Naming Conventions 8-12 Digital Filter Subroutine Summary