def epsilon_family( limited_srm, par_dict, control_start_values, times, func_dict, epsilons ): z=Symbol('z') eps=Symbol('eps') u_z_exp=half_saturation(z,eps) bm=BastinModel(limited_srm,u_z_exp,z) fig=plt.figure() ax1=fig.add_subplot(1,1,1) ax1.set_title("control u for different values of epsilon") for eps_val in epsilons: par_dict[eps]=eps_val bmr=BastinModelRun( bm, par_dict, control_start_values, times, func_dict ) phi_num=bmr.phi_num((z,)) soln=bmr.solve() z_sol=soln[:,3] pe('bm.u_expr',locals()) u=phi_num(z_sol) ax1.plot(times,u) ax1.legend(loc=3) fig.savefig(my_func_name()+'.pdf')
def panel_two(bm, par_dict_v1, control_start_values, times, func_dict): start_values=control_start_values[:-1] bmr=BastinModelRun( bm, par_dict_v1, control_start_values, times, func_dict) soln_controlled = bmr.solve() tup=(bm.time_symbol,bm.z_sym) phi_num=bmr.phi_num(tup) z_vals=soln_controlled[:,3] u_vals=phi_num(times,z_vals) efl=bmr.external_input_flux_funcs() f=efl[0] values=f(times) fig=plt.figure(figsize=(10,10)) #fig1.title('Total carbon'+title_suffs[version]) ax1=fig.add_subplot(2,1,1) ax1.tick_params(axis='both', which='major', labelsize=12) ax1.plot(times, u_vals,color='green',label='u') ax1.set_ylabel('$u(t)$ (unitless)', fontsize=15) #ax1.legend(loc=2) ax1.set_title("(a)") ax1.set_xlim(1900, 2500) ax2=fig.add_subplot(2,1,2) ax2.tick_params(axis='both', which='major', labelsize=12) ax2.plot(times, values,color='blue' ,label='u d') ax2.set_ylabel('Allowed carbon emissions (Pg C/yr)', fontsize=15) ax2.set_xlabel('Time (yr)', fontsize=15) ax2.set_ylim(ax1.get_ylim()) ax2.set_xlim(1900, 2500) ax2.set_title("(b)") fig.savefig(my_func_name()+'.pdf', bbox_inches='tight')
def panel_one(limited_srm,bm, par_dict_v1, control_start_values, times, func_dict): start_values=control_start_values[:-1] limited_smr = SmoothModelRun(limited_srm, par_dict_v1, start_values, times, func_dict) bmr=BastinModelRun( bm, par_dict_v1, control_start_values, times, func_dict) soln_uncontrolled = limited_smr.solve() soln_controlled = bmr.solve() fig=plt.figure(figsize=(10,10)) #fig1.title('Total carbon'+title_suffs[version]) ax1=fig.add_subplot(2,1,1) ax1.tick_params(axis='both', which='major', labelsize=12) ax1.plot(times, soln_uncontrolled[:,0],color='blue' ,label='Atmosphere') ax1.plot(times, soln_uncontrolled[:,1],color='green',label='Terrestrial Biosphere') ax1.plot(times, soln_uncontrolled[:,2],color='red' ,label='Surface ocean') ax1.set_ylabel('Carbon stocks (Pg C)', fontsize=15) ax1.legend(loc=2) ax1.set_title("(a)") ax1.set_xlim(1900, 2500) ax2=fig.add_subplot(2,1,2) ax2.tick_params(axis='both', which='major', labelsize=12) ax2.plot(times, soln_controlled[:,0],color='blue' ,label='Atmosphere') ax2.plot(times, soln_controlled[:,1],color='green',label='Terrestrial Biosphere') ax2.plot(times, soln_controlled[:,2],color='red' ,label='Surface ocean') ax2.set_ylabel('Carbon stocks (Pg C)', fontsize=15) ax2.set_xlabel('Time (yr)', fontsize=15) ax2.set_ylim(ax1.get_ylim()) ax2.set_xlim(1900, 2500) ax2.set_title("(b)") #limited_soln_uncontrolled fig.savefig(my_func_name()+'.pdf', bbox_inches='tight')
def epsilon_family_2(limited_srm, par_dict, start_values, times, func_dict, zs, epsilons): z = Symbol('z') eps = Symbol('eps') z0 = Symbol('z0') u_z_exp = half_saturation(z, eps) bm = BastinModel(limited_srm, u_z_exp, z) fig = plt.figure() ax1 = fig.add_subplot(1, 1, 1) ax1.set_title("control u for different values of epsilon") for z0_val in zs: for eps_val in epsilons: control_start_values = np.array(list(start_values) + [z0_val]) par_dict[eps] = eps_val par_dict[z0] = z0_val, bmr = BastinModelRun(bm, par_dict, control_start_values, times, func_dict) phi_num = bmr.phi_num((z, )) soln = bmr.solve() z_sol = soln[:, 3] pe('bm.u_expr', locals()) u = phi_num(z_sol) ax1.plot(times, u, label="eps:" + str(eps_val) + ",z0=" + str(z0_val)) ax1.legend(loc=3) fig.savefig(my_func_name() + '.pdf')
def deceleration_family(limited_srm, par_dict, start_values, times, func_dict, zs, alphas): z = Symbol('z') z_max = Symbol('z_max') alph = Symbol('alph') u_z_exp = deceleration(z, z_max, alph) bm = BastinModel(limited_srm, u_z_exp, z) fig = plt.figure() ax1 = fig.add_subplot(1, 1, 1) ax1.set_title( "control u with deceleration limiter for different values of alph") for z_max_val in zs: for alpha_val in alphas: control_start_values = np.array(list(start_values) + [z_max_val]) par_dict[z_max] = z_max_val par_dict[alph] = alpha_val bmr = BastinModelRun(bm, par_dict, control_start_values, times, func_dict) phi_num = bmr.phi_num((z, )) soln = bmr.solve() z_sol = soln[:, 3] pe('bm.u_expr', locals()) u = phi_num(z_sol) ax1.plot(times, u, label="alph:" + str(alpha_val) + ",z_max=" + str(z_max_val)) ax1.legend(loc=3) fig.savefig(my_func_name() + '.pdf')
def cubic_family( limited_srm, par_dict, start_values, times, func_dict, zs ): z=Symbol('z') z_max=Symbol('z_max') u_z_exp=cubic(z,z_max) bm=BastinModel(limited_srm,u_z_exp,z) fig=plt.figure() ax1=fig.add_subplot(1,1,1) #ax1.set_title("control u for different values of z_max") for z_max_val in zs: control_start_values=np.array(list(start_values)+[z_max_val]) par_dict[z_max]=z_max_val bmr=BastinModelRun( bm, par_dict, control_start_values, times, func_dict ) phi_num=bmr.phi_num((z,)) soln=bmr.solve() z_sol=soln[:,3] pe('bm.u_expr',locals()) u=phi_num(z_sol) ax1.plot(times,u,label="$z_{max}$="+str(z_max_val)) ax1.set_ylabel('$u(t)$ (unitless)') ax1.set_xlabel('Time (years)') ax1.legend(loc=3) fig.savefig(my_func_name()+'.pdf')
"unlimited_smr": SmoothModelRun(unlimited_srm, par_dict, start_values, times, func_dict), "limited_smr": SmoothModelRun(limited_srm, par_dict, start_values, times, func_dict), # "limited_90_smr": # SmoothModelRun( # limited_srm_90, par_dict, start_values , times, func_dict), # "limited_300_controlled_half_saturation_10_20": # BastinModelRun( # half_saturation_bm_300, par_dict_half_saturation_10, # start_values=np.array(list(start_values)+[20]), # times=times, func_dict=func_dict), "limited_controlled_cubic_fast": BastinModelRun(cubic_bm, par_dict_cubic_fast, start_values=np.array( list(start_values) + [par_dict_cubic_fast[z_max]]), times=times, func_dict=func_dict), "limited_controlled_cubic_mid": BastinModelRun(cubic_bm, par_dict_cubic_mid, start_values=np.array( list(start_values) + [par_dict_cubic_mid[z_max]]), times=times, func_dict=func_dict), "limited_controlled_cubic_slow": BastinModelRun(cubic_bm, par_dict_cubic_slow, start_values=np.array( list(start_values) + [par_dict_cubic_slow[z_max]]), times=times,
z) cubic_bm_300 = BastinModel(limited_srm_300, cubic_utz_exp, z) deceleration_bm_300 = BastinModel(limited_srm_300, deceleration_utz_exp, z) # create a dictionary of model runs all_mrs = { "unlimited_smr": SmoothModelRun(unlimited_srm, par_dict, start_values, times, func_dict), "limited_300_smr": SmoothModelRun(limited_srm_300, par_dict, start_values, times, func_dict), "limited_90_smr": SmoothModelRun(limited_srm_90, par_dict, start_values, times, func_dict), "limited_300_controlled_half_saturation_10_20": BastinModelRun(half_saturation_bm_300, par_dict_half_saturation_10, start_values=np.array(list(start_values) + [20]), times=times, func_dict=func_dict), "limited_300_controlled_cubic_10": BastinModelRun( cubic_bm_300, par_dict_cubic_10, start_values=np.array(list(start_values) + [par_dict_cubic_10[z_max]]), times=times, func_dict=func_dict), "limited_300_controlled_cubic_200": BastinModelRun(cubic_bm_300, par_dict_cubic_200, start_values=np.array( list(start_values) + [par_dict_cubic_200[z_max]]), times=times,