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
 QMIN=1.0e-10. More...
 
real(kind=kind_phys) module_radiation_driver::qme5
 QME5=1.0e-7. More...
 
real(kind=kind_phys) module_radiation_driver::qme6
 QME6=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
 toa pressure minimum value in mb (hPa) More...
 
integer module_radiation_driver::itsfc =0
 control flag for lw sfc air/ground interface temp setting More...
 

input control variables (reset in radupdate):

integer module_radiation_driver::month0 =0
 
integer module_radiation_driver::iyear0 =0
 
integer module_radiation_driver::monthd =0
 
logical module_radiation_driver::loz1st =.true.
 first-time climatological ozone data read flag 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)
 
subroutine, public module_radiation_driver::radinit (si, NLAY, me)
 This subroutine is the initialization of radiation calculations. More...
 
subroutine, public module_radiation_driver::radupdate (idate, jdate, deltsw, deltim, lsswr, me, slag, sdec, cdec, solcon)
 This subroutine calls many update subroutines to check and update radiation required but time varying data sets and module variables. 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 radiation calculation subroutines. It sets up profile variables for radiation input, including clouds, surface albedos, atmospheric aerosols, ozone, etc. 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. 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 is the initialization of radiation calculations.

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 386 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 calls many update subroutines to check and update radiation required but time varying data sets and module variables.

Parameters
idateNCEP absolute date and time of intial condition (yr,mon,day,t-zone,hr,min,sec,mil-sec)
jdateNCEP absolute date and time at fcst time (yr,mon,day,t-zone,hr,min,sec,mil-sec)
deltswSW radiation calling frequency in seconds
deltimmodel timestep in seconds
lsswrlogical flags for sw radiation calculations
meprint control flag
slagequation of time in radians
sdec,cdecsin and cos of the solar declination angle
solconsun-earth distance adjusted solar constant (w/m2)

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 627 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 radiation calculation subroutines. It sets up profile variables for radiation input, including clouds, surface albedos, atmospheric aerosols, ozone, etc.

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-ration; include: oz,cwc,aeros,etc
vvllayer mean vertical velocity in pa/sec
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 adj in subr called
tsfcsurface temperature in K
snowdsnow depth water equivalent in mm
sncovrsnow cover in fraction
snoalbmaximum snow albedo in fraction
zorlsurface roughness in cm
hprimtopographic standard deviation in m
alvsfmean vis albedo with strong cosz dependency
alnsfmean nir albedo with strong cosz dependency
alvwfmean vis albedo with weak cosz dependency
alnwfmean nir albedo with weak cosz dependency
facsffractional coverage with strong cosz dependency
facwffractional coverage with weak cosz dependency
ficeice fraction over open water grid
tisfcsurface temperature over ice fraction
sinlatsine of the grids' corresponding latitudes
coslatcosine of the grids' corresponding latitudes
solhrhour time after 00z at the t-stepe
jdatecurrent forecast date and time (yr, mon, day, t-zone, hr, min, sec, mil-sec)
solconsolar constant (sun-earth distant adjusted)
cvfraction of convective cloud
cvt,cvbconvective cloud top/bottom pressure in pa
fcicefraction of cloud ice (in ferrier scheme)
frainfraction of rain water (in ferrier scheme)
rrimemass ratio of total to unrimed ice ( >= 1 )
flgminminimum large ice fraction
icsdsw,icsdlwauxiliary cloud control arrays passed to main radiations. if isubcsw/isubclw (input to init) are set to 2, the arrays contains provided random seeds for sub-column clouds generators
ntcw=0 no cloud condensate calculated; >0 array index location for cloud condensate
ncldonly used when ntcw .gt. 0
ntoz=0 climatological ozone profile; >0 interactive ozone profile
NTRACdimension veriable for array oz
NFXRsecond dimension of input/output array fluxr
dtlw,dtswtime duration for lw/sw radiation call in sec
lsswr,lslwrlogical flags for sw/lw radiation calls
lssavlogical flag for store 3-d cloud field
IX,IMhorizontal dimention and num of used points
LMvertical layer dimension
mecontrol flag for parallel process
lprntcontrol flag for diagnostic print out
iptindex for diagnostic printout point
kdttime-step number
deltaqhalf width of uniform total water distribution
supsupersaturation in pdf cloud when t is very low
cnvwlayer convective cloud water
cnvclayer convective cloud cover
htrswtotal sky sw heating rate in k/sec
topfswSW 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\))
sfcfswSW radiation fluxes at sfc, 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\))
dswcmpdown sfc 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 diff flux
uswcmpup sfc 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 diff flux
sfalbmean surface diffused sw albedo
coszenmean cos of zenith angle over rad call period
coszdgdaytime mean cosz over rad call period
htrlwtotal sky LW heating rate in k/sec
topflwLW radiation fluxes at top, 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\))
sfcflwLW radiation fluxes at sfc, 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\))
semissurface LW emissivity in fraction
cldcov3-d cloud fraction
tsflwsurface air temp during LW calculation in K
fluxrtime accumulated 2-d fields defined as:
1 - toa total sky upwd LW radiation flux
2 - toa total sky upwd SW radiation flux
3 - sfc total sky upwd SW radiation flux
4 - sfc total sky dnwd 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 dnwd LW radiation flux
20 - sfc total sky upwd LW radiation flux
21 - sfc total sky dnwd SW uv-b radiation flux
22 - sfc clear sky dnwd SW uv-b radiation flux
23 - toa incoming solar radiation flux
24 - sfc vis beam dnwd SW radiation flux
25 - sfc vis diff dnwd SW radiation flux
26 - sfc nir beam dnwd SW radiation flux
27 - sfc nir diff dnwd SW radiation flux
28 - toa clear sky upwd LW radiation flux
29 - toa clear sky upwd SW radiation flux
30 - sfc clear sky dnwd LW radiation flux
31 - sfc clear sky upwd SW radiation flux
32 - sfc clear sky dnwd SW radiation flux
33 - sfc clear sky upwd LW radiation flux
optional:
34 - aeros opt depth at 550nm (all components)
35 - aeros opt depth at 550nm for du component
36 - aeros opt depth at 550nm for bc component
37 - aeros opt depth at 550nm for oc component
38 - aeros opt depth at 550nm for su component
39 - aeros opt depth at 550nm for ss component
htrswbspectral band total sky sw heating rate
htrlwbspectral band total sky lw heating rate

