def build_climate_cube( tlim=(1970, 2099), variables=['tmean'], downscaling_method='quantile-mapping-v3' ): """""" gcms = [ ('CanESM5-CanOE', 'r3i1p2f1'), ('MIROC-ES2L', 'r1i1p1f2'), ('ACCESS-CM2', 'r1i1p1f1'), ('ACCESS-ESM1-5', 'r10i1p1f1'), ('MRI-ESM2-0', 'r1i1p1f1'), ('MPI-ESM1-2-LR', 'r10i1p1f1'), ] scenarios = ['ssp245', 'ssp370', 'ssp585'] all_scenarios = [] for scenario in scenarios: all_gcms = [] for (gcm, ensemble_member) in gcms: cmip = load.cmip( store='az', model=gcm, tlim=tlim, scenario=scenario, historical=True, member=ensemble_member, method=downscaling_method, sampling='annual', variables=variables, ) all_gcms.append(cmip) concatted = xr.concat(all_gcms, dim='gcm') concatted = concatted.assign_coords({'gcm': [gcm[0] for gcm in gcms]}) all_scenarios.append(concatted) ds = xr.concat(all_scenarios, dim='scenario') ds = ds.assign_coords({'scenario': scenarios}) return ds
def cmip_fia_long(cmip_table, method): # generate long data w/ cmip df_fia = load.fia(store='az', states=states, clean=False) keep_vars = (['lat', 'lon', 'plot_cn'] + [var + '_min' for var in variables] + [var + '_mean' for var in variables] + [var + '_max' for var in variables]) for i, row in cmip_table.iterrows(): if 'hist' in row.scenario: targets = targets_historical else: targets = targets_future for target in targets: historical = target == '2015' tlim = (str(int(target) - 5), str(int(target) + 4)) print(tlim, row) df = load.cmip( store='az', tlim=(int(tlim[0]), int(tlim[1])), variables=variables, df=df_fia, model=row.model, scenario=row.scenario, member=row.member, historical=historical, method=method, sampling='annual', ) df = df[keep_vars] write_df( df, f'{method}/FIA-CMIP6-Long-{row.model}.{row.scenario}.{row.member}-{tlim[0]}.{tlim[1]}', )
targets = list(map(lambda x: str(x), np.arange(2020, 2120, 20))) cmip_models = [ 'BCC-CSM2-MR', 'ACCESS-ESM1-5', 'CanESM5', 'MIROC6', 'MPI-ESM1-2-LR' ] scenarios = ['ssp245', 'ssp370', 'ssp585'] for it in tqdm(range(len(targets))): target = targets[it] tlim = (str(int(target) - 5), str(int(target) + 4)) for cmip_model in cmip_models: for scenario in scenarios: key = cmip_model + '_' + scenario + '_' + target df = load.cmip( store=store, tlim=(int(tlim[0]), int(tlim[1])), data_vars=data_vars, data_aggs=data_aggs, model=cmip_model, scenario=scenario, annual=True, df=df, ) pf[key] = np.NaN x, meta = prepare.insects(df, eval_only=True, duration=10) x_z = utils.zscore_2d(x, x_mean, x_std) for code in codes: if code in models.keys(): model = models[code] inds = df['type_code'] == code pf.loc[inds, key] = model.predict(x=x_z[inds]) pf['r2'] = pf['type_code'].map(lambda k: models[k].train_r2 if k in models.keys() else np.NaN)
('ACCESS-CM2', 'r1i1p1f1'), ('ACCESS-ESM1-5', 'r10i1p1f1'), ('MRI-ESM2-0', 'r1i1p1f1'), ('MPI-ESM1-2-LR', 'r10i1p1f1'), ] scenarios = ['ssp245', 'ssp370', 'ssp585'] for (cmip_model, member) in cmip_models: for scenario in tqdm(scenarios): results = [] climate = load.cmip( store=store, model=cmip_model, coarsen=coarsen_predict, method='quantile-mapping-v3', scenario=scenario, tlim=('1969', '2099'), variables=data_vars, sampling='monthly', member=member, historical=True, mask=mask, ) try: for year in np.arange(1970, 2100, 10): ds_future = xr.Dataset() print('[fire] conducting prediction for {} {} {}'.format( cmip_model, scenario, year)) prepend_time_slice = slice(str(year - 1), str(year - 1)) analysis_time_slice = slice(str(year), str(year + 9))
'ACCESS-ESM1-5', 'MRI-ESM2-0', 'MPI-ESM1-2-LR', ] scenarios = ['ssp245', 'ssp370', 'ssp585'] for it in tqdm(range(len(targets))): target = targets[it] tlim = (str(int(target) - 10), str(int(target) + 9)) for cmip_model in cmip_models: for scenario in scenarios: key = cmip_model + '_' + scenario + '_' + target df = load.cmip( store=store, tlim=(int(tlim[0]), int(tlim[1])), variables=variables, historical=True if int(tlim[0]) < 2015 else False, model=cmip_model, scenario=scenario, sampling='annual', df=df, ) pf[key] = np.NaN for code in type_codes: if code in models.keys(): model = models[code] inds = df['type_code'] == code x = df[inds]['age'] year = df[inds]['year'] f = [df[inds]['tmean_mean'], df[inds]['ppt_mean']] if it == 0: pf.loc[inds, key] = model.predict( np.maximum(x + (float(target) - year), 0), f