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.

[1]:
import numpy as np
import windkit as wk
import pywasp as pw

bwc = wk.read_bwc(
    "../../../modules/examples/tutorial_4/data/SerraSantaLuzia.omwc", crs="EPSG:4326"
)
bwc = wk.spatial.reproject(bwc, to_crs="EPSG:32629")

elev_map = wk.read_vector_map(
    "../../../modules/examples/tutorial_4/data/SerraSantaLuzia.map",
    map_type="elevation",
    crs="EPSG:32629",
)

lc_map, lc_tbl = wk.read_vector_map(
    "../../../modules/examples/tutorial_4/data/SerraSantaLuzia.map",
    map_type="roughness",
    crs="EPSG:32629",
)

topo_map = pw.wasp.TopographyMap(elev_map, lc_map, lc_tbl)

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.

[2]:
output_locs = wk.create_dataset(
    west_east=bwc.west_east.values,
    south_north=bwc.south_north.values,
    height=np.linspace(10.0, 100.0, 10),
    crs="EPSG:32629",
    struct="stacked_point",
)
print(output_locs)
<xarray.Dataset>
Dimensions:      (height: 10, stacked_point: 1)
Coordinates:
  * height       (height) float64 10.0 20.0 30.0 40.0 ... 70.0 80.0 90.0 100.0
    south_north  (stacked_point) float64 4.621e+06
    west_east    (stacked_point) float64 5.147e+05
    crs          int8 0
Dimensions without coordinates: stacked_point
Data variables:
    output       (height, stacked_point) float64 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0
Attributes:
    Conventions:  CF-1.8
    history:      2024-02-16T10:48:47:\twindkit==0.7.1.dev17+ga2ef68d\twk.cre...

Calculate resource grid

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

[3]:
# pwc = pw.wasp.generalize_and_downscale(output_locs, bwc, topo_map)

Plot the mean wind speed

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

[4]:
# pwc["wspd"].plot.line(y="height")