def test_run_geo_ts_data_config_simulator(self): # These config files are versioned in shyft git config_dir = path.join(path.dirname(__file__), "netcdf") config_file = path.join(config_dir, "neanidelva_simulation.yaml") config_section = "neanidelva" cfg = YAMLSimConfig(config_file, config_section, overrides={'config': {'number_of_steps': 168}}) # These config files are versioned in shyft-data git. Read from ${SHYFTDATA}/netcdf/orchestration-testdata/ # TODO: Put all config files needed to run this test under the same versioning system (shyft git) simulator = ConfigSimulator(cfg) n_cells = simulator.region_model.size() state_repos = DefaultStateRepository(simulator.region_model.__class__, n_cells) simulator.run(cfg.time_axis, state_repos.get_state(0)) cids = IntVector() discharge = simulator.region_model.statistics.discharge(cids) # Regression tests on discharge values self.assertAlmostEqual(discharge.values[0], 0.1961, 3) self.assertAlmostEqual(discharge.values[3], 2.748813, 3) # # x self.assertAlmostEqual(discharge.values[6400], 58.8385, 3) # was 58.9381,3 before glacier&fractions adjustments # x self.assertAlmostEqual(discharge.values[3578],5.5069,3) # glacier_melt, not much, but enough to test # x self.assertAlmostEqual(simulator.region_model.gamma_snow_response.glacier_melt(cids).values.to_numpy().max(),0.201625547258,4) self.assertAlmostEqual(simulator.region_model.gamma_snow_response.glacier_melt(cids).values.to_numpy().max(), 0.11938204918828155, 4) # Regression tests on geo fractions self.assertAlmostEqual(simulator.region_model.cells[0].geo.land_type_fractions_info().unspecified(), 1.0, 3) self.assertAlmostEqual(simulator.region_model.cells[2].geo.land_type_fractions_info().unspecified(), 0.1433, 3) self.assertAlmostEqual(simulator.region_model.cells[2].geo.land_type_fractions_info().forest(), 0.0, 3) self.assertAlmostEqual(simulator.region_model.cells[2].geo.land_type_fractions_info().reservoir(), 0.8566, 3)
def test_run_geo_ts_data_config_simulator(self): # set up configuration config_dir = path.join(path.dirname(__file__), "netcdf") config_file = path.join(config_dir,"neanidelva_simulation.yaml") config_section = "neanidelva" cfg = YAMLSimConfig(config_file, config_section) # get a simulator simulator = ConfigSimulator(cfg) n_cells = simulator.region_model.size() state_repos = DefaultStateRepository(simulator.region_model.__class__, n_cells) simulator.run(cfg.time_axis, state_repos.get_state(0)) cids = IntVector() discharge = simulator.region_model.statistics.discharge(cids) # regression test on discharge values self.assertAlmostEqual(discharge.values[0],0.1961,3) self.assertAlmostEqual(discharge.values[3],2.7582,3) self.assertAlmostEqual(discharge.values[6400],58.9381,3) self.assertAlmostEqual(discharge.values[3578],5.5069,3) # regression test on geo fractions self.assertAlmostEqual(simulator.region_model.cells[0].geo.land_type_fractions_info().unspecified(),1.0,3) self.assertAlmostEqual(simulator.region_model.cells[2].geo.land_type_fractions_info().unspecified(),0.1433,3) self.assertAlmostEqual(simulator.region_model.cells[2].geo.land_type_fractions_info().forest(),0.0,3) self.assertAlmostEqual(simulator.region_model.cells[2].geo.land_type_fractions_info().reservoir(),0.8566,3) self.assertAlmostEqual(simulator.region_model.cells[3383].geo.land_type_fractions_info().lake(),0.7432,3) self.assertAlmostEqual(simulator.region_model.cells[652].geo.land_type_fractions_info().glacier(),0.1351,3)
def test_run_geo_ts_data_config_simulator(self): # set up configuration config_dir = path.join(path.dirname(__file__), "netcdf") config_file = path.join(config_dir,"neanidelva_simulation.yaml") config_section = "neanidelva" cfg = YAMLSimConfig(config_file, config_section) # get a simulator simulator = ConfigSimulator(cfg) n_cells = simulator.region_model.size() state_repos = DefaultStateRepository(simulator.region_model.__class__, n_cells) simulator.run(cfg.time_axis, state_repos.get_state(0))
while counter < 0: shyft_data_path = path.abspath(r"C:\shyft_workspace\shyft-data") if path.exists(shyft_data_path) and 'SHYFT_DATA' not in os.environ: os.environ['SHYFT_DATA']=shyft_data_path from shyft.repository.default_state_repository import DefaultStateRepository from shyft.orchestration.configuration.yaml_configs import YAMLCalibConfig, YAMLSimConfig from shyft.orchestration.simulators.config_simulator import ConfigCalibrator, ConfigSimulator counter += 1 t1 = time.time() config_file_path = os.path.abspath(r"D:\Dropbox\Thesis\SHyFT\Yaml_files\Skaugen\neanidelva_simulation.yaml") cfg = YAMLSimConfig(config_file_path, "neanidelva") simulator = ConfigSimulator(cfg) simulator.run() state = simulator.region_model.state region_model = simulator.region_model config_file_path = os.path.abspath(r"D:\Dropbox\Thesis\SHyFT\Yaml_files\Skaugen\neanidelva_simulation.yaml") cfg = YAMLCalibConfig(config_file_path, "neanidelva") calib = ConfigCalibrator(cfg) cfg.optimization_method['params']['tr_start'] = random.randrange(1,2000)/10000 state_repos = DefaultStateRepository(calib.region_model) results = calib.calibrate(cfg.sim_config.time_axis, state_repos.get_state(0).state_vector, cfg.optimization_method['name'], cfg.optimization_method['params']) t2 = time.time() now = str(dt.datetime.now()) result_params = []
# importing the shyft modules needed for running a calibration from shyft.repository.default_state_repository import DefaultStateRepository from shyft.orchestration.configuration.yaml_configs import YAMLCalibConfig, YAMLSimConfig from shyft.orchestration.simulators.config_simulator import ConfigCalibrator, ConfigSimulator from shyft.repository.netcdf import cf_ts_repository from shyft.repository.netcdf import cf_region_model_repository from shyft.repository.netcdf import cf_geo_ts_repository start_sim = time.time() # conduct a configured simulation first. # config_file_path = '/home/olga/workspace/shyft-data/neanidelv/yaml_config/neanidelva_simulation.yaml' config_file_path = '/home/olga/workspace/shyft-data/neanidelv/yaml_config-rpmgsk/neanidelva_simulation.yaml' cfg = YAMLSimConfig(config_file_path, "neanidelva") simulator = ConfigSimulator(cfg) # run the model, and we'll just pull the `api.model` from the `simulator` simulator.run() state = simulator.region_model.state end_sim = time.time() print("Elapsed time, simulation: "+ str(end_sim-start_sim)) start_cal = time.time() # config_file_path = '/home/olga/workspace/shyft-data/neanidelv/yaml_config/neanidelva_calibration.yaml' # here is the *.yaml file config_file_path = '/home/olga/workspace/shyft-data/neanidelv/yaml_config-rpmgsk/neanidelva_calibration.yaml' # here is the *.yaml file cfg = YAMLCalibConfig(config_file_path, "neanidelva") # to run a calibration using the above initiated configuration calib = ConfigCalibrator(cfg) n_cells = calib.region_model.size()
from shyft.orchestration.configuration.yaml_configs import YAMLSimConfig from shyft.orchestration.simulators.config_simulator import ConfigSimulator # For testing from statkraft repos (GIS service & SMG) config_dir = "D:/users/ysa/config/config_test" config_file = path.join(config_dir, "simulation.yaml") config_section = "LTM5-Tya" print('\nConfiguring simulation for region {}'.format(config_section)) cfg = YAMLSimConfig(config_file, config_section) simulator = ConfigSimulator(cfg) simulator.region_model.set_state_collection(-1, True) # enable state collection for all cells simulator.region_model.set_snow_sca_swe_collection(-1, True) # enable/disable collection of snow sca|swe for calibration purposes print('Done initializing...') simulator.run() print('Done simulating...') # ---------------------------------------------------------------------------------------------------------------------- # Getting array with values and timesteps from shyft timeseries extracted in the examples below # ---------------------------------------------------------------------------------------------------------------------- def get_v_and_t_from_ts(ts): return ts.values.to_numpy(), np.array([datetime.utcfromtimestamp(ts.time(i)) for i in range(ts.size())]) # ---------------------------------------------------------------------------------------------------------------------- # Catchment index list, source index, time index and cell index used in the data extraction examples below # ---------------------------------------------------------------------------------------------------------------------- c_id_select = [177, 172] # selected catchment IDs c_id_map = simulator.region_model.catchment_id_map # all catchmented IDs in region c_idx_select = np.in1d(c_id_map, c_id_select).nonzero()[0].tolist() # converting ID to index