      PROGRAM ZLNPLOT 
C     PROGRAM ZLNPLOT (ZXIN,     ZXU,      ZXW,      ZXIN2,      INPUT, 
C    1                                                           OUTPUT, 
C    2          TAPE1=ZXIN,TAPE2=ZXU,TAPE3=ZXW,TAPE4=ZXIN2,TAPE5=INPUT, 
C    3                                                     TAPE6=OUTPUT) 
C     ------------------------------------------------------------------ 
C 
C     FEB 17/88 - F.MAJAESS   (ADD SHADING, SECOND SCALAR FIELD AND 
C                              SUBAREA PLOT OPTIONS. ALSO, IMPLEMENT 
C                              OVRLY SWITCH ALLOWING FINE AND COARSE 
C                              GRID INTERPOLATION). 
C     JUL 01/87 - M.SUTCLIFFE (ADAPT FROM ZXPLOT) 
C 
CZLNPLOT - CREATES NCAR PLOT VECTORS FOR ONE MERIDIONAL CROSS-SECTION 
C 
CAUTHOR  - M.SUTCLIFFE 
C 
CPURPOSE - PLOTS LONGITUDE-PRESSURE FROM FILE ZXIN, AND POSSIBLY ZXIN2, 
C          AND/OR MERIDIONALLY AVERAGED VECTOR COMPONENTS ZXU AND ZXW. 
C          NOTE - ONE LEVEL CROSS-SECTIONS ARE ILLEGAL - PROGRAM STOPS. 
C                 2 OR 3 LEVEL PLOTS USE LINEAR INTERPOLATION. 
C                 4 OR MORE LEVELS ALLOWS OPTION OF CUBIC INTERPOLATION. 
C                 IF TWO SCALAR FIELDS ARE PLOTTED, THE SECOND FIELD 
C                 WILL BE CONTOURED WITH A DASHED LINE, AND A '+' WILL 
C                 MARK THE HIGHS AND LOWS. CROSS-SECTIONS CAN BE PLOTTED 
C                 WITH LON 0 OR 180 IN THE CENTRE WITH THE PLOT EXTENDIN 
C                 FROM PR(NLEV) TO PR(1) AT THE TOP, OR FROM DPR1 TO DPR 
C                 IF PLOTTING A SUBAREA, (SEE DOCUMENTATION BELOW). THE 
C                 VERTICAL AXIS CAN BE PRESSURE OR LOG(PRESSURE). 
C                 MAXIMUM INPUT LEVELS IS 20 AND MAXIMUM LATITUDES IS 20 
C 
CINPUT FILES... 
C 
C      ZXIN  = FILE CONTAINING MERIDIONAL CROSS-SECTIONS TO BE PLOTTED. 
C      ZXU   = ZONAL COMPONENT OF VECTOR FIELD. 
C      ZXW   = VERTICAL COMPONENT OF VECTOR FIELD. 
C      ZXIN2 = OPTIONAL FILE CONTAINING A SECOND MERIDONAL CROSS-SECTION 
C              SCALAR FIELD TO BE PLOTTED. 
C 
CCARDS READ... 
C 
C      2 TO 11 CARDS ARE READ-IN. 
C 
C      FOR CROSS-SECTION MAP... 
C      ===================== 
C      CARD 1- 
C      ------ 
C  150 READ(5,5010,END=900)NAME,MOD,ICOSH1,ICOSH2,MS,LX,SCAL, 
C     1                    FLO,HI,FINC,KAX,IOVRLY,KIND 
C 5010 FORMAT(10X,1X,A4,I5,2I1,I3,I5,4E10.0,I5,1X,2I2) 
C 
C      NAME       NAME OF THE VARIABLE TO BE CONTOURED. 
C      ABS(MOD)   =0, ONLY CONTOUR MAP (2 CARDS PER PLOT). 
C                 =1, ONLY VECTOR PLOT (CARD 1 USED ONLY TO DEFINE MOD, 
C                     AND LX, CARD 2 IS IGNORED, AND CARDS 3 AND 4 USED 
C                     FOR VECTOR PLOT DIRECTIVES). 
C                 =2, BOTH FUNCTIONS ARE PERFORMED (4 CARDS PER PLOT). 
C                 =3, ONLY CONTOUR MAP (HIGHS/LOWS LABELLED). 
C                 =4, TWO SCALAR FIELDS. 
C                 =5, TWO SCALAR FIELDS AND A VECTOR FIELD. 
C      MOD.GE.0   HIGHS/LOWS NOT LABELLED 
C          LT.0   HIGHS/LOWS LABELLED 
C      ICOSH1     CONTOUR/SHADING CONTROL FOR FIRST  SCALAR FIELD 
C      ICOSH2     CONTOUR/SHADING CONTROL FOR SECOND SCALAR FIELD 
C                 =0, CONTOUR LINES 
C                 =1, CONTOUR LINES, NO ZERO LINE 
C                 =2, CONTOUR LINES AND SHADING 
C                 =3, CONTOUR LINE AND SHADING, NO ZERO LINE 
C                 =4, SHADING ONLY 
C                 NOTE - FOR THE NO ZERO LINE OPTION IT IS ASSUMED THAT 
C                        (0.-FLO)/FINC RESULTS IN AN INTEGER DIVISIBLE B 
C                        TWO, I.E. THE ZERO LINE WOULD HAVE BEEN CONTOUR 
C                        AS A THICK, LABELLED LINE. ALSO, NEITHER HI OR 
C                        FLO = 0. 
C      MS         LINE PRINTER MAP SCALE FACTOR (NO MAP IF MS=0,-1) 
C                 IF MS < 0 THEN MS=ABS(MS+1) AND THE PUBLICATION 
C                 QUALITY OPTION IS SET. 
C      ABS(LX)    <= 3 FINE GRID INTERPOLATION IS INDICATED WITH THE 
C                      NUMBER OF LEVELS IN THE DISPLAY PLOT = 2*NLON/3. 
C                      (NLON IS THE NUMBER OF LONGITUDINAL POINTS). 
C                 OTHERWISE, A COARSE GRID INTERPOLATION IS INDICATED 
C                            WITH ABS(LX) LEVELS IN THE DISPLAY PLOT. 
C                 LX < 0, SUBAREA INDICATED WITH COORDINATES GIVEN ON CA 
C      SCAL       SCALING FACTOR 
C      FLO        LOWEST  VALUE TO BE CONTOURED 
C      HI         HIGHEST VALUE TO BE CONTOURED 
C      FINC       CONTOUR INTERVAL (A MAX. OF 40 CONTOURS IS PERMITTED) 
C      KAX        =0, FOR VERTICAL AXIS OF PRESSURE, LON 0 IN THE MIDDLE 
C                 =1, FOR VERTICAL AXIS OF LOG(PRESSURE), LON 0 IN MIDDL 
C                 =2, FOR VERTICAL AXIS OF PRESSURE, LON 180 IN THE MIDD 
C                 =3, FOR VERTICAL AXIS OF LOG(PRESSURE), LON 180 IN MID 
C                 THIS IS FOR FULL (NO SUBAREA) PLOTS ONLY. IF DOING SUB 
C                 THE CENTRE LONGITUDE IS DETERMINED BY DLON1 AND DLON2. 
C      OVRLY      THIS FIELD IS IGNORED IF LX < 0; (SUBAREA INDICATED). 
C                 =-1,PLOTTED AREA IS DEFINED BY THE FILE RANGE AND PLOT 
C                     ON THE STANDARD LEVEL (1000,10) AND STANDARD LONGI 
C                     (0,360) OR (-180,180) SCALES. SCREEN IS FILLED. 
C                 = 0,PLOTTED AREA IS DEFINED BY THE FILE RANGE AND PLOT 
C                     ON THE STANDARD LONGITUDE SCALES (0,360) OR (-180, 
C                     AND ON A LEVEL SCALE WHOSE RANGE IS THAT OF THE FI 
C                     LEVELS RANGE. SCREEN IS FILLED. 
C                 = 1,PLOTTED AREA IS DEFINED BY THE FILE RANGE AND PLOT 
C                     ON THE STANDARD LEVEL (1000,10) AND STANDARD LONGI 
C                     (0,360) OR (-180,180) SCALES. WHAT APPEARS ON THE 
C                     SCREEN IS JUST A PLOT HAVING THE SAME SIZE AS THAT 
C                     SPANNED BY THE FILE RANGES ON THE STANDARD PLOT SC 
C                     SCREEN MAY OR MAY NOT BE FILLED. 
C      KIND       THIS IS A DUMMY FIELD. 
C                 =1, FOR LINEAR VERTICAL INTERPOLATION FROM DATA TO DIS 
C                 OTHERWISE CUBIC.(A LINE DEFAULTING KIND TO 1 IS INSERT 
C                 BELOW JUST AFTER KIND IS READ, THIS FORCES THE PROGRAM 
C                 PERFORM LINEAR VERTICAL INTERPOLATION ONLY. THE USER M 
C                 MODIFY THAT LINE TO SPECIFY A VALUE DIFFERENT FROM 1 I 
C                 HE/SHE WISHES TO APPLY CUBIC VERTICAL INTERPOLATION). 
C 
C 
C      CARD 2- 
C      ------ 
C      READ(5,5012,END=902) LABEL 
C 5012 FORMAT(10A8) 
C 
C      LABEL      80 CHARACTER LABEL FOR CONTOUR MAP. 
C                 ABSENT IF NAME=4HSKIP. 
C 
C      SUBAREA SPECIFICATION CARD 
C      ========================== 
C      CARD 3- 
C      ------- 
C      READ(5,5018,END=903) DLON1,DLON2,DPR1,DPR2,IFLAG 
C 5018 FORMAT(10X,4E10.0,I5) 
C 
C      DLON1      LEFT HAND LONGITUDE OF SUBAREA, (-360 <= DLON1 < 360). 
C      DLON2      RIGHT HAND LONGITUDE OF SUBAREA. (-360 < DLON2 <= 360; 
C                 DLON2 > DLON1 AND (DLON2-DLON1) <= 360). 
C      DPR1       TOP PRESSURE LEVEL OF SUBAREA (LOWEST PRESSURE). 
C      DPR2       BOTTOM PRESSURE LEVEL OF SUBAREA (HIGHEST PRESSURE) 
C      IFLAG      =0,1,SUBAREA IS PLOTTED INSIDE A FRAME DEFINED BY THE 
C                      SUBAREA COORDINATES, ON ONE OF THE FIVE STANDARD 
C                      PLOT SCALES WITH LONGITUDINAL AXIS SCALE SPANNING 
C                      (-360,0),(-270,90),(-180,180),(-90,270) AND (0,36 
C                      IF SUBAREA DOES NOT FIT IN ONE OF THESE STANDARD 
C                      FRAMES, THE PROGRAM ATTEMPTS TO PLOT SUBAREA CENT 
C                      INSIDE A FRAME WITH 360 DEG. LONGITUDINAL AXIS SP 
C                      SCREEN IS FILLED. 
C                 = 2, SUBAREA IS PLOTTED INSIDE A FRAME DEFINED BY 
C                      THE SUBAREA COORDINATES, TO FILL THE SCREEN. 
C                 = 3, THE SUBAREA IS PLOTTED INSIDE A FRAME DEFINED BY 
C                      SUBAREA COORDINATES, THE PLOT LOOKS EXACTLY THE S 
C                      AS IF IT WAS PLOTTED ON ONE OF THE FIVE STANDARD 
C                      PLOT SCALES WITH LONGITUDINAL AXIS SCALE SPANNING 
C                      (-360,0),(-270,90),(-180,180),(-90,270) AND (0,36 
C                      IF SUBAREA DOES NOT FIT IN ONE OF THESE STANDARD 
C                      FRAMES, THE PROGRAM ATTEMPTS TO PLOT SUBAREA CENT 
C                      INSIDE A FRAME WITH 360 DEG. LONGITUDINAL AXIS SP 
C                      SCREEN MAY OR MAY NOT BE FILLED. 
C 
C      SHADING CONTROL CARDS FOR FIRST SCALAR FIELD 
C      ============================================ 
C      CARD 4- 
C      ------- 
C      READ(5,5014,END=904) NPAT,(IPAT(I),I=1,NPAT) 
C 5014 FORMAT(10X,8I5) 
C 
C      NPAT       NUMBER OF DIFFERENT RANGES TO SHADE 
C      IPAT       NPAT SHADING PATTERN CODES 
C 
C      CARD 5- 
C      ------- 
C      READ(5,5016,END=905) (ZLEV(I),I=1,NPAT) 
C 5016 FORMAT(10X,8E10.0) 
C 
C      ZLEV       NPAT SCALAR FIELD VALUES TO DEFINE THE SHADED RANGES. 
C 
C      CARDS FOR SECOND SCALAR FIELD 
C      ============================= 
C      CARD 6- 
C      ------ 
C      READ(5,5010,END=906)NAME,II,JJ,KK,MS,N,SCAL,FLO,HI,FINC,NN,III,KI 
C 5010 FORMAT(10X,1X,A4,I5,2I1,I3,I5,4E10.0,I5,1X,2I2) 
C 
C      VARIABLES IN () ARE NOT USED BUT MERELY KEEP PLACE. 
C      NAME       NAME OF THE VARIABLE TO BE CONTOURED. 
C II - MOD        = 0,  HIGHS,LOWS NOT LABELLED. 
C                 =-1,  HIGHS,LOWS     LABELLED. 
C JJ - (ICOSH1)   NOT USED, READ FROM CARD 1. 
C KK - (ICOSH2)   NOT USED, READ FROM CARD 1. 
C      MS         LINE PRINTER MAP SCALE FACTOR (NO MAP IF MS=0,-1) 
C N  - (LX)       NOT USED, READ FROM CARD 1. 
C      SCAL       SCALING FACTOR 
C      FLO        LOWEST  VALUE TO BE CONTOURED 
C      HI         HIGHEST VALUE TO BE CONTOURED 
C      FINC       CONTOUR INTERVAL (A MAX. OF 40 CONTOURS IS PERMITTED) 
C NN - (KAX)      NOT USED, READ FROM CARD 1. 
C III- (OVRLY)    NOT USED, READ FROM CARD 1. 
C      KIND       THIS IS A DUMMY FIELD. 
C                 =1, FOR LINEAR VERTICAL INTERPOLATION FROM DATA TO DIS 
C                 OTHERWISE CUBIC.(A LINE DEFAULTING KIND TO 1 IS INSERT 
C                 BELOW JUST AFTER KIND IS READ, THIS FORCES THE PROGRAM 
C                 PERFORM LINEAR VERTICAL INTERPOLATION ONLY. THE USER M 
C                 MODIFY THAT LINE TO SPECIFY A VALUE DIFFERENT FROM 1 I 
C                 HE/SHE WISHES TO APPLY CUBIC VERTICAL INTERPOLATION). 
C 
C      CARD 7- 
C      ------ 
C      READ(5,5012,END=907)LABEL 
C 5012 FORMAT(10A8) 
C 
C      LABEL      80 CHARACTER LABEL. 
C 
C      SHADING CONTROL CARDS FOR SECOND SCALAR FIELD 
C      ============================================ 
C      CARD 8- 
C      ------- 
C      READ(5,5014,END=904) NPAT,(IPAT(I),I=1,NPAT) 
C 5014 FORMAT(10X,8I5) 
C 
C      NPAT       NUMBER OF DIFFERENT RANGES TO SHADE 
C      IPAT       NPAT SHADING PATTERN CODES 
C 
C      CARD 9- 
C      ------- 
C      READ(5,5016,END=905) (ZLEV(I),I=1,NPAT) 
C 5016 FORMAT(10X,8E10.0) 
C 
C      ZLEV       NPAT SCALAR FIELD VALUES TO DEFINE THE SHADED RANGES. 
C 
C      FOR VECTOR PLOT... 
C      =============== 
C      CARD 10- 
C      -------- 
C  310 READ(5,5020,END=908) VSCAL,VLO,VI,INCX,INCZ 
C 5020 FORMAT(10X,3E10.0,2I5) 
C 
C      VSCAL      SCALING FACTOR FOR VECTOR MAGNITUDE 
C      VLO        LOWEST VECTOR MAGNITUDE TO BE PLOTTED 
C      VI         VECTOR MAGNITUDE TO BE DRAWN AS ARROW OF LENGTH  DX 
C      INCX       EVERY INCX GRID POINT VECTOR IS PLOTTED ALONG X AXIS 
C      INCZ       EVERY INCZ GRID POINT VECTOR IS PLOTTED ALONG Z AXIS 
C 
C      CARD 11- 
C      -------- 
C      READ(5,5012,END=909) LABEL 
C 5012 FORMAT(10A8) 
C 
C      LABEL      80 CHARACTER LABEL FOR VECTOR PLOT. 
C 
CEXAMPLE OF INPUT CARDS... 
C 
C 
  ZLNPLOT. NEXT    504  0   -1       50.     -100.      100.        5. 
  CONTOURED SUBAREA OF FIRST FIELD FROM -100 TO 100 BY 5. 
                 -300.       30.       50.      700.    1 
  ZLNPLOT. NEXT   -104  0    0       50.     -100.      100.        5. 
  SHADED    SUBAREA OF SECOND FIELD WITH TWO SHADING LEVELS. 
                2    0   48 
                    0.      100. 
                    1.        0.       10.    3    3 
  SUBAREA VECPLOT OF EVERY THIRD (U,W) VECTOR. 
C----------------------------------------------------------------------- 
C 
      LOGICAL OK,REW,PB,SECOND,SUBAREA,LOVRLY,ADD1C,FLIP,STNDRD 
      CHARACTER*4 IPNT 
      INTEGER LEV(20) 
      INTEGER LABEL(10) 
      INTEGER IPAT(7) 
      REAL PRX(400),UX(400),WX(400),YX(400) 
      REAL DEN(4,17),PR(20),U(400),W(400),Y(400) 
      REAL ZLEV(7) 
      REAL SLONP(400),SLON(400) 
 
      COMMON/ICOM/IBUF(8),ZXU(30000) 
      COMMON/JCOM/JBUF(8),ZXW(30000) 
 
      COMMON/GAUS/SL(200),CL(200),WL(200),WOSSL(200),RAD(200),ANG(200) 
      COMMON /BLANCK/ XS(400,20),FXS(8000),F(8000) 
      COMMON  /WINDS/ US(400,20),WS(400,20),UXS(8000),WXS(8000) 
 
      DATA NPAT /7/ 
      DATA IPAT /0,0,0,0,0,0,0/ 
      DATA ZLEV /1.0E99,2.0E99,3.0E99,4.0E99,5.0E99,6.0E99,7.0E99/ 
      DATA MAX/200/, MAXL/20/
      DATA REW/.TRUE./ 
C--------------------------------------------------------------------- 
      NFF=6 
      CALL JCLPNT( NFF, 1,2,3,4, 5,6, 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ) 
      CALL SYSDAT 
      CALL CONSET(6HNULBLL,1) 
C 
C     * READ THE CONTROL CARDS. 
C     * CARD 1. 
C 
  150 READ(5,5010,END=900)NAME,MOD,ICOSH1,ICOSH2,MS,LX,SCAL, 
     1                    FLO,HI,FINC,KAX,IOVRLY,KIND 
C 
C     * ALLOW ONLY LINEAR INTERPOLATION TO BE PERFORMED BY SETTING 
C     * KIND TO 1. 
C 
      KIND = 1 
      IMOD = IABS(MOD) 
C 
C     * CHECK FOR PUBLICATION QUALITY OPTION. 
C 
      IF (MS.LT.0) THEN 
        PB=.TRUE. 
        MS=IABS(MS+1) 
        CALL CONSET(6HINTMAJ,3) 
        CALL CONSET(6HINTMIN,3) 
        CALL CONSET(5HIOFFM,1) 
        CALL CONSET(4HILAB,0) 
      ELSE 
        PB=.FALSE. 
        CALL CONSET(6HINTMAJ,2) 
        CALL CONSET(6HINTMIN,1) 
        CALL CONSET(5HIOFFM,0) 
        CALL CONSET(4HILAB,1) 
      ENDIF 
C 
C     * REWIND NECESSARY FILES (ONLY ONCE). 
C 
      IF (REW) THEN 
        IF (IMOD.NE.1) REWIND 1 
        IF (IMOD.EQ.1.OR.IMOD.EQ.2.OR.IMOD.EQ.5) THEN 
          REWIND 2 
          REWIND 3 
        ENDIF 
        IF (IMOD.GE.4) REWIND 4 
        REW=.FALSE. 
      ENDIF 
      IF(NAME.EQ.4HSKIP)THEN 
        READ(1,END=901) 
        GO TO 150 
      ENDIF 
      WRITE(6,6020)NAME,MOD,ICOSH1,ICOSH2,MS,LX, 
     1             SCAL,FLO,HI,FINC,KAX,IOVRLY,KIND 
      SECOND = .FALSE. 
      ADD1C = .FALSE. 
      IF(KIND.NE.1) KIND=3 
      NHI = 0 
      IF(MOD.GE.0.AND.MOD.NE.3) NHI=-1 
C 
C     * CARD 2. 
C 
      READ(5,5012,END=902) LABEL 
C 
C     * READ SUBAREA CARD 3. 
C 
      IF (KAX.LE.1) THEN 
        DLON1 =-180. 
        DLON2 = 180. 
        IFRM = 3 
      ELSE 
        DLON1 = 0. 
        DLON2 = 360. 
        IFRM = 1 
      ENDIF 
      DPR1 = 10. 
      DPR2 = 1000. 
      IFLAG = 0 
      SUBAREA = .FALSE. 
      LOVRLY = .TRUE. 
      STNDRD = .TRUE. 
      IF (LX.LT.0) THEN 
        READ(5,5018,END=903) DLON1,DLON2,DPR1,DPR2,IFLAG 
        IF (DPR1.GE.DPR2.OR.DLON1.GE.DLON2.OR. 
     1     DLON1.GE.360..OR.DLON2.LE.-360.) THEN 
          CALL BURNF 
          CALL                                     XIT(7HZLNPLOT,-101) 
        ENDIF 
        LX = IABS(LX) 
        SUBAREA = .TRUE. 
        LOVRLY = .FALSE. 
        IF (IFLAG.EQ.0) IFLAG = 1 
        IF (DLON1.LT.-360.) DLON1 = -360. 
        IF (DLON1.GE.-360.) IFRM = 5 
        IF (DLON1.GE.-270.) IFRM = 4 
        IF (DLON1.GE.-180.) IFRM = 3 
        IF (DLON1.GE. -90.) IFRM = 2 
        IF (DLON1.GE.   0.) IFRM = 1 
        IF ((DLON2-DLON1).GT.360.) DLON2 = DLON1 + 360. 
        IF (DLON2.GT.360.) DLON2 = 360. 
        IF(((IFRM.EQ.2).AND.(DLON2.GT.270.)).OR. 
     1     ((IFRM.EQ.3).AND.(DLON2.GT.180.)).OR. 
     2     ((IFRM.EQ.4).AND.(DLON2.GT. 90.)).OR. 
     3     ((IFRM.EQ.5).AND.(DLON2.GT.  0.))) STNDRD=.FALSE. 
      ENDIF 
C 
      IF(IMOD.EQ.1) GO TO 310 
C 
C----------------------------------------------------------------------- 
C     * READ-IN SCALAR FIELD TO BE CONTOURED. 
 
C     * GET THE NEXT CROSS-SECTION. 
C 
  180 LU = 1 
      IF (SECOND) LU = 4 
      CALL GETSET2(LU,FXS,LEV,NLEV,IBUF,MAX,OK) 
      IF(.NOT.OK) THEN 
        WRITE(6,6010) NAME 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-102) 
      ENDIF 
      IF((NLEV.LE.1).OR.(NLEV.GT.MAXL)) THEN 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-103) 
      ENDIF 
C 
C     * KEEP IF NAME EQUALS IBUF(3) OR 4HNEXT. 
C 
      IF(NAME.EQ.4HNEXT) GO TO 190 
      IF(IBUF(3).NE.NAME) GO TO 180 
C 
C     * PUT CROSS-SECTION INTO XS WITH LEVELS AND LATITUDES REVERSED. 
C 
  190 IF (SECOND) THEN 
        IF (NLONT.NE.IBUF(5)) CALL                 XIT(7HZLNPLOT,-1) 
      ELSE 
        NLONT=IBUF(5) 
        NLON=NLONT 
      ENDIF 
      DO 210 L=1,NLEV 
        K=NLEV+1-L 
        PR(L)=FLOAT(LEV(L)) 
        IF((KAX.EQ.1).OR.(KAX.EQ.3)) PR(L)=ALOG(PR(L)) 
        DO 210 J=1,NLONT 
          N=(L-1)*NLONT+J 
          XS(J,K)=FXS(N) 
  210 CONTINUE 
C 
      IF (.NOT.SECOND) THEN 
C 
C       * CALCULATE THE LONGITUDE GRID OF THE INPUT FILE. 
C 
        DY = 360./(NLONT-1) 
        DY =1.E-10*ANINT(1.E10*DY) 
        DO 212 J=1,NLONT 
  212   SLON(J) =  (J-1)*DY 
C 
        IF (LOVRLY) THEN 
          DPR1=FLOAT(LEV(1)) 
          DPR2=FLOAT(LEV(NLEV)) 
          IF (IOVRLY.LT.0) IFLAG=1 
          IF (IOVRLY.EQ.0) IFLAG=2 
          IF (IOVRLY.GT.0) IFLAG=3 
          SUBAREA=.TRUE. 
        ENDIF 
C 
C       * RESTRICT SUBAREA PRESSURE TO PHYSICAL LIMITS (.001,1100). 
C 
        IF (DPR1.LT..001) DPR1 = .001 
        IF (DPR2.GT.1100.) DPR2 = 1100. 
        IF ((KAX.EQ.1).OR.(KAX.EQ.3))THEN 
           DPR1 = ALOG(DPR1) 
           DPR2 = ALOG(DPR2) 
        ENDIF 
C 
C       * SET THE COORDINATES OF THE FRAME 
C 
        IF (IFLAG.NE.2) THEN 
          IF((KAX.EQ.1).OR.(KAX.EQ.3))THEN 
            FYT = ALOG(10.) 
            FYB = ALOG(1000.) 
          ELSE 
            FYT = 10. 
            FYB = 1000. 
          ENDIF 
        ELSE 
          FYT = DPR1 
          FYB = DPR2 
        ENDIF 
        IF (((IFLAG.NE.2).OR.(LOVRLY)).AND.STNDRD) THEN 
          IF(IFRM.EQ.1)THEN 
            FXL = 0. 
            FXR = 360. 
          ENDIF 
          IF(IFRM.EQ.2)THEN 
            FXL = -90. 
            FXR = 270. 
          ENDIF 
          IF(IFRM.EQ.3)THEN 
            FXL = -180. 
            FXR =  180. 
          ENDIF 
          IF(IFRM.EQ.4)THEN 
            FXL = -270. 
            FXR =   90. 
          ENDIF 
          IF(IFRM.EQ.5)THEN 
            FXL = -360. 
            FXR =    0. 
          ENDIF 
        ELSE 
          IF (IFLAG.EQ.2) THEN 
            FXL = DLON1 
            FXR = DLON2 
          ELSE 
            DLONG=(360.-(DLON2-DLON1))/2. 
            FXL = 1.0*INT(DLON1-DLONG) 
            FXR = 1.0*INT(DLON2+DLONG+0.5) 
            IF((FXR-FXL).GT.360.) FXR = FXL+360. 
          ENDIF 
        ENDIF 
C 
C       * MAKE SURE THE COORDINATES ARE BOUNDED BY THE INPUT FILE RANGE. 
C 
        IF (DPR1.LT.PR(1)) DPR1 = PR(1) 
        IF (DPR2.GT.PR(NLEV)) DPR2 = PR(NLEV) 
C 
C       * SET THE COORDINATES OF THE PLOTTED AREA. 
C 
        PYT = DPR1 
        PYB = DPR2 
        IF(LOVRLY)THEN 
          PXL = FXL 
          PXR = FXR 
        ELSE 
          PXL = DLON1 
          PXR = DLON2 
        ENDIF 
C 
C       * SET THE DIMENSIONS OF THE INTERPOLATED FIELD. 
C 
        IF (LX.GT.99) LX=99 
        NLONP = INT(FLOAT(NLONT)*(PXR-PXL)/360. + .5) 
        IF (NLONP.LT.6) NLONP = 6 
        IF (NLONP.LT.100) NLONP = 100 
        ISCLON=1 
        LXP = LX 
        ISCLX=1 
        IF (LX .LT.4) THEN 
          IF (NLONP.LE.24) ISCLON=4 
          IF (NLONP.LE.33) ISCLON=3 
          IF (NLONP.LE.48) ISCLON=2 
          NLONP=ISCLON*NLONP 
          LX = 2*NLONT/3 
          LXP = 2*NLONP/3 
          ISCLX = ISCLON 
        ENDIF 
C 
C       * SET THE POSITION OF THE FRAME ON THE PLOTTER PAGE. 
C 
        IF (IFLAG.EQ.2) THEN 
          FHGT = .9*(FLOAT(LXP-1)*(FYB-FYT)/(FLOAT(NLONP-1)*(PYB-PYT))) 
        ELSE 
          DENOM = 1000.-10. 
          IF ((KAX.EQ.1).OR.(KAX.EQ.3)) DENOM = ALOG(1000.)-ALOG(10.) 
          FHGT=.9*FLOAT(LX-1)*(FYB-FYT)/(DENOM*FLOAT(NLONT-1)) 
        ENDIF 
        IF ((IFLAG.NE.2).OR.(LOVRLY)) THEN 
          FWDTH = .9*(FXR-FXL)/360. 
          FLEFT = (1.-FWDTH)/2. 
        ELSE 
          FWDTH = .9 
          FLEFT = .05 
        ENDIF 
C 
C       * SET THE POSITION OF THE PLOTTED AREA ON THE PLOTTER PAGE. 
C 
        PHGT = FHGT*(PYB-PYT)/(FYB-FYT) 
        PWDTH = FWDTH*(PXR-PXL)/(FXR-FXL) 
        PLEFT = FLEFT + PWDTH*(PXL-FXL)/(PXR-PXL) 
        PBOT = .05 + PHGT*(FYB-PYB)/(PYB-PYT) 
        FBOT = .05 
        IF (IFLAG.EQ.2) FBOT = PBOT 
C 
C     * SET THE FRAMED AREA EQUAL TO THE PLOTTED AREA 
C 
        IF (IFLAG.EQ.3) THEN 
          IF (.NOT.LOVRLY) THEN 
            FXL = PXL 
            FXR = PXR 
            FWDTH = PWDTH 
            FLEFT = PLEFT 
          ENDIF 
          FYB = PYB 
          FYT = PYT 
          FHGT = PHGT 
          FBOT = PBOT 
        ENDIF 
C 
C       * IF THE PLOT IS TOO TALL, SCALE IT DOWN TO FIT THE PLOTTER PAGE 
C 
        IF ((FHGT+FBOT).GT..9.AND.IFLAG.EQ.2) THEN 
          SCALE = .9/(FHGT+FBOT) 
          PHGT = SCALE*PHGT 
          PWDTH = SCALE*PWDTH 
          FWDTH = SCALE*FWDTH 
          FHGT = .9-FBOT 
          PLEFT = SCALE*(PLEFT-FLEFT) + FLEFT 
          PBOT = SCALE*(PBOT-FBOT) + FBOT 
        ENDIF 
        IF (ABS(PBOT-FBOT).LT..0001) THEN 
          CALL CONSET(5HIOFFM,0) 
        ELSE 
          CALL CONSET(5HIOFFM,1) 
        ENDIF 
C 
C       * COMPUTE THE EQUALLY SPACED PRESSURE LEVELS AND LONGITUDES FOR 
C       * INTERPOLATION TO THE DISPLAY GRID. 
C 
        DY = (PXR-PXL)/FLOAT(NLONP-1) 
        DO 214 J=1,NLONP 
  214   SLONP(J) = (J-1)*DY + PXL 
        DP = (DPR2-DPR1)/FLOAT(LXP-1) 
        DO 215 L=1,LXP 
  215   PRX(L)=(L-1)*DP+DPR1 
C 
C       * REARRANGE THE LONGITUDES ARRAY "SLON" IF NECESSARY. 
C 
        FLIP=.TRUE. 
        IF ((.NOT.LOVRLY.AND.(IFLAG.EQ.2)).OR..NOT.STNDRD) THEN 
          IF (IFLAG.EQ.2) THEN 
            TDLON=DLON1 
          ELSE 
            TDLON=FXL 
          ENDIF 
          IF (TDLON.LT.0.) TDLON=TDLON+360. 
        ELSE 
          IF(IFRM.EQ.1) THEN 
            FLIP=.FALSE. 
            GO TO 220 
          ENDIF 
          IF(IFRM.EQ.2) TDLON=270. 
          IF(IFRM.EQ.3) TDLON=180. 
          IF(IFRM.EQ.4) TDLON= 90. 
          IF(IFRM.EQ.5) TDLON=  0. 
        ENDIF 
        IPTR=0 
        DO 216 I=1,(NLONT-1) 
          IF((TDLON.GE.SLON(I)).AND.(TDLON.LE.SLON(I+1)))THEN 
            IPTR=I 
            IF(TDLON.EQ.SLON(I+1))IPTR=I+1 
            GO TO 990 
          ENDIF 
  216   CONTINUE 
  990   J=0 
        DO 217 I=IPTR,NLONT 
          J=J+1 
          Y(J)=SLON(I)-360. 
  217   CONTINUE 
        IF(IPTR.GE.2)THEN 
          DO 218 I=2,IPTR 
            J=J+1 
            Y(J)=SLON(I) 
  218     CONTINUE 
        ENDIF 
        IF(TDLON.GT.Y(NLONT))THEN 
          ADD1C=.TRUE. 
          NLON=NLONT+1 
          Y(NLON)=SLON(IPTR+1) 
        ENDIF 
        DO 219 J=1,NLON 
          SLON(J)=Y(J) 
  219   CONTINUE 
  220   CONTINUE 
      ENDIF 
C 
C     * REARRANGE THE 2-DIMENSIONAL TABLE "XS" IF NECESSARY. 
C 
      IF(.NOT.FLIP) GO TO 225 
      DO 224 L=1,NLEV 
        J=0 
        DO 221 I=IPTR,NLONT 
          J=J+1 
          Y(J)=XS(I,L) 
  221   CONTINUE 
        IF(IPTR.GE.2)THEN 
          DO 222 I=2,IPTR 
            J=J+1 
            Y(J)=XS(I,L) 
  222     CONTINUE 
        ENDIF 
        IF (ADD1C) Y(NLON)=XS(IPTR+1,L) 
        DO 223 J=1,NLON 
          XS(J,L)=Y(J) 
  223   CONTINUE 
  224 CONTINUE 
  225 CONTINUE 
C 
C     * PRECOMPUTE THE LAGRANGIAN DENOMINATORS IN DEN. 
C 
      IF(NLEV.LE.3) KIND=1 
      IF(KIND.EQ.3) CALL LGRDC(DEN,PR,NLEV) 
C 
C     * INTERPOLATE THE DISPLAY LEVELS ONE COLUMN AT A TIME. 
C 
      DO 250 J=1,NLON 
        DO 230 L=1,NLEV 
          K=NLEV+1-L 
  230     Y(L)=XS(J,K) 
        IF(KIND.EQ.1) CALL LINIL(YX,PRX,LXP,Y,PR,NLEV,0.,0.) 
        IF(KIND.EQ.3) CALL LGRIC(YX,PRX,LXP,Y,PR,DEN,NLEV,0.,0.) 
        DO 240 L=1,LXP 
          N=(L-1)*NLON+J 
          K=LXP+1-L 
  240     FXS(N)=YX(K) 
  250 CONTINUE 
C 
C     * INTERPOLATE HORIZONTALLY ONE LEVEL AT A TIME. 
C 
      DO 252 L = 1,LXP 
        DO 254 J = 1,NLON 
  254   WX(J) = FXS( (L-1)*NLON + J) 
        CALL LINIL(YX,SLONP,NLONP,WX,SLON,NLON,0.,0.) 
        DO 256 J = 1,NLONP 
  256   UXS( (L-1)*NLONP + J) = YX(J) 
  252 CONTINUE 
      NWDS=NLONP*LXP 
      DO 258 I = 1,NWDS 
  258 FXS(I) = UXS(I) 
C 
C     * SCALE THE CROSS-SECTION FIELD. 
C 
      DO 260 I=1,NWDS 
        F(I)=SCAL*FXS(I) 
  260 CONTINUE 
C 
C     * CONTOUR THE FIELD WITH OR WITHOUT THE ZERO LINE. 
C 
      IF (PBOT+PHGT.GT.1.) THEN 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-105) 
      ENDIF 
      XPOS = FLOAT(NLONP) 
      YPOS = FLOAT(LXP) 
      CALL SET(PLEFT,PLEFT+PWDTH,PBOT,PBOT+PHGT,1.,XPOS,1.,YPOS,1) 
