Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added Climatologies/MVR/O2_CLIM/diff.nc
Binary file not shown.
16 changes: 16 additions & 0 deletions Climatologies/MVR/download_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import copernicusmarine

# no more ppn

copernicusmarine.subset(
dataset_id="cmems_mod_med_bgc_my_4.2km-climatology_P1M-m",
variables=["chl_avg", "chl_std", "no3_avg", "no3_std", "o2_avg", "o2_std"],
minimum_longitude=-5.541666507720947,
maximum_longitude=36.29166793823242,
minimum_latitude=30.1875,
maximum_latitude=45.97916793823242,
start_datetime="1999-01-01T00:00:00",
end_datetime="1999-12-01T00:00:00",
minimum_depth=1.0182366371154785,
maximum_depth=4152.89599609375,
)
75 changes: 75 additions & 0 deletions Climatologies/MVR/launcher.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#! /bin/bash

#SBATCH --job-name=Cl_CMEMS
#SBATCH -N1
#SBATCH --ntasks-per-node=16
#SBATCH --time=00:20:00
#SBATCH --mem=300gb
#SBATCH --account=OGS_test2528
#SBATCH --partition=g100_meteo_prod
#SBATCH --qos=qos_meteo

. ../../profile.inc
module load autoload
module load intel/oneapi-2021--binary
module load intelmpi/oneapi-2021--binary
module load mkl/oneapi-2021--binary
module load netcdf/4.7.4--oneapi--2021.2.0-ifort
module load netcdff/4.5.3--oneapi--2021.2.0-ifort
source /g100_work/OGS23_PRACE_IT/COPERNICUS/py_env_3.9.18_new/bin/activate

INPUTDIR="/g100_scratch/userexternal/gbolzon0/V12C/MVR"
OUTDIR="/g100_scratch/userexternal/gbolzon0/V12C/MVR/OUTPUT"
INPUTFILE=$INPUTDIR/cmems_mod_med_bgc_my_4.2km-climatology_P1M-m_multi-vars_5.54W-36.29E_30.19N-45.98N_1.02-4152.90m_1999-01-01-1999-12-01.nc

mkdir -p $OUTDIR

#if [ ! -f "$INPUTFILE" ]; then
# python download_data.py
#else
# echo "File $INPUTFILE already exists. Skipping download."
#fi
MASKFILE="/g100_work/OGS_prodC/OPA/Interim-dev/etc/static-data/MED24_125/meshmask.nc"

my_prex_or_die "python netcdf_clim_generator.py -i $INPUTFILE -o $OUTDIR -v o2_avg --least_significant_digit 2 -m $MASKFILE"
my_prex_or_die "python netcdf_clim_generator.py -i $INPUTFILE -o $OUTDIR -v no3_avg --least_significant_digit 3 -m $MASKFILE"
my_prex_or_die "python netcdf_clim_generator.py -i $INPUTFILE -o $OUTDIR -v chl_avg --least_significant_digit 4 -m $MASKFILE"
exit 0


OUTPUT_DIR=3D_LINKS
mkdir -p $OUTPUT_DIR

for YEAR in {2024..2025}; do
# Ciclo sulle variabili CHL, O2, NO3
for VAR in CHL O2 NO3; do
# Assegna il nome corretto della variabile a vv
if [[ "$VAR" == "CHL" ]]; then
vv="P_l"
elif [[ "$VAR" == "O2" ]]; then
vv="O2o"
else
vv="N3n"
fi

INPUT_DIR="${VAR}_CLIM" # Supponendo che le cartelle siano CHL_CLIM, O2_CLIM, NO3_CLIM

# Controlla se la cartella esiste prima di procedere
if [[ -d "$INPUT_DIR" ]]; then
for file in "$INPUT_DIR"/ave.yyyy*15-00:00:00.${vv}.nc; do
# Controlla se il file esiste per evitare errori
[[ -e "$file" ]] || continue

filename=$(basename "$file")

MM=${filename:8:2} # Estrai il mese dal nome del file
#echo "Filename: $filename, Estratto MM: $MM"
new_filename="ave.${YEAR}${MM}15-00:00:00.${vv}.nc"
ln -s "$(realpath --relative-to="$OUTPUT_DIR" "$file")" "$OUTPUT_DIR/$new_filename"

done
fi
done
done

#o2_std no3_std chl_std
64 changes: 64 additions & 0 deletions Climatologies/MVR/netcdf_clim_generator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import xarray as xr
import numpy as np
import argparse
from bitsea.commons.mask import Mask
from bitsea.utilities.argparse_types import existing_dir_path, existing_file_path


# Parsing command-line arguments
parser = argparse.ArgumentParser(description="Adjust coordinates in NetCDF files.")
parser.add_argument('-i', '--input', type=existing_file_path, required=True, help="Input NetCDF file")
parser.add_argument('-o', '--outdir', type=existing_dir_path, required=True, help="string for output directory")
parser.add_argument('-v', '--variable', type=str, required=True, choices=['chl_avg', 'no3_avg', 'o2_avg'], help="variable NetCDF file")
parser.add_argument('-m', '--maskfile', type=existing_file_path, required=True, help="meshmask file")
parser.add_argument('-d', '--least_significant_digit', type=int, required=False, default=0, help="least significant digit for compression")
args = parser.parse_args()

VAR=args.variable

VARMOD={
'chl_avg':'P_l',
'no3_avg':'N3n',
'o2_avg':'O2o'
}
varmod=VARMOD[VAR]
if args.least_significant_digit == 0:
least_significant_digit = None
else:
least_significant_digit = args.least_significant_digit

TheMask = Mask.from_file(args.maskfile)
jpk,jpi,jpj = TheMask.shape

with xr.open_dataset(args.input) as ds:
var = ds.variables[VAR][:]
fill_value = 1.e+20


for month in range(12):
fileout = args.outdir / f"ave.yyyy{month+1:02d}15-00:00:00.{varmod}.nc"
print(f"Saving to {fileout} with least_significant_digit = {least_significant_digit}", flush=True)
cmems_clim = var[month,:,:,:]

new_data = np.full(TheMask.shape, fill_value, dtype=np.float32)
new_data[:,:,80:] = cmems_clim.values

new_ds = xr.Dataset(
{varmod: (["depth", "latitude", "longitude"], new_data)},
coords={
"longitude": (["longitude"], TheMask.lon),
"latitude": (["latitude"], TheMask.lat),
"depth": (["depth"], TheMask.zlevels),
}
)

new_ds.to_netcdf(fileout,
encoding={varmod:{
"zlib":True,
"_FillValue": fill_value,
"complevel": 9,
"least_significant_digit": least_significant_digit,
}
}
)
new_ds.close()