E3SM-Project / E3SM

Energy Exascale Earth System Model source code. NOTE: use "maint" branches for your work. Head of master is not validated.
https://docs.e3sm.org/E3SM
Other
348 stars 359 forks source link

Incorrect snow emissivity input to COSP #3403

Closed brhillman closed 4 years ago

brhillman commented 4 years ago

The RRTMG interface incorrectly passes the longwave optical depth (absorption) for snow to COSP instead of the longwave emissivity. Lines 1548 to 1560 in components/cam/src/physics/rrtmg/radiation.F90 compute the gridbox-mean snow optics from the shortwave and longwave optical depths:

       !! compute grid-box mean SW and LW snow optical depth for use by COSP
       gb_snow_tau(:,:) = 0._r8
       gb_snow_lw(:,:) = 0._r8
       if (cldfsnow_idx > 0) then
          do i=1,ncol
             do k=1,pver
                if(cldfsnow(i,k) > 0.)then
                   gb_snow_tau(i,k) = snow_tau(rrtmg_sw_cloudsim_band,i,k)*cldfsnow(i,k)
                   gb_snow_lw(i,k) = snow_lw_abs(rrtmg_lw_cloudsim_band,i,k)*cldfsnow(i,k)
                end if
             enddo
          enddo
       end if

And then these are passed unmodified to COSP in lines 1572-1575:

      call cospsimulator_intr_run(state,  pbuf, cam_in, emis, coszrs, &
                   cld_swtau_in=cld_tau(rrtmg_sw_cloudsim_band,:,:),&
                   snow_tau_in=gb_snow_tau,snow_emis_in=gb_snow_lw)

An intermediate calculation is required that converts snow optical depth to emissivity, such as is done for longwave cloud emissivity on line 1548:

       emis(:ncol,:) = 1._r8 - exp(-cld_lw_abs(rrtmg_lw_cloudsim_band,:ncol,:))

This should only affect COSP outputs (and probably just ISCCP simulator output, i.e. FISCCP1_COSP, CLDTOT_ISCCP, etc., although that hasn't been confirmed).

wlin7 commented 4 years ago

Hi @brhillman , nice observation of this variable and the use in the call to cosp. After reviewing the cosp codes (cospsimulator_intr.F90 and cosp.F90), it appears to be fine to me.

  1. cospsimulator_intr_run actually asks for LW snow optical depth for the argument of snow_emis_in. The variable name is somewhat misleading indeed. snow_emis_in is then assigned to dem_s_snow.
real(r8), intent(in),optional :: snow_emis_in(pcols,pver) ! RRTM grid-box mean LW snow optical depth
dem_s_snow(1:ncol,1:pver) = snow_emis_in(1:ncol,1:pver)      !  10.5 micron grid-box mean optical depth of stratiform snow
  1. In cosp.F90, line 442, eventually, it is converted to actual emissivity in the format just like you showed.

    . gbx%dem_s_snow(j,k) = 1. - exp ( -1. * gbx%dem_s_snow(j,k))

I think the LW optical depth is passed in in the call for the purpose of being normalized by prec_ls later in cosp.F90.

I am also calling @zyuying 's attention to double check.

zyuying commented 4 years ago

Hi @brhillman , @wlin7 is right. I agree that the variable name is misleading here.