]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/kernlib/kerngen/tcgen/sortzv.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / kernlib / kerngen / tcgen / sortzv.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/02/15 17:49:50 mclareni
6* Kernlib
7*
8*
9#include "kerngen/pilot.h"
10 SUBROUTINE SORTZV (A,INDEX,N1,MODE,NWAY,NSORT)
11C
12C CERN PROGLIB# M101 SORTZV .VERSION KERNFOR 3.15 820113
13C ORIG. 02/10/75
14C
15 DIMENSION A(N1),INDEX(N1)
16C
17C
18 N = N1
19 IF (N.LE.0) RETURN
20 IF (NSORT.NE.0) GO TO 2
21 DO 1 I=1,N
22 1 INDEX(I)=I
23C
24 2 IF (N.EQ.1) RETURN
25 IF (MODE) 10,20,30
26 10 CALL SORTTI (A,INDEX,N)
27 GO TO 40
28C
29 20 CALL SORTTC(A,INDEX,N)
30 GO TO 40
31C
32 30 CALL SORTTF (A,INDEX,N)
33C
34 40 IF (NWAY.EQ.0) GO TO 50
35 N2 = N/2
36 DO 41 I=1,N2
37 ISWAP = INDEX(I)
38 K = N+1-I
39 INDEX(I) = INDEX(K)
40 41 INDEX(K) = ISWAP
41 50 RETURN
42 END
43* ========================================
44 SUBROUTINE SORTTF (A,INDEX,N1)
45C
46 DIMENSION A(N1),INDEX(N1)
47C
48 N = N1
49 DO 3 I1=2,N
50 I3 = I1
51 I33 = INDEX(I3)
52 AI = A(I33)
53 1 I2 = I3/2
54 IF (I2) 3,3,2
55 2 I22 = INDEX(I2)
56 IF (AI.LE.A (I22)) GO TO 3
57 INDEX (I3) = I22
58 I3 = I2
59 GO TO 1
60 3 INDEX (I3) = I33
61 4 I3 = INDEX (N)
62 INDEX (N) = INDEX (1)
63 AI = A(I3)
64 N = N-1
65 IF (N-1) 12,12,5
66 5 I1 = 1
67 6 I2 = I1 + I1
68 IF (I2.LE.N) I22= INDEX(I2)
69 IF (I2-N) 7,9,11
70 7 I222 = INDEX (I2+1)
71 IF (A(I22)-A(I222)) 8,9,9
72 8 I2 = I2+1
73 I22 = I222
74 9 IF (AI-A(I22)) 10,11,11
75 10 INDEX(I1) = I22
76 I1 = I2
77 GO TO 6
78 11 INDEX (I1) = I3
79 GO TO 4
80 12 INDEX (1) = I3
81 RETURN
82 END
83* ========================================
84 SUBROUTINE SORTTI (A,INDEX,N1)
85C
86 INTEGER A,AI
87 DIMENSION A(N1),INDEX(N1)
88C
89 N = N1
90 DO 3 I1=2,N
91 I3 = I1
92 I33 = INDEX(I3)
93 AI = A(I33)
94 1 I2 = I3/2
95 IF (I2) 3,3,2
96 2 I22 = INDEX(I2)
97 IF (AI.LE.A (I22)) GO TO 3
98 INDEX (I3) = I22
99 I3 = I2
100 GO TO 1
101 3 INDEX (I3) = I33
102 4 I3 = INDEX (N)
103 INDEX (N) = INDEX (1)
104 AI = A(I3)
105 N = N-1
106 IF (N-1) 12,12,5
107 5 I1 = 1
108 6 I2 = I1 + I1
109 IF (I2.LE.N) I22= INDEX(I2)
110 IF (I2-N) 7,9,11
111 7 I222 = INDEX (I2+1)
112 IF (A(I22)-A(I222)) 8,9,9
113 8 I2 = I2+1
114 I22 = I222
115 9 IF (AI-A(I22)) 10,11,11
116 10 INDEX(I1) = I22
117 I1 = I2
118 GO TO 6
119 11 INDEX (I1) = I3
120 GO TO 4
121 12 INDEX (1) = I3
122 RETURN
123 END
124* ========================================
125 SUBROUTINE SORTTC (A,INDEX,N1)
126C
127 INTEGER A,AI
128 DIMENSION A(N1),INDEX(N1)
129C
130 N = N1
131 DO 3 I1=2,N
132 I3 = I1
133 I33 = INDEX(I3)
134 AI = A(I33)
135 1 I2 = I3/2
136 IF (I2) 3,3,2
137 2 I22 = INDEX(I2)
138 IF(ICMPCH(AI,A(I22)))3,3,21
139 21 INDEX (I3) = I22
140 I3 = I2
141 GO TO 1
142 3 INDEX (I3) = I33
143 4 I3 = INDEX (N)
144 INDEX (N) = INDEX (1)
145 AI = A(I3)
146 N = N-1
147 IF (N-1) 12,12,5
148 5 I1 = 1
149 6 I2 = I1 + I1
150 IF (I2.LE.N) I22= INDEX(I2)
151 IF (I2-N) 7,9,11
152 7 I222 = INDEX (I2+1)
153 IF (ICMPCH(A(I22),A(I222))) 8,9,9
154 8 I2 = I2+1
155 I22 = I222
156 9 IF (ICMPCH(AI,A(I22))) 10,11,11
157 10 INDEX(I1) = I22
158 I1 = I2
159 GO TO 6
160 11 INDEX (I1) = I3
161 GO TO 4
162 12 INDEX (1) = I3
163 RETURN
164 END
165* ========================================
166 FUNCTION ICMPCH(IC1,IC2)
167C FUNCTION TO COMPARE TWO 4 CHARACTER EBCDIC STRINGS - IC1,IC2
168C ICMPCH=-1 IF HEX VALUE OF IC1 IS LESS THAN IC2
169C ICMPCH=0 IF HEX VALUES OF IC1 AND IC2 ARE THE SAME
170C ICMPCH=+1 IF HEX VALUES OF IC1 IS GREATER THAN IC2
171 I1=IC1
172 I2=IC2
173 IF(I1.GE.0.AND.I2.GE.0)GOTO 40
174 IF(I1.GE.0)GOTO 60
175 IF(I2.GE.0)GOTO 80
176 I1=-I1
177 I2=-I2
178 IF(I1-I2)80,70,60
179 40 IF(I1-I2)60,70,80
180 60 ICMPCH=-1
181 RETURN
182 70 ICMPCH=0
183 RETURN
184 80 ICMPCH=1
185 RETURN
186 END