From 74ad3a1739326037ee9d21fd53993634b254032e Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sat, 27 Apr 2024 19:31:38 +0200 Subject: [PATCH 01/29] weathertyping scripts --- .../weathertyping_diagnostic_generalised.py | 380 ++++++++++++++++++ .../weathertyping_diagnostic_lwt.py | 374 +++++++++++++++++ 2 files changed, 754 insertions(+) create mode 100644 esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py create mode 100644 esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py new file mode 100644 index 0000000000..b4244ae1f6 --- /dev/null +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py @@ -0,0 +1,380 @@ +#weathertyping diagnostic for esmvaltool + + +# operating system manipulations (e.g. path constructions) +import os +import numpy as np +import pandas as pd +# to manipulate iris cubes +import iris +import iris.plot as iplt +import iris.quickplot as qplt +import matplotlib.pyplot as plt +import matplotlib.ticker as mticker +import cf_units +import cartopy.crs as ccrs +import cartopy.feature as cfeature +from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER +import matplotlib.cm as cm +from matplotlib.colors import ListedColormap +import cartopy.util +from iris.analysis.cartography import wrap_lons + +# import internal esmvaltool modules here +from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic + +def calc_slwt(wt): + mapping = { + 1: 1, 2: 1, 19: 1, + 3: 2, 4: 2, 22: 2, 21: 2, + 5: 3, 6: 3, 15: 3, 16: 3, + 7: 4, 8: 4, 11: 4, 18: 4, + 9: 5, 17: 5, + 10: 6, 20: 6, + 12: 7, 13: 7, 14: 7, + 23: 8, 24: 8, + 25: 9, 26: 9, 27:27, 0:0 + } + + return np.array([mapping[value] for value in wt]) + +def calculate_weathertypes(cfg, cube, dataset): + #lats and lons corresponding to datapoints + #55, 5 -> 1 + #55, 15 -> 2 + #50, -5 -> 3 + #50, 5 -> 4 + #50, 15 -> 5 + #50, 25 -> 6 + #45, -5 -> 7 + #45, 5 -> 8 + #45, 15 -> 9 + #45, 25 -> 10 + #40, -5 -> 11 + #40, 5 -> 12 + #40, 15 -> 13 + #40, 25 -> 14 + #35, 5 -> 15 + #35, 15 -> 16 + + #lons: -5, 0, 5, 10, 15, 20, 25 + #lats: 35, 40, 45, 50, 55 + + const1 = 1 / np.cos(45 * np.pi / 180) + const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) + const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) + const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) + + # westerly flow + W = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * (cube.data[:, 3, 2] + cube.data[:, 3, 4]) + #southerly flow + S = const1 * (1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) + #resultant flow + F = (S ** 2 + W ** 2) ** (1 / 2) + #westerly shear vorticity + ZW = const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( + 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4])) + #southerly shear vorticity + ZS = const4 * (1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - 1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * ( + cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + 1 / 4 * (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) + #total shear vorticity + Z = ZW + ZS + + WT = np.zeros(len(Z)) + + for i in range(len(Z)): + + direction = np.arctan(W[i] / S[i]) * 180 / np.pi # deg + if S[i] >= 0: + direction += 180 # deg + + if direction < 0: + direction += 360 # deg + + # Lamb pure directional type + if abs(Z[i]) < F[i]: + if 337.5 <= direction or direction < 22.5: + WT[i] = 1 + elif 22.5 <= direction < 67.5: + WT[i] = 2 + elif 67.5 <= direction < 112.5: + WT[i] = 3 + elif 112.5 <= direction < 157.5: + WT[i] = 4 + elif 157.5 <= direction < 202.5: + WT[i] = 5 + elif 202.5 <= direction < 247.5: + WT[i] = 6 + elif 247.5 <= direction < 292.5: + WT[i] = 7 + elif 292.5 <= direction < 337.5: + WT[i] = 8 + # Lamb’s pure cyclonic and anticyclonic type + elif (2 * F[i]) < abs(Z[i]): + if Z[i] > 0: + WT[i] = 9 + + elif Z[i] < 0: + WT[i] = 10 + #Lambs’s synoptic/direction hybrid types + elif F[i] < abs(Z[i]) < (2 * F[i]): + if Z[i] > 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 11 + elif 22.5 <= direction < 67.5: + WT[i] = 12 + elif 67.5 <= direction < 112.5: + WT[i] = 13 + elif 112.5 <= direction < 157.5: + WT[i] = 14 + elif 157.5 <= direction < 202.5: + WT[i] = 15 + elif 202.5 <= direction < 247.5: + WT[i] = 16 + elif 247.5 <= direction < 292.5: + WT[i] = 17 + elif 292.5 <= direction < 337.5: + WT[i] = 18 + + elif Z[i] < 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 19 + elif 22.5 <= direction < 67.5: + WT[i] = 20 + elif 67.5 <= direction < 112.5: + WT[i] = 21 + elif 112.5 <= direction < 157.5: + WT[i] = 22 + elif 157.5 <= direction < 202.5: + WT[i] = 23 + elif 202.5 <= direction < 247.5: + WT[i] = 24 + elif 247.5 <= direction < 292.5: + WT[i] = 25 + elif 292.5 <= direction < 337.5: + WT[i] = 26 + # light indeterminate flow, corresponding to Lamb’s unclassified type U + elif abs(Z[i]) < 6 and F[i] < 6: + WT[i] = 27 + + slwt_data = calc_slwt(np.int8(WT)) + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + write_path = cfg['work_dir'] + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(WT, long_name="Lamb Weathertypes")) + wt_cube.append(iris.cube.Cube(slwt_data, long_name="Simplified Lamb Weathertypes")) + + wt_cube[0].add_dim_coord(tcoord, 0) + wt_cube[1].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{write_path}/{dataset}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt': slwt_data} + df = pd.DataFrame(data=d) + df.to_csv(write_path + f'/{dataset}.csv', index=False) + + return f'weathertyping for {dataset} done.' + +def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): + + local_path = cfg['plot_dir'] + + ax = plt.axes(projection=ccrs.PlateCarree()) + + imola_rgb = [(25/255, 51/255, 178/255), + (36/255, 70/255, 168/255), + (45/255, 89/255, 159/255), + (57/255, 106/255, 147/255), + (73/255, 123/255, 132/255), + (95/255, 146/255, 123/255), + (122/255, 173/255, 116/255), + (152/255, 203/255, 108/255), + (195/255, 233/255, 102/255), + (255/255, 254/255, 102/255)] + + imola_cmap = ListedColormap(imola_rgb) + + if var_name == "psl": + plt.title(f"{var_name} mean, wt: {wt}") + unit = "[hPa]" + im = iplt.contourf(cube/100, cmap=imola_cmap) + elif var_name == "prcp": + if dataset == "ERA5": + unit = "[m]" + plt.title(f"total {var_name} mean, wt: {wt}") + else: + unit = "[kg m-2 s-1]" + plt.title(f"{var_name} flux mean, wt: {wt}") + im = iplt.contourf(cube, cmap=imola_cmap) + elif var_name == "tas": + unit = "[K]" + plt.title(f"1000 hPa {var_name} mean, wt: {wt}") + im = iplt.contourf(cube, cmap=imola_cmap) + + cb = plt.colorbar(im) + cb.ax.tick_params(labelsize=8) + cb.set_label(label=f"{var_name} mean {unit}") + + gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--') + gl.left_labels = True + gl.bottom_labels = True + gl.top_labels = False + gl.right_labels = False + gl.xlines = True + gl.ylocator = mticker.FixedLocator(np.arange(20,70,5)) + gl.xlocator = mticker.FixedLocator([-10, -5, 0, 5, 10, 15]) + gl.xformatter = LONGITUDE_FORMATTER + gl.yformatter = LATITUDE_FORMATTER + gl.xlabel_style = {'size': 8, 'color': 'black'} + gl.ylabel_style = {'color': 'black', 'size': 8} + + ax.set_extent([-15, 20, 27.5, 62.5]) + + ax.coastlines() + ax.add_feature(cfeature.BORDERS, linestyle=':') + + plt.savefig(os.path.join(local_path, f"{wt_string}_{wt}_{dataset}_{var_name}_mean.png")) + plt.close() + + return + +def rmsd(subarray1, subarray2): + """ + Calculate root mean square difference between two arrays. + """ + return np.sqrt(np.mean((subarray1 - subarray2)**2)) + +def process_prcp_mean(wt, cfg, data, dataset, var_name, wt_string): + + correlation_threshold = 0.7 + rmsd_threshold = 0.00002 + selected_pairs = [] + + pattern_correlation = np.ma.corrcoef(data) + print(pattern_correlation) + + n = len(data) + rmsd_matrix = np.zeros((n, n)) + + for i in range(n): + for j in range(i+1, n): + rmsd_matrix[i][j] = rmsd(data[i], data[j]) + rmsd_matrix[j][i] = rmsd_matrix[i][j] + if pattern_correlation[i][j] >= correlation_threshold and rmsd_matrix[i][j] <= rmsd_threshold: + selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmsd_matrix[i][j])) + + print(rmsd_matrix) + + print(selected_pairs) + + work_dir = cfg['work_dir'] + + np.savetxt(f"{work_dir}/rmsd_matrix.txt", rmsd_matrix) + np.savetxt(f"{work_dir}/corr_matrix.txt", pattern_correlation) + + return + +def calculate_wt_means(cfg, cube, dataset: str, var_name: str, wt_string: str="slwt"): + + work_dir = cfg['work_dir'] + + lwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Lamb Weathertypes") + #lwt_cube = iris.load_cube(f"{work_dir}/ERA5.nc", "Lamb Weathertypes") #for EOBS + slwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Simplified Lamb Weathertypes") + # = iris.load_cube(f"{work_dir}/ERA5.nc", "Simplified Lamb Weathertypes") #for EOBS + lwt = lwt_cube.data[:] + slwt = slwt_cube.data[:] + + if wt_string == "slwt": + tcoord = slwt_cube.coord("time") + elif wt_string == "lwt": + tcoord = lwt_cube.coord("time") + + if wt_string == "slwt": + for wt in range(1,10): + target_indices = np.where(slwt == wt) + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + elif wt_string == "lwt": + wt_data_prcp = [] + for wt in range(1,28): + target_indices = np.where(lwt == wt) + if len(target_indices[0]) < 1: + continue + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + if dataset == "EOBS": + extracted_cube = cube[target_indices]#.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + else: + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + if var_name == "prcp": + wt_data_prcp.append(wt_cube_mean.data.compressed()) + + if var_name == "prcp": + process_prcp_mean(wt, cfg, wt_data_prcp, dataset, var_name, wt_string) + else: + print("WT_STRING NOT SUPPORTED.") + + return + +def run_my_diagnostic(cfg): + """ + Arguments: + cfg - nested dictionary of metadata + + Returns: + string; runs the user diagnostic + + """ + # assemble the data dictionary keyed by dataset name + # this makes use of the handy group_metadata function that + # orders the data by 'dataset'; the resulting dictionary is + # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} + # where var1, var2 are dicts holding all needed information per variable + my_files_dict = group_metadata(cfg['input_data'].values(), 'dataset') + + #load cube + #keys are datasets: models, era5 + #values are variables + for key, value in my_files_dict.items(): + if key == "ERA5" and len(value) > 1: + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + wt_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_tas = iris.load_cube(value[3]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + calculate_wt_means(cfg, wt_preproc_prcp, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, key, var_name="tas", wt_string="lwt") + elif key == "ERA5" and len(value) == 1: + wt_preproc = iris.load_cube(value[0]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + else: + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + mean_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_temp = iris.load_cube(value[3]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_temp, key, var_name="tas", wt_string="lwt") + + + return + +if __name__ == '__main__': + # always use run_diagnostic() to get the config (the preprocessor + # nested dictionary holding all the needed information) + with run_diagnostic() as config: + # list here the functions that need to run + run_my_diagnostic(config) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py new file mode 100644 index 0000000000..4fd75cbf72 --- /dev/null +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -0,0 +1,374 @@ +#weathertyping diagnostic for esmvaltool + + +# operating system manipulations (e.g. path constructions) +import os +import numpy as np +import pandas as pd +# to manipulate iris cubes +import iris +import iris.plot as iplt +import iris.quickplot as qplt +import matplotlib.pyplot as plt +import matplotlib.ticker as mticker +import cf_units +import cartopy.crs as ccrs +import cartopy.feature as cfeature +from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER +import matplotlib.cm as cm +from matplotlib.colors import ListedColormap +import cartopy.util +from iris.analysis.cartography import wrap_lons + +# import internal esmvaltool modules here +from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic + +def calc_slwt(wt): + mapping = { + 1: 1, 2: 1, 19: 1, + 3: 2, 4: 2, 22: 2, 21: 2, + 5: 3, 6: 3, 15: 3, 16: 3, + 7: 4, 8: 4, 11: 4, 18: 4, + 9: 5, 17: 5, + 10: 6, 20: 6, + 12: 7, 13: 7, 14: 7, + 23: 8, 24: 8, + 25: 9, 26: 9, 27:27, 0:0 + } + + return np.array([mapping[value] for value in wt]) + +def calculate_weathertypes(cfg, cube, dataset): + #lats and lons corresponding to datapoints + #55, 5 -> 1 + #55, 15 -> 2 + #50, -5 -> 3 + #50, 5 -> 4 + #50, 15 -> 5 + #50, 25 -> 6 + #45, -5 -> 7 + #45, 5 -> 8 + #45, 15 -> 9 + #45, 25 -> 10 + #40, -5 -> 11 + #40, 5 -> 12 + #40, 15 -> 13 + #40, 25 -> 14 + #35, 5 -> 15 + #35, 15 -> 16 + + #lons: -5, 0, 5, 10, 15, 20, 25 + #lats: 35, 40, 45, 50, 55 + + const1 = 1 / np.cos(45 * np.pi / 180) + const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) + const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) + const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) + + # westerly flow + W = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * (cube.data[:, 3, 2] + cube.data[:, 3, 4]) + #southerly flow + S = const1 * (1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) + #resultant flow + F = (S ** 2 + W ** 2) ** (1 / 2) + #westerly shear vorticity + ZW = const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( + 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4])) + #southerly shear vorticity + ZS = const4 * (1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - 1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * ( + cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + 1 / 4 * (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) + #total shear vorticity + Z = ZW + ZS + + WT = np.zeros(len(Z)) + + for i in range(len(Z)): + + direction = np.arctan(W[i] / S[i]) * 180 / np.pi # deg + if S[i] >= 0: + direction += 180 # deg + + if direction < 0: + direction += 360 # deg + + # Lamb pure directional type + if abs(Z[i]) < F[i]: + if 337.5 <= direction or direction < 22.5: + WT[i] = 1 + elif 22.5 <= direction < 67.5: + WT[i] = 2 + elif 67.5 <= direction < 112.5: + WT[i] = 3 + elif 112.5 <= direction < 157.5: + WT[i] = 4 + elif 157.5 <= direction < 202.5: + WT[i] = 5 + elif 202.5 <= direction < 247.5: + WT[i] = 6 + elif 247.5 <= direction < 292.5: + WT[i] = 7 + elif 292.5 <= direction < 337.5: + WT[i] = 8 + # Lamb’s pure cyclonic and anticyclonic type + elif (2 * F[i]) < abs(Z[i]): + if Z[i] > 0: + WT[i] = 9 + + elif Z[i] < 0: + WT[i] = 10 + #Lambs’s synoptic/direction hybrid types + elif F[i] < abs(Z[i]) < (2 * F[i]): + if Z[i] > 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 11 + elif 22.5 <= direction < 67.5: + WT[i] = 12 + elif 67.5 <= direction < 112.5: + WT[i] = 13 + elif 112.5 <= direction < 157.5: + WT[i] = 14 + elif 157.5 <= direction < 202.5: + WT[i] = 15 + elif 202.5 <= direction < 247.5: + WT[i] = 16 + elif 247.5 <= direction < 292.5: + WT[i] = 17 + elif 292.5 <= direction < 337.5: + WT[i] = 18 + + elif Z[i] < 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 19 + elif 22.5 <= direction < 67.5: + WT[i] = 20 + elif 67.5 <= direction < 112.5: + WT[i] = 21 + elif 112.5 <= direction < 157.5: + WT[i] = 22 + elif 157.5 <= direction < 202.5: + WT[i] = 23 + elif 202.5 <= direction < 247.5: + WT[i] = 24 + elif 247.5 <= direction < 292.5: + WT[i] = 25 + elif 292.5 <= direction < 337.5: + WT[i] = 26 + # light indeterminate flow, corresponding to Lamb’s unclassified type U + elif abs(Z[i]) < 6 and F[i] < 6: + WT[i] = 27 + + slwt_data = calc_slwt(np.int8(WT)) + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + write_path = cfg['work_dir'] + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(WT, long_name="Lamb Weathertypes")) + wt_cube.append(iris.cube.Cube(slwt_data, long_name="Simplified Lamb Weathertypes")) + + wt_cube[0].add_dim_coord(tcoord, 0) + wt_cube[1].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{write_path}/{dataset}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt': slwt_data} + df = pd.DataFrame(data=d) + df.to_csv(write_path + f'/{dataset}.csv', index=False) + + return f'weathertyping for {dataset} done.' + +def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): + + local_path = cfg['plot_dir'] + + ax = plt.axes(projection=ccrs.PlateCarree()) + + imola_rgb = [(25/255, 51/255, 178/255), + (36/255, 70/255, 168/255), + (45/255, 89/255, 159/255), + (57/255, 106/255, 147/255), + (73/255, 123/255, 132/255), + (95/255, 146/255, 123/255), + (122/255, 173/255, 116/255), + (152/255, 203/255, 108/255), + (195/255, 233/255, 102/255), + (255/255, 254/255, 102/255)] + + imola_cmap = ListedColormap(imola_rgb) + + if var_name == "psl": + plt.title(f"{var_name} mean, wt: {wt}") + unit = "[hPa]" + im = iplt.contourf(cube/100, cmap=imola_cmap) + elif var_name == "prcp": + if dataset == "ERA5": + unit = "[m]" + plt.title(f"total {var_name} mean, wt: {wt}") + else: + unit = "[kg m-2 s-1]" + plt.title(f"{var_name} flux mean, wt: {wt}") + im = iplt.contourf(cube, cmap=imola_cmap) + elif var_name == "tas": + unit = "[K]" + plt.title(f"1000 hPa {var_name} mean, wt: {wt}") + im = iplt.contourf(cube, cmap=imola_cmap) + + cb = plt.colorbar(im) + cb.ax.tick_params(labelsize=8) + cb.set_label(label=f"{var_name} mean {unit}") + + gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--') + gl.left_labels = True + gl.bottom_labels = True + gl.top_labels = False + gl.right_labels = False + gl.xlines = True + gl.ylocator = mticker.FixedLocator(np.arange(20,70,5)) + gl.xlocator = mticker.FixedLocator([-10, -5, 0, 5, 10, 15]) + gl.xformatter = LONGITUDE_FORMATTER + gl.yformatter = LATITUDE_FORMATTER + gl.xlabel_style = {'size': 8, 'color': 'black'} + gl.ylabel_style = {'color': 'black', 'size': 8} + + ax.set_extent([-15, 20, 27.5, 62.5]) + + ax.coastlines() + ax.add_feature(cfeature.BORDERS, linestyle=':') + + plt.savefig(os.path.join(local_path, f"{wt_string}_{wt}_{dataset}_{var_name}_mean.png")) + plt.close() + + return + +def rmsd(subarray1, subarray2): + """ + Calculate root mean square difference between two arrays. + """ + return np.sqrt(np.mean((subarray1 - subarray2)**2)) + +def process_prcp_mean(wt, cfg, data, dataset, var_name, wt_string): + + correlation_threshold = 0.7 + rmsd_threshold = 0.00002 + selected_pairs = [] + + pattern_correlation = np.ma.corrcoef(data) + print(pattern_correlation) + + n = len(data) + rmsd_matrix = np.zeros((n, n)) + + for i in range(n): + for j in range(i+1, n): + rmsd_matrix[i][j] = rmsd(data[i], data[j]) + rmsd_matrix[j][i] = rmsd_matrix[i][j] + if pattern_correlation[i][j] >= correlation_threshold and rmsd_matrix[i][j] <= rmsd_threshold: + selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmsd_matrix[i][j])) + + print(rmsd_matrix) + + print(selected_pairs) + + work_dir = cfg['work_dir'] + + np.savetxt(f"{work_dir}/rmsd_matrix.txt", rmsd_matrix) + np.savetxt(f"{work_dir}/corr_matrix.txt", pattern_correlation) + + return + +def calculate_wt_means(cfg, cube, dataset: str, var_name: str, wt_string: str="slwt"): + + work_dir = cfg['work_dir'] + + lwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Lamb Weathertypes") + #lwt_cube = iris.load_cube(f"{work_dir}/ERA5.nc", "Lamb Weathertypes") #for EOBS + slwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Simplified Lamb Weathertypes") + # = iris.load_cube(f"{work_dir}/ERA5.nc", "Simplified Lamb Weathertypes") #for EOBS + lwt = lwt_cube.data[:] + slwt = slwt_cube.data[:] + + if wt_string == "slwt": + tcoord = slwt_cube.coord("time") + elif wt_string == "lwt": + tcoord = lwt_cube.coord("time") + + if wt_string == "slwt": + for wt in range(1,10): + target_indices = np.where(slwt == wt) + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + elif wt_string == "lwt": + wt_data_prcp = [] + for wt in range(1,28): + target_indices = np.where(lwt == wt) + if len(target_indices[0]) < 1: + continue + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + #wt_data_prcp.append(wt_cube_mean.data.compressed()) + #(wt, cfg, wt_data_prcp, dataset, var_name, wt_string) + else: + print("WT_STRING NOT SUPPORTED.") + + return + +def run_my_diagnostic(cfg): + """ + Arguments: + cfg - nested dictionary of metadata + + Returns: + string; runs the user diagnostic + + """ + # assemble the data dictionary keyed by dataset name + # this makes use of the handy group_metadata function that + # orders the data by 'dataset'; the resulting dictionary is + # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} + # where var1, var2 are dicts holding all needed information per variable + my_files_dict = group_metadata(cfg['input_data'].values(), 'dataset') + + #load cube + #keys are datasets: models, era5 + #values are variables + for key, value in my_files_dict.items(): + if key == "ERA5" and len(value) > 1: + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + wt_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_tas = iris.load_cube(value[3]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + calculate_wt_means(cfg, wt_preproc_prcp, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, key, var_name="tas", wt_string="lwt") + elif key == "ERA5" and len(value) == 1: + wt_preproc = iris.load_cube(value[0]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + else: + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + mean_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_temp = iris.load_cube(value[3]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_temp, key, var_name="tas", wt_string="lwt") + + + return + +if __name__ == '__main__': + # always use run_diagnostic() to get the config (the preprocessor + # nested dictionary holding all the needed information) + with run_diagnostic() as config: + # list here the functions that need to run + run_my_diagnostic(config) From e548c1c92d9482673d1b67b62540e59473c0b52c Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sat, 27 Apr 2024 19:31:38 +0200 Subject: [PATCH 02/29] weathertyping scripts --- .../weathertyping_diagnostic_generalised.py | 380 ++++++++++++++++++ .../weathertyping_diagnostic_lwt.py | 374 +++++++++++++++++ 2 files changed, 754 insertions(+) create mode 100644 esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py create mode 100644 esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py new file mode 100644 index 0000000000..b4244ae1f6 --- /dev/null +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py @@ -0,0 +1,380 @@ +#weathertyping diagnostic for esmvaltool + + +# operating system manipulations (e.g. path constructions) +import os +import numpy as np +import pandas as pd +# to manipulate iris cubes +import iris +import iris.plot as iplt +import iris.quickplot as qplt +import matplotlib.pyplot as plt +import matplotlib.ticker as mticker +import cf_units +import cartopy.crs as ccrs +import cartopy.feature as cfeature +from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER +import matplotlib.cm as cm +from matplotlib.colors import ListedColormap +import cartopy.util +from iris.analysis.cartography import wrap_lons + +# import internal esmvaltool modules here +from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic + +def calc_slwt(wt): + mapping = { + 1: 1, 2: 1, 19: 1, + 3: 2, 4: 2, 22: 2, 21: 2, + 5: 3, 6: 3, 15: 3, 16: 3, + 7: 4, 8: 4, 11: 4, 18: 4, + 9: 5, 17: 5, + 10: 6, 20: 6, + 12: 7, 13: 7, 14: 7, + 23: 8, 24: 8, + 25: 9, 26: 9, 27:27, 0:0 + } + + return np.array([mapping[value] for value in wt]) + +def calculate_weathertypes(cfg, cube, dataset): + #lats and lons corresponding to datapoints + #55, 5 -> 1 + #55, 15 -> 2 + #50, -5 -> 3 + #50, 5 -> 4 + #50, 15 -> 5 + #50, 25 -> 6 + #45, -5 -> 7 + #45, 5 -> 8 + #45, 15 -> 9 + #45, 25 -> 10 + #40, -5 -> 11 + #40, 5 -> 12 + #40, 15 -> 13 + #40, 25 -> 14 + #35, 5 -> 15 + #35, 15 -> 16 + + #lons: -5, 0, 5, 10, 15, 20, 25 + #lats: 35, 40, 45, 50, 55 + + const1 = 1 / np.cos(45 * np.pi / 180) + const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) + const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) + const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) + + # westerly flow + W = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * (cube.data[:, 3, 2] + cube.data[:, 3, 4]) + #southerly flow + S = const1 * (1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) + #resultant flow + F = (S ** 2 + W ** 2) ** (1 / 2) + #westerly shear vorticity + ZW = const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( + 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4])) + #southerly shear vorticity + ZS = const4 * (1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - 1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * ( + cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + 1 / 4 * (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) + #total shear vorticity + Z = ZW + ZS + + WT = np.zeros(len(Z)) + + for i in range(len(Z)): + + direction = np.arctan(W[i] / S[i]) * 180 / np.pi # deg + if S[i] >= 0: + direction += 180 # deg + + if direction < 0: + direction += 360 # deg + + # Lamb pure directional type + if abs(Z[i]) < F[i]: + if 337.5 <= direction or direction < 22.5: + WT[i] = 1 + elif 22.5 <= direction < 67.5: + WT[i] = 2 + elif 67.5 <= direction < 112.5: + WT[i] = 3 + elif 112.5 <= direction < 157.5: + WT[i] = 4 + elif 157.5 <= direction < 202.5: + WT[i] = 5 + elif 202.5 <= direction < 247.5: + WT[i] = 6 + elif 247.5 <= direction < 292.5: + WT[i] = 7 + elif 292.5 <= direction < 337.5: + WT[i] = 8 + # Lamb’s pure cyclonic and anticyclonic type + elif (2 * F[i]) < abs(Z[i]): + if Z[i] > 0: + WT[i] = 9 + + elif Z[i] < 0: + WT[i] = 10 + #Lambs’s synoptic/direction hybrid types + elif F[i] < abs(Z[i]) < (2 * F[i]): + if Z[i] > 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 11 + elif 22.5 <= direction < 67.5: + WT[i] = 12 + elif 67.5 <= direction < 112.5: + WT[i] = 13 + elif 112.5 <= direction < 157.5: + WT[i] = 14 + elif 157.5 <= direction < 202.5: + WT[i] = 15 + elif 202.5 <= direction < 247.5: + WT[i] = 16 + elif 247.5 <= direction < 292.5: + WT[i] = 17 + elif 292.5 <= direction < 337.5: + WT[i] = 18 + + elif Z[i] < 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 19 + elif 22.5 <= direction < 67.5: + WT[i] = 20 + elif 67.5 <= direction < 112.5: + WT[i] = 21 + elif 112.5 <= direction < 157.5: + WT[i] = 22 + elif 157.5 <= direction < 202.5: + WT[i] = 23 + elif 202.5 <= direction < 247.5: + WT[i] = 24 + elif 247.5 <= direction < 292.5: + WT[i] = 25 + elif 292.5 <= direction < 337.5: + WT[i] = 26 + # light indeterminate flow, corresponding to Lamb’s unclassified type U + elif abs(Z[i]) < 6 and F[i] < 6: + WT[i] = 27 + + slwt_data = calc_slwt(np.int8(WT)) + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + write_path = cfg['work_dir'] + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(WT, long_name="Lamb Weathertypes")) + wt_cube.append(iris.cube.Cube(slwt_data, long_name="Simplified Lamb Weathertypes")) + + wt_cube[0].add_dim_coord(tcoord, 0) + wt_cube[1].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{write_path}/{dataset}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt': slwt_data} + df = pd.DataFrame(data=d) + df.to_csv(write_path + f'/{dataset}.csv', index=False) + + return f'weathertyping for {dataset} done.' + +def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): + + local_path = cfg['plot_dir'] + + ax = plt.axes(projection=ccrs.PlateCarree()) + + imola_rgb = [(25/255, 51/255, 178/255), + (36/255, 70/255, 168/255), + (45/255, 89/255, 159/255), + (57/255, 106/255, 147/255), + (73/255, 123/255, 132/255), + (95/255, 146/255, 123/255), + (122/255, 173/255, 116/255), + (152/255, 203/255, 108/255), + (195/255, 233/255, 102/255), + (255/255, 254/255, 102/255)] + + imola_cmap = ListedColormap(imola_rgb) + + if var_name == "psl": + plt.title(f"{var_name} mean, wt: {wt}") + unit = "[hPa]" + im = iplt.contourf(cube/100, cmap=imola_cmap) + elif var_name == "prcp": + if dataset == "ERA5": + unit = "[m]" + plt.title(f"total {var_name} mean, wt: {wt}") + else: + unit = "[kg m-2 s-1]" + plt.title(f"{var_name} flux mean, wt: {wt}") + im = iplt.contourf(cube, cmap=imola_cmap) + elif var_name == "tas": + unit = "[K]" + plt.title(f"1000 hPa {var_name} mean, wt: {wt}") + im = iplt.contourf(cube, cmap=imola_cmap) + + cb = plt.colorbar(im) + cb.ax.tick_params(labelsize=8) + cb.set_label(label=f"{var_name} mean {unit}") + + gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--') + gl.left_labels = True + gl.bottom_labels = True + gl.top_labels = False + gl.right_labels = False + gl.xlines = True + gl.ylocator = mticker.FixedLocator(np.arange(20,70,5)) + gl.xlocator = mticker.FixedLocator([-10, -5, 0, 5, 10, 15]) + gl.xformatter = LONGITUDE_FORMATTER + gl.yformatter = LATITUDE_FORMATTER + gl.xlabel_style = {'size': 8, 'color': 'black'} + gl.ylabel_style = {'color': 'black', 'size': 8} + + ax.set_extent([-15, 20, 27.5, 62.5]) + + ax.coastlines() + ax.add_feature(cfeature.BORDERS, linestyle=':') + + plt.savefig(os.path.join(local_path, f"{wt_string}_{wt}_{dataset}_{var_name}_mean.png")) + plt.close() + + return + +def rmsd(subarray1, subarray2): + """ + Calculate root mean square difference between two arrays. + """ + return np.sqrt(np.mean((subarray1 - subarray2)**2)) + +def process_prcp_mean(wt, cfg, data, dataset, var_name, wt_string): + + correlation_threshold = 0.7 + rmsd_threshold = 0.00002 + selected_pairs = [] + + pattern_correlation = np.ma.corrcoef(data) + print(pattern_correlation) + + n = len(data) + rmsd_matrix = np.zeros((n, n)) + + for i in range(n): + for j in range(i+1, n): + rmsd_matrix[i][j] = rmsd(data[i], data[j]) + rmsd_matrix[j][i] = rmsd_matrix[i][j] + if pattern_correlation[i][j] >= correlation_threshold and rmsd_matrix[i][j] <= rmsd_threshold: + selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmsd_matrix[i][j])) + + print(rmsd_matrix) + + print(selected_pairs) + + work_dir = cfg['work_dir'] + + np.savetxt(f"{work_dir}/rmsd_matrix.txt", rmsd_matrix) + np.savetxt(f"{work_dir}/corr_matrix.txt", pattern_correlation) + + return + +def calculate_wt_means(cfg, cube, dataset: str, var_name: str, wt_string: str="slwt"): + + work_dir = cfg['work_dir'] + + lwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Lamb Weathertypes") + #lwt_cube = iris.load_cube(f"{work_dir}/ERA5.nc", "Lamb Weathertypes") #for EOBS + slwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Simplified Lamb Weathertypes") + # = iris.load_cube(f"{work_dir}/ERA5.nc", "Simplified Lamb Weathertypes") #for EOBS + lwt = lwt_cube.data[:] + slwt = slwt_cube.data[:] + + if wt_string == "slwt": + tcoord = slwt_cube.coord("time") + elif wt_string == "lwt": + tcoord = lwt_cube.coord("time") + + if wt_string == "slwt": + for wt in range(1,10): + target_indices = np.where(slwt == wt) + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + elif wt_string == "lwt": + wt_data_prcp = [] + for wt in range(1,28): + target_indices = np.where(lwt == wt) + if len(target_indices[0]) < 1: + continue + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + if dataset == "EOBS": + extracted_cube = cube[target_indices]#.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + else: + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + if var_name == "prcp": + wt_data_prcp.append(wt_cube_mean.data.compressed()) + + if var_name == "prcp": + process_prcp_mean(wt, cfg, wt_data_prcp, dataset, var_name, wt_string) + else: + print("WT_STRING NOT SUPPORTED.") + + return + +def run_my_diagnostic(cfg): + """ + Arguments: + cfg - nested dictionary of metadata + + Returns: + string; runs the user diagnostic + + """ + # assemble the data dictionary keyed by dataset name + # this makes use of the handy group_metadata function that + # orders the data by 'dataset'; the resulting dictionary is + # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} + # where var1, var2 are dicts holding all needed information per variable + my_files_dict = group_metadata(cfg['input_data'].values(), 'dataset') + + #load cube + #keys are datasets: models, era5 + #values are variables + for key, value in my_files_dict.items(): + if key == "ERA5" and len(value) > 1: + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + wt_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_tas = iris.load_cube(value[3]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + calculate_wt_means(cfg, wt_preproc_prcp, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, key, var_name="tas", wt_string="lwt") + elif key == "ERA5" and len(value) == 1: + wt_preproc = iris.load_cube(value[0]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + else: + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + mean_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_temp = iris.load_cube(value[3]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_temp, key, var_name="tas", wt_string="lwt") + + + return + +if __name__ == '__main__': + # always use run_diagnostic() to get the config (the preprocessor + # nested dictionary holding all the needed information) + with run_diagnostic() as config: + # list here the functions that need to run + run_my_diagnostic(config) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py new file mode 100644 index 0000000000..4fd75cbf72 --- /dev/null +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -0,0 +1,374 @@ +#weathertyping diagnostic for esmvaltool + + +# operating system manipulations (e.g. path constructions) +import os +import numpy as np +import pandas as pd +# to manipulate iris cubes +import iris +import iris.plot as iplt +import iris.quickplot as qplt +import matplotlib.pyplot as plt +import matplotlib.ticker as mticker +import cf_units +import cartopy.crs as ccrs +import cartopy.feature as cfeature +from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER +import matplotlib.cm as cm +from matplotlib.colors import ListedColormap +import cartopy.util +from iris.analysis.cartography import wrap_lons + +# import internal esmvaltool modules here +from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic + +def calc_slwt(wt): + mapping = { + 1: 1, 2: 1, 19: 1, + 3: 2, 4: 2, 22: 2, 21: 2, + 5: 3, 6: 3, 15: 3, 16: 3, + 7: 4, 8: 4, 11: 4, 18: 4, + 9: 5, 17: 5, + 10: 6, 20: 6, + 12: 7, 13: 7, 14: 7, + 23: 8, 24: 8, + 25: 9, 26: 9, 27:27, 0:0 + } + + return np.array([mapping[value] for value in wt]) + +def calculate_weathertypes(cfg, cube, dataset): + #lats and lons corresponding to datapoints + #55, 5 -> 1 + #55, 15 -> 2 + #50, -5 -> 3 + #50, 5 -> 4 + #50, 15 -> 5 + #50, 25 -> 6 + #45, -5 -> 7 + #45, 5 -> 8 + #45, 15 -> 9 + #45, 25 -> 10 + #40, -5 -> 11 + #40, 5 -> 12 + #40, 15 -> 13 + #40, 25 -> 14 + #35, 5 -> 15 + #35, 15 -> 16 + + #lons: -5, 0, 5, 10, 15, 20, 25 + #lats: 35, 40, 45, 50, 55 + + const1 = 1 / np.cos(45 * np.pi / 180) + const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) + const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) + const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) + + # westerly flow + W = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * (cube.data[:, 3, 2] + cube.data[:, 3, 4]) + #southerly flow + S = const1 * (1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) + #resultant flow + F = (S ** 2 + W ** 2) ** (1 / 2) + #westerly shear vorticity + ZW = const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( + 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4])) + #southerly shear vorticity + ZS = const4 * (1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - 1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * ( + cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + 1 / 4 * (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) + #total shear vorticity + Z = ZW + ZS + + WT = np.zeros(len(Z)) + + for i in range(len(Z)): + + direction = np.arctan(W[i] / S[i]) * 180 / np.pi # deg + if S[i] >= 0: + direction += 180 # deg + + if direction < 0: + direction += 360 # deg + + # Lamb pure directional type + if abs(Z[i]) < F[i]: + if 337.5 <= direction or direction < 22.5: + WT[i] = 1 + elif 22.5 <= direction < 67.5: + WT[i] = 2 + elif 67.5 <= direction < 112.5: + WT[i] = 3 + elif 112.5 <= direction < 157.5: + WT[i] = 4 + elif 157.5 <= direction < 202.5: + WT[i] = 5 + elif 202.5 <= direction < 247.5: + WT[i] = 6 + elif 247.5 <= direction < 292.5: + WT[i] = 7 + elif 292.5 <= direction < 337.5: + WT[i] = 8 + # Lamb’s pure cyclonic and anticyclonic type + elif (2 * F[i]) < abs(Z[i]): + if Z[i] > 0: + WT[i] = 9 + + elif Z[i] < 0: + WT[i] = 10 + #Lambs’s synoptic/direction hybrid types + elif F[i] < abs(Z[i]) < (2 * F[i]): + if Z[i] > 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 11 + elif 22.5 <= direction < 67.5: + WT[i] = 12 + elif 67.5 <= direction < 112.5: + WT[i] = 13 + elif 112.5 <= direction < 157.5: + WT[i] = 14 + elif 157.5 <= direction < 202.5: + WT[i] = 15 + elif 202.5 <= direction < 247.5: + WT[i] = 16 + elif 247.5 <= direction < 292.5: + WT[i] = 17 + elif 292.5 <= direction < 337.5: + WT[i] = 18 + + elif Z[i] < 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 19 + elif 22.5 <= direction < 67.5: + WT[i] = 20 + elif 67.5 <= direction < 112.5: + WT[i] = 21 + elif 112.5 <= direction < 157.5: + WT[i] = 22 + elif 157.5 <= direction < 202.5: + WT[i] = 23 + elif 202.5 <= direction < 247.5: + WT[i] = 24 + elif 247.5 <= direction < 292.5: + WT[i] = 25 + elif 292.5 <= direction < 337.5: + WT[i] = 26 + # light indeterminate flow, corresponding to Lamb’s unclassified type U + elif abs(Z[i]) < 6 and F[i] < 6: + WT[i] = 27 + + slwt_data = calc_slwt(np.int8(WT)) + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + write_path = cfg['work_dir'] + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(WT, long_name="Lamb Weathertypes")) + wt_cube.append(iris.cube.Cube(slwt_data, long_name="Simplified Lamb Weathertypes")) + + wt_cube[0].add_dim_coord(tcoord, 0) + wt_cube[1].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{write_path}/{dataset}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt': slwt_data} + df = pd.DataFrame(data=d) + df.to_csv(write_path + f'/{dataset}.csv', index=False) + + return f'weathertyping for {dataset} done.' + +def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): + + local_path = cfg['plot_dir'] + + ax = plt.axes(projection=ccrs.PlateCarree()) + + imola_rgb = [(25/255, 51/255, 178/255), + (36/255, 70/255, 168/255), + (45/255, 89/255, 159/255), + (57/255, 106/255, 147/255), + (73/255, 123/255, 132/255), + (95/255, 146/255, 123/255), + (122/255, 173/255, 116/255), + (152/255, 203/255, 108/255), + (195/255, 233/255, 102/255), + (255/255, 254/255, 102/255)] + + imola_cmap = ListedColormap(imola_rgb) + + if var_name == "psl": + plt.title(f"{var_name} mean, wt: {wt}") + unit = "[hPa]" + im = iplt.contourf(cube/100, cmap=imola_cmap) + elif var_name == "prcp": + if dataset == "ERA5": + unit = "[m]" + plt.title(f"total {var_name} mean, wt: {wt}") + else: + unit = "[kg m-2 s-1]" + plt.title(f"{var_name} flux mean, wt: {wt}") + im = iplt.contourf(cube, cmap=imola_cmap) + elif var_name == "tas": + unit = "[K]" + plt.title(f"1000 hPa {var_name} mean, wt: {wt}") + im = iplt.contourf(cube, cmap=imola_cmap) + + cb = plt.colorbar(im) + cb.ax.tick_params(labelsize=8) + cb.set_label(label=f"{var_name} mean {unit}") + + gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--') + gl.left_labels = True + gl.bottom_labels = True + gl.top_labels = False + gl.right_labels = False + gl.xlines = True + gl.ylocator = mticker.FixedLocator(np.arange(20,70,5)) + gl.xlocator = mticker.FixedLocator([-10, -5, 0, 5, 10, 15]) + gl.xformatter = LONGITUDE_FORMATTER + gl.yformatter = LATITUDE_FORMATTER + gl.xlabel_style = {'size': 8, 'color': 'black'} + gl.ylabel_style = {'color': 'black', 'size': 8} + + ax.set_extent([-15, 20, 27.5, 62.5]) + + ax.coastlines() + ax.add_feature(cfeature.BORDERS, linestyle=':') + + plt.savefig(os.path.join(local_path, f"{wt_string}_{wt}_{dataset}_{var_name}_mean.png")) + plt.close() + + return + +def rmsd(subarray1, subarray2): + """ + Calculate root mean square difference between two arrays. + """ + return np.sqrt(np.mean((subarray1 - subarray2)**2)) + +def process_prcp_mean(wt, cfg, data, dataset, var_name, wt_string): + + correlation_threshold = 0.7 + rmsd_threshold = 0.00002 + selected_pairs = [] + + pattern_correlation = np.ma.corrcoef(data) + print(pattern_correlation) + + n = len(data) + rmsd_matrix = np.zeros((n, n)) + + for i in range(n): + for j in range(i+1, n): + rmsd_matrix[i][j] = rmsd(data[i], data[j]) + rmsd_matrix[j][i] = rmsd_matrix[i][j] + if pattern_correlation[i][j] >= correlation_threshold and rmsd_matrix[i][j] <= rmsd_threshold: + selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmsd_matrix[i][j])) + + print(rmsd_matrix) + + print(selected_pairs) + + work_dir = cfg['work_dir'] + + np.savetxt(f"{work_dir}/rmsd_matrix.txt", rmsd_matrix) + np.savetxt(f"{work_dir}/corr_matrix.txt", pattern_correlation) + + return + +def calculate_wt_means(cfg, cube, dataset: str, var_name: str, wt_string: str="slwt"): + + work_dir = cfg['work_dir'] + + lwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Lamb Weathertypes") + #lwt_cube = iris.load_cube(f"{work_dir}/ERA5.nc", "Lamb Weathertypes") #for EOBS + slwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Simplified Lamb Weathertypes") + # = iris.load_cube(f"{work_dir}/ERA5.nc", "Simplified Lamb Weathertypes") #for EOBS + lwt = lwt_cube.data[:] + slwt = slwt_cube.data[:] + + if wt_string == "slwt": + tcoord = slwt_cube.coord("time") + elif wt_string == "lwt": + tcoord = lwt_cube.coord("time") + + if wt_string == "slwt": + for wt in range(1,10): + target_indices = np.where(slwt == wt) + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + elif wt_string == "lwt": + wt_data_prcp = [] + for wt in range(1,28): + target_indices = np.where(lwt == wt) + if len(target_indices[0]) < 1: + continue + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + #wt_data_prcp.append(wt_cube_mean.data.compressed()) + #(wt, cfg, wt_data_prcp, dataset, var_name, wt_string) + else: + print("WT_STRING NOT SUPPORTED.") + + return + +def run_my_diagnostic(cfg): + """ + Arguments: + cfg - nested dictionary of metadata + + Returns: + string; runs the user diagnostic + + """ + # assemble the data dictionary keyed by dataset name + # this makes use of the handy group_metadata function that + # orders the data by 'dataset'; the resulting dictionary is + # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} + # where var1, var2 are dicts holding all needed information per variable + my_files_dict = group_metadata(cfg['input_data'].values(), 'dataset') + + #load cube + #keys are datasets: models, era5 + #values are variables + for key, value in my_files_dict.items(): + if key == "ERA5" and len(value) > 1: + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + wt_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_tas = iris.load_cube(value[3]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + calculate_wt_means(cfg, wt_preproc_prcp, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, key, var_name="tas", wt_string="lwt") + elif key == "ERA5" and len(value) == 1: + wt_preproc = iris.load_cube(value[0]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + else: + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + mean_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_temp = iris.load_cube(value[3]['filename']) + calculate_weathertypes(cfg, wt_preproc, key) + calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_temp, key, var_name="tas", wt_string="lwt") + + + return + +if __name__ == '__main__': + # always use run_diagnostic() to get the config (the preprocessor + # nested dictionary holding all the needed information) + with run_diagnostic() as config: + # list here the functions that need to run + run_my_diagnostic(config) From 4e4053d10ec6729c4be8a66504567a1ac7dd7a63 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Thu, 2 May 2024 10:13:36 +0200 Subject: [PATCH 03/29] weathertyping --- .../weathertyping_diagnostic_lwt.py | 386 ++++++++++++++---- 1 file changed, 300 insertions(+), 86 deletions(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py index 4fd75cbf72..6a783665dd 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -5,6 +5,7 @@ import os import numpy as np import pandas as pd +import json # to manipulate iris cubes import iris import iris.plot as iplt @@ -23,8 +24,9 @@ # import internal esmvaltool modules here from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic -def calc_slwt(wt): - mapping = { +def get_mapping_dict(selected_pairs): + + mapping_dict = { 1: 1, 2: 1, 19: 1, 3: 2, 4: 2, 22: 2, 21: 2, 5: 3, 6: 3, 15: 3, 16: 3, @@ -36,9 +38,50 @@ def calc_slwt(wt): 25: 9, 26: 9, 27:27, 0:0 } - return np.array([mapping[value] for value in wt]) + mapping_array = [] + + for i in range(0,len(selected_pairs)): + mapping_array.append(selected_pairs[i][0]) + + print(mapping_array) + + return mapping_dict + +def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_threshold): + + print(dataset) + + work_dir = cfg['work_dir'] + + tcoord = cube.coord("time") + + wt_data_prcp = [] + for wt in range(1,28): + target_indices = np.where(LWT == wt) + if len(target_indices[0]) < 1: + print(f"calculate_slwt_obs - CAUTION: Skipped wt {wt} for dataset {dataset}!") + continue + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + if dataset == "E-OBS": + extracted_cube = cube[target_indices]#.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + else: + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + #plot_mean(wt, cfg, wt_cube_mean, dataset, f"{var_name}_", wt_string) + wt_data_prcp.append(wt_cube_mean.data.compressed()) + selected_pairs = process_prcp_mean(wt, cfg, wt_data_prcp, correlation_thresold, rmse_threshold, dataset) + + with open(f'{work_dir}/wt_mapping_{dataset}.json', 'w') as file: + json.dump(selected_pairs, file) + + mapping_dict = get_mapping_dict(selected_pairs) + + #add_slwt_to_file(cfg, dataset, mapping_dict) + + return np.array([mapping_dict[value] for value in np.int8(LWT)]) + +def wt_algorithm(cube): -def calculate_weathertypes(cfg, cube, dataset): #lats and lons corresponding to datapoints #55, 5 -> 1 #55, 15 -> 2 @@ -157,54 +200,130 @@ def calculate_weathertypes(cfg, cube, dataset): elif abs(Z[i]) < 6 and F[i] < 6: WT[i] = 27 - slwt_data = calc_slwt(np.int8(WT)) + return WT + +def calculate_lwt_slwt_model(cfg, cube, dataset): + + work_dir = cfg['work_dir'] + + WT = wt_algorithm(cube) iris.FUTURE.datum_support = True iris.FUTURE.save_split_attrs = True tcoord = cube.coord("time") time_points = tcoord.units.num2date(tcoord.points) - write_path = cfg['work_dir'] + with open(f'{work_dir}/wt_mapping_ERA5.json', 'r') as file: + mapping_dict_era5 = json.load(file) + + with open(f'{work_dir}/wt_mapping_E-OBS.json', 'r') as file: + mapping_dict_eobs = json.load(file) + + mapping_dict = { + 1: 1, 2: 1, 19: 1, + 3: 2, 4: 2, 22: 2, 21: 2, + 5: 3, 6: 3, 15: 3, 16: 3, + 7: 4, 8: 4, 11: 4, 18: 4, + 9: 5, 17: 5, + 10: 6, 20: 6, + 12: 7, 13: 7, 14: 7, + 23: 8, 24: 8, + 25: 9, 26: 9, 27:27, 0:0 + } + + mapping_dict_era5 = mapping_dict + mapping_dict_eobs = mapping_dict + + print(cube.data) + + slwt_era5 = np.array([mapping_dict[value] for value in np.int8(WT)]) + slwt_eobs = np.array([mapping_dict[value] for value in np.int8(WT)]) wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(WT, long_name="Lamb Weathertypes")) - wt_cube.append(iris.cube.Cube(slwt_data, long_name="Simplified Lamb Weathertypes")) + wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) + wt_cube.append(iris.cube.Cube(slwt_era5, long_name="slwt_era5")) + wt_cube.append(iris.cube.Cube(slwt_eobs, long_name="slwt_eobs")) wt_cube[0].add_dim_coord(tcoord, 0) wt_cube[1].add_dim_coord(tcoord, 0) + wt_cube[2].add_dim_coord(tcoord, 0) - iris.save(wt_cube, f"{write_path}/{dataset}.nc") + iris.save(wt_cube, f"{work_dir}/{dataset}.nc") #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt': slwt_data} + d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt_ERA5': slwt_era5, 'slwt_EOBS': slwt_eobs} #add slwt_eobs and slwt_era5 here df = pd.DataFrame(data=d) - df.to_csv(write_path + f'/{dataset}.csv', index=False) + df.to_csv(f'{work_dir}/{dataset}.csv', index=False) return f'weathertyping for {dataset} done.' + return + +def get_colormap(colormap_string): + + misc_seq_2_disc = [ + (230/255, 240/255, 240/255), + (182/255, 217/255, 228/255), + (142/255, 192/255, 226/255), + (118/255, 163/255, 228/255), + (116/255, 130/255, 222/255), + (121/255, 97/255, 199/255), + (118/255, 66/255, 164/255), + (107/255, 40/255, 121/255), + (86/255, 22/255, 75/255), + (54/255, 14/255, 36/255)] + + temp_seq_disc = [ + (254/255, 254/255, 203/255), + (251/255, 235/255, 153/255), + (244/255, 204/255, 104/255), + (235/255, 167/255, 84/255), + (228/255, 134/255, 80/255), + (209/255, 98/255, 76/255), + (164/255, 70/255, 66/255), + (114/255, 55/255, 46/255), + (66/255, 40/255, 24/255), + (25/255, 25/255, 0/255)] + + prec_seq_disc = [ + (255/255, 255/255, 229/255), + (217/255, 235/255, 213/255), + (180/255, 216/255, 197/255), + (142/255, 197/255, 181/255), + (105/255, 177/255, 165/255), + (67/255, 158/255, 149/255), + (44/255, 135/255, 127/255), + (29/255, 110/255, 100/255), + (14/255, 85/255, 74/255), + (0/255, 60/255, 48/255)] + + if colormap_string == "psl": + return ListedColormap(misc_seq_2_disc) + elif colormap_string == "prcp": + return ListedColormap(prec_seq_disc) + elif colormap_string == "temp": + return ListedColormap(temp_seq_disc) + else: + print("Colormap string not supported!") + + return + def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): local_path = cfg['plot_dir'] ax = plt.axes(projection=ccrs.PlateCarree()) - imola_rgb = [(25/255, 51/255, 178/255), - (36/255, 70/255, 168/255), - (45/255, 89/255, 159/255), - (57/255, 106/255, 147/255), - (73/255, 123/255, 132/255), - (95/255, 146/255, 123/255), - (122/255, 173/255, 116/255), - (152/255, 203/255, 108/255), - (195/255, 233/255, 102/255), - (255/255, 254/255, 102/255)] + - imola_cmap = ListedColormap(imola_rgb) + psl_cmap = get_colormap("psl") + prcp_cmap = get_colormap("prcp") + temp_cmap = get_colormap("temp") if var_name == "psl": plt.title(f"{var_name} mean, wt: {wt}") unit = "[hPa]" - im = iplt.contourf(cube/100, cmap=imola_cmap) + im = iplt.contourf(cube/100, cmap=psl_cmap) elif var_name == "prcp": if dataset == "ERA5": unit = "[m]" @@ -212,11 +331,11 @@ def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): else: unit = "[kg m-2 s-1]" plt.title(f"{var_name} flux mean, wt: {wt}") - im = iplt.contourf(cube, cmap=imola_cmap) + im = iplt.contourf(cube, cmap=prcp_cmap) elif var_name == "tas": unit = "[K]" plt.title(f"1000 hPa {var_name} mean, wt: {wt}") - im = iplt.contourf(cube, cmap=imola_cmap) + im = iplt.contourf(cube, cmap=temp_cmap) cb = plt.colorbar(im) cb.ax.tick_params(labelsize=8) @@ -245,82 +364,126 @@ def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): return -def rmsd(subarray1, subarray2): +def rmse(subarray1, subarray2): """ Calculate root mean square difference between two arrays. """ return np.sqrt(np.mean((subarray1 - subarray2)**2)) -def process_prcp_mean(wt, cfg, data, dataset, var_name, wt_string): +def write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset): + + work_dir = cfg['work_dir'] + + df_corr = pd.DataFrame(pattern_correlation) + df_corr.index = range(1, len(df_corr) + 1) + df_corr.columns = range(1, len(df_corr.columns) + 1) + df_corr.to_csv(f'{work_dir}/correlation_matrix_{dataset}.csv', index_label='Index') + + df_rmse = pd.DataFrame(rmse_matrix) + df_rmse.index = range(1, len(df_rmse) + 1) + df_rmse.columns = range(1, len(df_rmse.columns) + 1) + df_rmse.to_csv(f'{work_dir}/correlation_matrix_{dataset}.csv', index_label='Index') + + return + +def process_prcp_mean(wt, cfg, data, correlation_threshold, rmse_threshold, dataset): - correlation_threshold = 0.7 - rmsd_threshold = 0.00002 selected_pairs = [] pattern_correlation = np.ma.corrcoef(data) - print(pattern_correlation) n = len(data) - rmsd_matrix = np.zeros((n, n)) + rmse_matrix = np.zeros((n, n)) for i in range(n): for j in range(i+1, n): - rmsd_matrix[i][j] = rmsd(data[i], data[j]) - rmsd_matrix[j][i] = rmsd_matrix[i][j] - if pattern_correlation[i][j] >= correlation_threshold and rmsd_matrix[i][j] <= rmsd_threshold: - selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmsd_matrix[i][j])) - - print(rmsd_matrix) + rmse_matrix[i][j] = rmse(data[i], data[j]) + rmse_matrix[j][i] = rmse_matrix[i][j] + if pattern_correlation[i][j] >= correlation_threshold and rmse_matrix[i][j] <= rmse_threshold: + selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmse_matrix[i][j])) print(selected_pairs) - work_dir = cfg['work_dir'] + #write matrices to csv + write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset) - np.savetxt(f"{work_dir}/rmsd_matrix.txt", rmsd_matrix) - np.savetxt(f"{work_dir}/corr_matrix.txt", pattern_correlation) + return selected_pairs - return - -def calculate_wt_means(cfg, cube, dataset: str, var_name: str, wt_string: str="slwt"): - - work_dir = cfg['work_dir'] - - lwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Lamb Weathertypes") - #lwt_cube = iris.load_cube(f"{work_dir}/ERA5.nc", "Lamb Weathertypes") #for EOBS - slwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Simplified Lamb Weathertypes") - # = iris.load_cube(f"{work_dir}/ERA5.nc", "Simplified Lamb Weathertypes") #for EOBS - lwt = lwt_cube.data[:] - slwt = slwt_cube.data[:] +def calculate_wt_means(cfg, cube, wt_cubes, dataset: str, var_name: str, wt_string: str): - if wt_string == "slwt": - tcoord = slwt_cube.coord("time") + if wt_string == "slwt_ERA5": + slwt_era5_cube = wt_cubes[1]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_era5") + tcoord = slwt_era5_cube.coord("time") + slwt_era5 = slwt_era5_cube.data[:] + print(slwt_era5) + elif wt_string == "slwt_EOBS": + slwt_eobs_cube = wt_cubes[2]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_e-obs") + tcoord = slwt_eobs_cube.coord("time") + slwt_eobs = slwt_eobs_cube.data[:] + print(slwt_eobs) elif wt_string == "lwt": + lwt_cube = wt_cubes[0]#iris.load(f"{work_dir}/{file_name}.nc", "lwt") tcoord = lwt_cube.coord("time") + lwt = lwt_cube.data[:] + print(lwt) - if wt_string == "slwt": + if "slwt" in wt_string: for wt in range(1,10): - target_indices = np.where(slwt == wt) + if wt_string == "slwt_ERA5": + target_indices = np.where(slwt_era5 == wt) + elif wt_string == "slwt_EOBS": + target_indices = np.where(slwt_eobs == wt) + else: + print("WT_STRING not supported!") + if len(target_indices[0]) < 1: + print(f"calculate_wt_mean - CAUTION: Skipped wt {wt} for dataset {dataset}!") + continue dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) elif wt_string == "lwt": - wt_data_prcp = [] for wt in range(1,28): target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: + print(f"calculate_wt_mean - CAUTION: Skipped wt {wt} for dataset {dataset}!") continue dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) - #wt_data_prcp.append(wt_cube_mean.data.compressed()) - #(wt, cfg, wt_data_prcp, dataset, var_name, wt_string) else: print("WT_STRING NOT SUPPORTED.") return +def combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, cube, file_name): + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + write_path = cfg['work_dir'] + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(lwt, long_name="lwt")) + wt_cube.append(iris.cube.Cube(slwt_era5, long_name="slwt_era5")) + wt_cube.append(iris.cube.Cube(slwt_eobs, long_name="slwt_eobs")) + + wt_cube[0].add_dim_coord(tcoord, 0) + wt_cube[1].add_dim_coord(tcoord, 0) + wt_cube[2].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{write_path}/{file_name}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(lwt), 'slwt_era5': np.int8(slwt_era5), 'slwt_eobs': np.int8(slwt_eobs)}#, 'slwt': slwt_data} + df = pd.DataFrame(data=d) + df.to_csv(write_path + f'/{file_name}.csv', index=False) + + return + def run_my_diagnostic(cfg): """ Arguments: @@ -335,33 +498,84 @@ def run_my_diagnostic(cfg): # orders the data by 'dataset'; the resulting dictionary is # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} # where var1, var2 are dicts holding all needed information per variable - my_files_dict = group_metadata(cfg['input_data'].values(), 'dataset') - - #load cube - #keys are datasets: models, era5 - #values are variables - for key, value in my_files_dict.items(): - if key == "ERA5" and len(value) > 1: - wt_preproc = iris.load_cube(value[0]['filename']) - mean_preproc_psl = iris.load_cube(value[1]['filename']) - wt_preproc_prcp = iris.load_cube(value[2]['filename']) - mean_preproc_tas = iris.load_cube(value[3]['filename']) - calculate_weathertypes(cfg, wt_preproc, key) - calculate_wt_means(cfg, wt_preproc_prcp, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, key, var_name="tas", wt_string="lwt") - elif key == "ERA5" and len(value) == 1: - wt_preproc = iris.load_cube(value[0]['filename']) - calculate_weathertypes(cfg, wt_preproc, key) - else: - wt_preproc = iris.load_cube(value[0]['filename']) - mean_preproc_psl = iris.load_cube(value[1]['filename']) - mean_preproc_prcp = iris.load_cube(value[2]['filename']) - mean_preproc_temp = iris.load_cube(value[3]['filename']) - calculate_weathertypes(cfg, wt_preproc, key) - calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_temp, key, var_name="tas", wt_string="lwt") + preproc_variables_dict = group_metadata(cfg['input_data'].values(), 'dataset') + + print(cfg.keys()) + print(preproc_variables_dict.keys()) + + correlation_threshold = cfg['correlation_threshold'] + rmse_threshold = cfg['rmse_threshold'] + work_dir = cfg['work_dir'] + + #load cubes and run functions + #key = dataset name, value is dataset + if cfg['automatic_slwt']: + for key, value in preproc_variables_dict.items(): + if key == "ERA5": + wt_preproc = iris.load_cube(value[0]['filename']) + wt_preproc_prcp = iris.load_cube(value[1]['filename']) + mean_preproc_psl = iris.load_cube(value[2]['filename']) + mean_preproc_prcp = iris.load_cube(value[3]['filename']) + mean_preproc_tas = iris.load_cube(value[4]['filename']) + wt_preproc_prcp_EOBS = iris.load_cube(preproc_variables_dict['E-OBS'][0]['filename']) + + #calculate lwt + lwt = wt_algorithm(wt_preproc) + + #calculate simplified lwt based on precipitation patterns + slwt_era5 = calculate_slwt_obs(cfg, lwt, wt_preproc_prcp, key, correlation_threshold, rmse_threshold) + slwt_eobs = calculate_slwt_obs(cfg, lwt, wt_preproc_prcp_EOBS, "E-OBS", correlation_threshold, rmse_threshold) + + #write to file + combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, wt_preproc, key) + + #load weathertype files as cubes + lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + slwt_era5_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_era5") + slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") + wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + + print(lwt_cube) + print(slwt_era5_cube) + print(slwt_eobs_cube) + + #plot means + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") + else: + if key == "E-OBS": + continue + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + mean_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_tas = iris.load_cube(value[3]['filename']) + + #calculate weathertypes + calculate_lwt_slwt_model(cfg, wt_preproc, key) + + #load wt files + lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + slwt_era5_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_era5") + slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") + wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + + #plot means + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") return From 88cfed7c756a2c1019bfb401387b7b66327dd06f Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Thu, 2 May 2024 10:15:00 +0200 Subject: [PATCH 04/29] weathertyping --- .../weathertyping/weathertyping_diagnostic_generalised.py | 1 - 1 file changed, 1 deletion(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py index b4244ae1f6..64284feec7 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py @@ -319,7 +319,6 @@ def calculate_wt_means(cfg, cube, dataset: str, var_name: str, wt_string: str="s plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) if var_name == "prcp": wt_data_prcp.append(wt_cube_mean.data.compressed()) - if var_name == "prcp": process_prcp_mean(wt, cfg, wt_data_prcp, dataset, var_name, wt_string) else: From fea116e8483e265f12253441592b6ce1be71fe54 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Tue, 7 May 2024 12:01:54 +0200 Subject: [PATCH 05/29] weathertyping module --- .../weathertyping_diagnostic_lwt.py | 53 ++++++++++++++----- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py index 6a783665dd..592dd8cd2b 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -24,6 +24,19 @@ # import internal esmvaltool modules here from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic +def turn_set_to_mapping_dict(array): + + result_dict = {} + + for i, s in enumerate(array): + for elem in s: + if elem not in result_dict: + result_dict[elem] = i+1 + else: + result_dict[elem].append(i) + + return result_dict + def get_mapping_dict(selected_pairs): mapping_dict = { @@ -43,7 +56,19 @@ def get_mapping_dict(selected_pairs): for i in range(0,len(selected_pairs)): mapping_array.append(selected_pairs[i][0]) - print(mapping_array) + s=[set(i) for i in mapping_array if i] + + def find_intersection(m_list): + for i,v in enumerate(m_list) : + for j,k in enumerate(m_list[i+1:],i+1): + if v&k: + s[i]=v.union(m_list.pop(j)) + return find_intersection(m_list) + return m_list + + merged_tuples = find_intersection(s) + + mapping_dict = turn_set_to_mapping_dict(merged_tuples) return mapping_dict @@ -76,9 +101,7 @@ def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_ mapping_dict = get_mapping_dict(selected_pairs) - #add_slwt_to_file(cfg, dataset, mapping_dict) - - return np.array([mapping_dict[value] for value in np.int8(LWT)]) + return np.array([mapping_dict.get(value, 0) for value in np.int8(LWT)]) def wt_algorithm(cube): @@ -382,7 +405,7 @@ def write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset): df_rmse = pd.DataFrame(rmse_matrix) df_rmse.index = range(1, len(df_rmse) + 1) df_rmse.columns = range(1, len(df_rmse.columns) + 1) - df_rmse.to_csv(f'{work_dir}/correlation_matrix_{dataset}.csv', index_label='Index') + df_rmse.to_csv(f'{work_dir}/rmse_matrix_{dataset}.csv', index_label='Index') return @@ -567,22 +590,24 @@ def run_my_diagnostic(cfg): wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] #plot means - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") return if __name__ == '__main__': + # always use run_diagnostic() to get the config (the preprocessor # nested dictionary holding all the needed information) with run_diagnostic() as config: # list here the functions that need to run run_my_diagnostic(config) + From 65d406ac74f0e8d4a3cef8e2074cd85f6d4ba853 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Tue, 7 May 2024 12:30:31 +0200 Subject: [PATCH 06/29] weathertyping module --- .../weathertyping_diagnostic_lwt.py | 136 +++++++++++++----- 1 file changed, 102 insertions(+), 34 deletions(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py index 592dd8cd2b..d234b1b243 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -39,7 +39,7 @@ def turn_set_to_mapping_dict(array): def get_mapping_dict(selected_pairs): - mapping_dict = { + mapping_dict_douglas_paper = { 1: 1, 2: 1, 19: 1, 3: 2, 4: 2, 22: 2, 21: 2, 5: 3, 6: 3, 15: 3, 16: 3, @@ -96,12 +96,15 @@ def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_ wt_data_prcp.append(wt_cube_mean.data.compressed()) selected_pairs = process_prcp_mean(wt, cfg, wt_data_prcp, correlation_thresold, rmse_threshold, dataset) - with open(f'{work_dir}/wt_mapping_{dataset}.json', 'w') as file: + with open(f'{work_dir}/wt_selected_pairs_{dataset}.json', 'w') as file: json.dump(selected_pairs, file) mapping_dict = get_mapping_dict(selected_pairs) - return np.array([mapping_dict.get(value, 0) for value in np.int8(LWT)]) + with open(f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w') as file: + json.dump(mapping_dict, file) + + return np.array([np.int8(mapping_dict.get(value, 0)) for value in LWT]) def wt_algorithm(cube): @@ -236,31 +239,17 @@ def calculate_lwt_slwt_model(cfg, cube, dataset): tcoord = cube.coord("time") time_points = tcoord.units.num2date(tcoord.points) - with open(f'{work_dir}/wt_mapping_ERA5.json', 'r') as file: + with open(f'{work_dir}/wt_mapping_dict_ERA5.json', 'r') as file: mapping_dict_era5 = json.load(file) - with open(f'{work_dir}/wt_mapping_E-OBS.json', 'r') as file: + with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', 'r') as file: mapping_dict_eobs = json.load(file) - mapping_dict = { - 1: 1, 2: 1, 19: 1, - 3: 2, 4: 2, 22: 2, 21: 2, - 5: 3, 6: 3, 15: 3, 16: 3, - 7: 4, 8: 4, 11: 4, 18: 4, - 9: 5, 17: 5, - 10: 6, 20: 6, - 12: 7, 13: 7, 14: 7, - 23: 8, 24: 8, - 25: 9, 26: 9, 27:27, 0:0 - } - - mapping_dict_era5 = mapping_dict - mapping_dict_eobs = mapping_dict + print(mapping_dict_era5) + print(mapping_dict_eobs) - print(cube.data) - - slwt_era5 = np.array([mapping_dict[value] for value in np.int8(WT)]) - slwt_eobs = np.array([mapping_dict[value] for value in np.int8(WT)]) + slwt_era5 = np.array([np.int8(mapping_dict_era5.get(int(value), 0)) for value in WT]) + slwt_eobs = np.array([np.int8(mapping_dict_eobs.get(int(value), 0)) for value in WT]) wt_cube = iris.cube.CubeList() wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) @@ -274,14 +263,12 @@ def calculate_lwt_slwt_model(cfg, cube, dataset): iris.save(wt_cube, f"{work_dir}/{dataset}.nc") #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt_ERA5': slwt_era5, 'slwt_EOBS': slwt_eobs} #add slwt_eobs and slwt_era5 here + d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt_ERA5': slwt_era5, 'slwt_EOBS': slwt_eobs} df = pd.DataFrame(data=d) df.to_csv(f'{work_dir}/{dataset}.csv', index=False) return f'weathertyping for {dataset} done.' - return - def get_colormap(colormap_string): misc_seq_2_disc = [ @@ -507,6 +494,52 @@ def combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, cube, file_name): return +def write_lwt_to_file(cfg, lwt, cube, file_name): + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + write_path = cfg['work_dir'] + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(lwt, long_name="lwt")) + + wt_cube[0].add_dim_coord(tcoord, 0) + iris.save(wt_cube, f"{write_path}/{file_name}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(lwt)} + df = pd.DataFrame(data=d) + df.to_csv(write_path + f'/{file_name}.csv', index=False) + + return + +def calculate_lwt_model(cfg, cube, dataset): + + work_dir = cfg['work_dir'] + + WT = wt_algorithm(cube) + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) + + wt_cube[0].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{work_dir}/{dataset}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(WT)} + df = pd.DataFrame(data=d) + df.to_csv(f'{work_dir}/{dataset}.csv', index=False) + + return f'weathertyping for {dataset} done.' + def run_my_diagnostic(cfg): """ Arguments: @@ -523,9 +556,6 @@ def run_my_diagnostic(cfg): # where var1, var2 are dicts holding all needed information per variable preproc_variables_dict = group_metadata(cfg['input_data'].values(), 'dataset') - print(cfg.keys()) - print(preproc_variables_dict.keys()) - correlation_threshold = cfg['correlation_threshold'] rmse_threshold = cfg['rmse_threshold'] work_dir = cfg['work_dir'] @@ -558,10 +588,6 @@ def run_my_diagnostic(cfg): slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - print(lwt_cube) - print(slwt_era5_cube) - print(slwt_eobs_cube) - #plot means #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") @@ -598,8 +624,50 @@ def run_my_diagnostic(cfg): #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") + else: #if automatic_slwt is false, just do the lwt, DOES NOT WORK YET + for key, value in preproc_variables_dict.items(): + if key == "ERA5": + wt_preproc = iris.load_cube(value[0]['filename']) + wt_preproc_prcp = iris.load_cube(value[1]['filename']) + mean_preproc_psl = iris.load_cube(value[2]['filename']) + mean_preproc_prcp = iris.load_cube(value[3]['filename']) + mean_preproc_tas = iris.load_cube(value[4]['filename']) + wt_preproc_prcp_EOBS = iris.load_cube(preproc_variables_dict['E-OBS'][0]['filename']) + #calculate lwt + lwt = wt_algorithm(wt_preproc) + + #write to file + write_lwt_to_file(cfg, lwt, wt_preproc, key) + + #load weathertype files as cubes + lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + wt_cubes = [lwt_cube] + + #plot means + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + else: + if key == "E-OBS": + continue + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + mean_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_tas = iris.load_cube(value[3]['filename']) + + #calculate weathertypes + calculate_lwt_model(cfg, wt_preproc, key) + + #load wt files + lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + wt_cubes = [lwt_cube] + + #plot means + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") return From f1f8dea92acdc6887a62133acdbedbbfb51a9930 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Tue, 7 May 2024 17:54:44 +0200 Subject: [PATCH 07/29] weathertyping --- .../weathertyping/weathertyping.py | 678 ++++++++++++++++++ 1 file changed, 678 insertions(+) create mode 100644 esmvaltool/diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py new file mode 100644 index 0000000000..335b08c536 --- /dev/null +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -0,0 +1,678 @@ +#weathertyping diagnostic for esmvaltool + + +# operating system manipulations (e.g. path constructions) +import os +import numpy as np +import pandas as pd +import json +# to manipulate iris cubes +import iris +import iris.plot as iplt +import iris.quickplot as qplt +import matplotlib.pyplot as plt +import matplotlib.ticker as mticker +import cf_units +import cartopy.crs as ccrs +import cartopy.feature as cfeature +from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER +import matplotlib.cm as cm +from matplotlib.colors import ListedColormap +import cartopy.util +from iris.analysis.cartography import wrap_lons + +# import internal esmvaltool modules here +from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic + +def turn_set_to_mapping_dict(array): + + result_dict = {} + + for i, s in enumerate(array): + for elem in s: + if elem not in result_dict: + result_dict[elem] = i+1 + else: + result_dict[elem].append(i) + + return result_dict + +def get_mapping_dict(selected_pairs): + + mapping_dict_douglas_paper = { + 1: 1, 2: 1, 19: 1, + 3: 2, 4: 2, 22: 2, 21: 2, + 5: 3, 6: 3, 15: 3, 16: 3, + 7: 4, 8: 4, 11: 4, 18: 4, + 9: 5, 17: 5, + 10: 6, 20: 6, + 12: 7, 13: 7, 14: 7, + 23: 8, 24: 8, + 25: 9, 26: 9, 27:27, 0:0 + } + + mapping_array = [] + + for i in range(0,len(selected_pairs)): + mapping_array.append(selected_pairs[i][0]) + + s=[set(i) for i in mapping_array if i] + + def find_intersection(m_list): + for i,v in enumerate(m_list) : + for j,k in enumerate(m_list[i+1:],i+1): + if v&k: + s[i]=v.union(m_list.pop(j)) + return find_intersection(m_list) + return m_list + + merged_tuples = find_intersection(s) + + mapping_dict = turn_set_to_mapping_dict(merged_tuples) + + return mapping_dict + +def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_threshold): + + print(dataset) + + work_dir = cfg['work_dir'] + + tcoord = cube.coord("time") + + wt_data_prcp = [] + for wt in range(1,28): + target_indices = np.where(LWT == wt) + if len(target_indices[0]) < 1: + print(f"calculate_slwt_obs - CAUTION: Skipped wt {wt} for dataset {dataset}!") + continue + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + if dataset == "E-OBS": + extracted_cube = cube[target_indices]#.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + else: + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + #plot_mean(wt, cfg, wt_cube_mean, dataset, f"{var_name}_", wt_string) + wt_data_prcp.append(wt_cube_mean.data.compressed()) + selected_pairs = process_prcp_mean(wt, cfg, wt_data_prcp, correlation_thresold, rmse_threshold, dataset) + + with open(f'{work_dir}/wt_selected_pairs_{dataset}.json', 'w') as file: + json.dump(selected_pairs, file) + + mapping_dict = get_mapping_dict(selected_pairs) + + with open(f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w') as file: + json.dump(mapping_dict, file) + + return np.array([np.int8(mapping_dict.get(value, 0)) for value in np.int8(LWT)]) + +def wt_algorithm(cube): + + #lats and lons corresponding to datapoints + #55, 5 -> 1 + #55, 15 -> 2 + #50, -5 -> 3 + #50, 5 -> 4 + #50, 15 -> 5 + #50, 25 -> 6 + #45, -5 -> 7 + #45, 5 -> 8 + #45, 15 -> 9 + #45, 25 -> 10 + #40, -5 -> 11 + #40, 5 -> 12 + #40, 15 -> 13 + #40, 25 -> 14 + #35, 5 -> 15 + #35, 15 -> 16 + + #lons: -5, 0, 5, 10, 15, 20, 25 + #lats: 35, 40, 45, 50, 55 + + const1 = 1 / np.cos(45 * np.pi / 180) + const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) + const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) + const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) + + # westerly flow + W = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * (cube.data[:, 3, 2] + cube.data[:, 3, 4]) + #southerly flow + S = const1 * (1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) + #resultant flow + F = (S ** 2 + W ** 2) ** (1 / 2) + #westerly shear vorticity + ZW = const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( + 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4])) + #southerly shear vorticity + ZS = const4 * (1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - 1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * ( + cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + 1 / 4 * (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) + #total shear vorticity + Z = ZW + ZS + + WT = np.zeros(len(Z)) + + for i in range(len(Z)): + + direction = np.arctan(W[i] / S[i]) * 180 / np.pi # deg + if S[i] >= 0: + direction += 180 # deg + + if direction < 0: + direction += 360 # deg + + # Lamb pure directional type + if abs(Z[i]) < F[i]: + if 337.5 <= direction or direction < 22.5: + WT[i] = 1 + elif 22.5 <= direction < 67.5: + WT[i] = 2 + elif 67.5 <= direction < 112.5: + WT[i] = 3 + elif 112.5 <= direction < 157.5: + WT[i] = 4 + elif 157.5 <= direction < 202.5: + WT[i] = 5 + elif 202.5 <= direction < 247.5: + WT[i] = 6 + elif 247.5 <= direction < 292.5: + WT[i] = 7 + elif 292.5 <= direction < 337.5: + WT[i] = 8 + # Lamb’s pure cyclonic and anticyclonic type + elif (2 * F[i]) < abs(Z[i]): + if Z[i] > 0: + WT[i] = 9 + + elif Z[i] < 0: + WT[i] = 10 + #Lambs’s synoptic/direction hybrid types + elif F[i] < abs(Z[i]) < (2 * F[i]): + if Z[i] > 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 11 + elif 22.5 <= direction < 67.5: + WT[i] = 12 + elif 67.5 <= direction < 112.5: + WT[i] = 13 + elif 112.5 <= direction < 157.5: + WT[i] = 14 + elif 157.5 <= direction < 202.5: + WT[i] = 15 + elif 202.5 <= direction < 247.5: + WT[i] = 16 + elif 247.5 <= direction < 292.5: + WT[i] = 17 + elif 292.5 <= direction < 337.5: + WT[i] = 18 + + elif Z[i] < 0: + if 337.5 <= direction or direction < 22.5: + WT[i] = 19 + elif 22.5 <= direction < 67.5: + WT[i] = 20 + elif 67.5 <= direction < 112.5: + WT[i] = 21 + elif 112.5 <= direction < 157.5: + WT[i] = 22 + elif 157.5 <= direction < 202.5: + WT[i] = 23 + elif 202.5 <= direction < 247.5: + WT[i] = 24 + elif 247.5 <= direction < 292.5: + WT[i] = 25 + elif 292.5 <= direction < 337.5: + WT[i] = 26 + # light indeterminate flow, corresponding to Lamb’s unclassified type U + elif abs(Z[i]) < 6 and F[i] < 6: + WT[i] = 27 + + return WT + +def calculate_lwt_slwt_model(cfg, cube, dataset): + + work_dir = cfg['work_dir'] + + WT = wt_algorithm(cube) + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + with open(f'{work_dir}/wt_mapping_dict_ERA5.json', 'r') as file: + mapping_dict_era5 = json.load(file) + + with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', 'r') as file: + mapping_dict_eobs = json.load(file) + + slwt_era5 = np.array([np.int8(mapping_dict_era5.get(f"{value}", 0)) for value in np.int8(WT)]) + slwt_eobs = np.array([np.int8(mapping_dict_eobs.get(f"{value}", 0)) for value in np.int8(WT)]) + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) + wt_cube.append(iris.cube.Cube(slwt_era5, long_name="slwt_era5")) + wt_cube.append(iris.cube.Cube(slwt_eobs, long_name="slwt_eobs")) + + wt_cube[0].add_dim_coord(tcoord, 0) + wt_cube[1].add_dim_coord(tcoord, 0) + wt_cube[2].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{work_dir}/{dataset}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt_ERA5': np.int8(slwt_era5), 'slwt_EOBS': np.int8(slwt_eobs)} + df = pd.DataFrame(data=d) + df.to_csv(f'{work_dir}/{dataset}.csv', index=False) + + return f'weathertyping for {dataset} done.' + +def get_colormap(colormap_string): + + misc_seq_2_disc = [ + (230/255, 240/255, 240/255), + (182/255, 217/255, 228/255), + (142/255, 192/255, 226/255), + (118/255, 163/255, 228/255), + (116/255, 130/255, 222/255), + (121/255, 97/255, 199/255), + (118/255, 66/255, 164/255), + (107/255, 40/255, 121/255), + (86/255, 22/255, 75/255), + (54/255, 14/255, 36/255)] + + temp_seq_disc = [ + (254/255, 254/255, 203/255), + (251/255, 235/255, 153/255), + (244/255, 204/255, 104/255), + (235/255, 167/255, 84/255), + (228/255, 134/255, 80/255), + (209/255, 98/255, 76/255), + (164/255, 70/255, 66/255), + (114/255, 55/255, 46/255), + (66/255, 40/255, 24/255), + (25/255, 25/255, 0/255)] + + prec_seq_disc = [ + (255/255, 255/255, 229/255), + (217/255, 235/255, 213/255), + (180/255, 216/255, 197/255), + (142/255, 197/255, 181/255), + (105/255, 177/255, 165/255), + (67/255, 158/255, 149/255), + (44/255, 135/255, 127/255), + (29/255, 110/255, 100/255), + (14/255, 85/255, 74/255), + (0/255, 60/255, 48/255)] + + if colormap_string == "psl": + return ListedColormap(misc_seq_2_disc) + elif colormap_string == "prcp": + return ListedColormap(prec_seq_disc) + elif colormap_string == "temp": + return ListedColormap(temp_seq_disc) + else: + print("Colormap string not supported!") + + return + +def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): + + local_path = cfg['plot_dir'] + + ax = plt.axes(projection=ccrs.PlateCarree()) + + + + psl_cmap = get_colormap("psl") + prcp_cmap = get_colormap("prcp") + temp_cmap = get_colormap("temp") + + if var_name == "psl": + plt.title(f"{var_name} mean, wt: {wt}") + unit = "[hPa]" + im = iplt.contourf(cube/100, cmap=psl_cmap) + elif var_name == "prcp": + if dataset == "ERA5": + unit = "[m]" + plt.title(f"total {var_name} mean, wt: {wt}") + else: + unit = "[kg m-2 s-1]" + plt.title(f"{var_name} flux mean, wt: {wt}") + im = iplt.contourf(cube, cmap=prcp_cmap) + elif var_name == "tas": + unit = "[K]" + plt.title(f"1000 hPa {var_name} mean, wt: {wt}") + im = iplt.contourf(cube, cmap=temp_cmap) + + cb = plt.colorbar(im) + cb.ax.tick_params(labelsize=8) + cb.set_label(label=f"{var_name} mean {unit}") + + gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--') + gl.left_labels = True + gl.bottom_labels = True + gl.top_labels = False + gl.right_labels = False + gl.xlines = True + gl.ylocator = mticker.FixedLocator(np.arange(20,70,5)) + gl.xlocator = mticker.FixedLocator([-10, -5, 0, 5, 10, 15]) + gl.xformatter = LONGITUDE_FORMATTER + gl.yformatter = LATITUDE_FORMATTER + gl.xlabel_style = {'size': 8, 'color': 'black'} + gl.ylabel_style = {'color': 'black', 'size': 8} + + ax.set_extent([-15, 20, 27.5, 62.5]) + + ax.coastlines() + ax.add_feature(cfeature.BORDERS, linestyle=':') + + plt.savefig(os.path.join(local_path, f"{wt_string}_{wt}_{dataset}_{var_name}_mean.png")) + plt.close() + + return + +def rmse(subarray1, subarray2): + """ + Calculate root mean square difference between two arrays. + """ + return np.sqrt(np.mean((subarray1 - subarray2)**2)) + +def write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset): + + work_dir = cfg['work_dir'] + + df_corr = pd.DataFrame(pattern_correlation) + df_corr.index = range(1, len(df_corr) + 1) + df_corr.columns = range(1, len(df_corr.columns) + 1) + df_corr.to_csv(f'{work_dir}/correlation_matrix_{dataset}.csv', index_label='Index') + + df_rmse = pd.DataFrame(rmse_matrix) + df_rmse.index = range(1, len(df_rmse) + 1) + df_rmse.columns = range(1, len(df_rmse.columns) + 1) + df_rmse.to_csv(f'{work_dir}/rmse_matrix_{dataset}.csv', index_label='Index') + + return + +def process_prcp_mean(wt, cfg, data, correlation_threshold, rmse_threshold, dataset): + + selected_pairs = [] + + pattern_correlation = np.ma.corrcoef(data) + + n = len(data) + rmse_matrix = np.zeros((n, n)) + + for i in range(n): + for j in range(i+1, n): + rmse_matrix[i][j] = rmse(data[i], data[j]) + rmse_matrix[j][i] = rmse_matrix[i][j] + if pattern_correlation[i][j] >= correlation_threshold and rmse_matrix[i][j] <= rmse_threshold: + selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmse_matrix[i][j])) + + print(selected_pairs) + + #write matrices to csv + write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset) + + return selected_pairs + +def calculate_wt_means(cfg, cube, wt_cubes, dataset: str, var_name: str, wt_string: str): + + if wt_string == "slwt_ERA5": + slwt_era5_cube = wt_cubes[1]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_era5") + tcoord = slwt_era5_cube.coord("time") + slwt_era5 = slwt_era5_cube.data[:] + print(slwt_era5) + elif wt_string == "slwt_EOBS": + slwt_eobs_cube = wt_cubes[2]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_e-obs") + tcoord = slwt_eobs_cube.coord("time") + slwt_eobs = slwt_eobs_cube.data[:] + print(slwt_eobs) + elif wt_string == "lwt": + lwt_cube = wt_cubes[0]#iris.load(f"{work_dir}/{file_name}.nc", "lwt") + tcoord = lwt_cube.coord("time") + lwt = lwt_cube.data[:] + print(lwt) + + if "slwt" in wt_string: + for wt in range(1,10): + if wt_string == "slwt_ERA5": + target_indices = np.where(slwt_era5 == wt) + elif wt_string == "slwt_EOBS": + target_indices = np.where(slwt_eobs == wt) + else: + print("WT_STRING not supported!") + if len(target_indices[0]) < 1: + print(f"calculate_wt_mean - CAUTION: Skipped wt {wt} for dataset {dataset}!") + continue + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + elif wt_string == "lwt": + for wt in range(1,28): + target_indices = np.where(lwt == wt) + if len(target_indices[0]) < 1: + print(f"calculate_wt_mean - CAUTION: Skipped wt {wt} for dataset {dataset}!") + continue + dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] + extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) + plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + else: + print("WT_STRING NOT SUPPORTED.") + + return + +def combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, cube, file_name): + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + write_path = cfg['work_dir'] + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(lwt, long_name="lwt")) + wt_cube.append(iris.cube.Cube(slwt_era5, long_name="slwt_era5")) + wt_cube.append(iris.cube.Cube(slwt_eobs, long_name="slwt_eobs")) + + wt_cube[0].add_dim_coord(tcoord, 0) + wt_cube[1].add_dim_coord(tcoord, 0) + wt_cube[2].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{write_path}/{file_name}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(lwt), 'slwt_era5': np.int8(slwt_era5), 'slwt_eobs': np.int8(slwt_eobs)}#, 'slwt': slwt_data} + df = pd.DataFrame(data=d) + df.to_csv(write_path + f'/{file_name}.csv', index=False) + + return + +def write_lwt_to_file(cfg, lwt, cube, file_name): + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + write_path = cfg['work_dir'] + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(np.int8(lwt), long_name="lwt")) + + wt_cube[0].add_dim_coord(tcoord, 0) + iris.save(wt_cube, f"{write_path}/{file_name}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(lwt)} + df = pd.DataFrame(data=d) + df.to_csv(write_path + f'/{file_name}.csv', index=False) + + return + +def calculate_lwt_model(cfg, cube, dataset): + + work_dir = cfg['work_dir'] + + WT = wt_algorithm(cube) + + iris.FUTURE.datum_support = True + iris.FUTURE.save_split_attrs = True + tcoord = cube.coord("time") + time_points = tcoord.units.num2date(tcoord.points) + + wt_cube = iris.cube.CubeList() + wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) + + wt_cube[0].add_dim_coord(tcoord, 0) + + iris.save(wt_cube, f"{work_dir}/{dataset}.nc") + + #write to csv file + d = {'date': time_points[:], 'lwt': np.int8(WT)} + df = pd.DataFrame(data=d) + df.to_csv(f'{work_dir}/{dataset}.csv', index=False) + + return f'weathertyping for {dataset} done.' + +def run_my_diagnostic(cfg): + """ + Arguments: + cfg - nested dictionary of metadata + + Returns: + string; runs the user diagnostic + + """ + # assemble the data dictionary keyed by dataset name + # this makes use of the handy group_metadata function that + # orders the data by 'dataset'; the resulting dictionary is + # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} + # where var1, var2 are dicts holding all needed information per variable + preproc_variables_dict = group_metadata(cfg['input_data'].values(), 'dataset') + + correlation_threshold = cfg['correlation_threshold'] + rmse_threshold = cfg['rmse_threshold'] + work_dir = cfg['work_dir'] + + #load cubes and run functions + #key = dataset name, value is dataset + if cfg['automatic_slwt']: + for key, value in preproc_variables_dict.items(): + if key == "ERA5": + wt_preproc = iris.load_cube(value[0]['filename']) + wt_preproc_prcp = iris.load_cube(value[1]['filename']) + mean_preproc_psl = iris.load_cube(value[2]['filename']) + mean_preproc_prcp = iris.load_cube(value[3]['filename']) + mean_preproc_tas = iris.load_cube(value[4]['filename']) + wt_preproc_prcp_EOBS = iris.load_cube(preproc_variables_dict['E-OBS'][0]['filename']) + + #calculate lwt + lwt = wt_algorithm(wt_preproc) + + #calculate simplified lwt based on precipitation patterns + slwt_era5 = calculate_slwt_obs(cfg, lwt, wt_preproc_prcp, key, correlation_threshold, rmse_threshold) + slwt_eobs = calculate_slwt_obs(cfg, lwt, wt_preproc_prcp_EOBS, "E-OBS", correlation_threshold, rmse_threshold) + + #write to file + combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, wt_preproc, key) + + #load weathertype files as cubes + lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + slwt_era5_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_era5") + slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") + wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + + #plot means + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") + else: + if key == "E-OBS": + continue + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + mean_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_tas = iris.load_cube(value[3]['filename']) + + #calculate weathertypes + calculate_lwt_slwt_model(cfg, wt_preproc, key) + + #load wt files + lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + slwt_era5_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_era5") + slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") + wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + + #plot means + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") + #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") + #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") + else: #if automatic_slwt is false, just do the lwt, DOES NOT WORK YET + for key, value in preproc_variables_dict.items(): + if key == "ERA5": + wt_preproc = iris.load_cube(value[0]['filename']) + wt_preproc_prcp = iris.load_cube(value[1]['filename']) + mean_preproc_psl = iris.load_cube(value[2]['filename']) + mean_preproc_prcp = iris.load_cube(value[3]['filename']) + mean_preproc_tas = iris.load_cube(value[4]['filename']) + wt_preproc_prcp_EOBS = iris.load_cube(preproc_variables_dict['E-OBS'][0]['filename']) + + #calculate lwt + lwt = wt_algorithm(wt_preproc) + + #write to file + write_lwt_to_file(cfg, lwt, wt_preproc, key) + + #load weathertype files as cubes + lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + wt_cubes = [lwt_cube] + + #plot means + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + else: + if key == "E-OBS": + continue + wt_preproc = iris.load_cube(value[0]['filename']) + mean_preproc_psl = iris.load_cube(value[1]['filename']) + mean_preproc_prcp = iris.load_cube(value[2]['filename']) + mean_preproc_tas = iris.load_cube(value[3]['filename']) + + #calculate weathertypes + calculate_lwt_model(cfg, wt_preproc, key) + + #load wt files + lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + wt_cubes = [lwt_cube] + + #plot means + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + + return + +if __name__ == '__main__': + + # always use run_diagnostic() to get the config (the preprocessor + # nested dictionary holding all the needed information) + with run_diagnostic() as config: + # list here the functions that need to run + run_my_diagnostic(config) + From 05afc1b896fce1a78aa95f1d1099cfd0e9914a1e Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Tue, 7 May 2024 18:14:18 +0200 Subject: [PATCH 08/29] weathertyping --- .../weathertyping/recipe_weathertyping.yml | 258 ++++++++++++++++++ .../weathertyping_diagnostic_lwt.py | 86 ++---- 2 files changed, 286 insertions(+), 58 deletions(-) create mode 100644 esmvaltool/diag_scripts/weathertyping/recipe_weathertyping.yml diff --git a/esmvaltool/diag_scripts/weathertyping/recipe_weathertyping.yml b/esmvaltool/diag_scripts/weathertyping/recipe_weathertyping.yml new file mode 100644 index 0000000000..d65eb02a5c --- /dev/null +++ b/esmvaltool/diag_scripts/weathertyping/recipe_weathertyping.yml @@ -0,0 +1,258 @@ +documentation: + title: Weathertyping algorithm + + description: Calculating the Lamb weathertypes. + + authors: + - broetz_bjoern + projects: + - crescendo + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: AS-RCEC, dataset: TaiESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200626} +# - {institute: AWI, dataset: AWI-ESM-1-1-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200212} +# - {institute: BCC, dataset: BCC-CSM2-MR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181126} +# - {institute: BCC, dataset: BCC-ESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181220} +# - {institute: CAS, dataset: FGOALS-f3-L, ensemble: r1i1p1f1, grid: gr, esgf_version: v20191019} +# - {institute: CAS, dataset: FGOALS-g3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190826} +# - {institute: CCCR-IITM, dataset: IITM-ESM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210203} +# - {institute: CCCma, dataset: CanESM5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190429} +# - {institute: CMCC, dataset: CMCC-CM2-HR4, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200904} +# - {institute: CMCC, dataset: CMCC-CM2-SR5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200616} +# - {institute: CMCC, dataset: CMCC-ESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210114} +# - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r1i1p1f2, grid: gr, esgf_version: v20180917} +# - {institute: CSIRO-ARCCSS, dataset: ACCESS-CM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} +# - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191115} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-AerChem, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200624} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-CC, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210113} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200217} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg, ensemble: r1i1p1f1, grid: gr, esgf_version: v20211207} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200310} +# - {institute: HAMMOZ-Consortium, dataset: MPI-ESM-1-2-HAM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190627} +# - {institute: INM, dataset: INM-CM4-8, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190530} +# - {institute: INM, dataset: INM-CM5-0, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190610} +# - {institute: IPSL, dataset: IPSL-CM5A2-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200729} +# - {institute: IPSL, dataset: IPSL-CM6A-LR-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210216} +# - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20180803} +# - {institute: KIOST, dataset: KIOST-ESM, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20210601} +# - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r1i1p1f2, grid: gn, esgf_version: v20191129} +# - {institute: MIROC, dataset: MIROC6, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191016} +# - {institute: MPI-M, dataset: ICON-ESM-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210215} +# - {institute: MPI-M, dataset: MPI-ESM1-2-HR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} +# - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} +# - {institute: MRI, dataset: MRI-ESM2-0, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190603} +# - {institute: NASA-GISS, dataset: GISS-E2-2-G, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120, start_year: 1970} +# - {institute: NCAR, dataset: CESM2-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} +# - {institute: NCAR, dataset: CESM2-WACCM-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} +# - {institute: NCAR, dataset: CESM2-WACCM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190227} +# - {institute: NCAR, dataset: CESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190308} +# - {institute: NCC, dataset: NorCPM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200724} +# - {institute: NCC, dataset: NorESM2-LM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190815} +# - {institute: NCC, dataset: NorESM2-MM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} +# - {institute: NIMS-KMA, dataset: KACE-1-0-G, ensemble: r1i1p1f1, grid: gr, esgf_version: v20190911} +# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20180701} +# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr2, esgf_version: v20180701} +# - {institute: NOAA-GFDL, dataset: GFDL-ESM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190726} +# - {institute: NUIST, dataset: NESM3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190812} +# - {institute: SNU, dataset: SAM0-UNICON, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190323} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + + mean_preproc_temp: + extract_time: + *time + extract_levels: + levels: [100000.] + scheme: linear + extract_region: + *reg + + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: ta + preprocessor: mean_preproc_temp + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + script: weathertyping/weathertyping.py diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py index d234b1b243..a2e01f192a 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -25,7 +25,6 @@ from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic def turn_set_to_mapping_dict(array): - result_dict = {} for i, s in enumerate(array): @@ -38,19 +37,6 @@ def turn_set_to_mapping_dict(array): return result_dict def get_mapping_dict(selected_pairs): - - mapping_dict_douglas_paper = { - 1: 1, 2: 1, 19: 1, - 3: 2, 4: 2, 22: 2, 21: 2, - 5: 3, 6: 3, 15: 3, 16: 3, - 7: 4, 8: 4, 11: 4, 18: 4, - 9: 5, 17: 5, - 10: 6, 20: 6, - 12: 7, 13: 7, 14: 7, - 23: 8, 24: 8, - 25: 9, 26: 9, 27:27, 0:0 - } - mapping_array = [] for i in range(0,len(selected_pairs)): @@ -67,32 +53,28 @@ def find_intersection(m_list): return m_list merged_tuples = find_intersection(s) - mapping_dict = turn_set_to_mapping_dict(merged_tuples) return mapping_dict -def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_threshold): - - print(dataset) +def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_threshold): work_dir = cfg['work_dir'] - tcoord = cube.coord("time") wt_data_prcp = [] for wt in range(1,28): + print(f"Weathertype {wt}") target_indices = np.where(LWT == wt) if len(target_indices[0]) < 1: print(f"calculate_slwt_obs - CAUTION: Skipped wt {wt} for dataset {dataset}!") continue dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] if dataset == "E-OBS": - extracted_cube = cube[target_indices]#.extract(iris.Constraint(time=lambda t: t.point in dates[0])) + extracted_cube = cube[target_indices] else: extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) - #plot_mean(wt, cfg, wt_cube_mean, dataset, f"{var_name}_", wt_string) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) wt_data_prcp.append(wt_cube_mean.data.compressed()) selected_pairs = process_prcp_mean(wt, cfg, wt_data_prcp, correlation_thresold, rmse_threshold, dataset) @@ -104,7 +86,7 @@ def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_ with open(f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w') as file: json.dump(mapping_dict, file) - return np.array([np.int8(mapping_dict.get(value, 0)) for value in LWT]) + return np.array([np.int8(mapping_dict.get(value, 0)) for value in np.int8(LWT)]) def wt_algorithm(cube): @@ -245,11 +227,8 @@ def calculate_lwt_slwt_model(cfg, cube, dataset): with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', 'r') as file: mapping_dict_eobs = json.load(file) - print(mapping_dict_era5) - print(mapping_dict_eobs) - - slwt_era5 = np.array([np.int8(mapping_dict_era5.get(int(value), 0)) for value in WT]) - slwt_eobs = np.array([np.int8(mapping_dict_eobs.get(int(value), 0)) for value in WT]) + slwt_era5 = np.array([np.int8(mapping_dict_era5.get(f"{value}", 0)) for value in np.int8(WT)]) + slwt_eobs = np.array([np.int8(mapping_dict_eobs.get(f"{value}", 0)) for value in np.int8(WT)]) wt_cube = iris.cube.CubeList() wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) @@ -263,7 +242,7 @@ def calculate_lwt_slwt_model(cfg, cube, dataset): iris.save(wt_cube, f"{work_dir}/{dataset}.nc") #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt_ERA5': slwt_era5, 'slwt_EOBS': slwt_eobs} + d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt_ERA5': np.int8(slwt_era5), 'slwt_EOBS': np.int8(slwt_eobs)} df = pd.DataFrame(data=d) df.to_csv(f'{work_dir}/{dataset}.csv', index=False) @@ -324,8 +303,6 @@ def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): ax = plt.axes(projection=ccrs.PlateCarree()) - - psl_cmap = get_colormap("psl") prcp_cmap = get_colormap("prcp") temp_cmap = get_colormap("temp") @@ -399,9 +376,7 @@ def write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset): def process_prcp_mean(wt, cfg, data, correlation_threshold, rmse_threshold, dataset): selected_pairs = [] - pattern_correlation = np.ma.corrcoef(data) - n = len(data) rmse_matrix = np.zeros((n, n)) @@ -412,8 +387,6 @@ def process_prcp_mean(wt, cfg, data, correlation_threshold, rmse_threshold, data if pattern_correlation[i][j] >= correlation_threshold and rmse_matrix[i][j] <= rmse_threshold: selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmse_matrix[i][j])) - print(selected_pairs) - #write matrices to csv write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset) @@ -425,17 +398,14 @@ def calculate_wt_means(cfg, cube, wt_cubes, dataset: str, var_name: str, wt_stri slwt_era5_cube = wt_cubes[1]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_era5") tcoord = slwt_era5_cube.coord("time") slwt_era5 = slwt_era5_cube.data[:] - print(slwt_era5) elif wt_string == "slwt_EOBS": slwt_eobs_cube = wt_cubes[2]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_e-obs") tcoord = slwt_eobs_cube.coord("time") slwt_eobs = slwt_eobs_cube.data[:] - print(slwt_eobs) elif wt_string == "lwt": lwt_cube = wt_cubes[0]#iris.load(f"{work_dir}/{file_name}.nc", "lwt") tcoord = lwt_cube.coord("time") lwt = lwt_cube.data[:] - print(lwt) if "slwt" in wt_string: for wt in range(1,10): @@ -503,7 +473,7 @@ def write_lwt_to_file(cfg, lwt, cube, file_name): write_path = cfg['work_dir'] wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(lwt, long_name="lwt")) + wt_cube.append(iris.cube.Cube(np.int8(lwt), long_name="lwt")) wt_cube[0].add_dim_coord(tcoord, 0) iris.save(wt_cube, f"{write_path}/{file_name}.nc") @@ -589,15 +559,15 @@ def run_my_diagnostic(cfg): wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] #plot means - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") else: if key == "E-OBS": continue @@ -616,16 +586,16 @@ def run_my_diagnostic(cfg): wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] #plot means - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") - else: #if automatic_slwt is false, just do the lwt, DOES NOT WORK YET + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") + calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") + calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") + calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") + else: #if automatic_slwt is false, just do the lwt for key, value in preproc_variables_dict.items(): if key == "ERA5": wt_preproc = iris.load_cube(value[0]['filename']) From a780ff4e54f0598ad01ed33d11e73b3ded917ebd Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Tue, 21 May 2024 21:35:54 +0200 Subject: [PATCH 09/29] reformatted code, added anomaly and std plots --- .../weathertyping_diagnostic_lwt.py | 1292 ++++++++++++----- esmvaltool/recipes/recipe_weathertyping.yml | 273 ++++ 2 files changed, 1167 insertions(+), 398 deletions(-) create mode 100644 esmvaltool/recipes/recipe_weathertyping.yml diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py index a2e01f192a..20306ef548 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -1,54 +1,102 @@ -#weathertyping diagnostic for esmvaltool - +# weathertyping diagnostic for esmvaltool # operating system manipulations (e.g. path constructions) import os -import numpy as np -import pandas as pd -import json + # to manipulate iris cubes import iris + +# plotting imports +import cartopy.crs as ccrs +import cartopy.feature as cfeature +import iris.analysis.cartography import iris.plot as iplt -import iris.quickplot as qplt import matplotlib.pyplot as plt import matplotlib.ticker as mticker -import cf_units -import cartopy.crs as ccrs -import cartopy.feature as cfeature -from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER -import matplotlib.cm as cm +from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER from matplotlib.colors import ListedColormap -import cartopy.util -from iris.analysis.cartography import wrap_lons -# import internal esmvaltool modules here -from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic +# general imports +import numpy as np +import pandas as pd +import json +import logging -def turn_set_to_mapping_dict(array): +# import internal esmvaltool modules here +from esmvaltool.diag_scripts.shared import ( + group_metadata, + run_diagnostic, + ProvenanceLogger +) + + +logger = logging.getLogger(os.path.basename(__file__)) + + +def get_provenance_record(caption: str, ancestors: list, + long_names: list, plot_types: list) -> dict: + """Create a provenance record describing the diagnostic data and plots.""" + record = { + 'caption': + caption, + 'domains': ['reg'], + 'authors': [ + 'jury_martin', + 'kroissenbrunner_thomas' + ], + 'references': [ + 'TBD' + ], + 'projects': [ + 'preval' + ], + 'long_names': + long_names, + 'plot_types': + plot_types, + 'ancestors': + ancestors, + } + return record + + +def log_provenance(caption: str, filename: str, cfg: dict, + ancestors: list, long_names: list, plot_types: list): + """Log provenance info.""" + provenance_record = get_provenance_record( + caption, ancestors, long_names, plot_types) + with ProvenanceLogger(cfg) as provenance_logger: + provenance_logger.log(filename, provenance_record) + + logger.info('Output stored as %s', filename) + + +def turn_set_to_mapping_dict(list_: list) -> dict: result_dict = {} - for i, s in enumerate(array): + for i, s in enumerate(list_): for elem in s: if elem not in result_dict: - result_dict[elem] = i+1 + result_dict[elem] = i + 1 else: result_dict[elem].append(i) return result_dict -def get_mapping_dict(selected_pairs): + +def get_mapping_dict(selected_pairs: list) -> dict: mapping_array = [] - for i in range(0,len(selected_pairs)): - mapping_array.append(selected_pairs[i][0]) + for i, elem in enumerate(selected_pairs): + mapping_array.append(elem[0]) - s=[set(i) for i in mapping_array if i] + s = [set(i) for i in mapping_array if i] - def find_intersection(m_list): - for i,v in enumerate(m_list) : - for j,k in enumerate(m_list[i+1:],i+1): - if v&k: - s[i]=v.union(m_list.pop(j)) + def find_intersection(m_list: list) -> list: + for i, v in enumerate(m_list): + for j, k in enumerate(m_list[i + 1:], i + 1): + if v & k: + s[i] = v.union(m_list.pop(j)) return find_intersection(m_list) return m_list @@ -57,284 +105,351 @@ def find_intersection(m_list): return mapping_dict -def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_threshold): - - work_dir = cfg['work_dir'] - tcoord = cube.coord("time") - wt_data_prcp = [] - for wt in range(1,28): - print(f"Weathertype {wt}") - target_indices = np.where(LWT == wt) - if len(target_indices[0]) < 1: - print(f"calculate_slwt_obs - CAUTION: Skipped wt {wt} for dataset {dataset}!") - continue - dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] - if dataset == "E-OBS": - extracted_cube = cube[target_indices] - else: - extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) - wt_data_prcp.append(wt_cube_mean.data.compressed()) - selected_pairs = process_prcp_mean(wt, cfg, wt_data_prcp, correlation_thresold, rmse_threshold, dataset) - - with open(f'{work_dir}/wt_selected_pairs_{dataset}.json', 'w') as file: - json.dump(selected_pairs, file) - - mapping_dict = get_mapping_dict(selected_pairs) - - with open(f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w') as file: - json.dump(mapping_dict, file) - - return np.array([np.int8(mapping_dict.get(value, 0)) for value in np.int8(LWT)]) - -def wt_algorithm(cube): - - #lats and lons corresponding to datapoints - #55, 5 -> 1 - #55, 15 -> 2 - #50, -5 -> 3 - #50, 5 -> 4 - #50, 15 -> 5 - #50, 25 -> 6 - #45, -5 -> 7 - #45, 5 -> 8 - #45, 15 -> 9 - #45, 25 -> 10 - #40, -5 -> 11 - #40, 5 -> 12 - #40, 15 -> 13 - #40, 25 -> 14 - #35, 5 -> 15 - #35, 15 -> 16 - - #lons: -5, 0, 5, 10, 15, 20, 25 - #lats: 35, 40, 45, 50, 55 +def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, + dataset: str, correlation_thresold: float, + rmse_threshold: float) -> np.array: + logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) + + + work_dir = cfg.get('work_dir') + tcoord = cube.coord('time') + + wt_data_prcp = [] + for wt in range(1, 28): + target_indices = np.where(lwt == wt) + if len(target_indices[0]) < 1: + logger.info( + 'calculate_slwt_obs - CAUTION: Skipped wt %s \ + for dataset %s!', wt, dataset + ) + continue + dates = [tcoord.units.num2date(tcoord.points[i]) + for i in target_indices] + if dataset == 'E-OBS': + extracted_cube = cube[target_indices] + else: + extracted_cube = cube.extract( + iris.Constraint(time=lambda t: t.point in dates[0]) + ) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) + wt_data_prcp.append(wt_cube_mean.data.compressed()) + selected_pairs = process_prcp_mean( + cfg, wt_data_prcp, correlation_thresold, rmse_threshold, dataset + ) + + with open( + f'{work_dir}/wt_selected_pairs_{dataset}.json', 'w', encoding='utf-8' + ) as file: + json.dump(selected_pairs, file) + + mapping_dict = get_mapping_dict(selected_pairs) + + with open( + f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w', encoding='utf-8' + ) as file: + json.dump(mapping_dict, file) + + return np.array([np.int8(mapping_dict.get(value, 0)) for value in lwt]) + + +def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: + + # lats and lons corresponding to datapoints + # 55, 5 -> 1 + # 55, 15 -> 2 + # 50, -5 -> 3 + # 50, 5 -> 4 + # 50, 15 -> 5 + # 50, 25 -> 6 + # 45, -5 -> 7 + # 45, 5 -> 8 + # 45, 15 -> 9 + # 45, 25 -> 10 + # 40, -5 -> 11 + # 40, 5 -> 12 + # 40, 15 -> 13 + # 40, 25 -> 14 + # 35, 5 -> 15 + # 35, 15 -> 16 + + # lons: -5, 0, 5, 10, 15, 20, 25 + # lats: 35, 40, 45, 50, 55 + + logger.info('Calculating Lamb Weathertypes for %s', dataset) + const1 = 1 / np.cos(45 * np.pi / 180) const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) # westerly flow - W = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * (cube.data[:, 3, 2] + cube.data[:, 3, 4]) - #southerly flow - S = const1 * (1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) - #resultant flow - F = (S ** 2 + W ** 2) ** (1 / 2) - #westerly shear vorticity - ZW = const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4])) - #southerly shear vorticity - ZS = const4 * (1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - 1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * ( - cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + 1 / 4 * (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) - #total shear vorticity - Z = ZW + ZS - - WT = np.zeros(len(Z)) - - for i in range(len(Z)): - - direction = np.arctan(W[i] / S[i]) * 180 / np.pi # deg - if S[i] >= 0: + w = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * ( + cube.data[:, 3, 2] + cube.data[:, 3, 4] + ) + # southerly flow + s = const1 * ( + 1 / 4 * (cube.data[:, 3, 4] + 2 * + cube.data[:, 2, 4] + cube.data[:, 1, 4]) + - 1 / 4 * (cube.data[:, 3, 2] + 2 * + cube.data[:, 2, 2] + cube.data[:, 1, 2]) + ) + # resultant flow + f = (s**2 + w**2) ** (1 / 2) + # westerly shear vorticity + zw = const2 * ( + 1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) + - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) + ) - const3 * ( + 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) + - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4]) + ) + # southerly shear vorticity + zs = const4 * ( + 1 / 4 * (cube.data[:, 3, 6] + 2 * + cube.data[:, 2, 6] + cube.data[:, 1, 6]) + - 1 / 4 * (cube.data[:, 3, 4] + 2 * + cube.data[:, 2, 4] + cube.data[:, 1, 4]) + - 1 / 4 * (cube.data[:, 3, 2] + 2 * + cube.data[:, 2, 2] + cube.data[:, 1, 2]) + + 1 / 4 * (cube.data[:, 3, 0] + 2 * + cube.data[:, 2, 0] + cube.data[:, 1, 0]) + ) + # total shear vorticity + z = zw + zs + + wt = np.zeros(len(z)) + + for i, z_i in enumerate(z): + + direction = np.arctan(w[i] / s[i]) * 180 / np.pi # deg + if s[i] >= 0: direction += 180 # deg if direction < 0: direction += 360 # deg - # Lamb pure directional type - if abs(Z[i]) < F[i]: + # Lamb pure directional type + if abs(z_i) < f[i]: if 337.5 <= direction or direction < 22.5: - WT[i] = 1 + wt[i] = 1 elif 22.5 <= direction < 67.5: - WT[i] = 2 + wt[i] = 2 elif 67.5 <= direction < 112.5: - WT[i] = 3 + wt[i] = 3 elif 112.5 <= direction < 157.5: - WT[i] = 4 + wt[i] = 4 elif 157.5 <= direction < 202.5: - WT[i] = 5 + wt[i] = 5 elif 202.5 <= direction < 247.5: - WT[i] = 6 + wt[i] = 6 elif 247.5 <= direction < 292.5: - WT[i] = 7 + wt[i] = 7 elif 292.5 <= direction < 337.5: - WT[i] = 8 - # Lamb’s pure cyclonic and anticyclonic type - elif (2 * F[i]) < abs(Z[i]): - if Z[i] > 0: - WT[i] = 9 - - elif Z[i] < 0: - WT[i] = 10 - #Lambs’s synoptic/direction hybrid types - elif F[i] < abs(Z[i]) < (2 * F[i]): - if Z[i] > 0: + wt[i] = 8 + # Lamb’s pure cyclonic and anticyclonic type + elif (2 * f[i]) < abs(z_i): + if z_i > 0: + wt[i] = 9 + + elif z_i < 0: + wt[i] = 10 + # Lambs’s synoptic/direction hybrid types + elif f[i] < abs(z_i) < (2 * f[i]): + if z_i > 0: if 337.5 <= direction or direction < 22.5: - WT[i] = 11 + wt[i] = 11 elif 22.5 <= direction < 67.5: - WT[i] = 12 + wt[i] = 12 elif 67.5 <= direction < 112.5: - WT[i] = 13 + wt[i] = 13 elif 112.5 <= direction < 157.5: - WT[i] = 14 + wt[i] = 14 elif 157.5 <= direction < 202.5: - WT[i] = 15 + wt[i] = 15 elif 202.5 <= direction < 247.5: - WT[i] = 16 + wt[i] = 16 elif 247.5 <= direction < 292.5: - WT[i] = 17 + wt[i] = 17 elif 292.5 <= direction < 337.5: - WT[i] = 18 + wt[i] = 18 - elif Z[i] < 0: + elif z_i < 0: if 337.5 <= direction or direction < 22.5: - WT[i] = 19 + wt[i] = 19 elif 22.5 <= direction < 67.5: - WT[i] = 20 + wt[i] = 20 elif 67.5 <= direction < 112.5: - WT[i] = 21 + wt[i] = 21 elif 112.5 <= direction < 157.5: - WT[i] = 22 + wt[i] = 22 elif 157.5 <= direction < 202.5: - WT[i] = 23 + wt[i] = 23 elif 202.5 <= direction < 247.5: - WT[i] = 24 + wt[i] = 24 elif 247.5 <= direction < 292.5: - WT[i] = 25 + wt[i] = 25 elif 292.5 <= direction < 337.5: - WT[i] = 26 - # light indeterminate flow, corresponding to Lamb’s unclassified type U - elif abs(Z[i]) < 6 and F[i] < 6: - WT[i] = 27 + wt[i] = 26 + # light indeterminate flow, corresponding to Lamb’s unclassified type U + elif abs(z_i) < 6 and f[i] < 6: + wt[i] = 27 - return WT + return wt -def calculate_lwt_slwt_model(cfg, cube, dataset): - work_dir = cfg['work_dir'] +def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str): - WT = wt_algorithm(cube) + work_dir = cfg.get('work_dir') + + wt = wt_algorithm(cube, dataset) iris.FUTURE.datum_support = True iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") + tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) - with open(f'{work_dir}/wt_mapping_dict_ERA5.json', 'r') as file: + with open(f'{work_dir}/wt_mapping_dict_ERA5.json', + 'r', encoding='utf-8') as file: mapping_dict_era5 = json.load(file) - - with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', 'r') as file: + + with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', + 'r', encoding='utf-8') as file: mapping_dict_eobs = json.load(file) - slwt_era5 = np.array([np.int8(mapping_dict_era5.get(f"{value}", 0)) for value in np.int8(WT)]) - slwt_eobs = np.array([np.int8(mapping_dict_eobs.get(f"{value}", 0)) for value in np.int8(WT)]) + logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) + + slwt_era5 = np.array( + [np.int8(mapping_dict_era5.get(f'{value}', 0)) for value in np.int8(wt)] + ) + slwt_eobs = np.array( + [np.int8(mapping_dict_eobs.get(f'{value}', 0)) for value in np.int8(wt)] + ) wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) - wt_cube.append(iris.cube.Cube(slwt_era5, long_name="slwt_era5")) - wt_cube.append(iris.cube.Cube(slwt_eobs, long_name="slwt_eobs")) + wt_cube.append(iris.cube.Cube(wt, long_name='lwt')) + wt_cube.append(iris.cube.Cube(slwt_era5, long_name='slwt_era5')) + wt_cube.append(iris.cube.Cube(slwt_eobs, long_name='slwt_eobs')) wt_cube[0].add_dim_coord(tcoord, 0) wt_cube[1].add_dim_coord(tcoord, 0) wt_cube[2].add_dim_coord(tcoord, 0) - iris.save(wt_cube, f"{work_dir}/{dataset}.nc") + iris.save(wt_cube, f'{work_dir}/{dataset}.nc') - #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt_ERA5': np.int8(slwt_era5), 'slwt_EOBS': np.int8(slwt_eobs)} + # write to csv file + d = { + 'date': time_points[:], + 'lwt': np.int8(wt), + 'slwt_ERA5': np.int8(slwt_era5), + 'slwt_EOBS': np.int8(slwt_eobs), + } df = pd.DataFrame(data=d) df.to_csv(f'{work_dir}/{dataset}.csv', index=False) - return f'weathertyping for {dataset} done.' + log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, + ['wt_mapping_dict_ERA5.json', 'wt_mapping_dict_E-OBS.json'], + ['Lamb Weathertypes'], ['']) + -def get_colormap(colormap_string): +def get_colormap(colormap_string: str) -> ListedColormap: misc_seq_2_disc = [ - (230/255, 240/255, 240/255), - (182/255, 217/255, 228/255), - (142/255, 192/255, 226/255), - (118/255, 163/255, 228/255), - (116/255, 130/255, 222/255), - (121/255, 97/255, 199/255), - (118/255, 66/255, 164/255), - (107/255, 40/255, 121/255), - (86/255, 22/255, 75/255), - (54/255, 14/255, 36/255)] + (230 / 255, 240 / 255, 240 / 255), + (182 / 255, 217 / 255, 228 / 255), + (142 / 255, 192 / 255, 226 / 255), + (118 / 255, 163 / 255, 228 / 255), + (116 / 255, 130 / 255, 222 / 255), + (121 / 255, 97 / 255, 199 / 255), + (118 / 255, 66 / 255, 164 / 255), + (107 / 255, 40 / 255, 121 / 255), + (86 / 255, 22 / 255, 75 / 255), + (54 / 255, 14 / 255, 36 / 255), + ] temp_seq_disc = [ - (254/255, 254/255, 203/255), - (251/255, 235/255, 153/255), - (244/255, 204/255, 104/255), - (235/255, 167/255, 84/255), - (228/255, 134/255, 80/255), - (209/255, 98/255, 76/255), - (164/255, 70/255, 66/255), - (114/255, 55/255, 46/255), - (66/255, 40/255, 24/255), - (25/255, 25/255, 0/255)] - + (254 / 255, 254 / 255, 203 / 255), + (251 / 255, 235 / 255, 153 / 255), + (244 / 255, 204 / 255, 104 / 255), + (235 / 255, 167 / 255, 84 / 255), + (228 / 255, 134 / 255, 80 / 255), + (209 / 255, 98 / 255, 76 / 255), + (164 / 255, 70 / 255, 66 / 255), + (114 / 255, 55 / 255, 46 / 255), + (66 / 255, 40 / 255, 24 / 255), + (25 / 255, 25 / 255, 0 / 255), + ] + prec_seq_disc = [ - (255/255, 255/255, 229/255), - (217/255, 235/255, 213/255), - (180/255, 216/255, 197/255), - (142/255, 197/255, 181/255), - (105/255, 177/255, 165/255), - (67/255, 158/255, 149/255), - (44/255, 135/255, 127/255), - (29/255, 110/255, 100/255), - (14/255, 85/255, 74/255), - (0/255, 60/255, 48/255)] - - if colormap_string == "psl": + (255 / 255, 255 / 255, 229 / 255), + (217 / 255, 235 / 255, 213 / 255), + (180 / 255, 216 / 255, 197 / 255), + (142 / 255, 197 / 255, 181 / 255), + (105 / 255, 177 / 255, 165 / 255), + (67 / 255, 158 / 255, 149 / 255), + (44 / 255, 135 / 255, 127 / 255), + (29 / 255, 110 / 255, 100 / 255), + (14 / 255, 85 / 255, 74 / 255), + (0 / 255, 60 / 255, 48 / 255), + ] + + if colormap_string == 'psl': return ListedColormap(misc_seq_2_disc) - elif colormap_string == "prcp": + if colormap_string == 'prcp': return ListedColormap(prec_seq_disc) - elif colormap_string == "temp": + if colormap_string == 'temp': return ListedColormap(temp_seq_disc) - else: - print("Colormap string not supported!") - return -def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): +def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, + var_name: str, wt_string: str, mode: str): + + logger.info('Plotting %s %s %s for %s %s', dataset, var_name, + mode, wt_string, wt) - local_path = cfg['plot_dir'] + local_path = cfg.get('plot_dir') ax = plt.axes(projection=ccrs.PlateCarree()) - psl_cmap = get_colormap("psl") - prcp_cmap = get_colormap("prcp") - temp_cmap = get_colormap("temp") - - if var_name == "psl": - plt.title(f"{var_name} mean, wt: {wt}") - unit = "[hPa]" - im = iplt.contourf(cube/100, cmap=psl_cmap) - elif var_name == "prcp": - if dataset == "ERA5": - unit = "[m]" - plt.title(f"total {var_name} mean, wt: {wt}") + if var_name == 'psl': + psl_cmap = get_colormap('psl') + plt.title(f'{var_name} {mode}, wt: {wt}') + unit = '[hPa]' + im = iplt.contourf(cube / 100, cmap=psl_cmap) + elif var_name == 'prcp': + prcp_cmap = get_colormap('prcp') + if dataset == 'ERA5': + unit = '[m]' + plt.title(f'total {var_name} {mode}, wt: {wt}') else: - unit = "[kg m-2 s-1]" - plt.title(f"{var_name} flux mean, wt: {wt}") + unit = '[kg m-2 s-1]' + plt.title(f'{var_name} flux {mode}, wt: {wt}') im = iplt.contourf(cube, cmap=prcp_cmap) - elif var_name == "tas": - unit = "[K]" - plt.title(f"1000 hPa {var_name} mean, wt: {wt}") + elif var_name == 'tas': + temp_cmap = get_colormap('temp') + unit = '[K]' + plt.title(f'1000 hPa {var_name} {mode}, wt: {wt}') im = iplt.contourf(cube, cmap=temp_cmap) cb = plt.colorbar(im) cb.ax.tick_params(labelsize=8) - cb.set_label(label=f"{var_name} mean {unit}") - - gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--') + cb.set_label(label=f'{var_name} {mode} {unit}') + + gl = ax.gridlines( + crs=ccrs.PlateCarree(), + draw_labels=True, + linewidth=0.5, + color='gray', + alpha=0.5, + linestyle='--', + ) gl.left_labels = True gl.bottom_labels = True gl.top_labels = False gl.right_labels = False gl.xlines = True - gl.ylocator = mticker.FixedLocator(np.arange(20,70,5)) + gl.ylocator = mticker.FixedLocator(np.arange(20, 70, 5)) gl.xlocator = mticker.FixedLocator([-10, -5, 0, 5, 10, 15]) gl.xformatter = LONGITUDE_FORMATTER gl.yformatter = LATITUDE_FORMATTER @@ -346,300 +461,682 @@ def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): ax.coastlines() ax.add_feature(cfeature.BORDERS, linestyle=':') - plt.savefig(os.path.join(local_path, f"{wt_string}_{wt}_{dataset}_{var_name}_mean.png")) + plt.savefig( + os.path.join( + local_path, f'{wt_string}_{wt}_{dataset}_{var_name}_{mode}.png') + ) plt.close() - return -def rmse(subarray1, subarray2): - """ +def rmse(subarray1: np.array, subarray2: np.array): + ''' Calculate root mean square difference between two arrays. - """ - return np.sqrt(np.mean((subarray1 - subarray2)**2)) + ''' + return np.sqrt(np.mean((subarray1 - subarray2) ** 2)) + -def write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset): +def write_corr_rmse_to_csv(cfg: dict, pattern_correlation_matrix: np.array, + rmse_matrix: np.array, dataset: str): - work_dir = cfg['work_dir'] + logger.info('Writing corr and rsme matrices for %s', dataset) - df_corr = pd.DataFrame(pattern_correlation) + work_dir = cfg.get('work_dir') + + df_corr = pd.DataFrame(pattern_correlation_matrix) df_corr.index = range(1, len(df_corr) + 1) df_corr.columns = range(1, len(df_corr.columns) + 1) - df_corr.to_csv(f'{work_dir}/correlation_matrix_{dataset}.csv', index_label='Index') + df_corr.to_csv(f'{work_dir}/correlation_matrix_{dataset}.csv', + index_label='Index') df_rmse = pd.DataFrame(rmse_matrix) df_rmse.index = range(1, len(df_rmse) + 1) df_rmse.columns = range(1, len(df_rmse.columns) + 1) - df_rmse.to_csv(f'{work_dir}/rmse_matrix_{dataset}.csv', index_label='Index') + df_rmse.to_csv(f'{work_dir}/rmse_matrix_{dataset}.csv', + index_label='Index') + - return +def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, + rmse_threshold: float, dataset: str) -> list: -def process_prcp_mean(wt, cfg, data, correlation_threshold, rmse_threshold, dataset): + logger.info('Calculating corr and rsme matrices for %s', dataset) selected_pairs = [] - pattern_correlation = np.ma.corrcoef(data) + pattern_correlation_matrix = np.ma.corrcoef(data) n = len(data) rmse_matrix = np.zeros((n, n)) - + for i in range(n): - for j in range(i+1, n): + for j in range(i + 1, n): rmse_matrix[i][j] = rmse(data[i], data[j]) rmse_matrix[j][i] = rmse_matrix[i][j] - if pattern_correlation[i][j] >= correlation_threshold and rmse_matrix[i][j] <= rmse_threshold: - selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmse_matrix[i][j])) - - #write matrices to csv - write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset) + if ( + pattern_correlation_matrix[i][j] >= correlation_threshold + and rmse_matrix[i][j] <= rmse_threshold + ): + selected_pairs.append( + ((i + 1, j + 1), + pattern_correlation_matrix[i][j], rmse_matrix[i][j]) + ) + + # write matrices to csv + write_corr_rmse_to_csv( + cfg, pattern_correlation_matrix, rmse_matrix, dataset) return selected_pairs -def calculate_wt_means(cfg, cube, wt_cubes, dataset: str, var_name: str, wt_string: str): - if wt_string == "slwt_ERA5": - slwt_era5_cube = wt_cubes[1]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_era5") - tcoord = slwt_era5_cube.coord("time") +def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, + wt_cubes: iris.cube.CubeList, dataset: str, + var_name: str, wt_string: str): + + logger.info('Calculating %s %s means for %s', dataset, var_name, wt_string) + + if wt_string == 'slwt_ERA5': + slwt_era5_cube = wt_cubes[1] + tcoord = slwt_era5_cube.coord('time') + slwt_era5 = slwt_era5_cube.data[:] + elif wt_string == 'slwt_EOBS': + slwt_eobs_cube = wt_cubes[2] + tcoord = slwt_eobs_cube.coord('time') + slwt_eobs = slwt_eobs_cube.data[:] + elif wt_string == 'lwt': + lwt_cube = wt_cubes[0] + tcoord = lwt_cube.coord('time') + lwt = lwt_cube.data[:] + + if 'slwt' in wt_string: + for wt in range(1, 10): + if wt_string == 'slwt_ERA5': + target_indices = np.where(slwt_era5 == wt) + elif wt_string == 'slwt_EOBS': + target_indices = np.where(slwt_eobs == wt) + else: + logger.info('WT_STRING not supported!') + if len(target_indices[0]) < 1: + logger.info( + 'calculate_wt_means - CAUTION: Skipped wt %s \ + for dataset %s!', wt, dataset + ) + continue + dates = [tcoord.units.num2date(tcoord.points[i]) + for i in target_indices] + extracted_cube = cube.extract( + iris.Constraint(time=lambda t: t.point in dates[0]) + ) + wt_cube_mean = extracted_cube.collapsed('time', + iris.analysis.MEAN) + plot_maps(wt, cfg, wt_cube_mean, dataset, + var_name, wt_string, 'mean') + elif wt_string == 'lwt': + for wt in range(1, 28): + target_indices = np.where(lwt == wt) + if len(target_indices[0]) < 1: + logger.info( + 'calculate_wt_means - CAUTION: Skipped wt %s \ + for dataset %s!', wt, dataset + ) + continue + dates = [tcoord.units.num2date(tcoord.points[i]) + for i in target_indices] + extracted_cube = cube.extract( + iris.Constraint(time=lambda t: t.point in dates[0]) + ) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) + plot_maps(wt, cfg, wt_cube_mean, dataset, + var_name, wt_string, 'mean') + else: + logger.info('WT_STRING NOT SUPPORTED.') + + log_provenance(f'{var_name} means for {wt_string}', + f'{dataset}_{var_name}_{wt_string}_means_prov', cfg, + [f'{dataset}.nc', 'ERA5.nc'], [var_name], ['geo']) + + +def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, + wt_cubes: iris.cube.CubeList, dataset: str, + var_name: str, wt_string: str): + + logger.info('Calculating %s %s anomalies for %s', dataset, + var_name, wt_string) + + if wt_string == 'slwt_ERA5': + slwt_era5_cube = wt_cubes[1] + tcoord = slwt_era5_cube.coord('time') + slwt_era5 = slwt_era5_cube.data[:] + elif wt_string == 'slwt_EOBS': + slwt_eobs_cube = wt_cubes[2] + tcoord = slwt_eobs_cube.coord('time') + slwt_eobs = slwt_eobs_cube.data[:] + elif wt_string == 'lwt': + lwt_cube = wt_cubes[0] + tcoord = lwt_cube.coord('time') + lwt = lwt_cube.data[:] + + if 'slwt' in wt_string: + for wt in range(1, 10): + if wt_string == 'slwt_ERA5': + target_indices = np.where(slwt_era5 == wt) + elif wt_string == 'slwt_EOBS': + target_indices = np.where(slwt_eobs == wt) + else: + logger.info('WT_STRING not supported!') + if len(target_indices[0]) < 1: + logger.info( + 'calculate_wt_anomalies - CAUTION: Skipped wt %s \ + for dataset %s!', wt, dataset + ) + continue + dates = [tcoord.units.num2date(tcoord.points[i]) + for i in target_indices] + extracted_cube = cube.extract( + iris.Constraint(time=lambda t: t.point in dates[0]) + ) + wt_cube_mean = extracted_cube.collapsed('time', + iris.analysis.MEAN) + plot_maps(wt, cfg, cube.collapsed('time', iris.analysis.MEAN) - + wt_cube_mean, dataset, var_name, wt_string, 'anomaly') + elif wt_string == 'lwt': + for wt in range(1, 28): + target_indices = np.where(lwt == wt) + if len(target_indices[0]) < 1: + logger.info( + 'calculate_wt_anomalies - CAUTION: Skipped wt %s \ + for dataset %s!', wt, dataset + ) + continue + dates = [tcoord.units.num2date(tcoord.points[i]) + for i in target_indices] + extracted_cube = cube.extract( + iris.Constraint(time=lambda t: t.point in dates[0]) + ) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) + plot_maps(wt, cfg, cube.collapsed('time', iris.analysis.MEAN) - + wt_cube_mean, dataset, var_name, wt_string, 'anomaly') + else: + logger.info('WT_STRING NOT SUPPORTED.') + + log_provenance(f'{var_name} anomaly for {wt_string}', + f'{dataset}_{var_name}_{wt_string}_anomalies_prov', cfg, + [f'{dataset}.nc', 'ERA5.nc'], [var_name], ['geo']) + + +def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, + wt_cubes: iris.cube.CubeList, dataset: str, + var_name: str, wt_string: str): + + logger.info('Calculating %s %s standard deviation for %s', + dataset, var_name, wt_string) + + if wt_string == 'slwt_ERA5': + slwt_era5_cube = wt_cubes[1] + tcoord = slwt_era5_cube.coord('time') slwt_era5 = slwt_era5_cube.data[:] - elif wt_string == "slwt_EOBS": - slwt_eobs_cube = wt_cubes[2]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_e-obs") - tcoord = slwt_eobs_cube.coord("time") + elif wt_string == 'slwt_EOBS': + slwt_eobs_cube = wt_cubes[2] + tcoord = slwt_eobs_cube.coord('time') slwt_eobs = slwt_eobs_cube.data[:] - elif wt_string == "lwt": - lwt_cube = wt_cubes[0]#iris.load(f"{work_dir}/{file_name}.nc", "lwt") - tcoord = lwt_cube.coord("time") + elif wt_string == 'lwt': + lwt_cube = wt_cubes[0] + tcoord = lwt_cube.coord('time') lwt = lwt_cube.data[:] - if "slwt" in wt_string: - for wt in range(1,10): - if wt_string == "slwt_ERA5": + if 'slwt' in wt_string: + for wt in range(1, 10): + if wt_string == 'slwt_ERA5': target_indices = np.where(slwt_era5 == wt) - elif wt_string == "slwt_EOBS": + elif wt_string == 'slwt_EOBS': target_indices = np.where(slwt_eobs == wt) else: - print("WT_STRING not supported!") + logger.info('WT_STRING not supported!') if len(target_indices[0]) < 1: - print(f"calculate_wt_mean - CAUTION: Skipped wt {wt} for dataset {dataset}!") + logger.info( + 'calculate_slwt_obs - CAUTION: Skipped wt %s \ + for dataset %s!', wt, dataset + ) continue - dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] - extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) - plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) - elif wt_string == "lwt": - for wt in range(1,28): + dates = [tcoord.units.num2date(tcoord.points[i]) + for i in target_indices] + extracted_cube = cube.extract( + iris.Constraint(time=lambda t: t.point in dates[0]) + ) + wt_cube_std = extracted_cube.collapsed('time', + iris.analysis.STD_DEV) + plot_maps(wt, cfg, wt_cube_std, dataset, var_name, + wt_string, 'standard deviation') + elif wt_string == 'lwt': + for wt in range(1, 28): target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: - print(f"calculate_wt_mean - CAUTION: Skipped wt {wt} for dataset {dataset}!") + logger.info( + 'calculate_wt_std - CAUTION: Skipped wt %s \ + for dataset %s!', wt, dataset + ) continue - dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] - extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) - plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) + dates = [tcoord.units.num2date(tcoord.points[i]) + for i in target_indices] + extracted_cube = cube.extract( + iris.Constraint(time=lambda t: t.point in dates[0]) + ) + wt_cube_std = extracted_cube.collapsed( + 'time', iris.analysis.STD_DEV) + plot_maps(wt, cfg, wt_cube_std, dataset, var_name, + wt_string, 'standard deviation') else: - print("WT_STRING NOT SUPPORTED.") + logger.info('WT_STRING NOT SUPPORTED.') + + log_provenance(f'{var_name} standard deviation for {wt_string}', + f'{dataset}_{var_name}_{wt_string}_std_prov', cfg, + [f'{dataset}.nc', 'ERA5.nc'], [var_name], ['geo']) + - return +def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, + slwt_eobs: np.array, cube: iris.cube.Cube, + file_name: str): -def combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, cube, file_name): + logger.info('Writing weathertypes to %s', file_name) iris.FUTURE.datum_support = True iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") + tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) - write_path = cfg['work_dir'] + write_path = cfg.get('work_dir') wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(lwt, long_name="lwt")) - wt_cube.append(iris.cube.Cube(slwt_era5, long_name="slwt_era5")) - wt_cube.append(iris.cube.Cube(slwt_eobs, long_name="slwt_eobs")) + wt_cube.append(iris.cube.Cube(lwt, long_name='lwt')) + wt_cube.append(iris.cube.Cube(slwt_era5, long_name='slwt_era5')) + wt_cube.append(iris.cube.Cube(slwt_eobs, long_name='slwt_eobs')) wt_cube[0].add_dim_coord(tcoord, 0) wt_cube[1].add_dim_coord(tcoord, 0) wt_cube[2].add_dim_coord(tcoord, 0) - iris.save(wt_cube, f"{write_path}/{file_name}.nc") + iris.save(wt_cube, f'{write_path}/{file_name}.nc') - #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(lwt), 'slwt_era5': np.int8(slwt_era5), 'slwt_eobs': np.int8(slwt_eobs)}#, 'slwt': slwt_data} + # write to csv file + d = { + 'date': time_points[:], + 'lwt': np.int8(lwt), + 'slwt_era5': np.int8(slwt_era5), + 'slwt_eobs': np.int8(slwt_eobs), + } df = pd.DataFrame(data=d) df.to_csv(write_path + f'/{file_name}.csv', index=False) - return -def write_lwt_to_file(cfg, lwt, cube, file_name): +def write_lwt_to_file(cfg: dict, lwt: np.array, cube: iris.cube.Cube, + file_name: str): + + logger.info('Writing Lamb Weathertype to %s', file_name) + iris.FUTURE.datum_support = True iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") + tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) - write_path = cfg['work_dir'] + write_path = cfg.get('work_dir') wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(np.int8(lwt), long_name="lwt")) + wt_cube.append(iris.cube.Cube(np.int8(lwt), long_name='lwt')) wt_cube[0].add_dim_coord(tcoord, 0) - iris.save(wt_cube, f"{write_path}/{file_name}.nc") + iris.save(wt_cube, f'{write_path}/{file_name}.nc') - #write to csv file + # write to csv file d = {'date': time_points[:], 'lwt': np.int8(lwt)} df = pd.DataFrame(data=d) df.to_csv(write_path + f'/{file_name}.csv', index=False) - return -def calculate_lwt_model(cfg, cube, dataset): +def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str): - work_dir = cfg['work_dir'] + work_dir = cfg.get('work_dir') - WT = wt_algorithm(cube) + wt = wt_algorithm(cube, dataset) iris.FUTURE.datum_support = True iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") + tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) + wt_cube.append(iris.cube.Cube(wt, long_name='lwt')) + + logger.info('Writing Lamb Weathertype for %s \ + to file %s.nc', dataset, dataset) wt_cube[0].add_dim_coord(tcoord, 0) - iris.save(wt_cube, f"{work_dir}/{dataset}.nc") + iris.save(wt_cube, f'{work_dir}/{dataset}.nc') - #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(WT)} + # write to csv file + d = {'date': time_points[:], 'lwt': np.int8(wt)} df = pd.DataFrame(data=d) df.to_csv(f'{work_dir}/{dataset}.csv', index=False) - return f'weathertyping for {dataset} done.' -def run_my_diagnostic(cfg): - """ +def run_my_diagnostic(cfg: dict): + ''' Arguments: cfg - nested dictionary of metadata Returns: string; runs the user diagnostic - """ + ''' # assemble the data dictionary keyed by dataset name # this makes use of the handy group_metadata function that # orders the data by 'dataset'; the resulting dictionary is # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} # where var1, var2 are dicts holding all needed information per variable - preproc_variables_dict = group_metadata(cfg['input_data'].values(), 'dataset') + preproc_variables_dict = group_metadata( + cfg.get('input_data').values(), 'dataset') - correlation_threshold = cfg['correlation_threshold'] - rmse_threshold = cfg['rmse_threshold'] - work_dir = cfg['work_dir'] + correlation_threshold = cfg.get('correlation_threshold') + rmse_threshold = cfg.get('rmse_threshold') + work_dir = cfg.get('work_dir') - #load cubes and run functions - #key = dataset name, value is dataset - if cfg['automatic_slwt']: + # load cubes and run functions + # key = dataset name, value is dataset + if cfg.get('automatic_slwt'): for key, value in preproc_variables_dict.items(): - if key == "ERA5": - wt_preproc = iris.load_cube(value[0]['filename']) - wt_preproc_prcp = iris.load_cube(value[1]['filename']) - mean_preproc_psl = iris.load_cube(value[2]['filename']) - mean_preproc_prcp = iris.load_cube(value[3]['filename']) - mean_preproc_tas = iris.load_cube(value[4]['filename']) - wt_preproc_prcp_EOBS = iris.load_cube(preproc_variables_dict['E-OBS'][0]['filename']) - - #calculate lwt - lwt = wt_algorithm(wt_preproc) - - #calculate simplified lwt based on precipitation patterns - slwt_era5 = calculate_slwt_obs(cfg, lwt, wt_preproc_prcp, key, correlation_threshold, rmse_threshold) - slwt_eobs = calculate_slwt_obs(cfg, lwt, wt_preproc_prcp_EOBS, "E-OBS", correlation_threshold, rmse_threshold) - - #write to file - combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, wt_preproc, key) - - #load weathertype files as cubes - lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") - slwt_era5_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_era5") - slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") + if key == 'ERA5': + wt_preproc = iris.load_cube(value[0].get('filename')) + wt_preproc_prcp = iris.load_cube(value[1].get('filename')) + mean_preproc_psl = iris.load_cube(value[2].get('filename')) + mean_preproc_prcp = iris.load_cube(value[3].get('filename')) + mean_preproc_tas = iris.load_cube(value[4].get('filename')) + wt_preproc_prcp_eobs = iris.load_cube( + preproc_variables_dict.get('E-OBS')[0].get('filename') + ) + + # calculate lwt + lwt = wt_algorithm(wt_preproc, key) + + # calculate simplified lwt based on precipitation patterns + slwt_era5 = calculate_slwt_obs( + cfg, + lwt, + wt_preproc_prcp, + key, + correlation_threshold, + rmse_threshold, + ) + slwt_eobs = calculate_slwt_obs( + cfg, + lwt, + wt_preproc_prcp_eobs, + 'E-OBS', + correlation_threshold, + rmse_threshold, + ) + + # write to file + combine_wt_to_file(cfg, lwt, slwt_era5, + slwt_eobs, wt_preproc, key) + + # load weathertype files as cubes + lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') + slwt_era5_cube = iris.load_cube( + f'{work_dir}/{key}.nc', 'slwt_era5') + slwt_eobs_cube = iris.load_cube( + f'{work_dir}/{key}.nc', 'slwt_eobs') wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - #plot means - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") - else: - if key == "E-OBS": + + # plot means + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='slwt_ERA5', + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='slwt_ERA5', + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='slwt_ERA5', + ) + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='slwt_EOBS', + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='slwt_EOBS', + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='slwt_EOBS', + ) + else: + if key == 'E-OBS': continue - wt_preproc = iris.load_cube(value[0]['filename']) - mean_preproc_psl = iris.load_cube(value[1]['filename']) - mean_preproc_prcp = iris.load_cube(value[2]['filename']) - mean_preproc_tas = iris.load_cube(value[3]['filename']) - - #calculate weathertypes - calculate_lwt_slwt_model(cfg, wt_preproc, key) - - #load wt files - lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") - slwt_era5_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_era5") - slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") - wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - - #plot means - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") - else: #if automatic_slwt is false, just do the lwt + wt_preproc = iris.load_cube(value[0].get('filename')) + mean_preproc_psl = iris.load_cube(value[1].get('filename')) + mean_preproc_prcp = iris.load_cube(value[2].get('filename')) + mean_preproc_tas = iris.load_cube(value[3].get('filename')) + + # calculate weathertypes + calculate_lwt_slwt_model(cfg, wt_preproc, key) + + # load wt files + lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') + slwt_era5_cube = iris.load_cube( + f'{work_dir}/{key}.nc', 'slwt_era5') + slwt_eobs_cube = iris.load_cube( + f'{work_dir}/{key}.nc', 'slwt_eobs') + wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + + # plot means + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='slwt_ERA5', + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='slwt_ERA5', + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='slwt_ERA5', + ) + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='slwt_EOBS', + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='slwt_EOBS', + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='slwt_EOBS', + ) + else: # if automatic_slwt is false, just do the lwt for key, value in preproc_variables_dict.items(): - if key == "ERA5": - wt_preproc = iris.load_cube(value[0]['filename']) - wt_preproc_prcp = iris.load_cube(value[1]['filename']) - mean_preproc_psl = iris.load_cube(value[2]['filename']) - mean_preproc_prcp = iris.load_cube(value[3]['filename']) - mean_preproc_tas = iris.load_cube(value[4]['filename']) - wt_preproc_prcp_EOBS = iris.load_cube(preproc_variables_dict['E-OBS'][0]['filename']) - - #calculate lwt - lwt = wt_algorithm(wt_preproc) - - #write to file + if key == 'ERA5': + wt_preproc = iris.load_cube(value[0].get('filename')) + wt_preproc_prcp = iris.load_cube(value[1].get('filename')) + mean_preproc_psl = iris.load_cube(value[2].get('filename')) + mean_preproc_prcp = iris.load_cube(value[3].get('filename')) + mean_preproc_tas = iris.load_cube(value[4].get('filename')) + wt_preproc_prcp_eobs = iris.load_cube( + preproc_variables_dict.get('E-OBS')[0].get('filename') + ) + + # calculate lwt + lwt = wt_algorithm(wt_preproc, key) + + # write to file write_lwt_to_file(cfg, lwt, wt_preproc, key) - #load weathertype files as cubes - lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") + # load weathertype files as cubes + lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') wt_cubes = [lwt_cube] - #plot means - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - else: - if key == "E-OBS": + # plot means + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='lwt', + ) + else: + if key == 'E-OBS': continue - wt_preproc = iris.load_cube(value[0]['filename']) - mean_preproc_psl = iris.load_cube(value[1]['filename']) - mean_preproc_prcp = iris.load_cube(value[2]['filename']) - mean_preproc_tas = iris.load_cube(value[3]['filename']) + wt_preproc = iris.load_cube(value[0].get('filename')) + mean_preproc_psl = iris.load_cube(value[1].get('filename')) + mean_preproc_prcp = iris.load_cube(value[2].get('filename')) + mean_preproc_tas = iris.load_cube(value[3].get('filename')) - #calculate weathertypes - calculate_lwt_model(cfg, wt_preproc, key) + # calculate weathertypes + calculate_lwt_model(cfg, wt_preproc, key) - #load wt files - lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") - wt_cubes = [lwt_cube] + # load wt files + lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') + wt_cubes = [lwt_cube] - #plot means - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") + # plot means + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='lwt', + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='lwt', + ) - return if __name__ == '__main__': @@ -648,4 +1145,3 @@ def run_my_diagnostic(cfg): with run_diagnostic() as config: # list here the functions that need to run run_my_diagnostic(config) - diff --git a/esmvaltool/recipes/recipe_weathertyping.yml b/esmvaltool/recipes/recipe_weathertyping.yml new file mode 100644 index 0000000000..62c43de173 --- /dev/null +++ b/esmvaltool/recipes/recipe_weathertyping.yml @@ -0,0 +1,273 @@ +documentation: + title: Weathertyping algorithm + + description: Calculating the Lamb weathertypes. + + authors: + - broetz_bjoern + projects: + - crescendo + +#documentation: +# description: | +# A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, +# correlations between weathertypes and precipitation patterns over a given are can be calculated +# and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as +# anomalies and standard deviations can be plotted. +# +# title: Weathertyping Diagnostic +# +# authors: +# - kroißenbrunner_thomas +# +# projects: +# - preval + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: AS-RCEC, dataset: TaiESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200626} +# - {institute: AWI, dataset: AWI-ESM-1-1-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200212} +# - {institute: BCC, dataset: BCC-CSM2-MR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181126} +# - {institute: BCC, dataset: BCC-ESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181220} +# - {institute: CAS, dataset: FGOALS-f3-L, ensemble: r1i1p1f1, grid: gr, esgf_version: v20191019} +# - {institute: CAS, dataset: FGOALS-g3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190826} +# - {institute: CCCR-IITM, dataset: IITM-ESM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210203} +# - {institute: CCCma, dataset: CanESM5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190429} +# - {institute: CMCC, dataset: CMCC-CM2-HR4, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200904} +# - {institute: CMCC, dataset: CMCC-CM2-SR5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200616} +# - {institute: CMCC, dataset: CMCC-ESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210114} +# - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r1i1p1f2, grid: gr, esgf_version: v20180917} +# - {institute: CSIRO-ARCCSS, dataset: ACCESS-CM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} +# - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191115} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-AerChem, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200624} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-CC, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210113} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200217} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg, ensemble: r1i1p1f1, grid: gr, esgf_version: v20211207} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200310} +# - {institute: HAMMOZ-Consortium, dataset: MPI-ESM-1-2-HAM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190627} +# - {institute: INM, dataset: INM-CM4-8, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190530} +# - {institute: INM, dataset: INM-CM5-0, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190610} +# - {institute: IPSL, dataset: IPSL-CM5A2-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200729} +# - {institute: IPSL, dataset: IPSL-CM6A-LR-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210216} +# - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20180803} +# - {institute: KIOST, dataset: KIOST-ESM, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20210601} +# - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r1i1p1f2, grid: gn, esgf_version: v20191129} +# - {institute: MIROC, dataset: MIROC6, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191016} +# - {institute: MPI-M, dataset: ICON-ESM-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210215} +# - {institute: MPI-M, dataset: MPI-ESM1-2-HR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} +# - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} +# - {institute: MRI, dataset: MRI-ESM2-0, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190603} +# - {institute: NASA-GISS, dataset: GISS-E2-2-G, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120, start_year: 1970} +# - {institute: NCAR, dataset: CESM2-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} +# - {institute: NCAR, dataset: CESM2-WACCM-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} +# - {institute: NCAR, dataset: CESM2-WACCM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190227} +# - {institute: NCAR, dataset: CESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190308} +# - {institute: NCC, dataset: NorCPM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200724} +# - {institute: NCC, dataset: NorESM2-LM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190815} +# - {institute: NCC, dataset: NorESM2-MM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} +# - {institute: NIMS-KMA, dataset: KACE-1-0-G, ensemble: r1i1p1f1, grid: gr, esgf_version: v20190911} +# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20180701} +# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr2, esgf_version: v20180701} +# - {institute: NOAA-GFDL, dataset: GFDL-ESM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190726} +# - {institute: NUIST, dataset: NESM3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190812} +# - {institute: SNU, dataset: SAM0-UNICON, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190323} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + + mean_preproc_temp: + extract_time: + *time + extract_levels: + levels: [100000.] + scheme: linear + extract_region: + *reg + + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: ta + preprocessor: mean_preproc_temp + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + script: weathertyping/weathertyping.py From 66d524c4c4167d18168e623c56e3f05f47d9d1f3 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Tue, 21 May 2024 21:40:04 +0200 Subject: [PATCH 10/29] reformatted coe, added anomaly and std plots --- esmvaltool/config-references.yml | 6 + .../weathertyping/recipe_weathertyping.yml | 258 ------- .../weathertyping/weathertyping.py | 678 ------------------ .../weathertyping_diagnostic_generalised.py | 383 ---------- 4 files changed, 6 insertions(+), 1319 deletions(-) delete mode 100644 esmvaltool/diag_scripts/weathertyping/recipe_weathertyping.yml delete mode 100644 esmvaltool/diag_scripts/weathertyping/weathertyping.py delete mode 100644 esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py diff --git a/esmvaltool/config-references.yml b/esmvaltool/config-references.yml index b5f43bc911..fa3d45bc78 100644 --- a/esmvaltool/config-references.yml +++ b/esmvaltool/config-references.yml @@ -315,6 +315,11 @@ authors: name: Krasting, John institute: NOAA, USA orcid: https://orcid.org/0000-0002-4650-9844 + kroißenbrunner_thomas: + name: Kroißenbrunner, Thomas + institute: WEGC, Austria + email: thomas.kroissenbrunner@uni-graz.at + github: thomaskroi1996 kuehbacher_birgit: name: Kuehbacher, Birgit institute: DLR, Germany @@ -788,6 +793,7 @@ projects: trr181: DFG Project TRR-181, Energy transfers in Atmosphere and Ocean ukesm: UKESM, UK Earth System Model project (NERC) usmile: ERC Synergy Grant USMILE + preval: PREVAL ÖKS realms: diff --git a/esmvaltool/diag_scripts/weathertyping/recipe_weathertyping.yml b/esmvaltool/diag_scripts/weathertyping/recipe_weathertyping.yml deleted file mode 100644 index d65eb02a5c..0000000000 --- a/esmvaltool/diag_scripts/weathertyping/recipe_weathertyping.yml +++ /dev/null @@ -1,258 +0,0 @@ -documentation: - title: Weathertyping algorithm - - description: Calculating the Lamb weathertypes. - - authors: - - broetz_bjoern - projects: - - crescendo - -datasets_psl_CMIP6: &datasets_psl_cmip6 - - {institute: AS-RCEC, dataset: TaiESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200626} -# - {institute: AWI, dataset: AWI-ESM-1-1-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200212} -# - {institute: BCC, dataset: BCC-CSM2-MR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181126} -# - {institute: BCC, dataset: BCC-ESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181220} -# - {institute: CAS, dataset: FGOALS-f3-L, ensemble: r1i1p1f1, grid: gr, esgf_version: v20191019} -# - {institute: CAS, dataset: FGOALS-g3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190826} -# - {institute: CCCR-IITM, dataset: IITM-ESM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210203} -# - {institute: CCCma, dataset: CanESM5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190429} -# - {institute: CMCC, dataset: CMCC-CM2-HR4, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200904} -# - {institute: CMCC, dataset: CMCC-CM2-SR5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200616} -# - {institute: CMCC, dataset: CMCC-ESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210114} -# - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r1i1p1f2, grid: gr, esgf_version: v20180917} -# - {institute: CSIRO-ARCCSS, dataset: ACCESS-CM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} -# - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191115} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-AerChem, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200624} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-CC, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210113} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200217} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg, ensemble: r1i1p1f1, grid: gr, esgf_version: v20211207} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200310} -# - {institute: HAMMOZ-Consortium, dataset: MPI-ESM-1-2-HAM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190627} -# - {institute: INM, dataset: INM-CM4-8, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190530} -# - {institute: INM, dataset: INM-CM5-0, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190610} -# - {institute: IPSL, dataset: IPSL-CM5A2-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200729} -# - {institute: IPSL, dataset: IPSL-CM6A-LR-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210216} -# - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20180803} -# - {institute: KIOST, dataset: KIOST-ESM, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20210601} -# - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r1i1p1f2, grid: gn, esgf_version: v20191129} -# - {institute: MIROC, dataset: MIROC6, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191016} -# - {institute: MPI-M, dataset: ICON-ESM-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210215} -# - {institute: MPI-M, dataset: MPI-ESM1-2-HR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} -# - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} -# - {institute: MRI, dataset: MRI-ESM2-0, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190603} -# - {institute: NASA-GISS, dataset: GISS-E2-2-G, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120, start_year: 1970} -# - {institute: NCAR, dataset: CESM2-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} -# - {institute: NCAR, dataset: CESM2-WACCM-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} -# - {institute: NCAR, dataset: CESM2-WACCM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190227} -# - {institute: NCAR, dataset: CESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190308} -# - {institute: NCC, dataset: NorCPM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200724} -# - {institute: NCC, dataset: NorESM2-LM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190815} -# - {institute: NCC, dataset: NorESM2-MM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} -# - {institute: NIMS-KMA, dataset: KACE-1-0-G, ensemble: r1i1p1f1, grid: gr, esgf_version: v20190911} -# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20180701} -# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr2, esgf_version: v20180701} -# - {institute: NOAA-GFDL, dataset: GFDL-ESM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190726} -# - {institute: NUIST, dataset: NESM3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190812} -# - {institute: SNU, dataset: SAM0-UNICON, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190323} - -datasets_ERA5: &datasets_era5 - - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} - -datasets_EOBS: &datasets_EOBS - - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} - -preprocessors: - weathertype_preproc: - extract_time: &time - start_year: 1950 - start_month: 1 - start_day: 1 - end_year: 2014 - end_month: 12 - end_day: 31 - regrid: - target_grid: &grid - start_longitude: -5 - end_longitude: 25 - step_longitude: 5 - start_latitude: 35 - end_latitude: 55 - step_latitude: 5 - scheme: linear - - weathertype_preproc_pr: - extract_time: - *time - extract_region: #choose region which will be used for weathertype and precipitation correlation - start_longitude: 9.5 - end_longitude: 17.25 - start_latitude: 46.25 - end_latitude: 49 - - mean_preproc: - extract_time: - *time - extract_region: ® - start_longitude: -15 - end_longitude: 35 - start_latitude: 25 - end_latitude: 65 - - mean_preproc_temp: - extract_time: - *time - extract_levels: - levels: [100000.] - scheme: linear - extract_region: - *reg - - -diagnostics: - weathertyping: - description: calculate weathertypes and plot means - variables: - era5_msl_wt: &era5_msl_wt - project: native6 - dataset: ERA51 - type: reanaly - frequency: day - mip: day - latestversion: v1 - tier: 3 - start_year: 1958 - end_year: 2014 - short_name: psl - preprocessor: weathertype_preproc - additional_datasets: - *datasets_era5 - - era5_pr_wt: &era5_pr_wt - project: native6 - dataset: ERA51 - type: reanaly - frequency: day - mip: day - latestversion: v1 - tier: 3 - start_year: 1958 - end_year: 2014 - short_name: pr - preprocessor: weathertype_preproc_pr - additional_datasets: - *datasets_era5 - - eobs_pr_wt: &eobs_pr_wt - project: OBS - dataset: E-OBS - type: ground - mip: day - version: v29.0e-0.25 - tier: 2 - start_year: 1958 - end_year: 2014 - short_name: pr - preprocessor: weathertype_preproc_pr - additional_datasets: - *datasets_EOBS - - era5_msl_mean: &era5_msl - project: native6 - dataset: ERA5 - type: reanaly - frequency: day - mip: day - latestversion: v1 - tier: 3 - start_year: 1958 - end_year: 2014 - short_name: psl - preprocessor: mean_preproc - additional_datasets: - *datasets_era5 - - era5_tp_mean: &era5_prcp - project: native6 - dataset: ERA5 - type: reanaly - frequency: day - mip: day - latestversion: v1 - tier: 3 - start_year: 1958 - end_year: 2014 - short_name: pr - preprocessor: mean_preproc - additional_datasets: - *datasets_era5 - - era5_tas_mean: &era5_temp - project: native6 - dataset: ERA5 - type: reanaly - frequency: day - mip: day - latestversion: v1 - tier: 3 - start_year: 1958 - end_year: 2014 - short_name: tas - preprocessor: mean_preproc - additional_datasets: - *datasets_era5 - - cmip6_historical_psl_day_wt: &cmip6_historical_wt - project: CMIP6 - activity: CMIP - exp: historical - mip: day - short_name: psl - preprocessor: weathertype_preproc - start_year: 1950 - end_year: 2014 - additional_datasets: - *datasets_psl_cmip6 - - cmip6_historical_psl_day_mean: &cmip6_historical_psl - project: CMIP6 - activity: CMIP - exp: historical - mip: day - short_name: psl - preprocessor: mean_preproc - start_year: 1950 - end_year: 2014 - additional_datasets: - *datasets_psl_cmip6 - - cmip6_historical_prcp_day_mean: &cmip6_historical_prcp - project: CMIP6 - activity: CMIP - exp: historical - mip: day - short_name: pr - preprocessor: mean_preproc - start_year: 1950 - end_year: 2014 - additional_datasets: - *datasets_psl_cmip6 - - cmip6_historical_temp_day_mean: &cmip6_historical_ta - project: CMIP6 - activity: CMIP - exp: historical - mip: day - short_name: ta - preprocessor: mean_preproc_temp - start_year: 1950 - end_year: 2014 - additional_datasets: - *datasets_psl_cmip6 - - scripts: - weathertyping: - correlation_threshold: 0.9 - rmse_threshold: 0.002 - automatic_slwt: true - script: weathertyping/weathertyping.py diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py deleted file mode 100644 index 335b08c536..0000000000 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ /dev/null @@ -1,678 +0,0 @@ -#weathertyping diagnostic for esmvaltool - - -# operating system manipulations (e.g. path constructions) -import os -import numpy as np -import pandas as pd -import json -# to manipulate iris cubes -import iris -import iris.plot as iplt -import iris.quickplot as qplt -import matplotlib.pyplot as plt -import matplotlib.ticker as mticker -import cf_units -import cartopy.crs as ccrs -import cartopy.feature as cfeature -from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER -import matplotlib.cm as cm -from matplotlib.colors import ListedColormap -import cartopy.util -from iris.analysis.cartography import wrap_lons - -# import internal esmvaltool modules here -from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic - -def turn_set_to_mapping_dict(array): - - result_dict = {} - - for i, s in enumerate(array): - for elem in s: - if elem not in result_dict: - result_dict[elem] = i+1 - else: - result_dict[elem].append(i) - - return result_dict - -def get_mapping_dict(selected_pairs): - - mapping_dict_douglas_paper = { - 1: 1, 2: 1, 19: 1, - 3: 2, 4: 2, 22: 2, 21: 2, - 5: 3, 6: 3, 15: 3, 16: 3, - 7: 4, 8: 4, 11: 4, 18: 4, - 9: 5, 17: 5, - 10: 6, 20: 6, - 12: 7, 13: 7, 14: 7, - 23: 8, 24: 8, - 25: 9, 26: 9, 27:27, 0:0 - } - - mapping_array = [] - - for i in range(0,len(selected_pairs)): - mapping_array.append(selected_pairs[i][0]) - - s=[set(i) for i in mapping_array if i] - - def find_intersection(m_list): - for i,v in enumerate(m_list) : - for j,k in enumerate(m_list[i+1:],i+1): - if v&k: - s[i]=v.union(m_list.pop(j)) - return find_intersection(m_list) - return m_list - - merged_tuples = find_intersection(s) - - mapping_dict = turn_set_to_mapping_dict(merged_tuples) - - return mapping_dict - -def calculate_slwt_obs(cfg, LWT, cube, dataset: str, correlation_thresold, rmse_threshold): - - print(dataset) - - work_dir = cfg['work_dir'] - - tcoord = cube.coord("time") - - wt_data_prcp = [] - for wt in range(1,28): - target_indices = np.where(LWT == wt) - if len(target_indices[0]) < 1: - print(f"calculate_slwt_obs - CAUTION: Skipped wt {wt} for dataset {dataset}!") - continue - dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] - if dataset == "E-OBS": - extracted_cube = cube[target_indices]#.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - else: - extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) - #plot_mean(wt, cfg, wt_cube_mean, dataset, f"{var_name}_", wt_string) - wt_data_prcp.append(wt_cube_mean.data.compressed()) - selected_pairs = process_prcp_mean(wt, cfg, wt_data_prcp, correlation_thresold, rmse_threshold, dataset) - - with open(f'{work_dir}/wt_selected_pairs_{dataset}.json', 'w') as file: - json.dump(selected_pairs, file) - - mapping_dict = get_mapping_dict(selected_pairs) - - with open(f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w') as file: - json.dump(mapping_dict, file) - - return np.array([np.int8(mapping_dict.get(value, 0)) for value in np.int8(LWT)]) - -def wt_algorithm(cube): - - #lats and lons corresponding to datapoints - #55, 5 -> 1 - #55, 15 -> 2 - #50, -5 -> 3 - #50, 5 -> 4 - #50, 15 -> 5 - #50, 25 -> 6 - #45, -5 -> 7 - #45, 5 -> 8 - #45, 15 -> 9 - #45, 25 -> 10 - #40, -5 -> 11 - #40, 5 -> 12 - #40, 15 -> 13 - #40, 25 -> 14 - #35, 5 -> 15 - #35, 15 -> 16 - - #lons: -5, 0, 5, 10, 15, 20, 25 - #lats: 35, 40, 45, 50, 55 - - const1 = 1 / np.cos(45 * np.pi / 180) - const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) - const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) - const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) - - # westerly flow - W = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * (cube.data[:, 3, 2] + cube.data[:, 3, 4]) - #southerly flow - S = const1 * (1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) - #resultant flow - F = (S ** 2 + W ** 2) ** (1 / 2) - #westerly shear vorticity - ZW = const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4])) - #southerly shear vorticity - ZS = const4 * (1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - 1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * ( - cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + 1 / 4 * (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) - #total shear vorticity - Z = ZW + ZS - - WT = np.zeros(len(Z)) - - for i in range(len(Z)): - - direction = np.arctan(W[i] / S[i]) * 180 / np.pi # deg - if S[i] >= 0: - direction += 180 # deg - - if direction < 0: - direction += 360 # deg - - # Lamb pure directional type - if abs(Z[i]) < F[i]: - if 337.5 <= direction or direction < 22.5: - WT[i] = 1 - elif 22.5 <= direction < 67.5: - WT[i] = 2 - elif 67.5 <= direction < 112.5: - WT[i] = 3 - elif 112.5 <= direction < 157.5: - WT[i] = 4 - elif 157.5 <= direction < 202.5: - WT[i] = 5 - elif 202.5 <= direction < 247.5: - WT[i] = 6 - elif 247.5 <= direction < 292.5: - WT[i] = 7 - elif 292.5 <= direction < 337.5: - WT[i] = 8 - # Lamb’s pure cyclonic and anticyclonic type - elif (2 * F[i]) < abs(Z[i]): - if Z[i] > 0: - WT[i] = 9 - - elif Z[i] < 0: - WT[i] = 10 - #Lambs’s synoptic/direction hybrid types - elif F[i] < abs(Z[i]) < (2 * F[i]): - if Z[i] > 0: - if 337.5 <= direction or direction < 22.5: - WT[i] = 11 - elif 22.5 <= direction < 67.5: - WT[i] = 12 - elif 67.5 <= direction < 112.5: - WT[i] = 13 - elif 112.5 <= direction < 157.5: - WT[i] = 14 - elif 157.5 <= direction < 202.5: - WT[i] = 15 - elif 202.5 <= direction < 247.5: - WT[i] = 16 - elif 247.5 <= direction < 292.5: - WT[i] = 17 - elif 292.5 <= direction < 337.5: - WT[i] = 18 - - elif Z[i] < 0: - if 337.5 <= direction or direction < 22.5: - WT[i] = 19 - elif 22.5 <= direction < 67.5: - WT[i] = 20 - elif 67.5 <= direction < 112.5: - WT[i] = 21 - elif 112.5 <= direction < 157.5: - WT[i] = 22 - elif 157.5 <= direction < 202.5: - WT[i] = 23 - elif 202.5 <= direction < 247.5: - WT[i] = 24 - elif 247.5 <= direction < 292.5: - WT[i] = 25 - elif 292.5 <= direction < 337.5: - WT[i] = 26 - # light indeterminate flow, corresponding to Lamb’s unclassified type U - elif abs(Z[i]) < 6 and F[i] < 6: - WT[i] = 27 - - return WT - -def calculate_lwt_slwt_model(cfg, cube, dataset): - - work_dir = cfg['work_dir'] - - WT = wt_algorithm(cube) - - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") - time_points = tcoord.units.num2date(tcoord.points) - - with open(f'{work_dir}/wt_mapping_dict_ERA5.json', 'r') as file: - mapping_dict_era5 = json.load(file) - - with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', 'r') as file: - mapping_dict_eobs = json.load(file) - - slwt_era5 = np.array([np.int8(mapping_dict_era5.get(f"{value}", 0)) for value in np.int8(WT)]) - slwt_eobs = np.array([np.int8(mapping_dict_eobs.get(f"{value}", 0)) for value in np.int8(WT)]) - - wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) - wt_cube.append(iris.cube.Cube(slwt_era5, long_name="slwt_era5")) - wt_cube.append(iris.cube.Cube(slwt_eobs, long_name="slwt_eobs")) - - wt_cube[0].add_dim_coord(tcoord, 0) - wt_cube[1].add_dim_coord(tcoord, 0) - wt_cube[2].add_dim_coord(tcoord, 0) - - iris.save(wt_cube, f"{work_dir}/{dataset}.nc") - - #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt_ERA5': np.int8(slwt_era5), 'slwt_EOBS': np.int8(slwt_eobs)} - df = pd.DataFrame(data=d) - df.to_csv(f'{work_dir}/{dataset}.csv', index=False) - - return f'weathertyping for {dataset} done.' - -def get_colormap(colormap_string): - - misc_seq_2_disc = [ - (230/255, 240/255, 240/255), - (182/255, 217/255, 228/255), - (142/255, 192/255, 226/255), - (118/255, 163/255, 228/255), - (116/255, 130/255, 222/255), - (121/255, 97/255, 199/255), - (118/255, 66/255, 164/255), - (107/255, 40/255, 121/255), - (86/255, 22/255, 75/255), - (54/255, 14/255, 36/255)] - - temp_seq_disc = [ - (254/255, 254/255, 203/255), - (251/255, 235/255, 153/255), - (244/255, 204/255, 104/255), - (235/255, 167/255, 84/255), - (228/255, 134/255, 80/255), - (209/255, 98/255, 76/255), - (164/255, 70/255, 66/255), - (114/255, 55/255, 46/255), - (66/255, 40/255, 24/255), - (25/255, 25/255, 0/255)] - - prec_seq_disc = [ - (255/255, 255/255, 229/255), - (217/255, 235/255, 213/255), - (180/255, 216/255, 197/255), - (142/255, 197/255, 181/255), - (105/255, 177/255, 165/255), - (67/255, 158/255, 149/255), - (44/255, 135/255, 127/255), - (29/255, 110/255, 100/255), - (14/255, 85/255, 74/255), - (0/255, 60/255, 48/255)] - - if colormap_string == "psl": - return ListedColormap(misc_seq_2_disc) - elif colormap_string == "prcp": - return ListedColormap(prec_seq_disc) - elif colormap_string == "temp": - return ListedColormap(temp_seq_disc) - else: - print("Colormap string not supported!") - - return - -def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): - - local_path = cfg['plot_dir'] - - ax = plt.axes(projection=ccrs.PlateCarree()) - - - - psl_cmap = get_colormap("psl") - prcp_cmap = get_colormap("prcp") - temp_cmap = get_colormap("temp") - - if var_name == "psl": - plt.title(f"{var_name} mean, wt: {wt}") - unit = "[hPa]" - im = iplt.contourf(cube/100, cmap=psl_cmap) - elif var_name == "prcp": - if dataset == "ERA5": - unit = "[m]" - plt.title(f"total {var_name} mean, wt: {wt}") - else: - unit = "[kg m-2 s-1]" - plt.title(f"{var_name} flux mean, wt: {wt}") - im = iplt.contourf(cube, cmap=prcp_cmap) - elif var_name == "tas": - unit = "[K]" - plt.title(f"1000 hPa {var_name} mean, wt: {wt}") - im = iplt.contourf(cube, cmap=temp_cmap) - - cb = plt.colorbar(im) - cb.ax.tick_params(labelsize=8) - cb.set_label(label=f"{var_name} mean {unit}") - - gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--') - gl.left_labels = True - gl.bottom_labels = True - gl.top_labels = False - gl.right_labels = False - gl.xlines = True - gl.ylocator = mticker.FixedLocator(np.arange(20,70,5)) - gl.xlocator = mticker.FixedLocator([-10, -5, 0, 5, 10, 15]) - gl.xformatter = LONGITUDE_FORMATTER - gl.yformatter = LATITUDE_FORMATTER - gl.xlabel_style = {'size': 8, 'color': 'black'} - gl.ylabel_style = {'color': 'black', 'size': 8} - - ax.set_extent([-15, 20, 27.5, 62.5]) - - ax.coastlines() - ax.add_feature(cfeature.BORDERS, linestyle=':') - - plt.savefig(os.path.join(local_path, f"{wt_string}_{wt}_{dataset}_{var_name}_mean.png")) - plt.close() - - return - -def rmse(subarray1, subarray2): - """ - Calculate root mean square difference between two arrays. - """ - return np.sqrt(np.mean((subarray1 - subarray2)**2)) - -def write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset): - - work_dir = cfg['work_dir'] - - df_corr = pd.DataFrame(pattern_correlation) - df_corr.index = range(1, len(df_corr) + 1) - df_corr.columns = range(1, len(df_corr.columns) + 1) - df_corr.to_csv(f'{work_dir}/correlation_matrix_{dataset}.csv', index_label='Index') - - df_rmse = pd.DataFrame(rmse_matrix) - df_rmse.index = range(1, len(df_rmse) + 1) - df_rmse.columns = range(1, len(df_rmse.columns) + 1) - df_rmse.to_csv(f'{work_dir}/rmse_matrix_{dataset}.csv', index_label='Index') - - return - -def process_prcp_mean(wt, cfg, data, correlation_threshold, rmse_threshold, dataset): - - selected_pairs = [] - - pattern_correlation = np.ma.corrcoef(data) - - n = len(data) - rmse_matrix = np.zeros((n, n)) - - for i in range(n): - for j in range(i+1, n): - rmse_matrix[i][j] = rmse(data[i], data[j]) - rmse_matrix[j][i] = rmse_matrix[i][j] - if pattern_correlation[i][j] >= correlation_threshold and rmse_matrix[i][j] <= rmse_threshold: - selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmse_matrix[i][j])) - - print(selected_pairs) - - #write matrices to csv - write_to_csv(cfg, pattern_correlation, rmse_matrix, dataset) - - return selected_pairs - -def calculate_wt_means(cfg, cube, wt_cubes, dataset: str, var_name: str, wt_string: str): - - if wt_string == "slwt_ERA5": - slwt_era5_cube = wt_cubes[1]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_era5") - tcoord = slwt_era5_cube.coord("time") - slwt_era5 = slwt_era5_cube.data[:] - print(slwt_era5) - elif wt_string == "slwt_EOBS": - slwt_eobs_cube = wt_cubes[2]#iris.load(f"{work_dir}/{file_name}.nc", "slwt_e-obs") - tcoord = slwt_eobs_cube.coord("time") - slwt_eobs = slwt_eobs_cube.data[:] - print(slwt_eobs) - elif wt_string == "lwt": - lwt_cube = wt_cubes[0]#iris.load(f"{work_dir}/{file_name}.nc", "lwt") - tcoord = lwt_cube.coord("time") - lwt = lwt_cube.data[:] - print(lwt) - - if "slwt" in wt_string: - for wt in range(1,10): - if wt_string == "slwt_ERA5": - target_indices = np.where(slwt_era5 == wt) - elif wt_string == "slwt_EOBS": - target_indices = np.where(slwt_eobs == wt) - else: - print("WT_STRING not supported!") - if len(target_indices[0]) < 1: - print(f"calculate_wt_mean - CAUTION: Skipped wt {wt} for dataset {dataset}!") - continue - dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] - extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) - plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) - elif wt_string == "lwt": - for wt in range(1,28): - target_indices = np.where(lwt == wt) - if len(target_indices[0]) < 1: - print(f"calculate_wt_mean - CAUTION: Skipped wt {wt} for dataset {dataset}!") - continue - dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] - extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) - plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) - else: - print("WT_STRING NOT SUPPORTED.") - - return - -def combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, cube, file_name): - - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") - time_points = tcoord.units.num2date(tcoord.points) - - write_path = cfg['work_dir'] - - wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(lwt, long_name="lwt")) - wt_cube.append(iris.cube.Cube(slwt_era5, long_name="slwt_era5")) - wt_cube.append(iris.cube.Cube(slwt_eobs, long_name="slwt_eobs")) - - wt_cube[0].add_dim_coord(tcoord, 0) - wt_cube[1].add_dim_coord(tcoord, 0) - wt_cube[2].add_dim_coord(tcoord, 0) - - iris.save(wt_cube, f"{write_path}/{file_name}.nc") - - #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(lwt), 'slwt_era5': np.int8(slwt_era5), 'slwt_eobs': np.int8(slwt_eobs)}#, 'slwt': slwt_data} - df = pd.DataFrame(data=d) - df.to_csv(write_path + f'/{file_name}.csv', index=False) - - return - -def write_lwt_to_file(cfg, lwt, cube, file_name): - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") - time_points = tcoord.units.num2date(tcoord.points) - - write_path = cfg['work_dir'] - - wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(np.int8(lwt), long_name="lwt")) - - wt_cube[0].add_dim_coord(tcoord, 0) - iris.save(wt_cube, f"{write_path}/{file_name}.nc") - - #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(lwt)} - df = pd.DataFrame(data=d) - df.to_csv(write_path + f'/{file_name}.csv', index=False) - - return - -def calculate_lwt_model(cfg, cube, dataset): - - work_dir = cfg['work_dir'] - - WT = wt_algorithm(cube) - - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") - time_points = tcoord.units.num2date(tcoord.points) - - wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(WT, long_name="lwt")) - - wt_cube[0].add_dim_coord(tcoord, 0) - - iris.save(wt_cube, f"{work_dir}/{dataset}.nc") - - #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(WT)} - df = pd.DataFrame(data=d) - df.to_csv(f'{work_dir}/{dataset}.csv', index=False) - - return f'weathertyping for {dataset} done.' - -def run_my_diagnostic(cfg): - """ - Arguments: - cfg - nested dictionary of metadata - - Returns: - string; runs the user diagnostic - - """ - # assemble the data dictionary keyed by dataset name - # this makes use of the handy group_metadata function that - # orders the data by 'dataset'; the resulting dictionary is - # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} - # where var1, var2 are dicts holding all needed information per variable - preproc_variables_dict = group_metadata(cfg['input_data'].values(), 'dataset') - - correlation_threshold = cfg['correlation_threshold'] - rmse_threshold = cfg['rmse_threshold'] - work_dir = cfg['work_dir'] - - #load cubes and run functions - #key = dataset name, value is dataset - if cfg['automatic_slwt']: - for key, value in preproc_variables_dict.items(): - if key == "ERA5": - wt_preproc = iris.load_cube(value[0]['filename']) - wt_preproc_prcp = iris.load_cube(value[1]['filename']) - mean_preproc_psl = iris.load_cube(value[2]['filename']) - mean_preproc_prcp = iris.load_cube(value[3]['filename']) - mean_preproc_tas = iris.load_cube(value[4]['filename']) - wt_preproc_prcp_EOBS = iris.load_cube(preproc_variables_dict['E-OBS'][0]['filename']) - - #calculate lwt - lwt = wt_algorithm(wt_preproc) - - #calculate simplified lwt based on precipitation patterns - slwt_era5 = calculate_slwt_obs(cfg, lwt, wt_preproc_prcp, key, correlation_threshold, rmse_threshold) - slwt_eobs = calculate_slwt_obs(cfg, lwt, wt_preproc_prcp_EOBS, "E-OBS", correlation_threshold, rmse_threshold) - - #write to file - combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, wt_preproc, key) - - #load weathertype files as cubes - lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") - slwt_era5_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_era5") - slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") - wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - - #plot means - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") - else: - if key == "E-OBS": - continue - wt_preproc = iris.load_cube(value[0]['filename']) - mean_preproc_psl = iris.load_cube(value[1]['filename']) - mean_preproc_prcp = iris.load_cube(value[2]['filename']) - mean_preproc_tas = iris.load_cube(value[3]['filename']) - - #calculate weathertypes - calculate_lwt_slwt_model(cfg, wt_preproc, key) - - #load wt files - lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") - slwt_era5_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_era5") - slwt_eobs_cube = iris.load_cube(f"{work_dir}/{key}.nc", "slwt_eobs") - wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - - #plot means - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_ERA5") - #calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="slwt_EOBS") - #calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="slwt_EOBS") - else: #if automatic_slwt is false, just do the lwt, DOES NOT WORK YET - for key, value in preproc_variables_dict.items(): - if key == "ERA5": - wt_preproc = iris.load_cube(value[0]['filename']) - wt_preproc_prcp = iris.load_cube(value[1]['filename']) - mean_preproc_psl = iris.load_cube(value[2]['filename']) - mean_preproc_prcp = iris.load_cube(value[3]['filename']) - mean_preproc_tas = iris.load_cube(value[4]['filename']) - wt_preproc_prcp_EOBS = iris.load_cube(preproc_variables_dict['E-OBS'][0]['filename']) - - #calculate lwt - lwt = wt_algorithm(wt_preproc) - - #write to file - write_lwt_to_file(cfg, lwt, wt_preproc, key) - - #load weathertype files as cubes - lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") - wt_cubes = [lwt_cube] - - #plot means - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - else: - if key == "E-OBS": - continue - wt_preproc = iris.load_cube(value[0]['filename']) - mean_preproc_psl = iris.load_cube(value[1]['filename']) - mean_preproc_prcp = iris.load_cube(value[2]['filename']) - mean_preproc_tas = iris.load_cube(value[3]['filename']) - - #calculate weathertypes - calculate_lwt_model(cfg, wt_preproc, key) - - #load wt files - lwt_cube = iris.load_cube(f"{work_dir}/{key}.nc", "lwt") - wt_cubes = [lwt_cube] - - #plot means - calculate_wt_means(cfg, mean_preproc_psl, wt_cubes, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, wt_cubes, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, wt_cubes, key, var_name="tas", wt_string="lwt") - - return - -if __name__ == '__main__': - - # always use run_diagnostic() to get the config (the preprocessor - # nested dictionary holding all the needed information) - with run_diagnostic() as config: - # list here the functions that need to run - run_my_diagnostic(config) - diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py deleted file mode 100644 index baaee3facf..0000000000 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_generalised.py +++ /dev/null @@ -1,383 +0,0 @@ -#weathertyping diagnostic for esmvaltool - - -# operating system manipulations (e.g. path constructions) -import os -import numpy as np -import pandas as pd -# to manipulate iris cubes -import iris -import iris.plot as iplt -import iris.quickplot as qplt -import matplotlib.pyplot as plt -import matplotlib.ticker as mticker -import cf_units -import cartopy.crs as ccrs -import cartopy.feature as cfeature -from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER -import matplotlib.cm as cm -from matplotlib.colors import ListedColormap -import cartopy.util -from iris.analysis.cartography import wrap_lons - -# import internal esmvaltool modules here -from esmvaltool.diag_scripts.shared import group_metadata, run_diagnostic - -def calc_slwt(wt): - mapping = { - 1: 1, 2: 1, 19: 1, - 3: 2, 4: 2, 22: 2, 21: 2, - 5: 3, 6: 3, 15: 3, 16: 3, - 7: 4, 8: 4, 11: 4, 18: 4, - 9: 5, 17: 5, - 10: 6, 20: 6, - 12: 7, 13: 7, 14: 7, - 23: 8, 24: 8, - 25: 9, 26: 9, 27:27, 0:0 - } - - return np.array([mapping[value] for value in wt]) - -def calculate_weathertypes(cfg, cube, dataset): - #lats and lons corresponding to datapoints - #55, 5 -> 1 - #55, 15 -> 2 - #50, -5 -> 3 - #50, 5 -> 4 - #50, 15 -> 5 - #50, 25 -> 6 - #45, -5 -> 7 - #45, 5 -> 8 - #45, 15 -> 9 - #45, 25 -> 10 - #40, -5 -> 11 - #40, 5 -> 12 - #40, 15 -> 13 - #40, 25 -> 14 - #35, 5 -> 15 - #35, 15 -> 16 - - #lons: -5, 0, 5, 10, 15, 20, 25 - #lats: 35, 40, 45, 50, 55 - - const1 = 1 / np.cos(45 * np.pi / 180) - const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) - const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) - const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) - - # westerly flow - W = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * (cube.data[:, 3, 2] + cube.data[:, 3, 4]) - #southerly flow - S = const1 * (1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) - #resultant flow - F = (S ** 2 + W ** 2) ** (1 / 2) - #westerly shear vorticity - ZW = const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4])) - #southerly shear vorticity - ZS = const4 * (1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - 1 / 4 * (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - 1 / 4 * ( - cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + 1 / 4 * (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) - #total shear vorticity - Z = ZW + ZS - - WT = np.zeros(len(Z)) - - for i in range(len(Z)): - - direction = np.arctan(W[i] / S[i]) * 180 / np.pi # deg - if S[i] >= 0: - direction += 180 # deg - - if direction < 0: - direction += 360 # deg - - # Lamb pure directional type - if abs(Z[i]) < F[i]: - if 337.5 <= direction or direction < 22.5: - WT[i] = 1 - elif 22.5 <= direction < 67.5: - WT[i] = 2 - elif 67.5 <= direction < 112.5: - WT[i] = 3 - elif 112.5 <= direction < 157.5: - WT[i] = 4 - elif 157.5 <= direction < 202.5: - WT[i] = 5 - elif 202.5 <= direction < 247.5: - WT[i] = 6 - elif 247.5 <= direction < 292.5: - WT[i] = 7 - elif 292.5 <= direction < 337.5: - WT[i] = 8 - # Lamb’s pure cyclonic and anticyclonic type - elif (2 * F[i]) < abs(Z[i]): - if Z[i] > 0: - WT[i] = 9 - - elif Z[i] < 0: - WT[i] = 10 - #Lambs’s synoptic/direction hybrid types - elif F[i] < abs(Z[i]) < (2 * F[i]): - if Z[i] > 0: - if 337.5 <= direction or direction < 22.5: - WT[i] = 11 - elif 22.5 <= direction < 67.5: - WT[i] = 12 - elif 67.5 <= direction < 112.5: - WT[i] = 13 - elif 112.5 <= direction < 157.5: - WT[i] = 14 - elif 157.5 <= direction < 202.5: - WT[i] = 15 - elif 202.5 <= direction < 247.5: - WT[i] = 16 - elif 247.5 <= direction < 292.5: - WT[i] = 17 - elif 292.5 <= direction < 337.5: - WT[i] = 18 - - elif Z[i] < 0: - if 337.5 <= direction or direction < 22.5: - WT[i] = 19 - elif 22.5 <= direction < 67.5: - WT[i] = 20 - elif 67.5 <= direction < 112.5: - WT[i] = 21 - elif 112.5 <= direction < 157.5: - WT[i] = 22 - elif 157.5 <= direction < 202.5: - WT[i] = 23 - elif 202.5 <= direction < 247.5: - WT[i] = 24 - elif 247.5 <= direction < 292.5: - WT[i] = 25 - elif 292.5 <= direction < 337.5: - WT[i] = 26 - # light indeterminate flow, corresponding to Lamb’s unclassified type U - elif abs(Z[i]) < 6 and F[i] < 6: - WT[i] = 27 - - slwt_data = calc_slwt(np.int8(WT)) - - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True - tcoord = cube.coord("time") - time_points = tcoord.units.num2date(tcoord.points) - - write_path = cfg['work_dir'] - - wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(WT, long_name="Lamb Weathertypes")) - wt_cube.append(iris.cube.Cube(slwt_data, long_name="Simplified Lamb Weathertypes")) - - wt_cube[0].add_dim_coord(tcoord, 0) - wt_cube[1].add_dim_coord(tcoord, 0) - - iris.save(wt_cube, f"{write_path}/{dataset}.nc") - - #write to csv file - d = {'date': time_points[:], 'lwt': np.int8(WT), 'slwt': slwt_data} - df = pd.DataFrame(data=d) - df.to_csv(write_path + f'/{dataset}.csv', index=False) - - return f'weathertyping for {dataset} done.' - -def plot_mean(wt, cfg, cube, dataset, var_name, wt_string): - - local_path = cfg['plot_dir'] - - ax = plt.axes(projection=ccrs.PlateCarree()) - - imola_rgb = [(25/255, 51/255, 178/255), - (36/255, 70/255, 168/255), - (45/255, 89/255, 159/255), - (57/255, 106/255, 147/255), - (73/255, 123/255, 132/255), - (95/255, 146/255, 123/255), - (122/255, 173/255, 116/255), - (152/255, 203/255, 108/255), - (195/255, 233/255, 102/255), - (255/255, 254/255, 102/255)] - - imola_cmap = ListedColormap(imola_rgb) - - if var_name == "psl": - plt.title(f"{var_name} mean, wt: {wt}") - unit = "[hPa]" - im = iplt.contourf(cube/100, cmap=imola_cmap) - elif var_name == "prcp": - if dataset == "ERA5": - unit = "[m]" - plt.title(f"total {var_name} mean, wt: {wt}") - else: - unit = "[kg m-2 s-1]" - plt.title(f"{var_name} flux mean, wt: {wt}") - im = iplt.contourf(cube, cmap=imola_cmap) - elif var_name == "tas": - unit = "[K]" - plt.title(f"1000 hPa {var_name} mean, wt: {wt}") - im = iplt.contourf(cube, cmap=imola_cmap) - - cb = plt.colorbar(im) - cb.ax.tick_params(labelsize=8) - cb.set_label(label=f"{var_name} mean {unit}") - - gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.5, color='gray', alpha=0.5, linestyle='--') - gl.left_labels = True - gl.bottom_labels = True - gl.top_labels = False - gl.right_labels = False - gl.xlines = True - gl.ylocator = mticker.FixedLocator(np.arange(20,70,5)) - gl.xlocator = mticker.FixedLocator([-10, -5, 0, 5, 10, 15]) - gl.xformatter = LONGITUDE_FORMATTER - gl.yformatter = LATITUDE_FORMATTER - gl.xlabel_style = {'size': 8, 'color': 'black'} - gl.ylabel_style = {'color': 'black', 'size': 8} - - ax.set_extent([-15, 20, 27.5, 62.5]) - - ax.coastlines() - ax.add_feature(cfeature.BORDERS, linestyle=':') - - plt.savefig(os.path.join(local_path, f"{wt_string}_{wt}_{dataset}_{var_name}_mean.png")) - plt.close() - - return - -def rmsd(subarray1, subarray2): - """ - Calculate root mean square difference between two arrays. - """ - return np.sqrt(np.mean((subarray1 - subarray2)**2)) - -def process_prcp_mean(wt, cfg, data, dataset, var_name, wt_string): - - correlation_threshold = 0.7 - rmsd_threshold = 0.00002 - selected_pairs = [] - - pattern_correlation = np.ma.corrcoef(data) - print(pattern_correlation) - - n = len(data) - rmsd_matrix = np.zeros((n, n)) - - for i in range(n): - for j in range(i+1, n): - rmsd_matrix[i][j] = rmsd(data[i], data[j]) - rmsd_matrix[j][i] = rmsd_matrix[i][j] - if pattern_correlation[i][j] >= correlation_threshold and rmsd_matrix[i][j] <= rmsd_threshold: - selected_pairs.append(((i+1, j+1), pattern_correlation[i][j], rmsd_matrix[i][j])) - - print(rmsd_matrix) - - print(selected_pairs) - - work_dir = cfg['work_dir'] - - np.savetxt(f"{work_dir}/rmsd_matrix.txt", rmsd_matrix) - np.savetxt(f"{work_dir}/corr_matrix.txt", pattern_correlation) - - return - -def calculate_wt_means(cfg, cube, dataset: str, var_name: str, wt_string: str="slwt"): - - work_dir = cfg['work_dir'] - - lwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Lamb Weathertypes") - #lwt_cube = iris.load_cube(f"{work_dir}/ERA5.nc", "Lamb Weathertypes") #for EOBS - slwt_cube = iris.load_cube(f"{work_dir}/{dataset}.nc", "Simplified Lamb Weathertypes") - # = iris.load_cube(f"{work_dir}/ERA5.nc", "Simplified Lamb Weathertypes") #for EOBS - lwt = lwt_cube.data[:] - slwt = slwt_cube.data[:] - - if wt_string == "slwt": - tcoord = slwt_cube.coord("time") - elif wt_string == "lwt": - tcoord = lwt_cube.coord("time") - - if wt_string == "slwt": - for wt in range(1,10): - target_indices = np.where(slwt == wt) - dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] - extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) - plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) - elif wt_string == "lwt": - wt_data_prcp = [] - for wt in range(1,28): - target_indices = np.where(lwt == wt) - if len(target_indices[0]) < 1: - continue - dates = [tcoord.units.num2date(tcoord.points[i]) for i in target_indices] - if dataset == "EOBS": - extracted_cube = cube[target_indices]#.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - else: - extracted_cube = cube.extract(iris.Constraint(time=lambda t: t.point in dates[0])) - wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN)#cube[target_indices[0], :, :].collapsed('time', iris.analysis.MEAN) - plot_mean(wt, cfg, wt_cube_mean, dataset, var_name, wt_string) - if var_name == "prcp": - wt_data_prcp.append(wt_cube_mean.data.compressed()) -<<<<<<< HEAD -======= - ->>>>>>> main - if var_name == "prcp": - process_prcp_mean(wt, cfg, wt_data_prcp, dataset, var_name, wt_string) - else: - print("WT_STRING NOT SUPPORTED.") - - return - -def run_my_diagnostic(cfg): - """ - Arguments: - cfg - nested dictionary of metadata - - Returns: - string; runs the user diagnostic - - """ - # assemble the data dictionary keyed by dataset name - # this makes use of the handy group_metadata function that - # orders the data by 'dataset'; the resulting dictionary is - # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} - # where var1, var2 are dicts holding all needed information per variable - my_files_dict = group_metadata(cfg['input_data'].values(), 'dataset') - - #load cube - #keys are datasets: models, era5 - #values are variables - for key, value in my_files_dict.items(): - if key == "ERA5" and len(value) > 1: - wt_preproc = iris.load_cube(value[0]['filename']) - mean_preproc_psl = iris.load_cube(value[1]['filename']) - wt_preproc_prcp = iris.load_cube(value[2]['filename']) - mean_preproc_tas = iris.load_cube(value[3]['filename']) - calculate_weathertypes(cfg, wt_preproc, key) - calculate_wt_means(cfg, wt_preproc_prcp, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_tas, key, var_name="tas", wt_string="lwt") - elif key == "ERA5" and len(value) == 1: - wt_preproc = iris.load_cube(value[0]['filename']) - calculate_weathertypes(cfg, wt_preproc, key) - else: - wt_preproc = iris.load_cube(value[0]['filename']) - mean_preproc_psl = iris.load_cube(value[1]['filename']) - mean_preproc_prcp = iris.load_cube(value[2]['filename']) - mean_preproc_temp = iris.load_cube(value[3]['filename']) - calculate_weathertypes(cfg, wt_preproc, key) - calculate_wt_means(cfg, mean_preproc_psl, key, var_name="psl", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_prcp, key, var_name="prcp", wt_string="lwt") - calculate_wt_means(cfg, mean_preproc_temp, key, var_name="tas", wt_string="lwt") - - - return - -if __name__ == '__main__': - # always use run_diagnostic() to get the config (the preprocessor - # nested dictionary holding all the needed information) - with run_diagnostic() as config: - # list here the functions that need to run - run_my_diagnostic(config) From 085e4f21736a28a9e569527af8b0973d985e0a8c Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sun, 26 May 2024 22:04:24 +0200 Subject: [PATCH 11/29] update --- .../weathertyping_diagnostic_lwt.py | 128 +++++++++++++++--- 1 file changed, 107 insertions(+), 21 deletions(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py index 20306ef548..bbc81a98f7 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -21,6 +21,8 @@ import pandas as pd import json import logging +import warnings +import os # import internal esmvaltool modules here from esmvaltool.diag_scripts.shared import ( @@ -31,7 +33,7 @@ logger = logging.getLogger(os.path.basename(__file__)) - +warnings.filterwarnings("ignore", ".*Collapsing a non-contiguous coordinate*") def get_provenance_record(caption: str, ancestors: list, long_names: list, plot_types: list) -> dict: @@ -108,7 +110,7 @@ def find_intersection(m_list: list) -> list: def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, dataset: str, correlation_thresold: float, - rmse_threshold: float) -> np.array: + rmse_threshold: float, ancestors: list) -> np.array: logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) @@ -151,6 +153,10 @@ def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, ) as file: json.dump(mapping_dict, file) + log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, + ancestors, + ['Lamb Weathertypes'], ['']) + return np.array([np.int8(mapping_dict.get(value, 0)) for value in lwt]) @@ -299,10 +305,14 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: return wt -def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str): +def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, + preproc_path: str, output_file_path: str): work_dir = cfg.get('work_dir') + if not os.path.exists(f'{work_dir}/{output_file_path}'): + os.makedirs(f'{work_dir}/{output_file_path}') + wt = wt_algorithm(cube, dataset) iris.FUTURE.datum_support = True @@ -336,7 +346,7 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str): wt_cube[1].add_dim_coord(tcoord, 0) wt_cube[2].add_dim_coord(tcoord, 0) - iris.save(wt_cube, f'{work_dir}/{dataset}.nc') + iris.save(wt_cube, f'{work_dir}/{output_file_path}/{dataset}.nc') # write to csv file d = { @@ -346,10 +356,11 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str): 'slwt_EOBS': np.int8(slwt_eobs), } df = pd.DataFrame(data=d) - df.to_csv(f'{work_dir}/{dataset}.csv', index=False) + df.to_csv(f'{work_dir}/{output_file_path}/{dataset}.csv', index=False) log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, - ['wt_mapping_dict_ERA5.json', 'wt_mapping_dict_E-OBS.json'], + [preproc_path, f'{work_dir}/wt_mapping_dict_ERA5.json', + f'{work_dir}/wt_mapping_dict_E-OBS.json'], ['Lamb Weathertypes'], ['']) @@ -527,10 +538,12 @@ def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, - var_name: str, wt_string: str): + var_name: str, wt_string: str, preproc_path: str): logger.info('Calculating %s %s means for %s', dataset, var_name, wt_string) + work_dir = cfg.get('work_dir') + if wt_string == 'slwt_ERA5': slwt_era5_cube = wt_cubes[1] tcoord = slwt_era5_cube.coord('time') @@ -589,12 +602,15 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, log_provenance(f'{var_name} means for {wt_string}', f'{dataset}_{var_name}_{wt_string}_means_prov', cfg, - [f'{dataset}.nc', 'ERA5.nc'], [var_name], ['geo']) + [f'{preproc_path}', f'{work_dir}/ERA5.nc'], + [var_name], ['geo']) def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, - var_name: str, wt_string: str): + var_name: str, wt_string: str, preproc_path: str): + + work_dir = cfg.get('work_dir') logger.info('Calculating %s %s anomalies for %s', dataset, var_name, wt_string) @@ -657,12 +673,14 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, log_provenance(f'{var_name} anomaly for {wt_string}', f'{dataset}_{var_name}_{wt_string}_anomalies_prov', cfg, - [f'{dataset}.nc', 'ERA5.nc'], [var_name], ['geo']) + [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['geo']) def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, - var_name: str, wt_string: str): + var_name: str, wt_string: str, preproc_path: str): + + work_dir = cfg.get('work_dir') logger.info('Calculating %s %s standard deviation for %s', dataset, var_name, wt_string) @@ -726,7 +744,7 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, log_provenance(f'{var_name} standard deviation for {wt_string}', f'{dataset}_{var_name}_{wt_string}_std_prov', cfg, - [f'{dataset}.nc', 'ERA5.nc'], [var_name], ['geo']) + [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['geo']) def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, @@ -788,10 +806,13 @@ def write_lwt_to_file(cfg: dict, lwt: np.array, cube: iris.cube.Cube, df.to_csv(write_path + f'/{file_name}.csv', index=False) -def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str): +def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_file_path: str): work_dir = cfg.get('work_dir') + if not os.path.exists(f'{work_dir}/{output_file_path}'): + os.makedirs(f'{work_dir}/{output_file_path}') + wt = wt_algorithm(cube, dataset) iris.FUTURE.datum_support = True @@ -807,12 +828,12 @@ def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str): wt_cube[0].add_dim_coord(tcoord, 0) - iris.save(wt_cube, f'{work_dir}/{dataset}.nc') + iris.save(wt_cube, f'{work_dir}/{output_file_path}/{dataset}.nc') # write to csv file d = {'date': time_points[:], 'lwt': np.int8(wt)} df = pd.DataFrame(data=d) - df.to_csv(f'{work_dir}/{dataset}.csv', index=False) + df.to_csv(f'{work_dir}/{output_file_path}/{dataset}.csv', index=False) def run_my_diagnostic(cfg: dict): @@ -853,6 +874,11 @@ def run_my_diagnostic(cfg: dict): # calculate lwt lwt = wt_algorithm(wt_preproc, key) + era5_ancestors = [value[0].get('filename'), + value[1].get('filename')] + eobs_ancestors = [value[0].get('filename'), + preproc_variables_dict.get('E-OBS')[0].get('filename')] + # calculate simplified lwt based on precipitation patterns slwt_era5 = calculate_slwt_obs( cfg, @@ -861,6 +887,7 @@ def run_my_diagnostic(cfg: dict): key, correlation_threshold, rmse_threshold, + era5_ancestors, ) slwt_eobs = calculate_slwt_obs( cfg, @@ -869,8 +896,10 @@ def run_my_diagnostic(cfg: dict): 'E-OBS', correlation_threshold, rmse_threshold, + eobs_ancestors, ) + # write to file combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, wt_preproc, key) @@ -883,7 +912,10 @@ def run_my_diagnostic(cfg: dict): f'{work_dir}/{key}.nc', 'slwt_eobs') wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - + preproc_path_psl = value[2].get('filename') + preproc_path_prcp = value[3].get('filename') + preproc_path_tas = value[4].get('filename') + # plot means calculate_wt_means( cfg, @@ -892,6 +924,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='psl', wt_string='lwt', + preproc_path=preproc_path_psl, ) calculate_wt_means( cfg, @@ -900,6 +933,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='prcp', wt_string='lwt', + preproc_path=preproc_path_prcp, ) calculate_wt_means( cfg, @@ -908,6 +942,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='tas', wt_string='lwt', + preproc_path=preproc_path_tas, ) calculate_wt_means( cfg, @@ -916,6 +951,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='psl', wt_string='slwt_ERA5', + preproc_path=preproc_path_psl, ) calculate_wt_means( cfg, @@ -924,6 +960,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='prcp', wt_string='slwt_ERA5', + preproc_path=preproc_path_prcp, ) calculate_wt_means( cfg, @@ -932,6 +969,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='tas', wt_string='slwt_ERA5', + preproc_path=preproc_path_tas, ) calculate_wt_means( cfg, @@ -940,6 +978,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='psl', wt_string='slwt_EOBS', + preproc_path=preproc_path_psl, ) calculate_wt_means( cfg, @@ -948,6 +987,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='prcp', wt_string='slwt_EOBS', + preproc_path=preproc_path_prcp, ) calculate_wt_means( cfg, @@ -956,6 +996,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='tas', wt_string='slwt_EOBS', + preproc_path=preproc_path_tas, ) else: if key == 'E-OBS': @@ -965,17 +1006,31 @@ def run_my_diagnostic(cfg: dict): mean_preproc_prcp = iris.load_cube(value[2].get('filename')) mean_preproc_tas = iris.load_cube(value[3].get('filename')) + model_name = key + timerange = value[0].get('timerange').replace('/', '-') + experiment = value[0].get('exp') + ensemble = value[0].get('ensemble') + + output_file_path = f'{model_name}/{experiment}/{ensemble}/{timerange}' + preproc_path = value[0].get('filename') + # calculate weathertypes - calculate_lwt_slwt_model(cfg, wt_preproc, key) + calculate_lwt_slwt_model(cfg, wt_preproc, key, preproc_path, output_file_path) # load wt files - lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') + lwt_cube = iris.load_cube( + f'{work_dir}/{output_file_path}/{key}.nc', 'lwt') slwt_era5_cube = iris.load_cube( - f'{work_dir}/{key}.nc', 'slwt_era5') + f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_era5') slwt_eobs_cube = iris.load_cube( - f'{work_dir}/{key}.nc', 'slwt_eobs') + f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_eobs') wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + + preproc_path_psl = value[1].get('filename') + preproc_path_prcp = value[2].get('filename') + preproc_path_tas = value[3].get('filename') + # plot means calculate_wt_means( cfg, @@ -984,6 +1039,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='psl', wt_string='lwt', + preproc_path=preproc_path_psl, ) calculate_wt_means( cfg, @@ -992,6 +1048,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='prcp', wt_string='lwt', + preproc_path=preproc_path_prcp, ) calculate_wt_means( cfg, @@ -1000,6 +1057,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='tas', wt_string='lwt', + preproc_path=preproc_path_tas, ) calculate_wt_means( cfg, @@ -1008,6 +1066,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='psl', wt_string='slwt_ERA5', + preproc_path=preproc_path_psl, ) calculate_wt_means( cfg, @@ -1016,6 +1075,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='prcp', wt_string='slwt_ERA5', + preproc_path=preproc_path_prcp, ) calculate_wt_means( cfg, @@ -1024,6 +1084,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='tas', wt_string='slwt_ERA5', + preproc_path=preproc_path_tas, ) calculate_wt_means( cfg, @@ -1032,6 +1093,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='psl', wt_string='slwt_EOBS', + preproc_path=preproc_path_psl, ) calculate_wt_means( cfg, @@ -1040,6 +1102,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='prcp', wt_string='slwt_EOBS', + preproc_path=preproc_path_prcp, ) calculate_wt_means( cfg, @@ -1048,6 +1111,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='tas', wt_string='slwt_EOBS', + preproc_path=preproc_path_tas, ) else: # if automatic_slwt is false, just do the lwt for key, value in preproc_variables_dict.items(): @@ -1071,6 +1135,10 @@ def run_my_diagnostic(cfg: dict): lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') wt_cubes = [lwt_cube] + preproc_path_psl = value[2].get('filename') + preproc_path_prcp = value[3].get('filename') + preproc_path_tas = value[4].get('filename') + # plot means calculate_wt_means( cfg, @@ -1079,6 +1147,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='psl', wt_string='lwt', + preproc_path=preproc_path_psl, ) calculate_wt_means( cfg, @@ -1087,6 +1156,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='prcp', wt_string='lwt', + preproc_path=preproc_path_prcp, ) calculate_wt_means( cfg, @@ -1095,6 +1165,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='tas', wt_string='lwt', + preproc_path=preproc_path_tas, ) else: if key == 'E-OBS': @@ -1104,13 +1175,25 @@ def run_my_diagnostic(cfg: dict): mean_preproc_prcp = iris.load_cube(value[2].get('filename')) mean_preproc_tas = iris.load_cube(value[3].get('filename')) + model_name = key + timerange = value[0].get('timerange').replace('/', '-') + experiment = value[0].get('exp') + ensemble = value[0].get('ensemble') + + output_file_path = f'{model_name}/{experiment}/{ensemble}/{timerange}' + # calculate weathertypes - calculate_lwt_model(cfg, wt_preproc, key) + calculate_lwt_model(cfg, wt_preproc, key, output_file_path) # load wt files lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') wt_cubes = [lwt_cube] + # plot means + preproc_path_psl = value[2].get('filename') + preproc_path_prcp = value[3].get('filename') + preproc_path_tas = value[4].get('filename') + # plot means calculate_wt_means( cfg, @@ -1119,6 +1202,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='psl', wt_string='lwt', + preproc_path=preproc_path_psl, ) calculate_wt_means( cfg, @@ -1127,6 +1211,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='prcp', wt_string='lwt', + preproc_path=preproc_path_prcp, ) calculate_wt_means( cfg, @@ -1135,6 +1220,7 @@ def run_my_diagnostic(cfg: dict): key, var_name='tas', wt_string='lwt', + preproc_path=preproc_path_tas, ) From 507434faf12d5530eb3b69d4e0d67c36dde79312 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sun, 9 Jun 2024 21:22:21 +0200 Subject: [PATCH 12/29] added predefined_slwt --- esmvaltool/diag_scripts/weathertyping/main.py | 439 +++++++++++ .../weathertyping_diagnostic_lwt.py | 719 ++++++++---------- esmvaltool/recipes/recipe_weathertyping.yml | 8 +- 3 files changed, 741 insertions(+), 425 deletions(-) create mode 100644 esmvaltool/diag_scripts/weathertyping/main.py diff --git a/esmvaltool/diag_scripts/weathertyping/main.py b/esmvaltool/diag_scripts/weathertyping/main.py new file mode 100644 index 0000000000..5471826e61 --- /dev/null +++ b/esmvaltool/diag_scripts/weathertyping/main.py @@ -0,0 +1,439 @@ +from weathertyping_diagnostic_lwt import * + +# import internal esmvaltool modules here +from esmvaltool.diag_scripts.shared import ( + group_metadata, + run_diagnostic, + ProvenanceLogger +) + + +def run_my_diagnostic(cfg: dict): + ''' + Arguments: + cfg - nested dictionary of metadata + + Returns: + string; runs the user diagnostic + + ''' + # assemble the data dictionary keyed by dataset name + # this makes use of the handy group_metadata function that + # orders the data by 'dataset'; the resulting dictionary is + # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} + # where var1, var2 are dicts holding all needed information per variable + preproc_variables_dict = group_metadata( + cfg.get('input_data').values(), 'dataset') + + correlation_threshold = cfg.get('correlation_threshold') + rmse_threshold = cfg.get('rmse_threshold') + work_dir = cfg.get('work_dir') + plotting = cfg.get('plotting') + automatic_slwt = cfg.get('automatic_slwt') + predefined_slwt = cfg.get('predefined_slwt', False) + + # load cubes and run functions + # key = dataset name, value is dataset + if automatic_slwt: + for key, value in preproc_variables_dict.items(): + if key == 'ERA5': + wt_preproc = iris.load_cube(value[0].get('filename')) + wt_preproc_prcp = iris.load_cube(value[1].get('filename')) + mean_preproc_psl = iris.load_cube(value[2].get('filename')) + mean_preproc_prcp = iris.load_cube(value[3].get('filename')) + mean_preproc_tas = iris.load_cube(value[4].get('filename')) + wt_preproc_prcp_eobs = iris.load_cube( + preproc_variables_dict.get('E-OBS')[0].get('filename') + ) + + # calculate lwt + lwt = wt_algorithm(wt_preproc, key) + + era5_ancestors = [value[0].get('filename'), + value[1].get('filename')] + eobs_ancestors = [value[0].get('filename'), + preproc_variables_dict.get('E-OBS')[0].get('filename')] + + # calculate simplified lwt based on precipitation patterns or use predefined_slwt + if predefined_slwt is False: + slwt_era5 = calculate_slwt_obs( + cfg, + lwt, + wt_preproc_prcp, + key, + correlation_threshold, + rmse_threshold, + era5_ancestors, + ) + slwt_eobs = calculate_slwt_obs( + cfg, + lwt, + wt_preproc_prcp_eobs, + 'E-OBS', + correlation_threshold, + rmse_threshold, + eobs_ancestors, + ) + else: + predefined_slwt = check_mapping_dict_format(predefined_slwt) + write_mapping_dict(work_dir, key, predefined_slwt) + write_mapping_dict(work_dir, "E-OBS", predefined_slwt) + slwt_era5 = map_lwt_to_slwt(lwt, predefined_slwt) + slwt_eobs = map_lwt_to_slwt(lwt, predefined_slwt) + + + # write to file + combine_wt_to_file(cfg, lwt, slwt_era5, + slwt_eobs, wt_preproc, key) + + # load weathertype files as cubes + lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') + slwt_era5_cube = iris.load_cube( + f'{work_dir}/{key}.nc', 'slwt_era5') + slwt_eobs_cube = iris.load_cube( + f'{work_dir}/{key}.nc', 'slwt_eobs') + wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + + preproc_path_psl = value[2].get('filename') + preproc_path_prcp = value[3].get('filename') + preproc_path_tas = value[4].get('filename') + + if plotting: + # plot means + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='lwt', + preproc_path=preproc_path_psl, + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='lwt', + preproc_path=preproc_path_prcp, + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='lwt', + preproc_path=preproc_path_tas, + ) + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='slwt_ERA5', + preproc_path=preproc_path_psl, + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='slwt_ERA5', + preproc_path=preproc_path_prcp, + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='slwt_ERA5', + preproc_path=preproc_path_tas, + ) + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='slwt_EOBS', + preproc_path=preproc_path_psl, + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='slwt_EOBS', + preproc_path=preproc_path_prcp, + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='slwt_EOBS', + preproc_path=preproc_path_tas, + ) + else: + if key == 'E-OBS': + continue + wt_preproc = iris.load_cube(value[0].get('filename')) + mean_preproc_psl = iris.load_cube(value[1].get('filename')) + mean_preproc_prcp = iris.load_cube(value[2].get('filename')) + mean_preproc_tas = iris.load_cube(value[3].get('filename')) + + model_name = key + timerange = value[0].get('timerange').replace('/', '-') + experiment = value[0].get('exp') + ensemble = value[0].get('ensemble') + + output_file_path = f'{model_name}/{experiment}/{ensemble}/{timerange}' + preproc_path = value[0].get('filename') + + # calculate weathertypes + calculate_lwt_slwt_model(cfg, wt_preproc, key, preproc_path, output_file_path) + + # load wt files + lwt_cube = iris.load_cube( + f'{work_dir}/{output_file_path}/{key}.nc', 'lwt') + slwt_era5_cube = iris.load_cube( + f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_era5') + slwt_eobs_cube = iris.load_cube( + f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_eobs') + wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + + + preproc_path_psl = value[1].get('filename') + preproc_path_prcp = value[2].get('filename') + preproc_path_tas = value[3].get('filename') + + if plotting: + # plot means + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='lwt', + preproc_path=preproc_path_psl, + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='lwt', + preproc_path=preproc_path_prcp, + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='lwt', + preproc_path=preproc_path_tas, + ) + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='slwt_ERA5', + preproc_path=preproc_path_psl, + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='slwt_ERA5', + preproc_path=preproc_path_prcp, + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='slwt_ERA5', + preproc_path=preproc_path_tas, + ) + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='slwt_EOBS', + preproc_path=preproc_path_psl, + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='slwt_EOBS', + preproc_path=preproc_path_prcp, + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='slwt_EOBS', + preproc_path=preproc_path_tas, + ) + elif not automatic_slwt: # if automatic_slwt is false, and predefined_slwt is false, just write selected pairs to file + for key, value in preproc_variables_dict.items(): + if key == 'ERA5': + wt_preproc = iris.load_cube(value[0].get('filename')) + wt_preproc_prcp = iris.load_cube(value[1].get('filename')) + mean_preproc_psl = iris.load_cube(value[2].get('filename')) + mean_preproc_prcp = iris.load_cube(value[3].get('filename')) + mean_preproc_tas = iris.load_cube(value[4].get('filename')) + wt_preproc_prcp_eobs = iris.load_cube( + preproc_variables_dict.get('E-OBS')[0].get('filename') + ) + + # calculate lwt + lwt = wt_algorithm(wt_preproc, key) + + # calculate simplified lwt based on precipitation patterns + slwt_era5 = calculate_slwt_obs( + cfg, + lwt, + wt_preproc_prcp, + key, + correlation_threshold, + rmse_threshold, + era5_ancestors, + ) + slwt_eobs = calculate_slwt_obs( + cfg, + lwt, + wt_preproc_prcp_eobs, + 'E-OBS', + correlation_threshold, + rmse_threshold, + eobs_ancestors, + ) + + # write only lwt to file + write_lwt_to_file(cfg, lwt, wt_preproc, key) + + # load weathertype files as cubes + lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') + wt_cubes = [lwt_cube] + + preproc_path_psl = value[2].get('filename') + preproc_path_prcp = value[3].get('filename') + preproc_path_tas = value[4].get('filename') + + if plotting: + # plot means + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='lwt', + preproc_path=preproc_path_psl, + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='lwt', + preproc_path=preproc_path_prcp, + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='lwt', + preproc_path=preproc_path_tas, + ) + else: + if key == 'E-OBS': + continue + wt_preproc = iris.load_cube(value[0].get('filename')) + mean_preproc_psl = iris.load_cube(value[1].get('filename')) + mean_preproc_prcp = iris.load_cube(value[2].get('filename')) + mean_preproc_tas = iris.load_cube(value[3].get('filename')) + + model_name = key + timerange = value[0].get('timerange').replace('/', '-') + experiment = value[0].get('exp') + ensemble = value[0].get('ensemble') + + output_file_path = f'{model_name}/{experiment}/{ensemble}/{timerange}' + + # calculate weathertypes + calculate_lwt_model(cfg, wt_preproc, key, output_file_path) + + # load wt files + lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') + wt_cubes = [lwt_cube] + + # plot means + preproc_path_psl = value[2].get('filename') + preproc_path_prcp = value[3].get('filename') + preproc_path_tas = value[4].get('filename') + + if plotting: + # plot means + calculate_wt_means( + cfg, + mean_preproc_psl, + wt_cubes, + key, + var_name='psl', + wt_string='lwt', + preproc_path=preproc_path_psl, + ) + calculate_wt_means( + cfg, + mean_preproc_prcp, + wt_cubes, + key, + var_name='prcp', + wt_string='lwt', + preproc_path=preproc_path_prcp, + ) + calculate_wt_means( + cfg, + mean_preproc_tas, + wt_cubes, + key, + var_name='tas', + wt_string='lwt', + preproc_path=preproc_path_tas, + ) + + +if __name__ == '__main__': + + # always use run_diagnostic() to get the config (the preprocessor + # nested dictionary holding all the needed information) + with run_diagnostic() as config: + # list here the functions that need to run + run_my_diagnostic(config) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py index bbc81a98f7..0568acd179 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py @@ -15,6 +15,7 @@ import matplotlib.ticker as mticker from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER from matplotlib.colors import ListedColormap +import seaborn as sns # general imports import numpy as np @@ -31,13 +32,15 @@ ProvenanceLogger ) +iris.FUTURE.datum_support = True +iris.FUTURE.save_split_attrs = True logger = logging.getLogger(os.path.basename(__file__)) -warnings.filterwarnings("ignore", ".*Collapsing a non-contiguous coordinate*") +warnings.filterwarnings('ignore', '.*Collapsing a non-contiguous coordinate*') def get_provenance_record(caption: str, ancestors: list, long_names: list, plot_types: list) -> dict: - """Create a provenance record describing the diagnostic data and plots.""" + '''Create a provenance record describing the diagnostic data and plots.''' record = { 'caption': caption, @@ -64,7 +67,7 @@ def get_provenance_record(caption: str, ancestors: list, def log_provenance(caption: str, filename: str, cfg: dict, ancestors: list, long_names: list, plot_types: list): - """Log provenance info.""" + '''Log provenance info.''' provenance_record = get_provenance_record( caption, ancestors, long_names, plot_types) with ProvenanceLogger(cfg) as provenance_logger: @@ -73,7 +76,16 @@ def log_provenance(caption: str, filename: str, cfg: dict, logger.info('Output stored as %s', filename) -def turn_set_to_mapping_dict(list_: list) -> dict: +def turn_list_to_mapping_dict(list_: list) -> dict: + '''Turns a list of combined WT to a dictionary for further + processing. + + Args: + list_ (list): List where entries are lists with related WT + + Returns: + dict: Mapping dicitonary keys are simplified WT, values are Lamb WT + ''' result_dict = {} for i, s in enumerate(list_): @@ -87,6 +99,16 @@ def turn_set_to_mapping_dict(list_: list) -> dict: def get_mapping_dict(selected_pairs: list) -> dict: + '''Get mapping dictionary from list of selected pairs. + + Args: + selected_pairs (list): Selected pairs of WTs based on + precipitation patterns over specified area and + correlation and RSME thresholds defined in recipe.S + + Returns: + dict: Mapping dicitonary keys are simplified WT, values are Lamb WT + ''' mapping_array = [] for i, elem in enumerate(selected_pairs): @@ -103,14 +125,38 @@ def find_intersection(m_list: list) -> list: return m_list merged_tuples = find_intersection(s) - mapping_dict = turn_set_to_mapping_dict(merged_tuples) + mapping_dict = turn_list_to_mapping_dict(merged_tuples) return mapping_dict +def write_mapping_dict(work_dir: str, dataset: str, mapping_dict: dict): + mapping_dict_reformat = convert_dict(mapping_dict) + + with open( + f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w', encoding='utf-8' + ) as file: + json.dump(mapping_dict_reformat, file) + + def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, dataset: str, correlation_thresold: float, rmse_threshold: float, ancestors: list) -> np.array: + '''Calculate simplified weathertypes for observation datasets based on + precipitation patterns over specified area. + + Args: + cfg (dict): Configuration dictionary from recipe + lwt (np.array): Array of Lamb WT + cube (iris.cube.Cube): preprocessor cube to keep time coordinate + dataset (str): Name of dataset + correlation_thresold (float): correlation_threshold + rmse_threshold (float): rsme_threshold + ancestors (list): list of ancestors + + Returns: + np.array: _description_ + ''' logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) @@ -148,19 +194,25 @@ def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, mapping_dict = get_mapping_dict(selected_pairs) - with open( - f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w', encoding='utf-8' - ) as file: - json.dump(mapping_dict, file) + write_mapping_dict(work_dir, dataset, mapping_dict) log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, ancestors, ['Lamb Weathertypes'], ['']) - return np.array([np.int8(mapping_dict.get(value, 0)) for value in lwt]) + return map_lwt_to_slwt(lwt, mapping_dict) def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: + '''Algorithm to calculate Lamb weathertypes. + + Args: + cube (iris.cube.Cube): PSL field of dataset + dataset (str): Name of dataset + + Returns: + np.array: Array of Lamb WT for each day + ''' # lats and lons corresponding to datapoints # 55, 5 -> 1 @@ -307,6 +359,15 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, preproc_path: str, output_file_path: str): + '''Calculate Lamb WT and simplified WT for model data. + + Args: + cfg (dict): Configuration dicitonary from recipe + cube (iris.cube.Cube): PSL field of dataset + dataset (str): Name of dataset + preproc_path (str): Path of ancestors + output_file_path (str): Path to write output file + ''' work_dir = cfg.get('work_dir') @@ -315,27 +376,24 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, wt = wt_algorithm(cube, dataset) - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) with open(f'{work_dir}/wt_mapping_dict_ERA5.json', 'r', encoding='utf-8') as file: - mapping_dict_era5 = json.load(file) + mapping_dict_era5_f = json.load(file) with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', 'r', encoding='utf-8') as file: - mapping_dict_eobs = json.load(file) + mapping_dict_eobs_f = json.load(file) logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) - slwt_era5 = np.array( - [np.int8(mapping_dict_era5.get(f'{value}', 0)) for value in np.int8(wt)] - ) - slwt_eobs = np.array( - [np.int8(mapping_dict_eobs.get(f'{value}', 0)) for value in np.int8(wt)] - ) + mapping_dict_era5 = reverse_convert_dict(mapping_dict_era5_f) + mapping_dict_eobs = reverse_convert_dict(mapping_dict_eobs_f) + + slwt_era5 = map_lwt_to_slwt(wt, mapping_dict_era5) + slwt_eobs = map_lwt_to_slwt(wt, mapping_dict_eobs) wt_cube = iris.cube.CubeList() wt_cube.append(iris.cube.Cube(wt, long_name='lwt')) @@ -365,6 +423,15 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, def get_colormap(colormap_string: str) -> ListedColormap: + '''Get colormaps based on string. + + Args: + colormap_string (str): String to get Colormaps for either + psl, tas or precipitation. + + Returns: + ListedColormap: Choosen Colormap + ''' misc_seq_2_disc = [ (230 / 255, 240 / 255, 240 / 255), @@ -415,6 +482,19 @@ def get_colormap(colormap_string: str) -> ListedColormap: def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, var_name: str, wt_string: str, mode: str): + '''Plot maps. + + Args: + wt (np.array): WT for which statistic was calculated + cfg (dict): Configuration dicitonary from recipe + cube (iris.cube.Cube): Data to be plotted + dataset (str): Name of dataset + var_name (str): Name of variable to be plotted + wt_string (str): lwt, slwt_ERA5 or slwt_EOBS + slwt are calculated based on ERA5 or EOBS + precipitation data, respectively + mode (str): Statistics that is used + ''' logger.info('Plotting %s %s %s for %s %s', dataset, var_name, mode, wt_string, wt) @@ -479,15 +559,86 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, plt.close() -def rmse(subarray1: np.array, subarray2: np.array): - ''' - Calculate root mean square difference between two arrays. - ''' +def rmse(subarray1: np.array, subarray2: np.array) -> np.array: + '''Calculate rsme. + + Args: + subarray1 (np.array): array1 + subarray2 (np.array): array2 + + Returns: + np.array: rsme array + ''' return np.sqrt(np.mean((subarray1 - subarray2) ** 2)) +def convert_dict(original_dict): + new_dict = {} + for key, value in original_dict.items(): + if value not in new_dict: + new_dict[value] = [] + new_dict[value].append(key) + return new_dict + + +def reverse_convert_dict(new_dict): + original_dict = {} + for key, value_list in new_dict.items(): + for original_key in value_list: + original_dict[original_key] = key + return original_dict + + +def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, + rmse_matrix: np.array, dataset: str): + + work_dir = cfg.get('work_dir') + + labels = np.arange(1,28) + + mask = np.zeros_like(pattern_correlation_matrix) + mask[np.triu_indices_from(mask)] = True + with sns.axes_style("white"): + plt.title('Correlation Matrix') + ax = sns.heatmap(pattern_correlation_matrix, mask=mask, + square=True, annot=True, annot_kws={"size": 5}, + cmap="seismic", xticklabels=labels, + yticklabels=labels) + ax.set_xlabel('lwt', fontsize=8, rotation=90) + ax.set_ylabel('lwt', fontsize=8) + plt.savefig( + os.path.join( + work_dir, f'correlation_matrix_{dataset}.png') + ) + plt.close() + + mask = np.zeros_like(rmse_matrix) + mask[np.triu_indices_from(mask)] = True + with sns.axes_style("white"): + plt.title('RMSE Matrix') + ax = sns.heatmap(rmse_matrix, mask=mask, + square=True, annot=True, annot_kws={"size": 5}, + cmap="seismic", xticklabels=labels, + yticklabels=labels) + ax.set_xlabel('lwt', fontsize=8, rotation=90) + ax.set_ylabel('lwt', fontsize=8) + plt.savefig( + os.path.join( + work_dir, f'rmse_matrix_{dataset}.png') + ) + plt.close() + + def write_corr_rmse_to_csv(cfg: dict, pattern_correlation_matrix: np.array, rmse_matrix: np.array, dataset: str): + '''Write correlation and rsme matrix to csv files + + Args: + cfg (dict): Configuration dictionary from recipe + pattern_correlation_matrix (np.array): Correlation matrix + rmse_matrix (np.array): RSME matrix + dataset (str): Name of dataset + ''' logger.info('Writing corr and rsme matrices for %s', dataset) @@ -508,6 +659,22 @@ def write_corr_rmse_to_csv(cfg: dict, pattern_correlation_matrix: np.array, def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, rmse_threshold: float, dataset: str) -> list: + '''Process precipitation fields for specified area to get + a list of selected pairs of weathertypes with the + highest correlation (higher than correlation_threshold) + and smallest RSME (smaller than rsme_threshold) for further + processing and simplifying the WT. + + Args: + cfg (dict): Configuration dictionary from recipe + data (np.array): Precipitation data + correlation_threshold (float): Correlation threshold + rmse_threshold (float): RMSE threshold + dataset (str): Name of dataset + + Returns: + list: Selected pairs of WT. This is passed to get_mapping_dict + ''' logger.info('Calculating corr and rsme matrices for %s', dataset) @@ -532,6 +699,9 @@ def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, # write matrices to csv write_corr_rmse_to_csv( cfg, pattern_correlation_matrix, rmse_matrix, dataset) + # plot heatmaps for matrices + plot_corr_rmse_heatmaps( + cfg, pattern_correlation_matrix, rmse_matrix, dataset) return selected_pairs @@ -539,6 +709,20 @@ def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, var_name: str, wt_string: str, preproc_path: str): + '''Calculate means of fields of each weathertype + + Args: + cfg (dict): Configuration dictionary from recipe + cube (iris.cube.Cube): Cube with variable data + wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 + and slwt_EOBS + dataset (str): Name of dataset + var_name (str): Name of variable + wt_string (str): lwt, slwt_ERA5 or slwt_EOBS + slwt are calculated based on ERA5 or EOBS + precipitation data, respectively + preproc_path (str): Ancestor path + ''' logger.info('Calculating %s %s means for %s', dataset, var_name, wt_string) @@ -557,8 +741,16 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, tcoord = lwt_cube.coord('time') lwt = lwt_cube.data[:] + num_slwt_era5 = len(np.unique(slwt_era5)) + num_slwt_eobs = len(np.unique(slwt_eobs)) + + if num_slwt_eobs != num_slwt_era5: + logger.info('calculate_wt_means - CAUTION: unequal number of \ + slwt_era5 (%s) \ and slwt_eobs (%s)!', + num_slwt_era5, num_slwt_eobs) + if 'slwt' in wt_string: - for wt in range(1, 10): + for wt in range(1, max(num_slwt_era5, num_slwt_eobs)): if wt_string == 'slwt_ERA5': target_indices = np.where(slwt_era5 == wt) elif wt_string == 'slwt_EOBS': @@ -609,6 +801,20 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, var_name: str, wt_string: str, preproc_path: str): + '''Calculate anomalies of fields of each weathertype + + Args: + cfg (dict): Configuration dictionary from recipe + cube (iris.cube.Cube): Cube with variable data + wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 + and slwt_EOBS + dataset (str): Name of dataset + var_name (str): Name of variable + wt_string (str): lwt, slwt_ERA5 or slwt_EOBS + slwt are calculated based on ERA5 or EOBS + precipitation data, respectively + preproc_path (str): Ancestor path + ''' work_dir = cfg.get('work_dir') @@ -628,8 +834,16 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, tcoord = lwt_cube.coord('time') lwt = lwt_cube.data[:] + num_slwt_era5 = len(np.unique(slwt_era5)) + num_slwt_eobs = len(np.unique(slwt_eobs)) + + if num_slwt_eobs != num_slwt_era5: + logger.info('calculate_wt_means - CAUTION: unequal number of \ + slwt_era5 (%s) \ and slwt_eobs (%s)!', + num_slwt_era5, num_slwt_eobs) + if 'slwt' in wt_string: - for wt in range(1, 10): + for wt in range(1, max(num_slwt_era5, num_slwt_eobs)): if wt_string == 'slwt_ERA5': target_indices = np.where(slwt_era5 == wt) elif wt_string == 'slwt_EOBS': @@ -679,6 +893,20 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, var_name: str, wt_string: str, preproc_path: str): + '''Calculate standard deviation of fields of each weathertype + + Args: + cfg (dict): Configuration dictionary from recipe + cube (iris.cube.Cube): Cube with variable data + wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 + and slwt_EOBS + dataset (str): Name of dataset + var_name (str): Name of variable + wt_string (str): lwt, slwt_ERA5 or slwt_EOBS + slwt are calculated based on ERA5 or EOBS + precipitation data, respectively + preproc_path (str): Ancestor path + ''' work_dir = cfg.get('work_dir') @@ -698,8 +926,16 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, tcoord = lwt_cube.coord('time') lwt = lwt_cube.data[:] + num_slwt_era5 = len(np.unique(slwt_era5)) + num_slwt_eobs = len(np.unique(slwt_eobs)) + + if num_slwt_eobs != num_slwt_era5: + logger.info('calculate_wt_means - CAUTION: unequal number of \ + slwt_era5 (%s) \ and slwt_eobs (%s)!', + num_slwt_era5, num_slwt_eobs) + if 'slwt' in wt_string: - for wt in range(1, 10): + for wt in range(1, max(num_slwt_era5, num_slwt_eobs)): if wt_string == 'slwt_ERA5': target_indices = np.where(slwt_era5 == wt) elif wt_string == 'slwt_EOBS': @@ -750,11 +986,19 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, slwt_eobs: np.array, cube: iris.cube.Cube, file_name: str): + '''Combine lwt and slwt arrays to one file + + Args: + cfg (dict): Configuration dictionary from recipe + lwt (np.array): lwt array + slwt_era5 (np.array): slwt_era5 array + slwt_eobs (np.array): slwt_eobs array + cube (iris.cube.Cube): Cube of data to keep time coordinate + file_name (str): Name of output file + ''' logger.info('Writing weathertypes to %s', file_name) - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) @@ -784,11 +1028,17 @@ def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, def write_lwt_to_file(cfg: dict, lwt: np.array, cube: iris.cube.Cube, file_name: str): + '''Write only lwt to file + + Args: + cfg (dict): Configuration dictionary from recipe + lwt (np.array): lwt array + cube (iris.cube.Cube): Cube to keep time coordinate + file_name (str): Output filename + ''' logger.info('Writing Lamb Weathertype to %s', file_name) - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) @@ -807,6 +1057,14 @@ def write_lwt_to_file(cfg: dict, lwt: np.array, cube: iris.cube.Cube, def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_file_path: str): + '''Calculate lwt for model data + + Args: + cfg (dict): Configuration dictionary from recipe + cube (iris.cube.Cube): Cube to keep time coordinate + dataset (str): Name of dataset + output_file_path (str): Path to write output + ''' work_dir = cfg.get('work_dir') @@ -815,8 +1073,6 @@ def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_fi wt = wt_algorithm(cube, dataset) - iris.FUTURE.datum_support = True - iris.FUTURE.save_split_attrs = True tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) @@ -836,398 +1092,17 @@ def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_fi df.to_csv(f'{work_dir}/{output_file_path}/{dataset}.csv', index=False) -def run_my_diagnostic(cfg: dict): - ''' - Arguments: - cfg - nested dictionary of metadata - - Returns: - string; runs the user diagnostic - - ''' - # assemble the data dictionary keyed by dataset name - # this makes use of the handy group_metadata function that - # orders the data by 'dataset'; the resulting dictionary is - # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} - # where var1, var2 are dicts holding all needed information per variable - preproc_variables_dict = group_metadata( - cfg.get('input_data').values(), 'dataset') - - correlation_threshold = cfg.get('correlation_threshold') - rmse_threshold = cfg.get('rmse_threshold') - work_dir = cfg.get('work_dir') +def map_lwt_to_slwt(lwt:np.array, mapping_dict: dict): - # load cubes and run functions - # key = dataset name, value is dataset - if cfg.get('automatic_slwt'): - for key, value in preproc_variables_dict.items(): - if key == 'ERA5': - wt_preproc = iris.load_cube(value[0].get('filename')) - wt_preproc_prcp = iris.load_cube(value[1].get('filename')) - mean_preproc_psl = iris.load_cube(value[2].get('filename')) - mean_preproc_prcp = iris.load_cube(value[3].get('filename')) - mean_preproc_tas = iris.load_cube(value[4].get('filename')) - wt_preproc_prcp_eobs = iris.load_cube( - preproc_variables_dict.get('E-OBS')[0].get('filename') - ) + return np.array([np.int8(mapping_dict.get(value, 0)) for value in lwt]) - # calculate lwt - lwt = wt_algorithm(wt_preproc, key) - - era5_ancestors = [value[0].get('filename'), - value[1].get('filename')] - eobs_ancestors = [value[0].get('filename'), - preproc_variables_dict.get('E-OBS')[0].get('filename')] - - # calculate simplified lwt based on precipitation patterns - slwt_era5 = calculate_slwt_obs( - cfg, - lwt, - wt_preproc_prcp, - key, - correlation_threshold, - rmse_threshold, - era5_ancestors, - ) - slwt_eobs = calculate_slwt_obs( - cfg, - lwt, - wt_preproc_prcp_eobs, - 'E-OBS', - correlation_threshold, - rmse_threshold, - eobs_ancestors, - ) +def check_mapping_dict_format(mapping_dict: dict): - # write to file - combine_wt_to_file(cfg, lwt, slwt_era5, - slwt_eobs, wt_preproc, key) - - # load weathertype files as cubes - lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') - slwt_era5_cube = iris.load_cube( - f'{work_dir}/{key}.nc', 'slwt_era5') - slwt_eobs_cube = iris.load_cube( - f'{work_dir}/{key}.nc', 'slwt_eobs') - wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - - preproc_path_psl = value[2].get('filename') - preproc_path_prcp = value[3].get('filename') - preproc_path_tas = value[4].get('filename') - - # plot means - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='lwt', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='lwt', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='lwt', - preproc_path=preproc_path_tas, - ) - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='slwt_ERA5', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='slwt_ERA5', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='slwt_ERA5', - preproc_path=preproc_path_tas, - ) - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='slwt_EOBS', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='slwt_EOBS', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='slwt_EOBS', - preproc_path=preproc_path_tas, - ) - else: - if key == 'E-OBS': - continue - wt_preproc = iris.load_cube(value[0].get('filename')) - mean_preproc_psl = iris.load_cube(value[1].get('filename')) - mean_preproc_prcp = iris.load_cube(value[2].get('filename')) - mean_preproc_tas = iris.load_cube(value[3].get('filename')) - - model_name = key - timerange = value[0].get('timerange').replace('/', '-') - experiment = value[0].get('exp') - ensemble = value[0].get('ensemble') - - output_file_path = f'{model_name}/{experiment}/{ensemble}/{timerange}' - preproc_path = value[0].get('filename') - - # calculate weathertypes - calculate_lwt_slwt_model(cfg, wt_preproc, key, preproc_path, output_file_path) - - # load wt files - lwt_cube = iris.load_cube( - f'{work_dir}/{output_file_path}/{key}.nc', 'lwt') - slwt_era5_cube = iris.load_cube( - f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_era5') - slwt_eobs_cube = iris.load_cube( - f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_eobs') - wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - - - preproc_path_psl = value[1].get('filename') - preproc_path_prcp = value[2].get('filename') - preproc_path_tas = value[3].get('filename') - - # plot means - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='lwt', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='lwt', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='lwt', - preproc_path=preproc_path_tas, - ) - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='slwt_ERA5', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='slwt_ERA5', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='slwt_ERA5', - preproc_path=preproc_path_tas, - ) - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='slwt_EOBS', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='slwt_EOBS', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='slwt_EOBS', - preproc_path=preproc_path_tas, - ) - else: # if automatic_slwt is false, just do the lwt - for key, value in preproc_variables_dict.items(): - if key == 'ERA5': - wt_preproc = iris.load_cube(value[0].get('filename')) - wt_preproc_prcp = iris.load_cube(value[1].get('filename')) - mean_preproc_psl = iris.load_cube(value[2].get('filename')) - mean_preproc_prcp = iris.load_cube(value[3].get('filename')) - mean_preproc_tas = iris.load_cube(value[4].get('filename')) - wt_preproc_prcp_eobs = iris.load_cube( - preproc_variables_dict.get('E-OBS')[0].get('filename') - ) - - # calculate lwt - lwt = wt_algorithm(wt_preproc, key) - - # write to file - write_lwt_to_file(cfg, lwt, wt_preproc, key) - - # load weathertype files as cubes - lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') - wt_cubes = [lwt_cube] - - preproc_path_psl = value[2].get('filename') - preproc_path_prcp = value[3].get('filename') - preproc_path_tas = value[4].get('filename') - - # plot means - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='lwt', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='lwt', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='lwt', - preproc_path=preproc_path_tas, - ) - else: - if key == 'E-OBS': - continue - wt_preproc = iris.load_cube(value[0].get('filename')) - mean_preproc_psl = iris.load_cube(value[1].get('filename')) - mean_preproc_prcp = iris.load_cube(value[2].get('filename')) - mean_preproc_tas = iris.load_cube(value[3].get('filename')) - - model_name = key - timerange = value[0].get('timerange').replace('/', '-') - experiment = value[0].get('exp') - ensemble = value[0].get('ensemble') - - output_file_path = f'{model_name}/{experiment}/{ensemble}/{timerange}' - - # calculate weathertypes - calculate_lwt_model(cfg, wt_preproc, key, output_file_path) - - # load wt files - lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') - wt_cubes = [lwt_cube] - - # plot means - preproc_path_psl = value[2].get('filename') - preproc_path_prcp = value[3].get('filename') - preproc_path_tas = value[4].get('filename') - - # plot means - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='lwt', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='lwt', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='lwt', - preproc_path=preproc_path_tas, - ) - + if isinstance(mapping_dict.get(list(mapping_dict.keys())[0]), list): + dict_ = reverse_convert_dict(mapping_dict) + else: + dict_ = mapping_dict -if __name__ == '__main__': + return dict_ - # always use run_diagnostic() to get the config (the preprocessor - # nested dictionary holding all the needed information) - with run_diagnostic() as config: - # list here the functions that need to run - run_my_diagnostic(config) diff --git a/esmvaltool/recipes/recipe_weathertyping.yml b/esmvaltool/recipes/recipe_weathertyping.yml index 62c43de173..1806c37e80 100644 --- a/esmvaltool/recipes/recipe_weathertyping.yml +++ b/esmvaltool/recipes/recipe_weathertyping.yml @@ -258,8 +258,8 @@ diagnostics: activity: CMIP exp: historical mip: day - short_name: ta - preprocessor: mean_preproc_temp + short_name: tas + preprocessor: mean_preproc start_year: 1950 end_year: 2014 additional_datasets: @@ -270,4 +270,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - script: weathertyping/weathertyping.py + predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: false + script: ../diag_scripts/weathertyping/main.py From a90da22576250c822a5987cd99d6e29eebac232f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Kroi=C3=9Fenbrunner?= Date: Sun, 16 Jun 2024 20:45:28 +0200 Subject: [PATCH 13/29] mainly doc, also rewrite functions --- doc/sphinx/source/recipes/index.rst | 1 + .../source/recipes/recipe_weathertyping.rst | 88 +++++ esmvaltool/config-references.yml | 6 + ...athertyping_diagnostic_lwt.py => utils.py} | 307 +++++++++++++----- .../{main.py => weathertyping.py} | 24 +- esmvaltool/recipes/recipe_weathertyping.yml | 48 +-- esmvaltool/references/jones93ijc.bibtex | 15 + esmvaltool/references/maraun21jgr.bibtex | 16 + 8 files changed, 389 insertions(+), 116 deletions(-) create mode 100644 doc/sphinx/source/recipes/recipe_weathertyping.rst rename esmvaltool/diag_scripts/weathertyping/{weathertyping_diagnostic_lwt.py => utils.py} (84%) rename esmvaltool/diag_scripts/weathertyping/{main.py => weathertyping.py} (96%) create mode 100644 esmvaltool/references/jones93ijc.bibtex create mode 100644 esmvaltool/references/maraun21jgr.bibtex diff --git a/doc/sphinx/source/recipes/index.rst b/doc/sphinx/source/recipes/index.rst index 0f0ce7667d..04d0455b1c 100644 --- a/doc/sphinx/source/recipes/index.rst +++ b/doc/sphinx/source/recipes/index.rst @@ -63,6 +63,7 @@ Atmosphere recipe_validation recipe_radiation_budget recipe_aod_aeronet_assess + recipe_weathertyping Climate metrics ^^^^^^^^^^^^^^^ diff --git a/doc/sphinx/source/recipes/recipe_weathertyping.rst b/doc/sphinx/source/recipes/recipe_weathertyping.rst new file mode 100644 index 0000000000..612b55d974 --- /dev/null +++ b/doc/sphinx/source/recipes/recipe_weathertyping.rst @@ -0,0 +1,88 @@ +.. _recipes_weathertyping: + +Lamb Weathertypes +===== + +Overview +-------- + +A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, +correlations between weathertypes and precipitation patterns over a given are can be calculated +and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as +anomalies and standard deviations can be plotted. + + +Available recipes and diagnostics +--------------------------------- + +Recipes are stored in esmvaltool/recipes/ + + * recipe_weathertyping.yml + +Diagnostics are stored in esmvaltool/diag_scripts/weathertyping/ + + * weathertyping.py: calculate lamb and simplified WT, plot mean, anomalies and std for each WT for psl, tas, prcp + + +User settings in recipe +----------------------- + +#. weathertyping.py + + *Required settings for script* + + *Optional settings for script* + + * correlation_threshold: correlation threshold for selecting similar WT pairs, only needed if automatic_slwt==True and predefined_slwt==False. default=0.9 + * rmse_threshold: rmse threshold for selecting similar WT pairs, only needed if automatic_slwt==True and predefined_slwt==False. default=0.002 + * plotting: if true, create plots of means, anomalies and std for psl, tas, prcp + * automatic_slwt: if true, automatically combine WT with similar precipitation patterns over specified area (via thresholds of correlation and rmse OR via predefined_slwt) + * predefined_slwt: dictionary of mappings between weathertypes + +.. note:: + + predefined_slwt can be a dictionary where keys are slwt and the values are arrays of lwt OR where keys are lwt and values are slwt + + *Required settings for variables* + + *Optional settings for variables* + + *Required settings for preprocessor* + + *Optional settings for preprocessor* + + *Color tables* + + +Variables +--------- + +* psl (atmos, day, time longitude latitude) +* tas (atmos, day, time longitude latitude) +* tp (atmos, day, time longitude latitude) +* pr (atmos, day, time longitude latitude) + + +Observations and reformat scripts +--------------------------------- + +*Note: (1) obs4MIPs data can be used directly without any preprocessing; +(2) see headers of reformat scripts for non-obs4MIPs data for download +instructions.* + +* E-OBS: European Climate Assessment & Dataset gridded observationl daily precipitation sum + +References +---------- + +* Maraun, D., Truhetz, H., & Schaffer, A. (2021). Regional climate model biases, their dependence on synoptic circulation biases and the potential for bias adjustment: A process-oriented evaluation of the Austrian regional climate projections. Journal of Geophysical Research: Atmospheres, 126, e2020JD032824. https://doi.org/10.1029/2020JD032824 +* Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 + +Example plots +------------- + +.. _fig_mynewdiag_1: +.. figure:: /recipes/figures/weathertyping/awesome1.png + :align: center + + Add figure caption here. diff --git a/esmvaltool/config-references.yml b/esmvaltool/config-references.yml index fa3d45bc78..2083c1354a 100644 --- a/esmvaltool/config-references.yml +++ b/esmvaltool/config-references.yml @@ -286,6 +286,11 @@ authors: name: Juckes, Martin institute: BADC, UK orcid: + jury_martin: + name: Jury, Martin + institute: WEGC, Austria + e-mail: martin.jury@uni-graz.at + orcid: https://orcid.org/0000-0003-0590-7843 kadygrov_nikolay: name: Kadygrov, Nikolay institute: IPSL, France @@ -320,6 +325,7 @@ authors: institute: WEGC, Austria email: thomas.kroissenbrunner@uni-graz.at github: thomaskroi1996 + orcid: kuehbacher_birgit: name: Kuehbacher, Birgit institute: DLR, Germany diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py b/esmvaltool/diag_scripts/weathertyping/utils.py similarity index 84% rename from esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py rename to esmvaltool/diag_scripts/weathertyping/utils.py index 0568acd179..cd5544e912 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping_diagnostic_lwt.py +++ b/esmvaltool/diag_scripts/weathertyping/utils.py @@ -38,6 +38,7 @@ logger = logging.getLogger(os.path.basename(__file__)) warnings.filterwarnings('ignore', '.*Collapsing a non-contiguous coordinate*') + def get_provenance_record(caption: str, ancestors: list, long_names: list, plot_types: list) -> dict: '''Create a provenance record describing the diagnostic data and plots.''' @@ -85,7 +86,7 @@ def turn_list_to_mapping_dict(list_: list) -> dict: Returns: dict: Mapping dicitonary keys are simplified WT, values are Lamb WT - ''' + ''' result_dict = {} for i, s in enumerate(list_): @@ -108,7 +109,7 @@ def get_mapping_dict(selected_pairs: list) -> dict: Returns: dict: Mapping dicitonary keys are simplified WT, values are Lamb WT - ''' + ''' mapping_array = [] for i, elem in enumerate(selected_pairs): @@ -156,10 +157,9 @@ def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, Returns: np.array: _description_ - ''' - - logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) + ''' + logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) work_dir = cfg.get('work_dir') tcoord = cube.coord('time') @@ -203,8 +203,149 @@ def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, return map_lwt_to_slwt(lwt, mapping_dict) +def calc_const(): + '''Calculate constants for weathertyping algorithm. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification scheme. + Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 + + Returns: + tuple: The four constants needed for WT calculation. + ''' + + const1 = 1 / np.cos(45 * np.pi / 180) + const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) + const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) + const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) + + return const1, const2, const3, const4 + + +def calc_westerly_flow(cube: iris.cube.Cube) -> np.array: + '''Calculate the westerly flow over area. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification scheme. + Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 + + Args: + cube (iris.cube.Cube): Cube of psl data. + + Returns: + np.array: westerly flow + ''' + + return 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * ( + cube.data[:, 3, 2] + cube.data[:, 3, 4] + ) + + +def calc_southerly_flow(cube: iris.cube.Cube, const1: float) -> np.array: + '''Calculate the southerly flow over area. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification scheme. + Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 + + Args: + cube (iris.cube.Cube): Cube of psl data. + const1 (float): const1 + + Returns: + np.array: southerly flow + ''' + + return const1 * ( + 1 / 4 * (cube.data[:, 3, 4] + 2 * + cube.data[:, 2, 4] + cube.data[:, 1, 4]) + - 1 / 4 * (cube.data[:, 3, 2] + 2 * + cube.data[:, 2, 2] + cube.data[:, 1, 2]) + ) + + +def calc_resultant_flow(w: np.array, s: np.array) -> np.array: + '''Calculate the resultant flow. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification scheme. + Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 + + Args: + w (np.array): westerly flow. + s (np.array): southerly flow + + Returns: + np.array: resultant flow + ''' + return (s**2 + w**2) ** (1 / 2) + + +def calc_westerly_shear_velocity(cube: iris.cube.Cube, const2: float, const3: float) -> np.array: + '''Calculate westerly shear velocity. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification scheme. + Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 + + Args: + cube (iris.cube.Cube): cube of psl data + const2 (float): const2 + const3 (float): const3 + + Returns: + np.array: westerly shear velocity + ''' + return const2 * ( + 1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) + - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) + ) - const3 * ( + 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) + - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4]) + ) + + +def calc_southerly_shear_velocity(cube: iris.cube.Cube, const4: float) -> np.array: + '''Calculate southerly shear velocity. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification scheme. + Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 + + Args: + cube (iris.cube.Cube): cube of psl data + const4 (float): const4 + + Returns: + np.array: southerly shear velocity + ''' + return const4 * ( + 1 / 4 * (cube.data[:, 3, 6] + 2 * + cube.data[:, 2, 6] + cube.data[:, 1, 6]) + - 1 / 4 * (cube.data[:, 3, 4] + 2 * + cube.data[:, 2, 4] + cube.data[:, 1, 4]) + - 1 / 4 * (cube.data[:, 3, 2] + 2 * + cube.data[:, 2, 2] + cube.data[:, 1, 2]) + + 1 / 4 * (cube.data[:, 3, 0] + 2 * + cube.data[:, 2, 0] + cube.data[:, 1, 0]) + ) + + +def calc_total_shear_velocity(zw: np.array, zs: np.array) -> np.array: + '''Calculate total shear velocity. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification scheme. + Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 + + Args: + zw (np.array): westerly shear velocity + zs (np.array): southerly shear velocity + + Returns: + np.array: total shear velocity + ''' + return zw + zs + + def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: '''Algorithm to calculate Lamb weathertypes. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification scheme. + Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: cube (iris.cube.Cube): PSL field of dataset @@ -212,7 +353,7 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: Returns: np.array: Array of Lamb WT for each day - ''' + ''' # lats and lons corresponding to datapoints # 55, 5 -> 1 @@ -237,45 +378,20 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: logger.info('Calculating Lamb Weathertypes for %s', dataset) - const1 = 1 / np.cos(45 * np.pi / 180) - const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) - const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) - const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) + const1, const2, const3, const4 = calc_const() # westerly flow - w = 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * ( - cube.data[:, 3, 2] + cube.data[:, 3, 4] - ) + w = calc_westerly_flow(cube) # southerly flow - s = const1 * ( - 1 / 4 * (cube.data[:, 3, 4] + 2 * - cube.data[:, 2, 4] + cube.data[:, 1, 4]) - - 1 / 4 * (cube.data[:, 3, 2] + 2 * - cube.data[:, 2, 2] + cube.data[:, 1, 2]) - ) + s = calc_southerly_flow(cube, const1) # resultant flow - f = (s**2 + w**2) ** (1 / 2) + f = calc_resultant_flow(w, s) # westerly shear vorticity - zw = const2 * ( - 1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - ) - const3 * ( - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4]) - ) + zw = calc_westerly_shear_velocity(cube, const2, const3) # southerly shear vorticity - zs = const4 * ( - 1 / 4 * (cube.data[:, 3, 6] + 2 * - cube.data[:, 2, 6] + cube.data[:, 1, 6]) - - 1 / 4 * (cube.data[:, 3, 4] + 2 * - cube.data[:, 2, 4] + cube.data[:, 1, 4]) - - 1 / 4 * (cube.data[:, 3, 2] + 2 * - cube.data[:, 2, 2] + cube.data[:, 1, 2]) - + 1 / 4 * (cube.data[:, 3, 0] + 2 * - cube.data[:, 2, 0] + cube.data[:, 1, 0]) - ) + zs = calc_southerly_shear_velocity(cube, const4) # total shear vorticity - z = zw + zs + z = calc_total_shear_velocity(zw, zs) wt = np.zeros(len(z)) @@ -357,7 +473,7 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: return wt -def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, +def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, preproc_path: str, output_file_path: str): '''Calculate Lamb WT and simplified WT for model data. @@ -367,7 +483,7 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, dataset (str): Name of dataset preproc_path (str): Path of ancestors output_file_path (str): Path to write output file - ''' + ''' work_dir = cfg.get('work_dir') @@ -417,7 +533,7 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, df.to_csv(f'{work_dir}/{output_file_path}/{dataset}.csv', index=False) log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, - [preproc_path, f'{work_dir}/wt_mapping_dict_ERA5.json', + [preproc_path, f'{work_dir}/wt_mapping_dict_ERA5.json', f'{work_dir}/wt_mapping_dict_E-OBS.json'], ['Lamb Weathertypes'], ['']) @@ -431,7 +547,7 @@ def get_colormap(colormap_string: str) -> ListedColormap: Returns: ListedColormap: Choosen Colormap - ''' + ''' misc_seq_2_disc = [ (230 / 255, 240 / 255, 240 / 255), @@ -494,7 +610,7 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, slwt are calculated based on ERA5 or EOBS precipitation data, respectively mode (str): Statistics that is used - ''' + ''' logger.info('Plotting %s %s %s for %s %s', dataset, var_name, mode, wt_string, wt) @@ -568,41 +684,66 @@ def rmse(subarray1: np.array, subarray2: np.array) -> np.array: Returns: np.array: rsme array - ''' + ''' return np.sqrt(np.mean((subarray1 - subarray2) ** 2)) -def convert_dict(original_dict): +def convert_dict(dict_: dict) -> dict: + '''Convert mapping dictionary from {lwt: slwt, ...} format to {slwt: [lwt1, lwt2], ...}. + + Args: + dict_ (dict): Dict in the {lwt: slwt, ...} format + + Returns: + dict: Dict in the {slwt: [lwt1, lwt2], ...} format + ''' + new_dict = {} - for key, value in original_dict.items(): + for key, value in dict_.items(): if value not in new_dict: new_dict[value] = [] new_dict[value].append(key) return new_dict -def reverse_convert_dict(new_dict): - original_dict = {} - for key, value_list in new_dict.items(): +def reverse_convert_dict(dict_: dict) -> dict: + '''Convert mapping dictionary from {slwt: [lwt1, lwt2], ...} format to {lwt: slwt, ...}. + + Args: + original_dict (dict): Dict in the {slwt: [lwt1, lwt2], ...}format + + Returns: + dict: Dict in the format {lwt: slwt, ...} + ''' + new_dict = {} + for key, value_list in dict_.items(): for original_key in value_list: - original_dict[original_key] = key - return original_dict + new_dict[original_key] = key + return new_dict def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, - rmse_matrix: np.array, dataset: str): - + rmse_matrix: np.array, dataset: str): + '''Plot heatmaps for correlation and rmse matrices + + Args: + cfg (dict): cfg dict from recipe + pattern_correlation_matrix (np.array): pattern correlation matrix + rmse_matrix (np.array): rmse matrix + dataset (str): string of dataset + ''' + work_dir = cfg.get('work_dir') - labels = np.arange(1,28) + labels = np.arange(1, 28) mask = np.zeros_like(pattern_correlation_matrix) mask[np.triu_indices_from(mask)] = True - with sns.axes_style("white"): + with sns.axes_style('white'): plt.title('Correlation Matrix') ax = sns.heatmap(pattern_correlation_matrix, mask=mask, - square=True, annot=True, annot_kws={"size": 5}, - cmap="seismic", xticklabels=labels, + square=True, annot=True, annot_kws={'size': 5}, + cmap='seismic', xticklabels=labels, yticklabels=labels) ax.set_xlabel('lwt', fontsize=8, rotation=90) ax.set_ylabel('lwt', fontsize=8) @@ -614,11 +755,11 @@ def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, mask = np.zeros_like(rmse_matrix) mask[np.triu_indices_from(mask)] = True - with sns.axes_style("white"): + with sns.axes_style('white'): plt.title('RMSE Matrix') ax = sns.heatmap(rmse_matrix, mask=mask, - square=True, annot=True, annot_kws={"size": 5}, - cmap="seismic", xticklabels=labels, + square=True, annot=True, annot_kws={'size': 5}, + cmap='seismic', xticklabels=labels, yticklabels=labels) ax.set_xlabel('lwt', fontsize=8, rotation=90) ax.set_ylabel('lwt', fontsize=8) @@ -638,7 +779,7 @@ def write_corr_rmse_to_csv(cfg: dict, pattern_correlation_matrix: np.array, pattern_correlation_matrix (np.array): Correlation matrix rmse_matrix (np.array): RSME matrix dataset (str): Name of dataset - ''' + ''' logger.info('Writing corr and rsme matrices for %s', dataset) @@ -674,7 +815,7 @@ def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, Returns: list: Selected pairs of WT. This is passed to get_mapping_dict - ''' + ''' logger.info('Calculating corr and rsme matrices for %s', dataset) @@ -722,7 +863,7 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, slwt are calculated based on ERA5 or EOBS precipitation data, respectively preproc_path (str): Ancestor path - ''' + ''' logger.info('Calculating %s %s means for %s', dataset, var_name, wt_string) @@ -746,7 +887,7 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, if num_slwt_eobs != num_slwt_era5: logger.info('calculate_wt_means - CAUTION: unequal number of \ - slwt_era5 (%s) \ and slwt_eobs (%s)!', + slwt_era5 (%s) \ and slwt_eobs (%s)!', num_slwt_era5, num_slwt_eobs) if 'slwt' in wt_string: @@ -794,7 +935,7 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, log_provenance(f'{var_name} means for {wt_string}', f'{dataset}_{var_name}_{wt_string}_means_prov', cfg, - [f'{preproc_path}', f'{work_dir}/ERA5.nc'], + [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['geo']) @@ -814,7 +955,7 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, slwt are calculated based on ERA5 or EOBS precipitation data, respectively preproc_path (str): Ancestor path - ''' + ''' work_dir = cfg.get('work_dir') @@ -839,7 +980,7 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, if num_slwt_eobs != num_slwt_era5: logger.info('calculate_wt_means - CAUTION: unequal number of \ - slwt_era5 (%s) \ and slwt_eobs (%s)!', + slwt_era5 (%s) \ and slwt_eobs (%s)!', num_slwt_era5, num_slwt_eobs) if 'slwt' in wt_string: @@ -906,7 +1047,7 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, slwt are calculated based on ERA5 or EOBS precipitation data, respectively preproc_path (str): Ancestor path - ''' + ''' work_dir = cfg.get('work_dir') @@ -931,7 +1072,7 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, if num_slwt_eobs != num_slwt_era5: logger.info('calculate_wt_means - CAUTION: unequal number of \ - slwt_era5 (%s) \ and slwt_eobs (%s)!', + slwt_era5 (%s) \ and slwt_eobs (%s)!', num_slwt_era5, num_slwt_eobs) if 'slwt' in wt_string: @@ -995,7 +1136,7 @@ def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, slwt_eobs (np.array): slwt_eobs array cube (iris.cube.Cube): Cube of data to keep time coordinate file_name (str): Name of output file - ''' + ''' logger.info('Writing weathertypes to %s', file_name) @@ -1035,7 +1176,7 @@ def write_lwt_to_file(cfg: dict, lwt: np.array, cube: iris.cube.Cube, lwt (np.array): lwt array cube (iris.cube.Cube): Cube to keep time coordinate file_name (str): Output filename - ''' + ''' logger.info('Writing Lamb Weathertype to %s', file_name) @@ -1064,7 +1205,7 @@ def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_fi cube (iris.cube.Cube): Cube to keep time coordinate dataset (str): Name of dataset output_file_path (str): Path to write output - ''' + ''' work_dir = cfg.get('work_dir') @@ -1092,12 +1233,29 @@ def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_fi df.to_csv(f'{work_dir}/{output_file_path}/{dataset}.csv', index=False) -def map_lwt_to_slwt(lwt:np.array, mapping_dict: dict): +def map_lwt_to_slwt(lwt: np.array, mapping_dict: dict) -> np.array: + '''map lwt array to slwt array. + + Args: + lwt (np.array): array of lwt + mapping_dict (dict): mapping dictionary in {lwt: slwt, ...} format + + Returns: + np.array: array of slwt + ''' return np.array([np.int8(mapping_dict.get(value, 0)) for value in lwt]) -def check_mapping_dict_format(mapping_dict: dict): +def check_mapping_dict_format(mapping_dict: dict) -> dict: + '''Check format of mapping dict and return in {lwt: slwt, ...} format + + Args: + mapping_dict (dict): mapping dict in any format + + Returns: + dict: mapping dict in {lwt: slwt, ...} format + ''' if isinstance(mapping_dict.get(list(mapping_dict.keys())[0]), list): dict_ = reverse_convert_dict(mapping_dict) @@ -1105,4 +1263,3 @@ def check_mapping_dict_format(mapping_dict: dict): dict_ = mapping_dict return dict_ - diff --git a/esmvaltool/diag_scripts/weathertyping/main.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py similarity index 96% rename from esmvaltool/diag_scripts/weathertyping/main.py rename to esmvaltool/diag_scripts/weathertyping/weathertyping.py index 5471826e61..1d906a96f8 100644 --- a/esmvaltool/diag_scripts/weathertyping/main.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -1,4 +1,4 @@ -from weathertyping_diagnostic_lwt import * +from utils import * # import internal esmvaltool modules here from esmvaltool.diag_scripts.shared import ( @@ -28,7 +28,7 @@ def run_my_diagnostic(cfg: dict): correlation_threshold = cfg.get('correlation_threshold') rmse_threshold = cfg.get('rmse_threshold') work_dir = cfg.get('work_dir') - plotting = cfg.get('plotting') + plotting = cfg.get('plotting', False) automatic_slwt = cfg.get('automatic_slwt') predefined_slwt = cfg.get('predefined_slwt', False) @@ -52,7 +52,7 @@ def run_my_diagnostic(cfg: dict): era5_ancestors = [value[0].get('filename'), value[1].get('filename')] eobs_ancestors = [value[0].get('filename'), - preproc_variables_dict.get('E-OBS')[0].get('filename')] + preproc_variables_dict.get('E-OBS')[0].get('filename')] # calculate simplified lwt based on precipitation patterns or use predefined_slwt if predefined_slwt is False: @@ -75,13 +75,13 @@ def run_my_diagnostic(cfg: dict): eobs_ancestors, ) else: - predefined_slwt = check_mapping_dict_format(predefined_slwt) + predefined_slwt = check_mapping_dict_format( + predefined_slwt) write_mapping_dict(work_dir, key, predefined_slwt) write_mapping_dict(work_dir, "E-OBS", predefined_slwt) slwt_era5 = map_lwt_to_slwt(lwt, predefined_slwt) slwt_eobs = map_lwt_to_slwt(lwt, predefined_slwt) - # write to file combine_wt_to_file(cfg, lwt, slwt_era5, slwt_eobs, wt_preproc, key) @@ -99,7 +99,7 @@ def run_my_diagnostic(cfg: dict): preproc_path_tas = value[4].get('filename') if plotting: - # plot means + # plot means calculate_wt_means( cfg, mean_preproc_psl, @@ -194,11 +194,13 @@ def run_my_diagnostic(cfg: dict): experiment = value[0].get('exp') ensemble = value[0].get('ensemble') - output_file_path = f'{model_name}/{experiment}/{ensemble}/{timerange}' + output_file_path = f'{ + model_name}/{experiment}/{ensemble}/{timerange}' preproc_path = value[0].get('filename') # calculate weathertypes - calculate_lwt_slwt_model(cfg, wt_preproc, key, preproc_path, output_file_path) + calculate_lwt_slwt_model( + cfg, wt_preproc, key, preproc_path, output_file_path) # load wt files lwt_cube = iris.load_cube( @@ -209,7 +211,6 @@ def run_my_diagnostic(cfg: dict): f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_eobs') wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - preproc_path_psl = value[1].get('filename') preproc_path_prcp = value[2].get('filename') preproc_path_tas = value[3].get('filename') @@ -297,7 +298,7 @@ def run_my_diagnostic(cfg: dict): wt_string='slwt_EOBS', preproc_path=preproc_path_tas, ) - elif not automatic_slwt: # if automatic_slwt is false, and predefined_slwt is false, just write selected pairs to file + elif not automatic_slwt: # if automatic_slwt is false, and predefined_slwt is false, just write selected pairs to file for key, value in preproc_variables_dict.items(): if key == 'ERA5': wt_preproc = iris.load_cube(value[0].get('filename')) @@ -385,7 +386,8 @@ def run_my_diagnostic(cfg: dict): experiment = value[0].get('exp') ensemble = value[0].get('ensemble') - output_file_path = f'{model_name}/{experiment}/{ensemble}/{timerange}' + output_file_path = f'{ + model_name}/{experiment}/{ensemble}/{timerange}' # calculate weathertypes calculate_lwt_model(cfg, wt_preproc, key, output_file_path) diff --git a/esmvaltool/recipes/recipe_weathertyping.yml b/esmvaltool/recipes/recipe_weathertyping.yml index 1806c37e80..6c785384b9 100644 --- a/esmvaltool/recipes/recipe_weathertyping.yml +++ b/esmvaltool/recipes/recipe_weathertyping.yml @@ -1,27 +1,25 @@ documentation: title: Weathertyping algorithm - description: Calculating the Lamb weathertypes. + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. authors: - - broetz_bjoern + - jury_martin + - kroißenbrunner_thomas + + maintainer: + - kroißenbrunner_thomas + projects: - - crescendo + - preval -#documentation: -# description: | -# A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, -# correlations between weathertypes and precipitation patterns over a given are can be calculated -# and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as -# anomalies and standard deviations can be plotted. -# -# title: Weathertyping Diagnostic -# -# authors: -# - kroißenbrunner_thomas -# -# projects: -# - preval + references: + - maraun21jgr + - jones93ijc datasets_psl_CMIP6: &datasets_psl_cmip6 - {institute: AS-RCEC, dataset: TaiESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200626} @@ -112,17 +110,7 @@ preprocessors: start_longitude: -15 end_longitude: 35 start_latitude: 25 - end_latitude: 65 - - mean_preproc_temp: - extract_time: - *time - extract_levels: - levels: [100000.] - scheme: linear - extract_region: - *reg - + end_latitude: 65 diagnostics: weathertyping: @@ -271,5 +259,5 @@ diagnostics: rmse_threshold: 0.002 automatic_slwt: true predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} - plotting: false - script: ../diag_scripts/weathertyping/main.py + plotting: False + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/references/jones93ijc.bibtex b/esmvaltool/references/jones93ijc.bibtex new file mode 100644 index 0000000000..f7174621c0 --- /dev/null +++ b/esmvaltool/references/jones93ijc.bibtex @@ -0,0 +1,15 @@ +@article{https://doi.org/10.1002/joc.3370130606, + author = {Jones, P. D. and Hulme, M. and Briffa, K. R.}, + title = {A comparison of Lamb circulation types with an objective classification scheme}, + journal = {International Journal of Climatology}, + volume = {13}, + number = {6}, + pages = {655-663}, + keywords = {Weather types, Temperature, Precipitation, British, Isles}, + doi = {https://doi.org/10.1002/joc.3370130606}, + url = {https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/joc.3370130606}, + eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/joc.3370130606}, + abstract = {Abstract An objective scheme, initially developed by Jenkinson and Collison, is used to classify daily circulation types over the British Isles, along the lines of the subjective method devised by Lamb. The scheme uses daily grid-point mean sea-level pressure data for the region. The results of the analysis over the period 1881–1989 are compared with ‘true’ Lamb weather types. The frequencies of objectively developed types are highly correlated with traditional Lamb types, especially so for synoptic (cyclonic and anticyclonic) types, although still good for wind directional types. Comparison of the two classification schemes reveals negligible differences between the correlations of the counts of circulation types and regional temperature and rainfall. The major difference between the two classification schemes is that the decline of the westerlies since 1940 is less evident with the objective scheme.}, + year = {1993} +} + diff --git a/esmvaltool/references/maraun21jgr.bibtex b/esmvaltool/references/maraun21jgr.bibtex new file mode 100644 index 0000000000..b0bac79374 --- /dev/null +++ b/esmvaltool/references/maraun21jgr.bibtex @@ -0,0 +1,16 @@ +@article{https://doi.org/10.1029/2020JD032824, + author = {Maraun, Douglas and Truhetz, Heimo and Schaffer, Armin}, + title = {Regional Climate Model Biases, Their Dependence on Synoptic Circulation Biases and the Potential for Bias Adjustment: A Process-Oriented Evaluation of the Austrian Regional Climate Projections}, + journal = {Journal of Geophysical Research: Atmospheres}, + volume = {126}, + number = {6}, + pages = {e2020JD032824}, + keywords = {Austria, bias adjustment, climate model evaluation, large-scale circulation errors, regional climate projections}, + doi = {https://doi.org/10.1029/2020JD032824}, + url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2020JD032824}, + eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2020JD032824}, + note = {e2020JD032824 2020JD032824}, + abstract = {Abstract The Austrian regional climate projections are based on an ensemble of bias adjusted regional climate model simulations. Bias adjustment (BA) improves the usability of climate projections for impact studies, but cannot mitigate fundamental model errors. This argument holds in particular for biases in the temporal dependence, which is strongly influenced by the large-scale circulation. Global climate models (GCMs), underlying regional climate projections, suffer from substantial circulation errors. We therefore, conduct a process-based evaluation of the Austrian climate projections focusing on large-scale circulation errors, their regional imprints and the potential for BA. First, we define nine synoptic weather types and assess how well the considered climate models represent their occurrence and persistence. Second, we assess biases in the overall dry and hot day probabilities, as well as conditional on synoptic weather type occurrence; and biases in the duration of dry and hot spells. Third, we investigate how these biases depend on biases in the occurrence and persistence of relevant synoptic weather types. And fourth, we study how much an overall BA improves these biases. Many GCMs misrepresent the occurrence and persistence of relevant synoptic weather types. These biases have a clear imprint on biases in dry and hot day occurrence and spell durations. BA in many cases helps to greatly reduce biases even in the presence of circulation biases, but may in some cases amplify conditional biases. Persistence biases are especially relevant for the representation of meteorological drought. Biases in the duration of dry spells cannot fully be mitigated by BA.}, + year = {2021} +} + From 4b7c4121a5c2f5d227de955d1490ffdfed609a6d Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sun, 23 Jun 2024 21:48:16 +0200 Subject: [PATCH 14/29] code reformatting, documentation, bugfixes --- .../correlation_matrix_E-OBS.png | Bin 0 -> 128087 bytes .../weathertyping/lwt_1_ERA5_pr_mean.png | Bin 0 -> 104765 bytes .../weathertyping/lwt_1_ERA5_psl_mean.png | Bin 0 -> 108593 bytes .../weathertyping/lwt_1_ERA5_tas_mean.png | Bin 0 -> 98178 bytes .../weathertyping/lwt_1_TaiESM1_psl_mean.png | Bin 0 -> 105916 bytes .../weathertyping/lwt_2_ERA5_psl_mean.png | Bin 0 -> 107315 bytes .../weathertyping/lwt_2_TaiESM1_psl_mean.png | Bin 0 -> 100930 bytes .../slwt_EOBS_4_ERA5_psl_mean.png | Bin 0 -> 100074 bytes .../slwt_EOBS_4_TaiESM1_psl_mean.png | Bin 0 -> 98546 bytes .../source/recipes/recipe_weathertyping.rst | 54 ++- esmvaltool/config-references.yml | 4 +- .../diag_scripts/weathertyping/utils.py | 251 ++++++++--- .../weathertyping/weathertyping.py | 411 ++++-------------- esmvaltool/recipes/recipe_weathertyping.yml | 8 +- 14 files changed, 340 insertions(+), 388 deletions(-) create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/correlation_matrix_E-OBS.png create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_pr_mean.png create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_psl_mean.png create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_tas_mean.png create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_1_TaiESM1_psl_mean.png create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_2_ERA5_psl_mean.png create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_2_TaiESM1_psl_mean.png create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/slwt_EOBS_4_ERA5_psl_mean.png create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/slwt_EOBS_4_TaiESM1_psl_mean.png diff --git a/doc/sphinx/source/recipes/figures/weathertyping/correlation_matrix_E-OBS.png b/doc/sphinx/source/recipes/figures/weathertyping/correlation_matrix_E-OBS.png new file mode 100644 index 0000000000000000000000000000000000000000..03efd3e583d48584ba56fe4f5d7e8e34f8b9b45c GIT binary patch literal 128087 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ξ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ι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

ti0j(*{{( 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 literal 0 HcmV?d00001 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_tas_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_tas_mean.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8fc2674c9ddad3c98215258cc19c3fd64e2401 GIT binary patch literal 98178 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%0A1{%RViaLW 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 literal 0 HcmV?d00001 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/lwt_1_TaiESM1_psl_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/lwt_1_TaiESM1_psl_mean.png new file mode 100644 index 0000000000000000000000000000000000000000..a69304f8bf6044c0c41744e480cbb9f25780986a GIT binary patch literal 105916 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

Fdea2Jqrko10}dfK`$0aCe-$h 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 roDINYx*V? literal 0 HcmV?d00001 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/lwt_2_ERA5_psl_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/lwt_2_ERA5_psl_mean.png new file mode 100644 index 0000000000000000000000000000000000000000..d9579860948479bf190800a40012c000571ab717 GIT binary patch literal 107315 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 y=wMcjfUx@>g38232&7xg(~^N;*< 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 literal 0 HcmV?d00001 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/lwt_2_TaiESM1_psl_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/lwt_2_TaiESM1_psl_mean.png new file mode 100644 index 0000000000000000000000000000000000000000..a38a5d24dcda4ccb7f5aee562ab124bc88fa5320 GIT binary patch literal 100930 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

Z7_7f0yt1B&SRF`>*S~ApIB~e{*=b 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 literal 0 HcmV?d00001 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/slwt_EOBS_4_ERA5_psl_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/slwt_EOBS_4_ERA5_psl_mean.png new file mode 100644 index 0000000000000000000000000000000000000000..ece50058c0eb77830cc49ce1bd27eb45bd794e9f GIT binary patch literal 100074 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 h2Y0+sQ2u}V#|;M&a#@*eWIlSM${)@So zo4K8}V8QC{(|vmHXV0ehjM*J%0 zMrX-TC@LBfLt0lu5(Br5@vlNqSbs@Gqs4_=j0{?N&0Hx@pP!kTs%pS<)}Y->K7o^! zW~WnbR`6IW<%;@ea7{SL`vBm_epHde1qN2=Bk=RHpB(z@|NLha{vP!1zke&3zko3R zd%mgvH%RgAb+GGrr2p@Q|Chs4!HgIb!0oid=E7QGZZ%&~e{c0&S65zE772L#cGYjS zaQ+jl&>bTh2r+vs|u{`h9>R)_>2kRkwTHUO>#U&W9+o z*j!X#g_^|QrYf}=c>iogDlX@}kDCKg1Ix>VsHmugvMIv0wzfe|oOUZCYu$n8=jYu+ zLm_8p_7t+oUo|u|%1=__<9`b0thL{+Y-YHveE#wUnv#+d4wYymh1HA+FJdH}J8o@F zpO25PX**GCaA>G`iwB%YpJ%t)(bUwmc5pB}7(>eKyr&rCbaT2oe%!cf+b$t03hTDy z06#P|gf*sBXO0GZOM0z_v$I~*&BMd6s3=t64k<}V^VFVUqD@l#{XwQ9$p-wU9BJnl z7s4f~u^AaQ{4eXl#JOsv)HF03C#|QZFHiUWCOpqieo|6W^|mnn-TG^pUMB|q;kZ|O zlX>#AwCa5+cha_J<+@|HUBk(yj zqmEZQvvPC45D*eV>MY`}@A@O~_gC6^Gcz+sQrW{oFess`yl!m|{e*;sx`O$jR8q44Xo7O@+pEjcefh+s*?aJ(5;uHj^VH_PCs_DQr z>9Mh2N@p$as|Scm?R70IN(gXps8(GUZN9B68nX=HMTomPIK&9vZ($ss2YtXE_J0~A zjZ)=$1-@+p6gMmDWsT3Dk$`s}jK9iDNyV6GBf<*K4^8*%;kh3!z@WA!L_qF3=opmoSuSYP^{Jt}2 z?%Ijp>*nv+SVfN?uyjkA>b-U|+%E2Svz&l+Q0@Edd2_N1?(lg$yS&V6YkP|2xWBto zy<6$-hRU9DDxJ<1`*3)url!_^vfNq@rLU=pS6yBG_PGF1RJ5M7XzIN>3cTDIp`)WG z^LufKiHTuiVJRsqLx0yD0Lpj7v{vpE05JQ^mJ)oRAV-Z&OwiEL4WCzxSz@xX^gff| zG3kR~;E=kkIcoi0eFYwmSTnsZq@bapo1SkL@yp9QIyyjatN9bXrmBaog9EeGT$uq- zs{l4ldumtCt0*c?tR2JRa9HEes#h2sg8KN|Ht53D2qZ<=BBF_6$eTBDJutK2!P{asWCC;ZS%MZ`M;$}{f zMIz$6i*@=&g9X5EAyB1sIxX>m@TeS?AT9u0W-QqOXq8Q7${D`IM0{66r-!ah|Gg@E zQoQpQD)HF7p5G|2(q*#*eC(Z^VCa6VpLV{E0VD2yIm$`Px4WSvK}lJ}v+TArlCtD; zyNnfSVq)SjKjoy4u>>$-Hh1CnqOJ1YFU;B0|;E)BEz}%fAL2{8isadH{4>I$m?d!jc7i zcs^h=w2=)yROW~T=PFX&J)U;blDQEHcymn`%GLV%R7Vo>LZ6NCo-%n}nXA%ZW$?K4 ztgK{uT<$OfAJ1X4;0$r`w^^vm0mcz4GDCqJgOE_iLZ9({fIh7uayE(fXWz$TPWdc> zQDCk-u4mQXfY|T#xzXiWCy7CaDMfZ9lRs@TPlDCuK-JO7Nu%Bpi&Q+^{OYFTZX@ii zQdrH#m~0l<#3KoYF2@BG935F;;8E%_Zvil4F&_Mw>G$H%A4NR=^8EO=4vC0}Tsj)X z^Ps8l7XZxIRIQnU6@#!;EK}O(V2$?f z4KOKeY(aFsG6=%89A;w#J7XC#wzd^6HW~IFjmxh1At510i;a~fXkECX zpsAs&bvaZ^q|=z1kprO0yg?L1^}gquSdOBqW}-Z>moN(NUpoC@}PA#6N!g0B)G$`^VzxeS0_8KC1c7#D>z+ z()vGR9>9)jI+o7O-qG&|GdPSMWxY@r((JTbW6%qCSgq%KA0(f_Qw_k*@bGZcc|X2J zow-td0bx)o2JlJ!`b^Pr8KW;4lx1SamCk)ZLGJDz>@KX<8{T@x8WgP~lC~+;C26W= z+vI&*&GYTrT23m9F9ab$=yKP)-^f`{J{H}S<+3pns%Po5Y@jGdJIp;aWdwc*wDk+Q zdG4P-Xo1t=R@UH%TtRcO($XYkGi+hFF@sLdnjC?or*T8OnC64JncIbrM6Y$e$ z&0hmK^pcX2rdB=oXDglu_(Yaa5I~jYl)ARIjC*=}%Xh688zKN6RqJ_eso7`?aJo0% z3cyj0atVNgMjL-atRXdGu>Krm&|RhRX=(VjC!>c+raCEdg{3u&Cq!#Hwq*69tAES? z;0GD^4_zPJk-}Kc6W8J*p>uJ~o)GcaFsC2{$Ba;ni1RCD1g{;PfFaL^RD)dLh^QCT z*H6a|4!3myg-831&a?g-XrxDBEA3i^D)a4%Y0aS~QpIb&i=VknZ_sC7Ai|>nHiX7Zc z#eM8e2F2PUjM*zV7XPJ$?Tbg8VA6aoOae+%=q+4D>t ziWH`6n^tlIn!&r7Sm<~t|(*0vnbjAH5+^zC^q_wHJr5CW>X_3b>^#;@;*ul z{YI{}qh6$77RQ{FsTm~gW#|K}$Ut!KQ1`;b411(nd3e6z^{Zdl_g_UIVImMa^ibg_QRE^o59=HcbC$HU6f{gw->< z$;cOsEYkfu*PF7;s63hFLV<)9YqH&kcFr0#;W5_k=1z&WXH8}0`?6ySk4pv z*~ADG_*Wfc?rg=03b1?67f-Zh&+mB+VjuBB--Cio72L2AUP~$%X@UYI6(pu)khc;z zPYHV{o)elq3TW7m$L}WvH4@({LrE_(M_WY5l+U8t3&iE6&u@lW22V%oUF|hbBJ&OY zdf)6;MNQK`ESOQcAhcLsKM!B>%c0GQBw$6C7^sO;gDj*>Ke zmD%e7^MH6H$#J+irEvv2Su)la#rk>rdCUOeA91Bg+lNl3-o7{z*r=+Oi*_W@-(0-x zjLUy&>qAc$M5Tm#vP?&P{4`mbSzcV`@1P{yZf?@sV&x>R%`5vza4QhEIEX3OM zdIdrjO=s0|*Su0f z2k@@#5Q#2X$gphquSH%po#;M6FLLZXzso5BR15Q)*o_T5AMC0j<1eK2$a;Q$=@}VN z|5`j)3&_dCTkm&x^cp#Q9BNc@IMrD&r)4n6%AL=$^%#1~=nXz13(mH&BqWm~l}zte8tTEmQ17vToBO+lgsVODs7= zc_{CD03Hgzl#Ng?XM zGO0nr8)7+7502O|jr%daa?o>zzcZP0_}8jdOY>Gjo_pq@Y=neM|j^>^-^q<#1M|d9?DxN-`6`` zD}P%ere3=%r1U4%?a@-i&cE-nb7!R5h^tvMplGPFf-L{rErqQHAvL3q-4@GG zP3!#kTbF_wI#%N=x`5u6*&>(vR!Zbor$lF0d|xOV9KmZ|v?qjlB!Kgd>e{NQWx!OV zrn;{B#3v@!I8T0&mZtL%;Bh$~UIDt@-4TyXWFD7&<;usILPpC1Xx@Tch#LIl&hGl& z+!cAtL8&afgnVFg+sD%`bI3R=5Pc2fCL2eXCtYc zQR+KmVwLlofDTt82r0*>9vX7@@Y+1wo!>ilRHkLtg_6ptR9$fVelc2Ut#yu;<6DuR z&LcluqLYw$xPkjs-Q(wF)PI#tCm|%*a=Be&A1oiAXTM zeV{^<@Gk?5to~iGYwxoNm*b9XdxhR&2N#4o&F0(3s5RPF0=1G)k^MalSi}Zqr@uw? z)p^_-#MITo^J?Lx>r;P{YE58jhQ3&a)r1Jv{kQ{bv$DQ?G>xm4g82%eGh%@y-Nm&~O7E8sp_J}2*hD#vFBv7t?o%qN)O4q1z;#0EC%u_2mV>N?TBZ=iq%Hf1n)=rdQ@ zc_4BvWaJ`&mfQD=>O;p-97f%96aP*pTx_RXZDoPV1%^=PSj|9@kMCj-gxD*SC z_lV`Moen}x%Kri3aNPn$^Qo6z$B-GZ?_k$wk*3`r@HpJ2vh9@`iyb&=4qwbSu{3iP z5VEv` zbd*}W^?lX%8T7BiVlb zA11HgYxHelP_5rGblU2CF=J!CK{XnLj&wUUnpGAnKoFGj%ge6iCbPe3Q9#6I*MG9u zsPA@qP?mp5|JLevhp`#afbo>mKsy+h_nh>^)14ivJ1O!7v1eBHZL7upgf>ZbOUP%9 zbBX;O`o~f_L4)mr>Z#RS1EXiH&8IU?*zs)IO3|#z_XrkPQBtNDGCM1OJGJJ&M_Gh9 zS-UD|Btl-myxz`wv^OvJf@#_c3>>6IxTQ;L28HW|I~nQxA?Dm5kdFs5RXi6L`x3+Q zuRZYnaz~$-#cVqDd-XSYepFYOpHp{cfF6U=@#;upr~R2@+4HLS_S$k0yS?Nd&i@^C zh}`l|O&Lj;X}>>*DRSb&G9Pf97Df18wh=O47&3+8bpOn{Y@*s3j;G!aP8FQ0AFT-9 zyUm(`>h_qj$86xE!Q@-capdJ-6JNF&ZOw*?&rL1xOy?CrO-&C<+VLwSx8}b){z0^2 zTPQP^EibJ;^dtzEL1F&1ynDEJSQSBKfAAsK=%0{v0_lc?vM27ZhLIC3_CsI}&k<~; z)HcvYY!5^Bx%*ohMvZ4wk`sOl74;QQ8%|g;AAqae9DA2}aX3#&STIm758%tTPK}P%DloMjd3o|nM6T7G$Ad+OR(A&E>zR%?GeY;0o)37u@$@Brm5 z_cl;T87U!Y5|>$Oe?s2I$_@lIv9-Onb}%|JkrA+bJN!Z-18s|5@5~NnY&DE3RLiibtTJcyLyr?7WR+ZS zqT|J9-p+?hXiev}vmeV?4^}ftm*bVE4&DQyJj;vAluhy>u_hTm({26$!Xk!{i=QKV z%XP}Hyf}D@ypD%Bo9vv2jZJLiuWJ40aLpYgY;K0IK*b<_KzxsA@zO0WH&e&Rtx5U- zw*vbG%;HC{HC!U{xWD4ZbSm&j1+pc|#6gBzxjT_iJ^14%wig;!b=l|>!k{(87@&f{ z&fB=zwfL|0$;9{h%y!|XJ!SLtN%$hfuPmyu)7Cq0CNx22B=HZ?b$&h$f&_kDu_Mrw zK0O_ii7!9N2bMqcR<1wfb}e#-!nAg5pJn#>o2c5~HO&u7^9uXw@=Y>}I5=Ed`Fnj3 zp8k(zS;)wwwIFb)#C7b+p+hu90vkx_nSWpx%4Rc-$6}L{pU_DsAP!mY6k6Om?1od8 zw*Sg0vyi@;6*WLe=dyx4Yhj=f!mnHV#-0j#hyEl@D<9BuAs*U$6fEYrn@&oKO~R9r zKcH4tIHusY6>J|6kZn9Hn%{e=q0@ryR9=*Qq@`}vPVMr%JbRzxlXQLuS7+PR`khTx z?}$)4`DRdaEd43$;=*va{{Cp?0e1j}p)qrl_+KQ#?gas`1^}?&D4aj^*hw+_-s#JK zb93W-ypTXHlNcQr*9+J&V&2|-C@3i2_uEPT=`MgE=Lq;2Ie;L2vuGC*8A(A+9Wpp5 z`6f|(N-q`9nKTDPr&X_Q%3#K8bKfNro%Fgh{*n2epEdecFV>? z-u_E?mzKBa`{n*`r1ZEHUqib%RJL_&j1vR>t{O25^5Y6syfhq=UxU!8gRaPpSV2Q& z)yp_zHgeFrp`T(`;w8$LiyL0wukNYfqC8VL2nTYMXUpkyZ0D%a$E?X~X7%ywwLc!5 z9^4z-Pyo_nh;qpmVA4`yBC@cumJd8$?f1609KI=0fQU;bAV5^FISPok_fMDO%xR-< zia9WLpf|@hmEDTVG_v{ zMybwJ{Va|TH)G-R9^&fi^BxaJMarmNCqMWhfpG(SB31X9_zUnH-feR+Ny=#_&WA2R z{MA~Iw0AibfJBZzWm*3wRCBI+Pd|V^Qw`SmdjNv-NHQ~we)Dl$$-oaNc)DQxA`6+ygn^JmD^G7H><*g1f z|0Ux8ThaNNn_nC)!rSOHzm{np8kTbDK8r<{TAS_-{uR|y776H)zLB<%2>yq*p6R19 zyEX1N$XH{|j}e{RZ5GwneDG#&h3yR}3a|F^ry9szXRW%uL-h}9kh#O>)Zs2PMm84= zya+!<-lxEY$@+QK4$n^F;9L4`FlE5RZ(a9C@ox|5I$8ob`FFxT#-08g`F*d8-{n62 zv;_1xd=|V2GBUD>3LW0JK*Da8-xy$)MGhIaY*lWBNqho?=+T?wMF`+)(Z8~ancLZo z1D3h_%l$5X0qSUs1hPba1?;zLF(W3GY*uz@eC=g^_osTdd)sN-4&BC#%)sCrYKDIB zeALOaRp$KYWV;91?$}6B+_}q#7mzlew}B2}`u%~^j1W34@n<})yEuEhDl2TP{HmMzqRB%%Gbc5Xn*s*7 zNOvg4)At-@zCl4*5o?1T#I*c&6TefOPkA#K_zOYNX+EhVBcu@!RiP$2W@vK}dd<48 zC8{hQ7senSw-Z@oV=};mh9=?UoaaGIPEVJ0cORW=kj>;vK^3_3PoPzwYobRm8{gR2 z5HQoy7n_NMaRR+*dhUvj4_EICA|OdJ@XnCmWhO<&9yyAMRO`C2M3V* z<9&`Q%@BADj)adT7NFz9^_oY71n-eiDc6rQx|C1n##S=ZoeqgbNWV~xfJI6tvm0vj z#8ffQs}or?Ggnr)cz9wHVxYcCx^wl3iJ41FE0)ZPHdsr^t9=4IktQ$Cjg13o)6{}8 z5&Q2rsj=wNpwNog*`NIfvZ4u*3-Z8o48~t zFc@rYfj&7dF&*jaSH+KTfj@e@WuTjjlW~;eVwv!exLTXm4o?-Nb4@gd8JRxT4v7ls zW^S`vLt;nj*sgd8Bjx2`Vc*4gPafJZ;gn5x(dXt4j*aBEwWSllaNWZxCtF$s#uZ@$ zTc}OPb_-FrK|I!u0Ue`+g;}tfBGo(UL=G+w_uQIVi8wP4;^jc$2`p>_s_9(S(lf+} zD*1Vy7O!kqd(k*658@1hjKNSrkzf?Uy#+fGn)=kIc-UxT0`280H-`eY#S4L!dw4^t z`CLZ&ckh}W;1r`%e_JO4&vj3Z2FB8XANLNh{iP~J)RnF8?=8^8lspk*hkj<%vW^ky zVw!1+OK5vPM~90KhlSAz3a-b*8y6aI;8i<0_w)@Ucha}4$}S$-ihT35MO@aQbd%6KOi7TOBzcJnV zNOfO68C`GpWW)_&OQsic2GgcoawjYOL!<ikYrlvDqZfss4!0^QC9t8<&x_xXg7VpRK= zf}{+G_bZE(L?hZt1@U<>=f>87*zV`J7&2Bsi!WNdcANJ3%Rj5Do@la_+mhr``k_Ak zw-lO1?V-(s6N-hDR|-e3GLJ&yHk{t0TW0yAp-il?>Fjt^bcRDZV9ta}mxwDBN@!^R zQnqW`@@^Lb2g?KlnrFBd%(Jh+EAGTHJtE*y#(A4+Y<#s44s7^lt_f_0{cq8TljdEb zx7ZF4O8^2#>_Bv??Q)D)HiIWYtz6Rp*bFxM!mJWji~%=YR7@-;K7PhN0vj)5PT%${ z-7g6P4{J246$KE{tgxQg>&vtk;ru}RW;fFjcE%9i#z4C1j#bzelq~V5^@w;Y z#Cx~v-MLE@g;%XS(8q|G;%>cf9F-Xo2EOPRg}&;WyUDViGnVjhk;x%+dV3;9@BBtn z=%mOpm&F|nXf)**9DP4qWRA{@7hsNOl{1E81$B(q6)jBa2flvjT2>_WbI+eEM<;2Cri2-*&v^x@_!mWmSh|5;GveSHA#0zt_C&+Bgf9$Z}r2~GQ)QHaS)xhvjYG-+INHu;fpaY8F=Z2*;i z`-}&vDPl~7!sv8Q)>e~lAy<3h3O6_{i5!P|P*#7raooZAP{FzN#rD_gwdXcAeO&jy zyVL3bWn(%aT?Zwe;F~9XA3E0KkLybF-@K4t{Tq;QUI^&5Q0=N*=l=HjSV+f0L^UsT zUG1LJXY&0V94-uo_ZSh7_sGOWgJ@&_vz}Cxp}V`~mXXr9R+H$;e@wy2-z`lbX(Hdf zV_SGOhSV&o&wpjz$w4c3aJ(!uX+#U}IQ2Pn=&Wj(t8`M9ui2cx4dHb+U|U_8tUutu z<{b4Z6Sbnxa^0AyJX*a+))k1s+?nSq%G6*%$D72j&k*TltNF!nB4b25z2mgA#UmZY z!sTkuZL;8fXaxB66OHxnUw+ai{&#C7mYL)O2f`)FO1Ydd8P>EfTWf>2Y;Xkzr21Y& zp5Q*C>bJn`9Ouf#{9!)X(N^XFC%Z*7DW_6H4PlzV)~ZdG`a`mE&PMk+xJreW!?6^$ z+f|eZ&}qXgXaBr$?i{5_GVDWZ$MRz<^=hAE8Uf#XjsE&5{dIUd2d}KiktPe+Ta;4? z=_kkmqcZA>K|~`fYvn}EVdLiv9>TD|T3%lRn`rWocB{?}KZP5^(N`i;cGsxuw!Mn^ z%QcBtmYwdXKS(dx`{J*lkr^x9tLyz>n&b9_K2xE@=1tf~2=3A&@66RIk*vUTM3JJ?!uA-#9uNsU7E#Ki;UD2HnQLYC71=58a~=MWa1Nld3UO&d{6#w62@I5zY6z&-+NF$ z#cqU3R1GGqAZ@M;MNyUA)3gMu{x}4L{0J748EaK1Ts#`ezN+8WbE`8>W%8oQ;tP1< z$xW`JGDTnaq$Fcg9DSJmPTXP4BoxGTIOFyvI*Pxkk5%0FGdXOCzJ;(JZcp{r?|?2A zNQs~V`BkIU4jB1I~!Kl0?~cdEy^(j*|zv6%J2)D=?N1BU{_T_FA^ z=(Tk-skI9Fv4T31IRD>~Noo%k`5B$tCP7bE$2K7Mdr=nKsolGGb)SLpLkL;?*LZ2Q z#20|ex$hJ&4OR}VXg}>4CH61-3Oi}@i(Ojp z&)oazJvfZvDaZJNZK|YG~4j33wo4D>=oJ|VWH9nQbn3?SNIQPc3&@V=RSUYTsZZY3rsKga<+KTo92GlHye1)H9xjjr7!&M$QR!6tGfF|f zOBG8u$>7K}@6r-xJF8H4|Ku6bEo&LF9XPX6a6)W) zUL+rlP{Un zmngQk7^VzwRo}lRm0n&(#Kr*0m!Hp+sE2^E1RM~MkEnDS+H)sQC<9WRf0vq_fH-B~_KG+u zaHv5LNQsKNVA()h|4;Y?x1>bfn3}7WEG}m zv^P!n{3HS*@-`vbq*&EC<(L--297X;D3bGtC{d<(n3cIzXHUWQfEq}kOt$QP*Ssb8 zu$h&^#hDP-`r2hYGr9XqqS~p6O)#TJC}hb$L?#qb1#*!@eyT4D{;}jdkn|6tF((_5 zat3AJ;k~epLFIPngAK~?T=)(dAV?vX=_;Dk z0N3Km@x-#+pk=)hQIU2d|lv)2n#H>F0tK;7Nl z0Udgp72!Ksd3g#xz9rAG2AjpV1Z}B$Wg(DX2N|21q7xI31L<=R6%CDWq6y-M5BGq4 zdALm3y|M5V^64j>T0U!x+MfaAKo`fB3r99`v3LtMzOyN9j;9CKAdlwa8OsH?(-7r? zjehFsv{86hpOg{%qj2(lClzIyZ|0#j%zMLCZgpgBH)kL6P9vgpUP8tYWqjY^5BO8W zWwKJf7;dJjGp8YoilXX|{6sD9*3)Tj)_@i(r@&5FAaaYM<=r)vpQHBGb7ZVwc;Q-X z-7I$Pn;pV`m)NzWPq(W&MdAE_&bKUVj?W$5k#W*93aNYu(+gZ$UOxQx;ciaL&ICBR z0U&&^&*M!@LW0RMRgKT1YoUC`@Nfd{{!(-8HTU}ZIu?z=XbLNQgm^DNY5j(-gIfL* zu-^sg`VN>l88XS_Cmc{us;9%T;YK{2owpJ^x>43BOC@zY?|UwTZfq9A?#wSQ*MYs&=4_%f`$+fpyI*2G8nE#R#Hvx zOn+$+%(L~t=Dhu*=f}#fFmZge5eV1_%^F4Kv#vksQ>|6l55nlQI2_~gxtjL<00dLg zRK9zO4B;KF?X1KTA!H#0{q>;fD8=}8{VC*H?_2&V`C2h+2dZ|Jb?v3 zECBhNPPYxGegWNc$?LRz@7l9ap|h&O@qaRR)g>(sa!P{%->JpdMl$F?{N`!8wEfeMWW{#UPK zEQ%!;)OTWH)_SdYag+X~!SJbuGOkAT8T{S!U+gc>{`M^sVspAd3-`Pa`Tchp{DBf% z{V7o7`~%|7-3xyklgXFL5xp*#UJ3S#QvIBv@$T6H;D8ff8qz+5qun@y+J##(66-O} z)s&c4&?mYkmak_~MZeSYvcjdU}rnsVEJ@B4ru!1mnkR9PxYk5n|cpe)u&&f1J*V zi}2L&dYDp9gY(~q$N>T}Rd~T!7Kn+hkn*;pHf7pt?qjPPvLB;&jE|p>+%4Me1dt-K zvRRX<*e(`TgK-Im0!p%-x5MyuZv5;FaWnGK7sx$WMPyaxV}_){`+Mq8M)O6o#$KvT0QDS?H1$K0kTh`zCDfs4`WgUbImzV&n`Da+UJuu#rDSOP;! z@!q?D4ot9cjfyK3aUeu|S|Fahb*p@oKiJP$I z_1BV`t>1^P&sQI$a&;0ERa-6ArZ!~diS7e2g8d4Z1Vb{PiPu`X71-SQSKd-cV`Cx9 zT7p3KKy=*qmVNKpQZ`o6+@(0|QW58{p_Qkr6{{mtsfo+OVPJ6lZ+s<5I&k_C=u!k4 zS<9;96B3yBchb14+!(uaa*Xo}*0+yGZ`!@6>8aO8JudHjyP+w@-JwtS8ouf7u0`66 zwAdlqfBsEh+8dl)Q5HTcgI#UdjU8`Qe}&Kds|fIxU6(y)$^$tzrh7Pe{p(HazjP=~ zJ?kby>K|V2U>mpQb`!IwKcV@VlbYSUiY?`IQjgS-wTy-f%C;Wbb_=!<3emTGQO5uc z*T|Y4e3lMnl~jO?$M^{5s+PR*qkh@D=&tCNh_h78`bG9dtFFK+yfczj9}Z|aDbtJ- z3oFEOlyAP&$?Zytw=+D5L9riSQ3$weLr2=;U?1xn4QSu34+Dopb09L|VWc%CVDZ+~ zq0ND}Z@(fSa7E1ZQ9?pOv%#_tb=7BJq$mqce`(8N>19wQseP^6z*bne&60e4!2lRIBhlfn2Ck&KfBg9wrTE_Ci)qy0K`}kefUr_x2HO`&Q;eYd z5X?_xO7U5;jy>`hHAYbO_Re{$6GeMdR?$lo`7d7E*oBWaScv9Y$>Axgg6zZh*-N3~DS^Lk|c199o`qUOeI)0w_M z2ImqKo>Rlc6aB8an>BEMii)E7U2t9QcKnUf^B$QZgs*lh>G;!~i@It$I(3Tc-8(Al z^#HEe&#jtywk6A5icDT z(Mk;z&iMqDJj`Gs_yJ}D%A`Y)#UpPT8K-sKq z>oY|AmM<7MW@Fu}vV}!H#WKR-Qgba%&;8B;6O%GdFMVXP*2X=7bB>$tf>(*&no{XXhv->N6#Lb1&1@gZ;WV zc!)cD%S}LtXE&qz@j&{&SV?B=RCd9dv4-huGcr+1O3K~C1B?Bc{)={fX!L~QiMu^q zVE?KC@>A@1zoYvtN((BEvH_=^t0$h{OI@;8rccQEE#LS3cIg@x1}%Yd*}Q5Bsp}7j z6ijU4MvpJsGda)c{J!xscU-_pmV7a?^>RbNYXRh^&r;|#^@#NgC<&Sonl`};@)48z zWR#@HUhwdqC`A3g5gPMUX>2Z9zRf2Mr)S;JQ#D9oSWACPRLa5B_8Ib^IH-2Z(Va0i z{DQ6#E6G(Gbd0}BD!7XT0-ESbSIRQsoUUcopU3zs-P!X~W)nz@Cz%N*U}w9W!VPCT z^7zPmNfUONo@YJV-Ge*0`-XD$0#q9hs7^bNl&hu9D|0VeLaoT|(Y`E3-{yCL)ku2d zRJM3**nX$|TBUUFuK^rfPi-{shSv2xX+|8-US9g=viDJ(Q?JhSop@kox!;qJ;Su#5 zoz738%7L*LIaA-OcRs;Uuxm%vy^^M^;(2H~8n}^TWA(P+4TTk>+y3i+yj&kK=K{Pc zPlI)fdLgqBiO0NC1$Kg8g)|NM0NeSOw2j19Nh-iys-65jWZYxS@+D<7Ib0l&^L&Lq zo6AVwT_x;7+6@RReb06353%tBhL9-7gbk$fR$C^A$W5uNo_t0r@-hRxItGRq!Y~FD z0OXQP*%6j1pWGBIb|B%jKGJS@e&*oi^pga1Jp0RHt&cZ)h#62OzSPnpy_Lr zH9#P5{vMAKgQLoJp0`-_MwSQ&Z@(ncVBPl(;e?x99Xn(D@Gb`h>MTppyvw2fFU$xX zi0?XYmDXTm0ocoq%CXn~&SFTJJz=xirSr-EUOpJz#-W?x3hlEx!!`qmB@+5sw5j(e+Jp9U}2y@nPlw@gx7=W+e38{e1c}e%tyy0xyZ1fBELoP~0fj&kEFdz0N8gIt>1%~T?O+Bt zpig$!6vBCQ(?1O+=^>pqAM{gNp7;8S09$tb#LSfCXeT6L1)M*>zP6!hqDAEG!GPMq zH{Z`+Hxd7RM~79#I?kcFrQ`dlmMOx^)u>6M-8V8qMIS!~3BYV2aLS`(ACcuB3GH*+ z+#wo_4^~58I}OV}s}}HGj;8$Aa)RtwE5A-WQ_(-~;&7d3vWRA_^-2+Z%di6|x^otk z<+-v^G?n?o2ZTvJ6~n)+E3{0|0pN4JA|c)7ilxip!3N>U@f^*}+A%QWfTN9BkMkq| zQ3I4t*bchex#jiPi0owW(EgapyGRFz{u54B6*#(kduMa+*ztTo+wpp%73&zvtbL_m zv=qP3)!byrk>aj@MWUO|5#m_>37ZqOW=i?)xV4h2&WhJyvYd)>y2kQcShjz-sL`2R zuJ+CbqMmiRQX9p*_bbiaea?!b*%a7n6p@1Eb)dS5v)N`|+habA=vy!CF_If_f;+PU zD*b3rn(VlJp~{t%9Ws}JZ3aYXCNq&sJ!Cq{sBrdDs?_#siJA72uCjd{9GThIg~m$F zAiF&h(rG!*B_*7o70%OIEZdteY$oJOG zQOm4KWsRu|Oe-3Sfkcy(a`+c`|5h1L>`YV1AK30sf8PUvZ;$5YpY`TK1_o#l4J<#% zEdg76-{NhI_YKmJnZo69tKC`8Oi11F0-^uAQ&ptmnrRh}TZn|m^I}27+zXi7>56I9 z?~cQ5%srMmN^sHqc69JZ?GOp4OGuRXmn11g<=1qV1YNB}YWlG*a$ zeO>rsP)Z0$mvkfDToI&8Qd%16?i3KEyStH;?(PoZN_TfR{5QY%{l?%r7~XUCIeYE3 z=6t3|PI+GT`;ZChhqa@HF2Aa+p%AA#G`CwRSPG~rO~tFf^!p1 zZx8}0-zvAd%mL*l4|n}o#iH*S-Wj6lxxZ^06g|SDD=aS?Al$sQ6EzcBliFFIU@$42d z^-Bf$*^LmT1U=HgCrdcEgF87v&NusEbRL#KAE2F4#XP30>Q-%TaN4iqVt+6TBvDD) z4du<^7|F8U$v@JnYIu~@kd5N%o49OCe(_>2){5BP$xhuL^VgqXv}fIXXPEdsPoo!B zn$b8I$v?Kx7W2!=Bg{*_0oiBKg>L*krl{M8fRfUSW%w_}RRpneUX@ooVYyH4I5y#LhOT9aaVW+eLqW z8tx<8+Ff1c7;o`7<7QFIR9~Mz0(Ey=!z}4m` z7vyZ4JEnI@o1=Mn$HJ~i=W>@{>xEalvhaVk>xz0yO2VUZ5m!VGi@ardumb<%!zM*{ zYNm3)@Z^TLouh;P@x?twvY^nWVC=X8T*mU=jJ2-KU6}^m0faM2nnoE|I$k@JwPZJJXp3kUIaM)v3w}=*M3g? zv9Ql@x1NjJ^9aYXd0)ys*b*fcCda8dKQb`wWQ%7x{E#d=BO-b6X7?D}d!U`45euWJ zdG8Zi+>QQ5>0DhxsCN9nqNCB>!@@R2q3M@&u@9?$7n*sR_Xqc9zjcfa*thy*<)|sh zFu-q4%Gv6Szd)r$2e4H^6N?IZ!(MVgJawwdsNGw0*gU)?5#?gOz{l0o~-Daf;XqKC6|(JSR}V6uE#xV&`UjT|Q_qt{U}<)sS}q_z$rGPW@+`^t-k zNt*oP3LgTb@T0DlVEt=fsAHr;@+U)aLzLsx3SaquYy%eS@siV_BJB&@mWTHt1^UgM zU465;mppQuQx9mZgN+k}LAOC$;ewqx`)l>XP8GYoWblq25ayb2b*(}wvzITIC4m?l z9L}XAf2-1RgBe6@w|DoK%eBTw%bO&Zu({{0yNmbYdlACsclS7EM|ldfe@q5ifSyyI zGikbfhYQ>5Mz9VqmO~8Gsn626*_x&Rjf9-?fuR)YN&-54&i4%@#cd|SG=t)K-X^Tf z^GVj96k>8-v%W7HMI~pBRAHt26Xvhr{L%)xi7$_WuzWDJY1Ge2eGF&crnW4HdroR;K zT9d(A&Y&0{C#7PF+`v_$KNPlziHko>pXN1@-j=oi>BCDe@Q_`iPc330-<+);?*S76 zySpXktE-+bW*2lZra;Dwgm}=~*?_Hv`Ccyh!Xu=VVA__HU}{jWjanE9=@6aPo=j&PaJEx)oKp@O{ty?Hu%=Y1%31b z`O%Id0T=os$0T)zy-6tLSRc_#l>T%2J*Llu&_v@gl6z8eBHj(VfxSOIm};)6@qLo? z-09rFUGo-!E!%{PaUXK57e|^GSFxC)LVLJP&8XYfdE>*@z5Om%I7^LOm3B{8&B4p< z5&GUfqg9fYvMt{ldP1l3qa`p%NH`l^<(_q(U+W5#ToU1r&-ca+l#3V( z8HK`?0)Z6hSlk0Y1G#A0p|swPGFeWi(-w}l)d$HmFW+s0(z}n@?R%Zxr zhQy^|>)3SErlJ`>GR5H~AD`swn?;V`WZpA5Ps9xM%2cmeZ;RVJ0d*qKFS>w(M*cpN zyR+2!+!&$T8M@p&Z^?L%`}6N6^Enzoep{dx9&W03m=|8ML_`u(kPEe~Gnmly!l9>? z?3sl{28?!1hHY_n{IpcOe9?g{J!NX|^DgBG#Y9WD=jfm~t-@|VjH5KfELMI!CY@p8 z`DUb)G0Ddad9^5tu)SLbEj^|d&Oc08$aW!gyE%p=?>JpvalLkaOO4>9B*~F*o%c&_ zwyW01&QuHG3wnv;(-LTEzjJrLqa#USkzl=E7d`0@#?9%T_LmP&5^gWRglswRsxYgG z%R9fSKiePqi4@f}dPRW>So%6v`G^|XdjM$Q8{pNyBZfQ|I#S^*z_8fn^VS69p zfMHu*&}MoU`|T7dDBs02a)*ZYV|&m^IoX5eF@?nO<7gF33yjCnop!8%$#EhFhNU_8 zo8(+6nm~RXTeWvzRVi_Jyv0a~TP|{tCZ_scJi-u3P5EcGU1jKZ$;bpf87g>vJWD1x zZa&wq?_(=$4yj)__l&-qiR_u^;0UjvojrC$%S*|hdWRT?4wr8IiH$b5w)qgvLVEiK zzuG=p1~+-oISIO6_Y+1^ya6S|n8j?Cg2qDuFE=mC^;n(+XjsoWX>TqLd1;J8J8$U0*09ODJfjuC%FG_R`i0~vo24cK=*?RLMYUWp+%>9r%+P#F>|5HE|sUuMeqSxnX82OHk~ zall5}b_+LT16q?M0LbC~SGTma6k5$s5_R2P^r1}0O|q(P>vhhY;7WV`MsM?o&DNl# zYgNnqhED;hCQ4@u@_(uuWQas8?Nm}PJsW2)yOl+4z1tTqwazsDVGTJ!5m8$Vh>z~F z{nm6+EoP6)>Yv-O*jUK>{Q{hS)!&}`*YOnT9AmB?x}f(Ati6<$lV0lkg(H}~zei*; zMhBlY_Mv~8?F#D`tAL3gJZKta%Kp5s~X`{H*fA6 za}0>qmI@Z%$M=J0%0Ivi{b@H*sLFnniQWyQh2gC3t%al+W1(I!t>I8(CN-kyj3C}P zCjO{#i$8aT6J!bAxz%i%p+Hn+^Jmc6o^J39iiwV1T3!}1mqfNan1o$6Vk8R?1So#M z_2(tuFglqqWyk$jWkZy@AlS%l5qW;Kj|LqcdAyCLUcB>W)=Bd(Dbh3ayCCAVUAbb} zy@Z9Obt+nU$gg{NCO`hE>OS(izCuW+XBN{?|7a~j;pljQi{ffVia%fSeEtR{`|v2D za(lc<<(@6+9h3h+uJdP8#c<7%)Zd7Y`(c_)?>5=pj}XGKF45>c! z4t`38-*QtbMQ&HRUCvTTD2kY?Z!B6IYF=$E?j`)qz54^(687Sof3&;JGK(~L*8+!! z@D_!mmEa^iy4PDSogk4ZVwL&DimK^DP?+24KWl6EM`A(GZ9KDZhd;Zb!5csL@{Ug* z1u1DSu!fl|MXD`(fECNe-f?5v3EEafyWBZwe1wKXNiBdPwmBeoJI}K!agcnRZ5Smb zBv_Y#w`OD*o)jUgZ3G|6#Pk~9jV&YM^VBBRnt`1O3`#inCj_O1aWl@Uc`3KyU_EtH zyM4I%<~K4WKKEO+^_zh-rz(qQb+yp)?m5y1kHSotn&j(xw@D_6V=v0o`R>x7JdHdV z;r52rgE!LZy7&+gSfiEcR{T6&h5s<(Va zo1hBsxBpbjbIWEi_bm2-!@6V=g1r3v&V#8=RY}|`G+E7m zEPHeKb6Ukl8tls9G>HHGLmsl?pE%64Y62M-;xHL?t#zz&hH2Q{OOxES6V~jNj}#U{ z=hUx0lE1lK@u$k-l3I(!`^n6(>0A<0o3 zl%Q470mgtBUPhRf!=BQ3rnL?*WWSNfSVAW$XEA#6jl=M8sker}@!5NiFFO6~IrcjqL{3mP z%p8SZ6cP;AXU}iK2&F!l;C@3ocD}x1xh?#}?|3TyaBapxZdH%xJJy?twm|l-q3*pe1qS0;+o4b}|Vh!3G;2g>3fCu76h+a4@Az&GkhF)3G5% z{rSdO9sSL=uaCDYwnaP7ZiKIx2hJ=ro7=aFK9!8og@iHl<_-Qdf^ma+vvUp3x?$`a zYPmyf+}G;;>@Gl}$95BYxixA;n1}WttF8NN6@Hkiv$W|vap6FhpYt2XOG;YjI)C*r z+=6vBp6UY%KpT5MQH~QY!XGkjFCOnFWV@;VTv*Ff*XA45BY|sX4}KU zU|_Jc;;3tLHYU)}D=D=cF>Q4;Ji)fb;fxDTFUEb;u`+}Kj`zZs!~!ly>vhp)9D6gh zC7)*x)>hg*m}rq&(^WAH)3K^zx{D^+#@8Ss92njz5)PTQ9}U$ zHg+q@shzZ@2)M-pm>(KAfCC+*6d+~-1)zwisO@3XW%*YhLxBX*thS+{kc~7V!DN9Jy%x^xc2X$oz zJ@YC!Ta1I#=Y_?*NQ0%oHq?}1c%gZ3<_L%2@k^VZ8?kxW!(H4M;`DWR3_{`w?#x+J zLe{Lx=w^4`PO_tjZS6^(cQMby;Md&kNc9Gn7c3^7(l;nBfqoSlKLsAB8)`fyJuM0K zsg#-+9>$X zdEnSpI;~dkLP`I&==-mNr(K>V9A(H2;WxuTZ=%9ldwp=fuOQ{`^(Oaw)j!e2h+3cmB*ZFJJMXx4xI_n+uR7_t~9o(8u?|;@l)XO zF065nt=8>__1$P`rRD5xgoY#28(@$PufcdUjfNsjd>ME*o)>>ZOz!!-+}!W&Hl&~2MF482R%k{% zFuC$uF%uGv{1W+Pj2BAsNWDDEXoUpKJhQP3VvJVG3vD5#PEwY_j!a4IKlX3~eV5-y zS3edR9@AKEWin@-zHZh-ug@Dw|25eNfR|U#L{HqxcXtD|YU$g0H~Hi=V~5~*R{){KA9qtig6#b1We;s~QSZY-IHY;T`+x!BLbI%z_m=aKU1|@T(dw%*Iz#B256LXfRZ{zyA&jF(o61s zvz@m$R~H3H&amG^n_?S-Z*zl_J{!Og!DifeeC6Aj!YwMD$Ml-ej$HTi7&kYsE<3Kc z%+FPrRm%&~-&$^<(pK9QCv6>aS_~^}KoER@6RFw#ARrdVp;VB-@o2V3WGWw$5eufVObdIBJBx{wWEGEXU%g}8L?pzn|2*2T-GOR5|ID*9MdALIib5`aaXY-aPfGKB7Bgne2@7s%M@4N z!Ys4gZWPwvp^wQipalzmn(G+N=zjm$@WkrF7%|WJokClGqPGisf(*5J;i$D7{<9#{ z7j5c#XnOUTe*c%;B1(C1QwrNVPa^RV0n{&!dk5fV!DnH6mBzlft_CX2rCq$P=BNSg zl-h*ml-$gTxXcfIKfItK#x(0nE26EDq&Igo8O8Rd4$rCjS_}L_k|pPU0`N8%U@AL% zB`xIT8dMmb{D5s)>gi&etAJTjTess|2H(W z_U7tywBBS6<1Ki|k{Apub=2H0iKhI2O3|0JnbBc(ZQB;eruZAaCg+CH*jU0)|Q0m)& zV2U8dUKe}kdf?NxB^ktGQbnUA+1NoQAyAHHjAlhRHwRcf8SFi*{=3-denN#prL-?| zo~0ep0Iglb5XJ>li8%60E2u4+Wojz_=~!I+8LvHMESgN(PZRJjrjK@6Pfky91&>kP z`T60j&(C|z+2yr0UwAt?Q+!JJCN4_uC@ahDcCC=C>w==??heK$`o{=XUs-W+ZD*Bu zo%W4fnurLk&w*ApXYr5W`QaI%V4_clSa>9QfO>JRN6WitoDFbEfG~37tRSiq5v>PG z^MYEAS(b>mb$LIjPh4VcsoBH+U?HkJlI%77a~m6*N;6m}Y7@eQ>C!#!;028X4x=!F|03Q2+ zkGfOjg@oaR&p&^Q8cEqjp^@J?jR?WW9sjDd!H=~S{-;A4-Bf{LbLE%9@N@rlD?QA2 zG_)Ticvwvb{n9t)9Bjn8;ojB(U-3r?mM34au8Ln)EGGC%KY}sohMTxvWPb3)Kw(85 z3`A72#XvUb?+UrQwDGfzVwaI)fi z1>bqJD_5FME71k(IqC72&C8NmlaFL|`mC-l>FCJG6`Cw0^ce#o)UtbcIJB*aIx5*A z{2sw+wAz7M9^XdZWp#Bf=IH0wVG1j9Mgf1In5L?5<_geP#ULP%a(3o!UdUK`o4vgM zH|345CBg^JdY_^Xx>f}qj4`(v)-<9S?A}G9beBTg$sPxqss?KQ;|nLJ@3!6L|9z9s zKO-#+@4uJlHO}BN8O1LbA_=YuoA|V8`Z?d8ls=;Wxje6ir>J2RX8H7+9N~<0%_c5n zWgcV)p7alNuSB+!U-tGIi5XI&dZpGc2$5MP*_o zk23s(jQ*%pX9RjJIXO9q;N6k%!__Jpr`3Wq;Ozrv732=UuKDlJCMc+>Rb7gMo`3KL zHjZPEY!MY5t&|0^?($LOZm6Fwv6G>J(l)EOKrrRf4DJKdzSP`_QAn&D%SzW4O9a!;g_Hl-AW|I^;h`6uUgwXv%3BYZhbP)&F$u@^m&P zOisr2SY>p-ofh*pq_)XhfMw9qZj27^16uaXaB5k;355jNwK)UhtW%~|4Y4Nlfzwmt ziUWwry1mC%aUC{=afxQ+b4xYcMkeB7jwUBOfYbNK=gVf*!p+~3tEE5ry=@EdcuH@o z)J=KbL}h+Efjl$FB{tgTT4m;0s91ddwA$1nzf_yBrqs)2YHcPxF+MpGrB$c<^5>!>~4pmeW2b5*aw?F>I) z>t&YRXx-L%>c~>4adObSr2`f4Xf)2!#+pzup+XkOQvk;kA0A|p5b`+= z*1ut;rVaq11wp`K2=FggCj-pei;Jv@w;*ET7E@tFqe>BjSe(#qi=%$k7*d_2T0L2*7lhS8Fm@#Ng zz{B0;uxByheu=%hMC(&PYE#|jblkrxT_S4Ky{@*tgaG5FVXz9mRITv^o}9c-l9Bd2 zqrC|s4EmVywZm%QX(CMQwW_afpCaxkC@)jI0EpR+#;wI{(`8$qq9r*};1`8H1fgL_<8H_O9-qO{x7+b0cp zBWMeJ*4GRv01}R~Yh6?4Vwq(mz-~^P;SQGqE$8)>7k0Je2 z3X90&c4ZywXQ3~(tfM7&eu{j0C(U+3i#|L=W5v@zYA#IV+Fn<0)3~syRD#u(#)Djt zDPzrS!h9-i!vJ8+`5*62ruEUZ76h z4&UFnxuVvW9gLd1FFUR=?6f}+wV%CE*4n`U2IB()7VoKfc-Fntk==&Z+Zg2xcGevq z9q(=gZ^|)}=RJPyvBz&Qb(l<_yZ*gUcDI(IlII+0d1qJ=oUH#$i_x>Gk7^goT2Yd_ zB4+K%%lZ;A12l{7u6Ls-Qm6alkw`EmJneHvK4Zsa(3LT8OgkRYU!-XEM>&}{Qp5~+ z0V5rlQf03buG^0rVN6_-_8HA3-^y+?e21qotmx0lb*M6%N{HSXkCiXrF#km%Kc}xBn?W6CXWVF~XxwA@=eBEbW2{zA- z$t7~}mDfh2*KO7YP51tW*4AAuZ%$&!!AONZjBKz}Sb4-N4j!GJUu!KdbzxTKO@f zY%le7ZMZDu`=Xn~{Mo4z;C>P8nIA~1(|MH7xcNB@$-_)n8pAJb6`x{G?jvF@ZJpm7 zPwB2sSD1aXP|dt-am#vj5l7oA`NXq-B4cjx8?bid4i>wzmnDRAY);*3y*$M?mMzgg zopCXdWJpT=-d>;C=-fGJAey4(*KYk8W5teE?OCJ#6}2PL;+-b~L^3DwXL@SoFWiqx zCL||8k-wzoeNy`0WT^$Hv6dS?ZrcAORRO%j;>*eNdT!Uxx%Am0Ny=Ty7Ci=>Wviplp6=^F*+cN&DZ@cY>^ZEw®qFF8Wt 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 e)Ybt)_kzDcn$0*X4B(UV4eyi?R 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 dict: + long_names: list, plot_types: list, + statistics: list) -> dict: '''Create a provenance record describing the diagnostic data and plots.''' record = { 'caption': @@ -62,15 +171,18 @@ def get_provenance_record(caption: str, ancestors: list, plot_types, 'ancestors': ancestors, + 'statistics': + statistics } return record def log_provenance(caption: str, filename: str, cfg: dict, - ancestors: list, long_names: list, plot_types: list): + ancestors: list, long_names: list, plot_types: list, + statistics: list): '''Log provenance info.''' provenance_record = get_provenance_record( - caption, ancestors, long_names, plot_types) + caption, ancestors, long_names, plot_types, statistics) with ProvenanceLogger(cfg) as provenance_logger: provenance_logger.log(filename, provenance_record) @@ -140,7 +252,7 @@ def write_mapping_dict(work_dir: str, dataset: str, mapping_dict: dict): json.dump(mapping_dict_reformat, file) -def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, +def calc_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, dataset: str, correlation_thresold: float, rmse_threshold: float, ancestors: list) -> np.array: '''Calculate simplified weathertypes for observation datasets based on @@ -169,7 +281,7 @@ def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: logger.info( - 'calculate_slwt_obs - CAUTION: Skipped wt %s \ + 'calc_slwt_obs - CAUTION: Skipped wt %s \ for dataset %s!', wt, dataset ) continue @@ -198,7 +310,7 @@ def calculate_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, ancestors, - ['Lamb Weathertypes'], ['']) + ['Lamb Weathertypes'], ['other'], ['other']) return map_lwt_to_slwt(lwt, mapping_dict) @@ -473,8 +585,9 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: return wt -def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, - preproc_path: str, output_file_path: str): +def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, + preproc_path: str, output_file_path: str, + predefined_slwt): '''Calculate Lamb WT and simplified WT for model data. Args: @@ -490,29 +603,36 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, if not os.path.exists(f'{work_dir}/{output_file_path}'): os.makedirs(f'{work_dir}/{output_file_path}') - wt = wt_algorithm(cube, dataset) + lwt = wt_algorithm(cube, dataset) tcoord = cube.coord('time') time_points = tcoord.units.num2date(tcoord.points) - with open(f'{work_dir}/wt_mapping_dict_ERA5.json', - 'r', encoding='utf-8') as file: - mapping_dict_era5_f = json.load(file) - - with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', - 'r', encoding='utf-8') as file: - mapping_dict_eobs_f = json.load(file) - logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) - mapping_dict_era5 = reverse_convert_dict(mapping_dict_era5_f) - mapping_dict_eobs = reverse_convert_dict(mapping_dict_eobs_f) + if not predefined_slwt: + with open(f'{work_dir}/wt_mapping_dict_ERA5.json', + 'r', encoding='utf-8') as file: + mapping_dict_era5_f = json.load(file) - slwt_era5 = map_lwt_to_slwt(wt, mapping_dict_era5) - slwt_eobs = map_lwt_to_slwt(wt, mapping_dict_eobs) + with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', + 'r', encoding='utf-8') as file: + mapping_dict_eobs_f = json.load(file) + mapping_dict_era5 = reverse_convert_dict(mapping_dict_era5_f) + mapping_dict_eobs = reverse_convert_dict(mapping_dict_eobs_f) + + slwt_era5 = map_lwt_to_slwt(lwt, mapping_dict_era5) + slwt_eobs = map_lwt_to_slwt(lwt, mapping_dict_eobs) + else: + predefined_slwt = check_mapping_dict_format( + predefined_slwt) + write_mapping_dict(work_dir, "ERA5", predefined_slwt) + write_mapping_dict(work_dir, "E-OBS", predefined_slwt) + slwt_era5 = map_lwt_to_slwt(lwt, predefined_slwt) + slwt_eobs = map_lwt_to_slwt(lwt, predefined_slwt) wt_cube = iris.cube.CubeList() - wt_cube.append(iris.cube.Cube(wt, long_name='lwt')) + wt_cube.append(iris.cube.Cube(lwt, long_name='lwt')) wt_cube.append(iris.cube.Cube(slwt_era5, long_name='slwt_era5')) wt_cube.append(iris.cube.Cube(slwt_eobs, long_name='slwt_eobs')) @@ -525,7 +645,7 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, # write to csv file d = { 'date': time_points[:], - 'lwt': np.int8(wt), + 'lwt': np.int8(lwt), 'slwt_ERA5': np.int8(slwt_era5), 'slwt_EOBS': np.int8(slwt_eobs), } @@ -535,7 +655,7 @@ def calculate_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, [preproc_path, f'{work_dir}/wt_mapping_dict_ERA5.json', f'{work_dir}/wt_mapping_dict_E-OBS.json'], - ['Lamb Weathertypes'], ['']) + ['Lamb Weathertypes'], ['other'], ['other']) def get_colormap(colormap_string: str) -> ListedColormap: @@ -624,7 +744,7 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, plt.title(f'{var_name} {mode}, wt: {wt}') unit = '[hPa]' im = iplt.contourf(cube / 100, cmap=psl_cmap) - elif var_name == 'prcp': + elif var_name == 'pr': prcp_cmap = get_colormap('prcp') if dataset == 'ERA5': unit = '[m]' @@ -672,6 +792,10 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, os.path.join( local_path, f'{wt_string}_{wt}_{dataset}_{var_name}_{mode}.png') ) + plt.savefig( + os.path.join( + local_path, f'{wt_string}_{wt}_{dataset}_{var_name}_{mode}.pdf') + ) plt.close() @@ -740,13 +864,20 @@ def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, mask = np.zeros_like(pattern_correlation_matrix) mask[np.triu_indices_from(mask)] = True with sns.axes_style('white'): + plt.figure(figsize=(10, 10)) plt.title('Correlation Matrix') + levels = np.linspace(np.min(pattern_correlation_matrix), np.max(pattern_correlation_matrix), 9) ax = sns.heatmap(pattern_correlation_matrix, mask=mask, - square=True, annot=True, annot_kws={'size': 5}, + square=True, annot=True, annot_kws={'size': 6}, cmap='seismic', xticklabels=labels, - yticklabels=labels) - ax.set_xlabel('lwt', fontsize=8, rotation=90) + yticklabels=labels, + cbar_kws={'ticks': levels, 'shrink': 0.8, 'format': '%.2f'}) + ax.set_xlabel('lwt', fontsize=8) + ax.set_xticklabels(ax.get_xticklabels(), rotation=0) + ax.set_yticklabels(ax.get_yticklabels(), rotation=0) ax.set_ylabel('lwt', fontsize=8) + #plt.colorbar() + plt.tight_layout() plt.savefig( os.path.join( work_dir, f'correlation_matrix_{dataset}.png') @@ -756,13 +887,20 @@ def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, mask = np.zeros_like(rmse_matrix) mask[np.triu_indices_from(mask)] = True with sns.axes_style('white'): + plt.figure(figsize=(10, 10)) plt.title('RMSE Matrix') + levels = np.linspace(np.min(rmse_matrix), np.max(rmse_matrix), 9) ax = sns.heatmap(rmse_matrix, mask=mask, - square=True, annot=True, annot_kws={'size': 5}, + square=True, annot=True, annot_kws={'size': 6}, cmap='seismic', xticklabels=labels, - yticklabels=labels) - ax.set_xlabel('lwt', fontsize=8, rotation=90) + yticklabels=labels, + cbar_kws={'ticks': levels, 'shrink': 0.8, 'format': '%.2f'}) + ax.set_xlabel('lwt', fontsize=8) + ax.set_xticklabels(ax.get_xticklabels(), rotation=0) + ax.set_yticklabels(ax.get_yticklabels(), rotation=0) ax.set_ylabel('lwt', fontsize=8) + #plt.colorbar() + plt.tight_layout() plt.savefig( os.path.join( work_dir, f'rmse_matrix_{dataset}.png') @@ -847,10 +985,10 @@ def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, return selected_pairs -def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, +def calc_wt_means(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, var_name: str, wt_string: str, preproc_path: str): - '''Calculate means of fields of each weathertype + '''calculate means of fields of each weathertype Args: cfg (dict): Configuration dictionary from recipe @@ -873,25 +1011,27 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, slwt_era5_cube = wt_cubes[1] tcoord = slwt_era5_cube.coord('time') slwt_era5 = slwt_era5_cube.data[:] + num_slwt = len(np.unique(slwt_era5)) elif wt_string == 'slwt_EOBS': slwt_eobs_cube = wt_cubes[2] tcoord = slwt_eobs_cube.coord('time') slwt_eobs = slwt_eobs_cube.data[:] + num_slwt = len(np.unique(slwt_eobs)) elif wt_string == 'lwt': lwt_cube = wt_cubes[0] tcoord = lwt_cube.coord('time') lwt = lwt_cube.data[:] - num_slwt_era5 = len(np.unique(slwt_era5)) - num_slwt_eobs = len(np.unique(slwt_eobs)) + #num_slwt_era5 = len(np.unique(slwt_era5)) + #num_slwt_eobs = len(np.unique(slwt_eobs)) - if num_slwt_eobs != num_slwt_era5: - logger.info('calculate_wt_means - CAUTION: unequal number of \ - slwt_era5 (%s) \ and slwt_eobs (%s)!', - num_slwt_era5, num_slwt_eobs) + #if num_slwt_eobs != num_slwt_era5: + # logger.info('calc_wt_means - CAUTION: unequal number of \ + # slwt_era5 (%s) \ and slwt_eobs (%s)!', + # num_slwt_era5, num_slwt_eobs) if 'slwt' in wt_string: - for wt in range(1, max(num_slwt_era5, num_slwt_eobs)): + for wt in range(1, num_slwt+1):#max(num_slwt_era5, num_slwt_eobs)): if wt_string == 'slwt_ERA5': target_indices = np.where(slwt_era5 == wt) elif wt_string == 'slwt_EOBS': @@ -900,8 +1040,8 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, logger.info('WT_STRING not supported!') if len(target_indices[0]) < 1: logger.info( - 'calculate_wt_means - CAUTION: Skipped wt %s \ - for dataset %s!', wt, dataset + 'calc_wt_means - CAUTION: Skipped %s %s \ + for dataset %s!', wt_string, wt, dataset ) continue dates = [tcoord.units.num2date(tcoord.points[i]) @@ -918,7 +1058,7 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: logger.info( - 'calculate_wt_means - CAUTION: Skipped wt %s \ + 'calc_wt_means - CAUTION: Skipped lwt %s \ for dataset %s!', wt, dataset ) continue @@ -936,10 +1076,10 @@ def calculate_wt_means(cfg: dict, cube: iris.cube.Cube, log_provenance(f'{var_name} means for {wt_string}', f'{dataset}_{var_name}_{wt_string}_means_prov', cfg, [f'{preproc_path}', f'{work_dir}/ERA5.nc'], - [var_name], ['geo']) + [var_name], ['map'], ['mean']) -def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, +def calc_wt_anomalies(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, var_name: str, wt_string: str, preproc_path: str): '''Calculate anomalies of fields of each weathertype @@ -979,7 +1119,7 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, num_slwt_eobs = len(np.unique(slwt_eobs)) if num_slwt_eobs != num_slwt_era5: - logger.info('calculate_wt_means - CAUTION: unequal number of \ + logger.info('calc_wt_means - CAUTION: unequal number of \ slwt_era5 (%s) \ and slwt_eobs (%s)!', num_slwt_era5, num_slwt_eobs) @@ -993,7 +1133,7 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, logger.info('WT_STRING not supported!') if len(target_indices[0]) < 1: logger.info( - 'calculate_wt_anomalies - CAUTION: Skipped wt %s \ + 'calc_wt_anomalies - CAUTION: Skipped wt %s \ for dataset %s!', wt, dataset ) continue @@ -1011,7 +1151,7 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: logger.info( - 'calculate_wt_anomalies - CAUTION: Skipped wt %s \ + 'calc_wt_anomalies - CAUTION: Skipped wt %s \ for dataset %s!', wt, dataset ) continue @@ -1028,10 +1168,10 @@ def calculate_wt_anomalies(cfg: dict, cube: iris.cube.Cube, log_provenance(f'{var_name} anomaly for {wt_string}', f'{dataset}_{var_name}_{wt_string}_anomalies_prov', cfg, - [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['geo']) + [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['map'], ['anomaly']) -def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, +def calc_wt_std(cfg: dict, cube: iris.cube.Cube, wt_cubes: iris.cube.CubeList, dataset: str, var_name: str, wt_string: str, preproc_path: str): '''Calculate standard deviation of fields of each weathertype @@ -1071,7 +1211,7 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, num_slwt_eobs = len(np.unique(slwt_eobs)) if num_slwt_eobs != num_slwt_era5: - logger.info('calculate_wt_means - CAUTION: unequal number of \ + logger.info('calc_wt_means - CAUTION: unequal number of \ slwt_era5 (%s) \ and slwt_eobs (%s)!', num_slwt_era5, num_slwt_eobs) @@ -1085,7 +1225,7 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, logger.info('WT_STRING not supported!') if len(target_indices[0]) < 1: logger.info( - 'calculate_slwt_obs - CAUTION: Skipped wt %s \ + 'calc_slwt_obs - CAUTION: Skipped wt %s \ for dataset %s!', wt, dataset ) continue @@ -1103,7 +1243,7 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: logger.info( - 'calculate_wt_std - CAUTION: Skipped wt %s \ + 'calc_wt_std - CAUTION: Skipped wt %s \ for dataset %s!', wt, dataset ) continue @@ -1121,7 +1261,8 @@ def calculate_wt_std(cfg: dict, cube: iris.cube.Cube, log_provenance(f'{var_name} standard deviation for {wt_string}', f'{dataset}_{var_name}_{wt_string}_std_prov', cfg, - [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['geo']) + [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['map'], + ['stddev']) def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, @@ -1197,7 +1338,7 @@ def write_lwt_to_file(cfg: dict, lwt: np.array, cube: iris.cube.Cube, df.to_csv(write_path + f'/{file_name}.csv', index=False) -def calculate_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_file_path: str): +def calc_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_file_path: str): '''Calculate lwt for model data Args: diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index 1d906a96f8..05c2545eb2 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -8,55 +8,24 @@ ) -def run_my_diagnostic(cfg: dict): - ''' - Arguments: - cfg - nested dictionary of metadata - - Returns: - string; runs the user diagnostic - - ''' - # assemble the data dictionary keyed by dataset name - # this makes use of the handy group_metadata function that - # orders the data by 'dataset'; the resulting dictionary is - # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} - # where var1, var2 are dicts holding all needed information per variable - preproc_variables_dict = group_metadata( - cfg.get('input_data').values(), 'dataset') - - correlation_threshold = cfg.get('correlation_threshold') - rmse_threshold = cfg.get('rmse_threshold') - work_dir = cfg.get('work_dir') - plotting = cfg.get('plotting', False) - automatic_slwt = cfg.get('automatic_slwt') - predefined_slwt = cfg.get('predefined_slwt', False) - - # load cubes and run functions - # key = dataset name, value is dataset - if automatic_slwt: - for key, value in preproc_variables_dict.items(): +def run_automatic_slwt(cfg: dict, preproc_variables_dict: dict, + correlation_threshold: float, + rmse_threshold: float, work_dir: str, + plotting: bool, predefined_slwt): + for key, value in preproc_variables_dict.items(): if key == 'ERA5': - wt_preproc = iris.load_cube(value[0].get('filename')) - wt_preproc_prcp = iris.load_cube(value[1].get('filename')) - mean_preproc_psl = iris.load_cube(value[2].get('filename')) - mean_preproc_prcp = iris.load_cube(value[3].get('filename')) - mean_preproc_tas = iris.load_cube(value[4].get('filename')) - wt_preproc_prcp_eobs = iris.load_cube( - preproc_variables_dict.get('E-OBS')[0].get('filename') + wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs = load_wt_preprocessors( + value, preproc_variables_dict ) # calculate lwt lwt = wt_algorithm(wt_preproc, key) - era5_ancestors = [value[0].get('filename'), - value[1].get('filename')] - eobs_ancestors = [value[0].get('filename'), - preproc_variables_dict.get('E-OBS')[0].get('filename')] + era5_ancestors, eobs_ancestors = get_ancestors(value, preproc_variables_dict) # calculate simplified lwt based on precipitation patterns or use predefined_slwt if predefined_slwt is False: - slwt_era5 = calculate_slwt_obs( + slwt_era5 = calc_slwt_obs( cfg, lwt, wt_preproc_prcp, @@ -65,7 +34,7 @@ def run_my_diagnostic(cfg: dict): rmse_threshold, era5_ancestors, ) - slwt_eobs = calculate_slwt_obs( + slwt_eobs = calc_slwt_obs( cfg, lwt, wt_preproc_prcp_eobs, @@ -87,234 +56,56 @@ def run_my_diagnostic(cfg: dict): slwt_eobs, wt_preproc, key) # load weathertype files as cubes - lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') - slwt_era5_cube = iris.load_cube( - f'{work_dir}/{key}.nc', 'slwt_era5') - slwt_eobs_cube = iris.load_cube( - f'{work_dir}/{key}.nc', 'slwt_eobs') - wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] + wt_cubes = load_wt_files(f'{work_dir}/{key}.nc') - preproc_path_psl = value[2].get('filename') - preproc_path_prcp = value[3].get('filename') - preproc_path_tas = value[4].get('filename') + var_dict = get_looping_dict(value) #value is list of variables for dataset key if plotting: # plot means - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='lwt', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='lwt', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='lwt', - preproc_path=preproc_path_tas, - ) - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='slwt_ERA5', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='slwt_ERA5', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='slwt_ERA5', - preproc_path=preproc_path_tas, - ) - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='slwt_EOBS', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='slwt_EOBS', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='slwt_EOBS', - preproc_path=preproc_path_tas, - ) + for var_name, var_data in var_dict.items(): + print(var_name, var_data[1]) + print(var_name, var_data[0]) + plot_means(cfg, var_data[0], wt_cubes, key, var_name, var_data[1]) else: if key == 'E-OBS': continue wt_preproc = iris.load_cube(value[0].get('filename')) - mean_preproc_psl = iris.load_cube(value[1].get('filename')) - mean_preproc_prcp = iris.load_cube(value[2].get('filename')) - mean_preproc_tas = iris.load_cube(value[3].get('filename')) - - model_name = key - timerange = value[0].get('timerange').replace('/', '-') - experiment = value[0].get('exp') - ensemble = value[0].get('ensemble') - output_file_path = f'{ - model_name}/{experiment}/{ensemble}/{timerange}' - preproc_path = value[0].get('filename') + output_file_path, preproc_path = get_model_output_filepath(key, value) # calculate weathertypes - calculate_lwt_slwt_model( - cfg, wt_preproc, key, preproc_path, output_file_path) + calc_lwt_slwt_model( + cfg, wt_preproc, key, preproc_path, output_file_path, + predefined_slwt) # load wt files - lwt_cube = iris.load_cube( - f'{work_dir}/{output_file_path}/{key}.nc', 'lwt') - slwt_era5_cube = iris.load_cube( - f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_era5') - slwt_eobs_cube = iris.load_cube( - f'{work_dir}/{output_file_path}/{key}.nc', 'slwt_eobs') - wt_cubes = [lwt_cube, slwt_era5_cube, slwt_eobs_cube] - - preproc_path_psl = value[1].get('filename') - preproc_path_prcp = value[2].get('filename') - preproc_path_tas = value[3].get('filename') + wt_cubes = load_wt_files(f'{work_dir}/{output_file_path}/{key}.nc') + + var_dict = get_looping_dict(value) #value is list of variables for dataset key if plotting: # plot means - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='lwt', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='lwt', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='lwt', - preproc_path=preproc_path_tas, - ) - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='slwt_ERA5', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='slwt_ERA5', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='slwt_ERA5', - preproc_path=preproc_path_tas, - ) - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='slwt_EOBS', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='slwt_EOBS', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='slwt_EOBS', - preproc_path=preproc_path_tas, - ) - elif not automatic_slwt: # if automatic_slwt is false, and predefined_slwt is false, just write selected pairs to file - for key, value in preproc_variables_dict.items(): + for var_name, var_data in var_dict.items(): + plot_means(cfg, var_data[0], wt_cubes, key, var_name, var_data[1]) + + +def run_lwt(cfg: dict, preproc_variables_dict: dict, + correlation_threshold: float, + rmse_threshold: float, work_dir: str, + plotting: bool): + for key, value in preproc_variables_dict.items(): if key == 'ERA5': - wt_preproc = iris.load_cube(value[0].get('filename')) - wt_preproc_prcp = iris.load_cube(value[1].get('filename')) - mean_preproc_psl = iris.load_cube(value[2].get('filename')) - mean_preproc_prcp = iris.load_cube(value[3].get('filename')) - mean_preproc_tas = iris.load_cube(value[4].get('filename')) - wt_preproc_prcp_eobs = iris.load_cube( - preproc_variables_dict.get('E-OBS')[0].get('filename') + wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs = load_wt_preprocessors( + value, preproc_variables_dict ) # calculate lwt lwt = wt_algorithm(wt_preproc, key) + era5_ancestors, eobs_ancestors = get_ancestors(value, preproc_variables_dict) + # calculate simplified lwt based on precipitation patterns - slwt_era5 = calculate_slwt_obs( + slwt_era5 = calc_slwt_obs( cfg, lwt, wt_preproc_prcp, @@ -323,7 +114,7 @@ def run_my_diagnostic(cfg: dict): rmse_threshold, era5_ancestors, ) - slwt_eobs = calculate_slwt_obs( + slwt_eobs = calc_slwt_obs( cfg, lwt, wt_preproc_prcp_eobs, @@ -336,101 +127,73 @@ def run_my_diagnostic(cfg: dict): # write only lwt to file write_lwt_to_file(cfg, lwt, wt_preproc, key) - # load weathertype files as cubes - lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') - wt_cubes = [lwt_cube] + # load wt files + wt_cubes = load_wt_files(f'{work_dir}/{key}.nc', only_lwt=True) - preproc_path_psl = value[2].get('filename') - preproc_path_prcp = value[3].get('filename') - preproc_path_tas = value[4].get('filename') + var_dict = get_looping_dict(value) #value is list of variables for dataset key if plotting: # plot means - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='lwt', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='lwt', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='lwt', - preproc_path=preproc_path_tas, - ) + for var_name, var_data in var_dict.items(): + plot_means(cfg, var_data[0], wt_cubes, key, var_name, var_data[1], only_lwt=True) else: if key == 'E-OBS': continue wt_preproc = iris.load_cube(value[0].get('filename')) - mean_preproc_psl = iris.load_cube(value[1].get('filename')) - mean_preproc_prcp = iris.load_cube(value[2].get('filename')) - mean_preproc_tas = iris.load_cube(value[3].get('filename')) - - model_name = key - timerange = value[0].get('timerange').replace('/', '-') - experiment = value[0].get('exp') - ensemble = value[0].get('ensemble') - output_file_path = f'{ - model_name}/{experiment}/{ensemble}/{timerange}' + output_file_path = get_model_output_filepath(key, value)[1] # calculate weathertypes - calculate_lwt_model(cfg, wt_preproc, key, output_file_path) + calc_lwt_model(cfg, wt_preproc, key, output_file_path) # load wt files - lwt_cube = iris.load_cube(f'{work_dir}/{key}.nc', 'lwt') - wt_cubes = [lwt_cube] + wt_cubes = load_wt_files(f'{work_dir}/{key}.nc', only_lwt=True) - # plot means - preproc_path_psl = value[2].get('filename') - preproc_path_prcp = value[3].get('filename') - preproc_path_tas = value[4].get('filename') + var_dict = get_looping_dict(value) #value is list of variables for dataset key if plotting: # plot means - calculate_wt_means( - cfg, - mean_preproc_psl, - wt_cubes, - key, - var_name='psl', - wt_string='lwt', - preproc_path=preproc_path_psl, - ) - calculate_wt_means( - cfg, - mean_preproc_prcp, - wt_cubes, - key, - var_name='prcp', - wt_string='lwt', - preproc_path=preproc_path_prcp, - ) - calculate_wt_means( - cfg, - mean_preproc_tas, - wt_cubes, - key, - var_name='tas', - wt_string='lwt', - preproc_path=preproc_path_tas, - ) + for var_name, var_data in var_dict.items(): + plot_means(cfg, var_data[0], wt_cubes, key, var_name, var_data[1], only_lwt=True) + + + +def run_my_diagnostic(cfg: dict): + ''' + Arguments: + cfg - nested dictionary of metadata + Returns: + string; runs the user diagnostic + + ''' + # assemble the data dictionary keyed by dataset name + # this makes use of the handy group_metadata function that + # orders the data by 'dataset'; the resulting dictionary is + # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} + # where var1, var2 are dicts holding all needed information per variable + preproc_variables_dict = group_metadata( + cfg.get('input_data').values(), 'dataset') + + correlation_threshold = cfg.get('correlation_threshold') + rmse_threshold = cfg.get('rmse_threshold') + work_dir = cfg.get('work_dir') + plotting = cfg.get('plotting', False) + automatic_slwt = cfg.get('automatic_slwt') + predefined_slwt = cfg.get('predefined_slwt', False) + + # load cubes and run functions + # key = dataset name, value is dataset + if automatic_slwt: + run_automatic_slwt(cfg, preproc_variables_dict, + correlation_threshold, + rmse_threshold, work_dir, + plotting, predefined_slwt) + elif not automatic_slwt: # if automatic_slwt is false, and predefined_slwt is false, just write selected pairs to file + run_lwt(cfg, preproc_variables_dict, + correlation_threshold, + rmse_threshold, work_dir, + plotting) if __name__ == '__main__': diff --git a/esmvaltool/recipes/recipe_weathertyping.yml b/esmvaltool/recipes/recipe_weathertyping.yml index 6c785384b9..759dfa471f 100644 --- a/esmvaltool/recipes/recipe_weathertyping.yml +++ b/esmvaltool/recipes/recipe_weathertyping.yml @@ -9,10 +9,10 @@ documentation: authors: - jury_martin - - kroißenbrunner_thomas + - kroissenbrunner_thomas maintainer: - - kroißenbrunner_thomas + - kroissenbrunner_thomas projects: - preval @@ -258,6 +258,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} - plotting: False + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true script: ../diag_scripts/weathertyping/weathertyping.py From e48c39127c4f2fd0564269d9a3bcd02e87f681d2 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sat, 29 Jun 2024 16:53:12 +0200 Subject: [PATCH 15/29] reformat --- .../weathertyping/weathertyping.py | 317 ++++--- .../weathertyping/{utils.py => wt_utils.py} | 885 +++++++++++------- 2 files changed, 690 insertions(+), 512 deletions(-) rename esmvaltool/diag_scripts/weathertyping/{utils.py => wt_utils.py} (64%) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index 05c2545eb2..f79f22d937 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -1,117 +1,40 @@ -from utils import * +from wt_utils import (get_cfg_vars, load_wt_preprocessors, + wt_algorithm, get_ancestors_era5_eobs, calc_slwt_obs, + run_predefined_slwt, combine_wt_to_file, load_wt_files, + get_looping_dict, plot_means, get_model_output_filepath, + calc_lwt_slwt_model, write_lwt_to_file, calc_lwt_model + ) + +import iris # import internal esmvaltool modules here from esmvaltool.diag_scripts.shared import ( - group_metadata, run_diagnostic, - ProvenanceLogger ) -def run_automatic_slwt(cfg: dict, preproc_variables_dict: dict, - correlation_threshold: float, - rmse_threshold: float, work_dir: str, - plotting: bool, predefined_slwt): - for key, value in preproc_variables_dict.items(): - if key == 'ERA5': - wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs = load_wt_preprocessors( - value, preproc_variables_dict - ) - - # calculate lwt - lwt = wt_algorithm(wt_preproc, key) - - era5_ancestors, eobs_ancestors = get_ancestors(value, preproc_variables_dict) - - # calculate simplified lwt based on precipitation patterns or use predefined_slwt - if predefined_slwt is False: - slwt_era5 = calc_slwt_obs( - cfg, - lwt, - wt_preproc_prcp, - key, - correlation_threshold, - rmse_threshold, - era5_ancestors, - ) - slwt_eobs = calc_slwt_obs( - cfg, - lwt, - wt_preproc_prcp_eobs, - 'E-OBS', - correlation_threshold, - rmse_threshold, - eobs_ancestors, - ) - else: - predefined_slwt = check_mapping_dict_format( - predefined_slwt) - write_mapping_dict(work_dir, key, predefined_slwt) - write_mapping_dict(work_dir, "E-OBS", predefined_slwt) - slwt_era5 = map_lwt_to_slwt(lwt, predefined_slwt) - slwt_eobs = map_lwt_to_slwt(lwt, predefined_slwt) - - # write to file - combine_wt_to_file(cfg, lwt, slwt_era5, - slwt_eobs, wt_preproc, key) - - # load weathertype files as cubes - wt_cubes = load_wt_files(f'{work_dir}/{key}.nc') - - var_dict = get_looping_dict(value) #value is list of variables for dataset key - - if plotting: - # plot means - for var_name, var_data in var_dict.items(): - print(var_name, var_data[1]) - print(var_name, var_data[0]) - plot_means(cfg, var_data[0], wt_cubes, key, var_name, var_data[1]) - else: - if key == 'E-OBS': - continue - wt_preproc = iris.load_cube(value[0].get('filename')) - - output_file_path, preproc_path = get_model_output_filepath(key, value) - - # calculate weathertypes - calc_lwt_slwt_model( - cfg, wt_preproc, key, preproc_path, output_file_path, - predefined_slwt) - - # load wt files - wt_cubes = load_wt_files(f'{work_dir}/{output_file_path}/{key}.nc') - - var_dict = get_looping_dict(value) #value is list of variables for dataset key - - if plotting: - # plot means - for var_name, var_data in var_dict.items(): - plot_means(cfg, var_data[0], wt_cubes, key, var_name, var_data[1]) - - -def run_lwt(cfg: dict, preproc_variables_dict: dict, - correlation_threshold: float, - rmse_threshold: float, work_dir: str, - plotting: bool): - for key, value in preproc_variables_dict.items(): - if key == 'ERA5': - wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs = load_wt_preprocessors( - value, preproc_variables_dict - ) +def run_automatic_slwt(cfg: dict): + preproc_variables_dict, correlation_threshold, rmse_threshold, \ + work_dir, plotting, _, predefined_slwt = get_cfg_vars(cfg) + for dataset_name, dataset_vars in preproc_variables_dict.items(): + if dataset_name == 'ERA5': + wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs = \ + load_wt_preprocessors(dataset_name, preproc_variables_dict) - # calculate lwt - lwt = wt_algorithm(wt_preproc, key) + # calculate lwt + lwt = wt_algorithm(wt_preproc, dataset_name) - era5_ancestors, eobs_ancestors = get_ancestors(value, preproc_variables_dict) + era5_ancestors, eobs_ancestors = get_ancestors_era5_eobs( + dataset_name, preproc_variables_dict) - # calculate simplified lwt based on precipitation patterns + # calculate simplified lwt based on precipitation + # patterns or use predefined_slwt + if predefined_slwt is False: slwt_era5 = calc_slwt_obs( cfg, lwt, wt_preproc_prcp, - key, - correlation_threshold, - rmse_threshold, + dataset_name, era5_ancestors, ) slwt_eobs = calc_slwt_obs( @@ -119,43 +42,144 @@ def run_lwt(cfg: dict, preproc_variables_dict: dict, lwt, wt_preproc_prcp_eobs, 'E-OBS', - correlation_threshold, - rmse_threshold, eobs_ancestors, ) - - # write only lwt to file - write_lwt_to_file(cfg, lwt, wt_preproc, key) - - # load wt files - wt_cubes = load_wt_files(f'{work_dir}/{key}.nc', only_lwt=True) - - var_dict = get_looping_dict(value) #value is list of variables for dataset key - - if plotting: - # plot means - for var_name, var_data in var_dict.items(): - plot_means(cfg, var_data[0], wt_cubes, key, var_name, var_data[1], only_lwt=True) else: - if key == 'E-OBS': - continue - wt_preproc = iris.load_cube(value[0].get('filename')) - - output_file_path = get_model_output_filepath(key, value)[1] - - # calculate weathertypes - calc_lwt_model(cfg, wt_preproc, key, output_file_path) - - # load wt files - wt_cubes = load_wt_files(f'{work_dir}/{key}.nc', only_lwt=True) - - var_dict = get_looping_dict(value) #value is list of variables for dataset key - - if plotting: - # plot means - for var_name, var_data in var_dict.items(): - plot_means(cfg, var_data[0], wt_cubes, key, var_name, var_data[1], only_lwt=True) - + slwt_era5, slwt_eobs = run_predefined_slwt(work_dir, + dataset_name, + lwt, + predefined_slwt) + + # write to file + wt_list = [lwt, slwt_era5, slwt_eobs] + combine_wt_to_file(cfg, wt_list, wt_preproc, + dataset_name) + + # load weathertype files as cubes + wt_cubes = load_wt_files(f'{work_dir}/{dataset_name}.nc') + + var_dict = get_looping_dict( + dataset_vars + ) # dataset_vars is list of variables for dataset dataset_name + + if plotting: + # plot means + for var_name, var_data in var_dict.items(): + data_info = {'dataset': dataset_name, + 'var': var_name, + 'preproc_path': var_data[1]} + plot_means(cfg, var_data[0], wt_cubes, data_info) + else: + if dataset_name == 'E-OBS': + continue + wt_preproc = iris.load_cube(dataset_vars[0].get('filename')) + + output_file_path, preproc_path = get_model_output_filepath( + dataset_name, dataset_vars) + + # calculate weathertypes + data_info = {'dataset': dataset_name, + 'preproc_path': preproc_path, + 'output_file_path': output_file_path} + calc_lwt_slwt_model(cfg, wt_preproc, data_info, predefined_slwt) + + # load wt files + wt_cubes = load_wt_files( + f'{work_dir}/{output_file_path}/{dataset_name}.nc') + + var_dict = get_looping_dict( + dataset_vars + ) # dataset_vars is list of variables for dataset dataset_name + + if plotting: + # plot means + for var_name, var_data in var_dict.items(): + plot_means(cfg, var_data[0], wt_cubes, dataset_name, + var_name, var_data[1]) + + +def run_lwt(cfg: dict): + preproc_variables_dict, correlation_threshold, rmse_threshold, \ + work_dir, plotting, _, _ = get_cfg_vars(cfg) + for dataset_name, dataset_vars in preproc_variables_dict.items(): + if dataset_name == 'ERA5': + wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs = \ + load_wt_preprocessors(dataset_name, preproc_variables_dict) + + # calculate lwt + lwt = wt_algorithm(wt_preproc, dataset_name) + + era5_ancestors, eobs_ancestors = get_ancestors_era5_eobs( + dataset_name, preproc_variables_dict) + + # calculate simplified lwt based on precipitation patterns + _ = calc_slwt_obs( + cfg, + lwt, + wt_preproc_prcp, + dataset_name, + correlation_threshold, + rmse_threshold, + era5_ancestors, + ) + _ = calc_slwt_obs( + cfg, + lwt, + wt_preproc_prcp_eobs, + 'E-OBS', + correlation_threshold, + rmse_threshold, + eobs_ancestors, + ) + + # write only lwt to file + write_lwt_to_file(cfg, lwt, wt_preproc, dataset_name) + + # load wt files + wt_cubes = load_wt_files(f'{work_dir}/{dataset_name}.nc', + only_lwt=True) + + var_dict = get_looping_dict( + dataset_vars + ) # dataset_vars is list of variables for dataset dataset_name + + if plotting: + # plot means + for var_name, var_data in var_dict.items(): + data_info = {'dataset': dataset_name, + 'var': var_name, + 'preproc_path': var_data[1]} + plot_means(cfg, var_data[0], wt_cubes, data_info, + only_lwt=True) + else: + if dataset_name == 'E-OBS': + continue + wt_preproc = iris.load_cube(dataset_vars[0].get('filename')) + + output_file_path = get_model_output_filepath( + dataset_name, dataset_vars)[1] + + # calculate weathertypes + calc_lwt_model(cfg, wt_preproc, dataset_name, output_file_path) + + # load wt files + wt_cubes = load_wt_files(f'{work_dir}/{dataset_name}.nc', + only_lwt=True) + + var_dict = get_looping_dict( + dataset_vars + ) # dataset_vars is list of variables for dataset dataset_name + + if plotting: + # plot means + for var_name, var_data in var_dict.items(): + plot_means(cfg, + var_data[0], + wt_cubes, + dataset_name, + var_name, + var_data[1], + only_lwt=True) def run_my_diagnostic(cfg: dict): @@ -172,28 +196,15 @@ def run_my_diagnostic(cfg: dict): # orders the data by 'dataset'; the resulting dictionary is # keyed on datasets e.g. dict = {'MPI-ESM-LR': [var1, var2...]} # where var1, var2 are dicts holding all needed information per variable - preproc_variables_dict = group_metadata( - cfg.get('input_data').values(), 'dataset') - - correlation_threshold = cfg.get('correlation_threshold') - rmse_threshold = cfg.get('rmse_threshold') - work_dir = cfg.get('work_dir') - plotting = cfg.get('plotting', False) automatic_slwt = cfg.get('automatic_slwt') - predefined_slwt = cfg.get('predefined_slwt', False) - # load cubes and run functions - # key = dataset name, value is dataset if automatic_slwt: - run_automatic_slwt(cfg, preproc_variables_dict, - correlation_threshold, - rmse_threshold, work_dir, - plotting, predefined_slwt) - elif not automatic_slwt: # if automatic_slwt is false, and predefined_slwt is false, just write selected pairs to file - run_lwt(cfg, preproc_variables_dict, - correlation_threshold, - rmse_threshold, work_dir, - plotting) + run_automatic_slwt(cfg) + # if automatic_slwt is false, and predefined_slwt is false, + # just write selected pairs to file + elif not automatic_slwt: + run_lwt(cfg) + if __name__ == '__main__': diff --git a/esmvaltool/diag_scripts/weathertyping/utils.py b/esmvaltool/diag_scripts/weathertyping/wt_utils.py similarity index 64% rename from esmvaltool/diag_scripts/weathertyping/utils.py rename to esmvaltool/diag_scripts/weathertyping/wt_utils.py index 0aa1b8a3dd..633f464224 100644 --- a/esmvaltool/diag_scripts/weathertyping/utils.py +++ b/esmvaltool/diag_scripts/weathertyping/wt_utils.py @@ -1,64 +1,110 @@ # weathertyping diagnostic for esmvaltool # operating system manipulations (e.g. path constructions) +import json +import logging import os - -# to manipulate iris cubes -import iris +import warnings # plotting imports import cartopy.crs as ccrs import cartopy.feature as cfeature +# to manipulate iris cubes +import iris import iris.analysis.cartography import iris.plot as iplt import matplotlib.pyplot as plt import matplotlib.ticker as mticker -from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER -from matplotlib.colors import ListedColormap -import seaborn as sns - # general imports import numpy as np import pandas as pd -import json -import logging -import warnings -import os +import seaborn as sns +from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER +from matplotlib.colors import ListedColormap # import internal esmvaltool modules here from esmvaltool.diag_scripts.shared import ( - group_metadata, - run_diagnostic, - ProvenanceLogger + ProvenanceLogger, + group_metadata ) iris.FUTURE.datum_support = True -iris.FUTURE.save_split_attrs = True logger = logging.getLogger(os.path.basename(__file__)) + +# Ignoring a warning that is produced when selecting timesteps of a weathertype warnings.filterwarnings('ignore', '.*Collapsing a non-contiguous coordinate*') -def load_wt_preprocessors(value: list, preproc_variables_dict: dict): - wt_preproc = iris.load_cube(value[0].get('filename')) - wt_preproc_prcp = iris.load_cube(value[1].get('filename')) +def get_cfg_vars(cfg: dict): + preproc_variables_dict = group_metadata( + cfg.get('input_data').values(), 'dataset') + + correlation_threshold = cfg.get('correlation_threshold') + rmse_threshold = cfg.get('rmse_threshold') + work_dir = cfg.get('work_dir') + plotting = cfg.get('plotting', False) + automatic_slwt = cfg.get('automatic_slwt') + predefined_slwt = cfg.get('predefined_slwt', False) + + return (preproc_variables_dict, correlation_threshold, rmse_threshold, + work_dir, plotting, automatic_slwt, predefined_slwt) + + +def load_wt_preprocessors(dataset: str, preproc_variables_dict: dict): + """Load preprocessor cubes for calculating Lamb and simplified + weathertypes. + + Args: + dataset (str): dataset name + preproc_variables_dict (dict): dictionary of preprocessor variables + + Returns: + _type_: list of preprocessor vars for weathertyping + """ + wt_preproc = iris.load_cube( + preproc_variables_dict.get(dataset)[0].get('filename')) + wt_preproc_prcp = iris.load_cube( + preproc_variables_dict.get(dataset)[1].get('filename')) wt_preproc_prcp_eobs = iris.load_cube( - preproc_variables_dict.get('E-OBS')[0].get('filename') - ) + preproc_variables_dict.get('E-OBS')[0].get('filename')) return wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs -def get_ancestors(value: list, preproc_variables_dict: dict): - era5_ancestors = [value[0].get('filename'), - value[1].get('filename')] - eobs_ancestors = [value[0].get('filename'), - preproc_variables_dict.get('E-OBS')[0].get('filename')] +def get_ancestors_era5_eobs(dataset: str, preproc_variables_dict: dict): + """Get ancestors for ERA5/E-OBS. + + Args: + dataset (str): dataset name + preproc_variables_dict (dict): dictionary of preprocessor variables + + Returns: + _type_: lists of ERA5/E-OBS ancestors + """ + era5_ancestors = [ + preproc_variables_dict.get(dataset).get('filename'), + preproc_variables_dict.get(dataset)[1].get('filename') + ] + eobs_ancestors = [ + preproc_variables_dict.get(dataset).get('filename'), + preproc_variables_dict.get('E-OBS')[0].get('filename') + ] return era5_ancestors, eobs_ancestors -def get_model_output_filepath(key: str, value: list): - model_name = key +def get_model_output_filepath(dataset: str, value: list): + """Generate output filepath for model data. + + Args: + dataset (str): Model name + value (list): Model variables + + Returns: + _type_: Output filepath and preprocessor path for + future referencing. + """ + model_name = dataset timerange = value[0].get('timerange').replace('/', '-') experiment = value[0].get('exp') ensemble = value[0].get('ensemble') @@ -70,6 +116,16 @@ def get_model_output_filepath(key: str, value: list): def get_preproc_lists(preproc_vars: list): + """Put preprocessor variables and paths into list for further use. + + Args: + preproc_vars (list): List of variables for specific + dataset. + + Returns: + _type_: List of preprocessor cubes for mean calculations + as well as path to files. + """ preproc_path_psl = preproc_vars[-3].get('filename') preproc_path_prcp = preproc_vars[-2].get('filename') preproc_path_tas = preproc_vars[-1].get('filename') @@ -85,15 +141,36 @@ def get_preproc_lists(preproc_vars: list): def get_looping_dict(preproc_vars: list): + """Put cubes into dictionary for further use. + Args: + preproc_vars (list): Values of dataset dictionary + + Returns: + _type_: Dictionary of the form {'var': [preprov_var, preproc_path]} + """ preproc, preproc_path = get_preproc_lists(preproc_vars) - dict_ = {'psl': [preproc[0], preproc_path[0]], - 'pr': [preproc[1], preproc_path[1]], - 'tas': [preproc[2], preproc_path[2]]} + dict_ = { + 'psl': [preproc[0], preproc_path[0]], + 'pr': [preproc[1], preproc_path[1]], + 'tas': [preproc[2], preproc_path[2]] + } return dict_ def load_wt_files(path: str, only_lwt=False): + """Load *.nc files of weathertype data. If only_lwt is true, only Lamb + weathertypes will be loaded. (useful for automatic_slwt = False) + + Args: + path (str): Path to weathertype data. + only_lwt (bool, optional): If True, + only Lamb weathertypes will be loaded. Defaults to False. + (useful for automatic_slwt = False) + + Returns: + _type_: List of weathertype cubes. + """ if not only_lwt: lwt_cube = iris.load_cube(path, 'lwt') slwt_era5_cube = iris.load_cube(path, 'slwt_era5') @@ -106,83 +183,103 @@ def load_wt_files(path: str, only_lwt=False): return wt_cubes -def plot_means(cfg: dict, preproc_var: np.array, wt_cubes: iris.cube.Cube, - key: str, var: str, preproc_path: str, only_lwt=False): +def plot_means(cfg: dict, + preproc_var: np.array, + wt_cubes: iris.cube.Cube, + data_info: dict, + only_lwt=False): + """Wrapper function to plot various means/std/anomalies. + + Args: + cfg (dict): cfg dictionary provided by recipe + preproc_var (np.array): variable to be plotted + wt_cubes (iris.cube.Cube): list of wt cubes + dataset (str): dataset string + var (str): variable string + preproc_path (str): path to preprocessor + only_lwt (bool, optional): If True, + only Lamb weathertypes will be loaded. Defaults to False. + (useful for automatic_slwt = False) + """ + + data_info['wt_string'] = 'lwt' if not only_lwt: calc_wt_means( - cfg, - preproc_var, - wt_cubes, - key, - var_name=var, - wt_string='lwt', - preproc_path=preproc_path, - ) + cfg, + preproc_var, + wt_cubes, + data_info + ) + data_info['wt_string'] = 'slwt_ERA5' calc_wt_means( - cfg, - preproc_var, - wt_cubes, - key, - var_name=var, - wt_string='slwt_ERA5', - preproc_path=preproc_path, - ) + cfg, + preproc_var, + wt_cubes, + data_info + ) + data_info['wt_string'] = 'slwt_EOBS' calc_wt_means( - cfg, - preproc_var, - wt_cubes, - key, - var_name=var, - wt_string='slwt_EOBS', - preproc_path=preproc_path, - ) + cfg, + preproc_var, + wt_cubes, + data_info + ) else: - calc_wt_means(cfg, - preproc_var, - wt_cubes, - key, - var_name=var, - wt_string='lwt', - preproc_path=preproc_path, - ) - - -def get_provenance_record(caption: str, ancestors: list, - long_names: list, plot_types: list, - statistics: list) -> dict: - '''Create a provenance record describing the diagnostic data and plots.''' + data_info['wt_string'] = 'lwt' + calc_wt_means( + cfg, + preproc_var, + wt_cubes, + data_info + ) + + +def get_provenance_record(caption: str, ancestors: list, long_names: list, + plot_types: bool | list, + statistics: bool | list) -> dict: + """Get provenance record. + + Args: + caption (str): Caption for plots + ancestors (list): List of ancestors + long_names (list): Variable long names + plot_types (bool | list): Type of plot. Can be false + if output is not a plot. + statistics (bool | list): Types of statistics used. + + Returns: + dict: Provenance dictionary. + """ record = { - 'caption': - caption, + 'caption': caption, 'domains': ['reg'], - 'authors': [ - 'jury_martin', - 'kroissenbrunner_thomas' - ], - 'references': [ - 'TBD' - ], - 'projects': [ - 'preval' - ], - 'long_names': - long_names, - 'plot_types': - plot_types, - 'ancestors': - ancestors, - 'statistics': - statistics + 'authors': ['jury_martin', 'kroissenbrunner_thomas'], + 'references': ['maraun21jgr', 'jones93ijc'], + 'projects': ['preval'], + 'long_names': long_names, + 'ancestors': ancestors, } + if plot_types is not False: + record['plot_types'] = plot_types + if statistics is not False: + record['statistics'] = statistics return record -def log_provenance(caption: str, filename: str, cfg: dict, - ancestors: list, long_names: list, plot_types: list, - statistics: list): - '''Log provenance info.''' - provenance_record = get_provenance_record( - caption, ancestors, long_names, plot_types, statistics) +def log_provenance(filename: str, cfg: dict, provenance_record: dict): + """Log provenance. Produces xml file provenance info. + + Args: + caption (str): Caption of plots. + filename (str): Output name of provenance. + cfg (dict): Configuration dictionary provided by recipe. + ancestors (list): List of ancestors. + long_names (list): Variable long_names + plot_types (bool | list): Plot types. Can be false + if output is not a plot. + statistics (bool | list): Statistics used. + """ + with ProvenanceLogger(cfg) as provenance_logger: provenance_logger.log(filename, provenance_record) @@ -190,15 +287,14 @@ def log_provenance(caption: str, filename: str, cfg: dict, def turn_list_to_mapping_dict(list_: list) -> dict: - '''Turns a list of combined WT to a dictionary for further - processing. + """Turns a list of combined WT to a dictionary for further processing. Args: list_ (list): List where entries are lists with related WT Returns: dict: Mapping dicitonary keys are simplified WT, values are Lamb WT - ''' + """ result_dict = {} for i, s in enumerate(list_): @@ -212,16 +308,16 @@ def turn_list_to_mapping_dict(list_: list) -> dict: def get_mapping_dict(selected_pairs: list) -> dict: - '''Get mapping dictionary from list of selected pairs. + """Get mapping dictionary from list of selected pairs. Args: - selected_pairs (list): Selected pairs of WTs based on + selected_pairs (list): Selected pairs of WTs based on precipitation patterns over specified area and correlation and RSME thresholds defined in recipe.S Returns: - dict: Mapping dicitonary keys are simplified WT, values are Lamb WT - ''' + dict: Mapping dicitonary keys are simplified WT, values are Lamb WT + """ mapping_array = [] for i, elem in enumerate(selected_pairs): @@ -246,17 +342,16 @@ def find_intersection(m_list: list) -> list: def write_mapping_dict(work_dir: str, dataset: str, mapping_dict: dict): mapping_dict_reformat = convert_dict(mapping_dict) - with open( - f'{work_dir}/wt_mapping_dict_{dataset}.json', 'w', encoding='utf-8' - ) as file: + with open(f'{work_dir}/wt_mapping_dict_{dataset}.json', + 'w', + encoding='utf-8') as file: json.dump(mapping_dict_reformat, file) def calc_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, - dataset: str, correlation_thresold: float, - rmse_threshold: float, ancestors: list) -> np.array: - '''Calculate simplified weathertypes for observation datasets based on - precipitation patterns over specified area. + dataset: str, ancestors: list) -> np.array: + """Calculate simplified weathertypes for observation datasets based on + precipitation patterns over specified area. Args: cfg (dict): Configuration dictionary from recipe @@ -269,11 +364,13 @@ def calc_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, Returns: np.array: _description_ - ''' + """ logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) work_dir = cfg.get('work_dir') + correlation_threshold = cfg.get('correlation_threshold') + rmse_threshold = cfg.get('rmse_threshold') tcoord = cube.coord('time') wt_data_prcp = [] @@ -282,43 +379,46 @@ def calc_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, if len(target_indices[0]) < 1: logger.info( 'calc_slwt_obs - CAUTION: Skipped wt %s \ - for dataset %s!', wt, dataset - ) + for dataset %s!', wt, dataset) continue - dates = [tcoord.units.num2date(tcoord.points[i]) - for i in target_indices] + dates = [ + tcoord.units.num2date(tcoord.points[i]) for i in target_indices + ] if dataset == 'E-OBS': extracted_cube = cube[target_indices] else: extracted_cube = cube.extract( - iris.Constraint(time=lambda t: t.point in dates[0]) - ) + iris.Constraint(time=lambda t: t.point in dates[0])) wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) wt_data_prcp.append(wt_cube_mean.data.compressed()) - selected_pairs = process_prcp_mean( - cfg, wt_data_prcp, correlation_thresold, rmse_threshold, dataset - ) + selected_pairs = process_prcp_mean(cfg, wt_data_prcp, + correlation_threshold, + rmse_threshold, dataset) - with open( - f'{work_dir}/wt_selected_pairs_{dataset}.json', 'w', encoding='utf-8' - ) as file: + with open(f'{work_dir}/wt_selected_pairs_{dataset}.json', + 'w', + encoding='utf-8') as file: json.dump(selected_pairs, file) mapping_dict = get_mapping_dict(selected_pairs) write_mapping_dict(work_dir, dataset, mapping_dict) - log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, - ancestors, - ['Lamb Weathertypes'], ['other'], ['other']) + provenance_record = get_provenance_record('Lamb Weathertypes', + ancestors, + ['Lamb Weathertypes'], + False, False) + + log_provenance(f'{dataset}_wt_prov', cfg, provenance_record) return map_lwt_to_slwt(lwt, mapping_dict) def calc_const(): '''Calculate constants for weathertyping algorithm. - Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), - A comparison of Lamb circulation types with an objective classification scheme. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification + scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Returns: @@ -328,15 +428,16 @@ def calc_const(): const1 = 1 / np.cos(45 * np.pi / 180) const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) const3 = np.sin(45 * np.pi / 180) / np.sin(50 * np.pi / 180) - const4 = 1 / (2 * np.cos(45 * np.pi / 180) ** 2) + const4 = 1 / (2 * np.cos(45 * np.pi / 180)**2) return const1, const2, const3, const4 def calc_westerly_flow(cube: iris.cube.Cube) -> np.array: '''Calculate the westerly flow over area. - Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), - A comparison of Lamb circulation types with an objective classification scheme. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification + scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: @@ -347,14 +448,14 @@ def calc_westerly_flow(cube: iris.cube.Cube) -> np.array: ''' return 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * ( - cube.data[:, 3, 2] + cube.data[:, 3, 4] - ) + cube.data[:, 3, 2] + cube.data[:, 3, 4]) def calc_southerly_flow(cube: iris.cube.Cube, const1: float) -> np.array: '''Calculate the southerly flow over area. - Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), - A comparison of Lamb circulation types with an objective classification scheme. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification + scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: @@ -366,17 +467,17 @@ def calc_southerly_flow(cube: iris.cube.Cube, const1: float) -> np.array: ''' return const1 * ( - 1 / 4 * (cube.data[:, 3, 4] + 2 * - cube.data[:, 2, 4] + cube.data[:, 1, 4]) - - 1 / 4 * (cube.data[:, 3, 2] + 2 * - cube.data[:, 2, 2] + cube.data[:, 1, 2]) - ) + 1 / 4 * + (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - + 1 / 4 * + (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) def calc_resultant_flow(w: np.array, s: np.array) -> np.array: '''Calculate the resultant flow. - Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), - A comparison of Lamb circulation types with an objective classification scheme. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification + scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: @@ -386,13 +487,15 @@ def calc_resultant_flow(w: np.array, s: np.array) -> np.array: Returns: np.array: resultant flow ''' - return (s**2 + w**2) ** (1 / 2) + return (s**2 + w**2)**(1 / 2) -def calc_westerly_shear_velocity(cube: iris.cube.Cube, const2: float, const3: float) -> np.array: +def calc_westerly_shear_velocity(cube: iris.cube.Cube, const2: float, + const3: float) -> np.array: '''Calculate westerly shear velocity. - Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), - A comparison of Lamb circulation types with an objective classification scheme. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification + scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: @@ -403,19 +506,20 @@ def calc_westerly_shear_velocity(cube: iris.cube.Cube, const2: float, const3: fl Returns: np.array: westerly shear velocity ''' - return const2 * ( - 1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - ) - const3 * ( - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - - 1 / 2 * (cube.data[:, 4, 2] + cube.data[:, 4, 4]) - ) + return const2 * (1 / 2 * + (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * + (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( + 1 / 2 * + (cube.data[:, 2, 2] + cube.data[:, 2, 4]) - 1 / 2 * + (cube.data[:, 4, 2] + cube.data[:, 4, 4])) -def calc_southerly_shear_velocity(cube: iris.cube.Cube, const4: float) -> np.array: +def calc_southerly_shear_velocity(cube: iris.cube.Cube, + const4: float) -> np.array: '''Calculate southerly shear velocity. - Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), - A comparison of Lamb circulation types with an objective classification scheme. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification + scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: @@ -426,21 +530,21 @@ def calc_southerly_shear_velocity(cube: iris.cube.Cube, const4: float) -> np.arr np.array: southerly shear velocity ''' return const4 * ( - 1 / 4 * (cube.data[:, 3, 6] + 2 * - cube.data[:, 2, 6] + cube.data[:, 1, 6]) - - 1 / 4 * (cube.data[:, 3, 4] + 2 * - cube.data[:, 2, 4] + cube.data[:, 1, 4]) - - 1 / 4 * (cube.data[:, 3, 2] + 2 * - cube.data[:, 2, 2] + cube.data[:, 1, 2]) - + 1 / 4 * (cube.data[:, 3, 0] + 2 * - cube.data[:, 2, 0] + cube.data[:, 1, 0]) - ) + 1 / 4 * + (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - + 1 / 4 * + (cube.data[:, 3, 4] + 2 * cube.data[:, 2, 4] + cube.data[:, 1, 4]) - + 1 / 4 * + (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2]) + + 1 / 4 * + (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) def calc_total_shear_velocity(zw: np.array, zs: np.array) -> np.array: '''Calculate total shear velocity. - Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), - A comparison of Lamb circulation types with an objective classification scheme. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification + scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: @@ -455,8 +559,9 @@ def calc_total_shear_velocity(zw: np.array, zs: np.array) -> np.array: def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: '''Algorithm to calculate Lamb weathertypes. - Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), - A comparison of Lamb circulation types with an objective classification scheme. + Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), + A comparison of Lamb circulation types with an objective classification + scheme. Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: @@ -585,10 +690,10 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: return wt -def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, - preproc_path: str, output_file_path: str, - predefined_slwt): - '''Calculate Lamb WT and simplified WT for model data. +def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, + data_info: dict, + predefined_slwt: bool | dict): + """Calculate Lamb WT and simplified WT for model data. Args: cfg (dict): Configuration dicitonary from recipe @@ -596,9 +701,12 @@ def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, dataset (str): Name of dataset preproc_path (str): Path of ancestors output_file_path (str): Path to write output file - ''' + """ work_dir = cfg.get('work_dir') + dataset = data_info.get('dataset') + preproc_path = data_info.get('preproc_path') + output_file_path = data_info.get('output_file_path') if not os.path.exists(f'{work_dir}/{output_file_path}'): os.makedirs(f'{work_dir}/{output_file_path}') @@ -610,13 +718,15 @@ def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, logger.info('Calculating simplified Lamb Weathertypes for %s', dataset) - if not predefined_slwt: + if not predefined_slwt: with open(f'{work_dir}/wt_mapping_dict_ERA5.json', - 'r', encoding='utf-8') as file: + 'r', + encoding='utf-8') as file: mapping_dict_era5_f = json.load(file) with open(f'{work_dir}/wt_mapping_dict_E-OBS.json', - 'r', encoding='utf-8') as file: + 'r', + encoding='utf-8') as file: mapping_dict_eobs_f = json.load(file) mapping_dict_era5 = reverse_convert_dict(mapping_dict_era5_f) mapping_dict_eobs = reverse_convert_dict(mapping_dict_eobs_f) @@ -624,10 +734,9 @@ def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, slwt_era5 = map_lwt_to_slwt(lwt, mapping_dict_era5) slwt_eobs = map_lwt_to_slwt(lwt, mapping_dict_eobs) else: - predefined_slwt = check_mapping_dict_format( - predefined_slwt) - write_mapping_dict(work_dir, "ERA5", predefined_slwt) - write_mapping_dict(work_dir, "E-OBS", predefined_slwt) + predefined_slwt = check_mapping_dict_format(predefined_slwt) + write_mapping_dict(work_dir, 'ERA5', predefined_slwt) + write_mapping_dict(work_dir, 'E-OBS', predefined_slwt) slwt_era5 = map_lwt_to_slwt(lwt, predefined_slwt) slwt_eobs = map_lwt_to_slwt(lwt, predefined_slwt) @@ -652,14 +761,20 @@ def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, df = pd.DataFrame(data=d) df.to_csv(f'{work_dir}/{output_file_path}/{dataset}.csv', index=False) - log_provenance('Lamb Weathertypes', f'{dataset}_wt_prov', cfg, - [preproc_path, f'{work_dir}/wt_mapping_dict_ERA5.json', - f'{work_dir}/wt_mapping_dict_E-OBS.json'], - ['Lamb Weathertypes'], ['other'], ['other']) + ancestors = [ + preproc_path, f'{work_dir}/wt_mapping_dict_ERA5.json', + f'{work_dir}/wt_mapping_dict_E-OBS.json' + ] + provenance_record = get_provenance_record('Lamb Weathertypes', + ancestors, + ['Lamb Weathertypes'], + False, False) + + log_provenance(f'{dataset}_wt_prov', cfg, provenance_record) def get_colormap(colormap_string: str) -> ListedColormap: - '''Get colormaps based on string. + """Get colormaps based on string. Args: colormap_string (str): String to get Colormaps for either @@ -667,7 +782,7 @@ def get_colormap(colormap_string: str) -> ListedColormap: Returns: ListedColormap: Choosen Colormap - ''' + """ misc_seq_2_disc = [ (230 / 255, 240 / 255, 240 / 255), @@ -715,10 +830,12 @@ def get_colormap(colormap_string: str) -> ListedColormap: if colormap_string == 'temp': return ListedColormap(temp_seq_disc) + return None + -def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, - var_name: str, wt_string: str, mode: str): - '''Plot maps. +def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, + data_info: dict, mode: str): + """Plot maps. Args: wt (np.array): WT for which statistic was calculated @@ -730,10 +847,14 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, slwt are calculated based on ERA5 or EOBS precipitation data, respectively mode (str): Statistics that is used - ''' + """ + + dataset = data_info.get('dataset') + var_name = data_info.get('var_name') + wt_string = data_info.get('wt_string') - logger.info('Plotting %s %s %s for %s %s', dataset, var_name, - mode, wt_string, wt) + logger.info('Plotting %s %s %s for %s %s', dataset, var_name, mode, + wt_string, wt) local_path = cfg.get('plot_dir') @@ -789,18 +910,16 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset: str, ax.add_feature(cfeature.BORDERS, linestyle=':') plt.savefig( - os.path.join( - local_path, f'{wt_string}_{wt}_{dataset}_{var_name}_{mode}.png') - ) + os.path.join(local_path, + f'{wt_string}_{wt}_{dataset}_{var_name}_{mode}.png')) plt.savefig( - os.path.join( - local_path, f'{wt_string}_{wt}_{dataset}_{var_name}_{mode}.pdf') - ) + os.path.join(local_path, + f'{wt_string}_{wt}_{dataset}_{var_name}_{mode}.pdf')) plt.close() def rmse(subarray1: np.array, subarray2: np.array) -> np.array: - '''Calculate rsme. + """Calculate rsme. Args: subarray1 (np.array): array1 @@ -808,37 +927,39 @@ def rmse(subarray1: np.array, subarray2: np.array) -> np.array: Returns: np.array: rsme array - ''' - return np.sqrt(np.mean((subarray1 - subarray2) ** 2)) + """ + return np.sqrt(np.mean((subarray1 - subarray2)**2)) def convert_dict(dict_: dict) -> dict: - '''Convert mapping dictionary from {lwt: slwt, ...} format to {slwt: [lwt1, lwt2], ...}. + """Convert mapping dictionary from {lwt: slwt, ...} format to {slwt: [lwt1, + lwt2], ...}. Args: dict_ (dict): Dict in the {lwt: slwt, ...} format Returns: dict: Dict in the {slwt: [lwt1, lwt2], ...} format - ''' + """ new_dict = {} - for key, value in dict_.items(): + for dataset, value in dict_.items(): if value not in new_dict: new_dict[value] = [] - new_dict[value].append(key) + new_dict[value].append(dataset) return new_dict def reverse_convert_dict(dict_: dict) -> dict: - '''Convert mapping dictionary from {slwt: [lwt1, lwt2], ...} format to {lwt: slwt, ...}. + """Convert mapping dictionary from {slwt: [lwt1, lwt2], ...} format to + {lwt: slwt, ...}. Args: original_dict (dict): Dict in the {slwt: [lwt1, lwt2], ...}format Returns: dict: Dict in the format {lwt: slwt, ...} - ''' + """ new_dict = {} for key, value_list in dict_.items(): for original_key in value_list: @@ -848,14 +969,14 @@ def reverse_convert_dict(dict_: dict) -> dict: def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, rmse_matrix: np.array, dataset: str): - '''Plot heatmaps for correlation and rmse matrices + """Plot heatmaps for correlation and rmse matrices. Args: cfg (dict): cfg dict from recipe pattern_correlation_matrix (np.array): pattern correlation matrix rmse_matrix (np.array): rmse matrix dataset (str): string of dataset - ''' + """ work_dir = cfg.get('work_dir') @@ -866,22 +987,28 @@ def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, with sns.axes_style('white'): plt.figure(figsize=(10, 10)) plt.title('Correlation Matrix') - levels = np.linspace(np.min(pattern_correlation_matrix), np.max(pattern_correlation_matrix), 9) - ax = sns.heatmap(pattern_correlation_matrix, mask=mask, - square=True, annot=True, annot_kws={'size': 6}, - cmap='seismic', xticklabels=labels, + levels = np.linspace(np.min(pattern_correlation_matrix), + np.max(pattern_correlation_matrix), 9) + ax = sns.heatmap(pattern_correlation_matrix, + mask=mask, + square=True, + annot=True, + annot_kws={'size': 6}, + cmap='seismic', + xticklabels=labels, yticklabels=labels, - cbar_kws={'ticks': levels, 'shrink': 0.8, 'format': '%.2f'}) + cbar_kws={ + 'ticks': levels, + 'shrink': 0.8, + 'format': '%.2f' + }) ax.set_xlabel('lwt', fontsize=8) ax.set_xticklabels(ax.get_xticklabels(), rotation=0) ax.set_yticklabels(ax.get_yticklabels(), rotation=0) ax.set_ylabel('lwt', fontsize=8) - #plt.colorbar() plt.tight_layout() - plt.savefig( - os.path.join( - work_dir, f'correlation_matrix_{dataset}.png') - ) + plt.savefig(os.path.join(work_dir, + f'correlation_matrix_{dataset}.png')) plt.close() mask = np.zeros_like(rmse_matrix) @@ -890,34 +1017,38 @@ def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, plt.figure(figsize=(10, 10)) plt.title('RMSE Matrix') levels = np.linspace(np.min(rmse_matrix), np.max(rmse_matrix), 9) - ax = sns.heatmap(rmse_matrix, mask=mask, - square=True, annot=True, annot_kws={'size': 6}, - cmap='seismic', xticklabels=labels, + ax = sns.heatmap(rmse_matrix, + mask=mask, + square=True, + annot=True, + annot_kws={'size': 6}, + cmap='seismic', + xticklabels=labels, yticklabels=labels, - cbar_kws={'ticks': levels, 'shrink': 0.8, 'format': '%.2f'}) + cbar_kws={ + 'ticks': levels, + 'shrink': 0.8, + 'format': '%.2f' + }) ax.set_xlabel('lwt', fontsize=8) ax.set_xticklabels(ax.get_xticklabels(), rotation=0) ax.set_yticklabels(ax.get_yticklabels(), rotation=0) ax.set_ylabel('lwt', fontsize=8) - #plt.colorbar() plt.tight_layout() - plt.savefig( - os.path.join( - work_dir, f'rmse_matrix_{dataset}.png') - ) + plt.savefig(os.path.join(work_dir, f'rmse_matrix_{dataset}.png')) plt.close() def write_corr_rmse_to_csv(cfg: dict, pattern_correlation_matrix: np.array, rmse_matrix: np.array, dataset: str): - '''Write correlation and rsme matrix to csv files + """Write correlation and rsme matrix to csv files. Args: cfg (dict): Configuration dictionary from recipe pattern_correlation_matrix (np.array): Correlation matrix rmse_matrix (np.array): RSME matrix dataset (str): Name of dataset - ''' + """ logger.info('Writing corr and rsme matrices for %s', dataset) @@ -938,11 +1069,10 @@ def write_corr_rmse_to_csv(cfg: dict, pattern_correlation_matrix: np.array, def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, rmse_threshold: float, dataset: str) -> list: - '''Process precipitation fields for specified area to get - a list of selected pairs of weathertypes with the - highest correlation (higher than correlation_threshold) - and smallest RSME (smaller than rsme_threshold) for further - processing and simplifying the WT. + """Process precipitation fields for specified area to get a list of + selected pairs of weathertypes with the highest correlation (higher than + correlation_threshold) and smallest RSME (smaller than rsme_threshold) for + further processing and simplifying the WT. Args: cfg (dict): Configuration dictionary from recipe @@ -953,7 +1083,7 @@ def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, Returns: list: Selected pairs of WT. This is passed to get_mapping_dict - ''' + """ logger.info('Calculating corr and rsme matrices for %s', dataset) @@ -966,42 +1096,43 @@ def process_prcp_mean(cfg: dict, data: np.array, correlation_threshold: float, for j in range(i + 1, n): rmse_matrix[i][j] = rmse(data[i], data[j]) rmse_matrix[j][i] = rmse_matrix[i][j] - if ( - pattern_correlation_matrix[i][j] >= correlation_threshold - and rmse_matrix[i][j] <= rmse_threshold - ): + if (pattern_correlation_matrix[i][j] >= correlation_threshold + and rmse_matrix[i][j] <= rmse_threshold): selected_pairs.append( - ((i + 1, j + 1), - pattern_correlation_matrix[i][j], rmse_matrix[i][j]) - ) + ((i + 1, j + 1), pattern_correlation_matrix[i][j], + rmse_matrix[i][j])) # write matrices to csv - write_corr_rmse_to_csv( - cfg, pattern_correlation_matrix, rmse_matrix, dataset) + write_corr_rmse_to_csv(cfg, pattern_correlation_matrix, rmse_matrix, + dataset) # plot heatmaps for matrices - plot_corr_rmse_heatmaps( - cfg, pattern_correlation_matrix, rmse_matrix, dataset) + plot_corr_rmse_heatmaps(cfg, pattern_correlation_matrix, rmse_matrix, + dataset) return selected_pairs def calc_wt_means(cfg: dict, cube: iris.cube.Cube, - wt_cubes: iris.cube.CubeList, dataset: str, - var_name: str, wt_string: str, preproc_path: str): - '''calculate means of fields of each weathertype + wt_cubes: iris.cube.CubeList, data_info: dict): + """Calculate means of fields of each weathertype. Args: cfg (dict): Configuration dictionary from recipe cube (iris.cube.Cube): Cube with variable data - wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 + wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 and slwt_EOBS dataset (str): Name of dataset var_name (str): Name of variable - wt_string (str): lwt, slwt_ERA5 or slwt_EOBS + wt_string (str): lwt, slwt_ERA5 or slwt_EOBS slwt are calculated based on ERA5 or EOBS precipitation data, respectively preproc_path (str): Ancestor path - ''' + """ + + dataset = data_info.get('dataset') + var_name = data_info.get('var_name') + wt_string = data_info.get('wt_string') + preproc_path = data_info.get('preproc_path') logger.info('Calculating %s %s means for %s', dataset, var_name, wt_string) @@ -1022,16 +1153,16 @@ def calc_wt_means(cfg: dict, cube: iris.cube.Cube, tcoord = lwt_cube.coord('time') lwt = lwt_cube.data[:] - #num_slwt_era5 = len(np.unique(slwt_era5)) - #num_slwt_eobs = len(np.unique(slwt_eobs)) + # num_slwt_era5 = len(np.unique(slwt_era5)) + # num_slwt_eobs = len(np.unique(slwt_eobs)) - #if num_slwt_eobs != num_slwt_era5: + # if num_slwt_eobs != num_slwt_era5: # logger.info('calc_wt_means - CAUTION: unequal number of \ # slwt_era5 (%s) \ and slwt_eobs (%s)!', # num_slwt_era5, num_slwt_eobs) if 'slwt' in wt_string: - for wt in range(1, num_slwt+1):#max(num_slwt_era5, num_slwt_eobs)): + for wt in range(1, num_slwt + 1): if wt_string == 'slwt_ERA5': target_indices = np.where(slwt_era5 == wt) elif wt_string == 'slwt_EOBS': @@ -1041,66 +1172,69 @@ def calc_wt_means(cfg: dict, cube: iris.cube.Cube, if len(target_indices[0]) < 1: logger.info( 'calc_wt_means - CAUTION: Skipped %s %s \ - for dataset %s!', wt_string, wt, dataset - ) + for dataset %s!', wt_string, wt, dataset) continue - dates = [tcoord.units.num2date(tcoord.points[i]) - for i in target_indices] + dates = [ + tcoord.units.num2date(tcoord.points[i]) for i in target_indices + ] extracted_cube = cube.extract( - iris.Constraint(time=lambda t: t.point in dates[0]) - ) - wt_cube_mean = extracted_cube.collapsed('time', - iris.analysis.MEAN) - plot_maps(wt, cfg, wt_cube_mean, dataset, - var_name, wt_string, 'mean') + iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) + plot_maps(wt, cfg, wt_cube_mean, data_info, 'mean') elif wt_string == 'lwt': for wt in range(1, 28): target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: logger.info( 'calc_wt_means - CAUTION: Skipped lwt %s \ - for dataset %s!', wt, dataset - ) + for dataset %s!', wt, dataset) continue - dates = [tcoord.units.num2date(tcoord.points[i]) - for i in target_indices] + dates = [ + tcoord.units.num2date(tcoord.points[i]) for i in target_indices + ] extracted_cube = cube.extract( - iris.Constraint(time=lambda t: t.point in dates[0]) - ) + iris.Constraint(time=lambda t: t.point in dates[0])) wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) - plot_maps(wt, cfg, wt_cube_mean, dataset, - var_name, wt_string, 'mean') + plot_maps(wt, cfg, wt_cube_mean, data_info, 'mean') else: logger.info('WT_STRING NOT SUPPORTED.') - log_provenance(f'{var_name} means for {wt_string}', - f'{dataset}_{var_name}_{wt_string}_means_prov', cfg, - [f'{preproc_path}', f'{work_dir}/ERA5.nc'], - [var_name], ['map'], ['mean']) + ancestors = [f'{preproc_path}', f'{work_dir}/ERA5.nc'] + provenance_record = get_provenance_record(f'{var_name} means for \ + {wt_string}', + ancestors, + [var_name], + ['map'], ['mean']) + + log_provenance(f'{dataset}_{var_name}_{wt_string}_means_prov', + cfg, provenance_record) def calc_wt_anomalies(cfg: dict, cube: iris.cube.Cube, - wt_cubes: iris.cube.CubeList, dataset: str, - var_name: str, wt_string: str, preproc_path: str): - '''Calculate anomalies of fields of each weathertype + wt_cubes: iris.cube.CubeList, data_info: dict): + """Calculate anomalies of fields of each weathertype. Args: cfg (dict): Configuration dictionary from recipe cube (iris.cube.Cube): Cube with variable data - wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 + wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 and slwt_EOBS dataset (str): Name of dataset var_name (str): Name of variable - wt_string (str): lwt, slwt_ERA5 or slwt_EOBS + wt_string (str): lwt, slwt_ERA5 or slwt_EOBS slwt are calculated based on ERA5 or EOBS precipitation data, respectively preproc_path (str): Ancestor path - ''' + """ work_dir = cfg.get('work_dir') + dataset = data_info.get('dataset') + var_name = data_info.get('var_name') + wt_string = data_info.get('wt_string') + preproc_path = data_info.get('preproc_path') - logger.info('Calculating %s %s anomalies for %s', dataset, - var_name, wt_string) + logger.info('Calculating %s %s anomalies for %s', dataset, var_name, + wt_string) if wt_string == 'slwt_ERA5': slwt_era5_cube = wt_cubes[1] @@ -1119,9 +1253,10 @@ def calc_wt_anomalies(cfg: dict, cube: iris.cube.Cube, num_slwt_eobs = len(np.unique(slwt_eobs)) if num_slwt_eobs != num_slwt_era5: - logger.info('calc_wt_means - CAUTION: unequal number of \ - slwt_era5 (%s) \ and slwt_eobs (%s)!', - num_slwt_era5, num_slwt_eobs) + logger.info( + 'calc_wt_means - CAUTION: unequal number of \ + slwt_era5 (%s) and slwt_eobs (%s)!', num_slwt_era5, + num_slwt_eobs) if 'slwt' in wt_string: for wt in range(1, max(num_slwt_era5, num_slwt_eobs)): @@ -1134,65 +1269,75 @@ def calc_wt_anomalies(cfg: dict, cube: iris.cube.Cube, if len(target_indices[0]) < 1: logger.info( 'calc_wt_anomalies - CAUTION: Skipped wt %s \ - for dataset %s!', wt, dataset - ) + for dataset %s!', wt, dataset) continue - dates = [tcoord.units.num2date(tcoord.points[i]) - for i in target_indices] + dates = [ + tcoord.units.num2date(tcoord.points[i]) for i in target_indices + ] extracted_cube = cube.extract( - iris.Constraint(time=lambda t: t.point in dates[0]) - ) - wt_cube_mean = extracted_cube.collapsed('time', - iris.analysis.MEAN) - plot_maps(wt, cfg, cube.collapsed('time', iris.analysis.MEAN) - - wt_cube_mean, dataset, var_name, wt_string, 'anomaly') + iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) + plot_maps( + wt, cfg, + cube.collapsed('time', iris.analysis.MEAN) - wt_cube_mean, + data_info, 'anomaly') elif wt_string == 'lwt': for wt in range(1, 28): target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: logger.info( 'calc_wt_anomalies - CAUTION: Skipped wt %s \ - for dataset %s!', wt, dataset - ) + for dataset %s!', wt, dataset) continue - dates = [tcoord.units.num2date(tcoord.points[i]) - for i in target_indices] + dates = [ + tcoord.units.num2date(tcoord.points[i]) for i in target_indices + ] extracted_cube = cube.extract( - iris.Constraint(time=lambda t: t.point in dates[0]) - ) + iris.Constraint(time=lambda t: t.point in dates[0])) wt_cube_mean = extracted_cube.collapsed('time', iris.analysis.MEAN) - plot_maps(wt, cfg, cube.collapsed('time', iris.analysis.MEAN) - - wt_cube_mean, dataset, var_name, wt_string, 'anomaly') + plot_maps( + wt, cfg, + cube.collapsed('time', iris.analysis.MEAN) - wt_cube_mean, + data_info, 'anomaly') else: logger.info('WT_STRING NOT SUPPORTED.') - log_provenance(f'{var_name} anomaly for {wt_string}', - f'{dataset}_{var_name}_{wt_string}_anomalies_prov', cfg, - [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['map'], ['anomaly']) + ancestors = [f'{preproc_path}', f'{work_dir}/ERA5.nc'] + provenance_record = get_provenance_record(f'{var_name} anomaly for \ + {wt_string}', + ancestors, + [var_name], + ['map'], ['anomaly']) + + log_provenance(f'{dataset}_{var_name}_{wt_string}_anomaly_prov', + cfg, provenance_record) def calc_wt_std(cfg: dict, cube: iris.cube.Cube, - wt_cubes: iris.cube.CubeList, dataset: str, - var_name: str, wt_string: str, preproc_path: str): - '''Calculate standard deviation of fields of each weathertype + wt_cubes: iris.cube.CubeList, data_info: dict): + """Calculate standard deviation of fields of each weathertype. Args: cfg (dict): Configuration dictionary from recipe cube (iris.cube.Cube): Cube with variable data - wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 + wt_cubes (iris.cube.CubeList): List of cubes of lwt, slwt_ERA5 and slwt_EOBS dataset (str): Name of dataset var_name (str): Name of variable - wt_string (str): lwt, slwt_ERA5 or slwt_EOBS + wt_string (str): lwt, slwt_ERA5 or slwt_EOBS slwt are calculated based on ERA5 or EOBS precipitation data, respectively preproc_path (str): Ancestor path - ''' + """ work_dir = cfg.get('work_dir') + dataset = data_info.get('dataset') + var_name = data_info.get('var_name') + wt_string = data_info.get('wt_string') + preproc_path = data_info.get('preproc_path') - logger.info('Calculating %s %s standard deviation for %s', - dataset, var_name, wt_string) + logger.info('Calculating %s %s standard deviation for %s', dataset, + var_name, wt_string) if wt_string == 'slwt_ERA5': slwt_era5_cube = wt_cubes[1] @@ -1211,9 +1356,10 @@ def calc_wt_std(cfg: dict, cube: iris.cube.Cube, num_slwt_eobs = len(np.unique(slwt_eobs)) if num_slwt_eobs != num_slwt_era5: - logger.info('calc_wt_means - CAUTION: unequal number of \ - slwt_era5 (%s) \ and slwt_eobs (%s)!', - num_slwt_era5, num_slwt_eobs) + logger.info( + 'calc_wt_means - CAUTION: unequal number of \ + slwt_era5 (%s) and slwt_eobs (%s)!', num_slwt_era5, + num_slwt_eobs) if 'slwt' in wt_string: for wt in range(1, max(num_slwt_era5, num_slwt_eobs)): @@ -1226,49 +1372,64 @@ def calc_wt_std(cfg: dict, cube: iris.cube.Cube, if len(target_indices[0]) < 1: logger.info( 'calc_slwt_obs - CAUTION: Skipped wt %s \ - for dataset %s!', wt, dataset - ) + for dataset %s!', wt, dataset) continue - dates = [tcoord.units.num2date(tcoord.points[i]) - for i in target_indices] + dates = [ + tcoord.units.num2date(tcoord.points[i]) for i in target_indices + ] extracted_cube = cube.extract( - iris.Constraint(time=lambda t: t.point in dates[0]) - ) + iris.Constraint(time=lambda t: t.point in dates[0])) wt_cube_std = extracted_cube.collapsed('time', iris.analysis.STD_DEV) - plot_maps(wt, cfg, wt_cube_std, dataset, var_name, - wt_string, 'standard deviation') + plot_maps(wt, cfg, wt_cube_std, data_info, + 'standard deviation') elif wt_string == 'lwt': for wt in range(1, 28): target_indices = np.where(lwt == wt) if len(target_indices[0]) < 1: logger.info( 'calc_wt_std - CAUTION: Skipped wt %s \ - for dataset %s!', wt, dataset - ) + for dataset %s!', wt, dataset) continue - dates = [tcoord.units.num2date(tcoord.points[i]) - for i in target_indices] + dates = [ + tcoord.units.num2date(tcoord.points[i]) for i in target_indices + ] extracted_cube = cube.extract( - iris.Constraint(time=lambda t: t.point in dates[0]) - ) - wt_cube_std = extracted_cube.collapsed( - 'time', iris.analysis.STD_DEV) - plot_maps(wt, cfg, wt_cube_std, dataset, var_name, - wt_string, 'standard deviation') + iris.Constraint(time=lambda t: t.point in dates[0])) + wt_cube_std = extracted_cube.collapsed('time', + iris.analysis.STD_DEV) + plot_maps(wt, cfg, wt_cube_std, data_info, + 'standard deviation') else: logger.info('WT_STRING NOT SUPPORTED.') - log_provenance(f'{var_name} standard deviation for {wt_string}', - f'{dataset}_{var_name}_{wt_string}_std_prov', cfg, - [f'{preproc_path}', f'{work_dir}/ERA5.nc'], [var_name], ['map'], - ['stddev']) + ancestors = [f'{preproc_path}', f'{work_dir}/ERA5.nc'] + provenance_record = get_provenance_record(f'{var_name} standard \ + deviation for \ + {wt_string}', + ancestors, + [var_name], + ['map'], ['stddev']) + + log_provenance(f'{dataset}_{var_name}_{wt_string}_std_prov', + cfg, provenance_record) + + +def run_predefined_slwt(work_dir: str, dataset_name: str, + lwt: np.array, predefined_slwt: dict): + predefined_slwt = check_mapping_dict_format(predefined_slwt) + write_mapping_dict(work_dir, dataset_name, predefined_slwt) + write_mapping_dict(work_dir, "E-OBS", predefined_slwt) + slwt_era5 = map_lwt_to_slwt(lwt, predefined_slwt) + slwt_eobs = map_lwt_to_slwt(lwt, predefined_slwt) + return slwt_era5, slwt_eobs -def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, - slwt_eobs: np.array, cube: iris.cube.Cube, + +def combine_wt_to_file(cfg: dict, wt_list: list, + cube: iris.cube.Cube, file_name: str): - '''Combine lwt and slwt arrays to one file + """Combine lwt and slwt arrays to one file. Args: cfg (dict): Configuration dictionary from recipe @@ -1277,7 +1438,11 @@ def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, slwt_eobs (np.array): slwt_eobs array cube (iris.cube.Cube): Cube of data to keep time coordinate file_name (str): Name of output file - ''' + """ + + lwt = wt_list[0] + slwt_era5 = wt_list[1] + slwt_eobs = wt_list[2] logger.info('Writing weathertypes to %s', file_name) @@ -1310,14 +1475,14 @@ def combine_wt_to_file(cfg: dict, lwt: np.array, slwt_era5: np.array, def write_lwt_to_file(cfg: dict, lwt: np.array, cube: iris.cube.Cube, file_name: str): - '''Write only lwt to file + """Write only lwt to file. Args: cfg (dict): Configuration dictionary from recipe lwt (np.array): lwt array cube (iris.cube.Cube): Cube to keep time coordinate file_name (str): Output filename - ''' + """ logger.info('Writing Lamb Weathertype to %s', file_name) @@ -1338,15 +1503,16 @@ def write_lwt_to_file(cfg: dict, lwt: np.array, cube: iris.cube.Cube, df.to_csv(write_path + f'/{file_name}.csv', index=False) -def calc_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_file_path: str): - '''Calculate lwt for model data +def calc_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, + output_file_path: str): + """Calculate lwt for model data. Args: cfg (dict): Configuration dictionary from recipe cube (iris.cube.Cube): Cube to keep time coordinate dataset (str): Name of dataset output_file_path (str): Path to write output - ''' + """ work_dir = cfg.get('work_dir') @@ -1361,7 +1527,8 @@ def calc_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_file_pa wt_cube = iris.cube.CubeList() wt_cube.append(iris.cube.Cube(wt, long_name='lwt')) - logger.info('Writing Lamb Weathertype for %s \ + logger.info( + 'Writing Lamb Weathertype for %s \ to file %s.nc', dataset, dataset) wt_cube[0].add_dim_coord(tcoord, 0) @@ -1375,7 +1542,7 @@ def calc_lwt_model(cfg: dict, cube: iris.cube.Cube, dataset: str, output_file_pa def map_lwt_to_slwt(lwt: np.array, mapping_dict: dict) -> np.array: - '''map lwt array to slwt array. + """Map lwt array to slwt array. Args: lwt (np.array): array of lwt @@ -1383,20 +1550,20 @@ def map_lwt_to_slwt(lwt: np.array, mapping_dict: dict) -> np.array: Returns: np.array: array of slwt - ''' + """ return np.array([np.int8(mapping_dict.get(value, 0)) for value in lwt]) def check_mapping_dict_format(mapping_dict: dict) -> dict: - '''Check format of mapping dict and return in {lwt: slwt, ...} format + """Check format of mapping dict and return in {lwt: slwt, ...} format. Args: mapping_dict (dict): mapping dict in any format Returns: dict: mapping dict in {lwt: slwt, ...} format - ''' + """ if isinstance(mapping_dict.get(list(mapping_dict.keys())[0]), list): dict_ = reverse_convert_dict(mapping_dict) From b2255db61ac9e31e2a1ee1d9b12ad157302a732b Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Thu, 4 Jul 2024 18:39:36 +0200 Subject: [PATCH 16/29] bugfix --- .../weathertyping/weathertyping.py | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index f79f22d937..d80f703433 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -14,7 +14,7 @@ def run_automatic_slwt(cfg: dict): - preproc_variables_dict, correlation_threshold, rmse_threshold, \ + preproc_variables_dict, _, _, \ work_dir, plotting, _, predefined_slwt = get_cfg_vars(cfg) for dataset_name, dataset_vars in preproc_variables_dict.items(): if dataset_name == 'ERA5': @@ -94,8 +94,11 @@ def run_automatic_slwt(cfg: dict): if plotting: # plot means for var_name, var_data in var_dict.items(): - plot_means(cfg, var_data[0], wt_cubes, dataset_name, - var_name, var_data[1]) + data_info = {'dataset': dataset_name, + 'var': var_name, + 'preproc_path': var_data[1]} + plot_means(cfg, var_data[0], wt_cubes, data_info, + only_lwt=True) def run_lwt(cfg: dict): @@ -114,21 +117,17 @@ def run_lwt(cfg: dict): # calculate simplified lwt based on precipitation patterns _ = calc_slwt_obs( - cfg, - lwt, - wt_preproc_prcp, - dataset_name, - correlation_threshold, - rmse_threshold, - era5_ancestors, - ) + cfg, + lwt, + wt_preproc_prcp, + dataset_name, + era5_ancestors, + ) _ = calc_slwt_obs( cfg, lwt, wt_preproc_prcp_eobs, 'E-OBS', - correlation_threshold, - rmse_threshold, eobs_ancestors, ) @@ -173,12 +172,10 @@ def run_lwt(cfg: dict): if plotting: # plot means for var_name, var_data in var_dict.items(): - plot_means(cfg, - var_data[0], - wt_cubes, - dataset_name, - var_name, - var_data[1], + data_info = {'dataset': dataset_name, + 'var': var_name, + 'preproc_path': var_data[1]} + plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) From e5a0f9c65f2f298931c2f296b649fd2ac2cd1249 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Thu, 4 Jul 2024 18:41:25 +0200 Subject: [PATCH 17/29] bugfix --- esmvaltool/diag_scripts/weathertyping/weathertyping.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index d80f703433..275eb8317e 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -102,7 +102,7 @@ def run_automatic_slwt(cfg: dict): def run_lwt(cfg: dict): - preproc_variables_dict, correlation_threshold, rmse_threshold, \ + preproc_variables_dict, _, _, \ work_dir, plotting, _, _ = get_cfg_vars(cfg) for dataset_name, dataset_vars in preproc_variables_dict.items(): if dataset_name == 'ERA5': From aa47dc35220fe40d5056f53bfec9254d6b125bf4 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Thu, 11 Jul 2024 21:01:32 +0200 Subject: [PATCH 18/29] add recipes for CMIP5, CORDEX and seasonal occurence plot --- .../weathertyping/weathertyping.py | 4 +- .../diag_scripts/weathertyping/wt_utils.py | 15 + .../ACCESS1-0_wt_prov_citation.bibtex | 46 +++ .../ACCESS1-0_wt_prov_data_citation_info.txt | 2 + .../ACCESS1-0_wt_prov_provenance.xml | 213 +++++++++++++ .../E-OBS_wt_prov_citation.bibtex | 46 +++ .../E-OBS_wt_prov_data_citation_info.txt | 2 + .../E-OBS_wt_prov_provenance.xml | 176 +++++++++++ .../ERA5_wt_prov_citation.bibtex | 46 +++ .../weathertyping/ERA5_wt_prov_provenance.xml | 173 +++++++++++ .../recipe_weathertyping_CMIP5.yml | 255 ++++++++++++++++ .../recipe_weathertyping_CMIP6.yml | 263 ++++++++++++++++ .../recipe_weathertyping_CORDEX.yml | 287 ++++++++++++++++++ 13 files changed, 1527 insertions(+), 1 deletion(-) create mode 100644 esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_citation.bibtex create mode 100644 esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_data_citation_info.txt create mode 100644 esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_provenance.xml create mode 100644 esmvaltool/recipes/weathertyping/E-OBS_wt_prov_citation.bibtex create mode 100644 esmvaltool/recipes/weathertyping/E-OBS_wt_prov_data_citation_info.txt create mode 100644 esmvaltool/recipes/weathertyping/E-OBS_wt_prov_provenance.xml create mode 100644 esmvaltool/recipes/weathertyping/ERA5_wt_prov_citation.bibtex create mode 100644 esmvaltool/recipes/weathertyping/ERA5_wt_prov_provenance.xml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index 275eb8317e..c57eaf6ca9 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -2,7 +2,8 @@ wt_algorithm, get_ancestors_era5_eobs, calc_slwt_obs, run_predefined_slwt, combine_wt_to_file, load_wt_files, get_looping_dict, plot_means, get_model_output_filepath, - calc_lwt_slwt_model, write_lwt_to_file, calc_lwt_model + calc_lwt_slwt_model, write_lwt_to_file, calc_lwt_model, + plot_seasonal_occurence ) import iris @@ -69,6 +70,7 @@ def run_automatic_slwt(cfg: dict): 'var': var_name, 'preproc_path': var_data[1]} plot_means(cfg, var_data[0], wt_cubes, data_info) + plot_seasonal_occurence(cfg, wt_cubes, dataset_name) else: if dataset_name == 'E-OBS': continue diff --git a/esmvaltool/diag_scripts/weathertyping/wt_utils.py b/esmvaltool/diag_scripts/weathertyping/wt_utils.py index 633f464224..8062b252fb 100644 --- a/esmvaltool/diag_scripts/weathertyping/wt_utils.py +++ b/esmvaltool/diag_scripts/weathertyping/wt_utils.py @@ -36,6 +36,21 @@ warnings.filterwarnings('ignore', '.*Collapsing a non-contiguous coordinate*') +def plot_seasonal_occurence(cfg: dict, wt_cubes: iris.Cube.cube, + dataset_name: str, only_lwt=False): + full_dict = {} #{wt_string: {month: {wt1: occurence, wt2: occurence, ....}}} + #first do absolute occurence, then relative occurence + for cube in wt_cubes: + for month in range(1,13): + month_constraint = iris.Constraint(time=iris.time.PartialDateTime(month=month)) + array = cube.extract(month_constraint).data + unique, counts = np.unique(array, return_counts=True) + count_dict = dict(zip(unique, counts)) + + + + + def get_cfg_vars(cfg: dict): preproc_variables_dict = group_metadata( cfg.get('input_data').values(), 'dataset') diff --git a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_citation.bibtex b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_citation.bibtex new file mode 100644 index 0000000000..9c767ba278 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_citation.bibtex @@ -0,0 +1,46 @@ +@article{righi20gmd, + doi = {10.5194/gmd-13-1179-2020}, + url = {https://doi.org/10.5194/gmd-13-1179-2020}, + year = {2020}, + month = mar, + publisher = {Copernicus {GmbH}}, + volume = {13}, + number = {3}, + pages = {1179--1199}, + author = {Mattia Righi and Bouwe Andela and Veronika Eyring and Axel Lauer and Valeriu Predoi and Manuel Schlund and Javier Vegas-Regidor and Lisa Bock and Bj"{o}rn Br"{o}tz and Lee de Mora and Faruk Diblen and Laura Dreyer and Niels Drost and Paul Earnshaw and Birgit Hassler and Nikolay Koldunov and Bill Little and Saskia Loosveldt Tomas and Klaus Zimmermann}, + title = {Earth System Model Evaluation Tool (ESMValTool) v2.0 -- technical overview}, + journal = {Geoscientific Model Development} +} + +@article{https://doi.org/10.1002/joc.3370130606, + author = {Jones, P. D. and Hulme, M. and Briffa, K. R.}, + title = {A comparison of Lamb circulation types with an objective classification scheme}, + journal = {International Journal of Climatology}, + volume = {13}, + number = {6}, + pages = {655-663}, + keywords = {Weather types, Temperature, Precipitation, British, Isles}, + doi = {https://doi.org/10.1002/joc.3370130606}, + url = {https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/joc.3370130606}, + eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/joc.3370130606}, + abstract = {Abstract An objective scheme, initially developed by Jenkinson and Collison, is used to classify daily circulation types over the British Isles, along the lines of the subjective method devised by Lamb. The scheme uses daily grid-point mean sea-level pressure data for the region. The results of the analysis over the period 1881–1989 are compared with ‘true’ Lamb weather types. The frequencies of objectively developed types are highly correlated with traditional Lamb types, especially so for synoptic (cyclonic and anticyclonic) types, although still good for wind directional types. Comparison of the two classification schemes reveals negligible differences between the correlations of the counts of circulation types and regional temperature and rainfall. The major difference between the two classification schemes is that the decline of the westerlies since 1940 is less evident with the objective scheme.}, + year = {1993} +} + + +@article{https://doi.org/10.1029/2020JD032824, + author = {Maraun, Douglas and Truhetz, Heimo and Schaffer, Armin}, + title = {Regional Climate Model Biases, Their Dependence on Synoptic Circulation Biases and the Potential for Bias Adjustment: A Process-Oriented Evaluation of the Austrian Regional Climate Projections}, + journal = {Journal of Geophysical Research: Atmospheres}, + volume = {126}, + number = {6}, + pages = {e2020JD032824}, + keywords = {Austria, bias adjustment, climate model evaluation, large-scale circulation errors, regional climate projections}, + doi = {https://doi.org/10.1029/2020JD032824}, + url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2020JD032824}, + eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2020JD032824}, + note = {e2020JD032824 2020JD032824}, + abstract = {Abstract The Austrian regional climate projections are based on an ensemble of bias adjusted regional climate model simulations. Bias adjustment (BA) improves the usability of climate projections for impact studies, but cannot mitigate fundamental model errors. This argument holds in particular for biases in the temporal dependence, which is strongly influenced by the large-scale circulation. Global climate models (GCMs), underlying regional climate projections, suffer from substantial circulation errors. We therefore, conduct a process-based evaluation of the Austrian climate projections focusing on large-scale circulation errors, their regional imprints and the potential for BA. First, we define nine synoptic weather types and assess how well the considered climate models represent their occurrence and persistence. Second, we assess biases in the overall dry and hot day probabilities, as well as conditional on synoptic weather type occurrence; and biases in the duration of dry and hot spells. Third, we investigate how these biases depend on biases in the occurrence and persistence of relevant synoptic weather types. And fourth, we study how much an overall BA improves these biases. Many GCMs misrepresent the occurrence and persistence of relevant synoptic weather types. These biases have a clear imprint on biases in dry and hot day occurrence and spell durations. BA in many cases helps to greatly reduce biases even in the presence of circulation biases, but may in some cases amplify conditional biases. Persistence biases are especially relevant for the representation of meteorological drought. Biases in the duration of dry spells cannot fully be mitigated by BA.}, + year = {2021} +} + diff --git a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_data_citation_info.txt b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_data_citation_info.txt new file mode 100644 index 0000000000..b914e0c9d1 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_data_citation_info.txt @@ -0,0 +1,2 @@ +Additional data citation information was found, for which no entry is available in the bibtex file: +- See http://wiki.csiro.au/confluence/display/ACCESS/ACCESS+Publications diff --git a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_provenance.xml b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_provenance.xml new file mode 100644 index 0000000000..541b03ec77 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_provenance.xml @@ -0,0 +1,213 @@ + + + + CF-1.4 + 109207.0 + 2.8.0 + The ACCESS wiki: http://wiki.csiro.au/confluence/display/ACCESS/Home. Contact Tony.Hirst@csiro.au regarding the ACCESS coupled climate model. Contact Peter.Uhe@csiro.au regarding ACCESS coupled climate model CMIP5 datasets. + 2012-01-17T14:12:24Z + historical + historical + GHG, Oz, SA, Sl, Vl, BC, OC, (GHG = CO2, N2O, CH4, CFC11, CFC12, CFC113, HCFC22, HFC125, HFC134a) + day + CMIP5 compliant file produced from raw ACCESS model output using the ACCESS Post-Processor and CMOR2. 2012-01-17T14:12:24Z CMOR rewrote data to comply with CF standards and CMIP5 requirements. + 1 + CSIRO-BOM + CSIRO (Commonwealth Scientific and Industrial Research Organisation, Australia), and BOM (Bureau of Meteorology, Australia) + ACCESS1-0 + atmos + pre-industrial control + piControl + r1i1p1 + 1 + output + CMIP5 + 1 + See http://wiki.csiro.au/confluence/display/ACCESS/ACCESS+Publications + ACCESS1-0 2011. Atmosphere: AGCM v1.0 (N96 grid-point, 1.875 degrees EW x approx 1.25 degree NS, 38 levels); ocean: NOAA/GFDL MOM4p1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S, 50 levels); sea ice: CICE4.1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S); land: MOSES2 (1.875 degree EW x 1.25 degree NS, 4 levels + Table day (27 April 2011) 38b0ef063ca8bcf7f2436f94c40ed33c + ACCESS1-0 model output prepared for CMIP5 historical + 5dfdeab7-b15f-4145-97bf-4cd79a5de8f2 + v20120115 + + + + + + + + + + + + CMIP + CMIP5 + ACCESS1-0 + weathertyping + 2005 + r1i1p1 + v4 + historical + /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/cmip5_historical_psl_day_wt/CMIP5_ACCESS1-0_day_historical_r1i1p1_psl_1950-2005.nc + day + CSIRO-BOM + Sea Level Pressure + day + ['atmos'] + psl + weathertype_preproc + ['output1', 'output2'] + CMIP5 + 0 + psl + air_pressure_at_sea_level + 1950 + 1950/2005 + Pa + cmip5_historical_psl_day_wt + v4 + {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} + {'target_grid': {'start_longitude': -5, 'end_longitude': 25, 'step_longitude': 5, 'start_latitude': 35, 'end_latitude': 55, 'step_latitude': 5}, 'scheme': 'linear'} + {} + {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/cmip5_historical_psl_day_wt/CMIP5_ACCESS1-0_day_historical_r1i1p1_psl_1950-2005.nc')} + + + + + + + + + + + + + + + + True + Lamb Weathertypes + 0.9 + ('regional',) + ['Lamb Weathertypes'] + True + ['maraun21jgr', 'jones93ijc'] + 0.002 + weathertyping + ../diag_scripts/weathertyping/weathertyping.py + + + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, +correlations between weathertypes and precipitation patterns over a given are can be calculated +and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as +anomalies and standard deviations can be plotted. + + ['maraun21jgr', 'jones93ijc'] + + + + + + + + + + + + CF-1.4 + 109207.0 + 2.8.0 + The ACCESS wiki: http://wiki.csiro.au/confluence/display/ACCESS/Home. Contact Tony.Hirst@csiro.au regarding the ACCESS coupled climate model. Contact Peter.Uhe@csiro.au regarding ACCESS coupled climate model CMIP5 datasets. + 2012-01-17T14:02:26Z + historical + historical + GHG, Oz, SA, Sl, Vl, BC, OC, (GHG = CO2, N2O, CH4, CFC11, CFC12, CFC113, HCFC22, HFC125, HFC134a) + day + CMIP5 compliant file produced from raw ACCESS model output using the ACCESS Post-Processor and CMOR2. 2012-01-17T14:02:26Z CMOR rewrote data to comply with CF standards and CMIP5 requirements. + 1 + CSIRO-BOM + CSIRO (Commonwealth Scientific and Industrial Research Organisation, Australia), and BOM (Bureau of Meteorology, Australia) + ACCESS1-0 + atmos + pre-industrial control + piControl + r1i1p1 + 1 + output + CMIP5 + 1 + See http://wiki.csiro.au/confluence/display/ACCESS/ACCESS+Publications + ACCESS1-0 2011. Atmosphere: AGCM v1.0 (N96 grid-point, 1.875 degrees EW x approx 1.25 degree NS, 38 levels); ocean: NOAA/GFDL MOM4p1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S, 50 levels); sea ice: CICE4.1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S); land: MOSES2 (1.875 degree EW x 1.25 degree NS, 4 levels + Table day (27 April 2011) 38b0ef063ca8bcf7f2436f94c40ed33c + ACCESS1-0 model output prepared for CMIP5 historical + 0971b86a-c07d-41b1-b945-d70895afa18c + v20120115 + + + + + + + + + martin.jury@uni-graz.at + WEGC, Austria + https://orcid.org/0000-0003-0590-7843 + + + CF-1.4 + 109207.0 + 2.8.0 + The ACCESS wiki: http://wiki.csiro.au/confluence/display/ACCESS/Home. Contact Tony.Hirst@csiro.au regarding the ACCESS coupled climate model. Contact Peter.Uhe@csiro.au regarding ACCESS coupled climate model CMIP5 datasets. + 2012-01-17T13:47:35Z + historical + historical + GHG, Oz, SA, Sl, Vl, BC, OC, (GHG = CO2, N2O, CH4, CFC11, CFC12, CFC113, HCFC22, HFC125, HFC134a) + day + CMIP5 compliant file produced from raw ACCESS model output using the ACCESS Post-Processor and CMOR2. 2012-01-17T13:47:35Z CMOR rewrote data to comply with CF standards and CMIP5 requirements. + 1 + CSIRO-BOM + CSIRO (Commonwealth Scientific and Industrial Research Organisation, Australia), and BOM (Bureau of Meteorology, Australia) + ACCESS1-0 + atmos + pre-industrial control + piControl + r1i1p1 + 1 + output + CMIP5 + 1 + See http://wiki.csiro.au/confluence/display/ACCESS/ACCESS+Publications + ACCESS1-0 2011. Atmosphere: AGCM v1.0 (N96 grid-point, 1.875 degrees EW x approx 1.25 degree NS, 38 levels); ocean: NOAA/GFDL MOM4p1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S, 50 levels); sea ice: CICE4.1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S); land: MOSES2 (1.875 degree EW x 1.25 degree NS, 4 levels + Table day (27 April 2011) 38b0ef063ca8bcf7f2436f94c40ed33c + ACCESS1-0 model output prepared for CMIP5 historical + bb3d137a-2a33-4908-951d-be9b00b70534 + v20120115 + + + + + + + + + + + + + + + + + + thomas.kroissenbrunner@uni-graz.at + thomaskroi1996 + WEGC, Austria + + + + + + + + diff --git a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_citation.bibtex b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_citation.bibtex new file mode 100644 index 0000000000..9c767ba278 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_citation.bibtex @@ -0,0 +1,46 @@ +@article{righi20gmd, + doi = {10.5194/gmd-13-1179-2020}, + url = {https://doi.org/10.5194/gmd-13-1179-2020}, + year = {2020}, + month = mar, + publisher = {Copernicus {GmbH}}, + volume = {13}, + number = {3}, + pages = {1179--1199}, + author = {Mattia Righi and Bouwe Andela and Veronika Eyring and Axel Lauer and Valeriu Predoi and Manuel Schlund and Javier Vegas-Regidor and Lisa Bock and Bj"{o}rn Br"{o}tz and Lee de Mora and Faruk Diblen and Laura Dreyer and Niels Drost and Paul Earnshaw and Birgit Hassler and Nikolay Koldunov and Bill Little and Saskia Loosveldt Tomas and Klaus Zimmermann}, + title = {Earth System Model Evaluation Tool (ESMValTool) v2.0 -- technical overview}, + journal = {Geoscientific Model Development} +} + +@article{https://doi.org/10.1002/joc.3370130606, + author = {Jones, P. D. and Hulme, M. and Briffa, K. R.}, + title = {A comparison of Lamb circulation types with an objective classification scheme}, + journal = {International Journal of Climatology}, + volume = {13}, + number = {6}, + pages = {655-663}, + keywords = {Weather types, Temperature, Precipitation, British, Isles}, + doi = {https://doi.org/10.1002/joc.3370130606}, + url = {https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/joc.3370130606}, + eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/joc.3370130606}, + abstract = {Abstract An objective scheme, initially developed by Jenkinson and Collison, is used to classify daily circulation types over the British Isles, along the lines of the subjective method devised by Lamb. The scheme uses daily grid-point mean sea-level pressure data for the region. The results of the analysis over the period 1881–1989 are compared with ‘true’ Lamb weather types. The frequencies of objectively developed types are highly correlated with traditional Lamb types, especially so for synoptic (cyclonic and anticyclonic) types, although still good for wind directional types. Comparison of the two classification schemes reveals negligible differences between the correlations of the counts of circulation types and regional temperature and rainfall. The major difference between the two classification schemes is that the decline of the westerlies since 1940 is less evident with the objective scheme.}, + year = {1993} +} + + +@article{https://doi.org/10.1029/2020JD032824, + author = {Maraun, Douglas and Truhetz, Heimo and Schaffer, Armin}, + title = {Regional Climate Model Biases, Their Dependence on Synoptic Circulation Biases and the Potential for Bias Adjustment: A Process-Oriented Evaluation of the Austrian Regional Climate Projections}, + journal = {Journal of Geophysical Research: Atmospheres}, + volume = {126}, + number = {6}, + pages = {e2020JD032824}, + keywords = {Austria, bias adjustment, climate model evaluation, large-scale circulation errors, regional climate projections}, + doi = {https://doi.org/10.1029/2020JD032824}, + url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2020JD032824}, + eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2020JD032824}, + note = {e2020JD032824 2020JD032824}, + abstract = {Abstract The Austrian regional climate projections are based on an ensemble of bias adjusted regional climate model simulations. Bias adjustment (BA) improves the usability of climate projections for impact studies, but cannot mitigate fundamental model errors. This argument holds in particular for biases in the temporal dependence, which is strongly influenced by the large-scale circulation. Global climate models (GCMs), underlying regional climate projections, suffer from substantial circulation errors. We therefore, conduct a process-based evaluation of the Austrian climate projections focusing on large-scale circulation errors, their regional imprints and the potential for BA. First, we define nine synoptic weather types and assess how well the considered climate models represent their occurrence and persistence. Second, we assess biases in the overall dry and hot day probabilities, as well as conditional on synoptic weather type occurrence; and biases in the duration of dry and hot spells. Third, we investigate how these biases depend on biases in the occurrence and persistence of relevant synoptic weather types. And fourth, we study how much an overall BA improves these biases. Many GCMs misrepresent the occurrence and persistence of relevant synoptic weather types. These biases have a clear imprint on biases in dry and hot day occurrence and spell durations. BA in many cases helps to greatly reduce biases even in the presence of circulation biases, but may in some cases amplify conditional biases. Persistence biases are especially relevant for the representation of meteorological drought. Biases in the duration of dry spells cannot fully be mitigated by BA.}, + year = {2021} +} + diff --git a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_data_citation_info.txt b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_data_citation_info.txt new file mode 100644 index 0000000000..e3e19141fa --- /dev/null +++ b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_data_citation_info.txt @@ -0,0 +1,2 @@ +Additional data citation information was found, for which no entry is available in the bibtex file: +- doi:10.1029/2017JD028200 diff --git a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_provenance.xml b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_provenance.xml new file mode 100644 index 0000000000..6d21b6d720 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_provenance.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + Climate Data Interface version 1.9.10 (https://mpimet.mpg.de/cdi) + Climate Data Operators version 1.9.10 (https://mpimet.mpg.de/cdo) + CF-1.6 + day + Mon Jun 05 10:00:40 2023: cdo -b F32 -daymean -mergetime hourly_surface/psl_1958.nc hourly_surface/psl_1959.nc hourly_surface/psl_1960.nc hourly_surface/psl_1961.nc hourly_surface/psl_1962.nc hourly_surface/psl_1963.nc hourly_surface/psl_1964.nc hourly_surface/psl_1965.nc hourly_surface/psl_1966.nc hourly_surface/psl_1967.nc hourly_surface/psl_1968.nc hourly_surface/psl_1969.nc hourly_surface/psl_1970.nc hourly_surface/psl_1971.nc hourly_surface/psl_1972.nc hourly_surface/psl_1973.nc hourly_surface/psl_1974.nc hourly_surface/psl_1975.nc hourly_surface/psl_1976.nc hourly_surface/psl_1977.nc hourly_surface/psl_1978.nc hourly_surface/psl_1979.nc hourly_surface/psl_1980.nc hourly_surface/psl_1981.nc hourly_surface/psl_1982.nc hourly_surface/psl_1983.nc hourly_surface/psl_1984.nc hourly_surface/psl_1985.nc hourly_surface/psl_1986.nc hourly_surface/psl_1987.nc hourly_surface/psl_1988.nc hourly_surface/psl_1989.nc hourly_surface/psl_1990.nc hourly_surface/psl_1991.nc hourly_surface/psl_1992.nc hourly_surface/psl_1993.nc hourly_surface/psl_1994.nc hourly_surface/psl_1995.nc hourly_surface/psl_1996.nc hourly_surface/psl_1997.nc hourly_surface/psl_1998.nc hourly_surface/psl_1999.nc hourly_surface/psl_2000.nc hourly_surface/psl_2001.nc hourly_surface/psl_2002.nc hourly_surface/psl_2003.nc hourly_surface/psl_2004.nc hourly_surface/psl_2005.nc hourly_surface/psl_2006.nc hourly_surface/psl_2007.nc hourly_surface/psl_2008.nc hourly_surface/psl_2009.nc hourly_surface/psl_2010.nc hourly_surface/psl_2011.nc hourly_surface/psl_2012.nc hourly_surface/psl_2013.nc hourly_surface/psl_2014.nc hourly_surface/psl_2015.nc hourly_surface/psl_2016.nc hourly_surface/psl_2017.nc hourly_surface/psl_2018.nc hourly_surface/psl_2019.nc hourly_surface/psl_2020.nc hourly_surface/psl_2021.nc hourly_surface/psl_2022.nc /data/reloclim/normal/ESMValTool_RAWOBS/Tier3/ERA5/flo2/ERA5_2p5_day_PSL_19580101-20221231.nc +2023-05-15 09:25:45 GMT by grib_to_netcdf-2.25.1: /opt/ecmwf/mars-client/bin/grib_to_netcdf.bin -S param -o /cache/data6/adaptor.mars.internal-1684142717.2869563-15255-7-6cf45118-1614-4ec7-aa18-7c0d54bd69b6.nc /cache/tmp/6cf45118-1614-4ec7-aa18-7c0d54bd69b6-adaptor.mars.internal-1684142177.5537033-15255-13-tmp.grib + + + + + + + + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, +correlations between weathertypes and precipitation patterns over a given are can be calculated +and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as +anomalies and standard deviations can be plotted. + + ['maraun21jgr', 'jones93ijc'] + + + + + + + + + + + + + + + + + + + + + CF-1.7 + Created on 2024-04-02 13:28:45 + unknown host + day + ground + OBS + doi:10.1029/2017JD028200 + https://www.ecad.eu/download/ensembles/download.php + 2 + E-OBS data reformatted for ESMValTool v2.11.0.dev37+g7e9eecd69.d20240201 + maj + v29.0e-0.25 + + + + + + + + + + OBS + E-OBS + weathertyping + 2005 + /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/eobs_pr_wt/OBS_E-OBS_ground_v29.0e-0.25_day_pr_1958-2005.nc + day + Precipitation + day + ['atmos'] + pr + weathertype_preproc_pr + OBS + 0 + pr + precipitation_flux + 1958 + 2 + 1958/2005 + ground + kg m-2 s-1 + eobs_pr_wt + v29.0e-0.25 + {'start_longitude': 9.5, 'end_longitude': 17.25, 'start_latitude': 46.25, 'end_latitude': 49} + {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} + {} + {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/eobs_pr_wt/OBS_E-OBS_ground_v29.0e-0.25_day_pr_1958-2005.nc')} + + + + martin.jury@uni-graz.at + WEGC, Austria + https://orcid.org/0000-0003-0590-7843 + + + + + + + + + True + Lamb Weathertypes + 0.9 + ('regional',) + ['Lamb Weathertypes'] + True + ['maraun21jgr', 'jones93ijc'] + 0.002 + weathertyping + ../diag_scripts/weathertyping/weathertyping.py + + + + + + + + + + + + + + + + + + + + + thomas.kroissenbrunner@uni-graz.at + thomaskroi1996 + WEGC, Austria + + + native6 + ERA5 + weathertyping + 2005 + /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_msl_wt/native6_ERA5_reanaly_v1_day_psl_1958-2005.nc + day + v1 + Sea Level Pressure + day + ['atmos'] + psl + weathertype_preproc + native6 + 0 + psl + air_pressure_at_mean_sea_level + 1958 + 3 + 1958/2005 + reanaly + Pa + era5_msl_wt + v1 + {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} + {'target_grid': {'start_longitude': -5, 'end_longitude': 25, 'step_longitude': 5, 'start_latitude': 35, 'end_latitude': 55, 'step_latitude': 5}, 'scheme': 'linear'} + {} + {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_msl_wt/native6_ERA5_reanaly_v1_day_psl_1958-2005.nc')} + + + diff --git a/esmvaltool/recipes/weathertyping/ERA5_wt_prov_citation.bibtex b/esmvaltool/recipes/weathertyping/ERA5_wt_prov_citation.bibtex new file mode 100644 index 0000000000..9c767ba278 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/ERA5_wt_prov_citation.bibtex @@ -0,0 +1,46 @@ +@article{righi20gmd, + doi = {10.5194/gmd-13-1179-2020}, + url = {https://doi.org/10.5194/gmd-13-1179-2020}, + year = {2020}, + month = mar, + publisher = {Copernicus {GmbH}}, + volume = {13}, + number = {3}, + pages = {1179--1199}, + author = {Mattia Righi and Bouwe Andela and Veronika Eyring and Axel Lauer and Valeriu Predoi and Manuel Schlund and Javier Vegas-Regidor and Lisa Bock and Bj"{o}rn Br"{o}tz and Lee de Mora and Faruk Diblen and Laura Dreyer and Niels Drost and Paul Earnshaw and Birgit Hassler and Nikolay Koldunov and Bill Little and Saskia Loosveldt Tomas and Klaus Zimmermann}, + title = {Earth System Model Evaluation Tool (ESMValTool) v2.0 -- technical overview}, + journal = {Geoscientific Model Development} +} + +@article{https://doi.org/10.1002/joc.3370130606, + author = {Jones, P. D. and Hulme, M. and Briffa, K. R.}, + title = {A comparison of Lamb circulation types with an objective classification scheme}, + journal = {International Journal of Climatology}, + volume = {13}, + number = {6}, + pages = {655-663}, + keywords = {Weather types, Temperature, Precipitation, British, Isles}, + doi = {https://doi.org/10.1002/joc.3370130606}, + url = {https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/joc.3370130606}, + eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/joc.3370130606}, + abstract = {Abstract An objective scheme, initially developed by Jenkinson and Collison, is used to classify daily circulation types over the British Isles, along the lines of the subjective method devised by Lamb. The scheme uses daily grid-point mean sea-level pressure data for the region. The results of the analysis over the period 1881–1989 are compared with ‘true’ Lamb weather types. The frequencies of objectively developed types are highly correlated with traditional Lamb types, especially so for synoptic (cyclonic and anticyclonic) types, although still good for wind directional types. Comparison of the two classification schemes reveals negligible differences between the correlations of the counts of circulation types and regional temperature and rainfall. The major difference between the two classification schemes is that the decline of the westerlies since 1940 is less evident with the objective scheme.}, + year = {1993} +} + + +@article{https://doi.org/10.1029/2020JD032824, + author = {Maraun, Douglas and Truhetz, Heimo and Schaffer, Armin}, + title = {Regional Climate Model Biases, Their Dependence on Synoptic Circulation Biases and the Potential for Bias Adjustment: A Process-Oriented Evaluation of the Austrian Regional Climate Projections}, + journal = {Journal of Geophysical Research: Atmospheres}, + volume = {126}, + number = {6}, + pages = {e2020JD032824}, + keywords = {Austria, bias adjustment, climate model evaluation, large-scale circulation errors, regional climate projections}, + doi = {https://doi.org/10.1029/2020JD032824}, + url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2020JD032824}, + eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2020JD032824}, + note = {e2020JD032824 2020JD032824}, + abstract = {Abstract The Austrian regional climate projections are based on an ensemble of bias adjusted regional climate model simulations. Bias adjustment (BA) improves the usability of climate projections for impact studies, but cannot mitigate fundamental model errors. This argument holds in particular for biases in the temporal dependence, which is strongly influenced by the large-scale circulation. Global climate models (GCMs), underlying regional climate projections, suffer from substantial circulation errors. We therefore, conduct a process-based evaluation of the Austrian climate projections focusing on large-scale circulation errors, their regional imprints and the potential for BA. First, we define nine synoptic weather types and assess how well the considered climate models represent their occurrence and persistence. Second, we assess biases in the overall dry and hot day probabilities, as well as conditional on synoptic weather type occurrence; and biases in the duration of dry and hot spells. Third, we investigate how these biases depend on biases in the occurrence and persistence of relevant synoptic weather types. And fourth, we study how much an overall BA improves these biases. Many GCMs misrepresent the occurrence and persistence of relevant synoptic weather types. These biases have a clear imprint on biases in dry and hot day occurrence and spell durations. BA in many cases helps to greatly reduce biases even in the presence of circulation biases, but may in some cases amplify conditional biases. Persistence biases are especially relevant for the representation of meteorological drought. Biases in the duration of dry spells cannot fully be mitigated by BA.}, + year = {2021} +} + diff --git a/esmvaltool/recipes/weathertyping/ERA5_wt_prov_provenance.xml b/esmvaltool/recipes/weathertyping/ERA5_wt_prov_provenance.xml new file mode 100644 index 0000000000..b1874d4453 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/ERA5_wt_prov_provenance.xml @@ -0,0 +1,173 @@ + + + + native6 + ERA5 + weathertyping + 2005 + /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_pr_wt/native6_ERA5_reanaly_v1_day_pr_1958-2005.nc + day + v1 + Precipitation + day + ['atmos'] + pr + weathertype_preproc_pr + native6 + 0 + pr + precipitation_flux + 1958 + 3 + 1958/2005 + reanaly + kg m-2 s-1 + era5_pr_wt + v1 + {'start_longitude': 9.5, 'end_longitude': 17.25, 'start_latitude': 46.25, 'end_latitude': 49} + {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} + {} + {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_pr_wt/native6_ERA5_reanaly_v1_day_pr_1958-2005.nc')} + + + + + + + Climate Data Interface version 2.1.1 (https://mpimet.mpg.de/cdi) + Climate Data Operators version 2.1.1 (https://mpimet.mpg.de/cdo) + CF-1.6 + day + Wed Nov 29 10:47:28 2023: cdo mulc,24 ERA5_2p5cdo_day_PR_19500101-20221231.nc tmp.nc +Wed Nov 29 09:25:53 2023: cdo remapcon,ERA5_2p5_day_PSL_19580101-20221231.nc ERA5_0p25_day_PR_19500101-20221231.nc ERA5_2p5cdo_day_PR_19500101-20221231.nc +Mon Oct 09 09:31:08 2023: cdo -b F32 -daymean -mergetime hourly_surface/pr_1950.nc hourly_surface/pr_1951.nc hourly_surface/pr_1952.nc hourly_surface/pr_1953.nc hourly_surface/pr_1954.nc hourly_surface/pr_1955.nc hourly_surface/pr_1956.nc hourly_surface/pr_1957.nc hourly_surface/pr_1958.nc hourly_surface/pr_1959.nc hourly_surface/pr_1960.nc hourly_surface/pr_1961.nc hourly_surface/pr_1962.nc hourly_surface/pr_1963.nc hourly_surface/pr_1964.nc hourly_surface/pr_1965.nc hourly_surface/pr_1966.nc hourly_surface/pr_1967.nc hourly_surface/pr_1968.nc hourly_surface/pr_1969.nc hourly_surface/pr_1970.nc hourly_surface/pr_1971.nc hourly_surface/pr_1972.nc hourly_surface/pr_1973.nc hourly_surface/pr_1974.nc hourly_surface/pr_1975.nc hourly_surface/pr_1976.nc hourly_surface/pr_1977.nc hourly_surface/pr_1978.nc hourly_surface/pr_1979.nc hourly_surface/pr_1980.nc hourly_surface/pr_1981.nc hourly_surface/pr_1982.nc hourly_surface/pr_1983.nc hourly_surface/pr_1984.nc hourly_surface/pr_1985.nc hourly_surface/pr_1986.nc hourly_surface/pr_1987.nc hourly_surface/pr_1988.nc hourly_surface/pr_1989.nc hourly_surface/pr_1990.nc hourly_surface/pr_1991.nc hourly_surface/pr_1992.nc hourly_surface/pr_1993.nc hourly_surface/pr_1994.nc hourly_surface/pr_1995.nc hourly_surface/pr_1996.nc hourly_surface/pr_1997.nc hourly_surface/pr_1998.nc hourly_surface/pr_1999.nc hourly_surface/pr_2000.nc hourly_surface/pr_2001.nc hourly_surface/pr_2002.nc hourly_surface/pr_2003.nc hourly_surface/pr_2004.nc hourly_surface/pr_2005.nc hourly_surface/pr_2006.nc hourly_surface/pr_2007.nc hourly_surface/pr_2008.nc hourly_surface/pr_2009.nc hourly_surface/pr_2010.nc hourly_surface/pr_2011.nc hourly_surface/pr_2012.nc hourly_surface/pr_2013.nc hourly_surface/pr_2014.nc hourly_surface/pr_2015.nc hourly_surface/pr_2016.nc hourly_surface/pr_2017.nc hourly_surface/pr_2018.nc hourly_surface/pr_2019.nc hourly_surface/pr_2020.nc hourly_surface/pr_2021.nc hourly_surface/pr_2022.nc /data/reloclim/normal/ESMValTool_RAWOBS/Tier3/ERA5/PREVAL/ERA5_0p25_day_PR_19500101-20221231.nc +2023-10-03 04:01:14 GMT by grib_to_netcdf-2.25.1: /opt/ecmwf/mars-client/bin/grib_to_netcdf.bin -S param -o /cache/data5/adaptor.mars.internal-1696305350.0348094-26737-8-709187c8-5b1a-41d6-95b7-ad74a18fe30b.nc /cache/tmp/709187c8-5b1a-41d6-95b7-ad74a18fe30b-adaptor.mars.internal-1696304630.7169528-26737-10-tmp.grib + + + Climate Data Interface version 1.9.10 (https://mpimet.mpg.de/cdi) + Climate Data Operators version 1.9.10 (https://mpimet.mpg.de/cdo) + CF-1.6 + day + Mon Jun 05 10:00:40 2023: cdo -b F32 -daymean -mergetime hourly_surface/psl_1958.nc hourly_surface/psl_1959.nc hourly_surface/psl_1960.nc hourly_surface/psl_1961.nc hourly_surface/psl_1962.nc hourly_surface/psl_1963.nc hourly_surface/psl_1964.nc hourly_surface/psl_1965.nc hourly_surface/psl_1966.nc hourly_surface/psl_1967.nc hourly_surface/psl_1968.nc hourly_surface/psl_1969.nc hourly_surface/psl_1970.nc hourly_surface/psl_1971.nc hourly_surface/psl_1972.nc hourly_surface/psl_1973.nc hourly_surface/psl_1974.nc hourly_surface/psl_1975.nc hourly_surface/psl_1976.nc hourly_surface/psl_1977.nc hourly_surface/psl_1978.nc hourly_surface/psl_1979.nc hourly_surface/psl_1980.nc hourly_surface/psl_1981.nc hourly_surface/psl_1982.nc hourly_surface/psl_1983.nc hourly_surface/psl_1984.nc hourly_surface/psl_1985.nc hourly_surface/psl_1986.nc hourly_surface/psl_1987.nc hourly_surface/psl_1988.nc hourly_surface/psl_1989.nc hourly_surface/psl_1990.nc hourly_surface/psl_1991.nc hourly_surface/psl_1992.nc hourly_surface/psl_1993.nc hourly_surface/psl_1994.nc hourly_surface/psl_1995.nc hourly_surface/psl_1996.nc hourly_surface/psl_1997.nc hourly_surface/psl_1998.nc hourly_surface/psl_1999.nc hourly_surface/psl_2000.nc hourly_surface/psl_2001.nc hourly_surface/psl_2002.nc hourly_surface/psl_2003.nc hourly_surface/psl_2004.nc hourly_surface/psl_2005.nc hourly_surface/psl_2006.nc hourly_surface/psl_2007.nc hourly_surface/psl_2008.nc hourly_surface/psl_2009.nc hourly_surface/psl_2010.nc hourly_surface/psl_2011.nc hourly_surface/psl_2012.nc hourly_surface/psl_2013.nc hourly_surface/psl_2014.nc hourly_surface/psl_2015.nc hourly_surface/psl_2016.nc hourly_surface/psl_2017.nc hourly_surface/psl_2018.nc hourly_surface/psl_2019.nc hourly_surface/psl_2020.nc hourly_surface/psl_2021.nc hourly_surface/psl_2022.nc /data/reloclim/normal/ESMValTool_RAWOBS/Tier3/ERA5/flo2/ERA5_2p5_day_PSL_19580101-20221231.nc +2023-05-15 09:25:45 GMT by grib_to_netcdf-2.25.1: /opt/ecmwf/mars-client/bin/grib_to_netcdf.bin -S param -o /cache/data6/adaptor.mars.internal-1684142717.2869563-15255-7-6cf45118-1614-4ec7-aa18-7c0d54bd69b6.nc /cache/tmp/6cf45118-1614-4ec7-aa18-7c0d54bd69b6-adaptor.mars.internal-1684142177.5537033-15255-13-tmp.grib + + + + + + + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, +correlations between weathertypes and precipitation patterns over a given are can be calculated +and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as +anomalies and standard deviations can be plotted. + + ['maraun21jgr', 'jones93ijc'] + + + + + + + True + Lamb Weathertypes + 0.9 + ('regional',) + ['Lamb Weathertypes'] + True + ['maraun21jgr', 'jones93ijc'] + 0.002 + weathertyping + ../diag_scripts/weathertyping/weathertyping.py + + + + + + + + + + + + + + + + + + + + + + + + martin.jury@uni-graz.at + WEGC, Austria + https://orcid.org/0000-0003-0590-7843 + + + + + + + + + + + + + + + + + + + + + + + + + + + thomas.kroissenbrunner@uni-graz.at + thomaskroi1996 + WEGC, Austria + + + native6 + ERA5 + weathertyping + 2005 + /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_msl_wt/native6_ERA5_reanaly_v1_day_psl_1958-2005.nc + day + v1 + Sea Level Pressure + day + ['atmos'] + psl + weathertype_preproc + native6 + 0 + psl + air_pressure_at_mean_sea_level + 1958 + 3 + 1958/2005 + reanaly + Pa + era5_msl_wt + v1 + {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} + {'target_grid': {'start_longitude': -5, 'end_longitude': 25, 'step_longitude': 5, 'start_latitude': 35, 'end_latitude': 55, 'step_latitude': 5}, 'scheme': 'linear'} + {} + {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_msl_wt/native6_ERA5_reanaly_v1_day_psl_1958-2005.nc')} + + + + + + + + + diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml new file mode 100644 index 0000000000..b62cbf8921 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml @@ -0,0 +1,255 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP5: &datasets_psl_cmip5 + - {institute: CSIRO-BOM, dataset: ACCESS1-0, ensemble: r1i1p1, esgf_version: v4} + - {institute: CSIRO-BOM, dataset: ACCESS1-3, ensemble: r1i1p1, esgf_version: v20131108} + - {institute: CMCC, dataset: CMCC-CESM, ensemble: r1i1p1, esgf_version: v20170725} + - {institute: CMCC, dataset: CMCC-CM, ensemble: r1i1p1, esgf_version: v20170725} + - {institute: CMCC, dataset: CMCC-CMS, ensemble: r1i1p1, esgf_version: v20170725} + - {institute: CNRM-CERFACS, dataset: CNRM-CM5, ensemble: r1i1p1, esgf_version: v20120530} + - {institute: CSIRO-QCCCE, dataset: CSIRO-Mk3-6-0, ensemble: r1i1p1, esgf_version: v1} + - {institute: LASG-IAP, dataset: FGOALS-s2, ensemble: r1i1p1, esgf_version: v20161204} + - {institute: NIMR-KMA, dataset: HadGEM2-AO, ensemble: r1i1p1, esgf_version: v20130815} + - {institute: INM, dataset: inmcm4, ensemble: r1i1p1, esgf_version: v20110323} + - {institute: IPSL, dataset: IPSL-CM5A-LR, ensemble: r1i1p1, esgf_version: v20110915} + - {institute: IPSL, dataset: IPSL-CM5A-MR, ensemble: r1i1p1, esgf_version: v20111119} + - {institute: IPSL, dataset: IPSL-CM5B-LR, ensemble: r1i1p1, esgf_version: v20120718} + - {institute: MIROC, dataset: MIROC5, ensemble: r1i1p1, esgf_version: v20120710} + - {institute: MIROC, dataset: MIROC-ESM, ensemble: r1i1p1, esgf_version: v20120710} + - {institute: MIROC, dataset: MIROC-ESM-CHEM, ensemble: r1i1p1, esgf_version: v20120718} + - {institute: MPI-M, dataset: MPI-ESM-LR, ensemble: r1i1p1, esgf_version: v20111006} + - {institute: MPI-M, dataset: MPI-ESM-P, ensemble: r1i1p1, esgf_version: v20120315} + - {institute: MPI-M, dataset: MPI-ESM-MR, ensemble: r1i1p1, esgf_version: v20120503} + - {institute: MRI, dataset: MRI-CGCM3, ensemble: r1i1p1, esgf_version: v20120701} + - {institute: MRI, dataset: MRI-ESM1, ensemble: r1i1p1, esgf_version: v20130307} + - {institute: MOHC, dataset: HadGEM2-CC, ensemble: r1i1p1, esgf_version: v20110930} + - {institute: MOHC, dataset: HadGEM2-ES, ensemble: r1i1p1, esgf_version: v20120716} + - {institute: BCC, dataset: bcc-csm1-1, ensemble: r1i1p1, esgf_version: v1} + - {institute: BCC, dataset: bcc-csm1-1-m, ensemble: r1i1p1, esgf_version: v20120709} + - {institute: CCCma, dataset: CanESM2, ensemble: r1i1p1, esgf_version: v20120410} + - {institute: NCAR, dataset: CCSM4, ensemble: r1i1p1, esgf_version: v20120409} + - {institute: NCC, dataset: NorESM1-M, ensemble: r1i1p1, esgf_version: v20110901} + - {institute: NOAA-GFDL, dataset: GFDL-ESM2G, ensemble: r1i1p1, esgf_version: v20130130} + - {institute: NOAA-GFDL, dataset: GFDL-ESM2M, ensemble: r1i1p1, esgf_version: v20111228} + - {institute: NSF-DOE-NCAR, dataset: CESM1-BGC, ensemble: r1i1p1, esgf_version: v20120523} + - {institute: NSF-DOE-NCAR, dataset: CESM1-CAM5, ensemble: r1i1p1, esgf_version: v20140612} + - {institute: NSF-DOE-NCAR, dataset: CESM1-FASTCHEM, ensemble: r1i1p1, esgf_version: v20120522} + - {institute: ICHEC, dataset: EC-EARTH, ensemble: r1i1p1, esgf_version: v20171115} + #- {institute: LASG-CESS, dataset: FGOALS-g2, ensemble: r1i1p1, esgf_version: v20161204} + - {institute: BNU, dataset: BNU-ESM, ensemble: r1i1p1, esgf_version: v20120504} + #- {institute: CCCma, dataset: CanCM4, ensemble: r1i1p1, esgf_version: v20120612} + - {institute: MIROC, dataset: MIROC4h, ensemble: r1i1p1, esgf_version: v20120628} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2005} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2005, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2005 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2005 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip5_historical_psl_day_wt: &cmip5_historical_wt + project: CMIP5 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2005 + additional_datasets: + *datasets_psl_cmip5 + + cmip5_historical_psl_day_mean: &cmip5_historical_psl + project: CMIP5 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2005 + additional_datasets: + *datasets_psl_cmip5 + + cmip5_historical_prcp_day_mean: &cmip5_historical_prcp + project: CMIP5 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2005 + additional_datasets: + *datasets_psl_cmip5 + + cmip5_historical_temp_day_mean: &cmip5_historical_ta + project: CMIP5 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2005 + additional_datasets: + *datasets_psl_cmip5 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml new file mode 100644 index 0000000000..759dfa471f --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml @@ -0,0 +1,263 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: AS-RCEC, dataset: TaiESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200626} +# - {institute: AWI, dataset: AWI-ESM-1-1-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200212} +# - {institute: BCC, dataset: BCC-CSM2-MR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181126} +# - {institute: BCC, dataset: BCC-ESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181220} +# - {institute: CAS, dataset: FGOALS-f3-L, ensemble: r1i1p1f1, grid: gr, esgf_version: v20191019} +# - {institute: CAS, dataset: FGOALS-g3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190826} +# - {institute: CCCR-IITM, dataset: IITM-ESM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210203} +# - {institute: CCCma, dataset: CanESM5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190429} +# - {institute: CMCC, dataset: CMCC-CM2-HR4, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200904} +# - {institute: CMCC, dataset: CMCC-CM2-SR5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200616} +# - {institute: CMCC, dataset: CMCC-ESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210114} +# - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r1i1p1f2, grid: gr, esgf_version: v20180917} +# - {institute: CSIRO-ARCCSS, dataset: ACCESS-CM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} +# - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191115} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-AerChem, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200624} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-CC, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210113} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200217} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg, ensemble: r1i1p1f1, grid: gr, esgf_version: v20211207} +# - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200310} +# - {institute: HAMMOZ-Consortium, dataset: MPI-ESM-1-2-HAM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190627} +# - {institute: INM, dataset: INM-CM4-8, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190530} +# - {institute: INM, dataset: INM-CM5-0, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190610} +# - {institute: IPSL, dataset: IPSL-CM5A2-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200729} +# - {institute: IPSL, dataset: IPSL-CM6A-LR-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210216} +# - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20180803} +# - {institute: KIOST, dataset: KIOST-ESM, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20210601} +# - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r1i1p1f2, grid: gn, esgf_version: v20191129} +# - {institute: MIROC, dataset: MIROC6, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191016} +# - {institute: MPI-M, dataset: ICON-ESM-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210215} +# - {institute: MPI-M, dataset: MPI-ESM1-2-HR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} +# - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} +# - {institute: MRI, dataset: MRI-ESM2-0, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190603} +# - {institute: NASA-GISS, dataset: GISS-E2-2-G, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120, start_year: 1970} +# - {institute: NCAR, dataset: CESM2-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} +# - {institute: NCAR, dataset: CESM2-WACCM-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} +# - {institute: NCAR, dataset: CESM2-WACCM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190227} +# - {institute: NCAR, dataset: CESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190308} +# - {institute: NCC, dataset: NorCPM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200724} +# - {institute: NCC, dataset: NorESM2-LM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190815} +# - {institute: NCC, dataset: NorESM2-MM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} +# - {institute: NIMS-KMA, dataset: KACE-1-0-G, ensemble: r1i1p1f1, grid: gr, esgf_version: v20190911} +# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20180701} +# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr2, esgf_version: v20180701} +# - {institute: NOAA-GFDL, dataset: GFDL-ESM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190726} +# - {institute: NUIST, dataset: NESM3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190812} +# - {institute: SNU, dataset: SAM0-UNICON, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190323} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml new file mode 100644 index 0000000000..c1bde9efea --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml @@ -0,0 +1,287 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CORDEX: &datasets_psl_cordex + - {domain: EUR-11, institute: IPSL, dataset: WRF381P, ensemble: r1i1p1, rcm_version: v2, latestversion: v20191015, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: IPSL, dataset: WRF381P, ensemble: r1i1p1, rcm_version: v1, latestversion: v20210405, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: IPSL, dataset: WRF381P, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190919, driver: IPSL-IPSL-CM5A-MR} + - {domain: EUR-11, institute: IPSL, dataset: WRF381P, ensemble: r12i1p1, rcm_version: v1, latestversion: v20200716, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: IPSL, dataset: WRF381P, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190919, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: IPSL, dataset: WRF381P, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190919, driver: NCC-NorESM1-M} + - {domain: EUR-11, institute: CNRM, dataset: ALADIN63, ensemble: r1i1p1, rcm_version: v1, latestversion: v20200306, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: CNRM, dataset: ALADIN63, ensemble: r1i1p1, rcm_version: v1, latestversion: v20201203, driver: NCC-NorESM1-M} + - {domain: EUR-11, institute: CNRM, dataset: ALADIN63, ensemble: r1i1p1, rcm_version: v2, latestversion: v20190510, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: CNRM, dataset: ALADIN53, ensemble: r1i1p1, rcm_version: v1, latestversion: v20150127, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: CNRM, dataset: ALADIN63, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190919, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: CLMcom, dataset: CCLM4-8-17, ensemble: r1i1p1, rcm_version: v1, latestversion: v20140515, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: CLMcom, dataset: CCLM4-8-17, ensemble: r1i1p1, rcm_version: v1, latestversion: v20140515, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: CLMcom, dataset: CCLM4-8-17, ensemble: r12i1p1, rcm_version: v1, latestversion: v20140515, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: CLMcom, dataset: CCLM4-8-17, ensemble: r1i1p1, rcm_version: v1, latestversion: v20150320, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: DMI, dataset: HIRHAM5, ensemble: r1i1p1, rcm_version: v1, latestversion: v20191101, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: DMI, dataset: HIRHAM5, ensemble: r1i1p1, rcm_version: v2, latestversion: v20190512, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: DMI, dataset: HIRHAM5, ensemble: r1i1p1, rcm_version: v1, latestversion: v20201101, driver: IPSL-IPSL-CM5A-MR} + #- {domain: EUR-11, institute: DMI, dataset: HIRHAM5, ensemble: r3i1p1, rcm_version: v1, latestversion: v20201101, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: DMI, dataset: HIRHAM5, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190108, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: DMI, dataset: HIRHAM5, ensemble: r12i1p1, rcm_version: v1, latestversion: v20181126, driver: ICHEC-EC-EARTH} + #- {domain: EUR-11, institute: DMI, dataset: RegCM4-6, ensemble: r1i1p1, rcm_version: v1, latestversion: v20150320, driver: } + - {domain: EUR-11, institute: ICTP, dataset: RegCM4-6, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190502, driver: NCC-NorESM1-M} + - {domain: EUR-11, institute: ICTP, dataset: RegCM4-6, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190502, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: ICTP, dataset: RegCM4-6, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190502, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: ICTP, dataset: RegCM4-6, ensemble: r12i1p1, rcm_version: v1, latestversion: v20190502, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: ICTP, dataset: RegCM4-6, ensemble: r1i1p1, rcm_version: v2, latestversion: v20190502, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: MPI-CSC, dataset: REMO2009, ensemble: r1i1p1, rcm_version: v1, latestversion: v20160419, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: MOHC, dataset: HadREM3-GA7-05, ensemble: r1i1p1, rcm_version: v1, latestversion: v20200706, driver: NCC-NorESM1-M} + - {domain: EUR-11, institute: MOHC, dataset: HadREM3-GA7-05, ensemble: r1i1p1, rcm_version: v1, latestversion: v20200330, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: MOHC, dataset: HadREM3-GA7-05, ensemble: r12i1p1, rcm_version: v1, latestversion: v20200330, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: MOHC, dataset: HadREM3-GA7-05, ensemble: r1i1p1, rcm_version: v2, latestversion: v20201111, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: MOHC, dataset: HadREM3-GA7-05, ensemble: r1i1p1, rcm_version: v1, latestversion: v20200330, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: GERICS, dataset: REMO2015, ensemble: r3i1p1, rcm_version: v1, latestversion: v20190925, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: GERICS, dataset: REMO2015, ensemble: r1i1p1, rcm_version: v1, latestversion: v20180710, driver: NOAA-GFDL-GFDL-ESM2G} + - {domain: EUR-11, institute: GERICS, dataset: REMO2015, ensemble: r1i1p1, rcm_version: v2, latestversion: v20200713, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: GERICS, dataset: REMO2015, ensemble: r1i1p1, rcm_version: v1, latestversion: v20180710, driver: IPSL-IPSL-CM5A-LR} + - {domain: EUR-11, institute: GERICS, dataset: REMO2015, ensemble: r1i1p1, rcm_version: v1, latestversion: v20200702, driver: IPSL-IPSL-CM5A-MR} + - {domain: EUR-11, institute: GERICS, dataset: REMO2015, ensemble: r1i1p1, rcm_version: v1, latestversion: v20181107, driver: NCC-NorESM1-M} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r1i1p1, rcm_version: v1, latestversion: v20191029, driver: IPSL-IPSL-CM5A-MR} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r1i1p1, rcm_version: v2, latestversion: v20160620, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190415, driver: NCC-NorESM1-M} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r1i1p1, rcm_version: v2, latestversion: v20181212, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190619, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r1i1p1, rcm_version: v1, latestversion: v20140313, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r12i1p1, rcm_version: v1, latestversion: v20170208, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r3i1p1, rcm_version: v1, latestversion: v20190108, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1, latestversion: v20131026, driver: IPSL-IPSL-CM5A-MR} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r12i1p1, rcm_version: v1, latestversion: v20131026, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1, latestversion: v20190820, driver: ICHEC-EC-EARTH} + #- {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r2i1p1, rcm_version: v1, latestversion: v20190108, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1, latestversion: v20131026, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1, latestversion: v20180820, driver: NCC-NorESM1-M} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1a, latestversion: v20160803, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r3i1p1, rcm_version: v1, latestversion: v20191001, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r2i1p1, rcm_version: v1, latestversion: v20191116, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1, latestversion: v20131026, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r1i1p1, rcm_version: v1, latestversion: v20210308, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r1i1p1, rcm_version: v1, latestversion: v20200609, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r1i1p1, rcm_version: v1, latestversion: v20191210, driver: NCC-NorESM1-M} + - {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r3i1p1, rcm_version: v1, latestversion: v20201209, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r12i1p1, rcm_version: v1, latestversion: v20191210, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r1i1p1, rcm_version: v1, latestversion: v20201215, driver: ICHEC-EC-EARTH} + #- {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r3i1p1, rcm_version: v1, latestversion: v20131026, driver: MPI-M-MMPI-ESM-LR} + - {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r2i1p1, rcm_version: v1, latestversion: v20200211, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: CLMcom-ETH, dataset: COSMO-crCLIM-v1-1, ensemble: r1i1p1, rcm_version: v1, latestversion: v20191219, driver: MPI-M-MPI-ESM-LR} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2005} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2005, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1951 + start_month: 1 + start_day: 1 + end_year: 2005 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2005 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2005 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cordex_historical_psl_day_wt: &cordex_historical_wt + project: CORDEX + activity: CMIP + mip: day + exp: historical + frequency: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1970 + end_year: 2005 + additional_datasets: + *datasets_psl_cordex + + cordex_historical_psl_day_mean: &cordex_historical_psl + project: CORDEX + activity: CMIP + mip: day + exp: historical + frequency: day + short_name: psl + preprocessor: mean_preproc + start_year: 1970 + end_year: 2005 + additional_datasets: + *datasets_psl_cordex + + cordex_historical_prcp_day_mean: &cordex_historical_prcp + project: CORDEX + activity: CMIP + mip: day + exp: historical + frequency: day + short_name: pr + preprocessor: mean_preproc + start_year: 1970 + end_year: 2005 + additional_datasets: + *datasets_psl_cordex + + cordex_historical_temp_day_mean: &cordex_historical_ta + project: CORDEX + activity: CMIP + mip: day + exp: historical + frequency: day + short_name: tas + preprocessor: mean_preproc + start_year: 1970 + end_year: 2005 + additional_datasets: + *datasets_psl_cordex + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py From afd343c6feb494554d1042d5c882d2eda7fcf27a Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Thu, 11 Jul 2024 21:02:15 +0200 Subject: [PATCH 19/29] add seasonal occurence plot --- .../weathertyping/weathertyping.py | 11 ++-- .../diag_scripts/weathertyping/wt_utils.py | 63 ++++++++++++++++--- 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index c57eaf6ca9..1026c5f376 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -62,14 +62,13 @@ def run_automatic_slwt(cfg: dict): var_dict = get_looping_dict( dataset_vars ) # dataset_vars is list of variables for dataset dataset_name - if plotting: # plot means for var_name, var_data in var_dict.items(): data_info = {'dataset': dataset_name, 'var': var_name, 'preproc_path': var_data[1]} - plot_means(cfg, var_data[0], wt_cubes, data_info) + #plot_means(cfg, var_data[0], wt_cubes, data_info) plot_seasonal_occurence(cfg, wt_cubes, dataset_name) else: if dataset_name == 'E-OBS': @@ -99,8 +98,10 @@ def run_automatic_slwt(cfg: dict): data_info = {'dataset': dataset_name, 'var': var_name, 'preproc_path': var_data[1]} - plot_means(cfg, var_data[0], wt_cubes, data_info, - only_lwt=True) + #plot_means(cfg, var_data[0], wt_cubes, data_info, + # only_lwt=True) + plot_seasonal_occurence(cfg, wt_cubes, dataset_name) + def run_lwt(cfg: dict): @@ -152,6 +153,7 @@ def run_lwt(cfg: dict): 'preproc_path': var_data[1]} plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) + plot_seasonal_occurence(cfg, wt_cubes, dataset_name) else: if dataset_name == 'E-OBS': continue @@ -179,6 +181,7 @@ def run_lwt(cfg: dict): 'preproc_path': var_data[1]} plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) + plot_seasonal_occurence(cfg, wt_cubes, dataset_name) def run_my_diagnostic(cfg: dict): diff --git a/esmvaltool/diag_scripts/weathertyping/wt_utils.py b/esmvaltool/diag_scripts/weathertyping/wt_utils.py index 8062b252fb..65b502f679 100644 --- a/esmvaltool/diag_scripts/weathertyping/wt_utils.py +++ b/esmvaltool/diag_scripts/weathertyping/wt_utils.py @@ -36,18 +36,65 @@ warnings.filterwarnings('ignore', '.*Collapsing a non-contiguous coordinate*') -def plot_seasonal_occurence(cfg: dict, wt_cubes: iris.Cube.cube, - dataset_name: str, only_lwt=False): - full_dict = {} #{wt_string: {month: {wt1: occurence, wt2: occurence, ....}}} +def plot_seasonal_occurence(cfg: dict, wt_cubes: iris.cube.Cube, + dataset_name: str): + + month_list = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + output_path = cfg['work_dir'] + + relative_occurences = {} + #{wt_string: {month: {wt1: rel_occurence, wt2: rel_occurence, ....}}} #first do absolute occurence, then relative occurence for cube in wt_cubes: + month_dict = {} for month in range(1,13): - month_constraint = iris.Constraint(time=iris.time.PartialDateTime(month=month)) + month_constraint = iris.Constraint( + time=iris.time.PartialDateTime(month=month)) array = cube.extract(month_constraint).data unique, counts = np.unique(array, return_counts=True) - count_dict = dict(zip(unique, counts)) - + count_dict = dict(zip(unique, counts/sum(counts))) + month_dict[month] = count_dict + relative_occurences[cube.long_name] = month_dict + + #colors = ['#653334', '#8b4746', '#b35958', '#da6c6b', '#f9bb7e', + # '#fbea80', '#66b3cd', '#4a8799', '#335966'] + + x = month_list + + for wt_string in relative_occurences.keys(): + wt_numbers = len(relative_occurences.get(wt_string).get(1).keys()) + wt_stack = np.zeros((wt_numbers, 12)) + for month, month_value in relative_occurences.get(wt_string).items(): + print(month_value) + for wt in month_value.keys(): + print(month_value.get(wt)) + wt_stack[np.int8(wt-1), month-1] = month_value.get(wt) + + + y = np.vstack([x for x in wt_stack]) + # plot + fig, ax = plt.subplots(figsize=(10,10)) + + ax.set_title(f'{dataset_name}') + + ax.stackplot(x, y)#, colors=colors) + + ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), + fancybox=True, shadow=True, ncol=9, labels= + tuple(f'WT {i+1}' for i in range(0,wt_numbers))) + + ax.set(xlim=(0, 11), xticks=np.arange(0, 12), + ylim=(0, 1), yticks=np.arange(0,1.1,0.1)) + ax.set_xlabel('Month') + ax.set_ylabel('Cumulative Relative Occurence') + + plt.savefig( + f'{output_path}/{dataset_name}_{wt_string}_rel_occurence.png') + plt.savefig( + f'{output_path}/{dataset_name}_{wt_string}_rel_occurence.pdf') + plt.close() @@ -98,11 +145,11 @@ def get_ancestors_era5_eobs(dataset: str, preproc_variables_dict: dict): _type_: lists of ERA5/E-OBS ancestors """ era5_ancestors = [ - preproc_variables_dict.get(dataset).get('filename'), + preproc_variables_dict.get(dataset)[0].get('filename'), preproc_variables_dict.get(dataset)[1].get('filename') ] eobs_ancestors = [ - preproc_variables_dict.get(dataset).get('filename'), + preproc_variables_dict.get(dataset)[0].get('filename'), preproc_variables_dict.get('E-OBS')[0].get('filename') ] return era5_ancestors, eobs_ancestors From 7e57854dc656a6463224809b7ac1f397b87442f8 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Mon, 5 Aug 2024 19:23:19 +0200 Subject: [PATCH 20/29] new recipes --- .../weathertyping/weathertyping.py | 15 +- .../diag_scripts/weathertyping/wt_utils.py | 89 ++++-- .../ACCESS1-0_wt_prov_citation.bibtex | 46 --- .../ACCESS1-0_wt_prov_data_citation_info.txt | 2 - .../ACCESS1-0_wt_prov_provenance.xml | 213 ------------- .../E-OBS_wt_prov_citation.bibtex | 46 --- .../E-OBS_wt_prov_data_citation_info.txt | 2 - .../E-OBS_wt_prov_provenance.xml | 176 ----------- .../ERA5_wt_prov_citation.bibtex | 46 --- .../weathertyping/ERA5_wt_prov_provenance.xml | 173 ----------- ...ipe_weathertyping_SMILES_ACCESS-ESM1-5.yml | 250 +++++++++++++++ ...recipe_weathertyping_SMILES_CNRM-CM6-1.yml | 246 +++++++++++++++ .../recipe_weathertyping_SMILES_CanESM5.yml | 255 ++++++++++++++++ .../recipe_weathertyping_SMILES_EC-Earth3.yml | 288 ++++++++++++++++++ ...cipe_weathertyping_SMILES_IPSL-CM6A-LR.yml | 249 +++++++++++++++ ...recipe_weathertyping_SMILES_MIROC-ES2L.yml | 239 +++++++++++++++ .../recipe_weathertyping_SMILES_MIROC6.yml | 251 +++++++++++++++ ...ipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml | 268 ++++++++++++++++ .../recipe_weathertyping_maraunjgr21.yml | 229 ++++++++++++++ 19 files changed, 2343 insertions(+), 740 deletions(-) delete mode 100644 esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_citation.bibtex delete mode 100644 esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_data_citation_info.txt delete mode 100644 esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_provenance.xml delete mode 100644 esmvaltool/recipes/weathertyping/E-OBS_wt_prov_citation.bibtex delete mode 100644 esmvaltool/recipes/weathertyping/E-OBS_wt_prov_data_citation_info.txt delete mode 100644 esmvaltool/recipes/weathertyping/E-OBS_wt_prov_provenance.xml delete mode 100644 esmvaltool/recipes/weathertyping/ERA5_wt_prov_citation.bibtex delete mode 100644 esmvaltool/recipes/weathertyping/ERA5_wt_prov_provenance.xml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml create mode 100644 esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index 1026c5f376..87acc09a2a 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -3,7 +3,7 @@ run_predefined_slwt, combine_wt_to_file, load_wt_files, get_looping_dict, plot_means, get_model_output_filepath, calc_lwt_slwt_model, write_lwt_to_file, calc_lwt_model, - plot_seasonal_occurence + plot_seasonal_occurrence ) import iris @@ -68,8 +68,8 @@ def run_automatic_slwt(cfg: dict): data_info = {'dataset': dataset_name, 'var': var_name, 'preproc_path': var_data[1]} - #plot_means(cfg, var_data[0], wt_cubes, data_info) - plot_seasonal_occurence(cfg, wt_cubes, dataset_name) + # plot_means(cfg, var_data[0], wt_cubes, data_info) + plot_seasonal_occurrence(cfg, wt_cubes, dataset_name) else: if dataset_name == 'E-OBS': continue @@ -98,10 +98,9 @@ def run_automatic_slwt(cfg: dict): data_info = {'dataset': dataset_name, 'var': var_name, 'preproc_path': var_data[1]} - #plot_means(cfg, var_data[0], wt_cubes, data_info, + # plot_means(cfg, var_data[0], wt_cubes, data_info, # only_lwt=True) - plot_seasonal_occurence(cfg, wt_cubes, dataset_name) - + plot_seasonal_occurrence(cfg, wt_cubes, dataset_name) def run_lwt(cfg: dict): @@ -153,7 +152,7 @@ def run_lwt(cfg: dict): 'preproc_path': var_data[1]} plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) - plot_seasonal_occurence(cfg, wt_cubes, dataset_name) + plot_seasonal_occurrence(cfg, wt_cubes, dataset_name) else: if dataset_name == 'E-OBS': continue @@ -181,7 +180,7 @@ def run_lwt(cfg: dict): 'preproc_path': var_data[1]} plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) - plot_seasonal_occurence(cfg, wt_cubes, dataset_name) + plot_seasonal_occurrence(cfg, wt_cubes, dataset_name) def run_my_diagnostic(cfg: dict): diff --git a/esmvaltool/diag_scripts/weathertyping/wt_utils.py b/esmvaltool/diag_scripts/weathertyping/wt_utils.py index 65b502f679..a2eb23df40 100644 --- a/esmvaltool/diag_scripts/weathertyping/wt_utils.py +++ b/esmvaltool/diag_scripts/weathertyping/wt_utils.py @@ -36,69 +36,99 @@ warnings.filterwarnings('ignore', '.*Collapsing a non-contiguous coordinate*') -def plot_seasonal_occurence(cfg: dict, wt_cubes: iris.cube.Cube, - dataset_name: str): +def generate_grayscale_hex_values(x): + """Generate grayscale values for plotting seasonal occurrence. + + Args: + x (int): number of weathertypes + + Returns: + np.list: array with grescale values as hex + """ + grayscale_values = np.linspace(0, 1, x) + grayscale_hex = [f'#{int(value * 255):02x}{int(value * 255):02x}\ + {int(value * 255):02x}' for value in grayscale_values] + + return grayscale_hex + + +def plot_seasonal_occurrence(cfg: dict, wt_cubes: iris.cube.Cube, + dataset_name: str): + """Plot relative monthly/seasonal occurrence of weathertypes. + + Args: + cfg (dict): Configuration dict from recipe + wt_cubes (iris.cube.Cube): Cube with weathertypes + dataset_name (str): name of dataset + """ + output_path = f'{cfg["plot_dir"]}/seasonal_occurrence' + + if not os.path.exists(f'{output_path}'): + os.makedirs(f'{output_path}') month_list = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - output_path = cfg['work_dir'] - relative_occurences = {} - #{wt_string: {month: {wt1: rel_occurence, wt2: rel_occurence, ....}}} - #first do absolute occurence, then relative occurence + relative_occurrences = {} + # {wt_string: {month: {wt1: rel_occurrence, wt2: rel_occurrence, ....}}} + # first do absolute occurrence, then relative occurrence for cube in wt_cubes: month_dict = {} - for month in range(1,13): + for month in range(1, 13): month_constraint = iris.Constraint( time=iris.time.PartialDateTime(month=month)) array = cube.extract(month_constraint).data unique, counts = np.unique(array, return_counts=True) count_dict = dict(zip(unique, counts/sum(counts))) month_dict[month] = count_dict - relative_occurences[cube.long_name] = month_dict - - #colors = ['#653334', '#8b4746', '#b35958', '#da6c6b', '#f9bb7e', - # '#fbea80', '#66b3cd', '#4a8799', '#335966'] + relative_occurrences[cube.long_name] = month_dict x = month_list - for wt_string in relative_occurences.keys(): - wt_numbers = len(relative_occurences.get(wt_string).get(1).keys()) + for wt_string in relative_occurrences: + wt_numbers = len(relative_occurrences.get(wt_string).get(1).keys()) + colors = generate_grayscale_hex_values(wt_numbers) wt_stack = np.zeros((wt_numbers, 12)) - for month, month_value in relative_occurences.get(wt_string).items(): + for month, month_value in relative_occurrences.get(wt_string).items(): print(month_value) for wt in month_value.keys(): print(month_value.get(wt)) wt_stack[np.int8(wt-1), month-1] = month_value.get(wt) - - y = np.vstack([x for x in wt_stack]) + y = np.vstack(list(wt_stack)) # plot - fig, ax = plt.subplots(figsize=(10,10)) + _, ax = plt.subplots(figsize=(10, 10)) ax.set_title(f'{dataset_name}') - ax.stackplot(x, y)#, colors=colors) + ax.stackplot(x, y, colors=colors) ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), - fancybox=True, shadow=True, ncol=9, labels= - tuple(f'WT {i+1}' for i in range(0,wt_numbers))) + fancybox=True, shadow=True, ncol=9, + labels=tuple(f'WT {i+1}' for i in range(0, wt_numbers))) ax.set(xlim=(0, 11), xticks=np.arange(0, 12), - ylim=(0, 1), yticks=np.arange(0,1.1,0.1)) + ylim=(0, 1), yticks=np.arange(0, 1.1, 0.1)) ax.set_xlabel('Month') - ax.set_ylabel('Cumulative Relative Occurence') + ax.set_ylabel('Cumulative Relative occurrence') plt.savefig( - f'{output_path}/{dataset_name}_{wt_string}_rel_occurence.png') + f'{output_path}/{dataset_name}_{wt_string}_rel_occurrence.png') plt.savefig( - f'{output_path}/{dataset_name}_{wt_string}_rel_occurence.pdf') + f'{output_path}/{dataset_name}_{wt_string}_rel_occurrence.pdf') plt.close() - def get_cfg_vars(cfg: dict): + """Get list of vars from configuration dict. + + Args: + cfg (dict): Configuration dict from recipe. + + Returns: + tuple: cfg vars + """ preproc_variables_dict = group_metadata( cfg.get('input_data').values(), 'dataset') @@ -1040,7 +1070,10 @@ def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, dataset (str): string of dataset """ - work_dir = cfg.get('work_dir') + output_path = f'{cfg.get("plot_dir")}/heatmaps' + + if not os.path.exists(f'{output_path}'): + os.makedirs(f'{output_path}') labels = np.arange(1, 28) @@ -1069,7 +1102,7 @@ def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, ax.set_yticklabels(ax.get_yticklabels(), rotation=0) ax.set_ylabel('lwt', fontsize=8) plt.tight_layout() - plt.savefig(os.path.join(work_dir, + plt.savefig(os.path.join(output_path, f'correlation_matrix_{dataset}.png')) plt.close() @@ -1097,7 +1130,7 @@ def plot_corr_rmse_heatmaps(cfg: dict, pattern_correlation_matrix: np.array, ax.set_yticklabels(ax.get_yticklabels(), rotation=0) ax.set_ylabel('lwt', fontsize=8) plt.tight_layout() - plt.savefig(os.path.join(work_dir, f'rmse_matrix_{dataset}.png')) + plt.savefig(os.path.join(output_path, f'rmse_matrix_{dataset}.png')) plt.close() diff --git a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_citation.bibtex b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_citation.bibtex deleted file mode 100644 index 9c767ba278..0000000000 --- a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_citation.bibtex +++ /dev/null @@ -1,46 +0,0 @@ -@article{righi20gmd, - doi = {10.5194/gmd-13-1179-2020}, - url = {https://doi.org/10.5194/gmd-13-1179-2020}, - year = {2020}, - month = mar, - publisher = {Copernicus {GmbH}}, - volume = {13}, - number = {3}, - pages = {1179--1199}, - author = {Mattia Righi and Bouwe Andela and Veronika Eyring and Axel Lauer and Valeriu Predoi and Manuel Schlund and Javier Vegas-Regidor and Lisa Bock and Bj"{o}rn Br"{o}tz and Lee de Mora and Faruk Diblen and Laura Dreyer and Niels Drost and Paul Earnshaw and Birgit Hassler and Nikolay Koldunov and Bill Little and Saskia Loosveldt Tomas and Klaus Zimmermann}, - title = {Earth System Model Evaluation Tool (ESMValTool) v2.0 -- technical overview}, - journal = {Geoscientific Model Development} -} - -@article{https://doi.org/10.1002/joc.3370130606, - author = {Jones, P. D. and Hulme, M. and Briffa, K. R.}, - title = {A comparison of Lamb circulation types with an objective classification scheme}, - journal = {International Journal of Climatology}, - volume = {13}, - number = {6}, - pages = {655-663}, - keywords = {Weather types, Temperature, Precipitation, British, Isles}, - doi = {https://doi.org/10.1002/joc.3370130606}, - url = {https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/joc.3370130606}, - eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/joc.3370130606}, - abstract = {Abstract An objective scheme, initially developed by Jenkinson and Collison, is used to classify daily circulation types over the British Isles, along the lines of the subjective method devised by Lamb. The scheme uses daily grid-point mean sea-level pressure data for the region. The results of the analysis over the period 1881–1989 are compared with ‘true’ Lamb weather types. The frequencies of objectively developed types are highly correlated with traditional Lamb types, especially so for synoptic (cyclonic and anticyclonic) types, although still good for wind directional types. Comparison of the two classification schemes reveals negligible differences between the correlations of the counts of circulation types and regional temperature and rainfall. The major difference between the two classification schemes is that the decline of the westerlies since 1940 is less evident with the objective scheme.}, - year = {1993} -} - - -@article{https://doi.org/10.1029/2020JD032824, - author = {Maraun, Douglas and Truhetz, Heimo and Schaffer, Armin}, - title = {Regional Climate Model Biases, Their Dependence on Synoptic Circulation Biases and the Potential for Bias Adjustment: A Process-Oriented Evaluation of the Austrian Regional Climate Projections}, - journal = {Journal of Geophysical Research: Atmospheres}, - volume = {126}, - number = {6}, - pages = {e2020JD032824}, - keywords = {Austria, bias adjustment, climate model evaluation, large-scale circulation errors, regional climate projections}, - doi = {https://doi.org/10.1029/2020JD032824}, - url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2020JD032824}, - eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2020JD032824}, - note = {e2020JD032824 2020JD032824}, - abstract = {Abstract The Austrian regional climate projections are based on an ensemble of bias adjusted regional climate model simulations. Bias adjustment (BA) improves the usability of climate projections for impact studies, but cannot mitigate fundamental model errors. This argument holds in particular for biases in the temporal dependence, which is strongly influenced by the large-scale circulation. Global climate models (GCMs), underlying regional climate projections, suffer from substantial circulation errors. We therefore, conduct a process-based evaluation of the Austrian climate projections focusing on large-scale circulation errors, their regional imprints and the potential for BA. First, we define nine synoptic weather types and assess how well the considered climate models represent their occurrence and persistence. Second, we assess biases in the overall dry and hot day probabilities, as well as conditional on synoptic weather type occurrence; and biases in the duration of dry and hot spells. Third, we investigate how these biases depend on biases in the occurrence and persistence of relevant synoptic weather types. And fourth, we study how much an overall BA improves these biases. Many GCMs misrepresent the occurrence and persistence of relevant synoptic weather types. These biases have a clear imprint on biases in dry and hot day occurrence and spell durations. BA in many cases helps to greatly reduce biases even in the presence of circulation biases, but may in some cases amplify conditional biases. Persistence biases are especially relevant for the representation of meteorological drought. Biases in the duration of dry spells cannot fully be mitigated by BA.}, - year = {2021} -} - diff --git a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_data_citation_info.txt b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_data_citation_info.txt deleted file mode 100644 index b914e0c9d1..0000000000 --- a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_data_citation_info.txt +++ /dev/null @@ -1,2 +0,0 @@ -Additional data citation information was found, for which no entry is available in the bibtex file: -- See http://wiki.csiro.au/confluence/display/ACCESS/ACCESS+Publications diff --git a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_provenance.xml b/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_provenance.xml deleted file mode 100644 index 541b03ec77..0000000000 --- a/esmvaltool/recipes/weathertyping/ACCESS1-0_wt_prov_provenance.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - CF-1.4 - 109207.0 - 2.8.0 - The ACCESS wiki: http://wiki.csiro.au/confluence/display/ACCESS/Home. Contact Tony.Hirst@csiro.au regarding the ACCESS coupled climate model. Contact Peter.Uhe@csiro.au regarding ACCESS coupled climate model CMIP5 datasets. - 2012-01-17T14:12:24Z - historical - historical - GHG, Oz, SA, Sl, Vl, BC, OC, (GHG = CO2, N2O, CH4, CFC11, CFC12, CFC113, HCFC22, HFC125, HFC134a) - day - CMIP5 compliant file produced from raw ACCESS model output using the ACCESS Post-Processor and CMOR2. 2012-01-17T14:12:24Z CMOR rewrote data to comply with CF standards and CMIP5 requirements. - 1 - CSIRO-BOM - CSIRO (Commonwealth Scientific and Industrial Research Organisation, Australia), and BOM (Bureau of Meteorology, Australia) - ACCESS1-0 - atmos - pre-industrial control - piControl - r1i1p1 - 1 - output - CMIP5 - 1 - See http://wiki.csiro.au/confluence/display/ACCESS/ACCESS+Publications - ACCESS1-0 2011. Atmosphere: AGCM v1.0 (N96 grid-point, 1.875 degrees EW x approx 1.25 degree NS, 38 levels); ocean: NOAA/GFDL MOM4p1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S, 50 levels); sea ice: CICE4.1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S); land: MOSES2 (1.875 degree EW x 1.25 degree NS, 4 levels - Table day (27 April 2011) 38b0ef063ca8bcf7f2436f94c40ed33c - ACCESS1-0 model output prepared for CMIP5 historical - 5dfdeab7-b15f-4145-97bf-4cd79a5de8f2 - v20120115 - - - - - - - - - - - - CMIP - CMIP5 - ACCESS1-0 - weathertyping - 2005 - r1i1p1 - v4 - historical - /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/cmip5_historical_psl_day_wt/CMIP5_ACCESS1-0_day_historical_r1i1p1_psl_1950-2005.nc - day - CSIRO-BOM - Sea Level Pressure - day - ['atmos'] - psl - weathertype_preproc - ['output1', 'output2'] - CMIP5 - 0 - psl - air_pressure_at_sea_level - 1950 - 1950/2005 - Pa - cmip5_historical_psl_day_wt - v4 - {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} - {'target_grid': {'start_longitude': -5, 'end_longitude': 25, 'step_longitude': 5, 'start_latitude': 35, 'end_latitude': 55, 'step_latitude': 5}, 'scheme': 'linear'} - {} - {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/cmip5_historical_psl_day_wt/CMIP5_ACCESS1-0_day_historical_r1i1p1_psl_1950-2005.nc')} - - - - - - - - - - - - - - - - True - Lamb Weathertypes - 0.9 - ('regional',) - ['Lamb Weathertypes'] - True - ['maraun21jgr', 'jones93ijc'] - 0.002 - weathertyping - ../diag_scripts/weathertyping/weathertyping.py - - - A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, -correlations between weathertypes and precipitation patterns over a given are can be calculated -and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as -anomalies and standard deviations can be plotted. - - ['maraun21jgr', 'jones93ijc'] - - - - - - - - - - - - CF-1.4 - 109207.0 - 2.8.0 - The ACCESS wiki: http://wiki.csiro.au/confluence/display/ACCESS/Home. Contact Tony.Hirst@csiro.au regarding the ACCESS coupled climate model. Contact Peter.Uhe@csiro.au regarding ACCESS coupled climate model CMIP5 datasets. - 2012-01-17T14:02:26Z - historical - historical - GHG, Oz, SA, Sl, Vl, BC, OC, (GHG = CO2, N2O, CH4, CFC11, CFC12, CFC113, HCFC22, HFC125, HFC134a) - day - CMIP5 compliant file produced from raw ACCESS model output using the ACCESS Post-Processor and CMOR2. 2012-01-17T14:02:26Z CMOR rewrote data to comply with CF standards and CMIP5 requirements. - 1 - CSIRO-BOM - CSIRO (Commonwealth Scientific and Industrial Research Organisation, Australia), and BOM (Bureau of Meteorology, Australia) - ACCESS1-0 - atmos - pre-industrial control - piControl - r1i1p1 - 1 - output - CMIP5 - 1 - See http://wiki.csiro.au/confluence/display/ACCESS/ACCESS+Publications - ACCESS1-0 2011. Atmosphere: AGCM v1.0 (N96 grid-point, 1.875 degrees EW x approx 1.25 degree NS, 38 levels); ocean: NOAA/GFDL MOM4p1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S, 50 levels); sea ice: CICE4.1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S); land: MOSES2 (1.875 degree EW x 1.25 degree NS, 4 levels - Table day (27 April 2011) 38b0ef063ca8bcf7f2436f94c40ed33c - ACCESS1-0 model output prepared for CMIP5 historical - 0971b86a-c07d-41b1-b945-d70895afa18c - v20120115 - - - - - - - - - martin.jury@uni-graz.at - WEGC, Austria - https://orcid.org/0000-0003-0590-7843 - - - CF-1.4 - 109207.0 - 2.8.0 - The ACCESS wiki: http://wiki.csiro.au/confluence/display/ACCESS/Home. Contact Tony.Hirst@csiro.au regarding the ACCESS coupled climate model. Contact Peter.Uhe@csiro.au regarding ACCESS coupled climate model CMIP5 datasets. - 2012-01-17T13:47:35Z - historical - historical - GHG, Oz, SA, Sl, Vl, BC, OC, (GHG = CO2, N2O, CH4, CFC11, CFC12, CFC113, HCFC22, HFC125, HFC134a) - day - CMIP5 compliant file produced from raw ACCESS model output using the ACCESS Post-Processor and CMOR2. 2012-01-17T13:47:35Z CMOR rewrote data to comply with CF standards and CMIP5 requirements. - 1 - CSIRO-BOM - CSIRO (Commonwealth Scientific and Industrial Research Organisation, Australia), and BOM (Bureau of Meteorology, Australia) - ACCESS1-0 - atmos - pre-industrial control - piControl - r1i1p1 - 1 - output - CMIP5 - 1 - See http://wiki.csiro.au/confluence/display/ACCESS/ACCESS+Publications - ACCESS1-0 2011. Atmosphere: AGCM v1.0 (N96 grid-point, 1.875 degrees EW x approx 1.25 degree NS, 38 levels); ocean: NOAA/GFDL MOM4p1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S, 50 levels); sea ice: CICE4.1 (nominal 1.0 degree EW x 1.0 degrees NS, tripolar north of 65N, equatorial refinement to 1/3 degree from 10S to 10 N, cosine dependent NS south of 25S); land: MOSES2 (1.875 degree EW x 1.25 degree NS, 4 levels - Table day (27 April 2011) 38b0ef063ca8bcf7f2436f94c40ed33c - ACCESS1-0 model output prepared for CMIP5 historical - bb3d137a-2a33-4908-951d-be9b00b70534 - v20120115 - - - - - - - - - - - - - - - - - - thomas.kroissenbrunner@uni-graz.at - thomaskroi1996 - WEGC, Austria - - - - - - - - diff --git a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_citation.bibtex b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_citation.bibtex deleted file mode 100644 index 9c767ba278..0000000000 --- a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_citation.bibtex +++ /dev/null @@ -1,46 +0,0 @@ -@article{righi20gmd, - doi = {10.5194/gmd-13-1179-2020}, - url = {https://doi.org/10.5194/gmd-13-1179-2020}, - year = {2020}, - month = mar, - publisher = {Copernicus {GmbH}}, - volume = {13}, - number = {3}, - pages = {1179--1199}, - author = {Mattia Righi and Bouwe Andela and Veronika Eyring and Axel Lauer and Valeriu Predoi and Manuel Schlund and Javier Vegas-Regidor and Lisa Bock and Bj"{o}rn Br"{o}tz and Lee de Mora and Faruk Diblen and Laura Dreyer and Niels Drost and Paul Earnshaw and Birgit Hassler and Nikolay Koldunov and Bill Little and Saskia Loosveldt Tomas and Klaus Zimmermann}, - title = {Earth System Model Evaluation Tool (ESMValTool) v2.0 -- technical overview}, - journal = {Geoscientific Model Development} -} - -@article{https://doi.org/10.1002/joc.3370130606, - author = {Jones, P. D. and Hulme, M. and Briffa, K. R.}, - title = {A comparison of Lamb circulation types with an objective classification scheme}, - journal = {International Journal of Climatology}, - volume = {13}, - number = {6}, - pages = {655-663}, - keywords = {Weather types, Temperature, Precipitation, British, Isles}, - doi = {https://doi.org/10.1002/joc.3370130606}, - url = {https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/joc.3370130606}, - eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/joc.3370130606}, - abstract = {Abstract An objective scheme, initially developed by Jenkinson and Collison, is used to classify daily circulation types over the British Isles, along the lines of the subjective method devised by Lamb. The scheme uses daily grid-point mean sea-level pressure data for the region. The results of the analysis over the period 1881–1989 are compared with ‘true’ Lamb weather types. The frequencies of objectively developed types are highly correlated with traditional Lamb types, especially so for synoptic (cyclonic and anticyclonic) types, although still good for wind directional types. Comparison of the two classification schemes reveals negligible differences between the correlations of the counts of circulation types and regional temperature and rainfall. The major difference between the two classification schemes is that the decline of the westerlies since 1940 is less evident with the objective scheme.}, - year = {1993} -} - - -@article{https://doi.org/10.1029/2020JD032824, - author = {Maraun, Douglas and Truhetz, Heimo and Schaffer, Armin}, - title = {Regional Climate Model Biases, Their Dependence on Synoptic Circulation Biases and the Potential for Bias Adjustment: A Process-Oriented Evaluation of the Austrian Regional Climate Projections}, - journal = {Journal of Geophysical Research: Atmospheres}, - volume = {126}, - number = {6}, - pages = {e2020JD032824}, - keywords = {Austria, bias adjustment, climate model evaluation, large-scale circulation errors, regional climate projections}, - doi = {https://doi.org/10.1029/2020JD032824}, - url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2020JD032824}, - eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2020JD032824}, - note = {e2020JD032824 2020JD032824}, - abstract = {Abstract The Austrian regional climate projections are based on an ensemble of bias adjusted regional climate model simulations. Bias adjustment (BA) improves the usability of climate projections for impact studies, but cannot mitigate fundamental model errors. This argument holds in particular for biases in the temporal dependence, which is strongly influenced by the large-scale circulation. Global climate models (GCMs), underlying regional climate projections, suffer from substantial circulation errors. We therefore, conduct a process-based evaluation of the Austrian climate projections focusing on large-scale circulation errors, their regional imprints and the potential for BA. First, we define nine synoptic weather types and assess how well the considered climate models represent their occurrence and persistence. Second, we assess biases in the overall dry and hot day probabilities, as well as conditional on synoptic weather type occurrence; and biases in the duration of dry and hot spells. Third, we investigate how these biases depend on biases in the occurrence and persistence of relevant synoptic weather types. And fourth, we study how much an overall BA improves these biases. Many GCMs misrepresent the occurrence and persistence of relevant synoptic weather types. These biases have a clear imprint on biases in dry and hot day occurrence and spell durations. BA in many cases helps to greatly reduce biases even in the presence of circulation biases, but may in some cases amplify conditional biases. Persistence biases are especially relevant for the representation of meteorological drought. Biases in the duration of dry spells cannot fully be mitigated by BA.}, - year = {2021} -} - diff --git a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_data_citation_info.txt b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_data_citation_info.txt deleted file mode 100644 index e3e19141fa..0000000000 --- a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_data_citation_info.txt +++ /dev/null @@ -1,2 +0,0 @@ -Additional data citation information was found, for which no entry is available in the bibtex file: -- doi:10.1029/2017JD028200 diff --git a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_provenance.xml b/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_provenance.xml deleted file mode 100644 index 6d21b6d720..0000000000 --- a/esmvaltool/recipes/weathertyping/E-OBS_wt_prov_provenance.xml +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - Climate Data Interface version 1.9.10 (https://mpimet.mpg.de/cdi) - Climate Data Operators version 1.9.10 (https://mpimet.mpg.de/cdo) - CF-1.6 - day - Mon Jun 05 10:00:40 2023: cdo -b F32 -daymean -mergetime hourly_surface/psl_1958.nc hourly_surface/psl_1959.nc hourly_surface/psl_1960.nc hourly_surface/psl_1961.nc hourly_surface/psl_1962.nc hourly_surface/psl_1963.nc hourly_surface/psl_1964.nc hourly_surface/psl_1965.nc hourly_surface/psl_1966.nc hourly_surface/psl_1967.nc hourly_surface/psl_1968.nc hourly_surface/psl_1969.nc hourly_surface/psl_1970.nc hourly_surface/psl_1971.nc hourly_surface/psl_1972.nc hourly_surface/psl_1973.nc hourly_surface/psl_1974.nc hourly_surface/psl_1975.nc hourly_surface/psl_1976.nc hourly_surface/psl_1977.nc hourly_surface/psl_1978.nc hourly_surface/psl_1979.nc hourly_surface/psl_1980.nc hourly_surface/psl_1981.nc hourly_surface/psl_1982.nc hourly_surface/psl_1983.nc hourly_surface/psl_1984.nc hourly_surface/psl_1985.nc hourly_surface/psl_1986.nc hourly_surface/psl_1987.nc hourly_surface/psl_1988.nc hourly_surface/psl_1989.nc hourly_surface/psl_1990.nc hourly_surface/psl_1991.nc hourly_surface/psl_1992.nc hourly_surface/psl_1993.nc hourly_surface/psl_1994.nc hourly_surface/psl_1995.nc hourly_surface/psl_1996.nc hourly_surface/psl_1997.nc hourly_surface/psl_1998.nc hourly_surface/psl_1999.nc hourly_surface/psl_2000.nc hourly_surface/psl_2001.nc hourly_surface/psl_2002.nc hourly_surface/psl_2003.nc hourly_surface/psl_2004.nc hourly_surface/psl_2005.nc hourly_surface/psl_2006.nc hourly_surface/psl_2007.nc hourly_surface/psl_2008.nc hourly_surface/psl_2009.nc hourly_surface/psl_2010.nc hourly_surface/psl_2011.nc hourly_surface/psl_2012.nc hourly_surface/psl_2013.nc hourly_surface/psl_2014.nc hourly_surface/psl_2015.nc hourly_surface/psl_2016.nc hourly_surface/psl_2017.nc hourly_surface/psl_2018.nc hourly_surface/psl_2019.nc hourly_surface/psl_2020.nc hourly_surface/psl_2021.nc hourly_surface/psl_2022.nc /data/reloclim/normal/ESMValTool_RAWOBS/Tier3/ERA5/flo2/ERA5_2p5_day_PSL_19580101-20221231.nc -2023-05-15 09:25:45 GMT by grib_to_netcdf-2.25.1: /opt/ecmwf/mars-client/bin/grib_to_netcdf.bin -S param -o /cache/data6/adaptor.mars.internal-1684142717.2869563-15255-7-6cf45118-1614-4ec7-aa18-7c0d54bd69b6.nc /cache/tmp/6cf45118-1614-4ec7-aa18-7c0d54bd69b6-adaptor.mars.internal-1684142177.5537033-15255-13-tmp.grib - - - - - - - - A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, -correlations between weathertypes and precipitation patterns over a given are can be calculated -and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as -anomalies and standard deviations can be plotted. - - ['maraun21jgr', 'jones93ijc'] - - - - - - - - - - - - - - - - - - - - - CF-1.7 - Created on 2024-04-02 13:28:45 - unknown host - day - ground - OBS - doi:10.1029/2017JD028200 - https://www.ecad.eu/download/ensembles/download.php - 2 - E-OBS data reformatted for ESMValTool v2.11.0.dev37+g7e9eecd69.d20240201 - maj - v29.0e-0.25 - - - - - - - - - - OBS - E-OBS - weathertyping - 2005 - /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/eobs_pr_wt/OBS_E-OBS_ground_v29.0e-0.25_day_pr_1958-2005.nc - day - Precipitation - day - ['atmos'] - pr - weathertype_preproc_pr - OBS - 0 - pr - precipitation_flux - 1958 - 2 - 1958/2005 - ground - kg m-2 s-1 - eobs_pr_wt - v29.0e-0.25 - {'start_longitude': 9.5, 'end_longitude': 17.25, 'start_latitude': 46.25, 'end_latitude': 49} - {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} - {} - {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/eobs_pr_wt/OBS_E-OBS_ground_v29.0e-0.25_day_pr_1958-2005.nc')} - - - - martin.jury@uni-graz.at - WEGC, Austria - https://orcid.org/0000-0003-0590-7843 - - - - - - - - - True - Lamb Weathertypes - 0.9 - ('regional',) - ['Lamb Weathertypes'] - True - ['maraun21jgr', 'jones93ijc'] - 0.002 - weathertyping - ../diag_scripts/weathertyping/weathertyping.py - - - - - - - - - - - - - - - - - - - - - thomas.kroissenbrunner@uni-graz.at - thomaskroi1996 - WEGC, Austria - - - native6 - ERA5 - weathertyping - 2005 - /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_msl_wt/native6_ERA5_reanaly_v1_day_psl_1958-2005.nc - day - v1 - Sea Level Pressure - day - ['atmos'] - psl - weathertype_preproc - native6 - 0 - psl - air_pressure_at_mean_sea_level - 1958 - 3 - 1958/2005 - reanaly - Pa - era5_msl_wt - v1 - {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} - {'target_grid': {'start_longitude': -5, 'end_longitude': 25, 'step_longitude': 5, 'start_latitude': 35, 'end_latitude': 55, 'step_latitude': 5}, 'scheme': 'linear'} - {} - {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_msl_wt/native6_ERA5_reanaly_v1_day_psl_1958-2005.nc')} - - - diff --git a/esmvaltool/recipes/weathertyping/ERA5_wt_prov_citation.bibtex b/esmvaltool/recipes/weathertyping/ERA5_wt_prov_citation.bibtex deleted file mode 100644 index 9c767ba278..0000000000 --- a/esmvaltool/recipes/weathertyping/ERA5_wt_prov_citation.bibtex +++ /dev/null @@ -1,46 +0,0 @@ -@article{righi20gmd, - doi = {10.5194/gmd-13-1179-2020}, - url = {https://doi.org/10.5194/gmd-13-1179-2020}, - year = {2020}, - month = mar, - publisher = {Copernicus {GmbH}}, - volume = {13}, - number = {3}, - pages = {1179--1199}, - author = {Mattia Righi and Bouwe Andela and Veronika Eyring and Axel Lauer and Valeriu Predoi and Manuel Schlund and Javier Vegas-Regidor and Lisa Bock and Bj"{o}rn Br"{o}tz and Lee de Mora and Faruk Diblen and Laura Dreyer and Niels Drost and Paul Earnshaw and Birgit Hassler and Nikolay Koldunov and Bill Little and Saskia Loosveldt Tomas and Klaus Zimmermann}, - title = {Earth System Model Evaluation Tool (ESMValTool) v2.0 -- technical overview}, - journal = {Geoscientific Model Development} -} - -@article{https://doi.org/10.1002/joc.3370130606, - author = {Jones, P. D. and Hulme, M. and Briffa, K. R.}, - title = {A comparison of Lamb circulation types with an objective classification scheme}, - journal = {International Journal of Climatology}, - volume = {13}, - number = {6}, - pages = {655-663}, - keywords = {Weather types, Temperature, Precipitation, British, Isles}, - doi = {https://doi.org/10.1002/joc.3370130606}, - url = {https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/joc.3370130606}, - eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/joc.3370130606}, - abstract = {Abstract An objective scheme, initially developed by Jenkinson and Collison, is used to classify daily circulation types over the British Isles, along the lines of the subjective method devised by Lamb. The scheme uses daily grid-point mean sea-level pressure data for the region. The results of the analysis over the period 1881–1989 are compared with ‘true’ Lamb weather types. The frequencies of objectively developed types are highly correlated with traditional Lamb types, especially so for synoptic (cyclonic and anticyclonic) types, although still good for wind directional types. Comparison of the two classification schemes reveals negligible differences between the correlations of the counts of circulation types and regional temperature and rainfall. The major difference between the two classification schemes is that the decline of the westerlies since 1940 is less evident with the objective scheme.}, - year = {1993} -} - - -@article{https://doi.org/10.1029/2020JD032824, - author = {Maraun, Douglas and Truhetz, Heimo and Schaffer, Armin}, - title = {Regional Climate Model Biases, Their Dependence on Synoptic Circulation Biases and the Potential for Bias Adjustment: A Process-Oriented Evaluation of the Austrian Regional Climate Projections}, - journal = {Journal of Geophysical Research: Atmospheres}, - volume = {126}, - number = {6}, - pages = {e2020JD032824}, - keywords = {Austria, bias adjustment, climate model evaluation, large-scale circulation errors, regional climate projections}, - doi = {https://doi.org/10.1029/2020JD032824}, - url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2020JD032824}, - eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2020JD032824}, - note = {e2020JD032824 2020JD032824}, - abstract = {Abstract The Austrian regional climate projections are based on an ensemble of bias adjusted regional climate model simulations. Bias adjustment (BA) improves the usability of climate projections for impact studies, but cannot mitigate fundamental model errors. This argument holds in particular for biases in the temporal dependence, which is strongly influenced by the large-scale circulation. Global climate models (GCMs), underlying regional climate projections, suffer from substantial circulation errors. We therefore, conduct a process-based evaluation of the Austrian climate projections focusing on large-scale circulation errors, their regional imprints and the potential for BA. First, we define nine synoptic weather types and assess how well the considered climate models represent their occurrence and persistence. Second, we assess biases in the overall dry and hot day probabilities, as well as conditional on synoptic weather type occurrence; and biases in the duration of dry and hot spells. Third, we investigate how these biases depend on biases in the occurrence and persistence of relevant synoptic weather types. And fourth, we study how much an overall BA improves these biases. Many GCMs misrepresent the occurrence and persistence of relevant synoptic weather types. These biases have a clear imprint on biases in dry and hot day occurrence and spell durations. BA in many cases helps to greatly reduce biases even in the presence of circulation biases, but may in some cases amplify conditional biases. Persistence biases are especially relevant for the representation of meteorological drought. Biases in the duration of dry spells cannot fully be mitigated by BA.}, - year = {2021} -} - diff --git a/esmvaltool/recipes/weathertyping/ERA5_wt_prov_provenance.xml b/esmvaltool/recipes/weathertyping/ERA5_wt_prov_provenance.xml deleted file mode 100644 index b1874d4453..0000000000 --- a/esmvaltool/recipes/weathertyping/ERA5_wt_prov_provenance.xml +++ /dev/null @@ -1,173 +0,0 @@ - - - - native6 - ERA5 - weathertyping - 2005 - /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_pr_wt/native6_ERA5_reanaly_v1_day_pr_1958-2005.nc - day - v1 - Precipitation - day - ['atmos'] - pr - weathertype_preproc_pr - native6 - 0 - pr - precipitation_flux - 1958 - 3 - 1958/2005 - reanaly - kg m-2 s-1 - era5_pr_wt - v1 - {'start_longitude': 9.5, 'end_longitude': 17.25, 'start_latitude': 46.25, 'end_latitude': 49} - {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} - {} - {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_pr_wt/native6_ERA5_reanaly_v1_day_pr_1958-2005.nc')} - - - - - - - Climate Data Interface version 2.1.1 (https://mpimet.mpg.de/cdi) - Climate Data Operators version 2.1.1 (https://mpimet.mpg.de/cdo) - CF-1.6 - day - Wed Nov 29 10:47:28 2023: cdo mulc,24 ERA5_2p5cdo_day_PR_19500101-20221231.nc tmp.nc -Wed Nov 29 09:25:53 2023: cdo remapcon,ERA5_2p5_day_PSL_19580101-20221231.nc ERA5_0p25_day_PR_19500101-20221231.nc ERA5_2p5cdo_day_PR_19500101-20221231.nc -Mon Oct 09 09:31:08 2023: cdo -b F32 -daymean -mergetime hourly_surface/pr_1950.nc hourly_surface/pr_1951.nc hourly_surface/pr_1952.nc hourly_surface/pr_1953.nc hourly_surface/pr_1954.nc hourly_surface/pr_1955.nc hourly_surface/pr_1956.nc hourly_surface/pr_1957.nc hourly_surface/pr_1958.nc hourly_surface/pr_1959.nc hourly_surface/pr_1960.nc hourly_surface/pr_1961.nc hourly_surface/pr_1962.nc hourly_surface/pr_1963.nc hourly_surface/pr_1964.nc hourly_surface/pr_1965.nc hourly_surface/pr_1966.nc hourly_surface/pr_1967.nc hourly_surface/pr_1968.nc hourly_surface/pr_1969.nc hourly_surface/pr_1970.nc hourly_surface/pr_1971.nc hourly_surface/pr_1972.nc hourly_surface/pr_1973.nc hourly_surface/pr_1974.nc hourly_surface/pr_1975.nc hourly_surface/pr_1976.nc hourly_surface/pr_1977.nc hourly_surface/pr_1978.nc hourly_surface/pr_1979.nc hourly_surface/pr_1980.nc hourly_surface/pr_1981.nc hourly_surface/pr_1982.nc hourly_surface/pr_1983.nc hourly_surface/pr_1984.nc hourly_surface/pr_1985.nc hourly_surface/pr_1986.nc hourly_surface/pr_1987.nc hourly_surface/pr_1988.nc hourly_surface/pr_1989.nc hourly_surface/pr_1990.nc hourly_surface/pr_1991.nc hourly_surface/pr_1992.nc hourly_surface/pr_1993.nc hourly_surface/pr_1994.nc hourly_surface/pr_1995.nc hourly_surface/pr_1996.nc hourly_surface/pr_1997.nc hourly_surface/pr_1998.nc hourly_surface/pr_1999.nc hourly_surface/pr_2000.nc hourly_surface/pr_2001.nc hourly_surface/pr_2002.nc hourly_surface/pr_2003.nc hourly_surface/pr_2004.nc hourly_surface/pr_2005.nc hourly_surface/pr_2006.nc hourly_surface/pr_2007.nc hourly_surface/pr_2008.nc hourly_surface/pr_2009.nc hourly_surface/pr_2010.nc hourly_surface/pr_2011.nc hourly_surface/pr_2012.nc hourly_surface/pr_2013.nc hourly_surface/pr_2014.nc hourly_surface/pr_2015.nc hourly_surface/pr_2016.nc hourly_surface/pr_2017.nc hourly_surface/pr_2018.nc hourly_surface/pr_2019.nc hourly_surface/pr_2020.nc hourly_surface/pr_2021.nc hourly_surface/pr_2022.nc /data/reloclim/normal/ESMValTool_RAWOBS/Tier3/ERA5/PREVAL/ERA5_0p25_day_PR_19500101-20221231.nc -2023-10-03 04:01:14 GMT by grib_to_netcdf-2.25.1: /opt/ecmwf/mars-client/bin/grib_to_netcdf.bin -S param -o /cache/data5/adaptor.mars.internal-1696305350.0348094-26737-8-709187c8-5b1a-41d6-95b7-ad74a18fe30b.nc /cache/tmp/709187c8-5b1a-41d6-95b7-ad74a18fe30b-adaptor.mars.internal-1696304630.7169528-26737-10-tmp.grib - - - Climate Data Interface version 1.9.10 (https://mpimet.mpg.de/cdi) - Climate Data Operators version 1.9.10 (https://mpimet.mpg.de/cdo) - CF-1.6 - day - Mon Jun 05 10:00:40 2023: cdo -b F32 -daymean -mergetime hourly_surface/psl_1958.nc hourly_surface/psl_1959.nc hourly_surface/psl_1960.nc hourly_surface/psl_1961.nc hourly_surface/psl_1962.nc hourly_surface/psl_1963.nc hourly_surface/psl_1964.nc hourly_surface/psl_1965.nc hourly_surface/psl_1966.nc hourly_surface/psl_1967.nc hourly_surface/psl_1968.nc hourly_surface/psl_1969.nc hourly_surface/psl_1970.nc hourly_surface/psl_1971.nc hourly_surface/psl_1972.nc hourly_surface/psl_1973.nc hourly_surface/psl_1974.nc hourly_surface/psl_1975.nc hourly_surface/psl_1976.nc hourly_surface/psl_1977.nc hourly_surface/psl_1978.nc hourly_surface/psl_1979.nc hourly_surface/psl_1980.nc hourly_surface/psl_1981.nc hourly_surface/psl_1982.nc hourly_surface/psl_1983.nc hourly_surface/psl_1984.nc hourly_surface/psl_1985.nc hourly_surface/psl_1986.nc hourly_surface/psl_1987.nc hourly_surface/psl_1988.nc hourly_surface/psl_1989.nc hourly_surface/psl_1990.nc hourly_surface/psl_1991.nc hourly_surface/psl_1992.nc hourly_surface/psl_1993.nc hourly_surface/psl_1994.nc hourly_surface/psl_1995.nc hourly_surface/psl_1996.nc hourly_surface/psl_1997.nc hourly_surface/psl_1998.nc hourly_surface/psl_1999.nc hourly_surface/psl_2000.nc hourly_surface/psl_2001.nc hourly_surface/psl_2002.nc hourly_surface/psl_2003.nc hourly_surface/psl_2004.nc hourly_surface/psl_2005.nc hourly_surface/psl_2006.nc hourly_surface/psl_2007.nc hourly_surface/psl_2008.nc hourly_surface/psl_2009.nc hourly_surface/psl_2010.nc hourly_surface/psl_2011.nc hourly_surface/psl_2012.nc hourly_surface/psl_2013.nc hourly_surface/psl_2014.nc hourly_surface/psl_2015.nc hourly_surface/psl_2016.nc hourly_surface/psl_2017.nc hourly_surface/psl_2018.nc hourly_surface/psl_2019.nc hourly_surface/psl_2020.nc hourly_surface/psl_2021.nc hourly_surface/psl_2022.nc /data/reloclim/normal/ESMValTool_RAWOBS/Tier3/ERA5/flo2/ERA5_2p5_day_PSL_19580101-20221231.nc -2023-05-15 09:25:45 GMT by grib_to_netcdf-2.25.1: /opt/ecmwf/mars-client/bin/grib_to_netcdf.bin -S param -o /cache/data6/adaptor.mars.internal-1684142717.2869563-15255-7-6cf45118-1614-4ec7-aa18-7c0d54bd69b6.nc /cache/tmp/6cf45118-1614-4ec7-aa18-7c0d54bd69b6-adaptor.mars.internal-1684142177.5537033-15255-13-tmp.grib - - - - - - - A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, -correlations between weathertypes and precipitation patterns over a given are can be calculated -and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as -anomalies and standard deviations can be plotted. - - ['maraun21jgr', 'jones93ijc'] - - - - - - - True - Lamb Weathertypes - 0.9 - ('regional',) - ['Lamb Weathertypes'] - True - ['maraun21jgr', 'jones93ijc'] - 0.002 - weathertyping - ../diag_scripts/weathertyping/weathertyping.py - - - - - - - - - - - - - - - - - - - - - - - - martin.jury@uni-graz.at - WEGC, Austria - https://orcid.org/0000-0003-0590-7843 - - - - - - - - - - - - - - - - - - - - - - - - - - - thomas.kroissenbrunner@uni-graz.at - thomaskroi1996 - WEGC, Austria - - - native6 - ERA5 - weathertyping - 2005 - /data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_msl_wt/native6_ERA5_reanaly_v1_day_psl_1958-2005.nc - day - v1 - Sea Level Pressure - day - ['atmos'] - psl - weathertype_preproc - native6 - 0 - psl - air_pressure_at_mean_sea_level - 1958 - 3 - 1958/2005 - reanaly - Pa - era5_msl_wt - v1 - {'start_year': 1950, 'start_month': 1, 'start_day': 1, 'end_year': 2005, 'end_month': 12, 'end_day': 31} - {'target_grid': {'start_longitude': -5, 'end_longitude': 25, 'step_longitude': 5, 'start_latitude': 35, 'end_latitude': 55, 'step_latitude': 5}, 'scheme': 'linear'} - {} - {'compress': False, 'filename': PosixPath('/data/reloclim/normal/PREVAL/ESMValTool_output/recipe_weathertyping_CMIP5_20240711_164300/preproc/weathertyping/era5_msl_wt/native6_ERA5_reanaly_v1_day_psl_1958-2005.nc')} - - - - - - - - - diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml new file mode 100644 index 0000000000..b4f4baf17b --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml @@ -0,0 +1,250 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r21i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r37i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r16i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r20i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r36i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r17i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r40i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191115} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r23i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r39i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r18i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r14i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r35i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r22i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r38i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r19i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r15i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r34i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r25i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r7i1p1f1, grid: gn, esgf_version: v20200529} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r29i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r33i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r12i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r24i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r28i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r32i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r13i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r27i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r31i1p1f1, grid: gn, esgf_version: v20210525} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r26i1p1f1, grid: gn, esgf_version: v20200922} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r11i1p1f1, grid: gn, esgf_version: v20200803} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r30i1p1f1, grid: gn, esgf_version: v20200922} + + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml new file mode 100644 index 0000000000..46c7e19768 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml @@ -0,0 +1,246 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r7i1p1f2, grid: gr, esgf_version: v20190125} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r25i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r12i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r28i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r6i1p1f2, grid: gr, esgf_version: v20190125} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r24i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r13i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r9i1p1f2, grid: gr, esgf_version: v20190125} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r27i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r5i1p1f2, grid: gr, esgf_version: v20190125} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r10i1p1f2, grid: gr, esgf_version: v20190125} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r8i1p1f2, grid: gr, esgf_version: v20190125} + #- {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r26i1p1f2, grid: gr, esgf_version: v20191004} #no tas? + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r4i1p1f2, grid: gr, esgf_version: v20190125} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r11i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r30i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r21i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r3i1p1f2, grid: gr, esgf_version: v20190125} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r16i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r20i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r2i1p1f2, grid: gr, esgf_version: v20181126} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r17i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r1i1p1f2, grid: gr, esgf_version: v20180917} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r23i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r14i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r18i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r22i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r15i1p1f2, grid: gr, esgf_version: v20191004} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r19i1p1f2, grid: gr, esgf_version: v20191004} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml new file mode 100644 index 0000000000..f6ec212e00 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml @@ -0,0 +1,255 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: CCCma, dataset: CanESM5, ensemble: r20i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r22i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r2i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r15i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r19i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r23i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r1i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r14i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r3i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r18i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r20i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r22i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r17i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r2i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r21i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r23i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r16i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r14i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r24i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r4i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r11i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r6i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r25i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r9i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r5i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r7i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r10i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r24i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r8i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r13i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r11i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r6i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r25i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r9i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r5i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r7i1p2f1, grid: gn, esgf_version: v20190429} + - {institute: CCCma, dataset: CanESM5, ensemble: r10i1p1f1, grid: gn, esgf_version: v20190429} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml new file mode 100644 index 0000000000..ed71ebb99e --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml @@ -0,0 +1,288 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r136i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r117i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r22i1p1f1, grid: gr, esgf_version: v20210527} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r101i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r19i1p1f1, grid: gr, esgf_version: v20210305} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r120i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r15i1p1f1, grid: gr, esgf_version: v20200201} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r137i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r116i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r23i1p1f1, grid: gr, esgf_version: v20210527} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r9i1p1f1, grid: gr, esgf_version: v20210121} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r121i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r142i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r5i1p1f1, grid: gr, esgf_version: v20201001} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r14i1p1f1, grid: gr, esgf_version: v20201218} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r115i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r134i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r138i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r20i1p1f1, grid: gr, esgf_version: v20210303} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r119i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r122i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r103i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r17i1p1f1, grid: gr, esgf_version: v20210120} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r6i1p1f1, grid: gr, esgf_version: v20200201} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r141i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r114i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r135i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r139i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r21i1p1f1, grid: gr, esgf_version: v20210223} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r118i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r123i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r102i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r16i1p1f1, grid: gr, esgf_version: v20201230} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r7i1p1f1, grid: gr, esgf_version: v20201217} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r140i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r132i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r113i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r128i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r147i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r11i1p1f1, grid: gr, esgf_version: v20200201} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r109i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r105i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r124i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r150i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r133i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r112i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r129i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r146i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r10i1p1f1, grid: gr, esgf_version: v20201221} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200310} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r108i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r104i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r125i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r24i1p1f1, grid: gr, esgf_version: v20210528} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r111i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r130i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r2i1p1f1, grid: gr, esgf_version: v20201215} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r13i1p1f1, grid: gr, esgf_version: v20200201} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r145i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r149i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r126i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r107i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r25i1p1f1, grid: gr, esgf_version: v20210604} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r110i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r131i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r3i1p1f1, grid: gr, esgf_version: v20200514} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r12i1p1f1, grid: gr, esgf_version: v20201230} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r144i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r148i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r127i1p1f1, grid: gr, esgf_version: v20200412} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r106i1p1f1, grid: gr, esgf_version: v20200412} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml new file mode 100644 index 0000000000..e9c384ecf5 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml @@ -0,0 +1,249 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r29i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r8i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r4i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r25i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r33i1p1f1, grid: gr, esgf_version: v20211229} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r12i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r28i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r9i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r5i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r24i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r13i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r27i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r6i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r10i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r31i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r26i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r7i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r11i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r30i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r21i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r16i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r20i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r17i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r23i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r2i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r14i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r18i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r22i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r3i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r15i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r19i1p1f1, grid: gr, esgf_version: v20180803} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml new file mode 100644 index 0000000000..30ba7387d6 --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml @@ -0,0 +1,239 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r28i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r24i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r13i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r1i1p1f2, grid: gn, esgf_version: v20191129} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r29i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r25i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r12i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r26i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r30i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r11i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r27i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r20i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r17i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r1i1000p1f2, grid: gn, esgf_version: v20210118} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r21i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r16i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r22i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r15i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r19i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r23i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r14i1p1f2, grid: gn, esgf_version: v20210317} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r18i1p1f2, grid: gn, esgf_version: v20210317} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml new file mode 100644 index 0000000000..81cf152f3f --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml @@ -0,0 +1,251 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: MIROC, dataset: MIROC6, ensemble: r23i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r39i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r35i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r41i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r38i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r34i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r42i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r3i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r37i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r43i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r20i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r36i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r2i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r48i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r44i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r31i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r5i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r40i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r10i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r9i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r49i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r45i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r4i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r30i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r8i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r46i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r33i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r7i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r50i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r47i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r28i1p1f1, grid: gn, esgf_version: v20200519} + - {institute: MIROC, dataset: MIROC6, ensemble: r6i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: MIROC, dataset: MIROC6, ensemble: r32i1p1f1, grid: gn, esgf_version: v20200519} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml new file mode 100644 index 0000000000..417a76a36b --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml @@ -0,0 +1,268 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_CMIP6: &datasets_psl_cmip6 + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r21i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r7i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r42i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r16i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r37i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r20i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r6i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r43i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r17i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r36i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r9i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r23i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r40i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r5i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r35i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r14i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r18i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r39i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r8i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r22i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r41i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r4i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r34i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r15i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r19i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r1i2000p1f1, grid: gn, esgf_version: v20211412} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r38i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r3i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r29i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r46i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r25i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r50i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r12i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r33i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r2i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r28i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r47i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r24i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r13i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r32i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r44i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r48i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r27i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r31i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r10i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r45i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r49i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r26i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r30i1p1f1, grid: gn, esgf_version: v20210901} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r11i1p1f1, grid: gn, esgf_version: v20210901} + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cmip6_historical_psl_day_wt: &cmip6_historical_wt + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_psl_day_mean: &cmip6_historical_psl + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_prcp_day_mean: &cmip6_historical_prcp + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + cmip6_historical_temp_day_mean: &cmip6_historical_ta + project: CMIP6 + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1950 + end_year: 2014 + additional_datasets: + *datasets_psl_cmip6 + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml new file mode 100644 index 0000000000..c3aa8d5bff --- /dev/null +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml @@ -0,0 +1,229 @@ +documentation: + title: Weathertyping algorithm + + description: | + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated + and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as + anomalies and standard deviations can be plotted. + + authors: + - jury_martin + - kroissenbrunner_thomas + + maintainer: + - kroissenbrunner_thomas + + projects: + - preval + + references: + - maraun21jgr + - jones93ijc + +datasets_psl_cordex: &datasets_psl_cordex + - {domain: EUR-11, institute: CLMcom, dataset: CCLM4-8-17, ensemble: r1i1p1, rcm_version: v1, latestversion: v20140515, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: CLMcom, dataset: CCLM4-8-17, ensemble: r12i1p1, rcm_version: v1, latestversion: v20140515, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: KNMI, dataset: RACMO22E, ensemble: r1i1p1, rcm_version: v1, latestversion: v20140313, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r12i1p1, rcm_version: v1, latestversion: v20131026, driver: ICHEC-EC-EARTH} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1, latestversion: v20131026, driver: IPSL-IPSL-CM5A-MR} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1, latestversion: v20131026, driver: CNRM-CERFACS-CNRM-CM5} + - {domain: EUR-11, institute: CLMcom, dataset: CCLM4-8-17, ensemble: r1i1p1, rcm_version: v1, latestversion: v20150320, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1, latestversion: v20131026, driver: MOHC-HadGEM2-ES} + - {domain: EUR-11, institute: CLMcom, dataset: CCLM4-8-17, ensemble: r1i1p1, rcm_version: v1, latestversion: v20140515, driver: MPI-M-MPI-ESM-LR} + - {domain: EUR-11, institute: SMHI, dataset: RCA4, ensemble: r1i1p1, rcm_version: v1a, latestversion: v20160803, driver: MPI-M-MPI-ESM-LR} + #- {domain: EUR-11, institute: DMI, dataset: HIRHAM5, ensemble: r13i1p1, rcm_version: v1, latestversion: v20181126, driver: ICHEC-EC-EARTH} #? + #- {domain: EUR-11, institute: IPSL, dataset: WRF331F, ensemble: r1i1p1, rcm_version: v1, latestversion: v20131026, driver: IPSL-IPSL-CM5A-MR} #? + +datasets_ERA5: &datasets_era5 + - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} + +datasets_EOBS: &datasets_EOBS + - {dataset: E-OBS, project: OBS, version: v29.0e-0.25, type: ground, tier: 2, start_year: 1958, end_year: 2014, mip: day} + +preprocessors: + weathertype_preproc: + extract_time: &time + start_year: 1950 + start_month: 1 + start_day: 1 + end_year: 2014 + end_month: 12 + end_day: 31 + regrid: + target_grid: &grid + start_longitude: -5 + end_longitude: 25 + step_longitude: 5 + start_latitude: 35 + end_latitude: 55 + step_latitude: 5 + scheme: linear + + weathertype_preproc_pr: + extract_time: + *time + extract_region: #choose region which will be used for weathertype and precipitation correlation + start_longitude: 9.5 + end_longitude: 17.25 + start_latitude: 46.25 + end_latitude: 49 + + mean_preproc: + extract_time: + *time + extract_region: ® + start_longitude: -15 + end_longitude: 35 + start_latitude: 25 + end_latitude: 65 + +diagnostics: + weathertyping: + description: calculate weathertypes and plot means + variables: + era5_msl_wt: &era5_msl_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: weathertype_preproc + additional_datasets: + *datasets_era5 + + era5_pr_wt: &era5_pr_wt + project: native6 + dataset: ERA51 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_era5 + + eobs_pr_wt: &eobs_pr_wt + project: OBS + dataset: E-OBS + type: ground + mip: day + version: v29.0e-0.25 + tier: 2 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: weathertype_preproc_pr + additional_datasets: + *datasets_EOBS + + era5_msl_mean: &era5_msl + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: psl + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tp_mean: &era5_prcp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: pr + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + era5_tas_mean: &era5_temp + project: native6 + dataset: ERA5 + type: reanaly + frequency: day + mip: day + latestversion: v1 + tier: 3 + start_year: 1958 + end_year: 2014 + short_name: tas + preprocessor: mean_preproc + additional_datasets: + *datasets_era5 + + cordex_historical_psl_day_wt: &cordex_historical_wt + project: CORDEX + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: weathertype_preproc + start_year: 1970 + end_year: 2005 + additional_datasets: + *datasets_psl_cordex + + cordex_historical_psl_day_mean: &cordex_historical_psl + project: CORDEX + activity: CMIP + exp: historical + mip: day + short_name: psl + preprocessor: mean_preproc + start_year: 1970 + end_year: 2005 + additional_datasets: + *datasets_psl_cordex + + cordex_historical_prcp_day_mean: &cordex_historical_prcp + project: CORDEX + activity: CMIP + exp: historical + mip: day + short_name: pr + preprocessor: mean_preproc + start_year: 1970 + end_year: 2005 + additional_datasets: + *datasets_psl_cordex + + cordex_historical_temp_day_mean: &cordex_historical_ta + project: CORDEX + activity: CMIP + exp: historical + mip: day + short_name: tas + preprocessor: mean_preproc + start_year: 1970 + end_year: 2005 + additional_datasets: + *datasets_psl_cordex + + scripts: + weathertyping: + correlation_threshold: 0.9 + rmse_threshold: 0.002 + automatic_slwt: true + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} + plotting: true + script: ../diag_scripts/weathertyping/weathertyping.py From 6acb3f53fc0e242fbf875165bbcb7cbc4bfb76a3 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Thu, 8 Aug 2024 18:31:50 +0200 Subject: [PATCH 21/29] doc update, added ensemble to plot names --- .../ERA5__lwt_rel_occurrence.png | Bin 0 -> 96070 bytes .../weathertyping/lwt_1_ERA5_pr_mean.png | Bin 104765 -> 0 bytes .../weathertyping/lwt_1_ERA5_tas_mean.png | Bin 98178 -> 0 bytes .../weathertyping/lwt_2_ERA5_psl_mean.png | Bin 107315 -> 0 bytes .../weathertyping/lwt_2_TaiESM1_psl_mean.png | Bin 100930 -> 0 bytes .../slwt_EOBS_4_TaiESM1_psl_mean.png | Bin 98546 -> 0 bytes .../source/recipes/recipe_weathertyping.rst | 38 +++--------- .../weathertyping/weathertyping.py | 20 ++++--- .../diag_scripts/weathertyping/wt_utils.py | 56 ++++++++++-------- 9 files changed, 51 insertions(+), 63 deletions(-) create mode 100644 doc/sphinx/source/recipes/figures/weathertyping/ERA5__lwt_rel_occurrence.png delete mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_pr_mean.png delete mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_tas_mean.png delete mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_2_ERA5_psl_mean.png delete mode 100644 doc/sphinx/source/recipes/figures/weathertyping/lwt_2_TaiESM1_psl_mean.png delete mode 100644 doc/sphinx/source/recipes/figures/weathertyping/slwt_EOBS_4_TaiESM1_psl_mean.png diff --git a/doc/sphinx/source/recipes/figures/weathertyping/ERA5__lwt_rel_occurrence.png b/doc/sphinx/source/recipes/figures/weathertyping/ERA5__lwt_rel_occurrence.png new file mode 100644 index 0000000000000000000000000000000000000000..43ddad7bb75dc08473fd711e4054693b5a9da4f6 GIT binary patch literal 96070 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 literal 0 HcmV?d00001 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_pr_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/lwt_1_ERA5_pr_mean.png deleted file mode 100644 index 67d0cd1970f69e6c86d9c08ef4004b5d82a35283..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104765 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ξ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%0A1{%RViaLW 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 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/lwt_2_ERA5_psl_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/lwt_2_ERA5_psl_mean.png deleted file mode 100644 index d9579860948479bf190800a40012c000571ab717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107315 zcmeEtRZv_}*ClSjA-Fri-Q8V-1oz~0_gxa*qsZEdEWQRu7H6|AbAq+>{z9est$8+AUwWemfvND>vK}b_s zxfnl3zH)HG>rt4+<+z`@l(tsAeuE(fL;OpU3^iPoBrcPww3iR$^A&JmXp#gn_rG3Z zhoJlY=MG6SGc08g>HoUjKoXSd^VV=thY;fbfAjxaYh)TwMf6G$0 z=MC;`b-tf;YP2{}b8&HzQBW{jFS8PO91;uXO?JVn0_WHw2qy>}=n*;a2@E9uNBz#{ z(z3Gctx!VK`_m=f`$eO+`(?{jyIurZy^c(pswObvK9FcN;FB?fysO}VXT-C_O%+I} zC@J~R97Wmke7xS+b7y&dylfmKDDWFh<%{)l3Ih(nO-kp7Is{|(biD_xbG}lm`Ml*s zQd*jXiz{u#wliyBU_jn_!}r5GnO;ZQ!-E?!G_a>fxT^Er1I%BrdR!Cu{(P#}=Y`Jw zyikJtrY5Y=-tOrl87{j`kg1=EFXyeXZEd{q2?@=>a?OAKKRAUdDQ>#`f#>+M93l9V*? z_SUJY^_<(n!oq`10E8G~X=!QIaf0v4x}_>1Jw2kVY<6K`u<_%*v9sTbeP(`s0JHN^ zjKKR=iKroS{R%M1RQU~0*0}t3b)fsrKB%IO&e{o=6d9_NLL8VP371$Cuu^Oe8$5>g zThx&hhJz$^-7R31#5mDlOj8Y3OUxB&Gz$DrWEX8Wh@G!{41igIaO2OqnUWyf18lqX z`TuH=&}^f_TibmvY1Mf_hn1cEdN)Dgx?JxqB8f)b;bG0ymHYlc;DamYW%VGH*PWT6 z?GkK)_Xb|KI;B4nv({`P+pRSs0**p9wW}9NV6^q3V?+drPt@9)&hcQp==blVCZ;v- zhcyjajQ974&YRCKMiO}a1sqxXf};w0@Xdrk4)99@jn;r&8yeV8U3kjXDkE(5njOd; z_eY7z$%AuVcPT$T2&6)*k^Vg)BjXF+*Hc2DM}z7?2qqLHMw8)0etZTXQSb=^?u0T1 zj>Jm@a+P)ARWftm`F3UthCIRlQh_WSmZIw+1!B0;V7+z^9R^L{mb=2fx3>p|%wjr< z+)_2zDDZmO3x=$&J-^lKal*xoQX^3row^teJ4P*Q-HDqO!8G zAY|d!Q!@cHG)j4N;Fpq`ZpL|nk%dJ`P_~@7`(u4>3m)wsRvlvxk9Tgmp$X9`5~REy zw?f+qChpHxf_t}+7j!+Xt7DUZovssoh6Htwb>rIn(VZN}TF{c!ejpM*i2nX)nntBs z$8}QmWlHC3@ZZ0GeR6KDM;Ii&$NI?1rnAEOnT#YmTP)PHmzBZ!xo&u4%FR5!9tgx1 zn_m&Ou8lVzWUmZy@83K89ymn&N=TSFs$a6A;N#2M-!}yrh`}EjPNEqa9^TIO zJU2L9tck+sNtPgRFPu1#m618QUACxqX>BL-K@dTKo;z#{)(+LgWb>PuaV9Ap5D96Xg zSZo%mul2>|tQ;J!sG^aW45nAx{f8~%#c~;sZx_B3jh%1Se`{--_mZ_jtSYdvu|e8y zr)AK;esx|NKXbVmz_q>X0!Omj@P6oT4DB`e@#6=ScP0p?wjF47$MZKr?^~1*gFjA3 z%G&gp?(Xgt8Z`kx==^oN+HRV}`w6T~6G+s;F#NBVBG)%J(0ja}m6LWFj4CdZ9@<(7Lw&DLH#<{hS`Aj%5yS({K#~J?mYAIEFt2HrbqQ_gk0l(o z(>J#hD-ct4BEmfXg`w@&^Rov55PKN38h#^tV1_-HdLPf2fKhpEo*D(z2917~l^GsQ z7XiC|x#--e)JO(A)nD`n2zk6pP>P-pcJ0!r7^Y6&`C9AKkb+N76gJCeD1kiQYPE1K&BU%3Q zMu|9?uKz}S%m`8c2M~Pj=jeQr1CCJ%Jy@sJrN5B_u=i0>in6kD&+Km%&014AuMHqw zl2XW}_W@3n%3(`z(fQ$1!vFC!;roeGie=M!c83yvmzH9c9c7~YBiH|*$n(wc?syLP zM2J`<#uX59jLyfZARV_w3`!ar{{R5A)MQV}v1$iiR8$1yymg-!Yam=Adbjjn?$2m- zS`wF+e*i^FtI=j}Ud#5=8Fu&fwyxZO$RQ&mgTIkgAS?s{Yyj+znFt*d(-qY(JUl!x zB_$y(4YsSz{pNA5+Q(TNlC+l*@Jxe=Y`)!t1IL%M##$h-&pTeu^Rj!e1EawB5nzLX zvJkgL5b|jp{=hklew#+5V=ky;9zhrY%wz$HtASvl-^RvffHA7+F)&rIqO6R&>P$s} zuYa+|XlKqAfMC6;Oh%kQLAi3{)wb{d3ZO8&grV73Y^fMAxUQKfMJiDxdnSatyIwx@ zPxE+%0B$xsG6F3J5h6?+kBS-|@xCxEFDo0RK6jMc_|<}+hDf3Au*qWX8-drQkXnTX z$_7TX_)?oY%O}ndhN)^f{`UUh`;lVnwS(K95mYEs2*NuSCQ8COyHIQXaPFq`(t$eb zjN^@S9>y+MaI(Y6Yl9~>1U{XD4Cafq3>MJEh$VIBhpW=lHEP1h2p=ZS?Sr0=f-KBs zphdndt|4)*?J=S_QF1@2c32lRq2TAa%&hhtpD`NTD5M<*=Voj}r zwkHqj?RAOm7%6Hvd^!l=nxetuqkV?5(i=Ox&IW(R)P@mphN+&P)! zoMhs9;YjfphM8mw6D7il3Fo7OLq_w8fSb4JC_qn$`4bb>3=bi~l=Evt&U%R*UPmN0 z1e;}t7d4)lv*`%`hXta;T)Qtx`A@jp48WSS4TP`#^N}m3V0%K7ijF+0PM1HRIz z{V^Vj_ZbtL#s*TReSlIHw=aZi(}xT+xKwTtwuG{DPE7RA05xCPS8P(E)uBr^BZp%6 ziDsS(PlGTgjfbf9FHwlIb}TJyCYw;4qwoV>@FFFZ9r4AzFH|d6pq}&ZU+7Se|Gq){ zeo&j~JbyLSyY1%>??i<1pl`u2=+*idneFF5YzD!jepni4B;1*t|2msw(;JsK{#EaT z?>AS0)X=vcV}g(m3JEMAjF3JHv9q(Yw%b-P&<{BrP7;6iL+4F9h|<#1e|}W*-i)%O zjxinCFX*_UAci&r@NVbr^P+49do<8D1j}WxGnovd%Tl1pB-3sI)d#=oC@c9N)#eO* z?4XE)1M^FHnTHi9-tV63!2Jm2>BzzRV=P~d$?aIWhZwT_yCRLho*XG1cFZU1g8J9V z`K?gC^dkL&V-hgk!1|3QmVKwR9g+EPT458WC78UADrL3p$T76QOluL)VVW{H>zpA8 z`95ys-&VagZqVhp%rp)hXxEc}psF}NlgqyJ*sYljLJ8Kfsa`F9@bGk8&~$3bNUIsB zhq_2{9`40e%l4ePJdBjhTfLw4VPwn zPvQt~BK9S_hb~#y$c!Gfe@q`zw?J(n2L-~#`TThBaN3VRYI6;gZO+gNIT zb|1)b#-730kQ9FxWxl4|lpW{XVv6Zgot8*q^jKEDuk?*p(E9)fnfSOirSG^&8Rh-B z*Nrt|T+dh_c!R=ReJA27C_!@DSYyI_SZY!C9UNqMi{MIG6?3^_{c$p~^Ma~U`$G0k z79R%;9n6UQT_SVLg1&Sjddc099qhX{3zQ8eyRU$e8l^SzI4OYd*C~DGrW*1!J4s?Z z2s-Y%WNbFo*tp5N7l*Q`jVBmlw=4BVN4F0T>3wZs-674{M4P>T?{bA^QN$dUs0KOE z)s6nWb6Ta}Hjp1kaoJ1}8{aR*{#Lz!M%p~`e{EH(eZP~a;d#M$WyHFW^H}Fxm75cx z2MOKbXVEnDN6gspCTS2-O8t8X1xG=zzgiI);zWx&q)!aFi46q*m-9RB zZW|)np9nB*I<2bFoT7EUfo$+$K}6`PVL@G3#x#1aRL?M4dKZ-KS+U3g`{{wAy+S1X zNOa$!x!QdBK%hA~N4m!@z&8Jo*9u%?4&?TqeVyS`rteb=`H zPyHUG2^k4z`gL@8${JrFd68ZAIJb=>W&Q31^rDs$e$boUW4YPuan&~<->!ebSHbih zg82&t!V@Q1d^eEvSo~DJKRWCGB|s2i59&e-QtKq*6;5$)6=8bd4Hkw@hXN|?v<(*2 zbZoT%%nV~_C=w%ORxB}5sgR(^!{gJ7k*lIs?M>kuRIiO-w}Fh!2hRY9tvgyP9c;q# zlaU6B;B43%UTb^FjiR8`WxjZ9A4Fk(pHI2hetm%A(e3jiyM&&lN6>OF&k#cz?uxB4 z(GtdrKp6b}XI0qp!wjYQ>Sx#08yA?dtUxb0K@+#F;P8V4a??Bl8O&C+V2Y5>Bv=nx zYN=V2)t?7TYkw{}fsjR+sc1K|E}GG>8y8=uwS}D-V#AE-w7Hir2$YczuUM{xszF94VHCn{JKXMH z83Xgm(y?B{-DR<$-T7&*TTX=t!@TIAJvjkALxhRztC|_EyuHi#3XT(U)rO4&%2_ZO zuu7Z4=wt(;TSSbD4@(i9?>s9TzR9OkGxkOM4nJi^9Wq!vpv-jcP5#1BA{{@G$8QM( zr6|#ROsHa9rPWwoG*a^ghh|ubIfNZfae;Li$I`CI)UbXKHST<)DLr?iceF_Twpp+8 z_jMDMJ~0t$h$N@!R%8qj;A5$;NhK2Kc9P%<5VZ%$Aw0NkO6Vf`SllKO^R?x-))pD} z)BAi5t9dUp0*ALhI1HEizt4#V@TEa`GLwn;+&h`dwYf+ZgXdDP>O(-Oab~eSiA%#_ z4)zoJq0TEI)*HByhDn(R8Y1AGzEm_g;ex7cSD|wc=8}F z6+Rib9WRl(uw97Vn204PeECkAx@W3Ae~J+wkXs}$HzRZ1mV>h?!GtPhRxBJHacKme z5L&9Xkm@HV9e$0BH|JoJtGl2=phZp)re8gPqu^&+ptlh0HTt%O$zb^89FdQ3pQ)sa zlxpEJnHmoSe1{6_?wF7sZ%G6|7!%>!PN&<&?-!~xNAnbFPXPbJer_ay7~&n-O&ClM zre$P3A71EeN@2q-rZMOBLVji4=XHV1#JFEC_FLNUtRubQ`yR)RopVlh0qGA8JY|^B zuE~{=a&yz5y;)3O5O{mJMH>{b*QwNhHw}?|daM|VQzHCpSFXqD4?BPQ*H?Iw`NVzZ z>x6JFH%a<7HMW8no9x~jv6I;Df?mEVKsd|r4UEeEL6}?^L0&c64-&`|TCqxpqe$D> z+{0^70Ibe|V5HWQu#Ut@SssPc$iHt^8|op>^g?v>x7+y&7ka3YwQC9<$|#N{t9Ue9 z`<29HkWw!D@u$Ol^gmq53V!fmr8{=Luw__}rrXIiTBCP{v@{b_fT2BKv@rqE90#6J zx_kqx?z5w$ZC;|TpCCGoUouXazMDvngOj42pbC>AdBdU$|sTkC``11E>M9T*L?$UhpZznEFnvG9E zXQ=qtyT-C)bie&}`?OW(g7Qm)Nco2?*%g&);{s08Rvm^&Qx$5_xsYF=ZQiOnneu*8 z|CU;#G*uJ!kcAlk7gQMMO~>Bx)@i(}puhb}6Y5EYI`j(|@)#?^STao=zz%eDz65f$ z>+3_!fuoCc8`gs7mVMj5C%FJsp!v9&qj`Kd;K-RBUcmS0nH)3ugMHa7db`MMBY5)a z`HN=0V(A$Iz%;E?2Fp#t!Uha38DGA$skpe|uM3ibbm*gnmMu7~sLSoxIFWLnf=$98 zzA_gxEcUhF`;xObpGrXz`Ju8YHnQu>j`*>9=1lNtOhh4riNtPOmQ(V%;zf8^KvqkV zy@|mI4*8+X83jzB;VqJlwKQTo9#1liVYQ5_f4p3%o-d81`|^pIPN}A!ygZQSiKjE- zxr4LzY!xXuqJRl|&~|3)S$^OL`-Pz56Wsh++wZaZTjRElu!!xr>eD;<)1o}LV-F;{ zvgk3eQiB$;!juQY5lpQ%D{7W0YB)1uZ67BD8!y)Ij;QAde7S^%IKkHYoUUgIwGyX=a{5Td;9+0d<7@F17ESY=f6}-dQ3a>?5!BPx z`rq}GzO!W9xBV;To4B#%=!|KmOtOY&JhK=`)h80a`=vrml{JHI{ z7Cd+lF$^R+39)=?itX)fk@i)zz~unpMgN6Oq1S;#RED#`$9M+gr6V>fJPMjy$IsES zgUA2{F$6*`NQ-2rSc9JcMyN)P@z`E@?M?4VVI(${}`_6VHU@X>y%>(IwSMieexn_fsb#!bM~6`9%^yLzqV0UMK#Ee|75MZh}5<|jn2wYK|J3Ra5!7t`9x1tGl9GJ(9B`Y6a5 zo0B>(_&?R#-t*^=UqJesMM&9agPuVdAYDncVbfNa-ZZ6cYHC^n^>XKK*vr&?4i(5JHV5&&^yL#KI#;O@VFer{7Oj zNzpIJbHaQW57tscX zj{#$xR#KzccKF!TMjmAE+=u4>u_n40F?o4d5Siwkh{HYrX0cGn)`EBn6MU z9Wtv3>u>MK1vY-=Av*YQ7PP-tHm;=~MD|s9EqATh2iuoH*TGE3fB9{>9y%8<$cYzo z0UOLWSU)a{Eh2u5B?ugLVsXRY#|}-jsyr%JM2yoA%eCODK8xMbhybmErioq>3qhK>*9b*fH zD*8NpL7;C))F(4NyMgf3jkj)^B1K` zkIZfAt%<-ExeY06V2|=Mk{oBlqKX*KQs;y0QmOWi(`1>*Cpv-y%VSqffQ%dpnTZn* z;Hy`UYXueobQRlc&Yh;>LrJvR&JX%>c`~0%?$MtM+1Sc)!BrX1?vcZMOJ0o%e>=W0 zF4}>5O*0=%OBC8Wk7a_#cP5*wPnHaUp$3^Cs=N0?d|-rfy2aG7)LTcO5+$|!7S;hu zUfLg|+j`hbh<{1*$LC;UvF(Cp^EA4(NmhufkDy`wK7ltxEd!!7pXSWl!3&~HyjtD zb10537fTW}RRqE+46bEv$T=iWIB}nKk{16`^ypRaBg~oSUD`sKe`Y{u{e(XOwHDeV zmCuxMBcqmL1IDj7*fSZXCDiFVca{2tEQ90-4QOtaVF|ilJPRtY9u<=Gt_vnZQ2Y{o zMYF+c8>-ygRz9qlj-)so^U^qWc!}|FR||0~*hV@pCoWfHGso zPm4+t$({aeWU$*JOmy6_CDT2-ipQpN=)Yx`I%zjf$oh^KQ5EjRn9Qui);RaifXMP6 zaMQnUGnCS;h&zr64UD(_>PxHu6=)P?M*RhL$y$^zr7zGQz{;cC00Ev=;3}8yt1-y- zi)wJ3yrMtZer+o?X@U^{?=kk+`M3A``-L6Y*o@_Gii#*$qgf6tk)}RJh2B)flho!) z{3r!C`#X}&ktKSMNYY5v(YAzoO+h1=Z;yrB40u;Fi$A1APKe8n8ypG^C~r#EF&dK* z*aF|y$td?3tylMqiwX32nm4?PoidpvCpzcOcgJ(8^*=&5V4qfC+|o5)hI>z64+*c> zHN{k#u3jd#WykRnnIy@2!_ob~WjXQoKi)b&1_9DGa?ZkJzCx4t<+PTSmGu%Bp=VD| zD_gPS`o7=fXx9Bi0f9y$*gbE(5LZIacH4#pSUDLnF~|am*nNQH-Ueu7=&pmCEr(|0 zZKtQ@=t>81VWufe#Ox*#=#t351_3xarNlB*bXP2LR6^8%yswbdX*0-jJeC9A`WufeG;R3cb&!gv+Wsb|o-1^F&B zuq%lRR#@zyoQoIH`K6gW2bO^zF)`Ej#t7>-w#-^QbRVV|^7)k=0RiD(6y-2XC>qGyZU9gxAJb|-0g%@r}f^v4P0&Hk$*|0x2v?6-&^78WI zJ>(aR%WQXB0%x3^l{*JINbli#iGnKz(pWB3dRWXfPDnDcv`p!m??kw?zD8(~xj_&zkZ3q^ z&b=@)*y1wipXnGX9_c}TS7j%yGY9k@?6CjBGhY-_{c`<2$N+A)w+$_6@2oSmZPzQG z?RlWf`u5l+l}2sE={mmfPZC=$!qU!b!J|j9jYI39Ghkt(YgGf#$+DpvAaW8fakiCk!x``#Ll}ZaS9E2Jj^4#1LgT zFLo?Z1&E&P8PT5#3xM9sQP=Z!4l`r9{5h3c#DET>bMk~4GNi?QJyIe>n^J+m&1`KkEWk@PV(omQi_I{V(jsRq$1l9X@(ai@<1Y+-!T0KJ(o@!eRe1_Mro^%R1!)CA89P z!Ilv_;-Pp|NzxfRLIRq?f$ov;f|Nco3?lJgsbwGI0ZafZfJg!~%41Th7 zpCpwNKX`XdH{R60-?;57OT z?&y>{{0Ypna`Yin%>rr!Y^UVK>thi6>(r=AMkFw*h`l*@!|f1cDQD*uKH941#5Zp* z+h_cA5a6ZPiK8vb3I$H$eXqX~!L8QW(6@^$; zwY;R=8Y*Hg&@jS}(Ex%)5$$+og&QRVa&8{O5?5NH=21zO82OtxBae@K9yyT{O<5%Z zwEiYhzA6jA_C`1!2sFLqb@a1E4LSs(w?fcJ{s;U~>v1jS4I0EK3 zZQ$XjD{lT!cu0-U!jzjVCJsqdyUs%9N1o7)Vs(!%Xu+VB&3TXVoro|6uUuS=-k*T= zF#1!w-M%9h8?8@)6sU@Zu-s#B(Li?p@)DQL;Etv?YZqnRHTXC#`MrG0VFgQHESnK* zD2ieV9l{p)T0wSQ-2vX4-OZKaOQ2E+DaYYc!I zQdBfGhXCnGe+)iP6QFaR8Z`{r4~P=sud|C7?GO=RToLPd6l7{$!m2 z1O=EuaY zu4Gwkb05dCb7=z4Ck!hL%8lpM6&>;R?65fYly`?eR~K!!0~b%LpIbj9y9|lm@vQ84vt#2y@OWO(*H89|g#UlinZP zhc@&iGyY7}2&27daW+`o)x6hVk7-;klQt^&%oFYYn^a3kOk|}pI(|e<-N6a`P1sBW zaLxaVSu2qs2u113`FJ(+xhvOW0@Mvv9nTg7o~KL>j*jk!d7&DuE_CGN06smWp!OYC;1|VARnsT-HYrMJq7T+bQ1I?E&?~vDlg@P&1joMraQiS_s{c`Dn0`IQY{Njrs zZD?MbDT%b()AWzt?2)R;EVle2AD)?NZ;UPk=G}@X060F(z zdBeuRa|NA+r(^ZbVYUTr7I+r!H$Xi)P2K|4eGj8c$L;lTRi2L7yBdqM5OYg=mT$|6 z#z>P4Lc&}3n-(f^eOwId3~ZFKYtktHEVYxTA*U2yWb?PfdmZl6i$o`+zQwqqX%shM z`H;L(E>!2ak@8k^Q@n!`t=bPT=eD~chDD!Ewtd+a|47W+@xSbgcrWWs-t|`NFUnpU zK%a?zkmWqh|93`OgZtnl5uKKx&i+0qd(|w0-f&I?t|zR9IuMoI>JVq{Wxn=&PNHMQv8-x*;$jPe@jkj4UY|^gav`HyEcK-QRi( zE#jDn`f(=WR`5v#Eq}m~fGV)OaC8JWKEd$tKSP5~Ont}hogAW1cUg`Uh#dr^kz=O4 zrYB2$Q>&}1)^K%3pI{t|$Hhwf^=z>w5a?b~02#L5$Lqw$=^#9r4zOb~wHP`)G;f_` zBV2ipeNcT%LKZ7|PVo z(?*Qo`%V-v^4`!Xr{_nhhUXI)@%GX2PR@=oT${WWXTs367p~QY9Ey*rHX9X33`d`# zvqd_2QJEd3I783yXnoxLw7)R`9TvHR;U|8GvWCkjFRab|VbTWG{bXiGgsQY3IqnFhyFO@tPh*d-4K`62xcinD&X)4h`wV)hH=# zpYb;!fF^2Iw6!@ewASvKT(8G6*^UMb8tv}((v(QJiz^YZc9fAJy+=ayYY4u&0#cQs zZ>gj2(Y6Bvg_c3D1gGPP{CD2plmOj0HC$84ynr7d2+Vy!|M{sSbzOI-tnPg0Mx&4g z$!%yz2AX~P&Q}KzpyNdro?Kq`(5``y+K2pX_AvB>a1xa; zCvXS6NKCHuBn1XOxZP^`1uX8TUt5$Et=6s4y7rA8NLJrQrW8kfHr~sxuPy7Ei(;`g z`>;Df2S>2Q@C+U^o5eUd(#&vZFe%V(rZc{qUmCY!>zJzTu+6?|OXt%iwcnk%c|R14 z(rC=rKb|1!NYvF6;lWbP`)jIw6}BrhfDU1#`j?H3X^H=!X=I6A?Q=^QHJ+hhFm9zf zCrXB+-~YVvx6z86TB_imEOy}9F$pkBc+#BtvtoE*KKRD6di#`yl1pIKdnt;HrsAn1 zDZewsG;RgYtI(LfK5%It%CsOU+?d2XHHlX=>lLmJLdi-lZTRNbU zJ2yAi4=$!wtviPAy4qb{-Ld?8`a7TjDau7pds?9Td23(buk!~D8JD9*=gCE?oZ7keJw&VYhJp6D7aU9RfNBRue`$F* zEPufTNwt>z8OJu~fXTS2jSw0NUl84#kkme&GJbOqn}9G(173{S6(x^hGQ4kJG{>xP zLwS?B8goH23Y*!ipT>NE0mnq!9UI7WJY4gBTTWaOcT8~u^Dv_K=(CP5=}_8O{lOci z#S7{!aA?1FNAo-Oh{mkHTCIIlYnbsEb)LU$|3DYp8e{wDf9xSoL`Sqmmh{cRuIKl= z6k{qb5)qzA0R$z4E9<@?YlNMmGjVUF6kkFJOwMSKSl%mSUf7Cf;yllrLxJ``silRR z9#Go?;}R~XLu4erTV&T&duRZ?XjIP2Q%?d)Ir^S0M!-YO+H%aY-9rF5F2VxqI29ly zlmmcFp?lx+T^76oRuOU7G?wTT>DB3L3AZp$^Te-1NuzvArt-L|!4H1zRs@g|Y80dz zUTcMRcT98GW^|1&D92rNOgT=Oc{4P&xm@Z0+{qgU^co>7+^yDJ!w-e1QfejDyc-w zuQcY64Ek5Ol6dQge8!GLZS=XmZB5r5p8|sFPXDOcsUQ;mdv%|_$DV$GNOdxLbX>XH zP2<9j5Qu20;a3x;zv;t<3_=FR4TdA03R~8{xBmG@V}*1VLaNsQp1D-NPyWrtr*BE! zw{~NP3*Y^AO5*b`c4b`$t}YN7>Av)0{Si;vBL>~Cgj&uS4rAp~g7hAX*l@mmKv4D; ze`kVHmULmNg#(5dnV3a1AS*a)N^>_aXECK_T}!H<1kCTpM4tT153u?=C<}khK;Fm# ztgV@oot@enuGzYzQk4DU-y4Nf>T=&t2oPHzTv2_^F!f}VjuUlrWa=7-P&28DJ9K)z zzh2x_Bl*DlEg73=cXQFE-F;<0^+Ej3#$^2(T$s%QRYHpJo$rckb^S*WvT;#N(VSzd zWy(9IZMApUbgyNqMq8rg#EW~*0Q)42w|=&-7-p&qyAiq=vQd2A8W`?n!{<0kxy6~> z#}z#MH<$5OS;MKj4YTQ|^6GZ{a#2rOTcQJ7G`)qw_#Cvyo(zuE7k|}ku7)w^PzxzzYmIQWu=lZ0c#|!z`N*L%m;r+7` zOhoXaGHBAK7jzBQ>o{svzF2-!1^bR~Pn}VeE*%a-;DQoQbrm)*M^r`}jy-HvJeS|( ztoO8=A1NOLYhEmy0tL9S4iEGyZ&A%%RL1#-@4fo`5o}3iBqi z?4`tNX+*fv(2mmAq@^d!*i?qo8OZNUTVEPcrbIO4nEaDY{}~%x&4EvM!aSk~2}Ja| zUk~&pzdU?zoA5k&#~lk}=C6*8vOMOg!2f^&O^%`z7we&ga0rnHN$Re6hw1mw>Sp%=*&RG8xe ze0e~k6zg-DIl?^3JXjE`z*cEagCc2%on=V}Ed>une_#4_O6o7R*zyv@ScUj4e!k>= zp2t%!;IM|)pPk$4&eXNJ?sT;q{29E>SUK|cxmx51tg&!#AKJP~cyh>*Es8j83Djwy zndr?HFgn(GS>z?Yxs*pfCyPWea5t*&5W;!9yxOk5A+`BKwfTpjohvx+u{e(wjb^*i znNy2}!J3E7&d?OaiB6+^ZWJ-Z511sCR8xoL-|@vOFa;xfd{p3pi%}gKEW9r)={{2c zwpuxOg@&C^D3M%Lx&g&4TQ@$6D*stwYicyN;`QT++od+)*FJPtVXBnWzX1amLlz#X zzh=t6xWiQ?5D_E4lrPEutkLC**Y%j72{&dE}+5Juz} zYl~HPEF{_TYW=Pm*Lm zr5keYb3YIXG)LZ_6~b{)B2-GIH>pe7+@Vz*Fth4%_5~5BV`wqt+tB&e`g^v^Va2_7 zDWZ$$7X1u<7Ee$Rez?_;F2 z;x}K83`0(uUEfIDfKJ8IJsCjGEMJ)H`4=`iDxpJ$(s5;X6j!+mK$oc*G4a?ftE91? zU+=^yoq)mkq8t5yTHIU6-yIcPKZ<|P!>$P$MF9QDb%)C0i;;JNjF=DYRagIgOIe4v zeoLYb>O@lJpOJib(dZ~otd6rKmF<$0hvCBBd=Ro~!+AcN;-LS4++$BA>oa1)0NFHZ z40nAA`R(WfRR!dtW@~z-gxWMtsgc1IThl3J1D+HVVr&12GgW^D!c zBP|W$Yj9g3syKN{ZW#r99*gH}zqd5%S{&{q?oVTY5I^O-rKrsArA_s~1sGkn!#lS@ z%&f@%?ac&h1w*ElG=aPM1VX2XUs-Cx;=@>(F{=EoLl>>LN#EPfej65>+?EGriaL}L z0S(y0A&Kc$xhFrdyE4d1Jx|3{SR_DyqE#!w8JM z_OY0ucSRVP3U!ImxJCOn46rP1H;mjh6<>_jHp&BgESn#vx}XnVYj(x$rbd?{WV zH)8Nbtp4chaO@TH&G8je0_0^$pA=PtIg)#tPRW^4zIa8Dw$wKgy=O>idD~Ad4xTGk z(L7<~=2@tMo~;u89agu0q%6941*^0K`o0;dGp^V7SvSP(KTTB9Sy4;IoP`1g$kLx3ylpF@rERh3 z(|9v<D(sgteD#t@`2R}=Aj8hEjxiCi^K{F{l zB>2_q0taC(qZ!7MIp1T6l%GfL*IrDaCq??#spBVTbuVYV&nMB3Ojp~C853o3ZcOQ+?qr>XP?CROS{#yvW1tsk&zc#kqx;S7ojTBZJVLE6bt&Ecbc0cZr}xHvg#9WflUvOk3B5jv#R z@Z8etzkY0Ii^Y<7DDoLOA4OX6{SA;>GOINnmGi!)#)b1>PEiSeA2rh+uo^HKjp@|Y z@M3dbXVz|Dt=NYEL*eMK!;Q%Qb^MQbDciosm&hXn_YckU^C_}23mpZ;+X+rPlH z3V2I!Kg;+w1VR+F`Sf)o?{{UUJtTmv-1_l_)>H}0Ni)%Fw?hN@amw!}m9?ZD&xl>T zUrE$FNzMn#9_;~vy9_85_En~C&Sreaj8am;{D!Wt>#l~YXx)Kc2ninlx95D|p=5;_ zQZKv1i>rk_I-Vhgw14DiouWd+g*J4)gm}-mD=}>f4dqxOSm=eaJ-8MWJm##zFj1RV zU!nLTd1hg{)}QNviG*DrTvzt!o~j|yfl(tTwLH&{$#oMM^43uL1im2zH)i?U(Z@i# zRMjsoS`XmZ>UQi#H<;HO6SVzj^d@6rAPn!EJf%iaK8OtH!Z=oi1IWX->&$@+Bp6SZ^(3awNP2M?Z<}zz zm{i${oyFg-!dlI<*f&pF&gpteH%i0HKL_DQO+IP;M@Zv~p|artkRGKP%#_z!VoA@z zXWd845oi67fui?o3oqF8Cr}Jv;8pw4KbU@-s`dxj{B#qROa1=Eh}o2x?_qUO`4+_P zZ*!(aRO(YE8Hc{Yp_^$CBd6*cETPRii=4Fy$m&CXJ!K_M0TrB7IG5L-r&!T^(DCf6 zeuHw>nY9~VX6|^C15?=ub>5>dKE7W*Ja$h2y>tI*>Mv^2PV3I7Io75P;Feeyb?@?F-Vip3EC6%aU<1D=JL|$Jn37<^d^0 z>KMUw8L_oHoZuJA4VIzehv*uJ?N9*5HYOQV_OTr%GzYZ%VzQ(gb zwTuok<~C(SsMj@{!=7ord+m#OB?^Lx00ICeP>{ri)LIrRG>-5N$I1SEFeOAz2q?g# z0s%t$n*%vpqm=#GVp@kkpCfCqYo%O_^Qqv*-f?u7?j(6jjezLJz|iZJDEiR1?(f_N zV=No&Fjh-x_Y;^NfZP%AebwgWLkl*CbzdBVrNwas7yF$sBu#tTxK~x-&ck5+!FE!< zj`hocx5Bs=l4aU5v9nr zd?s-c*cqb2Ln-sGe^gKA4b?S!Nk-DJGs58o_mp}d9sOnF>F@ZO`3e=MnDg>bh)y_1q(d;KXfwyh`zY9@-^Q zePRT>U=zS4e{_|(8|}n9iKFkv2p$Om-J9q5@=q_1F@?b@@+twV^-WWvaA-#Z)9goG zD6j=Ckif+vP~rj%Ud#cb36*+a+Y#LV|%gj|12l@sh{ z^z@!u9=PMC+QL`Tzw=H12`Z_VuKN~qMuJ5NHwI|mm>S{g1MObUP4Z%VXx z+A4^%%(2H;n3bP)c>D+9*{NTEiqUK8k#5XnPu9T5$QRVV3Y|U_1QV^zk{R8a?x$ z<6p-$pW!;C@Sown)A3-7Mc-I>p$*vom&>t`VjHyIJv|^f7e;O`U)h*@Y0+=(CBBZa z9wX1YKbO$qJI0R}^e@l47Lwm15FXm4+6Q%vvn5KZio|Q^zzeZGOm$` zZC|z;IGyoGq6?!+b8)-_6?L^EDHf6bwf@JSUOUc0Mb`;cO-C@JKp&7W{w-vPZ@8E7 zjoB$+JZcT=WuhVllhk<-zRymuNda_`DoeY(@}1CytfFu&&mQb{7}b`&CUqMuEk{<% z9f|(sD#>i&hodhrnnUM_tR&Dg&bp8rbKf>ke0q9`g+*>67{@ZUhK+#Jm!^E-&*HI< zq1SpGss>#H9WcCG)d_TV?Pq*owK@mvos7JAsaR0Jt9y4cg0(&;@6F_^$v8G&UcC2@-GVaLXe;}iG=ZU!=Lac zdUtG&++}Zie;Awm9i0Vrj^yZ{ zXam`CO7^v_V3wK^YSZ?4fqfKk=EP;-K?htfhPawt3GX$a+0hJIoP;<-^XMFYKc z*3nESy2OwuW?br$FjQ_GeGkxOmabj9VvYU#%8%wUa8%CfG3~X;FO|&xuPeSF2$K7y z)YEOJto)*{|7Czf?!~bqXF#d1(s3UNtD3NxA=I4x<`FjtcwUV1agXcBu@r?GDO#vq zIjgDk`h!+pJ`ALECwjm19RD&lI(L6HYEcBrK`2Mxp^zXM%km}%?=<~iQXq!3#(a2k z_g1v#%MfKj4TQ(gUu`ylY%`Y`Z+Vpi6L95ZS$CY4o)<=jfY+ug1C*m%q1Qqt;6mc2 zamI_s#~(*#*^8X8f=h2zqI0QE%HdsM@1nKp;jR^U`oS}e^Q-MmK8~*@>}1{IZX+C2 zHhxGZV_Gq#e4Y4kow)o>Pja9G3JwTI6@sdLqpbBsO8QbQffv`;z-x#9hNF}W=Nht- z`Z~>QRVwipT(zaIJr3C?;%eaqbY|0FR2@MioBUF(7a@5fM;72xr1^$iJunF7Losug z4yJ|CyMw*&&o18HUY^gACJsLj3M)MY6h%o!7@U&DC{QBuSZrFD3&3>%gL?J|KH^rB z*}jj<#r|Pb3i@xup|&LL%IA7=N|UqvUoWyAU)LRu6LwGz5@93uaSf96%i?0ATjVJG z73q_^v8%7Hb4aBKrv5U*w>R!8O?%SW>!{uJ@wA`LE@I5SId8{r`5`}~^@oE(zhFSE zH}#(@q*j76Bzk;d)|s0rTo!lx&gRo%J@wZpQ`x~`$Wxy`J4SnZB3vHKW{_$O$nq}O zl%Avo==AP4DI#rS9$hDk94)n{EC{NUUl)3q;*b9HpumM}$@UChY1h0ej2YYBVSSw5~r6kv#jVxiedTe>wU{d_Mg4 zm0=+ubhX)6JyF*zT1b%odefb6&Sqt zR0Elc@#Vaf&+?xUBcd9Cmi;xp&&cZhr{|l>4`@=Ng&*Qps|*$i@7|1*E}rqZ5V-l{ zGd^pqf74x@2XAhDu*2-t?26vezzW;Gx{+BvIx>-a80nEBEFA**I6F>EMtar+wyv?RGO z^|)wSVXBEE+Wii_7wY@5geQ2h9(oMTnZA|?iTUYd{}x;GBlDHv#lG8=bk_LGuZ&`j z@7v5R;bty$W`ruz2tIwj<3SttuP)`maOA=58XtdSWA4i-EK*BpP)B7{)vP?yijM5> zos|)R))jfvx=E)};EVp0@Ah!|j1V%195(e486eBHNe7 z?Y<)>{V1>xD}35(cPxSaT?#GUccyV=#h*0n5$goi$@Xdd z1(H_LJ;z8EYi|tz(xxvD#KZV0t9&}Q8E^!%}uh)wE zr!gPy0ST9+vRFc%A1zq`1sNjf!M#PzRRYQd{66vtd^Lb48Snmf6@$;Pb&NsS-002# zp?&j-z9jHk;TPl|=dCG}5(#WxB?7Nxayf+5@iQwavQX?VpT$)+=0)%wg>N@QYgA77 zI!0$1$hG4dt*4#+X`dBg0*FK|>wn(s3ac<{XB@ZrGpbL)$=7Y4Ti^!Yf&YbQ#CR@NuZSu_F>BQGA#3MF@QKKMfP%V*bQ}|-U^@d$SGKge?Qu|% z$rg1wOeAGOv|*L%)YDTF#xgz%_I4g{c(q(R%%1+kPojU+(`OQEcX&8(0~cjL7XPiN zfht49h*0o#^YbW}?s;jcq7+L#hWw0TsXeXD0QDtcx5-4KiV8D-U%$LsDlg~4S?xq; z6~);zB=#7`NB7?7!5aRBVB0C&Z!6n@0*lBtX6!ix+oJM*4r8@1amP8~0U3=`G(ss= z)WHb;l)ydZ&8~St-e}k@y3I*@?{NA3{O;;NVI;B3qOIDoyi!JY`c-vh>c1VX8GKkH zMzJ82%3GczC|8EC1uR|Kx<=(Pc$Sx8k(M#VAgXE5{gVrFJ@ns^*;)$ZTMM-KNv;`U zMYm?p&2aJVusTk|m^4dP=k7qILe=(cMT=ThL_I~~-wk%H5uHB&w1O*tyMEo18)ods z4B0#FP5_ik{)d~nrOPdv`7$Uw5f0J;0o!KF?$e6o<4>;7O!sR(tHa9!T$SJE)})mf z%|s^}p#vg{%KB3`e9Q9js|w&HD|NyNm_M(E#n4GE*qz8Qieyg z0yJt>wg|$NE;r`*2`-LuC-ny*$87r=JoFB0g_7ejuTW9oChY=ziLQPk5>ND*(T_UG zM{SXOW_%~k4|E}dif7);6d-)!HxuW#m||C7GLg>2c6SyisMnqt&K4oc)Z}0N-jv2c zg`d*V9a|GT{>00;^M$)YpGFi1PK{3TPgJq@!YZ@Va+?n61O($3PWT%W(uogrT>PRg zi*5x`tU!>(*j{`Gqg{3;0L(^Y2I6Hl}lQU z=dTdp^AsI7A1Kj;hzPhR-|Plm}K?>B_xkxM=ibmduZ=2(w}6q35as9JM_V* zQYpBMVzt65t2svCmUPiYdp2N8{dQGN!{msd=R=kqlBCP{oYjzj8W*_s<edkNN#66n#^ZWP0gg6p$Ub8QUz$&TVddfbtC@GMjf*-~!>q zWqp^GDt?#xCyRRjl9V2$QO~6P@ECUz($XC2_|uWa(&%uFyVmq?wdfiN9kh@D4g4MnE}Y@LD0Vt z<+$#ll*Dt(QnCmS(?_4FG- z0kmG(H^w$^#eWOdwt7R$5fUx#cNFXn?4lmtQ&RG&%%O`pR-FhWlNMT8A{7o0HgZ;;j*5>2kJ{T6)XRC=k1m&5>Xj zxmiO=7Vvko3j40+!a2PTLvQ&`P4El9u;%%ZR?fcOUnKUbjj6S&_6spqwZ5MvX5d0M z*ss>(=sVeZ(liXC6Qw2b1X^q|p04x)?AUjJd?6>rlek-k%fgO`eS!JyMF~fqn9CG` z1r{)VfpQu?h-v5&_x78ShT2oDK5|6^%Ry^SuJU}IdTdb=dtKgPvv z8=XG4HVhBAad2VfKRA&)vSG1s8Ka8A`FTKO?Q~*aZ$vhoTj+t3;#?+Prjkg3Wqr6I3ud5hrfh~#J`M1kT%%%OGFyaWQ zuy_UX|0mZuTQ4}RF@mYqYZ30OO9sJ_>2J-`;s+#T0wGw2KWU!N;#L)zr9Gsx3GF>L zjzka!lB@2+3@!AlnkpD?P?;EY@m$ldKfKIe==0a#i!dU31;(-L=H}&H?=1p#od0Pt z2?ghq_lZ&pXr4Et)q+UQpLdh_yG3W-m3FY_Nt zwbb5@JzDK{FK5I^SvKHskm2_(KYf(nUw6LqQ+Qk&DUVN%ap>agis5ipf&tzUyNgAu za=?Ne7|q~I;dQ2kKte+D0^zyBni`C>k-k^&HWowJz0k{^l+ea2Gg0#wCiwoVM|D)_ z#S7xwZS&gsym54P32jNq*O#YT$IB6}_e+n8QbAmddaQeJ3f<;bo!qLS6I!map+Y3@ zYGQ&7oY{Pvo&t1fC*G8GQ$Dkcb(a%HhO91L&|uAoCJH3I7H@f}Gnyrwt)VWJ#f`WHR}LAt?}}bNsX8n9)&W zf}CHv?|Fnigr6q{7Aw}RBKcryy@O_Fe#98B z4%A03_Q5pQisln^h}DH#Xn0NRB!zznqBzqJv?K&wMP-uEPb*OihSBh=Aluz+P1f~< z-W!(xo=$VxUoo|qd`2W0;@Bke(sGwJ{8yone6B%^pLHg(g@ag)m z=k%4RF)kT0SWOYKye{DRT#o*N@9hGkcz#vY*FU??ugKv-8d3~lS5K1hr?+R)xw$95 zv8=@q`_R~y5H#3N&zLmQG}!8+@9`i&rx_Z8YNjrVipV+!GWY=~*5?0`D}RTA-oOHh zE8f7RivC4XugEPH5qA*gD(laga=T_E#BUE_qrcZmURcs3`hUf7z zo**`dpN>1=POU4NRU7=({0&r^0kr~fB`v0JL3Kb0rmm9&Je7Sxz7xv9aS4;#arQEu zqy>@9=|Av^%s>PgeHLAlFtU{vh6v&_}4GD*b@N(;m_!3K~vK|ZeN;xKH!!tz=?D=ILTnUvCon6 zGY8VmxPUcQTV~8O(Z1VmgB=*V=}7_I(t|FO|i2|ALh>{jb#Lm!^% zX>Iz^wvZy!>|sv>>3&;{vh;Xo$oRM~XGXnK)>aE0E%GUxW*>MCsP@cn(d7?fnU;U3 zwRP@v(*eT`Nm|Jo378CnE;WVc;LTCuN$=K@Cvh%^R{syRlkMvjpPzl+Au#*l;7`2} z)C#|&9F^$@_gYIym>OR%4Kp>x0jEJ$)`qwhr_h!EnhxlkF)Oq8MUN@9u=T= z3eC%MZxqgWZUq1(q{WRtQ?cBJ6Q5Ie?AgKkl>+&Wl`Z;T9TqmWnudn+rzJom4y!co zkITyPS#ATQ*vZAk!E_!+4;~L0*Vn8opi>&xFI6rXcm3?PGX#kNbq$T!gaqgg?6xzQ zw#$rD2>Y|YB7jM03#^}^RG9_ zCe#)BEQ>OKA$=0))44X8z!#KDwnSzcQ^`UEqO5Ik8qL8am=%&SJ$ACejneQx&KS!3 zLgK&4vMOcb$8}&#SD%g?Pfav+PA@8uFf8ic^-(F9WqqLnTkADXj3M=EQnm>g?~3~e zEFtH*F;sf_!LK~PHy!QM6S^XXOX^E$U%K3IdJO{MVS=E@aAB+5+4J{u9t#+e(#U2& zcWlSE5B8L%z|E;2FTW5zUiFOhpE1kk) zF!nVSh?~x>l;Mq!<*n7ndJZ89D!8SlrrxW00?bzfkZKY**{#lEqWbr&Q)`I{Jo_I2 zJDJ;d4QwB;&_MU+`&|ca0s+DDtu1h`;9fz&4sYj;?_a~Am>&s9_3_$*lH5%Tk# z`(NL;ZZ`{GAf*AR955IS098~zliz*3UjU;gp6%_5z}OVmcNkn=K`-{~N}zOn8<8qt zNc(J~YZ2KatK+Ty!g!db8GlG^;BXVzKtEtEnb4;!fRwG%B?(u!AW=mD6AUaz&F%Vz z8#u^rE{+||!H!jo9i|Fqn*Y4a@`*7$6k;SLQlTCPKyma;P#U+cVimMv+^pWIDmcor=J9&O-uMD$-~OPkE*x+T zAoqlAwiE)L__+u^;ZqXmOn?M=CbcMClW(Lt5|Hx^nbWqQ_uBO!8owZgkO=LIy& z0Iq`qO6ACQfv|di@8kBdk+y($o}BrsPu5o2N{y!w+ig(X^6=10Q%=bkY@9Qa%I`lc z4h@Vb>UMOMUQ#O(^sj8Tqt}1(!m^tl5j^CqI^y{h<0;Y7B&CGX)q%n*x>xxa+5gD7 zQO;L~TNH*HKM+=;!&0m%Pia*M-Q5`F6~|C~WVtf=1#*7v)-;c$=yE?l>!;zKTQ@@h zJF$wur0Ip3enTXf&%QCJ=GNvtacrqOytTG<51j5G2f{j`Yw4gJ`C zF;v3!IO%eNRTHxw`pvL(MmP{}|E3;56x~0wie|gn@z3 z2l!N*GG9E$g^SGr4v9qP`M>RdXUiU;#-Grc2 zkADk(wD8H?9rGRonLl zmQ_{KadsLNe3Y2%^VD>kkHNDXd~x;Z;vzf9Fm{lr#Sy*ST^*W?zo*cJB8HVa*Pe|`g;IPU4RlBczWiFdD z61--5xt^Q#eyY~7(Q9(<^+}+d5!Jp#hJFJwfqJU&9GO~8IqFi3uk}_RX_ihnX0zFjI&~=gnCD-%AiccV8n)4EZlePtV(U|JEfB<{v^&vemujl zpD^9f2VQQMUFw0B(oRb$oE``^*>%Z3OQJT09Sp0|fK*LD%am_o1P@>0Z!Z@UB#hqa zgp{@O<qac2oRPTVpE{TkAs-g0D2;`Z_sTTIGa0G3tT9BR5UAE4>izO=HzU&%*z@M3b4vQKu z3z1em;xGVw2n;Bnnsm%VpZ-jNX0T>I>1ZBDMV)?UO7f~-6Z!DsdRFhxt2uB+%J3a3 zWbKp+FETDJ?o9_cV5h%SyLy~G5}X}URc(A<^9)!KjVYJ?0&LY69_oCr~$ zVV|wrYK`@+41HbXbypa8kA-edk$uNSwkkx_ihKo5Y=GJv1qNlTNk)18s3_;sO6@z{ z>Se5p>@Z40u&d_ou}k*{Ecuhr9!o4wvjjqVB+#i?9U=b)-kVkyI5X(xrlDpBn&?Cq zR5O3XNvI>}$xD_Vl-+0@sSJ^8wj`_O$tVg@CAJWUNE2EK9Xb++^Od@d)rpr6qWD1p z@5p1Hmp*ugieTNCp4Aew<$+DvE1sMz!E|5~n#HDkc*w3dmYs;+#z>m95`25^ut_zn z5C((nCac@bKf8uUM^iveOS9<+mt>JVf=s^ytv)k(-^#P&;p&VOO*+2PUsHDcn<2yN zI>&isO}FVbx$gRNJqMNRDAfEf&${AEfhC)z7-1_xv)?n7-U^+PpfLo5m$1`IH~y`( zFWFShC|w2*zso{eFeblJR-gXi)jaYEJ7x3^qp{dMKlr`2ZgB&&UN)am9*l!8@dkst zy@UFY6%L1m3H3ds&T51_7&yCU7j^B-f{sMtleXCu%H4_GbPKbOt`V&)^-!2UUaX#3 zfYKpuMJp$@ChM@su8RKkL;ll0PM1{6-Ld$(c(2R=UM~nSoK)P{SoC^mJl{|B!a7Ez zL8;-W+#cz0x_mr8yf~HqR+b0aiixX6Enq)LDZ%+S?Le`EeC$Cn$oolDH-`asVCrgX zIUfuh<)KzLO*91#%C0Md1MZz8i>s zA3?BjD3O7T06DjW7M%a`dN@|=!2>wZ#1zz`ptpWE`q$HUoFk`=GRJooQg`PVnQYRL z%vr7>beGQPTY^j?1|y*}1G3ti>rOmBkMI0akRaWJxUIx0=uW$9k}+mJ2OU>tAy5+k z3tuHig(?nZ_OOvU^#ZtY=4|jd$4A< z*N(%D=k}HLp=k=)?jrcXpQ$i&8k5E9>wsH*zkK8qU7rQATA&9|!9?F=+kLg+R%atlYWq`{dfVu>k;ME9i}Fj>NanvoJb#q}gm|cTV!QESK9$uwxmuWU`)kLnG5JuaXCmk^ zu`~P6=zSfS8Casq8ufuIrl$@?9!SpyM=8z}Cb5a1gumUqD@ghzqN7R@3cpW2uUes# zQ4}Vtj(FbeLl0#z)3;V>2@IxbKAc>iuhQZ(KTeTZFWj;MBBQw_9e%|->ZXx~OA;6o~LY6JG(2i>w;SR7EYz27-zg|+4I;7I2Lra%cuS19~LGekHMsvDfj!hNJAJKc1DL`fIQA} z-`)LJ2-mD^LVQ?g&J6z3aai$ug^vQtNzEt#h z>^Ehq+W({bxWp4pm^8Ru4aCP)dqfVKw+nL(zQ87fBT6-q7#22I(~_Ug_HR*d%Q+qgUA4;@9BEKJK}^%{bmej{xauG4cZnylXP<`^H_W5feeSh5fa$HenhF&o{xm z@WSyqtlpC~n~BCsLHh4euwo%=fpsj0I)OaGtTZ>Iz?`l&7WSYkQavcjK&^DxL4jiJ zn->k^M~6X~-JHX0mx<-d($b!!i0H7c69zFc3A>Z(&OB-ddWleDVKT$9@%M)fs=9EZRSpST#rV~gCwg2HXFi7!Pu>vcm=6v68|&r{?I3u z`@=oaZVQ2XA?h}JIxr6IGOF6B%8yOa60QwG-H~ zVY9cE?-MtbTxDAy?i;>I@Y|Wz8DmIte;=5r<&d<9#u=5RH&QsH&D0{6%gUyu44W!o z1$$QRRN>S{`MUC@=5Pt-NXSpb$Y|sze;S_Mbf-_EIADes7d@mG@#IMU!7^a;fi3-B z{0arI5DfV`1f}#ixLKQ6IXBm*FD;lF~7itZ=42esR9g2b5W9b zDnAaSdV72i387d}V5R8ur;VbRCO{VqLP>z7TR2!!DB(#7GG~j7HT!DaPt^qUa!0kD zOT$B6LGz~s3YtrMBoR~Sq=kV68AobFjp~`^G|iC_zr2)&;n0koN&SHF4Y?!2WOb|M z=y6LKJT$uOSFQt zIZ~J(Q4~#$hSlc)8F1nsf^Vr?>R&AIS~RRnz6Hl%Af2rW!G zPrX+3kp7#YrrzfGDrFAiqd@40zYfMv^osHR`NfD@D|Nm<%B+$zxkK3@)Q86~PZGEnMhx4x1Xos!HP6c;d|75KD8c!jzW@>7a5fXqf1NmC9D z*%Nlwwnw-fSNmUdiiKlkk*0M?#&H?`{8U}!eTv+;KhYZ!q1ilZ`q62|Xx9bR&7m^j zbxF?fVF7Ws85>U-*CY8 zLxiHxzxPqy8#&a@ta*T^5t8Kk_ zR2O><(JMOxiQ#Rr9gnoJ98Ii?Rh3Nb->+t|DZGhvN&LdLeLb03g-Kcr@WZKY4Aqo+ z;Ls(2A~!l&Z0DdvAXyHUmHzL5m!DfjXP5P?s%l%e*iV*!fUqHBfEJM&^J< zV}=bWfOEUT#td#Owb`S`cd!vj+^C2nMb>7HnCMK}7rB56F~)erL~{cpy#RWeu?_AB z7oMGyLlvu}uQb_wV$pnxKRtt;kBDO#Q&H^=c3x&T=Nb{Gr|TO7&0%xV?lO1nxUUxw zzHM=4GCOfs6h}A221iFF*GhK_Ma5k8-`fkAxW^rW`2^^)Pdhb zOp3|i%q*>O0Jza$iVkU&1fsXE=iLFq@|b~S&KcC}#I~8E93sXbEVKzckV@1LYNh*m zT70`|>X<*s(twMS#UjrU;J6 z%-@v{C@M&qHg}O9u8&POzm}!YOQ!~IldB}5ARc^AR@P8%V7^W#(mgFL33QiX!#SiT zwGIF^e07yGl1uIB#5aN7(qw6t{>L#{f?SpTav_7$i7OPn7eg;!9fCTiqZ=oAfrgzz z-Zu_iMJ{A$ALg~fC|JW4M;PfUGM#jCb2rryuu2OI&Y~8_lK|q>3ZEPoU&S z1%m-I0!&IK-L>wBAUcJB1C3=Q+)S2YuiDc*<0Qc;UpQs>zsr2f<^r(rUQzF zRM|KRpx7TStkfZeTV``t1}y9&%2bj2qlmX6fpK+R0>At$^i|^Ta)~CkXw&%izU)2* zaBVOo@>g{`e=p9!K?5SqtIq_SEcFc}`fx*~a_8(aorQc>?$9AX&7iVc6@QVKkrDOk zlq&U;!v%d3!JPS#%Ukka2CUfym_L()o{8TBd)O<)3QjBSW}$u~lpoallkOM3 zS+4Q%gQkl3oN;WYb|V>AQl9v0gy}D?u>2iI4$LCXK-XzCHv{A7P-8?HJh7T0Pv{Q0 zYN-VVUq1>QCrVUJwsUN-Onwc?R*DrBMb-MVbZq04ed6y>)0d@j60=U@Xx6<9cY_ zdT32HHG)e#;V;X=F4qv}Na8cSkzeW$blgn4RSndWZ_32GA=S%JW|l8Kr!4E@4T(5@ zUcLYo>tY+`Wh6K_bJJjI=gy^>C)PxY@_O}aiH<8cZ8B^-8Bo9v`?dN=?G5^ZNU7V}0p3 z3~Sm8a~09}CqJsIhaKe>y(8SOY3)8`AxrO-vT1JM+}t3#7evMk8ixbcAZYvwZ8iJ( zsmiOLv{50MH8OMk2%UUVdIiI--{bNIKBc>I1To+JJh8cHbT#1OsVL#3FTt!f0yOb= z*~W0bTn9Tpzc78oTo!FS{g4_miDqjeZv+oaOic{&S7TbKQ`Wc`R8gCa7ca);o_wAw zODS3Zy>Tj-n5bcB*7V((iO~a`?6d2caj7xgwNve4)CYwW%0o*J;1mTc^7%~IB8K_# z;?{9qU9!MJB*W@l@^{~8$^YlAoJy!@MrI(`P{;TNfz+v^SL%fap{CY67R@|<)d4|H zb|QovpMfUD^6;21uZT0ZNkQ{sI5vQP9aCk1={{>s$Z#&^fuVpG8*$okT09hIMB#*$8&$CtN#5H@BlV0~fKp>D5ArTcYOo~dsS5DxL za?+(Fo+~$yI;3Q^URYN5qDmd7z9oeI@T=8wQ18|ST)Nk67$v#F;YCYZQPM75=HJup zXy-+}Z6@PyJB^=58AlR3S18uji^bZ-uzA5q-lS1W$N>elMC$Y4hY^3)i6P%N8N#6bqtti$sYocTW>xnOE#%;YReeTcrurT>Z(;K=;eMtoIlVP$;XfW$T z(OaPXIEfiMUg`h`EV9Rq>K;LN&(>@HdMYMt9jz3R5iRmhEBq8D}&|)K?bOsvVJfcNd-8h;}F7GEf=Y~XawKs@yX1!Ad za3psxM;Wee1Tzcur~6B;wFj*Yx3&>9oUQT7@yc)Z1IY8JVwm6qwiHg`i}PB1w~#op zq2Fb@GWQwage`=NBEFe&JrNf=bCfP6Gu#+_Q`Xzi!ygC-7%^lzF(}IhkelKl*<}vP zxZj+aJcL8gJ2Dxhwp!Or$s#rzk*)3Qnyks{9eHIW@vh;_@dp?Ono__?;DJviuJ(K+ z0lmydWZlP#8aO-7_Ju<4D3$M|1ME`xmCThDdm;5Id(zE?wEmME@9t3M!_)9grnyc!Bxz~Jj0^>sXeBqt-( z8o&u^$Iwpk(5$Y<*E5;&{o?i#SDsJ&H#UT9F*R0FnGu9Y-r+(f8^*DeK~I>|O=#gK zO5fNfk%w+)!a#`Uz%O2zeG2n$(t=W|ZI58IBA1BUB59nssIk`cOv+Y@5z?tkE$JFh zH7EP1G)5yZ>oQ)opf)vEJgy#o*b9XI?&i-PGCFKF;Xt(zl8*9s_g zyo)Q`axmO~OZ_!r63uFBqUpgrlq1HDZlhs2zQ}2$r|=;dgBr0aQDvueW2A1*Jd&fb z@#&fjK^P)>$5dptYV|hhqnEjQwVcb1equcuYR-r!^J6~szj47>^w2ex@y}x1eh$g) z1(;&gk0`b*7W`p9(%X-cng^W~*_!dvN(rT)jsQKKD&3tQT6@wbNu&w-yEE>^4P&JX;Pbnzn=R$+#37!5pk%`C+{`wg$8B$J^Y zOcCfnbOUeYW5^E9b4y>i=omYKz!dEBIB%7+eoZ|XArAZ@4<3y%D}Jib-|C*tM#crLaUFq@S2IWR9WH#*fr*?spLR(!t*6hIyJAV>mcTE3dK4co9pmgMs>mpn zpJ7fZ$UlWal^;+ljb$%WOX5pLwVihqbMMK+o|Q1_9W4vH7sW-Hd^bJ0Pgs(TG5VYw zMra!F9y76G9(z%)(F$c~mOTDlts#Zce3fiW!oUM#oMyT*KTF9Vck+OI+}=CfAQ?#r zGaT%IijZEu&>kHbm$@qfn$E?xp&moFZK)&<*~4M;P#u=KK$lI;bPK7Do8fKY(%6qp zoHw@E!k=q0V=y~u>IpF4*dInEoEr9oRq?5c*<3-SmO50qQgHTmU|^xLiGCul43Ow} zH<@{4V*J-;75U`#Ip2>$n3f4Siqc`h+Z>tSo~|;C+My~O=(T>q+p>j3jjTtHbTz2o z{#&t4GSrR##n~P^`lLOYj#fx9k)<*;eDiu=z+C$rB{oq2=b075=4+zzQ`8%?oiYOT zh7=o%e{_;$A)_wjYZIG6F(ln4ao~mP!JwJu?p0YhzpzJY46dQB zId+=Z(gJSr&UEPvcQcd`W!T~#q`aYn#|?a|+({Iv>#3_FiU|3lJo{`=cVh5LVulOt z581hQjOBM{0pUUrGgPtWicCVe%;@5}H%511%E#yr$}^}I8|TM9y~>2ce?AKu;4l0? zy51@%uC9v~B|ttTxVtv)?h@Py?(VL^-CdgC?(V@YxI>TtjRq&UYanOypL-r}70pva zRj*!q%9vx!fjxSxaPf?mdj>x!+GGWmuo`2U}5D8PJAXZgnG2ZtI&W`^}y3z)W1O zf-?1{4fEvVK^i!jcVS5u#)=?$3|u+q)lUi9PVJPNBcI}xomJoP_g1NCB%|#~Ep-G; z(Cz96fv0iZ8?!a;xcTsEPD5m9g9&W3;zoLds05mHx$KsGz9a$prbtw)v1}+tAgM*a zKa!@546>X{N}NkEHp7vdCa_`C@B*tI_vnF8FQ#|?n*!#9l2XD-!=F1G{7y2Vztixu zHIB)1Jh#Cyxa_Gj303NQNZZo3VJlY-Ek|-J>PHNe@>VpYHk1oM`xHg#vgu+tFuFb5 zkt$jVr=^mitxAJd;}%q+>WGnsY!bK&JoQ8@WMu{T9=%vqcYP^VLQ#iglpyb7ni7xj^)E`MiQ%8sD6Ow4r9KfY7u#=fk;R^RB}JMgk6CTW1RIYS0GwK4^R2Z3L&;VRn$0HghPY=7;EdQ=9<|gt0xCTkG#W&+hdr! zkY~kU+xBhYnG*wp##akvP3$m}`w@8@iy8>%Qt6yCxA~m=#rTPw>F%uInWS64&$?iVLRz~+l-m0WymYa%)x2RV_@Ks$6pS_!KTpNm`BpfZoxg^>7yUo!^ zaRCFqv7R*#a96ao@xU{2e>0)NYFSy?lyAl0xx+WfjVAjksH6<4LX|l7cPnIVMLw{p zVrYh}Y71S2d7w9%*4#7a{`8AT8Qzp3Her~Ep25d-6;#viUcdVfA=x%b-X<&gb!=^}#n3iHL!Z(Wt$ zoL6%U{s)pcSV0Ot>^_;Zc-MzWO}oa<7X|7gexyB(y`;5`O@ETR{qWt5J~v6&)J zX`(YoH3>M32YX?zK{$R3^HElyd_cR9$sKIKH!-To>$Dbf7*~P~!6;6`%;mULat%3j z|C2c>gC_O`x0*)lMtRK7Ofx5)pXX=R(QnWeqQ2Zei{ZH`8nh~LjZ;wL%FkzZ`Q}8* zwK3x9B5ataR7(EqlqLF zGInUz!2}mE0mq*e`^hsj zUx`xcjFC~S5Z3s&iiT8_GOKNeUgL2Xgt-IjEg5ClSHo=y^XgAzk}bmRtR2{nu^fIc?3N@1a>vQ4N}Lk{r<4BZOJ#ZaIGK}Xhg_gxy5OWT zi`o6s{$nW7m@HyX&X?MN+b(lzE8q2+_S>U1+!MxljDOTOP1TlxsDArH16zBlL9(qY zmk5JUtTV}Hb5u{^NKEC33LCvy>{QaxI;FadWmj|4mg4$O7_7+8=C6(NToE zOf{(X(7ze~jel#OgnyJ9+1FM}ZcimMm2?^N(8VN%hjk-b$lR|Wcrf3%Yozv&tkOBn znndy)&Vc;|1bEXt2PkpM>5nR3^Ky48mZ?cKCv2nBn8Y7_QEag>6f;cQS@I9hX1GPU!S{E*q>MGR% zS!&Mn_&u&~ZCPq77?|T1zt~F<{1>2I5zBQO)8{>t$!j6NJp8#ejjPVgHm0qK?olb< zVb;BOfc?R*43bDRBebfzCh@Z9b{} ze5Rxz8bwiQ@8p9m-uQqh3PB$|CMXOSri7x2d$)S2_uFUa*{O?sC%pp(CykC9{7dyl zv!&^V6XzRUDjKONO8n7Ie!GM#XC9kACrnFq2J-&?LV!1$z(sdTtzKJ`*(eIXfPhY? zI~|}Lq6cWOc_sKHzUHvMyND*`FyPN<^6>msw;Dy$xvp-@(Og?+PshEXKq~9vJ>Z@`qgn<6>M15t{6XNSxlEwqA=Q9aCF&1_H4~iSM^@|OI zKv4mSwQ!^vVhRuyw2!jfB=S`j;(*UIx=UchaB57861|59=a|_@HZFr(<^LC2%v@*t zdYH$w!ozeNKEhU-T}nl5ofEw*x zpE0ocJVn%6#I)pV@d$d~v03~DFOtq^vDFn$wvR}xE*sE%{VeYhZ{5|{P+yg=Y{1^l zG_6$k%ZijdwkPsHE!EK>LkL3)n-XoSFCEsGrg|}(ZpRYv7$!5Js*EKr;O|Uy)f0wf z5o)M5gvt7M$HO#wC@`9r7*-qgo|i6;74oS>>ODHs39H-qy-kHfJTtH6maO23n)a&Y z=z-fg;jnvgqfNN6#c;nKgPFKv8ra>aoSojq?HuCC2Q_`A>Do2D@qF< zfV^?7ENE}W53fZJ<*dX<*GsV(M*Q{Cf{AhPgAqgerKI&eRiyW?B(uRSRaFy%)UpW$ z%I@Coi(^4`b-i7f2_Bx54?e!Go?atk?D~2rT{1mA{d3LH?Iqyh5e|3)sHlRUdn#&c zOS`+fX9EB;i)Wd#Boj1t=u3krDus|jn4z7s6rpdQlc_TOgfu8QbulfodWi5diKZis zCdI^xxaJZRxi72ET~KN95X9h3DZ~~LFmHB8cUe_H7!oEI=JO>A1j z_!d`USPF61=ugK=w>0z2hbd}SHXZIB<4{vm6OU{1gB^G+a2>fmWec|Q^#9mQ5WaA0 zu@|$1trqa2mA@lH>!H&I!fc65kqn|+E=Poc^wSqclerx0V&NqTy{6E#p?*6)6ERCXz*w@RXq>=fTZ5YMkp+osJgyLSG8Lg2Yb|d2X2x zQCiy=$4_HRiz0<$a`6)eJ`Wig?NCVBH3i?Bb2tvi>fIH}nK|)&tyaQmx4c_(M2H0- zKdw1`qQR)7cwIKzq8A7uL^>URhbD(oG3H8Y07G%OO(bkO*;)ZOx{J!~#Uw z&MkQ@_OXP^O~dM3Js04_kXE=&s1UNqLoB0$@XNS1rNoQylW5rxwNJC;^YRv0G6qX| zc^3j%A2u1KvBw>yd1b->VFgB}oW||`K{-tVMW^P4@|2W$eR?swQ(uvT;Q3_(mvTPK z7q!s~fMb9K#xo7~gmjk1e(94V>|~%cq=la?krWpSoTW}#ne#P}$8QWSRIzXn0c4;E z6MI}N7aoQ|6%-X0hbhkw;Ac*cHR$rV3MKs;1bEhD;d59PobbPUuvBG%Nl2f@q@#vS z{f@**kIxPh1kR27Lq6*J-~FmF>dVXIP;2@9ZsN&dHM8>TawZ8qXcSn*Jdi9kFjqEC zGEpHDLF3fHZ!(OE?q@P(0z75W;moV?4P4AI9PY?s^;F>_Dd{s(juzE3Y#?P%Ug#4SH0|0#-$t@G}ZcnqQDLg@jr| zT2qZl4Ai6;C`HEhz=J36-M{nw_1b!PczE-;n~2&z3kY`M&XiTYeR!E<^)P>DB=5BV?{Zva&*3H$DId~q}U&{x`*#=j8B@OpD7OT54 z)%3zCDw@wbDp{e$Gtnjg%<31!ID6ZOe~JFnb#xZ40nTKEt=ORAJ~@yl&7!H^jL@#E z2eoZl*!OEP(x@;fs4C>NGz#I1kN@By7eY9%HK%hHJ~M!dDT!kPTe;45C!XX&Qc z5wB0s!N7x8aHwj*A}KbI6d$mo4F4XbWMV+&mc(1xs4iqpoGbv+y7W`&K)|X{4iNxF z8z;Hnrxos-^QBaC33QAUmPjeA3uoBhATd(wM(p_1B&Y=^Y7B~VGP1CGkxWp8Fu&{_ zyrR`C^@AB1Brra^=9G?s;}qSR3NFq4?xANgZ(MRZ({o(mESnVy%VTa112BS)TbWKT z*87iRV&|JgVig*)ytIm|O`&9Mg9CL1x?NmoVOqwBU!5n>A`0c&@pZz zqL6s|(Q@kyR`bGV0LP6bKHosc|Ivp{X*im(^!bw>de#FM&>f+*=(^B*q_rQY+GCZZ zQnJ`f9?5vPgm^;GhmBAHAOy}de(Iv`kch2#udH#)8SjXnVd;i$=?2IGwS~F%s2AI{ zKe?6e>xRnXr~WZv+2DD8z;nvV;NR4w2*LkUj29YPon}n@Z}r+uQ%irSI|TD6j$3V` zH(Z7y%D~O#tvhtT$2Dg-hkX|jO3sgNi=~;;B7D}36p7#F)3Vw^Zz?7|%YVQB&NZ(Xq$+C94@F=%OYcl1<4rSMy2{HrAXlT1I2)jdmI1+=C!b+vy%zLwmSGc%?$GqsLw z^T4tO){gFNt16|kYWTi~R3H!qYKZ*9C;!3gq==A4buTPW|W$Oi0UJ`yr=Fpwl&6OwGj$>1}H zVW&{+n?mK5?X8KvKcUOIYvtoBL0<$zv*cZ9CoK;T+T}cuEnH;nzn{wz!%p<9=KvA>Vz}kvi?L| z(CW|N_DPeY@6tHz-uaLbf`Nv&US(f_BHVC$(sQ9)(H(Z^u{At%fDFte(pEE~D8uj` zuA}hTi4+x-O0Uf_0NYs0*}UnU;aHt+FE-DOueeZ(ii*ID5c2NG{B(181Bi-m&zs#2 zm6mFB23K3`AU(c3P=LuBkWr*Xp650_`i(CQo?y7=kuDJ!l=O9i&5N=QXleoYrf;_O{}*7$cIwT1_u|bc8=vOcn#%RuLoyryPWG`c=C5W;@yJ$h~VxY$!TiKbIZ)yzm7Jxt>8|Vulm5#`h_*CM%E%(u=sc z{s#3zu(j8X`H$3O02>rSlt;zpxg^MdY?*fNbPWM{RsA?Yza8MzO^jXuueWwbAz``wxUMd1DU% zw57d~JS#BZ3n8xD&N*#)U5%V#?JOxA*VSFd7j^5#?mM8Q19Oh((Js10u3M2YG62)D zhz;)Rtg+C-^a(S1XiUwVp8njaJEomqX@_5^;+tc(CIz>4)M3cUaCRPJ9^xQuzF%BJ z262L`YLa&usn@(&gTKoRedb+hf8Cm@Rd_=6h#*+m`d<2=8%;xrbucyDG!+LWIC1$D z@xV$Yivg^3DyXWmC6eZ98Q0(5{gJ9=7;T|L1XQ|y7rtBKX%>u=$F+bjdg;#U>Z0Oh znx5mf8R-ii05bw6^p(m+%SM4h@5Qe7)iCZ$>V$V2>k4TLK-R{lHugYk4Z#$w3bv8| z58^AcSpcdjL#fvPjZJ)OlXOwwNO zQdiP1NzNrRWFp=PE;_J1l6|QVWSspWWK-47EM7~<%P;ZRG|$blk6R2Lh@z-JAP~EG z{yrCm{srQC0B^z9xM#0AEv{B1NZ>T#Xc{TuzA22mE8Y2$n`7j|2a#f)Y|?r_U_2&A zw-tBWk9*Qjis;K@nnbK-V1ZWMx+z|J`w^3gtM=Pqn5sO0G?ByN!>zB}(~9IjQ80*+ zVf?L3QGrDW;VaPzkrkfEdC!C4-?zeM7yw*;Sa+i_mQVvo2t;P@J=ny=gbWD7@Abs! zFw3rP8|W5}Jl*&fx2%BxDhRw8=Dz%dzircp!RTp1%j>jpbmZ%)TB<}rJxe;B0#FZr zXf_kOxi1x;jaNy*I&D%~iD{Pc~P}CetE_dv0m(dEGb1T>rRRA;^?B}8mfhz-1sELls8{0I!k38A&ZEqp$bneE>VNm(V5TH8#ZDP&bZ-P1a^WSsSZ~3N?us*+gJnlZkKSZjWsB;;_Od zP79r7myHnknPZlnCoLg;NJF6Hj;;i2{imWVNMrBmg?i^aQ=F4TY&mD|Q8ieI#p#)_ zLuVnw&<9#fn^mH28YxBI+nWyn3fUo$KSJu78XAQ*W=5Z0ttlv>Ml+h478Mm2IE5cN zX4%{hrZzt{b#!zrBWkOuEv$La)^%UY1ze}(BiZ4v7^H^R9mC##-(|caJ3+JreJ-I3 zt6ql_{Z561vC^a_tR8%fLKM!7B|aQSg+L1byG|i>F{UK~J?%%@2`riRLNL>8wC!>O z26ex`fmc=MTB~#e2F`u=dFu;*L{4xz6pQJxaAQYpNMs`7$`oy_j} z$kU~ijGv8_1*BSurybBPVv^xUWDckr5ooqM$&}jQBA4UQaF7LT=`vJeKnxO{Az=cc z=ILd&Gp!d+VxB9`mZd{lulKgs<*8)V^mE2h#&$G(`<2Ea3D1`527{@&{K~)|kJZwO z&2gD-!yCjq>}i&zrSTK$C1HQ`RI)w4uG6h5Qyg?`OO6_{=KC2|EJ%oeP|Xy_IEgh= z1yx|9Oso^mXYD~4tsU3uAHS!pY=9Y@=E1lyl%20j;;`98s@zLDXfhf{V_hdK+CQak z_}$nJZrlsn$mDp{wvsQ1VJ&uge@KqnX5C=fcj}8T?v?YmnjJy1)byX*Urip`(b8lG zXZ*3I7{$Tn1GyiHf?40d-&#r>0x7xEVIr52#eV88%e>vHnoE)sz@yt-7;sK^U~6G5*inZj#z^HfNfC)Mbz6RfZU+ZhjH$0epis<9Irii}VJ*t1hWNNnGLP zpwG8I?OOT5K=OD(%cq+jM3U#B%l7_go|2wxORVtLuAV=ME($8f6Whk5tFelhut05t z%9}M}3MQtlG-zVChUxvQO7?sx>X8wdtdOgNSVp}DtbC?yYqyZYY{TM;Dy+nvW8dj4 zoZy~F{jFRT@HTA1z_%pSvkS2YJZnc7a@gRFGu{aYyofk_j12PNy!565sw^h+?64iB z=mhQBa6?8)I^&3smg%A_M~-WzdRaBoo+`@xf5QZ=MbYuWfLXQ{p3-D|@b? zz%>aan1lMkta=8t9hG4R6jkJ=^i4e2mlhtYE?vl*p3gL*@=rk%3IBhn9_ByWfVhwr7nWL3tu%?oRmSf(SepHp|J(FkvQjmRc}m)Y1>+p&DGN9Cd<0>d z97na&+>tcwkbuU;=0nDg_nxUpCvV%eO94T*-iQrI8WoIZ6J-$*5GF>B5e+Mxj~bN! zc3b}UW$WKT$6?+supY9ss3=6wu_OHMWZ7+;D!l=iuxu8sM5-AWOkeL$+StgxM%C!G zB>*<=De78Uq-?s4)zzQsmnS9ptcs8+hey;$H~{T^5rb{GP1Hs99(sJvfDU#~>F)#& zlwA2Kxu0No;0Ns_;qvR4$9h$Y{V(a@yjUYb9psHUpur5n2S_C>I?X1tx!h%=s;)2@)5UFJli{T@&tu0nTBO>ud9U@Z6W1r+zO#Xl&O;Yw zkzJa>a~d4ftA)ONB`d4L_K#$@>oCH;*QBgcDxUmlNH?*E!oqcC)2tolj6r5HW@ePY zULJ%p8;UR>g~#;0o;g7Q%XLJ4A6M5~0%H23&KbaRnXTfHFsgZ0IJ*j1nps^vYI7?M z7i@lLj=EhzMW?WeNf#SVPX`Zc!T~fqUg~fG4v%wb=p0Il-!qvxLgFNP&#fZ-3HUk# z)ooNqFm%8#kFX>J$oi&xDWzqOj=AH^hG*+zh_gijl^)=M66((U%zHVI>~Z|FVhrd5 zhr~L8PLWA@vGu9{!3e%Qz_qwVQkvdShSEJ)bR9qX?Aj^K_y$EEqxnVUo19^;j1=v( zk)RaiBCLGt|Xb!_eIqDeIo4uI{I86_%;OaN4eR9RJJx;qjN6OfjlKf9YKlILNB zjg8&2)JFoK^5ZJ;7uHnz`MR3`yKMzg;o4eC`sJ;xkT4$euF>NdbyBEY77@W@{@amh zr7j=i+>++s)cV=(TsM%%i)&IvZ4-J4>t!hbtOlnn;PZo^sIcaj z?nJmI2S3S33OY~?@58UZEO*>=y{ ze|Jfh?=Q>#M_!&N_EjsQvnF|+>_gdle3}Qa3*REe)5Mm$G+lvjc^Iw$M)3|wt1St) znM$W%RTWQjj&@ncc+RIHr8Iyu1_m%pMf=o@JSM8{Qb$;+O1)bu$m zFO=e;g&?s5>U(05h^*LkLj2wAcW`&plTy~2+OI4E-By((p=@(@CD5v@!Gh)a+XZek z&A>NY=6#NfK)ghTe3)sc<~}-1XV&CyV7laY6>B7+0(g;-Q0~rK8p9=x6~`X zpFt+oZzSoD2n@nDrRyVUSIx$@O=8J;;mp-|8y`f=8dR~RK=>M}72o$8IaHP1imG`U zzcb1zwBa@YwYH&~acp=JUmM3uP^t2$YTz%WDk^`Vi~ zj<4BoSONJ$IZ03$WZ_;cOBJrkIt{y4l`oct<=R}N%~p`(oXQe3tLI@1gjE;(|~5=FQDbWo@m+Ob(w{&*tXeF8p_{j*94V z9e2pV<>X%l$>X+Vqz&t^3b5EXxds&gzwm_q5|#VG}s>|tsiXls~z-KT2Kw8gh`SrkY(9|X~acyQZ} zhvG4-1qgVxZq!Uz3c2QjnJe4jXweVdu_zMVf~LHrpim|BYCg6d6b|VmuwuUY!$|i> zQ3hGykM9!xYD}@r5g_SExKVl}@P7NF@3u*rydT`xWkWT}QCrd{as;XFi?K=f3b-KN zBgqi?k%vE$MJ1nh`Fv8(;dY>)#J7+2z9)HpetrOm-N01gQ^fgi12Ibk-obC98ruTY zX@MWE%awD&8GU5TtD+^x6sY)_0Y0wgDJKyQ8ij17L|YTcM9aO26Bm+|O|&7NoILFA z`=Pog*4t@DCnvQh0uz@ga4Jd!%CppI=tZss9P|J`c(%RK{qu=G4ed0M3y?$TK>_ms zZ>&nbc}bSMmHc}@U-WXEyh!R3_b|ft*Hjh&fBdTOtl1>3xi5Wfc~`B;p%1-ndHu@K z(CM!ShZ!g>hQ*(pz+kzYMxzpu{6s!D_H^#qCvRdx4z=}m-!?uobC8n%7X$!Hf45Ns zGxp{biP^QxBIuM=l@x6Kw;Cl#_FWg9of$lEIwz8nWDqeUbFTSPKnPtmn5+v%s%_&a zO~3p&pN#2|W%*k3NToSQWx?9#eAYVJ+lFBjbYtK!(Ihn4u#$pR*LMHIS>EzT4Eha@ z3e;s4+&atXK-&wLAj{vSOXCY~CdG-C)nFzI4y#?Wnyp-UUJt_tlBKf{ z1|lM#F8N0v8`3MdB=`izhYfWL#>3)qde?_1W;R4#NFX$1GZQZ+SMAd*)o5B(-8_kt zg_ASQ1Reu7hoJY|H35D3Ogm!NK~bFN^KG%XLhrEDS?vUiPLPFG_hHCA}YoB4Gi0H!3&aB~BTn^uR zdw`_z_xoA^Z?84)VX($HA!`wkV-+SzZ|c4^=0IIFVDy^A4ojzc^tOe9t`EoPEeq@ zFMPrx^Z%hh?T1f3J`Mw}Wq1McmdSRby2+^L$uxO0tn9tdzv_VvhaI~K0`D6YX&D*! zI#24dPfZkc-ow#1YV-fbm|5^Tw^hWHytfPTbtp74i-D;W6M6{;ei`tadv&197}>X2 z(VcoQV}OEA0Z7d&1a-yStFA-WK|&JKyp|8~Ka)5yBGv!n!!l@6sYp+$-6v(!?$>d( zPmLrNR^2^M(9sVPcB4Uma!27|QoBA+Py1n=?6P3gB#B_7Kn%Uj2pM zXdlmO2=2q%Nt8kN!Xsj!-aq8^R{NL<)g@IOaAr!NU}u)xa&zZS4ciBgzU3gCWhRX*7&< zbp4KP3o9!!l9I!F$o4VsGs*n}TAV&ogQzX?6I=ws2n=7-4)juml~)0^>;MhcNywT&Qowlf!y;2XIWv&mP=nl1h-VE-s31h&%oJFY^2##5-S% z%&YW(yzG#%^rxC+VLAOTEiIp4Zh-J8sae$~DQ(J!Mc%Rp7b=}HyEy?^;@NfI6Sid_ zrnGd+mR)_h)^PCjIh!7Wy452C4)fFAYh#?WsZ9cS-|us)G*QoE+>J72>&qdpqBVDZ zeu0YE7I1L~9WW4;%|?}$=g4(zJs4p=A&P3*{epDuuH2W^Yr+wsxb&=($tg>tH#tg; zD#8_Qs+L$On$(z?7`CPpH+@Okm`Z(;li|tleSbv0!Is zKL)*L+e20IK1MI6-hTIcA5`5daE9i2E2b07MXtXJ_PBE`$ZM6)>G)`;l1PNZvE$s( z1*3&za#-Da8>9Re%Ba&+lE`XrCogh%*r))gcrw7+1E9s+zmPu<^S=baKGkZdL#jKGriX&qK)L0v%3n&u^I!hlMNHf1 zX9C#xXMP~_^*VMWe`_PL$Yb+>B``Xv9k3@*qRGtlqcI45Z=BeZmBES1uDmbshsW?H zzW*kwJJUo0uch@-sRqQ;d@h%Bx4Uzn^xFYTNsaNJq*r2u!g1}JrhbutmL3kI{C6lf zMJTK|<~_y(^bCWZ0NYUlZXL5Mp}sClrwN_Sp&}-H5W^pk9-+y8C}-m&b5o0;I^FBF z1%5&th|X&R+q%katQFYWdHoMQdt3e zA|=r7n5lw>`*F5f@<1_q(12aZ-`BWX#@n<^fDBb+`L;QdZCBS}*%axl{;tj|1AS;N ze)#&DaK(_%J$E}rrRTP*mTQl)gn?UGF=#rN7#K8fViq1E*P50nj-PGjekRk(+?>MP+p5;^K?x3-t_K!)Tw}v64^inA`;17fr7%a59yOFjlko z(aBfZ6C+gI{O2BYjhmx>dN<0dZZcAcEr~U-C~jJ_jD;_^leqrs(n(~HYb$_}5}GE% zOHfHo4KwZ6!$o0DjXhY3vxV1VV1}KDL!y=y!R03|L%plt-xBK3ypEw-5Fxa$4`5-M zc1%=$q=!(yQ@&C`#Bl}po1W0SG`w<5=Af9C+b{2rO{_=|UvGGK`E86#{PV9*H0R|# zY(7C&1WR)S4yK=%*par}odE`j9ah~KQ$0~bl-yIA^% zy<{|jSb+CWNea-KeM?VQ)6tQ&u%H6EZFNmerT_J2pMXiKG#RAryuOH7KzUloEt=G0 z0U)qk9G3Iote6V~aFH62y!7syF&?|L17#KsiPmrfqg=9i#*BnOM=SI<&QL$80bT;! zmu((bwZP^`!ESgrBzYcs=>|(V4ArcqK5>Z34N-2t54U|+7iGI4L2N8(vMDB(eb|=+8*uu&OG- zzn6o+_F~I=|)cHp$%)R@G zc2^sBHAW%lUk&q#zP68clC&rL(V*Lh1Xy&^zuZ(Ef-=XKPG-2d*COuW1dU}tzJMutueV#_&PAmPgR|{It;VQJxfT;?QgA{vqb0HvGYh~qrfb29LTfJ zd$3bK^W%j02ftBRd)$9|T9{jb6Fx{dq{yL8^K=Xo${u1?UTv0!${|nE^toqKTIr&4=IceVj=!q?f zUADyKf80IN|2Htb{;(K723}{l2fBr#E2#T(`15k^^$~gG2MWul=;4s{mlV5|zTK}- zo8EUOZoIHptI1)f+gzM zoI6RH*O&^J)d$P&m(j&az_b@{$l0r^J7#JxCxWg2w#2DhiBU;K)iP?<0!8M|={cNQ zdzKjB2glJ!rYDhR1>+n8W$fZ$e;W%2fkz|VVHu7O3=*%~{`nCt$YI2Pd_3z(|FZmu zlV)M6Bby~~f8WY9l{u(!_=c0cEyb(xZQdR$ke{{lo_Adw#4ywyEpK`D-Vj$+ zRjqut!PINDFKleQin1~6?CkXU_pcu{;D=W4HFlo&!857yICARQA!fs6)bk zli3dSjbnWw%`wcTS-v<>F(qIt`6tfIfxTa4hZWAs#bYW`Zr_u8`iU9uNh3f1EBIDR z?38RbNwcgex*kU^%f4zNI|hi5B<^>=?96XZ zYM5j;MDC6jy>yqRM`Saa-3DDupi`wPrOPZds^peN_8%0F{ih^tqKlB{TY+-EbCwXF zqveVZNGM6`$hS0y+#i4;dj^H<5YhubpzG`~U%OTvO~IOB>i8z8N8SYD*l_!qXp`sU za&dC6&7dc+HB{?M=lX39-O0jgSu@QlU$m&U@9S~uft7ZazaWq&Hvgjof~ zu_91+UH%Dx4T(HCx3rj%WxTE@8y&OKI43}ZmQB-63FP+R(s0-{on4{*P_{*`l_#Ry$47@w{I@2}p#COG_vn7d*XJ$jlvkKo^e~ zB|)L@GK{V7wH+SX8utkm(WvVY zI&e%_7@&}39}9hX8;1;r#vCsMwtOwW^{Ya=Xgw8o2RVe-y6W}r*r$aEfk2D9K1umMU6XWQa#y@)OmU=|D&P3&~s8{A+*%A zw0lSZVCm%s5SdFhX1DwJ{w(eH0R6XiyED16;1w)zuYov~)c1B*ukU--0@G^LY^k_v zHj%Wm($Q?mOa0TFI6o&;d79jD7+&u~cL$$@uK4KCbpykibU`WQ*?olhAhkdv0}9f( za7B=G{T0X1Lg}UFPwn5fm*38KxchRo^?Z~dYWO-! z&MU50-^`QoLKhj!SozTE_7?|kl0XRAriT+%%D?CQib+pRU@>ynjb1!w=zUlggxq}U zQH>HJ?{RSZ&4Z-xwVRC9$Cd1e29e zdYcsstG3kHV8JQl1jgw}gw1`TC@wG>0s*FfdJf^vwBYn`J z0U+7)UYEGdMv)w(#+F@0#M9w#U1fz61j7D)^C6G!A{R_OVEbaHjuurbD({ZU{h3Mn zI;vSsUTaeBVWm{xgP?rbrmSZp6%_A{oBD_v2o0#Caqp@$%|Ftl-;n*J$GQsnKUz9E zECe=&Pb#dgpCDZy6Gs=Mp-|E%nY-fF9J}KGztQ5t&!0a4wc+S9KU!tpk398bK;@IhE(lTg=ED=lm3U#)tq%s<9Ofe3izpPaDkAWlc3W|vMPf6s} zU7r~j*h{_xC-V3~%gCRL!*WV=`RjT6Zh~R;8o*c^2ket%e0>D~iWStmroj8CF!KGx z-tAu60oSVxkwD=z3zq=|8s|Y|9wZ+>a@eiM5gz9f@7kf=t3pEJ-TzC#Y#tJCXm$HJ zYauI@Zhs^l%sNHKP*Ppivpi8QKhiFBlDDVVuh;Kz8nehcX!toed2_*qAL*_~feR$t zZ!$UTIEl|1nV-jkSx=e?k0o}Q-|3sVt2Y*tgE?ySSC$-Ry8j-!}4n z8z|+dqbwKv)I7YzaBAD-@g=#3mFgO$Ym=Wsv7#wv^3tWi4R`kR87`gi86#rvccbT< z#JrsI=K9GOi&PkcE`Xw&m28n6QfE7SX!x!gWan-Z0 z{udYx8pmP^H^@4ZJcE}VXRT}P!0Xvz7LdOI*NN0Qzq+n726);2n5Ac6@CHaf^TKcA zH2G8aXKM?Nfq$ zL=7x`9Hf!LF3AxwB|npqerxrZSDIzFIhAZpO1OP_w4fyJzvjc(t){Bkym$imdca~G zlE$7A0+}W-MgcengKxvs@y7!=N6wpqxL4?FYES*|gUwz6N+!m*+?YYFxPv9Havw~9 zRf@?|yxz8t3uvi@tLd2~L`oc881c8APWs-lSl-5C3@E|Y9K+>M)vcV(p;Lf9DV_L& z?&22rSNJROcmpNm)VLY>T!gk@MfE;xBT7kkHwZ{cH>-qz zAV><*jnds9NJw{=pmcY4w}5mk-LUim3%k$Z_n-IMJF|RY24?m?=dLS<$mZm!Q5B2< z2PM|mV-9uG$M#5p_&-1{i4jQVFBJy6;KL!gH}diwBmnL1Z{*~sgKVB#ZH?!v2{GR& zJM+~mB|;NQxKMtzTXQ28Z^SfYEiF!8Y9;3kvJ2qWv|ZV_^bhEwWe?ci7LOS8!ID>G zk|lO{KW%3z$GLmi=Kv!C6?rfBCr(VrCnAExCz}A=<@e)9e8svLmNB;P`1`GQaQObU zRY}(LL$LVGMNFEmr>J$Ze&`uFFyXfLJ&cB9jr0DujF_^4SIoxDi@j+k8#+hSPq?e+ z8eg_fgDRKgQ%k@ROv6Bq)N#X#alV5>LjgCE_rvCeO>kzSKWf9fyb@*|S?9f6QJ<}r zfBwP-wV9JyK4LB3dI?BavtUEfFz!#C}X!ZHIhO=3{Q`NMu;gne% zF4+2I4UmtAEtCCX$|zu5Y(dE}7BiWRW;B*vl`+jCOUKlCV)CXukP25-_-VE$5I%wG zT0ZHxhPRzTdA3c|&0`h9#GQ>;rPDu(&fdOa^LkR9_jOpNUNnvP0w@xXDevy4x4YfAQCq$dMDiA0+eNJ1(^w?qHvb8Hbi$0%;*0MM`@`Cve>$CC`0tDL zv49^uruN{az_YXMdqby5LPO-Pzf_4N90NN;?~;jEq7!4RjfbV`G-rx%?3KkJD}8U0 z2I4nX0lhC^QEx?RJT$9!Cx41m!K6M)JIQ>Xo$RZW7?BWLy;$S8-~{_;L(Q#Zta@1V zR^m@&I-8Q2T8C!|Bj#$BkXu+R+Q!Zy+K?L&51)Picc4K_7{B#2w@)kqS%r8+JBv~Q zS@zwGgwO7=m@2iM*=IpP#f5bUI-0iG|c6o70JcfGcqv-jJK&zJ3isg4Tv--;})LTLsoafFB zPirfOs!hkwYd4BJ&$hFK_}s7iImC{7)$@EZvi)ARW04PJJ>3{~!Wyvju;5l^ynFHG z=G9BBk>lMb;>+i+?fQrLy+r^Atc&L@K3)Q%U4FrKQP{@Ql;I)%Ql*f- z1~}JaHtueeH(c9T`KC>l!3Dx4YnX2w+A#I2b6-ot+A!!BmTn2y6(>)iI^Ips>iZdp zAZBjx*GS>*KVU4#bfdpmi~n(lr+cl!;Oo{z`6_Fj(!FUPFiF(ER5d{#cPt-*{-k}V zHx6S;|0bOzaQyzmP&+_x+#LG{tLXWVBKdpn_bPFV1SBN;yy&c?(wX{XhOI-yTe|tn z(8O`=;oUCMoC~eD*qTh6sj4JIh9t|0I7-0&a-tOXBgQkU1wIl0oDO{&i))elC=Il< z?Pefxi0IH0NVEW=BR0y{1=n8M^}eEPB0?(_SDc38XVx{#FGSf;-RN!Oqt7$CWROsP zF*MN~eDxx*AD+Z9A{MvEY<<2rCN*XI!o;>IYJ=I2MCxoZ3Y@r4fmP*Dle(zfqIJTg7o**uhW9iIhLp<3%6#> zC%E^#7H76wYe6U@pJ3~`UOvyf-heQ2M97H0?9!clc+Q7!c|blNy`wQBV-y($vkl>2 zs5V8L6u-m*2wiP0!^RYQzsrmS{*q$ZCxGo@p@zC|`FDauB#-gyG1+(~r)wMF!(fs4 z{QMPQ{yW)_0QApARVjaFC;KL4dn|5&qvEFlwOiNU_e^6Ixt#o5vr*uoow4bNYVYvB zR5}aHVR{AC2VH#PoqGlqppDPH1e!o#j@v!jkYjSyZ%+w$Cc~%MMDq$3;z*7kWoH+2 z{?++67?Pf+Sw-nl4f}3O3ATOCZ40(K99SJGcbL1Tjk_xM1c;1f+OC3D9pNo;CB7*Z zL>>ow6O~9i$|VK7gF4Djwl0+9)szMwbP-2D5T z2yQaF4R@&i1PpX1^pccna?tNVT(A&#{bwF@d(>V=yV%-iix8p6L9pI*2@=?qYOc+X zZtXz$RXk3Z?hCRY?pF8yx`dT>o+t1~D2D{xO}KaTA|56YXS0=lt~H^&`Tx;9*>7D3 z&2Wv!QolKW4R5?q8f52i9Pj5^M%O)HxuZrjyI_KJX+BW+IsRsD@Gsi8!k9hStJ9f} z-{GLDN|&!FP1O6$cCFtU#uTVw&i%pn7p457$ggjYc?qTr%B*u?%s-rd`s+KxXbvfa zcnU9Eg7Cy!HySx|yhXU=aG38RqJ`Di<5T7`2QxNTJOS}TR81f=BZ2?(@&2Kk+US5$-;>3fkUkyL9DC02w4rG1a`ae&YPyz|&KOjVZw=iVfEdh6 z!pV!XBN(^wd1s7>ZyA(onqeLoTghY@rsAK0s7%Eg>hlhC=~hBskJsANfn+5 zOM|}|Z@q=D#$>H{=k!2k%henS2-r>jn1QF{=*0a{(V%YqE&s*H9>Xwi?u3P#okyf6 zi(a6`0!AJ6Tl6zCQv8^Zg^P#PF@0Yi!NQa*N*cz$Uf=In40_mTZ&3?<)+wLg*qgon z`;m2~P-Tx2e2ZGycJUIEgyZeZ{XG^KxEv+$*A(~vYoRnBdV^$P<1|tjg{E%HRl`)f zAdqtJLHLeONsXyEMo86$2&);QJuaK9aoj*<({Nn(p&^P?>*1GKyheMgONOPkFF%U) z8x6FclifDHjvub_7h7ATepS%xtLa%KZheVQq>m0FPECiI;9sl^};^}a3RwrqwPA9IcQjzFeio0W4q_Px#= z&m_xyY8fsL>^So(a6^oop9eAR{i%N(aZ-F5J6n3S&%etTtl5rlNR3bCQam0ig?QYr zWs$_MW9$jB-Of5F5x5HRo~PNg4D1vUD(&GBlHOwBC0i4s7huI#kE4ATPkp^9qy2zp zbrkqn-UGaFyvSAmg*xs4+I^)Pyn)DKVN!+oR15AsV8cb))MDUN9JktI7zMCYF2P>V zFVLz?f)&YX{<4!QHDl=-Pv@}<30FI^qUO(m=j|ep_oEKLmN?)F^UYqFdy>C*alw zN5_u#+Rap(W+(IRH|4#y=OsW@{5AakTgL8tBJXOqxp;kk>QP=`WCS3sU$ys`^mnNc zG!`6Ur9y$wKE;lpB&At^)e*~qUk|KJIw@MteCebdRbs%6ztxSGef8|>MXftzZJ4G< z_1%A4X%lI8(aCI7{lLldkPYKhqrk8s3M+ah@{Nh&Mou;9#d z6~-MW$QmDHnoipCQcdLY{dDkP=(eI}x5w2TBv$FYCxi`5z7lq$lPJt1mMI;_Mw;)~Z0EDdD?)K^D6WocccJG4tq?vYTGK-*;#a#P zcb+R|M_?^mb~BZV9Y${StG4ERQ{I&BPq+%ZS^C1Ze?*lk{gWdJbI>%dQtV-iXfNrXx9h@#}Xns)Clb)6y)5);0ZR8_<5({U|Q0ox8$R4{5g6?_8ka#VInk1{X*n_VJpP% z+mx6uw}5L3wmmY}^!yNanj9dQX_+qqL3!C6^+F-O>0toDNP`joQ}!>a!_6oMLK(-^ z)m8j<{Re92&qK78(Lo-9Z}C_*T$Un-D;#Or>#frx4}FysrFvC=3Z?E^n{_DxYD#4JAZkkwcd!M6yeY!X<6M0eH-37X}G_x zulUF=l07%^<>u5sYGhNRgkWR3s^G56?dLB_si7z$>(nIqY4amRgjD=`FW5VNAf1y) zgNvcn>K-4;b}(Tr?A+gMMmkAX$>A!Yf7J}ak3s!f=9y85aAcR&j3@>_zPeOtOAHK0 zLDJyRmIh8>%J#2Qw;zR8qY!T*R?N1zi#C%&{l;6CJNpE{p2t<88A{hN!|MPdvkmxN z|J2mPpDZ`>`NMqx1wFo0mCM2OFwI(`@ddSgG>=I&Sw=dWRn^mvJ6!DDVprcvBUH70UqkYCAVxx0B^ zx!O*@nt2weh@2NLv8weQ)|wOX&AV=`DA#4m%g-bb6&H!Qov!C1*yQlc6@0 z!u9`Zj)lWIiMB3h)-)~!3)1>h47=M1xyaQXo^2;j(6?HlE*pBMZcTJ%=N%MNR;^|Q z3pFMVA|5nFDN5fZ0}CDt&eeCf#<+pqU zZR_uFH+ZHtoJI>@#nxU8`!#OY*->pYaN*3FRh#bc8S~sKwGa;HG}+*C(S5z=9ul@w zkYTq8bV)J*1Yx&Dts~eMT5S)O1Z-~!!?+&kX^PH~ce_HJ!3T3$~m;=US^bO#hKWF6z zosHH(0h|9wuyye={7YwO*sd?+Q|BIM%NJ-ul3_rS65i>z4STR~#@^}OvtbYZ^5)~! z2P)v02(yWhMSg&h(&igOUeRfyR+Re*#l5B6sL=9zES9BOsDJi7z0uID*VO-TRp_r4 z80NKibmVaj>OAoUuW5f2r#N&jJMQ_~cKwg~AH*+V?ztFx-K?|GJmrFo`egt_+j6HW??J?PWkdv)NOQ{<|@2Xs5{Jb4qFVnDsEDY4`Ozp0dtITQ$-srisR z%1%TG=KjtRNJHaxvcl%|0}6mbVP2ggWzfya*CIjakm#p>iL;YA2_>UqNV)Qq`nm5- z&hheAdat1ExZ(+h9d>2fO}md&h-^xa>y71w<_%-I_P*gH%=ziXni$ekF*4SvS+DQj zelElnr$nzQa~^admQvbn_h&u-F3}b5Om}R07GnQC#k` zGj(jZTgM~2^+L0;erI)=A7t;`j1-_@Qxmv5@n#w5FmwL?FX|eoz~(o+pH8u| zwPhA-MK}#?=y~oW0k1e{BLIy?-kamJgu_LXrK*tHG7L@U^BYDChL7}mJCaCwoW`+T z$yqHrXeD9}L@l4Ni20J4eCWQn@+K)W%u&48&YM3ZEIa5*-jk`f*2YL!@8A;GT(wjrriy+T3QBAi#P4RZfjbeCDyQ z)r3jfkt(>D(&P3m(s=%FPb|E^iq(^*(wbPaFqt>XZG7Ri!u3~VcIbIanlAPuJ+t+t z*zWnb3ULY{n|(_R!iw!kG88|CS_0#e?ypamRzph1BFfm9dNF{nqG!Hpn;|t+61kyL zk9}-AsJgA3)oT^+AdTnV-+f69`FS-V@o6>ScUQ0p<+@L!Y*l<{X7B&3dvegbijzLR zasM-)!H>tl{nEjZ-nYFiro=R?sN;0WcoLMB&u&i-1y0plu9W7(_~2}8rsefg2(OGQwbqPF9^ zJRKt<_r?=Ey0_zVe=~J{a)D~Z!vCcG{1Z95@pf22N2okDns`ptNxj&1Oc1SxJ^Bwz zcOp-(ND(oz!r@yc0(3=bK~Xi>``WlVJWhSxuTkxNi!2B-Q~Gr)**-$_*#Ig96v@;Z zsckbnHhd(79v98r7trr`=;KlOEuR?JjuOnd-+l;*BhWAQU7h(9I7_D#bl5lT%ewJc z+|VFiWioWG;Sh4b`W|EUdy-5M4##Q?LB)|>2BsE)NcPKn9)04Wjpy=ORJjXPHqAwG zU-+>#>;-E$=%&M&0+Mwn?jW7$Lf1B4`*JUI1)WDcQ%qiUYt)9lH~%AVU1Dg-=2V9= z9QmfaB)%R3qu{g$4Z-JMvZnjLQhD6D97~f(Kw;6JKs+9fZtv{Geb#>e*_#mXpc}2N zh~OUF;`xE2B{L+x5T-4d88YZ#4HVj7AAH7DrMc>5C9P_0*vuU!O1LIxOx>{AF{+ zzENy$+#!u`%KvfIa7WJaeBV)Ydp2Y{$BJ- zl|B^LNaS8_n+8LHWC7r2Ft6UJrS$#A&u+T>j85-y0ckwXR`E>`Nb#+MIs<6~!B+AN z6wh!Jp$`i=og>M65c*D&XV~6Cj{Wlx=6{PloqpLRyVVcJF>y(T!$&cz%5GCwZtdq} zhPVCdMR52$b63Yn<+NUFRKBI2SXpy4O8v6IW;U(^9PVs=gi-`*7 zGN0Qw>?suDV5aaA2tD$hle-1(P*i(Xf1Pm z1p#6gxERDt(iOfb@%7v^|=ZS-%m z-4DpNXb!MY77w`}Oc)j%64{dv_m1HONf!wCInlVQx8q&S-5wMqch_c~d6r$uVk1s| zucoOv3tQT7ILiP(SP;nZxdOPH7lzZK<`Lc!d*_!uv>lyq#1AYr)7e0y9^S9>vs0+3d`Om_PX} zOR^Qzs%bTeN`_9Nni0xbMCWL9(MFFc<^eodQ|_$gFzYH237-=PzzE*Qq#nFY?%qHS zRg6_~i|CH+_LjVC?KmMy+M0kd#lX)a+V1{Q`&@-iR+~OD0*ZCxv}5q~t6)Xc7{Rsc zfh}>5A z4t)yTeL9A2L19mJ7a*^+u&K$TCRB*|e}vt7M+I;lPvs%rn>O9JWaWy!P!}o9hy#*K&wuY&>Wi{ zZ!t@s?vOSf50gj_kEDj%+oQTVjuV4u;uif62_i5?5XI%g_izR;6vLJS08QJ>oAj|( z8jLf(wOOhQn^6H#SI#Q}sfo0(g~2n}UM~ISXJTgP5=fnX_ zgXwH}6dWKool)@;XJNp2w0Gr_a`n)94{FUcp^>VSNx6QO*uxQ5O-M#3y#&(&i-#jOeiR%VtI_nM?HBOvP5ibln z$y{}6HpwrMik6!_`+WCNJ!)Qf$|4&^2aj`o!u~PZdEq{R*seqpJ~`AC*-D2Xzj2?S z%D(HgcScM~DsfDM{k8ax$HX>Fm=sL565P*j4Lb$%92MfbsxZZMNJN6sCey~_vTtF7 zP|3-G!jQeC1Y@7u9@37k`gwy<03@hh#Ie|v1kPt3r_Fn>9L>}tB2k_|c@dxqNJF8! z9P9YasS}ZDBQ|xpq|Q(aA!8|-4ml&@!|K}+WoHZ(WNSac1$9t*PKBxp$2L0DzQMeQZ+`VX4OJEFxG4sXG7TbB{ILqs27PhFZ>DiEd~| zZ{KzLBt#JzwlE=iG73#U1x{Z%AzDjm1+M;gde&v4ND76i~dp!C*{J|4(|M zQYIl0dhM=05`51)t$S&qiw6@BU?ppEugas`EzhRRGpzPRS%0@ehxu zQNZ<4)!<=XMPcCgzMIhK#KW7>NjR%=C2pwVx5PH^Enz@K>dCD=gV6||L$hm z$CsyNnLG#XM*i=@%q{&=2Wnn6*ul_~)9C&!j{Ww3V3=Hed@kv_j7oI(=^Yx2fs1V8 z-&(K6(Tn{c{T98eG+iVQSU$@TXE9Ty&9|g7Zz1E_MPP4**wy;N+?<^G;As*{xdNG3 zFFHlE1mwB#MIg3BvsBP9}H>nbz1h`B5E0Z>Kbt@?~NSHsJ! zpYZ_+AKdF{=+YuhoeL(wVwI9ga_X;7)Gs@1kHO8k{{9y6g9sNc?cUPt9j1jX_K z3h_Wf@D2b2ZO1EerTyo|e6qL|vXEa?cWGoOs-*&51#8kTesNgeiqHHFVcjY)SDBa$ zHMumJ%nHeiv8~6?e=E&vBQ5kI=(F4y#Y&Fz(&kLlRRkh}gPmzhl?HJXW#fBbh;+Pm z%cS!7m@Ik1Il2w%L{Mb_rK14Ojtk6c#5+|qgXuY!th^FlE?5s@i_*Ql4+GMkz6U{I zf?HfrI`7Ar%V47_!c{v-lCJ%O1cifxa-C4p8(VN+jHC~Vm{12l*WlNR<W|x{RZ~~x?A1(?hJ0V^_JqX*QI&M$Oo&Kmt64Uat$u+xEtY_opMWB`c5BF z=;QIxvELD~1s5o+zfiAhvwqLmIlAiKnlUI^YMkO|8`vy(ydMS5YG5)jhPFU{r!p?!uwr{5tj=Z)Y zc&EalB5_S*-*%3gY+mhhpav+(t^g`C5zyGj@I*5|V^w_JawVP_XUrv%cXU1lP?i)oC|a4# zl<)K?l1Vq%E$XytK(7e+Rl6h}?mK{!D1DHu@vKRZ`P8TOv~?J?#odg0 zo*M5GUNs|{4dD2~zw0&hs#rd!K-@j<9oUr6cRJDAUbia9NLvZA>^Q3!?KID;@>-kQ zd+R9c+*5IN%dgzUQ)9m%bT~3+zw7!4GVj+(!Rbt3{M6`-sjNbxbB9KF*dTPemkahy z5z6uVSrW|NyzPvTHl8h0rDb27daLNo0&}-D-$-{}ycwC{pF3VZ@P|M9K1*saoIVN? zw0ir&be!vAR2?I4+>C(vBkg1yT@W34OfI=#e3)>_9Q56WHpzFP6^G}zlDBlgJ<4XS zEe%K{eE#>}zdk^!_|6To24JoafYp4fk5GLM0z%wPJ{((uOaYAR0bm670PMvjM-tKs zk+f^xA>kO6LhlA#+ETKzvR}6RPwMAA0Ku8nw{M4gIOk6=O}S*WE3ax7c>xkZ%kF@M zS+4b|pODugmm?E<4%4uFeB@XhioJDN8g@CiDrpJ*w-9`Em&J8kYcwQD&Ikd|!p+aV zsajMsk;Y#fIgW;y0U6MLp}ovQv$d)*M(@R7{ z`r)B;YS~7{BOIdDI4x?hvFU=^CM4GUokAG3qo7u^_rhkS9n4zXAA-9GonS}WP8w&d zwBf4#oUJkyX-@P}cWH25Wk!9pO>l5OkW_{vh})mS(|o3QvBhx=#b`M4?yL z!`^h(6S4<4^hwC^xw1*lJ~v3ta>Sn@t)!_wBdEqhNvdTnQVJUmX34?M9DjP(El=T$ z+>#Dxl@EJ}+pZ{(@!BEZ{Rx;6-q3!}kGpbXD|vm{I#8}A_ZmAY>So~aVfPZUw*`8j zY-UbK!Si8gzM579QqDT2*-yQi&Ic%gdowW*duaLuNqQaRAFs7jYHI2<*pRz}eTBfV zHR%0yqvO{54nXgHxt*Y*rlBG8`7`Oa^!dL)C5HafulcO!I4&+PVGj*aP-*xSFr_R~ z`T1vqjc?!Za|1Nb1%pV-R!{;x+EXM2UKI7q&(rrunlhj3|5QMj2_T!H{o^lA#*`uLA|E<5Or8KD|{zJv?;44a? z@CgXVFQx%%^1}ZZF^59h!l)N{11Nm5y`>Yk>qQZ*slN@yKHe_ z8%;Dj^5WY`FOYc~uzcox7+G3nUGa}cpN0v6RBYOZU(sztnfLn9{GS=az!UF2PxB~& zLX0T_B?MV6<;_&JqFop&VMrD#zOi6mSrx%&-{s7=I2zzNrpA9^3 zY1`lnzT3%K=Tnf!q?P#a4R>LAKRFdQ8dARtgySJv#TKsN9UT<02^6$R{_xf5D|XNv+9%V5&WT z((CMC@z$lO>ETD)Y(w_r#<#W8g`Xd*w}hOg1nesf^_a+e=u3%2M|sS|FxaE@tK)v} z(3w`VG)3%c6J}X_w-SFp7H(`p&$y+k-z1jRM8sm(AEx`UeU2Gm*M5HCK^~^dvWQLg z01UcFfGo$dCgLY?Z@F;VR;qGEc9e9(_2~?e{fYASG0-9y7pndGqqf3R9z4O)lLLs~ z(@bkP&WF3kLX7p6U#v#-hGgo#LPGpz;-oH^l65kDup(JV_-}p0*Tsn8@f=0-8wC&C z=JUZ#dcYG`*6_j;-sbm+5gIPQEoPgbr#`MlbJx3Pwb%*3FyOv$XAsZ&^XRgllFhII z0)bYd?-!nmz&-^NuJWdoo!N~%c^B>Cv$~!L^$!HVH{tr_wQUIEQs=bk+RLu#1pJsR z8+u&o&GlpB!rXaNcK%|L)+eqqODINLSU$!wfrEWa$Mq$qie%^r3VYL8f}vbI)3=89 zVd_S|@FRaWQg~oI;|+*t*51A=Lsy=IYC9k8)aYiUej(G2>$Y#`b-a=Q&Saq_8EQz} zTEYiwYxZRG>*4m#s;cj7ZBJrhK-zo~kU<5|KhnS)-plcqd}4P#P;`sea5w{6@jn6s z?tD*D-<3FXYTd?t^(20YMO^w-D|PkM7lir?L}E36fa2Kgtcj1uFWa8Kt^Qq>b1Oz9 ztEQda9-hBg8X_@36E4o@ZHP%P50t?%TvMS#esiuVonBF`Ez|`7Sp#*r7#KinqwXbs zbsi944agS1nWA}co{=C4E_PMkTPf7xlcJ>*nVVf)*@Qi--#DG9{MSNjn`g! zYPKe45aC7Wz2+63xvArGri-Aj^s(!7Yl$Q93-Nt$`p2Ac^J_=N^q?5B0X&0kT*F7Y z9N3BUtrO{?F*{ot25g%T6)j8D&BFO~^K8fwhvV|94D z+d(K*1=1U>jXK)@3H?~TsntGqF=iTKNrQ5;`Ob@smPtWM-G->;HJeNR!}mz>wBQ*P zCL-(K0#4r>v>7qji9eJoP|(Z~+38TFS|rQq@W2D0(3KDzu(-Urf!Ed!iMkkM1$ ziN@;#_LYnGM$RCALH%jgYU1iKUt|m=0xchT>y4`2Qmb|ol__fZ5*~WEAZNFz!HPF% zIm58ma&oIpWS)lwacfYj+u{F;bR5nTUxFXzs;b@@&<-=queL=q_)O0?qRcR=FQvbZ zPvZyILh?B^k-W<8%;PM1G59z68~uxz$DLCCS-Y*37)0b^DVNMiV>bKQ-pi{E(DNv= z-i>WjFoGR)f0hP_XuuBVmiAdqKWL?f$51leb_zWXX*+jrF)NM<#d%496y}vJ71Pu6 z!fU%$$R7BY-(-X2Nss=C_#G7dsrBSz1$@`G&lJC*?Mzrvx!plVGMrn&0WCRg``)gz zC*#zIWVOmT?Ul;I<9z1Xnsqc;z7KzuJ-9=1wDRB!0;#4}otY^kBg4D=J8%F?OiIFT zwg>V%Nez8?+`LQbz)$HP)|Kta$w&{=DII;Dds%~ZUuT~Dw&`aF^k6U-#skS+3}GtJ1WR@*^*FvS zW8dEblI$Bj;4=~oG;IAGZ2ifC%rwrJ5?;$L7@mY29tBUP3N>LgoHPc?OjC&qIj7#K zF-@6ahuZX(!iJqxq*YxE?EFHkoD$6sOhijA@eu9RCH)z%lB;eZH=P%A0fpxaH6q?O za%rC(7{YyqCev5LG85)?h34!$QuQ5Q*0L)f%!84yUnm<|{UtBji7MEkC+D&sxp2t!f0Wbuq)LBfs|Jx*ft(}V8F&%* y=wMcjfUx@>g38232&7xg(~^N;*< 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 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/lwt_2_TaiESM1_psl_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/lwt_2_TaiESM1_psl_mean.png deleted file mode 100644 index a38a5d24dcda4ccb7f5aee562ab124bc88fa5320..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100930 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

Z7_7f0yt1B&SRF`>*S~ApIB~e{*=b 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 diff --git a/doc/sphinx/source/recipes/figures/weathertyping/slwt_EOBS_4_TaiESM1_psl_mean.png b/doc/sphinx/source/recipes/figures/weathertyping/slwt_EOBS_4_TaiESM1_psl_mean.png deleted file mode 100644 index f12215d86b63339eb44c23d8291b3dd67ce205b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98546 zcmeFYRa9JE*d*LYAP^*2a7l1?x8Uvsg1fuB1VRYz?he7-J!s>a#@*eWIlSM${)@So zo4K8}V8QC{(|vmHXV0ehjM*J%0 zMrX-TC@LBfLt0lu5(Br5@vlNqSbs@Gqs4_=j0{?N&0Hx@pP!kTs%pS<)}Y->K7o^! zW~WnbR`6IW<%;@ea7{SL`vBm_epHde1qN2=Bk=RHpB(z@|NLha{vP!1zke&3zko3R zd%mgvH%RgAb+GGrr2p@Q|Chs4!HgIb!0oid=E7QGZZ%&~e{c0&S65zE772L#cGYjS zaQ+jl&>bTh2r+vs|u{`h9>R)_>2kRkwTHUO>#U&W9+o z*j!X#g_^|QrYf}=c>iogDlX@}kDCKg1Ix>VsHmugvMIv0wzfe|oOUZCYu$n8=jYu+ zLm_8p_7t+oUo|u|%1=__<9`b0thL{+Y-YHveE#wUnv#+d4wYymh1HA+FJdH}J8o@F zpO25PX**GCaA>G`iwB%YpJ%t)(bUwmc5pB}7(>eKyr&rCbaT2oe%!cf+b$t03hTDy z06#P|gf*sBXO0GZOM0z_v$I~*&BMd6s3=t64k<}V^VFVUqD@l#{XwQ9$p-wU9BJnl z7s4f~u^AaQ{4eXl#JOsv)HF03C#|QZFHiUWCOpqieo|6W^|mnn-TG^pUMB|q;kZ|O zlX>#AwCa5+cha_J<+@|HUBk(yj zqmEZQvvPC45D*eV>MY`}@A@O~_gC6^Gcz+sQrW{oFess`yl!m|{e*;sx`O$jR8q44Xo7O@+pEjcefh+s*?aJ(5;uHj^VH_PCs_DQr z>9Mh2N@p$as|Scm?R70IN(gXps8(GUZN9B68nX=HMTomPIK&9vZ($ss2YtXE_J0~A zjZ)=$1-@+p6gMmDWsT3Dk$`s}jK9iDNyV6GBf<*K4^8*%;kh3!z@WA!L_qF3=opmoSuSYP^{Jt}2 z?%Ijp>*nv+SVfN?uyjkA>b-U|+%E2Svz&l+Q0@Edd2_N1?(lg$yS&V6YkP|2xWBto zy<6$-hRU9DDxJ<1`*3)url!_^vfNq@rLU=pS6yBG_PGF1RJ5M7XzIN>3cTDIp`)WG z^LufKiHTuiVJRsqLx0yD0Lpj7v{vpE05JQ^mJ)oRAV-Z&OwiEL4WCzxSz@xX^gff| zG3kR~;E=kkIcoi0eFYwmSTnsZq@bapo1SkL@yp9QIyyjatN9bXrmBaog9EeGT$uq- zs{l4ldumtCt0*c?tR2JRa9HEes#h2sg8KN|Ht53D2qZ<=BBF_6$eTBDJutK2!P{asWCC;ZS%MZ`M;$}{f zMIz$6i*@=&g9X5EAyB1sIxX>m@TeS?AT9u0W-QqOXq8Q7${D`IM0{66r-!ah|Gg@E zQoQpQD)HF7p5G|2(q*#*eC(Z^VCa6VpLV{E0VD2yIm$`Px4WSvK}lJ}v+TArlCtD; zyNnfSVq)SjKjoy4u>>$-Hh1CnqOJ1YFU;B0|;E)BEz}%fAL2{8isadH{4>I$m?d!jc7i zcs^h=w2=)yROW~T=PFX&J)U;blDQEHcymn`%GLV%R7Vo>LZ6NCo-%n}nXA%ZW$?K4 ztgK{uT<$OfAJ1X4;0$r`w^^vm0mcz4GDCqJgOE_iLZ9({fIh7uayE(fXWz$TPWdc> zQDCk-u4mQXfY|T#xzXiWCy7CaDMfZ9lRs@TPlDCuK-JO7Nu%Bpi&Q+^{OYFTZX@ii zQdrH#m~0l<#3KoYF2@BG935F;;8E%_Zvil4F&_Mw>G$H%A4NR=^8EO=4vC0}Tsj)X z^Ps8l7XZxIRIQnU6@#!;EK}O(V2$?f z4KOKeY(aFsG6=%89A;w#J7XC#wzd^6HW~IFjmxh1At510i;a~fXkECX zpsAs&bvaZ^q|=z1kprO0yg?L1^}gquSdOBqW}-Z>moN(NUpoC@}PA#6N!g0B)G$`^VzxeS0_8KC1c7#D>z+ z()vGR9>9)jI+o7O-qG&|GdPSMWxY@r((JTbW6%qCSgq%KA0(f_Qw_k*@bGZcc|X2J zow-td0bx)o2JlJ!`b^Pr8KW;4lx1SamCk)ZLGJDz>@KX<8{T@x8WgP~lC~+;C26W= z+vI&*&GYTrT23m9F9ab$=yKP)-^f`{J{H}S<+3pns%Po5Y@jGdJIp;aWdwc*wDk+Q zdG4P-Xo1t=R@UH%TtRcO($XYkGi+hFF@sLdnjC?or*T8OnC64JncIbrM6Y$e$ z&0hmK^pcX2rdB=oXDglu_(Yaa5I~jYl)ARIjC*=}%Xh688zKN6RqJ_eso7`?aJo0% z3cyj0atVNgMjL-atRXdGu>Krm&|RhRX=(VjC!>c+raCEdg{3u&Cq!#Hwq*69tAES? z;0GD^4_zPJk-}Kc6W8J*p>uJ~o)GcaFsC2{$Ba;ni1RCD1g{;PfFaL^RD)dLh^QCT z*H6a|4!3myg-831&a?g-XrxDBEA3i^D)a4%Y0aS~QpIb&i=VknZ_sC7Ai|>nHiX7Zc z#eM8e2F2PUjM*zV7XPJ$?Tbg8VA6aoOae+%=q+4D>t ziWH`6n^tlIn!&r7Sm<~t|(*0vnbjAH5+^zC^q_wHJr5CW>X_3b>^#;@;*ul z{YI{}qh6$77RQ{FsTm~gW#|K}$Ut!KQ1`;b411(nd3e6z^{Zdl_g_UIVImMa^ibg_QRE^o59=HcbC$HU6f{gw->< z$;cOsEYkfu*PF7;s63hFLV<)9YqH&kcFr0#;W5_k=1z&WXH8}0`?6ySk4pv z*~ADG_*Wfc?rg=03b1?67f-Zh&+mB+VjuBB--Cio72L2AUP~$%X@UYI6(pu)khc;z zPYHV{o)elq3TW7m$L}WvH4@({LrE_(M_WY5l+U8t3&iE6&u@lW22V%oUF|hbBJ&OY zdf)6;MNQK`ESOQcAhcLsKM!B>%c0GQBw$6C7^sO;gDj*>Ke zmD%e7^MH6H$#J+irEvv2Su)la#rk>rdCUOeA91Bg+lNl3-o7{z*r=+Oi*_W@-(0-x zjLUy&>qAc$M5Tm#vP?&P{4`mbSzcV`@1P{yZf?@sV&x>R%`5vza4QhEIEX3OM zdIdrjO=s0|*Su0f z2k@@#5Q#2X$gphquSH%po#;M6FLLZXzso5BR15Q)*o_T5AMC0j<1eK2$a;Q$=@}VN z|5`j)3&_dCTkm&x^cp#Q9BNc@IMrD&r)4n6%AL=$^%#1~=nXz13(mH&BqWm~l}zte8tTEmQ17vToBO+lgsVODs7= zc_{CD03Hgzl#Ng?XM zGO0nr8)7+7502O|jr%daa?o>zzcZP0_}8jdOY>Gjo_pq@Y=neM|j^>^-^q<#1M|d9?DxN-`6`` zD}P%ere3=%r1U4%?a@-i&cE-nb7!R5h^tvMplGPFf-L{rErqQHAvL3q-4@GG zP3!#kTbF_wI#%N=x`5u6*&>(vR!Zbor$lF0d|xOV9KmZ|v?qjlB!Kgd>e{NQWx!OV zrn;{B#3v@!I8T0&mZtL%;Bh$~UIDt@-4TyXWFD7&<;usILPpC1Xx@Tch#LIl&hGl& z+!cAtL8&afgnVFg+sD%`bI3R=5Pc2fCL2eXCtYc zQR+KmVwLlofDTt82r0*>9vX7@@Y+1wo!>ilRHkLtg_6ptR9$fVelc2Ut#yu;<6DuR z&LcluqLYw$xPkjs-Q(wF)PI#tCm|%*a=Be&A1oiAXTM zeV{^<@Gk?5to~iGYwxoNm*b9XdxhR&2N#4o&F0(3s5RPF0=1G)k^MalSi}Zqr@uw? z)p^_-#MITo^J?Lx>r;P{YE58jhQ3&a)r1Jv{kQ{bv$DQ?G>xm4g82%eGh%@y-Nm&~O7E8sp_J}2*hD#vFBv7t?o%qN)O4q1z;#0EC%u_2mV>N?TBZ=iq%Hf1n)=rdQ@ zc_4BvWaJ`&mfQD=>O;p-97f%96aP*pTx_RXZDoPV1%^=PSj|9@kMCj-gxD*SC z_lV`Moen}x%Kri3aNPn$^Qo6z$B-GZ?_k$wk*3`r@HpJ2vh9@`iyb&=4qwbSu{3iP z5VEv` zbd*}W^?lX%8T7BiVlb zA11HgYxHelP_5rGblU2CF=J!CK{XnLj&wUUnpGAnKoFGj%ge6iCbPe3Q9#6I*MG9u zsPA@qP?mp5|JLevhp`#afbo>mKsy+h_nh>^)14ivJ1O!7v1eBHZL7upgf>ZbOUP%9 zbBX;O`o~f_L4)mr>Z#RS1EXiH&8IU?*zs)IO3|#z_XrkPQBtNDGCM1OJGJJ&M_Gh9 zS-UD|Btl-myxz`wv^OvJf@#_c3>>6IxTQ;L28HW|I~nQxA?Dm5kdFs5RXi6L`x3+Q zuRZYnaz~$-#cVqDd-XSYepFYOpHp{cfF6U=@#;upr~R2@+4HLS_S$k0yS?Nd&i@^C zh}`l|O&Lj;X}>>*DRSb&G9Pf97Df18wh=O47&3+8bpOn{Y@*s3j;G!aP8FQ0AFT-9 zyUm(`>h_qj$86xE!Q@-capdJ-6JNF&ZOw*?&rL1xOy?CrO-&C<+VLwSx8}b){z0^2 zTPQP^EibJ;^dtzEL1F&1ynDEJSQSBKfAAsK=%0{v0_lc?vM27ZhLIC3_CsI}&k<~; z)HcvYY!5^Bx%*ohMvZ4wk`sOl74;QQ8%|g;AAqae9DA2}aX3#&STIm758%tTPK}P%DloMjd3o|nM6T7G$Ad+OR(A&E>zR%?GeY;0o)37u@$@Brm5 z_cl;T87U!Y5|>$Oe?s2I$_@lIv9-Onb}%|JkrA+bJN!Z-18s|5@5~NnY&DE3RLiibtTJcyLyr?7WR+ZS zqT|J9-p+?hXiev}vmeV?4^}ftm*bVE4&DQyJj;vAluhy>u_hTm({26$!Xk!{i=QKV z%XP}Hyf}D@ypD%Bo9vv2jZJLiuWJ40aLpYgY;K0IK*b<_KzxsA@zO0WH&e&Rtx5U- zw*vbG%;HC{HC!U{xWD4ZbSm&j1+pc|#6gBzxjT_iJ^14%wig;!b=l|>!k{(87@&f{ z&fB=zwfL|0$;9{h%y!|XJ!SLtN%$hfuPmyu)7Cq0CNx22B=HZ?b$&h$f&_kDu_Mrw zK0O_ii7!9N2bMqcR<1wfb}e#-!nAg5pJn#>o2c5~HO&u7^9uXw@=Y>}I5=Ed`Fnj3 zp8k(zS;)wwwIFb)#C7b+p+hu90vkx_nSWpx%4Rc-$6}L{pU_DsAP!mY6k6Om?1od8 zw*Sg0vyi@;6*WLe=dyx4Yhj=f!mnHV#-0j#hyEl@D<9BuAs*U$6fEYrn@&oKO~R9r zKcH4tIHusY6>J|6kZn9Hn%{e=q0@ryR9=*Qq@`}vPVMr%JbRzxlXQLuS7+PR`khTx z?}$)4`DRdaEd43$;=*va{{Cp?0e1j}p)qrl_+KQ#?gas`1^}?&D4aj^*hw+_-s#JK zb93W-ypTXHlNcQr*9+J&V&2|-C@3i2_uEPT=`MgE=Lq;2Ie;L2vuGC*8A(A+9Wpp5 z`6f|(N-q`9nKTDPr&X_Q%3#K8bKfNro%Fgh{*n2epEdecFV>? z-u_E?mzKBa`{n*`r1ZEHUqib%RJL_&j1vR>t{O25^5Y6syfhq=UxU!8gRaPpSV2Q& z)yp_zHgeFrp`T(`;w8$LiyL0wukNYfqC8VL2nTYMXUpkyZ0D%a$E?X~X7%ywwLc!5 z9^4z-Pyo_nh;qpmVA4`yBC@cumJd8$?f1609KI=0fQU;bAV5^FISPok_fMDO%xR-< zia9WLpf|@hmEDTVG_v{ zMybwJ{Va|TH)G-R9^&fi^BxaJMarmNCqMWhfpG(SB31X9_zUnH-feR+Ny=#_&WA2R z{MA~Iw0AibfJBZzWm*3wRCBI+Pd|V^Qw`SmdjNv-NHQ~we)Dl$$-oaNc)DQxA`6+ygn^JmD^G7H><*g1f z|0Ux8ThaNNn_nC)!rSOHzm{np8kTbDK8r<{TAS_-{uR|y776H)zLB<%2>yq*p6R19 zyEX1N$XH{|j}e{RZ5GwneDG#&h3yR}3a|F^ry9szXRW%uL-h}9kh#O>)Zs2PMm84= zya+!<-lxEY$@+QK4$n^F;9L4`FlE5RZ(a9C@ox|5I$8ob`FFxT#-08g`F*d8-{n62 zv;_1xd=|V2GBUD>3LW0JK*Da8-xy$)MGhIaY*lWBNqho?=+T?wMF`+)(Z8~ancLZo z1D3h_%l$5X0qSUs1hPba1?;zLF(W3GY*uz@eC=g^_osTdd)sN-4&BC#%)sCrYKDIB zeALOaRp$KYWV;91?$}6B+_}q#7mzlew}B2}`u%~^j1W34@n<})yEuEhDl2TP{HmMzqRB%%Gbc5Xn*s*7 zNOvg4)At-@zCl4*5o?1T#I*c&6TefOPkA#K_zOYNX+EhVBcu@!RiP$2W@vK}dd<48 zC8{hQ7senSw-Z@oV=};mh9=?UoaaGIPEVJ0cORW=kj>;vK^3_3PoPzwYobRm8{gR2 z5HQoy7n_NMaRR+*dhUvj4_EICA|OdJ@XnCmWhO<&9yyAMRO`C2M3V* z<9&`Q%@BADj)adT7NFz9^_oY71n-eiDc6rQx|C1n##S=ZoeqgbNWV~xfJI6tvm0vj z#8ffQs}or?Ggnr)cz9wHVxYcCx^wl3iJ41FE0)ZPHdsr^t9=4IktQ$Cjg13o)6{}8 z5&Q2rsj=wNpwNog*`NIfvZ4u*3-Z8o48~t zFc@rYfj&7dF&*jaSH+KTfj@e@WuTjjlW~;eVwv!exLTXm4o?-Nb4@gd8JRxT4v7ls zW^S`vLt;nj*sgd8Bjx2`Vc*4gPafJZ;gn5x(dXt4j*aBEwWSllaNWZxCtF$s#uZ@$ zTc}OPb_-FrK|I!u0Ue`+g;}tfBGo(UL=G+w_uQIVi8wP4;^jc$2`p>_s_9(S(lf+} zD*1Vy7O!kqd(k*658@1hjKNSrkzf?Uy#+fGn)=kIc-UxT0`280H-`eY#S4L!dw4^t z`CLZ&ckh}W;1r`%e_JO4&vj3Z2FB8XANLNh{iP~J)RnF8?=8^8lspk*hkj<%vW^ky zVw!1+OK5vPM~90KhlSAz3a-b*8y6aI;8i<0_w)@Ucha}4$}S$-ihT35MO@aQbd%6KOi7TOBzcJnV zNOfO68C`GpWW)_&OQsic2GgcoawjYOL!<ikYrlvDqZfss4!0^QC9t8<&x_xXg7VpRK= zf}{+G_bZE(L?hZt1@U<>=f>87*zV`J7&2Bsi!WNdcANJ3%Rj5Do@la_+mhr``k_Ak zw-lO1?V-(s6N-hDR|-e3GLJ&yHk{t0TW0yAp-il?>Fjt^bcRDZV9ta}mxwDBN@!^R zQnqW`@@^Lb2g?KlnrFBd%(Jh+EAGTHJtE*y#(A4+Y<#s44s7^lt_f_0{cq8TljdEb zx7ZF4O8^2#>_Bv??Q)D)HiIWYtz6Rp*bFxM!mJWji~%=YR7@-;K7PhN0vj)5PT%${ z-7g6P4{J246$KE{tgxQg>&vtk;ru}RW;fFjcE%9i#z4C1j#bzelq~V5^@w;Y z#Cx~v-MLE@g;%XS(8q|G;%>cf9F-Xo2EOPRg}&;WyUDViGnVjhk;x%+dV3;9@BBtn z=%mOpm&F|nXf)**9DP4qWRA{@7hsNOl{1E81$B(q6)jBa2flvjT2>_WbI+eEM<;2Cri2-*&v^x@_!mWmSh|5;GveSHA#0zt_C&+Bgf9$Z}r2~GQ)QHaS)xhvjYG-+INHu;fpaY8F=Z2*;i z`-}&vDPl~7!sv8Q)>e~lAy<3h3O6_{i5!P|P*#7raooZAP{FzN#rD_gwdXcAeO&jy zyVL3bWn(%aT?Zwe;F~9XA3E0KkLybF-@K4t{Tq;QUI^&5Q0=N*=l=HjSV+f0L^UsT zUG1LJXY&0V94-uo_ZSh7_sGOWgJ@&_vz}Cxp}V`~mXXr9R+H$;e@wy2-z`lbX(Hdf zV_SGOhSV&o&wpjz$w4c3aJ(!uX+#U}IQ2Pn=&Wj(t8`M9ui2cx4dHb+U|U_8tUutu z<{b4Z6Sbnxa^0AyJX*a+))k1s+?nSq%G6*%$D72j&k*TltNF!nB4b25z2mgA#UmZY z!sTkuZL;8fXaxB66OHxnUw+ai{&#C7mYL)O2f`)FO1Ydd8P>EfTWf>2Y;Xkzr21Y& zp5Q*C>bJn`9Ouf#{9!)X(N^XFC%Z*7DW_6H4PlzV)~ZdG`a`mE&PMk+xJreW!?6^$ z+f|eZ&}qXgXaBr$?i{5_GVDWZ$MRz<^=hAE8Uf#XjsE&5{dIUd2d}KiktPe+Ta;4? z=_kkmqcZA>K|~`fYvn}EVdLiv9>TD|T3%lRn`rWocB{?}KZP5^(N`i;cGsxuw!Mn^ z%QcBtmYwdXKS(dx`{J*lkr^x9tLyz>n&b9_K2xE@=1tf~2=3A&@66RIk*vUTM3JJ?!uA-#9uNsU7E#Ki;UD2HnQLYC71=58a~=MWa1Nld3UO&d{6#w62@I5zY6z&-+NF$ z#cqU3R1GGqAZ@M;MNyUA)3gMu{x}4L{0J748EaK1Ts#`ezN+8WbE`8>W%8oQ;tP1< z$xW`JGDTnaq$Fcg9DSJmPTXP4BoxGTIOFyvI*Pxkk5%0FGdXOCzJ;(JZcp{r?|?2A zNQs~V`BkIU4jB1I~!Kl0?~cdEy^(j*|zv6%J2)D=?N1BU{_T_FA^ z=(Tk-skI9Fv4T31IRD>~Noo%k`5B$tCP7bE$2K7Mdr=nKsolGGb)SLpLkL;?*LZ2Q z#20|ex$hJ&4OR}VXg}>4CH61-3Oi}@i(Ojp z&)oazJvfZvDaZJNZK|YG~4j33wo4D>=oJ|VWH9nQbn3?SNIQPc3&@V=RSUYTsZZY3rsKga<+KTo92GlHye1)H9xjjr7!&M$QR!6tGfF|f zOBG8u$>7K}@6r-xJF8H4|Ku6bEo&LF9XPX6a6)W) zUL+rlP{Un zmngQk7^VzwRo}lRm0n&(#Kr*0m!Hp+sE2^E1RM~MkEnDS+H)sQC<9WRf0vq_fH-B~_KG+u zaHv5LNQsKNVA()h|4;Y?x1>bfn3}7WEG}m zv^P!n{3HS*@-`vbq*&EC<(L--297X;D3bGtC{d<(n3cIzXHUWQfEq}kOt$QP*Ssb8 zu$h&^#hDP-`r2hYGr9XqqS~p6O)#TJC}hb$L?#qb1#*!@eyT4D{;}jdkn|6tF((_5 zat3AJ;k~epLFIPngAK~?T=)(dAV?vX=_;Dk z0N3Km@x-#+pk=)hQIU2d|lv)2n#H>F0tK;7Nl z0Udgp72!Ksd3g#xz9rAG2AjpV1Z}B$Wg(DX2N|21q7xI31L<=R6%CDWq6y-M5BGq4 zdALm3y|M5V^64j>T0U!x+MfaAKo`fB3r99`v3LtMzOyN9j;9CKAdlwa8OsH?(-7r? zjehFsv{86hpOg{%qj2(lClzIyZ|0#j%zMLCZgpgBH)kL6P9vgpUP8tYWqjY^5BO8W zWwKJf7;dJjGp8YoilXX|{6sD9*3)Tj)_@i(r@&5FAaaYM<=r)vpQHBGb7ZVwc;Q-X z-7I$Pn;pV`m)NzWPq(W&MdAE_&bKUVj?W$5k#W*93aNYu(+gZ$UOxQx;ciaL&ICBR z0U&&^&*M!@LW0RMRgKT1YoUC`@Nfd{{!(-8HTU}ZIu?z=XbLNQgm^DNY5j(-gIfL* zu-^sg`VN>l88XS_Cmc{us;9%T;YK{2owpJ^x>43BOC@zY?|UwTZfq9A?#wSQ*MYs&=4_%f`$+fpyI*2G8nE#R#Hvx zOn+$+%(L~t=Dhu*=f}#fFmZge5eV1_%^F4Kv#vksQ>|6l55nlQI2_~gxtjL<00dLg zRK9zO4B;KF?X1KTA!H#0{q>;fD8=}8{VC*H?_2&V`C2h+2dZ|Jb?v3 zECBhNPPYxGegWNc$?LRz@7l9ap|h&O@qaRR)g>(sa!P{%->JpdMl$F?{N`!8wEfeMWW{#UPK zEQ%!;)OTWH)_SdYag+X~!SJbuGOkAT8T{S!U+gc>{`M^sVspAd3-`Pa`Tchp{DBf% z{V7o7`~%|7-3xyklgXFL5xp*#UJ3S#QvIBv@$T6H;D8ff8qz+5qun@y+J##(66-O} z)s&c4&?mYkmak_~MZeSYvcjdU}rnsVEJ@B4ru!1mnkR9PxYk5n|cpe)u&&f1J*V zi}2L&dYDp9gY(~q$N>T}Rd~T!7Kn+hkn*;pHf7pt?qjPPvLB;&jE|p>+%4Me1dt-K zvRRX<*e(`TgK-Im0!p%-x5MyuZv5;FaWnGK7sx$WMPyaxV}_){`+Mq8M)O6o#$KvT0QDS?H1$K0kTh`zCDfs4`WgUbImzV&n`Da+UJuu#rDSOP;! z@!q?D4ot9cjfyK3aUeu|S|Fahb*p@oKiJP$I z_1BV`t>1^P&sQI$a&;0ERa-6ArZ!~diS7e2g8d4Z1Vb{PiPu`X71-SQSKd-cV`Cx9 zT7p3KKy=*qmVNKpQZ`o6+@(0|QW58{p_Qkr6{{mtsfo+OVPJ6lZ+s<5I&k_C=u!k4 zS<9;96B3yBchb14+!(uaa*Xo}*0+yGZ`!@6>8aO8JudHjyP+w@-JwtS8ouf7u0`66 zwAdlqfBsEh+8dl)Q5HTcgI#UdjU8`Qe}&Kds|fIxU6(y)$^$tzrh7Pe{p(HazjP=~ zJ?kby>K|V2U>mpQb`!IwKcV@VlbYSUiY?`IQjgS-wTy-f%C;Wbb_=!<3emTGQO5uc z*T|Y4e3lMnl~jO?$M^{5s+PR*qkh@D=&tCNh_h78`bG9dtFFK+yfczj9}Z|aDbtJ- z3oFEOlyAP&$?Zytw=+D5L9riSQ3$weLr2=;U?1xn4QSu34+Dopb09L|VWc%CVDZ+~ zq0ND}Z@(fSa7E1ZQ9?pOv%#_tb=7BJq$mqce`(8N>19wQseP^6z*bne&60e4!2lRIBhlfn2Ck&KfBg9wrTE_Ci)qy0K`}kefUr_x2HO`&Q;eYd z5X?_xO7U5;jy>`hHAYbO_Re{$6GeMdR?$lo`7d7E*oBWaScv9Y$>Axgg6zZh*-N3~DS^Lk|c199o`qUOeI)0w_M z2ImqKo>Rlc6aB8an>BEMii)E7U2t9QcKnUf^B$QZgs*lh>G;!~i@It$I(3Tc-8(Al z^#HEe&#jtywk6A5icDT z(Mk;z&iMqDJj`Gs_yJ}D%A`Y)#UpPT8K-sKq z>oY|AmM<7MW@Fu}vV}!H#WKR-Qgba%&;8B;6O%GdFMVXP*2X=7bB>$tf>(*&no{XXhv->N6#Lb1&1@gZ;WV zc!)cD%S}LtXE&qz@j&{&SV?B=RCd9dv4-huGcr+1O3K~C1B?Bc{)={fX!L~QiMu^q zVE?KC@>A@1zoYvtN((BEvH_=^t0$h{OI@;8rccQEE#LS3cIg@x1}%Yd*}Q5Bsp}7j z6ijU4MvpJsGda)c{J!xscU-_pmV7a?^>RbNYXRh^&r;|#^@#NgC<&Sonl`};@)48z zWR#@HUhwdqC`A3g5gPMUX>2Z9zRf2Mr)S;JQ#D9oSWACPRLa5B_8Ib^IH-2Z(Va0i z{DQ6#E6G(Gbd0}BD!7XT0-ESbSIRQsoUUcopU3zs-P!X~W)nz@Cz%N*U}w9W!VPCT z^7zPmNfUONo@YJV-Ge*0`-XD$0#q9hs7^bNl&hu9D|0VeLaoT|(Y`E3-{yCL)ku2d zRJM3**nX$|TBUUFuK^rfPi-{shSv2xX+|8-US9g=viDJ(Q?JhSop@kox!;qJ;Su#5 zoz738%7L*LIaA-OcRs;Uuxm%vy^^M^;(2H~8n}^TWA(P+4TTk>+y3i+yj&kK=K{Pc zPlI)fdLgqBiO0NC1$Kg8g)|NM0NeSOw2j19Nh-iys-65jWZYxS@+D<7Ib0l&^L&Lq zo6AVwT_x;7+6@RReb06353%tBhL9-7gbk$fR$C^A$W5uNo_t0r@-hRxItGRq!Y~FD z0OXQP*%6j1pWGBIb|B%jKGJS@e&*oi^pga1Jp0RHt&cZ)h#62OzSPnpy_Lr zH9#P5{vMAKgQLoJp0`-_MwSQ&Z@(ncVBPl(;e?x99Xn(D@Gb`h>MTppyvw2fFU$xX zi0?XYmDXTm0ocoq%CXn~&SFTJJz=xirSr-EUOpJz#-W?x3hlEx!!`qmB@+5sw5j(e+Jp9U}2y@nPlw@gx7=W+e38{e1c}e%tyy0xyZ1fBELoP~0fj&kEFdz0N8gIt>1%~T?O+Bt zpig$!6vBCQ(?1O+=^>pqAM{gNp7;8S09$tb#LSfCXeT6L1)M*>zP6!hqDAEG!GPMq zH{Z`+Hxd7RM~79#I?kcFrQ`dlmMOx^)u>6M-8V8qMIS!~3BYV2aLS`(ACcuB3GH*+ z+#wo_4^~58I}OV}s}}HGj;8$Aa)RtwE5A-WQ_(-~;&7d3vWRA_^-2+Z%di6|x^otk z<+-v^G?n?o2ZTvJ6~n)+E3{0|0pN4JA|c)7ilxip!3N>U@f^*}+A%QWfTN9BkMkq| zQ3I4t*bchex#jiPi0owW(EgapyGRFz{u54B6*#(kduMa+*ztTo+wpp%73&zvtbL_m zv=qP3)!byrk>aj@MWUO|5#m_>37ZqOW=i?)xV4h2&WhJyvYd)>y2kQcShjz-sL`2R zuJ+CbqMmiRQX9p*_bbiaea?!b*%a7n6p@1Eb)dS5v)N`|+habA=vy!CF_If_f;+PU zD*b3rn(VlJp~{t%9Ws}JZ3aYXCNq&sJ!Cq{sBrdDs?_#siJA72uCjd{9GThIg~m$F zAiF&h(rG!*B_*7o70%OIEZdteY$oJOG zQOm4KWsRu|Oe-3Sfkcy(a`+c`|5h1L>`YV1AK30sf8PUvZ;$5YpY`TK1_o#l4J<#% zEdg76-{NhI_YKmJnZo69tKC`8Oi11F0-^uAQ&ptmnrRh}TZn|m^I}27+zXi7>56I9 z?~cQ5%srMmN^sHqc69JZ?GOp4OGuRXmn11g<=1qV1YNB}YWlG*a$ zeO>rsP)Z0$mvkfDToI&8Qd%16?i3KEyStH;?(PoZN_TfR{5QY%{l?%r7~XUCIeYE3 z=6t3|PI+GT`;ZChhqa@HF2Aa+p%AA#G`CwRSPG~rO~tFf^!p1 zZx8}0-zvAd%mL*l4|n}o#iH*S-Wj6lxxZ^06g|SDD=aS?Al$sQ6EzcBliFFIU@$42d z^-Bf$*^LmT1U=HgCrdcEgF87v&NusEbRL#KAE2F4#XP30>Q-%TaN4iqVt+6TBvDD) z4du<^7|F8U$v@JnYIu~@kd5N%o49OCe(_>2){5BP$xhuL^VgqXv}fIXXPEdsPoo!B zn$b8I$v?Kx7W2!=Bg{*_0oiBKg>L*krl{M8fRfUSW%w_}RRpneUX@ooVYyH4I5y#LhOT9aaVW+eLqW z8tx<8+Ff1c7;o`7<7QFIR9~Mz0(Ey=!z}4m` z7vyZ4JEnI@o1=Mn$HJ~i=W>@{>xEalvhaVk>xz0yO2VUZ5m!VGi@ardumb<%!zM*{ zYNm3)@Z^TLouh;P@x?twvY^nWVC=X8T*mU=jJ2-KU6}^m0faM2nnoE|I$k@JwPZJJXp3kUIaM)v3w}=*M3g? zv9Ql@x1NjJ^9aYXd0)ys*b*fcCda8dKQb`wWQ%7x{E#d=BO-b6X7?D}d!U`45euWJ zdG8Zi+>QQ5>0DhxsCN9nqNCB>!@@R2q3M@&u@9?$7n*sR_Xqc9zjcfa*thy*<)|sh zFu-q4%Gv6Szd)r$2e4H^6N?IZ!(MVgJawwdsNGw0*gU)?5#?gOz{l0o~-Daf;XqKC6|(JSR}V6uE#xV&`UjT|Q_qt{U}<)sS}q_z$rGPW@+`^t-k zNt*oP3LgTb@T0DlVEt=fsAHr;@+U)aLzLsx3SaquYy%eS@siV_BJB&@mWTHt1^UgM zU465;mppQuQx9mZgN+k}LAOC$;ewqx`)l>XP8GYoWblq25ayb2b*(}wvzITIC4m?l z9L}XAf2-1RgBe6@w|DoK%eBTw%bO&Zu({{0yNmbYdlACsclS7EM|ldfe@q5ifSyyI zGikbfhYQ>5Mz9VqmO~8Gsn626*_x&Rjf9-?fuR)YN&-54&i4%@#cd|SG=t)K-X^Tf z^GVj96k>8-v%W7HMI~pBRAHt26Xvhr{L%)xi7$_WuzWDJY1Ge2eGF&crnW4HdroR;K zT9d(A&Y&0{C#7PF+`v_$KNPlziHko>pXN1@-j=oi>BCDe@Q_`iPc330-<+);?*S76 zySpXktE-+bW*2lZra;Dwgm}=~*?_Hv`Ccyh!Xu=VVA__HU}{jWjanE9=@6aPo=j&PaJEx)oKp@O{ty?Hu%=Y1%31b z`O%Id0T=os$0T)zy-6tLSRc_#l>T%2J*Llu&_v@gl6z8eBHj(VfxSOIm};)6@qLo? z-09rFUGo-!E!%{PaUXK57e|^GSFxC)LVLJP&8XYfdE>*@z5Om%I7^LOm3B{8&B4p< z5&GUfqg9fYvMt{ldP1l3qa`p%NH`l^<(_q(U+W5#ToU1r&-ca+l#3V( z8HK`?0)Z6hSlk0Y1G#A0p|swPGFeWi(-w}l)d$HmFW+s0(z}n@?R%Zxr zhQy^|>)3SErlJ`>GR5H~AD`swn?;V`WZpA5Ps9xM%2cmeZ;RVJ0d*qKFS>w(M*cpN zyR+2!+!&$T8M@p&Z^?L%`}6N6^Enzoep{dx9&W03m=|8ML_`u(kPEe~Gnmly!l9>? z?3sl{28?!1hHY_n{IpcOe9?g{J!NX|^DgBG#Y9WD=jfm~t-@|VjH5KfELMI!CY@p8 z`DUb)G0Ddad9^5tu)SLbEj^|d&Oc08$aW!gyE%p=?>JpvalLkaOO4>9B*~F*o%c&_ zwyW01&QuHG3wnv;(-LTEzjJrLqa#USkzl=E7d`0@#?9%T_LmP&5^gWRglswRsxYgG z%R9fSKiePqi4@f}dPRW>So%6v`G^|XdjM$Q8{pNyBZfQ|I#S^*z_8fn^VS69p zfMHu*&}MoU`|T7dDBs02a)*ZYV|&m^IoX5eF@?nO<7gF33yjCnop!8%$#EhFhNU_8 zo8(+6nm~RXTeWvzRVi_Jyv0a~TP|{tCZ_scJi-u3P5EcGU1jKZ$;bpf87g>vJWD1x zZa&wq?_(=$4yj)__l&-qiR_u^;0UjvojrC$%S*|hdWRT?4wr8IiH$b5w)qgvLVEiK zzuG=p1~+-oISIO6_Y+1^ya6S|n8j?Cg2qDuFE=mC^;n(+XjsoWX>TqLd1;J8J8$U0*09ODJfjuC%FG_R`i0~vo24cK=*?RLMYUWp+%>9r%+P#F>|5HE|sUuMeqSxnX82OHk~ zall5}b_+LT16q?M0LbC~SGTma6k5$s5_R2P^r1}0O|q(P>vhhY;7WV`MsM?o&DNl# zYgNnqhED;hCQ4@u@_(uuWQas8?Nm}PJsW2)yOl+4z1tTqwazsDVGTJ!5m8$Vh>z~F z{nm6+EoP6)>Yv-O*jUK>{Q{hS)!&}`*YOnT9AmB?x}f(Ati6<$lV0lkg(H}~zei*; zMhBlY_Mv~8?F#D`tAL3gJZKta%Kp5s~X`{H*fA6 za}0>qmI@Z%$M=J0%0Ivi{b@H*sLFnniQWyQh2gC3t%al+W1(I!t>I8(CN-kyj3C}P zCjO{#i$8aT6J!bAxz%i%p+Hn+^Jmc6o^J39iiwV1T3!}1mqfNan1o$6Vk8R?1So#M z_2(tuFglqqWyk$jWkZy@AlS%l5qW;Kj|LqcdAyCLUcB>W)=Bd(Dbh3ayCCAVUAbb} zy@Z9Obt+nU$gg{NCO`hE>OS(izCuW+XBN{?|7a~j;pljQi{ffVia%fSeEtR{`|v2D za(lc<<(@6+9h3h+uJdP8#c<7%)Zd7Y`(c_)?>5=pj}XGKF45>c! z4t`38-*QtbMQ&HRUCvTTD2kY?Z!B6IYF=$E?j`)qz54^(687Sof3&;JGK(~L*8+!! z@D_!mmEa^iy4PDSogk4ZVwL&DimK^DP?+24KWl6EM`A(GZ9KDZhd;Zb!5csL@{Ug* z1u1DSu!fl|MXD`(fECNe-f?5v3EEafyWBZwe1wKXNiBdPwmBeoJI}K!agcnRZ5Smb zBv_Y#w`OD*o)jUgZ3G|6#Pk~9jV&YM^VBBRnt`1O3`#inCj_O1aWl@Uc`3KyU_EtH zyM4I%<~K4WKKEO+^_zh-rz(qQb+yp)?m5y1kHSotn&j(xw@D_6V=v0o`R>x7JdHdV z;r52rgE!LZy7&+gSfiEcR{T6&h5s<(Va zo1hBsxBpbjbIWEi_bm2-!@6V=g1r3v&V#8=RY}|`G+E7m zEPHeKb6Ukl8tls9G>HHGLmsl?pE%64Y62M-;xHL?t#zz&hH2Q{OOxES6V~jNj}#U{ z=hUx0lE1lK@u$k-l3I(!`^n6(>0A<0o3 zl%Q470mgtBUPhRf!=BQ3rnL?*WWSNfSVAW$XEA#6jl=M8sker}@!5NiFFO6~IrcjqL{3mP z%p8SZ6cP;AXU}iK2&F!l;C@3ocD}x1xh?#}?|3TyaBapxZdH%xJJy?twm|l-q3*pe1qS0;+o4b}|Vh!3G;2g>3fCu76h+a4@Az&GkhF)3G5% z{rSdO9sSL=uaCDYwnaP7ZiKIx2hJ=ro7=aFK9!8og@iHl<_-Qdf^ma+vvUp3x?$`a zYPmyf+}G;;>@Gl}$95BYxixA;n1}WttF8NN6@Hkiv$W|vap6FhpYt2XOG;YjI)C*r z+=6vBp6UY%KpT5MQH~QY!XGkjFCOnFWV@;VTv*Ff*XA45BY|sX4}KU zU|_Jc;;3tLHYU)}D=D=cF>Q4;Ji)fb;fxDTFUEb;u`+}Kj`zZs!~!ly>vhp)9D6gh zC7)*x)>hg*m}rq&(^WAH)3K^zx{D^+#@8Ss92njz5)PTQ9}U$ zHg+q@shzZ@2)M-pm>(KAfCC+*6d+~-1)zwisO@3XW%*YhLxBX*thS+{kc~7V!DN9Jy%x^xc2X$oz zJ@YC!Ta1I#=Y_?*NQ0%oHq?}1c%gZ3<_L%2@k^VZ8?kxW!(H4M;`DWR3_{`w?#x+J zLe{Lx=w^4`PO_tjZS6^(cQMby;Md&kNc9Gn7c3^7(l;nBfqoSlKLsAB8)`fyJuM0K zsg#-+9>$X zdEnSpI;~dkLP`I&==-mNr(K>V9A(H2;WxuTZ=%9ldwp=fuOQ{`^(Oaw)j!e2h+3cmB*ZFJJMXx4xI_n+uR7_t~9o(8u?|;@l)XO zF065nt=8>__1$P`rRD5xgoY#28(@$PufcdUjfNsjd>ME*o)>>ZOz!!-+}!W&Hl&~2MF482R%k{% zFuC$uF%uGv{1W+Pj2BAsNWDDEXoUpKJhQP3VvJVG3vD5#PEwY_j!a4IKlX3~eV5-y zS3edR9@AKEWin@-zHZh-ug@Dw|25eNfR|U#L{HqxcXtD|YU$g0H~Hi=V~5~*R{){KA9qtig6#b1We;s~QSZY-IHY;T`+x!BLbI%z_m=aKU1|@T(dw%*Iz#B256LXfRZ{zyA&jF(o61s zvz@m$R~H3H&amG^n_?S-Z*zl_J{!Og!DifeeC6Aj!YwMD$Ml-ej$HTi7&kYsE<3Kc z%+FPrRm%&~-&$^<(pK9QCv6>aS_~^}KoER@6RFw#ARrdVp;VB-@o2V3WGWw$5eufVObdIBJBx{wWEGEXU%g}8L?pzn|2*2T-GOR5|ID*9MdALIib5`aaXY-aPfGKB7Bgne2@7s%M@4N z!Ys4gZWPwvp^wQipalzmn(G+N=zjm$@WkrF7%|WJokClGqPGisf(*5J;i$D7{<9#{ z7j5c#XnOUTe*c%;B1(C1QwrNVPa^RV0n{&!dk5fV!DnH6mBzlft_CX2rCq$P=BNSg zl-h*ml-$gTxXcfIKfItK#x(0nE26EDq&Igo8O8Rd4$rCjS_}L_k|pPU0`N8%U@AL% zB`xIT8dMmb{D5s)>gi&etAJTjTess|2H(W z_U7tywBBS6<1Ki|k{Apub=2H0iKhI2O3|0JnbBc(ZQB;eruZAaCg+CH*jU0)|Q0m)& zV2U8dUKe}kdf?NxB^ktGQbnUA+1NoQAyAHHjAlhRHwRcf8SFi*{=3-denN#prL-?| zo~0ep0Iglb5XJ>li8%60E2u4+Wojz_=~!I+8LvHMESgN(PZRJjrjK@6Pfky91&>kP z`T60j&(C|z+2yr0UwAt?Q+!JJCN4_uC@ahDcCC=C>w==??heK$`o{=XUs-W+ZD*Bu zo%W4fnurLk&w*ApXYr5W`QaI%V4_clSa>9QfO>JRN6WitoDFbEfG~37tRSiq5v>PG z^MYEAS(b>mb$LIjPh4VcsoBH+U?HkJlI%77a~m6*N;6m}Y7@eQ>C!#!;028X4x=!F|03Q2+ zkGfOjg@oaR&p&^Q8cEqjp^@J?jR?WW9sjDd!H=~S{-;A4-Bf{LbLE%9@N@rlD?QA2 zG_)Ticvwvb{n9t)9Bjn8;ojB(U-3r?mM34au8Ln)EGGC%KY}sohMTxvWPb3)Kw(85 z3`A72#XvUb?+UrQwDGfzVwaI)fi z1>bqJD_5FME71k(IqC72&C8NmlaFL|`mC-l>FCJG6`Cw0^ce#o)UtbcIJB*aIx5*A z{2sw+wAz7M9^XdZWp#Bf=IH0wVG1j9Mgf1In5L?5<_geP#ULP%a(3o!UdUK`o4vgM zH|345CBg^JdY_^Xx>f}qj4`(v)-<9S?A}G9beBTg$sPxqss?KQ;|nLJ@3!6L|9z9s zKO-#+@4uJlHO}BN8O1LbA_=YuoA|V8`Z?d8ls=;Wxje6ir>J2RX8H7+9N~<0%_c5n zWgcV)p7alNuSB+!U-tGIi5XI&dZpGc2$5MP*_o zk23s(jQ*%pX9RjJIXO9q;N6k%!__Jpr`3Wq;Ozrv732=UuKDlJCMc+>Rb7gMo`3KL zHjZPEY!MY5t&|0^?($LOZm6Fwv6G>J(l)EOKrrRf4DJKdzSP`_QAn&D%SzW4O9a!;g_Hl-AW|I^;h`6uUgwXv%3BYZhbP)&F$u@^m&P zOisr2SY>p-ofh*pq_)XhfMw9qZj27^16uaXaB5k;355jNwK)UhtW%~|4Y4Nlfzwmt ziUWwry1mC%aUC{=afxQ+b4xYcMkeB7jwUBOfYbNK=gVf*!p+~3tEE5ry=@EdcuH@o z)J=KbL}h+Efjl$FB{tgTT4m;0s91ddwA$1nzf_yBrqs)2YHcPxF+MpGrB$c<^5>!>~4pmeW2b5*aw?F>I) z>t&YRXx-L%>c~>4adObSr2`f4Xf)2!#+pzup+XkOQvk;kA0A|p5b`+= z*1ut;rVaq11wp`K2=FggCj-pei;Jv@w;*ET7E@tFqe>BjSe(#qi=%$k7*d_2T0L2*7lhS8Fm@#Ng zz{B0;uxByheu=%hMC(&PYE#|jblkrxT_S4Ky{@*tgaG5FVXz9mRITv^o}9c-l9Bd2 zqrC|s4EmVywZm%QX(CMQwW_afpCaxkC@)jI0EpR+#;wI{(`8$qq9r*};1`8H1fgL_<8H_O9-qO{x7+b0cp zBWMeJ*4GRv01}R~Yh6?4Vwq(mz-~^P;SQGqE$8)>7k0Je2 z3X90&c4ZywXQ3~(tfM7&eu{j0C(U+3i#|L=W5v@zYA#IV+Fn<0)3~syRD#u(#)Djt zDPzrS!h9-i!vJ8+`5*62ruEUZ76h z4&UFnxuVvW9gLd1FFUR=?6f}+wV%CE*4n`U2IB()7VoKfc-Fntk==&Z+Zg2xcGevq z9q(=gZ^|)}=RJPyvBz&Qb(l<_yZ*gUcDI(IlII+0d1qJ=oUH#$i_x>Gk7^goT2Yd_ zB4+K%%lZ;A12l{7u6Ls-Qm6alkw`EmJneHvK4Zsa(3LT8OgkRYU!-XEM>&}{Qp5~+ z0V5rlQf03buG^0rVN6_-_8HA3-^y+?e21qotmx0lb*M6%N{HSXkCiXrF#km%Kc}xBn?W6CXWVF~XxwA@=eBEbW2{zA- z$t7~}mDfh2*KO7YP51tW*4AAuZ%$&!!AONZjBKz}Sb4-N4j!GJUu!KdbzxTKO@f zY%le7ZMZDu`=Xn~{Mo4z;C>P8nIA~1(|MH7xcNB@$-_)n8pAJb6`x{G?jvF@ZJpm7 zPwB2sSD1aXP|dt-am#vj5l7oA`NXq-B4cjx8?bid4i>wzmnDRAY);*3y*$M?mMzgg zopCXdWJpT=-d>;C=-fGJAey4(*KYk8W5teE?OCJ#6}2PL;+-b~L^3DwXL@SoFWiqx zCL||8k-wzoeNy`0WT^$Hv6dS?ZrcAORRO%j;>*eNdT!Uxx%Am0Ny=Ty7Ci=>Wviplp6=^F*+cN&DZ@cY>^ZEw®qFF8Wt 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 e)Ybt)_kzDcn$0*X4B(UV4eyi?R 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 Date: Thu, 22 Aug 2024 10:08:36 +0200 Subject: [PATCH 22/29] commenting models --- .../recipe_weathertyping_CMIP6.yml | 104 +++++++++--------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml index 759dfa471f..88f56bf888 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml @@ -2,8 +2,8 @@ documentation: title: Weathertyping algorithm description: | - A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, + correlations between weathertypes and precipitation patterns over a given are can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. @@ -22,52 +22,52 @@ documentation: - jones93ijc datasets_psl_CMIP6: &datasets_psl_cmip6 - - {institute: AS-RCEC, dataset: TaiESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200626} -# - {institute: AWI, dataset: AWI-ESM-1-1-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200212} -# - {institute: BCC, dataset: BCC-CSM2-MR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181126} -# - {institute: BCC, dataset: BCC-ESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181220} -# - {institute: CAS, dataset: FGOALS-f3-L, ensemble: r1i1p1f1, grid: gr, esgf_version: v20191019} -# - {institute: CAS, dataset: FGOALS-g3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190826} -# - {institute: CCCR-IITM, dataset: IITM-ESM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210203} -# - {institute: CCCma, dataset: CanESM5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190429} -# - {institute: CMCC, dataset: CMCC-CM2-HR4, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200904} -# - {institute: CMCC, dataset: CMCC-CM2-SR5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200616} -# - {institute: CMCC, dataset: CMCC-ESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210114} -# - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r1i1p1f2, grid: gr, esgf_version: v20180917} -# - {institute: CSIRO-ARCCSS, dataset: ACCESS-CM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} -# - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191115} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-AerChem, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200624} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-CC, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210113} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200217} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg, ensemble: r1i1p1f1, grid: gr, esgf_version: v20211207} -# - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200310} -# - {institute: HAMMOZ-Consortium, dataset: MPI-ESM-1-2-HAM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190627} -# - {institute: INM, dataset: INM-CM4-8, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190530} -# - {institute: INM, dataset: INM-CM5-0, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190610} -# - {institute: IPSL, dataset: IPSL-CM5A2-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200729} + - {institute: AS-RCEC, dataset: TaiESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200626} + - {institute: AWI, dataset: AWI-ESM-1-1-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200212} + - {institute: BCC, dataset: BCC-CSM2-MR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181126} + - {institute: BCC, dataset: BCC-ESM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20181220} + - {institute: CAS, dataset: FGOALS-f3-L, ensemble: r1i1p1f1, grid: gr, esgf_version: v20191019} + - {institute: CAS, dataset: FGOALS-g3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190826} + - {institute: CCCR-IITM, dataset: IITM-ESM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210203} + - {institute: CCCma, dataset: CanESM5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190429} + - {institute: CMCC, dataset: CMCC-CM2-HR4, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200904} + - {institute: CMCC, dataset: CMCC-CM2-SR5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200616} + - {institute: CMCC, dataset: CMCC-ESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210114} + - {institute: CNRM-CERFACS, dataset: CNRM-CM6-1, ensemble: r1i1p1f2, grid: gr, esgf_version: v20180917} + - {institute: CSIRO-ARCCSS, dataset: ACCESS-CM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} + - {institute: CSIRO, dataset: ACCESS-ESM1-5, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191115} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3-AerChem, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200624} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3-CC, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210113} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200217} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3-Veg, ensemble: r1i1p1f1, grid: gr, esgf_version: v20211207} + - {institute: EC-Earth-Consortium, dataset: EC-Earth3, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200310} + - {institute: HAMMOZ-Consortium, dataset: MPI-ESM-1-2-HAM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190627} + - {institute: INM, dataset: INM-CM4-8, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190530} + - {institute: INM, dataset: INM-CM5-0, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190610} + - {institute: IPSL, dataset: IPSL-CM5A2-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20200729} # - {institute: IPSL, dataset: IPSL-CM6A-LR-INCA, ensemble: r1i1p1f1, grid: gr, esgf_version: v20210216} -# - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20180803} -# - {institute: KIOST, dataset: KIOST-ESM, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20210601} -# - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r1i1p1f2, grid: gn, esgf_version: v20191129} -# - {institute: MIROC, dataset: MIROC6, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191016} + - {institute: IPSL, dataset: IPSL-CM6A-LR, ensemble: r1i1p1f1, grid: gr, esgf_version: v20180803} + - {institute: KIOST, dataset: KIOST-ESM, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20210601} + - {institute: MIROC, dataset: MIROC-ES2L, ensemble: r1i1p1f2, grid: gn, esgf_version: v20191129} + - {institute: MIROC, dataset: MIROC6, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191016} # - {institute: MPI-M, dataset: ICON-ESM-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20210215} -# - {institute: MPI-M, dataset: MPI-ESM1-2-HR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} -# - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} -# - {institute: MRI, dataset: MRI-ESM2-0, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190603} -# - {institute: NASA-GISS, dataset: GISS-E2-2-G, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120, start_year: 1970} -# - {institute: NCAR, dataset: CESM2-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} -# - {institute: NCAR, dataset: CESM2-WACCM-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} + - {institute: MPI-M, dataset: MPI-ESM1-2-HR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MPI-M, dataset: MPI-ESM1-2-LR, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190710} + - {institute: MRI, dataset: MRI-ESM2-0, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190603} + - {institute: NASA-GISS, dataset: GISS-E2-2-G, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120, start_year: 1970} + - {institute: NCAR, dataset: CESM2-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} + - {institute: NCAR, dataset: CESM2-WACCM-FV2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191120} # - {institute: NCAR, dataset: CESM2-WACCM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190227} -# - {institute: NCAR, dataset: CESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190308} -# - {institute: NCC, dataset: NorCPM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200724} -# - {institute: NCC, dataset: NorESM2-LM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190815} -# - {institute: NCC, dataset: NorESM2-MM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} -# - {institute: NIMS-KMA, dataset: KACE-1-0-G, ensemble: r1i1p1f1, grid: gr, esgf_version: v20190911} -# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20180701} -# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr2, esgf_version: v20180701} -# - {institute: NOAA-GFDL, dataset: GFDL-ESM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190726} -# - {institute: NUIST, dataset: NESM3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190812} -# - {institute: SNU, dataset: SAM0-UNICON, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190323} + - {institute: NCAR, dataset: CESM2, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190308} + - {institute: NCC, dataset: NorCPM1, ensemble: r1i1p1f1, grid: gn, esgf_version: v20200724} + - {institute: NCC, dataset: NorESM2-LM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190815} + - {institute: NCC, dataset: NorESM2-MM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} + - {institute: NIMS-KMA, dataset: KACE-1-0-G, ensemble: r1i1p1f1, grid: gr, esgf_version: v20190911} + - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20180701} + - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr2, esgf_version: v20180701} + - {institute: NOAA-GFDL, dataset: GFDL-ESM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190726} + - {institute: NUIST, dataset: NESM3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190812} + - {institute: SNU, dataset: SAM0-UNICON, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190323} datasets_ERA5: &datasets_era5 - {project: native6, dataset: ERA5, type: reanaly, frequency: day, latestversion: v1, mip: day, tier: 3, start_year: 1958, end_year: 2014} @@ -95,7 +95,7 @@ preprocessors: scheme: linear weathertype_preproc_pr: - extract_time: + extract_time: *time extract_region: #choose region which will be used for weathertype and precipitation correlation start_longitude: 9.5 @@ -104,13 +104,13 @@ preprocessors: end_latitude: 49 mean_preproc: - extract_time: + extract_time: *time extract_region: ® start_longitude: -15 end_longitude: 35 start_latitude: 25 - end_latitude: 65 + end_latitude: 65 diagnostics: weathertyping: @@ -144,7 +144,7 @@ diagnostics: short_name: pr preprocessor: weathertype_preproc_pr additional_datasets: - *datasets_era5 + *datasets_era5 eobs_pr_wt: &eobs_pr_wt project: OBS @@ -189,7 +189,7 @@ diagnostics: preprocessor: mean_preproc additional_datasets: *datasets_era5 - + era5_tas_mean: &era5_temp project: native6 dataset: ERA5 @@ -216,7 +216,7 @@ diagnostics: end_year: 2014 additional_datasets: *datasets_psl_cmip6 - + cmip6_historical_psl_day_mean: &cmip6_historical_psl project: CMIP6 activity: CMIP @@ -240,7 +240,7 @@ diagnostics: end_year: 2014 additional_datasets: *datasets_psl_cmip6 - + cmip6_historical_temp_day_mean: &cmip6_historical_ta project: CMIP6 activity: CMIP From a6928c8cb0f9fd637950f6004112d55514e3dc3f Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sun, 15 Sep 2024 17:41:09 +0200 Subject: [PATCH 23/29] bugfix --- esmvaltool/diag_scripts/weathertyping/wt_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/esmvaltool/diag_scripts/weathertyping/wt_utils.py b/esmvaltool/diag_scripts/weathertyping/wt_utils.py index 16ac47c717..e34119c24b 100644 --- a/esmvaltool/diag_scripts/weathertyping/wt_utils.py +++ b/esmvaltool/diag_scripts/weathertyping/wt_utils.py @@ -87,7 +87,8 @@ def plot_seasonal_occurrence(cfg: dict, wt_cubes: iris.cube.Cube, x = month_list for wt_string in relative_occurrences: - wt_numbers = len(relative_occurrences.get(wt_string).get(1).keys()) + wt_numbers = max(len(value) for value in + relative_occurrences.get(wt_string).values()) colors = generate_grayscale_hex_values(wt_numbers) wt_stack = np.zeros((wt_numbers, 12)) for month, month_value in relative_occurrences.get(wt_string).items(): From b781eeea6698b89f07a89ad37c00f2c0e5ac23b6 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sun, 15 Sep 2024 17:47:28 +0200 Subject: [PATCH 24/29] predefined wt --- .../recipes/weathertyping/recipe_weathertyping_CMIP5.yml | 2 +- .../recipes/weathertyping/recipe_weathertyping_CMIP6.yml | 4 ++-- .../recipes/weathertyping/recipe_weathertyping_CORDEX.yml | 2 +- .../recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_CanESM5.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml | 2 +- .../recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_MIROC6.yml | 2 +- .../recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml index b62cbf8921..42121add05 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml @@ -250,6 +250,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml index 88f56bf888..5e21859a80 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml @@ -64,7 +64,7 @@ datasets_psl_CMIP6: &datasets_psl_cmip6 - {institute: NCC, dataset: NorESM2-MM, ensemble: r1i1p1f1, grid: gn, esgf_version: v20191108} - {institute: NIMS-KMA, dataset: KACE-1-0-G, ensemble: r1i1p1f1, grid: gr, esgf_version: v20190911} - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20180701} - - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr2, esgf_version: v20180701} +# - {institute: NOAA-GFDL, dataset: GFDL-CM4, ensemble: r1i1p1f1, grid: gr2, esgf_version: v20180701} - {institute: NOAA-GFDL, dataset: GFDL-ESM4, ensemble: r1i1p1f1, grid: gr1, esgf_version: v20190726} - {institute: NUIST, dataset: NESM3, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190812} - {institute: SNU, dataset: SAM0-UNICON, ensemble: r1i1p1f1, grid: gn, esgf_version: v20190323} @@ -258,6 +258,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml index c1bde9efea..3f198d1d66 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml @@ -282,6 +282,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml index b4f4baf17b..cf9c3a6a3e 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml @@ -245,6 +245,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml index 46c7e19768..637b15f6fc 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml @@ -241,6 +241,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml index f6ec212e00..671a622533 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml @@ -250,6 +250,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml index ed71ebb99e..975bb557e6 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml @@ -283,6 +283,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml index e9c384ecf5..1d750a6da4 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml @@ -244,6 +244,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml index 30ba7387d6..836e8682f2 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml @@ -234,6 +234,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml index 81cf152f3f..90b98ecd28 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml @@ -246,6 +246,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml index 417a76a36b..25d3b47e01 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml @@ -263,6 +263,6 @@ diagnostics: correlation_threshold: 0.9 rmse_threshold: 0.002 automatic_slwt: true - #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} + predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true script: ../diag_scripts/weathertyping/weathertyping.py From 97eea0822fc0c23d39c30293d054345a8d8b5457 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Tue, 24 Sep 2024 11:16:37 +0200 Subject: [PATCH 25/29] minor corrections --- .../source/recipes/recipe_weathertyping.rst | 6 +++--- .../diag_scripts/weathertyping/weathertyping.py | 14 +++----------- esmvaltool/diag_scripts/weathertyping/wt_utils.py | 15 ++++----------- esmvaltool/recipes/recipe_weathertyping.yml | 2 +- .../weathertyping/recipe_weathertyping_CMIP5.yml | 2 +- .../weathertyping/recipe_weathertyping_CMIP6.yml | 2 +- .../weathertyping/recipe_weathertyping_CORDEX.yml | 2 +- .../recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml | 2 +- .../recipe_weathertyping_SMILES_CNRM-CM6-1.yml | 2 +- .../recipe_weathertyping_SMILES_CanESM5.yml | 2 +- .../recipe_weathertyping_SMILES_EC-Earth3.yml | 2 +- .../recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml | 2 +- .../recipe_weathertyping_SMILES_MIROC-ES2L.yml | 2 +- .../recipe_weathertyping_SMILES_MIROC6.yml | 2 +- .../recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml | 2 +- .../recipe_weathertyping_maraunjgr21.yml | 2 +- 16 files changed, 23 insertions(+), 38 deletions(-) diff --git a/doc/sphinx/source/recipes/recipe_weathertyping.rst b/doc/sphinx/source/recipes/recipe_weathertyping.rst index e40ea55575..9064821b1b 100644 --- a/doc/sphinx/source/recipes/recipe_weathertyping.rst +++ b/doc/sphinx/source/recipes/recipe_weathertyping.rst @@ -7,7 +7,7 @@ Overview -------- A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, -correlations between weathertypes and precipitation patterns over a given are can be calculated +correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. @@ -21,7 +21,7 @@ Recipes are stored in esmvaltool/recipes/ Diagnostics are stored in esmvaltool/diag_scripts/weathertyping/ - * weathertyping.py: calculate lamb and simplified WT, plot mean, anomalies and std for each WT for psl, tas, prcp + * weathertyping.py: calculate lamb and simplified WT, plot mean, anomalies and std for each WT for psl, tas, pr User settings in recipe @@ -70,7 +70,7 @@ Observations and reformat scripts (2) see headers of reformat scripts for non-obs4MIPs data for download instructions.* -* E-OBS: European Climate Assessment & Dataset gridded observationl daily precipitation sum +* E-OBS: European Climate Assessment & Dataset gridded daily precipitation sum References ---------- diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index 153e65a2d7..181020ab9d 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -1,17 +1,8 @@ -from wt_utils import (get_cfg_vars, load_wt_preprocessors, - wt_algorithm, get_ancestors_era5_eobs, calc_slwt_obs, - run_predefined_slwt, combine_wt_to_file, load_wt_files, - get_looping_dict, plot_means, get_model_output_filepath, - calc_lwt_slwt_model, write_lwt_to_file, calc_lwt_model, - plot_seasonal_occurrence - ) - import iris +from wt_utils import * # import internal esmvaltool modules here -from esmvaltool.diag_scripts.shared import ( - run_diagnostic, -) +from esmvaltool.diag_scripts.shared import run_diagnostic def run_automatic_slwt(cfg: dict): @@ -109,6 +100,7 @@ def run_automatic_slwt(cfg: dict): def run_lwt(cfg: dict): preproc_variables_dict, _, _, \ work_dir, plotting, _, _ = get_cfg_vars(cfg) + print(preproc_variables_dict) for dataset_name, dataset_vars in preproc_variables_dict.items(): if dataset_name == 'ERA5': wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs = \ diff --git a/esmvaltool/diag_scripts/weathertyping/wt_utils.py b/esmvaltool/diag_scripts/weathertyping/wt_utils.py index e34119c24b..4054afc517 100644 --- a/esmvaltool/diag_scripts/weathertyping/wt_utils.py +++ b/esmvaltool/diag_scripts/weathertyping/wt_utils.py @@ -23,10 +23,7 @@ from matplotlib.colors import ListedColormap # import internal esmvaltool modules here -from esmvaltool.diag_scripts.shared import ( - ProvenanceLogger, - group_metadata -) +from esmvaltool.diag_scripts.shared import ProvenanceLogger, group_metadata iris.FUTURE.datum_support = True @@ -49,12 +46,12 @@ def generate_grayscale_hex_values(x): grayscale_hex = [ f'#{int(value * 255):02x}{int(value * 255):02x}{int(value * 255):02x}' for value in grayscale_values] - + return grayscale_hex def plot_seasonal_occurrence(cfg: dict, wt_cubes: iris.cube.Cube, - dataset_name: str, ensemble: str=""): + dataset_name: str, ensemble: str = ""): """Plot relative monthly/seasonal occurrence of weathertypes. Args: @@ -88,7 +85,7 @@ def plot_seasonal_occurrence(cfg: dict, wt_cubes: iris.cube.Cube, for wt_string in relative_occurrences: wt_numbers = max(len(value) for value in - relative_occurrences.get(wt_string).values()) + relative_occurrences.get(wt_string).values()) colors = generate_grayscale_hex_values(wt_numbers) wt_stack = np.zeros((wt_numbers, 12)) for month, month_value in relative_occurrences.get(wt_string).items(): @@ -1007,12 +1004,8 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, plt.savefig(f'{local_path}/{wt_string}_{wt}_{dataset}_{ensemble}' f'_{var_name}_{mode}.png') - #os.path.join(local_path, - # (f'{wt_string}_{wt}_{dataset}_{ensemble}_{var_name}_{mode}.png'))) plt.savefig(f'{local_path}/{wt_string}_{wt}_{dataset}_{ensemble}_' f'{var_name}_{mode}.pdf') - #os.path.join(local_path, - # (f'{wt_string}_{wt}_{dataset}_{ensemble}_{var_name}_{mode}.pdf'))) plt.close() diff --git a/esmvaltool/recipes/recipe_weathertyping.yml b/esmvaltool/recipes/recipe_weathertyping.yml index 759dfa471f..38105376a3 100644 --- a/esmvaltool/recipes/recipe_weathertyping.yml +++ b/esmvaltool/recipes/recipe_weathertyping.yml @@ -260,4 +260,4 @@ diagnostics: automatic_slwt: true #predefined_slwt: {1: [1, 2, 7, 8, 10, 11, 18, 19, 20, 25, 26], 2: [3, 13], 3: [4, 5, 6, 9, 14, 15, 16, 17], 4: [24, 23]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml index 42121add05..30992f4141 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml @@ -252,4 +252,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml index 5e21859a80..d7bad01ac6 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml @@ -260,4 +260,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml index 3f198d1d66..ad0cb886d6 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml @@ -284,4 +284,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml index cf9c3a6a3e..6a4fef320e 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml @@ -247,4 +247,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml index 637b15f6fc..5b3f840dd6 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml @@ -243,4 +243,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml index 671a622533..a9021a4324 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml @@ -252,4 +252,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml index 975bb557e6..d7ad57d393 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml @@ -285,4 +285,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml index 1d750a6da4..d1569c7f2a 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml @@ -246,4 +246,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml index 836e8682f2..254ec6ab91 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml @@ -236,4 +236,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml index 90b98ecd28..9c460b70c1 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml @@ -248,4 +248,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml index 25d3b47e01..c1992b2018 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml @@ -265,4 +265,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml index c3aa8d5bff..58af323f32 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml @@ -226,4 +226,4 @@ diagnostics: automatic_slwt: true predefined_slwt: {1: [1, 2, 19], 2: [3, 4, 22, 21], 3: [5, 6, 15, 16], 4: [7, 8, 11, 18], 5: [9, 17], 6: [10, 20], 7: [12, 13, 14], 8: [23, 24], 9: [25, 26], 0: [27]} plotting: true - script: ../diag_scripts/weathertyping/weathertyping.py + script: weathertyping/weathertyping.py From 9c7c6ad5a2591b203529773b0e4bd3214f432ff7 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Tue, 24 Sep 2024 11:30:41 +0200 Subject: [PATCH 26/29] add era5 to recipe_weathertyping.rst --- doc/sphinx/source/recipes/recipe_weathertyping.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/sphinx/source/recipes/recipe_weathertyping.rst b/doc/sphinx/source/recipes/recipe_weathertyping.rst index 9064821b1b..eb56f92db5 100644 --- a/doc/sphinx/source/recipes/recipe_weathertyping.rst +++ b/doc/sphinx/source/recipes/recipe_weathertyping.rst @@ -71,6 +71,7 @@ Observations and reformat scripts instructions.* * E-OBS: European Climate Assessment & Dataset gridded daily precipitation sum +* ERA5: ECMWF reanalysis References ---------- From 42469102006b24843c84a991e571cc450b86c71a Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sun, 29 Sep 2024 13:33:20 +0200 Subject: [PATCH 27/29] added timerange, fixed prov, more bugfixes --- .../weathertyping/weathertyping.py | 32 +++++-- .../diag_scripts/weathertyping/wt_utils.py | 86 ++++++++++++------- 2 files changed, 77 insertions(+), 41 deletions(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index 181020ab9d..7a48a3f2fe 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -58,7 +58,11 @@ def run_automatic_slwt(cfg: dict): for var_name, var_data in var_dict.items(): data_info = {'dataset': dataset_name, 'var': var_name, - 'preproc_path': var_data[1]} + 'preproc_path': var_data[1], + 'ensemble': + dataset_vars[0].get('ensemble', ''), + 'timerange': dataset_vars[0]. + get('timerange').replace('/', '-')} plot_means(cfg, var_data[0], wt_cubes, data_info) plot_seasonal_occurrence(cfg, wt_cubes, dataset_name) else: @@ -72,7 +76,10 @@ def run_automatic_slwt(cfg: dict): # calculate weathertypes data_info = {'dataset': dataset_name, 'preproc_path': preproc_path, - 'output_file_path': output_file_path} + 'output_file_path': output_file_path, + 'ensemble': dataset_vars[0].get('ensemble', ''), + 'timerange': dataset_vars[0].get( + 'timerange').replace('/', '-')} calc_lwt_slwt_model(cfg, wt_preproc, data_info, predefined_slwt) # load wt files @@ -83,14 +90,17 @@ def run_automatic_slwt(cfg: dict): dataset_vars ) # dataset_vars is list of variables for dataset dataset_name + # plot means if plotting: - # plot means - ensemble = dataset_vars[0].get('ensemble') for var_name, var_data in var_dict.items(): data_info = {'dataset': dataset_name, 'var': var_name, 'preproc_path': var_data[1], - 'ensemble': ensemble} + 'ensemble': dataset_vars[0].get( + 'ensemble', ''), + 'timerange': + dataset_vars[0]. + get('timerange').replace('/', '-')} plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) plot_seasonal_occurrence(cfg, wt_cubes, dataset_name, @@ -100,7 +110,6 @@ def run_automatic_slwt(cfg: dict): def run_lwt(cfg: dict): preproc_variables_dict, _, _, \ work_dir, plotting, _, _ = get_cfg_vars(cfg) - print(preproc_variables_dict) for dataset_name, dataset_vars in preproc_variables_dict.items(): if dataset_name == 'ERA5': wt_preproc, wt_preproc_prcp, wt_preproc_prcp_eobs = \ @@ -144,7 +153,11 @@ def run_lwt(cfg: dict): for var_name, var_data in var_dict.items(): data_info = {'dataset': dataset_name, 'var': var_name, - 'preproc_path': var_data[1]} + 'preproc_path': var_data[1], + 'ensemble': dataset_vars[0].get( + 'ensemble', ''), + 'timerange': dataset_vars[0].get( + 'timerange').replace('/', '-')} plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) plot_seasonal_occurrence(cfg, wt_cubes, dataset_name) @@ -174,7 +187,10 @@ def run_lwt(cfg: dict): data_info = {'dataset': dataset_name, 'var': var_name, 'preproc_path': var_data[1], - 'ensemble': ensemble} + 'ensemble': dataset_vars[0].get( + 'ensemble', ''), + 'timerange': dataset_vars[0].get( + 'timerange').replace('/', '-')} plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) plot_seasonal_occurrence(cfg, wt_cubes, dataset_name, diff --git a/esmvaltool/diag_scripts/weathertyping/wt_utils.py b/esmvaltool/diag_scripts/weathertyping/wt_utils.py index 4054afc517..d90cbcf327 100644 --- a/esmvaltool/diag_scripts/weathertyping/wt_utils.py +++ b/esmvaltool/diag_scripts/weathertyping/wt_utils.py @@ -498,13 +498,14 @@ def calc_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, ['Lamb Weathertypes'], False, False) - log_provenance(f'{dataset}_wt_prov', cfg, provenance_record) + log_provenance(f'{work_dir}/wt_selected_pairs_{dataset}', + cfg, provenance_record) return map_lwt_to_slwt(lwt, mapping_dict) def calc_const(): - '''Calculate constants for weathertyping algorithm. + """Calculate constants for weathertyping algorithm. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. @@ -512,7 +513,7 @@ def calc_const(): Returns: tuple: The four constants needed for WT calculation. - ''' + """ const1 = 1 / np.cos(45 * np.pi / 180) const2 = np.sin(45 * np.pi / 180) / np.sin(40 * np.pi / 180) @@ -523,7 +524,7 @@ def calc_const(): def calc_westerly_flow(cube: iris.cube.Cube) -> np.array: - '''Calculate the westerly flow over area. + """Calculate the westerly flow over area. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. @@ -534,14 +535,14 @@ def calc_westerly_flow(cube: iris.cube.Cube) -> np.array: Returns: np.array: westerly flow - ''' + """ return 1 / 2 * (cube.data[:, 1, 2] + cube.data[:, 1, 4]) - 1 / 2 * ( cube.data[:, 3, 2] + cube.data[:, 3, 4]) def calc_southerly_flow(cube: iris.cube.Cube, const1: float) -> np.array: - '''Calculate the southerly flow over area. + """Calculate the southerly flow over area. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. @@ -553,7 +554,7 @@ def calc_southerly_flow(cube: iris.cube.Cube, const1: float) -> np.array: Returns: np.array: southerly flow - ''' + """ return const1 * ( 1 / 4 * @@ -563,7 +564,7 @@ def calc_southerly_flow(cube: iris.cube.Cube, const1: float) -> np.array: def calc_resultant_flow(w: np.array, s: np.array) -> np.array: - '''Calculate the resultant flow. + """Calculate the resultant flow. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. @@ -575,13 +576,13 @@ def calc_resultant_flow(w: np.array, s: np.array) -> np.array: Returns: np.array: resultant flow - ''' + """ return (s**2 + w**2)**(1 / 2) def calc_westerly_shear_velocity(cube: iris.cube.Cube, const2: float, const3: float) -> np.array: - '''Calculate westerly shear velocity. + """Calculate westerly shear velocity. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. @@ -594,7 +595,7 @@ def calc_westerly_shear_velocity(cube: iris.cube.Cube, const2: float, Returns: np.array: westerly shear velocity - ''' + """ return const2 * (1 / 2 * (cube.data[:, 0, 2] + cube.data[:, 0, 4]) - 1 / 2 * (cube.data[:, 2, 2] + cube.data[:, 2, 4])) - const3 * ( @@ -605,7 +606,7 @@ def calc_westerly_shear_velocity(cube: iris.cube.Cube, const2: float, def calc_southerly_shear_velocity(cube: iris.cube.Cube, const4: float) -> np.array: - '''Calculate southerly shear velocity. + """Calculate southerly shear velocity. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. @@ -617,7 +618,7 @@ def calc_southerly_shear_velocity(cube: iris.cube.Cube, Returns: np.array: southerly shear velocity - ''' + """ return const4 * ( 1 / 4 * (cube.data[:, 3, 6] + 2 * cube.data[:, 2, 6] + cube.data[:, 1, 6]) - @@ -630,7 +631,7 @@ def calc_southerly_shear_velocity(cube: iris.cube.Cube, def calc_total_shear_velocity(zw: np.array, zs: np.array) -> np.array: - '''Calculate total shear velocity. + """Calculate total shear velocity. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. @@ -642,12 +643,12 @@ def calc_total_shear_velocity(zw: np.array, zs: np.array) -> np.array: Returns: np.array: total shear velocity - ''' + """ return zw + zs def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: - '''Algorithm to calculate Lamb weathertypes. + """Algorithm to calculate Lamb weathertypes. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification scheme. @@ -659,7 +660,7 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: Returns: np.array: Array of Lamb WT for each day - ''' + """ # lats and lons corresponding to datapoints # 55, 5 -> 1 @@ -859,7 +860,8 @@ def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube, ['Lamb Weathertypes'], False, False) - log_provenance(f'{dataset}_wt_prov', cfg, provenance_record) + log_provenance(f'{work_dir}/{output_file_path}/{dataset}', + cfg, provenance_record) def get_colormap(colormap_string: str) -> ListedColormap: @@ -941,7 +943,8 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, dataset = data_info.get('dataset') var_name = data_info.get('var') wt_string = data_info.get('wt_string') - ensemble = data_info.get('ensemble', '') + ensemble = data_info.get('ensemble') + timerange = data_info.get('timerange') logger.info('Plotting %s %s %s for %s %s', dataset, var_name, mode, wt_string, wt) @@ -955,22 +958,26 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, if var_name == 'psl': psl_cmap = get_colormap('psl') - plt.title(f'{var_name} {mode}, wt: {wt}') + plt.title(f'{dataset} {ensemble}, {var_name} {mode}\n' + + f'{timerange}, wt: {wt}') unit = '[hPa]' im = iplt.contourf(cube / 100, cmap=psl_cmap) elif var_name == 'pr': prcp_cmap = get_colormap('prcp') if dataset == 'ERA5': unit = '[m]' - plt.title(f'total {var_name} {mode}, wt: {wt}') + plt.title(f'{dataset} {ensemble}, total {var_name} {mode}\n' + + f'{timerange}, wt: {wt}') else: unit = '[kg m-2 s-1]' - plt.title(f'{var_name} flux {mode}, wt: {wt}') + plt.title(f'{dataset} {ensemble}, {var_name} flux {mode}\n' + + f'{timerange}, wt: {wt}') im = iplt.contourf(cube, cmap=prcp_cmap) elif var_name == 'tas': temp_cmap = get_colormap('temp') unit = '[K]' - plt.title(f'1000 hPa {var_name} {mode}, wt: {wt}') + plt.title(f'{dataset} {ensemble}, 1000 hPa {var_name} {mode}\n' + + f'{timerange}, wt: {wt}') im = iplt.contourf(cube, cmap=temp_cmap) cb = plt.colorbar(im) @@ -1003,9 +1010,9 @@ def plot_maps(wt: np.array, cfg: dict, cube: iris.cube.Cube, ax.add_feature(cfeature.BORDERS, linestyle=':') plt.savefig(f'{local_path}/{wt_string}_{wt}_{dataset}_{ensemble}' - f'_{var_name}_{mode}.png') + f'_{var_name}_{mode}_{timerange}.png') plt.savefig(f'{local_path}/{wt_string}_{wt}_{dataset}_{ensemble}_' - f'{var_name}_{mode}.pdf') + f'{var_name}_{mode}_{timerange}.pdf') plt.close() @@ -1228,6 +1235,8 @@ def calc_wt_means(cfg: dict, cube: iris.cube.Cube, var_name = data_info.get('var') wt_string = data_info.get('wt_string') preproc_path = data_info.get('preproc_path') + ensemble = data_info.get('ensemble') + timerange = data_info.get('timerange') logger.info('Calculating %s %s means for %s', dataset, var_name, wt_string) @@ -1301,8 +1310,10 @@ def calc_wt_means(cfg: dict, cube: iris.cube.Cube, [var_name], ['map'], ['mean']) - log_provenance(f'{dataset}_{var_name}_{wt_string}_means_prov', - cfg, provenance_record) + local_path = f"{cfg.get('plot_dir')}/mean" + + log_provenance(f'{local_path}/{wt_string}_{wt}_{dataset}_{ensemble}' + f'_{var_name}_mean_{timerange}', cfg, provenance_record) def calc_wt_anomalies(cfg: dict, cube: iris.cube.Cube, @@ -1327,6 +1338,8 @@ def calc_wt_anomalies(cfg: dict, cube: iris.cube.Cube, var_name = data_info.get('var_name') wt_string = data_info.get('wt_string') preproc_path = data_info.get('preproc_path') + ensemble = data_info.get('ensemble') + timerange = data_info.get('timerange') logger.info('Calculating %s %s anomalies for %s', dataset, var_name, wt_string) @@ -1404,8 +1417,11 @@ def calc_wt_anomalies(cfg: dict, cube: iris.cube.Cube, [var_name], ['map'], ['anomaly']) - log_provenance(f'{dataset}_{var_name}_{wt_string}_anomaly_prov', - cfg, provenance_record) + local_path = f"{cfg.get('plot_dir')}/anomaly" + + log_provenance(f'{local_path}/{wt_string}_{wt}_{dataset}_{ensemble}' + f'_{var_name}_anomaly__{timerange}', cfg, + provenance_record) def calc_wt_std(cfg: dict, cube: iris.cube.Cube, @@ -1430,6 +1446,8 @@ def calc_wt_std(cfg: dict, cube: iris.cube.Cube, var_name = data_info.get('var_name') wt_string = data_info.get('wt_string') preproc_path = data_info.get('preproc_path') + ensemble = data_info.get('ensemble') + timerange = data_info.get('timerange') logger.info('Calculating %s %s standard deviation for %s', dataset, var_name, wt_string) @@ -1477,7 +1495,7 @@ def calc_wt_std(cfg: dict, cube: iris.cube.Cube, wt_cube_std = extracted_cube.collapsed('time', iris.analysis.STD_DEV) plot_maps(wt, cfg, wt_cube_std, data_info, - 'standard deviation') + 'stddev') elif wt_string == 'lwt': for wt in range(1, 28): target_indices = np.where(lwt == wt) @@ -1494,7 +1512,7 @@ def calc_wt_std(cfg: dict, cube: iris.cube.Cube, wt_cube_std = extracted_cube.collapsed('time', iris.analysis.STD_DEV) plot_maps(wt, cfg, wt_cube_std, data_info, - 'standard deviation') + 'stddev') else: logger.info('WT_STRING NOT SUPPORTED.') @@ -1506,8 +1524,10 @@ def calc_wt_std(cfg: dict, cube: iris.cube.Cube, [var_name], ['map'], ['stddev']) - log_provenance(f'{dataset}_{var_name}_{wt_string}_std_prov', - cfg, provenance_record) + local_path = f"{cfg.get('plot_dir')}/stddev" + + log_provenance(f'{local_path}/{wt_string}_{wt}_{dataset}_{ensemble}' + f'_{var_name}_stddev_{timerange}', cfg, provenance_record) def run_predefined_slwt(work_dir: str, dataset_name: str, From 240bd6ec9d3156cf9fd016e565e1238ea187ff64 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Sun, 29 Sep 2024 13:42:02 +0200 Subject: [PATCH 28/29] area --- esmvaltool/recipes/recipe_weathertyping.yml | 2 +- esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml | 2 +- esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml | 2 +- .../recipes/weathertyping/recipe_weathertyping_CORDEX.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_CanESM5.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_MIROC6.yml | 2 +- .../weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml | 2 +- .../recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/esmvaltool/recipes/recipe_weathertyping.yml b/esmvaltool/recipes/recipe_weathertyping.yml index 38105376a3..ec3ca20e86 100644 --- a/esmvaltool/recipes/recipe_weathertyping.yml +++ b/esmvaltool/recipes/recipe_weathertyping.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml index 30992f4141..ad95463646 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP5.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml index d7bad01ac6..c7e9963531 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CMIP6.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml index ad0cb886d6..ee9fe47189 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_CORDEX.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml index 6a4fef320e..60d734e179 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_ACCESS-ESM1-5.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml index 5b3f840dd6..52df749947 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CNRM-CM6-1.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml index a9021a4324..ffe889dce3 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_CanESM5.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml index d7ad57d393..67b12dfa1c 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_EC-Earth3.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml index d1569c7f2a..757bdb1b7e 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_IPSL-CM6A-LR.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml index 254ec6ab91..7772fe8d96 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC-ES2L.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml index 9c460b70c1..daf537dff9 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MIROC6.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml index c1992b2018..27738fbea5 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_SMILES_MPI-ESM1-2-LR.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. diff --git a/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml b/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml index 58af323f32..61b0eae88e 100644 --- a/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml +++ b/esmvaltool/recipes/weathertyping/recipe_weathertyping_maraunjgr21.yml @@ -3,7 +3,7 @@ documentation: description: | A diagnostic to calculate Lamb weathertypes over a given region. Furthermore, - correlations between weathertypes and precipitation patterns over a given are can be calculated + correlations between weathertypes and precipitation patterns over a given area can be calculated and 'combined' or 'simplified' weathertypes can be derived. Additionally, mean fields, as well as anomalies and standard deviations can be plotted. From 599dc38aac0a11295d0517dc980c712cd72a44a7 Mon Sep 17 00:00:00 2001 From: Thomas Kroissenbrunner Date: Thu, 3 Oct 2024 14:17:03 +0200 Subject: [PATCH 29/29] renamed vars --- .../weathertyping/weathertyping.py | 26 +++- .../diag_scripts/weathertyping/wt_utils.py | 142 ++++++++++-------- 2 files changed, 101 insertions(+), 67 deletions(-) diff --git a/esmvaltool/diag_scripts/weathertyping/weathertyping.py b/esmvaltool/diag_scripts/weathertyping/weathertyping.py index 7a48a3f2fe..0fbd872bd2 100644 --- a/esmvaltool/diag_scripts/weathertyping/weathertyping.py +++ b/esmvaltool/diag_scripts/weathertyping/weathertyping.py @@ -1,11 +1,26 @@ +""" This script calculates weathertypes for the input datasets and writes \ + to file. It also plots the means and seasonal occurrence of the weathertypes, \ + and offers the option to calculate simplified weathertypes based on \ + precipitation patterns.""" import iris -from wt_utils import * +from wt_utils import get_cfg_vars, load_wt_preprocessors, wt_algorithm, \ + get_ancestors_era5_eobs, calc_slwt_obs, run_predefined_slwt, \ + combine_wt_to_file, load_wt_files, get_looping_dict, plot_means, \ + plot_seasonal_occurrence, write_lwt_to_file, get_model_output_filepath, \ + calc_lwt_slwt_model, calc_lwt_model # import internal esmvaltool modules here from esmvaltool.diag_scripts.shared import run_diagnostic def run_automatic_slwt(cfg: dict): + """Run the automated calculation for simplified weathertypes \ + and write to file, and plot the means and seasonal occurrence \ + of the weathertypes. + + Args: + cfg (dict): Nested dictionary of metadata + """ preproc_variables_dict, _, _, \ work_dir, plotting, _, predefined_slwt = get_cfg_vars(cfg) for dataset_name, dataset_vars in preproc_variables_dict.items(): @@ -104,10 +119,17 @@ def run_automatic_slwt(cfg: dict): plot_means(cfg, var_data[0], wt_cubes, data_info, only_lwt=True) plot_seasonal_occurrence(cfg, wt_cubes, dataset_name, - ensemble=ensemble) + ensemble=dataset_vars[0]. + get('ensemble', '')) def run_lwt(cfg: dict): + """Run calculation of weathertypes and write to file, and plot the means \ + and seasonal occurrence of the weathertypes. + + Args: + cfg (dict): Nested dictionary of metadata + """ preproc_variables_dict, _, _, \ work_dir, plotting, _, _ = get_cfg_vars(cfg) for dataset_name, dataset_vars in preproc_variables_dict.items(): diff --git a/esmvaltool/diag_scripts/weathertyping/wt_utils.py b/esmvaltool/diag_scripts/weathertyping/wt_utils.py index d90cbcf327..49bcf2dc39 100644 --- a/esmvaltool/diag_scripts/weathertyping/wt_utils.py +++ b/esmvaltool/diag_scripts/weathertyping/wt_utils.py @@ -97,20 +97,20 @@ def plot_seasonal_occurrence(cfg: dict, wt_cubes: iris.cube.Cube, y = np.vstack(list(wt_stack)) # plot - _, ax = plt.subplots(figsize=(10, 10)) + _, ax_ = plt.subplots(figsize=(10, 10)) - ax.set_title(f'{dataset_name}') + ax_.set_title(f'{dataset_name}') - ax.stackplot(x, y, colors=colors) + ax_.stackplot(x, y, colors=colors) - ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), - fancybox=True, shadow=True, ncol=9, - labels=tuple(f'WT {i+1}' for i in range(0, wt_numbers))) + ax_.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), + fancybox=True, shadow=True, ncol=9, + labels=tuple(f'WT {i+1}' for i in range(0, wt_numbers))) - ax.set(xlim=(0, 11), xticks=np.arange(0, 12), - ylim=(0, 1), yticks=np.arange(0, 1.1, 0.1)) - ax.set_xlabel('Month') - ax.set_ylabel('Cumulative Relative occurrence') + ax_.set(xlim=(0, 11), xticks=np.arange(0, 12), + ylim=(0, 1), yticks=np.arange(0, 1.1, 0.1)) + ax_.set_xlabel('Month') + ax_.set_ylabel('Cumulative Relative occurrence') plt.savefig(f'{output_path}/{dataset_name}_{ensemble}_' f'{wt_string}_rel_occurrence.png') @@ -429,6 +429,13 @@ def find_intersection(m_list: list) -> list: def write_mapping_dict(work_dir: str, dataset: str, mapping_dict: dict): + """Write mapping dictionary to file. + + Args: + work_dir (str): Working directory + dataset (str): Name of dataset + mapping_dict (dict): Mapping dictionary + """ mapping_dict_reformat = convert_dict(mapping_dict) with open(f'{work_dir}/wt_mapping_dict_{dataset}.json', @@ -439,8 +446,8 @@ def write_mapping_dict(work_dir: str, dataset: str, mapping_dict: dict): def calc_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, dataset: str, ancestors: list) -> np.array: - """Calculate simplified weathertypes for observation datasets based on - precipitation patterns over specified area. + """Calculate simplified weathertypes for observation datasets based on \ + precipitation patterns over specified area. Args: cfg (dict): Configuration dictionary from recipe @@ -463,12 +470,12 @@ def calc_slwt_obs(cfg: dict, lwt: np.array, cube: iris.cube.Cube, tcoord = cube.coord('time') wt_data_prcp = [] - for wt in range(1, 28): - target_indices = np.where(lwt == wt) + for wt_ in range(1, 28): + target_indices = np.where(lwt == wt_) if len(target_indices[0]) < 1: logger.info( 'calc_slwt_obs - CAUTION: Skipped wt %s \ - for dataset %s!', wt, dataset) + for dataset %s!', wt_, dataset) continue dates = [ tcoord.units.num2date(tcoord.points[i]) for i in target_indices @@ -563,7 +570,8 @@ def calc_southerly_flow(cube: iris.cube.Cube, const1: float) -> np.array: (cube.data[:, 3, 2] + 2 * cube.data[:, 2, 2] + cube.data[:, 1, 2])) -def calc_resultant_flow(w: np.array, s: np.array) -> np.array: +def calc_resultant_flow(westerly_flow: np.array, + southerly_flow: np.array) -> np.array: """Calculate the resultant flow. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification @@ -571,13 +579,13 @@ def calc_resultant_flow(w: np.array, s: np.array) -> np.array: Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: - w (np.array): westerly flow. - s (np.array): southerly flow + westerly_flow (np.array): westerly flow. + southerly_flow (np.array): southerly flow Returns: np.array: resultant flow """ - return (s**2 + w**2)**(1 / 2) + return (southerly_flow**2 + westerly_flow**2)**(1 / 2) def calc_westerly_shear_velocity(cube: iris.cube.Cube, const2: float, @@ -630,7 +638,8 @@ def calc_southerly_shear_velocity(cube: iris.cube.Cube, (cube.data[:, 3, 0] + 2 * cube.data[:, 2, 0] + cube.data[:, 1, 0])) -def calc_total_shear_velocity(zw: np.array, zs: np.array) -> np.array: +def calc_total_shear_velocity(westerly_shear_velocity: np.array, + southerly_shear_velocity: np.array) -> np.array: """Calculate total shear velocity. Eq. taken from: Jones, P.D., Hulme, M. and Briffa, K.R. (1993), A comparison of Lamb circulation types with an objective classification @@ -638,13 +647,13 @@ def calc_total_shear_velocity(zw: np.array, zs: np.array) -> np.array: Int. J. Climatol., 13: 655-663. https://doi.org/10.1002/joc.3370130606 Args: - zw (np.array): westerly shear velocity - zs (np.array): southerly shear velocity + westerly_shear_velocity (np.array): westerly shear velocity + southerly_shear_velocity (np.array): southerly shear velocity Returns: np.array: total shear velocity """ - return zw + zs + return westerly_shear_velocity + southerly_shear_velocity def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: @@ -688,96 +697,99 @@ def wt_algorithm(cube: iris.cube.Cube, dataset: str) -> np.array: const1, const2, const3, const4 = calc_const() # westerly flow - w = calc_westerly_flow(cube) + westerly_flow = calc_westerly_flow(cube) # southerly flow - s = calc_southerly_flow(cube, const1) + southerly_flow = calc_southerly_flow(cube, const1) # resultant flow - f = calc_resultant_flow(w, s) + total_flow = calc_resultant_flow(westerly_flow, southerly_flow) # westerly shear vorticity - zw = calc_westerly_shear_velocity(cube, const2, const3) + westerly_shear_velocity = calc_westerly_shear_velocity(cube, const2, + const3) # southerly shear vorticity - zs = calc_southerly_shear_velocity(cube, const4) + southerly_shear_velocity = calc_southerly_shear_velocity(cube, const4) # total shear vorticity - z = calc_total_shear_velocity(zw, zs) + total_shear_velocity = calc_total_shear_velocity(westerly_shear_velocity, + southerly_shear_velocity) - wt = np.zeros(len(z)) + weathertypes = np.zeros(len(total_shear_velocity)) - for i, z_i in enumerate(z): + for i, z_i in enumerate(total_shear_velocity): - direction = np.arctan(w[i] / s[i]) * 180 / np.pi # deg - if s[i] >= 0: + direction = (np.arctan(westerly_flow[i] / southerly_flow[i]) + * 180 / np.pi) # deg + if southerly_flow[i] >= 0: direction += 180 # deg if direction < 0: direction += 360 # deg # Lamb pure directional type - if abs(z_i) < f[i]: + if abs(z_i) < total_flow[i]: if 337.5 <= direction or direction < 22.5: - wt[i] = 1 + weathertypes[i] = 1 elif 22.5 <= direction < 67.5: - wt[i] = 2 + weathertypes[i] = 2 elif 67.5 <= direction < 112.5: - wt[i] = 3 + weathertypes[i] = 3 elif 112.5 <= direction < 157.5: - wt[i] = 4 + weathertypes[i] = 4 elif 157.5 <= direction < 202.5: - wt[i] = 5 + weathertypes[i] = 5 elif 202.5 <= direction < 247.5: - wt[i] = 6 + weathertypes[i] = 6 elif 247.5 <= direction < 292.5: - wt[i] = 7 + weathertypes[i] = 7 elif 292.5 <= direction < 337.5: - wt[i] = 8 + weathertypes[i] = 8 # Lamb’s pure cyclonic and anticyclonic type - elif (2 * f[i]) < abs(z_i): + elif (2 * total_flow[i]) < abs(z_i): if z_i > 0: - wt[i] = 9 + weathertypes[i] = 9 elif z_i < 0: - wt[i] = 10 + weathertypes[i] = 10 # Lambs’s synoptic/direction hybrid types - elif f[i] < abs(z_i) < (2 * f[i]): + elif total_flow[i] < abs(z_i) < (2 * total_flow[i]): if z_i > 0: if 337.5 <= direction or direction < 22.5: - wt[i] = 11 + weathertypes[i] = 11 elif 22.5 <= direction < 67.5: - wt[i] = 12 + weathertypes[i] = 12 elif 67.5 <= direction < 112.5: - wt[i] = 13 + weathertypes[i] = 13 elif 112.5 <= direction < 157.5: - wt[i] = 14 + weathertypes[i] = 14 elif 157.5 <= direction < 202.5: - wt[i] = 15 + weathertypes[i] = 15 elif 202.5 <= direction < 247.5: - wt[i] = 16 + weathertypes[i] = 16 elif 247.5 <= direction < 292.5: - wt[i] = 17 + weathertypes[i] = 17 elif 292.5 <= direction < 337.5: - wt[i] = 18 + weathertypes[i] = 18 elif z_i < 0: if 337.5 <= direction or direction < 22.5: - wt[i] = 19 + weathertypes[i] = 19 elif 22.5 <= direction < 67.5: - wt[i] = 20 + weathertypes[i] = 20 elif 67.5 <= direction < 112.5: - wt[i] = 21 + weathertypes[i] = 21 elif 112.5 <= direction < 157.5: - wt[i] = 22 + weathertypes[i] = 22 elif 157.5 <= direction < 202.5: - wt[i] = 23 + weathertypes[i] = 23 elif 202.5 <= direction < 247.5: - wt[i] = 24 + weathertypes[i] = 24 elif 247.5 <= direction < 292.5: - wt[i] = 25 + weathertypes[i] = 25 elif 292.5 <= direction < 337.5: - wt[i] = 26 + weathertypes[i] = 26 # light indeterminate flow, corresponding to Lamb’s unclassified type U - elif abs(z_i) < 6 and f[i] < 6: - wt[i] = 27 + elif abs(z_i) < 6 and total_flow[i] < 6: + weathertypes[i] = 27 - return wt + return weathertypes def calc_lwt_slwt_model(cfg: dict, cube: iris.cube.Cube,