def main(): start_year = 1979 end_year = 2000 HL_LABEL = "CRCM5_HL" NEMO_LABEL = "CRCM5_NEMO" sim_label_to_path = OrderedDict([ (HL_LABEL, "/RESCUE/skynet3_rech1/huziy/CNRCWP/C5/2016/2-year-runs/coupled-GL+stfl_oneway/Samples" ), (NEMO_LABEL, "/HOME/huziy/skynet3_rech1/CNRCWP/C5/2016/2-year-runs/coupled-GL+stfl/Samples" ) ]) var_name_list = ["TT", "PR", "LC", "HR", "HU", "AV", "I5", "AL"] season_to_months = commons.season_to_months vname_to_level = { "TT": 1, "PR": -1, "SN": -1, "LC": -1, "HR": 1, "HU": 1, "AV": -1, "I5": -1, "AL": -1 } vname_to_level_kind = { "TT": level_kinds.HYBRID, "PR": level_kinds.ARBITRARY, "SN": level_kinds.ARBITRARY, "LC": level_kinds.ARBITRARY, "HR": level_kinds.HYBRID, "HU": level_kinds.HYBRID, "AV": level_kinds.ARBITRARY, "I5": level_kinds.ARBITRARY, "AL": level_kinds.ARBITRARY } vname_to_file_prefix = { "TT": "dm", "PR": "pm", "SN": "pm", "LC": "pm", "HR": "dm", "HU": "dm", "AV": "pm", "I5": "pm", "AL": "pm" } # ---> ----> avg_mask = get_nemo_lakes_mask(samples_dir=sim_label_to_path[NEMO_LABEL]) vname = "LC" common_params = dict(start_year=start_year, end_year=end_year, filename_prefix=vname_to_file_prefix[vname], level=vname_to_level[vname], level_kind=vname_to_level_kind[vname], varname=vname, mask=avg_mask) hl_icefrac = get_area_avg_timeseries(sim_label_to_path[HL_LABEL], **common_params) nemo_icefrac = get_area_avg_timeseries(sim_label_to_path[NEMO_LABEL], **common_params) obs_icefrac = GL_obs_timeseries.get_ts_with_real_dates_from_file( path= "/RESCUE/skynet3_rech1/huziy/obs_data/Lake_ice_concentration_Great_lakes_timeseries/GLK-30x.TXT", start_year=start_year - 1, end_year=end_year - 1) obs_icefrac /= 100.0 plot_utils.apply_plot_params(font_size=14) # nemo ice fraction from 1-way coupled # with MFDataset("/HOME/huziy/skynet3_rech1/CNRCWP/C5/2016/2-year-runs/coupled-GL+stfl_oneway/NEMO/*grid_T.nc") as ds: # timevar = ds.variables["time_counter"] # print(timevar.units) # times = num2date(timevar[:], timevar.units) # # print(times[0], times[-1], type(times[0])) # # print(times[:10]) # # print("===== avg_mask ====") # print(avg_mask.min(), avg_mask.max(), avg_mask.shape) # # print(ds.variables["soicecov"][0, :, :].shape) # vals = [field.transpose()[20:-20, 20:-20][avg_mask].mean() for field in ds.variables["soicecov"][:]] # # assert len(vals) == len(times) # # ts_nemo_1way = pd.Series(index=[d for d in times], data=vals) # ts_nemo_1way.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline.sort_index(inplace=True) # nemo offline with MFDataset( "/HOME/huziy/skynet3_rech1/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_5min = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_5min.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/doubled_snowfall/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_double_snow = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_double_snow.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_30min_eddy_tra10_dyn30_traldf3d/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt30min_small_ldf = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt30min_small_ldf.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_3hourly/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc3h = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc3h.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_6hourly_hicrit_0.05m/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc6h = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc6h.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_6hourly_hicrit_0.05m_noicedyn/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc6h_nodyn = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc6h_nodyn.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_5min_noicedyn/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_5min_noicedyn_notime_interpolation_of_forcing/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn_noforc_tint = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn_noforc_tint.sort_index( inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc5min_lim3_6h/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_lim6h = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_lim6h.sort_index(inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_tke_penetr10m/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_tkepenet_10m = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_tkepenet_10m.sort_index( inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_tke0.01_penetr10m/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_tke0001penet_10m = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_tke0001penet_10m.sort_index( inplace=True) # nemo offline with MFDataset( "/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_5min_gls1/GLK_1d_*_grid_T.nc" ) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1 = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1.sort_index(inplace=True) # nemo offline data_folder = Path( "/HOME/huziy/skynet3_rech1/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/zdf_gls_dt_and_sbc_5min/" ) with MFDataset([ str(f) for f in sorted(data_folder.iterdir(), key=lambda p: p.name) if f.name.endswith("_grid_T.nc") ]) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [ field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:] ] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1_5year = pd.Series( index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1_5year.sort_index( inplace=True) fig = plt.figure() print("hl_icefrac :", hl_icefrac.index[0], hl_icefrac.index[-1], type(hl_icefrac)) print("nemo_icefrac :", nemo_icefrac.index[0], nemo_icefrac.index[-1]) ax = plt.gca() # ax = hl_icefrac.plot(lw=2, color="k", label=HL_LABEL) # nemo_icefrac.plot(lw=2, color="r", ax=ax, label=NEMO_LABEL) # ts_nemo_1way.plot(lw=2, color="g", label="CRCM5_NEMO_oneway", ax=ax, zorder=5) # obs_icefrac.plot(lw=2, color="b", ax=ax, label="Obs.") ax.plot(hl_icefrac.index, hl_icefrac.values, lw=2, color="b", label=HL_LABEL) ax.plot(nemo_icefrac.index, nemo_icefrac.values, lw=2, color="r", label=NEMO_LABEL) # ax.plot(ts_nemo_1way.index, ts_nemo_1way.values, lw=2, color="g", label="CRCM5_NEMO_oneway") ax.plot(obs_icefrac.index, obs_icefrac.values, lw=2, color="k", label="Obs.") #ax.plot(ts_nemo_offline.index, ts_nemo_offline.values, lw=2, color="#FFA500", label="NEMO-offline") #ax.plot(ts_nemo_offline_5min.index, ts_nemo_offline_5min.values, lw=2, color="g", label="NEMO-offline-5min") #ax.plot(ts_nemo_offline_double_snow.index, ts_nemo_offline_double_snow.values, lw=2, color="m", label="NEMO-offline-doublesnow") ax.plot(ts_nemo_offline_dt5min_small_ldf.index, ts_nemo_offline_dt5min_small_ldf.values, lw=2, color="g", label="NEMO-offline dt=5min, small ldf") # ax.plot(ts_nemo_offline_dt30min_small_ldf.index, ts_nemo_offline_dt30min_small_ldf.values, lw=2, color="y", label="NEMO-offline dt=30min,traldf3d, small ldf") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc3h.index, ts_nemo_offline_dt5min_small_ldf_sbc3h.values, lw=2, color="c", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc3h") ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc6h.index, ts_nemo_offline_dt5min_small_ldf_sbc6h.values, lw=2, color="#6ACC65", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc6h, hicr5cm") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc6h_nodyn.index, ts_nemo_offline_dt5min_small_ldf_sbc6h_nodyn.values, lw=2, color="#6ACEEE", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc6h, noicedyn") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn.values, lw=2, color="#9ABF12", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc5min, noicedyn") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn_noforc_tint.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn_noforc_tint.values, lw=2, color="#111111", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,noicedyn,noforctint") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_lim6h.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_lim6h.values, lw=2, # color="m", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc5min, lim 6h") # # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_tkepenet_10m.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_tkepenet_10m.values, lw=2, # color="y", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,tke penet 10m") # # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_tke0001penet_10m.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_tke0001penet_10m.values, lw=2, # color="#ccceee", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,tke penet0.01 10m") # # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1.values, lw=2, # color="#aaa111", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,GLS1m") ax.plot( ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1_5year.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1_5year.values, lw=2, color="#aaa111", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,GLS1m,5year") # ax.set_xlim([date2num(datetime(1979, 10, 1)), date2num(datetime(1980, 12, 31))]) ax.xaxis.set_major_locator(YearLocator()) fig.autofmt_xdate() ax.legend() ax.grid() if not os.path.isdir(img_folder): os.mkdir(img_folder) fig.tight_layout() fig.savefig(os.path.join( img_folder, "lake_icefr_ts_{}-{}.png".format(start_year, end_year)), dpi=commons.dpi, transparent=True, bbox_inches="tight")
def main(): start_year = 1980 end_year = 2003 months_of_obs = [12, 1, 2, 3, 4, 5] r_config = RunConfig( data_path="/RESCUE/skynet3_rech1/huziy/hdf_store/quebec_0.1_crcm5-hcd-rl.hdf5", start_year=start_year, end_year=end_year, label="ERAI-CRCM5-L" ) var_name = "LC" bmp_info = analysis.get_basemap_info(r_config=r_config) lkid_to_mask = get_lake_masks(bmp_info.lons, bmp_info.lats) cell_area_m2 = analysis.get_array_from_file(path=r_config.data_path, var_name="cell_area_m2") # read the model data lkid_to_ts_model = {} for lkid, the_mask in lkid_to_mask.items(): lkid_to_ts_model[lkid] = analysis.get_area_mean_timeseries(r_config.data_path, var_name=var_name, the_mask=the_mask * cell_area_m2, start_year=start_year, end_year=end_year) df = lkid_to_ts_model[lkid] # remove the last December df = df.select(lambda d: not (d.year == end_year and d.month == 12)) # remove the first Jan and Feb df = df.select(lambda d: not (d.year == start_year and d.month in [1, 2])) # remove the Feb 29th df = df.select(lambda d: not (d.month == 2 and d.day == 29)) # select months of interest df = df.select(lambda d: d.month in months_of_obs) # calculate the climatology df = df.groupby(lambda d: datetime(2001 if d.month == 12 else 2002, d.month, d.day)).mean() df.sort_index(inplace=True) lkid_to_ts_model[lkid] = df * 100 # read obs data and calculate climatology lkid_to_ts_obs = {} for lkid in LAKE_IDS: lkid_to_ts_obs[lkid] = GL_obs_timeseries.get_ts_from_file(path=os.path.join(OBS_DATA_FOLDER, "{}-30x.TXT".format(lkid)), start_year=start_year, end_year=end_year - 1) # get the climatology dfm = lkid_to_ts_obs[lkid].mean(axis=1) dfm.index = [datetime(2001, 1, 1) + timedelta(days=int(jd - 1)) for jd in dfm.index] lkid_to_ts_obs[lkid] = dfm # plotting plot_utils.apply_plot_params(font_size=10) fig = plt.figure() gs = GridSpec(nrows=len(lkid_to_ts_model), ncols=2) for row, lkid in enumerate(lkid_to_ts_model): ax = fig.add_subplot(gs[row, 0]) mod = lkid_to_ts_model[lkid] obs = lkid_to_ts_obs[lkid] print(obs.index) print(obs.values) ax.plot(mod.index, mod.values, label=r_config.label, color="r", lw=2) ax.plot(obs.index, obs.values, label="NOAA NIC/CIS", color="k", lw=2) if row == 0: ax.legend() ax.set_title(lkid) ax.xaxis.set_major_formatter(DateFormatter("%b")) fig.tight_layout() fig.savefig(os.path.join(img_folder, "GL_ice-cover-validation.png"), bbox_inches="tight", dpi=common_plot_params.FIG_SAVE_DPI)
def main(): start_year = 1979 end_year = 2000 HL_LABEL = "CRCM5_HL" NEMO_LABEL = "CRCM5_NEMO" sim_label_to_path = OrderedDict( [(HL_LABEL, "/RESCUE/skynet3_rech1/huziy/CNRCWP/C5/2016/2-year-runs/coupled-GL+stfl_oneway/Samples"), (NEMO_LABEL, "/HOME/huziy/skynet3_rech1/CNRCWP/C5/2016/2-year-runs/coupled-GL+stfl/Samples")] ) var_name_list = ["TT", "PR", "LC", "HR", "HU", "AV", "I5", "AL"] season_to_months = commons.season_to_months vname_to_level = { "TT": 1, "PR": -1, "SN": -1, "LC": -1, "HR": 1, "HU": 1, "AV": -1, "I5": -1, "AL": -1 } vname_to_level_kind = { "TT": level_kinds.HYBRID, "PR": level_kinds.ARBITRARY, "SN": level_kinds.ARBITRARY, "LC": level_kinds.ARBITRARY, "HR": level_kinds.HYBRID, "HU": level_kinds.HYBRID, "AV": level_kinds.ARBITRARY, "I5": level_kinds.ARBITRARY, "AL": level_kinds.ARBITRARY } vname_to_file_prefix = { "TT": "dm", "PR": "pm", "SN": "pm", "LC": "pm", "HR": "dm", "HU": "dm", "AV": "pm", "I5": "pm", "AL": "pm" } # ---> ----> avg_mask = get_nemo_lakes_mask(samples_dir=sim_label_to_path[NEMO_LABEL]) vname = "LC" common_params = dict(start_year=start_year, end_year=end_year, filename_prefix=vname_to_file_prefix[vname], level=vname_to_level[vname], level_kind=vname_to_level_kind[vname], varname=vname, mask=avg_mask) hl_icefrac = get_area_avg_timeseries(sim_label_to_path[HL_LABEL], **common_params) nemo_icefrac = get_area_avg_timeseries(sim_label_to_path[NEMO_LABEL], **common_params) obs_icefrac = GL_obs_timeseries.get_ts_with_real_dates_from_file( path="/RESCUE/skynet3_rech1/huziy/obs_data/Lake_ice_concentration_Great_lakes_timeseries/GLK-30x.TXT", start_year=start_year - 1, end_year=end_year - 1) obs_icefrac /= 100.0 plot_utils.apply_plot_params(font_size=14) # nemo ice fraction from 1-way coupled # with MFDataset("/HOME/huziy/skynet3_rech1/CNRCWP/C5/2016/2-year-runs/coupled-GL+stfl_oneway/NEMO/*grid_T.nc") as ds: # timevar = ds.variables["time_counter"] # print(timevar.units) # times = num2date(timevar[:], timevar.units) # # print(times[0], times[-1], type(times[0])) # # print(times[:10]) # # print("===== avg_mask ====") # print(avg_mask.min(), avg_mask.max(), avg_mask.shape) # # print(ds.variables["soicecov"][0, :, :].shape) # vals = [field.transpose()[20:-20, 20:-20][avg_mask].mean() for field in ds.variables["soicecov"][:]] # # assert len(vals) == len(times) # # ts_nemo_1way = pd.Series(index=[d for d in times], data=vals) # ts_nemo_1way.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline.sort_index(inplace=True) # nemo offline with MFDataset("/HOME/huziy/skynet3_rech1/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_5min = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_5min.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/doubled_snowfall/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_double_snow = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_double_snow.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_30min_eddy_tra10_dyn30_traldf3d/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt30min_small_ldf = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt30min_small_ldf.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_3hourly/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc3h = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc3h.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_6hourly_hicrit_0.05m/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc6h = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc6h.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_6hourly_hicrit_0.05m_noicedyn/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc6h_nodyn = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc6h_nodyn.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_5min_noicedyn/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_5min_noicedyn_notime_interpolation_of_forcing/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn_noforc_tint = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn_noforc_tint.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc5min_lim3_6h/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_lim6h = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_lim6h.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_tke_penetr10m/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_tkepenet_10m = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_tkepenet_10m.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_tke0.01_penetr10m/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_tke0001penet_10m = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_tke0001penet_10m.sort_index(inplace=True) # nemo offline with MFDataset("/RESCUE/skynet3_rech1/huziy/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/dt_5min_eddy_tra10_dyn30_sbc_forcing_5min_gls1/GLK_1d_*_grid_T.nc") as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1 = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1.sort_index(inplace=True) # nemo offline data_folder = Path("/HOME/huziy/skynet3_rech1/NEMO_OFFICIAL/dev_v3_4_STABLE_2012/NEMOGCM/CONFIG/GLK_LIM3/EXP_GLK_LIM3_1980/outputs_nemo_offline/zdf_gls_dt_and_sbc_5min/") with MFDataset([str(f) for f in sorted(data_folder.iterdir(), key=lambda p: p.name) if f.name.endswith("_grid_T.nc")]) as ds: timevar = ds.variables["time_counter"] print(timevar.units) times = num2date(timevar[:], timevar.units) print(times[0], times[-1], type(times[0])) print(times[:10]) print("===== avg_mask ====") print(avg_mask.min(), avg_mask.max(), avg_mask.shape) print(ds.variables["soicecov"][0, :, :].shape) vals = [field.transpose()[avg_mask].mean() for field in ds.variables["soicecov"][:]] assert len(vals) == len(times) ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1_5year = pd.Series(index=[d for d in times], data=vals) ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1_5year.sort_index(inplace=True) fig = plt.figure() print("hl_icefrac :", hl_icefrac.index[0], hl_icefrac.index[-1], type(hl_icefrac)) print("nemo_icefrac :", nemo_icefrac.index[0], nemo_icefrac.index[-1]) ax = plt.gca() # ax = hl_icefrac.plot(lw=2, color="k", label=HL_LABEL) # nemo_icefrac.plot(lw=2, color="r", ax=ax, label=NEMO_LABEL) # ts_nemo_1way.plot(lw=2, color="g", label="CRCM5_NEMO_oneway", ax=ax, zorder=5) # obs_icefrac.plot(lw=2, color="b", ax=ax, label="Obs.") ax.plot(hl_icefrac.index, hl_icefrac.values, lw=2, color="b", label=HL_LABEL) ax.plot(nemo_icefrac.index, nemo_icefrac.values, lw=2, color="r", label=NEMO_LABEL) # ax.plot(ts_nemo_1way.index, ts_nemo_1way.values, lw=2, color="g", label="CRCM5_NEMO_oneway") ax.plot(obs_icefrac.index, obs_icefrac.values, lw=2, color="k", label="Obs.") #ax.plot(ts_nemo_offline.index, ts_nemo_offline.values, lw=2, color="#FFA500", label="NEMO-offline") #ax.plot(ts_nemo_offline_5min.index, ts_nemo_offline_5min.values, lw=2, color="g", label="NEMO-offline-5min") #ax.plot(ts_nemo_offline_double_snow.index, ts_nemo_offline_double_snow.values, lw=2, color="m", label="NEMO-offline-doublesnow") ax.plot(ts_nemo_offline_dt5min_small_ldf.index, ts_nemo_offline_dt5min_small_ldf.values, lw=2, color="g", label="NEMO-offline dt=5min, small ldf") # ax.plot(ts_nemo_offline_dt30min_small_ldf.index, ts_nemo_offline_dt30min_small_ldf.values, lw=2, color="y", label="NEMO-offline dt=30min,traldf3d, small ldf") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc3h.index, ts_nemo_offline_dt5min_small_ldf_sbc3h.values, lw=2, color="c", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc3h") ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc6h.index, ts_nemo_offline_dt5min_small_ldf_sbc6h.values, lw=2, color="#6ACC65", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc6h, hicr5cm") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc6h_nodyn.index, ts_nemo_offline_dt5min_small_ldf_sbc6h_nodyn.values, lw=2, color="#6ACEEE", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc6h, noicedyn") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn.values, lw=2, color="#9ABF12", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc5min, noicedyn") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn_noforc_tint.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_nodyn_noforc_tint.values, lw=2, color="#111111", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,noicedyn,noforctint") # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_lim6h.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_lim6h.values, lw=2, # color="m", label="NEMO-offline dt=5min,traldf3d, small ldf, sbc5min, lim 6h") # # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_tkepenet_10m.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_tkepenet_10m.values, lw=2, # color="y", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,tke penet 10m") # # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_tke0001penet_10m.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_tke0001penet_10m.values, lw=2, # color="#ccceee", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,tke penet0.01 10m") # # ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1.values, lw=2, # color="#aaa111", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,GLS1m") ax.plot(ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1_5year.index, ts_nemo_offline_dt5min_small_ldf_sbc5min_gls1_5year.values, lw=2, color="#aaa111", label="NEMO-offline dt=5min,traldf3d,small ldf,sbc5min,GLS1m,5year") # ax.set_xlim([date2num(datetime(1979, 10, 1)), date2num(datetime(1980, 12, 31))]) ax.xaxis.set_major_locator(YearLocator()) fig.autofmt_xdate() ax.legend() ax.grid() if not os.path.isdir(img_folder): os.mkdir(img_folder) fig.tight_layout() fig.savefig(os.path.join(img_folder, "lake_icefr_ts_{}-{}.png".format(start_year, end_year)), dpi=commons.dpi, transparent=True, bbox_inches="tight")