Basé sur ls ~fpaul/tmp/create_virtualizarr_v2_riomar_icechunk
ATTENTION : le code tourne, mais en fait ca ne marche pas !! Ca genere un .json, mais le plot d’un time_counter != 0 retourne une image vide !!
from IPython.core.magic import register_cell_magic
@register_cell_magic
def skip(line, cell):
returnimport glob
import os
import xarray as xrbase_path = "/scale/project/lops-oh-fair2adapt/riomar/GAMAR/"
fpattern = base_path + "GAMAR_1h_inst_Y2023M1*.nc"
flist = glob.glob(fpattern)[:]
outpath = "/scale/project/lops-oh-fair2adapt/fpaul/tmp/"
outfile = os.path.join(outpath, "riomar.kerchunk_multizarr.json")
KERCHUNK_CATALOG_MULTIZARR = outfile
outfile'/scale/project/lops-oh-fair2adapt/fpaul/tmp/riomar.kerchunk_multizarr.json'Creation du catalogue avec Kerchunk et MultiZarrToZarr / translate¶
# config
from enum import IntEnum
class AccessMode(IntEnum):
HTTP = 1
LOCAL = 2
ACCESS_MODE = AccessMode.LOCALimport nest_asyncio
from kerchunk.combine import MultiZarrToZarr
from kerchunk.hdf import SingleHdf5ToZarr
# 1 LIGNE MAGIQUE ! sinon le combine du
# MultiZarrToZarr n'est pas heureux
nest_asyncio.apply()
import glob
if ACCESS_MODE == AccessMode.LOCAL:
# Creation catalogue virtuel multi-fichiers
flist = glob.glob(fpattern)[:2]
refs = [
SingleHdf5ToZarr(f, f).translate() for f in flist
] # ~5-10 secondes pour chaque fichier visiblement
## Virtual Zarr combine
mzz = MultiZarrToZarr(
refs, concat_dims=["time_counter"]
) # , identical_dims=['y_rho', 'x_rho'])
# Sauvegarde qqs kb/mb en un fichier .json
# => 1.2M pour 2 fichiers gamar
mzz_json = mzz.translate(KERCHUNK_CATALOG_MULTIZARR)
# ! NE PAS FAIRE DE .to_zarr(), ca va creer
# une copie de la donnee d'origine, et non
# du Lazy
else:
flist = [
f.replace(
"/scale/project/lops-oh-fair2adapt/riomar/",
"http://data-fair2adapt.ifremer.fr/riomar/",
)
for f in glob.glob(fpattern)[:2]
]
print(flist)
refs = [
SingleHdf5ToZarr(f, f).translate() for f in flist
] # ~5-10 secondes pour chaque fichier visiblement
mzz = MultiZarrToZarr(
refs,
concat_dims=["time_counter"],
remote_protocol="http",
remote_options={"anon": True},
) # , identical_dims=['y_rho', 'x_rho'])
# Sauvegarde qqs kb/mb en un fichier .json
# => 1.2M pour 2 fichiers gamar
mzz_json = mzz.translate(KERCHUNK_CATALOG_MULTIZARR)dss = [
open_virtual_dataset(
f,
# concat_dim='time_counter',
# loadable_variables=[
# 'temp', 'nav_lat_rho', 'nav_lon_rho'
# ],
loadable_variables=[
"time_counter",
"time_instant",
"x_rho",
"y_rho",
"x_u",
"x_v",
"y_u",
"y_v",
"axis_nbounds",
],
parser=parser,
# combine='nested',
# nested = lent (hierarchique),
# by_coords = rapide
registry=registry,
# coords="minimal",
# garde coords contenant time_counter seulement
# data_vars="minimal",
# garde variables contenant time_counter seulement
# compat="override",
# ignore differences entre fichiers (prend le 1er)
# combine_attrs="drop_conflicts",
# supprime les attributs conflictuels
decode_times=True,
)
for f in flist # ~5-10 secondes pour chaque fichier visiblement
]
dssds = xr.concat(
dss,
dim="time_counter",
compat="override",
coords="minimal",
combine_attrs="drop_conflicts",
).set_coords(["time_counter_bounds", "time_instant_bounds"])
ds/tmp/ipykernel_1543086/212694250.py:2: FutureWarning: In a future version of xarray the default value for data_vars will change from data_vars='all' to data_vars=None. This is likely to lead to different results when multiple datasets have matching variables with overlapping values. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set data_vars explicitly.
xr.concat(
Loading...
%%bash
ls Quick json catalog check¶
# %env outfile={outfile}
# Exporte en variable d'environnement pour le %%bash ensuiteimport os
os.environ["SHELL"] = "/bin/bash"
# %env SHELL=/bin/bash!ls -alh {outfile}-rw-r--r-- 1 fpaul fair2adapt 1.2M Dec 11 12:44 /scale/project/lops-oh-fair2adapt/fpaul/tmp/riomar.kerchunk_multizarr.json
KERCHUNK_CATALOG = outfileimport json
from itertools import islice
with open(KERCHUNK_CATALOG, "r", encoding="utf-8") as f:
data = json.load(f) # charge le JSON même sur une seule ligne
texte = json.dumps(data, indent=2, ensure_ascii=False)
for ligne in islice(texte.splitlines(), 20): # 40 premières lignes
print(ligne){
"version": 1,
"refs": {
".zgroup": "{\"zarr_format\":2}",
".zattrs": "{\"name\":\"GAMAR_GLORYS_1h_inst\",\"description\":\"Created by xios\",\"Conventions\":\"CF-1.6\",\"timeStamp\":\"2024-Aug-13 23:27:38 GMT\",\"uuid\":\"b35175e6-cb27-49f2-889a-e911db93d879\",\"title\":\"GAMAR_GLORYS\",\"rst_file\":\"croco_rst.nc\",\"grd_file\":\"croco_grd.nc\",\"ini_file\":\"croco_ini.nc\",\"frc_file\":\"croco_frc.nc\",\"VertCoordType\":\"NEW\",\"theta_s\":6.0,\"theta_s_expl\":\"S-coordinate surface control parameter\",\"theta_b\":4.0,\"theta_b_expl\":\"S-coordinate bottom control parameter\",\"Tcline\":15.0,\"Tcline_expl\":\"S-coordinate surface\\/bottom layer width\",\"Tcline_units\":\"meter\",\"hc\":15.0,\"hc_expl\":\"S-coordinate parameter, critical depth\",\"hc_units\":\"meter\",\"sc_w\":\"have a look at variable sc_w in this file\",\"Cs_w\":\"have a look at variable Cs_w in this file\",\"sc_r\":\"have a look at variable sc_r in this file\",\"Cs_r\":\"have a look at variable Cs_r in this file\",\"ntimes\":17065439,\"ndtfast\":60,\"dt\":45.0,\"dtfast\":0.75,\"nwrt\":9600,\"tnu4_expl\":\"biharmonic mixing coefficient for tracers\",\"units\":\"meter4 second-1\",\"rdrg\":0.0,\"rdrg_expl\":\"linear drag coefficient\",\"rdrg_units\":\"meter second-1\",\"rho0\":1025.0,\"rho0_expl\":\"Mean density used in Boussinesq approximation\",\"rho0_units\":\"kilogram meter-3\",\"gamma2\":1.0,\"gamma2_expl\":\"Slipperiness parameter\",\"x_sponge\":0.0,\"v_sponge\":0.0,\"sponge_expl\":\"Sponge parameters : extent (m) & viscosity (m2.s-1)\",\"SRCS\":\"main.F step.F read_inp.F timers_roms.F init_scalars.F init_arrays.F set_weights.F set_scoord.F ana_grid.F setup_grid1.F setup_grid2.F set_nudgcof.F ana_initial.F analytical.F zonavg.F step2d.F u2dbc.F v2dbc.F zetabc.F obc_volcons.F pre_step3d.F step3d_t.F step3d_uv1.F step3d_uv2.F prsgrd.F rhs3d.F set_depth.F omega.F uv3dmix.F uv3dmix_spg.F t3dmix.F t3dmix_spg.F hmix_coef.F wetdry.F wavedry.F u3dbc.F v3dbc.F t3dbc.F step3d_fast.F step3d_w.F rhs3d_w_nh.F initial_nbq.F grid_nbq.F unbq_bc.F vnbq_bc.F wnbq_bc.F rnbq_bc.F w3dbc.F nbq_bry_store.F rho_eos.F ab_ratio.F alfabeta.F alfabeta_k.F ana_vmix.F bvf_mix.F lmd_vmix.F gls_mixing.F lmd_skpp.F lmd_bkpp.F lmd_swfrac.F lmd_wscale.F diag.F wvlcty.F checkdims.F grid_stiffness.F bio_diag.F setup_kwds.F check_kwds.F check_srcs.F check_switches1.F check_switches2.F debug.F param.F ncscrum.F scalars.F output.F put_global_atts.F nf_fread.F nf_fread_x.F nf_fread_y.F nf_read_bry.F get_date.F lenstr.F closecdf.F insert_node.F fillvalue.F nf_add_attribute.F set_cycle.F def_grid_2d.F def_grid_3d.F def_his.F def_rst.F def_diags.F def_diagsM.F def_bio_diags.F wrt_grid.F wrt_his.F wrt_avg.F wrt_rst.F wrt_diags.F wrt_diags_avg.F wrt_diagsM.F wrt_diagsM_avg.F wrt_bio_diags.F wrt_bio_diags_avg.F set_avg.F set_diags_avg.F set_diagsM_avg.F set_bio_diags_avg.F def_diags_vrt.F wrt_diags_vrt.F set_diags_vrt.F set_diags_vrt_avg.F wrt_diags_vrt_avg.F def_diags_ek.F wrt_diags_ek.F set_diags_ek.F set_diags_ek_avg.F wrt_diags_ek_avg.F def_diags_pv.F wrt_diags_pv.F set_diags_pv.F set_diags_pv_avg.F wrt_diags_pv_avg.F def_diags_eddy.F set_diags_eddy_avg.F wrt_diags_eddy_avg.F def_surf.F wrt_surf.F set_surf_avg.F wrt_surf_avg.F get_grid.F get_initial.F get_vbc.F get_wwave.F get_tclima.F get_uclima.F get_ssh.F get_sss.F get_smflux.F get_stflux.F get_srflux.F get_sst.F mod_tides_mas.F tidedata.F mas.F get_tides.F clm_tides.F get_bulk.F bulk_flux.F get_bry.F get_bry_bio.F sstskin.F get_psource.F get_psource_ts.F get_btflux.F mrl_wci.F wkb_wwave.F wkbbc.F get_bry_wkb.F online_bulk_var.F online_get_bulk.F online_interp.F online_interpolate_bulk.F online_set_bulk.F online_interpolate_3d_bulk.F init_floats.F wrt_floats.F step_floats.F rhs_floats.F interp_rho.F def_floats.F init_arrays_floats.F random_walk.F get_initial_floats.F init_sta.F wrt_sta.F step_sta.F interp_sta.F def_sta.F init_arrays_sta.F biology.F o2sato.F sediment.F bbl.F MPI_Setup.F MessPass2D.F MessPass3D.F exchange.F autotiling.F zoom.F update2D.F set_nudgcof_fine.F zoombc_2D.F zoombc_3D.F uv3dpremix.F t3dpremix.F update3D.F zoombc_3Dfast.F Agrif2Model.F send_xios_diags.F cpl_prism_define.F cpl_prism_put.F cpl_prism_init.F cpl_prism_get.F cpl_prism_getvar.F cpl_prism_grid.F module_substance.F module_MUSTANG.F abl_step.F abl_ini.F abl_tke.F wrt_abl_his.F def_abl_his.F wrt_abl_avg.F set_abl_avg.F online_spectral_diags.F var3d_oa_out.F var2d_oa_out.F scal0d_oa_out_loc.F scal0d_oa_out_full.F output_oa.F par_pisces.F90 ocean2pisces.F90 trc.F90 sms_pisces.F90 p4zche.F90 p4zint.F90 p4zlys.F90 p4zflx.F90 p4zlim.F90 p4zsink.F90 p4zmicro.F90 p4zmeso.F90 p4zmort.F90 p4zopt.F90 p4zprod.F90 p4zrem.F90 p4zsbc.F90 p4zsed.F90 trcwri_pisces.F90 p4zagg.F90 p4zfechem.F90 p4zligand.F90 p4zpoc.F90 p2zlim.F90 p2zmicro.F90 p2zmort.F90 p2zprod.F90 p5zmicro.F90 p5zmort.F90 p5zprod.F90 p5zlim.F90 p5zmeso.F90 p4zbio.F90 p4zsms.F90 trcsms_pisces.F90 trcini_pisces.F90 pisces_ini.F90 oce_sed.F90 par_sed.F90 sedadv.F90 sedarr.F90 sedbtb.F90 sedchem.F90 sedco3.F90 seddiff.F90 seddsr.F90 seddta.F90 sed.F90 sedini.F90 sedinitrc.F90 sedinorg.F90 sedmat.F90 sedmbc.F90 sedmodel.F90 sed_oce.F90 sedorg.F90 sedrst.F90 sedsfc.F90 sedstp.F90 sedwri.F90 setavg_sed.F90 module_parameter_oa.F90 module_grd_oa.F90 module_oa_time.F90 module_oa_space.F90 module_oa_periode.F90 module_oa_variables.F90 module_oa_type.F90 module_tile_oa.F90 module_oa_level.F90 module_oa_interface.F90 var_oa.F90 tooldatosec.F90 toolsectodat.F90 tooldecompdat.F90 tooldatetosec.F90 toolorigindate.F90 flocmod.F90 comsubstance.F90 substance.F90 comMUSTANG.F90 coupler_MUSTANG.F90 sed_MUSTANG_CROCO.F90 sed_MUSTANG.F90 initMUSTANG.F90 plug_MUSTANG_CROCO.F90\",\"CPP-options\":\"REGIONAL GAMAR MPI TIDES OBC_WEST OBC_NORTH XIOS USE_CALENDAR NC4PAR MPI_NOLAND CURVGRID SPHERICAL MASKING WET_DRY NEW_S_COORD SOLVE3D UV_COR UV_ADV SALINITY NONLIN_EOS BULK_FLUX BULK_ECUMEV6 BULK_GUSTINESS BULK_LW ONLINE ERA_ECMWF BULK_MONTH_1DIGIT FRC_BRY Z_FRC_BRY M2_FRC_BRY M3_FRC_BRY T_FRC_BRY UV_HADV_UP3 UV_VADV_SPLINES TS_HADV_RSUP3 TS_DIF4 TS_VADV_SPLINES SPONGE LIMIT_BSTRESS GLS_MIXING ANA_BSFLUX ANA_BTFLUX PSOURCE PSOURCE_NCFILE SSH_TIDES UV_TIDES POT_TIDES TIDES_MAS OBC_M2CHARACT OBC_M3ORLANSKI OBC_TORLANSKI AVERAGES AVERAGES_K OUTPUTS_SURFACE HOURLY_VELOCITIES EXACT_RESTART ANA_PSOURCE TS_HADV_C4 MPI_COMM_WORLD M2FILTER_POWER TRACERS TEMPERATURE HZR VAR_RHO_2D SPLIT_EOS UV_MIX_S DIF_COEF_3D TS_MIX_ISO TS_MIX_IMP TS_MIX_ISO_FILT NTRA_T3DMIX SPONGE_GRID SPONGE_DIF2 SPONGE_VIS2 GLS_KEPSILON CANUTO_A CUBIC_INTERP NF_CLOBBER\"}",
"time_counter/.zarray": "{\n \"shape\": [\n 1464\n ],\n \"chunks\": [\n 1464\n ],\n \"dtype\": \"<f8\",\n \"fill_value\": null,\n \"order\": \"C\",\n \"filters\": null,\n \"dimension_separator\": \".\",\n \"compressor\": {\n \"id\": \"zstd\",\n \"level\": 0\n },\n \"zarr_format\": 2\n}",
"time_counter/.zattrs": "{\n \"_ARRAY_DIMENSIONS\": [\n \"time_counter\"\n ],\n \"axis\": \"T\",\n \"standard_name\": \"time\",\n \"long_name\": \"Time axis\",\n \"calendar\": \"gregorian\",\n \"units\": \"seconds since 2000-01-01 00:00:00\",\n \"time_origin\": \"2000-01-01 00:00:00\",\n \"bounds\": \"time_counter_bounds\"\n}",
"time_counter/0": "base64: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",
"Cs_r/.zarray": "{\"shape\":[1464,40],\"chunks\":[1,40],\"dtype\":\"<f4\",\"fill_value\":1.0000000200408773e+20,\"order\":\"C\",\"filters\":null,\"dimension_separator\":\".\",\"compressor\":null,\"zarr_format\":2}",
"Cs_r/.zattrs": "{\"_ARRAY_DIMENSIONS\":[\"time_counter\",\"s_rho\"],\"long_name\":\"ocean s roms coordinate at rho point\",\"online_operation\":\"once\",\"missing_value\":1.0000000200408773e+20,\"coordinates\":\"\"}",
"Cs_r/720.0": "base64:42N+v1AKer/E/HO/bBtsv4lrYr8rFle/VGFKv++lPL8cRS6/sJ4fvwQKEb9h0QK/p1/qvtGh0L5+o7i+w4WivvpUjr6CGni+Tj1Xvq3hOb41zB++lbsIvpjY6L21NsW9aBCmvQXsir2ysWa98989vRapGr2Tzvi86w/FvHQVmbwtAWi8ESUqvOGn7ruWA527olU7u3sovbpKPQe6gZRvuA==",
"Cs_w/.zarray": "{\"shape\":[1464,41],\"chunks\":[1,41],\"dtype\":\"<f4\",\"fill_value\":1.0000000200408773e+20,\"order\":\"C\",\"filters\":null,\"dimension_separator\":\".\",\"compressor\":null,\"zarr_format\":2}",
"Cs_w/.zattrs": "{\"_ARRAY_DIMENSIONS\":[\"time_counter\",\"s_w\"],\"long_name\":\"ocean s roms coordinate at w point\",\"online_operation\":\"once\",\"missing_value\":1.0000000200408773e+20,\"coordinates\":\"\"}",
"Cs_w/720.0": "base64:AACAv0RqfL/dPHe/IUdwv4N7Z7+78Vy/ceJQv3SeQ78WhDW/4PQmvyZNGL8i3gm/R9X3vsxL3b4caMS+WVetvqovmL6+9IS+WjhnvtIiSL4qciy+fucTvv9//L1IcNa96Ru1vT4FmL3mbX29VIpRvfubK70o8wq9gefdvNkorrz2uoW86Z5HvB1tD7xwc8O7RUp2uz7aCLvCKnG6nuVvuQAAAAA=",
"Tcline/.zarray": "{\"shape\":[1464],\"chunks\":[1],\"dtype\":\"<f4\",\"fill_value\":1.0000000200408773e+20,\"order\":\"C\",\"filters\":null,\"dimension_separator\":\".\",\"compressor\":null,\"zarr_format\":2}",
"Tcline/.zattrs": "{\"_ARRAY_DIMENSIONS\":[\"time_counter\"],\"long_name\":\"S-coordinate surface\\/bottom layer width\",\"online_operation\":\"once\",\"missing_value\":1.0000000200408773e+20,\"coordinates\":\"\"}",
"Tcline/720": "\u0000\u0000pA",
"Vtransform/.zarray": "{\"shape\":[1464],\"chunks\":[1],\"dtype\":\"<f4\",\"fill_value\":1.0000000200408773e+20,\"order\":\"C\",\"filters\":null,\"dimension_separator\":\".\",\"compressor\":null,\"zarr_format\":2}",
"Vtransform/.zattrs": "{\"_ARRAY_DIMENSIONS\":[\"time_counter\"],\"long_name\":\"vertical terrain-following transformation equation\",\"online_operation\":\"once\",\"missing_value\":1.0000000200408773e+20,\"coordinates\":\"\"}",
"Vtransform/720": "\u0000\u0000\u0000@",