C 
      ICOSH = ICOSH1 
      IF (SECOND) ICOSH = ICOSH2 
C 
      IF ((ICOSH.NE.4).OR. 
     1    ((.NOT.SECOND).AND.(ICOSH1.LE.1).AND.(ICOSH2.EQ.4)).OR. 
     2    (SECOND.AND.(ICOSH1.EQ.4).AND.(ICOSH2.LE.1))) THEN 
        NDOT=-1634B 
        IF (IMOD.GE.4) THEN 
          NDOT = 1777B 
          IF (SECOND) NDOT = 1634B 
        ENDIF 
        IF (((.NOT.SECOND).AND.(ICOSH1.LE.1).AND.(ICOSH2.EQ.4)).OR. 
     1      (SECOND.AND.(ICOSH1.EQ.4).AND.(ICOSH2.LE.1))) 
     2       NDOT=-1634B 
        CALL CONSET(6HCENTER,1H*) 
        IF (SECOND) CALL CONSET(6HCENTER,1H+) 
        CALL DASHS 
C 
        IF((ICOSH.EQ.1.OR.ICOSH.EQ.3).AND.FLO*HI.LT.0.) THEN 
          FLO1 = FLO+FINC 
          FLO3 = 2.*FINC 
          HI2  = -2.*FINC 
          FINC1= FINC*2. 
          IF (.NOT.PB) THEN 
            CALL CONGET(6HINTMIN,I) 
            CALL CONGET(6HINTMAJ,J) 
            CALL CONGET(4HILAB,K) 
            CALL CONSET(6HINTMAJ,1) 
            CALL CONSET(4HILAB,0) 
          ENDIF 
          CALL CONREC(F,NLONP,NLONP,LXP,FLO1,HI,FINC1,1,NHI,NDOT) 
          IF (.NOT.PB) THEN 
            CALL CONSET(6HINTMIN,2) 
            CALL CONSET(6HINTMAJ,2) 
            CALL CONSET(4HILAB,1) 
            CALL CONSET(6HNULBLL,0) 
          ENDIF 
          CALL CONREC(F,NLONP,NLONP,LXP,FLO,HI2,FINC1,1,NHI,NDOT) 
          CALL CONREC(F,NLONP,NLONP,LXP,FLO3,HI,FINC1,1,NHI,NDOT) 
          IF (.NOT.PB) THEN 
            CALL CONSET(6HINTMIN,I) 
            CALL CONSET(6HINTMAJ,J) 
            CALL CONSET(4HILAB,K) 
            CALL CONSET(6HNULBLL,1) 
          ENDIF 
