311 use physcons
, only : eps => con_eps, &
312 & epsm1 => con_epsm1, &
313 & fvirt => con_fvirt &
317 use module_radiation_astronomy
,only: sol_init, sol_update, coszmn
318 use module_radiation_gases
, only : nf_vgas, getgases, getozn, &
319 & gas_init, gas_update
320 use module_radiation_aerosols
,only : nf_aesw, nf_aelw, setaer, &
321 & aer_init, aer_update, &
323 use module_radiation_surface
, only : nf_albd, sfc_init, setalb, &
325 use module_radiation_clouds
, only : nf_clds, cld_init, &
326 & progcld1, progcld2, progcld3,&
329 use module_radsw_parameters
, only : topfsw_type, sfcfsw_type, &
330 & profsw_type,cmpfsw_type,nbdsw
331 use module_radsw_main
, only : rswinit, swrad
333 use module_radlw_parameters
, only : topflw_type, sfcflw_type, &
335 use module_radlw_main
, only : rlwinit, lwrad
342 character(40),
parameter :: &
343 & VTAGRAD=
'NCEP-Radiation_driver v5.2 Jan 2013 ' 378 integer,
parameter ::
ltp = 0
405 subroutine radinit( si, NLAY, me )
516 integer,
intent(in) :: NLAY, me
518 real (kind=kind_phys),
intent(in) :: si(:)
537 print *,
' NEW RADIATION PROGRAM STRUCTURES BECAME OPER. ', &
540 print *,
' - Selected Control Flag settings: ICTMflg=',
ictmflg, &
549 print *,
' LTP =',
ltp,
', add extra top layer =',
lextop 552 print *,
' Data usage is limited by initial condition!' 553 print *,
' No volcanic aerosols' 557 print *,
' - ISUBCLW=',
isubclw,
' No McICA, use grid ', &
558 &
'averaged cloud in LW radiation' 560 print *,
' - ISUBCLW=',
isubclw,
' Use McICA with fixed ', &
561 &
'permutation seeds for LW random number generator' 563 print *,
' - ISUBCLW=',
isubclw,
' Use McICA with random ', &
564 &
'permutation seeds for LW random number generator' 566 print *,
' - ERROR!!! ISUBCLW=',
isubclw,
' is not a ', &
572 print *,
' - ISUBCSW=',
isubcsw,
' No McICA, use grid ', &
573 &
'averaged cloud in SW radiation' 575 print *,
' - ISUBCSW=',
isubcsw,
' Use McICA with fixed ', &
576 &
'permutation seeds for SW random number generator' 578 print *,
' - ISUBCSW=',
isubcsw,
' Use McICA with random ', &
579 &
'permutation seeds for SW random number generator' 581 print *,
' - ERROR!!! ISUBCSW=',
isubcsw,
' is not a ', &
587 print *,
' - *** Notice *** ISUBCSW /= ISUBCLW !!!', &
611 call aer_init ( nlay, me )
617 call cld_init ( si, nlay, me)
650 subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, &
651 & slag,sdec,cdec,solcon)
715 integer,
intent(in) :: idate(:), jdate(:), me
716 logical,
intent(in) :: lsswr
718 real (kind=kind_phys),
intent(in) :: deltsw, deltim
721 real (kind=kind_phys),
intent(out) :: slag, sdec, cdec, solcon
724 integer :: iyear, imon, iday, ihour
725 integer :: kyear, kmon, kday, khour
756 if (
month0 /= imon )
then 769 elseif (
iyear0 /= iyear )
then 772 lsol_chg = (
isolar==4 .and. lmon_chg )
778 & ( jdate,kyear,deltsw,deltim,lsol_chg, me, &
780 & slag,sdec,cdec,solcon &
788 call aer_update ( iyear, imon, me )
793 if (
monthd /= kmon )
then 800 call gas_update ( kyear,kmon,kday,khour,
loz1st,lco2_chg, me )
998 & ( prsi,prsl,prslk,tgrs,qgrs,tracer,vvl,slmsk, &
999 & xlon,xlat,tsfc,snowd,sncovr,snoalb,zorl,hprim, &
1000 & alvsf,alnsf,alvwf,alnwf,facsf,facwf,fice,tisfc, &
1001 & sinlat,coslat,solhr,jdate,solcon, &
1002 & cv,cvt,cvb,fcice,frain,rrime,flgmin, &
1003 & icsdsw,icsdlw, ntcw,ncld,ntoz, ntrac,nfxr, &
1004 & dtlw,dtsw, lsswr,lslwr,lssav, uni_cld,lmfshal,lmfdeep2, &
1005 & ix, im, lm, me, lprnt, ipt, kdt, deltaq,sup,cnvw,cnvc, &
1006 & htrsw,topfsw,sfcfsw,dswcmp,uswcmp,sfalb,coszen,coszdg, &
1007 & htrlw,topflw,sfcflw,tsflw,semis,cldcov, &
1009 &, htrlw0,htrsw0,htrswb,htrlwb &
1299 integer,
intent(in) :: IX,IM, LM, NTRAC, NFXR, me,
1300 & ntoz, ntcw, ncld, ipt, kdt
1301 integer,
intent(in) :: icsdsw(im), icsdlw(im), jdate(8)
1303 logical,
intent(in) :: lsswr, lslwr, lssav, lprnt, uni_cld, &
1306 real (kind=kind_phys),
dimension(IX,LM+1),
intent(in) :: prsi
1308 real (kind=kind_phys),
dimension(IX,LM),
intent(in) :: prsl,
1309 & prslk, tgrs, qgrs, vvl, fcice, frain, rrime, deltaq, cnvw,
1311 real (kind=kind_phys),
dimension(IM),
intent(in) :: flgmin
1312 real(kind=kind_phys),
intent(in) :: sup
1314 real (kind=kind_phys),
dimension(IM),
intent(in) :: slmsk,
1315 & xlon, xlat, tsfc, snowd, zorl, hprim, alvsf, alnsf, alvwf,
1316 & alnwf, facsf, facwf, cv, cvt, cvb, fice, tisfc,
1317 & sncovr, snoalb, sinlat, coslat
1319 real (kind=kind_phys),
intent(in) :: solcon, dtlw, dtsw, solhr,
1320 & tracer(ix,lm,ntrac)
1322 real (kind=kind_phys),
dimension(IX,LM),
intent(inout):: cldcov
1325 real (kind=kind_phys),
dimension(IX,LM),
intent(out):: htrsw,htrlw
1327 real (kind=kind_phys),
dimension(IX,4),
intent(out) :: dswcmp,
1330 real (kind=kind_phys),
dimension(IM),
intent(out):: tsflw,
1331 & sfalb, semis, coszen, coszdg
1333 type(topfsw_type),
dimension(IM),
intent(out) :: topfsw
1334 type(sfcfsw_type),
dimension(IM),
intent(out) :: sfcfsw
1336 type(topflw_type),
dimension(IM),
intent(out) :: topflw
1337 type(sfcflw_type),
dimension(IM),
intent(out) :: sfcflw
1340 real (kind=kind_phys),
intent(inout) :: fluxr(ix,nfxr)
1343 real (kind=kind_phys),
dimension(IX,LM,NBDSW),
optional,
1344 &
intent(out) :: htrswb
1345 real (kind=kind_phys),
dimension(IX,LM,NBDLW),
optional,
1346 &
intent(out) :: htrlwb
1347 real (kind=kind_phys),
dimension(ix,lm),
optional, &
1348 & intent(out) :: htrlw0
1349 real (kind=kind_phys),
dimension(ix,lm),
optional, &
1350 & intent(out) :: htrsw0
1353 real (kind=kind_phys),
dimension(IM,LM+1+LTP):: plvl, tlvl
1355 real (kind=kind_phys),
dimension(IM,LM+LTP) :: plyr, tlyr, qlyr, &
1356 & olyr, rhly, qstl, vvel, clw, prslk1, tem2da, tem2db, tvly
1358 real (kind=kind_phys),
dimension(IM) :: tsfa, cvt1, cvb1, tem1d, &
1359 & sfcemis, tsfg, tskn
1361 real (kind=kind_phys),
dimension(IM,LM+LTP,NF_CLDS) :: clouds
1362 real (kind=kind_phys),
dimension(IM,LM+LTP,NF_VGAS) :: gasvmr
1363 real (kind=kind_phys),
dimension(IM, NF_ALBD) :: sfcalb
1364 real (kind=kind_phys),
dimension(IM, NSPC1) :: aerodp
1365 real (kind=kind_phys),
dimension(IM,LM+LTP,NTRAC) :: tracer1
1367 real (kind=kind_phys),
dimension(IM,LM+LTP,NBDSW,NF_AESW)::faersw
1368 real (kind=kind_phys),
dimension(IM,LM+LTP,NBDLW,NF_AELW)::faerlw
1370 real (kind=kind_phys),
dimension(IM,LM+LTP) :: htswc
1371 real (kind=kind_phys),
dimension(IM,LM+LTP) :: htlwc
1373 real (kind=kind_phys),
dimension(IM,LM+LTP) :: gcice, grain, grime
1377 real (kind=kind_phys),
dimension(IM,LM+LTP) :: htsw0
1379 type(cmpfsw_type),
dimension(IM) :: scmpsw
1380 real (kind=kind_phys),
dimension(IM,LM+LTP,NBDSW) :: htswb
1382 real (kind=kind_phys),
dimension(IM,LM+LTP) :: htlw0
1384 real (kind=kind_phys),
dimension(IM,LM+LTP,NBDLW) :: htlwb
1386 real (kind=kind_phys) :: raddt, es, qs, delt, tem0d, cldsa(im,5)
1388 integer :: i, j, k, k1, lv, icec, itop, ibtc, nday, idxday(im), &
1389 & mbota(IM,3), mtopa(IM,3), LP1, nb, LMK, LMP, kd, lla, llb, &
1436 raddt = min(dtsw, dtlw)
1455 if (
itsfc == 0 )
then 1477 plvl(i,k1) = 0.01 * prsi(i,k)
1478 plyr(i,k1) = 0.01 * prsl(i,k)
1479 tlyr(i,k1) = tgrs(i,k)
1480 prslk1(i,k1) = prslk(i,k)
1484 es = min( prsl(i,k),
fpvs( tgrs(i,k) ) )
1485 qs = max(
qmin, eps * es / (prsl(i,k) + epsm1*es) )
1486 rhly(i,k1) = max( 0.0, min( 1.0, max(
qmin, qgrs(i,k))/qs ) )
1494 tracer1(i,k1,j) = tracer(i,k,j)
1501 plvl(i,lp1+kd) = 0.01 * prsi(i,lp1)
1508 plyr(i,lyb) = 0.5 * plvl(i,lla)
1509 tlyr(i,lyb) = tlyr(i,lya)
1511 prslk1(i,lyb) = (plyr(i,lyb)*0.00001) ** rocp
1513 rhly(i,lyb) = rhly(i,lya)
1514 qstl(i,lyb) = qstl(i,lya)
1520 tracer1(i,lyb,j) = tracer1(i,lya,j)
1532 gcice(i,k1) = fcice(i,k)
1533 grain(i,k1) = frain(i,k)
1534 grime(i,k1) = rrime(i,k)
1540 gcice(i,lyb) = fcice(i,lya)
1541 grain(i,lyb) = frain(i,lya)
1542 grime(i,lyb) = rrime(i,lya)
1554 olyr(i,k) = max(
qmin, tracer1(i,k,ntoz) )
1575 & ( xlon,sinlat,coslat,solhr, im, me, &
1596 & ( plvl, xlon, xlat, &
1606 tem2da(i,k) = log( plyr(i,k) )
1607 tem2db(i,k) = log( plvl(i,k) )
1615 tem2da(i,1) = log( plyr(i,1) )
1617 tsfa(i) = tlyr(i,lmk)
1618 tlvl(i,1) = tlyr(i,1)
1619 tlvl(i,lmp) = tskn(i)
1626 qlyr(i,k1) = max( tem1d(i), qgrs(i,k) )
1627 tem1d(i) = min(
qme5, qlyr(i,k1) )
1628 tvly(i,k1) = tgrs(i,k) * (1.0 + fvirt*qlyr(i,k1))
1634 qlyr(i,lyb) = qlyr(i,lya)
1635 tvly(i,lyb) = tvly(i,lya)
1641 tlvl(i,k) = tlyr(i,k) + (tlyr(i,k-1) - tlyr(i,k)) &
1642 & * (tem2db(i,k) - tem2da(i,k)) &
1643 & / (tem2da(i,k-1) - tem2da(i,k))
1651 tem2da(i,1) = log( plyr(i,1) )
1652 tem2db(i,1) = log( plvl(i,1) )
1655 tlvl(i,lmp) = tlyr(i,lmk)
1660 qlyr(i,k) = max( tem1d(i), qgrs(i,k) )
1661 tem1d(i) = min(
qme5, qlyr(i,k) )
1662 tvly(i,k) = tgrs(i,k) * (1.0 + fvirt*qlyr(i,k))
1668 qlyr(i,lyb) = qlyr(i,lya)
1669 tvly(i,lyb) = tvly(i,lya)
1675 tlvl(i,k+1) = tlyr(i,k) + (tlyr(i,k+1) - tlyr(i,k)) &
1676 & * (tem2db(i,k+1) - tem2da(i,k)) &
1677 & / (tem2da(i,k+1) - tem2da(i,k))
1687 if (coszen(i) >= 0.0001)
then 1706 & ( plvl,plyr,prslk1,tvly,rhly,slmsk,tracer1,xlon,xlat, &
1707 & im,lmk,lmp, lsswr,lslwr, &
1709 & faersw,faerlw,aerodp &
1737 clw(i,k) = clw(i,k) + tracer1(i,k,lv)
1744 if ( clw(i,k) <
epsq ) clw(i,k) = 0.0
1757 clw(i,k) = clw(i,k) + cnvw(i,k)
1767 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw, &
1768 & xlat,xlon,slmsk, im, lmk, lmp, &
1769 & uni_cld, lmfshal, lmfdeep2, cldcov(1:im,1:lm), &
1771 & clouds,cldsa,mtopa,mbota &
1779 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw, &
1780 & xlat,xlon,slmsk, gcice,grain,grime,flgmin, &
1781 & im, lmk, lmp, lmfshal, lmfdeep2, &
1783 & clouds,cldsa,mtopa,mbota &
1790 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw,cnvw,cnvc, &
1791 & xlat,xlon,slmsk, &
1793 & deltaq, sup,kdt,me, &
1795 & clouds,cldsa,mtopa,mbota &
1805 cvt1(i) = 0.01 * cvt(i)
1806 cvb1(i) = 0.01 * cvb(i)
1815 vvel(i,k1) = 0.01 * vvl(i,k)
1821 vvel(i,lyb) = vvel(i,lya)
1829 & ( plyr,plvl,tlyr,rhly,vvel,cv,cvt1,cvb1, &
1830 & xlat,xlon,slmsk, &
1833 & clouds,cldsa,mtopa,mbota &
1849 & ( slmsk,snowd,sncovr,snoalb,zorl,coszen,tsfg,tsfa,hprim, &
1850 & alvsf,alnsf,alvwf,alnwf,facsf,facwf,fice,tisfc, &
1858 sfalb(i) = max(0.01, 0.5 * (sfcalb(i,2) + sfcalb(i,4)))
1867 if (
present(htrswb) .and.
present(htrsw0))
then 1871 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
1872 & clouds,icsdsw,faersw,sfcalb, &
1873 & coszen,solcon, nday,idxday, &
1874 & im, lmk, lmp, lprnt, &
1876 & htswc,topfsw,sfcfsw &
1879 &, hsw0=htsw0,hswb=htswb,fdncmp=scmpsw &
1887 htrswb(i,k,j) = htswb(i,k1,j)
1892 else if (
present(htrswb) .and. .not.
present(htrsw0) )
then 1896 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
1897 & clouds,icsdsw,faersw,sfcalb, &
1898 & coszen,solcon, nday,idxday, &
1899 & im, lmk, lmp, lprnt, &
1901 & htswc,topfsw,sfcfsw &
1904 &, hswb=htswb,fdncmp=scmpsw &
1911 htrswb(i,k,j) = htswb(i,k1,j)
1916 else if (
present(htrsw0) .and. .not.
present(htrswb) )
then 1920 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
1921 & clouds,icsdsw,faersw,sfcalb, &
1922 & coszen,solcon, nday,idxday, &
1923 & im, lmk, lmp, lprnt, &
1925 & htswc,topfsw,sfcfsw &
1928 &, hsw0=htsw0,fdncmp=scmpsw &
1935 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
1936 & clouds,icsdsw,faersw,sfcalb, &
1937 & coszen,solcon, nday,idxday, &
1938 & im, lmk, lmp, lprnt, &
1940 & htswc,topfsw,sfcfsw &
1952 htrsw(i,k) = htswc(i,k1)
1955 if (
present(htrsw0))
then 1959 htrsw0(i,k) = htsw0(i,k1)
1969 dswcmp(i,1) = scmpsw(i)%nirbm
1970 dswcmp(i,2) = scmpsw(i)%nirdf
1971 dswcmp(i,3) = scmpsw(i)%visbm
1972 dswcmp(i,4) = scmpsw(i)%visdf
1974 uswcmp(i,1) = scmpsw(i)%nirbm * sfcalb(i,1)
1975 uswcmp(i,2) = scmpsw(i)%nirdf * sfcalb(i,2)
1976 uswcmp(i,3) = scmpsw(i)%visbm * sfcalb(i,3)
1977 uswcmp(i,4) = scmpsw(i)%visdf * sfcalb(i,4)
1988 sfcfsw = sfcfsw_type( 0.0, 0.0, 0.0, 0.0 )
1989 topfsw = topfsw_type( 0.0, 0.0, 0.0 )
1990 scmpsw = cmpfsw_type( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 )
2002 if (
present(htrswb) )
then 2011 if (
present(htrsw0) )
then 2032 & ( xlon,xlat,slmsk,snowd,sncovr,zorl,tsfg,tsfa,hprim, &
2042 if (
present(htrlwb) .and.
present(htrlw0) )
then 2046 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
2047 & clouds,icsdlw,faerlw,sfcemis,tsfg, &
2048 & im, lmk, lmp, lprnt, &
2050 & htlwc,topflw,sfcflw &
2062 htrlwb(i,k,j) = htlwb(i,k1,j)
2067 else if (
present(htrlwb) .and. .not.
present(htrlw0) )
then 2071 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
2072 & clouds,icsdlw,faerlw,sfcemis,tsfg, &
2073 & im, lmk, lmp, lprnt, &
2075 & htlwc,topflw,sfcflw &
2086 htrlwb(i,k,j) = htlwb(i,k1,j)
2090 else if (
present(htrlw0) .and. .not.
present(htrlwb) )
then 2095 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
2096 & clouds,icsdlw,faerlw,sfcemis,tsfg, &
2097 & im, lmk, lmp, lprnt, &
2099 & htlwc,topflw,sfcflw &
2109 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
2110 & clouds,icsdlw,faerlw,sfcemis,tsfg, &
2111 & im, lmk, lmp, lprnt, &
2113 & htlwc,topflw,sfcflw &
2122 semis(i) = sfcemis(i)
2131 htrlw(i,k) = htlwc(i,k1)
2135 if (
present(htrlw0))
then 2139 htrlw0(i,k) = htlw0(i,k1)
2158 fluxr(i,34) = fluxr(i,34) + dtsw*aerodp(i,1)
2159 fluxr(i,35) = fluxr(i,35) + dtsw*aerodp(i,2)
2160 fluxr(i,36) = fluxr(i,36) + dtsw*aerodp(i,3)
2161 fluxr(i,37) = fluxr(i,37) + dtsw*aerodp(i,4)
2162 fluxr(i,38) = fluxr(i,38) + dtsw*aerodp(i,5)
2163 fluxr(i,39) = fluxr(i,39) + dtsw*aerodp(i,6)
2171 fluxr(i,1 ) = fluxr(i,1 ) + dtlw * topflw(i)%upfxc
2172 fluxr(i,19) = fluxr(i,19) + dtlw * sfcflw(i)%dnfxc
2173 fluxr(i,20) = fluxr(i,20) + dtlw * sfcflw(i)%upfxc
2175 fluxr(i,28) = fluxr(i,28) + dtlw * topflw(i)%upfx0
2176 fluxr(i,30) = fluxr(i,30) + dtlw * sfcflw(i)%dnfx0
2177 fluxr(i,33) = fluxr(i,33) + dtlw * sfcflw(i)%upfx0
2186 if (coszen(i) > 0.)
then 2189 tem0d = dtsw * coszdg(i) / coszen(i)
2190 fluxr(i,2 ) = fluxr(i,2) + topfsw(i)%upfxc * tem0d
2191 fluxr(i,3 ) = fluxr(i,3) + sfcfsw(i)%upfxc * tem0d
2192 fluxr(i,4 ) = fluxr(i,4) + sfcfsw(i)%dnfxc * tem0d
2195 fluxr(i,21) = fluxr(i,21) + scmpsw(i)%uvbfc * tem0d
2196 fluxr(i,22) = fluxr(i,22) + scmpsw(i)%uvbf0 * tem0d
2199 fluxr(i,23) = fluxr(i,23) + topfsw(i)%dnfxc * tem0d
2202 fluxr(i,24) = fluxr(i,24) + scmpsw(i)%visbm * tem0d
2203 fluxr(i,25) = fluxr(i,25) + scmpsw(i)%visdf * tem0d
2204 fluxr(i,26) = fluxr(i,26) + scmpsw(i)%nirbm * tem0d
2205 fluxr(i,27) = fluxr(i,27) + scmpsw(i)%nirdf * tem0d
2208 fluxr(i,29) = fluxr(i,29) + topfsw(i)%upfx0 * tem0d
2209 fluxr(i,31) = fluxr(i,31) + sfcfsw(i)%upfx0 * tem0d
2210 fluxr(i,32) = fluxr(i,32) + sfcfsw(i)%dnfx0 * tem0d
2217 if (lsswr .or. lslwr)
then 2219 fluxr(i,17) = fluxr(i,17) + raddt * cldsa(i,4)
2220 fluxr(i,18) = fluxr(i,18) + raddt * cldsa(i,5)
2229 tem0d = raddt * cldsa(i,j)
2230 itop = mtopa(i,j) - kd
2231 ibtc = mbota(i,j) - kd
2232 fluxr(i, 8-j) = fluxr(i, 8-j) + tem0d
2233 fluxr(i,11-j) = fluxr(i,11-j) + tem0d * prsi(i,itop+kt)
2234 fluxr(i,14-j) = fluxr(i,14-j) + tem0d * prsi(i,ibtc+kb)
2235 fluxr(i,17-j) = fluxr(i,17-j) + tem0d * tgrs(i,itop)
2240 if (.not. uni_cld)
then 2244 cldcov(i,k) = clouds(i,k1,1)
2279 end subroutine grrad
integer, save iovrsw
cloud overlapping control flag for SW =0:use random cloud overlapping method =1:use maximum-rando...
integer, save isubcsw
sub-column cloud approx flag in SW radiation =0:no McICA approximation in SW radiation =1:use McI...
real(kind=kind_phys) epsq
EPSQ=1.0e-12.
integer, save iaerflg
aerosol effect control flag 3-digit flag 'abc': a-stratospheric volcanic aerols b-tropospheric ...
real(kind=kind_phys) qmin
lower limit of saturation vapor pressure (=1.0e-10)
logical, save lcnorm
in-cld condensate control flag
logical, save lcrick
eliminating CRICK control flag
real(kind=kind_phys) qme5
lower limit of specific humidity (=1.0e-7)
real, parameter prsmin
lower limit of toa pressure value in mb
integer month0
new data input control variables (set/reset in subroutines radinit/radupdate):
integer, save ialbflg
surface albedo scheme control flag =0:vegetation type based climatological albedo scheme =1:seaso...
logical loz1st
control flag for the first time of reading climatological ozone data (set/reset in subroutines radini...
subroutine, public 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.
integer, save ico2flg
co2 data source control flag =0:prescribed value(380 ppmv) =1:yearly global averaged annual mean ...
integer, save icmphys
cloud micorphysics scheme control flag =1:modified Zhao/Carr/Sundqvist scheme (Moorthi, 2001) =2:Ferrier microphysics scheme (Ferrier et al. 2002) =3:as in 1 but with pdf method defined cloud cover
integer, save icldflg
cloud optical property scheme control flag =0:use diagnostic cloud scheme for cloud cover and mean ...
integer, save iemsflg
surface emissivity scheme control flag =0:black-body surface emissivity(=1.0) =1:vegetation type ...
elemental real(krealfp) function, public fpvs(t)
character(40), parameter vtagrad
logical, save lnoprec
precip effect on radiation flag (Ferrier microphysics)
integer, parameter ltp
optional extra top layer on top of low ceiling models LTP=0: no extra top layer ...
subroutine, public radinit(si, NLAY, me)
This subroutine initialize a model's radiation process through calling of specific initialization sub...
integer, save ioznflg
ozone data source control flag =0:use seasonal climatology ozone data >0:use prognostic ozone sch...
integer, save ictmflg
controls external data at initial time and data usage during forecast time =-2:as in 0...
real(kind=kind_phys) qme6
lower limit of specific humidity (=1.0e-7)
integer, save isolar
solar constant scheme control flag =0:fixed value=1366.0 (old standard) =10:fixed value=1360...
integer itsfc
control flag for LW surface temperature at air/ground interface (default=0, the value will be set in ...
integer, save isubclw
sub-column cloud approx flag in LW radiation =0:no McICA approximation in LW radiation =1:use McI...
integer, save ivflip
vertical profile indexing flag
logical, parameter lextop
control flag for extra top layer
integer, save iovrlw
cloud overlapping control flag for LW =0:use random cloud overlapping method =1:use maximum-rando...
subroutine, public 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.