radae.f90

来自「CCSM Research Tools: Community Atmospher」· F90 代码 · 共 1,421 行 · 第 1/5 页

F90
1,421
字号
!            if (uvar < min_u_h2o) then               uscl = uvar / min_u_h2o               abso(i,ib) = abso(i,ib) * uscl            endif                         !! Band-dependent indices for window!            ib = 2            uvar = ub(ib) * fdif            log_u  = min(log10(max(uvar, min_u_h2o)), max_lu_h2o)            dvar = (log_u - min_lu_h2o) / dlu_h2o            iu = min(max(int(aint(dvar,r8)) + 1, 1), n_u - 1)            iu1 = iu + 1            wu = dvar - floor(dvar)            wu1 = 1.0 - wu                        log_p  = min(log10(max(pnewb(ib), min_p_h2o)), max_lp_h2o)            dvar = (log_p - min_lp_h2o) / dlp_h2o            ip = min(max(int(aint(dvar,r8)) + 1, 1), n_p - 1)            ip1 = ip + 1            wp = dvar - floor(dvar)            wp1 = 1.0 - wp                     w00_00 = wp  * w_0_00             w00_01 = wp  * w_0_01             w00_10 = wp  * w_0_10             w00_11 = wp  * w_0_11             w01_00 = wp  * w_1_00             w01_01 = wp  * w_1_01             w01_10 = wp  * w_1_10             w01_11 = wp  * w_1_11             w10_00 = wp1 * w_0_00             w10_01 = wp1 * w_0_01             w10_10 = wp1 * w_0_10             w10_11 = wp1 * w_0_11             w11_00 = wp1 * w_1_00             w11_01 = wp1 * w_1_01             w11_10 = wp1 * w_1_10             w11_11 = wp1 * w_1_11             log_uc  = min(log10(max(uch2o * fdif, min_u_h2o)), max_lu_h2o)            dvar = (log_uc - min_lu_h2o) / dlu_h2o            iuc = min(max(int(aint(dvar,r8)) + 1, 1), n_u - 1)            iuc1 = iuc + 1            wuc = dvar - floor(dvar)            wuc1 = 1.0 - wuc!! Asymptotic value of absorptivity as U->infinity!            fa = fat(1,ib) + &                 fat(2,ib) * te1 + &                 fat(3,ib) * te2 + &                 fat(4,ib) * te3 + &                 fat(5,ib) * te4 + &                 fat(6,ib) * te5            l_star = &                 ln_ah2ow(ip , itp , iu , ite , irh ) * w11_11 * wu1 + &                 ln_ah2ow(ip , itp , iu , ite , irh1) * w11_10 * wu1 + &                 ln_ah2ow(ip , itp , iu , ite1, irh ) * w11_01 * wu1 + &                 ln_ah2ow(ip , itp , iu , ite1, irh1) * w11_00 * wu1 + &                 ln_ah2ow(ip , itp , iu1, ite , irh ) * w11_11 * wu  + &                 ln_ah2ow(ip , itp , iu1, ite , irh1) * w11_10 * wu  + &                 ln_ah2ow(ip , itp , iu1, ite1, irh ) * w11_01 * wu  + &                 ln_ah2ow(ip , itp , iu1, ite1, irh1) * w11_00 * wu  + &                 ln_ah2ow(ip , itp1, iu , ite , irh ) * w10_11 * wu1 + &                 ln_ah2ow(ip , itp1, iu , ite , irh1) * w10_10 * wu1 + &                 ln_ah2ow(ip , itp1, iu , ite1, irh ) * w10_01 * wu1 + &                 ln_ah2ow(ip , itp1, iu , ite1, irh1) * w10_00 * wu1 + &                 ln_ah2ow(ip , itp1, iu1, ite , irh ) * w10_11 * wu  + &                 ln_ah2ow(ip , itp1, iu1, ite , irh1) * w10_10 * wu  + &                 ln_ah2ow(ip , itp1, iu1, ite1, irh ) * w10_01 * wu  + &                 ln_ah2ow(ip , itp1, iu1, ite1, irh1) * w10_00 * wu  + &                 ln_ah2ow(ip1, itp , iu , ite , irh ) * w01_11 * wu1 + &                 ln_ah2ow(ip1, itp , iu , ite , irh1) * w01_10 * wu1 + &                 ln_ah2ow(ip1, itp , iu , ite1, irh ) * w01_01 * wu1 + &                 ln_ah2ow(ip1, itp , iu , ite1, irh1) * w01_00 * wu1 + &                 ln_ah2ow(ip1, itp , iu1, ite , irh ) * w01_11 * wu  + &                 ln_ah2ow(ip1, itp , iu1, ite , irh1) * w01_10 * wu  + &                 ln_ah2ow(ip1, itp , iu1, ite1, irh ) * w01_01 * wu  + &                 ln_ah2ow(ip1, itp , iu1, ite1, irh1) * w01_00 * wu  + &                 ln_ah2ow(ip1, itp1, iu , ite , irh ) * w00_11 * wu1 + &                 ln_ah2ow(ip1, itp1, iu , ite , irh1) * w00_10 * wu1 + &                 ln_ah2ow(ip1, itp1, iu , ite1, irh ) * w00_01 * wu1 + &                 ln_ah2ow(ip1, itp1, iu , ite1, irh1) * w00_00 * wu1 + &                 ln_ah2ow(ip1, itp1, iu1, ite , irh ) * w00_11 * wu  + &                 ln_ah2ow(ip1, itp1, iu1, ite , irh1) * w00_10 * wu  + &                 ln_ah2ow(ip1, itp1, iu1, ite1, irh ) * w00_01 * wu  + &                 ln_ah2ow(ip1, itp1, iu1, ite1, irh1) * w00_00 * wu             c_star = &                 cn_ah2ow(ip , itp , iuc , ite , irh ) * w11_11 * wuc1 + &                 cn_ah2ow(ip , itp , iuc , ite , irh1) * w11_10 * wuc1 + &                 cn_ah2ow(ip , itp , iuc , ite1, irh ) * w11_01 * wuc1 + &                 cn_ah2ow(ip , itp , iuc , ite1, irh1) * w11_00 * wuc1 + &                 cn_ah2ow(ip , itp , iuc1, ite , irh ) * w11_11 * wuc  + &                 cn_ah2ow(ip , itp , iuc1, ite , irh1) * w11_10 * wuc  + &                 cn_ah2ow(ip , itp , iuc1, ite1, irh ) * w11_01 * wuc  + &                 cn_ah2ow(ip , itp , iuc1, ite1, irh1) * w11_00 * wuc  + &                 cn_ah2ow(ip , itp1, iuc , ite , irh ) * w10_11 * wuc1 + &                 cn_ah2ow(ip , itp1, iuc , ite , irh1) * w10_10 * wuc1 + &                 cn_ah2ow(ip , itp1, iuc , ite1, irh ) * w10_01 * wuc1 + &                 cn_ah2ow(ip , itp1, iuc , ite1, irh1) * w10_00 * wuc1 + &                 cn_ah2ow(ip , itp1, iuc1, ite , irh ) * w10_11 * wuc  + &                 cn_ah2ow(ip , itp1, iuc1, ite , irh1) * w10_10 * wuc  + &                 cn_ah2ow(ip , itp1, iuc1, ite1, irh ) * w10_01 * wuc  + &                 cn_ah2ow(ip , itp1, iuc1, ite1, irh1) * w10_00 * wuc  + &                 cn_ah2ow(ip1, itp , iuc , ite , irh ) * w01_11 * wuc1 + &                 cn_ah2ow(ip1, itp , iuc , ite , irh1) * w01_10 * wuc1 + &                 cn_ah2ow(ip1, itp , iuc , ite1, irh ) * w01_01 * wuc1 + &                 cn_ah2ow(ip1, itp , iuc , ite1, irh1) * w01_00 * wuc1 + &                 cn_ah2ow(ip1, itp , iuc1, ite , irh ) * w01_11 * wuc  + &                 cn_ah2ow(ip1, itp , iuc1, ite , irh1) * w01_10 * wuc  + &                 cn_ah2ow(ip1, itp , iuc1, ite1, irh ) * w01_01 * wuc  + &                 cn_ah2ow(ip1, itp , iuc1, ite1, irh1) * w01_00 * wuc  + &                 cn_ah2ow(ip1, itp1, iuc , ite , irh ) * w00_11 * wuc1 + &                 cn_ah2ow(ip1, itp1, iuc , ite , irh1) * w00_10 * wuc1 + &                 cn_ah2ow(ip1, itp1, iuc , ite1, irh ) * w00_01 * wuc1 + &                 cn_ah2ow(ip1, itp1, iuc , ite1, irh1) * w00_00 * wuc1 + &                 cn_ah2ow(ip1, itp1, iuc1, ite , irh ) * w00_11 * wuc  + &                 cn_ah2ow(ip1, itp1, iuc1, ite , irh1) * w00_10 * wuc  + &                 cn_ah2ow(ip1, itp1, iuc1, ite1, irh ) * w00_01 * wuc  + &                 cn_ah2ow(ip1, itp1, iuc1, ite1, irh1) * w00_00 * wuc             abso(i,ib) = min(max(fa * (1.0 - l_star * c_star), 0.0_r8), 1.0_r8) !! Invoke linear limit for scaling wrt u below min_u_h2o!            if (uvar < min_u_h2o) then               uscl = uvar / min_u_h2o               abso(i,ib) = abso(i,ib) * uscl            endif         end do!! Line transmission in 800-1000 and 1000-1200 cm-1 intervals!         do i=1,ncol            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!! 500 -  800 cm-1   h2o rotation band overlap with co2!         do i=1,ncol            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)         end do         if (k2 < k1) then            do i=1,ncol               to3h2o(i) = h2otr(i,k1)/h2otr(i,k2)            end do         else            do i=1,ncol               to3h2o(i) = h2otr(i,k2)/h2otr(i,k1)            end do         end if!! abso(i,3)   o3  9.6 micrometer band (nu3 and nu1 bands)!         do i=1,ncol            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,3) = o3bndi*to3h2o(i)*dbvtit(i,k2)            to3(i)   = 1.0/(1. + 0.1*tmp1 + 0.1*tmp2)         end do!! abso(i,4)      co2 15  micrometer band system!         do i=1,ncol            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 >= k1) then            do i=1,ncol               sqti(i) = sqrt(tlayr(i,k2))            end do         end if!         do i=1,ncol            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,4) = trab2(i)*co2em(i,k2)*absbnd            tco2(i)   = 1./(1.0+10.0*(u7(i)/sqrt(4. + u7(i)*(1. + rbeta7(i)))))         end do!! Calculate absorptivity due to trace gases, abstrc!         call trcab( lchnk   ,ncol    ,                   &            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  )!! Sum total absorptivity!         do i=1,ncol            abstot(i,k1,k2) = abso(i,1) + abso(i,2) + &               abso(i,3) + abso(i,4) + abstrc(i)         end do100      continue200      continue                  ! End of non-nearest layer level loops!! Adjacent layer absorptivity:!! abso(i,1)     0 -  800 cm-1   h2o rotation band! abso(i,1)  1200 - 2200 cm-1   h2o vibration-rotation band! abso(i,2)   800 - 1200 cm-1   h2o window!! Separation between rotation and vibration-rotation dropped, so!                only 2 slots needed for H2O absorptivity!! 500-800 cm^-1 H2o continuum/line overlap already included!                in abso(i,1).  This used to be in abso(i,4)!! abso(i,3)   o3  9.6 micrometer band (nu3 and nu1 bands)! abso(i,4)   co2 15  micrometer band system!! Nearest layer level loop!         do 500 k2=pver,ntoplw,-1            do i=1,ncol               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))

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?