Millepede-II  V04-00-00_preview
 All Classes Files Functions Variables Enumerator Pages
vertpr.f90
Go to the documentation of this file.
1 
2 ! Code converted using TO_F90 by Alan Miller
3 ! Date: 2012-03-16 Time: 11:09:42
4 
7 
14 
15 SUBROUTINE pzvert(n,x)
16  IMPLICIT NONE
17  INTEGER :: i
18  INTEGER :: i1
19  INTEGER :: i2
20  INTEGER :: ia
21  INTEGER :: ij
22  INTEGER :: im
23  INTEGER :: in
24  INTEGER :: iz
25  INTEGER :: j
26  INTEGER :: jl
27  INTEGER :: jm
28  INTEGER :: ke
29  INTEGER :: kl
30  INTEGER :: kn
31  INTEGER :: lc
32  INTEGER :: m
33  INTEGER :: mx
34  REAL :: fac
35  REAL :: xm
36  !
37 
38  INTEGER, INTENT(IN) :: n
39  REAL, INTENT(IN) :: x(n)
40  INTEGER, PARAMETER :: nn=6
41 
42  CHARACTER (LEN=66):: px(10)
43  CHARACTER (LEN=66)::ch(10)*1
44  SAVE
45  DATA ch/'0','1','2','3','4','5','6','7','8','9'/
46  ! ...
47  IF(n <= 0) return
48  jm=0
49  DO i=1,10
50  px(i)=' '
51  END DO
52 
53  m=min(60,n)
54  jl=0
55  xm=0.0
56  DO j=1,m
57  IF(abs(x(j)) > xm) THEN
58  xm=abs(x(j))
59  mx=j ! index of max
60  END IF
61  IF(x(j) < 0.0) px(1)(6+j:6+j)='-' ! negative columns
62  IF(x(j) /= 0.0) jl=j ! last non-zero column
63  END DO
64  IF(xm == 0.0.OR.jl <= 0) return ! empty array
65  jl=60
66 
67  kn=min(6,max(2,iabs(nn)))
68  ke=int(alog10(xm*1.0001))
69  IF(xm < 1.0) ke=ke-1
70 22 fac=10.0**(kn-1-ke)
71  ij=int(fac*xm+0.5)
72  IF(ij >= 10**kn) THEN
73  ke=ke+1
74  go to 22
75  END IF
76  ia=2+kn
77 
78  DO j=1,jl
79  ij=int(fac*abs(x(j))+0.5) ! convert to integer
80  im=0
81  IF(ij /= 0) THEN
82  DO i=1,kn
83  IF(ij /= 0) THEN
84  in=mod(ij,10) ! last digit
85  ij=ij/10 ! reduce
86  IF(in /= 0.AND.im == 0) im=ia-i+1
87  px(ia-i)(6+j:6+j)=ch(in+1)
88  END IF
89  END DO
90  END IF
91  jm=max(im,jm)
92  END DO
93 
94  kl=ke
95 50 IF(ke >= kn) THEN
96  ke=ke-3
97  go to 50
98  END IF
99 55 IF(ke < 0) THEN
100  ke=ke+3
101  go to 55
102  END IF
103 
104  in=ke+2 ! exponent
105  iz=kl-ke
106  px(in)(6:6)='.'
107  px(in)(1:1)='E'
108  IF(iz < 0) THEN
109  px(in)(2:2)='-'
110  iz=-iz
111  END IF
112  i1=iz/10 ! insert exponent
113  i2=mod(iz,10)
114  px(in)(3:3)=ch(i1+1)
115  px(in)(4:4)=ch(i2+1)
116  jm=min(2+kn,jm)
117  jm=max(in+1,jm)
118  DO j=1,jl ! '0' for small nonzero values
119  IF(x(j) /= 0.0.AND.px(jm-1)(6+j:6+j) == ' ') px(jm-1)(6+j:6+j)='0'
120  END DO
121  DO i=jm,8
122  px(i)=' '
123  END DO
124 
125  DO j=1,((jl+9)/10)*10 ! index line below
126  IF(px(jm-1)(6+j:6+j) == ' ') px(jm-1)(6+j:6+j)='_'
127  IF(mod(j,2) /= 1) THEN
128  i=mod(j,10)+1
129  px(jm+1)(6+j:6+j)=ch(i) ! last digit of even bin numbers
130  IF(i == 1) THEN ! ten'th column
131  i=mod(j/10,10)+1
132  px(jm)(6+j:6+j)=ch(i)
133 
134  END IF
135  END IF
136  END DO
137 
138  DO j=1,jl
139  IF(x(j) == x(mx)) THEN
140  px(jm)(6+j:6+j)='*' ! * in max bin
141  END IF
142  END DO
143 
144  jm=jm+1
145  IF(nn < 0) jm=jm-2 ! no index line
146  lc=((jl+9)/10)*10+6
147  DO j=1,jm
148  WRITE(*,*) px(j)(1:lc) ! print
149  ! WRITE(*,101) PX(J)(1:LC) ! print
150  END DO
151  return
152 ! 101 FORMAT(A)
153 END SUBROUTINE pzvert
154 
161 
162 SUBROUTINE pivert(n,list) !
163  IMPLICIT NONE
164  INTEGER :: i
165  INTEGER :: l
166  INTEGER :: ll
167  INTEGER :: m
168  INTEGER :: nhist
169 
170  INTEGER, INTENT(IN) :: n
171  INTEGER, INTENT(IN) :: list(n)
172 
173 
174  REAL :: y(60)
175 
176  SAVE
177  ! ...
178  ll=(n+59)/60 ! compression factor
179  m=0
180  i=0
181 10 nhist=0
182  DO l=1,ll
183  IF(i+l <= n) nhist=nhist+list(i+l)
184  END DO
185  i=i+ll
186  m=m+1
187  y(m)=nhist
188  IF(i < n) go to 10
189  CALL pzvert(m,y)
190  return
191 END SUBROUTINE pivert
192 
199 
200 SUBROUTINE pfvert(n,x) ! vert. print fltpt data
201  IMPLICIT NONE
202  REAL :: dsum
203  INTEGER :: i
204  INTEGER :: l
205  INTEGER :: ll
206  INTEGER :: m
207  REAL :: y(60)
208 
209  INTEGER, INTENT(IN) :: n
210  INTEGER, INTENT(IN) :: x(n)
211 
212  ll=(n+59)/60 ! compression factor
213  m=0
214  i=0
215 20 dsum=0.0
216  DO l=1,ll
217  IF(i+l <= n) dsum=dsum+x(i+l)
218  END DO
219  i=i+ll
220  m=m+1
221  y(m)=REAL(dsum)
222  IF(i < n) go to 20
223  CALL pzvert(m,y)
224  return
225 END SUBROUTINE pfvert
226 
231 
232 SUBROUTINE psvert(xa,xb) ! print scale
233  IMPLICIT NONE
234  INTEGER:: i
235  REAL:: xc
236  ! print scale from XA ... XB
237 
238 
239  REAL, INTENT(IN) :: xa
240  REAL, INTENT(IN) :: xb
241  REAL:: sc(7)
242  xc=xb
243  DO i=1,7
244  sc(i)=(float(7-i)*xa+float(i-1)*xc)/6.0
245  END DO
246  WRITE(*,101) sc
247 101 format(3x,7g10.3)
248  return
249 END SUBROUTINE psvert
250