Beispiel #1
0
 def region_model_repository(self):
     """
     Returns
     -------
      - RegionModelRepository - configured with 'Tistel-ptgsk' etc.
     """
     id_list = [1225]
     # parameters can be loaded from yaml_config Model parameters..
     pt_params = api.PriestleyTaylorParameter(
     )  # *params["priestley_taylor"])
     gs_params = api.GammaSnowParameter()  # *params["gamma_snow"])
     ss_params = api.SkaugenParameter()
     ae_params = api.ActualEvapotranspirationParameter(
     )  # *params["act_evap"])
     k_params = api.KirchnerParameter()  # *params["kirchner"])
     p_params = api.PrecipitationCorrectionParameter(
     )  # TODO; default 1.0, is it used ??
     ptgsk_rm_params = pt_gs_k.PTGSKParameter(pt_params, gs_params,
                                              ae_params, k_params,
                                              p_params)
     ptssk_rm_params = pt_ss_k.PTSSKParameter(pt_params, ss_params,
                                              ae_params, k_params,
                                              p_params)
     # create the description for 2 models of tistel,ptgsk, ptssk
     tistel_grid_spec = self.grid_spec  #
     cfg_list = [
         RegionModelConfig("Tistel-ptgsk", pt_gs_k.PTGSKModel,
                           ptgsk_rm_params, tistel_grid_spec,
                           "unregulated", "FELTNR", id_list),
         RegionModelConfig("Tistel-ptssk", pt_ss_k.PTSSKModel,
                           ptssk_rm_params, tistel_grid_spec,
                           "unregulated", "FELTNR", id_list)
     ]
     rm_cfg_dict = {x.name: x for x in cfg_list}
     return GisRegionModelRepository(rm_cfg_dict)
Beispiel #2
0
 def _create_std_ptgsk_param(self):
     ptp = api.PriestleyTaylorParameter(albedo=0.85, alpha=1.23)
     ptp.albedo = 0.9
     ptp.alpha = 1.26
     aep = api.ActualEvapotranspirationParameter(ae_scale_factor=1.5)
     aep.ae_scale_factor = 1.1
     gsp = api.GammaSnowParameter(
         winter_end_day_of_year=99,
         initial_bare_ground_fraction=0.04,
         snow_cv=0.44,
         tx=-0.3,
         wind_scale=1.9,
         wind_const=0.9,
         max_water=0.11,
         surface_magnitude=33.0,
         max_albedo=0.88,
         min_albedo=0.55,
         fast_albedo_decay_rate=6.0,
         slow_albedo_decay_rate=4.0,
         snowfall_reset_depth=6.1,
         glacier_albedo=0.44
     )  # TODO: This does not work due to boost.python template arity of 15,  calculate_iso_pot_energy=False)
     gsp.calculate_iso_pot_energy = False
     gsp.snow_cv = 0.5
     gsp.initial_bare_ground_fraction = 0.04
     kp = api.KirchnerParameter(c1=-2.55, c2=0.8, c3=-0.01)
     kp.c1 = 2.5
     kp.c2 = -0.9
     kp.c3 = 0.01
     spcp = api.PrecipitationCorrectionParameter(scale_factor=0.9)
     ptgsk_p = pt_gs_k.PTGSKParameter(ptp, gsp, aep, kp, spcp)
     ptgsk_p.ae.ae_scale_factor = 1.2  # sih: just to demo ae scale_factor can be set directly
     return ptgsk_p
Beispiel #3
0
 def test_pt_gs_k_param(self):
     ptgsk_size = 21
     valid_names = [
         "kirchner.c1", "kirchner.c2", "kirchner.c3", "ae.ae_scale_factor",
         "gs.tx", "gs.wind_scale", "gs.max_water", "gs.wind_const",
         "gs.fast_albedo_decay_rate", "gs.slow_albedo_decay_rate",
         "gs.surface_magnitude", "gs.max_albedo", "gs.min_albedo",
         "gs.snowfall_reset_depth", "gs.snow_cv", "gs.glacier_albedo",
         "p_corr.scale_factor", "gs.snow_cv_forest_factor",
         "gs.snow_cv_altitude_factor", "pt.albedo", "pt.alpha"
     ]
     self.verify_parameter_for_calibration(pt_gs_k.PTGSKParameter(),
                                           ptgsk_size, valid_names)
 def test_pt_gs_k_param(self):
     ptgsk_size = 30
     valid_names = [
         "kirchner.c1", "kirchner.c2", "kirchner.c3", "ae.ae_scale_factor",
         "gs.tx", "gs.wind_scale", "gs.max_water", "gs.wind_const",
         "gs.fast_albedo_decay_rate", "gs.slow_albedo_decay_rate",
         "gs.surface_magnitude", "gs.max_albedo", "gs.min_albedo",
         "gs.snowfall_reset_depth", "gs.snow_cv", "gs.glacier_albedo",
         "p_corr.scale_factor", "gs.snow_cv_forest_factor",
         "gs.snow_cv_altitude_factor", "pt.albedo", "pt.alpha",
         "gs.initial_bare_ground_fraction", "gs.winter_end_day_of_year",
         "gs.calculate_iso_pot_energy", "gm.dtf", "routing.velocity",
         "routing.alpha", "routing.beta", "gs.n_winter_days",
         "gm.direct_response"
     ]
     p = pt_gs_k.PTGSKParameter()
     special_values = {22: 130, 28: 221}
     self.verify_parameter_for_calibration(p, ptgsk_size, valid_names,
                                           special_values)
     # special verification of bool parameter
     p.gs.calculate_iso_pot_energy = True
     self.assertTrue(p.gs.calculate_iso_pot_energy)
     self.assertAlmostEqual(p.get(23), 1.0, 0.00001)
     p.gs.calculate_iso_pot_energy = False
     self.assertFalse(p.gs.calculate_iso_pot_energy)
     self.assertAlmostEqual(p.get(23), 0.0, 0.00001)
     pv = api.DoubleVector.from_numpy([p.get(i) for i in range(p.size())])
     pv[23] = 1.0
     p.set(pv)
     self.assertTrue(p.gs.calculate_iso_pot_energy)
     pv[23] = 0.0
     p.set(pv)
     self.assertFalse(p.gs.calculate_iso_pot_energy)
     # checkout new parameters for routing
     p.routing.velocity = 1 / 3600.0
     p.routing.alpha = 1.1
     p.routing.beta = 0.8
     self.assertAlmostEqual(p.routing.velocity, 1 / 3600.0)
     self.assertAlmostEqual(p.routing.alpha, 1.1)
     self.assertAlmostEqual(p.routing.beta, 0.8)
     utc = api.Calendar()
     self.assertTrue(p.gs.is_snow_season(utc.time(2017, 1, 1)))
     self.assertFalse(p.gs.is_snow_season(utc.time(2017, 8, 1)))
     p.gs.n_winter_days = 100
     self.assertFalse(p.gs.is_snow_season(utc.time(2017, 11, 31)))
     self.assertTrue(p.gs.is_snow_season(utc.time(2017, 2, 1)))
 def test_model_clone_with_catchment_parameters(self):
     """ Verify we can copy an opt-model from full model including catchment specific parameters"""
     m = self.build_model(pt_gs_k.PTGSKModel,
                          pt_gs_k.PTGSKParameter,
                          model_size=20,
                          num_catchments=2)
     p2 = pt_gs_k.PTGSKParameter()
     p2.kirchner.c1 = 2.3
     m.set_catchment_parameter(2, p2)
     self.assertTrue(m.has_catchment_parameter(2))
     self.assertFalse(m.has_catchment_parameter(1))
     o = pt_gs_k.create_opt_model_clone(
         m, True
     )  # this is how to create an opt-model, with catchm. spec params
     self.assertTrue(o.has_catchment_parameter(2))
     self.assertFalse(o.has_catchment_parameter(1))
     o = pt_gs_k.create_opt_model_clone(
         m, False)  # default, only region param is copied(for opt-purposes)
     self.assertFalse(o.has_catchment_parameter(2))
     self.assertFalse(o.has_catchment_parameter(1))
 def test_create_ptgsk_param(self):
     ptgsk_p = self._create_std_ptgsk_param()
     copy_p = pt_gs_k.PTGSKParameter(ptgsk_p)
     self.assertTrue(ptgsk_p != None,
                     "should be possible to create a std param")
     self.assertIsNotNone(copy_p)