Example #1
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)
Example #2
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)
Example #3
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.0957723, 3)
        self.assertAlmostEqual(discharge.values[3], 3.9098, 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.12393672891230645, 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)
Example #4
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))
Example #5
0
    def test_run_geo_ts_data_config_simulator(self):
        # These config files are versioned in shyft-data git
        config_dir = path.join(shyftdata_dir, "neanidelv", "yaml_config")
        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/
        simulator = ConfigSimulator(cfg)

        # Regression tests on interpolation parameters
        self.assertAlmostEqual(
            simulator.region_model.interpolation_parameter.precipitation.
            scale_factor, 1.01, 3)

        #n_cells = simulator.region_model.size()
        state_repos = DefaultStateRepository(simulator.region_model)
        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], 80.23843199, 3)
        self.assertAlmostEqual(discharge.values[3], 82.50344985, 3)
        # 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)
Example #6
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)
    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)
        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.1001063, 3)
        self.assertAlmostEqual(discharge.values[3], 3.9141928, 3)
        # 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)
#import pandas as pd
import numpy as np
import math
from matplotlib import pyplot as plt
from shyft import api

# 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

# conduct a configured simulation first.
config_file_path = '/home/olga/workspace/shyft-data/narayani/yaml_config-rpmgsk/narayani_simulation.yaml'
# config_file_path = '/home/olga/workspace/shyft-data/narayani/yaml_config-ptgsk/narayani_simulation.yaml'
cfg = YAMLSimConfig(config_file_path, "narayani")
simulator = ConfigSimulator(cfg)
# run the model, and we'll just pull the `api.model` from the `simulator`
simulator.run()
state = simulator.region_model.state



config_file_path = '/home/olga/workspace/shyft-data/narayani/yaml_config-rpmgsk/narayani_calibration.yaml' # here is the *.yaml file
# config_file_path = '/home/olga/workspace/shyft-data/narayani/yaml_config-ptgsk/narayani_calibration.yaml' # here is the *.yaml file
cfg = YAMLCalibConfig(config_file_path, "narayani")
# config_file_path = '/home/olga/workspace/shyft-data/neanidelv/yaml_config/neanidelva_simulation.yaml' # here is the *.yaml file
# cfg = YAMLSimConfig(config_file_path, "neanidelva")

# to run a calibration using the above initiated configuration

calib = ConfigCalibrator(cfg)
Example #9
0
import time

# 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
sys.path.insert(0,'D:/users/ysa/shyft_main/shyft')
from os import path
from datetime import datetime
import numpy as np

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
# ----------------------------------------------------------------------------------------------------------------------