示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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))
示例#4
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 = []
示例#5
0
# 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