diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 index 4d076706c..b5fd3ed14 100644 --- a/physics/GFS_rrtmgp_pre.F90 +++ b/physics/GFS_rrtmgp_pre.F90 @@ -199,7 +199,8 @@ subroutine GFS_rrtmgp_pre_run (Model, Grid, Statein, Coupling, Radtend, Sfcprop, real(kind_phys),dimension(NCOL,Model%levs) :: vmr_o3, vmr_h2o, coldry, tem0, colamt real(kind_phys) :: es, qs, tem1, tem2 real(kind_phys), dimension(ncol, NF_ALBD) :: sfcalb - real(kind_phys), dimension(ncol, Model%levs) :: qs_lay, q_lay, deltaZ, deltaP, o3_lay + real(kind_phys), dimension(ncol, Model%levs) :: qs_lay, q_lay, deltaZ, deltaP, o3_lay, p_lay_log + real(kind_phys), dimension(ncol, Model%levs+1) :: p_lev_log real(kind_phys), dimension(ncol, Model%levs, NF_VGAS) :: gas_vmr real(kind_phys), dimension(ncol, Model%levs, NF_CLDS) :: clouds real(kind_phys), dimension(ncol) :: precipitableH2o @@ -241,15 +242,35 @@ subroutine GFS_rrtmgp_pre_run (Model, Grid, Statein, Coupling, Radtend, Sfcprop, ! Temperature at layer-interfaces if (top_at_1) then + ! Log of pressure (used for temperature level interpolation) + p_lay_log = log(p_lay) + p_lev_log(:,1) = log(max(1.0e-6,p_lev(:,1))) + p_lev_log(:,2:iSFC+1) = log(p_lev(:,2:iSFC+1)) + ! t_lev(1:NCOL,1) = t_lay(1:NCOL,iTOA) - t_lev(1:NCOL,2:iSFC) = (t_lay(1:NCOL,2:iSFC)+t_lay(1:NCOL,1:iSFC-1))/2._kind_phys + do iLay=2,iSFC + t_lev(1:nCol,iLay) = t_lay(1:nCol,iLay) + (t_lay(1:nCol,iLay-1)-t_lay(1:nCol,iLay)) * & + (p_lev_log(1:nCol,iLay) - p_lay_log(1:nCol,iLay)) / & + (p_lay_log(1:nCol,iLay-1) - p_lay_log(1:nCol,iLay)) + enddo + !t_lev(1:NCOL,2:iSFC) = (t_lay(1:NCOL,2:iSFC)+t_lay(1:NCOL,1:iSFC-1))/2._kind_phys t_lev(1:NCOL,iSFC+1) = Sfcprop%tsfc(1:NCOL) else + ! Log of pressure (used for temperature level interpolation) + p_lay_log = log(p_lay) + p_lev_log(:,1) = log(max(1.0e-6,p_lev(:,1))) + p_lev_log(:,2:iTOA+1) = log(p_lev(:,2:iTOA+1)) + ! t_lev(1:NCOL,1) = Sfcprop%tsfc(1:NCOL) - t_lev(1:NCOL,2:iTOA) = (t_lay(1:NCOL,2:iTOA)+t_lay(1:NCOL,1:iTOA-1))/2._kind_phys + do iLay=2,iTOA + t_lev(1:nCol,iLay) = t_lay(1:nCol,iLay-1) + (t_lay(1:nCol,iLay)-t_lay(1:nCol,iLay-1)) * & + (p_lev_log(1:nCol,iLay)-p_lay_log(1:nCol,iLay-1)) / & + (p_lay_log(1:nCol,iLay)-p_lay_log(1:nCol,iLay-1)) + enddo + !t_lev(1:NCOL,2:iTOA) = (t_lay(1:NCOL,2:iTOA)+t_lay(1:NCOL,1:iTOA-1))/2._kind_phys t_lev(1:NCOL,iTOA+1) = t_lay(1:NCOL,iTOA) endif - + ! Compute layer pressure thicknes deltaP = abs(p_lev(:,2:model%levs+1)-p_lev(:,1:model%levs)) diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index 6d5b1f6ef..a4989237e 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -123,7 +123,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, nCol, nLev, p_lay, t_lay, p_lev, skt, lw_g top_at_1, & ! IN - veritcal ordering flag sources, & ! IN - source function sfc_emiss_byband, & ! IN - surface emissivity in each LW band - flux_clrsky)) + flux_clrsky,n_gauss_angles=3)) ! Store fluxes fluxlwUP_clrsky = sum(flux_clrsky%bnd_flux_up,dim=3) fluxlwDOWN_clrsky = sum(flux_clrsky%bnd_flux_dn,dim=3) @@ -148,7 +148,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, nCol, nLev, p_lay, t_lay, p_lev, skt, lw_g top_at_1, & ! IN - veritcal ordering flag sources, & ! IN - source function sfc_emiss_byband, & ! IN - surface emissivity in each LW band - flux_allsky)) + flux_allsky,n_gauss_angles=3)) ! Store fluxes fluxlwUP_allsky = sum(flux_allsky%bnd_flux_up,dim=3) fluxlwDOWN_allsky = sum(flux_allsky%bnd_flux_dn,dim=3)