Vertical extrapolation#

Example of using PyWAsP to perform vertical extrapolation.

Prepare TopographyMap#

First, we need to prepare the topography map. This is done by reading the elevation and roughness maps and creating a TopographyMap object.

import numpy as np
import windkit as wk
import pywasp as pw

ssl = wk.load_tutorial_data("serra_santa_luzia")

topo_map = pw.wasp.TopographyMap(ssl.elev, ssl.rgh)

Define output locations#

Second, we need to define the output locations. This is done by creating a dataset with the coordinates of the output locations.

output_locs = wk.spatial.create_dataset(
    west_east=ssl.bwc.west_east.values,
    south_north=ssl.bwc.south_north.values,
    height=np.linspace(10.0, 100.0, 10),
    crs="EPSG:32629",
    struct="stacked_point",
)
print(output_locs)
<xarray.Dataset> Size: 177B
Dimensions:      (height: 10, stacked_point: 1)
Coordinates:
  * height       (height) float64 80B 10.0 20.0 30.0 40.0 ... 80.0 90.0 100.0
    south_north  (stacked_point) float64 8B 4.621e+06
    west_east    (stacked_point) float64 8B 5.147e+05
    crs          int8 1B 0
Dimensions without coordinates: stacked_point
Data variables:
    output       (height, stacked_point) float64 80B 0.0 0.0 0.0 ... 0.0 0.0 0.0
Attributes:
    Conventions:  CF-1.8
    history:      2026-01-29T14:38:40+00:00:\twindkit==2.0.0\twk.spatial.crea...

Calculate resource grid#

Finally, we can calculate the resource grid. This is done by calling the predict_wwc function. This function takes the output locations, the boundary conditions, and the topography map as input. The output is a weibull wind climate dataset at the output locations.

wwc = pw.wasp.predict_wwc(ssl.bwc, topo_map, output_locs)
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/pywasp/wasp/meso_climate.py:351: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge([ds_baro, ds_stab])
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/spatial.py:1087: UserWarning: Clipping bbox including marging is outside the bounds of the dataset to clip!
  warnings.warn(
/home/neil/DTU/repos/pywasp/modules/windkit/windkit/spatial/_interpolation.py:495: FutureWarning: In a future version of xarray the default value for compat will change from compat='no_conflicts' to compat='override'. This is likely to lead to different results when combining overlapping variables with the same name. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set compat explicitly.
  ds = xr.merge(results)

Plot the mean wind speed#

We can plot the mean wind speed to see the result.

wwc["wspd"].plot.line(y="height")
crs = 0, west_east = [514679.73127523] [m], sou...
[<matplotlib.lines.Line2D object at 0x782ff5532120>]

Total running time of the script: (0 minutes 1.128 seconds)

Gallery generated by Sphinx-Gallery