Interoperable Physics Driver for NGGPS

The GFS radiation driver module. More...

Collaboration diagram for module_radiation_driver:

Modules

module  module_radiation_driver
 

Constant values

real(kind=kind_phys) module_radiation_driver::qmin
 lower limit of saturation vapor pressure (=1.0e-10) More...
 
real(kind=kind_phys) module_radiation_driver::qme5
 lower limit of specific humidity (=1.0e-7) More...
 
real(kind=kind_phys) module_radiation_driver::qme6
 lower limit of specific humidity (=1.0e-7) More...
 
real(kind=kind_phys) module_radiation_driver::epsq
 EPSQ=1.0e-12. More...
 
real, parameter module_radiation_driver::prsmin = 1.0e-6
 lower limit of toa pressure value in mb More...
 
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) More...
 
integer module_radiation_driver::month0 =0
 new data input control variables (set/reset in subroutines radinit/radupdate): More...
 
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) More...
 
integer, parameter module_radiation_driver::ltp = 0
 optional extra top layer on top of low ceiling models
LTP=0: no extra top layer More...
 
logical, parameter module_radiation_driver::lextop = (LTP > 0)
 control flag for extra top layer More...
 
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...
 

Detailed Description

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:

Function/Subroutine Documentation

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.

Parameters
simodel vertical sigma interface
nlaynumber of model vertical layers
meprint control flag

General Algorithm

  1. Set up control variables and external module variables in module physparam
  2. Initialization
  • astronomy initialization routine: call module_radiation_astronomy::sol_init()
  • aerosols initialization routine: call module_radiation_aerosols::aer_init()
  • CO2 and other gases intialization routine: call module_radiation_gases::gas_init()
  • surface intialization routine: call module_radiation_surface::sfc_init()
  • cloud initialization routine: call module_radiation_clouds::cld_init()
  • LW radiation initialization routine: call module_radlw_main::rlwinit()
  • SW radiation initialization routine: call module_radsw_main::rswinit()

Definition at line 406 of file grrad.f.

References 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, iyear0, physparam::lcnorm, physparam::lcrick, lextop, physparam::lnoprec, loz1st, ltp, month0, monthd, and vtagrad.

Referenced by rad_initialize().

Here is the caller graph for this function:

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.

Parameters
idateNCEP absolute date and time of intial condition (year,month,day,time-zone,hour,minute,second, mil-second)
jdateNCEP absolute date and time at forecast time (year,month,day,time-zone,hour,minute,second, mil-second)
deltswSW radiation calling time interval in seconds
deltimmodel advancing time-step duration in seconds
lsswrlogical control flag for SW radiation calculations
meprint control flag
slagequation of time in radians
sdec,cdecsine and cosine of the solar declination angle
solconsolar constant adjusted by sun-earth distance \((W/m^2)\)

General Algorithm

  1. Set up time stamp at fcst time and that for green house gases (currently co2 only)
  2. Call module_radiation_astronomy::sol_update(), yearly update, no time interpolation.
  3. Call module_radiation_aerosols::aer_update(), monthly update, no time interpolation
  4. Call co2 and other gases update routine: module_radiation_gases::gas_update()
  5. Call surface update routine (currently not needed)
  6. Call clouds update routine (currently not needed)

Definition at line 652 of file grrad.f.

References physparam::ictmflg, physparam::isolar, iyear0, loz1st, month0, and monthd.

Referenced by gloopr(), and nuopc_physics::nuopc_rad_update().

Here is the caller graph for this function:

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,
  prslk,
  tgrs,
  qgrs,
  tracer,
  vvl,
real (kind=kind_phys), dimension(im), intent(in)  slmsk,
  xlon,
  xlat,
  tsfc,
  snowd,
  sncovr,
  snoalb,
  zorl,
  hprim,
  alvsf,
  alnsf,
  alvwf,
  alnwf,
  facsf,
  facwf,
  fice,
  tisfc,
  sinlat,
  coslat,
real (kind=kind_phys), intent(in)  solhr,
integer, dimension(8), intent(in)  jdate,
real (kind=kind_phys), intent(in)  solcon,
  cv,
  cvt,
  cvb,
  fcice,
  frain,
  rrime,
real (kind=kind_phys), dimension(im), intent(in)  flgmin,
integer, dimension(im), intent(in)  icsdsw,
integer, dimension(im), intent(in)  icsdlw,
  ntcw,
  ncld,
  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,
  ipt,
  kdt,
  deltaq,
real(kind=kind_phys), intent(in)  sup,
  cnvw,
  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,
  uswcmp,
  sfalb,
  coszen,
  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,
  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.

Parameters
prsimodel level pressure in Pa
prslmodel layer mean pressure in Pa
prslkexner function = \( (p/p0)^{rocp} \)
tgrsmodel layer mean temperature in K
qgrslayer specific humidity in gm/gm
tracerlayer prognostic tracer amount mixing-ratio, including: ozone,cloud condensate,aerosols,etc
vvllayer mean vertical velocity in pa/sec (used only for the legacy diagnostic style of cloud scheme)
slmsksea/land mask array (sea:0,land:1,sea-ice:2)
xlongrid longitude in radians,ok for both 0->2pi or -pi->+pi ranges
xlatgrid latitude in radians, default to pi/2->-pi/2 range, otherwise need to adjust in the called subroutine
tsfcsurface temperature in K
snowdsnow depth water equivalent in mm (used when control flag ialbflg=1)
sncovrsnow cover in fraction (used when contrl flag ialbflg=1)
snoalbmaximum snow albedo in fraction (used when control flag ialbflg=1)
zorlsurface roughness in cm
hprimtopographic standard deviation in m
alvsfialbflg=0: uv+visible albedo with strong cosz dependency (z=60)
ialbflg=1: uv+visible black sky albedo (z=60 degree)
alnsfialbflg=0: near IR albedo with strong cosz dependency (z=60)
ialbflg=1: near IR black sky albedo (z=60 degree)
alvwfialbflg=0: uv+visible albedo with weak cosz dependency (z=60)
ialbflg=1: uv+visible white sky albedo
alnwfialbflg=0: near IR albedo with weak cosz dependency (z=60)
ialbflg=1: near IR white sky albedo
facsffractional coverage with strong cosz dependency
facwffractional coverage with weak cosz dependency
ficefraction ice cover over open water grid
tisfcsurface temperature over ice cover in K
sinlatsine of latitude for the model grid
coslatcosine of latitude for the model grid
solhrhour time after 00z at the current time-step
jdatecurrent forecast date and time (year, month, day,time-zone,hour, minute, second, mil-second)
solconsolar constant (sun-earth distant adjusted) in \(W/m^2\)
cvfraction of convective cloud cover (for diagnostic clouds only)
cvt,cvbconvective cloud top/bottom pressure in pa (for diagnostic clouds only)
fcicefraction of cloud ice content (for Ferrier microphysics scheme only)
frainfraction of rain water (for Ferrier microphysics scheme only)
rrimemass ratio of total to unrimed ice content (>= 1, for Ferrier microphysics scheme only)
flgminminimum large ice fraction (for Ferrier microphysics scheme only)
icsdsw,icsdlwauxiliary 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
ncldonly used when ntcw>0
ntoz=0: use climatological ozone profile
>0: use interactive ozone profile
NTRACnumber of tracers
NFXRnumber of fields (second dimension) of I/O array fluxr
dtlw,dtswtime durations for LW/SW radiation calls in second
lsswr,lslwrlogical control flags for SW/LW radiation calls
lssavlogical control flag for storing 3-d cloud field
IX,IMhorizontal dimension and number of used points
LMvertical layer dimension
mecontrol flag for parallel process
lprntcontrol flag for diagnostic printout
iptgrid-point index for diagnostic printout (debugging)
kdttime-step sequential number
deltaqhalf width of pdf cloud uniform total water distribution (for pdf cloud cover scheme)
supsupersaturation in pdf cloud when t is very low (for pdf cloud cover scheme)
cnvwlayer convective cloud water content (for pdf cloud scheme)
cnvclayer convective cloud cover (for pdf cloud scheme)
htrswtotal sky SW heating rate in k/sec
topfswderived 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\))
sfcfswderived 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\))
dswcmpdownward 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
uswcmpupward 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
sfalbmean surface diffused albedo for SW radiation
coszenmean cosine of solar zenith angle over radiation calling period
coszdgdaytime mean cosine of zenith angle over the radiation calling period
htrlwtotal-sky LW heating rate in k/sec
topflwderived 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\))
sfcflwderived 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\))
tsflwsurface air temp during LW calculation call in K
semissurface emissivity in fraction for LW radiation
cldcov3-d cloud fraction
fluxrarray 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
htrswbspectral bands distributed total sky SW heating rate in k/sec
htrlwbspectral bands distributed total sky LW heating rate in k/sec

General Algorithm

  1. Prepare atmospheric profiles for radiation input.
    • Compute relative humidity.
    • Compute extra variables needed for Ferrier's microphysics
    • Get layer ozone mass mixing ratio (if use ozone climatology data, call getozn()).
    • Call coszmn(), to compute cosine of zenith angle.
    • Call getgases(), to set up non-prognostic gas volume mixing ratioes (gasvmr).
    • Get temperature at layer interface, and layer moisture.
    • Check for daytime points for SW radiation.
    • Call module_radiation_aerosols::setaer(),to setup aerosols property profile for radiation.
    • Obtain cloud information for radiation calculations (clouds,cldsa,mtopa,mbota)
      for prognostic cloud:
      • For Zhao/Moorthi's prognostic cloud scheme, call module_radiation_clouds::progcld1()
      • For Ferrier's microphysics, call module_radiation_clouds::progcld2()
      • For Zhao/Moorthi's prognostic cloud+pdfcld, call module_radiation_clouds::progcld3()
    • If cloud condensate is not computed (ntcw=0), using the legacy cloud scheme, compute cloud information based on Slingo's diagnostic cloud scheme (call module_radiation_clouds::diagcld1())
  2. Start SW radiation calculations
    • Call module_radiation_surface::setalb() to setup surface albedo. for SW radiation.
    • Call module_radsw_main::swrad(), to compute SW heating rates and fluxes.
    • Save two spectral bands' surface downward and upward fluxes for output.
  3. Start LW radiation calculations
    • Call module_radiation_surface::setemis(),to setup surface emissivity for LW radiation.
    • Call module_radlw_main::lwrad(), to compute LW heating rates and fluxes.
  4. Save calculation results
    • Save surface air temp for diurnal adjustment at model t-steps
    • For time averaged output quantities (including total-sky and clear-sky SW and LW fluxes at TOA and surface; conventional 3-domain cloud amount, cloud top and base pressure, and cloud top temperature; aerosols AOD, etc.), store computed results in corresponding slots of array fluxr with appropriate time weights.

Definition at line 1011 of file grrad.f.

References epsq, funcphys::fpvs(), physparam::icmphys, itsfc, physparam::ivflip, lextop, ltp, prsmin, qme5, qme6, and qmin.

Referenced by gloopr(), and nuopc_physics::nuopc_rad_run().

Here is the call graph for this function:

Here is the caller graph for this function:

Variable Documentation

real (kind=kind_phys) module_radiation_driver::qmin
private

lower limit of saturation vapor pressure (=1.0e-10)

Definition at line 350 of file grrad.f.

Referenced by grrad().

real (kind=kind_phys) module_radiation_driver::qme5
private

lower limit of specific humidity (=1.0e-7)

Definition at line 352 of file grrad.f.

Referenced by grrad().

real (kind=kind_phys) module_radiation_driver::qme6
private

lower limit of specific humidity (=1.0e-7)

Definition at line 354 of file grrad.f.

Referenced by grrad().

real (kind=kind_phys) module_radiation_driver::epsq
private

EPSQ=1.0e-12.

Definition at line 356 of file grrad.f.

Referenced by grrad().

real, parameter module_radiation_driver::prsmin = 1.0e-6
private

lower limit of toa pressure value in mb

Definition at line 362 of file grrad.f.

Referenced by grrad().

integer module_radiation_driver::itsfc =0
private

control flag for LW surface temperature at air/ground interface (default=0, the value will be set in subroutine radinit)

Definition at line 366 of file grrad.f.

Referenced by grrad(), and radinit().

integer module_radiation_driver::month0 =0
private

new data input control variables (set/reset in subroutines radinit/radupdate):

Definition at line 369 of file grrad.f.

Referenced by radinit(), and radupdate().

integer module_radiation_driver::iyear0 =0
private

Definition at line 369 of file grrad.f.

Referenced by radinit(), and radupdate().

integer module_radiation_driver::monthd =0
private

Definition at line 369 of file grrad.f.

Referenced by radinit(), and radupdate().

logical module_radiation_driver::loz1st =.true.
private

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)

Definition at line 374 of file grrad.f.

Referenced by radinit(), and radupdate().

integer, parameter module_radiation_driver::ltp = 0
private

optional extra top layer on top of low ceiling models
LTP=0: no extra top layer

Definition at line 378 of file grrad.f.

Referenced by grrad(), and radinit().

logical, parameter module_radiation_driver::lextop = (LTP > 0)
private

control flag for extra top layer

Definition at line 382 of file grrad.f.

Referenced by grrad(), and radinit().