General Algorithm

  1. Setup surface ground temperature and ground/air skin temperature if required.
  2. Prepare atmospheric profiles for radiation input.
  3. Compute relative humidity.
  4. Get layer ozone mass mixing ratio (olyr)
  5. Call coszmn(), to compute cosin of zenith angle (coszen, coszdg).
  6. Call getgases(), to set up non-prognostic gas volume mixing ratioes (gasvmr).
    - gasvmr(:,:,1) - co2 volume mixing ratio
    - gasvmr(:,:,2) - n2o volume mixing ratio
    - gasvmr(:,:,3) - ch4 volume mixing ratio
    - gasvmr(:,:,4) - o2 volume mixing ratio
    - gasvmr(:,:,5) - co volume mixing ratio
    - gasvmr(:,:,6) - cf11 volume mixing ratio
    - gasvmr(:,:,7) - cf12 volume mixing ratio
    - gasvmr(:,:,8) - cf22 volume mixing ratio
    - gasvmr(:,:,9) - ccl4 volume mixing ratio
  7. Get temperature at layer interface, and layer moisture.
  8. Check for daytime points(ndate, idxday).
  9. Call module_radiation_aerosols::setaer(),to setup aerosols property profile for radiation.
  10. 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()
      for diagnostic cloud:
    • call module_radiation_clouds::diagcld1()
  11. Call module_radiation_surface::setalb() to setup surface albedo. for SW radiation, include xw (nov04) sea-ice.
  12. Approximate mean surface albedo from vis- and nir- diffuse values.
  13. Call module_radsw_main::swrad().
  14. Call module_radiation_surface::setemis(),to setup surface emissivity (sfcemis) for LW radiation.
  15. Call module_radlw_main::lwrad().
  16. Save outputs.

Definition at line 957 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

QMIN=1.0e-10.

Definition at line 341 of file grrad.f.

Referenced by grrad().

real (kind=kind_phys) module_radiation_driver::qme5
private

QME5=1.0e-7.

Definition at line 343 of file grrad.f.

Referenced by grrad().

real (kind=kind_phys) module_radiation_driver::qme6
private

QME6=1.0e-7.

Definition at line 345 of file grrad.f.

Referenced by grrad().

real (kind=kind_phys) module_radiation_driver::epsq
private

EPSQ=1.0e-12.

Definition at line 347 of file grrad.f.

Referenced by grrad().

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

toa pressure minimum value in mb (hPa)

Definition at line 353 of file grrad.f.

Referenced by grrad().

integer module_radiation_driver::itsfc =0
private

control flag for lw sfc air/ground interface temp setting

Definition at line 356 of file grrad.f.

Referenced by grrad(), and radinit().

integer module_radiation_driver::month0 =0
private

Definition at line 359 of file grrad.f.

Referenced by radinit(), and radupdate().

integer module_radiation_driver::iyear0 =0
private

Definition at line 359 of file grrad.f.

Referenced by radinit(), and radupdate().

integer module_radiation_driver::monthd =0
private

Definition at line 359 of file grrad.f.

Referenced by radinit(), and radupdate().

logical module_radiation_driver::loz1st =.true.
private

first-time climatological ozone data read flag

Definition at line 361 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 365 of file grrad.f.

Referenced by grrad(), and radinit().

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

Definition at line 367 of file grrad.f.

Referenced by grrad(), and radinit().