c
c     ##################################################################
c     ##################################################################
c     ######                                                      ######
c     ######                SUBROUTINE STRCAP                     ######
c     ######                                                      ######
c     ######                Copyright (c) 1992                    ######
c     ######  Center for the Analysis and Prediction of Storms    ######
c     ######    University of Oklahoma.  All rights reserved.     ######
c     ######                                                      ######
c     ##################################################################
c     ##################################################################
c
      SUBROUTINE STRCAP(inline,outline,len)
c
c
c#######################################################################
c
c     PURPOSE:
c
c     Capitalizes any letters found in input character string inline
c     and puts result in character string outline.
c     Makes use of the fact that ASCII lower-case "a" is 32 greater than
c     upper-case "A" (and similarly for b-thru-z).
c
c#######################################################################
c
c     AUTHOR: Keith Brewster   OU School of Meteorology  April, 1992
c
c     MODIFICATION HISTORY:
c       8/02/92  Modified from arps2.5 to arps3.0
c
c#######################################################################
c
c     INPUT : 
c       inline     line to be capitalized
c       len        length of inline
c
c     OUTPUT :
c
c       outline    capitalized inline
c
c#######################################################################
c
c     Variable Declarations.
c
c#######################################################################
c
      implicit none
c
      integer len
      character*1 inline(len)
      character*1 outline(len)
c
c#######################################################################
c
c     Misc. local variables
c
c#######################################################################
c
      integer letasc
      integer k
c
c#######################################################################
c
c     Fortran intrinsic functions
c
c#######################################################################
c
      logical lge,lle
      integer ichar
      character*1 char
c
c#######################################################################
c
c     Search line for valid characters
c
c#######################################################################
c
      DO 100 k=1,len
        IF(LGE(inline(k),'a') .AND. LLE(inline(k),'z')) THEN
          letasc=ICHAR(inline(k))
          outline(k)=CHAR(letasc-32)
        ELSE
          outline(k)=inline(k)
        END IF
 100  CONTINUE
      RETURN
      END
c
c     ##################################################################
c     ##################################################################
c     ######                                                      ######
c     ######                SUBROUTINE PARSLN                     ######
c     ######                                                      ######
c     ######                Copyright (c) 1992                    ######
c     ######  Center for the Analysis and Prediction of Storms    ######
c     ######    University of Oklahoma.  All rights reserved.     ######
c     ######                                                      ######
c     ##################################################################
c     ##################################################################
c
      SUBROUTINE parsln(inline,reqprm,len,maxpar,nparms)
c
c
c#######################################################################
c
c     PURPOSE:
c
c     Parses user input line and pulls off character
c     strings in ASCII range A-Z or 1-9.  
c
c     Input line should be capitalized BEFORE calling this routine.
c
c#######################################################################
c
c     AUTHOR: Keith Brewster   OU School of Meteorology
c
c     MODIFICATION HISTORY:
c       8/02/92  Modified from arps2.5 to arps3.0
c
c#######################################################################
c
c     INPUT : 
c       inline     character string to be aprsed
c       len        length of inline
c       maxpar     maximum number of substrings to store
c
c     OUTPUT : 
c       reqprm     substrings 
c       nparms     number of substrings found
c
c#######################################################################
c
c     Variable Declarations.
c
c#######################################################################
c
      implicit none
c
      integer len,maxpar
      character*1 inline(len)
      character*2 reqprm(maxpar)
      integer nparms
c
c#######################################################################
c
c     Misc. local variables
c
c#######################################################################
c
      character*2 star
      integer k,l
c
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
C
C     Beginning of executable code...
C
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
c
c#######################################################################
c
c     Set all output parms to missing value, "*"
c     which has ASCII decimal number = 42
c
c#######################################################################
c
      star='**'
      DO 10 k=1,maxpar
        reqprm(k)=star
 10   CONTINUE
c
c#######################################################################
c
c     Search line for valid characters
c
c#######################################################################
c
      k=1
      l=1
 20   CONTINUE
        IF((LGE(inline(l),'A') .AND. LLE(inline(l),'Z')) .AND.
     +     (LGE(inline(l+1),'A') .AND. LLE(inline(l+1),'Z')) ) THEN
          reqprm(k)(1:1)=inline(l)
          reqprm(k)(2:2)=inline(l+1)
          k=k+1
          IF(k.gt.maxpar) GO TO 100
          l=l+2
        ELSE
          l=l+1
        END IF
      IF(l.le.len) GO TO 20
 100  CONTINUE
c
c#######################################################################
c
c     Record number of substrings saved in reqprm
c
c#######################################################################
c
      nparms=k-1
      RETURN
      END
c
c     ##################################################################
c     ##################################################################
c     ######                                                      ######
c     ######                SUBROUTINE KNTARY                     ######
c     ######                                                      ######
c     ######                Copyright (c) 1992                    ######
c     ######  Center for the Analysis and Prediction of Storms    ######
c     ######    University of Oklahoma.  All rights reserved.     ######
c     ######                                                      ######
c     ##################################################################
c     ##################################################################
c
      SUBROUTINE kntary(fmtver,
     :            grdout,basout,varout,mstout,iceout,trbout,
     :            n3dary,n3dsclr)
c
c#######################################################################
c
c     PURPOSE:
c
c     Count the number of 3-D arrays and 3-D scalars that should be
c     written into a history file depending on the switches that 
c     have been set and the version.
c
c     For now, we have one version so fmtver is not consulted.
c
c#######################################################################
c
c     AUTHOR: Keith Brewster
c     7/14/92
c
c     MODIFICATION HISTORY:
c
c#######################################################################
c
c     INPUT:
c
c     fmtver  Format/Version number a character string describing the
c             format and version number of the grid writing routine
c
c     grdout =0 or 1. If grdout=0, grid variables are not written. 
c     basout =0 or 1. If basout=0, base state variables are not dumped.
c     varout =0 or 1. If varout=0, model perturbation variables are not written. 
c     mstout =0 or 1. If mstout=0, water variables are not written. 
c     iceout =0 or 1. If iceout=0, writing of qi, qs and qh is skipped.
c     trbout =0 or 1. If trbout=0, writing of turbulence param km is skipped.
c
c     OUTPUT:
c
c     n3dary     Total number of 3-D arrays written into history file
c     n3dsclr    Total number of 3-D scalars written into history file
c
c#######################################################################
c
c     Variable Declarations.
c
c#######################################################################
c
      implicit none
c
      character*40 fmtver
      integer grdout,basout,varout,mstout,iceout,trbout
      integer n3dary,n3dsclr
c
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
C
C     Beginning of executable code...
C
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
c
      n3dary=0
      n3dsclr=0
      IF( grdout.eq.1 ) n3dary=n3dary+3
      IF( basout.eq.1 ) THEN
        n3dary=n3dary+7
        n3dsclr=n3dsclr+4
      ENDIF
      IF( varout.eq.1 ) THEN
        n3dary=n3dary+5
        n3dsclr=n3dsclr+2
      ENDIF
      IF( mstout.eq.1 ) THEN
        n3dary=n3dary+3
        n3dsclr=n3dsclr+3
        IF( iceout.eq.1 ) THEN
          n3dary=n3dary+3
          n3dsclr=n3dsclr+4
        ENDIF
      ENDIF
      IF( trbout.eq.1 ) THEN
        n3dary=n3dary+1
        n3dsclr=n3dsclr+1
      ENDIF

      RETURN
      END
