fe4da5cc |
1 | * |
2 | * $Id$ |
3 | * |
4 | * $Log$ |
5 | * Revision 1.1.1.1 1996/04/01 15:02:51 mclareni |
6 | * Mathlib gen |
7 | * |
8 | * |
9 | #include "gen/pilot.h" |
10 | #if defined(CERNLIB_QMIBMVF) |
11 | @PROCESS DIRECTIVE('*VDIR:') VECTOR |
12 | #endif |
13 | SUBROUTINE SORTDQ(A,NC,NR,NS) |
14 | DOUBLE PRECISION A(NC,NR),X |
15 | #if defined(CERNLIB_CRAY) |
16 | DOUBLE PRECISION TEMP |
17 | #endif |
18 | INTEGER LT(20),RT(20),R |
19 | C |
20 | NCS = ABS(NS) |
21 | LEVEL=1 |
22 | LT(1)=1 |
23 | RT(1)=NR |
24 | 10 L=LT(LEVEL) |
25 | R=RT(LEVEL) |
26 | LEVEL=LEVEL-1 |
27 | 20 IF(R.LE.L) IF(LEVEL) 90,90,10 |
28 | C |
29 | C SUBDIVIDE THE INTERVAL L,R |
30 | C L : LOWER LIMIT OF THE INTERVAL (INPUT) |
31 | C R : UPPER LIMIT OF THE INTERVAL (INPUT) |
32 | C J : UPPER LIMIT OF LOWER SUB-INTERVAL (OUTPUT) |
33 | C I : LOWER LIMIT OF UPPER SUB-INTERVAL (OUTPUT) |
34 | C |
35 | I=L |
36 | J=R |
37 | M=(L+R)/2 |
38 | X=A(NCS,M) |
39 | 30 IF(A(NCS,I).GE.X) GO TO 40 |
40 | I=I+1 |
41 | GO TO 30 |
42 | 40 IF(A(NCS,J).LE.X) GO TO 50 |
43 | J=J-1 |
44 | GO TO 40 |
45 | C |
46 | 50 IF(I.GT.J) GO TO 70 |
47 | #if defined(CERNLIB_DOUBLE)||defined(CERNLIB_CDC) |
48 | CALL USWOP(A(1,I),A(1,J),2*NC) |
49 | #endif |
50 | #if defined(CERNLIB_CRAY) |
51 | DO 60 K=1, NC |
52 | TEMP = A(K,I) |
53 | A(K,I) = A(K,J) |
54 | A(K,J) = TEMP |
55 | 60 CONTINUE |
56 | #endif |
57 | I=I+1 |
58 | J=J-1 |
59 | IF(I.LE.J) GO TO 30 |
60 | C |
61 | 70 LEVEL=LEVEL+1 |
62 | IF((R-I).GE.(J-L)) GO TO 80 |
63 | LT(LEVEL)=L |
64 | RT(LEVEL)=J |
65 | L=I |
66 | GO TO 20 |
67 | 80 LT(LEVEL)=I |
68 | RT(LEVEL)=R |
69 | R=J |
70 | GO TO 20 |
71 | 90 IF(NS.GT.0) RETURN |
72 | C REVERSE THE ORDER OF THE ROWS IF NS NEGATIVE |
73 | NRH=NR/2 |
74 | DO 110 I=1,NRH |
75 | #if (defined(CERNLIB_DOUBLE)||defined(CERNLIB_CDC))&&(!defined(CERNLIB_QMIBMVF)) |
76 | CALL USWOP(A(1,I),A(1,NR+1-I),2*NC) |
77 | #endif |
78 | #if defined(CERNLIB_CRAY)||defined(CERNLIB_QMIBMVF) |
79 | DO 100 K=1, NC |
80 | TEMP = A(K,I) |
81 | A(K,I) = A(K,NR+1-I) |
82 | A(K,NR+1-I) = TEMP |
83 | 100 CONTINUE |
84 | #endif |
85 | 110 CONTINUE |
86 | END |