-
Notifications
You must be signed in to change notification settings - Fork 178
Description
For most model initialization datasets, temperature and specific humidity have the same vertical grid structure. For instance, the GFS pgrb2 files contain each of these variables every 25 hPa from 1000-900 hPa, every 50 hPa from 900-100 hPa, and at identical selected levels above 100 hPa. This is not always true, however. For instance, combining the GFS pgrb2 ("most commonly used parameters") and pgrb2b ("least commonly used parameters") files results in temperature every 25 hPa from 1000-100 hPa but no change to the specific humidity vertical levels.
Lines 604-615 of ungrib/src/rrpr.F (link here) handle data processing when specific humidity is the input moisture variable. This routine gets the vertical dimensions of the temperature variable and passes that on to the compute_rh_spechumd_upa subroutine to convert the input specific humidity to RH. Because only the temperature variable's dimensions are obtained, however, the computed relative humidity at x75 hPa and x25 hPa between 900-100 hPa is 0% because there is no specific humidity information on these levels.
An example of how this affects the model initialization is provided below. This is from a 0-h MPAS-Atmosphere initialization (125 vertical levels with a 74 km model top) using a GFS input dataset that combines the pgrb2 and pgrb2b parameters and uses specific humidity as the input moisture variable. Note the sawtooth pattern between vertical levels 20 and 70, corresponding to ~900-100 hPa in these simulations. The model vertical levels end up interpolating between 0 values on the x75 hPa and x25 hPa isobaric surfaces and realistic values on the x00 hPa and x50 hPa isobaric surfaces.
There are a few potential workarounds or fixes that come to mind:
- Use relative humidity instead of specific humidity as the input field. A potential issue with doing so is highlighted in issue 267, however.
- Check for inconsistent vertical grids for the temperature and specific humidity input fields and raise an error if they differ. This would force users to either manually interpolate the coarser field to the finer field's vertical grid or to use the coarser of the two datasets, which may not be ideal.
- Check for inconsistent vertical grids for the temperature and specific humidity fields and interpolate the coarser field to the finer field's vertical grid, such that they have the same number of vertical levels.
- Only compute relative humidity on the coarser variable's isobaric levels (in the above example, only on the specific humidity field's isobaric levels). I'm not sure if this would cause issues downstream (metgrid for WRF, init_atmosphere for MPAS), however.
