The GFS radiation driver module. More...
The GFS radiation driver module.
module_radiation_driver prepares the atmospheric profile, invokes the main radiation calculations, and computes radiative fluxes and heating rates for some arbitrary number of vertical columns. This module also regulates the logistic running flow of the computations, such as data initialization and update accordance with forecast timing progress, the sequential order of subroutine calls, and sorting results for final output. There are three externally accessible subroutines:
Constant values | |
real(kind=kind_phys) | module_radiation_driver::qmin |
lower limit of saturation vapor pressure (=1.0e-10) | |
real(kind=kind_phys) | module_radiation_driver::qme5 |
lower limit of specific humidity (=1.0e-7) | |
real(kind=kind_phys) | module_radiation_driver::qme6 |
lower limit of specific humidity (=1.0e-7) | |
real(kind=kind_phys) | module_radiation_driver::epsq |
EPSQ=1.0e-12. | |
real, parameter | module_radiation_driver::prsmin = 1.0e-6 |
lower limit of toa pressure value in mb | |
integer | module_radiation_driver::itsfc =0 |
control flag for LW surface temperature at air/ground interface (default=0, the value will be set in subroutine radinit) | |
integer | module_radiation_driver::month0 =0 |
new data input control variables (set/reset in subroutines radinit/radupdate): | |
integer | module_radiation_driver::iyear0 =0 |
integer | module_radiation_driver::monthd =0 |
logical | module_radiation_driver::loz1st =.true. |
control flag for the first time of reading climatological ozone data (set/reset in subroutines radinit/radupdate, it is used only if the control parameter ioznflg=0) | |
integer, parameter | module_radiation_driver::ltp = 0 |
optional extra top layer on top of low ceiling models LTP=0: no extra top layer | |
logical, parameter | module_radiation_driver::lextop = (LTP > 0) |
control flag for extra top layer | |
subroutine, public | module_radiation_driver::radinit (si, NLAY, me) |
This subroutine initialize a model's radiation process through calling of specific initialization subprograms that directly related to radiation calculations. This subroutine needs to be invoked only once at the start stage of a model's run, and the call is placed outside of both the time advancement loop and horizontal grid loop. More... | |
subroutine, public | module_radiation_driver::radupdate (idate, jdate, deltsw, deltim, lsswr, me, slag, sdec, cdec, solcon) |
This subroutine checks and updates time sensitive data used by radiation computations. This subroutine needs to be placed inside the time advancement loop but outside of the horizontal grid loop. It is invoked at radiation calling frequncy but before any actual radiative transfer computations. More... | |
subroutine, public | module_radiation_driver::grrad (prsi, prsl, prslk, tgrs, qgrs, tracer, vvl, slmsk, xlon, xlat, tsfc, snowd, sncovr, snoalb, zorl, hprim, alvsf, alnsf, alvwf, alnwf, facsf, facwf, fice, tisfc, sinlat, coslat, solhr, jdate, solcon, cv, cvt, cvb, fcice, frain, rrime, flgmin, icsdsw, icsdlw, ntcw, ncld, ntoz, NTRAC, NFXR, dtlw, dtsw, lsswr, lslwr, lssav, uni_cld, lmfshal, lmfdeep2, IX, IM, LM, me, lprnt, ipt, kdt, deltaq, sup, cnvw, cnvc, htrsw, topfsw, sfcfsw, dswcmp, uswcmp, sfalb, coszen, coszdg, htrlw, topflw, sfcflw, tsflw, semis, cldcov, fluxr , htrlw0, htrsw0, htrswb, htrlwb ) |
This subroutine is the driver of main radiation calculations. It sets up column profiles, such as pressure, temperature, moisture, gases, clouds, aerosols, etc., as well as surface radiative characteristics, such as surface albedo, and emissivity. The call of this subroutine is placed inside both the time advancing loop and the horizontal grid loop. More... | |
subroutine, public module_radiation_driver::grrad | ( | real (kind=kind_phys), dimension(ix,lm+1), intent(in) | prsi, |
real (kind=kind_phys), dimension(ix,lm), intent(in) | prsl, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | prslk, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | tgrs, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | qgrs, | ||
real (kind=kind_phys), dimension(ix,lm,ntrac), intent(in) | tracer, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | vvl, | ||
real (kind=kind_phys), dimension(im), intent(in) | slmsk, | ||
real (kind=kind_phys), dimension(im), intent(in) | xlon, | ||
real (kind=kind_phys), dimension(im), intent(in) | xlat, | ||
real (kind=kind_phys), dimension(im), intent(in) | tsfc, | ||
real (kind=kind_phys), dimension(im), intent(in) | snowd, | ||
real (kind=kind_phys), dimension(im), intent(in) | sncovr, | ||
real (kind=kind_phys), dimension(im), intent(in) | snoalb, | ||
real (kind=kind_phys), dimension(im), intent(in) | zorl, | ||
real (kind=kind_phys), dimension(im), intent(in) | hprim, | ||
real (kind=kind_phys), dimension(im), intent(in) | alvsf, | ||
real (kind=kind_phys), dimension(im), intent(in) | alnsf, | ||
real (kind=kind_phys), dimension(im), intent(in) | alvwf, | ||
real (kind=kind_phys), dimension(im), intent(in) | alnwf, | ||
real (kind=kind_phys), dimension(im), intent(in) | facsf, | ||
real (kind=kind_phys), dimension(im), intent(in) | facwf, | ||
real (kind=kind_phys), dimension(im), intent(in) | fice, | ||
real (kind=kind_phys), dimension(im), intent(in) | tisfc, | ||
real (kind=kind_phys), dimension(im), intent(in) | sinlat, | ||
real (kind=kind_phys), dimension(im), intent(in) | coslat, | ||
real (kind=kind_phys), intent(in) | solhr, | ||
integer, dimension(8), intent(in) | jdate, | ||
real (kind=kind_phys), intent(in) | solcon, | ||
real (kind=kind_phys), dimension(im), intent(in) | cv, | ||
real (kind=kind_phys), dimension(im), intent(in) | cvt, | ||
real (kind=kind_phys), dimension(im), intent(in) | cvb, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | fcice, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | frain, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | rrime, | ||
real (kind=kind_phys), dimension(im), intent(in) | flgmin, | ||
integer, dimension(im), intent(in) | icsdsw, | ||
integer, dimension(im), intent(in) | icsdlw, | ||
integer, intent(in) | ntcw, | ||
integer, intent(in) | ncld, | ||
integer, intent(in) | ntoz, | ||
integer, intent(in) | NTRAC, | ||
integer, intent(in) | NFXR, | ||
real (kind=kind_phys), intent(in) | dtlw, | ||
real (kind=kind_phys), intent(in) | dtsw, | ||
logical, intent(in) | lsswr, | ||
logical, intent(in) | lslwr, | ||
logical, intent(in) | lssav, | ||
logical, intent(in) | uni_cld, | ||
logical, intent(in) | lmfshal, | ||
logical, intent(in) | lmfdeep2, | ||
integer, intent(in) | IX, | ||
integer, intent(in) | IM, | ||
integer, intent(in) | LM, | ||
integer, intent(in) | me, | ||
logical, intent(in) | lprnt, | ||
integer, intent(in) | ipt, | ||
integer, intent(in) | kdt, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | deltaq, | ||
real(kind=kind_phys), intent(in) | sup, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | cnvw, | ||
real (kind=kind_phys), dimension(ix,lm), intent(in) | cnvc, | ||
real (kind=kind_phys), dimension(ix,lm), intent(out) | htrsw, | ||
type (topfsw_type), dimension(im), intent(out) | topfsw, | ||
type (sfcfsw_type), dimension(im), intent(out) | sfcfsw, | ||
real (kind=kind_phys), dimension(ix,4), intent(out) | dswcmp, | ||
real (kind=kind_phys), dimension(ix,4), intent(out) | uswcmp, | ||
real (kind=kind_phys), dimension(im), intent(out) | sfalb, | ||
real (kind=kind_phys), dimension(im), intent(out) | coszen, | ||
real (kind=kind_phys), dimension(im), intent(out) | coszdg, | ||
real (kind=kind_phys), dimension(ix,lm), intent(out) | htrlw, | ||
type (topflw_type), dimension(im), intent(out) | topflw, | ||
type (sfcflw_type), dimension(im), intent(out) | sfcflw, | ||
real (kind=kind_phys), dimension(im), intent(out) | tsflw, | ||
real (kind=kind_phys), dimension(im), intent(out) | semis, | ||
real (kind=kind_phys), dimension(ix,lm), intent(inout) | cldcov, | ||
real (kind=kind_phys), dimension(ix,nfxr), intent(inout) | fluxr, | ||
real (kind=kind_phys), dimension(ix,lm), intent(out), optional | htrlw0, | ||
real (kind=kind_phys), dimension(ix,lm), intent(out), optional | htrsw0, | ||
real (kind=kind_phys), dimension(ix,lm,nbdsw), optional | htrswb, | ||
real (kind=kind_phys), dimension(ix,lm,nbdlw), optional | htrlwb | ||
) |
This subroutine is the driver of main radiation calculations. It sets up column profiles, such as pressure, temperature, moisture, gases, clouds, aerosols, etc., as well as surface radiative characteristics, such as surface albedo, and emissivity. The call of this subroutine is placed inside both the time advancing loop and the horizontal grid loop.
prsi | model level pressure in Pa |
prsl | model layer mean pressure in Pa |
prslk | exner function = \( (p/p0)^{rocp} \) |
tgrs | model layer mean temperature in K |
qgrs | layer specific humidity in gm/gm |
tracer | layer prognostic tracer amount mixing-ratio, including: ozone,cloud condensate,aerosols,etc |
vvl | layer mean vertical velocity in pa/sec (used only for the legacy diagnostic style of cloud scheme) |
slmsk | sea/land mask array (sea:0,land:1,sea-ice:2) |
xlon | grid longitude in radians,ok for both 0->2pi or -pi->+pi ranges |
xlat | grid latitude in radians, default to pi/2->-pi/2 range, otherwise need to adjust in the called subroutine |
tsfc | surface temperature in K |
snowd | snow depth water equivalent in mm (used when control flag ialbflg=1) |
sncovr | snow cover in fraction (used when contrl flag ialbflg=1) |
snoalb | maximum snow albedo in fraction (used when control flag ialbflg=1) |
zorl | surface roughness in cm |
hprim | topographic standard deviation in m |
alvsf | ialbflg=0: uv+visible albedo with strong cosz dependency (z=60) ialbflg=1: uv+visible black sky albedo (z=60 degree) |
alnsf | ialbflg=0: near IR albedo with strong cosz dependency (z=60) ialbflg=1: near IR black sky albedo (z=60 degree) |
alvwf | ialbflg=0: uv+visible albedo with weak cosz dependency (z=60) ialbflg=1: uv+visible white sky albedo |
alnwf | ialbflg=0: near IR albedo with weak cosz dependency (z=60) ialbflg=1: near IR white sky albedo |
facsf | fractional coverage with strong cosz dependency |
facwf | fractional coverage with weak cosz dependency |
fice | fraction ice cover over open water grid |
tisfc | surface temperature over ice cover in K |
sinlat | sine of latitude for the model grid |
coslat | cosine of latitude for the model grid |
solhr | hour time after 00z at the current time-step |
jdate | current forecast date and time (year, month, day,time-zone,hour, minute, second, mil-second) |
solcon | solar constant (sun-earth distant adjusted) in \(W/m^2\) |
cv | fraction of convective cloud cover (for diagnostic clouds only) |
cvt,cvb | convective cloud top/bottom pressure in pa (for diagnostic clouds only) |
fcice | fraction of cloud ice content (for Ferrier microphysics scheme only) |
frain | fraction of rain water (for Ferrier microphysics scheme only) |
rrime | mass ratio of total to unrimed ice content (>= 1, for Ferrier microphysics scheme only) |
flgmin | minimum large ice fraction (for Ferrier microphysics scheme only) |
icsdsw,icsdlw | auxiliary cloud control arrays for radiations if isubcsw/isubclw (physparam) are set to 2, the arrays contains random seeds for the sub-column cloud overlap scheme, McICA, used in SW/LW radiations |
ntcw | =0: no cloud condensate calculated; >0: tracer array location index for cloud condensate |
ncld | only used when ntcw>0 |
ntoz | =0: use climatological ozone profile >0: use interactive ozone profile |
NTRAC | number of tracers |
NFXR | number of fields (second dimension) of I/O array fluxr |
dtlw,dtsw | time durations for LW/SW radiation calls in second |
lsswr,lslwr | logical control flags for SW/LW radiation calls |
lssav | logical control flag for storing 3-d cloud field |
IX,IM | horizontal dimension and number of used points |
LM | vertical layer dimension |
me | control flag for parallel process |
lprnt | control flag for diagnostic printout |
ipt | grid-point index for diagnostic printout (debugging) |
kdt | time-step sequential number |
deltaq | half width of pdf cloud uniform total water distribution (for pdf cloud cover scheme) |
sup | supersaturation in pdf cloud when t is very low (for pdf cloud cover scheme) |
cnvw | layer convective cloud water content (for pdf cloud scheme) |
cnvc | layer convective cloud cover (for pdf cloud scheme) |
htrsw | total sky SW heating rate in k/sec |
topfsw | derived type, SW radiation fluxes at TOA, components: (check module_radsw_parameters for definition) upfxc - total-sky upward SW flux at toa ( \(W/m^2\)) dnflx - total-sky downward SW flux at toa ( \(W/m^2\)) upfx0 - clear-sky upward SW flux at toa ( \(W/m^2\)) |
sfcfsw | derived type, SW radiation fluxes at surface, components: (check module_radsw_parameters for definition) upfxc - total-sky upward SW flux at sfc ( \(W/m^2\)) dnfxc - total-sky downward SW flux at sfc ( \(W/m^2\)) upfx0 - clear-sky upward SW flux at sfc ( \(W/m^2\)) dnfx0 - clear-sky downward SW flux at sfc ( \(W/m^2\)) |
dswcmp | downward surface SW spectral components: (:, 1) - total-sky sfc downward nir direct flux (:, 2) - total-sky sfc downward nir diffused flux (:, 3) - total-sky sfc downward uv+vis direct flux (:, 4) - total-sky sfc downward uv+vis diffused flux |
uswcmp | upward surface SW spectral components: (:, 1) - total-sky sfc upward nir direct flux (:, 2) - total-sky sfc upward nir diffused flux (:, 3) - total-sky sfc upward uv+vis direct flux (:, 4) - total-sky sfc upward uv+vis diffused flux |
sfalb | mean surface diffused albedo for SW radiation |
coszen | mean cosine of solar zenith angle over radiation calling period |
coszdg | daytime mean cosine of zenith angle over the radiation calling period |
htrlw | total-sky LW heating rate in k/sec |
topflw | derived type, LW radiation fluxes at TOA, component: (check module_radlw_paramters for definition) upfxc - total-sky upward LW flux at toa ( \(W/m^2\)) upfx0 - clear-sky upward LW flux at toa ( \(W/m^2\)) |
sfcflw | derived type, LW radiation fluxes at surface, component: (check module_radlw_paramters for definition) upfxc - total-sky upward LW flux at sfc ( \(W/m^2\)) upfx0 - clear-sky upward LW flux at sfc ( \(W/m^2\)) dnfxc - total-sky downward LW flux at sfc ( \(W/m^2\)) dnfx0 - clear-sky downward LW flux at sfc ( \(W/m^2\)) |
tsflw | surface air temp during LW calculation call in K |
semis | surface emissivity in fraction for LW radiation |
cldcov | 3-d cloud fraction |
fluxr | array for saving time accumulated 2-d fields that are defined as: (:, 1) - toa total-sky upward LW radiation flux (:, 2) - toa total-sky upward SW radiation flux (:, 3) - sfc total-sky upward SW radiation flux (:, 4) - sfc total-sky downward SW radiation flux (:, 5) - high domain cloud fraction (:, 6) - mid domain cloud fraction (:, 7) - low domain cloud fraction (:, 8) - high domain mean cloud top pressure (:, 9) - mid domain mean cloud top pressure (:,10) - low domain mean cloud top pressure (:,11) - high domain mean cloud base pressure (:,12) - mid domain mean cloud base pressure (:,13) - low domain mean cloud base pressure (:,14) - high domain mean cloud top temperature (:,15) - mid domain mean cloud top temperature (:,16) - low domain mean cloud top temperature (:,17) - total cloud fraction (:,18) - boundary layer domain cloud fraction (:,19) - sfc total-sky downward LW radiation flux (:,20) - sfc total-sky upward LW radiation flux (:,21) - sfc total-sky downward SW UV-B radiation flux (:,22) - sfc clear-sky downward SW UV-B radiation flux (:,23) - TOA incoming solar radiation flux (:,24) - sfc UV+visible beam downward SW radiation flux (:,25) - sfc UV+visible diffused downward SW radiation flux (:,26) - sfc near-IR beam downward SW radiation flux (:,27) - sfc near-IR diffused downward SW radiation flux (:,28) - toa clear-sky upward LW radiation flux (:,29) - toa clear-sky upward SW radiation flux (:,30) - sfc clear-sky downward LW radiation flux (:,31) - sfc clear-sky upward SW radiation flux (:,32) - sfc clear-sky downward SW radiation flux (:,33) - sfc clear-sky upward LW radiation flux optional: (:,34) - aerosol AOD at 550nm (all components) (:,35) - aerosol AOD at 550nm for du component (:,36) - aerosol AOD at 550nm for bc component (:,37) - aerosol AOD at 550nm for oc component (:,38) - aerosol AOD at 550nm for su component (:,39) - aerosol AOD at 550nm for ss component |
htrswb | spectral bands distributed total sky SW heating rate in k/sec |
htrlwb | spectral bands distributed total sky LW heating rate in k/sec |
Definition at line 1009 of file grrad.f.
References module_radiation_astronomy::coszmn(), module_radiation_clouds::diagcld1(), epsq, module_radiation_gases::getgases(), module_radiation_gases::getozn(), physparam::icmphys, itsfc, physparam::ivflip, lextop, ltp, module_radlw_main::lwrad(), module_radiation_clouds::progcld1(), module_radiation_clouds::progcld2(), module_radiation_clouds::progcld3(), prsmin, qme5, qme6, qmin, module_radiation_aerosols::setaer(), module_radiation_surface::setalb(), module_radiation_surface::setemis(), and module_radsw_main::swrad().
subroutine, public module_radiation_driver::radinit | ( | real (kind=kind_phys), dimension(:), intent(in) | si, |
integer, intent(in) | NLAY, | ||
integer, intent(in) | me | ||
) |
This subroutine initialize a model's radiation process through calling of specific initialization subprograms that directly related to radiation calculations. This subroutine needs to be invoked only once at the start stage of a model's run, and the call is placed outside of both the time advancement loop and horizontal grid loop.
si | model vertical sigma interface |
nlay | number of model vertical layers |
me | print control flag |
Definition at line 404 of file grrad.f.
References module_radiation_aerosols::aer_init(), module_radiation_clouds::cld_init(), module_radiation_gases::gas_init(), physparam::iaerflg, physparam::ialbflg, physparam::icldflg, physparam::icmphys, physparam::ico2flg, physparam::ictmflg, physparam::iemsflg, physparam::iovrlw, physparam::iovrsw, physparam::ioznflg, physparam::isolar, physparam::isubclw, physparam::isubcsw, itsfc, physparam::ivflip, physparam::lcnorm, physparam::lcrick, lextop, physparam::lnoprec, loz1st, ltp, month0, module_radlw_main::rlwinit(), module_radsw_main::rswinit(), module_radiation_surface::sfc_init(), and module_radiation_astronomy::sol_init().
subroutine, public module_radiation_driver::radupdate | ( | integer, dimension(:), intent(in) | idate, |
integer, dimension(:), intent(in) | jdate, | ||
real (kind=kind_phys), intent(in) | deltsw, | ||
real (kind=kind_phys), intent(in) | deltim, | ||
logical, intent(in) | lsswr, | ||
integer, intent(in) | me, | ||
real (kind=kind_phys), intent(out) | slag, | ||
real (kind=kind_phys), intent(out) | sdec, | ||
real (kind=kind_phys), intent(out) | cdec, | ||
real (kind=kind_phys), intent(out) | solcon | ||
) |
This subroutine checks and updates time sensitive data used by radiation computations. This subroutine needs to be placed inside the time advancement loop but outside of the horizontal grid loop. It is invoked at radiation calling frequncy but before any actual radiative transfer computations.
idate | NCEP absolute date and time of intial condition (year,month,day,time-zone,hour,minute,second, mil-second) |
jdate | NCEP absolute date and time at forecast time (year,month,day,time-zone,hour,minute,second, mil-second) |
deltsw | SW radiation calling time interval in seconds |
deltim | model advancing time-step duration in seconds |
lsswr | logical control flag for SW radiation calculations |
me | print control flag |
slag | equation of time in radians |
sdec,cdec | sine and cosine of the solar declination angle |
solcon | solar constant adjusted by sun-earth distance \((W/m^2)\) |
Definition at line 650 of file grrad.f.
References module_radiation_aerosols::aer_update(), module_radiation_gases::gas_update(), physparam::ictmflg, physparam::isolar, loz1st, month0, and module_radiation_astronomy::sol_update().