#!/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"
