dmout.f 5.2 KB

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