Reconciling surface layers wind speeds in CFS and ERA5 reanalyses #lifehack

In this post, I will discuss an all-time famous atmospheric variable: the “10 meter wind speed” (full name: “10mMSL hourly-averaged wind speed”, short name: WS_{10mMSL} ), and how (as I understand) it is treated in ERA5 and CFS reanalyses.

As explained in an earlier post, the ERA5 10m wind speeds during storms are typically smaller than those from CFS, and the CFS values are closer to values derived from measurements (over open seas, far from shore, where the influence of the land/sea mask of ERA5 and CFS reanalyses is negligible). This underestimation, which in my experience most practitioners agree to have noticed (see references below), often lead to underestimating large wave heights when using unadjusted ERA5 WS_{10mMSL} for ocean wave hindcast modelling.

Before proceeding further, please note also this post, on the same topic.

In effect, spectral wave models typically use WS_{10mMSL} for deriving the turbulent momentum stress \tau (which in turns is used for estimating the wind-related energy input to the wave field) via a simple surface layer analytical expression. This expression links the friction velocity u_{*} = \sqrt{ \tau / \rho} (\rho is the air density) to WS_{10mMSL} via a u_{*}-dependent roughness length z_{0} and, in some instances, the atmospheric stability:

$$ WS_{\mbox{10mMSL}} = \frac{u_{*}}{\kappa}\left(\ln\left(\frac{10 \mbox{m}}{z_{0}}\right)+\psi\left(\frac{10\mbox{m}}{L}\right)\right) \mbox{[Eq.1]} $$

where L is the Obukhov length and \psi an analytical function derived from experiments.

If you are not already familiar with these terms and expressions, have a look at this earlier post. If you are interested in exploring the #plethora of wind source input parametrisations used for spectral wave modelling, see:

To some extent, a bias in WS_{10mMSL} can be compensated by a change in these parametrisations (see slides 8-6 of (Ifremer, 2019)); but in my experience these biases are also often accounted for by adjusting WS_{10mMSL} directly; see for instance:

From a seastate modeller perspective, and/or if wind is of little importance to the data user, these adjustments and fixes are often enough. Yet, their are not fully satisfactory, and in the present article, I woud like to present:

  1. A summary of the empirical evidence for assessing the underestimation of the 10m wind speed in ERA5, compared with CFS;
  2. A sligthly more detailed, and hopefully clearer explanation for this underestimation (compared with my first post on this topic);
  3. Some tips and hacks on how to correct/use the ERA5 data.

1) Assessing the bias in ERA5 10m wind speeds

The issue has long been reported in the literature, as this underestimation was present as well in the previous reanalyses datasets from ECMWF. Here are recent papers and presentations: (Fery, 2018), (DHI, 2019b), (Oceanweather Inc, 2019), (Bentamy, 2021) and (Alday, 2021).

The task has been made difficult by the absence of high quality in-situ wind speed measurements at 10 mMSL in deep water and far offshore:

  • Measurements mounted on buoys (i.e. below 10 mMSL, often around 4 mASL) are often biased due to flow disturbance from the buoy or from the bracket there are mounted on. Also, some report that they may be sheltered by high waves during storms (I am actually not sure this effect is real);
  • Measurements mounted on platforms also suffer from flow disturbance, and they are often mounted above ~20 mLAT in deep waters (at least in the North Sea, where this is the indicative minimum platform elevation).

Fortunately the offshore wind industry, and its stringent requirements for on-site wind measurements (for yield purposes, primarily) has given us the wonderful floating LiDAR technology, which provide us with very accurate, precise, and high-quality wind data. If you don’t know what floating LiDARs are, see this post and the links to the validation reports therein. An almost exhaustive list of publicly available datasets can be found here (search for “floating LiDAR”). See also the earlier post for a map of the measurement locations in the North Sea.

