pywr.nodes.Storage
- class pywr.nodes.Storage(*args, **kwargs)
A generic storage Node
In terms of connections in the network the Storage node behaves like any other node, provided there is only 1 input and 1 output. If there are multiple sub-nodes the connections need to be explicit about which they are connecting to. For example:
>>> storage(model, 'reservoir', num_outputs=1, num_inputs=2) >>> supply.connect(storage) >>> storage.connect(demand1, from_slot=0) >>> storage.connect(demand2, from_slot=1)
The attribtues of the sub-nodes can be modified directly (and independently). For example:
>>> storage.outputs[0].max_flow = 15.0
If a recorder is set on the storage node, instead of recording flow it records changes in storage. Any recorders set on the output or input sub-nodes record flow as normal.
- Parameters:
- modelModel
Model instance to which this storage node is attached.
- namestr
The name of the storage node.
- num_inputs, num_outputsinteger (optional)
The number of input and output nodes to create internally. Defaults to 1.
- min_volumefloat (optional)
The minimum volume of the storage. Defaults to 0.0.
- max_volumefloat, Parameter (optional)
The maximum volume of the storage. Defaults to 0.0.
- initial_volume, initial_volume_pcfloat (optional)
Specify initial volume in either absolute or proportional terms. Both are required if max_volume is a parameter because the parameter will not be evaluated at the first time-step. If both are given and max_volume is not a Parameter, then the absolute value is ignored.
- costfloat, Parameter (optional)
The cost of net flow in to the storage node. I.e. a positive cost penalises increasing volume by giving a benefit to negative net flow (release), and a negative cost penalises decreasing volume by giving a benefit to positive net flow (inflow).
- area, levelfloat, Parameter (optional)
Optional float or Parameter defining the area and level of the storage node. These values are accessible through the get_area and get_level methods respectively.
- __init__(model, name, outputs=1, inputs=1, *args, **kwargs)
Methods
__init__(model, name[, outputs, inputs])after(self, Timestep ts, double[)before(self, Timestep ts)Called at the beginning of the timestep
check(self)commit(self, int scenario_index, double value)Called once for each route the node is a member of
commit_all(self, double[)Called once for each route the node is a member of
connect(node[, from_slot, to_slot])Create an edge from this Node to another Node
disconnect([node, slot_name, all_slots])Remove a connection from this Node to another Node
finalise_load()Finish loading a node by converting parameter name references to instance references.
finish(self)get_all_cost(self, double[)get_all_max_volume(self, double[)get_all_min_volume(self, double[)get_area(self, ScenarioIndex scenario_index)get_cost(self, ScenarioIndex scenario_index)Get the cost per unit flow at a given timestep
get_current_pc(self, ...)Return the current proportion of full of the storage node.
get_initial_pc(self)Returns the initial volume as a proportion.
get_initial_volume(self)Returns the absolute initial volume.
get_level(self, ScenarioIndex scenario_index)get_max_volume(self, ...)get_min_volume(self, ...)iter_slots([slot_name, is_connector, all_slots])Returns the object(s) wich should be connected to given slot_name
pre_load(model, data)Create a node instance from data.
reset(self)Called at the beginning of a run
setup(self, model)Called before the first run of the model
Attributes
allow_isolatedA property to flag whether this Node can be unconnected in a network.
areacommentcomment: str
component_attrscomponentsGenerator that returns all of the Components attached to the Node
costThe cost per unit increased in volume stored
current_pcCurrent proportion full.
domainflowTotal flow via this node in the current timestep
fully_qualified_namehas_fixed_costReturns true if cost is not a Parameter.
initial_volumeinitial_volume_pclevelmax_volumemin_volumemodelThe recorder for the node, e.g. a NumpyArrayRecorder.
nameName of the node.
parentThe parent Node/Storage of this object.
prev_flowTotal flow via this node in the previous timestep
recordersReturns a list of pywr.recorders.Recorder objects attached to this node.
virtualvirtual: 'bool'
volume