def comp_lossr(v, ext, _ds): cb = average_model_var(_ds, f'cb_{v}', area='Global', dim=None, minp=850., time_mask=None) lr = average_model_var(_ds, f'{v}{ext}', area='Global', dim=None, minp=850., time_mask=None) out = cb[f'cb_{v}'] / lr[f'{v}{ext}'] / (60 * 60 * 24) if out < 0: out = abs(out) out.attrs['units'] = 'days' return out
def get_avg_diff(case_oth, case_ctrl, case_dic, relative, var): """ :param case_oth: :param case_ctrl: :param case_dic: :param relative: :param var: :return: """ # glob_avg_ctr = masked_average(xr1, weights=lat_wgt) glob_avg_ctrl = average_model_var(case_dic[case_ctrl], var)[var].values glob_avg_oth = average_model_var(case_dic[case_oth], var)[var].values if relative: _a = (glob_avg_oth - glob_avg_ctrl) / abs(glob_avg_ctrl) * 100 return ', $\mu$=%.2f %%' % _a else: _a = (glob_avg_oth - glob_avg_ctrl) unit = sectional_v2.util.naming_conventions.var_info.get_fancy_unit_xr( case_dic[case_ctrl][var], var) return ', $\mu$=%.2f %s' % (_a, unit)
def get_average_map2(ds, varlist, case_name, from_time, to_time, avg_over_lev=True, pmin=850., p_level=1013., pressure_coord=True, save_avg=True, recalculate=False, model_name='NorESM', time_mask=None): """ :param ds: :param varlist: :param case_name: :param from_time: :param to_time: :param avg_over_lev: :param pmin: :param p_level: :param pressure_coord: :param save_avg: :param recalculate: :param model_name: :param time_mask: :return: """ xr_out = ds.copy() for var in varlist: found_map_avg = False # Look for file: if not recalculate: ds_copy, found_map_avg = load_average2map(model_name, case_name, var, from_time, to_time, avg_over_lev, pmin, p_level, pressure_coord, time_mask=time_mask) # if file not found: if not found_map_avg: # some fields require other fields for weighted average: sub_varL = get_fields4weighted_avg(var) ds_copy = ds.copy() for svar in sub_varL: if ('lev' in ds[svar].dims): had_lev_coord = True else: had_lev_coord = False if avg_over_lev: ds_copy = average_model_var( ds_copy, svar, area='Global', dim=list(set(ds.dims) - {'lat', 'lon'}), minp=pmin, time_mask=time_mask) else: ds_copy = average_model_var( ds_copy, svar, area='Global', dim=list(set(ds.dims) - {'lat', 'lon', 'lev'}), time_mask=time_mask) if 'lev' in ds_copy[svar].dims: ds_copy[svar] = ds_copy[svar].sel(lev=p_level, method='nearest') ds_copy = compute_weighted_averages(ds_copy, var, model_name) ds_copy[var].attrs['Calc_weight_mean'] = str( is_weighted_avg_var(var)) + ' map' if save_avg: filen = filename_map_avg(model_name, case_name, var, from_time, to_time, avg_over_lev, pmin, p_level, pressure_coord, lev_was_coord=had_lev_coord, time_mask=time_mask) practical_functions.make_folders(filen) practical_functions.save_dataset_to_netcdf(ds_copy, filen) xr_out[var] = ds_copy[var] return xr_out
# %% dff_ = maps_dic[cases[1]][['DIR_Ghan']] - maps_dic[cases[0]][['DIR_Ghan' ]] #['DIR_Ghan'] print(cases[1]) # %% dff2_ = maps_dic[cases[2]][['DIR_Ghan']] - maps_dic[cases[0]][[ 'DIR_Ghan' ]] #['DIR_Ghan'] print(cases[2]) # %% from sectional_v2.util.slice_average.avg_pkg import average_model_var # %% average_model_var(dff_, 'DIR_Ghan', area='Global') # %% average_model_var(dff2_, 'DIR_Ghan', area='Global') # %% varl = [ 'LWDIR_Ghan', 'LWDIR_Ghan' ] #'LWDIR_Ghan']#, 'SO4_NAcondTend']#, 'leaveSecH2SO4','leaveSecSOA']#,'TGCLDCWP'] relative = False #plot_diff(maps_dic, varl, cases[::-1],nr_cols=1, relative=relative) load_and_plot_diff_mm(varl, to_case, from_cases,
def get_global_avg_map(ctrl_case, nested_cases, var): glob_avg_ctrl = average_model_var(nested_cases[ctrl_case], var)[var] return glob_avg_ctrl.values
def get_average_area(xr_ds: xr.Dataset, varList: list, case_name: str, area: str, from_time, to_time, model_name: str, pmin: float, avg_over_lev: bool, p_level: float, pressure_coords: bool, look_for_file: bool = True, ) -> xr.Dataset: """ :param from_time: :param to_time: :param xr_ds: :param varList: :param model_name: :param pmin: :param case_name: :param avg_over_lev: :param p_level: :param pressure_coords: :param look_for_file: :return: """ from_time = from_time #xr_ds.attrs['startyear'] to_time = to_time #xr_ds.attrs['endyear'] xr_out = xr_ds.copy() for var in varList: print(var) found_area_mean = False ds_area_avgs, file_found = load_area_file_var(model_name, case_name, var, area, from_time, to_time, avg_over_lev, pmin, p_level, pressure_coords) if file_found: xr_out[var] = ds_area_avgs[var] if not found_area_mean or not look_for_file: sub_varL = get_fields4weighted_avg(var) dummy = xr_ds.copy() for svar in sub_varL: lev_was_coord = False if 'lev' in xr_ds[svar].dims: lev_was_coord=True if avg_over_lev: dummy = average_model_var(dummy, svar, area=area, minp=pmin, dim = list(xr_ds[svar].dims)) #\ else: dummy = average_model_var(dummy, svar, area=area, dim = list(set(xr_ds[svar].dims)-{'lev'}))#.sel(lev=p_level, method='nearest') print(dummy) print(list(set(xr_ds[svar].dims)-{'lev'})) if 'lev' in dummy.dims: dummy = dummy.sel(lev=p_level, method='nearest') dummy = compute_weighted_averages(dummy, var, model_name) dummy[var].attrs['Calc_weight_mean']=str(is_weighted_avg_var(var)) + ' area: %s'%area filen = filename_area_avg(var, model_name, case_name, area, from_time, to_time, avg_over_lev, pmin, p_level, pressure_coords, lev_was_coord=lev_was_coord) practical_functions.make_folders(filen) if ds_area_avgs is None: practical_functions.save_dataset_to_netcdf(dummy, filen) else: ds_area_avgs[var] = dummy[var] practical_functions.save_dataset_to_netcdf(ds_area_avgs, filen) xr_out[var] = dummy[var] return xr_out