⚠️ This is the first operational version of the handbook, but it is still a work in progress and will be heavily updated during 2024! ⚠️

Hazard assessment for windstorms#

Click Binder to open this workflow on Binder.
Click STORMS to go to this workflow’s GitHub repository.

This event-based windstorm workflow can be used to see damages of a storm by combining hazard, exposure and vulnerability. The workflow is a simplified version of the work by Koks & Haer (2020). Here the hazard is a map with the maximum 3-second wind gust of a storm.

Hazard data#

Using the Copernicus Climate Data store, historical storm footprints can be retrieved. Next to that, synthetic storms footprints can be found that are physically realistic and thus plausible storms. These synthetic storms can be useful to create a larger overview of possible events that can affect the area in current-day situations. Both datasets give the footprints of the maximum 3-second gust per 72 hours per grid cell.

Preparation work#

Select area of interest#

Before downloading the data, we will define the coordinates of the area of interest. Based on these coordinates we will be able to clip the datasets for further processing, and eventually display hazard and damage maps for the selected area.

To easily define an area in terms of geographical coordinates, you can go to the Bounding Box Tool to select a region and get the coordinates. Make sure to select ‘CSV’ in the lower left corner and copy the values in the brackets below. Next to coordinates, please specify a name for the area which will be used in plots and saved results.

## name the area for saving datasets and plots# specify the coordinates of the bounding box
bbox = [-8.811,42.6647,-7.1524,43.8009] # Barcelona, Spain
areaname = 'DeLugo_Spain'

# Examples:
# bbox = [-1.6,46,-1.05,46.4]; areaname = 'La_Rochelle'
#bbox = [1.983871,41.252461,2.270614,41.449569]; areaname = 'Barcelona'
#bbox = [12.1,45.1,12.6,45.7]; areaname = 'Venice'
#bbox = [-9.250441,38.354403,-8.618666,38.604761]; areaname = 'Setubal'

Load libraries#

import os
from zipfile import ZipFile

import rioxarray as rxr
import xarray as xr
from damagescanner.core import RasterScanner

import matplotlib.pyplot as plt

import cdsapi
import numpy as np
import pandas as pd

import contextily as ctx

Create the directory structure#

In order for this workflow to work even if you download and use just this notebook, we need to set up the directory structure.
Next cell will create the directory called ‘STORM_event_raster’ in the same directory where this notebook is saved.

# Define the folder for the storm workflow
workflow_folder = 'STORM_event_raster'

# Check if the workflow folder exists, if not, create it
if not os.path.exists(workflow_folder):
    os.makedirs(workflow_folder)

general_data_folder = os.path.join(workflow_folder, 'general_data')

# Check if the general data folder exists, if not, create it
if not os.path.exists(general_data_folder):
    os.makedirs(general_data_folder)
# Define directories for data and plots within the previously defined workflow folder
data_dir = os.path.join(workflow_folder, f'data_{areaname}')
plot_dir = os.path.join(workflow_folder, f'plots_{areaname}')

if not os.path.exists(data_dir):
    os.makedirs(data_dir)
if not os.path.exists(plot_dir):
    os.makedirs(plot_dir)

Download and view a single storm event#

First we need the information on the hazard we want to analyse. In this workflow we will start by downloading a storm in Spain from the historical wind storm data set. In the “Download data” tab select “widstorm footprints” and select one of the available dates.

Alternatively, you can also use the code below and download the data using the API provided by the Climate Data Store. Be sure to register an account and obtain the userid and the api key to place below

day = '24'
month = '01'
year = '2009'
storm_name = 'Klaus'

URL = 'https://cds.climate.copernicus.eu/api/v2'
KEY = None #add your own
c = cdsapi.Client(url=URL, key=KEY)

c.retrieve(
    'sis-european-wind-storm-indicators',
    {
        'variable': 'all',
        'format': 'zip',
        'product': 'windstorm_footprints',
        'year': year,
        'month': month,
        'day': day,
    },
    f'{general_data_folder}/{storm_name}.zip'
)

To check the dataset we open the file

with ZipFile(f"{general_data_folder}/{storm_name}.zip") as zf:

    # Let's get the filename first
    file = zf.namelist()[0]

    # And now we can open and select the file within Python
    with zf.open(file) as f:
        windstorm_europe = xr.open_dataset(f)

windstorm_europe = windstorm_europe.rename({'Latitude': 'y','Longitude': 'x'})
windstorm_europe = windstorm_europe.rio.set_spatial_dims(x_dim="x",y_dim="y", inplace=True)

windstorm_europe.rio.write_crs(4326, inplace=True)

windstorm_europe = windstorm_europe['FX']['z'==1]

#plot
windstorm_europe.plot()
plt.title('Windstorm across Europe')
Text(0.5, 1.0, 'Windstorm across Europe')
../../../../_images/9d940a89ff291bce8cf0858bdf0a4b3d60ee5f99459b1c8c08b0cdd7076cb4f2.png

In the plot above you can see the high windspeeds of the storm light up in yellow across Europe and especially the northwest of the Iberian peninsula.

Now we will clip the dataset to a wider area around the region of interest, and call it windstorm_region. The clipping of the dataset allows to reduce the total size of the dataset so that it can be loaded into memory for faster processing and plotting.

windstorm_region = windstorm_europe.rio.clip_box(*bbox, crs="EPSG:4326")

# we delete the map variable to save computing resources for later
del windstorm_europe

# save the data as nc file
windstorm_region.to_netcdf(f'{data_dir}/{storm_name}.nc')
windstorm_region.rio.resolution()
(0.016665899999999567, -0.01666670000000181)
windstorm_region.plot()

#set title
plt.title(f'Windstorm {storm_name} across the region')
Text(0.5, 1.0, 'Windstorm Klaus across the region')
../../../../_images/7095b66a55e1a254ba41117fb4c5a38b161d15148c2bee2cb80c9cf919b10ae6.png

Conclusions#

In this hazard workflow we learned:

  • How to retrieve winstorm footprints for your specific region.

The regional windstorm map can now be used in the risk assessment workflow.

Contributors#

Authors:

  • Ted Buskop (Deltares & Vrije Universiteit Amsterdam, IVM)

References:

  • Koks, E.E., Haer., T. A high-resolution wind damage model for Europe. Sci Rep 10, 6866 (2020). https://doi.org/10.1038/s41598-020-63580-w

  • Copernicus Climate Change Service, Climate Data Store, (2022): Winter windstorm indicators for Europe from 1979 to 2021 derived from reanalysis. Copernicus Climate Change Service (C3S) Climate Data Store (CDS). DOI: 10.24381/cds.9b4ea013 (Accessed on DD-MMM-YYYY)

  • Copernicus Climate Change Service, Climate Data Store, (2022): Synthetic windstorm events for Europe from 1986 to 2011. Copernicus Climate Change Service (C3S) Climate Data Store (CDS). DOI: 10.24381/cds.ce973f02 (Accessed on DD-MMM-YYYY)