C 
        ELSE 
          CALL CONREC(F,NLONP,NLONP,LXP,FLO,  HI,FINC,1,NHI,NDOT) 
C 
        ENDIF 
        CALL DASHN 
C 
      ENDIF 
C 
C     * SHADE THE CROSS SECTION IF DESIRED. 
C 
      IF (ICOSH.GT.1) THEN 
C 
C       * READ SHADING CARDS 4 AND 5 (OR 8 AND 9 FOR SECOND FIELD). 
C 
        READ(5,5014,END=904) NPAT,(IPAT(I),I=1,NPAT) 
        READ(5,5016,END=905) (ZLEV(I),I=1,NPAT) 
        CALL HAFLVS(NPAT,ZLEV,NPAT,IPAT) 
        NPREM = -2 
        IF (.NOT.PB) NPREM = -1 
        CALL HAFTONP(F,NLONP,NLONP,LXP,0.,0.,0,1,NPREM,0,0.) 
      ENDIF 
C 
C     * MAP THE CROSS-SECTION ON LINE PRINTER (NO MAP IF MS=0). 
C 
      CALL FCONW2(FXS,FINC,SCAL,NLONP,LXP,1,1,NLONP,LXP,MS) 
      WRITE(6,6040) LABEL 
C 
C     * WRITE THE LABEL ABOVE THE CROSS-SECTION. 
C 
      CALL SET(.01,.99,.01,.99, .01,.99,.01,.99, 1) 
      YPOS=FHGT+FBOT+.08 
      IF (SECOND) YPOS = FHGT+FBOT+.06 
      CALL PWRIT(FLEFT,YPOS,LABEL,80,1,0,0) 
