aboutsummaryrefslogtreecommitdiff
path: root/sys/gio/ncarutil/conlib/conreo.f
blob: c029c0bbf0c608e055a1040bb4c326f745b27303 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
SUBROUTINE CONREO (MAJLNS)
C                                                                               
C +-----------------------------------------------------------------+           
C |                                                                 |           
C |                Copyright (C) 1986 by UCAR                       |           
C |        University Corporation for Atmospheric Research          |           
C |                    All Rights Reserved                          |           
C |                                                                 |           
C |                 NCARGRAPHICS  Version 1.00                      |           
C |                                                                 |           
C +-----------------------------------------------------------------+           
C                                                                               
C                                                                               
C
C THIS ROUTINE PUTS THE MAJOR (LABELED) LEVELS IN THE BEGINNING OF CL
C AND THE MINOR (UNLABELED) LEVELS IN END OF CL.  THE NUMBER OF MAJOR
C LEVELS IS RETURNED IN MAJLNS.  PV IS USED AS A WORK SPACE.  MINGAP IS
C THE NUMBER OF MINOR GAPS (ONE MORE THAN THE NUMBER OF MINOR LEVELS
C BETWEEN MAJOR LEVELS).
C
      COMMON /CONRA1/ CL(30)     ,NCL        ,OLDZ       ,PV(210)    ,
     1                FINC       ,HI         ,FLO
      COMMON /CONRA2/ REPEAT     ,EXTRAP     ,PER        ,MESS       ,
     1                ISCALE     ,LOOK       ,PLDVLS     ,GRD        ,
     2                CINC       ,CHILO      ,CON        ,LABON      ,
     3                PMIMX      ,SCALE      ,FRADV      ,EXTRI      ,
     4                BPSIZ      ,LISTOP
      COMMON /CONRA7/ TITLE      ,ICNT   ,ITLSIZ
      COMMON /CONR11/ NREP       ,NCRT       ,ISIZEL     ,
     1                MINGAP     ,ISIZEM         ,
     2                TENS
      LOGICAL         REPEAT     ,EXTRAP     ,PER        ,MESS       ,
     1                LOOK       ,PLDVLS     ,GRD        ,LABON      ,
     2                PMIMX      ,FRADV      ,EXTRI      ,CINC       ,
     3                TITLE      ,LISTOP     ,CHILO      ,CON
        COMMON /CONR17/ NDASH, IDASH, EDASH
        CHARACTER*10    NDASH, IDASH, EDASH
C
        SAVE
C
      NL = NCL
      IF (NL.LE.4 .OR. MINGAP.LE.1) GO TO   160
      NML = MINGAP-1
      IF (NL.LE.10) NML = 1
C
C CHECK FOR BREAK POINT IN THE LIST OF CONTOURS FOR A MAJOR LINE
C
      NMLP1 = NML+1
          DO    10 I=1,NL
          ISAVE = I
          IF (CL(I).EQ.BPSIZ) GO TO    40
   10     CONTINUE
C
C  NO BREAKPOINT FOUND SO TRY FOR A NICE NUMBER
C
      L = NL/2
      L = ALOG10( ABS( CL(L) ) )+1.
      Q = 10.**L
          DO    30 J=1,3
          Q = Q/10.
              DO    20 I=1,NL
              ISAVE = I
              IF (AMOD( ABS( CL(I) + 1.E-9*CL(I) )/Q,FLOAT(NMLP1) ).LE.
     1            .0001) GO TO    40
   20         CONTINUE
   30     CONTINUE
      ISAVE = NL/2
C
C PUT MAJOR LEVELS IN PV
C
   40 ISTART = MOD(ISAVE,NMLP1)
      IF (ISTART.EQ.0) ISTART = NMLP1
      NMAJL = 0
          DO    50 I=ISTART,NL,NMLP1
          NMAJL = NMAJL+1
          PV(NMAJL) = CL(I)
   50     CONTINUE
      MAJLNS = NMAJL
      L = NMAJL
C
C PUT MINOR LEVELS IN PV
C
      IC = NML/2 + 1
      L = MAJLNS+1
          DO   100 LOOP=1,NML
          IC1 = IC
              DO    90 IWCH=1,2
              IF (LOOP.EQ.1) GO TO    60
              IC1 = IC+(LOOP-1)
              IF (IWCH.EQ.2) IC1 = IC-(LOOP-1)
              IF (IC1.GE.NMLP1) GO TO    90
              IF (IC1.LE.0) GO TO    90
   60             DO    70 K=ISTART,NL,NMLP1
                  IND = K+IC1
                  IF (IND.GT.NL) GO TO    80
                  PV(L) = CL(IND)
                  L = L+1
   70             CONTINUE
   80         IF (LOOP.EQ.1) GO TO   100
   90         CONTINUE
  100     CONTINUE
C
C  IF MAJOR LINES DID NOT START ON THE FIRST ENTRY PICK UP THE MISSING
C  LEVELS
C
      IF (ISTART.EQ.1) GO TO   140
          DO   130 LOOP=1,NML
          IC1 = IC
              DO   120 IWCH=1,2
              IF (LOOP.EQ.1) GO TO   110
              IC1 = IC+(LOOP-1)
              IF (IWCH.EQ.2) IC1 = IC-(LOOP-1)
  110         IF (IC1.GE.ISTART) GO TO   120
              IF (IC1.LE.0) GO TO   120
              PV(L) = CL(IC1)
              L = L+1
              IF (LOOP.EQ.1) GO TO   130
  120         CONTINUE
  130     CONTINUE
C
C PUT REORDERED ARRAY BACK IN ORIGINAL PLACE
C
  140     DO   150 I=1,NL
          CL(I) = PV(I)
  150     CONTINUE
      RETURN
  160 MAJLNS = NL
      RETURN
      END