E3SM-Project / ACME-ECP

E3SM MMF for DoE ECP project
Other
9 stars 1 forks source link

Enable MCICA sampling with RRTMG for SP runs #84

Closed brhillman closed 5 years ago

brhillman commented 5 years ago

Enable MCICA subcolumn sampling of cloud fraction and cloud optics for SP configurations. Previously, the behavior was to always assume that clouds on the CRM were fully resolved as seen by the radiative transfer, so cloud "fraction" for a single CRM cell was always 0 or 1, and this was set in radiation_tend based on some seemingly arbitrary threshold of total cloud water. However, with longer radiation update intervals (i.e., longer physics timesteps, or setting iradsw = iradlw > physics timestep) and when using the reduced radiation columns to reduce the cost of radiation, this becomes a less reasonable assumption. This PR helps address this issue by enable subcolumn sampling of the CRM fields on the radiation "grid". This is done simply by passing a fractional cloudiness to the radiation calls in radiation_tend, rather than a 0 or a 1 each time. The fractional cloudiness is simply the time- (and possibly spatially-averaged, in the case of reduced radiation) binary (0 or 1) cloud fraction from the CRM (i.e., fraction of time that qcl + qci > 0 in the CRM integration loop). For now, this is enabled by defining the CPP flag MCICA_SP_RAD. Leaving this unset will turn off the MCICA sampling (the current behavior). We should make MCICA sampling the default in the future though.

Unfortunately, there was an existing crm_rad%cld being used, which was naively set to all 1s before (due to misunderstanding of the CF3D variable in vars), which should have been the quantity we were looking for. This PR fixes the definition of this quantity, but unfortunately that quantity was also being used by the modal_aero_wateruptake module. Fixing the definition then will cause bit-for-bit differences, even when the CPP flag MCICA_SP_RAD is not set. We could work around this by adding another variable to the physics buffer for the modal_aero_wateruptake module to work on, which would mimic the old behavior, but it seems like this too should be set more intelligently.