def run_sensitivity(site="fall creek", year="2016"): elev, area = util.select_rows("tests/data/bathymetry.csv", "elevation (m)", "2d_area (m2)", site=site) bathymetry = InterpolatedFunction(elev, area) k_results = [] w_results = [] ld_results = [] ad_results = [] for month in [4, 5, 6, 7, 8, 9]: print(month) values = get_values(site, year, month) daphnia_density, daphnia_size, light_extinction = values daphnia = get_daphnia_dist(site, month, year, daphnia_density, daphnia_size) temp_fn = get_temp_fn(site, month, year) starting_mass = 10 for k in np.geomspace(0.01, 10, 15): batch = Model( starting_mass, daphnia, temp_fn, bathymetry, daylengths[month], k, day_light=39350, allow_dvm=True, allow_functional_response=False, max_P=2.0, ) results = batch.run(n_days=1)[0] k_results.append({ "month": month, "growth": results["growth"][0], "k": k }) for w in np.linspace(0.01, 200, 15): batch = Model( w, daphnia, temp_fn, bathymetry, daylengths[month], k, day_light=39350, allow_dvm=True, allow_functional_response=False, max_P=2.0, ) results = batch.run(n_days=1)[0] w_results.append({ "month": month, "growth": results["growth"][0], "starting_mass": w, }) for ld in np.geomspace(0.1, 4, 15): daphnia = get_daphnia_dist(site, month, year, daphnia_density, ld) batch = Model( starting_mass, daphnia, temp_fn, bathymetry, daylengths[month], light_extinction, day_light=39350, allow_dvm=True, allow_functional_response=False, max_P=2.0, ) results = batch.run(n_days=1)[0] ld_results.append({ "month": month, "growth": results["growth"][0], "daphnia_size": ld, }) for ad in np.geomspace(1, 50000, 15): daphnia = get_daphnia_dist(site, month, year, ad, daphnia_size) batch = Model( starting_mass, daphnia, temp_fn, bathymetry, daylengths[month], light_extinction, day_light=39350, allow_dvm=True, allow_functional_response=False, max_P=2.0, ) results = batch.run(n_days=1)[0] ad_results.append({ "month": month, "growth": results["growth"][0], "daphnia_density": ad, }) write_csv(k_results, "k_sensitivity.csv") write_csv(w_results, "starting_mass_sensitivity.csv") write_csv(ld_results, "daphnia_size_sensitivity.csv") write_csv(ad_results, "daphnia_density_sensitivity.csv")
def get_temp_fn(site, month, year): depths, temps = util.select_rows("tests/data/temperatures.csv", "depth", "temperature", site, month, year) return InterpolatedFunction(depths, temps)
def get_daphnia_dist(site, month, year, daphnia_density, daphnia_size): depths, total = util.select_rows("tests/data/daphnia-vd.csv", "depth", "total daphnia", site, month, year) return DaphniaData(daphnia_density, depths, total, size=daphnia_size)
def run(allow_dvm, max_P, write_out=True): pyplot.close("all") for site in ["fall creek", "hills creek", "lookout point"]: elev, area = util.select_rows( "tests/data/bathymetry.csv", "elevation (m)", "2d_area (m2)", site=site, ) bathymetry = InterpolatedFunction(elev, area) for year in ["2015", "2016"]: starting_mass = 0.3 site_results = {} for month in [3, 4, 5, 6, 7, 8, 9]: n_days = days_in_month[month] values = get_values(site, year, month) if values is None: continue print(site, year, month) daphnia_density, daphnia_size, light_extinction = values depths, total = util.select_rows( "tests/data/daphnia-vd.csv", "depth", "total daphnia", site, month, year, ) daphnia = DaphniaData(daphnia_density, depths, total, size=daphnia_size) depths, temps = util.select_rows( "tests/data/temperatures.csv", "depth", "temperature", site, month, year, ) temp_fn = InterpolatedFunction(depths, temps) start_date = (int(year), month, 1) batch = Model( starting_mass, daphnia, temp_fn, bathymetry, daylengths[month], light_extinction, day_light=39350, allow_dvm=allow_dvm, max_P=max_P, ) results = batch.run(n_days=n_days, start_date=start_date)[0] starting_mass = max(0.3, results["mass"][-1]) site_results = merge_results(site_results, results) if write_out: label = "" if not allow_dvm: label += "nodvm" if max_P != 1: label += "+maxP%d" % max_P label = label.lstrip("+") dirname = "experiments/%s/" % (label or "control") if not os.path.isdir(dirname): os.makedirs(dirname) name = name_template % (site, year, label) name = name.rstrip("_") extras = {"site": [site] * len(site_results["date"])} util.export_results(site_results, dirname + name + ".csv", extra_columns=extras) print("final length: %0.3f mm" % results["length"][-1])
def bathymetry(): elev, area = util.select_rows("tests/data/bathymetry.csv", "elevation (m)", "2d_area (m2)", site=site) return InterpolatedFunction(elev, area)
def daphnia_data(): total_daphnia = 5020.65 daphnia_size = 1.26 depth, counts = util.select_rows("tests/data/daphnia-vd.csv", "depth", "total daphnia", site, month, year) return DaphniaData(total_daphnia, depth, counts, size=daphnia_size)