C 
C     * READ CARDS 6 AND 7 FOR SECOND SCALAR FIELD, THEN PLOT. 
C 
      IF (IMOD.GE.4.AND..NOT.SECOND) THEN 
        SECOND = .TRUE. 
        READ(5,5010,END=906)NAME,II,JJ,KK,MS,N,SCAL,FLO,HI,FINC,NN,III, 
     1                      KIND 
        READ(5,5012,END=907)LABEL 
C 
C     * ALLOW ONLY LINEAR INTERPOLATION TO BE PERFORMED BY SETTING 
C     * KIND TO 1. 
C 
        KIND = 1 
C       IF (KIND.NE.1) KIND = 3 
        NHI = 0 
        IF (II.GE.0) NHI = -1 
        IF (MS.LT.0) MS = IABS(MS+1) 
        GO TO 180 
      ENDIF 
 
      IF(MOD.EQ.0.OR.MOD.EQ.3.OR.IMOD.EQ.4) GO TO 700 
C----------------------------------------------------------------------- 
C     * BRING THE VECTOR FIELDS. 
C     * READ IN MERIDIONALLY AVERAGED U FIELD. 
C 
C     * VECTOR CARDS 10 AND 11. 
C 
  310 READ(5,5020,END=908) VSCAL,VLO,VI,INCX,INCZ 
      IF(VSCAL.EQ.0.) VSCAL=1. 
      READ(5,5012,END=909) LABEL 
