122 lines
3.3 KiB
ReStructuredText
122 lines
3.3 KiB
ReStructuredText
====================
|
|
Simulation Results
|
|
====================
|
|
|
|
Results Structure
|
|
-----------------
|
|
|
|
Simulation results are returned and saved in the
|
|
:class:`tsnet.network.model.TransientModel` object
|
|
for each node and link in the networks.
|
|
|
|
Node results include the following attributes:
|
|
|
|
- Head [m]
|
|
- Emitter discharge (including leaks and bursts) [:math:`m^3/s`]
|
|
- Actual demand discharge [:math:`m^3/s`]
|
|
|
|
Link results include the following attributes:
|
|
|
|
- Head at start node [m]
|
|
- Flow velocity at start node [:math:`m^3/s`]
|
|
- Flow rate at start node [:math:`m^3/s`]
|
|
- Head at end node [m]
|
|
- Flow velocity at end node [:math:`m^3/s`]
|
|
- Flow rate at end node [:math:`m^3/s`]
|
|
|
|
|
|
The result for each attribute is a Numpy array, representing the time
|
|
history of the simulation results, the length of
|
|
which equals the total number of simulation time steps (:math:`tn`).
|
|
|
|
For example, the results of head, emitter discharge and demand discharge
|
|
at node 'JUNCTION-105' can be accessed by:
|
|
|
|
.. code:: python
|
|
|
|
node = tm.get_node['JUNCTION-105']
|
|
head = node.head
|
|
emitter_discharge = node.emitter_discharge
|
|
demand_discharge = node.demand_discharge
|
|
|
|
To obtain the results on pipe 'LINK-40':
|
|
|
|
.. code:: python
|
|
|
|
pipe = tm.get_link('LINK-40')
|
|
start_head = pipe.start_node_head
|
|
end_head = pipe.end_node_head
|
|
start_velocity = pipe.start_node_velocity
|
|
end_velocity = pipe.end_node_velocity
|
|
start_flowrate = pipe.start_node_flowrate
|
|
end_flowrate = pipe.end_node_flowrate
|
|
|
|
|
|
Time Step and Time Stamps
|
|
-------------------------
|
|
|
|
Additionally, the time step (in seconds) and the time stamps (in seconds
|
|
from the start of the simulation) are also stored in the
|
|
:class:`tsnet.network.model.TransientModel` object. They can be retrieved
|
|
by:
|
|
|
|
.. code:: python
|
|
|
|
dt = tm.time_step
|
|
tt = tm.simulation_timestamps
|
|
|
|
The results can then be plotted with respect to the time stamps using
|
|
**matplotlib** or any other preferred package, as shown in :numref:`tnet2_node`:
|
|
|
|
.. code:: python
|
|
|
|
import matplotlib.pyplot as plt
|
|
plt.plot(tt ,head)
|
|
|
|
.. _tnet2_node:
|
|
.. figure:: figures/tnet2_node.png
|
|
:width: 600
|
|
:alt: tnet2_node
|
|
|
|
Head results at JUNCTION-105
|
|
|
|
Results Retrieval
|
|
------------------
|
|
|
|
The :class:`tsnet.network.model.TransientModel` object, including
|
|
the information of the network, operation rules, and the simulated results,
|
|
is saved in the file **results_obj.obj**, located in the current folder.
|
|
The name of the results file is defined by the input parameter `result_obj`.
|
|
If `result_obj` is not given, the default results file is `results.obj`.
|
|
|
|
To retrieve the results from a previously completed simulation,
|
|
one can read the :class:`tsnet.network.model.TransientModel` object
|
|
from the **results_obj.obj** file and access results from the objet by:
|
|
|
|
.. code:: python
|
|
|
|
import pickle
|
|
file = open('results.obj', 'rb')
|
|
tm = pickle.load(file)
|
|
|
|
|
|
Runtime and Progress
|
|
---------------------
|
|
|
|
At the beginning of transient simulation,
|
|
TSNet will report the approximation simulation time
|
|
based on the calculation time of first few time
|
|
steps and the total number of time steps.
|
|
Additionally, the computation progress will also printed on the screen
|
|
as the simulation proceeds, as shown in :numref:`time`.
|
|
|
|
.. _time:
|
|
.. figure:: figures/time.PNG
|
|
:width: 200
|
|
:alt: time
|
|
|
|
Runtime output about calculation time and process.
|
|
|
|
|
|
|