Skip to content

Instantly share code, notes, and snippets.

@laclouis5
Created September 24, 2022 13:06
Show Gist options
  • Save laclouis5/8ee4ec469e68cacfd039b8ed6829a4cd to your computer and use it in GitHub Desktop.
Save laclouis5/8ee4ec469e68cacfd039b8ed6829a4cd to your computer and use it in GitHub Desktop.
Évolution de la vitesse moyenne des vents à 10 m et 100 m d'altitude entre 1959 et 2021
#!/usr/bin/env python3
from itertools import product
import numpy as np
from tqdm import tqdm
from netCDF4 import Dataset
import csv
HOURS_PER_YEAR = 24 * 365
NB_YEARS = 2
ds = Dataset("winds_data.nc")
latitudes, longitudes = ds["latitude"][:], ds["longitude"][:]
timestamps = ds["time"]
assert len(timestamps) == NB_YEARS * HOURS_PER_YEAR
mean_wind_speed_10 = np.zeros(shape=(NB_YEARS, len(latitudes), len(longitudes)), dtype=np.float64)
mean_wind_speed_10_u = np.zeros_like(mean_wind_speed_10)
mean_wind_speed_10_v = np.zeros_like(mean_wind_speed_10)
mean_wind_speed_100 = np.zeros(shape=(NB_YEARS, len(latitudes), len(longitudes)), dtype=np.float64)
mean_wind_speed_100_u = np.zeros_like(mean_wind_speed_100)
mean_wind_speed_100_v = np.zeros_like(mean_wind_speed_100)
u10, v10 = ds["u10"], ds["v10"]
u100, v100 = ds["u100"], ds["v100"]
def accumulate(u, v, iyear, m, mu, mv):
m[iyear] += np.hypot(u, v)
mu[iyear] += u
mv[iyear] += v
for itime in tqdm(range(len(timestamps)), desc="Computing"):
iyear = itime // HOURS_PER_YEAR
accumulate(u10[itime], v10[itime], iyear,
mean_wind_speed_10, mean_wind_speed_10_u, mean_wind_speed_10_v)
accumulate(u100[itime], v100[itime], iyear,
mean_wind_speed_100, mean_wind_speed_100_u, mean_wind_speed_100_v)
mean_wind_speed_10 /= HOURS_PER_YEAR
mean_wind_speed_10_u /= HOURS_PER_YEAR
mean_wind_speed_10_v /= HOURS_PER_YEAR
mean_wind_speed_100 /= HOURS_PER_YEAR
mean_wind_speed_100_u /= HOURS_PER_YEAR
mean_wind_speed_100_v /= HOURS_PER_YEAR
diff_10 = mean_wind_speed_10[1] - mean_wind_speed_10[0]
diff_10_percent = diff_10 / mean_wind_speed_10[0]
diff_100 = mean_wind_speed_100[1] - mean_wind_speed_100[0]
diff_100_percent = diff_100 / mean_wind_speed_100[0]
with open("mean_winds_speed.csv", "w", encoding="UTF8", newline="") as f:
writer = csv.writer(f)
writer.writerow([
"lat", "long",
"wind_speed_10_1959", "wind_speed_10_2021",
"wind_speed_100_1959", "wind_speed_100_2021",
"wind_speed_10_1959_u", "wind_speed_10_1959_v",
"wind_speed_10_2021_u", "wind_speed_10_2021_v",
"wind_speed_100_1959_u", "wind_speed_100_1959_v",
"wind_speed_100_2021_u", "wind_speed_100_2021_v",
"diff_10", "diff_10_percent", "diff_100", "diff_100_percent",
])
for ((ilat, lat), (ilon, lon)) in product(enumerate(latitudes), enumerate(longitudes)):
writer.writerow([
float(lat), float(lon),
mean_wind_speed_10[0, ilat, ilon].item(), mean_wind_speed_10[1, ilat, ilon].item(),
mean_wind_speed_100[0, ilat, ilon].item(), mean_wind_speed_100[1, ilat, ilon].item(),
mean_wind_speed_10_u[0, ilat, ilon].item(), mean_wind_speed_10_v[0, ilat, ilon].item(),
mean_wind_speed_10_u[1, ilat, ilon].item(), mean_wind_speed_10_v[1, ilat, ilon].item(),
mean_wind_speed_100_u[0, ilat, ilon].item(), mean_wind_speed_100_v[0, ilat, ilon].item(),
mean_wind_speed_100_u[1, ilat, ilon].item(), mean_wind_speed_100_v[1, ilat, ilon].item(),
diff_10[ilat, ilon].item(), diff_10_percent[ilat, ilon].item(),
diff_100[ilat, ilon].item(), diff_100_percent[ilat, ilon].item(),
])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment