1*  Routine:    PIVOUT - Parallel version of ARPACK UTILITY ROUTINE IVOUT
2*
3*  Purpose:    Integer vector output routine.
4*
5*  Usage:      CALL PIVOUT (COMM, LOUT, N, IX, IDIGIT, IFMT)
6*
7*  Arguments
8*     COMM   - MPI Communicator for the processor grid
9*     N      - Length of array IX. (Input)
10*     IX     - Integer array to be printed. (Input)
11*     IFMT   - Format to be used in printing array IX. (Input)
12*     IDIGIT - Print up to ABS(IDIGIT) decimal digits / number. (Input)
13*              If IDIGIT .LT. 0, printing is done with 72 columns.
14*              If IDIGIT .GT. 0, printing is done with 132 columns.
15*
16*\SCCS Information:
17* FILE: ivout.F   SID: 1.2   DATE OF SID: 3/19/97   RELEASE: 1
18*
19*-----------------------------------------------------------------------
20*
21      SUBROUTINE PIVOUT (COMM, LOUT, N, IX, IDIGIT, IFMT)
22*
23      include  'mpif.h'
24*
25*     .. MPI VARIABLES AND FUNCTIONS ..
26*     .. Variable Declaration ..
27      integer    COMM, MYID, IERR
28*
29*     ...
30*     ... SPECIFICATIONS FOR ARGUMENTS
31      INTEGER    IX(*), N, IDIGIT, LOUT
32      CHARACTER  IFMT*(*)
33*     ...
34*     ... SPECIFICATIONS FOR LOCAL VARIABLES
35      INTEGER    I, NDIGIT, K1, K2, LLL
36      CHARACTER*80 LINE
37*     ...
38*     ... SPECIFICATIONS INTRINSICS
39      INTRINSIC          MIN
40*
41*     ..
42*     .. Executable Statements ..
43*     ...
44*     ... FIRST EXECUTABLE STATEMENT
45*
46*     Determine processor configuration
47*
48      call MPI_COMM_RANK( comm, myid, ierr )
49*
50*     .. Only Processor 0 will write to file LOUT ..
51*
52      IF ( MYID .EQ. 0 ) THEN
53*
54      LLL = MIN ( LEN ( IFMT ), 80 )
55      DO 1 I = 1, LLL
56          LINE(I:I) = '-'
57    1 CONTINUE
58*
59      DO 2 I = LLL+1, 80
60          LINE(I:I) = ' '
61    2 CONTINUE
62*
63      WRITE ( LOUT, 2000 ) IFMT, LINE(1:LLL)
64 2000 FORMAT ( /1X, A  /1X, A )
65*
66      IF (N .LE. 0) RETURN
67      NDIGIT = IDIGIT
68      IF (IDIGIT .EQ. 0) NDIGIT = 4
69*
70*=======================================================================
71*             CODE FOR OUTPUT USING 72 COLUMNS FORMAT
72*=======================================================================
73*
74      IF (IDIGIT .LT. 0) THEN
75*
76      NDIGIT = -IDIGIT
77      IF (NDIGIT .LE. 4) THEN
78         DO 10 K1 = 1, N, 10
79            K2 = MIN0(N,K1+9)
80            WRITE(LOUT,1000) K1,K2,(IX(I),I=K1,K2)
81   10    CONTINUE
82*
83      ELSE IF (NDIGIT .LE. 6) THEN
84         DO 30 K1 = 1, N, 7
85            K2 = MIN0(N,K1+6)
86            WRITE(LOUT,1001) K1,K2,(IX(I),I=K1,K2)
87   30    CONTINUE
88*
89      ELSE IF (NDIGIT .LE. 10) THEN
90         DO 50 K1 = 1, N, 5
91            K2 = MIN0(N,K1+4)
92            WRITE(LOUT,1002) K1,K2,(IX(I),I=K1,K2)
93   50    CONTINUE
94*
95      ELSE
96         DO 70 K1 = 1, N, 3
97            K2 = MIN0(N,K1+2)
98            WRITE(LOUT,1003) K1,K2,(IX(I),I=K1,K2)
99   70    CONTINUE
100      END IF
101*
102*=======================================================================
103*             CODE FOR OUTPUT USING 132 COLUMNS FORMAT
104*=======================================================================
105*
106      ELSE
107*
108      IF (NDIGIT .LE. 4) THEN
109         DO 90 K1 = 1, N, 20
110            K2 = MIN0(N,K1+19)
111            WRITE(LOUT,1000) K1,K2,(IX(I),I=K1,K2)
112   90    CONTINUE
113*
114      ELSE IF (NDIGIT .LE. 6) THEN
115         DO 110 K1 = 1, N, 15
116            K2 = MIN0(N,K1+14)
117            WRITE(LOUT,1001) K1,K2,(IX(I),I=K1,K2)
118  110    CONTINUE
119*
120      ELSE IF (NDIGIT .LE. 10) THEN
121         DO 130 K1 = 1, N, 10
122            K2 = MIN0(N,K1+9)
123            WRITE(LOUT,1002) K1,K2,(IX(I),I=K1,K2)
124  130    CONTINUE
125*
126      ELSE
127         DO 150 K1 = 1, N, 7
128            K2 = MIN0(N,K1+6)
129            WRITE(LOUT,1003) K1,K2,(IX(I),I=K1,K2)
130  150    CONTINUE
131      END IF
132      END IF
133      WRITE (LOUT,1004)
134
135      ENDIF
136*
137 1000 FORMAT(1X,I4,' - ',I4,':',20(1X,I5))
138 1001 FORMAT(1X,I4,' - ',I4,':',15(1X,I7))
139 1002 FORMAT(1X,I4,' - ',I4,':',10(1X,I11))
140 1003 FORMAT(1X,I4,' - ',I4,':',7(1X,I15))
141 1004 FORMAT(1X,' ')
142*
143      RETURN
144      END
145