Exemple #1
0
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
Exemple #2
0
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)
Exemple #3
0
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,
Exemple #5
0
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
Exemple #6
0
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