DOI: 10.48726/8ax1q-tp363
title: Tuuleenergia tiheduse analüüs Liivi lahes ERA5 andmete põhjal (1993 - 2023)

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