Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/mathlibs/src/parpack/psmout.f
5194 views
1
* Routine: PSMOUT - Parallel Version of ARPACK utility routine SMOUT
2
*
3
* Purpose: Real matrix output routine.
4
*
5
* Usage: CALL PSMOUT (COMM, LOUT, M, N, A, LDA, IDIGIT, IFMT)
6
*
7
* Arguments
8
* COMM - MPI Communicator for the processor grid
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
*\SCCS Information:
20
* FILE: mout.F SID: 1.2 DATE OF SID: 3/19/97 RELEASE: 1
21
*
22
*-----------------------------------------------------------------------
23
*
24
SUBROUTINE PSMOUT( COMM, LOUT, M, N, A, LDA, IDIGIT, IFMT )
25
* ...
26
include 'mpif.h'
27
*
28
* .. MPI VARIABLES AND FUNCTIONS ..
29
* .. Variable Declaration ..
30
integer COMM, MYID, IERR
31
*
32
* ... SPECIFICATIONS FOR ARGUMENTS
33
* ...
34
* ... SPECIFICATIONS FOR LOCAL VARIABLES
35
* .. Scalar Arguments ..
36
CHARACTER*( * ) IFMT
37
INTEGER IDIGIT, LDA, LOUT, M, N
38
* ..
39
* .. Array Arguments ..
40
Real
41
& A( LDA, * )
42
* ..
43
* .. Local Scalars ..
44
CHARACTER*80 LINE
45
INTEGER I, J, K1, K2, LLL, NDIGIT
46
* ..
47
* .. Local Arrays ..
48
CHARACTER ICOL( 3 )
49
* ..
50
* .. Intrinsic Functions ..
51
INTRINSIC LEN, MIN, MIN0
52
* ..
53
* .. Data statements ..
54
DATA ICOL( 1 ), ICOL( 2 ), ICOL( 3 ) / 'C', 'o',
55
$ 'l' /
56
* ..
57
* .. Executable Statements ..
58
* ...
59
* ... FIRST EXECUTABLE STATEMENT
60
*
61
* Determine processor configuration
62
*
63
call MPI_COMM_RANK( comm, myid, ierr )
64
*
65
* .. Only Processor 0 will write to file LOUT ..
66
*
67
IF ( MYID .EQ. 0 ) THEN
68
*
69
LLL = MIN( LEN( IFMT ), 80 )
70
DO 10 I = 1, LLL
71
LINE( I: I ) = '-'
72
10 CONTINUE
73
*
74
DO 20 I = LLL + 1, 80
75
LINE( I: I ) = ' '
76
20 CONTINUE
77
*
78
WRITE( LOUT, FMT = 9999 )IFMT, LINE( 1: LLL )
79
9999 FORMAT( / 1X, A, / 1X, A )
80
*
81
IF( M.LE.0 .OR. N.LE.0 .OR. LDA.LE.0 )
82
$ RETURN
83
NDIGIT = IDIGIT
84
IF( IDIGIT.EQ.0 )
85
$ NDIGIT = 4
86
*
87
*=======================================================================
88
* CODE FOR OUTPUT USING 72 COLUMNS FORMAT
89
*=======================================================================
90
*
91
IF( IDIGIT.LT.0 ) THEN
92
NDIGIT = -IDIGIT
93
IF( NDIGIT.LE.4 ) THEN
94
DO 40 K1 = 1, N, 5
95
K2 = MIN0( N, K1+4 )
96
WRITE( LOUT, FMT = 9998 )( ICOL, I, I = K1, K2 )
97
DO 30 I = 1, M
98
WRITE( LOUT, FMT = 9994 )I, ( A( I, J ), J = K1, K2 )
99
30 CONTINUE
100
40 CONTINUE
101
*
102
ELSE IF( NDIGIT.LE.6 ) THEN
103
DO 60 K1 = 1, N, 4
104
K2 = MIN0( N, K1+3 )
105
WRITE( LOUT, FMT = 9997 )( ICOL, I, I = K1, K2 )
106
DO 50 I = 1, M
107
WRITE( LOUT, FMT = 9993 )I, ( A( I, J ), J = K1, K2 )
108
50 CONTINUE
109
60 CONTINUE
110
*
111
ELSE IF( NDIGIT.LE.10 ) THEN
112
DO 80 K1 = 1, N, 3
113
K2 = MIN0( N, K1+2 )
114
WRITE( LOUT, FMT = 9996 )( ICOL, I, I = K1, K2 )
115
DO 70 I = 1, M
116
WRITE( LOUT, FMT = 9992 )I, ( A( I, J ), J = K1, K2 )
117
70 CONTINUE
118
80 CONTINUE
119
*
120
ELSE
121
DO 100 K1 = 1, N, 2
122
K2 = MIN0( N, K1+1 )
123
WRITE( LOUT, FMT = 9995 )( ICOL, I, I = K1, K2 )
124
DO 90 I = 1, M
125
WRITE( LOUT, FMT = 9991 )I, ( A( I, J ), J = K1, K2 )
126
90 CONTINUE
127
100 CONTINUE
128
END IF
129
*
130
*=======================================================================
131
* CODE FOR OUTPUT USING 132 COLUMNS FORMAT
132
*=======================================================================
133
*
134
ELSE
135
IF( NDIGIT.LE.4 ) THEN
136
DO 120 K1 = 1, N, 10
137
K2 = MIN0( N, K1+9 )
138
WRITE( LOUT, FMT = 9998 )( ICOL, I, I = K1, K2 )
139
DO 110 I = 1, M
140
WRITE( LOUT, FMT = 9994 )I, ( A( I, J ), J = K1, K2 )
141
110 CONTINUE
142
120 CONTINUE
143
*
144
ELSE IF( NDIGIT.LE.6 ) THEN
145
DO 140 K1 = 1, N, 8
146
K2 = MIN0( N, K1+7 )
147
WRITE( LOUT, FMT = 9997 )( ICOL, I, I = K1, K2 )
148
DO 130 I = 1, M
149
WRITE( LOUT, FMT = 9993 )I, ( A( I, J ), J = K1, K2 )
150
130 CONTINUE
151
140 CONTINUE
152
*
153
ELSE IF( NDIGIT.LE.10 ) THEN
154
DO 160 K1 = 1, N, 6
155
K2 = MIN0( N, K1+5 )
156
WRITE( LOUT, FMT = 9996 )( ICOL, I, I = K1, K2 )
157
DO 150 I = 1, M
158
WRITE( LOUT, FMT = 9992 )I, ( A( I, J ), J = K1, K2 )
159
150 CONTINUE
160
160 CONTINUE
161
*
162
ELSE
163
DO 180 K1 = 1, N, 5
164
K2 = MIN0( N, K1+4 )
165
WRITE( LOUT, FMT = 9995 )( ICOL, I, I = K1, K2 )
166
DO 170 I = 1, M
167
WRITE( LOUT, FMT = 9991 )I, ( A( I, J ), J = K1, K2 )
168
170 CONTINUE
169
180 CONTINUE
170
END IF
171
END IF
172
WRITE( LOUT, FMT = 9990 )
173
*
174
9998 FORMAT( 10X, 10( 4X, 3A1, I4, 1X ) )
175
9997 FORMAT( 10X, 8( 5X, 3A1, I4, 2X ) )
176
9996 FORMAT( 10X, 6( 7X, 3A1, I4, 4X ) )
177
9995 FORMAT( 10X, 5( 9X, 3A1, I4, 6X ) )
178
9994 FORMAT( 1X, ' Row', I4, ':', 1X, 1P, 10E12.3 )
179
9993 FORMAT( 1X, ' Row', I4, ':', 1X, 1P, 8E14.5 )
180
9992 FORMAT( 1X, ' Row', I4, ':', 1X, 1P, 6E18.9 )
181
9991 FORMAT( 1X, ' Row', I4, ':', 1X, 1P, 5E22.13 )
182
9990 FORMAT( 1X, ' ' )
183
*
184
END IF
185
RETURN
186
END
187
188