Pressure Levels and Layers
Definitions
Satellite soundings as profiles of temperature, T(p), water vapor (H_{2}O) and trace gases along a pressure grid [hPa], from the Earth surface to top of atmosphere. CLIMCAPS reports its retrieved soundings on the standard 100 level pressure grid also used in SARTA (Strow et al., 2003), which spans 1100 hPa to 0.016 hPa.
CLIMCAPS retrieves T(p) as the temperature at each pressure level, while it retrieves H_{2}O, O_{3}, CO, CH_{4}, HNO_{3}, N_{2}O and SO_{2} (i.e., all gases except CO_{2}) as column densities [molec/cm^{2}] on pressure layers (Section 1).
A pressure layer is the vertical area between two pressure levels. CLIMCAPS retrieves CO_{2} as pressure layer mixing ratio [ppb], although CO_{2} is reported in the product files as volume mixing ratio on pressure levels, which is the mole of CO_{2 }per mole of dry air [mol/mol].
In this document we discuss issues that can significantly affect data application and understanding as they relate to CLIMCAPS retrieval levels and layers. These are:
- Levels versus Layers, and converting from one to the other.
- Adjusting retrieved profiles to scene surface pressure
1. Levels versus Layers
CLIMCAPS requires all state variables to be on the standard 100 pressure levels used in SARTA (Strow et al., 2003) for accurate calculations of top of atmosphere infrared radiance in narrow spectral intervals. This is a fixed 100-level pressure grid (P_{lev}) and available in the CLIMCAPS product file as air_pres, which is the same at all scenes across the globe irrespective of variations in Earth surface pressure. P_{lev}(1) = 0.016 hPa, and P_{lev}(100) = 1100.0 hPa.
CLIMCAPS does not retrieve surface pressure but instead uses MERRA-2 surface pressure as state variable and write it to the product files as: aux/prior_surf_pres [Pa]. The MERRA-2 surface pressure values written to aux/prior_surf_pres [Pa] have been spatially and temporally interpolated to CLIMCAPS.
Over the ocean, surface pressure is typically 1013.25 hPa. High terrain surface pressure is often less than 800 hPa, such as over the Tibetan Plateau in Asia, the Rocky Mountains in North America, and the Andes Mountains in South America. Most of the time P_{lev}(100) is well below Earth surface pressure, which means that one needs to truncate the retrieved profiles according to the true Earth surface pressure at the target scene.
The CLIMCAPS product field, air_pres_lay_nsurf, contains the index where the standard air_pres array intersects Earth surface pressure (aux/prior_surf_pres) at a target retrieval scene. In each CLIMCAPS product file there is air_pres with dimension [air_pres] where air_pres = 100, and air_pres_lay_nsurf with dimension [atrack x xtrack], where atrack = 30 to indicate the number of retrieval footprints along each scanline and xtrack = 45 to indicate the number of scanlines per file.
Similarly, for the pressure layer array, air_pres_lay, there is a corresponding air_pres_lay_nsurf field. One should truncate temperature retrieval at position atrack = i and xtrack = j with P_{bot} = air_pres_lay_nsurf(i, j) such that T(p) = air_temp(i, j, 1:P_{bot}).
Stated differently, CLIMCAPS profile retrievals are valid from the top of atmosphere, air_pres(1), to the Earth surface as defined by MERRA-2 surface pressure (aux/prior_surf_pres) and indicated by air_pres_lay_nsurf for each retrieval scene
CLIMCAPS retrieves trace gas quantities on a standard pressure layer grid (air_pres_lay), which is a 100 layer grid derived from air_pres. Figure 1 gives a graphic representation of pressire levels versus layers.
Figure 1: An illustration showing the differences between CLIMCAPS pressure levels (P_{lev}) [air_pres] and pressure layers (P_{lay}) [air_pres_nsurf] for an index n, where . Temperature is retrieved on levels while trace gasses are retrieved on pressure layers. The mathematical conversion from levels to layers is shown in Eq. 1.
We derive the pressure layer ( \( P_{lay} \) ) grid from pressure levels (\( P_{lev} \)) as follows:
Eq. 1 \( P_{lay} (n) = \frac{ P_{lev} (n) - P_{lev} (n-1) }{\log_{10}\big(P_{lev}(n)/P_{lev}(n-1)\big) } \)
where \(n \in \{2,...,100\} \), \(P_{lay}(1) = 0.00284 \) hPa, and \(P_{lay}(100) = 1085.36 \) hPa. All trace gas quantities in the mol_lay group, as well as aux/co2_vmr are retrieved and reported on this pressure layer grid. It is thus important that you associate the CLIMCAPS trace gas retrieval profiles with pressure layers (air_pres_lay) not levels (air_pres).
Converting Levels to Layers
Some applications may require you to evaluate CLIMCAPS temperature retrieval levels alongside H_{2}O density layers. In such cases, convert air_temp from its native definition on air_pres levels to air_pres_lay layers as follows:
Assume that the top of atmosphere temperature is isothermal (Eq. 2), while all other layers are calculated as two-point running means (Eq. 3).
Eq. 2 \( T_{lay}(n) = T_{lay}(n), n=1 \)
Eq. 3 \( T_{lay}(n) = 0.5 \times ( T_{lev}(n) + T_{lev}(n-1) ), n \in \{2,...,100\} \)
Converting Layers to Levels
If you wish to represent CLIMCAPS column density trace gas retrievals[molecules/cm^{2}] on pressure levels, we recommend the procedure below. Note that with this conversion from pressure layers to levels we will use water vapor column density (h2o_vap_mol_lay) as example in the pseudocode below.
# (1) Extract relevant fields from the netCDF file # (2) Calculate mid-point between two pressure layers # (3) Interpolate to pressure level grid using the natural logarithmic form of the profiles to linearize the calculation |
2. Adjusting retrieved profiles to surface pressure at a target scene
CLIMCAPS retrieves atmospheric variables along a standard pressure grid that does not account for variation in surface pressure, P_{s}. The CLIMCAPS product file records the standard pressure level (air_pres) and pressure layer (air_pres_lay) array index closest to surface pressure P_{s}, as air_pres_lay_nsurf.
When the standard 100-level air_pres array intersects with Earth surface pressure at a target scene, one of two scenarios occur, which we demonstrate in Figure 2.
Figure 2: An illustration of the two types of boundary layer conditions that result when retrieving atmospheric variables on a standard pressure grid, P_{obs}, which for CLIMCAPS is the pressure levels profile, air_pres. CLIMCAPS uses surface pressure, P_{s}, from MERRA-2. Here the subscript n denotes ranges from 1 to 100, and represents the index at which the CLIMCAPS retrieval is reported at. Unless the retrieval is performed over ocean P_{obs(n)} is always less than P_{obs(plev)} with n < plev, plev = 100, and P_{obs(plev) }= 1100 mb. Scenario 1 requires a narrowing of the boundary layer with interpolation of the retrieved value from P_{obs(n-1)} to P_{s}. Scenario 2 requires a broadening of the boundary layer with extrapolation of the retrieved value from P_{obs(n-1)} to P_{s}. The brown dotted line indicates the width of the adjusted boundary layer, which always exceeds 5 mb and varies horizontally with surface topography.
We define surface air temperature (T_{surf}) as the atmospheric temperature at surface pressure (P_{surf}; aux/prior_surf_pres). We can derive T_{surf} from the retrieved temperature profile (air_temp) as follows:
Eq. 4 \( T_{surf} = T(P_{bot}-1) + BL_{mult} \times [ T(P_{bot}) - T(P_{bot}-1) ] \)
Where \(BL_{mult}\) is the boundary layer multiplier that quantifies the degree to which the bottom profile level needs to be adjusted so that the bottom temperature value represents the temperature at surface pressure, not the standard level closest to surface pressure. \(P_{bot}\) (air_pres_lay_nsurf) is the index of the pressure level that is closest to P_{surf} while always satisfying the condition:
Eq. 5 \( [ P_{surf}-P_{lev}(P_{bot}-1)] \geq 5 hPa \)
This condition ensures that P_{lev}(P_{bot}) is always less than P_{surf} by at least 5 hPa. BL_{mult} is given by:
Eq. 6 \( BL_{mult} = \frac{P_{surf} - P_{lev}(P_{bot}-1)}{P_{lev}(P_{bot})-P_{lev}(P_{bot}-1)} \)
Figure 2 Scenario 1 demonstrates a case where BL_{mult} < 1.0, and Scenario 2 a case where BLmult ≥ 1.0.
Eq. 3 convert temperature from level to a layer for any layer in the temperature profile. In context of surface layer, Eq. 4 can be used to calculate the bottom layer with:
Eq. 7 \( T_{lay}(P_{bot}) = 0.5 \times ( T(P_{bot}-1) + T_{surf} ) \)
For traces gases, the values are retrieved as layer column density, so the boundary layer column density should be adjusted for surface pressure P_{surf} differently than for air_temp on pressure levels. The boundary layer for trace gases is indicated by the P_{bot} (air_pres_lay_nsurf) of air_pres_lay. This bottom layer needs to be either narrowed (Figure 2, Scenario 1) or broadened (Figure 2, Scenario 2) with B_{mult} as follows:
Eq. 8 \( CD_{surf} = BL_{mult} \times T_{gas}(P_{bot}) \)
Where \(T_{gas} \) depicts any of the CLIMCAPS trace gas retrieval species, including CO_{2}.
The CLIMCAPS temperature retrieval product, air_temp, already has this correction applied, which means that air_temp(i,j,P_{bot}) is the temperature at surface pressure.
The CLIMCAPS trace gas column densities, e.g., wat_vap_mol_lay, does NOT have this correction applied and you have to follow the instructions in Section 3 below to make the adjustment.
All CLIMCAPS derived values, such as relative humidity and mixing ratio, has this correction applied, so you can use those fields as is.
3. Pseudocode for adjusting boundary layer values
Calculating BL_{mult}
Below, we show some example pseudocode to calculate BL_{mult} from Eq. 6. Three variables are required from the CLIMCAPS netCDF file: air pressure (air_pres), L_{bot} (air_pres_nsurf), and P_{surf} (aux/prior_surf_pres). P_{surf} is a two-dimensional variable (y (atrack), x (xtrack)). We simplify our discussion by only calculating BL_{mult} and T_{surf} at the first footprint (atrack = xtrack = 0).
# Extract relevant fields from the netCDF file # Psurf for the first footprint # Calculate the boundary layer multiplier |
Calculating T_{surf}
Below we show an example pseudocode to calculate T_{surf}, for a single footprint, which we showed in Eq. 4. We first import the T(p) variable (air_temp) from the netCDF file. T(p) is a three-dimensional variable (y (atrack), x (xtrack), and z (air_pres)), so like psurf in our BLmult pseudocode above, we keep only the value from the first footprint (atrack = xtrack = 0). The variable t_diff is the difference between the temperature from the level above the bottom level and the temperature from the level at Pbot. Surface temperature (t_surf) is then calculated on the last line.
# Extract relevant fields from the netCDF file t_diff = temp[0, 0, Pbot] - temp[0, 0, Pbot - 1]) |
The above code will map a single value to t_surf. To calculate T_{surf} over the entire swath, surface temperature can be defined as a two-dimensional vector. Instead of using the first footprint (atrack = xtrack = 0), the user can write a loop and iterate over atrack and xtrack to calculate the T_{surf} for all footprints in the file(s).
Calculating Total Water Vapor
Water vapor is often integrated to show column total H_{2}O. In our example pseudocode below, we import the H_{2}O column density (h2o_liq_mol_lay), and extract the column values for the first footprint (iobs = 0). Then, we compute total H_{2}O for all layers except the bottom layer, from 1 to P_{bot}-1. We adjust the bottom layer (P_{bot}) with BL_{mult}^{ }and add it to the total, as shown in Eq. 8. Like T(p), users can incorporate the procedure from the pseudocode below in a loop to process the whole swath.
# Read water vapor column density values from the netCDF file # Compute total water for all pressure layers up to the layer above the surface layer # Then add in the adjusted surface layer quantity |