C 
      CALL GETSET2(2,UXS,LEV,NLEV,IBUF,MAX,OK) 
      IF(.NOT.OK) THEN 
        WRITE(6,6010) NAME 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-106) 
      ENDIF 
      IF(NLEV.EQ.1) THEN 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-107) 
      ENDIF 
C 
C     * READ IN ZONALLY AVERAGED W FIELD. 
C 
      CALL GETSET2(3,WXS,LEV,NLEV,JBUF,MAX,OK) 
      IF(.NOT.OK) THEN 
        WRITE(6,6010) NAME 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-108) 
      ENDIF 
      IF(NLEV.EQ.1) THEN 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-109) 
      ENDIF 
C 
C     * MAKE SURE THE 2 VECTOR FIELDS ARE THE SAME KIND AND SIZE. 
C 
      CALL CMPLBL(0,IBUF,0,JBUF,OK) 
      IF(.NOT.OK)THEN 
        WRITE(6,6025) IBUF,JBUF 
        CALL                                       XIT(7HZLNPLOT,-2) 
      ENDIF 
C 
C     * PUT CROSS-SECTIONS INTO US AND WS WITH LEVELS REVERSED. 
C     * VERTICAL VECTOR IS UNALTERED, SO THAT POSITIVE VALUES IMPLY UPWA 
C     * HENCE THIS FIELD MUST BE MODIFIED BEFORE RUNNING THE PROGRAM IF 
C     * AN "OMEGA-LIKE" VERTICAL MOTION FIELD. 
 
      IF (IMOD.NE.1) THEN 
        IF (NLONT.NE.IBUF(5)) CALL                 XIT(7HZLNPLOT,-3) 
      ELSE 
        NLONT=IBUF(5) 
        NLON=NLONT 
      ENDIF 
C 
      DO 320 L=1,NLEV 
        K=NLEV+1-L 
        PR(L)=FLOAT(LEV(L)) 
        IF((KAX.EQ.1).OR.(KAX.EQ.3)) PR(L)=ALOG(PR(L)) 
        DO 320 J=1,NLONT 
          N=(L-1)*NLONT+J 
          US(J,K)=UXS(N) 
          WS(J,K)=WXS(N) 
  320 CONTINUE 
C 
      IF (IMOD.EQ.1) THEN 
C 
C       * CALCULATE THE LONGITUDE GRID OF THE INPUT FILE. 
C 
        DY = 360./(NLONT-1) 
        DY = 1.E-10*ANINT(1.E10*DY) 
        DO 322 J=1,NLONT 
  322   SLON(J) =  (J-1)*DY 
