SUBROUTINE CALTHET(pres,temp,theta,nlev,maxlev)
      IMPLICIT NONE
C
C  Arguments
C
      INTEGER maxlev,nlev
      REAL pres(maxlev),temp(maxlev),theta(maxlev)
C
C Misc internal variables
C
      REAL RCp
      PARAMETER (RCp=0.286)
      INTEGER k
C
      DO k=1,nlev
        theta(k)=(temp(k)+273.15)*((1000./pres(k))**RCp)
      END DO
      RETURN
      END
C

      SUBROUTINE CALUV(drct,sped,u,v,nlev,maxlev),1
      IMPLICIT NONE
C
C  Arguments
C
      INTEGER maxlev,nlev
      REAL drct(maxlev),sped(maxlev),u(maxlev),v(maxlev)
C
C Misc internal variables
C
      INTEGER k
C
      DO k=1,nlev
        CALL GET_UV(drct(k),sped(k),u(k),v(k))
      END DO
      RETURN
      END
C

      SUBROUTINE CALDDFF(u,v,drct,sped,nlev,maxlev),1
      IMPLICIT NONE
C
C  Arguments
C
      INTEGER maxlev,nlev
      REAL drct(maxlev),sped(maxlev),u(maxlev),v(maxlev)
C
C Misc internal variables
C
      INTEGER k
C
      DO k=1,nlev
        CALL GET_DDFF(u(k),v(k),drct(k),sped(k))
      END DO
      RETURN
      END
C

      SUBROUTINE CALQ(pres,temp,dewp,q,nlev,maxlev)
      IMPLICIT NONE
C
C  Arguments
C
      INTEGER maxlev,nlev
      REAL pres(maxlev),temp(maxlev),dewp(maxlev),q(maxlev)
C
C Misc internal variables
C
      INTEGER k
      REAL DWPTOQ
C
      DO k=1,nlev
        q(k)=DWPTOQ(pres(k),temp(k),dewp(k))
      END DO
      RETURN
      END
 

       SUBROUTINE CALDEWP(pres,q,dewp,nlev,maxlev) 1
       IMPLICIT NONE
C
C  Computes dew-point (C) from mixing ratio (g/kg) and
C  pressure (mb) for all sounding levels.
C
C  Uses gempak function PR_DWPT for the conversion.
C
C  Arguments
C
       INTEGER maxlev,nlev
       REAL pres(maxlev),dewp(maxlev),q(maxlev)
C
C Misc internal variables
C
       INTEGER k
       REAL PR_DWPT
 
       DO k=1,nlev
         IF(pres(k).GT.0. .AND. q(k).GT.0.) THEN
           dewp(k)=PR_DWPT(q(k),pres(k))
         ELSE
           dewp(k)=-9999.
         END IF
       END DO
       RETURN
       END
C

      SUBROUTINE GET_UV(DD,FF,U,V) 2
      IMPLICIT NONE
      REAL DD,FF,U,V,DEG2R,SPVAL,MIS_VAL
      PARAMETER (DEG2R=0.0174532925, SPVAL=-9998., 
     +           MIS_VAL=-9999.0)
      IF(DD.GT.SPVAL .AND. FF.GT.SPVAL) THEN
        U=-FF*SIN(DEG2R*DD)
        V=-FF*COS(DEG2R*DD)
      ELSE
        U=MIS_VAL
        V=MIS_VAL
      END IF
      RETURN
      END
C

      SUBROUTINE GET_DDFF(U,V,DD,FF) 5
      IMPLICIT NONE
      REAL DD,FF,U,V,RAD2D,SPVAL,MIS_VAL
      PARAMETER (RAD2D=57.29577951, SPVAL=-9998., 
     +           MIS_VAL=-9999.0)
      IF(U.GT.SPVAL .AND. V.GT.SPVAL) THEN
        FF = SQRT((U*U + V*V))
        IF(FF.NE.0.) THEN
          DD = RAD2D*ATAN2(U,V)
          DD = DD+180.
          IF (DD.GT.360.) DD=DD-360.
        ELSE
          DD=0.
        END IF
      ELSE
        DD = MIS_VAL
        FF = MIS_VAL
      END IF
      RETURN
      END
C

      FUNCTION DWPTOQ(PRESS,T,DWPT)
C
C  Calculates mixing ratio (g/kg) given pressure (mb) and
C  dewpoint (C).
C  
C  If dew point is missing (.LT.-90.) or the dew point depression
C  is reported as 30 degrees, then the QV is calculated as 20 percent
C  of the saturation QV.
C  
C  If temp and dew point are missing, QV=0.
C
C  Version for surface data Keith Brewster April, 1991     OU SoM
C  ARPS version             Keith Brewster February, 1992
C  Modsnd version           Keith Brewster March, 1992
C  Based on routines documented in GEMPAK manual
C
C
      IMPLICIT NONE
C
C  Function
C
      REAL DWPTOQ
      REAL PRESS,T,DWPT
C
C  Misc internal variables
C
      REAL DEPRS,VAPR,E,QVSAT
C
      DEPRS=T-DWPT
      IF(DWPT.GT.-90. .AND. DEPRS.LT.29.999) THEN
        vapr=6.112 * exp((17.67 * dwpT)/ (dwpT + 243.5))
        e = vapr *( 1.001 + (PRESS-100.)/ 900. * .0034)
        DWPTOQ = .62197 *( e/(PRESS - e)) * 1000.
      ELSE IF(T.GT.-90.) THEN
        vapr=6.112 * exp((17.67 * T)/ (T + 243.5))
        e = vapr *( 1.001 + (PRESS-100.)/ 900. * .0034)
        QVSAT = .62197 *( e/(PRESS - e)) * 1000.
        DWPTOQ=0.2*QVSAT
      ELSE
        DWPTOQ=0.
      END IF
      DWPTOQ=AMAX1(DWPTOQ,0.)
C      print *, '  PRESS, TEMP, DEWPT = ',PRESS,T,DWPT
C      print *, '      Yer mixing ratio is: ',DWPTOQ
      RETURN
      END
C
c     SUBROUTINE CALHGT(pres,hght,temp,dewp,
c    +                  selev,nlev,maxlev)
c
C  fills in missing heights by integrating the hydrostatic eqn
c  uses GEMPAK subroutines where possible
c
c     IMPLICIT NONE
c
C  Arguments
C
c     INTEGER nlev,maxlev
c     REAL pres(maxlev),hght(maxlev),temp(maxlev),dewp(maxlev)
c     REAL selev
C
C  GEMPAK functions
C
c     REAL PR_SCLH,PR_MHGT
c     External PR_SCLH,PR_MHGT
C
C  Misc internal variables
C
c     INTEGER k
c     REAL tdb,tdt,sclh
C
c    
c     hght(1)=selev
c     DO k=2,nlev
c       IF(hght(k).LT.selev) THEN
c         tdb=amax1(dewp(k-1),(temp(k-1)-30.))
c         tdt=amax1(dewp(k),(temp(k)-30.))
c         SCLH=PR_SCLH(temp(k-1),temp(k),tdb,tdt,pres(k-1),pres(k))
c         hght(k)=PR_MHGT(hght(k-1),pres(k-1),pres(k),sclh)
c       END IF
c     END DO
c     RETURN
c     END
c
c
c
c

      Real Function PR_DWPT (qvgkg,presmb)
      Implicit None
      Include 'thermo.consts'
      Real	qvgkg,presmb
      Include 'thermo.stfunc'
c
c  Convert qv,p -> Td. Meteorological units.
c
      PR_DWPT = Ftdewc(Fvpres(presmb*100.,qvgkg*1.e-3))
      End