! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE IRRAD ###### !###### ###### !###### Developed by ###### !###### ###### !###### Goddard Cumulus Ensemble Modeling Group, NASA ###### !###### ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE irrad(idim,jdim,m,n,np, & 1,13 taucl,ccld,pl,ta,wa,oa,co2,ts, & high,flx,flc,dfdts,st4, & fclr,dbs,trant,th2o,tcon,tco2, & pa,dt,sh2o,swpre,swtem,sco3,scopre,scotem, & dh2o,dcont,dco2,do3,flxu,flxd,clr,blayer, & h2oexp,conexp,co2exp) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Calculate IR fluxes due to water vapor, co2, and o3. Clouds in ! different layers are assumed randomly overlapped. ! !----------------------------------------------------------------------- ! ! AUTHOR: (a) Radiative Transfer Model: M.-D. Chou and M. Suarez ! (b) Cloud Optics:Tao, Lang, Simpson, Sui, Ferrier and ! Chou (1996) ! ! MODIFICATION HISTORY: ! ! 03/15/1996 (Yuhe Liu) ! Adopted the original code and formatted it in accordance with the ! ARPS coding standard. ! !----------------------------------------------------------------------- ! ! ORIGINAL COMMENTS: ! !******************** CLIRAD IR1 Date: Oct. 17, 1994 **************** !********************************************************************* ! ! This routine computes ir fluxes due to water vapor, co2, and o3. ! Clouds in different layers are assumed randomly overlapped. ! ! This is a vectorized code. It computes fluxes simultaneously for ! (m x n) soundings, which is a subset of (m x ndim) soundings. ! In a global climate model, m and ndim correspond to the numbers of ! grid boxes in the zonal and meridional directions, respectively. ! ! Detailed description of the radiation routine is given in ! Chou and Suarez (1994). ! ! There are two options for computing cooling rate profiles. ! ! if high = .true., transmission functions in the co2, o3, and the ! three water vapor bands with strong absorption are computed using ! table look-up. cooling rates are computed accurately from the ! surface up to 0.01 mb. ! if high = .false., transmission functions are computed using the ! k-distribution method with linear pressure scaling. cooling rates ! are not calculated accurately for pressures less than 20 mb. ! the computation is faster with high=.false. than with high=.true. ! ! The IR spectrum is divided into eight bands: ! ! bnad wavenumber (/cm) absorber method ! ! 1 0 - 340 h2o K/T ! 2 340 - 540 h2o K/T ! 3 540 - 800 h2o,cont,co2 K,S,K/T ! 4 800 - 980 h2o,cont K,S ! 5 980 - 1100 h2o,cont,o3 K,S,T ! 6 1100 - 1380 h2o,cont K,S ! 7 1380 - 1900 h2o K/T ! 8 1900 - 3000 h2o K ! ! Note : "h2o" for h2o line absorption ! "cont" for h2o continuum absorption ! "K" for k-distribution method ! "S" for one-parameter temperature scaling ! "T" for table look-up ! ! The 15 micrometer region (540-800/cm) is further divided into ! 3 sub-bands : ! ! subbnad wavenumber (/cm) ! ! 1 540 - 620 ! 2 620 - 720 ! 3 720 - 800 ! !---- Input parameters units size ! ! number of soundings in zonal direction (m) n/d 1 ! number of soundings in meridional direction (n) n/d 1 ! maximum number of soundings in ! meridional direction (ndim) n/d 1 ! number of atmospheric layers (np) n/d 1 ! cloud optical thickness (taucl) n/d m*ndim*np ! cloud cover (ccld) fraction m*ndim*np ! level pressure (pl) mb m*ndim*(np+1) ! layer temperature (ta) k m*ndim*np ! layer specific humidity (wa) g/g m*ndim*np ! layer ozone mixing ratio by mass (oa) g/g m*ndim*np ! surface temperature (ts) k m*ndim ! co2 mixing ratio by volumn (co2) pppv 1 ! high 1 ! ! pre-computed tables used in table look-up for transmittance calculations: ! ! c1 , c2, c3: for co2 (band 3) ! o1 , o2, o3: for o3 (band 5) ! h11,h12,h13: for h2o (band 1) ! h21,h22,h23: for h2o (band 2) ! h71,h72,h73: for h2o (band 7) ! !---- output parameters ! ! net downward flux, all-sky (flx) w/m**2 m*ndim*(np+1) ! net downward flux, clear-sky (flc) w/m**2 m*ndim*(np+1) ! sensitivity of net downward flux ! to surface temperature (dfdts) w/m**2/k m*ndim*(np+1) ! emission by the surface (st4) w/m**2 m*ndim ! ! Notes: ! ! (1) Water vapor continuum absorption is included in 540-1380 /cm. ! (2) Scattering by clouds is not included. ! (3) Clouds are assumed "gray" bodies. ! (4) The diffuse cloud transmission is computed to be exp(-1.66*taucl). ! (5) If there are no clouds, flx=flc. ! (6) plevel(1) is the pressure at the top of the model atmosphere, and ! plevel(np+1) is the surface pressure. ! ! ARPS note: pl was replaced by pa at scalar points (layers) ! ! (7) Downward flux is positive, and upward flux is negative. ! (8) dfdts is always negative because upward flux is defined as negative. ! (9) For questions and coding errors, please contact with Ming-Dah Chou, ! Code 913, NASA/Goddard Space Flight Center, Greenbelt, MD 20771. ! Phone: 301-286-4012, Fax: 301-286-1759, ! e-mail: chou@climate.gsfc.nasa.gov ! !-----parameters defining the size of the pre-computed tables for transmittance ! calculations using table look-up. ! ! "nx" is the number of intervals in pressure ! "no" is the number of intervals in o3 amount ! "nc" is the number of intervals in co2 amount ! "nh" is the number of intervals in h2o amount ! "nt" is the number of copies to be made from the pre-computed ! transmittance tables to reduce "memory-bank conflict" ! in parallel machines and, hence, enhancing the speed of ! computations using table look-up. ! If such advantage does not exist, "nt" can be set to 1. !*************************************************************************** ! !fpp$ expand (expmn) !dir$ inline always expmn !*$* inline routine (expmn) ! !----------------------------------------------------------------------- ! ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: idim,jdim INTEGER :: nx,no,nc,nh,nt,m,n,np INTEGER :: i,j,k,ip,iw,it,ib,ik,iq,isb,k1,k2 PARAMETER (nx=26,no=21,nc=24,nh=31,nt=7) !---- input parameters ------ REAL :: taucl(idim,jdim,np) REAL :: ccld(idim,jdim,np) REAL :: pl(idim,jdim,np+1) REAL :: ta(idim,jdim,np) REAL :: wa(idim,jdim,np) REAL :: oa(idim,jdim,np) REAL :: ts(idim,jdim) REAL :: co2 LOGICAL :: high !---- output parameters ------ REAL :: flx(idim,jdim,np+1) REAL :: flc(idim,jdim,np+1) REAL :: dfdts(idim,jdim,np+1) REAL :: st4(idim,jdim) ! !----------------------------------------------------------------------- ! ! Temporary arrays ! !----------------------------------------------------------------------- ! REAL :: fclr(m,n) REAL :: dbs(m,n) REAL :: trant(m,n) REAL :: th2o(m,n,6) REAL :: tcon(m,n,3) REAL :: tco2(m,n,6,2) REAL :: pa(m,n,np) REAL :: dt(m,n,np) REAL :: sh2o(m,n,np+1) REAL :: swpre(m,n,np+1) REAL :: swtem(m,n,np+1) REAL :: sco3(m,n,np+1) REAL :: scopre(m,n,np+1) REAL :: scotem(m,n,np+1) REAL :: dh2o(m,n,np) REAL :: dcont(m,n,np) REAL :: dco2(m,n,np) REAL :: do3(m,n,np) REAL :: flxu(m,n,np+1) REAL :: flxd(m,n,np+1) REAL :: clr(m,n,0:np+1) REAL :: blayer(m,n,0:np+1) REAL :: h2oexp(m,n,np,6) REAL :: conexp(m,n,np,3) REAL :: co2exp(m,n,np,6,2) ! !----------------------------------------------------------------------- ! ! Misc. local variables ! !----------------------------------------------------------------------- ! LOGICAL :: oznbnd LOGICAL :: co2bnd LOGICAL :: h2otbl LOGICAL :: conbnd REAL :: c1 (nx,nc,nt),c2 (nx,nc,nt),c3 (nx,nc,nt) REAL :: o1 (nx,no,nt),o2 (nx,no,nt),o3 (nx,no,nt) REAL :: h11(nx,nh,nt),h12(nx,nh,nt),h13(nx,nh,nt) REAL :: h21(nx,nh,nt),h22(nx,nh,nt),h23(nx,nh,nt) REAL :: h71(nx,nh,nt),h72(nx,nh,nt),h73(nx,nh,nt) REAL :: xx, w1,p1,dwe,dpe !---- static data ----- REAL :: cb(5,8) !-----the following coefficients (table 2 of chou and suarez, 1995) ! are for computing spectrally integtrated planck fluxes of ! the 8 bands using eq. (22) DATA cb/ & -2.6844E-1,-8.8994E-2, 1.5676E-3,-2.9349E-6, 2.2233E-9, & 3.7315E+1,-7.4758E-1, 4.6151E-3,-6.3260E-6, 3.5647E-9, & 3.7187E+1,-3.9085E-1,-6.1072E-4, 1.4534E-5,-1.6863E-8, & -4.1928E+1, 1.0027E+0,-8.5789E-3, 2.9199E-5,-2.5654E-8, & -4.9163E+1, 9.8457E-1,-7.0968E-3, 2.0478E-5,-1.5514E-8, & -1.0345E+2, 1.8636E+0,-1.1753E-2, 2.7864E-5,-1.1998E-8, & -6.9233E+0,-1.5878E-1, 3.9160E-3,-2.4496E-5, 4.9301E-8, & 1.1483E+2,-2.2376E+0, 1.6394E-2,-5.3672E-5, 6.6456E-8/ !-----copy tables to enhance the speed of co2 (band 3), o3 (band5), ! and h2o (bands 1, 2, and 7 only) transmission calculations ! using table look-up. LOGICAL :: first SAVE first DATA first /.true./ ! !----------------------------------------------------------------------- ! ! Functions: ! !----------------------------------------------------------------------- ! REAL :: expmn ! !----------------------------------------------------------------------- ! ! Include files: ! !----------------------------------------------------------------------- ! ! include "h2o.tran3" ! include "co2.tran3" ! include "o3.tran3" COMMON /radtab001/ h11,h12,h13,h21,h22,h23,h71,h72,h73 COMMON /radtab002/ c1,c2,c3 COMMON /radtab003/ o1,o2,o3 ! !----------------------------------------------------------------------- ! ! Save variables: ! !----------------------------------------------------------------------- ! ! save c1,c2,c3,o1,o2,o3 ! save h11,h12,h13,h21,h22,h23,h71,h72,h73 ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! IF (first) THEN !-----tables co2 and h2o are only used with 'high' option IF (high) THEN DO iw=1,nh DO ip=1,nx h11(ip,iw,1)=1.0-h11(ip,iw,1) h21(ip,iw,1)=1.0-h21(ip,iw,1) h71(ip,iw,1)=1.0-h71(ip,iw,1) END DO END DO DO iw=1,nc DO ip=1,nx c1(ip,iw,1)=1.0-c1(ip,iw,1) END DO END DO !-----tables are replicated to avoid memory bank conflicts DO it=2,nt DO iw=1,nc DO ip=1,nx c1 (ip,iw,it)= c1(ip,iw,1) c2 (ip,iw,it)= c2(ip,iw,1) c3 (ip,iw,it)= c3(ip,iw,1) END DO END DO DO iw=1,nh DO ip=1,nx h11(ip,iw,it)=h11(ip,iw,1) h12(ip,iw,it)=h12(ip,iw,1) h13(ip,iw,it)=h13(ip,iw,1) h21(ip,iw,it)=h21(ip,iw,1) h22(ip,iw,it)=h22(ip,iw,1) h23(ip,iw,it)=h23(ip,iw,1) h71(ip,iw,it)=h71(ip,iw,1) h72(ip,iw,it)=h72(ip,iw,1) h73(ip,iw,it)=h73(ip,iw,1) END DO END DO END DO END IF !-----always use table look-up for ozone transmittance DO iw=1,no DO ip=1,nx o1(ip,iw,1)=1.0-o1(ip,iw,1) END DO END DO DO it=2,nt DO iw=1,no DO ip=1,nx o1 (ip,iw,it)= o1(ip,iw,1) o2 (ip,iw,it)= o2(ip,iw,1) o3 (ip,iw,it)= o3(ip,iw,1) END DO END DO END DO first=.false. END IF !-----compute layer pressure (pa) and layer temperature minus 250K (dt) DO k=1,np DO j=1,n DO i=1,m dt(i,j,k)=ta(i,j,k)-250.0 pa(i,j,k)=0.5*(pl(i,j,k)+pl(i,j,k+1)) END DO END DO END DO !-----compute layer absorber amount ! dh2o : water vapor amount (g/cm**2) ! dcont: scaled water vapor amount for continuum absorption (g/cm**2) ! dco2 : co2 amount (cm-atm)stp ! do3 : o3 amount (cm-atm)stp ! the factor 1.02 is equal to 1000/980 ! factors 789 and 476 are for unit conversion ! the factor 0.001618 is equal to 1.02/(.622*1013.25) ! the factor 6.081 is equal to 1800/296 DO k=1,np DO j=1,n DO i=1,m dh2o(i,j,k) = 1.02*wa(i,j,k)*(pl(i,j,k+1)-pl(i,j,k))+1.e-10 dco2(i,j,k) = 789.*co2*(pl(i,j,k+1)-pl(i,j,k))+1.e-10 do3 (i,j,k) = 476.0*oa(i,j,k)*(pl(i,j,k+1)-pl(i,j,k))+1.e-10 !-----compute scaled water vapor amount for h2o continuum absorption ! following eq. (43). xx=pa(i,j,k)*0.001618*wa(i,j,k)*wa(i,j,k) & *(pl(i,j,k+1)-pl(i,j,k)) dcont(i,j,k) = xx*expmn(1800./ta(i,j,k)-6.081)+1.e-10 !-----compute effective cloud-free fraction, clr, for each layer. ! the cloud diffuse transmittance is approximated by using a ! diffusivity factor of 1.66. clr(i,j,k)=1.0-(ccld(i,j,k)*(1.-expmn(-1.66*taucl(i,j,k)))) END DO END DO END DO !-----compute column-integrated h2o amoumt, h2o-weighted pressure ! and temperature. it follows eqs. (37) and (38). IF (high) THEN CALL column(m,n,np,pa,dt,dh2o,sh2o,swpre,swtem) END IF !-----the surface (with an index np+1) is treated as a layer filled with ! black clouds. DO j=1,n DO i=1,m clr(i,j,0) = 1.0 clr(i,j,np+1) = 0.0 st4(i,j) = 0.0 END DO END DO !-----initialize fluxes DO k=1,np+1 DO j=1,n DO i=1,m flx(i,j,k) = 0.0 flc(i,j,k) = 0.0 dfdts(i,j,k)= 0.0 flxu(i,j,k) = 0.0 flxd(i,j,k) = 0.0 END DO END DO END DO !-----integration over spectral bands DO ib=1,8 !-----if h2otbl, compute h2o (line) transmittance using table look-up. ! if conbnd, compute h2o (continuum) transmittance in bands 3, 4, 5 and 6. ! if co2bnd, compute co2 transmittance in band 3. ! if oznbnd, compute o3 transmittance in band 5. h2otbl=high.AND.(ib == 1.OR.ib == 2.OR.ib == 7) conbnd=ib >= 3.AND.ib <= 6 co2bnd=ib == 3 oznbnd=ib == 5 !-----blayer is the spectrally integrated planck flux of the mean layer ! temperature derived from eq. (22) ! the fitting for the planck flux is valid in the range 160-345 K. DO k=1,np DO j=1,n DO i=1,m blayer(i,j,k)=ta(i,j,k)*(ta(i,j,k)*(ta(i,j,k) & *(ta(i,j,k)*cb(5,ib)+cb(4,ib))+cb(3,ib)) & +cb(2,ib))+cb(1,ib) END DO END DO END DO !-----the earth's surface, with an index "np+1", is treated as a layer DO j=1,n DO i=1,m blayer(i,j,0) = 0.0 blayer(i,j,np+1)=ts(i,j)*(ts(i,j)*(ts(i,j) & *(ts(i,j)*cb(5,ib)+cb(4,ib))+cb(3,ib)) & +cb(2,ib))+cb(1,ib) !-----dbs is the derivative of the surface planck flux with respect to ! surface temperature (eq. 59). dbs(i,j)=ts(i,j)*(ts(i,j)*(ts(i,j) & *4.*cb(5,ib)+3.*cb(4,ib))+2.*cb(3,ib))+cb(2,ib) END DO END DO !-----compute column-integrated absorber amoumt, absorber-weighted ! pressure and temperature for co2 (band 3) and o3 (band 5). ! it follows eqs. (37) and (38). !-----this is in the band loop to save storage IF( high .AND. co2bnd) THEN CALL column(m,n,np,pa,dt,dco2,sco3,scopre,scotem) END IF IF(oznbnd) THEN CALL column(m,n,np,pa,dt,do3,sco3,scopre,scotem) END IF !-----compute the exponential terms (eq. 32) at each layer for ! water vapor line absorption when k-distribution is used IF( .NOT. h2otbl) THEN CALL h2oexps(ib,m,n,np,dh2o,pa,dt,h2oexp) END IF !-----compute the exponential terms (eq. 46) at each layer for ! water vapor continuum absorption IF( conbnd) THEN CALL conexps(ib,m,n,np,dcont,conexp) END IF !-----compute the exponential terms (eq. 32) at each layer for ! co2 absorption IF( .NOT.high .AND. co2bnd) THEN CALL co2exps(m,n,np,dco2,pa,dt,co2exp) END IF !-----compute transmittances for regions between levels k1 and k2 ! and update the fluxes at the two levels. DO k1=1,np !-----initialize fclr, th2o, tcon, and tco2 DO j=1,n DO i=1,m fclr(i,j)=1.0 END DO END DO !-----for h2o line absorption IF(.NOT. h2otbl) THEN DO ik=1,6 DO j=1,n DO i=1,m th2o(i,j,ik)=1.0 END DO END DO END DO END IF !-----for h2o continuum absorption IF (conbnd) THEN DO iq=1,3 DO j=1,n DO i=1,m tcon(i,j,iq)=1.0 END DO END DO END DO END IF !-----for co2 absorption when using k-distribution method. ! band 3 is divided into 3 sub-bands, but sub-bands 3a and 3c ! are combined in computing the co2 transmittance. IF (.NOT. high .AND. co2bnd) THEN DO isb=1,2 DO ik=1,6 DO j=1,n DO i=1,m tco2(i,j,ik,isb)=1.0 END DO END DO END DO END DO END IF !-----loop over the bottom level of the region (k2) DO k2=k1+1,np+1 DO j=1,n DO i=1,m trant(i,j)=1.0 END DO END DO IF(h2otbl) THEN w1=-8.0 p1=-2.0 dwe=0.3 dpe=0.2 !-----compute water vapor transmittance using table look-up IF (ib == 1 ) THEN CALL tablup(k1,k2,m,n,np,nx,nh,nt,sh2o,swpre,swtem, & w1,p1,dwe,dpe,h11,h12,h13,trant) END IF IF (ib == 2 ) THEN CALL tablup(k1,k2,m,n,np,nx,nh,nt,sh2o,swpre,swtem, & w1,p1,dwe,dpe,h21,h22,h23,trant) END IF IF (ib == 7 ) THEN CALL tablup(k1,k2,m,n,np,nx,nh,nt,sh2o,swpre,swtem, & w1,p1,dwe,dpe,h71,h72,h73,trant) END IF ELSE !-----compute water vapor transmittance using k-distribution. CALL wvkdis(ib,m,n,np,k2-1,h2oexp,conexp,th2o,tcon,trant) END IF IF(co2bnd) THEN IF( high ) THEN !-----compute co2 transmittance using table look-up method w1=-4.0 p1=-2.0 dwe=0.3 dpe=0.2 CALL tablup(k1,k2,m,n,np,nx,nc,nt,sco3,scopre,scotem, & w1,p1,dwe,dpe,c1,c2,c3,trant) ELSE !-----compute co2 transmittance using k-distribution method CALL co2kdis(m,n,np,k2-1,co2exp,tco2,trant) END IF END IF !-----compute o3 transmittance using table look-up IF (oznbnd) THEN w1=-6.0 p1=-2.0 dwe=0.3 dpe=0.2 CALL tablup(k1,k2,m,n,np,nx,no,nt,sco3,scopre,scotem, & w1,p1,dwe,dpe,o1,o2,o3,trant) END IF !-----fclr is the clear line-of-sight between levels k1 and k2. ! in computing fclr, clouds are assumed randomly overlapped ! using eq. (10). DO j=1,n DO i=1,m fclr(i,j) = fclr(i,j)*clr(i,j,k2-1) END DO END DO !-----compute upward and downward fluxes !-----add "boundary" terms to the net downward flux. ! these are the first terms on the right-hand-side of ! eqs. (56a) and (56b). ! downward fluxes are positive. IF (k2 == k1+1) THEN DO j=1,n DO i=1,m flc(i,j,k1)=flc(i,j,k1)-blayer(i,j,k1) flc(i,j,k2)=flc(i,j,k2)+blayer(i,j,k1) END DO END DO END IF !-----add flux components involving the four layers above and below ! the levels k1 and k2. it follows eqs. (56a) and (56b). DO j=1,n DO i=1,m xx=trant(i,j)*(blayer(i,j,k2-1)-blayer(i,j,k2)) flc(i,j,k1) =flc(i,j,k1)+xx xx=trant(i,j)*(blayer(i,j,k1-1)-blayer(i,j,k1)) flc(i,j,k2) =flc(i,j,k2)+xx END DO END DO !-----compute upward and downward fluxes for all-sky situation IF (k2 == k1+1) THEN DO j=1,n DO i=1,m flxu(i,j,k1)=flxu(i,j,k1)-blayer(i,j,k1) flxd(i,j,k2)=flxd(i,j,k2)+blayer(i,j,k1) END DO END DO END IF DO j=1,n DO i=1,m xx=trant(i,j)*(blayer(i,j,k2-1)-blayer(i,j,k2)) flxu(i,j,k1) =flxu(i,j,k1)+xx*fclr(i,j) xx=trant(i,j)*(blayer(i,j,k1-1)-blayer(i,j,k1)) flxd(i,j,k2) =flxd(i,j,k2)+xx*fclr(i,j) END DO END DO END DO !-----compute the partial derivative of fluxes with respect to ! surface temperature (eq. 59). DO j=1,n DO i=1,m dfdts(i,j,k1) =dfdts(i,j,k1)-dbs(i,j)*trant(i,j)*fclr(i,j) END DO END DO END DO !-----add contribution from the surface to the flux terms at the surface. DO j=1,n DO i=1,m dfdts(i,j,np+1) =dfdts(i,j,np+1)-dbs(i,j) END DO END DO DO j=1,n DO i=1,m flc(i,j,np+1)=flc(i,j,np+1)-blayer(i,j,np+1) flxu(i,j,np+1)=flxu(i,j,np+1)-blayer(i,j,np+1) st4(i,j)=st4(i,j)-blayer(i,j,np+1) END DO END DO ! write(7,3211) ib, flxd(1,1,52),flxu(1,1,52) ! write(7,3211) ib, flxd(1,1,np+1),flxu(1,1,np+1) ! 3211 FORMAT ('ib, fluxd, fluxu=', i3,2F12.3) END DO DO k=1,np+1 DO j=1,n DO i=1,m flx(i,j,k)=flxd(i,j,k)+flxu(i,j,k) END DO END DO END DO RETURN END SUBROUTINE irrad ! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE H2OEXPS ###### !###### ###### !###### Developed by ###### !###### ###### !###### Goddard Cumulus Ensemble Modeling Group, NASA ###### !###### ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE h2oexps(ib,m,n,np,dh2o,pa,dt,h2oexp) 1 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Calculate exponentials for water vapor line absorption in ! individual layers. ! !----------------------------------------------------------------------- ! ! ! AUTHOR: (a) Radiative Transfer Model: M.-D. Chou and M. Suarez ! (b) Cloud Optics:Tao, Lang, Simpson, Sui, Ferrier and ! Chou (1996) ! ! MODIFICATION: ! ! 03/11/1996 (Yuhe Liu) ! Formatted code to ARPS standard format ! !----------------------------------------------------------------------- ! ! ORIGINAL COMMENTS: ! ! compute exponentials for water vapor line absorption ! in individual layers. ! !---- input parameters ! spectral band (ib) ! number of grid intervals in zonal direction (m) ! number of grid intervals in meridional direction (n) ! number of layers (np) ! layer water vapor amount for line absorption (dh2o) ! layer pressure (pa) ! layer temperature minus 250K (dt) ! !---- output parameters ! 6 exponentials for each layer (h2oexp) ! !********************************************************************** ! !fpp$ expand (expmn) !dir$ inline always expmn !*$* inline routine (expmn) ! !----------------------------------------------------------------------- ! ! Variable declarations ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: ib,m,n,np !---- input parameters ------ REAL :: dh2o(m,n,np) REAL :: pa(m,n,np) REAL :: dt(m,n,np) !---- output parameters ----- REAL :: h2oexp(m,n,np,6) !---- static data ----- INTEGER :: mw(8) REAL :: xkw(8) REAL :: aw(8) REAL :: bw(8) !---- temporary arrays ----- REAL :: xh !---- local misc. variables INTEGER :: i,j,k,ik !-----xkw are the absorption coefficients for the first ! k-distribution function due to water vapor line absorption ! (tables 4 and 7). units are cm**2/g DATA xkw / 29.55 , 4.167E-1, 1.328E-2, 5.250E-4, & 5.25E-4, 2.340E-3, 1.320E-0, 5.250E-4/ !-----mw are the ratios between neighboring absorption coefficients ! for water vapor line absorption (tables 4 and 7). DATA mw /6,6,8,6,6,8,6,16/ !-----aw and bw (table 3) are the coefficients for temperature scaling ! in eq. (25). DATA aw/ 0.0021, 0.0140, 0.0167, 0.0302, & 0.0307, 0.0154, 0.0008, 0.0096/ DATA bw/ -1.01E-5, 5.57E-5, 8.54E-5, 2.96E-4, & 2.86E-4, 7.53E-5,-3.52E-6, 1.64E-5/ !-----expmn is an external function REAL :: expmn ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! !********************************************************************** ! note that the 3 sub-bands in band 3 use the same set of xkw, aw, ! and bw. therefore, h2oexp for these sub-bands are identical. !********************************************************************** DO k=1,np DO j=1,n DO i=1,m !-----xh is the scaled water vapor amount for line absorption ! computed from (27). xh = dh2o(i,j,k)*(pa(i,j,k)*0.002) & * ( 1.+(aw(ib)+bw(ib)* dt(i,j,k))*dt(i,j,k) ) !-----h2oexp is the water vapor transmittance of the layer (k2-1) ! due to line absorption h2oexp(i,j,k,1) = expmn(-xh*xkw(ib)) END DO END DO END DO DO ik=2,6 IF(mw(ib) == 6) THEN DO k=1,np DO j=1,n DO i=1,m xh = h2oexp(i,j,k,ik-1)*h2oexp(i,j,k,ik-1) h2oexp(i,j,k,ik) = xh*xh*xh END DO END DO END DO ELSE IF(mw(ib) == 8) THEN DO k=1,np DO j=1,n DO i=1,m xh = h2oexp(i,j,k,ik-1)*h2oexp(i,j,k,ik-1) xh = xh*xh h2oexp(i,j,k,ik) = xh*xh END DO END DO END DO ELSE DO k=1,np DO j=1,n DO i=1,m xh = h2oexp(i,j,k,ik-1)*h2oexp(i,j,k,ik-1) xh = xh*xh xh = xh*xh h2oexp(i,j,k,ik) = xh*xh END DO END DO END DO END IF END DO RETURN END SUBROUTINE h2oexps ! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE CONEXPS ###### !###### ###### !###### Developed by ###### !###### ###### !###### Goddard Cumulus Ensemble Modeling Group, NASA ###### !###### ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE conexps(ib,m,n,np,dcont,conexp) 1 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Calculate exponentials for continuum absorption in individual ! layers. ! !----------------------------------------------------------------------- ! ! AUTHOR: (a) Radiative Transfer Model: M.-D. Chou and M. Suarez ! (b) Cloud Optics:Tao, Lang, Simpson, Sui, Ferrier and ! Chou (1996) ! ! MODIFICATION HISTORY: ! ! 03/15/1996 (Yuhe Liu) ! Adopted the original code and formatted it in accordance with the ! ARPS coding standard. ! !----------------------------------------------------------------------- ! ! ORIGINAL COMMENTS: ! !********************************************************************** ! compute exponentials for continuum absorption in individual layers. ! !---- input parameters ! spectral band (ib) ! number of grid intervals in zonal direction (m) ! number of grid intervals in meridional direction (n) ! number of layers (np) ! layer scaled water vapor amount for continuum absorption (dcont) ! !---- output parameters ! 1 or 3 exponentials for each layer (conexp) ! !********************************************************************** ! !fpp$ expand (expmn) !dir$ inline always expmn !*$* inline routine (expmn) ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: ib,m,n,np,i,j,k,iq !---- input parameters ------ REAL :: dcont(m,n,np) !---- updated parameters ----- REAL :: conexp(m,n,np,3) !---- static data ----- INTEGER :: NE(8) REAL :: xke(8) !-----xke are the absorption coefficients for the first ! k-distribution function due to water vapor continuum absorption ! (table 6). units are cm**2/g DATA xke / 0.00, 0.00, 27.40, 15.8, & 9.40, 7.75, 0.0, 0.0/ !-----ne is the number of terms in computing water vapor ! continuum transmittance (Table 6). ! band 3 is divided into 3 sub-bands. DATA NE /0,0,3,1,1,1,0,0/ ! !----------------------------------------------------------------------- ! ! Functions: ! !----------------------------------------------------------------------- ! !-----expmn is an external function REAL :: expmn ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! DO k=1,np DO j=1,n DO i=1,m conexp(i,j,k,1) = expmn(-dcont(i,j,k)*xke(ib)) END DO END DO END DO IF (ib == 3) THEN !-----the absorption coefficients for sub-bands 3b (iq=2) and 3a (iq=3) ! are, respectively, double and quadruple that for sub-band 3c (iq=1) ! (table 6). DO iq=2,3 DO k=1,np DO j=1,n DO i=1,m conexp(i,j,k,iq) = conexp(i,j,k,iq-1) *conexp(i,j,k,iq-1) END DO END DO END DO END DO END IF RETURN END SUBROUTINE conexps ! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE CO2EXPS ###### !###### ###### !###### Developed by ###### !###### ###### !###### Goddard Cumulus Ensemble Modeling Group, NASA ###### !###### ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE co2exps(m,n,np,dco2,pa,dt,co2exp) 1 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Calculate co2 exponentials for individual layers. ! !----------------------------------------------------------------------- ! ! AUTHOR: (a) Radiative Transfer Model: M.-D. Chou and M. Suarez ! (b) Cloud Optics:Tao, Lang, Simpson, Sui, Ferrier and ! Chou (1996) ! ! MODIFICATION HISTORY: ! ! 03/15/1996 (Yuhe Liu) ! Adopted the original code and formatted it in accordance with the ! ARPS coding standard. ! !----------------------------------------------------------------------- ! ! ORIGINAL COMMENTS: ! ! !********************************************************************** ! compute co2 exponentials for individual layers. ! !---- input parameters ! number of grid intervals in zonal direction (m) ! number of grid intervals in meridional direction (n) ! number of layers (np) ! layer co2 amount (dco2) ! layer pressure (pa) ! layer temperature minus 250K (dt) ! !---- output parameters ! 6 exponentials for each layer (co2exp) !********************************************************************** ! !fpp$ expand (expmn) !dir$ inline always expmn !*$* inline routine (expmn) ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: m,n,np,i,j,k !---- input parameters ----- REAL :: dco2(m,n,np) REAL :: pa(m,n,np) REAL :: dt(m,n,np) !---- output parameters ----- REAL :: co2exp(m,n,np,6,2) !---- static data ----- REAL :: xkc(2),ac(2),bc(2),pm(2),prc(2) !---- temporary arrays ----- REAL :: xc !-----xkc is the absorption coefficients for the ! first k-distribution function due to co2 (table 7). ! units are 1/(cm-atm)stp. DATA xkc/2.656E-5,2.656E-3/ !-----parameters (table 3) for computing the scaled co2 amount ! using (27). DATA prc/ 300.0, 30.0/ DATA pm / 0.5, 0.85/ DATA ac / 0.0182, 0.0042/ DATA bc /1.07E-4,2.00E-5/ ! !----------------------------------------------------------------------- ! ! Functions: ! !----------------------------------------------------------------------- ! !-----function expmn REAL :: expmn ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! DO k=1,np DO j=1,n DO i=1,m !-----compute the scaled co2 amount from eq. (27) for band-wings ! (sub-bands 3a and 3c). xc = dco2(i,j,k)*(pa(i,j,k)/prc(1))**pm(1) & *(1.+(ac(1)+bc(1)*dt(i,j,k))*dt(i,j,k)) !-----six exponential by powers of 8 (table 7). co2exp(i,j,k,1,1)=expmn(-xc*xkc(1)) xc=co2exp(i,j,k,1,1)*co2exp(i,j,k,1,1) xc=xc*xc co2exp(i,j,k,2,1)=xc*xc xc=co2exp(i,j,k,2,1)*co2exp(i,j,k,2,1) xc=xc*xc co2exp(i,j,k,3,1)=xc*xc xc=co2exp(i,j,k,3,1)*co2exp(i,j,k,3,1) xc=xc*xc co2exp(i,j,k,4,1)=xc*xc xc=co2exp(i,j,k,4,1)*co2exp(i,j,k,4,1) xc=xc*xc co2exp(i,j,k,5,1)=xc*xc xc=co2exp(i,j,k,5,1)*co2exp(i,j,k,5,1) xc=xc*xc co2exp(i,j,k,6,1)=xc*xc !-----compute the scaled co2 amount from eq. (27) for band-center ! region (sub-band 3b). xc = dco2(i,j,k)*(pa(i,j,k)/prc(2))**pm(2) & *(1.+(ac(2)+bc(2)*dt(i,j,k))*dt(i,j,k)) co2exp(i,j,k,1,2)=expmn(-xc*xkc(2)) xc=co2exp(i,j,k,1,2)*co2exp(i,j,k,1,2) xc=xc*xc co2exp(i,j,k,2,2)=xc*xc xc=co2exp(i,j,k,2,2)*co2exp(i,j,k,2,2) xc=xc*xc co2exp(i,j,k,3,2)=xc*xc xc=co2exp(i,j,k,3,2)*co2exp(i,j,k,3,2) xc=xc*xc co2exp(i,j,k,4,2)=xc*xc xc=co2exp(i,j,k,4,2)*co2exp(i,j,k,4,2) xc=xc*xc co2exp(i,j,k,5,2)=xc*xc xc=co2exp(i,j,k,5,2)*co2exp(i,j,k,5,2) xc=xc*xc co2exp(i,j,k,6,2)=xc*xc END DO END DO END DO RETURN END SUBROUTINE co2exps ! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE COLUMN ###### !###### ###### !###### Developed by ###### !###### ###### !###### Goddard Cumulus Ensemble Modeling Group, NASA ###### !###### ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE column(m,n,np,pa,dt,sabs0,sabs,spre,stem) 3 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Calculate column-integrated (from top of the model atmosphere) ! absorber amount, absorber-weighted pressure and temperature. ! !----------------------------------------------------------------------- ! ! AUTHOR: (a) Radiative Transfer Model: M.-D. Chou and M. Suarez ! (b) Cloud Optics:Tao, Lang, Simpson, Sui, Ferrier and ! Chou (1996) ! ! MODIFICATION HISTORY: ! ! 03/15/1996 (Yuhe Liu) ! Adopted the original code and formatted it in accordance with the ! ARPS coding standard. ! !----------------------------------------------------------------------- ! ! ORIGINAL COMMENTS: ! !************************************************************************** !-----compute column-integrated (from top of the model atmosphere) ! absorber amount (sabs), absorber-weighted pressure (spre) and ! temperature (stem). ! computations of spre and stem follows eqs. (37) and (38). ! !--- input parameters ! number of soundings in zonal direction (m) ! number of soundings in meridional direction (n) ! number of atmospheric layers (np) ! layer pressure (pa) ! layer temperature minus 250K (dt) ! layer absorber amount (sabs0) ! !--- output parameters ! column-integrated absorber amount (sabs) ! column absorber-weighted pressure (spre) ! column absorber-weighted temperature (stem) ! !--- units of pa and dt are mb and k, respectively. ! units of sabs are g/cm**2 for water vapor and (cm-atm)stp for co2 and o3 !************************************************************************** ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: m,n,np,i,j,k !---- input parameters ----- REAL :: pa(m,n,np) REAL :: dt(m,n,np) REAL :: sabs0(m,n,np) !---- output parameters ----- REAL :: sabs(m,n,np+1) REAL :: spre(m,n,np+1) REAL :: stem(m,n,np+1) !********************************************************************* ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! DO j=1,n DO i=1,m sabs(i,j,1)=0.0 spre(i,j,1)=0.0 stem(i,j,1)=0.0 END DO END DO DO k=1,np DO j=1,n DO i=1,m sabs(i,j,k+1)=sabs(i,j,k)+sabs0(i,j,k) spre(i,j,k+1)=spre(i,j,k)+pa(i,j,k)*sabs0(i,j,k) stem(i,j,k+1)=stem(i,j,k)+dt(i,j,k)*sabs0(i,j,k) END DO END DO END DO RETURN END SUBROUTINE column ! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE TABLUP ###### !###### ###### !###### Developed by ###### !###### ###### !###### Goddard Cumulus Ensemble Modeling Group, NASA ###### !###### ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE tablup(k1,k2,m,n,np,nx,nh,nt,sabs,spre,stem,w1,p1, & 5 dwe,dpe,coef1,coef2,coef3,tran) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Calculate water vapor, co2, and o3 transmittances using table ! look-up. rlwopt = 0, or high=.false. ! !----------------------------------------------------------------------- ! ! AUTHOR: (a) Radiative Transfer Model: M.-D. Chou and M. Suarez ! (b) Cloud Optics:Tao, Lang, Simpson, Sui, Ferrier and ! Chou (1996) ! ! MODIFICATION HISTORY: ! ! 03/15/1996 (Yuhe Liu) ! Adopted the original code and formatted it in accordance with the ! ARPS coding standard. ! !----------------------------------------------------------------------- ! ! ORIGINAL COMMENTS: ! !********************************************************************** ! compute water vapor, co2, and o3 transmittances between levels k1 and k2 ! using table look-up for m x n soundings. ! ! Calculations follow Eq. (40) of Chou and Suarez (1995) ! !---- input --------------------- ! indices for pressure levels (k1 and k2) ! number of grid intervals in zonal direction (m) ! number of grid intervals in meridional direction (n) ! number of atmospheric layers (np) ! number of pressure intervals in the table (nx) ! number of absorber amount intervals in the table (nh) ! number of tables copied (nt) ! column-integrated absorber amount (sabs) ! column absorber amount-weighted pressure (spre) ! column absorber amount-weighted temperature (stem) ! first value of absorber amount (log10) in the table (w1) ! first value of pressure (log10) in the table (p1) ! size of the interval of absorber amount (log10) in the table (dwe) ! size of the interval of pressure (log10) in the table (dpe) ! pre-computed coefficients (coef1, coef2, and coef3) ! !---- updated --------------------- ! transmittance (tran) ! ! Note: ! (1) units of sabs are g/cm**2 for water vapor and (cm-atm)stp for co2 and o3. ! (2) units of spre and stem are, respectively, mb and K. ! (3) there are nt identical copies of the tables (coef1, coef2, and ! coef3). the prupose of using the multiple copies of tables is ! to increase the speed in parallel (vectorized) computations. ! if such advantage does not exist, nt can be set to 1. ! !********************************************************************** ! !----------------------------------------------------------------------- ! ! Variable declarations ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: k1,k2,m,n,np,nx,nh,nt,i,j !---- input parameters ----- REAL :: w1,p1,dwe,dpe REAL :: sabs(m,n,np+1) REAL :: spre(m,n,np+1) REAL :: stem(m,n,np+1) REAL :: coef1(nx,nh,nt) REAL :: coef2(nx,nh,nt) REAL :: coef3(nx,nh,nt) !---- update parameter ----- REAL :: tran(m,n) !---- temporary variables ----- REAL :: x1,x2,x3,we,pe,fw,fp,pa,pb,pc,ax,ba,bb,t1,ca,cb,t2 INTEGER :: iw,ip,nn ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! DO j=1,n DO i=1,m nn=MOD(i,nt)+1 x1=sabs(i,j,k2)-sabs(i,j,k1) x2=(spre(i,j,k2)-spre(i,j,k1))/x1 x3=(stem(i,j,k2)-stem(i,j,k1))/x1 we=(LOG10(x1)-w1)/dwe pe=(LOG10(x2)-p1)/dpe we=MAX(we,w1-2.*dwe) pe=MAX(pe,p1) iw=INT(we+1.5) ip=INT(pe+1.5) iw=MIN(iw,nh-1) iw=MAX(iw, 2) ip=MIN(ip,nx-1) ip=MAX(ip, 1) fw=we-FLOAT(iw-1) fp=pe-FLOAT(ip-1) !-----linear interpolation in pressure pa = coef1(ip,iw-1,nn)*(1.-fp)+coef1(ip+1,iw-1,nn)*fp pb = coef1(ip,iw, nn)*(1.-fp)+coef1(ip+1,iw, nn)*fp pc = coef1(ip,iw+1,nn)*(1.-fp)+coef1(ip+1,iw+1,nn)*fp !-----quadratic interpolation in absorber amount for coef1 ax = (-pa*(1.-fw)+pc*(1.+fw)) *fw*0.5 + pb*(1.-fw*fw) !-----linear interpolation in absorber amount for coef2 and coef3 ba = coef2(ip,iw, nn)*(1.-fp)+coef2(ip+1,iw, nn)*fp bb = coef2(ip,iw+1,nn)*(1.-fp)+coef2(ip+1,iw+1,nn)*fp t1 = ba*(1.-fw) + bb*fw ca = coef3(ip,iw, nn)*(1.-fp)+coef3(ip+1,iw, nn)*fp cb = coef3(ip,iw+1,nn)*(1.-fp)+coef3(ip+1,iw+1,nn)*fp t2 = ca*(1.-fw) + cb*fw !-----update the total transmittance between levels k1 and k2 tran(i,j)= (ax + (t1+t2*x3) * x3)*tran(i,j) END DO END DO RETURN END SUBROUTINE tablup ! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE WVKDIS ###### !###### ###### !###### Developed by ###### !###### ###### !###### Goddard Cumulus Ensemble Modeling Group, NASA ###### !###### ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE wvkdis(ib,m,n,np,k,h2oexp,conexp,th2o,tcon,tran) 1 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Calculate water vapor transmittance using the k-distribution ! method. ! !----------------------------------------------------------------------- ! ! AUTHOR: (a) Radiative Transfer Model: M.-D. Chou and M. Suarez ! (b) Cloud Optics:Tao, Lang, Simpson, Sui, Ferrier and ! Chou (1996) ! ! MODIFICATION HISTORY: ! ! 03/15/1996 (Yuhe Liu) ! Adopted the original code and formatted it in accordance with the ! ARPS coding standard. ! !----------------------------------------------------------------------- ! ! ORIGINAL COMMENTS: ! !********************************************************************** ! compute water vapor transmittance between levels k1 and k2 for ! m x n soundings using the k-distribution method. ! ! computations follow eqs. (34), (46), (50) and (52). ! !---- input parameters ! spectral band (ib) ! number of grid intervals in zonal direction (m) ! number of grid intervals in meridional direction (n) ! number of levels (np) ! current level (k) ! exponentials for line absorption (h2oexp) ! exponentials for continuum absorption (conexp) ! !---- updated parameters ! transmittance between levels k1 and k2 due to ! water vapor line absorption (th2o) ! transmittance between levels k1 and k2 due to ! water vapor continuum absorption (tcon) ! total transmittance (tran) ! !********************************************************************** ! !----------------------------------------------------------------------- ! ! Variable declarations ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: ib,m,n,np,k,i,j !---- input parameters ------ REAL :: conexp(m,n,np,3) REAL :: h2oexp(m,n,np,6) !---- updated parameters ----- REAL :: th2o(m,n,6) REAL :: tcon(m,n,3) REAL :: tran(m,n) !---- static data ----- INTEGER :: NE(8) REAL :: fkw(6,8),gkw(6,3) !---- temporary variable ----- REAL :: trnth2o !-----fkw is the planck-weighted k-distribution function due to h2o ! line absorption given in table 4 of Chou and Suarez (1995). ! the k-distribution function for the third band, fkw(*,3), is not used DATA fkw / 0.2747,0.2717,0.2752,0.1177,0.0352,0.0255, & 0.1521,0.3974,0.1778,0.1826,0.0374,0.0527, & 6*1.00, & 0.4654,0.2991,0.1343,0.0646,0.0226,0.0140, & 0.5543,0.2723,0.1131,0.0443,0.0160,0.0000, & 0.1846,0.2732,0.2353,0.1613,0.1146,0.0310, & 0.0740,0.1636,0.4174,0.1783,0.1101,0.0566, & 0.1437,0.2197,0.3185,0.2351,0.0647,0.0183/ !-----gkw is the planck-weighted k-distribution function due to h2o ! line absorption in the 3 subbands (800-720,620-720,540-620 /cm) ! of band 3 given in table 7. Note that the order of the sub-bands ! is reversed. DATA gkw/ 0.1782,0.0593,0.0215,0.0068,0.0022,0.0000, & 0.0923,0.1675,0.0923,0.0187,0.0178,0.0000, & 0.0000,0.1083,0.1581,0.0455,0.0274,0.0041/ !-----ne is the number of terms used in each band to compute water vapor ! continuum transmittance (table 6). DATA NE /0,0,3,1,1,1,0,0/ ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! !-----tco2 are the six exp factors between levels k1 and k2 ! tran is the updated total transmittance between levels k1 and k2 !-----th2o is the 6 exp factors between levels k1 and k2 due to ! h2o line absorption. !-----tcon is the 3 exp factors between levels k1 and k2 due to ! h2o continuum absorption. !-----trnth2o is the total transmittance between levels k1 and k2 due ! to both line and continuum absorption computed from eq. (52). DO j=1,n DO i=1,m th2o(i,j,1) = th2o(i,j,1)*h2oexp(i,j,k,1) th2o(i,j,2) = th2o(i,j,2)*h2oexp(i,j,k,2) th2o(i,j,3) = th2o(i,j,3)*h2oexp(i,j,k,3) th2o(i,j,4) = th2o(i,j,4)*h2oexp(i,j,k,4) th2o(i,j,5) = th2o(i,j,5)*h2oexp(i,j,k,5) th2o(i,j,6) = th2o(i,j,6)*h2oexp(i,j,k,6) END DO END DO IF (NE(ib) == 0) THEN DO j=1,n DO i=1,m trnth2o =(fkw(1,ib)*th2o(i,j,1) & + fkw(2,ib)*th2o(i,j,2) & + fkw(3,ib)*th2o(i,j,3) & + fkw(4,ib)*th2o(i,j,4) & + fkw(5,ib)*th2o(i,j,5) & + fkw(6,ib)*th2o(i,j,6)) tran(i,j)=tran(i,j)*trnth2o END DO END DO ELSE IF (NE(ib) == 1) THEN DO j=1,n DO i=1,m tcon(i,j,1)= tcon(i,j,1)*conexp(i,j,k,1) trnth2o =(fkw(1,ib)*th2o(i,j,1) & + fkw(2,ib)*th2o(i,j,2) & + fkw(3,ib)*th2o(i,j,3) & + fkw(4,ib)*th2o(i,j,4) & + fkw(5,ib)*th2o(i,j,5) & + fkw(6,ib)*th2o(i,j,6))*tcon(i,j,1) tran(i,j)=tran(i,j)*trnth2o END DO END DO ELSE DO j=1,n DO i=1,m tcon(i,j,1)= tcon(i,j,1)*conexp(i,j,k,1) tcon(i,j,2)= tcon(i,j,2)*conexp(i,j,k,2) tcon(i,j,3)= tcon(i,j,3)*conexp(i,j,k,3) trnth2o = ( gkw(1,1)*th2o(i,j,1) & + gkw(2,1)*th2o(i,j,2) & + gkw(3,1)*th2o(i,j,3) & + gkw(4,1)*th2o(i,j,4) & + gkw(5,1)*th2o(i,j,5) & + gkw(6,1)*th2o(i,j,6) ) * tcon(i,j,1) & + ( gkw(1,2)*th2o(i,j,1) & + gkw(2,2)*th2o(i,j,2) & + gkw(3,2)*th2o(i,j,3) & + gkw(4,2)*th2o(i,j,4) & + gkw(5,2)*th2o(i,j,5) & + gkw(6,2)*th2o(i,j,6) ) * tcon(i,j,2) & + ( gkw(1,3)*th2o(i,j,1) & + gkw(2,3)*th2o(i,j,2) & + gkw(3,3)*th2o(i,j,3) & + gkw(4,3)*th2o(i,j,4) & + gkw(5,3)*th2o(i,j,5) & + gkw(6,3)*th2o(i,j,6) ) * tcon(i,j,3) tran(i,j)=tran(i,j)*trnth2o END DO END DO END IF RETURN END SUBROUTINE wvkdis ! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE CO2KDIS ###### !###### ###### !###### Developed by ###### !###### ###### !###### Goddard Cumulus Ensemble Modeling Group, NASA ###### !###### ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE co2kdis(m,n,np,k,co2exp,tco2,tran) 1 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Calculate co2 transmittances using the k-distribution method ! ! !----------------------------------------------------------------------- ! ! AUTHOR: (a) Radiative Transfer Model: M.-D. Chou and M. Suarez ! (b) Cloud Optics:Tao, Lang, Simpson, Sui, Ferrier and ! Chou (1996) ! ! MODIFICATION HISTORY: ! ! 03/15/1996 (Yuhe Liu) ! Adopted the original code and formatted it in accordance with the ! ARPS coding standard. ! !----------------------------------------------------------------------- ! ! ORIGINAL COMMENTS: ! !********************************************************************** ! compute co2 transmittances between levels k1 and k2 for m x n soundings ! using the k-distribution method with linear pressure scaling. ! ! computations follow eq. (34). ! !---- input parameters ! number of grid intervals in zonal direction (m) ! number of grid intervals in meridional direction (n) ! !---- updated parameters ! transmittance between levels k1 and k2 due to co2 absorption ! for the various values of the absorption coefficient (tco2) ! total transmittance (tran) ! !********************************************************************** ! !----------------------------------------------------------------------- ! ! Variable declarations ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: m,n,np,k,i,j !---- input parameters ----- REAL :: co2exp(m,n,np,6,2) !---- updated parameters ----- REAL :: tco2(m,n,6,2) REAL :: tran(m,n) !---- static data ----- REAL :: gkc(6,2) !---- temporary variable ----- REAL :: xc !-----gkc is the planck-weighted co2 k-distribution function ! in the band-wing and band-center regions given in table 7. ! for computing efficiency, sub-bands 3a and 3c are combined. DATA gkc/ 0.1395,0.1407,0.1549,0.1357,0.0182,0.0220, & 0.0766,0.1372,0.1189,0.0335,0.0169,0.0059/ ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! !-----tco2 is the 6 exp factors between levels k1 and k2. ! xc is the total co2 transmittance given by eq. (53). DO j=1,n DO i=1,m !-----band-wings tco2(i,j,1,1)=tco2(i,j,1,1)*co2exp(i,j,k,1,1) xc= gkc(1,1)*tco2(i,j,1,1) tco2(i,j,2,1)=tco2(i,j,2,1)*co2exp(i,j,k,2,1) xc=xc+gkc(2,1)*tco2(i,j,2,1) tco2(i,j,3,1)=tco2(i,j,3,1)*co2exp(i,j,k,3,1) xc=xc+gkc(3,1)*tco2(i,j,3,1) tco2(i,j,4,1)=tco2(i,j,4,1)*co2exp(i,j,k,4,1) xc=xc+gkc(4,1)*tco2(i,j,4,1) tco2(i,j,5,1)=tco2(i,j,5,1)*co2exp(i,j,k,5,1) xc=xc+gkc(5,1)*tco2(i,j,5,1) tco2(i,j,6,1)=tco2(i,j,6,1)*co2exp(i,j,k,6,1) xc=xc+gkc(6,1)*tco2(i,j,6,1) !-----band-center region tco2(i,j,1,2)=tco2(i,j,1,2)*co2exp(i,j,k,1,2) xc=xc+gkc(1,2)*tco2(i,j,1,2) tco2(i,j,2,2)=tco2(i,j,2,2)*co2exp(i,j,k,2,2) xc=xc+gkc(2,2)*tco2(i,j,2,2) tco2(i,j,3,2)=tco2(i,j,3,2)*co2exp(i,j,k,3,2) xc=xc+gkc(3,2)*tco2(i,j,3,2) tco2(i,j,4,2)=tco2(i,j,4,2)*co2exp(i,j,k,4,2) xc=xc+gkc(4,2)*tco2(i,j,4,2) tco2(i,j,5,2)=tco2(i,j,5,2)*co2exp(i,j,k,5,2) xc=xc+gkc(5,2)*tco2(i,j,5,2) tco2(i,j,6,2)=tco2(i,j,6,2)*co2exp(i,j,k,6,2) xc=xc+gkc(6,2)*tco2(i,j,6,2) tran(i,j)=tran(i,j)*xc END DO END DO RETURN END SUBROUTINE co2kdis