C 
        IF (LOVRLY) THEN 
          DPR1=FLOAT(LEV(1)) 
          DPR2=FLOAT(LEV(NLEV)) 
          IF (IOVRLY.LT.0) IFLAG=1 
          IF (IOVRLY.EQ.0) IFLAG=2 
          IF (IOVRLY.GT.0) IFLAG=3 
          SUBAREA=.TRUE. 
        ENDIF 
C 
C       * RESTRICT SUBAREA PRESSURE TO PHYSICAL LIMITS (.001,1100). 
C 
        IF (DPR1.LT..001) DPR1 = .001 
        IF (DPR2.GT.1100.) DPR2 = 1100. 
        IF ((KAX.EQ.1).OR.(KAX.EQ.3))THEN 
           DPR1 = ALOG(DPR1) 
           DPR2 = ALOG(DPR2) 
        ENDIF 
C 
C       * SET THE COORDINATES OF THE FRAME 
C 
        IF (IFLAG.NE.2) THEN 
          IF((KAX.EQ.1).OR.(KAX.EQ.3))THEN 
            FYT = ALOG(10.) 
            FYB = ALOG(1000.) 
          ELSE 
            FYT = 10. 
            FYB = 1000. 
          ENDIF 
        ELSE 
          FYT = DPR1 
          FYB = DPR2 
        ENDIF 
        IF (((IFLAG.NE.2).OR.(LOVRLY)).AND.STNDRD) THEN 
          IF(IFRM.EQ.1)THEN 
            FXL = 0. 
            FXR = 360. 
          ENDIF 
          IF(IFRM.EQ.2)THEN 
            FXL = -90. 
            FXR = 270. 
          ENDIF 
          IF(IFRM.EQ.3)THEN 
            FXL = -180. 
            FXR =  180. 
          ENDIF 
          IF(IFRM.EQ.4)THEN 
            FXL = -270. 
            FXR =   90. 
          ENDIF 
          IF(IFRM.EQ.5)THEN 
            FXL = -360. 
            FXR =    0. 
          ENDIF 
        ELSE 
          IF (IFLAG.EQ.2) THEN 
            FXL = DLON1 
            FXR = DLON2 
          ELSE 
            DLONG=(360.-(DLON2-DLON1))/2. 
            FXL = 1.0*INT(DLON1-DLONG) 
            FXR = 1.0*INT(DLON2+DLONG+0.5) 
            IF((FXR-FXL).GT.360.) FXR = FXL+360. 
          ENDIF 
        ENDIF 
C 
C       * MAKE SURE THE COORDINATES ARE BOUNDED BY THE INPUT FILE RANGE. 
C 
        IF (DPR1.LT.PR(1)) DPR1 = PR(1) 
        IF (DPR2.GT.PR(NLEV)) DPR2 = PR(NLEV) 
C 
C       * SET THE COORDINATES OF THE PLOTTED AREA. 
C 
        PYT = DPR1 
        PYB = DPR2 
        IF(LOVRLY)THEN 
          PXL = FXL 
          PXR = FXR 
        ELSE 
          PXL = DLON1 
          PXR = DLON2 
        ENDIF 
C 
C       * SET THE DIMENSIONS OF THE INTERPOLATED FIELD. 
C 
        IF (LX.GT.99) LX=99 
        NLONP = INT(FLOAT(NLONT)*(PXR-PXL)/360. + .5) 
        IF (NLONP.LT.6) NLONP = 6 
        IF (NLONP.LT.100) NLONP = 100 
        ISCLON=1 
        LXP = LX 
        ISCLX=1 
        IF (LX .LT.4) THEN 
          IF (NLONP.LE.24) ISCLON=4 
          IF (NLONP.LE.33) ISCLON=3 
          IF (NLONP.LE.48) ISCLON=2 
          NLONP=ISCLON*NLONP 
          LX = 2*NLONT/3 
          LXP = 2*NLONP/3 
          ISCLX = ISCLON 
        ENDIF 
C 
C       * SET THE POSITION OF THE FRAME ON THE PLOTTER PAGE. 
C 
        IF (IFLAG.EQ.2) THEN 
          FHGT = .9*(FLOAT(LXP-1)*(FYB-FYT)/(FLOAT(NLONP-1)*(PYB-PYT))) 
        ELSE 
          DENOM = 1000.-10. 
          IF ((KAX.EQ.1).OR.(KAX.EQ.3)) DENOM = ALOG(1000.)-ALOG(10.) 
          FHGT=.9*FLOAT(LX-1)*(FYB-FYT)/(DENOM*FLOAT(NLONT-1)) 
        ENDIF 
        IF ((IFLAG.NE.2).OR.(LOVRLY)) THEN 
          FWDTH = .9*(FXR-FXL)/360. 
          FLEFT = (1.-FWDTH)/2. 
        ELSE 
          FWDTH = .9 
          FLEFT = .05 
        ENDIF 
C 
C       * SET THE POSITION OF THE PLOTTED AREA ON THE PLOTTER PAGE. 
C 
        PHGT = FHGT*(PYB-PYT)/(FYB-FYT) 
        PWDTH = FWDTH*(PXR-PXL)/(FXR-FXL) 
        PLEFT = FLEFT + PWDTH*(PXL-FXL)/(PXR-PXL) 
        PBOT = .05 + PHGT*(FYB-PYB)/(PYB-PYT) 
        FBOT = .05 
        IF (IFLAG.EQ.2) FBOT = PBOT 
C 
C     * SET THE FRAMED AREA EQUAL TO THE PLOTTED AREA 
C 
        IF (IFLAG.EQ.3) THEN 
          IF (.NOT.LOVRLY) THEN 
            FXL = PXL 
            FXR = PXR 
            FWDTH = PWDTH 
            FLEFT = PLEFT 
          ENDIF 
          FYB = PYB 
          FYT = PYT 
          FHGT = PHGT 
          FBOT = PBOT 
        ENDIF 
C 
C       * IF THE PLOT IS TOO TALL, SCALE IT DOWN TO FIT THE PLOTTER PAGE 
C 
        IF ((FHGT+FBOT).GT..9.AND.IFLAG.EQ.2) THEN 
          SCALE = .9/(FHGT+FBOT) 
          PHGT = SCALE*PHGT 
          PWDTH = SCALE*PWDTH 
          FWDTH = SCALE*FWDTH 
          FHGT = .9-FBOT 
          PLEFT = SCALE*(PLEFT-FLEFT) + FLEFT 
          PBOT = SCALE*(PBOT-FBOT) + FBOT 
        ENDIF 
        IF (ABS(PBOT-FBOT).LT..0001) THEN 
          CALL CONSET(5HIOFFM,0) 
        ELSE 
          CALL CONSET(5HIOFFM,1) 
        ENDIF 
C 
C       * COMPUTE THE EQUALLY SPACED PRESSURE LEVELS AND LONGITUDES FOR 
C       * INTERPOLATION TO THE DISPLAY GRID. 
C 
        DY = (PXR-PXL)/FLOAT(NLONP-1) 
        DO 324 J=1,NLONP 
  324   SLONP(J) = (J-1)*DY + PXL 
        DP = (DPR2-DPR1)/FLOAT(LXP-1) 
        DO 335 L=1,LXP 
  335   PRX(L)=(L-1)*DP+DPR1 
C 
C       * REARRANGE THE LONGITUDES ARRAY "SLON" IF NECESSARY. 
C 
        FLIP=.TRUE. 
        IF ((.NOT.LOVRLY.AND.(IFLAG.EQ.2)).OR..NOT.STNDRD) THEN 
          IF (IFLAG.EQ.2) THEN 
            TDLON=DLON1 
          ELSE 
            TDLON=FXL 
          ENDIF 
          IF (TDLON.LT.0.) TDLON=TDLON+360. 
        ELSE 
          IF(IFRM.EQ.1) THEN 
            FLIP=.FALSE. 
            GO TO 340 
          ENDIF 
          IF(IFRM.EQ.2) TDLON=270. 
          IF(IFRM.EQ.3) TDLON=180. 
          IF(IFRM.EQ.4) TDLON= 90. 
          IF(IFRM.EQ.5) TDLON=  0. 
        ENDIF 
        IPTR=0 
        DO 336 I=1,(NLONT-1) 
          IF((TDLON.GE.SLON(I)).AND.(TDLON.LE.SLON(I+1)))THEN 
            IPTR=I 
            IF(TDLON.EQ.SLON(I+1))IPTR=I+1 
            GO TO 991 
          ENDIF 
  336   CONTINUE 
  991   J=0 
        DO 337 I=IPTR,NLONT 
          J=J+1 
          Y(J)=SLON(I)-360. 
  337   CONTINUE 
        IF(IPTR.GE.2)THEN 
          DO 338 I=2,IPTR 
            J=J+1 
            Y(J)=SLON(I) 
  338     CONTINUE 
        ENDIF 
        IF(TDLON.GT.Y(NLONT))THEN 
          ADD1C=.TRUE. 
          NLON=NLONT+1 
          Y(NLON)=SLON(IPTR+1) 
        ENDIF 
        DO 339 J=1,NLON 
          SLON(J)=Y(J) 
  339   CONTINUE 
  340   CONTINUE 
C 
        IF (KIND.EQ.3) CALL LGRDC(DEN,PR,NLEV) 
      ENDIF 
