305 module module_radiation_driver
309 use physcons
, only : eps => con_eps, &
310 & epsm1 => con_epsm1, &
311 & fvirt => con_fvirt &
313 use funcphys
, only : fpvs
340 character(40),
parameter :: &
341 & VTAGRAD=
'NCEP-Radiation_driver v5.2 Jan 2013 '
376 integer,
parameter ::
ltp = 0
403 subroutine radinit( si, NLAY, me )
514 integer,
intent(in) :: NLAY, me
516 real (kind=kind_phys),
intent(in) :: si(:)
535 print *,
' NEW RADIATION PROGRAM STRUCTURES BECAME OPER. ', &
538 print *,
' - Selected Control Flag settings: ICTMflg=',
ictmflg, &
547 print *,
' LTP =',
ltp,
', add extra top layer =',
lextop
550 print *,
' Data usage is limited by initial condition!'
551 print *,
' No volcanic aerosols'
555 print *,
' - ISUBCLW=',
isubclw,
' No McICA, use grid ', &
556 &
'averaged cloud in LW radiation'
558 print *,
' - ISUBCLW=',
isubclw,
' Use McICA with fixed ', &
559 &
'permutation seeds for LW random number generator'
561 print *,
' - ISUBCLW=',
isubclw,
' Use McICA with random ', &
562 &
'permutation seeds for LW random number generator'
564 print *,
' - ERROR!!! ISUBCLW=',
isubclw,
' is not a ', &
570 print *,
' - ISUBCSW=',
isubcsw,
' No McICA, use grid ', &
571 &
'averaged cloud in SW radiation'
573 print *,
' - ISUBCSW=',
isubcsw,
' Use McICA with fixed ', &
574 &
'permutation seeds for SW random number generator'
576 print *,
' - ISUBCSW=',
isubcsw,
' Use McICA with random ', &
577 &
'permutation seeds for SW random number generator'
579 print *,
' - ERROR!!! ISUBCSW=',
isubcsw,
' is not a ', &
585 print *,
' - *** Notice *** ISUBCSW /= ISUBCLW !!!', &
648 subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, &
649 & slag,sdec,cdec,solcon)
713 integer,
intent(in) :: idate(:), jdate(:), me
714 logical,
intent(in) :: lsswr
716 real (kind=kind_phys),
intent(in) :: deltsw, deltim
719 real (kind=kind_phys),
intent(out) :: slag, sdec, cdec, solcon
722 integer :: iyear, imon, iday, ihour
723 integer :: kyear, kmon, kday, khour
754 if (
month0 /= imon )
then
767 elseif ( iyear0 /= iyear )
then
770 lsol_chg = (
isolar==4 .and. lmon_chg )
776 & ( jdate,kyear,deltsw,deltim,lsol_chg, me, &
778 & slag,sdec,cdec,solcon &
791 if ( monthd /= kmon )
then
996 & ( prsi,prsl,prslk,tgrs,qgrs,tracer,vvl,slmsk, &
997 & xlon,xlat,tsfc,snowd,sncovr,snoalb,zorl,hprim, &
998 & alvsf,alnsf,alvwf,alnwf,facsf,facwf,fice,tisfc, &
999 & sinlat,coslat,solhr,jdate,solcon, &
1000 & cv,cvt,cvb,fcice,frain,rrime,flgmin, &
1001 & icsdsw,icsdlw, ntcw,ncld,ntoz, ntrac,nfxr, &
1002 & dtlw,dtsw, lsswr,lslwr,lssav, uni_cld,lmfshal,lmfdeep2, &
1003 & ix, im, lm, me, lprnt, ipt, kdt, deltaq,sup,cnvw,cnvc, &
1004 & htrsw,topfsw,sfcfsw,dswcmp,uswcmp,sfalb,coszen,coszdg, &
1005 & htrlw,topflw,sfcflw,tsflw,semis,cldcov, &
1007 &, htrlw0,htrsw0,htrswb,htrlwb &
1297 integer,
intent(in) :: IX,IM, LM, NTRAC, NFXR, me, &
1298 & ntoz, ntcw, ncld, ipt, kdt
1299 integer,
intent(in) :: icsdsw(im), icsdlw(im), jdate(8)
1301 logical,
intent(in) :: lsswr, lslwr, lssav, lprnt, uni_cld, &
1304 real (kind=kind_phys),
dimension(IX,LM+1),
intent(in) :: prsi
1306 real (kind=kind_phys),
dimension(IX,LM),
intent(in) :: prsl, &
1307 & prslk, tgrs, qgrs, vvl, fcice, frain, rrime, deltaq, cnvw, &
1309 real (kind=kind_phys),
dimension(IM),
intent(in) :: flgmin
1310 real(kind=kind_phys),
intent(in) :: sup
1312 real (kind=kind_phys),
dimension(IM),
intent(in) :: slmsk, &
1313 & xlon, xlat, tsfc, snowd, zorl, hprim, alvsf, alnsf, alvwf, &
1314 & alnwf, facsf, facwf, cv, cvt, cvb, fice, tisfc, &
1315 & sncovr, snoalb, sinlat, coslat
1317 real (kind=kind_phys),
intent(in) :: solcon, dtlw, dtsw, solhr, &
1318 & tracer(IX,LM,NTRAC)
1320 real (kind=kind_phys),
dimension(IX,LM),
intent(inout):: cldcov
1323 real (kind=kind_phys),
dimension(IX,LM),
intent(out):: htrsw,htrlw
1325 real (kind=kind_phys),
dimension(IX,4),
intent(out) :: dswcmp, &
1328 real (kind=kind_phys),
dimension(IM),
intent(out):: tsflw, &
1329 & sfalb, semis, coszen, coszdg
1331 type(
topfsw_type),
dimension(IM),
intent(out) :: topfsw
1332 type(
sfcfsw_type),
dimension(IM),
intent(out) :: sfcfsw
1334 type(
topflw_type),
dimension(IM),
intent(out) :: topflw
1335 type(
sfcflw_type),
dimension(IM),
intent(out) :: sfcflw
1338 real (kind=kind_phys),
intent(inout) :: fluxr(ix,nfxr)
1341 real (kind=kind_phys),
dimension(IX,LM,NBDSW),
optional,
1342 &
intent(out) :: htrswb
1343 real (kind=kind_phys),
dimension(IX,LM,NBDLW),
optional,
1344 &
intent(out) :: htrlwb
1345 real (kind=kind_phys),
dimension(ix,lm),
optional, &
1346 & intent(out) :: htrlw0
1347 real (kind=kind_phys),
dimension(ix,lm),
optional, &
1348 & intent(out) :: htrsw0
1351 real (kind=kind_phys),
dimension(IM,LM+1+LTP):: plvl, tlvl
1353 real (kind=kind_phys),
dimension(IM,LM+LTP) :: plyr, tlyr, qlyr, &
1354 & olyr, rhly, qstl, vvel, clw, prslk1, tem2da, tem2db, tvly
1356 real (kind=kind_phys),
dimension(IM) :: tsfa, cvt1, cvb1, tem1d, &
1357 & sfcemis, tsfg, tskn
1359 real (kind=kind_phys),
dimension(IM,LM+LTP,NF_CLDS) :: clouds
1360 real (kind=kind_phys),
dimension(IM,LM+LTP,NF_VGAS) :: gasvmr
1361 real (kind=kind_phys),
dimension(IM, NF_ALBD) :: sfcalb
1362 real (kind=kind_phys),
dimension(IM, NSPC1) :: aerodp
1363 real (kind=kind_phys),
dimension(IM,LM+LTP,NTRAC) :: tracer1
1365 real (kind=kind_phys),
dimension(IM,LM+LTP,NBDSW,NF_AESW)::faersw
1366 real (kind=kind_phys),
dimension(IM,LM+LTP,NBDLW,NF_AELW)::faerlw
1368 real (kind=kind_phys),
dimension(IM,LM+LTP) :: htswc
1369 real (kind=kind_phys),
dimension(IM,LM+LTP) :: htlwc
1371 real (kind=kind_phys),
dimension(IM,LM+LTP) :: gcice, grain, grime
1375 real (kind=kind_phys),
dimension(IM,LM+LTP) :: htsw0
1378 real (kind=kind_phys),
dimension(IM,LM+LTP,NBDSW) :: htswb
1380 real (kind=kind_phys),
dimension(IM,LM+LTP) :: htlw0
1382 real (kind=kind_phys),
dimension(IM,LM+LTP,NBDLW) :: htlwb
1384 real (kind=kind_phys) :: raddt, es, qs, delt, tem0d, cldsa(im,5)
1386 integer :: i, j, k, k1, lv, icec, itop, ibtc, nday, idxday(im), &
1387 & mbota(IM,3), mtopa(IM,3), LP1, nb, LMK, LMP, kd, lla, llb, &
1434 raddt = min(dtsw, dtlw)
1456 if (
itsfc == 0 )
then
1478 plvl(i,k1) = 0.01 * prsi(i,k)
1479 plyr(i,k1) = 0.01 * prsl(i,k)
1480 tlyr(i,k1) = tgrs(i,k)
1481 prslk1(i,k1) = prslk(i,k)
1485 es = min( prsl(i,k), fpvs( tgrs(i,k) ) )
1486 qs = max(
qmin, eps * es / (prsl(i,k) + epsm1*es) )
1487 rhly(i,k1) = max( 0.0, min( 1.0, max(
qmin, qgrs(i,k))/qs ) )
1495 tracer1(i,k1,j) = tracer(i,k,j)
1502 plvl(i,lp1+kd) = 0.01 * prsi(i,lp1)
1509 plyr(i,lyb) = 0.5 * plvl(i,lla)
1510 tlyr(i,lyb) = tlyr(i,lya)
1512 prslk1(i,lyb) = (plyr(i,lyb)*0.00001) ** rocp
1514 rhly(i,lyb) = rhly(i,lya)
1515 qstl(i,lyb) = qstl(i,lya)
1521 tracer1(i,lyb,j) = tracer1(i,lya,j)
1533 gcice(i,k1) = fcice(i,k)
1534 grain(i,k1) = frain(i,k)
1535 grime(i,k1) = rrime(i,k)
1541 gcice(i,lyb) = fcice(i,lya)
1542 grain(i,lyb) = frain(i,lya)
1543 grime(i,lyb) = rrime(i,lya)
1555 olyr(i,k) = max(
qmin, tracer1(i,k,ntoz) )
1576 & ( xlon,sinlat,coslat,solhr, im, me, &
1597 & ( plvl, xlon, xlat, &
1607 tem2da(i,k) = log( plyr(i,k) )
1608 tem2db(i,k) = log( plvl(i,k) )
1616 tem2da(i,1) = log( plyr(i,1) )
1618 tsfa(i) = tlyr(i,lmk)
1619 tlvl(i,1) = tlyr(i,1)
1620 tlvl(i,lmp) = tskn(i)
1627 qlyr(i,k1) = max( tem1d(i), qgrs(i,k) )
1628 tem1d(i) = min(
qme5, qlyr(i,k1) )
1629 tvly(i,k1) = tgrs(i,k) * (1.0 + fvirt*qlyr(i,k1))
1635 qlyr(i,lyb) = qlyr(i,lya)
1636 tvly(i,lyb) = tvly(i,lya)
1642 tlvl(i,k) = tlyr(i,k) + (tlyr(i,k-1) - tlyr(i,k)) &
1643 & * (tem2db(i,k) - tem2da(i,k)) &
1644 & / (tem2da(i,k-1) - tem2da(i,k))
1652 tem2da(i,1) = log( plyr(i,1) )
1653 tem2db(i,1) = log( plvl(i,1) )
1656 tlvl(i,lmp) = tlyr(i,lmk)
1661 qlyr(i,k) = max( tem1d(i), qgrs(i,k) )
1662 tem1d(i) = min(
qme5, qlyr(i,k) )
1663 tvly(i,k) = tgrs(i,k) * (1.0 + fvirt*qlyr(i,k))
1669 qlyr(i,lyb) = qlyr(i,lya)
1670 tvly(i,lyb) = tvly(i,lya)
1676 tlvl(i,k+1) = tlyr(i,k) + (tlyr(i,k+1) - tlyr(i,k)) &
1677 & * (tem2db(i,k+1) - tem2da(i,k)) &
1678 & / (tem2da(i,k+1) - tem2da(i,k))
1688 if (coszen(i) >= 0.0001)
then
1707 & ( plvl,plyr,prslk1,tvly,rhly,slmsk,tracer1,xlon,xlat, &
1708 & im,lmk,lmp, lsswr,lslwr, &
1710 & faersw,faerlw,aerodp &
1738 clw(i,k) = clw(i,k) + tracer1(i,k,lv)
1745 if ( clw(i,k) <
epsq ) clw(i,k) = 0.0
1758 clw(i,k) = clw(i,k) + cnvw(i,k)
1768 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw, &
1769 & xlat,xlon,slmsk, im, lmk, lmp, &
1770 & uni_cld, lmfshal, lmfdeep2, cldcov(1:im,1:lm), &
1772 & clouds,cldsa,mtopa,mbota &
1780 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw, &
1781 & xlat,xlon,slmsk, gcice,grain,grime,flgmin, &
1782 & im, lmk, lmp, lmfshal, lmfdeep2, &
1784 & clouds,cldsa,mtopa,mbota &
1791 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw,cnvw,cnvc, &
1792 & xlat,xlon,slmsk, &
1794 & deltaq, sup,kdt,me, &
1796 & clouds,cldsa,mtopa,mbota &
1806 cvt1(i) = 0.01 * cvt(i)
1807 cvb1(i) = 0.01 * cvb(i)
1816 vvel(i,k1) = 0.01 * vvl(i,k)
1822 vvel(i,lyb) = vvel(i,lya)
1830 & ( plyr,plvl,tlyr,rhly,vvel,cv,cvt1,cvb1, &
1831 & xlat,xlon,slmsk, &
1834 & clouds,cldsa,mtopa,mbota &
1850 & ( slmsk,snowd,sncovr,snoalb,zorl,coszen,tsfg,tsfa,hprim, &
1851 & alvsf,alnsf,alvwf,alnwf,facsf,facwf,fice,tisfc, &
1860 sfalb(i) = max(0.01, 0.5 * (sfcalb(i,2) + sfcalb(i,4)))
1869 if (
present(htrswb) .and.
present(htrsw0))
then
1873 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
1874 & clouds,icsdsw,faersw,sfcalb, &
1875 & coszen,solcon, nday,idxday, &
1876 & im, lmk, lmp, lprnt, &
1878 & htswc,topfsw,sfcfsw &
1881 &, hsw0=htsw0,hswb=htswb,fdncmp=scmpsw &
1889 htrswb(i,k,j) = htswb(i,k1,j)
1894 else if (
present(htrswb) .and. .not.
present(htrsw0) )
then
1898 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
1899 & clouds,icsdsw,faersw,sfcalb, &
1900 & coszen,solcon, nday,idxday, &
1901 & im, lmk, lmp, lprnt, &
1903 & htswc,topfsw,sfcfsw &
1906 &, hswb=htswb,fdncmp=scmpsw &
1913 htrswb(i,k,j) = htswb(i,k1,j)
1918 else if (
present(htrsw0) .and. .not.
present(htrswb) )
then
1922 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
1923 & clouds,icsdsw,faersw,sfcalb, &
1924 & coszen,solcon, nday,idxday, &
1925 & im, lmk, lmp, lprnt, &
1927 & htswc,topfsw,sfcfsw &
1930 &, hsw0=htsw0,fdncmp=scmpsw &
1937 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
1938 & clouds,icsdsw,faersw,sfcalb, &
1939 & coszen,solcon, nday,idxday, &
1940 & im, lmk, lmp, lprnt, &
1942 & htswc,topfsw,sfcfsw &
1954 htrsw(i,k) = htswc(i,k1)
1957 if (
present(htrsw0))
then
1961 htrsw0(i,k) = htsw0(i,k1)
1971 dswcmp(i,1) = scmpsw(i)%nirbm
1972 dswcmp(i,2) = scmpsw(i)%nirdf
1973 dswcmp(i,3) = scmpsw(i)%visbm
1974 dswcmp(i,4) = scmpsw(i)%visdf
1976 uswcmp(i,1) = scmpsw(i)%nirbm * sfcalb(i,1)
1977 uswcmp(i,2) = scmpsw(i)%nirdf * sfcalb(i,2)
1978 uswcmp(i,3) = scmpsw(i)%visbm * sfcalb(i,3)
1979 uswcmp(i,4) = scmpsw(i)%visdf * sfcalb(i,4)
1992 scmpsw =
cmpfsw_type( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 )
2004 if (
present(htrswb) )
then
2013 if (
present(htrsw0) )
then
2034 & ( xlon,xlat,slmsk,snowd,sncovr,zorl,tsfg,tsfa,hprim, &
2044 if (
present(htrlwb) .and.
present(htrlw0) )
then
2048 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
2049 & clouds,icsdlw,faerlw,sfcemis,tsfg, &
2050 & im, lmk, lmp, lprnt, &
2052 & htlwc,topflw,sfcflw &
2064 htrlwb(i,k,j) = htlwb(i,k1,j)
2069 else if (
present(htrlwb) .and. .not.
present(htrlw0) )
then
2073 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
2074 & clouds,icsdlw,faerlw,sfcemis,tsfg, &
2075 & im, lmk, lmp, lprnt, &
2077 & htlwc,topflw,sfcflw &
2088 htrlwb(i,k,j) = htlwb(i,k1,j)
2092 else if (
present(htrlw0) .and. .not.
present(htrlwb) )
then
2097 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
2098 & clouds,icsdlw,faerlw,sfcemis,tsfg, &
2099 & im, lmk, lmp, lprnt, &
2101 & htlwc,topflw,sfcflw &
2111 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
2112 & clouds,icsdlw,faerlw,sfcemis,tsfg, &
2113 & im, lmk, lmp, lprnt, &
2115 & htlwc,topflw,sfcflw &
2124 semis(i) = sfcemis(i)
2133 htrlw(i,k) = htlwc(i,k1)
2137 if (
present(htrlw0))
then
2141 htrlw0(i,k) = htlw0(i,k1)
2160 fluxr(i,34) = fluxr(i,34) + dtsw*aerodp(i,1)
2161 fluxr(i,35) = fluxr(i,35) + dtsw*aerodp(i,2)
2162 fluxr(i,36) = fluxr(i,36) + dtsw*aerodp(i,3)
2163 fluxr(i,37) = fluxr(i,37) + dtsw*aerodp(i,4)
2164 fluxr(i,38) = fluxr(i,38) + dtsw*aerodp(i,5)
2165 fluxr(i,39) = fluxr(i,39) + dtsw*aerodp(i,6)
2173 fluxr(i,1 ) = fluxr(i,1 ) + dtlw * topflw(i)%upfxc
2174 fluxr(i,19) = fluxr(i,19) + dtlw * sfcflw(i)%dnfxc
2175 fluxr(i,20) = fluxr(i,20) + dtlw * sfcflw(i)%upfxc
2177 fluxr(i,28) = fluxr(i,28) + dtlw * topflw(i)%upfx0
2178 fluxr(i,30) = fluxr(i,30) + dtlw * sfcflw(i)%dnfx0
2179 fluxr(i,33) = fluxr(i,33) + dtlw * sfcflw(i)%upfx0
2188 if (coszen(i) > 0.)
then
2191 tem0d = dtsw * coszdg(i) / coszen(i)
2192 fluxr(i,2 ) = fluxr(i,2) + topfsw(i)%upfxc * tem0d
2193 fluxr(i,3 ) = fluxr(i,3) + sfcfsw(i)%upfxc * tem0d
2194 fluxr(i,4 ) = fluxr(i,4) + sfcfsw(i)%dnfxc * tem0d
2197 fluxr(i,21) = fluxr(i,21) + scmpsw(i)%uvbfc * tem0d
2198 fluxr(i,22) = fluxr(i,22) + scmpsw(i)%uvbf0 * tem0d
2201 fluxr(i,23) = fluxr(i,23) + topfsw(i)%dnfxc * tem0d
2204 fluxr(i,24) = fluxr(i,24) + scmpsw(i)%visbm * tem0d
2205 fluxr(i,25) = fluxr(i,25) + scmpsw(i)%visdf * tem0d
2206 fluxr(i,26) = fluxr(i,26) + scmpsw(i)%nirbm * tem0d
2207 fluxr(i,27) = fluxr(i,27) + scmpsw(i)%nirdf * tem0d
2210 fluxr(i,29) = fluxr(i,29) + topfsw(i)%upfx0 * tem0d
2211 fluxr(i,31) = fluxr(i,31) + sfcfsw(i)%upfx0 * tem0d
2212 fluxr(i,32) = fluxr(i,32) + sfcfsw(i)%dnfx0 * tem0d
2219 if (lsswr .or. lslwr)
then
2221 fluxr(i,17) = fluxr(i,17) + raddt * cldsa(i,4)
2222 fluxr(i,18) = fluxr(i,18) + raddt * cldsa(i,5)
2231 tem0d = raddt * cldsa(i,j)
2232 itop = mtopa(i,j) - kd
2233 ibtc = mbota(i,j) - kd
2234 fluxr(i, 8-j) = fluxr(i, 8-j) + tem0d
2235 fluxr(i,11-j) = fluxr(i,11-j) + tem0d * prsi(i,itop+kt)
2236 fluxr(i,14-j) = fluxr(i,14-j) + tem0d * prsi(i,ibtc+kb)
2237 fluxr(i,17-j) = fluxr(i,17-j) + tem0d * tgrs(i,itop)
2242 if (.not. uni_cld)
then
2246 cldcov(i,k) = clouds(i,k1,1)
2281 end subroutine grrad
2288 end module module_radiation_driver
integer, save iovrsw
cloud overlapping control flag for SW =0:use random cloud overlapping method =1:use maximum-rando...
subroutine, public cld_init(si, NLAY, me)
This subroutine is an initialization program for cloud-radiation calculations and sets up boundary la...
Define type construct for radiation fluxes at surface.
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.
subroutine, public setemis(xlon, xlat, slmsk, snowf, sncovr, zorlf, tsknf, tairf, hprif, IMAX, sfcemis )
This subroutine computes surface emissivity for LW radiation.
derived type for special components of surface SW fluxes
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)
subroutine, public diagcld1(plyr, plvl, tlyr, rhly, vvel, cv, cvt, cvb, xlat, xlon, slmsk, IX, NLAY, NLP1, clouds, clds, mtop, mbot )
This subroutine computes cloud fractions for radiation calculations.
logical, save lcnorm
in-cld condensate control flag
logical, save lcrick
eliminating CRICK control flag
subroutine, public gas_update(iyear, imon, iday, ihour, loz1st, ldoco2, me)
This subroutine reads in 2-d monthly co2 data set for a specified year. Data are in a 15 degree lat/l...
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):
subroutine, public progcld2(plyr, plvl, tlyr, tvly, qlyr, qstl, rhly, clw, xlat, xlon, slmsk, f_ice, f_rain, r_rime, flgmin, IX, NLAY, NLP1, lmfshal, lmfdeep2, clouds, clds, mtop, mbot )
This subroutine computes cloud related quantities using ferrier's prognostic cloud microphysics schem...
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 sfc_init(me)
This subroutine is the initialization program for surface radiation related quantities (albedo...
integer, parameter, public nf_aelw
num of output fields for LW rad
subroutine, public swrad(plyr, plvl, tlyr, tlvl, qlyr, olyr, gasvmr, clouds, icseed, aerosols, sfcalb, cosz, solcon, NDAY, idxday, npts, nlay, nlp1, lprnt, hswc, topflx, sfcflx, HSW0, HSWB, FLXPRF, FDNCMP )
This subroutine is the main SW radiation routine.
subroutine, public progcld1(plyr, plvl, tlyr, tvly, qlyr, qstl, rhly, clw, xlat, xlon, slmsk, IX, NLAY, NLP1, shoc_cld, lmfshal, lmfdeep2, cldcov, clouds, clds, mtop, mbot )
This subroutine computes cloud related quantities using zhao/moorthi's prognostic cloud microphysics ...
Define type construct for optional radiation flux profiles.
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, parameter, public nf_albd
num of sfc albedo components
integer, save icldflg
cloud optical property scheme control flag =0:use diagnostic cloud scheme for cloud cover and mean ...
derived type for SW fluxes' column profiles (at layer interfaces)
integer, save iemsflg
surface emissivity scheme control flag =0:black-body surface emissivity(=1.0) =1:vegetation type ...
subroutine, public gas_init(me)
This subroutine sets up ozone, co2, etc. parameters. If climatology ozone then read in monthly ozone ...
subroutine, public aer_init(NLAY, me)
The initialization program is to set up necessary parameters and working arrays.
subroutine, public setalb(slmsk, snowf, sncovr, snoalb, zorlf, coszf, tsknf, tairf, hprif, alvsf, alnsf, alvwf, alnwf, facsf, facwf, fice, tisfc, IMAX, sfcalb )
This subroutine computes four components of surface albedos (i.e., vis-nir, direct-diffused) accordin...
subroutine, public rswinit(me)
This subroutine initializes non-varying module variables, conversion factors, and look-up tables...
This module is for specifying the band structures and program parameters used by the RRTMG-SW scheme...
subroutine, public coszmn(xlon, sinlat, coslat, solhr, IM, me, coszen, coszdg )
This subroutine computes mean cos solar zenith angle over SW calling interval.
subroutine, public getgases(plvl, xlon, xlat, IMAX, LMAX, gasdat )
This subroutine sets up global distribution of radiation absorbing gases in volume mixing ratio...
integer, parameter, public nf_aesw
num of output fields for SW rad
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...
subroutine, public getozn(prslk, xlat, IMAX, LM, o3mmr )
This subroutine sets up climatological ozone profile for radiation calculation. This code is original...
This module contains LW band parameters set up.
Define type construct for radiation fluxes at toa.
subroutine, public progcld3(plyr, plvl, tlyr, tvly, qlyr, qstl, rhly, clw, cnvw, cnvc, xlat, xlon, slmsk, ix, nlay, nlp1, deltaq, sup, kdt, me, clouds, clds, mtop, mbot )
This subroutine computes cloud related quantities using zhao/moorthi's prognostic cloud microphysics ...
subroutine, public lwrad(plyr, plvl, tlyr, tlvl, qlyr, olyr, gasvmr, clouds, icseed, aerosols, sfemis, sfgtmp, npts, nlay, nlp1, lprnt, hlwc, topflx, sfcflx, HLW0, HLWB, FLXPRF )
This subroutine is the main LW radiation routine.
integer, save ioznflg
ozone data source control flag =0:use seasonal climatology ozone data >0:use prognostic ozone sch...
subroutine, public rlwinit(me)
This subroutine performs calculations necessary for the initialization of the longwave model...
integer, parameter, public nf_clds
number of fields in cloud array
subroutine, public sol_init(me)
This subroutine initializes astronomy process, and set up module constants.
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, parameter, public nspc1
total+species
subroutine, public aer_update(iyear, imon, me)
This subroutine checks and updates time varying climatology aerosol data sets.
integer itsfc
control flag for LW surface temperature at air/ground interface (default=0, the value will be set in ...
derived type for SW fluxes at TOA
subroutine, public sol_update(jdate, kyear, deltsw, deltim, lsol_chg, me, slag, sdec, cdec, solcon )
This subroutine computes solar parameters at forecast time.
subroutine, public setaer(prsi, prsl, prslk, tvly, rhlay, slmsk, tracer, xlon, xlat, IMAX, NLAY, NLP1, lsswr, lslwr, aerosw, aerolw , aerodp )
This subroutine computes aerosols optical properties.
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 isubclw
sub-column cloud approx flag in LW radiation =0:no McICA approximation in LW radiation =1:use McI...
integer, parameter, public nf_vgas
number of gas species
integer, save ivflip
vertical profile indexing flag
logical, parameter lextop
control flag for extra top layer
derived type for SW fluxes at surface
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.