Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/mathlibs/src/arpack/smout.f
5204 views
1
*-----------------------------------------------------------------------
2
* Routine: SMOUT
3
*
4
* Purpose: Real matrix output routine.
5
*
6
* Usage: CALL SMOUT (LOUT, M, N, A, LDA, IDIGIT, IFMT)
7
*
8
* Arguments
9
* M - Number of rows of A. (Input)
10
* N - Number of columns of A. (Input)
11
* A - Real M by N matrix to be printed. (Input)
12
* LDA - Leading dimension of A exactly as specified in the
13
* dimension statement of the calling program. (Input)
14
* IFMT - Format to be used in printing matrix A. (Input)
15
* IDIGIT - Print up to IABS(IDIGIT) decimal digits per number. (In)
16
* If IDIGIT .LT. 0, printing is done with 72 columns.
17
* If IDIGIT .GT. 0, printing is done with 132 columns.
18
*
19
*-----------------------------------------------------------------------
20
*
21
SUBROUTINE SMOUT( LOUT, M, N, A, LDA, IDIGIT, IFMT )
22
* ...
23
* ... SPECIFICATIONS FOR ARGUMENTS
24
INTEGER M, N, IDIGIT, LDA, LOUT
25
REAL A( LDA, * )
26
CHARACTER IFMT*( * )
27
* ...
28
* ... SPECIFICATIONS FOR LOCAL VARIABLES
29
INTEGER I, J, NDIGIT, K1, K2, LLL
30
CHARACTER*1 ICOL( 3 )
31
CHARACTER*80 LINE
32
* ...
33
* ... SPECIFICATIONS INTRINSICS
34
INTRINSIC MIN
35
*
36
DATA ICOL( 1 ), ICOL( 2 ), ICOL( 3 ) / 'C', 'o',
37
$ 'l' /
38
* ...
39
* ... FIRST EXECUTABLE STATEMENT
40
*
41
LLL = MIN( LEN( IFMT ), 80 )
42
DO 10 I = 1, LLL
43
LINE( I: I ) = '-'
44
10 CONTINUE
45
*
46
DO 20 I = LLL + 1, 80
47
LINE( I: I ) = ' '
48
20 CONTINUE
49
*
50
WRITE( LOUT, 9999 )IFMT, LINE( 1: LLL )
51
9999 FORMAT( / 1X, A / 1X, A )
52
*
53
IF( M.LE.0 .OR. N.LE.0 .OR. LDA.LE.0 )
54
$ RETURN
55
NDIGIT = IDIGIT
56
IF( IDIGIT.EQ.0 )
57
$ NDIGIT = 4
58
*
59
*=======================================================================
60
* CODE FOR OUTPUT USING 72 COLUMNS FORMAT
61
*=======================================================================
62
*
63
IF( IDIGIT.LT.0 ) THEN
64
NDIGIT = -IDIGIT
65
IF( NDIGIT.LE.4 ) THEN
66
DO 40 K1 = 1, N, 5
67
K2 = MIN0( N, K1+4 )
68
WRITE( LOUT, 9998 )( ICOL, I, I = K1, K2 )
69
DO 30 I = 1, M
70
WRITE( LOUT, 9994 )I, ( A( I, J ), J = K1, K2 )
71
30 CONTINUE
72
40 CONTINUE
73
*
74
ELSE IF( NDIGIT.LE.6 ) THEN
75
DO 60 K1 = 1, N, 4
76
K2 = MIN0( N, K1+3 )
77
WRITE( LOUT, 9997 )( ICOL, I, I = K1, K2 )
78
DO 50 I = 1, M
79
WRITE( LOUT, 9993 )I, ( A( I, J ), J = K1, K2 )
80
50 CONTINUE
81
60 CONTINUE
82
*
83
ELSE IF( NDIGIT.LE.10 ) THEN
84
DO 80 K1 = 1, N, 3
85
K2 = MIN0( N, K1+2 )
86
WRITE( LOUT, 9996 )( ICOL, I, I = K1, K2 )
87
DO 70 I = 1, M
88
WRITE( LOUT, 9992 )I, ( A( I, J ), J = K1, K2 )
89
70 CONTINUE
90
80 CONTINUE
91
*
92
ELSE
93
DO 100 K1 = 1, N, 2
94
K2 = MIN0( N, K1+1 )
95
WRITE( LOUT, 9995 )( ICOL, I, I = K1, K2 )
96
DO 90 I = 1, M
97
WRITE( LOUT, 9991 )I, ( A( I, J ), J = K1, K2 )
98
90 CONTINUE
99
100 CONTINUE
100
END IF
101
*
102
*=======================================================================
103
* CODE FOR OUTPUT USING 132 COLUMNS FORMAT
104
*=======================================================================
105
*
106
ELSE
107
IF( NDIGIT.LE.4 ) THEN
108
DO 120 K1 = 1, N, 10
109
K2 = MIN0( N, K1+9 )
110
WRITE( LOUT, 9998 )( ICOL, I, I = K1, K2 )
111
DO 110 I = 1, M
112
WRITE( LOUT, 9994 )I, ( A( I, J ), J = K1, K2 )
113
110 CONTINUE
114
120 CONTINUE
115
*
116
ELSE IF( NDIGIT.LE.6 ) THEN
117
DO 140 K1 = 1, N, 8
118
K2 = MIN0( N, K1+7 )
119
WRITE( LOUT, 9997 )( ICOL, I, I = K1, K2 )
120
DO 130 I = 1, M
121
WRITE( LOUT, 9993 )I, ( A( I, J ), J = K1, K2 )
122
130 CONTINUE
123
140 CONTINUE
124
*
125
ELSE IF( NDIGIT.LE.10 ) THEN
126
DO 160 K1 = 1, N, 6
127
K2 = MIN0( N, K1+5 )
128
WRITE( LOUT, 9996 )( ICOL, I, I = K1, K2 )
129
DO 150 I = 1, M
130
WRITE( LOUT, 9992 )I, ( A( I, J ), J = K1, K2 )
131
150 CONTINUE
132
160 CONTINUE
133
*
134
ELSE
135
DO 180 K1 = 1, N, 5
136
K2 = MIN0( N, K1+4 )
137
WRITE( LOUT, 9995 )( ICOL, I, I = K1, K2 )
138
DO 170 I = 1, M
139
WRITE( LOUT, 9991 )I, ( A( I, J ), J = K1, K2 )
140
170 CONTINUE
141
180 CONTINUE
142
END IF
143
END IF
144
WRITE( LOUT, 9990 )
145
*
146
9998 FORMAT( 10X, 10( 4X, 3A1, I4, 1X ) )
147
9997 FORMAT( 10X, 8( 5X, 3A1, I4, 2X ) )
148
9996 FORMAT( 10X, 6( 7X, 3A1, I4, 4X ) )
149
9995 FORMAT( 10X, 5( 9X, 3A1, I4, 6X ) )
150
9994 FORMAT( 1X, ' Row', I4, ':', 1X, 1P10E12.3 )
151
9993 FORMAT( 1X, ' Row', I4, ':', 1X, 1P8E14.5 )
152
9992 FORMAT( 1X, ' Row', I4, ':', 1X, 1P6E18.9 )
153
9991 FORMAT( 1X, ' Row', I4, ':', 1X, 1P5E22.13 )
154
9990 FORMAT( 1X, ' ' )
155
*
156
RETURN
157
END
158
159