Tuuleenergia tiheduse analüüs Liivi lahes ERA5 andmete põhjal (1993 - 2023)
Creators
Description
Võrdlusandmed
Uuring põhineb ERA5 reanalüüsi andmestikul, mille on koostanud Euroopa Keskpika Ilmaennustuse Keskus (ECMWF). Läänemere piirkonna tunnised 10 m tuulekomponendid (u10, v10) olid võetud ERA5 arhiivist. Algandmed katavad perioodi 1993 - 2023 ruumilise lahutusega 0.25x0.25 kraadi.
Meetodid ja skript
Kogu andmetöötlus oli viidud, kasutades Climate Data Operators (CDO). Tunnilised 10 m tuulekomponendid (u10, v10) olid ühendatud pidevaks aegridade jadaks perioodiks 1993-2023. Tuule kiirus 10 m kõrgusel oli arvutatud antud valemiga: |v| = sqrt({u10}^2 + {v10}^2). Tuuleenergia tihedus oli arvutatud valemiga: E = 0.5 * rho_air * |v|^3 (kus õhu tihedus rho_air = 1.225 kg m^{-3}).
Töötlusetapid:
- Tuule kiiruse ja energia arvutamine u10 ja v10 põhjal;
- Tuuleenergia ajakeskmise ruumilise kaardi arvutamine Läänemere piirkonna jaoks;
- Liivi lahe (Gulf of Riga) piirkonna ruumiline väljalõige pikkus- ja laiuskraadi piirava kasti abil;
- Teisendamine tunnilisest ajasammust päevaseks ning seejärel päevane ja ruumiline keskmistamine piirkonna üle, mille tulemusel oli saadud ühemõõtmeline päevane aegrida;
- Tuuleenergia aasta-päevade (yearday) keskmise ja standardhälbe arvutamine.
Kõik töötlusetapid on esitatud bash skriptis "wind_energy.sh", mis on allpool näidatud:
#!/bin/bash
# Tuule energia (ERA5): 0.5* rho_air* 10 m windspeed ^3; time mean map, yearday mean (+std) timeseries averaged over GoR
set -euo pipefail
# Sisendandmed
era5_folder=/mnt/hpc/public/mko/ERA5
esimene_aasta=1993
viimane_aasta=2023
# Töökaustad
projekt=$HOME/S25_IvanN/final_assignment/wind
work=$projekt/work
out=$projekt/out
mkdir -p "$work" "$out"
# CDO seaded
cdo_opt='-O -s -L -f nc4 -z zip1 -b F32' # -O = vanade failide üle kirjutamine, -s = vähem teksti väjundis, -L = suured failid, -f nc4 = netcdf4 formaat, -z zip1 = zippimine, -b F32 = 32 bitilised andmed
# Piirkond: Gulf of RIga (GoR): lon1,lon2,lat1,lat2
piirid="21,30,57,61"
# Õhu tihedus (kg/m^3)
rho_air=1.225
# Failinimed
uv_1h="$work/u10v10_1h_${esimene_aasta}_${viimane_aasta}.nc" # u10 ja v10 andmed (1h), kõik aastad ühes failis
e_1h="$work/energy_1h_${esimene_aasta}_${viimane_aasta}.nc" # Tuuleenergia (0.5*rho*|v|^3) (1h)
e_1h_only="$work/energy_1h_only_${esimene_aasta}_${viimane_aasta}.nc" # ainult energia (ilma u10,v10,wind10)
kaart_timmean="$out/energy_timmean_map_${esimene_aasta}_${viimane_aasta}.nc" # time mean map
e_gor_1h="$work/energy_gor_1h_${esimene_aasta}_${viimane_aasta}.nc" # energy (GoR, 1h)
e_gor_1d="$work/energy_gor_1dmean_${esimene_aasta}_${viimane_aasta}.nc" # energy (Gor, päevakeskmine)
e_gor_ts="$out/energy_gor_daily_ts_${esimene_aasta}_${viimane_aasta}.nc" # päevane aegrida, ruumiliselt keskmistatud (GoR)
yearday_mean="$out/energy_gor_yeardaymean.nc" # Keskmine energia (yearday mean, GoR)
yearday_std="$out/energy_gor_yeardaystd.nc" # yearday std (standarthälve)
yearday_meanstd="$out/energy_gor_yearday_mean_std.nc" # yearday mean + std (joonistamiseks)
# u10 ja v10 ühendamine kõikidest kuufailidest
massiiv=() # Uus tühi massiiv
for y in $(seq "$esimene_aasta" "$viimane_aasta"); do # Kõik aastad
massiiv+=( "$era5_folder/meteo.ERA5.baltic.1h.${y}."*.nc ) # 12 uut kuufaili massiivi iga aasta jaoks(*.nc )
done
# Ühendamine aja järgi, iga massiivi element:
rm -f "$uv_1h" #Vana faili kustutamine
cdo $cdo_opt -selname,u10,v10 -mergetime \
"${massiiv[@]}" \
"$uv_1h" # lõplik fail : "u10v10_1h_1993_2023.nc"
# Tuule kiirus ja energia:
cdo $cdo_opt expr,"wind10=sqrt(u10*u10+v10*v10);energy=0.5*${rho_air}*wind10*wind10*wind10" \
"$uv_1h" "$e_1h"
# Ainult energia muutuja (et fail oleks väiksem)
cdo $cdo_opt selname,energy "$e_1h" "$e_1h_only"
# Ülesanne 1: ajakeskmine kaart (timmean)
cdo $cdo_opt timmean "$e_1h_only" "$kaart_timmean"
# Kontroll
cdo -s sinfo "$kaart_timmean"
# Ülesanne 2: yearday mean +std GoR keskmisena
cdo $cdo_opt sellonlatbox,$piirid "$e_1h_only" "$e_gor_1h" # Piirkonda lõikamine (GoR)
cdo $cdo_opt daymean "$e_gor_1h" "$e_gor_1d" # Päevakeskmine
cdo $cdo_opt fldmean "$e_gor_1d" "$e_gor_ts" # Ruumiline keskmine (fldmean)
cdo $cdo_opt ydaymean "$e_gor_ts" "$yearday_mean" # Päeva-aasta keskmine
cdo $cdo_opt ydaystd "$e_gor_ts" "$yearday_std" # Päeva-aasta standarthälve
cdo $cdo_opt merge "$yearday_mean" "$yearday_std" "$yearday_meanstd" # mean ja std ühes failis (merge)
# Väljund
ls -lh "$out"
Matlab skript andmete analüüsimiseks ja nende visualiseerimiseks:
clc; clear; clf; close all
%% Failide struktuur
ncdisp('energy_timmean_map_1993_2023.nc')
ncdisp('energy_gor_daily_ts_1993_2023.nc')
ncdisp('energy_gor_yeardaymean.nc')
ncdisp('energy_gor_yeardaystd.nc')
ncdisp('energy_gor_yearday_mean_std.nc')
%% time mean map (Ülesanne 1. osa)
E = ncread('energy_timmean_map_1993_2023.nc','energy');
lon = ncread('energy_timmean_map_1993_2023.nc','longitude');
lat = ncread('energy_timmean_map_1993_2023.nc','latitude');
% Kontroll
size(E)
length(lon)
length(lat)
min(E(:))
mean(E(:))
max(E(:))
% Kaart
figure(1)
imagesc(lon, lat, E')
set(gca,'YDir','normal')
colorbar
xlabel('Pikkuskraad')
ylabel('Laiuskraad')
title('Tuuleenergia tiheduse ajakeskmine(1993-2023)')
%% Gulf of Riga time series
E_ts = ncread('energy_gor_daily_ts_1993_2023.nc','energy');
E_ts = squeeze(E_ts);
time = ncread('energy_gor_daily_ts_1993_2023.nc','time');
% Suuruse kontroll
size(E_ts)
% Graafik:
figure(2)
plot(E_ts)
axis tight
xlabel('Päev')
ylabel('Energia (W m^{-2})')
title('Tuuleenergia tiheduse päevakeskmine aegrida (GoR)')
grid on
%% yearday mean + yearday std (Ülesanne 2. osa)
E_ymean = ncread('energy_gor_yeardaymean.nc','energy');
E_ystd = ncread('energy_gor_yeardaystd.nc','energy');
E_ymean = squeeze(E_ymean); E_ystd = squeeze(E_ystd);
% Suuruste kontroll
length(E_ymean)
length(E_ystd)
%% Põhigraafik
d = 1:length(E_ymean);
figure(3)
plot(d, E_ymean, 'LineWidth', 2)
axis tight
hold on
plot(d, E_ymean + E_ystd, 'r-')
plot(d, E_ymean - E_ystd,'m-')
hold off
xlabel('Aastapäev')
ylabel('Energia (W m^{-2})')
title('Tuuleenergia tiheduse keskmine ja standardhälve päeavade kaupa aastas (yearday mean +- std, GoR)')
legend('Keskmine','Keskminde + standarthälve','Keskminde - standarthälve',Location='best')
grid on
%% Jooniste salvestamine
outdir = 'wind_joonised';
if ~exist(outdir,'dir')
mkdir(outdir);
end
figs = findall(0,'Type','figure');
for k = 1:length(figs)
exportgraphics(figs(k), fullfile(outdir, sprintf('figure_%02d.png', k)),'Resolution', 300);
end
Andmete põhinäitajad:
Ajakatvus: 1993 - 2023
Ajaline lahutus: 1 tund (sisend), 1 päev
Ruumiline lahutus: 0.25x0.25 kraadi
Piirkond: Läänemeri (Liivi laht)
Muutuja: tuuleenergia tihedus (tuletatud)
Failiformaat: NetCDF4
Viide
Hersbach, H., Bell, B., Berrisford, P., Biavati, G., Horányi, A., Muñoz Sabater, J., Nicolas, J., Peubey, C., Radu, R., Rozum, I., Schepers, D., Simmons, A., Soci, C., Dee, D., Thépaut, J.-N. (2023).
ERA5 hourly data on single levels from 1940 to present.
Copernicus Climate Change Service (C3S) Climate Data Store.
https://doi.org/10.24381/cds.adbb2d47
Files
figure_01.png
Files
(2.3 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:49deb5f3221c5bb235af96cbd7143b64
|
1.5 MB | Download |
|
md5:b8562e05ba926060b7b3dab56ff36602
|
75.4 kB | Download |
|
md5:f4045ad0efe9a953233b41e0e26ff3e2
|
68.2 kB | Download |
|
md5:777e0a395de7c85357af40747aac7625
|
68.2 kB | Download |
|
md5:26dd5566285d9a3c3c5213fb47db6a5a
|
75.0 kB | Download |
|
md5:a9d800c258a01e0d86113115013f1214
|
257.9 kB | Preview Download |
|
md5:47a1546a0a5b1b72db503fb40d053db1
|
135.1 kB | Preview Download |
|
md5:c5b3ddcdb42a2aa548fde566f9e961c5
|
111.5 kB | Preview Download |
|
md5:edd4220325cd5dc11b72abcfce51bff2
|
3.1 kB | Download |
|
md5:edd3a3432aac0f9f4972fc849af1e60d
|
2.0 kB | Download |
Additional details
References
- Hersbach, H., Bell, B., Berrisford, P., Biavati, G., Horányi, A., Muñoz Sabater, J., Nicolas, J., Peubey, C., Radu, R., Rozum, I., Schepers, D., Simmons, A., Soci, C., Dee, D., Thépaut, J.-N. (2023). ERA5 hourly data on single levels from 1940 to present. Copernicus Climate Change Service (C3S) Climate Data Store. https://doi.org/10.24381/cds.adbb2d47