C 
C     * REARRANGE THE 2-DIMENSIONAL TABLES "US" & "WS" IF NECESSARY. 
C 
      IF(.NOT.FLIP) GO TO 345 
      DO 344 L=1,NLEV 
        J=0 
        DO 341 I=IPTR,NLONT 
          J=J+1 
          U(J)=US(I,L) 
          W(J)=WS(I,L) 
  341   CONTINUE 
        IF(IPTR.GE.2)THEN 
          DO 342 I=2,IPTR 
            J=J+1 
            U(J)=US(I,L) 
            W(J)=WS(I,L) 
  342     CONTINUE 
        ENDIF 
        IF (ADD1C) THEN 
          U(NLON)=US(IPTR+1,L) 
          W(NLON)=WS(IPTR+1,L) 
        ENDIF 
        DO 343 J=1,NLON 
          US(J,L)=U(J) 
          WS(J,L)=W(J) 
  343   CONTINUE 
  344 CONTINUE 
  345 CONTINUE 
C 
C     * INTERPOLATE THE DISPLAY LEVELS ONE COLUMN AT A TIME. 
C 
      DO 370 J=1,NLON 
        DO 350 L=1,NLEV 
          K=NLEV+1-L 
          U(L)=US(J,K) 
          W(L)=WS(J,K) 
  350   CONTINUE 
        IF(KIND.EQ.1)THEN 
          CALL LINIL(UX,PRX,LXP,U,PR,NLEV,0.,0.) 
          CALL LINIL(WX,PRX,LXP,W,PR,NLEV,0.,0.) 
        ENDIF 
        IF(KIND.EQ.3)THEN 
          CALL LGRIC(UX,PRX,LXP,U,PR,DEN,NLEV,0.,0.) 
          CALL LGRIC(WX,PRX,LXP,W,PR,DEN,NLEV,0.,0.) 
        ENDIF 
        DO 360 L=1,LXP 
          N=(L-1)*NLON+J 
          K=LXP+1-L 
          UXS(N)=UX(K) 
          WXS(N)=WX(K) 
  360   CONTINUE 
  370 CONTINUE 
C 
C     * INTERPOLATE HORIZONTALLY 
C 
      DO 372 L = 1,LXP 
        DO 374 J = 1,NLON 
        UX(J) = UXS( (L-1)*NLON + J) 
  374   WX(J) = WXS( (L-1)*NLON + J) 
        CALL LINIL(YX,SLONP,NLONP,WX,SLON,NLON,0.,0.) 
        CALL LINIL(PRX,SLONP,NLONP,UX,SLON,NLON,0.,0.) 
        DO 376 J = 1,NLONP 
        ZXU( (L-1)*NLONP + J) = PRX(J) 
  376   ZXW( (L-1)*NLONP + J) = YX(J) 
  372 CONTINUE 
      DO 378 I = 1,LXP*NLONP 
      WXS(I) = ZXW(I) 
  378 UXS(I) = ZXU(I) 
C 
C     * SKIP POINTS AND SCALE THE MERIDIONALLY AVERAGED U AND W FIELDS. 
C 
      INCX= ISCLON*INCX 
      INCZ= ISCLX*INCZ 
      LYR = NLONP 
      LXR = LXP 
      IF (INCX.GE.1 .AND. INCZ.GE.1) THEN 
        LYR=(NLONP-1)/INCX+1 
        LXR=(LXP-1)/INCZ+1 
        DO 380 J=1,LXR 
          JJ=(J-1)*INCX+1 
          DO 380 I=1,LYR 
            N=I +(J-1)*LYR 
            NN=(I-1)*INCX+1 + (JJ-1)*NLONP 
            ZXU(N)=UXS(NN)*VSCAL 
            ZXW(N)=WXS(NN)*VSCAL 
  380   CONTINUE 
      ENDIF 
C 
C     * COMPENSATE FOR SKIPPED POINTS AT TOP AND RIGHT OF FIELD 
C 
      NRIGHT = NLONP-(LYR-1)*INCX-1 
      NTOP   = LXP-(LXR-1)*INCZ-1 
      DRIGHT = FLOAT(NRIGHT)*PWDTH*DY/(PXR-PXL) 
      DTOP   = FLOAT(NTOP)*PHGT *DP/(PYB-PYT) 
C 
C    * DRAW THE VECTOR PLOT. 
C      -------------------- 
C 
      IF (PBOT+PHGT.GT.1.) THEN 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-110) 
      ENDIF 
      XPOS = FLOAT(LYR) 
      YPOS = FLOAT(LXR) 
      PWDTH = PWDTH-DRIGHT 
      PHGT  = PHGT -DTOP 
      CALL SET(PLEFT,PLEFT+PWDTH,PBOT,PBOT+PHGT,1.,XPOS,1.,YPOS,1) 
      IF (PB) CALL OPTN(5HTHICK,3) 
      CALL VELVCT(ZXU,LYR,ZXW,LYR,LYR,LXR,VLO,VI,-1,0,SPV) 
      IF (PB) CALL OPTN(5HTHICK,1) 
C 
C     * WRITE LABEL FOR VECTOR PLOT 
C 
      CALL SET(.01,.99,.01,.99, .01,.99,.01,.99, 1) 
      CALL PWRIT(FLEFT,FBOT+FHGT+.04,LABEL,80,1,0,0) 
C 
      WRITE(6,6050) LABEL 
C----------------------------------------------------------------------- 
C 
  700 CONTINUE 
C 
C     * LABEL THE LEFT-HAND AND RIGHT-HAND LONGITUDES OF THE FRAME. 
C 
      IF (.NOT.PB) THEN 
        IF((INT(FXL).GE.0).AND.(INT(FXL).LE.9))THEN 
          WRITE(IPNT,'(I1,X)') INT(FXL) 
          CALL PWRIT(FLEFT,FBOT-.015,IPNT,1,0,0,0) 
        ENDIF 
        IF(((INT(FXL).GE.-9).AND.(INT(FXL).LE.-1)).OR. 
     1     ((INT(FXL).GE.10).AND.(INT(FXL).LE.99)))THEN 
          WRITE(IPNT,'(I2,X)') INT(FXL) 
          CALL PWRIT(FLEFT-.003,FBOT-.015,IPNT,2,0,0,0) 
        ENDIF 
        IF(((INT(FXL).GE.-99).AND.(INT(FXL).LE.-10)).OR. 
     1                            (INT(FXL).GE.100))THEN 
          WRITE(IPNT,'(I3.1,X)') INT(FXL) 
          CALL PWRIT(FLEFT-.005,FBOT-.015,IPNT,3,0,0,0) 
        ENDIF 
        IF(INT(FXL).LE.-100)THEN 
          WRITE(IPNT,'(I4.1,X)') INT(FXL) 
          CALL PWRIT(FLEFT-.0105,FBOT-.015,IPNT,4,0,0,0) 
        ENDIF 
        IF((INT(FXR).GE.0).AND.(INT(FXR).LE.9))THEN 
          WRITE(IPNT,'(I1,X)') INT(FXR) 
          CALL PWRIT(FLEFT+FWDTH,FBOT-.015,IPNT,1,0,0,0) 
        ENDIF 
        IF(((INT(FXR).GE.-9).AND.(INT(FXR).LE.-1)).OR. 
     1     ((INT(FXR).GE.10).AND.(INT(FXR).LE.99)))THEN 
          WRITE(IPNT,'(I2,X)') INT(FXR) 
          CALL PWRIT(FLEFT+FWDTH-.003,FBOT-.015,IPNT,2,0,0,0) 
        ENDIF 
        IF(((INT(FXR).GE.-99).AND.(INT(FXR).LE.-10)).OR. 
     1                            (INT(FXR).GE.100))THEN 
          WRITE(IPNT,'(I3.1,X)') INT(FXR) 
          CALL PWRIT(FLEFT+FWDTH-.005,FBOT-.015,IPNT,3,0,0,0) 
        ENDIF 
        IF(INT(FXR).LE.-100)THEN 
          WRITE(IPNT,'(I4.1,X)') INT(FXR) 
          CALL PWRIT(FLEFT+FWDTH-.0105,FBOT-.015,IPNT,4,0,0,0) 
        ENDIF 
        CALL FRSTPT(FLEFT,FBOT-.01) 
        CALL VECTOR(FLEFT,FBOT) 
        CALL FRSTPT(FLEFT+FWDTH,FBOT-.01) 
        CALL VECTOR(FLEFT+FWDTH,FBOT) 
      ENDIF 
C 
C     * DETERMINE THE SPACING OF LON TICKS (INTT) AND LABELS (INTL). 
C 
      RANGE = FXR-FXL 
      IF (RANGE.LE.10.) INTT = 1 
      IF (RANGE.GT.10..AND.RANGE.LE.20.) INTT = 2 
      IF (RANGE.GT.20..AND.RANGE.LE.50.) INTT = 5 
      IF (RANGE.GT.50..AND.RANGE.LE.100.) INTT = 10 
      IF (RANGE.GT.100..AND.RANGE.LT.180.) INTT = 15 
      INTL = INTT 
      IF (RANGE.GE.180.) INTL = 30 
      IF (RANGE.EQ. 90.) INTL = 15 
      IF (RANGE.GE.180.) INTT = 10 
      IF (RANGE.EQ.90.) INTT = 5 
C 
C     * WRITE LONGITUDES AT BOTTOM OF FRAME. 
C 
      DO 710 I=0,360,INTL 
        IF (FLOAT(I).GE.FXL.AND.FLOAT(I).LE.FXR) THEN 
          XPOS = FLEFT + FWDTH*(FLOAT(I)-FXL)/(FXR-FXL) 
          IF(PB.OR.(XPOS-FLEFT.GT..02.AND.FLEFT+FWDTH-XPOS.GT..02))THEN 
            IF((I.GE.0).AND.(I.LE.9))THEN 
              WRITE(IPNT,'(I1,X)') I 
              CALL PWRIT(XPOS,FBOT-.015,IPNT,1,0,0,0) 
            ENDIF 
            IF((I.GE.10).AND.(I.LE.99))THEN 
              WRITE(IPNT,'(I2,X)') I 
              CALL PWRIT(XPOS-.003,FBOT-.015,IPNT,2,0,0,0) 
            ENDIF 
            IF(I.GE.100)THEN 
              WRITE(IPNT,'(I3.1,X)') I 
              CALL PWRIT(XPOS-.005,FBOT-.015,IPNT,3,0,0,0) 
            ENDIF 
          ENDIF 
          IF((I.EQ.0).OR.(I.EQ.360)) 
     1        CALL PWRIT(XPOS-.0035,FBOT+FHGT+.01,2HGM,2,0,0,0) 
          IF(I.EQ.180) 
     1        CALL PWRIT(XPOS-.0035,FBOT+FHGT+.01,2HID,2,0,0,0) 
        ENDIF 
        IF (FLOAT(-1*I).GE.FXL.AND.FLOAT(-1*I).LE.FXR.AND.I.NE.0) THEN 
          XPOS = FLEFT + FWDTH*(FLOAT(-1*I)-FXL)/(FXR-FXL) 
          IF(PB.OR.(XPOS-FLEFT.GT..02.AND.FLEFT+FWDTH-XPOS.GT..02))THEN 
            IF((-1*I.GE.-9).AND.(-1*I.LE.-1))THEN 
              WRITE(IPNT,'(I2,X)') -1*I 
              CALL PWRIT(XPOS-.003,FBOT-.015,IPNT,2,0,0,0) 
            ENDIF 
            IF((-1*I.GE.-99).AND.(-1*I.LE.-10))THEN 
              WRITE(IPNT,'(I3.1,X)') -1*I 
              CALL PWRIT(XPOS-.005,FBOT-.015,IPNT,3,0,0,0) 
            ENDIF 
            IF(-1*I.LE.-100)THEN 
              WRITE(IPNT,'(I4.1,X)') -1*I 
              CALL PWRIT(XPOS-.0105,FBOT-.015,IPNT,4,0,0,0) 
            ENDIF 
          ENDIF 
          IF(-1*I.EQ.-180) 
     1        CALL PWRIT(XPOS-.0035,FBOT+FHGT+.01,2HID,2,0,0,0) 
          IF(-1*I.EQ.-360) 
     1        CALL PWRIT(XPOS-.0035,FBOT+FHGT+.01,2HGM,2,0,0,0) 
        ENDIF 
  710 CONTINUE 
C 
C     * WRITE LON TICKS AT THE BOTTOM OF THE FRAME. 
C 
      DO 720 I=0,360,INTT 
        IF (FLOAT(I).GE.FXL.AND.FLOAT(I).LE.FXR) THEN 
          XPOS = FLEFT + FWDTH*(FLOAT(I)-FXL)/(FXR-FXL) 
          IF(PB.OR.(XPOS-FLEFT.GT..02.AND.FLEFT+FWDTH-XPOS.GT..02))THEN 
            CALL FRSTPT(XPOS,FBOT-.01) 
            CALL VECTOR(XPOS,FBOT) 
          ENDIF 
        ENDIF 
        IF (FLOAT(-1*I).GE.FXL.AND.FLOAT(-1*I).LE.FXR.AND.I.NE.0) THEN 
          XPOS = FLEFT + FWDTH*(FLOAT(-1*I)-FXL)/(FXR-FXL) 
          IF(PB.OR.(XPOS-FLEFT.GT..02.AND.FLEFT+FWDTH-XPOS.GT..02))THEN 
            CALL FRSTPT(XPOS,FBOT-.01) 
            CALL VECTOR(XPOS,FBOT) 
          ENDIF 
        ENDIF 
  720 CONTINUE 
C 
C     * INSERT THE PRESSURE IN MB OF THE INPUT LEVELS. 
C 
      IF (.NOT.PB) THEN 
        ITOP = INT(FYT+.5) 
        IF ((KAX.EQ.1).OR.(KAX.EQ.3)) ITOP = INT(EXP(FYT)+.5) 
        WRITE(IPNT,'(I4)') ITOP 
        CALL PWRIT(FLEFT-.031,FBOT+FHGT,IPNT,4,0,0,0) 
        CALL FRSTPT(FLEFT-.005,FBOT+FHGT) 
        CALL VECTOR(FLEFT,FBOT+FHGT) 
        CALL FRSTPT(FLEFT+FWDTH,FBOT+FHGT) 
        CALL VECTOR(FLEFT+FWDTH+.005,FBOT+FHGT) 
        IF (ICOSH1.LE.1.AND.ICOSH2.LE.1) 
     1     CALL PWRIT(FLEFT+FWDTH+.006,FBOT+FHGT,IPNT,4,0,0,0) 
      ENDIF 
C 
      DO 730 L=1,NLEV 
        IF (PR(L).GT.FYB.OR.PR(L).LT.FYT) GO TO 725 
C 
C       * YPOS = SCREEN HEIGHT OF THE CURRENT PRESSURE LEVEL. 
C 
        YPOS=FBOT+FHGT*(PR(L)-FYB)/(FYT-FYB) 
C 
C       * DRAW A TICK ON EACH SIDE OF THE PLOT. 
C 
        IF (PB.OR.(FHGT+FBOT-YPOS.GE..01)) THEN 
          CALL FRSTPT(FLEFT-.005,YPOS) 
          CALL VECTOR(FLEFT,YPOS) 
          CALL FRSTPT(FLEFT+FWDTH,YPOS) 
          CALL VECTOR(FLEFT+.005+FWDTH,YPOS) 
C 
C         * SET IPNT TO THE FOUR DIGITS OF THE PRESSURE 
C         * AND WRITE BESIDE THE TICK ON EACH SIDE OF THE PLOT. 
C 
          WRITE(IPNT,'(I4)') LEV(L) 
          CALL PWRIT(FLEFT-.031,YPOS,IPNT,4,0,0,0) 
          IF (PB.OR.(ICOSH1.LE.1.AND.ICOSH2.LE.1)) 
     1         CALL PWRIT(FWDTH+FLEFT+.006,YPOS,IPNT,4,0,0,0) 
        ENDIF 
  725   CONTINUE 
  730 CONTINUE 
C 
C     * DRAW THE FRAME AROUND THE PLOT 
C 
      IF (FBOT+FHGT.GT.1.) THEN 
        CALL BURNF 
        CALL                                       XIT(7HZLNPLOT,-111) 
      ENDIF 
      CALL SET(FLEFT,FLEFT+FWDTH,FBOT,FBOT+FHGT,.01,.99,.01,.99,1) 
      CALL PERIM(1,1,1,1) 
      CALL SET(.01,.99,.01,.99, .01,.99,.01,.99, 1) 
C 
C     * THE LAST CHARACTER OF THE PLOT IS AN X IN THE UPPER RIGHT CORNER 
C 
      CALL PWRIT(.97,.97,1HX,1,0,0,0) 
      CALL FRAME 
      GO TO 150 
 
C     * E.O.F. ON INPUT. 
 
  900 CALL                                         XIT(7HZLNPLOT,0) 
 
C     * E.O.F. ON FILE Z. 
 
  901 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-112) 
 
C     * OTHER IMPROPER EXITS. 
 
  902 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-113) 
  903 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-114) 
  904 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-115) 
  905 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-116) 
  906 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-117) 
  907 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-118) 
  908 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-119) 
  909 CALL BURNF 
      CALL                                         XIT(7HZLNPLOT,-120) 
C--------------------------------------------------------------------- 
 5010 FORMAT(10X,1X,A4,I5,2I1,I3,I5,4E10.0,I5,1X,2I2) 
 5012 FORMAT(10A8) 
 5014 FORMAT(10X,8I5) 
 5016 FORMAT(10X,8E10.0) 
 5018 FORMAT(10X,4E10.0,I5) 
 5020 FORMAT(10X,3E10.0,2I5) 
 6010 FORMAT(20H0..EOF LOOKING FOR  ,A4) 
 6020 FORMAT(50H0NAME,MOD,ICOSH1,ICOSH2,MS,LX,SCAL,FLO,HI,FINC,KAX, 
     1 12H,IOVRLY,KIND,/,X,A4,X,I3,I6,I7,2I3,4(X,F9.3),X,3I2) 
 6025 FORMAT(1H ,A4,I12,1X,A4,I10,4I6) 
 6040 FORMAT(18H0 CROSS-SECTION   ,10A8) 
 6050 FORMAT(18H  VECTOR PLOT     ,10A8) 
      END 
