# load the corresponding model runs # convert monthly time steps to daily time steps, each month comprising 31 days data_times_m = np.arange(len(sub_ds_m["time"])) * 31 data_times_y0 = np.arange(len(sub_ds_y0["time"])) * 31 * 12 data_times_y6 = np.arange(len(sub_ds_y6["time"])) * 31 * 12 # + # monthly start_values_m = sub_ds_m["start_values"] us_m = sub_ds_m["us"] Bs_m = sub_ds_m["Bs"] pwc_mr_m = PWCModelRunFD.from_Bs_and_us(symbols("t"), data_times_m, start_values_m.values, Bs_m[:-1], us_m[:-1], state_variables=sub_ds_m.pool.values) # yearly (Jan) start_values_y0 = sub_ds_y0["start_values"] us_y0 = sub_ds_y0["us"] Bs_y0 = sub_ds_y0["Bs"] pwc_mr_y0 = PWCModelRunFD.from_Bs_and_us(symbols("t"), data_times_y0, start_values_y0.values, Bs_y0[:-1], us_y0[:-1], state_variables=sub_ds_y0.pool.values)
sub_ds = ds.isel(lat=lat, lon=lon, prob=prob) sub_ds # + # load the corresponding model run # convert monthly time steps to daily time steps, each month comprising 31 days data_times = np.arange(len(sub_ds["time"])) * 31 start_values = sub_ds["start_values"] us = sub_ds["us"] Bs = sub_ds["Bs"] pwc_mr = PWCModelRunFD.from_Bs_and_us(symbols("t"), data_times, start_values.values, Bs[:-1], us[:-1], state_variables=sub_ds.pool.values) # - fig, ax = plt.subplots(figsize=(8, 8)) pwc_mr.model.plot_pools_and_fluxes(ax, legend=False) _ = ax.set_title("CARDAMOM") # compute the solution #soln = pwc_mr.solve() soln = sub_ds["solution"].values # + fig, axes = plt.subplots(ncols=2, nrows=3, figsize=(18, 12))
def func(ds_single_site): data_times = ds_single_site.times.data #.compute() start_values = ds_single_site.start_values.data #.compute() Bs = ds_single_site.Bs.data[:-1] #.compute() us = ds_single_site.us.data[:-1] #.compute() mr = PWCModelRunFD.from_Bs_and_us(symbols('t'), data_times, start_values, Bs, us) coords_time = ds_single_site.time coords_pool = ds_single_site.pool data_vars = dict() soln = mr.solve() data_vars['soln'] = xr.DataArray( data=soln, dims=['time', 'pool'], coords={ 'time': coords_time, 'pool': coords_pool }, attrs={'units': ds_single_site.start_values.attrs['units']}) mav = mr.age_moment_vector(1) / 365.25 data_vars['mean_age_vector'] = xr.DataArray(data=mav, dims=['time', 'pool'], coords={ 'time': coords_time, 'pool': coords_pool }, attrs={'units': 'yr'}) msa = mr.system_age_moment(1) / 365.25 data_vars['mean_system_age'] = xr.DataArray(data=msa, dims=['time'], coords={'time': coords_time}, attrs={'units': 'yr'}) asdv = np.sqrt(mr.age_moment_vector(2)) / 365.25 data_vars['age_standard_deviation_vector'] = xr.DataArray( data=asdv, dims=['time', 'pool'], coords={ 'time': coords_time, 'pool': coords_pool }, attrs={'units': 'yr'}) sasd = np.sqrt(mr.system_age_moment(2)) / 365.25 data_vars['system_age_standard_deviation'] = xr.DataArray( data=sasd, dims=['time'], coords={'time': coords_time}, attrs={'units': 'yr'}) res = xr.Dataset(coords={ 'time': coords_time, 'pool': coords_pool }, data_vars=data_vars) return res