Below is an example for the TNWA dataset in the North Sea: I have plotted, for a number of spectral significant wave height bins, the mean wind speed profiles for three stability classes (black: neutral, red: unstable and blue: stable). The buoy sensor at 4 m ASL (note: vector average measurements for this sensor!) is shown with a square, LiDAR measurements with full dots, and LiDAR measurements extrapolated downward to 4- and 10 mASL with a power law are shown with non-filled markers. Clearly, the 4 m measurements (buoy measurements) are likely biased low, but overall the profiles in the surface layer look realistic (and logarithmic, for neutral conditions).

Mean wind speed profiles recorded at the TNWA floating LiDAR data, for a range of significant wave heights and stability classes.

Now, see below: if I try to derive a 10m wind speed for each time stamp, by either interpolating between the 4- and 30 m signals, or by extrapolating downward from the LiDAR measurements, the comparison with ERA5 show the same underestimation; in-line with the results from the earlier post, and the literature. On the contrary, the CFS data show no apparent bias when compared with the LiDAR data:

Comparison between measured (x-axis) and modelled (y-axis) 10m wind speeds at TNWA. Top: ERA5, bottom: CFS (here. CFSv2).

2) Comparing ERA5 and CFS

2.1) Charnock, again Charnock, always Charnock

In CFS and ERA5 reanalyses the 10m wind speeds are computed from the friction velocity, the surface roughness and the atmospheric stability as in [Eq. 1].

The main difference in the two datasets lies in the way they treat the roughness length, see Table 2.8 of this comparison documnent.

In CFS, the “simple” (Charnock, 1955) relationship is used:

$$z_{0} = \alpha_{c} \frac{u_{*}^{2}}{g}$$

with \alpha_{c} = 0.014 (same value as for the NCEP reanalysis I believe, see (Renfrew, 2002) and Table B1 of (Germain, 2017)) and g is the gravitational acceleration.

For ERA5 (and ECMWF in general), the roughness length depends as well on the ratio between a stress coming from the seastate, \tau_{w}, and the atmospheric stress \tau. The formulation looks like this, see Eq. (3.26) of the IFS CY41R2 documentation part IV:

$$z_{0} = \alpha_{M}\frac{\nu}{u_{*}} + \alpha_{Ch} \frac{u_{*}^{2}}{g}$$

Where the first term deals with viscous effects for small wind speeds, and the second term contains a variable \alpha_{Ch}, which is not a constant, and which varies with the seastate as described in Eq. (3.11) of the IFS CY41R2 documentation part VII:

$$\alpha_{Ch} = \frac{\hat{\alpha}}{\sqrt{1-\frac{\tau_{w}}{\tau}}}$$

Where \hat{\alpha}= 0.0060 (see Eq. (3.20) of ibid.) and \tau_{w} is computed from the wave model (see Eq. (3.9) of ibid, it corresponds to the wind-input source term).

All of these equations are implicit and need to be solved numerically. Here is how the result compare, when using four different values of \tau_{w}/\tau ratios: the ERA5 values becomes quickly much larger than the ones from CFS for large values of \tau_{w}/\tau:

Comparison between the CFS (black) and ERA5 roughness length formulations.

2.2) Deriving ERA5’s real roughness length (i.e. not the one from the CDS)

One thing to note is that the values of roughness length available from the CDS are incorrect. They should not be used. The ECMWF team has made me aware of this known issue, it is explained in item 18 on this list. As I understand, the CDS values of z_{0,CDS} have been computed from WS_{10,neutral} and the friction velocity u_{*,ANALYSIS} from the analysis (not the forecast!) field, itself computed from WS_{10,neutral} and an incorrect value of z_{0}= 0.0001 m.

The real value of z_{0,ERA5} can be computed iteratively using (Eq.1) and:

  • The values of WS_{10,neutral} and \alpha_{Ch} that are available from the CDS;
  • The values of WS_{10} and \alpha_{Ch} that are available from the CDS, and the Obukhov length which I have calculated using the sensible heat flux, the friction velocity, the temperature, the dew point temperature and the pressure from the CDS.

I am showing below a comparison of all these variables: it is clear that the values from the CDS are too small compared to the ones derived iteratively from the other CDS data.

Comparisons between the roughness length derived iteratively from the ERA5 data and [Eq.1] (x-axis), and: the roughness length values from the CDS (left), the roughness length values derived from the CDS drag coefficient and neutral wind speed (right).

