#include <misc.h> #include <params.h> subroutine radabs(pbr ,pnm ,co2em ,co2eml ,tplnka , 1,2 $ s2c ,s2t ,w ,h2otr ,plco2 , $ plh2o ,co2t ,tint ,tlayr ,plol , $ plos ,pmln ,piln ,ucfc11 ,ucfc12 , $ un2o0 ,un2o1 ,uch4 ,uco211 ,uco212 , $ uco213 ,uco221 ,uco222 ,uco223 ,uptype , $ bn2o0 ,bn2o1 ,bch4 ,abplnk1 ,abplnk2 , $ abstot ,absnxt ) C----------------------------------------------------------------------- C C Compute absorptivities for h2o, co2, o3, ch4, n2o, cfc11 and cfc12 C C h2o .... Uses nonisothermal emissivity for water vapor from C Ramanathan, V. and P.Downey, 1986: A Nonisothermal C Emissivity and Absorptivity Formulation for Water Vapor C Journal of Geophysical Research, vol. 91., D8, pp 8649-8666 C C co2 .... Uses absorptance parameterization of the 15 micro-meter C (500 - 800 cm-1) band system of Carbon Dioxide, from C Kiehl, J.T. and B.P.Briegleb, 1991: A New Parameterization C of the Absorptance Due to the 15 micro-meter Band System C of Carbon Dioxide Jouranl of Geophysical Research, C vol. 96., D5, pp 9013-9019. C Parameterizations for the 9.4 and 10.4 mircon bands of CO2 C are also included. C C o3 .... Uses absorptance parameterization of the 9.6 micro-meter C band system of ozone, from Ramanathan, V. and R.Dickinson, C 1979: The Role of stratospheric ozone in the zonal and C seasonal radiative energy balance of the earth-troposphere C system. Journal of the Atmospheric Sciences, Vol. 36, C pp 1084-1104 C C ch4 .... Uses a broad band model for the 7.7 micron band of methane. C C n20 .... Uses a broad band model for the 7.8, 8.6 and 17.0 micron C bands of nitrous oxide C C cfc11 ... Uses a quasi-linear model for the 9.2, 10.7, 11.8 and 12.5 C micron bands of CFC11 C C cfc12 ... Uses a quasi-linear model for the 8.6, 9.1, 10.8 and 11.2 C micron bands of CFC12 C C C Computes individual absorptivities for non-adjacent layers, accounting C for band overlap, and sums to obtain the total; then, computes the C nearest layer contribution. C C---------------------------Code history-------------------------------- C C Original version: CCM1 C Standardized: J. Rosinski, June 1992 C Reviewed: J. Kiehl, B. Briegleb, August 1992 C Reviewed: J. Kiehl, April 1996 C Reviewed: B. Briegleb, May 1996 C C----------------------------------------------------------------------- c c $Id: radabs.F,v 1.1.16.1 1998/08/17 21:41:08 zender Exp $ c #include <implicit.h> C------------------------------Parameters------------------------------- #include <prgrid.h> C------------------------------Commons---------------------------------- #include <crdcae.h> C----------------------------------------------------------------------- #include <crdcon.h> C----------------------------------------------------------------------- #include <comvmr.h> C------------------------------Arguments-------------------------------- C C Input arguments C real pbr(plond,plev) ! Prssr at mid-levels (dynes/cm2) real pnm(plond,plevp) ! Prssr at interfaces (dynes/cm2) real co2em(plond,plevp) ! Co2 emissivity function real co2eml(plond,plev) ! Co2 emissivity function real tplnka(plond,plevp) ! Planck fnctn level temperature real s2c(plond,plevp) ! H2o continuum path length real s2t(plond,plevp) ! H2o tmp and prs wghted path real w(plond,plevp) ! H2o prs wghted path real h2otr(plond,plevp) ! H2o trnsmssn fnct for o3 overlap real plco2(plond,plevp) ! Co2 prs wghted path length real plh2o(plond,plevp) ! H2o prs wfhted path length real co2t(plond,plevp) ! Tmp and prs wghted path length real tint(plond,plevp) ! Interface temperatures real tlayr(plond,plevp) ! K-1 level temperatures real plol(plond,plevp) ! Ozone prs wghted path length real plos(plond,plevp) ! Ozone path length real pmln(plond,plev) ! Ln(pmidm1) real piln(plond,plevp) ! Ln(pintm1) c c Trace gas variables c real ucfc11(plond,plevp) ! CFC11 path length real ucfc12(plond,plevp) ! CFC12 path length real un2o0(plond,plevp) ! N2O path length real un2o1(plond,plevp) ! N2O path length (hot band) real uch4(plond,plevp) ! CH4 path length real uco211(plond,plevp) ! CO2 9.4 micron band path length real uco212(plond,plevp) ! CO2 9.4 micron band path length real uco213(plond,plevp) ! CO2 9.4 micron band path length real uco221(plond,plevp) ! CO2 10.4 micron band path length real uco222(plond,plevp) ! CO2 10.4 micron band path length real uco223(plond,plevp) ! CO2 10.4 micron band path length real uptype(plond,plevp) ! continuum path length real bn2o0(plond,plevp) ! pressure factor for n2o real bn2o1(plond,plevp) ! pressure factor for n2o real bch4(plond,plevp) ! pressure factor for ch4 real abplnk1(14,plond,plevp) ! non-nearest layer Planck factor real abplnk2(14,plond,plevp) ! nearest layer factor real abstrc(plond) ! total trace gas absorptivity real bplnk(14,plond,4) ! Planck functions for sub-divided layers C C Output arguments C real abstot(plond,plevp,plevp) ! Total absorptivity real absnxt(plond,plev,4) ! Total nearest layer absorptivity C C---------------------------Local variables----------------------------- C integer i ! Longitude index integer k ! Level index integer k1 ! Level index integer k2 ! Level index integer kn ! Nearest level index integer iband ! Band index integer wvl ! Wavelength index real pnew(plond) ! Effective pressure for H2O vapor linewidth real trline(plond,2) ! Transmission due to H2O lines in window real u(plond) ! Pressure weighted H2O path length real tbar(plond,4) ! Mean layer temperature real emm(plond,4) ! Mean co2 emissivity real o3emm(plond,4) ! Mean o3 emissivity real o3bndi ! Ozone band parameter real temh2o(plond,4) ! Mean layer temperature equivalent to tbar real k21 ! Exponential coefficient used to calculate C ! rotation band transmissvty in the 650-800 C ! cm-1 region (tr1) real k22 ! Exponential coefficient used to calculate C ! rotation band transmissvty in the 500-650 C ! cm-1 region (tr2) real uc1(plond) ! H2o continuum pathlength in 500-800 cm-1 real to3h2o(plond) ! H2o trnsmsn for overlap with o3 real pi ! For co2 absorptivity computation real sqti(plond) ! Used to store sqrt of mean temperature real et ! Co2 hot band factor real et2 ! Co2 hot band factor squared real et4 ! Co2 hot band factor to fourth power real omet ! Co2 stimulated emission term real f1co2 ! Co2 central band factor real f2co2(plond) ! Co2 weak band factor real f3co2(plond) ! Co2 weak band factor real t1co2(plond) ! Overlap factr weak bands on strong band real sqwp ! Sqrt of co2 pathlength real f1sqwp(plond) ! Main co2 band factor real oneme ! Co2 stimulated emission term real alphat ! Part of the co2 stimulated emission term real wco2 ! Constants used to define co2 pathlength real posqt ! Effective pressure for co2 line width real u7(plond) ! Co2 hot band path length real u8 ! Co2 hot band path length real u9 ! Co2 hot band path length real u13 ! Co2 hot band path length real rbeta7(plond) ! Inverse of co2 hot band line width par real rbeta8 ! Inverse of co2 hot band line width par real rbeta9 ! Inverse of co2 hot band line width par real rbeta13 ! Inverse of co2 hot band line width par real tpatha(plond) ! For absorptivity computation real a ! Eq(2) in table A3a of R&D real abso(plond,6) ! Absorptivity for various gases/bands real dtp(plond) ! Path temp minus 300 K used in h2o C ! rotation band absorptivity real dtx(plond) ! Planck temperature minus 250 K real dty(plond) ! Path temperature minus 250 K real dtz(plond) ! Planck temperature minus 300 K real term1(plond,4) ! Equation(5) in table A3a of R&D(1986) real term2(plond,4) ! Delta a(Te) in table A3a of R&D(1986) real term3(plond,4) ! DB/dT function for rotation and C ! vibration-rotation band absorptivity real term4(plond,4) ! Equation(6) in table A3a of R&D(1986) real term5(plond,4) ! Delta a(Tp) in table A3a of R&D(1986) real term6(plond,plevp) ! DB/dT function for window region real term7(plond,2) ! Kl_inf(i) in eq(8) of table A3a of R&D real term8(plond,2) ! Delta kl_inf(i) in eq(8) real term9(plond,plevp) ! DB/dT function for 500-800 cm-1 region real tr1 ! Eqn(6) in table A2 of R&D for 650-800 real tr10(plond) ! Eqn (6) times eq(4) in table A2 C ! of R&D for 500-650 cm-1 region real tr2 ! Eqn(6) in table A2 of R&D for 500-650 real tr5 ! Eqn(4) in table A2 of R&D for 650-800 real tr6 ! Eqn(4) in table A2 of R&D for 500-650 real tr9(plond) ! Equation (6) times eq(4) in table A2 C ! of R&D for 650-800 cm-1 region real uc(plond) ! Y + 0.002U in eq(8) of table A2 of R&D real sqrtu(plond) ! Sqrt of pressure weighted h20 pathlength real fwk(plond) ! Equation(33) in R&D far wing correction real fwku(plond) ! GU term in eqs(1) and (6) in table A2 real r2st(2) ! 1/(2*beta) in eq(10) in table A2 real dtyp15(plond) ! DeltaTp in eqs(11) & (12) in table A3a real dtyp15sq(plond) ! (DeltaTp)^2 in eqs(11) & (12) table A3a real to3co2(plond) ! P weighted temp in ozone band model real dpnm(plond) ! Pressure difference between two levels real pnmsq(plond,plevp) ! Pressure squared real dw(plond) ! Amount of h2o between two levels real uinpl(plond,4) ! Nearest layer subdivision factor real winpl(plond,4) ! Nearest layer subdivision factor real zinpl(plond,4) ! Nearest layer subdivision factor real pinpl(plond,4) ! Nearest layer subdivision factor real dplh2o(plond) ! Difference in press weighted h2o amount real r80257 ! Conversion factor for h2o pathlength real r293 ! 1/293 real r250 ! 1/250 real r3205 ! Line width factor for o3 (see R&Di) real r300 ! 1/300 real rsslp ! Reciprocal of sea level pressure real r2sslp ! 1/2 of rsslp real ds2c ! Y in eq(7) in table A2 of R&D real a11 ! A1 in table A3b for rotation band absorptivity real a31 ! A3 in table A3b for rotation band absorptivity real a21 ! First part in numerator of A2 in table A3b real a22 ! Second part in numerator of A2 in table A3b real a23 ! Denominator of A2 in table A3b (rotation band) real t1t4 ! Eq(3) in table A3a of R&D real t2t5 ! Eq(4) in table A3a of R&D real rsum ! Eq(1) in table A2 of R&D real a41 ! Numerator in A2 in Vib-rot abstivity(table A3b) real a51 ! Denominator in A2 in Vib-rot (table A3b) real a61 ! A3 factor for Vib-rot band in table A3b real phi ! Eq(11) in table A3a of R&D real psi ! Eq(12) in table A3a of R&D real cf812 ! Eq(11) in table A2 of R&D real ubar ! H2o scaled path see comment for eq(10) table A2 real pbar ! H2o scaled pres see comment for eq(10) table A2 real g4 ! Arguement in exp() in eq(10) table A2 real dplos ! Ozone pathlength eq(A2) in R&Di real dplol ! Presure weighted ozone pathlength real tlocal ! Local interface temperature real beta ! Ozone mean line parameter eq(A3) in R&Di C (includes Voigt line correction factor) real rphat ! Effective pressure for ozone beta real tcrfac ! Ozone temperature factor table 1 R&Di real tmp1 ! Ozone band factor see eq(A1) in R&Di real u1 ! Effective ozone pathlength eq(A2) in R&Di real realnu ! 1/beta factor in ozone band model eq(A1) real tmp2 ! Ozone band factor see eq(A1) in R&Di real u2 ! Effective ozone pathlength eq(A2) in R&Di real rsqti ! Reciprocal of sqrt of path temperature real tpath ! Path temperature used in co2 band model real tmp3 ! Weak band factor see K&B real rdpnmsq ! Reciprocal of difference in press^2 real rdpnm ! Reciprocal of difference in press real p1 ! Mean pressure factor real p2 ! Mean pressure factor real dtym10 ! T - 260 used in eq(9) and (10) table A3a real dplco2 ! Co2 path length real corfac ! Correction factors in table A3b real g2 ! Part of arguement in eq(10) in table A2 real te ! A_0 T factor in ozone model table 1 of R&Di real denom ! Denominator in eq(8) of table A3a of R&D real th2o(plond) ! transmission due to H2O real tco2(plond) ! transmission due to CO2 real to3(plond) ! transmission due to O3 C C Transmission terms for various spectral intervals: C real trab2(plond) ! H2o 500 - 800 cm-1 real trab4(plond) ! H2o 800 - 1000 cm-1 real trab6(plond) ! H2o 1000 - 1200 cm-1 real absbnd ! Proportional to co2 band absorptance real dbvtit(plond,plevp)! Intrfc drvtv plnck fnctn for o3 real dbvtly(plond,plev) ! Level drvtv plnck fnctn for o3 C C--------------------------Statement function--------------------------- C real dbvt,t ! Planck fnctn tmp derivative for o3 C dbvt(t)=(-2.8911366682e-4+(2.3771251896e-6+1.1305188929e-10*t)*t)/ $ (1.0+(-6.1364820707e-3+1.5550319767e-5*t)*t) C C----------------------------------------------------------------------- C C Initialize C do k=1,plev do i=1,plon dbvtly(i,k) = dbvt(tlayr(i,k+1)) dbvtit(i,k) = dbvt(tint(i,k)) end do end do do i=1,plon dbvtit(i,plevp) = dbvt(tint(i,plevp)) end do C r80257 = 1./8.0257e-04 r293 = 1./293. r250 = 1./250. r3205 = 1./.3205 r300 = 1./300. rsslp = 1./sslp r2sslp = 1./(2.*sslp) r2st(1) = 1./(2.*st(1)) r2st(2) = 1./(2.*st(2)) C C Non-adjacent layer absorptivity: C C abso(i,1) 0 - 800 cm-1 h2o rotation band C abso(i,2) 1200 - 2200 cm-1 h2o vibration-rotation band C abso(i,3) 800 - 1200 cm-1 h2o window C abso(i,4) 500 - 800 cm-1 h2o rotation band overlap with co2 C abso(i,5) o3 9.6 micrometer band (nu3 and nu1 bands) C abso(i,6) co2 15 micrometer band system C do k=1,plevp do i=1,plon pnmsq(i,k) = pnm(i,k)**2 dtx(i) = tplnka(i,k) - 250. term6(i,k) = coeff(1,2) + coeff(2,2)*dtx(i)* $ (1. + c9*dtx(i)*(1. + c11*dtx(i)* $ (1. + c13*dtx(i)*(1. + c15*dtx(i))))) term9(i,k) = coefi(1,2) + coefi(2,2)*dtx(i)* $ (1. + c19*dtx(i)*(1. + c21*dtx(i)* $ (1. + c23*dtx(i)*(1. + c25*dtx(i))))) end do end do C C Non-nearest layer level loops C do 200 k1=plevp,1,-1 do 100 k2=plevp,1,-1 if(k1.eq.k2) go to 100 do i=1,plon dplh2o(i) = plh2o(i,k1) - plh2o(i,k2) u(i) = abs(dplh2o(i)) sqrtu(i) = sqrt(u(i)) ds2c = abs(s2c(i,k1) - s2c(i,k2)) dw(i) = abs(w(i,k1) - w(i,k2)) uc1(i) = (ds2c + 1.7e-3*u(i))*(1. + 2.*ds2c)/ $ (1. + 15.*ds2c) uc(i) = ds2c + 2.e-3*u(i) end do do i=1,plon pnew(i) = u(i)/dw(i) tpatha(i) = (s2t(i,k1) - s2t(i,k2))/dplh2o(i) dtx(i) = tplnka(i,k2) - 250. dty(i) = tpatha(i) - 250. dtyp15(i) = dty(i) + 15. dtyp15sq(i) = dtyp15(i)**2 dtz(i) = dtx(i) - 50. dtp(i) = dty(i) - 50. end do do iband=2,4,2 do i=1,plon term1(i,iband) = coefe(1,iband) + coefe(2,iband)* $ dtx(i)*(1. + c1(iband)*dtx(i)) term2(i,iband) = coefb(1,iband) + coefb(2,iband)* $ dtx(i)*(1. + c2(iband)*dtx(i)* $ (1. + c3(iband)*dtx(i))) term3(i,iband) = coefd(1,iband) + coefd(2,iband)* $ dtx(i)*(1. + c4(iband)*dtx(i)* $ (1. + c5(iband)*dtx(i))) term4(i,iband) = coefa(1,iband) + coefa(2,iband)* $ dty(i)*(1. + c6(iband)*dty(i)) term5(i,iband) = coefc(1,iband) + coefc(2,iband)* $ dty(i)*(1. + c7(iband)*dty(i)) end do end do C C abso(i,1) 0 - 800 cm-1 h2o rotation band C do i=1,plon a11 = 0.44 + 3.380e-4*dtz(i) - 1.520e-6*dtz(i)*dtz(i) a31 = 1.05 - 6.000e-3*dtp(i) + 3.000e-6*dtp(i)*dtp(i) a21 = 1.00 + 1.717e-3*dtz(i) - 1.133e-5*dtz(i)*dtz(i) a22 = 1.00 + 4.443e-3*dtp(i) + 2.750e-5*dtp(i)*dtp(i) a23 = 1.00 + 3.600*sqrtu(i) corfac = a31*(a11 + ((2.*a21*a22)/a23)) t1t4 = term1(i,2)*term4(i,2) t2t5 = term2(i,2)*term5(i,2) a = t1t4 + t2t5/(1. + t2t5*sqrtu(i)*corfac) fwk(i) = fwcoef + fwc1/(1. + fwc2*u(i)) fwku(i) = fwk(i)*u(i) rsum = exp(-a*(sqrtu(i) + fwku(i))) abso(i,1) = (1. - rsum)*term3(i,2) end do C C abso(i,2) 1200 - 2200 cm-1 h2o vibration-rotation band C do i=1,plon a41 = 1.75 - 3.960e-03*dtz(i) a51 = 1.00 + 1.3*sqrtu(i) a61 = 1.00 + 1.250e-03*dtp(i) + 6.250e-05*dtp(i)*dtp(i) corfac = .29*(1. + a41/a51)*a61 t1t4 = term1(i,4)*term4(i,4) t2t5 = term2(i,4)*term5(i,4) a = t1t4 + t2t5/(1. + t2t5*sqrtu(i)*corfac) rsum = exp(-a*(sqrtu(i) + fwku(i))) abso(i,2) = (1. - rsum)*term3(i,4) end do C C Line transmission in 800-1000 and 1000-1200 cm-1 intervals C do k=1,2 do i=1,plon phi = exp(a1(k)*dtyp15(i) + a2(k)*dtyp15sq(i)) psi = exp(b1(k)*dtyp15(i) + b2(k)*dtyp15sq(i)) ubar = dw(i)*phi*1.66*r80257 pbar = pnew(i)*(psi/phi) cf812 = cfa1 + (1. - cfa1)/(1. + ubar*pbar*10.) g2 = 1. + ubar*4.0*st(k)*cf812/pbar g4 = realk(k)*pbar*r2st(k)*(sqrt(g2) - 1.) trline(i,k) = exp(-g4) end do end do do i=1,plon term7(i,1) = coefj(1,1) + coefj(2,1)*dty(i)* $ (1. + c16*dty(i)) term8(i,1) = coefk(1,1) + coefk(2,1)*dty(i)* $ (1. + c17*dty(i)) term7(i,2) = coefj(1,2) + coefj(2,2)*dty(i)* $ (1. + c26*dty(i)) term8(i,2) = coefk(1,2) + coefk(2,2)*dty(i)* $ (1. + c27*dty(i)) end do C C abso(i,3) 800 - 1200 cm-1 h2o window C abso(i,4) 500 - 800 cm-1 h2o rotation band overlap with co2 C do i=1,plon k21 = term7(i,1) + term8(i,1)/ $ (1. + (c30 + c31*(dty(i)-10.)*(dty(i)-10.))*sqrtu(i)) k22 = term7(i,2) + term8(i,2)/ $ (1. + (c28 + c29*(dty(i)-10.))*sqrtu(i)) tr1 = exp(-(k21*(sqrtu(i) + fc1*fwku(i)))) tr2 = exp(-(k22*(sqrtu(i) + fc1*fwku(i)))) tr5 = exp(-((coefh(1,3) + coefh(2,3)*dtx(i))*uc1(i))) tr6 = exp(-((coefh(1,4) + coefh(2,4)*dtx(i))*uc1(i))) tr9(i) = tr1*tr5 tr10(i) = tr2*tr6 th2o(i) = tr10(i) trab2(i) = 0.65*tr9(i) + 0.35*tr10(i) trab4(i) = exp(-(coefg(1,3) + coefg(2,3)*dtx(i))*uc(i)) trab6(i) = exp(-(coefg(1,4) + coefg(2,4)*dtx(i))*uc(i)) abso(i,3) = term6(i,k2)*(1. - .5*trab4(i)*trline(i,2) - $ .5*trab6(i)*trline(i,1)) abso(i,4) = term9(i,k2)*.5*(tr1 - tr9(i) + tr2 - tr10(i)) end do if(k2.lt.k1) then do i=1,plon to3h2o(i) = h2otr(i,k1)/h2otr(i,k2) end do else do i=1,plon to3h2o(i) = h2otr(i,k2)/h2otr(i,k1) end do end if C C abso(i,5) o3 9.6 micrometer band (nu3 and nu1 bands) C do i=1,plon dpnm(i) = pnm(i,k1) - pnm(i,k2) to3co2(i) = (pnm(i,k1)*co2t(i,k1) - pnm(i,k2)*co2t(i,k2))/ $ dpnm(i) te = (to3co2(i)*r293)**.7 dplos = plos(i,k1) - plos(i,k2) dplol = plol(i,k1) - plol(i,k2) u1 = 18.29*abs(dplos)/te u2 = .5649*abs(dplos)/te rphat = dplol/dplos tlocal = tint(i,k2) tcrfac = sqrt(tlocal*r250)*te beta = r3205*(rphat + dpfo3*tcrfac) realnu = te/beta tmp1 = u1/sqrt(4. + u1*(1. + realnu)) tmp2 = u2/sqrt(4. + u2*(1. + realnu)) o3bndi = 74.*te*log(1. + tmp1 + tmp2) abso(i,5) = o3bndi*to3h2o(i)*dbvtit(i,k2) to3(i) = 1.0/(1. + 0.1*tmp1 + 0.1*tmp2) end do C C abso(i,6) co2 15 micrometer band system C do i=1,plon sqwp = sqrt(abs(plco2(i,k1) - plco2(i,k2))) et = exp(-480./to3co2(i)) sqti(i) = sqrt(to3co2(i)) rsqti = 1./sqti(i) et2 = et*et et4 = et2*et2 omet = 1. - 1.5*et2 f1co2 = 899.70*omet* $ (1. + 1.94774*et + 4.73486*et2)*rsqti f1sqwp(i) = f1co2*sqwp t1co2(i) = 1./(1. + (245.18*omet*sqwp*rsqti)) oneme = 1. - et2 alphat = oneme**3*rsqti pi = abs(dpnm(i)) wco2 = 2.5221*co2vmr*pi*rga u7(i) = 4.9411e4*alphat*et2*wco2 u8 = 3.9744e4*alphat*et4*wco2 u9 = 1.0447e5*alphat*et4*et2*wco2 u13 = 2.8388e3*alphat*et4*wco2 tpath = to3co2(i) tlocal = tint(i,k2) tcrfac = sqrt(tlocal*r250*tpath*r300) posqt = ((pnm(i,k2) + pnm(i,k1))*r2sslp + $ dpfco2*tcrfac)*rsqti rbeta7(i) = 1./(5.3228*posqt) rbeta8 = 1./(10.6576*posqt) rbeta9 = rbeta7(i) rbeta13 = rbeta9 f2co2(i) = (u7(i)/sqrt(4. + u7(i)*(1. + rbeta7(i)))) + $ (u8 /sqrt(4. + u8*(1. + rbeta8))) + $ (u9 /sqrt(4. + u9*(1. + rbeta9))) f3co2(i) = u13/sqrt(4. + u13*(1. + rbeta13)) end do if (k2.ge.k1) then do i=1,plon sqti(i) = sqrt(tlayr(i,k2)) end do end if C do i=1,plon tmp1 = log(1. + f1sqwp(i)) tmp2 = log(1. + f2co2(i)) tmp3 = log(1. + f3co2(i)) absbnd = (tmp1 + 2.*t1co2(i)*tmp2 + 2.*tmp3)*sqti(i) abso(i,6) = trab2(i)*co2em(i,k2)*absbnd tco2(i) = 1./(1.0+10.0*(u7(i)/sqrt(4. + u7(i)* $ (1. + rbeta7(i))))) end do c c Calculate absorptivity due to trace gases, abstrc c call trcab(k1, k2, ucfc11, ucfc12, un2o0, un2o1, $ uch4, uco211, uco212, uco213, $ uco221, uco222, uco223, bn2o0, $ bn2o1, bch4, to3co2, pnm, $ dw, pnew, s2c, uptype, $ u, abplnk1,tco2, th2o, $ to3, abstrc) C C Sum total absorptivity C do i=1,plon abstot(i,k1,k2) = abso(i,1) + abso(i,2) + abso(i,3) + $ abso(i,4) + abso(i,5) + abso(i,6) $ + abstrc(i) end do 100 continue 200 continue ! End of non-nearest layer level loops C C Non-adjacent layer absorptivity: C C abso(i,1) 0 - 800 cm-1 h2o rotation band C abso(i,2) 1200 - 2200 cm-1 h2o vibration-rotation band C abso(i,3) 800 - 1200 cm-1 h2o window C abso(i,4) 500 - 800 cm-1 h2o rotation band overlap with co2 C abso(i,5) o3 9.6 micrometer band (nu3 and nu1 bands) C abso(i,6) co2 15 micrometer band system C C Nearest layer level loop C do 500 k2=plev,1,-1 do i=1,plon tbar(i,1) = 0.5*(tint(i,k2+1) + tlayr(i,k2+1)) emm(i,1) = 0.5*(co2em(i,k2+1) + co2eml(i,k2)) tbar(i,2) = 0.5*(tlayr(i,k2+1) + tint(i,k2)) emm(i,2) = 0.5*(co2em(i,k2) + co2eml(i,k2)) tbar(i,3) = 0.5*(tbar(i,2) + tbar(i,1)) emm(i,3) = emm(i,1) tbar(i,4) = tbar(i,3) emm(i,4) = emm(i,2) o3emm(i,1) = 0.5*(dbvtit(i,k2+1) + dbvtly(i,k2)) o3emm(i,2) = 0.5*(dbvtit(i,k2) + dbvtly(i,k2)) o3emm(i,3) = o3emm(i,1) o3emm(i,4) = o3emm(i,2) temh2o(i,1) = tbar(i,1) temh2o(i,2) = tbar(i,2) temh2o(i,3) = tbar(i,1) temh2o(i,4) = tbar(i,2) dpnm(i) = pnm(i,k2+1) - pnm(i,k2) end do c c Weighted Planck functions for trace gases c do wvl = 1,14 do i = 1,plon bplnk(wvl,i,1) = 0.5*(abplnk1(wvl,i,k2+1) + $ abplnk2(wvl,i,k2)) bplnk(wvl,i,2) = 0.5*(abplnk1(wvl,i,k2) + $ abplnk2(wvl,i,k2)) bplnk(wvl,i,3) = bplnk(wvl,i,1) bplnk(wvl,i,4) = bplnk(wvl,i,2) end do end do do i=1,plon rdpnmsq = 1./(pnmsq(i,k2+1) - pnmsq(i,k2)) rdpnm = 1./dpnm(i) p1 = .5*(pbr(i,k2) + pnm(i,k2+1)) p2 = .5*(pbr(i,k2) + pnm(i,k2 )) uinpl(i,1) = (pnmsq(i,k2+1) - p1**2)*rdpnmsq uinpl(i,2) = -(pnmsq(i,k2 ) - p2**2)*rdpnmsq uinpl(i,3) = -(pnmsq(i,k2 ) - p1**2)*rdpnmsq uinpl(i,4) = (pnmsq(i,k2+1) - p2**2)*rdpnmsq winpl(i,1) = (.5*( pnm(i,k2+1) - pbr(i,k2)))*rdpnm winpl(i,2) = (.5*(-pnm(i,k2 ) + pbr(i,k2)))*rdpnm winpl(i,3) = (.5*( pnm(i,k2+1) + pbr(i,k2)) - pnm(i,k2 ))* $ rdpnm winpl(i,4) = (.5*(-pnm(i,k2 ) - pbr(i,k2)) + pnm(i,k2+1))* $ rdpnm tmp1 = 1./(piln(i,k2+1) - piln(i,k2)) tmp2 = piln(i,k2+1) - pmln(i,k2) tmp3 = piln(i,k2 ) - pmln(i,k2) zinpl(i,1) = (.5*tmp2 )*tmp1 zinpl(i,2) = ( - .5*tmp3)*tmp1 zinpl(i,3) = (.5*tmp2 - tmp3)*tmp1 zinpl(i,4) = ( tmp2 - .5*tmp3)*tmp1 pinpl(i,1) = 0.5*(p1 + pnm(i,k2+1)) pinpl(i,2) = 0.5*(p2 + pnm(i,k2 )) pinpl(i,3) = 0.5*(p1 + pnm(i,k2 )) pinpl(i,4) = 0.5*(p2 + pnm(i,k2+1)) end do do 400 kn=1,4 do i=1,plon u(i) = uinpl(i,kn)*abs(plh2o(i,k2) - plh2o(i,k2+1)) sqrtu(i) = sqrt(u(i)) dw(i) = abs(w(i,k2) - w(i,k2+1)) pnew(i) = u(i)/(winpl(i,kn)*dw(i)) ds2c = abs(s2c(i,k2) - s2c(i,k2+1)) uc1(i) = uinpl(i,kn)*ds2c uc1(i) = (uc1(i) + 1.7e-3*u(i))*(1. + 2.*uc1(i))/ $ (1. + 15.*uc1(i)) uc(i) = uinpl(i,kn)*ds2c + 2.e-3*u(i) end do do i=1,plon dtx(i) = temh2o(i,kn) - 250. dty(i) = tbar(i,kn) - 250. dtyp15(i) = dty(i) + 15. dtyp15sq(i) = dtyp15(i)**2 dtz(i) = dtx(i) - 50. dtp(i) = dty(i) - 50. end do do iband=2,4,2 do i=1,plon term1(i,iband) = coefe(1,iband) + coefe(2,iband)* $ dtx(i)*(1. + c1(iband)*dtx(i)) term2(i,iband) = coefb(1,iband) + coefb(2,iband)* $ dtx(i)*(1. + c2(iband)*dtx(i)* $ (1. + c3(iband)*dtx(i))) term3(i,iband) = coefd(1,iband) + coefd(2,iband)* $ dtx(i)*(1. + c4(iband)*dtx(i)* $ (1. + c5(iband)*dtx(i))) term4(i,iband) = coefa(1,iband) + coefa(2,iband)* $ dty(i)*(1. + c6(iband)*dty(i)) term5(i,iband) = coefc(1,iband) + coefc(2,iband)* $ dty(i)*(1. + c7(iband)*dty(i)) end do end do C C abso(i,1) 0 - 800 cm-1 h2o rotation band C do i=1,plon a11 = 0.44 + 3.380e-4*dtz(i) - 1.520e-6*dtz(i)*dtz(i) a31 = 1.05 - 6.000e-3*dtp(i) + 3.000e-6*dtp(i)*dtp(i) a21 = 1.00 + 1.717e-3*dtz(i) - 1.133e-5*dtz(i)*dtz(i) a22 = 1.00 + 4.443e-3*dtp(i) + 2.750e-5*dtp(i)*dtp(i) a23 = 1.00 + 3.600*sqrtu(i) corfac = a31*(a11 + ((2.*a21*a22)/a23)) t1t4 = term1(i,2)*term4(i,2) t2t5 = term2(i,2)*term5(i,2) a = t1t4 + t2t5/(1. + t2t5*sqrtu(i)*corfac) fwk(i) = fwcoef + fwc1/(1. + fwc2*u(i)) fwku(i) = fwk(i)*u(i) rsum = exp(-a*(sqrtu(i) + fwku(i))) abso(i,1) = (1. - rsum)*term3(i,2) end do C C abso(i,2) 1200 - 2200 cm-1 h2o vibration-rotation band C do i=1,plon a41 = 1.75 - 3.960e-03*dtz(i) a51 = 1.00 + 1.3*sqrtu(i) a61 = 1.00 + 1.250e-03*dtp(i) + 6.250e-05*dtp(i)*dtp(i) corfac = .29*(1. + a41/a51)*a61 t1t4 = term1(i,4)*term4(i,4) t2t5 = term2(i,4)*term5(i,4) a = t1t4 + t2t5/(1. + t2t5*sqrtu(i)*corfac) rsum = exp(-a*(sqrtu(i) + fwku(i))) abso(i,2) = (1. - rsum)*term3(i,4) end do C C Line transmission in 800-1000 and 1000-1200 cm-1 intervals C do k=1,2 do i=1,plon phi = exp(a1(k)*dtyp15(i) + a2(k)*dtyp15sq(i)) psi = exp(b1(k)*dtyp15(i) + b2(k)*dtyp15sq(i)) ubar = dw(i)*phi*winpl(i,kn)*1.66*r80257 pbar = pnew(i)*(psi/phi) cf812 = cfa1 + (1. - cfa1)/(1. + ubar*pbar*10.) g2 = 1. + ubar*4.0*st(k)*cf812/pbar g4 = realk(k)*pbar*r2st(k)*(sqrt(g2) - 1.) trline(i,k) = exp(-g4) end do end do do i=1,plon term7(i,1) = coefj(1,1) + coefj(2,1)*dty(i)* $ (1. + c16*dty(i)) term8(i,1) = coefk(1,1) + coefk(2,1)*dty(i)* $ (1. + c17*dty(i)) term7(i,2) = coefj(1,2) + coefj(2,2)*dty(i)* $ (1. + c26*dty(i)) term8(i,2) = coefk(1,2) + coefk(2,2)*dty(i)* $ (1. + c27*dty(i)) end do C C abso(i,3) 800 - 1200 cm-1 h2o window C abso(i,4) 500 - 800 cm-1 h2o rotation band overlap with co2 C do i=1,plon dtym10 = dty(i) - 10. denom = 1. + (c30 + c31*dtym10*dtym10)*sqrtu(i) k21 = term7(i,1) + term8(i,1)/denom denom = 1. + (c28 + c29*dtym10 )*sqrtu(i) k22 = term7(i,2) + term8(i,2)/denom term9(i,2) = coefi(1,2) + coefi(2,2)*dtx(i)* $ (1. + c19*dtx(i)*(1. + c21*dtx(i)* $ (1. + c23*dtx(i)*(1. + c25*dtx(i))))) tr1 = exp(-(k21*(sqrtu(i) + fc1*fwku(i)))) tr2 = exp(-(k22*(sqrtu(i) + fc1*fwku(i)))) tr5 = exp(-((coefh(1,3) + coefh(2,3)*dtx(i))*uc1(i))) tr6 = exp(-((coefh(1,4) + coefh(2,4)*dtx(i))*uc1(i))) tr9(i) = tr1*tr5 tr10(i) = tr2*tr6 trab2(i)= 0.65*tr9(i) + 0.35*tr10(i) th2o(i) = tr10(i) trab4(i)= exp(-(coefg(1,3) + coefg(2,3)*dtx(i))*uc(i)) trab6(i)= exp(-(coefg(1,4) + coefg(2,4)*dtx(i))*uc(i)) term6(i,2) = coeff(1,2) + coeff(2,2)*dtx(i)* $ (1. + c9*dtx(i)*(1. + c11*dtx(i)* $ (1. + c13*dtx(i)*(1. + c15*dtx(i))))) abso(i,3) = term6(i,2)*(1. - .5*trab4(i)*trline(i,2) - $ .5*trab6(i)*trline(i,1)) abso(i,4) = term9(i,2)*.5*(tr1 - tr9(i) + tr2 - tr10(i)) end do C C abso(i,5) o3 9.6 micrometer (nu3 and nu1 bands) C do i=1,plon te = (tbar(i,kn)*r293)**.7 dplos = abs(plos(i,k2+1) - plos(i,k2)) u1 = zinpl(i,kn)*18.29*dplos/te u2 = zinpl(i,kn)*.5649*dplos/te tlocal = tbar(i,kn) tcrfac = sqrt(tlocal*r250)*te beta = r3205*(pinpl(i,kn)*rsslp + dpfo3*tcrfac) realnu = te/beta tmp1 = u1/sqrt(4. + u1*(1. + realnu)) tmp2 = u2/sqrt(4. + u2*(1. + realnu)) o3bndi = 74.*te*log(1. + tmp1 + tmp2) abso(i,5) = o3bndi*o3emm(i,kn)* $ (h2otr(i,k2+1)/h2otr(i,k2)) to3(i) = 1.0/(1. + 0.1*tmp1 + 0.1*tmp2) end do C C abso(i,6) co2 15 micrometer band system C do 300 i=1,plon dplco2 = plco2(i,k2+1) - plco2(i,k2) sqwp = sqrt(uinpl(i,kn)*dplco2) et = exp(-480./tbar(i,kn)) sqti(i) = sqrt(tbar(i,kn)) rsqti = 1./sqti(i) et2 = et*et et4 = et2*et2 omet = (1. - 1.5*et2) f1co2 = 899.70*omet* $ (1. + 1.94774*et + 4.73486*et2)*rsqti f1sqwp(i)= f1co2*sqwp t1co2(i) = 1./(1. + (245.18*omet*sqwp*rsqti)) oneme = 1. - et2 alphat = oneme**3*rsqti pi = abs(dpnm(i))*winpl(i,kn) wco2 = 2.5221*co2vmr*pi*rga u7(i) = 4.9411e4*alphat*et2*wco2 u8 = 3.9744e4*alphat*et4*wco2 u9 = 1.0447e5*alphat*et4*et2*wco2 u13 = 2.8388e3*alphat*et4*wco2 tpath = tbar(i,kn) tlocal = tbar(i,kn) tcrfac = sqrt((tlocal*r250)*(tpath*r300)) posqt = (pinpl(i,kn)*rsslp + dpfco2*tcrfac)*rsqti rbeta7(i)= 1./(5.3228*posqt) rbeta8 = 1./(10.6576*posqt) rbeta9 = rbeta7(i) rbeta13 = rbeta9 f2co2(i) = u7(i)/sqrt(4. + u7(i)*(1. + rbeta7(i))) + $ u8 /sqrt(4. + u8*(1. + rbeta8)) + $ u9 /sqrt(4. + u9*(1. + rbeta9)) f3co2(i) = u13/sqrt(4. + u13*(1. + rbeta13)) tmp1 = log(1. + f1sqwp(i)) tmp2 = log(1. + f2co2(i)) tmp3 = log(1. + f3co2(i)) absbnd = (tmp1 + 2.*t1co2(i)*tmp2 + 2.*tmp3)*sqti(i) abso(i,6)= trab2(i)*emm(i,kn)*absbnd tco2(i) = 1.0/(1.0+ 10.0*u7(i)/sqrt(4. + u7(i)* $ (1. + rbeta7(i)))) 300 continue c c Calculate trace gas absorptivity for nearest layer, abstrc c call trcabn(k2 ,kn ,ucfc11 ,ucfc12 ,un2o0 , $ un2o1 ,uch4 ,uco211 ,uco212 ,uco213 , $ uco221 ,uco222 ,uco223 ,tbar ,bplnk , $ winpl ,pinpl ,tco2 ,th2o ,to3 , $ uptype ,dw ,s2c ,u ,pnew , $ abstrc ,uinpl) C C Total next layer absorptivity: C do i=1,plon absnxt(i,k2,kn) = abso(i,1) + abso(i,2) + abso(i,3) + $ abso(i,4) + abso(i,5) + abso(i,6) + $ abstrc(i) end do 400 continue 500 continue ! end of nearest layer level loop C return end