Purpose
To print an M-by-N real matrix A row by row. The elements of A are output to 7 significant figures.Specification
SUBROUTINE UD01MD( M, N, L, NOUT, A, LDA, TEXT, INFO ) C .. Scalar Arguments .. INTEGER INFO, L, LDA, M, N, NOUT CHARACTER*(*) TEXT C .. Array Arguments .. DOUBLE PRECISION A(LDA,*)Arguments
Input/Output Parameters
M (input) INTEGER The number of rows of matrix A to be printed. M >= 1. N (input) INTEGER The number of columns of matrix A to be printed. N >= 1. L (input) INTEGER The number of elements of matrix A to be printed per line. 1 <= L <= 5. NOUT (input) INTEGER The output channel to which the results are sent. NOUT >= 0. A (input) DOUBLE PRECISION array, dimension (LDA,N) The leading M-by-N part of this array must contain the matrix to be printed. LDA INTEGER The leading dimension of array A. LDA >= M. TEXT (input) CHARACTER*72. Title caption of the matrix to be printed (up to a maximum of 72 characters). For example, TEXT = 'Matrix A'.Error Indicator
INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value.Method
The routine first prints the contents of TEXT as a title, followed by the elements of the matrix A such that (i) if N <= L, the leading M-by-N part is printed; (ii) if N = k*L + p (where k,p > 0), then k M-by-L blocks of consecutive columns of A are printed one after another followed by one M-by-p block containing the last p columns of A. Row numbers are printed on the left of each row and a column number appears on top of each column. The routine uses 2 + (k + 1)*(m + 1) lines and 8 + 15*c positions per line where c is the actual number of columns, (i.e. c = L or c = p).References
None.Numerical Aspects
None.Further Comments
NoneExample
Program Text
* UD01MD EXAMPLE PROGRAM TEXT * Copyright (c) 2002-2017 NICONET e.V. * * .. Parameters .. INTEGER NIN, NOUT PARAMETER ( NIN = 5, NOUT = 6 ) INTEGER MMAX, NMAX PARAMETER ( MMAX = 20, NMAX = 20 ) INTEGER LDA PARAMETER ( LDA = MMAX ) * .. Local Scalars .. INTEGER I, INFO, J, L, M, N CHARACTER*72 TEXT * .. Local Arrays .. DOUBLE PRECISION A(LDA,NMAX) * .. External Subroutines .. EXTERNAL UD01MD * .. Executable Statements .. * WRITE ( NOUT, FMT = 99999 ) * Skip the heading in the data file and read the data. READ ( NIN, FMT = '()' ) READ ( NIN, FMT = * ) M, N, L, TEXT IF ( M.LE.0 .OR. M.GT.MMAX ) THEN WRITE ( NOUT, FMT = 99996 ) M ELSE IF ( N.LE.0 .OR. N.GT.NMAX ) THEN WRITE ( NOUT, FMT = 99997 ) N ELSE READ ( NIN, FMT = * ) ( ( A(I,J), J = 1,N ), I = 1,M ) * Print out the matrix A. CALL UD01MD( M, N, L, NOUT, A, LDA, TEXT, INFO ) IF ( INFO.NE.0 ) WRITE ( NOUT, FMT = 99998 ) INFO END IF STOP * 99999 FORMAT (' UD01MD EXAMPLE PROGRAM RESULTS',/1X) 99998 FORMAT (' INFO on exit from UD01MD = ',I2) 99997 FORMAT (/' N is out of range.',/' N = ',I5) 99996 FORMAT (/' M is out of range.',/' M = ',I5) ENDProgram Data
UD01MD EXAMPLE PROGRAM DATA 4 4 4 'Matrix A' 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0Program Results
UD01MD EXAMPLE PROGRAM RESULTS Matrix A ( 4X 4) 1 2 3 4 1 0.1000000D+01 0.2000000D+01 0.3000000D+01 0.4000000D+01 2 0.5000000D+01 0.6000000D+01 0.7000000D+01 0.8000000D+01 3 0.9000000D+01 0.1000000D+02 0.1100000D+02 0.1200000D+02 4 0.1300000D+02 0.1400000D+02 0.1500000D+02 0.1600000D+02