WEMC TECH BLOG #3: ERA5 10m/100m Analysis

We wanted to see if we could improve on the standard power law coefficient (1.389495) for calculating 100m wind speed from 10m data. The currently available ten years of ERA5 U and V netCDF wind components from CDS were concatenated, then calculated for wind speed using CDO; a handy collection of command-line operators to manipulate and analyse climate and numerical weather prediction data:

cdo sqrt -add -sqr 10Uall.nc -sqr 10Vall.nc 10wind.nc
cdo sqrt -add -sqr 100Uall.nc -sqr 100Vall.nc 100wind.nc

The coefficient dataset was calculated with CDO, by dividing 100m by 10m datasets:

cdo div 100wind.nc 10wind.nc coef.nc

The mean coefficient for the whole domain is 1.448035, slightly higher than the standard coefficient, taking it further away from the newly available ERA5 100m forecast data. The average standard deviation is 0.816657.

The ratio as a function of the geographical location was then plotted in Python, using matplotlib package’s plot.imshow() method.

First load the necessary python packages:

# importing of NetCDF files
import netCDF4
# plotting and data visualisations
from matplotlib import pyplot as plt
# n-dimensional arrays
import numpy as np
# high level functions for working with NetCDF files
import xarray as xr

 

Import the pre-calculated coefficient dataset:

# load NetCDF file into variable - using xarray open dataset function
coef = xr.open_dataset('/Users/user/Documents/ERA5/yearly_complete/allyears/coef.nc')

 

Calculate the mean average using the numpy mean method:

# calculate mean over 10 year dataset
t = coef.mean('time')

 

Finally, plot the total wind speed average using matplotlib imshow() method, note interpolation is set to ‘none’, this can be changed to apply various smoothing algorithms:

# plot mean average of full 10 years
t.uv100.plot.imshow(figsize=(15,10),interpolation='none')

Ratio 100m divided by 10m for ERA5 averaged over the period 2008-2017

 

Next we can check the standard deviation over this time period:

# calculate standard deviation over full 10 years
std = coef.std('time')

 

For this plot, the colour map (cmap=’terrain’) was adjusted to highlight the variation:

# plot standard deviation of full 10 years
std.uv100.plot.imshow(figsize=(15,10),interpolation='none',cmap='terrain')

Standard Deviation of the ratio 100m divided by 10m for ERA5 over the period 2008-2017

This indicates that a geographically-dependent coefficient would better reproduce the 100 m wind, when only 10 m is available.

by Luke Sanger (WEMC, 2018)

Recent Posts

Leave a Comment

Start typing and press Enter to search