Télécharger dmout.eso

Retour à la liste

Numérotation des lignes :

dmout
  1. C DMOUT SOURCE BP208322 20/02/06 21:15:17 10512
  2. *-----------------------------------------------------------------------
  3. * Routine: DMOUT
  4. *
  5. * Purpose: Real matrix output routine.
  6. *
  7. * Usage: CALL DMOUT (IOIMP, M, N, A, LDA, IDIGIT, IFMT)
  8. * BP,2020 CALL DMOUT ( M, N, A, LDA, IDIGIT, IFMT)
  9. * LOUT --> IOIMP
  10. *
  11. * Arguments
  12. * M - Number of rows of A. (Input)
  13. * N - Number of columns of A. (Input)
  14. * A - Real M by N matrix to be printed. (Input)
  15. * LDA - Leading dimension of A exactly as specified in the
  16. * dimension statement of the calling program. (Input)
  17. * IFMT - Format to be used in printing matrix A. (Input)
  18. * IDIGIT - Print up to IABS(IDIGIT) decimal digits per number. (In)
  19. * If IDIGIT .LT. 0, printing is done with 72 columns.
  20. * If IDIGIT .GT. 0, printing is done with 132 columns.
  21. *
  22. *-----------------------------------------------------------------------
  23. *
  24. c SUBROUTINE DMOUT( LOUT, M, N, A, LDA, IDIGIT, IFMT )
  25. SUBROUTINE DMOUT( M, N, A, LDA, IDIGIT, IFMT )
  26.  
  27.  
  28. -INC PPARAM
  29. -INC CCOPTIO
  30. * ...
  31. * ... SPECIFICATIONS FOR ARGUMENTS
  32. * ...
  33. * ... SPECIFICATIONS FOR LOCAL VARIABLES
  34. * .. Scalar Arguments ..
  35. CHARACTER*( * ) IFMT
  36. INTEGER IDIGIT, LDA, M, N
  37. * ..
  38. * .. Array Arguments ..
  39. REAL*8 A( LDA, * )
  40. * ..
  41. * .. Local Scalars ..
  42. CHARACTER*80 LINE
  43. INTEGER I, J, K1, K2, LLL, NDIGIT
  44. * ..
  45. * .. Local Arrays ..
  46. CHARACTER ICOL( 3 )
  47. * ..
  48. ** .. Intrinsic Functions ..
  49. * INTRINSIC LEN, MIN, MIN0
  50. ** ..
  51. ** .. Data statements ..
  52. DATA ICOL( 1 ), ICOL( 2 ), ICOL( 3 ) / 'C', 'o',
  53. $ 'l' /
  54. ** ..
  55. ** .. Executable Statements ..
  56. * ...
  57. * ... FIRST EXECUTABLE STATEMENT
  58. *
  59. LLL = MIN( LEN( IFMT ), 80 )
  60. DO 10 I = 1, LLL
  61. LINE( I: I ) = '-'
  62. 10 CONTINUE
  63. *
  64. DO 20 I = LLL + 1, 80
  65. LINE( I: I ) = ' '
  66. 20 CONTINUE
  67. *
  68. WRITE(IOIMP, FMT = 9999 )IFMT, LINE( 1: LLL )
  69. 9999 FORMAT( / 1X, A, / 1X, A )
  70. *
  71. IF( M.LE.0 .OR. N.LE.0 .OR. LDA.LE.0 )
  72. $ RETURN
  73. NDIGIT = IDIGIT
  74. IF( IDIGIT.EQ.0 )
  75. $ NDIGIT = 4
  76. *
  77. *=======================================================================
  78. * CODE FOR OUTPUT USING 72 COLUMNS FORMAT
  79. *=======================================================================
  80. *
  81. IF( IDIGIT.LT.0 ) THEN
  82. NDIGIT = -IDIGIT
  83. IF( NDIGIT.LE.4 ) THEN
  84. DO 40 K1 = 1, N, 5
  85. K2 = MIN0( N, K1+4 )
  86. WRITE(IOIMP, FMT = 9998 )( ICOL, I, I = K1, K2 )
  87. DO 30 I = 1, M
  88. WRITE(IOIMP, FMT = 9994 )I, ( A( I, J ), J = K1, K2 )
  89. 30 CONTINUE
  90. 40 CONTINUE
  91. *
  92. ELSE IF( NDIGIT.LE.6 ) THEN
  93. DO 60 K1 = 1, N, 4
  94. K2 = MIN0( N, K1+3 )
  95. WRITE(IOIMP, FMT = 9997 )( ICOL, I, I = K1, K2 )
  96. DO 50 I = 1, M
  97. WRITE(IOIMP, FMT = 9993 )I, ( A( I, J ), J = K1, K2 )
  98. 50 CONTINUE
  99. 60 CONTINUE
  100. *
  101. ELSE IF( NDIGIT.LE.10 ) THEN
  102. DO 80 K1 = 1, N, 3
  103. K2 = MIN0( N, K1+2 )
  104. WRITE(IOIMP, FMT = 9996 )( ICOL, I, I = K1, K2 )
  105. DO 70 I = 1, M
  106. WRITE(IOIMP, FMT = 9992 )I, ( A( I, J ), J = K1, K2 )
  107. 70 CONTINUE
  108. 80 CONTINUE
  109. *
  110. ELSE
  111. DO 100 K1 = 1, N, 2
  112. K2 = MIN0( N, K1+1 )
  113. WRITE(IOIMP, FMT = 9995 )( ICOL, I, I = K1, K2 )
  114. DO 90 I = 1, M
  115. WRITE(IOIMP, FMT = 9991 )I, ( A( I, J ), J = K1, K2 )
  116. 90 CONTINUE
  117. 100 CONTINUE
  118. END IF
  119. *
  120. *=======================================================================
  121. * CODE FOR OUTPUT USING 132 COLUMNS FORMAT
  122. *=======================================================================
  123. *
  124. ELSE
  125. IF( NDIGIT.LE.4 ) THEN
  126. DO 120 K1 = 1, N, 10
  127. K2 = MIN0( N, K1+9 )
  128. WRITE(IOIMP, FMT = 9998 )( ICOL, I, I = K1, K2 )
  129. DO 110 I = 1, M
  130. WRITE(IOIMP, FMT = 9994 )I, ( A( I, J ), J = K1, K2 )
  131. 110 CONTINUE
  132. 120 CONTINUE
  133. *
  134. ELSE IF( NDIGIT.LE.6 ) THEN
  135. DO 140 K1 = 1, N, 8
  136. K2 = MIN0( N, K1+7 )
  137. WRITE(IOIMP, FMT = 9997 )( ICOL, I, I = K1, K2 )
  138. DO 130 I = 1, M
  139. WRITE(IOIMP, FMT = 9993 )I, ( A( I, J ), J = K1, K2 )
  140. 130 CONTINUE
  141. 140 CONTINUE
  142. *
  143. ELSE IF( NDIGIT.LE.10 ) THEN
  144. DO 160 K1 = 1, N, 6
  145. K2 = MIN0( N, K1+5 )
  146. WRITE(IOIMP, FMT = 9996 )( ICOL, I, I = K1, K2 )
  147. DO 150 I = 1, M
  148. WRITE(IOIMP, FMT = 9992 )I, ( A( I, J ), J = K1, K2 )
  149. 150 CONTINUE
  150. 160 CONTINUE
  151. *
  152. ELSE
  153. DO 180 K1 = 1, N, 5
  154. K2 = MIN0( N, K1+4 )
  155. WRITE(IOIMP, FMT = 9995 )( ICOL, I, I = K1, K2 )
  156. DO 170 I = 1, M
  157. WRITE(IOIMP, FMT = 9991 )I, ( A( I, J ), J = K1, K2 )
  158. 170 CONTINUE
  159. 180 CONTINUE
  160. END IF
  161. END IF
  162. WRITE(IOIMP, FMT = 9990 )
  163. *
  164. 9998 FORMAT( 10X, 10( 4X, 3A1, I4, 1X ) )
  165. 9997 FORMAT( 10X, 8( 5X, 3A1, I4, 2X ) )
  166. 9996 FORMAT( 10X, 6( 7X, 3A1, I4, 4X ) )
  167. 9995 FORMAT( 10X, 5( 9X, 3A1, I4, 6X ) )
  168. 9994 FORMAT( 1X, ' Row', I4, ':', 1X, 1P, 10D12.3 )
  169. 9993 FORMAT( 1X, ' Row', I4, ':', 1X, 1P, 8D14.5 )
  170. 9992 FORMAT( 1X, ' Row', I4, ':', 1X, 1P, 6D18.9 )
  171. 9991 FORMAT( 1X, ' Row', I4, ':', 1X, 1P, 5D22.13 )
  172. 9990 FORMAT( 1X, ' ' )
  173. *
  174. RETURN
  175. END
  176.  
  177.  
  178.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales