244 use mersenne_twister
, only : random_setseed, random_number, &
257 character(40),
parameter :: &
258 & VTAGLW=
'NCEP LW v5.1 Nov 2012 -RRTMG-LW v4.82 ' 268 real (kind=kind_phys),
parameter ::
eps = 1.0e-6
270 real (kind=kind_phys),
parameter ::
cldmin = 1.0e-80
271 real (kind=kind_phys),
parameter ::
bpade = 1.0/0.278
272 real (kind=kind_phys),
parameter ::
stpfac = 296.0/1013.0
273 real (kind=kind_phys),
parameter ::
wtdiff = 0.5
275 real (kind=kind_phys),
parameter ::
f_zero = 0.0
276 real (kind=kind_phys),
parameter ::
f_one = 1.0
285 data nspa / 1, 1, 9, 9, 9, 1, 9, 1, 9, 1, 1, 9, 9, 1, 9, 9 /
286 data nspb / 1, 1, 5, 5, 5, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0 /
306 real (kind=kind_phys),
dimension(nbands) ::
a0,
a1,
a2 308 data a0 / 1.66, 1.55, 1.58, 1.66, 1.54, 1.454, 1.89, 1.33, &
309 & 1.668, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66 /
310 data a1 / 0.00, 0.25, 0.22, 0.00, 0.13, 0.446, -0.10, 0.40, &
311 & -0.006, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /
312 data a2 / 0.00, -12.0, -11.7, 0.00, -0.72,-0.243, 0.19,-0.062, &
313 & 0.414, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /
417 & ( plyr,plvl,tlyr,tlvl,qlyr,olyr,gasvmr, &
418 & clouds,icseed,aerosols,sfemis,sfgtmp, &
419 & npts, nlay, nlp1, lprnt, &
421 & hlwc,topflx,sfcflx &
423 &, hlw0,hlwb,flxprf &
598 integer,
intent(in) :: npts, nlay, nlp1
599 integer,
intent(in) :: icseed(npts)
601 logical,
intent(in) :: lprnt
603 real (kind=kind_phys),
dimension(npts,nlp1),
intent(in) :: plvl, &
605 real (kind=kind_phys),
dimension(npts,nlay),
intent(in) :: plyr, &
608 real (kind=kind_phys),
dimension(npts,nlay,9),
intent(in):: gasvmr
609 real (kind=kind_phys),
dimension(npts,nlay,9),
intent(in):: clouds
611 real (kind=kind_phys),
dimension(npts),
intent(in) :: sfemis, &
614 real (kind=kind_phys),
dimension(npts,nlay,nbands,3),
intent(in):: &
618 real (kind=kind_phys),
dimension(npts,nlay),
intent(out) :: hlwc
620 type(
topflw_type),
dimension(npts),
intent(out) :: topflx
621 type(
sfcflw_type),
dimension(npts),
intent(out) :: sfcflx
624 real (kind=kind_phys),
dimension(npts,nlay,nbands),
optional, &
625 & intent(out) :: hlwb
626 real (kind=kind_phys),
dimension(npts,nlay),
optional, &
627 & intent(out) :: hlw0
628 type (
proflw_type),
dimension(npts,nlp1),
optional, &
629 & intent(out) :: flxprf
632 real (kind=kind_phys),
dimension(0:nlp1) :: cldfrc
634 real (kind=kind_phys),
dimension(0:nlay) :: totuflux, totdflux, &
635 & totuclfl, totdclfl, tz
637 real (kind=kind_phys),
dimension(nlay) :: htr, htrcl
639 real (kind=kind_phys),
dimension(nlay) :: pavel, tavel, delp, &
640 & clwp, ciwp, relw, reiw, cda1, cda2, cda3, cda4, &
641 & coldry, colbrd, h2ovmr, o3vmr, fac00, fac01, fac10, fac11, &
642 & selffac, selffrac, forfac, forfrac, minorfrac, scaleminor, &
643 & scaleminorn2, temcol
645 real (kind=kind_phys),
dimension(nbands,0:nlay) :: pklev, pklay
647 real (kind=kind_phys),
dimension(nlay,nbands) :: htrb
648 real (kind=kind_phys),
dimension(nbands,nlay) :: taucld, tauaer
649 real (kind=kind_phys),
dimension(ngptlw,nlay) :: fracs, tautot, &
652 real (kind=kind_phys),
dimension(nbands) :: semiss, secdiff
656 real (kind=kind_phys) :: colamt(nlay,
maxgas)
660 real (kind=kind_phys) :: wx(nlay,
maxxsec)
664 real (kind=kind_phys) :: rfrate(nlay,
nrates,2)
666 real (kind=kind_phys) :: tem0, tem1, tem2, pwvcm, summol, stemp
668 integer,
dimension(npts) :: ipseed
669 integer,
dimension(nlay) :: jp, jt, jt1, indself, indfor, indminor
670 integer :: laytrop, iplon, i, j, k, k1
679 lhlwb =
present ( hlwb )
680 lhlw0 =
present ( hlw0 )
694 ipseed(i) = icseed(i)
705 lab_do_iplon :
do iplon = 1, npts
708 if (sfemis(iplon) >
eps .and. sfemis(iplon) <= 1.0)
then 710 semiss(j) = sfemis(iplon)
718 stemp = sfgtmp(iplon)
733 tz(0) = tlvl(iplon,nlp1)
737 pavel(k)= plyr(iplon,k1)
738 delp(k) = plvl(iplon,k1+1) - plvl(iplon,k1)
739 tavel(k)= tlyr(iplon,k1)
740 tz(k) = tlvl(iplon,k1)
749 h2ovmr(k)= max(
f_zero,qlyr(iplon,k1) &
755 coldry(k) = tem2*delp(k) / (tem1*tem0*(
f_one+h2ovmr(k)))
756 temcol(k) = 1.0e-12 * coldry(k)
758 colamt(k,1) = max(
f_zero, coldry(k)*h2ovmr(k))
759 colamt(k,2) = max(temcol(k), coldry(k)*gasvmr(iplon,k1,1))
760 colamt(k,3) = max(temcol(k), coldry(k)*o3vmr(k))
771 colamt(k,4)=max(temcol(k), coldry(k)*gasvmr(iplon,k1,2))
772 colamt(k,5)=max(temcol(k), coldry(k)*gasvmr(iplon,k1,3))
773 colamt(k,6)=max(
f_zero, coldry(k)*gasvmr(iplon,k1,4))
774 colamt(k,7)=max(
f_zero, coldry(k)*gasvmr(iplon,k1,5))
776 wx(k,1) = max(
f_zero, coldry(k)*gasvmr(iplon,k1,9) )
777 wx(k,2) = max(
f_zero, coldry(k)*gasvmr(iplon,k1,6) )
778 wx(k,3) = max(
f_zero, coldry(k)*gasvmr(iplon,k1,7) )
779 wx(k,4) = max(
f_zero, coldry(k)*gasvmr(iplon,k1,8) )
801 tauaer(j,k) = aerosols(iplon,k1,j,1) &
802 & * (
f_one - aerosols(iplon,k1,j,2))
810 cldfrc(k)= clouds(iplon,k1,1)
811 clwp(k) = clouds(iplon,k1,2)
812 relw(k) = clouds(iplon,k1,3)
813 ciwp(k) = clouds(iplon,k1,4)
814 reiw(k) = clouds(iplon,k1,5)
815 cda1(k) = clouds(iplon,k1,6)
816 cda2(k) = clouds(iplon,k1,7)
817 cda3(k) = clouds(iplon,k1,8)
818 cda4(k) = clouds(iplon,k1,9)
823 cldfrc(k)= clouds(iplon,k1,1)
824 cda1(k) = clouds(iplon,k1,2)
837 tem1 = tem1 + coldry(k) + colamt(k,1)
838 tem2 = tem2 + colamt(k,1)
841 tem0 = 10.0 * tem2 / (
amdw * tem1 *
con_g)
842 pwvcm = tem0 * plvl(iplon,nlp1)
848 tz(0) = tlvl(iplon,1)
851 pavel(k)= plyr(iplon,k)
852 delp(k) = plvl(iplon,k) - plvl(iplon,k+1)
853 tavel(k)= tlyr(iplon,k)
854 tz(k) = tlvl(iplon,k+1)
862 h2ovmr(k)= max(
f_zero,qlyr(iplon,k) &
868 coldry(k) = tem2*delp(k) / (tem1*tem0*(
f_one+h2ovmr(k)))
869 temcol(k) = 1.0e-12 * coldry(k)
871 colamt(k,1) = max(
f_zero, coldry(k)*h2ovmr(k))
872 colamt(k,2) = max(temcol(k), coldry(k)*gasvmr(iplon,k,1))
873 colamt(k,3) = max(temcol(k), coldry(k)*o3vmr(k))
881 colamt(k,4)=max(temcol(k), coldry(k)*gasvmr(iplon,k,2))
882 colamt(k,5)=max(temcol(k), coldry(k)*gasvmr(iplon,k,3))
883 colamt(k,6)=max(
f_zero, coldry(k)*gasvmr(iplon,k,4))
884 colamt(k,7)=max(
f_zero, coldry(k)*gasvmr(iplon,k,5))
886 wx(k,1) = max(
f_zero, coldry(k)*gasvmr(iplon,k,9) )
887 wx(k,2) = max(
f_zero, coldry(k)*gasvmr(iplon,k,6) )
888 wx(k,3) = max(
f_zero, coldry(k)*gasvmr(iplon,k,7) )
889 wx(k,4) = max(
f_zero, coldry(k)*gasvmr(iplon,k,8) )
909 tauaer(j,k) = aerosols(iplon,k,j,1) &
910 & * (
f_one - aerosols(iplon,k,j,2))
916 cldfrc(k)= clouds(iplon,k,1)
917 clwp(k) = clouds(iplon,k,2)
918 relw(k) = clouds(iplon,k,3)
919 ciwp(k) = clouds(iplon,k,4)
920 reiw(k) = clouds(iplon,k,5)
921 cda1(k) = clouds(iplon,k,6)
922 cda2(k) = clouds(iplon,k,7)
923 cda3(k) = clouds(iplon,k,8)
924 cda4(k) = clouds(iplon,k,9)
928 cldfrc(k)= clouds(iplon,k,1)
929 cda1(k) = clouds(iplon,k,2)
941 tem1 = tem1 + coldry(k) + colamt(k,1)
942 tem2 = tem2 + colamt(k,1)
945 tem0 = 10.0 * tem2 / (
amdw * tem1 *
con_g)
946 pwvcm = tem0 * plvl(iplon,1)
956 summol = summol + colamt(k,i)
958 colbrd(k) = coldry(k) - summol
967 if (j==1 .or. j==4 .or. j==10)
then 970 secdiff(j) = min( tem1, max( tem2, &
971 &
a0(j)+
a1(j)*exp(
a2(j)*pwvcm) ))
994 lab_do_k0 :
do k = 1, nlay
995 if ( cldfrc(k) >
eps )
then 1005 & ( cldfrc,clwp,relw,ciwp,reiw,cda1,cda2,cda3,cda4, &
1006 & nlay, nlp1, ipseed(iplon), &
1030 & ( pavel,tavel,tz,stemp,h2ovmr,colamt,coldry,colbrd, &
1033 & laytrop,pklay,pklev,jp,jt,jt1, &
1034 & rfrate,fac00,fac01,fac10,fac11, &
1035 & selffac,selffrac,indself,forfac,forfrac,indfor, &
1036 & minorfrac,scaleminor,scaleminorn2,indminor &
1067 & ( laytrop,pavel,coldry,colamt,colbrd,wx,tauaer, &
1068 & rfrate,fac00,fac01,fac10,fac11,jp,jt,jt1, &
1069 & selffac,selffrac,indself,forfac,forfrac,indfor, &
1070 & minorfrac,scaleminor,scaleminorn2,indminor, &
1102 & ( semiss,delp,cldfrc,taucld,tautot,pklay,pklev, &
1103 & fracs,secdiff,nlay,nlp1, &
1105 & totuflux,totdflux,htr, totuclfl,totdclfl,htrcl, htrb &
1112 & ( semiss,delp,cldfrc,taucld,tautot,pklay,pklev, &
1113 & fracs,secdiff,nlay,nlp1, &
1115 & totuflux,totdflux,htr, totuclfl,totdclfl,htrcl, htrb &
1124 & ( semiss,delp,cldfmc,taucld,tautot,pklay,pklev, &
1125 & fracs,secdiff,nlay,nlp1, &
1127 & totuflux,totdflux,htr, totuclfl,totdclfl,htrcl, htrb &
1134 topflx(iplon)%upfxc = totuflux(nlay)
1135 topflx(iplon)%upfx0 = totuclfl(nlay)
1137 sfcflx(iplon)%upfxc = totuflux(0)
1138 sfcflx(iplon)%upfx0 = totuclfl(0)
1139 sfcflx(iplon)%dnfxc = totdflux(0)
1140 sfcflx(iplon)%dnfx0 = totdclfl(0)
1148 flxprf(iplon,k1)%upfxc = totuflux(k)
1149 flxprf(iplon,k1)%dnfxc = totdflux(k)
1150 flxprf(iplon,k1)%upfx0 = totuclfl(k)
1151 flxprf(iplon,k1)%dnfx0 = totdclfl(k)
1157 hlwc(iplon,k1) = htr(k)
1164 hlw0(iplon,k1) = htrcl(k)
1173 hlwb(iplon,k1,j) = htrb(k,j)
1183 flxprf(iplon,k+1)%upfxc = totuflux(k)
1184 flxprf(iplon,k+1)%dnfxc = totdflux(k)
1185 flxprf(iplon,k+1)%upfx0 = totuclfl(k)
1186 flxprf(iplon,k+1)%dnfx0 = totdclfl(k)
1191 hlwc(iplon,k) = htr(k)
1197 hlw0(iplon,k) = htrcl(k)
1205 hlwb(iplon,k,j) = htrb(k,j)
1215 end subroutine lwrad 1317 integer,
intent(in) :: me
1322 real (kind=kind_phys),
parameter :: expeps = 1.e-20
1324 real (kind=kind_phys) :: tfn, pival, explimit
1332 print *,
' *** Error in specification of cloud overlap flag', &
1333 &
' IOVRLW=',
iovrlw,
' in RLWINIT !!' 1337 print *,
' *** IOVRLW=2 - maximum cloud overlap, is not yet', &
1338 &
' available for ISUBCLW=0 setting!!' 1339 print *,
' The program uses maximum/random overlap', &
1347 print *,
' - Using AER Longwave Radiation, Version: ',
vtaglw 1350 print *,
' --- Include rare gases N2O, CH4, O2, CFCs ', &
1351 &
'absorptions in LW' 1353 print *,
' --- Rare gases effect is NOT included in LW' 1357 print *,
' --- Using standard grid average clouds, no ', &
1358 &
'sub-column clouds approximation applied' 1360 print *,
' --- Using MCICA sub-colum clouds approximation ', &
1361 &
'with a prescribed sequence of permutaion seeds' 1363 print *,
' --- Using MCICA sub-colum clouds approximation ', &
1364 &
'with provided input array of permutation seeds' 1366 print *,
' *** Error in specification of sub-column cloud ', &
1367 &
' control flag isubclw =',
isubclw,
' !!' 1376 print *,
' *** Model cloud scheme inconsistent with LW', &
1377 &
' radiation cloud radiative property setup !!' 1388 pival = 2.0 * asin(
f_one)
1419 explimit = aint( -log(tiny(
exp_tbl(0))) )
1424 tfn =
real(i, kind_phys) /
real(
ntbl-i, kind_phys)
1426 if (
tau_tbl(i) >= explimit)
then 1450 & ( cfrac,cliqp,reliq,cicep,reice,cdat1,cdat2,cdat3,cdat4, &
1451 & nlay, nlp1, ipseed, &
1550 integer,
intent(in) :: nlay, nlp1, ipseed
1552 real (kind=kind_phys),
dimension(0:nlp1),
intent(in) :: cfrac
1553 real (kind=kind_phys),
dimension(nlay),
intent(in) :: cliqp, &
1554 & reliq, cicep, reice, cdat1, cdat2, cdat3, cdat4
1557 real (kind=kind_phys),
dimension(ngptlw,nlay),
intent(out):: cldfmc
1558 real (kind=kind_phys),
dimension(nbands,nlay),
intent(out):: taucld
1561 real (kind=kind_phys),
dimension(nbands) :: tauliq, tauice
1562 real (kind=kind_phys),
dimension(nlay) :: cldf
1564 real (kind=kind_phys) :: dgeice, factor, fint, tauran, tausnw, &
1565 & cldliq, refliq, cldice, refice
1567 logical :: lcloudy(
ngptlw,nlay)
1568 integer :: ia, ib, ig, k, index
1587 lab_if_ilwcliq :
if (
ilwcliq > 0)
then 1589 lab_do_k :
do k = 1, nlay
1590 lab_if_cld :
if (cfrac(k) >
cldmin)
then 1600 if (cdat3(k)>
f_zero .and. cdat4(k)>10.0_kind_phys)
then 1601 tausnw =
abssnow0*1.05756*cdat3(k)/cdat4(k)
1615 if ( cldliq <=
f_zero )
then 1622 factor = refliq - 1.5
1623 index = max( 1, min( 57, int( factor ) ))
1624 fint = factor - float(index)
1635 if ( cldice <=
f_zero )
then 1645 refice = min(130.0, max(13.0,
real(refice) ))
1659 factor = (refice - 2.0) / 3.0
1660 index = max( 1, min( 42, int( factor ) ))
1661 fint = factor - float(index)
1674 dgeice = max(5.0, 1.0315*refice)
1675 factor = (dgeice - 2.0) / 3.0
1676 index = max( 1, min( 45, int( factor ) ))
1677 fint = factor - float(index)
1688 taucld(ib,k) = tauice(ib) + tauliq(ib) + tauran + tausnw
1697 if (cfrac(k) >
cldmin)
then 1699 taucld(ib,k) = cdat1(k)
1704 endif lab_if_ilwcliq
1710 if ( cfrac(k) <
cldmin )
then 1721 & ( cldf, nlay, ipseed, &
1728 if ( lcloudy(ig,k) )
then 1729 cldfmc(ig,k) =
f_one 1755 & ( cldf, nlay, ipseed, &
1782 integer,
intent(in) :: nlay, ipseed
1784 real (kind=kind_phys),
dimension(nlay),
intent(in) :: cldf
1787 logical,
dimension(ngptlw,nlay),
intent(out) :: lcloudy
1790 real (kind=kind_phys) :: cdfunc(
ngptlw,nlay), rand1d(
ngptlw), &
1791 & rand2d(nlay*ngptlw), tem1
1793 type(random_stat) :: stat
1801 call random_setseed &
1814 call random_number &
1823 cdfunc(n,k) = rand2d(k1)
1829 call random_number &
1838 cdfunc(n,k) = rand2d(k1)
1850 tem1 =
f_one - cldf(k1)
1853 if ( cdfunc(n,k1) > tem1 )
then 1854 cdfunc(n,k) = cdfunc(n,k1)
1856 cdfunc(n,k) = cdfunc(n,k) * tem1
1881 call random_number &
1899 tem1 =
f_one - cldf(k)
1902 lcloudy(n,k) = cdfunc(n,k) >= tem1
1917 & ( pavel,tavel,tz,stemp,h2ovmr,colamt,coldry,colbrd, &
1920 & laytrop,pklay,pklev,jp,jt,jt1, &
1921 & rfrate,fac00,fac01,fac10,fac11, &
1922 & selffac,selffrac,indself,forfac,forfrac,indfor, &
1923 & minorfrac,scaleminor,scaleminorn2,indminor &
1979 integer,
intent(in) :: nlay, nlp1
1981 real (kind=kind_phys),
dimension(nlay,maxgas),
intent(in):: colamt
1982 real (kind=kind_phys),
dimension(0:nlay),
intent(in):: tz
1984 real (kind=kind_phys),
dimension(nlay),
intent(in) :: pavel, &
1985 & tavel, h2ovmr, coldry, colbrd
1987 real (kind=kind_phys),
intent(in) :: stemp
1990 integer,
dimension(nlay),
intent(out) :: jp, jt, jt1, indself, &
1993 integer,
intent(out) :: laytrop
1995 real (kind=kind_phys),
dimension(nlay,nrates,2),
intent(out) :: &
1997 real (kind=kind_phys),
dimension(nbands,0:nlay),
intent(out) :: &
2000 real (kind=kind_phys),
dimension(nlay),
intent(out) :: &
2001 & fac00, fac01, fac10, fac11, selffac, selffrac, forfac, &
2002 & forfrac, minorfrac, scaleminor, scaleminorn2
2005 real (kind=kind_phys) :: tlvlfr, tlyrfr, plog, fp, ft, ft1, &
2008 integer :: i, k, jp1, indlev, indlay
2017 indlay = min(180, max(1, int(stemp-159.0) ))
2018 indlev = min(180, max(1, int(tz(0)-159.0) ))
2019 tlyrfr = stemp - int(stemp)
2020 tlvlfr = tz(0) - int(tz(0))
2036 indlay = min(180, max(1, int(tavel(k)-159.0) ))
2037 tlyrfr = tavel(k) - int(tavel(k))
2039 indlev = min(180, max(1, int(tz(k)-159.0) ))
2040 tlvlfr = tz(k) - int(tz(k))
2056 plog = log(pavel(k))
2057 jp(k)= max(1, min(58, int(36.0 - 5.0*(plog+0.04)) ))
2071 tem1 = (tavel(k)-
tref(jp(k))) / 15.0
2072 tem2 = (tavel(k)-
tref(jp1 )) / 15.0
2073 jt(k) = max(1, min(4, int(3.0 + tem1) ))
2074 jt1(k) = max(1, min(4, int(3.0 + tem2) ))
2076 ft = max(-0.5, min(1.5, tem1 - float(jt(k) - 3) ))
2077 ft1 = max(-0.5, min(1.5, tem2 - float(jt1(k) - 3) ))
2089 fac10(k) = tem1 * ft
2090 fac00(k) = tem1 * (
f_one - ft)
2092 fac01(k) = fp * (
f_one - ft1)
2094 forfac(k) = pavel(k)*
stpfac / (tavel(k)*(1.0 + h2ovmr(k)))
2095 selffac(k) = h2ovmr(k) * forfac(k)
2100 scaleminor(k) = pavel(k) / tavel(k)
2101 scaleminorn2(k) = (pavel(k) / tavel(k)) &
2102 & * (colbrd(k)/(coldry(k) + colamt(k,1)))
2103 tem1 = (tavel(k) - 180.8) / 7.2
2104 indminor(k) = min(18, max(1, int(tem1)))
2105 minorfrac(k) = tem1 - float(indminor(k))
2110 if (plog > 4.56)
then 2112 laytrop = laytrop + 1
2114 tem1 = (332.0 - tavel(k)) / 36.0
2115 indfor(k) = min(2, max(1, int(tem1)))
2116 forfrac(k) = tem1 - float(indfor(k))
2121 tem1 = (tavel(k) - 188.0) / 7.2
2122 indself(k) = min(9, max(1, int(tem1)-7))
2123 selffrac(k) = tem1 - float(indself(k) + 7)
2145 tem1 = (tavel(k) - 188.0) / 36.0
2147 forfrac(k) = tem1 -
f_one 2165 selffac(k) = colamt(k,1) * selffac(k)
2166 forfac(k) = colamt(k,1) * forfac(k)
2207 & ( semiss,delp,cldfrc,taucld,tautot,pklay,pklev, &
2208 & fracs,secdif, nlay,nlp1, &
2210 & totuflux,totdflux,htr, totuclfl,totdclfl,htrcl, htrb &
2312 integer,
intent(in) :: nlay, nlp1
2314 real (kind=kind_phys),
dimension(0:nlp1),
intent(in) :: cldfrc
2315 real (kind=kind_phys),
dimension(nbands),
intent(in) :: semiss, &
2317 real (kind=kind_phys),
dimension(nlay),
intent(in) :: delp
2319 real (kind=kind_phys),
dimension(nbands,nlay),
intent(in):: taucld
2320 real (kind=kind_phys),
dimension(ngptlw,nlay),
intent(in):: fracs, &
2323 real (kind=kind_phys),
dimension(nbands,0:nlay),
intent(in) :: &
2327 real (kind=kind_phys),
dimension(nlay),
intent(out) :: htr, htrcl
2329 real (kind=kind_phys),
dimension(nlay,nbands),
intent(out) :: htrb
2331 real (kind=kind_phys),
dimension(0:nlay),
intent(out) :: &
2332 & totuflux, totdflux, totuclfl, totdclfl
2335 real (kind=kind_phys),
parameter :: rec_6 = 0.166667
2337 real (kind=kind_phys),
dimension(0:nlay,nbands) :: clrurad, &
2338 & clrdrad, toturad, totdrad
2340 real (kind=kind_phys),
dimension(nlay) :: gassrcu, totsrcu, &
2341 & trngas, efclrfr, rfdelp
2342 real (kind=kind_phys),
dimension(0:nlay) :: fnet, fnetc
2344 real (kind=kind_phys) :: totsrcd, gassrcd, tblind, odepth, odtot, &
2345 & odcld, atrtot, atrgas, reflct, totfac, gasfac, flxfac, &
2346 & plfrac, blay, bbdgas, bbdtot, bbugas, bbutot, dplnku, &
2347 & dplnkd, radtotu, radclru, radtotd, radclrd, rad0, &
2350 integer :: ittot, itgas, ib, ig, k
2384 odepth = max(
f_zero, secdif(ib)*tautot(ig,k) )
2385 if (odepth <= 0.06)
then 2386 atrgas = odepth - 0.5*odepth*odepth
2387 trng =
f_one - atrgas
2388 gasfac = rec_6 * odepth
2390 tblind = odepth / (
bpade + odepth)
2391 itgas =
tblint*tblind + 0.5
2393 atrgas =
f_one - trng
2398 plfrac = fracs(ig,k)
2401 dplnku = pklev(ib,k ) - blay
2402 dplnkd = pklev(ib,k-1) - blay
2403 bbdgas = plfrac * (blay + dplnkd*gasfac)
2404 bbugas = plfrac * (blay + dplnku*gasfac)
2405 gassrcd= bbdgas * atrgas
2406 gassrcu(k)= bbugas * atrgas
2412 if (clfr >=
eps)
then 2415 odcld = secdif(ib) * taucld(ib,k)
2416 efclrfr(k) =
f_one-(
f_one - exp(-odcld))*clfr
2417 odtot = odepth + odcld
2418 if (odtot < 0.06)
then 2419 totfac = rec_6 * odtot
2420 atrtot = odtot - 0.5*odtot*odtot
2422 tblind = odtot / (
bpade + odtot)
2423 ittot =
tblint*tblind + 0.5
2428 bbdtot = plfrac * (blay + dplnkd*totfac)
2429 bbutot = plfrac * (blay + dplnku*totfac)
2430 totsrcd= bbdtot * atrtot
2431 totsrcu(k)= bbutot * atrtot
2434 radtotd = radtotd*trng*efclrfr(k) + gassrcd &
2435 & + clfr*(totsrcd - gassrcd)
2436 totdrad(k-1,ib) = totdrad(k-1,ib) + radtotd
2439 radclrd = radclrd*trng + gassrcd
2440 clrdrad(k-1,ib) = clrdrad(k-1,ib) + radclrd
2446 radtotd = radtotd*trng + gassrcd
2447 totdrad(k-1,ib) = totdrad(k-1,ib) + radtotd
2450 radclrd = radclrd*trng + gassrcd
2451 clrdrad(k-1,ib) = clrdrad(k-1,ib) + radclrd
2463 reflct =
f_one - semiss(ib)
2464 rad0 = semiss(ib) * fracs(ig,1) * pklay(ib,0)
2467 radtotu = rad0 + reflct*radtotd
2468 toturad(0,ib) = toturad(0,ib) + radtotu
2471 radclru = rad0 + reflct*radclrd
2472 clrurad(0,ib) = clrurad(0,ib) + radclru
2481 if (clfr >=
eps)
then 2485 radtotu = radtotu*trng*efclrfr(k) + gasu &
2486 & + clfr*(totsrcu(k) - gasu)
2487 toturad(k,ib) = toturad(k,ib) + radtotu
2490 radclru = radclru*trng + gasu
2491 clrurad(k,ib) = clrurad(k,ib) + radclru
2497 radtotu = radtotu*trng + gasu
2498 toturad(k,ib) = toturad(k,ib) + radtotu
2501 radclru = radclru*trng + gasu
2502 clrurad(k,ib) = clrurad(k,ib) + radclru
2517 totuflux(k) = totuflux(k) + toturad(k,ib)
2518 totdflux(k) = totdflux(k) + totdrad(k,ib)
2519 totuclfl(k) = totuclfl(k) + clrurad(k,ib)
2520 totdclfl(k) = totdclfl(k) + clrdrad(k,ib)
2523 totuflux(k) = totuflux(k) * flxfac
2524 totdflux(k) = totdflux(k) * flxfac
2525 totuclfl(k) = totuclfl(k) * flxfac
2526 totdclfl(k) = totdclfl(k) * flxfac
2530 fnet(0) = totuflux(0) - totdflux(0)
2534 fnet(k) = totuflux(k) - totdflux(k)
2535 htr(k) = (fnet(k-1) - fnet(k)) * rfdelp(k)
2540 fnetc(0) = totuclfl(0) - totdclfl(0)
2543 fnetc(k) = totuclfl(k) - totdclfl(k)
2544 htrcl(k) = (fnetc(k-1) - fnetc(k)) * rfdelp(k)
2551 fnet(0) = (toturad(0,ib) - totdrad(0,ib)) * flxfac
2554 fnet(k) = (toturad(k,ib) - totdrad(k,ib)) * flxfac
2555 htrb(k,ib) = (fnet(k-1) - fnet(k)) * rfdelp(k)
2569 & ( semiss,delp,cldfrc,taucld,tautot,pklay,pklev, &
2570 & fracs,secdif, nlay,nlp1, &
2572 & totuflux,totdflux,htr, totuclfl,totdclfl,htrcl, htrb &
2673 integer,
intent(in) :: nlay, nlp1
2675 real (kind=kind_phys),
dimension(0:nlp1),
intent(in) :: cldfrc
2676 real (kind=kind_phys),
dimension(nbands),
intent(in) :: semiss, &
2678 real (kind=kind_phys),
dimension(nlay),
intent(in) :: delp
2680 real (kind=kind_phys),
dimension(nbands,nlay),
intent(in):: taucld
2681 real (kind=kind_phys),
dimension(ngptlw,nlay),
intent(in):: fracs, &
2684 real (kind=kind_phys),
dimension(nbands,0:nlay),
intent(in) :: &
2688 real (kind=kind_phys),
dimension(nlay),
intent(out) :: htr, htrcl
2690 real (kind=kind_phys),
dimension(nlay,nbands),
intent(out) :: htrb
2692 real (kind=kind_phys),
dimension(0:nlay),
intent(out) :: &
2693 & totuflux, totdflux, totuclfl, totdclfl
2696 real (kind=kind_phys),
parameter :: rec_6 = 0.166667
2698 real (kind=kind_phys),
dimension(0:nlay,nbands) :: clrurad, &
2699 & clrdrad, toturad, totdrad
2701 real (kind=kind_phys),
dimension(nlay) :: gassrcu, totsrcu, &
2702 & trngas, trntot, rfdelp
2703 real (kind=kind_phys),
dimension(0:nlay) :: fnet, fnetc
2705 real (kind=kind_phys) :: totsrcd, gassrcd, tblind, odepth, odtot, &
2706 & odcld, atrtot, atrgas, reflct, totfac, gasfac, flxfac, &
2707 & plfrac, blay, bbdgas, bbdtot, bbugas, bbutot, dplnku, &
2708 & dplnkd, radtotu, radclru, radtotd, radclrd, rad0, rad, &
2709 & totradd, clrradd, totradu, clrradu, fmax, fmin, rat1, rat2,&
2710 & radmod, clfr, trng, trnt, gasu, totu
2712 integer :: ittot, itgas, ib, ig, k
2715 real (kind=kind_phys),
dimension(nlp1) :: faccld1u, faccld2u, &
2716 & facclr1u, facclr2u, faccmb1u, faccmb2u
2717 real (kind=kind_phys),
dimension(0:nlay) :: faccld1d, faccld2d, &
2718 & facclr1d, facclr2d, faccmb1d, faccmb2d
2720 logical :: lstcldu(nlay), lstcldd(nlay)
2733 lstcldu(1) = cldfrc(1) >
eps 2739 lstcldu(k+1) = cldfrc(k+1)>
eps .and. cldfrc(k)<=
eps 2741 if (cldfrc(k) >
eps)
then 2744 if (cldfrc(k+1) >= cldfrc(k))
then 2745 if (lstcldu(k))
then 2746 if (cldfrc(k) <
f_one)
then 2747 facclr2u(k+1) = (cldfrc(k+1) - cldfrc(k)) &
2748 & / (
f_one - cldfrc(k))
2753 fmax = max(cldfrc(k), cldfrc(k-1))
2754 if (cldfrc(k+1) > fmax)
then 2755 facclr1u(k+1) = rat2
2756 facclr2u(k+1) = (cldfrc(k+1) - fmax)/(
f_one - fmax)
2757 elseif (cldfrc(k+1) < fmax)
then 2758 facclr1u(k+1) = (cldfrc(k+1) - cldfrc(k)) &
2759 & / (cldfrc(k-1) - cldfrc(k))
2761 facclr1u(k+1) = rat2
2765 if (facclr1u(k+1)>
f_zero .or. facclr2u(k+1)>
f_zero)
then 2773 if (lstcldu(k))
then 2774 faccld2u(k+1) = (cldfrc(k) - cldfrc(k+1)) / cldfrc(k)
2778 fmin = min(cldfrc(k), cldfrc(k-1))
2779 if (cldfrc(k+1) <= fmin)
then 2780 faccld1u(k+1) = rat1
2781 faccld2u(k+1) = (fmin - cldfrc(k+1)) / fmin
2783 faccld1u(k+1) = (cldfrc(k) - cldfrc(k+1)) &
2784 & / (cldfrc(k) - fmin)
2788 if (faccld1u(k+1)>
f_zero .or. faccld2u(k+1)>
f_zero)
then 2797 faccmb1u(k+1) = facclr1u(k+1) * faccld2u(k) * cldfrc(k-1)
2798 faccmb2u(k+1) = faccld1u(k+1) * facclr2u(k) &
2799 & * (
f_one - cldfrc(k-1))
2813 lstcldd(nlay) = cldfrc(nlay) >
eps 2819 lstcldd(k-1) = cldfrc(k-1) >
eps .and. cldfrc(k)<=
eps 2821 if (cldfrc(k) >
eps)
then 2823 if (cldfrc(k-1) >= cldfrc(k))
then 2824 if (lstcldd(k))
then 2825 if (cldfrc(k) <
f_one)
then 2826 facclr2d(k-1) = (cldfrc(k-1) - cldfrc(k)) &
2827 & / (
f_one - cldfrc(k))
2833 fmax = max(cldfrc(k), cldfrc(k+1))
2835 if (cldfrc(k-1) > fmax)
then 2836 facclr1d(k-1) = rat2
2837 facclr2d(k-1) = (cldfrc(k-1) - fmax) / (
f_one - fmax)
2838 elseif (cldfrc(k-1) < fmax)
then 2839 facclr1d(k-1) = (cldfrc(k-1) - cldfrc(k)) &
2840 & / (cldfrc(k+1) - cldfrc(k))
2842 facclr1d(k-1) = rat2
2846 if (facclr1d(k-1)>
f_zero .or. facclr2d(k-1)>
f_zero)
then 2854 if (lstcldd(k))
then 2855 faccld2d(k-1) = (cldfrc(k) - cldfrc(k-1)) / cldfrc(k)
2859 fmin = min(cldfrc(k), cldfrc(k+1))
2861 if (cldfrc(k-1) <= fmin)
then 2862 faccld1d(k-1) = rat1
2863 faccld2d(k-1) = (fmin - cldfrc(k-1)) / fmin
2865 faccld1d(k-1) = (cldfrc(k) - cldfrc(k-1)) &
2866 & / (cldfrc(k) - fmin)
2870 if (faccld1d(k-1)>
f_zero .or. faccld2d(k-1)>
f_zero)
then 2879 faccmb1d(k-1) = facclr1d(k-1) * faccld2d(k) * cldfrc(k+1)
2880 faccmb2d(k-1) = faccld1d(k-1) * facclr2d(k) &
2881 & * (
f_one - cldfrc(k+1))
2918 odepth = max(
f_zero, secdif(ib)*tautot(ig,k) )
2919 if (odepth <= 0.06)
then 2920 atrgas = odepth - 0.5*odepth*odepth
2921 trng =
f_one - atrgas
2922 gasfac = rec_6 * odepth
2924 tblind = odepth / (
bpade + odepth)
2925 itgas =
tblint*tblind + 0.5
2927 atrgas =
f_one - trng
2932 plfrac = fracs(ig,k)
2935 dplnku = pklev(ib,k ) - blay
2936 dplnkd = pklev(ib,k-1) - blay
2937 bbdgas = plfrac * (blay + dplnkd*gasfac)
2938 bbugas = plfrac * (blay + dplnku*gasfac)
2939 gassrcd = bbdgas * atrgas
2940 gassrcu(k)= bbugas * atrgas
2946 if (lstcldd(k))
then 2947 totradd = clfr * radtotd
2948 clrradd = radtotd - totradd
2952 if (clfr >=
eps)
then 2955 odcld = secdif(ib) * taucld(ib,k)
2956 odtot = odepth + odcld
2957 if (odtot < 0.06)
then 2958 totfac = rec_6 * odtot
2959 atrtot = odtot - 0.5*odtot*odtot
2960 trnt =
f_one - atrtot
2962 tblind = odtot / (
bpade + odtot)
2963 ittot =
tblint*tblind + 0.5
2966 atrtot =
f_one - trnt
2969 bbdtot = plfrac * (blay + dplnkd*totfac)
2970 bbutot = plfrac * (blay + dplnku*totfac)
2971 totsrcd = bbdtot * atrtot
2972 totsrcu(k)= bbutot * atrtot
2975 totradd = totradd*trnt + clfr*totsrcd
2976 clrradd = clrradd*trng + (
f_one - clfr)*gassrcd
2979 radtotd = totradd + clrradd
2980 totdrad(k-1,ib) = totdrad(k-1,ib) + radtotd
2983 radclrd = radclrd*trng + gassrcd
2984 clrdrad(k-1,ib) = clrdrad(k-1,ib) + radclrd
2986 radmod = rad*(facclr1d(k-1)*trng + faccld1d(k-1)*trnt) &
2987 & - faccmb1d(k-1)*gassrcd + faccmb2d(k-1)*totsrcd
2989 rad = -radmod + facclr2d(k-1)*(clrradd + radmod) &
2990 & - faccld2d(k-1)*(totradd - radmod)
2991 totradd = totradd + rad
2992 clrradd = clrradd - rad
2998 radtotd = radtotd*trng + gassrcd
2999 totdrad(k-1,ib) = totdrad(k-1,ib) + radtotd
3002 radclrd = radclrd*trng + gassrcd
3003 clrdrad(k-1,ib) = clrdrad(k-1,ib) + radclrd
3015 reflct =
f_one - semiss(ib)
3016 rad0 = semiss(ib) * fracs(ig,1) * pklay(ib,0)
3019 radtotu = rad0 + reflct*radtotd
3020 toturad(0,ib) = toturad(0,ib) + radtotu
3023 radclru = rad0 + reflct*radclrd
3024 clrurad(0,ib) = clrurad(0,ib) + radclru
3034 if (lstcldu(k))
then 3035 totradu = clfr * radtotu
3036 clrradu = radtotu - totradu
3040 if (clfr >=
eps)
then 3045 totradu = totradu*trnt + clfr*totu
3046 clrradu = clrradu*trng + (
f_one - clfr)*gasu
3049 radtotu = totradu + clrradu
3050 toturad(k,ib) = toturad(k,ib) + radtotu
3053 radclru = radclru*trng + gasu
3054 clrurad(k,ib) = clrurad(k,ib) + radclru
3056 radmod = rad*(facclr1u(k+1)*trng + faccld1u(k+1)*trnt) &
3057 & - faccmb1u(k+1)*gasu + faccmb2u(k+1)*totu
3058 rad = -radmod + facclr2u(k+1)*(clrradu + radmod) &
3059 & - faccld2u(k+1)*(totradu - radmod)
3060 totradu = totradu + rad
3061 clrradu = clrradu - rad
3067 radtotu = radtotu*trng + gasu
3068 toturad(k,ib) = toturad(k,ib) + radtotu
3071 radclru = radclru*trng + gasu
3072 clrurad(k,ib) = clrurad(k,ib) + radclru
3087 totuflux(k) = totuflux(k) + toturad(k,ib)
3088 totdflux(k) = totdflux(k) + totdrad(k,ib)
3089 totuclfl(k) = totuclfl(k) + clrurad(k,ib)
3090 totdclfl(k) = totdclfl(k) + clrdrad(k,ib)
3093 totuflux(k) = totuflux(k) * flxfac
3094 totdflux(k) = totdflux(k) * flxfac
3095 totuclfl(k) = totuclfl(k) * flxfac
3096 totdclfl(k) = totdclfl(k) * flxfac
3100 fnet(0) = totuflux(0) - totdflux(0)
3104 fnet(k) = totuflux(k) - totdflux(k)
3105 htr(k) = (fnet(k-1) - fnet(k)) * rfdelp(k)
3110 fnetc(0) = totuclfl(0) - totdclfl(0)
3113 fnetc(k) = totuclfl(k) - totdclfl(k)
3114 htrcl(k) = (fnetc(k-1) - fnetc(k)) * rfdelp(k)
3121 fnet(0) = (toturad(0,ib) - totdrad(0,ib)) * flxfac
3124 fnet(k) = (toturad(k,ib) - totdrad(k,ib)) * flxfac
3125 htrb(k,ib) = (fnet(k-1) - fnet(k)) * rfdelp(k)
3139 & ( semiss,delp,cldfmc,taucld,tautot,pklay,pklev, &
3140 & fracs,secdif, nlay,nlp1, &
3142 & totuflux,totdflux,htr, totuclfl,totdclfl,htrcl, htrb &
3245 integer,
intent(in) :: nlay, nlp1
3247 real (kind=kind_phys),
dimension(nbands),
intent(in) :: semiss, &
3249 real (kind=kind_phys),
dimension(nlay),
intent(in) :: delp
3251 real (kind=kind_phys),
dimension(nbands,nlay),
intent(in):: taucld
3252 real (kind=kind_phys),
dimension(ngptlw,nlay),
intent(in):: fracs, &
3255 real (kind=kind_phys),
dimension(nbands,0:nlay),
intent(in) :: &
3259 real (kind=kind_phys),
dimension(nlay),
intent(out) :: htr, htrcl
3261 real (kind=kind_phys),
dimension(nlay,nbands),
intent(out) :: htrb
3263 real (kind=kind_phys),
dimension(0:nlay),
intent(out) :: &
3264 & totuflux, totdflux, totuclfl, totdclfl
3267 real (kind=kind_phys),
parameter :: rec_6 = 0.166667
3269 real (kind=kind_phys),
dimension(0:nlay,nbands) :: clrurad, &
3270 & clrdrad, toturad, totdrad
3272 real (kind=kind_phys),
dimension(nlay) :: gassrcu, totsrcu, &
3273 & trngas, efclrfr, rfdelp
3274 real (kind=kind_phys),
dimension(0:nlay) :: fnet, fnetc
3276 real (kind=kind_phys) :: totsrcd, gassrcd, tblind, odepth, odtot, &
3277 & odcld, atrtot, atrgas, reflct, totfac, gasfac, flxfac, &
3278 & plfrac, blay, bbdgas, bbdtot, bbugas, bbutot, dplnku, &
3279 & dplnkd, radtotu, radclru, radtotd, radclrd, rad0, &
3282 integer :: ittot, itgas, ib, ig, k
3316 odepth = max(
f_zero, secdif(ib)*tautot(ig,k) )
3317 if (odepth <= 0.06)
then 3318 atrgas = odepth - 0.5*odepth*odepth
3319 trng =
f_one - atrgas
3320 gasfac = rec_6 * odepth
3322 tblind = odepth / (
bpade + odepth)
3323 itgas =
tblint*tblind + 0.5
3325 atrgas =
f_one - trng
3330 plfrac = fracs(ig,k)
3333 dplnku = pklev(ib,k ) - blay
3334 dplnkd = pklev(ib,k-1) - blay
3335 bbdgas = plfrac * (blay + dplnkd*gasfac)
3336 bbugas = plfrac * (blay + dplnku*gasfac)
3337 gassrcd= bbdgas * atrgas
3338 gassrcu(k)= bbugas * atrgas
3344 if (clfm >=
eps)
then 3347 odcld = secdif(ib) * taucld(ib,k)
3348 efclrfr(k) =
f_one - (
f_one - exp(-odcld))*clfm
3349 odtot = odepth + odcld
3350 if (odtot < 0.06)
then 3351 totfac = rec_6 * odtot
3352 atrtot = odtot - 0.5*odtot*odtot
3354 tblind = odtot / (
bpade + odtot)
3355 ittot =
tblint*tblind + 0.5
3360 bbdtot = plfrac * (blay + dplnkd*totfac)
3361 bbutot = plfrac * (blay + dplnku*totfac)
3362 totsrcd= bbdtot * atrtot
3363 totsrcu(k)= bbutot * atrtot
3366 radtotd = radtotd*trng*efclrfr(k) + gassrcd &
3367 & + clfm*(totsrcd - gassrcd)
3368 totdrad(k-1,ib) = totdrad(k-1,ib) + radtotd
3371 radclrd = radclrd*trng + gassrcd
3372 clrdrad(k-1,ib) = clrdrad(k-1,ib) + radclrd
3378 radtotd = radtotd*trng + gassrcd
3379 totdrad(k-1,ib) = totdrad(k-1,ib) + radtotd
3382 radclrd = radclrd*trng + gassrcd
3383 clrdrad(k-1,ib) = clrdrad(k-1,ib) + radclrd
3395 reflct =
f_one - semiss(ib)
3396 rad0 = semiss(ib) * fracs(ig,1) * pklay(ib,0)
3399 radtotu = rad0 + reflct*radtotd
3400 toturad(0,ib) = toturad(0,ib) + radtotu
3403 radclru = rad0 + reflct*radclrd
3404 clrurad(0,ib) = clrurad(0,ib) + radclru
3415 if (clfm >
eps)
then 3419 radtotu = radtotu*trng*efclrfr(k) + gasu &
3420 & + clfm*(totsrcu(k) - gasu)
3421 toturad(k,ib) = toturad(k,ib) + radtotu
3424 radclru = radclru*trng + gasu
3425 clrurad(k,ib) = clrurad(k,ib) + radclru
3431 radtotu = radtotu*trng + gasu
3432 toturad(k,ib) = toturad(k,ib) + radtotu
3435 radclru = radclru*trng + gasu
3436 clrurad(k,ib) = clrurad(k,ib) + radclru
3451 totuflux(k) = totuflux(k) + toturad(k,ib)
3452 totdflux(k) = totdflux(k) + totdrad(k,ib)
3453 totuclfl(k) = totuclfl(k) + clrurad(k,ib)
3454 totdclfl(k) = totdclfl(k) + clrdrad(k,ib)
3457 totuflux(k) = totuflux(k) * flxfac
3458 totdflux(k) = totdflux(k) * flxfac
3459 totuclfl(k) = totuclfl(k) * flxfac
3460 totdclfl(k) = totdclfl(k) * flxfac
3464 fnet(0) = totuflux(0) - totdflux(0)
3468 fnet(k) = totuflux(k) - totdflux(k)
3469 htr(k) = (fnet(k-1) - fnet(k)) * rfdelp(k)
3474 fnetc(0) = totuclfl(0) - totdclfl(0)
3477 fnetc(k) = totuclfl(k) - totdclfl(k)
3478 htrcl(k) = (fnetc(k-1) - fnetc(k)) * rfdelp(k)
3485 fnet(0) = (toturad(0,ib) - totdrad(0,ib)) * flxfac
3488 fnet(k) = (toturad(k,ib) - totdrad(k,ib)) * flxfac
3489 htrb(k,ib) = (fnet(k-1) - fnet(k)) * rfdelp(k)
3503 & ( laytrop,pavel,coldry,colamt,colbrd,wx,tauaer, &
3504 & rfrate,fac00,fac01,fac10,fac11,jp,jt,jt1, &
3505 & selffac,selffrac,indself,forfac,forfrac,indfor, &
3506 & minorfrac,scaleminor,scaleminorn2,indminor, &
3626 integer,
intent(in) :: nlay, laytrop
3628 integer,
dimension(nlay),
intent(in) :: jp, jt, jt1, indself, &
3631 real (kind=kind_phys),
dimension(nlay),
intent(in) :: pavel, &
3632 & coldry, colbrd, fac00, fac01, fac10, fac11, selffac, &
3633 & selffrac, forfac, forfrac, minorfrac, scaleminor, &
3636 real (kind=kind_phys),
dimension(nlay,maxgas),
intent(in):: colamt
3637 real (kind=kind_phys),
dimension(nlay,maxxsec),
intent(in):: wx
3639 real (kind=kind_phys),
dimension(nbands,nlay),
intent(in):: tauaer
3641 real (kind=kind_phys),
dimension(nlay,nrates,2),
intent(in) :: &
3645 real (kind=kind_phys),
dimension(ngptlw,nlay),
intent(out) :: &
3649 real (kind=kind_phys),
dimension(ngptlw,nlay) :: taug
3651 integer :: ib, ig, k
3678 tautot(ig,k) = taug(ig,k) + tauaer(ib,k)
3705 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
3708 real (kind=kind_phys) :: pp, corradj, scalen2, tauself, taufor, &
3720 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(1) + 1
3721 ind1 = ( jp(k) *5 + (jt1(k)-1)) *
nspa(1) + 1
3733 scalen2 = colbrd(k) * scaleminorn2(k)
3734 if (pp < 250.0)
then 3735 corradj =
f_one - 0.15 * (250.0-pp) / 154.4
3741 tauself = selffac(k) * (
selfref(ig,inds) + selffrac(k) &
3743 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
3745 taun2 = scalen2 * (
ka_mn2(ig,indm) + minorfrac(k) &
3748 taug(ig,k) = corradj * (colamt(k,1) &
3749 & * (fac00(k)*
absa(ig,ind0) + fac10(k)*
absa(ig,ind0p) &
3750 & + fac01(k)*
absa(ig,ind1) + fac11(k)*
absa(ig,ind1p)) &
3751 & + tauself + taufor + taun2)
3759 do k = laytrop+1, nlay
3760 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(1) + 1
3761 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(1) + 1
3770 scalen2 = colbrd(k) * scaleminorn2(k)
3771 corradj =
f_one - 0.15 * (pavel(k) / 95.6)
3774 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
3776 taun2 = scalen2 * (
kb_mn2(ig,indm) + minorfrac(k) &
3779 taug(ig,k) = corradj * (colamt(k,1) &
3780 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
3781 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p)) &
3803 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
3806 real (kind=kind_phys) :: corradj, tauself, taufor
3813 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(2) + 1
3814 ind1 = ( jp(k) *5 + (jt1(k)-1)) *
nspa(2) + 1
3823 corradj =
f_one - 0.05 * (pavel(k) - 100.0) / 900.0
3826 tauself = selffac(k) * (
selfref(ig,inds) + selffrac(k) &
3828 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
3831 taug(
ns02+ig,k) = corradj * (colamt(k,1) &
3832 & * (fac00(k)*
absa(ig,ind0) + fac10(k)*
absa(ig,ind0p) &
3833 & + fac01(k)*
absa(ig,ind1) + fac11(k)*
absa(ig,ind1p)) &
3834 & + tauself + taufor)
3842 do k = laytrop+1, nlay
3843 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(2) + 1
3844 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(2) + 1
3852 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
3855 taug(
ns02+ig,k) = colamt(k,1) &
3856 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
3857 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p)) &
3880 integer :: k, ind0, ind1, inds, indsp, indf, indfp, indm, indmp, &
3881 & id000, id010, id100, id110, id200, id210, jmn2o, jmn2op, &
3882 & id001, id011, id101, id111, id201, id211, jpl, jplp, &
3885 real (kind=kind_phys) :: absn2o, ratn2o, adjfac, adjcoln2o, &
3886 & speccomb, specparm, specmult, fs, &
3887 & speccomb1, specparm1, specmult1, fs1, &
3888 & speccomb_mn2o, specparm_mn2o, specmult_mn2o, fmn2o, &
3889 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
3890 & refrat_planck_a, refrat_planck_b, refrat_m_a, refrat_m_b, &
3891 & fac000, fac100, fac200, fac010, fac110, fac210, &
3892 & fac001, fac101, fac201, fac011, fac111, fac211, &
3893 & tau_major, tau_major1, tauself, taufor, n2om1, n2om2, &
3894 & p, p4, fk0, fk1, fk2
3910 speccomb = colamt(k,1) + rfrate(k,1,1)*colamt(k,2)
3911 specparm = colamt(k,1) / speccomb
3912 specmult = 8.0 * min(specparm,
oneminus)
3913 js = 1 + int(specmult)
3914 fs = mod(specmult,
f_one)
3915 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(3) + js
3917 speccomb1 = colamt(k,1) + rfrate(k,1,2)*colamt(k,2)
3918 specparm1 = colamt(k,1) / speccomb1
3919 specmult1 = 8.0 * min(specparm1,
oneminus)
3920 js1 = 1 + int(specmult1)
3921 fs1 = mod(specmult1,
f_one)
3922 ind1 = (jp(k)*5 + (jt1(k)-1)) *
nspa(3) + js1
3924 speccomb_mn2o = colamt(k,1) + refrat_m_a*colamt(k,2)
3925 specparm_mn2o = colamt(k,1) / speccomb_mn2o
3926 specmult_mn2o = 8.0 * min(specparm_mn2o,
oneminus)
3927 jmn2o = 1 + int(specmult_mn2o)
3928 fmn2o = mod(specmult_mn2o,
f_one)
3930 speccomb_planck = colamt(k,1) + refrat_planck_a*colamt(k,2)
3931 specparm_planck = colamt(k,1) / speccomb_planck
3932 specmult_planck = 8.0 * min(specparm_planck,
oneminus)
3933 jpl = 1 + int(specmult_planck)
3934 fpl = mod(specmult_planck,
f_one)
3949 p = coldry(k) *
chi_mls(4,jp(k)+1)
3950 ratn2o = colamt(k,4) / p
3951 if (ratn2o > 1.5)
then 3952 adjfac = 0.5 + (ratn2o - 0.5)**0.65
3953 adjcoln2o = adjfac * p
3955 adjcoln2o = colamt(k,4)
3958 if (specparm < 0.125)
then 3962 fk1 =
f_one - p - 2.0*p4
3970 else if (specparm > 0.875)
then 3974 fk1 =
f_one - p - 2.0*p4
3994 fac000 = fk0*fac00(k)
3995 fac100 = fk1*fac00(k)
3996 fac200 = fk2*fac00(k)
3997 fac010 = fk0*fac10(k)
3998 fac110 = fk1*fac10(k)
3999 fac210 = fk2*fac10(k)
4001 if (specparm1 < 0.125)
then 4005 fk1 =
f_one - p - 2.0*p4
4013 elseif (specparm1 > 0.875)
then 4017 fk1 =
f_one - p - 2.0*p4
4037 fac001 = fk0*fac01(k)
4038 fac101 = fk1*fac01(k)
4039 fac201 = fk2*fac01(k)
4040 fac011 = fk0*fac11(k)
4041 fac111 = fk1*fac11(k)
4042 fac211 = fk2*fac11(k)
4045 tauself = selffac(k)* (
selfref(ig,inds) + selffrac(k) &
4047 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
4049 n2om1 =
ka_mn2o(ig,jmn2o,indm) + fmn2o &
4051 n2om2 =
ka_mn2o(ig,jmn2o,indmp) + fmn2o &
4053 absn2o = n2om1 + minorfrac(k) * (n2om2 - n2om1)
4055 tau_major = speccomb &
4056 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
4057 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
4058 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210))
4060 tau_major1 = speccomb1 &
4061 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
4062 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
4063 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211))
4065 taug(
ns03+ig,k) = tau_major + tau_major1 &
4066 & + tauself + taufor + adjcoln2o*absn2o
4075 do k = laytrop+1, nlay
4076 speccomb = colamt(k,1) + rfrate(k,1,1)*colamt(k,2)
4077 specparm = colamt(k,1) / speccomb
4078 specmult = 4.0 * min(specparm,
oneminus)
4079 js = 1 + int(specmult)
4080 fs = mod(specmult,
f_one)
4081 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(3) + js
4083 speccomb1 = colamt(k,1) + rfrate(k,1,2)*colamt(k,2)
4084 specparm1 = colamt(k,1) / speccomb1
4085 specmult1 = 4.0 * min(specparm1,
oneminus)
4086 js1 = 1 + int(specmult1)
4087 fs1 = mod(specmult1,
f_one)
4088 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(3) + js1
4090 speccomb_mn2o = colamt(k,1) + refrat_m_b*colamt(k,2)
4091 specparm_mn2o = colamt(k,1) / speccomb_mn2o
4092 specmult_mn2o = 4.0 * min(specparm_mn2o,
oneminus)
4093 jmn2o = 1 + int(specmult_mn2o)
4094 fmn2o = mod(specmult_mn2o,
f_one)
4096 speccomb_planck = colamt(k,1) + refrat_planck_b*colamt(k,2)
4097 specparm_planck = colamt(k,1) / speccomb_planck
4098 specmult_planck = 4.0 * min(specparm_planck,
oneminus)
4099 jpl = 1 + int(specmult_planck)
4100 fpl = mod(specmult_planck,
f_one)
4122 p = coldry(k) *
chi_mls(4,jp(k)+1)
4123 ratn2o = colamt(k,4) / p
4124 if (ratn2o > 1.5)
then 4125 adjfac = 0.5 + (ratn2o - 0.5)**0.65
4126 adjcoln2o = adjfac * p
4128 adjcoln2o = colamt(k,4)
4133 fac000 = fk0*fac00(k)
4134 fac010 = fk0*fac10(k)
4135 fac100 = fk1*fac00(k)
4136 fac110 = fk1*fac10(k)
4140 fac001 = fk0*fac01(k)
4141 fac011 = fk0*fac11(k)
4142 fac101 = fk1*fac01(k)
4143 fac111 = fk1*fac11(k)
4146 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
4148 n2om1 =
kb_mn2o(ig,jmn2o,indm) + fmn2o &
4150 n2om2 =
kb_mn2o(ig,jmn2o,indmp) + fmn2o &
4152 absn2o = n2om1 + minorfrac(k) * (n2om2 - n2om1)
4154 tau_major = speccomb &
4155 & * (fac000*
absb(ig,id000) + fac010*
absb(ig,id010) &
4156 & + fac100*
absb(ig,id100) + fac110*
absb(ig,id110))
4158 tau_major1 = speccomb1 &
4159 & * (fac001*
absb(ig,id001) + fac011*
absb(ig,id011) &
4160 & + fac101*
absb(ig,id101) + fac111*
absb(ig,id111))
4162 taug(
ns03+ig,k) = tau_major + tau_major1 &
4163 & + taufor + adjcoln2o*absn2o
4185 integer :: k, ind0, ind1, inds, indsp, indf, indfp, jpl, jplp, &
4186 & id000, id010, id100, id110, id200, id210, ig, js, js1, &
4187 & id001, id011, id101, id111, id201, id211
4189 real (kind=kind_phys) :: tauself, taufor, p, p4, fk0, fk1, fk2, &
4190 & speccomb, specparm, specmult, fs, &
4191 & speccomb1, specparm1, specmult1, fs1, &
4192 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
4193 & fac000, fac100, fac200, fac010, fac110, fac210, &
4194 & fac001, fac101, fac201, fac011, fac111, fac211, &
4195 & refrat_planck_a, refrat_planck_b, tau_major, tau_major1
4205 speccomb = colamt(k,1) + rfrate(k,1,1)*colamt(k,2)
4206 specparm = colamt(k,1) / speccomb
4207 specmult = 8.0 * min(specparm,
oneminus)
4208 js = 1 + int(specmult)
4209 fs = mod(specmult,
f_one)
4210 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(4) + js
4212 speccomb1 = colamt(k,1) + rfrate(k,1,2)*colamt(k,2)
4213 specparm1 = colamt(k,1) / speccomb1
4214 specmult1 = 8.0 * min(specparm1,
oneminus)
4215 js1 = 1 + int(specmult1)
4216 fs1 = mod(specmult1,
f_one)
4217 ind1 = ( jp(k)*5 + (jt1(k)-1)) *
nspa(4) + js1
4219 speccomb_planck = colamt(k,1) + refrat_planck_a*colamt(k,2)
4220 specparm_planck = colamt(k,1) / speccomb_planck
4221 specmult_planck = 8.0 * min(specparm_planck,
oneminus)
4222 jpl = 1 + int(specmult_planck)
4223 fpl = mod(specmult_planck, 1.0)
4231 if (specparm < 0.125)
then 4235 fk1 =
f_one - p - 2.0*p4
4243 elseif (specparm > 0.875)
then 4247 fk1 =
f_one - p - 2.0*p4
4267 fac000 = fk0*fac00(k)
4268 fac100 = fk1*fac00(k)
4269 fac200 = fk2*fac00(k)
4270 fac010 = fk0*fac10(k)
4271 fac110 = fk1*fac10(k)
4272 fac210 = fk2*fac10(k)
4274 if (specparm1 < 0.125)
then 4278 fk1 =
f_one - p - 2.0*p4
4286 elseif (specparm1 > 0.875)
then 4290 fk1 =
f_one - p - 2.0*p4
4310 fac001 = fk0*fac01(k)
4311 fac101 = fk1*fac01(k)
4312 fac201 = fk2*fac01(k)
4313 fac011 = fk0*fac11(k)
4314 fac111 = fk1*fac11(k)
4315 fac211 = fk2*fac11(k)
4318 tauself = selffac(k)* (
selfref(ig,inds) + selffrac(k) &
4320 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
4323 tau_major = speccomb &
4324 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
4325 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
4326 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210))
4328 tau_major1 = speccomb1 &
4329 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
4330 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
4331 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211))
4333 taug(
ns04+ig,k) = tau_major + tau_major1 + tauself + taufor
4342 do k = laytrop+1, nlay
4343 speccomb = colamt(k,3) + rfrate(k,6,1)*colamt(k,2)
4344 specparm = colamt(k,3) / speccomb
4345 specmult = 4.0 * min(specparm,
oneminus)
4346 js = 1 + int(specmult)
4347 fs = mod(specmult,
f_one)
4348 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(4) + js
4350 speccomb1 = colamt(k,3) + rfrate(k,6,2)*colamt(k,2)
4351 specparm1 = colamt(k,3) / speccomb1
4352 specmult1 = 4.0 * min(specparm1,
oneminus)
4353 js1 = 1 + int(specmult1)
4354 fs1 = mod(specmult1,
f_one)
4355 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(4) + js1
4357 speccomb_planck = colamt(k,3) + refrat_planck_b*colamt(k,2)
4358 specparm_planck = colamt(k,3) / speccomb_planck
4359 specmult_planck = 4.0 * min(specparm_planck,
oneminus)
4360 jpl = 1 + int(specmult_planck)
4361 fpl = mod(specmult_planck,
f_one)
4375 fac000 = fk0*fac00(k)
4376 fac010 = fk0*fac10(k)
4377 fac100 = fk1*fac00(k)
4378 fac110 = fk1*fac10(k)
4382 fac001 = fk0*fac01(k)
4383 fac011 = fk0*fac11(k)
4384 fac101 = fk1*fac01(k)
4385 fac111 = fk1*fac11(k)
4388 tau_major = speccomb &
4389 & * (fac000*
absb(ig,id000) + fac010*
absb(ig,id010) &
4390 & + fac100*
absb(ig,id100) + fac110*
absb(ig,id110))
4391 tau_major1 = speccomb1 &
4392 & * (fac001*
absb(ig,id001) + fac011*
absb(ig,id011) &
4393 & + fac101*
absb(ig,id101) + fac111*
absb(ig,id111))
4395 taug(
ns04+ig,k) = tau_major + tau_major1
4404 taug(
ns04+ 8,k) = taug(
ns04+ 8,k) * 0.92
4405 taug(
ns04+ 9,k) = taug(
ns04+ 9,k) * 0.88
4406 taug(
ns04+10,k) = taug(
ns04+10,k) * 1.07
4407 taug(
ns04+11,k) = taug(
ns04+11,k) * 1.1
4408 taug(
ns04+12,k) = taug(
ns04+12,k) * 0.99
4409 taug(
ns04+13,k) = taug(
ns04+13,k) * 0.88
4410 taug(
ns04+14,k) = taug(
ns04+14,k) * 0.943
4429 integer :: k, ind0, ind1, inds, indsp, indf, indfp, indm, indmp, &
4430 & id000, id010, id100, id110, id200, id210, jmo3, jmo3p, &
4431 & id001, id011, id101, id111, id201, id211, jpl, jplp, &
4434 real (kind=kind_phys) :: tauself, taufor, o3m1, o3m2, abso3, &
4435 & speccomb, specparm, specmult, fs, &
4436 & speccomb1, specparm1, specmult1, fs1, &
4437 & speccomb_mo3, specparm_mo3, specmult_mo3, fmo3, &
4438 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
4439 & refrat_planck_a, refrat_planck_b, refrat_m_a, &
4440 & fac000, fac100, fac200, fac010, fac110, fac210, &
4441 & fac001, fac101, fac201, fac011, fac111, fac211, &
4442 & p0, p40, fk00, fk10, fk20, p1, p41, fk01, fk11, fk21
4460 speccomb = colamt(k,1) + rfrate(k,1,1)*colamt(k,2)
4461 specparm = colamt(k,1) / speccomb
4462 specmult = 8.0 * min(specparm,
oneminus)
4463 js = 1 + int(specmult)
4464 fs = mod(specmult,
f_one)
4465 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(5) + js
4467 speccomb1 = colamt(k,1) + rfrate(k,1,2)*colamt(k,2)
4468 specparm1 = colamt(k,1) / speccomb1
4469 specmult1 = 8.0 * min(specparm1,
oneminus)
4470 js1 = 1 + int(specmult1)
4471 fs1 = mod(specmult1,
f_one)
4472 ind1 = (jp(k)*5 + (jt1(k)-1)) *
nspa(5) + js1
4474 speccomb_mo3 = colamt(k,1) + refrat_m_a*colamt(k,2)
4475 specparm_mo3 = colamt(k,1) / speccomb_mo3
4476 specmult_mo3 = 8.0 * min(specparm_mo3,
oneminus)
4477 jmo3 = 1 + int(specmult_mo3)
4478 fmo3 = mod(specmult_mo3,
f_one)
4480 speccomb_planck = colamt(k,1) + refrat_planck_a*colamt(k,2)
4481 specparm_planck = colamt(k,1) / speccomb_planck
4482 specmult_planck = 8.0 * min(specparm_planck,
oneminus)
4483 jpl = 1 + int(specmult_planck)
4484 fpl = mod(specmult_planck,
f_one)
4495 if (specparm < 0.125 .and. specparm1 < 0.125)
then 4499 fk10 =
f_one - p0 - 2.0*p40
4505 fk11 =
f_one - p1 - 2.0*p41
4521 elseif (specparm > 0.875 .and. specparm1 > 0.875)
then 4525 fk10 =
f_one - p0 - 2.0*p40
4531 fk11 =
f_one - p1 - 2.0*p41
4571 fac000 = fk00 * fac00(k)
4572 fac100 = fk10 * fac00(k)
4573 fac200 = fk20 * fac00(k)
4574 fac010 = fk00 * fac10(k)
4575 fac110 = fk10 * fac10(k)
4576 fac210 = fk20 * fac10(k)
4578 fac001 = fk01 * fac01(k)
4579 fac101 = fk11 * fac01(k)
4580 fac201 = fk21 * fac01(k)
4581 fac011 = fk01 * fac11(k)
4582 fac111 = fk11 * fac11(k)
4583 fac211 = fk21 * fac11(k)
4586 tauself = selffac(k) * (
selfref(ig,inds) + selffrac(k) &
4588 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
4590 o3m1 =
ka_mo3(ig,jmo3,indm) + fmo3 &
4592 o3m2 =
ka_mo3(ig,jmo3,indmp) + fmo3 &
4594 abso3 = o3m1 + minorfrac(k)*(o3m2 - o3m1)
4596 taug(
ns05+ig,k) = speccomb &
4597 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
4598 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
4599 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210)) &
4601 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
4602 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
4603 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211)) &
4604 & + tauself + taufor+abso3*colamt(k,3)+wx(k,1)*
ccl4(ig)
4613 do k = laytrop+1, nlay
4614 speccomb = colamt(k,3) + rfrate(k,6,1)*colamt(k,2)
4615 specparm = colamt(k,3) / speccomb
4616 specmult = 4.0 * min(specparm,
oneminus)
4617 js = 1 + int(specmult)
4618 fs = mod(specmult,
f_one)
4619 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(5) + js
4621 speccomb1 = colamt(k,3) + rfrate(k,6,2)*colamt(k,2)
4622 specparm1 = colamt(k,3) / speccomb1
4623 specmult1 = 4.0 * min(specparm1,
oneminus)
4624 js1 = 1 + int(specmult1)
4625 fs1 = mod(specmult1,
f_one)
4626 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(5) + js1
4628 speccomb_planck = colamt(k,3) + refrat_planck_b*colamt(k,2)
4629 specparm_planck = colamt(k,3) / speccomb_planck
4630 specmult_planck = 4.0 * min(specparm_planck,
oneminus)
4631 jpl = 1 + int(specmult_planck)
4632 fpl = mod(specmult_planck,
f_one)
4650 fac000 = fk00 * fac00(k)
4651 fac010 = fk00 * fac10(k)
4652 fac100 = fk10 * fac00(k)
4653 fac110 = fk10 * fac10(k)
4655 fac001 = fk01 * fac01(k)
4656 fac011 = fk01 * fac11(k)
4657 fac101 = fk11 * fac01(k)
4658 fac111 = fk11 * fac11(k)
4661 taug(
ns05+ig,k) = speccomb &
4662 & * (fac000*
absb(ig,id000) + fac010*
absb(ig,id010) &
4663 & + fac100*
absb(ig,id100) + fac110*
absb(ig,id110)) &
4665 & * (fac001*
absb(ig,id001) + fac011*
absb(ig,id011) &
4666 & + fac101*
absb(ig,id101) + fac111*
absb(ig,id111)) &
4667 & + wx(k,1) *
ccl4(ig)
4690 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
4693 real (kind=kind_phys) :: ratco2, adjfac, adjcolco2, tauself, &
4694 & taufor, absco2, temp
4705 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(6) + 1
4706 ind1 = ( jp(k) *5 + (jt1(k)-1)) *
nspa(6) + 1
4721 temp = coldry(k) *
chi_mls(2,jp(k)+1)
4722 ratco2 = colamt(k,2) / temp
4723 if (ratco2 > 3.0)
then 4724 adjfac = 2.0 + (ratco2-2.0)**0.77
4725 adjcolco2 = adjfac * temp
4727 adjcolco2 = colamt(k,2)
4731 tauself = selffac(k) * (
selfref(ig,inds) + selffrac(k) &
4733 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
4735 absco2 =
ka_mco2(ig,indm) + minorfrac(k) &
4738 taug(
ns06+ig,k) = colamt(k,1) &
4739 & * (fac00(k)*
absa(ig,ind0) + fac10(k)*
absa(ig,ind0p) &
4740 & + fac01(k)*
absa(ig,ind1) + fac11(k)*
absa(ig,ind1p)) &
4741 & + tauself + taufor + adjcolco2*absco2 &
4751 do k = laytrop+1, nlay
4775 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
4776 & id000, id010, id100, id110, id200, id210, indm, indmp, &
4777 & id001, id011, id101, id111, id201, id211, jmco2, jmco2p, &
4778 & jpl, jplp, ig, js, js1
4780 real (kind=kind_phys) :: tauself, taufor, co2m1, co2m2, absco2, &
4781 & speccomb, specparm, specmult, fs, &
4782 & speccomb1, specparm1, specmult1, fs1, &
4783 & speccomb_mco2, specparm_mco2, specmult_mco2, fmco2, &
4784 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
4785 & refrat_planck_a, refrat_m_a, ratco2, adjfac, adjcolco2, &
4786 & fac000, fac100, fac200, fac010, fac110, fac210, &
4787 & fac001, fac101, fac201, fac011, fac111, fac211, &
4788 & p0, p40, fk00, fk10, fk20, p1, p41, fk01, fk11, fk21, temp
4805 speccomb = colamt(k,1) + rfrate(k,2,1)*colamt(k,3)
4806 specparm = colamt(k,1) / speccomb
4807 specmult = 8.0 * min(specparm,
oneminus)
4808 js = 1 + int(specmult)
4809 fs = mod(specmult,
f_one)
4810 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(7) + js
4812 speccomb1 = colamt(k,1) + rfrate(k,2,2)*colamt(k,3)
4813 specparm1 = colamt(k,1) / speccomb1
4814 specmult1 = 8.0 * min(specparm1,
oneminus)
4815 js1 = 1 + int(specmult1)
4816 fs1 = mod(specmult1,
f_one)
4817 ind1 = (jp(k)*5 + (jt1(k)-1)) *
nspa(7) + js1
4819 speccomb_mco2 = colamt(k,1) + refrat_m_a*colamt(k,3)
4820 specparm_mco2 = colamt(k,1) / speccomb_mco2
4821 specmult_mco2 = 8.0 * min(specparm_mco2,
oneminus)
4822 jmco2 = 1 + int(specmult_mco2)
4823 fmco2 = mod(specmult_mco2,
f_one)
4825 speccomb_planck = colamt(k,1) + refrat_planck_a*colamt(k,3)
4826 specparm_planck = colamt(k,1) / speccomb_planck
4827 specmult_planck = 8.0 * min(specparm_planck,
oneminus)
4828 jpl = 1 + int(specmult_planck)
4829 fpl = mod(specmult_planck,
f_one)
4846 temp = coldry(k) *
chi_mls(2,jp(k)+1)
4847 ratco2 = colamt(k,2) / temp
4848 if (ratco2 > 3.0)
then 4849 adjfac = 3.0 + (ratco2-3.0)**0.79
4850 adjcolco2 = adjfac * temp
4852 adjcolco2 = colamt(k,2)
4855 if (specparm < 0.125 .and. specparm1 < 0.125)
then 4859 fk10 =
f_one - p0 - 2.0*p40
4865 fk11 =
f_one - p1 - 2.0*p41
4881 elseif (specparm > 0.875 .and. specparm1 > 0.875)
then 4885 fk10 =
f_one - p0 - 2.0*p40
4891 fk11 =
f_one - p1 - 2.0*p41
4931 fac000 = fk00 * fac00(k)
4932 fac100 = fk10 * fac00(k)
4933 fac200 = fk20 * fac00(k)
4934 fac010 = fk00 * fac10(k)
4935 fac110 = fk10 * fac10(k)
4936 fac210 = fk20 * fac10(k)
4938 fac001 = fk01 * fac01(k)
4939 fac101 = fk11 * fac01(k)
4940 fac201 = fk21 * fac01(k)
4941 fac011 = fk01 * fac11(k)
4942 fac111 = fk11 * fac11(k)
4943 fac211 = fk21 * fac11(k)
4946 tauself = selffac(k)* (
selfref(ig,inds) + selffrac(k) &
4948 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
4950 co2m1 =
ka_mco2(ig,jmco2,indm) + fmco2 &
4952 co2m2 =
ka_mco2(ig,jmco2,indmp) + fmco2 &
4954 absco2 = co2m1 + minorfrac(k) * (co2m2 - co2m1)
4956 taug(
ns07+ig,k) = speccomb &
4957 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
4958 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
4959 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210)) &
4961 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
4962 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
4963 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211)) &
4964 & + tauself + taufor + adjcolco2*absco2
4977 do k = laytrop+1, nlay
4978 temp = coldry(k) *
chi_mls(2,jp(k)+1)
4979 ratco2 = colamt(k,2) / temp
4980 if (ratco2 > 3.0)
then 4981 adjfac = 2.0 + (ratco2-2.0)**0.79
4982 adjcolco2 = adjfac * temp
4984 adjcolco2 = colamt(k,2)
4987 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(7) + 1
4988 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(7) + 1
4996 absco2 =
kb_mco2(ig,indm) + minorfrac(k) &
4999 taug(
ns07+ig,k) = colamt(k,3) &
5000 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
5001 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p)) &
5002 & + adjcolco2 * absco2
5010 taug(
ns07+ 6,k) = taug(
ns07+ 6,k) * 0.92
5011 taug(
ns07+ 7,k) = taug(
ns07+ 7,k) * 0.88
5012 taug(
ns07+ 8,k) = taug(
ns07+ 8,k) * 1.07
5013 taug(
ns07+ 9,k) = taug(
ns07+ 9,k) * 1.1
5014 taug(
ns07+10,k) = taug(
ns07+10,k) * 0.99
5015 taug(
ns07+11,k) = taug(
ns07+11,k) * 0.855
5034 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
5037 real (kind=kind_phys) :: tauself, taufor, absco2, abso3, absn2o, &
5038 & ratco2, adjfac, adjcolco2, temp
5053 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(8) + 1
5054 ind1 = ( jp(k) *5 + (jt1(k)-1)) *
nspa(8) + 1
5069 temp = coldry(k) *
chi_mls(2,jp(k)+1)
5070 ratco2 = colamt(k,2) / temp
5071 if (ratco2 > 3.0)
then 5072 adjfac = 2.0 + (ratco2-2.0)**0.65
5073 adjcolco2 = adjfac * temp
5075 adjcolco2 = colamt(k,2)
5079 tauself = selffac(k) * (
selfref(ig,inds) + selffrac(k) &
5081 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
5083 absco2 = (
ka_mco2(ig,indm) + minorfrac(k) &
5085 abso3 = (
ka_mo3(ig,indm) + minorfrac(k) &
5087 absn2o = (
ka_mn2o(ig,indm) + minorfrac(k) &
5090 taug(
ns08+ig,k) = colamt(k,1) &
5091 & * (fac00(k)*
absa(ig,ind0) + fac10(k)*
absa(ig,ind0p) &
5092 & + fac01(k)*
absa(ig,ind1) + fac11(k)*
absa(ig,ind1p)) &
5093 & + tauself+taufor + adjcolco2*absco2 &
5094 & + colamt(k,3)*abso3 + colamt(k,4)*absn2o &
5103 do k = laytrop+1, nlay
5104 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(8) + 1
5105 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(8) + 1
5116 temp = coldry(k) *
chi_mls(2,jp(k)+1)
5117 ratco2 = colamt(k,2) / temp
5118 if (ratco2 > 3.0)
then 5119 adjfac = 2.0 + (ratco2-2.0)**0.65
5120 adjcolco2 = adjfac * temp
5122 adjcolco2 = colamt(k,2)
5126 absco2 = (
kb_mco2(ig,indm) + minorfrac(k) &
5128 absn2o = (
kb_mn2o(ig,indm) + minorfrac(k) &
5131 taug(
ns08+ig,k) = colamt(k,3) &
5132 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
5133 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p)) &
5134 & + adjcolco2*absco2 + colamt(k,4)*absn2o &
5157 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
5158 & id000, id010, id100, id110, id200, id210, indm, indmp, &
5159 & id001, id011, id101, id111, id201, id211, jmn2o, jmn2op, &
5160 & jpl, jplp, ig, js, js1
5162 real (kind=kind_phys) :: tauself, taufor, n2om1, n2om2, absn2o, &
5163 & speccomb, specparm, specmult, fs, &
5164 & speccomb1, specparm1, specmult1, fs1, &
5165 & speccomb_mn2o, specparm_mn2o, specmult_mn2o, fmn2o, &
5166 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
5167 & refrat_planck_a, refrat_m_a, ratn2o, adjfac, adjcoln2o, &
5168 & fac000, fac100, fac200, fac010, fac110, fac210, &
5169 & fac001, fac101, fac201, fac011, fac111, fac211, &
5170 & p0, p40, fk00, fk10, fk20, p1, p41, fk01, fk11, fk21, temp
5187 speccomb = colamt(k,1) + rfrate(k,4,1)*colamt(k,5)
5188 specparm = colamt(k,1) / speccomb
5189 specmult = 8.0 * min(specparm,
oneminus)
5190 js = 1 + int(specmult)
5191 fs = mod(specmult,
f_one)
5192 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(9) + js
5194 speccomb1 = colamt(k,1) + rfrate(k,4,2)*colamt(k,5)
5195 specparm1 = colamt(k,1) / speccomb1
5196 specmult1 = 8.0 * min(specparm1,
oneminus)
5197 js1 = 1 + int(specmult1)
5198 fs1 = mod(specmult1,
f_one)
5199 ind1 = (jp(k)*5 + (jt1(k)-1)) *
nspa(9) + js1
5201 speccomb_mn2o = colamt(k,1) + refrat_m_a*colamt(k,5)
5202 specparm_mn2o = colamt(k,1) / speccomb_mn2o
5203 specmult_mn2o = 8.0 * min(specparm_mn2o,
oneminus)
5204 jmn2o = 1 + int(specmult_mn2o)
5205 fmn2o = mod(specmult_mn2o,
f_one)
5207 speccomb_planck = colamt(k,1) + refrat_planck_a*colamt(k,5)
5208 specparm_planck = colamt(k,1) / speccomb_planck
5209 specmult_planck = 8.0 * min(specparm_planck,
oneminus)
5210 jpl = 1 + int(specmult_planck)
5211 fpl = mod(specmult_planck,
f_one)
5226 temp = coldry(k) *
chi_mls(4,jp(k)+1)
5227 ratn2o = colamt(k,4) / temp
5228 if (ratn2o > 1.5)
then 5229 adjfac = 0.5 + (ratn2o-0.5)**0.65
5230 adjcoln2o = adjfac * temp
5232 adjcoln2o = colamt(k,4)
5235 if (specparm < 0.125 .and. specparm1 < 0.125)
then 5239 fk10 =
f_one - p0 - 2.0*p40
5245 fk11 =
f_one - p1 - 2.0*p41
5262 elseif (specparm > 0.875 .and. specparm1 > 0.875)
then 5266 fk10 =
f_one - p0 - 2.0*p40
5272 fk11 =
f_one - p1 - 2.0*p41
5312 fac000 = fk00 * fac00(k)
5313 fac100 = fk10 * fac00(k)
5314 fac200 = fk20 * fac00(k)
5315 fac010 = fk00 * fac10(k)
5316 fac110 = fk10 * fac10(k)
5317 fac210 = fk20 * fac10(k)
5319 fac001 = fk01 * fac01(k)
5320 fac101 = fk11 * fac01(k)
5321 fac201 = fk21 * fac01(k)
5322 fac011 = fk01 * fac11(k)
5323 fac111 = fk11 * fac11(k)
5324 fac211 = fk21 * fac11(k)
5327 tauself = selffac(k)* (
selfref(ig,inds) + selffrac(k) &
5329 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
5331 n2om1 =
ka_mn2o(ig,jmn2o,indm) + fmn2o &
5333 n2om2 =
ka_mn2o(ig,jmn2o,indmp) + fmn2o &
5335 absn2o = n2om1 + minorfrac(k) * (n2om2 - n2om1)
5337 taug(
ns09+ig,k) = speccomb &
5338 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
5339 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
5340 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210)) &
5342 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
5343 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
5344 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211)) &
5345 & + tauself + taufor + adjcoln2o*absn2o
5354 do k = laytrop+1, nlay
5355 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(9) + 1
5356 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(9) + 1
5367 temp = coldry(k) *
chi_mls(4,jp(k)+1)
5368 ratn2o = colamt(k,4) / temp
5369 if (ratn2o > 1.5)
then 5370 adjfac = 0.5 + (ratn2o - 0.5)**0.65
5371 adjcoln2o = adjfac * temp
5373 adjcoln2o = colamt(k,4)
5377 absn2o =
kb_mn2o(ig,indm) + minorfrac(k) &
5380 taug(
ns09+ig,k) = colamt(k,5) &
5381 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
5382 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p)) &
5383 & + adjcoln2o*absn2o
5404 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
5407 real (kind=kind_phys) :: tauself, taufor
5414 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(10) + 1
5415 ind1 = ( jp(k) *5 + (jt1(k)-1)) *
nspa(10) + 1
5425 tauself = selffac(k) * (
selfref(ig,inds) + selffrac(k) &
5427 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
5430 taug(
ns10+ig,k) = colamt(k,1) &
5431 & * (fac00(k)*
absa(ig,ind0) + fac10(k)*
absa(ig,ind0p) &
5432 & + fac01(k)*
absa(ig,ind1) + fac11(k)*
absa(ig,ind1p)) &
5433 & + tauself + taufor
5441 do k = laytrop+1, nlay
5442 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(10) + 1
5443 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(10) + 1
5451 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
5454 taug(
ns10+ig,k) = colamt(k,1) &
5455 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
5456 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p)) &
5479 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
5482 real (kind=kind_phys) :: scaleo2, tauself, taufor, tauo2
5493 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(11) + 1
5494 ind1 = ( jp(k) *5 + (jt1(k)-1)) *
nspa(11) + 1
5505 scaleo2 = colamt(k,6) * scaleminor(k)
5508 tauself = selffac(k) * (
selfref(ig,inds) + selffrac(k) &
5510 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
5512 tauo2 = scaleo2 * (
ka_mo2(ig,indm) + minorfrac(k) &
5515 taug(
ns11+ig,k) = colamt(k,1) &
5516 & * (fac00(k)*
absa(ig,ind0) + fac10(k)*
absa(ig,ind0p) &
5517 & + fac01(k)*
absa(ig,ind1) + fac11(k)*
absa(ig,ind1p)) &
5518 & + tauself + taufor + tauo2
5526 do k = laytrop+1, nlay
5527 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(11) + 1
5528 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(11) + 1
5537 scaleo2 = colamt(k,6) * scaleminor(k)
5540 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
5542 tauo2 = scaleo2 * (
kb_mo2(ig,indm) + minorfrac(k) &
5545 taug(
ns11+ig,k) = colamt(k,1) &
5546 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
5547 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p)) &
5569 integer :: k, ind0, ind1, inds, indsp, indf, indfp, jpl, jplp, &
5570 & id000, id010, id100, id110, id200, id210, ig, js, js1, &
5571 & id001, id011, id101, id111, id201, id211
5573 real (kind=kind_phys) :: tauself, taufor, refrat_planck_a, &
5574 & speccomb, specparm, specmult, fs, &
5575 & speccomb1, specparm1, specmult1, fs1, &
5576 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
5577 & fac000, fac100, fac200, fac010, fac110, fac210, &
5578 & fac001, fac101, fac201, fac011, fac111, fac211, &
5579 & p0, p40, fk00, fk10, fk20, p1, p41, fk01, fk11, fk21
5591 speccomb = colamt(k,1) + rfrate(k,1,1)*colamt(k,2)
5592 specparm = colamt(k,1) / speccomb
5593 specmult = 8.0 * min(specparm,
oneminus)
5594 js = 1 + int(specmult)
5595 fs = mod(specmult,
f_one)
5596 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(12) + js
5598 speccomb1 = colamt(k,1) + rfrate(k,1,2)*colamt(k,2)
5599 specparm1 = colamt(k,1) / speccomb1
5600 specmult1 = 8.0 * min(specparm1,
oneminus)
5601 js1 = 1 + int(specmult1)
5602 fs1 = mod(specmult1,
f_one)
5603 ind1 = (jp(k)*5 + (jt1(k)-1)) *
nspa(12) + js1
5605 speccomb_planck = colamt(k,1) + refrat_planck_a*colamt(k,2)
5606 specparm_planck = colamt(k,1) / speccomb_planck
5608 specmult_planck = 8.0 * specparm_planck
5609 jpl = 1 + int(specmult_planck)
5610 fpl = mod(specmult_planck,
f_one)
5618 if (specparm < 0.125 .and. specparm1 < 0.125)
then 5622 fk10 =
f_one - p0 - 2.0*p40
5628 fk11 =
f_one - p1 - 2.0*p41
5644 elseif (specparm > 0.875 .and. specparm1 > 0.875)
then 5648 fk10 =
f_one - p0 - 2.0*p40
5654 fk11 =
f_one - p1 - 2.0*p41
5694 fac000 = fk00 * fac00(k)
5695 fac100 = fk10 * fac00(k)
5696 fac200 = fk20 * fac00(k)
5697 fac010 = fk00 * fac10(k)
5698 fac110 = fk10 * fac10(k)
5699 fac210 = fk20 * fac10(k)
5701 fac001 = fk01 * fac01(k)
5702 fac101 = fk11 * fac01(k)
5703 fac201 = fk21 * fac01(k)
5704 fac011 = fk01 * fac11(k)
5705 fac111 = fk11 * fac11(k)
5706 fac211 = fk21 * fac11(k)
5709 tauself = selffac(k)* (
selfref(ig,inds) + selffrac(k) &
5711 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
5714 taug(
ns12+ig,k) = speccomb &
5715 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
5716 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
5717 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210)) &
5719 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
5720 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
5721 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211)) &
5722 & + tauself + taufor
5731 do k = laytrop+1, nlay
5753 integer :: k, ind0, ind1, inds, indsp, indf, indfp, indm, indmp, &
5754 & id000, id010, id100, id110, id200, id210, jmco2, jpl, &
5755 & id001, id011, id101, id111, id201, id211, jmco2p, jplp, &
5756 & jmco, jmcop, ig, js, js1
5758 real (kind=kind_phys) :: tauself, taufor, co2m1, co2m2, absco2, &
5759 & speccomb, specparm, specmult, fs, &
5760 & speccomb1, specparm1, specmult1, fs1, &
5761 & speccomb_mco2, specparm_mco2, specmult_mco2, fmco2, &
5762 & speccomb_mco, specparm_mco, specmult_mco, fmco, &
5763 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
5764 & refrat_planck_a, refrat_m_a, refrat_m_a3, ratco2, &
5765 & adjfac, adjcolco2, com1, com2, absco, abso3, &
5766 & fac000, fac100, fac200, fac010, fac110, fac210, &
5767 & fac001, fac101, fac201, fac011, fac111, fac211, &
5768 & p0, p40, fk00, fk10, fk20, p1, p41, fk01, fk11, fk21, temp
5787 speccomb = colamt(k,1) + rfrate(k,3,1)*colamt(k,4)
5788 specparm = colamt(k,1) / speccomb
5789 specmult = 8.0 * min(specparm,
oneminus)
5790 js = 1 + int(specmult)
5791 fs = mod(specmult,
f_one)
5792 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(13) + js
5794 speccomb1 = colamt(k,1) + rfrate(k,3,2)*colamt(k,4)
5795 specparm1 = colamt(k,1) / speccomb1
5796 specmult1 = 8.0 * min(specparm1,
oneminus)
5797 js1 = 1 + int(specmult1)
5798 fs1 = mod(specmult1,
f_one)
5799 ind1 = (jp(k)*5 + (jt1(k)-1)) *
nspa(13) + js1
5801 speccomb_mco2 = colamt(k,1) + refrat_m_a*colamt(k,4)
5802 specparm_mco2 = colamt(k,1) / speccomb_mco2
5803 specmult_mco2 = 8.0 * min(specparm_mco2,
oneminus)
5804 jmco2 = 1 + int(specmult_mco2)
5805 fmco2 = mod(specmult_mco2,
f_one)
5811 speccomb_mco = colamt(k,1) + refrat_m_a3*colamt(k,4)
5812 specparm_mco = colamt(k,1) / speccomb_mco
5813 specmult_mco = 8.0 * min(specparm_mco,
oneminus)
5814 jmco = 1 + int(specmult_mco)
5815 fmco = mod(specmult_mco,
f_one)
5817 speccomb_planck = colamt(k,1) + refrat_planck_a*colamt(k,4)
5818 specparm_planck = colamt(k,1) / speccomb_planck
5819 specmult_planck = 8.0 * min(specparm_planck,
oneminus)
5820 jpl = 1 + int(specmult_planck)
5821 fpl = mod(specmult_planck,
f_one)
5837 temp = coldry(k) * 3.55e-4
5838 ratco2 = colamt(k,2) / temp
5839 if (ratco2 > 3.0)
then 5840 adjfac = 2.0 + (ratco2-2.0)**0.68
5841 adjcolco2 = adjfac * temp
5843 adjcolco2 = colamt(k,2)
5846 if (specparm < 0.125 .and. specparm1 < 0.125)
then 5850 fk10 =
f_one - p0 - 2.0*p40
5856 fk11 =
f_one - p1 - 2.0*p41
5872 elseif (specparm > 0.875 .and. specparm1 > 0.875)
then 5876 fk10 =
f_one - p0 - 2.0*p40
5882 fk11 =
f_one - p1 - 2.0*p41
5922 fac000 = fk00 * fac00(k)
5923 fac100 = fk10 * fac00(k)
5924 fac200 = fk20 * fac00(k)
5925 fac010 = fk00 * fac10(k)
5926 fac110 = fk10 * fac10(k)
5927 fac210 = fk20 * fac10(k)
5929 fac001 = fk01 * fac01(k)
5930 fac101 = fk11 * fac01(k)
5931 fac201 = fk21 * fac01(k)
5932 fac011 = fk01 * fac11(k)
5933 fac111 = fk11 * fac11(k)
5934 fac211 = fk21 * fac11(k)
5937 tauself = selffac(k)* (
selfref(ig,inds) + selffrac(k) &
5939 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
5941 co2m1 =
ka_mco2(ig,jmco2,indm) + fmco2 &
5943 co2m2 =
ka_mco2(ig,jmco2,indmp) + fmco2 &
5945 absco2 = co2m1 + minorfrac(k) * (co2m2 - co2m1)
5946 com1 =
ka_mco(ig,jmco,indm) + fmco &
5948 com2 =
ka_mco(ig,jmco,indmp) + fmco &
5950 absco = com1 + minorfrac(k) * (com2 - com1)
5952 taug(
ns13+ig,k) = speccomb &
5953 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
5954 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
5955 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210)) &
5957 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
5958 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
5959 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211)) &
5960 & + tauself + taufor + adjcolco2*absco2 &
5961 & + colamt(k,7)*absco
5970 do k = laytrop+1, nlay
5975 abso3 =
kb_mo3(ig,indm) + minorfrac(k) &
5978 taug(
ns13+ig,k) = colamt(k,3)*abso3
5999 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
6002 real (kind=kind_phys) :: tauself, taufor
6009 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(14) + 1
6010 ind1 = ( jp(k) *5 + (jt1(k)-1)) *
nspa(14) + 1
6020 tauself = selffac(k) * (
selfref(ig,inds) + selffrac(k) &
6022 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
6025 taug(
ns14+ig,k) = colamt(k,2) &
6026 & * (fac00(k)*
absa(ig,ind0) + fac10(k)*
absa(ig,ind0p) &
6027 & + fac01(k)*
absa(ig,ind1) + fac11(k)*
absa(ig,ind1p)) &
6028 & + tauself + taufor
6036 do k = laytrop+1, nlay
6037 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(14) + 1
6038 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(14) + 1
6044 taug(
ns14+ig,k) = colamt(k,2) &
6045 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
6046 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p))
6068 integer :: k, ind0, ind1, inds, indsp, indf, indfp, indm, indmp, &
6069 & id000, id010, id100, id110, id200, id210, jpl, jplp, &
6070 & id001, id011, id101, id111, id201, id211, jmn2, jmn2p, &
6073 real (kind=kind_phys) :: scalen2, tauself, taufor, &
6074 & speccomb, specparm, specmult, fs, &
6075 & speccomb1, specparm1, specmult1, fs1, &
6076 & speccomb_mn2, specparm_mn2, specmult_mn2, fmn2, &
6077 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
6078 & refrat_planck_a, refrat_m_a, n2m1, n2m2, taun2, &
6079 & fac000, fac100, fac200, fac010, fac110, fac210, &
6080 & fac001, fac101, fac201, fac011, fac111, fac211, &
6081 & p0, p40, fk00, fk10, fk20, p1, p41, fk01, fk11, fk21
6097 speccomb = colamt(k,4) + rfrate(k,5,1)*colamt(k,2)
6098 specparm = colamt(k,4) / speccomb
6099 specmult = 8.0 * min(specparm,
oneminus)
6100 js = 1 + int(specmult)
6101 fs = mod(specmult,
f_one)
6102 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(15) + js
6104 speccomb1 = colamt(k,4) + rfrate(k,5,2)*colamt(k,2)
6105 specparm1 = colamt(k,4) / speccomb1
6106 specmult1 = 8.0 * min(specparm1,
oneminus)
6107 js1 = 1 + int(specmult1)
6108 fs1 = mod(specmult1,
f_one)
6109 ind1 = (jp(k)*5 + (jt1(k)-1)) *
nspa(15) + js1
6111 speccomb_mn2 = colamt(k,4) + refrat_m_a*colamt(k,2)
6112 specparm_mn2 = colamt(k,4) / speccomb_mn2
6113 specmult_mn2 = 8.0 * min(specparm_mn2,
oneminus)
6114 jmn2 = 1 + int(specmult_mn2)
6115 fmn2 = mod(specmult_mn2,
f_one)
6117 speccomb_planck = colamt(k,4) + refrat_planck_a*colamt(k,2)
6118 specparm_planck = colamt(k,4) / speccomb_planck
6119 specmult_planck = 8.0 * min(specparm_planck,
oneminus)
6120 jpl = 1 + int(specmult_planck)
6121 fpl = mod(specmult_planck,
f_one)
6123 scalen2 = colbrd(k) * scaleminor(k)
6134 if (specparm < 0.125 .and. specparm1 < 0.125)
then 6138 fk10 =
f_one - p0 - 2.0*p40
6144 fk11 =
f_one - p1 - 2.0*p41
6160 elseif (specparm > 0.875 .and. specparm1 > 0.875)
then 6164 fk10 =
f_one - p0 - 2.0*p40
6170 fk11 =
f_one - p1 - 2.0*p41
6210 fac000 = fk00 * fac00(k)
6211 fac100 = fk10 * fac00(k)
6212 fac200 = fk20 * fac00(k)
6213 fac010 = fk00 * fac10(k)
6214 fac110 = fk10 * fac10(k)
6215 fac210 = fk20 * fac10(k)
6217 fac001 = fk01 * fac01(k)
6218 fac101 = fk11 * fac01(k)
6219 fac201 = fk21 * fac01(k)
6220 fac011 = fk01 * fac11(k)
6221 fac111 = fk11 * fac11(k)
6222 fac211 = fk21 * fac11(k)
6225 tauself = selffac(k)* (
selfref(ig,inds) + selffrac(k) &
6227 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
6229 n2m1 =
ka_mn2(ig,jmn2,indm) + fmn2 &
6231 n2m2 =
ka_mn2(ig,jmn2,indmp) + fmn2 &
6233 taun2 = scalen2 * (n2m1 + minorfrac(k) * (n2m2 - n2m1))
6235 taug(
ns15+ig,k) = speccomb &
6236 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
6237 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
6238 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210)) &
6240 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
6241 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
6242 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211)) &
6243 & + tauself + taufor + taun2
6252 do k = laytrop+1, nlay
6275 integer :: k, ind0, ind0p, ind1, ind1p, inds, indsp, indf, indfp, &
6276 & id000, id010, id100, id110, id200, id210, jpl, jplp, &
6277 & id001, id011, id101, id111, id201, id211, ig, js, js1
6279 real (kind=kind_phys) :: tauself, taufor, refrat_planck_a, &
6280 & speccomb, specparm, specmult, fs, &
6281 & speccomb1, specparm1, specmult1, fs1, &
6282 & speccomb_planck,specparm_planck,specmult_planck,fpl, &
6283 & fac000, fac100, fac200, fac010, fac110, fac210, &
6284 & fac001, fac101, fac201, fac011, fac111, fac211, &
6285 & p0, p40, fk00, fk10, fk20, p1, p41, fk01, fk11, fk21
6297 speccomb = colamt(k,1) + rfrate(k,4,1)*colamt(k,5)
6298 specparm = colamt(k,1) / speccomb
6299 specmult = 8.0 * min(specparm,
oneminus)
6300 js = 1 + int(specmult)
6301 fs = mod(specmult,
f_one)
6302 ind0 = ((jp(k)-1)*5 + (jt(k)-1)) *
nspa(16) + js
6304 speccomb1 = colamt(k,1) + rfrate(k,4,2)*colamt(k,5)
6305 specparm1 = colamt(k,1) / speccomb1
6306 specmult1 = 8.0 * min(specparm1,
oneminus)
6307 js1 = 1 + int(specmult1)
6308 fs1 = mod(specmult1,
f_one)
6309 ind1 = (jp(k)*5 + (jt1(k)-1)) *
nspa(16) + js1
6311 speccomb_planck = colamt(k,1) + refrat_planck_a*colamt(k,5)
6312 specparm_planck = colamt(k,1) / speccomb_planck
6313 specmult_planck = 8.0 * min(specparm_planck,
oneminus)
6314 jpl = 1 + int(specmult_planck)
6315 fpl = mod(specmult_planck,
f_one)
6323 if (specparm < 0.125 .and. specparm1 < 0.125)
then 6327 fk10 =
f_one - p0 - 2.0*p40
6333 fk11 =
f_one - p1 - 2.0*p41
6349 elseif (specparm > 0.875 .and. specparm1 > 0.875)
then 6353 fk10 =
f_one - p0 - 2.0*p40
6359 fk11 =
f_one - p1 - 2.0*p41
6399 fac000 = fk00 * fac00(k)
6400 fac100 = fk10 * fac00(k)
6401 fac200 = fk20 * fac00(k)
6402 fac010 = fk00 * fac10(k)
6403 fac110 = fk10 * fac10(k)
6404 fac210 = fk20 * fac10(k)
6406 fac001 = fk01 * fac01(k)
6407 fac101 = fk11 * fac01(k)
6408 fac201 = fk21 * fac01(k)
6409 fac011 = fk01 * fac11(k)
6410 fac111 = fk11 * fac11(k)
6411 fac211 = fk21 * fac11(k)
6414 tauself = selffac(k)* (
selfref(ig,inds) + selffrac(k) &
6416 taufor = forfac(k) * (
forref(ig,indf) + forfrac(k) &
6419 taug(
ns16+ig,k) = speccomb &
6420 & * (fac000*
absa(ig,id000) + fac010*
absa(ig,id010) &
6421 & + fac100*
absa(ig,id100) + fac110*
absa(ig,id110) &
6422 & + fac200*
absa(ig,id200) + fac210*
absa(ig,id210)) &
6424 & * (fac001*
absa(ig,id001) + fac011*
absa(ig,id011) &
6425 & + fac101*
absa(ig,id101) + fac111*
absa(ig,id111) &
6426 & + fac201*
absa(ig,id201) + fac211*
absa(ig,id211)) &
6427 & + tauself + taufor
6436 do k = laytrop+1, nlay
6437 ind0 = ((jp(k)-13)*5 + (jt(k)-1)) *
nspb(16) + 1
6438 ind1 = ((jp(k)-12)*5 + (jt1(k)-1)) *
nspb(16) + 1
6444 taug(
ns16+ig,k) = colamt(k,5) &
6445 & * (fac00(k)*
absb(ig,ind0) + fac10(k)*
absb(ig,ind0p) &
6446 & + fac01(k)*
absb(ig,ind1) + fac11(k)*
absb(ig,ind1p))
real(kind=kind_phys), parameter con_amo3
molecular wght of o3 (g/mol)
real(kind=kind_phys), dimension(ng09, mfr09), public forref
This module sets up absorption coefficients for band 12: 1800-2080 cm-1 (low - h2o, co2; high - /)
real(kind=kind_phys), dimension(ng10, mfr10), public forref
integer, parameter ngptlw
num of total g-points
real(kind=kind_phys), dimension(ng02, msa02), public absa
real(kind=kind_phys), dimension(ng14), public fracrefa
real(kind=kind_phys), dimension(ng08, msb08), public absb
real(kind=kind_phys), dimension(ng01), public fracrefa
real(kind=kind_phys), dimension(nbands) a0
real(kind=kind_phys), parameter cldmin
real(kind=kind_phys), parameter bpade
real(kind=kind_phys), dimension(ng13, mfr13), public forref
real(kind=kind_phys), dimension(ng13, msf13), public selfref
real(kind=kind_phys), dimension(ng01, mfr01), public forref
real(kind=kind_phys), parameter wtdiff
real(kind=kind_phys), dimension(ng08, mmc08), public ka_mco2
This module sets up absorption coefficients for band 15: 2380-2600 cm-1 (low - n2o, co2; high - /)
real(kind=kind_phys), dimension(nbands) delwave
real(kind=kind_phys), dimension(ng04, maf04), public fracrefa
real(kind=kind_phys), dimension(58, nbands) absliq1
Hu and Stamnes method. the liquid water absorption coefficients are listed for a range of effective r...
real(kind=kind_phys), dimension(ng04, msf04), public selfref
real(kind=kind_phys), dimension(ng03, maf03), public fracrefa
real(kind=kind_phys), dimension(ng03, maf03, mmn03), public ka_mn2o
real(kind=kind_phys), dimension(ng12, maf12), public fracrefa
real(kind=kind_phys), dimension(ng14, mfr14), public forref
integer, parameter ipsdlw0
real(kind=kind_phys), dimension(ng05, mbf05), public fracrefb
real(kind=kind_phys), dimension(ng03, msa03), public absa
This module sets up absorption coefficients for band 06: 820-980 cm-1 (low - h2o; high - /) ...
real(kind=kind_phys), dimension(ng08, msa08), public absa
real(kind=kind_phys), dimension(ng04, msa04), public absa
integer, save ilwcice
lw optical property for ice clouds (only ilwcliq>0) =0:not defined yet =1:input cip...
real(kind=kind_phys), dimension(ng11, mfr11), public forref
real(kind=kind_phys), dimension(ng16, msf16), public selfref
real(kind=kind_phys), dimension(ng06, msa06), public absa
real(kind=kind_phys), dimension(nbands) a2
integer, parameter ilwrgas
lw rare gases effect control flag (ch4,n2o,o2,cfcs,...) =0:no; =1:yes.
real(kind=kind_phys), dimension(43, nbands) absice2
for iflagice =2, absice2 are the ice water absorption coefficients used for streamer method...
real(kind=kind_phys), dimension(ng14, msb14), public absb
real(kind=kind_phys), dimension(59) preflog
real(kind=kind_phys), dimension(ng06), public cfc11adj
integer, parameter maxxsec
num of halocarbon gasees
This module sets up absorption coefficients for band 09: 1180-1390 cm-1 (low - h2o, ch4; high - ch4)
real(kind=kind_phys), dimension(ng13, maf13, mmo13), public ka_mco2
This module sets up absorption coefficients for band 11: 1480-1800 cm-1 (low - h2o; high - h2o) ...
real(kind=kind_phys), dimension(ng02), public fracrefb
real(kind=kind_phys), dimension(ng11, msa11), public absa
real(kind=kind_phys), dimension(ng11, msb11), public absb
define type construct for optional radiation flux profiles
real(kind=kind_phys), parameter f_one
This module sets up absorption coefficients for band 02: 250-500 cm-1 (low - h2o; high - h2o) ...
real(kind=kind_phys), dimension(ng07, maf07), public fracrefa
real(kind=kind_phys), dimension(ng10), public fracrefb
real(kind=kind_phys), parameter absrain
absrain is the rain drop absorption coefficient (m2/g)
real(kind=kind_phys), dimension(ng04, msb04), public absb
real(kind=kind_phys), dimension(ng07, msb07), public absb
real(kind=kind_phys), dimension(ng13, maf13), public fracrefa
real(kind=kind_phys), dimension(ng16, msb16), public absb
real(kind=kind_phys), dimension(ng01, mmn01), public ka_mn2
integer, dimension(nbands) ipat
ipat is bands index for ebert&curry ice cloud (for iflagice=1)
real(kind=kind_phys), dimension(ng15, maf15), public fracrefa
real(kind=kind_phys), dimension(ng05, msa05), public absa
This module contains some the most frequently used math and physics constants for gcm models...
real(kind=kind_phys), parameter oneminus
real(kind=kind_phys), dimension(ng08, msf08), public selfref
real(kind=kind_phys), dimension(ng16, mfr16), public forref
real(kind=kind_phys), dimension(nbands) a1
This module sets up absorption coefficients for band 05: 700-820 cm-1 (low - h2o, co2; high - co2...
real(kind=kind_phys), dimension(ng01, msb01), public absb
real(kind=kind_phys), dimension(ng02, msf02), public selfref
real(kind=kind_phys), dimension(ng15, msa15), public absa
real(kind=kind_phys), parameter amdw
real(kind=kind_phys), dimension(7, 59) chi_mls
real(kind=kind_phys), parameter abssnow0
abssnow0 is the snow flake absorption coefficient (micron), fu coeff
real(kind=kind_phys), dimension(ng07, mfr07), public forref
subroutine mcica_subcol
This suroutine computes sub-colum cloud profile flag array.
real(kind=kind_phys), parameter amdo3
real(kind=kind_phys), dimension(ng06, mfr06), public forref
This module contains reference temperature and pressure.
real(kind=kind_phys), dimension(ng10, msf10), public selfref
real(kind=kind_phys), dimension(ng02), public fracrefa
integer, save iovrlw
cloud overlapping control flag for lw
real(kind=kind_phys), dimension(nplnk, nbands), public totplnk
real(kind=kind_phys), dimension(ng14, msf14), public selfref
This module sets up absorption coefficients for band 14: 2250-2380 cm-1 (low - co2; high - co2) ...
This module defines commonly used control variables/parameters in physics related programs...
real(kind=kind_phys), dimension(ng12, msf12), public selfref
real(kind=kind_phys), dimension(46, nbands) absice3
for iflagice = 3, absice3 are the ice water absorption coefficients used for fu parameterization. particle size 5 - 140 micron in increments of 3 microns. units = m2/g. hexagonal ice particle parameterization absorption units (abs coef/iwc): [(m^-1)/(g m^-3)]
real(kind=kind_phys), dimension(nbands) semiss0
real(kind=kind_phys), dimension(ng15, msf15), public selfref
This module sets up absorption coefficients for band 01: 10-250 cm-1 (low - h2o; high - h2o) ...
real(kind=kind_phys), dimension(ng09, msa09), public absa
real(kind=kind_phys), dimension(ng12, mfr12), public forref
real(kind=kind_phys), dimension(ng09, mmn09), public kb_mn2o
real(kind=kind_phys), dimension(ng11), public fracrefb
real(kind=kind_phys), dimension(ng07, msf07), public selfref
real(kind=kind_phys), dimension(0:ntbl) tau_tbl
real(kind=kind_phys), dimension(ng03, mbf03), public fracrefb
integer, parameter ntbl
lookup table dimension
integer, dimension(nbands) nspa
integer, save isubclw
sub-column cloud approx flag in lw radiation
integer, dimension(nbands) nspb
real(kind=kind_phys), dimension(ng02, mfr02), public forref
real(kind=kind_phys), dimension(ng11, msf11), public selfref
subroutine rtrn
This subroutine computes the upward/downward radiative fluxes, and heating rates for both clear or cl...
real(kind=kind_phys), dimension(ng01, msf01), public selfref
integer, save ivflip
vertical profile indexing flag
real(kind=kind_phys), dimension(ng05, msf05), public selfref
This module sets up absorption coefficients for band 08: 1080-1180 cm-1 (low - h2o; high - o3) ...
real(kind=kind_phys), dimension(ng09), public fracrefb
real(kind=kind_phys), dimension(ng13, mmo13), public kb_mo3
real(kind=kind_phys), dimension(59) tref
real(kind=kind_phys), dimension(ng13), public fracrefb
real(kind=kind_phys), dimension(ng10, msb10), public absb
This module sets up absorption coefficients for band 10: 1390-1480 cm-1 (low - h2o; high - h2o) ...
real(kind=kind_phys), dimension(ng11, mmo11), public ka_mo2
integer, save ilwcliq
lw optical property for liquid clouds =0:input cld opt depth, ignoring ilwcice setting =1:input c...
define type construct for radiation fluxes at surface
real(kind=kind_phys), dimension(ng07), public fracrefb
real(kind=kind_phys), dimension(ng05, maf05, mmo05), public ka_mo3
real(kind=kind_phys), dimension(ng04, mfr04), public forref
real(kind=kind_phys), dimension(ng08), public fracrefb
real(kind=kind_phys), parameter eps
real(kind=kind_phys), dimension(ng01), public fracrefb
subroutine setcoef
This subroutine computes various coefficients needed in radiative transfer calculations.
real(kind=kind_phys), dimension(ng05, mfr05), public forref
real(kind=kind_phys), dimension(ng14, msa14), public absa
This module contains LW band parameters set up.
This module includes ncep's modifications of the rrtm-lw radiation ! code from aer inc...
real(kind=kind_phys), dimension(ng16, maf16), public fracrefa
real(kind=kind_phys), dimension(ng09, maf09), public fracrefa
real(kind=kind_phys), parameter con_amw
molecular wght of water vapor (g/mol)
integer, parameter ilwrate
lw heating rate unit =1:k/day; =2:k/second.
This module sets up absorption coefficients for band 13: 2080-2250 cm-1 (low - h2o, n2o; high - /)
real(kind=kind_phys), dimension(ng01, mmn01), public kb_mn2
real(kind=kind_phys), dimension(0:ntbl) tfn_tbl
real(kind=kind_phys) fluxfac
real(kind=kind_phys), dimension(ng07, maf07, mmc07), public ka_mco2
real(kind=kind_phys), dimension(ng08, mmc08), public kb_mn2o
integer, parameter nrates
num of ref rates of binary species
real(kind=kind_phys), parameter con_amd
molecular wght of dry air (g/mol)
real(kind=kind_phys), dimension(ng16), public fracrefb
character(40), parameter vtaglw
real(kind=kind_phys), parameter f_zero
real(kind=kind_phys), dimension(0:ntbl) exp_tbl
This module sets up absorption coefficients for band 04: 630-700 cm-1 (low - h2o, co2; high - co2...
real(kind=kind_phys), dimension(ng05), public ccl4
real(kind=kind_phys), dimension(ng03, mbf03, mmn03), public kb_mn2o
real(kind=kind_phys), dimension(2, 5) absice1
for iflagice = 1, absice1 are the ice water absorption coefficients used for ebert and curry method ...
real(kind=kind_phys), dimension(ng08, mmc08), public kb_mco2
subroutine cldprop
This subroutine computes the cloud optical depth(s) for each cloudy layer and g-point interval...
real(kind=kind_phys), dimension(ng06, msf06), public selfref
real(kind=kind_phys), parameter con_g
gravity (m/s2)
real(kind=kind_phys), dimension(ng09, msb09), public absb
real(kind=kind_phys), dimension(ng15, maf15, mmn15), public ka_mn2
real(kind=kind_phys), dimension(ng10), public fracrefa
This module sets up absorption coefficients for band 07: 980-1080 cm-1 (low - h2o, o3; high - o3)
subroutine, public lwrad
This subroutine is the main lw radiation routine.
real(kind=kind_phys), dimension(ng07, msa07), public absa
real(kind=kind_phys), dimension(ng07, mmc07), public kb_mco2
real(kind=kind_phys), dimension(ng08, mmc08), public ka_mo3
real(kind=kind_phys), dimension(ng06), public cfc12
real(kind=kind_phys), dimension(ng15, mfr15), public forref
real(kind=kind_phys), dimension(ng11), public fracrefa
real(kind=kind_phys), dimension(ng13, msa13), public absa
define type construct for radiation fluxes at toa
real(kind=kind_phys), dimension(ng05, msb05), public absb
real(kind=kind_phys), dimension(ng16, msa16), public absa
real(kind=kind_phys), dimension(ng06, mmc06), public ka_mco2
real(kind=kind_phys), dimension(ng04, mbf04), public fracrefb
real(kind=kind_phys), dimension(ng13, maf13, mmo13), public ka_mco
real(kind=kind_phys) heatfac
real(kind=kind_phys), dimension(ng11, mmo11), public kb_mo2
real(kind=kind_phys), parameter con_cp
spec heat air at p (J/kg/K)
This module sets up absorption coefficients for band 16: 2600-3000 cm-1 (low - h2o, ch4; high - /)
real(kind=kind_phys), dimension(ng09, maf09, mmn09), public ka_mn2o
real(kind=kind_phys), dimension(ng03, mfr03), public forref
real(kind=kind_phys), dimension(ng08, mfr08), public forref
real(kind=kind_phys), dimension(ng06), public fracrefa
real(kind=kind_phys), dimension(ng08), public cfc12
real(kind=kind_phys), dimension(ng10, msa10), public absa
This module contains cloud property coefficients.
real(kind=kind_phys), parameter con_avgd
avogadro constant (1/mol)
integer, parameter maxgas
max num of absorbing gases
subroutine, public rlwinit
This subroutine performs calculations necessary for the initialization of the longwave model...
This module sets up absorption coefficients for band 03: 500-630 cm-1 (low - h2o, co2; high - h2o...
real(kind=kind_phys), dimension(ng05, maf05), public fracrefa
real(kind=kind_phys), dimension(ng08), public fracrefa
real(kind=kind_phys), dimension(ng01, msa01), public absa
real(kind=kind_phys), parameter tblint
real(kind=kind_phys), dimension(ng03, msf03), public selfref
real(kind=kind_phys), dimension(ng12, msa12), public absa
real(kind=kind_phys), dimension(ng03, msb03), public absb
real(kind=kind_phys), dimension(ng02, msb02), public absb
This module contains plank flux data.
real(kind=kind_phys), dimension(ng14), public fracrefb
real(kind=kind_phys), dimension(ng09, msf09), public selfref
integer, parameter nbands
num of total spectral bands
real(kind=kind_phys), parameter stpfac
real(kind=kind_phys), dimension(ng08, mmc08), public ka_mn2o
integer, dimension(ngptlw) ngb
real(kind=kind_phys), dimension(ng08), public cfc22adj
integer, save icldflg
cloud optical property scheme control flag