|
21 | 21 | ! PCMSolver API, see: <http://pcmsolver.github.io/pcmsolver-doc> |
22 | 22 | !pcmsolver_copyright_end |
23 | 23 |
|
24 | | - module pedra_print |
25 | | - |
26 | | - use pedra_precision |
| 24 | +module pedra_print |
27 | 25 |
|
28 | | - implicit none |
| 26 | +use pedra_precision |
29 | 27 |
|
30 | | - public output |
| 28 | +implicit none |
31 | 29 |
|
32 | | - private |
| 30 | +public output |
33 | 31 |
|
34 | | - contains |
| 32 | +private |
35 | 33 |
|
36 | | -!... Dalton, Release 2.0, pdpack/printpkg.F |
37 | | -!... |
38 | | -!... These routines are in the public domain and can be |
39 | | -!... used freely in other programs. |
40 | | -!... |
| 34 | +contains |
41 | 35 |
|
42 | | - SUBROUTINE OUTPUT(AMATRX,ROWLOW,ROWHI,COLLOW,COLHI,ROWDIM,COLDIM, & |
43 | | - NCTL,LVPRI) |
44 | | -!....................................................................... |
45 | | -! Revised 15-Dec-1983 by Hans Jorgen Aa. Jensen. |
46 | | -! 16-Jun-1986 hjaaj ( removed Hollerith ) |
47 | | -! OUTPUT PRINTS A REAL MATRIX IN FORMATTED FORM WITH NUMBERED ROWS |
48 | | -! AND COLUMNS. THE INPUT IS AS FOLLOWS; |
49 | | -! AMATRX(',').........MATRIX TO BE OUTPUT |
50 | | -! ROWLOW..............ROW NUMBER AT WHICH OUTPUT IS TO BEGIN |
51 | | -! ROWHI...............ROW NUMBER AT WHICH OUTPUT IS TO END |
52 | | -! COLLOW..............COLUMN NUMBER AT WHICH OUTPUT IS TO BEGIN |
53 | | -! COLHI...............COLUMN NUMBER AT WHICH OUTPUT IS TO END |
54 | | -! ROWDIM..............ROW DIMENSION OF AMATRX(',') |
55 | | -! COLDIM..............COLUMN DIMENSION OF AMATRX(',') |
56 | | -! NCTL................CARRIAGE CONTROL FLAG; 1 FOR SINGLE SPACE |
57 | | -! 2 FOR DOUBLE SPACE |
58 | | -! 3 FOR TRIPLE SPACE |
59 | | -! hjaaj: negative for 132 col width |
60 | | -! THE PARAMETERS THAT FOLLOW MATRIX ARE ALL OF TYPE INTEGER*4. THE |
61 | | -! PROGRAM IS SET UP TO HANDLE 5 COLUMNS/PAGE WITH A 1P,5D24.15 FORMAT |
62 | | -! FOR THE COLUMNS. IF A DIFFERENT NUMBER OF COLUMNS IS REQUIRED, |
63 | | -! CHANGE FORMATS 1000 AND 2000, AND INITIALIZE KCOL WITH THE NEW NUMBER |
64 | | -! OF COLUMNS. |
65 | | -! AUTHOR; NELSON H.F. BEEBE, QUANTUM THEORY PROJECT, UNIVERSITY OF |
66 | | -! FLORIDA, GAINESVILLE |
67 | | -! REVISED; FEBRUARY 26, 1971 |
68 | | -!....................................................................... |
| 36 | + ! Dalton, Release 2.0, pdpack/printpkg.F |
| 37 | + ! |
| 38 | + ! These routines are in the public domain and can be |
| 39 | + ! used freely in other programs. |
| 40 | + ! Copied to PEDRA by Roberto Di Remigio, 2013 |
| 41 | + subroutine output(amatrx, rowlow, rowhi, collow, colhi, rowdim, coldim, nctl, lvpri) |
| 42 | + !....................................................................... |
| 43 | + ! Revised 15-Dec-1983 by Hans Jorgen Aa. Jensen. |
| 44 | + ! 16-Jun-1986 hjaaj ( removed Hollerith ) |
| 45 | + ! OUTPUT PRINTS A REAL MATRIX IN FORMATTED FORM WITH NUMBERED ROWS |
| 46 | + ! AND COLUMNS. THE INPUT IS AS FOLLOWS; |
| 47 | + ! AMATRX(',').........MATRIX TO BE OUTPUT |
| 48 | + ! ROWLOW..............ROW NUMBER AT WHICH OUTPUT IS TO BEGIN |
| 49 | + ! ROWHI...............ROW NUMBER AT WHICH OUTPUT IS TO END |
| 50 | + ! COLLOW..............COLUMN NUMBER AT WHICH OUTPUT IS TO BEGIN |
| 51 | + ! COLHI...............COLUMN NUMBER AT WHICH OUTPUT IS TO END |
| 52 | + ! ROWDIM..............ROW DIMENSION OF AMATRX(',') |
| 53 | + ! COLDIM..............COLUMN DIMENSION OF AMATRX(',') |
| 54 | + ! NCTL................CARRIAGE CONTROL FLAG; 1 FOR SINGLE SPACE |
| 55 | + ! 2 FOR DOUBLE SPACE |
| 56 | + ! 3 FOR TRIPLE SPACE |
| 57 | + ! hjaaj: negative for 132 col width |
| 58 | + ! THE PARAMETERS THAT FOLLOW MATRIX ARE ALL OF TYPE INTEGER*4. THE |
| 59 | + ! PROGRAM IS SET UP TO HANDLE 5 COLUMNS/PAGE WITH A 1P,5D24.15 FORMAT |
| 60 | + ! FOR THE COLUMNS. IF A DIFFERENT NUMBER OF COLUMNS IS REQUIRED, |
| 61 | + ! CHANGE FORMATS 1000 AND 2000, AND INITIALIZE KCOL WITH THE NEW NUMBER |
| 62 | + ! OF COLUMNS. |
| 63 | + ! AUTHOR; NELSON H.F. BEEBE, QUANTUM THEORY PROJECT, UNIVERSITY OF |
| 64 | + ! FLORIDA, GAINESVILLE |
| 65 | + ! REVISED; FEBRUARY 26, 1971 |
| 66 | + !....................................................................... |
69 | 67 |
|
70 | 68 | integer(kind=regint_k), intent(in) :: rowlow, rowhi |
71 | 69 | integer(kind=regint_k), intent(in) :: collow, colhi |
72 | 70 | integer(kind=regint_k), intent(in) :: rowdim, coldim |
73 | 71 | integer(kind=regint_k), intent(in) :: nctl, lvpri |
74 | | - real(kind=dp), intent(in) :: amatrx(rowdim, coldim) |
| 72 | + real(kind=dp), intent(in) :: amatrx(rowdim, coldim) |
75 | 73 | integer(kind=regint_k) :: begin, kcol |
76 | | - CHARACTER(1) :: ASA(3), BLANK, CTL |
77 | | - CHARACTER PFMT*20, COLUMN*8 |
78 | | - real(kind=dp), parameter :: zero = 0.0d0, ffmin = 1.0d-03, ffmax = 1.0d03 |
| 74 | + character(1) :: asa(3), blank, ctl |
| 75 | + character pfmt*20, column*8 |
| 76 | + real(kind=dp), parameter :: zero = 0.0_dp, ffmin = 1.0e-3_dp, ffmax = 1.0e3_dp |
79 | 77 | integer(kind=regint_k), parameter :: kcolp = 5, kcoln = 8 |
80 | 78 | DATA COLUMN/'Column '/, BLANK/' '/, ASA/' ', '0', '-'/ |
81 | 79 |
|
82 | 80 | real(kind=dp) :: amax, thrpri |
83 | | - integer(kind=regint_k) :: i, j, k, mctl, last |
| 81 | + integer(kind=regint_k) :: i, j, k, l, mctl, last |
84 | 82 |
|
85 | | - IF (ROWHI < ROWLOW) go to 3 |
86 | | - IF (COLHI < COLLOW) go to 3 |
| 83 | + if (rowhi < rowlow) return |
| 84 | + if (colhi < collow) return |
87 | 85 |
|
88 | | - AMAX = ZERO |
89 | | - DO J = COLLOW,COLHI |
90 | | - DO I = ROWLOW,ROWHI |
91 | | - AMAX = MAX( AMAX, ABS(AMATRX(I,J)) ) |
| 86 | + amax = zero |
| 87 | + do j = collow,colhi |
| 88 | + do i = rowlow,rowhi |
| 89 | + amax = max(amax, abs(amatrx(i, j))) |
92 | 90 | end do |
93 | 91 | end do |
94 | | - IF (AMAX == ZERO) THEN |
95 | | - WRITE (LVPRI,'(/T6,A)') 'Zero matrix.' |
96 | | - go to 3 |
| 92 | + if (amax == zero) then |
| 93 | + write (lvpri,'(/t6,a)') 'Zero matrix' |
| 94 | + return |
97 | 95 | end if |
98 | | - IF (FFMIN <= AMAX .AND. AMAX < FFMAX) THEN |
| 96 | + if (ffmin <= amax .and. amax < ffmax) then |
99 | 97 | ! use F output format |
100 | | - PFMT = '(A1,I7,2X,8F14.8)' |
101 | | - thrpri = 0.5D-8 |
102 | | - ELSE |
| 98 | + pfmt = '(a1,i7,2x,8f14.8)' |
| 99 | + thrpri = 0.5e-8_dp |
| 100 | + else |
103 | 101 | ! use 1PD output format |
104 | | - PFMT = '(A1,I7,2X,1P,8D14.6)' |
105 | | - thrpri = 1.0D-8*AMAX |
| 102 | + pfmt = '(a1,i7,2x,1p,8d14.6)' |
| 103 | + thrpri = 1.0e-8_dp * amax |
106 | 104 | end if |
107 | 105 |
|
108 | | - IF (NCTL < 0) THEN |
109 | | - KCOL = KCOLN |
110 | | - ELSE |
111 | | - KCOL = KCOLP |
| 106 | + if (nctl < 0) then |
| 107 | + kcol = kcoln |
| 108 | + else |
| 109 | + kcol = kcolp |
112 | 110 | end if |
113 | | - MCTL = ABS(NCTL) |
114 | | - IF ((MCTL <= 3) .AND. (MCTL > 0)) THEN |
115 | | - CTL = ASA(MCTL) |
116 | | - ELSE |
117 | | - CTL = BLANK |
| 111 | + mctl = abs(nctl) |
| 112 | + if ((mctl <= 3) .and. (mctl > 0)) then |
| 113 | + ctl = asa(mctl) |
| 114 | + else |
| 115 | + ctl = blank |
118 | 116 | end if |
119 | 117 |
|
120 | | - LAST = MIN(COLHI,COLLOW+KCOL-1_regint_k) |
121 | | - DO 2 BEGIN = COLLOW,COLHI,KCOL |
122 | | - WRITE (LVPRI,1000) (COLUMN,I,I = BEGIN,LAST) |
123 | | - DO 1 K = ROWLOW,ROWHI |
124 | | - DO 4 I = BEGIN,LAST |
125 | | - IF (abs(AMATRX(K,I)) > thrpri) go to 5 |
126 | | - 4 end do |
127 | | - go to 1 |
128 | | - 5 WRITE (LVPRI,PFMT) CTL,K,(AMATRX(K,I), I = BEGIN,LAST) |
129 | | - 1 end do |
130 | | - LAST = MIN(LAST+KCOL,COLHI) |
131 | | - 2 end do |
132 | | - 3 RETURN |
133 | | - 1000 FORMAT (/10X,8(4X,A6,I4)) |
134 | | -! 2000 FORMAT (A1,'Row',I4,2X,1P,8D14.6) |
135 | | -! 2000 FORMAT (A1,I7,2X,1P,8D14.6) |
136 | | - END SUBROUTINE OUTPUT |
| 118 | + last = min(colhi, collow + kcol - 1_regint_k) |
| 119 | + do begin = collow,colhi,kcol |
| 120 | + write(lvpri, 1000) (column, i, i = begin, last) |
| 121 | + do k = rowlow, rowhi |
| 122 | + do i = begin, last |
| 123 | + if (abs(amatrx(k, i)) > thrpri) then |
| 124 | + write (lvpri, pfmt) ctl, k, (amatrx(k, l), l = begin, last) |
| 125 | + exit |
| 126 | + end if |
| 127 | + end do |
| 128 | + end do |
| 129 | + last = min(last + kcol, colhi) |
| 130 | + end do |
| 131 | + 1000 format (/10x,8(4x,a6,i4)) |
| 132 | + end subroutine output |
137 | 133 |
|
138 | | - end module |
| 134 | +end module |
0 commit comments