As to the friction velocity, the values are then correct, unlike what it stated in item 18 of the known issues discussed above. As confirmed to me by team ECMWF, the CDS values of u_{*} come from the forecast field and can be trusted:

Comparison between the friction velocity values derived from ERA5 data and [Eq.1] (iteratively) and from the CDS.

I can now make my own 10m wind using [Eq.1]; see below how the values compare to that from ERA5. The scatter is due in part to the way I have computed the Obukhov length, but also possibly to the small numerical inaccuracies that come with doing such “reverse-engineering” calculations.

Comparison between the 10m reversed-engineered as explained in the text (y-axis) and the values from the CDS (x-axis).

2.3) Comparing ERA5 and CDS surface layer models

Using the same iterative method, it is possible to compute the values of friction velocities for CFS. For doing this, I have used [Eq.1], a Charnock coefficient of 0.014, and the Obukov length from ERA5 (since I don’t have the value for CFS). It is actually possible to derive a CFS-specific value for L, using only CFS values and a bulk formulation, but this is for another post (for inspiration, see (Golestani, 2015)).

The results are shown below, and show that the friction velocities in both models are very comparable. Only the roughness lengths differ, which is the very likely cause for the differences between the wind speed values.

Left: comparison betwen the friction velocities from ERA5 and CFS (CFsv2). Right: comparison between the relationship between roughness lengths and friction velocities for ERA5 and CFS.

3) Tips and hacks for using ERA5

To sum-up the above:

  • The ERA5 and CFS friction velocities are very comparable;
  • The ERA5 roughness lengths are much larger than those from CFS for large sea states;
  • Therefore, the ERA5 wind speeds for large sea states are smaller than those from CFS;
  • High-quality floating LiDAR measurements indicate that the CFS model predicts wind speeds more accurately.

Hence, it is possible to improve ERA5 wind speeds by:

  • Keeping the ERA5 friction velocity and Obukhov length;
  • Changing the roughness length to a simple Charnock formulation, like in CFS;
  • Compute wind speed values at the desired elevation.

3.1) Deriving an adjusted neutral wind, from ERA5

For ocean wave modelling, it is common to use the neutral wind speed as input to the wave model. Using the method highlighted above, it is simple:

$$ WS_{10,neutral} =\frac{u_{*}}{\kappa}\ln\left(\frac{10 \mbox{m}}{z_{0}}\right) $$

with:

$$z_{0} = \alpha_{c} \frac{u_{*}^{2}}{g} \mbox{, with } \alpha_{c} = 0.014 \mbox{ or } 0.018 $$

The results are displayed below. the comparison with the measurements is convincing. A value of 0.018 for the Charnock coefficient seems to fit better the data.

Comparison between measured (x-axis) and modelled (y-axis) 10m wind speed values. Left: ajusted ERA5 values with a Charnock parameter of 0.014. Right: ajusted ERA5 values with a Charnock parameter of 0.018.

3.2) Deriving wind speed at any elevation, from ERA5

While the overestimation of the roughness length affects significantly more the wind speeds are small elevations, it does also affect the 100m wind; see below how, using the (Gryning, 2007) discussed in this earlier post for extrapolating the wind speed profile above the surface layer, a better match is achieved with the LiDAR measurements.

Comparison between measured (x-axis) and modelled (y-axis) 100m wind speed values. Left: original ERA5 values Right: ajusted ERA5 values with a Charnock parameter of 0.018, and the model from (Gryning, 2007) above the surface layer.

Using the same method, a convincing 200 mMSL wind speed can also be computed:

Same as above-right, but for 200 mMSL.

Conclusion

In this post, I described how the 10m wind speeds are computed in both CFS and ERA5 reanalyses. This follows from an earlier post where the topic was discussed at a high-level. The understimation of the 10m wind speeds in ERA5 has been assessed, and explained. Suggestions have been made to improve the useability of the ERA5 data for ocean wave hindcasting, and other offshore-wind related analyses.

I would like to thank the ECMWF team for their support.

Comments/suggestions are welcome.

Rémi