123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- !
- !ProTeX: 1.14-AJS
- !
- !BOI
- !
- ! !TITLE: Phys - Physics library.
- ! !AUTHORS: Arjo Segers
- ! !AFFILIATION: KNMI
- ! !DATE: 12/08/2004
- !
- !
- ! !INTRODUCTION: Introduction
- !
- ! The 'phys' library contains subroutines for model physica.
- !
- !
- ! !INTRODUCTION: Geo-potential-height
- !
- ! \begin{itemize}
- !
- ! \item Potential height of an air parcel given top and bottom pressure,
- ! temperature, and humidity:
- ! \bv
- ! subroutine PotentialHeight( ptop, pdown, T, Q, dh )
- ! real, intent(in) :: ptop, pdown ! pressure bounds (Pa)
- ! real, intent(in) :: T ! temperature (K)
- ! real, intent(in) :: Q ! specific humidity (kg h2o/kg air)
- ! real, intent(out) :: dh ! geo.pot.height bounds (m)
- ! end subroutine PotentialHeight
- ! \ev
- !
- ! \item Geo-potential-height at half level boundaries:
- ! \bv
- ! subroutine GeoPotentialHeightB( lm, pb, T, Q, h0, gphb )
- ! integer, intent(in) :: lm ! number of levels
- ! real, intent(in) :: pb(lm+1) ! pressure bounds (Pa)
- ! real, intent(in) :: T(lm) ! temperature (K)
- ! real, intent(in) :: Q(lm) ! specific humidity (kg h2o/kg air)
- ! real, intent(in) :: h0 ! initial height (m)
- ! real, intent(out) :: gphb(lm+1) ! geo.pot.height bounds (m)
- ! \ev
- !
- ! \item Geo-potential-height at full levels.
- ! A full level has a pressure in between the top and bottom pressure of a layer.
- ! Temperature and humidity are assumed to be constant in a layer.
- ! \bv
- ! subroutine GeoPotentialHeight( updo, lm, pb, T, Q, h0, gph )
- ! integer, intent(in) :: lm
- ! real, intent(in) :: pb(lm+1) ! pressure bounds (Pa)
- ! real, intent(in) :: T(lm) ! temperature (K)
- ! real, intent(in) :: Q(lm) ! specific humidity (kg h2o/kg air)
- ! real, intent(in) :: h0 ! initial height (m)
- ! real, intent(out) :: gph(lm) ! geo.pot.height (m)
- ! \ev
- !
- ! \end{itemize}
- !
- !
- ! !INTRODUCTION: Humidity functions
- !
- ! \begin{itemize}
- !
- ! \item Saturation specific humidity:
- ! \bv
- ! real function QSat( T, p )
- ! real, intent(in) :: T ! temperature (K)
- ! real, intent(in) :: p ! pressure (Pa)
- ! end function QSat
- ! \ev
- !
- ! \item Derivative of saturation specific humidity with
- ! respect to temperature:
- ! \bv
- ! real function dQSat_dT( T, p )
- ! real, intent(in) :: T ! temperature (K)
- ! real, intent(in) :: p ! pressure (Pa)
- ! end function dQSat_dT
- ! \ev
- !
- ! \item Specific humidity given relative humidity, temperature, and pressure:
- ! \bv
- ! real function QH2O( R, T, p )
- ! real, intent(in) :: R ! rel. humidity (%)
- ! real, intent(in) :: T ! temperature (in K)
- ! real, intent(in) :: p ! pressure (Pa)
- ! end function QH2O
- ! \ev
- !
- ! \end{itemize}
- !
- !
- ! !INTRODUCTION: Convective clouds
- !
- ! \bv
- ! subroutine ConvCloudDim( updo, lm, detu, entd, &
- ! iclbas, ictop, icllfs, &
- ! status )
- !
- ! character(len=1), intent(in) :: updo
- ! integer, intent(in) :: lm
- !
- ! real, intent(in) :: detu(lm)
- ! real, intent(in) :: entd(lm)
- !
- ! character(len=1), intent(in) :: updo
- !
- ! ! cloud base, top, level of free sinking
- ! integer, intent(out) :: iclbas
- ! integer, intent(out) :: ictop
- ! integer, intent(out) :: icllfs
- !
- ! integer, intent(out) :: status
- !
- ! \ev
- !
- !
- ! !INTRODUCTION: Cloud cover
- !
- ! \bv
- ! subroutine cf_overhead( nlev, yclfr, wccro, scheme, eps )
- !
- ! integer, intent(in) :: nlev
- ! real, intent(in) :: yclfr(nlev)
- ! real, intent(out) :: wccro(nlev)
- ! character(len=*), intent(in), optional :: scheme
- ! real, intent(in), optional :: eps
- !
- ! input:
- ! nlev : number of vertical levels
- ! yclfr : cloud fraction (cc) per cell (0-1)
- !
- ! output:
- ! wccro: overhead cloud fraction
- !
- ! optional arguments:
- ! scheme='ecmwf' : 'ecmwf' -> iovln=1
- ! 'other' -> iovln=0
- ! eps=1.0e-4 : cltres
- !
- ! parameters:
- ! iovln : switch
- ! 1 = ecmwf (maximum random overlap assumption) scheme
- ! 0 = another scheme
- ! cltres : threshold (minimum) cloud fraction used
- ! for numerical stability (division by zero
- ! and to eliminate small unrealistic cloud fractions
- !
- ! Notes:
- ! - Index=1 of arrays (yclfr) corresponds to model top
- ! - The clouds are supposed to be distributed homogeneously
- ! in the vertical in each layer.
- ! \ev
- !
- !
- ! !INTRODUCTION: Virtual temperature
- !
- ! \begin{itemize}
- !
- ! \item Convert from real temperature and specific humidity to virtual temperature:
- ! \bv
- ! elemental function VirtualTemperature( T, Q )
- ! real :: VirtualTemperature ! K
- ! real, intent(in) :: T ! real temperature (K)
- ! real, intent(in) :: Q ! specific humidity (kg H2O / kg air)
- ! end function VirtualTemperature
- ! \ev
- !
- ! \item Convert from virtual temperature and specific humidity to temperature:
- ! \bv
- ! elemental function RealTemperature( Tv, Q )
- ! real :: RealTemperature ! K
- ! real, intent(in) :: Tv ! virtual temper (K)
- ! real, intent(in) :: Q ! specific humidity (kg H2O / kg air)
- ! end function RealTemperature
- ! \ev
- !
- ! \end{itemize}
- !
- !EOI
- !
- !
- ! Physics library.
- !
- module Phys
- use Phys_GPH
- use Phys_Humidity
- use Phys_Convec
- use Phys_CloudCover
- use Phys_Tv
- use Phys_sza
-
- public
- end module Phys
|