Beispiel #1
0
    def _init_model(self, solver):

        if solver == 'numba':
            solver = PegasusNumba()
            num_app = ImplicitEulerNumba(root_finder=solver)
        elif solver == 'python':
            solver = PegasusPython()
            num_app = ImplicitEulerPython(root_finder=solver)

        # Define HRU 1 (40%)
        fr = PowerReservoir(parameters = {'k' : 0.01,
                                         'alpha' : 2.5},
                           states = {'S0' : 0.0},
                           approximation=num_app,
                           id = 'FR')

        h1 = Unit(layers = [[fr]], id = 'H1')

        # Define HRU 2 (60%)
        fr = PowerReservoir(parameters = {'k' : 0.01,
                                         'alpha' : 2.5},
                           states = {'S0' : 0.0},
                           approximation=num_app,
                           id = 'FR')

        sr = PowerReservoir(parameters = {'k' : 1e-4,
                                         'alpha' : 1.0},
                           states = {'S0' : 0.0},
                           approximation=num_app,
                           id = 'SR')

        ur = UnsaturatedReservoir(parameters = {'Smax' : 50.0,
                                                'Ce' : 1.5,
                                                'm' : 0.01,
                                                'beta' : 1.5,
                                                },
                                  states = {'S0' : 0.2*50.0, 'PET' : None},
                           approximation=num_app,
                                  id = 'UR')

        s = Splitter(weight = [[0.3], [0.7]],
                     direction = [[0], [0]],
                     id = 'S')

        j = Junction(direction = [[0, 0]],
                     id = 'J')

        h2 = Unit(layers = [
            [ur],
            [s],
            [fr, sr],
            [j]
        ],
                id = 'H2')

        # Define the catchment
        cat = Node(units = [h1, h2], weights = [0.4, 0.6], area = 1.0, id = 'Cat')

        cat.set_timestep(1.0)
        self._model = cat
Beispiel #2
0
# Create second unit
unit_2 = Unit(
    layers=[[reservoir]],
    id='unit-2'
)

# Put units together in a node
node_1 = Node(
    units=[unit_1, unit_2],
    weights=[0.7, 0.3],
    area=10.0,
    id='node-1'
)

node_1.set_timestep(1.0)
node_1.set_input([precipitation])

# Solve the node
output = node_1.get_output()[0]

output_unit_1 = node_1.call_internal(id='unit-1', method='get_output', solve=False)[0]
output_unit_2 = node_1.call_internal(id='unit-2', method='get_output', solve=False)[0]

# Plotting
fig, ax = plt.subplots(3, 1, sharex=True, figsize=(10, 9))

ax[0].bar(x=range(len(precipitation)), height=precipitation, color='blue')

ax[1].plot(range(len(precipitation)), output_unit_1, color='blue', lw=2,
           label='Unit 1')