• Main Page
  • Modules
  • Data Types List
  • Files
  • File List
  • File Members

dtess_eau.F90

Go to the documentation of this file.
00001 !------------------------------------------------------------------------------
00002 subroutine dtess_eau (len, pl, tl, ess, dtess)
00003 !------------------------------------------------------------------------------
00004 !eau_sat computes the saturation mixing ratio, vapor pressure, and saturation,
00005 !and their derivatives with respect to temperature over water, ice and mixed-
00006 !phase clouds. the parameterization is that used in the Community Climate Com-
00007 !munity Climate Model at NCAR.
00008 !Laura D. Fowler /slikrock (07-01-01).
00009 
00010 !send comments to laura@atmos.colostate.edu.
00011 
00012 !subroutines called:
00013 !none.
00014 
00015 !argument list variables:
00016 !input arguments:
00017 !----------------
00018 
00019 use kinds
00020 use physical_parameters, only: hltm, rv
00021       
00022 implicit none
00023       
00024 
00025 integer (kind=int_kind), intent(in) :: len                !length of vector.
00026 
00027 real(kind=dbl_kind), intent(in), dimension(len):: 
00028    pl,               !pressure                                           (Pa).
00029    tl                 !temperature                                         (K).
00030 
00031 !output arguments:
00032 !-----------------
00033 
00034 real (kind=dbl_kind), intent(out), dimension(len) :: 
00035    ess,              !saturation vapor pressure                          (Pa).
00036    dtess              !derivative of es with respect to temperature     (Pa/K).
00037 
00038 !local variables:
00039 
00040 integer (kind=int_kind):: i
00041 
00042 real (kind=dbl_kind):: 
00043    twmin=173.16,     !lowest allowed temperature boundary for water       (K).
00044    twmax=373.16,     !highest allowed temperature boundary for water      (K).     
00045    timin=173.16,     !lowest allowed temperature boundary for ice         (K).
00046    timax=273.16,     !highest allowed temperature boundary for ice        (K).
00047    tnull=273.16       !freezing temperature                                (K).
00048 
00049 real (kind=dbl_kind) :: tstl , t0tl
00050 
00051 real (kind=dbl_kind), dimension(len):: 
00052       esw ,     dtesw ,      esi ,     dtesi ,
00053       esm ,     dtesm ,      tl0 ,            
00054     wghtm 
00055 
00056 !ccm parameterization of saturation vapor pressure over water and ice:
00057 
00058 real (kind=dbl_kind), parameter:: 
00059    ps = 1013.246,                   !reference pressure             (hPa).
00060    ts = 373.16,                     !reference temperature            (K).
00061    t0 = 273.16,                     !freezing temperature             (K)
00062    lsub = hltm+0.3336e+06_dbl_kind, !
00063    tbgmin   = 253.15_dbl_kind,      !
00064    tbgmax   = 273.15_dbl_kind        !
00065   
00066 real (kind=dbl_kind):: 
00067        e1 ,   e2 ,     f ,    f1 ,
00068        f2 ,   f3 ,    f4 ,    f5 ,
00069    lphase , term , term1 , term2 ,
00070    term3     
00071 
00072 !------------------------------------------------------------------------------
00073 
00074 !initialization of different arrays:
00075 
00076 tl0    = tl
00077 esw    = 0.0_dbl_kind
00078 esi    = 0.0_dbl_kind
00079 esm    = 0.0_dbl_kind
00080 dtesw  = 0.0_dbl_kind
00081 dtesi  = 0.0_dbl_kind
00082 dtesm  = 0.0_dbl_kind
00083 
00084 ess    = 0.0_dbl_kind
00085 dtess  = 0.0_dbl_kind
00086 
00087 !saturation over water:
00088 
00089 do i = 1, len
00090 
00091    tl0(i)    = max(twmin,tl0(i))
00092    tl0(i)    = min(twmax,tl0(i))
00093    tstl      = ts / tl0(i)
00094    e1        = 11.344*(1.0 - tl0(i)/ts)
00095    e2        = -3.49149*(tstl - 1.0)
00096    f1        = -7.90298*(tstl - 1.0)
00097    f2        = 5.02808*log10(tstl)
00098    f3        = -1.3816*(10.0**e1-1.0)/10000000.0
00099    f4        = 8.1328*(10.0**e2-1.0)/1000.0
00100    f5        = log10(ps)
00101    f         = f1 + f2 + f3 + f4 + f5
00102 
00103    esw(i)    = (10.0**f)*1.e+02
00104    esw(i)    = min(esw(i),pl(i)*0.9)
00105    dtesw(i)  = hltm*esw(i)/(rv*tl0(i)*tl0(i))
00106 
00107    ess(i)    = esw(i)
00108    dtess(i)  = dtesw(i)
00109 
00110 
00111 !saturation over ice:
00112 
00113    if(tl0(i).lt.timax) then
00114 
00115       tl0(i)    = max(tl0(i),timin)
00116       t0tl      = t0 / tl0(i)
00117       term1     = 2.01889049/(t0tl)
00118       term2     = 3.56654*log(t0tl)
00119       term3     = 20.947031*(t0tl)
00120 
00121       esi(i)    = 575.185606e10*exp(-(term1 + term2 + term3))
00122       esi(i)    = min(esi(i),pl(i)*0.9)
00123       dtesi(i)  = lsub*esi(i)/(rv*tl0(i)*tl0(i))
00124 
00125       ess(i)    = esi(i)
00126       dtess(i)  = dtesi(i)
00127 
00128    endif
00129 
00130 !interpolated saturation variables:
00131 
00132    if(tl0(i).lt.tbgmax .and. tl0(i).ge.tbgmin) then
00133 
00134       wghtm(i)  = (tl0(i)-tbgmin)/(tbgmax-tbgmin)
00135       lphase    = hltm*wghtm(i)+lsub*(1.-wghtm(i))
00136       esm(i)    = wghtm(i)*esw(i) + (1.-wghtm(i))*esi(i)
00137       esm(i)    = min(esm(i),pl(i)*0.9)
00138       dtesm(i)  = lphase*esm(i)/(rv*tl0(i)*tl0(i))
00139 
00140       ess(i)    = esm(i)
00141       dtess(i)  = dtesm(i)
00142 
00143    endif
00144 enddo
00145 
00146 end subroutine dtess_eau

Generated on Tue Apr 16 2013 21:01:40 for SIB by  doxygen 1.7.1