smout.f 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. *DECK SMOUT
  2. SUBROUTINE SMOUT (M, N, LDA, A, IFMT, IDIGIT)
  3. C***BEGIN PROLOGUE SMOUT
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to FC and SBOCLS
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (SMOUT-S, DMOUT-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C SINGLE PRECISION MATRIX OUTPUT ROUTINE.
  12. C
  13. C INPUT..
  14. C
  15. C M,N,LDA,A(*,*) PRINT THE SINGLE PRECISION ARRAY A(I,J),I = 1,...,M,
  16. C J=1,...,N, ON OUTPUT UNIT LOUT=6. LDA IS THE DECLARED
  17. C FIRST DIMENSION OF A(*,*) AS SPECIFIED IN THE CALLING
  18. C PROGRAM. THE HEADING IN THE FORTRAN FORMAT STATEMENT
  19. C IFMT(*), DESCRIBED BELOW, IS PRINTED AS A FIRST STEP.
  20. C THE COMPONENTS A(I,J) ARE INDEXED, ON OUTPUT, IN A
  21. C PLEASANT FORMAT.
  22. C IFMT(*) A FORTRAN FORMAT STATEMENT. THIS IS PRINTED ON
  23. C OUTPUT UNIT LOUT=6 WITH THE VARIABLE FORMAT FORTRAN
  24. C STATEMENT
  25. C WRITE(LOUT,IFMT).
  26. C IDIGIT PRINT AT LEAST ABS(IDIGIT) DECIMAL DIGITS PER NUMBER.
  27. C THE SUBPROGRAM WILL CHOOSE THAT INTEGER 4,6,10, OR 14
  28. C WHICH WILL PRINT AT LEAST ABS(IDIGIT) NUMBER OF
  29. C PLACES. IF IDIGIT.LT.0, 72 PRINTING COLUMNS ARE
  30. C UTILIZED TO WRITE EACH LINE OF OUTPUT OF THE ARRAY
  31. C A(*,*). (THIS CAN BE USED ON MOST TIME-SHARING
  32. C TERMINALS). IF IDIGIT.GE.0, 133 PRINTING COLUMNS ARE
  33. C UTILIZED. (THIS CAN BE USED ON MOST LINE PRINTERS).
  34. C
  35. C EXAMPLE..
  36. C
  37. C PRINT AN ARRAY CALLED (SIMPLEX TABLEAU ) OF SIZE 10 BY 20 SHOWING
  38. C 6 DECIMAL DIGITS PER NUMBER. THE USER IS RUNNING ON A TIME-SHARING
  39. C SYSTEM WITH A 72 COLUMN OUTPUT DEVICE.
  40. C
  41. C DIMENSION TABLEU(20,20)
  42. C M = 10
  43. C N = 20
  44. C LDTABL = 20
  45. C IDIGIT = -6
  46. C CALL SMOUT(M,N,LDTABL,TABLEU,21H(16H1SIMPLEX TABLEAU),IDIGIT)
  47. C
  48. C***SEE ALSO FC, SBOCLS
  49. C***ROUTINES CALLED I1MACH
  50. C***REVISION HISTORY (YYMMDD)
  51. C 780801 DATE WRITTEN
  52. C 890531 Changed all specific intrinsics to generic. (WRB)
  53. C 891107 Added comma after 1P edit descriptor in FORMAT
  54. C statements. (WRB)
  55. C 891214 Prologue converted to Version 4.0 format. (BAB)
  56. C 900328 Added TYPE section. (WRB)
  57. C***END PROLOGUE SMOUT
  58. DIMENSION A(LDA,*)
  59. CHARACTER IFMT*(*),ICOL*3
  60. SAVE ICOL
  61. DATA ICOL /'COL'/
  62. C***FIRST EXECUTABLE STATEMENT SMOUT
  63. LOUT=I1MACH(2)
  64. WRITE(LOUT,IFMT)
  65. IF(M.LE.0.OR.N.LE.0.OR.LDA.LE.0) RETURN
  66. NDIGIT = IDIGIT
  67. IF(IDIGIT.EQ.0) NDIGIT = 4
  68. IF(IDIGIT.GE.0) GO TO 80
  69. C
  70. NDIGIT = -IDIGIT
  71. IF(NDIGIT.GT.4) GO TO 20
  72. C
  73. DO 10 K1=1,N,5
  74. K2 = MIN(N,K1+4)
  75. WRITE(LOUT,1000) (ICOL,I,I = K1, K2)
  76. DO 10 I = 1, M
  77. WRITE(LOUT,1004) I,(A(I,J),J = K1, K2)
  78. 10 CONTINUE
  79. RETURN
  80. C
  81. 20 CONTINUE
  82. IF(NDIGIT.GT.6) GO TO 40
  83. C
  84. DO 30 K1=1,N,4
  85. K2 = MIN(N,K1+3)
  86. WRITE(LOUT,1001) (ICOL,I,I = K1, K2)
  87. DO 30 I = 1, M
  88. WRITE(LOUT,1005) I,(A(I,J),J = K1, K2)
  89. 30 CONTINUE
  90. RETURN
  91. C
  92. 40 CONTINUE
  93. IF(NDIGIT.GT.10) GO TO 60
  94. C
  95. DO 50 K1=1,N,3
  96. K2=MIN(N,K1+2)
  97. WRITE(LOUT,1002) (ICOL,I,I = K1, K2)
  98. DO 50 I = 1, M
  99. WRITE(LOUT,1006) I,(A(I,J),J = K1, K2)
  100. 50 CONTINUE
  101. RETURN
  102. C
  103. 60 CONTINUE
  104. DO 70 K1=1,N,2
  105. K2 = MIN(N,K1+1)
  106. WRITE(LOUT,1003) (ICOL,I,I = K1, K2)
  107. DO 70 I = 1, M
  108. WRITE(LOUT,1007) I,(A(I,J),J = K1, K2)
  109. 70 CONTINUE
  110. RETURN
  111. C
  112. 80 CONTINUE
  113. IF(NDIGIT.GT.4) GO TO 100
  114. C
  115. DO 90 K1=1,N,10
  116. K2 = MIN(N,K1+9)
  117. WRITE(LOUT,1000) (ICOL,I,I = K1, K2)
  118. DO 90 I = 1, M
  119. WRITE(LOUT,1004) I,(A(I,J),J = K1, K2)
  120. 90 CONTINUE
  121. RETURN
  122. C
  123. 100 CONTINUE
  124. IF(NDIGIT.GT.6) GO TO 120
  125. C
  126. DO 110 K1=1,N,8
  127. K2 = MIN(N,K1+7)
  128. WRITE(LOUT,1001) (ICOL,I,I = K1, K2)
  129. DO 110 I = 1, M
  130. WRITE(LOUT,1005) I,(A(I,J),J = K1, K2)
  131. 110 CONTINUE
  132. RETURN
  133. C
  134. 120 CONTINUE
  135. IF(NDIGIT.GT.10) GO TO 140
  136. C
  137. DO 130 K1=1,N,6
  138. K2 = MIN(N,K1+5)
  139. WRITE(LOUT,1002) (ICOL,I,I = K1, K2)
  140. DO 130 I = 1, M
  141. WRITE(LOUT,1006) I,(A(I,J),J = K1, K2)
  142. 130 CONTINUE
  143. RETURN
  144. C
  145. 140 CONTINUE
  146. DO 150 K1=1,N,5
  147. K2 = MIN(N,K1+4)
  148. WRITE(LOUT,1003) (ICOL,I,I = K1, K2)
  149. DO 150 I = 1, M
  150. WRITE(LOUT,1007) I,(A(I,J),J = K1, K2)
  151. 150 CONTINUE
  152. RETURN
  153. 1000 FORMAT(10X,10(4X,A,I4,1X))
  154. 1001 FORMAT(10X,8(5X,A,I4,2X))
  155. 1002 FORMAT(10X,6(7X,A,I4,4X))
  156. 1003 FORMAT(10X,5(9X,A,I4,6X))
  157. 1004 FORMAT(1X,3HROW,I4,2X,1P,10E12.3)
  158. 1005 FORMAT(1X,3HROW,I4,2X,1P,8E14.5)
  159. 1006 FORMAT(1X,3HROW,I4,2X,1P,6E18.9)
  160. 1007 FORMAT(1X,3HROW,I4,2X,1P,5E22.13)
  161. END