dvout.f 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. *DECK DVOUT
  2. SUBROUTINE DVOUT (N, DX, IFMT, IDIGIT)
  3. C***BEGIN PROLOGUE DVOUT
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DSPLP
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (SVOUT-S, DVOUT-D)
  8. C***AUTHOR Hanson, R. J., (SNLA)
  9. C Wisniewski, J. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C DOUBLE PRECISION VECTOR OUTPUT ROUTINE.
  13. C
  14. C INPUT..
  15. C
  16. C N,DX(*) PRINT THE DOUBLE PRECISION ARRAY DX(I),I=1,...,N, ON
  17. C OUTPUT UNIT LOUT. THE HEADING IN THE FORTRAN FORMAT
  18. C STATEMENT IFMT(*), DESCRIBED BELOW, IS PRINTED AS A FIRST
  19. C STEP. THE COMPONENTS DX(I) ARE INDEXED, ON OUTPUT,
  20. C IN A PLEASANT FORMAT.
  21. C IFMT(*) A FORTRAN FORMAT STATEMENT. THIS IS PRINTED ON OUTPUT
  22. C UNIT LOUT WITH THE VARIABLE FORMAT FORTRAN STATEMENT
  23. C WRITE(LOUT,IFMT)
  24. C IDIGIT PRINT AT LEAST ABS(IDIGIT) DECIMAL DIGITS PER NUMBER.
  25. C THE SUBPROGRAM WILL CHOOSE THAT INTEGER 4,6,10 OR 14
  26. C WHICH WILL PRINT AT LEAST ABS(IDIGIT) NUMBER OF
  27. C PLACES. IF IDIGIT.LT.0, 72 PRINTING COLUMNS ARE UTILIZED
  28. C TO WRITE EACH LINE OF OUTPUT OF THE ARRAY DX(*). (THIS
  29. C CAN BE USED ON MOST TIME-SHARING TERMINALS). IF
  30. C IDIGIT.GE.0, 133 PRINTING COLUMNS ARE UTILIZED. (THIS CAN
  31. C BE USED ON MOST LINE PRINTERS).
  32. C
  33. C EXAMPLE..
  34. C
  35. C PRINT AN ARRAY CALLED (COSTS OF PURCHASES) OF LENGTH 100 SHOWING
  36. C 6 DECIMAL DIGITS PER NUMBER. THE USER IS RUNNING ON A TIME-SHARING
  37. C SYSTEM WITH A 72 COLUMN OUTPUT DEVICE.
  38. C
  39. C DOUBLE PRECISION COSTS(100)
  40. C N = 100
  41. C IDIGIT = -6
  42. C CALL DVOUT(N,COSTS,'(''1COSTS OF PURCHASES'')',IDIGIT)
  43. C
  44. C***SEE ALSO DSPLP
  45. C***ROUTINES CALLED I1MACH
  46. C***REVISION HISTORY (YYMMDD)
  47. C 811215 DATE WRITTEN
  48. C 890531 Changed all specific intrinsics to generic. (WRB)
  49. C 891107 Added comma after 1P edit descriptor in FORMAT
  50. C statements. (WRB)
  51. C 891214 Prologue converted to Version 4.0 format. (BAB)
  52. C 900328 Added TYPE section. (WRB)
  53. C 910403 Updated AUTHOR section. (WRB)
  54. C***END PROLOGUE DVOUT
  55. IMPLICIT DOUBLE PRECISION (A-H,O-Z)
  56. DOUBLE PRECISION DX(*)
  57. CHARACTER IFMT*(*)
  58. C***FIRST EXECUTABLE STATEMENT DVOUT
  59. LOUT=I1MACH(2)
  60. WRITE(LOUT,IFMT)
  61. IF(N.LE.0) RETURN
  62. NDIGIT = IDIGIT
  63. IF(IDIGIT.EQ.0) NDIGIT = 6
  64. IF(IDIGIT.GE.0) GO TO 80
  65. C
  66. NDIGIT = -IDIGIT
  67. IF(NDIGIT.GT.6) GO TO 20
  68. C
  69. DO 10 K1=1,N,4
  70. K2 = MIN(N,K1+3)
  71. WRITE(LOUT,1000) K1,K2,(DX(I),I = K1, K2)
  72. 10 CONTINUE
  73. RETURN
  74. C
  75. 20 CONTINUE
  76. IF(NDIGIT.GT.14) GO TO 40
  77. C
  78. DO 30 K1=1,N,2
  79. K2 = MIN(N,K1+1)
  80. WRITE(LOUT,1001) K1,K2,(DX(I),I = K1, K2)
  81. 30 CONTINUE
  82. RETURN
  83. C
  84. 40 CONTINUE
  85. IF(NDIGIT.GT.20) GO TO 60
  86. C
  87. DO 50 K1=1,N,2
  88. K2=MIN(N,K1+1)
  89. WRITE(LOUT,1002) K1,K2,(DX(I),I = K1, K2)
  90. 50 CONTINUE
  91. RETURN
  92. C
  93. 60 CONTINUE
  94. DO 70 K1=1,N
  95. K2 = K1
  96. WRITE(LOUT,1003) K1,K2,(DX(I),I = K1, K2)
  97. 70 CONTINUE
  98. RETURN
  99. C
  100. 80 CONTINUE
  101. IF(NDIGIT.GT.6) GO TO 100
  102. C
  103. DO 90 K1=1,N,8
  104. K2 = MIN(N,K1+7)
  105. WRITE(LOUT,1000) K1,K2,(DX(I),I = K1, K2)
  106. 90 CONTINUE
  107. RETURN
  108. C
  109. 100 CONTINUE
  110. IF(NDIGIT.GT.14) GO TO 120
  111. C
  112. DO 110 K1=1,N,5
  113. K2 = MIN(N,K1+4)
  114. WRITE(LOUT,1001) K1,K2,(DX(I),I = K1, K2)
  115. 110 CONTINUE
  116. RETURN
  117. C
  118. 120 CONTINUE
  119. IF(NDIGIT.GT.20) GO TO 140
  120. C
  121. DO 130 K1=1,N,4
  122. K2 = MIN(N,K1+3)
  123. WRITE(LOUT,1002) K1,K2,(DX(I),I = K1, K2)
  124. 130 CONTINUE
  125. RETURN
  126. C
  127. 140 CONTINUE
  128. DO 150 K1=1,N,3
  129. K2 = MIN(N,K1+2)
  130. WRITE(LOUT,1003) K1,K2,(DX(I),I = K1, K2)
  131. 150 CONTINUE
  132. RETURN
  133. 1000 FORMAT(1X,I4,3H - ,I4,1X,1P,8D14.5)
  134. 1001 FORMAT(1X,I4,3H - ,I4,1X,1P,5D22.13)
  135. 1002 FORMAT(1X,I4,3H - ,I4,1X,1P,4D28.19)
  136. 1003 FORMAT(1X,I4,3H - ,I4,1X,1P,3D36.27)
  137. END