Given the model's instantaneous or time-averaged relative humidity
the scheme calculates the levels that have clouds, and specifies
the albedo and absorption for the two shortwave bands, and the
lognwave emissivity of the clouds.
The algorithm for the RH_CLOUDS Module is as detailed below.
A "cloud" is defined to be present whenever the relative humidity is greater
or equal to r_crit, where r_crit varies linearly in
sigma = pressure/surface_pressure:
r_crit = rh_crit_top + sigma*(rh_crit_bot - rh_crit_top)
If clouds are present in adjacent levels, they constitute a single cloud
i.e., for a 10 level model (0,1,1,1,0,0,1,1,0,1,0)
( 0 = no-cloud 1 = cloud)
there are three clouds
Clouds are defined as "high" if sigma <= high_middle
Clouds are defined as "middle" if high_middle < sigma <= middle_low
Clouds are defined as "low" if middle_low < sigma
The values of high_middle and middle_low are latitude-dependent,
x = (90.0 - abs(deg_lat))/90.
high_middle = high_middle_pole + x*(high_middle_eq - high_middle_pole)
middle_low = middle_low_pole + x*(middle_low_eq - middle_low_pole )
where high_middle_pole etc are namelist parameters.
The short wave and near infrared albedos of each cloud type (high, middle low)
are determined by a table look-up that depends on zenith angle
-- ( so six functions of zenith angle are tabulated in all)
-- sigma at cloud base determines whether it is high, medium or low
-- optical parameters do NOT depend on thickness of cloud
The short wave absorption coefficient of all clouds is set to 0.0
The near-infrared absorption coefficients for high, middle, and low clouds
are set in the namelist
The infrared emissivity of each cloud type is also set in the namelist
PUBLIC ROUTINES
-----------------------------------------------------------------------
call rh_clouds(rh, p_full, p_surf, zenith, deg_lat,&
n_cloud,top,bot,cldamt,alb_uv,alb_nir,abs_uv,abs_nir,emiss)
(In the following the phrase "dimension(:) or (:,:)" means
that this routine can be called either with all of the
variables so designated being either 1d or 2d arrays.
All of these arrays should conform exactly.)
(That is rh_clouds is a module procedure which can be called
with full 3-dimensional arguments or a single point)
input
rh relative humidity on model levels (fraction)
[real, dimension(:,:,:)]
pfull pressure at full model levels {Pascals}.
[real,dimension(:,:,nlev)]
IMPORTANT NOTE: p(j) < p(j+1)
p_surf surface pressure surface{Pascals} [real,dimension(:,:)]
zenith cosine of the solar zenith angle [real,dimension(:,:)]
deg_lat latitude in degrees [real,dimension(:,:)]
output
n_cloud number of (random overlapping) clouds in column
[integer,dimension(:,:)]
top index of vertical level which contains the top of
the i'th cloud in the column. [integer,dimension(:,:,i),
where i = 1, n_cloud(:,:)]
bot index of vertical level which contains the bottom of
the i'th cloud in the column. [integer,dimension(:,:,i)]
cldamt horiztonal area amount of i'th cloud (fraction)
[real,dimension(:,:,i)]
alb_uv cloud reflectance in ultra-violet (uv) band of i'th cloud
(fraction) [real,dimension(:,:,i)]
alb_nir cloud reflectance in the near-infrared (nir) band of i'th
cloud (fraction) [real,dimension(:,:,i)]
abs_uv cloud absorptance in the uv band of i'th cloud
(fraction) [real,dimension(:,:,i)]
abs_nir cloud absorptance in the nir band of i'th cloud
(fraction) [real,dimension(:,:,i)]
emiss longwave emissivity of the i'th cloud (fraction)
[real,dimension(:,:,i)]
-----------------------------------------------------------------------
call rh_clouds_init (nlon,nlat,nlev)
input
nlon number of x dimension points [integer]
nlat number of y dimension points [integer]
nlev number of z dimension points [integer]
-----------------------------------------------------------------------
call rh_clouds_end (nlon,nlat,nlev)
[No interface for rh_clouds_end]
-----------------------------------------------------------------------
call subroutine rh_clouds_sum (is, js, rh)
input
is integer of starting x position of data window [integer]
js integer of starting y position of data window [integer]
rh relative humidity (fraction) [real, dimension(:,:,:)]
-----------------------------------------------------------------------
call subroutine rh_clouds_avg (is, js, rh)
input
is integer of starting x position of data window [integer]
js integer of starting y position of data window [integer]
output
rh relative humidity (fraction) [real, dimension(:,:,:)]
ierr integer error variable
NAMELIST
&rh_clouds_nml
high_middle_pole sigma coordinate boundary between high and
middle clouds at the pole
[real, default: high_middle_pole=0.7]
high_middle_eq sigma coordinate boundary between high and
middle clouds at the equator
[real, default: high_middle_eq=0.4]
middle_low_pole sigma coordinate boundary between low and
middle clouds at the pole
[real, default: middle_low_pole=0.85]
middle_low_eq sigma coordinate boundary between low and
middle clouds at the equator
[real, default: middle_low_eq=0.7]
rh_crit_bot critical relative humidity to define occur of cloud
at sigma = 1 when do_mcm_crit_rh=.false.
or
at lowest full level when do_mcm_crit_rh=.true.
[real, default: rh_crit_bot=1.0]
rh_crit_top critical relative humidity to define occur of cloud
at sigma = 0
[real, default: rh_crit_top=0.9]
do_mcm_crit_rh See rh_crit_bot
[logical, default: do_mcm_crit_rh=.false.]
do_mcm_no_clouds_top: Prevents clouds at top model level.
[logical, default: do_mcm_no_clouds_top=.false.]
tuning_coeff_low_cld: Multiplies low cloud albedos to change default values.
Intended for use with Manabe Climate Model.
[real, default: tuning_coeff_low_cld = 1.0]
high_abs Near-infrared absorptivities of high clouds
[real, default: high_abs = 0.04]
middle_abs Near-infrared absorptivities of middle level clouds
[real, default: middle_abs = 0.30]
low_abs Near-infrared absorptivities of low clouds
[real, default: low_abs = 0.40]
high_emiss Infrared emissivities of high clouds
[real, default: high_emiss = 0.6]
middle_emiss Infrared emissivities of middle level clouds
[real, default: middle_emiss = 1.0]
low_emiss Infrared emissivities of low clouds
[real, default: low_emiss = 1.0]
do_average Use time-averaged rh values when computing
clouds
[logical, default: do_average = .true.]