Base para Refactorizar TSNET a codigo fuente
|
@ -11,9 +11,6 @@
|
|||
},
|
||||
{
|
||||
"path": "C:/Users/migue/AppData/Local/Temp/TSNet"
|
||||
},
|
||||
{
|
||||
"path": "../../Github/TSNet"
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
|
|
|
@ -126,26 +126,58 @@ namespace CtrEditor.HydraulicSimulator.TSNet
|
|||
var elevation = GetNodeElevation(node);
|
||||
var sanitizedName = SanitizeNodeName(node.Name);
|
||||
|
||||
// Buscar el adapter correspondiente en el simulation manager
|
||||
// Buscar el adapter correspondiente en el simulation manager usando el nombre original (sin sanitizar)
|
||||
LogToMCP($"INPGenerator: Buscando adaptador para nodo '{node.Name}'");
|
||||
var tankAdapter = _simulationManager?.GetTankAdapterByNodeName(node.Name);
|
||||
|
||||
// Debug logging para diagnóstico
|
||||
if (_simulationManager != null)
|
||||
{
|
||||
LogToMCP($"INPGenerator: SimulationManager disponible, buscando adaptador...");
|
||||
if (tankAdapter == null)
|
||||
{
|
||||
LogToMCP($"INPGenerator: No se encontró adaptador para '{node.Name}'");
|
||||
// Listar adaptadores disponibles para diagnóstico
|
||||
LogToMCP($"INPGenerator: Adaptadores disponibles:");
|
||||
var availableAdapters = _simulationManager.GetType().GetField("_tankAdapters",
|
||||
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||
if (availableAdapters?.GetValue(_simulationManager) is System.Collections.IDictionary adapters)
|
||||
{
|
||||
foreach (System.Collections.DictionaryEntry entry in adapters)
|
||||
{
|
||||
var adapter = entry.Value;
|
||||
var tankName = adapter?.GetType().GetProperty("Tank")?.GetValue(adapter)?.GetType().GetProperty("Nombre")?.GetValue(adapter?.GetType().GetProperty("Tank")?.GetValue(adapter));
|
||||
LogToMCP($" - '{tankName}' (ID: {entry.Key})");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LogToMCP($"INPGenerator: ✅ Adaptador encontrado para '{node.Name}'");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LogToMCP($"INPGenerator: ❌ SimulationManager es null");
|
||||
}
|
||||
|
||||
if (tankAdapter?.Configuration != null)
|
||||
{
|
||||
// Usar configuración real del tanque
|
||||
var config = tankAdapter.Configuration;
|
||||
|
||||
// Debug: Log de generación INP
|
||||
System.Diagnostics.Debug.WriteLine($"INPGenerator: Generando tanque {node.Name}");
|
||||
System.Diagnostics.Debug.WriteLine($" config.InitialLevelM: {config.InitialLevelM}");
|
||||
System.Diagnostics.Debug.WriteLine($" config.MaxLevelM: {config.MaxLevelM}");
|
||||
System.Diagnostics.Debug.WriteLine($" config.DiameterM: {config.DiameterM}");
|
||||
LogToMCP($"INPGenerator: Generando tanque {node.Name}");
|
||||
LogToMCP($" config.InitialLevelM: {config.InitialLevelM}");
|
||||
LogToMCP($" config.MaxLevelM: {config.MaxLevelM}");
|
||||
LogToMCP($" config.DiameterM: {config.DiameterM}");
|
||||
|
||||
content.AppendLine($" {sanitizedName,-15}\t{elevation.ToString("F2", CultureInfo.InvariantCulture)} \t{config.InitialLevelM.ToString("F2", CultureInfo.InvariantCulture)} \t{config.MinLevelM.ToString("F2", CultureInfo.InvariantCulture)} \t{config.MaxLevelM.ToString("F2", CultureInfo.InvariantCulture)} \t{config.DiameterM.ToString("F2", CultureInfo.InvariantCulture)} \t0 \t");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback a valores por defecto si no hay configuración
|
||||
System.Diagnostics.Debug.WriteLine($"INPGenerator: WARNING - No se encontró configuración para tanque {node.Name}, usando valores por defecto");
|
||||
LogToMCP($"INPGenerator: WARNING - No se encontró configuración para tanque {node.Name}, usando valores por defecto");
|
||||
content.AppendLine($" {sanitizedName,-15}\t{elevation.ToString("F2", CultureInfo.InvariantCulture)} \t1.0 \t0.0 \t2.0 \t1.0 \t0 \t");
|
||||
}
|
||||
}
|
||||
|
@ -415,6 +447,15 @@ namespace CtrEditor.HydraulicSimulator.TSNet
|
|||
return string.IsNullOrEmpty(result) ? "UnknownNode" : result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Método de logging simple para debug - usa Console.WriteLine por ahora
|
||||
/// </summary>
|
||||
private static void LogToMCP(string message)
|
||||
{
|
||||
// Usar Console.WriteLine para debug que es capturado por el sistema de logging
|
||||
Console.WriteLine($"[DEBUG TSNetINPGenerator] {message}");
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""Top-level package for tsnet."""
|
||||
|
||||
from tsnet import network
|
||||
from tsnet import simulation
|
||||
from tsnet import postprocessing
|
||||
from tsnet import utils
|
||||
|
||||
__author__ = """Lu Xing"""
|
||||
__email__ = 'xinglu@utexas.edu'
|
||||
__version__ = '0.2.2'
|
|
@ -0,0 +1,163 @@
|
|||
# Minimal makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = python -msphinx
|
||||
SPHINXPROJ = tsnet
|
||||
SOURCEDIR = .
|
||||
BUILDDIR = _build
|
||||
|
||||
# Put it first so that "make" without argument is like "make help".
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
|
||||
.PHONY: help Makefile
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
%: Makefile
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)/*
|
||||
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/WNTR.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/WNTR.qhc"
|
||||
|
||||
applehelp:
|
||||
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
|
||||
@echo
|
||||
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
|
||||
@echo "N.B. You won't be able to view it unless you put it in" \
|
||||
"~/Library/Documentation/Help or install it in your application" \
|
||||
"bundle."
|
||||
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/WNTR"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/WNTR"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
latexpdfja:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
texinfo:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
info:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
gettext:
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
|
||||
coverage:
|
||||
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
|
||||
@echo "Testing of coverage in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/coverage/python.txt."
|
||||
|
||||
xml:
|
||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||
@echo
|
||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||
|
||||
pseudoxml:
|
||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||
@echo
|
||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
|
@ -0,0 +1,10 @@
|
|||
{% extends "!layout.html" %}
|
||||
{% block footer %} {{ super() }}
|
||||
|
||||
<style>
|
||||
/* Sidebar header (and topbar for mobile) */
|
||||
.wy-side-nav-search, .wy-nav-top {
|
||||
background: #cc6600;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
|
@ -0,0 +1,18 @@
|
|||
====================
|
||||
Abbreviations
|
||||
====================
|
||||
|
||||
|
||||
**API**: Application programming interface
|
||||
|
||||
**EPA**: Environmental Protection Agency
|
||||
|
||||
**IDE**: Integrated development environment
|
||||
|
||||
**SI**: International System of Units
|
||||
|
||||
**US**: United States
|
||||
|
||||
**MOC**: Method of Characteristics
|
||||
|
||||
**TSNET**: Transient Simulation in water Networks
|
|
@ -0,0 +1,7 @@
|
|||
tsnet
|
||||
=====
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 4
|
||||
|
||||
tsnet
|
|
@ -0,0 +1,46 @@
|
|||
tsnet.network package
|
||||
=====================
|
||||
|
||||
Submodules
|
||||
----------
|
||||
|
||||
tsnet.network.control module
|
||||
----------------------------
|
||||
|
||||
.. automodule:: tsnet.network.control
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.network.discretize module
|
||||
-------------------------------
|
||||
|
||||
.. automodule:: tsnet.network.discretize
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.network.model module
|
||||
--------------------------
|
||||
|
||||
.. automodule:: tsnet.network.model
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.network.topology module
|
||||
-----------------------------
|
||||
|
||||
.. automodule:: tsnet.network.topology
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
Module contents
|
||||
---------------
|
||||
|
||||
.. automodule:: tsnet.network
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,22 @@
|
|||
tsnet.postprocessing package
|
||||
============================
|
||||
|
||||
Submodules
|
||||
----------
|
||||
|
||||
tsnet.postprocessing.time\_history module
|
||||
-----------------------------------------
|
||||
|
||||
.. automodule:: tsnet.postprocessing.time_history
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
Module contents
|
||||
---------------
|
||||
|
||||
.. automodule:: tsnet.postprocessing
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,20 @@
|
|||
tsnet package
|
||||
=============
|
||||
|
||||
Subpackages
|
||||
-----------
|
||||
|
||||
.. toctree::
|
||||
|
||||
tsnet.network
|
||||
tsnet.postprocessing
|
||||
tsnet.simulation
|
||||
tsnet.utils
|
||||
|
||||
Module contents
|
||||
---------------
|
||||
|
||||
.. automodule:: tsnet
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,46 @@
|
|||
tsnet.simulation package
|
||||
========================
|
||||
|
||||
Submodules
|
||||
----------
|
||||
|
||||
tsnet.simulation.initialize module
|
||||
----------------------------------
|
||||
|
||||
.. automodule:: tsnet.simulation.initialize
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.simulation.main module
|
||||
----------------------------
|
||||
|
||||
.. automodule:: tsnet.simulation.main
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.simulation.single module
|
||||
------------------------------
|
||||
|
||||
.. automodule:: tsnet.simulation.single
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.simulation.solver module
|
||||
------------------------------
|
||||
|
||||
.. automodule:: tsnet.simulation.solver
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
Module contents
|
||||
---------------
|
||||
|
||||
.. automodule:: tsnet.simulation
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,46 @@
|
|||
tsnet.utils package
|
||||
===================
|
||||
|
||||
Submodules
|
||||
----------
|
||||
|
||||
tsnet.utils.calc\_parabola\_vertex module
|
||||
-----------------------------------------
|
||||
|
||||
.. automodule:: tsnet.utils.calc_parabola_vertex
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.utils.memo module
|
||||
-----------------------
|
||||
|
||||
.. automodule:: tsnet.utils.memo
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.utils.print\_time\_delta module
|
||||
-------------------------------------
|
||||
|
||||
.. automodule:: tsnet.utils.print_time_delta
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
tsnet.utils.valve\_curve module
|
||||
-------------------------------
|
||||
|
||||
.. automodule:: tsnet.utils.valve_curve
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
Module contents
|
||||
---------------
|
||||
|
||||
.. automodule:: tsnet.utils
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1 @@
|
|||
.. include:: ../AUTHORS.rst
|
|
@ -0,0 +1,209 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# tsnet documentation build configuration file, created by
|
||||
# sphinx-quickstart on Fri Jun 9 13:47:02 2017.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another
|
||||
# directory, add these directories to sys.path here. If the directory is
|
||||
# relative to the documentation root, use os.path.abspath to make it
|
||||
# absolute, like shown here.
|
||||
#
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('../'))
|
||||
import tsnet
|
||||
import shlex
|
||||
import sphinx_rtd_theme
|
||||
# -- General configuration ---------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = [
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.doctest',
|
||||
'sphinx.ext.todo',
|
||||
'sphinx.ext.coverage',
|
||||
'sphinx.ext.viewcode',
|
||||
'sphinx.ext.napoleon',
|
||||
'sphinx.ext.autosummary',
|
||||
'sphinx.ext.mathjax',
|
||||
'sphinx.ext.githubpages',
|
||||
"sphinx_rtd_theme",
|
||||
'sphinx.ext.intersphinx'
|
||||
]
|
||||
|
||||
# Napoleon settings
|
||||
napoleon_google_docstring = True
|
||||
napoleon_numpy_docstring = True
|
||||
napoleon_include_init_with_doc = False
|
||||
napoleon_include_private_with_doc = False
|
||||
napoleon_include_special_with_doc = True
|
||||
napoleon_use_admonition_for_examples = False
|
||||
napoleon_use_admonition_for_notes = False
|
||||
napoleon_use_admonition_for_references = False
|
||||
napoleon_use_ivar = False
|
||||
napoleon_use_param = True
|
||||
napoleon_use_rtype = True
|
||||
|
||||
viewcode_import = True
|
||||
autodoc_member_order = 'bysource'
|
||||
autoclass_content = 'both'
|
||||
numfig=True
|
||||
numfig_format = {'figure': 'Figure %s', 'table': 'Table %s', 'code-block': 'Listing %s'}
|
||||
|
||||
math_numfig = True
|
||||
math_eqref_format = "Eq.{number}"
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# autosummary
|
||||
import glob
|
||||
autosummary_generate = glob.glob("apidocs/*.rst")
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'content'
|
||||
|
||||
# General information about the project.
|
||||
project = u'TSNet'
|
||||
copyright = u"2019, Lu Xing"
|
||||
author = u"Lu Xing, Lina Sela"
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement
|
||||
# for |version| and |release|, also used in various other places throughout
|
||||
# the built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = tsnet.__version__
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = tsnet.__version__
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This patterns also effect to html_static_path and html_extra_path
|
||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = True
|
||||
|
||||
|
||||
# -- Options for HTML output -------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
# html_theme = 'classic'
|
||||
|
||||
html_theme = "sphinx_rtd_theme"
|
||||
|
||||
# html_theme = 'bootstrap'
|
||||
# html_theme_path = sphinx_bootstrap_theme.get_html_theme_path()
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a
|
||||
# theme further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
html_theme_options = {'body_max_width':'100%' }
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
html_show_sphinx = False
|
||||
|
||||
|
||||
# -- Options for HTMLHelp output ---------------------------------------
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'tsnetdoc'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass
|
||||
# [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'TSNet.tex',
|
||||
u'TSNet Documentation',
|
||||
u"Lu Xing, Lina Sela", 'manual'),
|
||||
]
|
||||
|
||||
# latex_logo = 'logo.png'
|
||||
|
||||
# -- Options for manual page output ------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'TSNet',
|
||||
u'TSNet Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
|
||||
# -- Options for Texinfo output ----------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'TSNet',
|
||||
u'TSNet Documentation',
|
||||
author,
|
||||
'TSNet',
|
||||
'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
Welcome to TSNet's documentation!
|
||||
======================================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Contents:
|
||||
|
||||
readme
|
||||
installation
|
||||
limitations
|
||||
usage
|
||||
transient
|
||||
results
|
||||
examples
|
||||
validation
|
||||
contributing
|
||||
authors
|
||||
history
|
||||
API documentation <apidocs/tsnet>
|
||||
abbrev
|
||||
reference
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
|
@ -0,0 +1 @@
|
|||
.. include:: ../CONTRIBUTING.rst
|
|
@ -0,0 +1,16 @@
|
|||
|
||||
name: tsnet
|
||||
channels:
|
||||
- defaults
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=3.6
|
||||
- numpy
|
||||
- scipy
|
||||
- networkx
|
||||
- pandas
|
||||
- matplotlib
|
||||
- plotly
|
||||
- folium
|
||||
- utm
|
||||
- sphinx
|
|
@ -0,0 +1,317 @@
|
|||
====================
|
||||
Example Applications
|
||||
====================
|
||||
|
||||
Example 1 - End-valve closure
|
||||
-----------------------------
|
||||
|
||||
This example shows how to simulate the closure of a
|
||||
valve located at the boundary of a network. The first example
|
||||
network is shown below in :numref:`tnet1`, adopted from [[STWY67],WOLB05]_.
|
||||
It comprises 9 pipes, 8 junctions, one reservoir, 3 closed loops,
|
||||
and one valve located at the downstream end of the system.
|
||||
There are five steps that the user needs to take to run the
|
||||
transient simulation using the TSNet package:
|
||||
|
||||
.. _tnet1:
|
||||
.. figure:: figures/Tnet1.PNG
|
||||
:scale: 100 %
|
||||
:alt: tnet1
|
||||
|
||||
Tnet1 network graphics
|
||||
|
||||
1. Import TSNet package, read the EPANET INP file,
|
||||
and create transient model object.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet1_valve_closure.py
|
||||
:lines: 1-4
|
||||
|
||||
2. Set the wave speed for all pipes to :math:`1200m/s`,
|
||||
time step to :math:`0.1s`, and simulation period
|
||||
to :math:`60s`.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet1_valve_closure.py
|
||||
:lines: 6-11
|
||||
|
||||
3. Set valve operating rules, including how long it takes
|
||||
to close the valve (:math:`tc`), when to start close the
|
||||
valve (:math:`ts`), the opening percentage when the closure
|
||||
is completed (:math:`se`), and the shape of the closure
|
||||
operating curve (:math:`m`, :math:`1` stands for linear closure,
|
||||
:math:`2` stands for quadratic closure).
|
||||
|
||||
.. literalinclude:: ../examples/Tnet1_valve_closure.py
|
||||
:lines: 13-19
|
||||
|
||||
4. Compute steady state results to establish the initial
|
||||
condition for transient simulation.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet1_valve_closure.py
|
||||
:lines: 21-24
|
||||
|
||||
5. Run transient simulation and specify the name of the results file.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet1_valve_closure.py
|
||||
:lines: 26-28
|
||||
|
||||
After the transient simulation, the results at nodes and links
|
||||
will be returned and stored in the transient model (tm) instance.
|
||||
The time history of flow rate on the start node of pipe P2
|
||||
throughout the simulation can be retrieved by:
|
||||
|
||||
>>> print(tm.links['P2'].start_node_flowrate)
|
||||
|
||||
To plot the head results at N3:
|
||||
|
||||
.. literalinclude:: ../examples/Tnet1_valve_closure.py
|
||||
:lines: 31-42
|
||||
|
||||
yields :numref:`tnet1_node`:
|
||||
|
||||
.. _tnet1_node:
|
||||
.. figure:: figures/tnet1_node.png
|
||||
:width: 600
|
||||
:alt: tnet1_node
|
||||
|
||||
Tnet1 - Head at node N3.
|
||||
|
||||
Similarly, to plot the flow rate results in pipe P2:
|
||||
|
||||
.. literalinclude:: ../examples/Tnet1_valve_closure.py
|
||||
:lines: 45-58
|
||||
|
||||
yields :numref:`tnet1_pipe`:
|
||||
|
||||
.. _tnet1_pipe:
|
||||
.. figure:: figures/tnet1_pipe.png
|
||||
:width: 600
|
||||
:alt: tnet1_pipe
|
||||
|
||||
Tnet1 - Flow rate at the start and end node of pipe P2.
|
||||
|
||||
|
||||
|
||||
Example 2 - Pump operations
|
||||
---------------------------
|
||||
|
||||
This example illustrates how the package models
|
||||
a transient event resulting from a controlled pump shut-off
|
||||
, i.e., the pump speed is ramped down. This example
|
||||
network, Tnet2, is shown below in :numref:`tnet2`. Tnet2 comprises 113 pipes,
|
||||
91 junctions, 2 pumps, 2 reservoir, 3 tanks, and one valve located in the
|
||||
middle of the network.
|
||||
A transient simulation of 50 seconds is generated by shutting off PUMP2.
|
||||
There are five steps user needs to take:
|
||||
|
||||
.. _tnet2:
|
||||
.. figure:: figures/Tnet2.PNG
|
||||
:width: 600
|
||||
:alt: tnet2
|
||||
|
||||
Tnet2 network graphics
|
||||
|
||||
1. Import TSNet package, read the EPANET INP file,
|
||||
and create transient model object.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet2_pump_shutdown.py
|
||||
:lines: 1-4
|
||||
|
||||
2. Set the wave speed for all pipes to be :math:`1200m/s` and
|
||||
simulation period to be :math:`50s`. Use suggested time
|
||||
step.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet2_pump_shutdown.py
|
||||
:lines: 6-10
|
||||
|
||||
3. Set pump operating rules, including how long it takes
|
||||
to shutdown the pump (:math:`tc`), when to the shut-off starts
|
||||
(:math:`ts`), the pump speed multiplier value when the shut-off
|
||||
is completed (:math:`se`), and the shape of the shut-off
|
||||
operation curve (:math:`m`, :math:`1` stands for linear closure,
|
||||
:math:`2` stands for quadratic closure).
|
||||
|
||||
.. literalinclude:: ../examples/Tnet2_pump_shutdown.py
|
||||
:lines: 12-18
|
||||
|
||||
4. Compute steady state results to establish the initial
|
||||
condition for transient simulation.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet2_pump_shutdown.py
|
||||
:lines: 20-23
|
||||
|
||||
5. Run transient simulation and specify the name of the results file.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet2_pump_shutdown.py
|
||||
:lines: 25-27
|
||||
|
||||
|
||||
After the transient simulation, the results at nodes and links
|
||||
will be returned to the transient model (tm) instance, which is then
|
||||
stored in **Tnet2.obj**.
|
||||
The actual demand discharge at JUNCTION-105 throughout the simulation
|
||||
can be retrieved by:
|
||||
|
||||
>>> print(tm.nodes['JUNCTION-105'].demand_discharge)
|
||||
|
||||
To plot the head results at JUNCTION-105:
|
||||
|
||||
.. literalinclude:: ../examples/Tnet2_pump_shutdown.py
|
||||
:lines: 30-41
|
||||
|
||||
yields :numref:`tnet2_node`:
|
||||
|
||||
.. _tnet2_node:
|
||||
.. figure:: figures/tnet2_node.png
|
||||
:width: 600
|
||||
:alt: tnet2_node
|
||||
|
||||
Tnet2 - Head at node JUNCTION-105.
|
||||
|
||||
Similarly, to plot the velocity results in PIPE-109:
|
||||
|
||||
.. literalinclude:: ../examples/Tnet2_pump_shutdown.py
|
||||
:lines: 44-55
|
||||
|
||||
yields :numref:`tnet2_pipe`:
|
||||
|
||||
.. _tnet2_pipe:
|
||||
.. figure:: figures/tnet2_pipe.png
|
||||
:width: 600
|
||||
:alt: tnet2_pipe
|
||||
|
||||
Tnet2 - Velocity at the start and end node of PIPE-109.
|
||||
|
||||
|
||||
Example 3 - Burst and leak
|
||||
---------------------------
|
||||
|
||||
This example reveals how TSNet simulates pipe bursts and leaks.
|
||||
This example network, adapted from [OSBH08]_, is shown below in :numref:`tnet3`.
|
||||
Tnet3 comprises 168 pipes, 126 junctions, 8 valve, 2 pumps,
|
||||
one reservoir, and two tanks.
|
||||
The transient event is generated by a burst and a background leak.
|
||||
There are five steps that the user would need to take:
|
||||
|
||||
.. _tnet3:
|
||||
.. figure:: figures/Tnet3.PNG
|
||||
:width: 600
|
||||
:alt: tnet3
|
||||
|
||||
Tnet3 network graphics
|
||||
|
||||
|
||||
1. Import TSNet package, read the EPANET INP file,
|
||||
and create transient model object.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 1-4
|
||||
|
||||
2. The user can import custom wave speeds for each pipe.
|
||||
To demonstrate how to assign different wave speed,
|
||||
we assume that the wave speed for the pipes is normally distributed
|
||||
with mean of :math:`1200 m/s` and standard deviation of
|
||||
:math: `100m/s`. Then, assign the randomly generated wave speed
|
||||
to each pipe in the network according to the order the pipes
|
||||
defined in the INP file. Subsequently, set the simulation period
|
||||
as :math:`20s`, and use suggested time step.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 6-12
|
||||
|
||||
3. Define background leak location, JUNCTION-22,
|
||||
and specify the emitter coefficient.
|
||||
The leak will be included in the initial condition calculation.
|
||||
See WNTR documentation [WNTRSi]_ for more info about leak simulation.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 14-16
|
||||
|
||||
4. Compute steady state results to establish the initial
|
||||
condition for transient simulation.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 24-27
|
||||
|
||||
5. Set up burst event, including burst location, JUNCTION-20,
|
||||
burst start time (:math:`ts`),
|
||||
time for burst to fully develop (:math:`tc`), and the final emitter
|
||||
coefficient (final_burst_coeff).
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 18-22
|
||||
|
||||
6. Run transient simulation and specify the name of the results file.
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 29-31
|
||||
|
||||
After the transient simulation, the results at nodes and links
|
||||
will be returned to the transient model (tm) instance,
|
||||
which is subsequently stored in **Tnet3.obj**.
|
||||
|
||||
|
||||
To understand how much water has been lost through the leakage
|
||||
at JUNCTION-22, we can plot the leak discharge results at JUNCTION-22:
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 34-45
|
||||
|
||||
yields :numref:`tnet3_leak`:
|
||||
|
||||
|
||||
.. _tnet3_leak:
|
||||
.. figure:: figures/tnet3_leak.png
|
||||
:width: 600
|
||||
:alt: tnet3_leak
|
||||
|
||||
Tnet3 - Leak discharge at node JUNCTION-22.
|
||||
|
||||
Similarly, to reveal how much water has been wasted through the burst event
|
||||
at JUNCTION-20, we can plot the burst discharge results at JUNCTION-20:
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 48-58
|
||||
|
||||
yields :numref:`tnet3_burst`:
|
||||
|
||||
.. _tnet3_burst:
|
||||
.. figure:: figures/tnet3_burst.png
|
||||
:width: 600
|
||||
:alt: tnet3_burst
|
||||
|
||||
Tnet3 - Burst discharge at node JUNCTION-20.
|
||||
|
||||
Additionally, to plot the velocity results in LINK-40:
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 61-72
|
||||
|
||||
yields :numref:`tnet3_pipe`:
|
||||
|
||||
.. _tnet3_pipe:
|
||||
.. figure:: figures/tnet3_pipe.png
|
||||
:width: 600
|
||||
:alt: tnet3_pipe
|
||||
|
||||
Tnet3 - Velocity at the start and end node of LINK-40.
|
||||
|
||||
Moreover, we can plot head results at some further nodes, such as
|
||||
JUNCTION-8, JUNCTION-16, JUNCTION-45, JUNCTION-90, by:
|
||||
|
||||
.. literalinclude:: ../examples/Tnet3_burst_leak.py
|
||||
:lines: 75-90
|
||||
|
||||
The results are demonstrated in :numref:`tnet3_multi`. It can be noticed that
|
||||
the amplitude of the pressure transient at JUNCTION-8 and JUNCTION-16
|
||||
is greater than that at other two junctions which are further away from
|
||||
JUNCTION-20, where the burst occurred.
|
||||
|
||||
.. _tnet3_multi:
|
||||
.. figure:: figures/tnet3_multi.png
|
||||
:width: 600
|
||||
:alt: tnet3_multi
|
||||
|
||||
Tnet3 - Head at multiple junctions.
|
||||
|
||||
|
||||
More examples are includeded in https://github.com/glorialulu/TSNet/tree/master/examples.
|
After Width: | Height: | Size: 384 KiB |
After Width: | Height: | Size: 264 KiB |
After Width: | Height: | Size: 319 KiB |
After Width: | Height: | Size: 632 KiB |
After Width: | Height: | Size: 393 KiB |
After Width: | Height: | Size: 220 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 115 KiB |
After Width: | Height: | Size: 970 KiB |
After Width: | Height: | Size: 596 KiB |
|
@ -0,0 +1,139 @@
|
|||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
def valveclosing(dt, tf, valve_op):
|
||||
"""Define valve operation curve (percentage open v.s. time)
|
||||
|
||||
Parameters
|
||||
----------
|
||||
dt : float
|
||||
Time step
|
||||
tf : float
|
||||
Simulation Time
|
||||
valve_op : list
|
||||
Contains parameters to define valve operation rule
|
||||
valve_op = [tc,ts,se,m]
|
||||
tc : the duration takes to close the valve [s]
|
||||
ts : closure start time [s]
|
||||
se : final open percentage [s]
|
||||
m : closure constant [unitless]
|
||||
|
||||
Returns
|
||||
-------
|
||||
s : list
|
||||
valve operation curve
|
||||
"""
|
||||
|
||||
[tc,ts,se,m] = valve_op
|
||||
tn = int(tf/dt)
|
||||
# abrupt closure
|
||||
if tc ==0:
|
||||
s = np.array([(1- (i*dt- ts))**1 for i in range(tn)])
|
||||
s[s>1] = 1
|
||||
s[s<1] = se
|
||||
# gradual closure
|
||||
else:
|
||||
t = np.array([(i*dt- ts)/tc for i in range(tn)])
|
||||
t[t>1] = 1
|
||||
t[t<0] = 0
|
||||
s = np.array([1 - (1-se)*t[i]**m for i in range(tn)])
|
||||
s[s>1] = 1
|
||||
s[s<se] = se
|
||||
|
||||
return s
|
||||
|
||||
|
||||
def valveopening(dt, tf, valve_op):
|
||||
"""Define valve operation curve (percentage open v.s. time)
|
||||
|
||||
Parameters
|
||||
----------
|
||||
dt : float
|
||||
Time step
|
||||
tf : float
|
||||
Simulation Time
|
||||
valve_op : list
|
||||
Contains parameters to define valve operation rule
|
||||
valve_op = [tc,ts,se,m]
|
||||
tc : the duration takes to close the valve [s]
|
||||
ts : closure start time [s]
|
||||
se : final open percentage [s]
|
||||
m : closure constant [unitless]
|
||||
|
||||
Returns
|
||||
-------
|
||||
s : list
|
||||
valve operation curve
|
||||
"""
|
||||
|
||||
[tc,ts,se,m] = valve_op
|
||||
tn = int(tf/dt)
|
||||
# abrupt opening
|
||||
if tc ==0:
|
||||
s = np.array([((i*dt- ts))**1 for i in range(tn)])
|
||||
s[s>0] = se
|
||||
s[s<0] = 0
|
||||
# gradual opening
|
||||
else:
|
||||
t = np.array([(i*dt- ts)/tc for i in range(tn)])
|
||||
t[t>1] = 1
|
||||
t[t<0] = 0
|
||||
s = np.array([se* (t[i])**m for i in range(tn)])
|
||||
s[s<0] = 0
|
||||
s[s>se] = se
|
||||
return s
|
||||
|
||||
dt = 0.1
|
||||
tf = 2
|
||||
t = np.arange(0, tf, dt)
|
||||
|
||||
tc = 1 # pump closure period
|
||||
ts = 0 # pump closure start time
|
||||
se = 0 # end open percentage
|
||||
|
||||
m = 1 # closure constant
|
||||
valve_op = [tc,ts,se,m]
|
||||
s1 = valveclosing(dt, tf, valve_op)
|
||||
|
||||
m = 2 # closure constant
|
||||
valve_op = [tc,ts,se,m]
|
||||
s2 = valveclosing(dt, tf, valve_op)
|
||||
|
||||
tc = 1 # pump closure period
|
||||
ts = 0 # pump closure start time
|
||||
se = 1 # end open percentage
|
||||
|
||||
m = 1 # closure constant
|
||||
valve_op = [tc,ts,se,m]
|
||||
s3 = valveopening(dt, tf, valve_op)
|
||||
|
||||
m = 2 # closure constant
|
||||
valve_op = [tc,ts,se,m]
|
||||
s4 = valveopening(dt, tf, valve_op)
|
||||
|
||||
import matplotlib
|
||||
matplotlib.rcParams['pdf.fonttype'] = 42
|
||||
fig = plt.figure(figsize=(10,4), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.subplot(1, 2, 1)
|
||||
plt.plot(t,s1,'k-', label='m=1')
|
||||
plt.plot(t,s2,'r-', label='m=2')
|
||||
plt.xlim([t[0],t[-1]])
|
||||
plt.title('(a)')
|
||||
plt.xticks([0,1,t[-1]],['ts','ts + tc','tf'])
|
||||
plt.yticks([0,0.2,0.4,0.6,0.8,1.0],['se','0.2','0.4','0.6','0.8','1.0'])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Valve opening ratio")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
|
||||
plt.subplot(1, 2, 2)
|
||||
plt.plot(t,s3,'k-', label='m=1')
|
||||
plt.plot(t,s4,'r-', label='m=2')
|
||||
plt.xlim([t[0],t[-1]])
|
||||
plt.title('(b)')
|
||||
plt.xticks([0,1,t[-1]],['ts','ts + tc','tf'])
|
||||
plt.yticks([0,0.2,0.4,0.6,0.8,1.0],['0','0.2','0.4','0.6','0.8','se'])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
|
||||
fig.savefig('./docs/figures/valve_operating.pdf', format='pdf',dpi=500)
|
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 1.6 MiB |
After Width: | Height: | Size: 537 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 1.6 MiB |
After Width: | Height: | Size: 2.6 MiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 1.8 MiB |
After Width: | Height: | Size: 2.3 MiB |
After Width: | Height: | Size: 1.5 MiB |
After Width: | Height: | Size: 2.6 MiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 128 KiB |
|
@ -0,0 +1 @@
|
|||
.. include:: ../HISTORY.rst
|
|
@ -0,0 +1,24 @@
|
|||
Transient Simulation in water Networks (TSNet)
|
||||
==============================================
|
||||
|
||||
.. figure:: figures/highlight.png
|
||||
:width: 600
|
||||
:alt: highlight
|
||||
|
||||
|
||||
TSNet is a Python package designed to perform transient simulation in water
|
||||
distribution networks. The software includes capability to:
|
||||
|
||||
* Create transient models based on EPANET INP files
|
||||
* Operate valves and pumps
|
||||
* Add disruptive events including pipe bursts and leaks
|
||||
* Model open and closed surge tanks
|
||||
* Choose between steady,quasi-steady, and unsteady friction models
|
||||
* Perform transient simulation using Method of characteristics (MOC) techniques
|
||||
* Visualize results
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
|
@ -0,0 +1,92 @@
|
|||
.. highlight:: shell
|
||||
|
||||
============
|
||||
Installation
|
||||
============
|
||||
|
||||
Setup Python Environment
|
||||
------------------------------
|
||||
|
||||
TSNet is tested against Python versions 3.5, 3.6, and 3.7.
|
||||
It can be installed on Windows, Linux, and Mac OS X operating systems.
|
||||
Python distributions, such as Anaconda, are recommended to manage the Python
|
||||
environment as they already contain (or easily support installation of) many
|
||||
Python packages (e.g. SciPy, NumPy, pandas, pip, matplotlib, etc.) that are
|
||||
used in the TSNet package. For more information on Python package
|
||||
dependencies, see :ref:`Dependencies`.
|
||||
|
||||
Stable Release (for users)
|
||||
--------------------------
|
||||
|
||||
To install TSNet, run this command in your terminal:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip install tsnet
|
||||
|
||||
This is the preferred method to install tsnet, as it will always install the
|
||||
most recent stable release.
|
||||
|
||||
If you don't have `pip`_ installed, this `Python installation guide`_ can guide
|
||||
you through the process.
|
||||
|
||||
.. _pip: https://pip.pypa.io
|
||||
.. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/
|
||||
|
||||
|
||||
From Sources (for developers)
|
||||
-----------------------------
|
||||
|
||||
The sources for TSNet can be downloaded from the `Github repo`_.
|
||||
|
||||
You can either clone the public repository:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone git://github.com/glorialulu/tsnet
|
||||
|
||||
Or download the `tarball`_:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ curl -OL https://github.com/glorialulu/tsnet/tarball/master
|
||||
|
||||
Once you have a copy of the source, you can install it with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python setup.py install
|
||||
|
||||
|
||||
.. _Github repo: https://github.com/glorialulu/tsnet
|
||||
.. _tarball: https://github.com/glorialulu/tsnet/tarball/master
|
||||
|
||||
.. _Dependencies:
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
Requirements for TSNet include Python (3.5, 3.6, or 3.7) along with
|
||||
several Python packages.
|
||||
The following Python packages are required::
|
||||
|
||||
1. Numpy [VaCV11]_: the fundamental package needed for scientific computing with Python
|
||||
included in Anaconda distribution
|
||||
http://www.numpy.org/
|
||||
|
||||
2. Matplotlib [Hunt07]_: Python 2D plotting library
|
||||
included in Anaconda distribution
|
||||
http://matplotlib.org/
|
||||
|
||||
3. NetworkX [HaSS08]_: Network creation and manipulation engine,
|
||||
install on a python-enabled command line with `pip install wntr`
|
||||
https://networkx.github.io/
|
||||
|
||||
4. WNTR [WNTRSi]_: Water Network Tool for Resilience
|
||||
install on a python-enabled command line with `pip install wntr`
|
||||
http://wntr.readthedocs.io
|
||||
|
||||
5. pytest: Unit Tests engine
|
||||
install on a python-enabled command line with `pip install -U pytest`
|
||||
https://docs.pytest.org/en/latest/
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
=====================================
|
||||
Software Conventions and Limitations
|
||||
=====================================
|
||||
|
||||
Units
|
||||
------
|
||||
|
||||
All data in TSNet is stored in the following International System (SI) units:
|
||||
|
||||
* Length = :math:`m`
|
||||
* Diameter = :math:`m`
|
||||
* Water pressure = :math:`m`
|
||||
(this assumes a fluid density of 1000 :math:`kg/m^3`)
|
||||
* Elevation = :math:`m`
|
||||
* Mass = :math:`kg`
|
||||
* Time = :math:`s`
|
||||
* Demand = :math:`m^3/s`
|
||||
* Velocity = :math:`m/s`
|
||||
* Acceleration = :math:`g` (1 :math:`g` = 9.8 :math:`m/s^2`)
|
||||
* Volume = :math:`m^3`
|
||||
|
||||
If the unit system specified in .inp file is US units,
|
||||
it will be converted to SI unit in the simulation process.
|
||||
When setting up analysis in TSNet, all input values
|
||||
should be specified in SI units.
|
||||
All simulation results are also stored in SI units.
|
||||
|
||||
|
||||
Modelling Assumptions and Limitations
|
||||
-------------------------------------
|
||||
|
||||
TSNet is constantly under development. Current software limitations are
|
||||
as follows:
|
||||
|
||||
* Demands on the start and end nodes of pumps and valves are not supported.
|
||||
If demands are defined on these nodes in the .inp file, they will be
|
||||
ignored in transient simulation, and the simulation results may
|
||||
not be accurate due to discrepancies between the initial conditions
|
||||
and the first step in transient simulation. Warnings will be printed.
|
||||
|
||||
* Multi-branch junctions on the start and end nodes of pumps and valves
|
||||
are not supported. It is assumed that valves and pumps are connected
|
||||
by pipes in series.
|
||||
|
||||
* During transient simulation, demands are pressure dependent .
|
||||
|
||||
* Pipe Friction coefficients are converted to Darcy-Weisbach coefficients
|
||||
based on initial conditions.
|
||||
|
||||
* Pipe bursts and leaks occur only on the nodes.
|
||||
|
||||
* Transient simulation relies on a feasible steady state solution;
|
||||
hence, it is essential to verify that the steady state simulation
|
||||
succeeds without errors.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 74 KiB |
|
@ -0,0 +1,106 @@
|
|||
Introduction to TSNet
|
||||
=======================
|
||||
TSNet performs transient simulation in water networks using Method of Characteristics (MOC).
|
||||
|
||||
|
||||
* Free software: MIT license
|
||||
* Github: https://github.com/glorialulu/TSNet.git
|
||||
* Documentation: https://tsnet.readthedocs.io.
|
||||
|
||||
Overview
|
||||
---------
|
||||
Hydraulic transients in water distribution networks (WDNs),
|
||||
typically induced by pipe bursts, valve operations, and pump operations,
|
||||
can disturb the steady-state flow conditions by introducing extreme pressure
|
||||
variability and imposing abrupt internal pressure force
|
||||
onto the pipeline systems [WOLB05]_.
|
||||
These disturbances have been identified as one of the major contributing factors
|
||||
in the many pipe deterioration and catastrophic failure in WDNs [RERS15]_,
|
||||
thereby wasting a significant amount of treated water and creating unexpected
|
||||
possibilities of contamination intrusion [ASCE17]_.
|
||||
Consequently, transient simulation, as a prominent approach to
|
||||
understand and predict the behavior of hydraulic transients,
|
||||
has become an essential requirement for ensuring the distribution safety and
|
||||
improving the efficiency in the process of design and operation of WDNs.
|
||||
In addition to improving design and operation of WDNs,
|
||||
various other transient-based applications, such as network calibration,
|
||||
leak detection, sensor placement, and condition assessment,
|
||||
has also enhanced the popularity and necessity of transient simulation
|
||||
|
||||
Acknowledgedly, a number of commercial software for transient simulation
|
||||
in water distribution systems is available in the market;
|
||||
however, the use of these software for research purposes is limited.
|
||||
The major restriction is due to the fact that the programs are packed
|
||||
as black boxes, and the source codes are not visible,
|
||||
thus prohibiting any changes, including modification of
|
||||
existing and implementation of new elements, in the source codes.
|
||||
Additionally, the commercial software is designed to perform only
|
||||
single transient simulations and do not have the capabilities to automate or
|
||||
run multiple transient simulations.
|
||||
Users are required to modify the boundary conditions using the GUI,
|
||||
perform the simulation, and manually record the hydraulic responses
|
||||
in the various conditions,
|
||||
which significantly complicated the research process.
|
||||
|
||||
There is a clear gap that currently available simulation software
|
||||
are not suitable for many research applications beyond the
|
||||
conventional design purposes.
|
||||
Hence, the motivation of this work is two-fold:
|
||||
|
||||
1. Provide users with open source and freely available python code
|
||||
and package for simulating transients in water distribution systems
|
||||
that can be integrated with other case specific applications,
|
||||
e.g. sensor placement and event detection; and
|
||||
|
||||
2. Encourage users and developers to further develop and
|
||||
extend the transient model.
|
||||
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
TSNet is a Python package designed to perform transient simulation in water
|
||||
distribution networks. The software includes capability to:
|
||||
|
||||
* Create transient models based on EPANET INP files
|
||||
* Operating valves and pumps
|
||||
* Add disruptive events including pipe bursts and leakages
|
||||
* Choose between steady,quasi-steady, and unsteady friction models
|
||||
* Perform transient simulation using Method of characteristics (MOC) techniques
|
||||
* Visualize results
|
||||
|
||||
For more information, go to https://tsnet.readthedocs.io.
|
||||
|
||||
|
||||
Version
|
||||
-------
|
||||
|
||||
TSNet is a ongoing research project in the University of Texas at Austin.
|
||||
The current version is 0.2.2, which is still a pre-release.
|
||||
|
||||
Contact
|
||||
-------
|
||||
|
||||
* Lu Xing, the University of Texas at Austin, xinglu@utexas.edu
|
||||
* Lina Sela, the University of Texas at Austin, linasela@utexas.edu
|
||||
|
||||
Disclaimer
|
||||
----------
|
||||
|
||||
No warranty, expressed or implied, is made as to the correctness of the
|
||||
results or the suitability of the application.
|
||||
|
||||
|
||||
Cite TSNet
|
||||
-----------
|
||||
|
||||
To cite TSNet, use one of the following references:
|
||||
|
||||
Xing, Lu, and Lina Sela. "Transient simulations in water distribution networks:
|
||||
TSNet python package." Advances in Engineering Software 149 (2020): 102884.
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
TSNet is released under the MIT license. See the LICENSE.txt file.
|
|
@ -0,0 +1,35 @@
|
|||
=========
|
||||
Reference
|
||||
=========
|
||||
|
||||
.. [WYSS93] Wylie, E. B., Streeter, V. L., & Suo, L. (1993). Fluid transients in systems (Vol. 1, p. 464). Englewood Cliffs, NJ: Prentice Hall.
|
||||
|
||||
.. [WNTRSi] Klise, K. A., Hart, D., Moriarty, D., Bynum, M. L., Murray, R., Burkhardt, J., & Haxton, T. (2017). Water network tool for resilience (WNTR) user manual. US Environmental Protection Agency, EPA/600/R-17/264, Cincinnati, OH.
|
||||
|
||||
.. [LAJW99] Larock, B. E., Jeppson, R. W., & Watters, G. Z. (1999). Hydraulics of pipeline systems. CRC press.
|
||||
|
||||
.. [STWV96] Street, R. L., Watters, G. Z., & Vennard, J. K. (1996). Elementary fluid mechanics. J. Wiley.
|
||||
|
||||
.. [WOLB05] Wood, D. J., Lingireddy, S., Boulos, P. F., Karney, B. W., & McPherson, D. L. (2005). Numerical methods for modeling transient flow in distribution systems. Journal‐American Water Works Association, 97(7), 104-115.
|
||||
|
||||
.. [RERS15] Rezaei, H., Ryan, B., & Stoianov, I. (2015). Pipe failure analysis and impact of dynamic hydraulic conditions in water supply networks. Procedia Engineering, 119, 253-262.
|
||||
|
||||
.. [ASCE17] ASCE. (2017). 2017 infrastructure report card. Reston, VA: ASCE.
|
||||
|
||||
.. [VaCV11] van der Walt, S., Colbert, S.C., and Varoquaux, G. (2011). The NumPy array: A structure for efficient numerical computation. Computing in Science and Engineering, 13, 22-30.
|
||||
|
||||
.. [HaSS08] Hagberg, A.A., Schult, D.A., and Swart P.J. (2008). Exploring network structure, dynamics, and function using NetworkX. In Proceedings of the 7th Python in Science Conference (SciPy2008), August 19-24, Pasadena, CA, USA.
|
||||
|
||||
.. [Hunt07] Hunter, J.D. (2007). Matplotlib: A 2D graphics environment. Computing in Science and Engineering, 9(3), 90-95.
|
||||
|
||||
.. [MISI08] Misiūnas, D. (2008). Failure monitoring and asset condition assessment in water supply systems. Vilnius Gediminas Technical University.
|
||||
|
||||
.. [STWY67] Streeter, V. L., & Wylie, E. B. (1967). Hydraulic transients (No. BOOK). mcgraw-hill.
|
||||
|
||||
.. [OSBH08] Ostfeld, A., Uber, J. G., Salomons, E., Berry, J. W., Hart, W. E., Phillips, C. A., ... & di Pierro, F. (2008). The battle of the water sensor networks (BWSN): A design challenge for engineers and algorithms. Journal of Water Resources Planning and Management, 134(6), 556-568.
|
||||
|
||||
.. [VIBS06] Vítkovský, J. P., Bergant, A., Simpson, A. R., & Lambert, M. F. (2006). Systematic evaluation of one-dimensional unsteady friction models in simple pipelines. Journal of Hydraulic Engineering, 132(7), 696-708.
|
||||
|
||||
.. [VABR95] Vardy, A. E., & Brown, J. M. (1995). Transient, turbulent, smooth pipe friction. Journal of hydraulic research, 33(4), 435-456.
|
||||
|
||||
.. [HAMMER] Bentley, W. H. Transient Analysis Software.
|
|
@ -0,0 +1,121 @@
|
|||
====================
|
||||
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.
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,915 @@
|
|||
==================================
|
||||
Transient Modeling Framework
|
||||
==================================
|
||||
The framework of performing transient simulation using TSNet is shown in :numref:`flowchart`
|
||||
The main steps of transient modelling and simulation in TSNet
|
||||
are described in subsequent sections.
|
||||
|
||||
.. _flowchart:
|
||||
.. figure:: figures/chart.png
|
||||
:width: 400
|
||||
:alt: flowchart
|
||||
|
||||
Flowchart of transient simulation in TSNet
|
||||
|
||||
Transient Model
|
||||
---------------
|
||||
|
||||
The transient model inherits the
|
||||
WNTR water network model [WNTRSi]_,
|
||||
which includes
|
||||
junctions, tanks, reservoirs, pipes, pumps, valves,
|
||||
patterns,
|
||||
curves,
|
||||
controls,
|
||||
sources,
|
||||
simulation options,
|
||||
and node coordinates.
|
||||
It can be built directly from an EPANet INP file.
|
||||
Sections of EPANet INP file that are not compatible with WNTR are
|
||||
described in [WNTRSi]_.
|
||||
|
||||
Compared with WNTR water network model,
|
||||
TSNet transient model adds the features
|
||||
designed specifically for transient simulation, such as
|
||||
spatial discretization,
|
||||
temporal discretization,
|
||||
valve operation rules,
|
||||
pump operation rules,
|
||||
burst opening rules,
|
||||
surge tanks, and
|
||||
storage of time history results.
|
||||
For more information on the water network model, see
|
||||
:class:`~tsnet.network.model.TransientModel` in the API documentation.
|
||||
|
||||
A transient model can be created directly from an EPANET INP file.
|
||||
The following example build a transient model.
|
||||
|
||||
|
||||
.. code:: python
|
||||
|
||||
inp_file = 'examples/networks/Tnet1.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
|
||||
Initial Conditions
|
||||
------------------
|
||||
|
||||
TSNet employed WNTR [WNTRSi]_ for simulating the steady state
|
||||
in the network to establish the initial conditions for
|
||||
the upcoming transient simulations.
|
||||
|
||||
**WNTRSimulators** can be used to run demand-driven (DD) or
|
||||
pressure-dependent demand (PDD) hydraulics simulations, with the
|
||||
capacity of simulating leaks. The default simulation engine is DD.
|
||||
An initial condition simulation can be run using the following code:
|
||||
|
||||
.. code:: python
|
||||
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
:math:`t_0` stands for the time when the initial condition will be
|
||||
calculated. More information on the initializer can be found in
|
||||
the API documentation, under
|
||||
:class:`~tsnet.simulation.initialize.Initializer`.
|
||||
|
||||
|
||||
|
||||
Transient Simulation
|
||||
---------------------------------
|
||||
|
||||
After the initial conditions are obtained, TSNet adopts
|
||||
the Method of Characteristics (MOC)
|
||||
for solving governing transient flow equations.
|
||||
A transient simulation can be run using the following code:
|
||||
|
||||
.. code:: python
|
||||
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
tm = tsnet.simulation.MOCSimulator(tm, results_obj)
|
||||
|
||||
|
||||
The results will be returned to the transient model (tm) object,
|
||||
and then stored in the 'Tnet1.obj' file for the easiness of retrieval.
|
||||
|
||||
In the following sections, an overview of the solution approaches
|
||||
and boundary conditions is presented,
|
||||
based on the following literature [LAJW99]_ , [MISI08]_, [WYSS93]_.
|
||||
|
||||
Governing Equations
|
||||
""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
Mass and Momentum Conservation
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The transient flow is governed by the mass and momentum conservation
|
||||
equation [WYSS93]_:
|
||||
|
||||
.. math::
|
||||
\frac{\partial H}{\partial t} + \frac{a^2}{g} \frac{\partial V}{\partial x} - gV\sin \alpha = 0
|
||||
|
||||
\frac{1}{g}\frac{\partial V}{\partial t} + \frac{\partial H}{\partial x} + h_f = 0
|
||||
|
||||
where
|
||||
:math:`H` is the head,
|
||||
:math:`V` is the flow velocity in the pipe,
|
||||
:math:`t` is time,
|
||||
:math:`a` is the wave speed,
|
||||
:math:`g` is the gravity acceleration,
|
||||
:math:`\alpha` is the pipe slope,
|
||||
and :math:`h_f` represents the head loss per unit length due to friction.
|
||||
|
||||
Method of Characteristics (MOC)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The Method of Characteristics (MOC) method is used to solve the system of
|
||||
governing equations above. The essence of MOC is to transform the set of
|
||||
partial differential equations to an equivalent set of ordinary differential
|
||||
equations that apply along specific lines, i.e., characteristics lines
|
||||
(C+ and C-), as shown below [LAJW99]_:
|
||||
|
||||
.. math::
|
||||
C+: \ \ \ \frac{dV}{dt} + \frac{g}{a} \frac{dH}{dt} + g h_f - \frac{g}{a}V\sin\alpha = 0
|
||||
\ \ \ \text{ along } \frac{dx}{dt} = a
|
||||
|
||||
C-: \ \ \ \frac{dV}{dt} - \frac{g}{a} \frac{dH}{dt} + g h_f - \frac{g}{a}V\sin\alpha = 0
|
||||
\ \ \ \text{ along } \frac{dx}{dt} = -a
|
||||
|
||||
|
||||
Headloss in Pipes
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
Steady/ quasi-steady friction model
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
TSNet adopts Darcy-Weisbach equation to compute head loss, regardless of the
|
||||
friction method defined in the EPANET .inp file. This package computes
|
||||
Darcy-Weisbach coefficients (:math:`f`) based on the head loss per unit length
|
||||
(:math:`{h_f}_0`) and flow velocity (:math:`V_0`) in initial condition,
|
||||
using the following equation:
|
||||
|
||||
.. math::
|
||||
f = \frac{{h_f}_0}{V_0^2/2gD}
|
||||
|
||||
where
|
||||
:math:`D` is the pipe diameter,
|
||||
and :math:`g` is gravity acceleration.
|
||||
|
||||
Subsequently, in transient simulation the headloss (:math:`h_f`) is calculated
|
||||
based on the following equation:
|
||||
|
||||
.. math::
|
||||
h_f = f\frac{V^2}{2gD}
|
||||
|
||||
|
||||
|
||||
Unsteady friction model
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In addition to the steady friction model, TSNet includes the quasi-steady and
|
||||
the unsteady friction models.
|
||||
The head loss term (:math:`h_f`) can be expressed as a sum of steady/quasi-steady part
|
||||
(:math:`{h_f}_s`) and unsteady part (:math:`{h_f}_u`), i.e., :math:`h_f={h_f}_s+ {h_f}_u`.
|
||||
TSNet incorporates the instantaneous acceleration-based model [VIBS06]_ to calcualte the
|
||||
unsteady friction:
|
||||
|
||||
.. math::
|
||||
{h_f}_u = \frac{k_u}{2g} \left( \frac{\partial V}{\partial t} + a \cdot \mbox{sign}(V) \left| \frac{\partial V}{\partial x}\right| \right)
|
||||
|
||||
where
|
||||
:math:`{h_f}_u` is the head loss per unit length due to unsteady friction,
|
||||
:math:`\frac{\partial V}{\partial t}` is the local instantaneous acceleration,
|
||||
:math:`\frac{\partial V}{\partial x}` is the convective instantaneous acceleration, and
|
||||
:math:`k_u` is Brunone's friction coefficient, which can be analytically determined using
|
||||
Vardy's sheer decay coefficient (:math:`C^*`) [VABR95]_:
|
||||
|
||||
.. math::
|
||||
k_u = \frac{C^*}{2}
|
||||
|
||||
.. math::
|
||||
C^* = \left\{ \begin{array}{rl}
|
||||
0.00476 & \mbox{laminar flow } (Re \leq 2000)\\
|
||||
\frac{7.41}{Re^{\log{(14.3/Re^{0.05})}}} & \mbox{turbulent flow } (Re > 2000)
|
||||
\end{array} \right.
|
||||
|
||||
TSNet allows the user to choose the friction model using TSNet API simply by specifying
|
||||
the friction model to be used in :class:`~tsnet.simulation.MOCSimulator`.
|
||||
The friction argument can take three values: 'steady', 'quasi-steady', and 'unsteady':
|
||||
|
||||
.. code:: python
|
||||
|
||||
results_obj = 'Tnet3' # name of the object for saving simulation results
|
||||
friction = 'unsteady' # or "steady" or "quasi-steady", by default "steady"
|
||||
tm = tsnet.simulation.MOCSimulator(tm, results_obj, friction)
|
||||
|
||||
|
||||
Pressure-driven Demand
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
During the transient simulation in TSNet, the demands are treated as
|
||||
pressure-dependent discharge; thus, the actual demands will vary from
|
||||
the demands defined in the INP file.
|
||||
The actual demands (:math:`d_{actual}`) are modeled based on the
|
||||
instantaneous pressure head at the node and the demand discharge coefficients,
|
||||
using the following equation:
|
||||
|
||||
.. math::
|
||||
d_{actual} = k \sqrt{H_p}
|
||||
|
||||
where :math:`H_p` is the pressure head
|
||||
and :math:`k` is the demand discharge coefficient,
|
||||
which is calculated from the initial demand (:math:`d_0`)
|
||||
and pressure head (:math:`{H_p}_0`):
|
||||
|
||||
.. math::
|
||||
k = \frac{d_0}{\sqrt{{H_p}_0}}
|
||||
|
||||
It should be noted that if the pressure head is negative,
|
||||
the demand flow will be treated zero,
|
||||
assuming that a backflow preventer is installed on each node.
|
||||
|
||||
|
||||
Choice of Time Step
|
||||
"""""""""""""""""""
|
||||
|
||||
The determination of time step in MOC is not a trivial task. There are two
|
||||
constraints that have to be satisfied simultaneously:
|
||||
|
||||
1. The Courant's criterion has to be satisfied for each pipe,
|
||||
indicating the maximum time step allowed in the network transient analysis
|
||||
will be:
|
||||
|
||||
.. math::
|
||||
\Delta t \leqslant \min{\left(\frac{L_i}{N_i a_i}\right)} \text{, }
|
||||
i = 1 \text{, } 2 \text{, ..., } n_p
|
||||
|
||||
2. The time step has to be the same for all the pipes in the network, therefore
|
||||
restricting the wave travel time :math:`\frac{L_i}{N_ia_i}` to be the same
|
||||
for any computational unit in the network. Nevertheless, this is not
|
||||
realistic in a real network, because different pipe lengths
|
||||
and wave speeds usually cause different wave travel times. Moreover,
|
||||
the number of sections in the :math:`i^{th}` pipe (:math:`N_i`) has to
|
||||
be an integer due to the grid configuration in MOC; however, the
|
||||
combination of time step and pipe length is likely to produce
|
||||
non-integer value of :math:`N_i`, which then requires further adjustment.
|
||||
|
||||
This package adopted the wave speed adjustment scheme [WYSS93]_ to make
|
||||
sure the two criterion stated above are satisfied.
|
||||
|
||||
To begin with, the maximum allowed time step (:math:`{\Delta t}_{max}`) is
|
||||
calculated, assuming that there are two computational units
|
||||
on the critical pipe (i.e., the pipe that results in the smallest travel time,
|
||||
which depends on the length and the wave speed for that pipe):
|
||||
|
||||
.. math::
|
||||
\Delta t_{max} = \min{\left(\frac{L_i}{2a_i}\right)} \text{, }
|
||||
i = 1 \text{, } 2 \text{, ..., } n_p
|
||||
|
||||
After setting the initial time step, the following adjustments will be performed.
|
||||
Firstly,
|
||||
the :math:`i^{th}` pipes (:math:`p_i`) with length (:math:`L_i`) and wave
|
||||
speed (:math:`a_i`) will be discretized into (:math:`N_i`) segments:
|
||||
|
||||
.. math::
|
||||
N_i = \text{round}\left(\frac{L_i}{a_i \Delta t_{max}}\right) \text{, }
|
||||
i = 1, 2, \dots, n_p
|
||||
|
||||
Furthermore, the discrepancies introduced by the rounding of :math:`N_i`
|
||||
can be compensated by correcting the wave speed (:math:`a_i`).
|
||||
|
||||
.. math::
|
||||
\Delta t = \mbox{argmin}_{\phi,\Delta t}{\left \{\sum_{i=1}^{n_p}{{\phi_i}^2} \ \ \big | \ \ \Delta t = \frac{L_i}{a_i(1 \pm \phi_i)N_i} \ \ i = 1, 2, \dots, n_p \right\} }
|
||||
|
||||
Least squares approximation is then used to determine :math:`\Delta t`
|
||||
such that the sum of squares of the wave speed adjustments
|
||||
(:math:`\sum{{\phi_i}^2}`) is minimized [MISI08]_.
|
||||
Ultimately, an adjusted
|
||||
:math:`\Delta t` can be determined and then used in the transient simulation.
|
||||
|
||||
It should be noted that even if the user defined time step satisfied the
|
||||
Courant's criterion, it will still be adjusted.
|
||||
|
||||
If the user defined time step is greater than :math:`{\Delta t}_{max}`, a
|
||||
fatal error will be raised and the program will be killed; if not, the
|
||||
user defined value will be used as the initial guess for the upcoming
|
||||
adjustment.
|
||||
|
||||
.. code:: python
|
||||
|
||||
dt = 0.1 # time step [s], if not given, use the maximum allowed dt
|
||||
tf = 60 # simulation period [s]
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
|
||||
The determination of time step is not
|
||||
straightforward, especially in large networks.
|
||||
Thus, we allow the user
|
||||
to ignore the time step setting, in which case
|
||||
:math:`{\Delta t}_{max}` will be used as the initial guess for the upcoming adjustment.
|
||||
|
||||
Alternatively, the user can also specify the number of segments on the critical pipe:
|
||||
|
||||
.. code:: python
|
||||
|
||||
N = 3 # number of computational units on the critical pipe, default 2.
|
||||
tf = 60 # simulation period [s]
|
||||
tm.set_time_N(tf,N)
|
||||
|
||||
|
||||
Example
|
||||
^^^^^^^
|
||||
|
||||
We use a small network, shown in :numref:`MOC_time`,
|
||||
to illustrate how time step is determined
|
||||
as well as the benefits and drawbacks of combining or removing small pipes.
|
||||
:numref:`MOC_time` (a) shows a network of three pipes with length of 940m, 60m, and 2000m, respectively.
|
||||
The wave speed for all the pipes is equal to 1000m/s.
|
||||
The procedure for determine the time step is as follows:
|
||||
|
||||
|
||||
* Calculate the maximum time step (:math:`\Delta t_{max}`)
|
||||
allowed by Courant's criterion, assuming that there are two computational units
|
||||
on the critical pipe (i.e., the pipe that results in the smallest travel time,
|
||||
which depends on the length and the wave speed for that pipe), i.e., for pipe 2 :math:`N_2 = 2`.}
|
||||
|
||||
|
||||
.. math::
|
||||
\Delta t_{max} = \min{\left(\frac{L_i}{2a_i}\right)} = \left(\frac{L_2}{N_2a_2}\right) = \frac{60}{2\times 1000} = 0.03s
|
||||
|
||||
|
||||
* Compute the required number of computational units for all other
|
||||
pipes, i.e, :math:`N_1` for pipe 1 and :math:`N_3` for pipe 3, using :math:`\Delta t_{max}` as the time step.
|
||||
Since the number of computational units on each pipe has to be integer,
|
||||
the numbers are rounded to the closest integer, thus introducing discrepancies in the time step of different pipes.
|
||||
|
||||
.. math::
|
||||
N_1 &= \text{round}\left(\frac{L_1}{a_1 \Delta t_{max}}\right) = \frac{940}{1000\times0.03} = 31
|
||||
|
||||
N_3 &= \text{round}\left(\frac{L_3}{a_3 \Delta t_{max}}\right) = \frac{2000}{1000\times0.03} = 67
|
||||
|
||||
|
||||
With these number of computational units, the time steps for each pipe become:
|
||||
|
||||
.. math::
|
||||
\Delta t_1 = \frac{L_1}{N_1a_1}=0.03032s
|
||||
|
||||
\Delta t_3 = \frac{L_3}{N_3a_3}=0.02985s
|
||||
|
||||
|
||||
However, all the pipes have to have the same time step for marching forward;
|
||||
hence, we need to adjust the wave speed to match the time step for all pipes.
|
||||
|
||||
.. math::
|
||||
\Delta t =\frac{L_i}{a_i^{adj}N_i}
|
||||
|
||||
|
||||
* Compensate the discrepancies introduced by rounding number of
|
||||
computation units through adjusting wave speed from :math:`a_i` to :math:`a_i^{adj}=a_i(1+\phi_i)`.
|
||||
The sum of squared adjustments (:math:`\sum{{\phi_i}^2}`) is minimized to obtain the minimal overall
|
||||
adjustment. In this example, the wave speeds of the three pipes are adjusted by
|
||||
:math:`\phi_1 = 0.877\, \phi_2 = -0.196\%, \phi_3 =0.693\%`, respectively.
|
||||
|
||||
* Finally, the time step can be calculated based on the number of
|
||||
computational units and the adjusted wave speed of each one of three pipes that now share
|
||||
the same time step:
|
||||
|
||||
.. math::
|
||||
\Delta t = \frac{L_i}{a_i(1 \pm \phi_i)N_i}=0.03006s
|
||||
|
||||
|
||||
.. _MOC_time:
|
||||
.. figure:: figures/MOC_time_example.png
|
||||
:width: 600
|
||||
:alt: MOC_time
|
||||
|
||||
Example network for determining the time step: (a) before combing pipes; (b): after combing pipes.
|
||||
|
||||
|
||||
Noticeably, the maximum allowed time step for this network is fairly small.
|
||||
Meanwhile, the total number of segments (:math:`31+2+67=100`) is relatively large;
|
||||
thus, in order to conduct a transient simulation of :math:`10s`,
|
||||
the overall number of computation nodes in x-t plane will be :math:`10/0.03006\times100=33267`.
|
||||
The computation efforts can be significantly reduced by, for example, combing/removing the shorted pipe, i.e., pipe 2.
|
||||
:numref:`MOC_time` (b) illustrates the network after combing pipe 1 and pipe 2.
|
||||
Following the same steps shown above, it can be determined that the maximum time step is :math:`0.5s`, and
|
||||
the number of computation units for pipes 1 and 2 are :math:`2` and :math:`4`, respectively,
|
||||
thus significantly reducing the total number of computation nodes in x-t plane required
|
||||
for :math:`10s` simulation to :math:`10/0.5\times(2+4)=26`.
|
||||
|
||||
|
||||
In this example, we implicitly assumed that pipe properties were the same (e.g., diameter, material),
|
||||
however these properties affect wave propagation, reflection, and damping.
|
||||
Hence, despite the benefits in reducing computation costs,
|
||||
merging or removing pipes to improve computational efficiency
|
||||
is not straightforward and requires careful considerations of how these changes will affect modeling accuracy.
|
||||
In other words, any discontinuity or change in pipe properties will create changes in wave propagation, and hence,
|
||||
if removed will change the model.
|
||||
For example, suppose pipe 1 and 3 in :numref:`MOC_time` have the same diameter,
|
||||
while pipe 2 has smaller diameter,
|
||||
then a certain portion of wave speed will be reflected at junctions connecting the pipes.
|
||||
However, if pipe 2 is to be removed, and pipe 1 is then connected to pipe 3, which exhibit the same diameter,
|
||||
there will be no reflection observed in the new junction, thus altering the wave propagation in the network.
|
||||
Therefore, precautions are required before removing or combing the short pipes,
|
||||
or modifying network topology in general.
|
||||
|
||||
Moreover, the simulation time step can be controlled by specifying
|
||||
large number of segments in the critical pipe, which will also control the
|
||||
wave speed adjustments (:math:`\phi`), as shown in :numref:`wavev`
|
||||
calculated for network Tnet1.
|
||||
The black curve shows the reduction in the simulation time step as the number of segments
|
||||
in the critical pipe increases.
|
||||
Subsequently, the decreased time step results in a reduction in wave speed adjustment
|
||||
(:math:`a^{adj} = a\times(1+\phi)`), as illustrated by the red curve.
|
||||
The red line represents the average wave speed adjustment and the shaded area
|
||||
represents the maximum and minimum wave speed adjustments for all pipes in the network.
|
||||
For example, when the critical pipe is divided into 40 segments, the time step is reduced
|
||||
to less than 0.001s, and
|
||||
the adjustment of wave speed is reduced to about 0.005, which is negligibly small.
|
||||
However, there is obviously a computational trade-off between numerical accuracy and
|
||||
computational efficiency.
|
||||
|
||||
.. _wavev:
|
||||
.. figure:: figures/wavespeed.png
|
||||
:width: 400
|
||||
:alt: wavev
|
||||
|
||||
Time step (black, left y-axis) versus the number of computational
|
||||
units on the critical pipe and the wave speed adjustments (red, right y-axis)
|
||||
showing the mean (red line) and the max-min range (shaded area).
|
||||
|
||||
|
||||
|
||||
Numerical Scheme
|
||||
"""""""""""""""""""
|
||||
The explicit MOC technique adopted to solve the compatibility equations
|
||||
is explained in a simple network.
|
||||
:numref:`MOC_grid_net` illustrates a simple piped network
|
||||
and the corresponding MOC characteristic grid on the x-t plane.
|
||||
Boundary nodes (represented by the void circles),
|
||||
are defined by the physical elements in the network (or any discontinuity),
|
||||
such as tanks, junctions, valves, pumps, leaks and bursts.
|
||||
Inner nodes (represented by solid circles) are numerically specified to divide a single
|
||||
pipe into several segments, i.e., *computational units*, so that the propagation of pressure waves
|
||||
can be properly modeled.
|
||||
The heads, :math:`H`, and flow velocities, :math:`V`, are computed for each computational node,
|
||||
either boundary or inner node, and at each time based on the information at a previous time.
|
||||
Depending on the type of the computational node (i.e. inner or boundary)
|
||||
and the specific boundary condition,
|
||||
the flows and heads may be allocated and computed differently.
|
||||
:numref:`MOC_grid` shows a general example of two computational units for computing flow velocities and heads.
|
||||
Note that for inner nodes, where there is no change in pipe or flow conditions,
|
||||
:math:`H_2^t = H_3^t` and :math:`V_2^t = V_3^t`.
|
||||
Otherwise, additional head/flow boundary conditions will be introduced between points 2 and 3
|
||||
in addition to the two compatibility equations.
|
||||
Detailed descriptions about different boundary conditions are discussed in the next section.
|
||||
|
||||
|
||||
.. _MOC_grid_net:
|
||||
.. figure:: figures/MOC_grid_net.png
|
||||
:width: 600
|
||||
:alt: MOC_grid_net
|
||||
|
||||
Topology of a simple network
|
||||
|
||||
|
||||
.. _MOC_grid:
|
||||
.. figure:: figures/MOC_grid.png
|
||||
:width: 400
|
||||
:alt: MOC_grid
|
||||
|
||||
MOC characteristic grids in x-t plane for two adjacent computational units
|
||||
|
||||
|
||||
Steady/quasi-steady Friction Model
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The solution of the compatibility equations is achieved by integrating
|
||||
the above equations along specific characteristic lines of the numerical grid,
|
||||
which are solved to compute the head and flow velocity, :math:`H_i^t,V_i^t`,
|
||||
at new point in time and space given that the conditions at the previous time step are known.
|
||||
The two characteristic equations describing the hydraulic transients with steady friction model
|
||||
(:math:`h_f = {h_f}_s = f\frac{V^2}{2gD}`) are discretized and formulated as:
|
||||
|
||||
|
||||
.. math::
|
||||
:label: com_steady
|
||||
|
||||
C+: &\qquad {} (V_i^t - V_{i-1}^{t-1}) + \frac{g}{a} (H_i^{t} - H_{i-1}^{t-1} )
|
||||
+ \frac{f\Delta t}{2D}V_{i-1}^{t-1} |V_{i-1}^{t-1}|
|
||||
+ \frac{g\Delta t}{a} V_{i-1}^{t-1}\sin\alpha= 0\\
|
||||
C-: &\qquad {} (V_i^t - V_{i+1}^{t-1}) - \frac{g}{a} (H_i^{t} - H_{i+1}^{t-1} )
|
||||
- \frac{f\Delta t}{2D}V_{i+1}^{t-1} |V_{i+1}^{t-1}|
|
||||
- \frac{g\Delta t}{a} V_{i+1}^{t-1}\sin\alpha= 0
|
||||
|
||||
|
||||
Once the MOC characteristic grid and numerical scheme are established,
|
||||
the explicit time marching MOC scheme can be conducted in the computational units shown
|
||||
in :numref:`MOC_grid` as follows:
|
||||
|
||||
* First, given initial conditions, the heads and flow velocities
|
||||
at all computational nodes are known, and are updated for the next time step,
|
||||
i.e. :math:`H_2^{t}, V_2^{t}, H_3^{t}`,
|
||||
and :math:`V_3^{t}` will be updated based on
|
||||
:math:`H_1^{t-1}, V_1^{t-1}, H_4^{t-1},` and :math:`V_4^{t-1}`.
|
||||
|
||||
* Then, the relation between :math:`H_2^t` and :math:`V_2^t` with known
|
||||
:math:`H_1^{t-1}, V_1^{t-1}`, and properties of the computation unit 1,
|
||||
such as wave speed (:math:`a_1`) and friction factor(:math:`f_1`) are established
|
||||
along the positive characteristic line (:math:`C^+`):
|
||||
|
||||
.. math::
|
||||
V_2^t + \frac{g}{a_1} H_2^t = V_1^{t-1} + \frac{g}{a_1} H_1^{t-1}
|
||||
-\frac{f_1\Delta t}{2D_1}V_1^{t-1} |V_1^{t-1}| + \frac{g\Delta t}{a_1} V_1^{t-1}\sin\alpha_1
|
||||
|
||||
|
||||
* Similarly, :math:`H_3^t` and :math:`V_3^t` is updated using the compatibility equations
|
||||
along the negative characteristic line (:math:`C^-`) and
|
||||
conditions at previous time step, :math:`H_4^{t-1}, V_4^{t-1}` :
|
||||
|
||||
.. math::
|
||||
V_3^t - \frac{g}{a_2} H_3^t = -V_4^{t-1} + \frac{g}{a_2} H_4^{t-1}
|
||||
+ \frac{f_2\Delta t}{2D_2}V_4^{t-1} |V_4^{t-1}| - \frac{g \Delta t}{a_2} V4^{t-1}\sin\alpha_2
|
||||
|
||||
* Subsequently, the system of equations is supplemented using
|
||||
the boundary conditions at the node connecting the two computation units,
|
||||
such as energy equations that specify the relation between :math:`H_2^t` and :math:`H_3^t`
|
||||
and continuity equations for :math:`V_2^t` and :math:`V_3^t`.
|
||||
Different boundary conditions can be defined to characterize different connections,
|
||||
including valves, pumps, surge tanks, and pipe-to-pipe junctions with/or without
|
||||
leak, burst, and demand.
|
||||
For example, if the connection is a pipe-to-pipe junction with a leak, the boundary conditions
|
||||
can be defined as:
|
||||
|
||||
.. math::
|
||||
H_2^t = H_3^t; V_2^t A_1 = V_3^t A_2 + k_l \sqrt{H_2^t}
|
||||
|
||||
where, :math:`k_l` is the leakage coefficient and
|
||||
:math:`A_1, A_2` are the cross-sectional area of computation units 1 and 2, respectively.
|
||||
More boundary conditions are discussed in the next section.
|
||||
|
||||
* Ultimately, the system of equations containing compatibility equations,
|
||||
and the two boundary conditions
|
||||
can be solved for the four unknowns, i.e.,:math:`H_2^t, V_2^t, H_3^t`, and :math:`V_3^t`,
|
||||
thus completing the time marching from :math:`t-1` to :math:`t`.
|
||||
|
||||
Unsteady Friction Model
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The local (:math:`\frac{\partial{V}}{\partial{x}}`)
|
||||
and convective instantaneous (:math:`\frac{\partial{V}}{\partial{t}}`)acceleration terms
|
||||
are approximated using finite-difference schemes
|
||||
on the characteristic grid, as shown in :numref:`MOC_grid_unsteady`.
|
||||
The explicit fist-order finite difference scheme is implemented such that the computation
|
||||
of the acceleration terms does not interact with adjacent computational sections,
|
||||
thus preserving the original structure of the MOC scheme.
|
||||
Mathematically, the acceleration terms along positive and negative characteristic lines can
|
||||
be represented as:
|
||||
|
||||
.. math::
|
||||
C^+: & \frac{\partial{V}}{\partial{t}}^+ = \frac{V_1^{t-1}-V_1^{t-2}}{\Delta t}
|
||||
& \frac{\partial{V}}{\partial{x}}^+ = \frac{V_2^{t-1}-V_1^{t-1}}{\Delta x} \\
|
||||
C^-: & \frac{\partial{V}}{\partial{t}}^- = \frac{V_4^{t-1}-V_4^{t-2}}{\Delta t}
|
||||
& \frac{\partial{V}}{\partial{x}}^- = \frac{V_4^{t-1}-V_3^{t-1}}{\Delta x}
|
||||
|
||||
|
||||
|
||||
.. _MOC_grid_unsteady:
|
||||
.. figure:: figures/MOC_grid_unsteady.png
|
||||
:width: 400
|
||||
:alt: MOC_grid_unsteady
|
||||
|
||||
MOC characteristic grid with finite difference unsteady friction
|
||||
|
||||
Subsequently, the formulation of unsteady friction can be incorporated into
|
||||
the compatibility equations with
|
||||
additional terms describing the instantaneous acceleration-based unsteady friction model,
|
||||
as below:
|
||||
|
||||
|
||||
.. math::
|
||||
:label: com_unsteady
|
||||
|
||||
C+: \qquad {}(V_i^t - V_{i-1}^{t-1}) + \frac{g}{a} (H_i^{t} - H_{i-1}^{t-1} )
|
||||
+ \frac{g}{a} \Delta t V_{i-1}^{t-1}\sin\alpha
|
||||
+ \frac{f\Delta x}{2D}V_{i-1}^{t-1} |V_{i-1}^{t-1}|\\
|
||||
+ \frac{k_u}{2g} \left[ (V_{i-1}^{t-1} - V_{i-1}^{t-2}) +
|
||||
\mbox{sign}(V_{i-1}^{t-1}) \left|V_i^{t-1} - V_{i-1}^{t-1} \right| \right] = 0\\
|
||||
C-: \qquad {} (V_i^t - V_{i+1}^{t-1}) - \frac{g}{a} (H_i^{t} - H_{i+1}^{t-1} )
|
||||
+ \frac{g}{a} \Delta t V_{i+1}^{t-1}\sin\alpha
|
||||
- \frac{f\Delta x}{2D}V_{i+1}^{t-1} |V_{i+1}^{t-1}|\\
|
||||
- \frac{k_u}{2g} \left[ (V_{i+1}^{t-1} - V_{i+1}^{t-2}) +
|
||||
\mbox{sign}(V_{i+1}^{t-1}) \left|V_{i+1}^{t-1} - V_{i}^{t-1} \right| \right] = 0
|
||||
|
||||
|
||||
Boundary Conditions
|
||||
"""""""""""""""""""
|
||||
|
||||
Boundary conditions are required to characterize the devices or discontinuities,
|
||||
such as such as tanks, junctions, valves, pumps, leaks and bursts, between two computational units.
|
||||
Supplemented by the boundary conditions specifying the relations between :math:`H_2 ^t, H_3^t, V_2^t, V_3^t` as
|
||||
in :numref:`MOC_grid` or :numref:`MOC_grid_unsteady`,
|
||||
the compatibility equations (:eq:`com_steady` or :eq:`com_unsteady`)
|
||||
can then be solved to obtain :math:`H_2 ^t, H_3^t, V_2^t`, and :math:`V_3^t`.
|
||||
The following sections discuss the boundary conditions for devices and discontinuities in detail.
|
||||
|
||||
Surge tanks
|
||||
^^^^^^^^^^^^
|
||||
|
||||
The modeling of water hammer protection devices, including the open and closed surge tanks,
|
||||
are also incorporated in TSNet.
|
||||
An open surge tank is modeled as an open chamber connected directly to a pipeline
|
||||
and is open to the atmosphere [WYSS93]_.
|
||||
Initially, the water head (:math:`z`) in the tank equals to the hydraulic head in the upstream pipeline.
|
||||
During transient simulation, the open surge tank moderates pressure transients by
|
||||
storing the excess water when a pressure jump occurs in the pipeline connection, or supplying water
|
||||
in the event of a pressure drop.
|
||||
Then, the boundary conditions at the open surge tank can be formulated as:
|
||||
|
||||
.. math::
|
||||
:label: open_surge
|
||||
|
||||
&V_2^t A_1 - V_3^t A_2 = Q_T^t &\mbox{continuity}
|
||||
|
||||
&H_2^t = H_3^t &\mbox{energy conservation}
|
||||
|
||||
&H_2^t = z^t &\mbox{energy conservation}
|
||||
|
||||
&z^t = z^{t-1} + \frac{\Delta t }{a A_T}\left(Q_T^t + Q_T^{t-1}\right) &\mbox{tank water level}
|
||||
|
||||
where :math:`Q_T` is the flow rate into the surge tank,
|
||||
:math:`z` is the water level in the surge tank, and
|
||||
:math:`A_T` is the cross-sectional area of the surge tank.
|
||||
With six equations (two compatity equations and four boundary conditions)
|
||||
and six unknowns (:math:`V_2^t, V_3^t, H_2^t, H_3^t, z^t, Q_T^t`),
|
||||
the above system of equations can be solved at each time step.
|
||||
Other devices can be modeled as well by defining the corresponding boundary conditions to
|
||||
replace :eq:`open_surge`.
|
||||
|
||||
In TSNet, an open surge tank is assumed to exhibit infinite height so that the tank never overflows.
|
||||
The user can add an open surge tank to an existing network in the TSNet model by defining the desired
|
||||
location and the cross-sectional area of the surge tank, as shown:
|
||||
|
||||
.. code:: python
|
||||
|
||||
tank_node = 'JUNCTION-90'
|
||||
tank_area = 10 # tank cross sectional area [m^2]
|
||||
tm.add_surge_tank(tank_node, [tank_area], 'open')
|
||||
|
||||
Although the infinite height assumption is not realistic, due to the modeling simplicity,
|
||||
open surge tanks can serve an good initial approach for investigating the placement of surge protection devices.
|
||||
In fact, the major disadvantages of open surge tanks is that it typically cannot accommodate
|
||||
large pressure transients unless the tank is excessively tall and large, which limits its usefulness.
|
||||
|
||||
Hence, we also included closed surge tank, i.e., air chamber,
|
||||
in TSNet as more realistic water hammer protection devices.
|
||||
An air chamber is a relatively small sealed vessel with compressed air at its top and
|
||||
water in the bottom [WYSS93]_.
|
||||
During transient simulation, the closed surge tank also moderates pressure transients
|
||||
by slowing down the deceleration or the acceleration of water flow. For example, when pressure
|
||||
in the upstream connection increases, water flows into the tank, water level in the tank increases,
|
||||
air volume compresses, and air pressure increases,
|
||||
thus slowing down the acceleration of the water inflow into the tank and the increase in pressure.
|
||||
Similarly, when pressure in the upstream connection drops, water flows from the tank,
|
||||
then water level in the chamber decreases, air volume increases, and air pressure decreases,
|
||||
thus slowing the deceleration of the water flow and the decrease of pressure head.
|
||||
The boundary conditions characterizing close surge tank in the computational units
|
||||
shown in :numref:`MOC_grid` are formulated as:
|
||||
|
||||
.. math::
|
||||
& V_2^t A_1 - V_3^t A_2 = Q_T^t &\mbox{continuity}
|
||||
|
||||
& H_2^t = H^3_t &\mbox{energy conservation}
|
||||
|
||||
& H_A^t = H2^t + H_b - z_t &\mbox{energy conservation}
|
||||
|
||||
& z^t = z^{t-1} + \frac{\Delta t }{a A_T}\left(Q_T^t + Q_T^{t-1}\right) &\mbox{tank water level}
|
||||
|
||||
& H_A^t \mathcal{V}_A^t = \mbox{constant} &\mbox{perfect gas law}
|
||||
|
||||
& \mathcal{V}_A^t = \mathcal{V}_A^{t-1} - A_T \left(z^t-z^{t-1}\right) &\mbox{tank air volume}
|
||||
|
||||
|
||||
where :math:`Q_T` is the flow rate into the surge tank,
|
||||
:math:`z` is the water level in the surge tank,
|
||||
:math:`H_A, \mathcal{V}_A` are the total head, and the volume of the air in the surge tank,
|
||||
:math:`H_b` is the barometric pressure, and
|
||||
:math:`A_T` is the cross-sectional area of the surge tank.
|
||||
|
||||
The user can add a closed surge tank by specifying the location, cross-sectional area,
|
||||
total height of the surge tank, and initial water height in the tank:
|
||||
|
||||
.. code::
|
||||
|
||||
tank_node = 'JUNCTION-90'
|
||||
tank_area = 10 # tank cross sectional area [m^2]
|
||||
tank_height = 10 # tank height [m]
|
||||
water_height = 5 # initial water level [m]
|
||||
tm.add_surge_tank(tank_node, [tank_area,tank_height,water_height], 'closed')
|
||||
|
||||
|
||||
Valve Operations
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. Two types of valve are included in TSNet: end valve, located on the boundary
|
||||
of a network, and inline valve, located in the middle of the network and
|
||||
connected by one pipe on each end.
|
||||
|
||||
Valve operations, including closure and opening, are supported in TSNet.
|
||||
The default valve shape is gate valve, the valve characteristics curve
|
||||
of which is defined according to [STWV96]_.
|
||||
The following examples illustrate how to perform valve operations.
|
||||
|
||||
Valve closure can be simulated by defining
|
||||
the valve closure start time (:math:`ts`),
|
||||
the operating duration (:math:`t_c`),
|
||||
the valve open percentage when the closure is completed (:math:`se`),
|
||||
and the closure constant (:math:`m`), which characterizes
|
||||
the shape of the closure curve.
|
||||
These parameters essentially define the valve closure curve.
|
||||
For example, the code below will yield the blue curve
|
||||
shown in :numref:`valve_closure`.
|
||||
If the closure constant (:math:`m`) is
|
||||
instead set to :math:`2`, the valve curve will then correspond to the
|
||||
orange curve in :numref:`valve_closure`.
|
||||
|
||||
|
||||
.. code:: python
|
||||
|
||||
tc = 1 # valve closure period [s]
|
||||
ts = 0 # valve closure start time [s]
|
||||
se = 0.5 # end open ratio
|
||||
m = 1 # closure constant [dimensionless]
|
||||
valve_op = [tc,ts,se,m]
|
||||
tm.valve_closure('VALVE',valve_op)
|
||||
|
||||
.. _valve_closure:
|
||||
.. figure:: figures/valve_closure.png
|
||||
:width: 500
|
||||
:alt: valve_closure
|
||||
|
||||
Valve closure operating rule
|
||||
|
||||
Furthermore, valve opening can be simulated by defining a similar set of
|
||||
parameters related to the valve opening curve. The valve opening curves
|
||||
with :math:`m=1` and :math:`m=2` are illustrated in :numref:`valve_opening`.
|
||||
|
||||
.. code:: python
|
||||
|
||||
tc = 1 # valve opening period [s]
|
||||
ts = 0 # valve opening start time [s]
|
||||
se = 0.5 # end open ratio
|
||||
m = 1 # opening constant [dimensionless]
|
||||
valve_op = [tc,ts,se,m]
|
||||
tm.valve_opening('VALVE',valve_op)
|
||||
|
||||
|
||||
.. _valve_opening:
|
||||
.. figure:: figures/valve_opening.png
|
||||
:width: 500
|
||||
:alt: valve_opening
|
||||
|
||||
Valve opening operating rule
|
||||
|
||||
|
||||
Pump Operations
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
The TSNet also includes the capability to perform controlled pump operations
|
||||
by specifying how the pump rotation speed changes over time.
|
||||
Explicitly, during pump start-up, the rotational speed of the pump
|
||||
is increased based on the user defined operating rule.
|
||||
The pump is then modeled using the two compatibility equations,
|
||||
a continuity equation, the pump characteristic curve at given rotation speed,
|
||||
and the affinity laws [LAJW99]_, thus resulting in
|
||||
the rise of pump flowrate and the addition of mechanical energy.
|
||||
Conversely, during pump shut-off, as the rotational speed of the pump
|
||||
decreased according to the user defined operating rule,
|
||||
the pump flowrate and the addition of mechanical energy decline.
|
||||
However, pump shut-off due to power failure,
|
||||
when the reduction of pump rotation speed
|
||||
depends on the characteristics of the pump (such as the rotate moment of inertia),
|
||||
has not been included yet.
|
||||
|
||||
The following example shows how to add pump shut-off event to the network,
|
||||
where the parameters are defined in the same manner as in valve closure:
|
||||
|
||||
.. code:: python
|
||||
|
||||
tc = 1 # pump closure period
|
||||
ts = 0 # pump closure start time
|
||||
se = 0 # end open percentage
|
||||
m = 1 # closure constant
|
||||
pump_op = [tc,ts,se,m]
|
||||
tm.pump_shut_off('PUMP2', pump_op)
|
||||
|
||||
Correspondingly, the controlled pump opening can be simulated using:
|
||||
|
||||
.. code:: python
|
||||
|
||||
tc = 1 # pump opening period [s]
|
||||
ts = 0 # pump opening start time [s]
|
||||
se = 1 # end open percentage [s]
|
||||
m = 1 # opening constant [dimensionless]
|
||||
pump_op = [tc,ts,se,m]
|
||||
tm.pump_start_up('PUMP2',pump_op)
|
||||
|
||||
It should be noted that a check valve is assumed in each pump, indicating
|
||||
that the reverse flow will be prevented immediately.
|
||||
|
||||
|
||||
Leaks
|
||||
^^^^^^^
|
||||
|
||||
In TSNet, leaks and bursts are assigned to the network nodes.
|
||||
A leak is defined by specifying the leaking node name and the
|
||||
emitter coefficient (:math:`k_l`):
|
||||
|
||||
.. code:: python
|
||||
|
||||
emitter_coeff = 0.01 # [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_leak('JUNCTION-22', emitter_coeff)
|
||||
|
||||
|
||||
Existing leaks should be included in the initial condition solver
|
||||
(WNTR simulator);
|
||||
thus, it is necessary to define the leaks before calculating
|
||||
the initial conditions.
|
||||
For more information about the inclusion of leaks in steady state
|
||||
calculation, please refer to WNTR documentation [WNTRSi]_.
|
||||
During the transient simulation, the leaking node is modeled
|
||||
using the two compatibility equations, a continuity equation, and an orifice
|
||||
equation which quantifies the leak discharge (:math:`Q_l`):
|
||||
|
||||
.. math::
|
||||
Q_l = k_l \sqrt{{H_p}_l}
|
||||
|
||||
where :math:`{H_p}_l` is the pressure head at the leaking node.
|
||||
Moreover, if the pressure head is negative, the leak discharge
|
||||
will be set to zero, assuming a backflow preventer is installed
|
||||
on the leaking node.
|
||||
|
||||
|
||||
Bursts
|
||||
^^^^^^
|
||||
|
||||
The simulation of burst and leaks is very similar. They share similar
|
||||
set of governing equations. The only difference is that the burst opening
|
||||
is simulated only during the transient calculation and not included in the
|
||||
initial condition calculation.
|
||||
In other words, using burst, the user can model new and evolving condition,
|
||||
while the leak model simulates an existing leak in the system.
|
||||
In TSNet, the burst is assumed to be developed
|
||||
linearly, indicating that the burst area increases linearly from zero to
|
||||
a size specified by the user during the specified time period.
|
||||
Thus, a burst event can be modeled by defining the start and end time of the
|
||||
burst, and the final emitter coefficient when the burst
|
||||
is fully developed:
|
||||
|
||||
.. code:: python
|
||||
|
||||
ts = 1 # burst start time
|
||||
tc = 1 # time for burst to fully develop
|
||||
final_burst_coeff = 0.01 # final burst coeff [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_burst('JUNCTION-20', ts, tc, final_burst_coeff)
|
||||
|
||||
|
||||
Demand Pulse
|
||||
^^^^^^^^^^^^
|
||||
|
||||
TSNet simulates transients generated by instantaneous demand pulse by allowing the demand
|
||||
coefficient to change with time
|
||||
We assume that the amplitude of a demand pulse (:math:`pa(t)`) follows a symmetrical trapezoidal
|
||||
time-domain function, as illustrated in :numref:`demandpulse`; thus,
|
||||
the demand pulse can be modeled by defining the start time (:math:`ts`),
|
||||
the total duration (:math:`tc`), the transmission time (:math:`tp`),
|
||||
and the peak of the amplitude (:math:`dp`).
|
||||
Moreover, it should be noted that the assumed trapezoidal pulse shape is defined by method
|
||||
*demandpulse()* in :class:`~tsnet.network.model` module.
|
||||
It can be easily modified to take any shape with moderate coding efforts.
|
||||
Subsequently, the time-varying demand coefficient is defined as
|
||||
:math:`k(t) = k_0 + k_0\times pa(t)`.
|
||||
|
||||
|
||||
.. _demandpulse:
|
||||
.. figure:: figures/DemandMultiplier.png
|
||||
:width: 300
|
||||
:alt: demandpulse
|
||||
|
||||
Demand pulse curve
|
||||
|
||||
A demand pulse shape is defined and assigned to a specified junction:
|
||||
|
||||
.. code:: python
|
||||
|
||||
tc = 1 # total demand period [s]
|
||||
ts = 1 # demand pulse start time [s]
|
||||
tp = 0.2 # demand pulse transmission time [s]
|
||||
dp = 1 # demand peak amplitude [unitless]
|
||||
demand_pulse = [tc,ts,tp,dpa]
|
||||
tm.add_demand_pulse('N2',demand_pulse)
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
===============
|
||||
Getting Started
|
||||
===============
|
||||
|
||||
To use tsnet in a project, open a Python console and import the package::
|
||||
|
||||
import tsnet
|
||||
|
||||
Simple example
|
||||
---------------
|
||||
|
||||
A simple example, Tnet1_valve_closure.py is included in the examples folder.
|
||||
This example demonstrates how to:
|
||||
|
||||
* Import tsnet
|
||||
|
||||
* Generate a transient model
|
||||
|
||||
* Set wave speed
|
||||
|
||||
* Set time step and simulation period
|
||||
|
||||
* Perform initial condition calculation
|
||||
|
||||
* Define valve closure rule
|
||||
|
||||
* Run transient simulation and save results to .obj file
|
||||
|
||||
* Plot simulation results
|
||||
|
||||
.. literalinclude:: ../examples/Tnet1_valve_closure.py
|
||||
:lines: 2-42
|
||||
|
||||
|
||||
Three additional EPANET INP files and example files are also included
|
||||
in the TSNet examples repository in the examples folder.
|
||||
Example networks range from a simple 8-node network to a 126-node network.
|
|
@ -0,0 +1,163 @@
|
|||
======================
|
||||
Comparison with Hammer
|
||||
======================
|
||||
|
||||
During the development process, we have consistently compared TSNet results with
|
||||
Bentley Hammer [HAMMER]_ using different networks and many different transient events.
|
||||
In this section, we present the comparison between TSNet and Hammer results.
|
||||
The Hammer models used to generate the events is also included
|
||||
in the GitHub example directory (https://github.com/glorialulu/TSNet/tree/master/examples/networks)
|
||||
for the user's reference.
|
||||
|
||||
|
||||
Tnet 0
|
||||
^^^^^^^^^
|
||||
|
||||
We first show the comparison for a simple network,
|
||||
consisting of one reservoir, two pipes, and one valve, as illustrated in :numref:`tnet0_network`.
|
||||
The wave speed for both pipes is :math:`1200m/s`, and lengths and diameters are given in the figure.
|
||||
The transient event is generated by closing the end-valve at the beginning of the simulation
|
||||
during 2s; thus, the flow rate at the end valve decreases linearly from :math:`0.05m^3/s` at :math:`t=0s` to
|
||||
:math:`0m^3/s` at :math:`t=2s` and remains zero thereafter.
|
||||
:numref:`tnet0_hammer` (a) shows the flow rate through the valve, and
|
||||
:numref:`tnet0_hammer` (b) presents the pressure transients generated at node N-1 during 60s simulation period.
|
||||
The solid line represents TSNet results and the dashed-dotted line shows Hammer results.
|
||||
These results indicate a perfect match between TSNet and Hammer simulation results for this simple network.
|
||||
|
||||
|
||||
.. _tnet0_network:
|
||||
.. figure:: figures/tnet0_network.png
|
||||
:width: 500
|
||||
:alt: tnet0_network
|
||||
|
||||
Topology of a simple network.
|
||||
|
||||
.. _tnet0_hammer:
|
||||
.. figure:: figures/tnet0_calibration.png
|
||||
:width: 500
|
||||
:alt: tnet0_hammer
|
||||
|
||||
Comparison of TSNet and Hammer results: (a) flow at the valve; (b) pressure head at N-1.
|
||||
|
||||
|
||||
Tnet 3
|
||||
^^^^^^^
|
||||
|
||||
We then show the comparison between TSNet and Hammer results for
|
||||
a more complicated network, Tnet3,
|
||||
for three different transient events:
|
||||
|
||||
1. Shut down of PUMP-1,
|
||||
|
||||
2. Burst at JUNCTION-73, and
|
||||
|
||||
3. Closure of VALVE-1.
|
||||
|
||||
The results for the three transient-generating events are shown in
|
||||
:numref:`pump_hammer`, :numref:`burst_hammer`, and :numref:`valve_hammer`, respectively.
|
||||
|
||||
.. The Hammer model that was used to generate the events is also included
|
||||
in the GitHub example directory for the user's reference.
|
||||
|
||||
* We would like to note beforehand that we do not expect to
|
||||
obtain the exact same results from TSNet
|
||||
as Hammer since different numerical schemes were implemented,
|
||||
such as wave speed adjustment, pressure dependent demand, and boundary conditions.
|
||||
|
||||
.. In fact, due to the fact that Hammer is a closed-source software,
|
||||
we do not know precisely what numerical schemes are implemented in Hammer,
|
||||
which directly motivated us to develop TSNet in the first place.
|
||||
|
||||
|
||||
Pump shut-down
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Both TSNet and Hammer are utilized to simulate
|
||||
the shut down of PUMP-1.
|
||||
The time step is specified as 0.002s in both software.
|
||||
:numref:`pump_hammer` reports the pressure change with respect to the nominal pressure
|
||||
at multiple junctions, where the solid lines represent TSNet results
|
||||
and the dashed lines show Hammer results.
|
||||
TSNet and Hammer results are very similar to each other
|
||||
in terms of attenuation and phase shift throughout the 20s simulation period,
|
||||
despite slight discrepancies, which can be explained by
|
||||
the different wave speed adjustment schemes and boundary condition configurations adopted
|
||||
by the two software.
|
||||
|
||||
.. _pump_hammer:
|
||||
.. figure:: figures/tnet3_pump_hammer_002.png
|
||||
:width: 500
|
||||
:alt: pump_hammer
|
||||
|
||||
Comparison of pressure transients at multiple junctions generated by shutting down PUMP-1 in TNet3:
|
||||
TSNet (solid lines) Hammer (dashed lines) results.
|
||||
|
||||
.. Moreover, we tested the consistency of the solution when altering
|
||||
the time step of the simulation in TSNet and Hammer.
|
||||
We simulated the pump shut-down event with different time steps, i.e., :math:`dt = \{0.002s, 0.0055, 0.0115s\}`
|
||||
and plot the results in :numref:`convergence`.
|
||||
The green and purple lines represent the pressure at JUNCTION-30, and JUNCTION-90, respectively,
|
||||
and the different line types (solid, dashed, dotted) represent different time steps (see legend).
|
||||
:numref:`convergence` (a) represents the results from TSNet, and
|
||||
:numref:`convergence` (b) shows the results from Hammer.
|
||||
We observe that the pressure transients simulated by TSNet with different time steps, resemble closely
|
||||
with each other, and all of pressure traces disclose anticipated level of details about the reflection,
|
||||
transmission, propagation, and attenuation of the pressure waves.
|
||||
However, the Hammer predicts significantly different and uncharacteristic results with time steps larger than
|
||||
0.002s (i.e., :math:`dt =\{0.0055s, 0.0115s\}`), with small transient amplitude, delayed pressure peaks,
|
||||
and high attenuation.
|
||||
The pressure transients exhibit consistency only when the time step is smaller than 0.002s,
|
||||
which is the reason why we chose time step as 0.002s to compare the results from Hammer and TSNet.
|
||||
|
||||
|
||||
|
||||
|
||||
Burst event
|
||||
~~~~~~~~~~~
|
||||
|
||||
Aburst event was simulated at Junction-73 using both TSNet and Hammer.
|
||||
:numref:`burst_hammer` reports the pressure change with respect to the nominal pressure
|
||||
at multiple junctions, where the solid lines represent TSNet results,
|
||||
and the dashed lines show Hammer results.
|
||||
It can be observed that during the first transient cycle, i.e., around 0-8s,
|
||||
TSNet and Hammer results exhibit very good agreement with each other.
|
||||
Although the discrepancies increase a bit in terms of attenuation and phase shift during the latter period,
|
||||
the overall match is satisfactory considering that different time step and wave speed adjustment schemes
|
||||
are adopted in the two software.
|
||||
|
||||
|
||||
.. _burst_hammer:
|
||||
.. figure:: figures/tnet3_burst_hammer.png
|
||||
:width: 500
|
||||
:alt: burst_hammer
|
||||
|
||||
Comparison of pressure transients at multiple junctions generated by the burst at JUNCTION-73 in Tnet3:
|
||||
TSNet (solid lines) Hammer (dashed lines) results.
|
||||
|
||||
Valve closure
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Both TSNet and Hammer are utilized to simulate
|
||||
the closure of VALVE-1.
|
||||
The comparison of the results is presented in :numref:`valve_hammer`.
|
||||
Again, adequate resemblance can be observed between the TSNet (a) and
|
||||
Hammer results (b). Considering that pressure transients are of smaller amplitude and
|
||||
more chaotic, the results are presented in two separate plots with same scale for clarity.
|
||||
|
||||
.. _valve_hammer:
|
||||
.. figure:: figures/tnet3_valve_hammer.png
|
||||
:width: 500
|
||||
:alt: valve_hammer
|
||||
|
||||
Comparison of pressure transients at multiple junctions generated by closing VALVE-1 in Tnet3:
|
||||
(a): TSNet results, (b): Hammer results.
|
||||
|
||||
|
||||
.. In summary, we are able to show adequate consistency between TSNet and Hammer
|
||||
results in two networks undergoing different transient events.
|
||||
In the Reservoir-Pipe-Valve network, shown in :numref:`tnet0_network`, TSNet and Hammer predict exact same
|
||||
pressure and flow results when a transient event is generated by gradually closing the end-valve.
|
||||
In the larger network, TSNet and Hammer results are remarkably similar with each other despite minor discrepancies
|
||||
due to the differences in modeling and numerical schemes.
|
||||
Moreover, as presented in :numref:`convergence`,
|
||||
TSNet performs better with relatively large time step than Hammer.
|
|
@ -0,0 +1,2 @@
|
|||
tsnet
|
||||
moc
|
|
@ -0,0 +1,28 @@
|
|||
import tsnet
|
||||
# Open an example network and create a transient model
|
||||
inp_file = 'networks/Tnet00.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
dt = 0.1
|
||||
tf = 60 # simulation period [s]
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
# Set valve closure
|
||||
tc = 0 # valve closure period [s]
|
||||
ts = 2 # valve closure start time [s]
|
||||
se = 0 # end open percentage [s]
|
||||
m = 1 # closure constant [dimensionless]
|
||||
valve_op = [tc,ts,se,m]
|
||||
tm.valve_closure('3',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet0' # name of the object for saving simulation results
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm, results_obj)
|
|
@ -0,0 +1,85 @@
|
|||
import tsnet
|
||||
# Open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet0.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
dt = 0.01
|
||||
tf = 25 # simulation period [s]
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
# Set valve closure
|
||||
tc = 0 # valve closure period [s]
|
||||
ts = 0 # valve closure start time [s]
|
||||
se = 0 # end open percentage [s]
|
||||
m = 1 # closure constant [dimensionless]
|
||||
valve_op = [tc, ts, se, m]
|
||||
tm.valve_closure('3',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'PDD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet0' # name of the object for saving simulation results
|
||||
friction = 'steady'
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm, results_obj, friction)
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
tm.set_time(tf,dt)
|
||||
tm.valve_closure('3',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
friction = 'quasi-steady'
|
||||
tm2 = tsnet.simulation.MOCSimulator(tm, results_obj, friction)
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
|
||||
# Set valve closure
|
||||
tm.valve_closure('3',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
friction = 'unsteady'
|
||||
tm3 = tsnet.simulation.MOCSimulator(tm, results_obj, friction)
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node = '2'
|
||||
head1 = tm1.get_node(node).head
|
||||
t1 = tm1.simulation_timestamps
|
||||
head2 = tm2.get_node(node).head
|
||||
t2 = tm2.simulation_timestamps
|
||||
head3 = tm3.get_node(node).head
|
||||
t3 = tm3.simulation_timestamps
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(t1, head1, 'k',label='steady', linewidth=2.5)
|
||||
plt.plot(t2, head2, 'b', label='quasi-steady', linewidth=2.5)
|
||||
plt.plot(t3, head3, 'r',label='unsteady', linewidth=2.5)
|
||||
plt.xlim([t1[0],t1[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Pressure Head [m]")
|
||||
plt.legend(loc='best')
|
||||
plt.show()
|
||||
fig.savefig('tnet0_unsteady_friction.pdf', format='pdf',dpi=500)
|
|
@ -0,0 +1,120 @@
|
|||
import tsnet
|
||||
# Open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet0.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
dt = 0.1
|
||||
tf = 60 # simulation period [s]
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
# Set valve closure
|
||||
tc = 0 # valve closure period [s]
|
||||
ts = 2 # valve closure start time [s]
|
||||
se = 0 # end open percentage [s]
|
||||
m = 1 # closure constant [dimensionless]
|
||||
valve_op = [tc,ts,se,m]
|
||||
tm.valve_closure('3',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
tank_height = 100 # tank height [m]
|
||||
water_height = 50 # initial water level [m]
|
||||
tank_node = '2'
|
||||
tank_area = 100 # tank cross sectional area [m^2]
|
||||
tm.add_surge_tank(tank_node, [tank_area], 'open')
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet0' # name of the object for saving simulation results
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm, results_obj)
|
||||
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
# Set valve closure
|
||||
tm.valve_closure('3',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
tank_height = 100 # tank height [m]
|
||||
water_height =40 # initial water level [m]
|
||||
tank_node = '2'
|
||||
tank_area = 10 # tank cross sectional area [m^2]
|
||||
tm.add_surge_tank(tank_node, [tank_area,tank_height,water_height], 'closed')
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet0' # name of the object for saving simulation results
|
||||
tm2 = tsnet.simulation.MOCSimulator(tm, results_obj)
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
# Set valve closure
|
||||
tm.valve_closure('3',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet0' # name of the object for saving simulation results
|
||||
tm3 = tsnet.simulation.MOCSimulator(tm, results_obj)
|
||||
|
||||
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node = '3'
|
||||
norm_head_nl1 = tm1.get_node(node).head - tm1.get_node(node).head[0]
|
||||
norm_head_nl2 = tm2.get_node(node).head - tm2.get_node(node).head[0]
|
||||
norm_head_nl3 = tm3.get_node(node).head - tm3.get_node(node).head[0]
|
||||
|
||||
fig1 = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(tm.simulation_timestamps,norm_head_nl1,'r-',label='w surge tank $A_s=10m^2$', linewidth=2.5)
|
||||
plt.plot(tm.simulation_timestamps,norm_head_nl2,'g-',label='w surge tank $A_s=100m^2$', linewidth=2.5)
|
||||
plt.plot(tm.simulation_timestamps,norm_head_nl3,'k-',label='wo surge tank', linewidth=2.5)
|
||||
plt.xlim([tm.simulation_timestamps[0],tm.simulation_timestamps[-1]])
|
||||
plt.title('Node %s' %node)
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Pressure Head Change [m]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(False)
|
||||
plt.show()
|
||||
# fig1.savefig('./docs/figures/tnet1_node.png', format='png',dpi=100)
|
||||
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node1 = tm1.get_node(tank_node)
|
||||
t1 = tm1.simulation_timestamps
|
||||
node2 = tm2.get_node(tank_node)
|
||||
t2 = tm1.simulation_timestamps
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(t1, node1.tank_flow_timeseries, 'r',label='w surge tank $A_s=10m^2$', linewidth=2.5)
|
||||
plt.plot(t2, node2.tank_flow_timeseries, 'g',label='w surge tank $A_s=100m^2$', linewidth=2.5)
|
||||
plt.xlim([t1[0],t1[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Flow into tank [m^3s]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
plt.show()
|
|
@ -0,0 +1,84 @@
|
|||
import tsnet
|
||||
#%%
|
||||
# Open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet1.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
dt = 0.1 # time step [s], if not given, use the maximum allowed dt
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Add demand pulse
|
||||
tc = 1 # total demand period [s]
|
||||
ts = 1 # demand pulse start time [s]
|
||||
tp = 0.2 # demand pulse increase time [s]
|
||||
dp = 1 # demand pulse increase multiples [s]
|
||||
demand_pulse = [tc,ts,tp,dp]
|
||||
tm.add_demand_pulse('N2',demand_pulse)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
tm = tsnet.simulation.MOCSimulator(tm, results_obj)
|
||||
node = 'N2'
|
||||
node = tm.get_node(node)
|
||||
head1 = node.head
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
dt = 0.1 # time step [s], if not given, use the maximum allowed dt
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf,dt)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Add demand pulse
|
||||
tc = 1 # total demand period [s]
|
||||
ts = 1 # demand pulse start time [s]
|
||||
tp = 0.2 # demand pulse increase time [s]
|
||||
dp = 1 # demand pulse increase multiples [s]
|
||||
demand_pulse = [tc,ts,tp,dp]
|
||||
tm.add_demand_pulse('N2',demand_pulse)
|
||||
|
||||
tc = 1 # total demand period [s]
|
||||
ts = 2 # demand pulse start time [s]
|
||||
tp = 0.2 # demand pulse increase time [s]
|
||||
dp = 1 # demand pulse increase multiples [s]
|
||||
demand_pulse = [tc,ts,tp,dp]
|
||||
tm.add_demand_pulse('N4',demand_pulse)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
tm = tsnet.simulation.MOCSimulator(tm, results_obj)
|
||||
node = 'N2'
|
||||
node = tm.get_node(node)
|
||||
head2 = node.head
|
||||
|
||||
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(tm.simulation_timestamps,head1, 'k', label ='dpa =1', linewidth=2.5)
|
||||
plt.plot(tm.simulation_timestamps,head2, 'r', label ='dpa =2', linewidth=2.5)
|
||||
plt.xlim([tm.simulation_timestamps[0],tm.simulation_timestamps[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Pressure Head [m]")
|
||||
plt.legend(loc='best')
|
||||
plt.show()
|
||||
fig.savefig('demand_pulse_N2.pdf', format='pdf',dpi=500)
|
|
@ -0,0 +1,28 @@
|
|||
import tsnet
|
||||
# Open an example network and create a transient model
|
||||
tm = tsnet.network.TransientModel('/Users/luxing/Code/TSNet/examples/networks/Tnet1.inp')
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
|
||||
# Set time options
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Set valve closure
|
||||
ts = 5 # valve closure start time [s]
|
||||
tc = 1 # valve closure period [s]
|
||||
se = 0 # end open percentage [s]
|
||||
m = 2 # closure constant [dimensionless]
|
||||
tm.valve_closure('VALVE',[tc,ts,se,m])
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0=0
|
||||
tm = tsnet.simulation.Initializer(tm,t0)
|
||||
|
||||
# Transient simulation
|
||||
tm = tsnet.simulation.MOCSimulator(tm)
|
||||
|
||||
# report results
|
||||
node = ['N2','N3']
|
||||
tm.plot_node_head(node)
|
|
@ -0,0 +1,125 @@
|
|||
import tsnet
|
||||
import numpy as np
|
||||
# Open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet1.inp'
|
||||
# Set valve closure
|
||||
tc = 0.6 # valve closure period [s]
|
||||
ts = 0 # valve closure start time [s]
|
||||
se = 0 # end open percentage [s]
|
||||
m = 1 # closure constant [dimensionless]
|
||||
valve_op = [tc,ts,se,m]
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
dt = 0.1 # time step [s], if not given, use the maximum allowed dt
|
||||
tf = 60 # simulation period [s]
|
||||
n = 6
|
||||
tm.set_time_N(tf,n)
|
||||
|
||||
# Set valve closure
|
||||
tm.valve_closure('VALVE', valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
tank_height = 10 # tank height [m]
|
||||
water_height = 5 # initial water level [m]
|
||||
tank_node = 'N5'
|
||||
tank_area = 10 # tank cross sectional area [m^2]
|
||||
tm.add_surge_tank(tank_node, [tank_area,tank_height,water_height], 'closed')
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
friction = 'steady'
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm, results_obj,friction)
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
tm.set_time_N(tf,n)
|
||||
|
||||
tm.valve_closure('VALVE', valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
tank_height = 10 # tank height [m]
|
||||
water_height = 5 # initial water level [m]
|
||||
tank_node = 'N5'
|
||||
tank_area = 100 # tank cross sectional area [m^2]
|
||||
tm.add_surge_tank(tank_node, [tank_area,tank_height,water_height], 'closed')
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
friction = 'steady'
|
||||
tm2= tsnet.simulation.MOCSimulator(tm, results_obj,friction)
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
tm.set_time_N(tf,n)
|
||||
|
||||
tm.valve_closure('VALVE', valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
friction = 'steady'
|
||||
tm3= tsnet.simulation.MOCSimulator(tm, results_obj,friction)
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node = 'N2'
|
||||
head1 = tm1.get_node(node).head
|
||||
t1 = tm1.simulation_timestamps
|
||||
head2 = tm2.get_node(node).head
|
||||
t2 = tm2.simulation_timestamps
|
||||
head3 = tm3.get_node(node).head
|
||||
t3 = tm3.simulation_timestamps
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(t1, head1, 'r',label='w surge tank $A_s=10m^2$', linewidth=2.5)
|
||||
plt.plot(t2, head2, 'g', label='wo surge tank $A_s=100m^2$', linewidth=2.5)
|
||||
plt.plot(t3, head3, 'k', label='wo surge tank', linewidth=2.5)
|
||||
plt.xlim([t1[0],t1[-1]])
|
||||
plt.title(node)
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Pressure Head [m] ")
|
||||
plt.legend(loc='best')
|
||||
plt.show()
|
||||
|
||||
# %%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node1 = tm1.get_node(tank_node)
|
||||
t1 = tm1.simulation_timestamps
|
||||
node2 = tm2.get_node(tank_node)
|
||||
t2 = tm1.simulation_timestamps
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(t1, node1.tank_flow_timeseries, 'r',label='w surge tank $A_s=10m^2$', linewidth=2.5)
|
||||
#plt.plot(t2, node2.tank_flow_timeseries, 'g',label='w surge tank $A_s=100m^2$', linewidth=2.5)
|
||||
plt.xlim([t1[0],t1[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Flow into tank [m^3/s]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
plt.show()
|
||||
|
||||
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(t1, node1.water_level_timeseries, 'r',label='w surge tank $A_s=10m^2$', linewidth=2.5)
|
||||
#plt.plot(t2, node2.water_level_timeseries, 'g',label='w surge tank $A_s=100m^2$', linewidth=2.5)
|
||||
plt.xlim([t1[0],t1[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Water level in tank [m]")
|
||||
plt.legend(loc='best')
|
||||
plt.show()
|
|
@ -0,0 +1,111 @@
|
|||
import tsnet
|
||||
import numpy as np
|
||||
# Open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet1.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
dt = 0.1 # time step [s], if not given, use the maximum allowed dt
|
||||
tf = 60 # simulation period [s]
|
||||
n = 100
|
||||
tm.set_time_N(tf,n)
|
||||
|
||||
# Set valve closure
|
||||
tc = 0.6 # valve closure period [s]
|
||||
ts = 0 # valve closure start time [s]
|
||||
se = 0 # end open percentage [s]
|
||||
m = 1 # closure constant [dimensionless]
|
||||
valve_op = [tc,ts,se,m]
|
||||
percent_open = np.linspace(100,0,11)
|
||||
kl = [1/0.2, 2.50, 1.25, 0.625, 0.333, 0.17,
|
||||
0.100, 0.0556, 0.0313, 0.0167, 0.0]
|
||||
curve = [(percent_open[i], kl[i]) for i in range(len(kl))]
|
||||
tm.valve_closure('VALVE', valve_op,curve)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
friction = 'steady'
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm, results_obj,friction)
|
||||
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
tm.set_time_N(tf,n)
|
||||
|
||||
# Set valve closure
|
||||
tc = 0.6 # valve closure period [s]
|
||||
ts = 0 # valve closure start time [s]
|
||||
se = 0 # end open percentage [s]
|
||||
m = 1 # closure constant [dimensionless]
|
||||
valve_op = [tc,ts,se,m]
|
||||
tm.valve_closure('VALVE',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
friction = 'quasi-steady'
|
||||
tm2 = tsnet.simulation.MOCSimulator(tm, results_obj,friction)
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.) # m/s
|
||||
# Set time options
|
||||
tm.set_time_N(tf,n)
|
||||
|
||||
|
||||
# Set valve closure
|
||||
tc = 0.6 # valve closure period [s]
|
||||
ts = 0 # valve closure start time [s]
|
||||
se = 0 # end open percentage [s]
|
||||
m = 1 # closure constant [dimensionless]
|
||||
valve_op = [tc,ts,se,m]
|
||||
tm.valve_closure('VALVE',valve_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0 [s]
|
||||
engine = 'DD' # demand driven simulator
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet1' # name of the object for saving simulation results
|
||||
friction = 'unsteady'
|
||||
tm3 = tsnet.simulation.MOCSimulator(tm, results_obj,friction)
|
||||
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node = 'N2'
|
||||
head1 = tm1.get_node(node).head
|
||||
t1 = tm1.simulation_timestamps
|
||||
head2 = tm2.get_node(node).head
|
||||
t2 = tm2.simulation_timestamps
|
||||
head3 = tm3.get_node(node).head
|
||||
t3 = tm3.simulation_timestamps
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(t1, head1, 'k',label='steady', linewidth=2.5)
|
||||
plt.plot(t2, head2, 'b', label='quasi-steady', linewidth=2.5)
|
||||
plt.plot(t3, head3, 'r',label='unsteady', linewidth=2.5)
|
||||
plt.xlim([t1[0],t1[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Pressure Head [m]")
|
||||
plt.legend(loc='best')
|
||||
plt.show()
|
||||
fig.savefig('tnet1_unsteady_friction.pdf', format='pdf',dpi=500)
|
||||
# %%
|
|
@ -0,0 +1,59 @@
|
|||
import tsnet
|
||||
# open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet2.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Set pump shut off
|
||||
tc = 1 # pump closure period
|
||||
ts = 1 # pump closure start time
|
||||
se = 0 # end open percentage
|
||||
m = 1 # closure constant
|
||||
pump_op = [tc,ts,se,m]
|
||||
tm.pump_shut_off('PUMP2', pump_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or PPD
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet2' # name of the object for saving simulation results.head
|
||||
tm = tsnet.simulation.MOCSimulator(tm,results_obj)
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node = 'JUNCTION-105'
|
||||
node = tm.get_node(node)
|
||||
fig = plt.figure(figsize=(10,4), dpi=80, facecolor='w', edgecolor='w')
|
||||
plt.plot(tm.simulation_timestamps, node._head, 'k', lw=3)
|
||||
plt.xlim([tm.simulation_timestamps[0],tm.simulation_timestamps[-1]])
|
||||
# plt.title('Pressure Head at Node %s '%node)
|
||||
plt.xlabel("Time [s]", fontsize=14)
|
||||
plt.ylabel("Pressure Head [m]", fontsize=14)
|
||||
|
||||
|
||||
# plt.legend(loc='best')
|
||||
# plt.grid(True)
|
||||
plt.show()
|
||||
# fig.savefig('./docs/figures/tnet2_node.png', format='png',dpi=100)
|
||||
|
||||
pipe = 'PIPE-109'
|
||||
pipe = tm.get_link(pipe)
|
||||
fig = plt.figure(figsize=(10,4), dpi=80, facecolor='w', edgecolor='w')
|
||||
plt.plot(tm.simulation_timestamps,pipe.start_node_velocity,label='Start Node')
|
||||
plt.plot(tm.simulation_timestamps,pipe.end_node_velocity,label='End Node')
|
||||
plt.xlim([tm.simulation_timestamps[0],tm.simulation_timestamps[-1]])
|
||||
plt.title('Velocity of Pipe %s '%pipe)
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Velocity [m/s]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
plt.show()
|
||||
# fig.savefig('./docs/figures/tnet2_pipe.png', format='png',dpi=100)
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
import tsnet
|
||||
# open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet2.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Set pump shut off
|
||||
tc = 1 # pump closure period
|
||||
ts = 0 # pump closure start time
|
||||
se = 0 # end open percentage
|
||||
m = 1 # closure constant
|
||||
pump_op = [tc,ts,se,m]
|
||||
tm.pump_shut_off('PUMP2', pump_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or PPD
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet2' # name of the object for saving simulation results.head
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm,results_obj)
|
||||
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Set pump shut off
|
||||
tc = 1 # pump closure period
|
||||
ts = 0 # pump closure start time
|
||||
se = 0 # end open percentage
|
||||
m = 1 # closure constant
|
||||
pump_op = [tc,ts,se,m]
|
||||
tm.pump_shut_off('PUMP2', pump_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or PPD
|
||||
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
tank_node = 'JUNCTION-105'
|
||||
tank_height = 10 # tank height [m]
|
||||
water_height = 5 # initial water level [m]
|
||||
tank_area = 10 # tank cross sectional area [m^2]
|
||||
tm.add_surge_tank(tank_node, [tank_area,tank_height,water_height], 'closed')
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet2' # name of the object for saving simulation results.head
|
||||
|
||||
tm2 = tsnet.simulation.MOCSimulator(tm,results_obj)
|
||||
|
||||
#%%
|
||||
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node = '169'
|
||||
head1 = tm1.get_node(node).head
|
||||
t1 = tm1.simulation_timestamps
|
||||
head2 = tm2.get_node(node).head
|
||||
t2 = tm2.simulation_timestamps
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(t1, head1, 'k',label='wo surge tank', linewidth=2.5)
|
||||
plt.plot(t2, head2, 'r', label='w surge tank', linewidth=2.5)
|
||||
plt.xlim([t1[0],t1[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Pressure Head [m]")
|
||||
plt.legend(loc='best')
|
||||
plt.show()
|
||||
fig.savefig('tnet2_surge_tank.pdf', format='pdf',dpi=500)
|
||||
# fig.savefig('./docs/figures/tnet2_node.png', format='png',dpi=100)
|
||||
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
import tsnet
|
||||
# open an example network and create a transient model
|
||||
inp_file = 'networks/Tnet2.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.)
|
||||
# Set time step
|
||||
tf = 10 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Set pump shut off
|
||||
tc = 1 # pump closure period
|
||||
ts = 0 # pump closure start time
|
||||
se = 0 # end open percentage
|
||||
m = 1 # closure constant
|
||||
pump_op = [tc,ts,se,m]
|
||||
tm.pump_shut_off('PUMP2', pump_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or PPD
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet2' # name of the object for saving simulation results.head
|
||||
friction ='steady'
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm,results_obj,friction)
|
||||
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.)
|
||||
# Set time step
|
||||
tf = 10 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Set pump shut off
|
||||
tc = 1 # pump closure period
|
||||
ts = 0 # pump closure start time
|
||||
se = 0 # end open percentage
|
||||
m = 1 # closure constant
|
||||
pump_op = [tc,ts,se,m]
|
||||
tm.pump_shut_off('PUMP2', pump_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or PPD
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet2' # name of the object for saving simulation results.head
|
||||
friction ='quasi-steady'
|
||||
tm2 = tsnet.simulation.MOCSimulator(tm,results_obj,friction)
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
tm.set_wavespeed(1200.)
|
||||
# Set time step
|
||||
tf = 10 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Set pump shut off
|
||||
tc = 1 # pump closure period
|
||||
ts = 0 # pump closure start time
|
||||
se = 0 # end open percentage
|
||||
m = 1 # closure constant
|
||||
pump_op = [tc,ts,se,m]
|
||||
tm.pump_shut_off('PUMP2', pump_op)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or PPD
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
results_obj = 'Tnet2' # name of the object for saving simulation results.head
|
||||
friction ='unsteady'
|
||||
tm3 = tsnet.simulation.MOCSimulator(tm,results_obj,friction)
|
||||
#%%
|
||||
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node = 'JUNCTION-105'
|
||||
head1 = tm1.get_node(node).head
|
||||
t1 = tm1.simulation_timestamps
|
||||
head2 = tm2.get_node(node).head
|
||||
t2 = tm2.simulation_timestamps
|
||||
head3 = tm3.get_node(node).head
|
||||
t3 = tm3.simulation_timestamps
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(t1, head1, 'k',label='steady', linewidth=2.5)
|
||||
plt.plot(t2, head2, 'b', label='quasi-steady', linewidth=2.5)
|
||||
plt.plot(t3, head3, 'r',label='unsteady', linewidth=2.5)
|
||||
plt.xlim([t1[0],t1[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Pressure Head [m]")
|
||||
plt.legend(loc='best')
|
||||
plt.show()
|
||||
fig.savefig('tnet2_unsteady_friction.pdf', format='pdf',dpi=500)
|
||||
# fig.savefig('./docs/figures/tnet2_node.png', format='png',dpi=100)
|
||||
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
import tsnet
|
||||
# open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet3.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
import numpy as np
|
||||
wavespeed = np.random.normal(1200., 100., size=tm.num_pipes)
|
||||
tm.set_wavespeed(wavespeed)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Add leak
|
||||
# emitter_coeff = 0.01 # [ m^3/s/(m H20)^(1/2)]
|
||||
# tm.add_leak('JUNCTION-22', emitter_coeff)
|
||||
|
||||
# Add burst
|
||||
ts = 1 # burst start time
|
||||
tc = 1 # time for burst to fully develop
|
||||
final_burst_coeff = 0.01 # final burst coeff [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_burst('JUNCTION-20', ts, tc, final_burst_coeff)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'PDD' # or Epanet
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
result_obj = 'Tnet3' # name of the object for saving simulation results
|
||||
tm = tsnet.simulation.MOCSimulator(tm,result_obj)
|
||||
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node = 'JUNCTION-22'
|
||||
node = tm.get_node(node)
|
||||
fig = plt.figure(figsize=(10,4), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(tm.simulation_timestamps,node.emitter_discharge)
|
||||
plt.xlim([tm.simulation_timestamps[0],tm.simulation_timestamps[-1]])
|
||||
plt.title('Leak discharge at Node %s '%node)
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Leak discharge [m^3/s]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
plt.show()
|
||||
# fig.savefig('./docs/figures/tnet3_leak.png', format='png',dpi=100)
|
||||
|
||||
node = 'JUNCTION-20'
|
||||
node = tm.get_node(node)
|
||||
fig = plt.figure(figsize=(10,4), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(tm.simulation_timestamps,node.emitter_discharge)
|
||||
plt.xlim([tm.simulation_timestamps[0],tm.simulation_timestamps[-1]])
|
||||
plt.title('Burst discharge at Node %s '%node)
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Burst discharge [m^3/s]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
plt.show()
|
||||
# fig.savefig('./docs/figures/tnet3_burst.png', format='png',dpi=100)
|
||||
|
||||
pipe = 'LINK-40'
|
||||
pipe = tm.get_link(pipe)
|
||||
fig = plt.figure(figsize=(10,4), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(tm.simulation_timestamps,pipe.start_node_velocity,label='Start Node')
|
||||
plt.plot(tm.simulation_timestamps,pipe.end_node_velocity,label='End Node')
|
||||
plt.xlim([tm.simulation_timestamps[0],tm.simulation_timestamps[-1]])
|
||||
plt.title('Velocity of Pipe %s '%pipe)
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Velocity [m/s]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
plt.show()
|
||||
# fig.savefig('./docs/figures/tnet3_pipe.png', format='png',dpi=100)
|
||||
|
||||
node1 = tm.get_node('JUNCTION-8')
|
||||
node2 = tm.get_node('JUNCTION-16')
|
||||
node3 = tm.get_node('JUNCTION-45')
|
||||
node4 = tm.get_node('JUNCTION-90')
|
||||
fig = plt.figure(figsize=(10,4), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(tm.simulation_timestamps, node1._head, label='JUNCTION-8')
|
||||
plt.plot(tm.simulation_timestamps, node2._head, label='JUNCTION-16')
|
||||
plt.plot(tm.simulation_timestamps, node3._head, label='JUNCTION-45')
|
||||
plt.plot(tm.simulation_timestamps, node4._head, label='JUNCTION-90')
|
||||
plt.xlim([tm.simulation_timestamps[0],tm.simulation_timestamps[-1]])
|
||||
plt.title('Head on Junctions')
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Head [m]")
|
||||
plt.legend(loc='best')
|
||||
plt.grid(True)
|
||||
plt.show()
|
||||
# fig.savefig('./docs/figures/tnet3_multi.png', format='png',dpi=100)
|
|
@ -0,0 +1,140 @@
|
|||
import tsnet
|
||||
# open an example network and create a transient model
|
||||
inp_file = 'networks/Tnet3.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
import numpy as np
|
||||
wavespeed = 1200
|
||||
tm.set_wavespeed(wavespeed)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Add burst
|
||||
ts = 1 # burst start time
|
||||
tc = 1 # time for burst to fully develop
|
||||
final_burst_coeff = 0.01 # final burst coeff [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_burst('JUNCTION-73', ts, tc, final_burst_coeff)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or Epanet
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
result_obj = 'Tnet3' # name of the object for saving simulation results
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm,result_obj)
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
import numpy as np
|
||||
tm.set_wavespeed(wavespeed)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Add burst
|
||||
ts = 1 # burst start time
|
||||
tc = 1 # time for burst to fully develop
|
||||
final_burst_coeff = 0.01 # final burst coeff [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_burst('JUNCTION-73', ts, tc, final_burst_coeff)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or Epanet
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# add air chamber
|
||||
tank_node = 'JUNCTION-89'
|
||||
tank_area = 10 # tank cross sectional area [m^2]
|
||||
tank_height = 10 # tank height [m]
|
||||
water_height = 5 # initial water level [m]
|
||||
tm.add_surge_tank(tank_node, [tank_area,tank_height,water_height], 'closed')
|
||||
|
||||
# Transient simulation
|
||||
result_obj = 'Tnet3' # name of the object for saving simulation results
|
||||
tm2 = tsnet.simulation.MOCSimulator(tm,result_obj)
|
||||
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
import numpy as np
|
||||
tm.set_wavespeed(wavespeed)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Add burst
|
||||
ts = 1 # burst start time
|
||||
tc = 1 # time for burst to fully develop
|
||||
final_burst_coeff = 0.01 # final burst coeff [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_burst('JUNCTION-73', ts, tc, final_burst_coeff)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or Epanet
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# add air chamber
|
||||
tank_node = 'JUNCTION-89'
|
||||
tank_area = 10 # tank cross sectional area [m^2]
|
||||
|
||||
tm.add_surge_tank(tank_node, [tank_area], 'open')
|
||||
|
||||
# Transient simulation
|
||||
result_obj = 'Tnet3' # name of the object for saving simulation results
|
||||
tm3 = tsnet.simulation.MOCSimulator(tm,result_obj)
|
||||
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node1 = 'JUNCTION-16'
|
||||
node2 = 'JUNCTION-20'
|
||||
node3 = 'JUNCTION-30'
|
||||
node4 = 'JUNCTION-45'
|
||||
node5 = 'JUNCTION-90'
|
||||
fig, axs = plt.subplots(1,3,figsize=(15,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node1).head-tm1.get_node(node1).head[0],'C0-',label='JUNCTION-16', linewidth=2.5)
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node2).head-tm1.get_node(node2).head[0],'C1-',label='JUNCTION-20', linewidth=2.5)
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node3).head-tm1.get_node(node3).head[0],'C2-', label='JUNCTION-30',linewidth=2.5)
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node4).head-tm1.get_node(node4).head[0],'C3-', label='JUNCTION-45',linewidth=2.5)
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node5).head-tm1.get_node(node5).head[0],'C4-',label='JUNCTION-90', linewidth=2.5)
|
||||
axs[0].set_xlim([tm1.simulation_timestamps[0],tm1.simulation_timestamps[-1]])
|
||||
axs[0].set_ylim([-45,15])
|
||||
axs[0].set_xlabel("Time [s]")
|
||||
axs[0].set_ylabel("Head change [m]")
|
||||
axs[0].legend(loc='best')
|
||||
axs[0].set_title('(a)')
|
||||
#axs[0].show()
|
||||
#fig.savefig('tnet3_wo_surge_tank.pdf', format='pdf',dpi=100)
|
||||
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node1).head-tm2.get_node(node1).head[0],'C0',label='JUNCTION-16', linewidth=2.5)
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node2).head-tm2.get_node(node2).head[0],'C1',label='JUNCTION-20', linewidth=2.5)
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node3).head-tm2.get_node(node3).head[0],'C2',label='JUNCTION-30', linewidth=2.5)
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node4).head-tm2.get_node(node4).head[0],'C3',label='JUNCTION-45', linewidth=2.5)
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node5).head-tm2.get_node(node5).head[0],'C4',label='JUNCTION-90', linewidth=2.5)
|
||||
axs[1].set_xlim([tm1.simulation_timestamps[0],tm1.simulation_timestamps[-1]])
|
||||
axs[1].set_ylim([-45,15])
|
||||
axs[1].set_xlabel("Time [s]")
|
||||
#axs[1].set_ylabel("Head [m]")
|
||||
axs[1].legend(loc='lower right')
|
||||
axs[1].set_title('(b)')
|
||||
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node1).head-tm3.get_node(node1).head[0],'C0',label='JUNCTION-16', linewidth=2.5)
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node2).head-tm3.get_node(node2).head[0],'C1',label='JUNCTION-20', linewidth=2.5)
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node3).head-tm3.get_node(node3).head[0],'C2',label='JUNCTION-30', linewidth=2.5)
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node4).head-tm3.get_node(node4).head[0],'C3',label='JUNCTION-45', linewidth=2.5)
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node5).head-tm3.get_node(node5).head[0],'C4',label='JUNCTION-90', linewidth=2.5)
|
||||
axs[2].set_xlim([tm1.simulation_timestamps[0],tm1.simulation_timestamps[-1]])
|
||||
axs[2].set_xlabel("Time [s]")
|
||||
axs[2].set_ylim([-45,15])
|
||||
#axs[1].set_ylabel("Head [m]")
|
||||
axs[2].legend(loc='lower right')
|
||||
axs[2].set_title('(c)')
|
||||
|
||||
plt.show()
|
||||
plt.tight_layout()
|
||||
fig.savefig('tnet3_compare_surge_tank.pdf', format='pdf', bbox_inches = 'tight',dpi=100)
|
|
@ -0,0 +1,161 @@
|
|||
import tsnet
|
||||
# open an example network and create a transient model
|
||||
inp_file = '/Users/luxing/Code/TSNet/examples/networks/Tnet3.inp'
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
import numpy as np
|
||||
wavespeed = np.random.normal(1200., 100., size=tm.num_pipes)
|
||||
tm.set_wavespeed(wavespeed)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Add burst
|
||||
ts = 1 # burst start time
|
||||
tc = 1 # time for burst to fully develop
|
||||
final_burst_coeff = 0.01 # final burst coeff [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_burst('JUNCTION-73', ts, tc, final_burst_coeff)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or Epanet
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
result_obj = 'Tnet3' # name of the object for saving simulation results
|
||||
tm1 = tsnet.simulation.MOCSimulator(tm,result_obj)
|
||||
#%%
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
|
||||
# Set wavespeed
|
||||
import numpy as np
|
||||
tm.set_wavespeed(wavespeed)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Add burst
|
||||
ts = 1 # burst start time
|
||||
tc = 1 # time for burst to fully develop
|
||||
final_burst_coeff = 0.01 # final burst coeff [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_burst('JUNCTION-73', ts, tc, final_burst_coeff)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or Epanet
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
result_obj = 'Tnet3' # name of the object for saving simulation results
|
||||
friction ='quasi-steady'
|
||||
tm2 = tsnet.simulation.MOCSimulator(tm,result_obj,friction)
|
||||
|
||||
#%% tm = tsnet.network.TransientModel(inp_file)
|
||||
# Set wavespeed
|
||||
tm = tsnet.network.TransientModel(inp_file)
|
||||
tm.set_wavespeed(wavespeed)
|
||||
# Set time step
|
||||
tf = 20 # simulation period [s]
|
||||
tm.set_time(tf)
|
||||
|
||||
# Add burst
|
||||
ts = 1 # burst start time
|
||||
tc = 1 # time for burst to fully develop
|
||||
final_burst_coeff = 0.01 # final burst coeff [ m^3/s/(m H20)^(1/2)]
|
||||
tm.add_burst('JUNCTION-73', ts, tc, final_burst_coeff)
|
||||
|
||||
# Initialize steady state simulation
|
||||
t0 = 0. # initialize the simulation at 0s
|
||||
engine = 'DD' # or Epanet
|
||||
tm = tsnet.simulation.Initializer(tm, t0, engine)
|
||||
|
||||
# Transient simulation
|
||||
result_obj = 'Tnet3' # name of the object for saving simulation results
|
||||
friction ='unsteady'
|
||||
tm3 = tsnet.simulation.MOCSimulator(tm,result_obj,friction)
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node1 = 'JUNCTION-16'
|
||||
node2 = 'JUNCTION-20'
|
||||
node3 = 'JUNCTION-30'
|
||||
node4 = 'JUNCTION-45'
|
||||
node5 = 'JUNCTION-90'
|
||||
fig = plt.figure(figsize=(8,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
plt.plot(tm1.simulation_timestamps,tm1.get_node(node1).head-tm1.get_node(node1).head[0],'C0--', linewidth=2.5)
|
||||
plt.plot(tm1.simulation_timestamps,tm1.get_node(node2).head-tm1.get_node(node2).head[0],'C1--', linewidth=2.5)
|
||||
plt.plot(tm1.simulation_timestamps,tm1.get_node(node3).head-tm1.get_node(node3).head[0],'C2--', linewidth=2.5)
|
||||
plt.plot(tm1.simulation_timestamps,tm1.get_node(node4).head-tm1.get_node(node4).head[0],'C3--', linewidth=2.5)
|
||||
plt.plot(tm1.simulation_timestamps,tm1.get_node(node5).head-tm1.get_node(node5).head[0],'C4--', linewidth=2.5)
|
||||
|
||||
#plt.plot(tm2.simulation_timestamps,tm2.get_node(node1).head-tm2.get_node(node1).head[0],'C0', ls='dotted', linewidth=2.5)
|
||||
#plt.plot(tm2.simulation_timestamps,tm2.get_node(node2).head-tm2.get_node(node2).head[0],'C1', ls='dotted', linewidth=2.5)
|
||||
#plt.plot(tm2.simulation_timestamps,tm2.get_node(node3).head-tm2.get_node(node3).head[0],'C2', ls='dotted', linewidth=2.5)
|
||||
#plt.plot(tm2.simulation_timestamps,tm2.get_node(node4).head-tm2.get_node(node4).head[0],'C3', ls='dotted', linewidth=2.5)
|
||||
#plt.plot(tm2.simulation_timestamps,tm2.get_node(node5).head-tm2.get_node(node5).head[0],'C4', ls='dotted', linewidth=2.5)
|
||||
|
||||
plt.plot(tm3.simulation_timestamps,tm3.get_node(node1).head-tm3.get_node(node1).head[0],'C0', label='JUNCTION-16', linewidth=2.5)
|
||||
plt.plot(tm3.simulation_timestamps,tm3.get_node(node2).head-tm3.get_node(node2).head[0],'C1', label='JUNCTION-20', linewidth=2.5)
|
||||
plt.plot(tm3.simulation_timestamps,tm3.get_node(node3).head-tm3.get_node(node3).head[0],'C2', label='JUNCTION-30', linewidth=2.5)
|
||||
plt.plot(tm3.simulation_timestamps,tm3.get_node(node4).head-tm3.get_node(node4).head[0],'C3', label='JUNCTION-45', linewidth=2.5)
|
||||
plt.plot(tm3.simulation_timestamps,tm3.get_node(node5).head-tm3.get_node(node5).head[0],'C4', label='JUNCTION-90', linewidth=2.5)
|
||||
|
||||
plt.xlim([tm1.simulation_timestamps[0],tm1.simulation_timestamps[-1]])
|
||||
plt.xlabel("Time [s]")
|
||||
plt.ylabel("Head [m]")
|
||||
plt.legend(loc='lower right')
|
||||
plt.show()
|
||||
fig.savefig('tnet3_unsteady_friction.pdf', format='pdf',dpi=100)
|
||||
|
||||
|
||||
#%%
|
||||
# report results
|
||||
import matplotlib.pyplot as plt
|
||||
node1 = 'JUNCTION-16'
|
||||
node2 = 'JUNCTION-20'
|
||||
node3 = 'JUNCTION-30'
|
||||
node4 = 'JUNCTION-45'
|
||||
node5 = 'JUNCTION-90'
|
||||
fig, axs = plt.subplots(1,3,figsize=(15,5), dpi=80, facecolor='w', edgecolor='k')
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node1).head-tm1.get_node(node1).head[0],'C0-',label='JUNCTION-16', linewidth=2.5)
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node2).head-tm1.get_node(node2).head[0],'C1-',label='JUNCTION-20', linewidth=2.5)
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node3).head-tm1.get_node(node3).head[0],'C2-', label='JUNCTION-30',linewidth=2.5)
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node4).head-tm1.get_node(node4).head[0],'C3-', label='JUNCTION-45',linewidth=2.5)
|
||||
axs[0].plot(tm1.simulation_timestamps,tm1.get_node(node5).head-tm1.get_node(node5).head[0],'C4-',label='JUNCTION-90', linewidth=2.5)
|
||||
axs[0].set_xlim([tm1.simulation_timestamps[0],tm1.simulation_timestamps[-1]])
|
||||
axs[0].set_ylim([-45,20])
|
||||
axs[0].set_xlabel("Time [s]")
|
||||
axs[0].set_ylabel("Head change [m]")
|
||||
axs[0].legend(loc='lower right')
|
||||
axs[0].set_title('(a)')
|
||||
#axs[0].show()
|
||||
#fig.savefig('tnet3_wo_surge_tank.pdf', format='pdf',dpi=100)
|
||||
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node1).head-tm2.get_node(node1).head[0],'C0-',label='JUNCTION-16', linewidth=2.5)
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node2).head-tm2.get_node(node2).head[0],'C1-',label='JUNCTION-20', linewidth=2.5)
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node3).head-tm2.get_node(node3).head[0],'C2-',label='JUNCTION-30', linewidth=2.5)
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node4).head-tm2.get_node(node4).head[0],'C3-',label='JUNCTION-45', linewidth=2.5)
|
||||
axs[1].plot(tm2.simulation_timestamps,tm2.get_node(node5).head-tm2.get_node(node5).head[0],'C4-',label='JUNCTION-90', linewidth=2.5)
|
||||
axs[1].set_xlim([tm1.simulation_timestamps[0],tm1.simulation_timestamps[-1]])
|
||||
axs[1].set_ylim([-45,20])
|
||||
axs[1].set_xlabel("Time [s]")
|
||||
#axs[1].set_ylabel("Head [m]")
|
||||
axs[1].legend(loc='lower right')
|
||||
axs[1].set_title('(b)')
|
||||
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node1).head-tm3.get_node(node1).head[0],'C0',label='JUNCTION-16', linewidth=2.5)
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node2).head-tm3.get_node(node2).head[0],'C1',label='JUNCTION-20', linewidth=2.5)
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node3).head-tm3.get_node(node3).head[0],'C2',label='JUNCTION-30', linewidth=2.5)
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node4).head-tm3.get_node(node4).head[0],'C3',label='JUNCTION-45', linewidth=2.5)
|
||||
axs[2].plot(tm3.simulation_timestamps,tm3.get_node(node5).head-tm3.get_node(node5).head[0],'C4',label='JUNCTION-90', linewidth=2.5)
|
||||
axs[2].set_xlim([tm1.simulation_timestamps[0],tm1.simulation_timestamps[-1]])
|
||||
axs[2].set_xlabel("Time [s]")
|
||||
axs[2].set_ylim([-45,20])
|
||||
#axs[1].set_ylabel("Head [m]")
|
||||
axs[2].legend(loc='lower right')
|
||||
axs[2].set_title('(c)')
|
||||
|
||||
plt.show()
|
||||
plt.tight_layout()
|
||||
fig.savefig('tnet3_compare_unsteady_friction.pdf', format='pdf', bbox_inches = 'tight',dpi=100)
|
|
@ -0,0 +1,141 @@
|
|||
[TITLE]
|
||||
|
||||
|
||||
[JUNCTIONS]
|
||||
;ID Elev Demand Pattern
|
||||
2 0 0 ;
|
||||
3 0 0 ;
|
||||
4 0 50 ;
|
||||
|
||||
[RESERVOIRS]
|
||||
;ID Head Pattern
|
||||
1 750 ;
|
||||
|
||||
[TANKS]
|
||||
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
|
||||
|
||||
[PIPES]
|
||||
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
|
||||
1 1 2 1200 600 0.02 0 Open ;
|
||||
2 2 3 2400 1200 0.02 0 Open ;
|
||||
|
||||
[PUMPS]
|
||||
;ID Node1 Node2 Parameters
|
||||
|
||||
[VALVES]
|
||||
;ID Node1 Node2 Diameter Type Setting MinorLoss
|
||||
3 3 4 158 PRV 100000 0 ;
|
||||
|
||||
[TAGS]
|
||||
|
||||
[DEMANDS]
|
||||
;Junction Demand Pattern Category
|
||||
|
||||
[STATUS]
|
||||
;ID Status/Setting
|
||||
3 Open
|
||||
|
||||
[PATTERNS]
|
||||
;ID Multipliers
|
||||
|
||||
[CURVES]
|
||||
;ID X-Value Y-Value
|
||||
|
||||
[CONTROLS]
|
||||
|
||||
|
||||
|
||||
[RULES]
|
||||
|
||||
|
||||
|
||||
[ENERGY]
|
||||
Global Efficiency 75
|
||||
Global Price 0
|
||||
Demand Charge 0
|
||||
|
||||
[EMITTERS]
|
||||
;Junction Coefficient
|
||||
|
||||
[QUALITY]
|
||||
;Node InitQual
|
||||
|
||||
[SOURCES]
|
||||
;Node Type Quality Pattern
|
||||
|
||||
[REACTIONS]
|
||||
;Type Pipe/Tank Coefficient
|
||||
|
||||
|
||||
[REACTIONS]
|
||||
Order Bulk 1
|
||||
Order Tank 1
|
||||
Order Wall 1
|
||||
Global Bulk 0
|
||||
Global Wall 0
|
||||
Limiting Potential 0
|
||||
Roughness Correlation 0
|
||||
|
||||
[MIXING]
|
||||
;Tank Model
|
||||
|
||||
[TIMES]
|
||||
Duration 0:00
|
||||
Hydraulic Timestep 1:00
|
||||
Quality Timestep 0:05
|
||||
Pattern Timestep 1:00
|
||||
Pattern Start 0:00
|
||||
Report Timestep 1:00
|
||||
Report Start 0:00
|
||||
Start ClockTime 12 am
|
||||
Statistic NONE
|
||||
|
||||
[REPORT]
|
||||
Status No
|
||||
Summary No
|
||||
Page 0
|
||||
|
||||
[OPTIONS]
|
||||
Units LPS
|
||||
Headloss D-W
|
||||
Specific Gravity 1
|
||||
Viscosity 1
|
||||
Trials 40
|
||||
Accuracy 0.001
|
||||
CHECKFREQ 2
|
||||
MAXCHECK 10
|
||||
DAMPLIMIT 0
|
||||
Unbalanced Continue 10
|
||||
Pattern 1
|
||||
Demand Multiplier 1.0
|
||||
Emitter Exponent 0.5
|
||||
Quality None mg/L
|
||||
Diffusivity 1
|
||||
Tolerance 0.01
|
||||
|
||||
[COORDINATES]
|
||||
;Node X-Coord Y-Coord
|
||||
2 -1167.70 8919.75
|
||||
3 293.21 8919.75
|
||||
4 704.78 8886.13
|
||||
1 -2319.96 8909.47
|
||||
|
||||
[VERTICES]
|
||||
;Link X-Coord Y-Coord
|
||||
|
||||
[LABELS]
|
||||
;X-Coord Y-Coord Label & Anchor Node
|
||||
-2423.20 9069.59 "Reservoir"
|
||||
-1705.20 8870.76 "Pipe1"
|
||||
-468.04 8881.81 "Pipe2"
|
||||
-1208.13 9043.82 "Junc2"
|
||||
231.48 9053.50 "Junc3"
|
||||
612.95 9040.58 "Junc4"
|
||||
|
||||
[BACKDROP]
|
||||
DIMENSIONS 0.00 0.00 10000.00 10000.00
|
||||
UNITS None
|
||||
FILE
|
||||
OFFSET 0.00 0.00
|
||||
|
||||
[END]
|
|
@ -0,0 +1,138 @@
|
|||
[TITLE]
|
||||
|
||||
|
||||
[JUNCTIONS]
|
||||
;ID Elev Demand Pattern
|
||||
3 0 0 ;
|
||||
4 0 50 ;
|
||||
|
||||
[RESERVOIRS]
|
||||
;ID Head Pattern
|
||||
1 750 ;
|
||||
|
||||
[TANKS]
|
||||
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
|
||||
|
||||
[PIPES]
|
||||
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
|
||||
1 1 3 1200 1200 0.02 0 Open ;
|
||||
|
||||
[PUMPS]
|
||||
;ID Node1 Node2 Parameters
|
||||
|
||||
[VALVES]
|
||||
;ID Node1 Node2 Diameter Type Setting MinorLoss
|
||||
3 3 4 158 PRV 100000 0 ;
|
||||
|
||||
[TAGS]
|
||||
|
||||
[DEMANDS]
|
||||
;Junction Demand Pattern Category
|
||||
|
||||
[STATUS]
|
||||
;ID Status/Setting
|
||||
3 Open
|
||||
|
||||
[PATTERNS]
|
||||
;ID Multipliers
|
||||
|
||||
[CURVES]
|
||||
;ID X-Value Y-Value
|
||||
|
||||
[CONTROLS]
|
||||
|
||||
|
||||
|
||||
|
||||
[RULES]
|
||||
|
||||
|
||||
|
||||
|
||||
[ENERGY]
|
||||
Global Efficiency 75
|
||||
Global Price 0
|
||||
Demand Charge 0
|
||||
|
||||
[EMITTERS]
|
||||
;Junction Coefficient
|
||||
|
||||
[QUALITY]
|
||||
;Node InitQual
|
||||
|
||||
[SOURCES]
|
||||
;Node Type Quality Pattern
|
||||
|
||||
[REACTIONS]
|
||||
;Type Pipe/Tank Coefficient
|
||||
|
||||
|
||||
[REACTIONS]
|
||||
Order Bulk 1
|
||||
Order Tank 1
|
||||
Order Wall 1
|
||||
Global Bulk 0
|
||||
Global Wall 0
|
||||
Limiting Potential 0
|
||||
Roughness Correlation 0
|
||||
|
||||
[MIXING]
|
||||
;Tank Model
|
||||
|
||||
[TIMES]
|
||||
Duration 0:00
|
||||
Hydraulic Timestep 1:00
|
||||
Quality Timestep 0:05
|
||||
Pattern Timestep 1:00
|
||||
Pattern Start 0:00
|
||||
Report Timestep 1:00
|
||||
Report Start 0:00
|
||||
Start ClockTime 12 am
|
||||
Statistic NONE
|
||||
|
||||
[REPORT]
|
||||
Status No
|
||||
Summary No
|
||||
Page 0
|
||||
|
||||
[OPTIONS]
|
||||
Units LPS
|
||||
Headloss D-W
|
||||
Specific Gravity 1
|
||||
Viscosity 1
|
||||
Trials 40
|
||||
Accuracy 0.001
|
||||
CHECKFREQ 2
|
||||
MAXCHECK 10
|
||||
DAMPLIMIT 0
|
||||
Unbalanced Continue 10
|
||||
Pattern 1
|
||||
Demand Multiplier 1.0
|
||||
Emitter Exponent 0.5
|
||||
Quality None mg/L
|
||||
Diffusivity 1
|
||||
Tolerance 0.01
|
||||
|
||||
[COORDINATES]
|
||||
;Node X-Coord Y-Coord
|
||||
3 293.21 8919.75
|
||||
4 704.78 8886.13
|
||||
1 -2319.96 8909.47
|
||||
|
||||
[VERTICES]
|
||||
;Link X-Coord Y-Coord
|
||||
|
||||
[LABELS]
|
||||
;X-Coord Y-Coord Label & Anchor Node
|
||||
-2423.20 9069.59 "Reservoir"
|
||||
-1208.85 8765.43 "Pipe1"
|
||||
231.48 9053.50 "Junc3"
|
||||
612.95 9040.58 "Junc4"
|
||||
|
||||
[BACKDROP]
|
||||
DIMENSIONS 0.00 0.00 10000.00 10000.00
|
||||
UNITS None
|
||||
FILE
|
||||
OFFSET 0.00 0.00
|
||||
|
||||
[END]
|
|
@ -0,0 +1,166 @@
|
|||
[TITLE]
|
||||
|
||||
|
||||
[JUNCTIONS]
|
||||
;ID Elev Demand Pattern
|
||||
N3 0 0 ;
|
||||
N2 0 25 ;
|
||||
N5 0 0 ;
|
||||
N4 0 25 ;
|
||||
N6 0 0 ;
|
||||
N7 0 0 ;
|
||||
N8 0 100 ;
|
||||
|
||||
[RESERVOIRS]
|
||||
;ID Head Pattern
|
||||
R1 191 ;
|
||||
|
||||
[TANKS]
|
||||
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
|
||||
|
||||
[PIPES]
|
||||
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
|
||||
P1 R1 N3 610 900 92 0 Open ;
|
||||
P2 N3 N4 914 750 107 0 Open ;
|
||||
P3 N3 N2 610 600 98 0 Open ;
|
||||
P4 N4 N6 457 450 105 0 Open ;
|
||||
P5 N4 N2 549 450 100 0 Open ;
|
||||
P6 N5 N2 671 750 93 0 Open ;
|
||||
P7 N5 N7 1000 900 105 0 Open ;
|
||||
P8 N6 N5 457 600 105 0 Open ;
|
||||
P9 N2 N6 488 450 140 0 Open ;
|
||||
|
||||
[PUMPS]
|
||||
;ID Node1 Node2 Parameters
|
||||
|
||||
[VALVES]
|
||||
;ID Node1 Node2 Diameter Type Setting MinorLoss
|
||||
VALVE N7 N8 184 FCV 10000 0 ;
|
||||
|
||||
[TAGS]
|
||||
|
||||
[DEMANDS]
|
||||
;Junction Demand Pattern Category
|
||||
|
||||
[STATUS]
|
||||
;ID Status/Setting
|
||||
VALVE Open
|
||||
|
||||
[PATTERNS]
|
||||
;ID Multipliers
|
||||
|
||||
[CURVES]
|
||||
;ID X-Value Y-Value
|
||||
|
||||
[CONTROLS]
|
||||
|
||||
|
||||
[RULES]
|
||||
|
||||
|
||||
[ENERGY]
|
||||
Global Efficiency 75
|
||||
Global Price 0
|
||||
Demand Charge 0
|
||||
|
||||
[EMITTERS]
|
||||
;Junction Coefficient
|
||||
|
||||
[QUALITY]
|
||||
;Node InitQual
|
||||
|
||||
[SOURCES]
|
||||
;Node Type Quality Pattern
|
||||
|
||||
[REACTIONS]
|
||||
;Type Pipe/Tank Coefficient
|
||||
|
||||
|
||||
[REACTIONS]
|
||||
Order Bulk 1
|
||||
Order Tank 1
|
||||
Order Wall 1
|
||||
Global Bulk 0
|
||||
Global Wall 0
|
||||
Limiting Potential 0
|
||||
Roughness Correlation 0
|
||||
|
||||
[MIXING]
|
||||
;Tank Model
|
||||
|
||||
[TIMES]
|
||||
Duration 0:00
|
||||
Hydraulic Timestep 1:00
|
||||
Quality Timestep 0:05
|
||||
Pattern Timestep 1:00
|
||||
Pattern Start 0:00
|
||||
Report Timestep 1:00
|
||||
Report Start 0:00
|
||||
Start ClockTime 12 am
|
||||
Statistic NONE
|
||||
|
||||
[REPORT]
|
||||
Status No
|
||||
Summary No
|
||||
Page 0
|
||||
|
||||
[OPTIONS]
|
||||
Units LPS
|
||||
Headloss H-W
|
||||
Specific Gravity 1
|
||||
Viscosity 1
|
||||
Trials 40
|
||||
Accuracy 0.001
|
||||
CHECKFREQ 2
|
||||
MAXCHECK 10
|
||||
DAMPLIMIT 0
|
||||
Unbalanced Continue 10
|
||||
Pattern 1
|
||||
Demand Multiplier 1.0
|
||||
Emitter Exponent 0.5
|
||||
Quality None mg/L
|
||||
Diffusivity 1
|
||||
Tolerance 0.01
|
||||
|
||||
[COORDINATES]
|
||||
;Node X-Coord Y-Coord
|
||||
N3 87.45 6543.21
|
||||
N2 961.93 5658.44
|
||||
N5 2649.18 5658.44
|
||||
N4 1414.36 6965.59
|
||||
N6 2361.11 6965.02
|
||||
N7 3750.55 5656.40
|
||||
N8 4091.79 5653.12
|
||||
R1 -529.84 7427.98
|
||||
|
||||
[VERTICES]
|
||||
;Link X-Coord Y-Coord
|
||||
|
||||
[LABELS]
|
||||
;X-Coord Y-Coord Label & Anchor Node
|
||||
-149.18 7047.33 "P1"
|
||||
601.85 6944.44 "P2"
|
||||
478.40 6296.30 "P3"
|
||||
1887.86 7170.78 "P4"
|
||||
992.80 6522.63 "P5"
|
||||
1774.69 5617.28 "P6"
|
||||
3184.16 5607.00 "P7"
|
||||
2582.45 6306.08 "P8"
|
||||
1620.37 6584.36 "P9"
|
||||
-632.72 7366.26 "R1"
|
||||
-77.16 6481.48 "N3"
|
||||
1404.32 7201.65 "N4"
|
||||
2350.82 7160.49 "N6"
|
||||
859.05 5576.13 "N2"
|
||||
2677.61 5561.25 "N5"
|
||||
3636.83 5596.71 "VALVE"
|
||||
3667.70 5864.20 "N7"
|
||||
4048.35 5853.91 "N8"
|
||||
|
||||
[BACKDROP]
|
||||
DIMENSIONS 0.00 0.00 10000.00 10000.00
|
||||
UNITS None
|
||||
FILE
|
||||
OFFSET 0.00 0.00
|
||||
|
||||
[END]
|
|
@ -0,0 +1,484 @@
|
|||
[TITLE]
|
||||
Scenario: Base
|
||||
Date: 6/26/2019 2:45:30 PM
|
||||
|
||||
[JUNCTIONS]
|
||||
;ID Elev Demand Pattern
|
||||
275 10 0 ;
|
||||
273 8 0 ;
|
||||
271 6 0 ;
|
||||
269 0 0 ;
|
||||
267 21 0 ;
|
||||
265 0 0 ;
|
||||
263 0 0 ;
|
||||
261 0 0 ;
|
||||
259 25 0 ;
|
||||
257 17 0 ;
|
||||
255 27 40.39 1 ;
|
||||
253 36 54.52 1 ;
|
||||
251 30 24.16 1 ;
|
||||
249 18 0 ;
|
||||
247 18 70.38 1 ;
|
||||
243 14 4.34 1 ;
|
||||
241 13 0 ;
|
||||
239 13 44.61 1 ;
|
||||
237 14 15.61 1 ;
|
||||
231 5 16.48 1 ;
|
||||
229 10.5 64.18 1 ;
|
||||
225 8 22.8 1 ;
|
||||
219 4 41.32 1 ;
|
||||
217 6 24.22 1 ;
|
||||
215 7 92.19 1 ;
|
||||
213 7 13.94 1 ;
|
||||
211 7 8.67 1 ;
|
||||
209 -2 0.87 1 ;
|
||||
208 16 0 ;
|
||||
207 9 69.39 1 ;
|
||||
206 1 0 ;
|
||||
205 21 65.36 1 ;
|
||||
204 21 0 ;
|
||||
203 2 1 5 ;
|
||||
201 0.1 44.61 1 ;
|
||||
199 -2 119.32 1 ;
|
||||
197 23 17.04 1 ;
|
||||
195 15.5 0 ;
|
||||
193 18 71.31 1 ;
|
||||
191 25 81.9 1 ;
|
||||
189 4 107.92 1 ;
|
||||
187 12.5 0 ;
|
||||
185 16 25.65 1 ;
|
||||
184 16 0 ;
|
||||
183 11 0 ;
|
||||
181 8 0 ;
|
||||
179 8 0 ;
|
||||
173 -4 0 ;
|
||||
171 -4 39.34 1 ;
|
||||
169 -5 0 ;
|
||||
167 -5 14.56 1 ;
|
||||
166 -2 2.6 1 ;
|
||||
164 5 0 ;
|
||||
163 5 9.42 1 ;
|
||||
161 4 15.8 1 ;
|
||||
159 6 41.32 1 ;
|
||||
157 13.1 51.79 1 ;
|
||||
153 66.2 44.17 1 ;
|
||||
151 33.5 144.48 1 ;
|
||||
149 16 27.07 1 ;
|
||||
147 18.5 8.55 1 ;
|
||||
145 1 27.63 1 ;
|
||||
143 -4.5 6.2 1 ;
|
||||
141 4 9.85 1 ;
|
||||
139 31 5.89 1 ;
|
||||
131 6 42.75 1 ;
|
||||
129 51 0 ;
|
||||
127 56 17.66 1 ;
|
||||
125 11 45.6 1 ;
|
||||
123 11 1 2 ;
|
||||
121 -2 41.63 1 ;
|
||||
120 0 0 ;
|
||||
119 2 176.13 1 ;
|
||||
117 13.6 117.71 1 ;
|
||||
115 14 52.1 1 ;
|
||||
113 2 20.01 1 ;
|
||||
111 10 141.94 1 ;
|
||||
109 20.3 231.4 1 ;
|
||||
107 22 54.64 1 ;
|
||||
JUNCTION-105 28.5 135.37 1 ;
|
||||
103 43 133.2 1 ;
|
||||
101 42 189.95 1 ;
|
||||
61 0 0 ;
|
||||
60 0 0 ;
|
||||
50 116.5 0 ;
|
||||
40 131.9 0 ;
|
||||
20 129 0 ;
|
||||
15 32 1 3 ;
|
||||
10 147 0 ;
|
||||
305-A 16.9067526676344 0 ;
|
||||
305-B 16.9067526676344 0 ;
|
||||
|
||||
[RESERVOIRS]
|
||||
;ID Head Pattern
|
||||
River 220 ;
|
||||
Lake 167 ;
|
||||
|
||||
[TANKS]
|
||||
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
|
||||
3 129 29 4 35.5 164 84496.2760109511 ;
|
||||
2 116.5 23.5 6.5 40.3 50 12762.7201552085 ;
|
||||
1 131.9 13.1 0.0999999999999943 32.1 85 567.450173054656 ;
|
||||
|
||||
[PIPES]
|
||||
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
|
||||
204 184 205 4530 12 130 0 Open ;
|
||||
203 183 185 510 8 130 0 Open ;
|
||||
202 185 184 99.9 8 130 0 Open ;
|
||||
201 40 179 1190 12 130 0 Open ;
|
||||
199 179 183 210 12 130 0 Open ;
|
||||
191 271 171 760 24 130 0 Open ;
|
||||
189 171 173 500 30 141 0 Open ;
|
||||
187 169 171 1270 30 141 0 Open ;
|
||||
186 187 204 99.9 8 130 0 Open ;
|
||||
185 167 169 300 8 130 0 Open ;
|
||||
183 265 169 590 30 141 0 Open ;
|
||||
181 164 166 490 14 130 0 Open ;
|
||||
180 163 164 150 14 130 0 Open ;
|
||||
179 161 163 430 30 141 0 Open ;
|
||||
177 159 161 2000 30 141 0 Open ;
|
||||
175 157 159 2910 30 141 0 Open ;
|
||||
173 119 157 2080 30 141 0 Open ;
|
||||
169 125 153 4560 8 130 0 Open ;
|
||||
163 151 153 1170 12 130 0 Open ;
|
||||
161 149 151 1020 8 130 0 Open ;
|
||||
159 147 149 880 12 130 0 Open ;
|
||||
155 147 145 2200 12 130 0 Open ;
|
||||
153 145 141 3510 12 130 0 Open ;
|
||||
151 15 143 1650 8 130 0 Open ;
|
||||
149 143 141 1400 8 130 0 Open ;
|
||||
147 139 141 2050 8 130 0 Open ;
|
||||
145 129 139 2750 8 130 0 Open ;
|
||||
137 129 131 6480 16 130 0 Open ;
|
||||
135 127 129 900 24 130 0 Open ;
|
||||
133 20 127 785 20 130 0 Open ;
|
||||
131 125 127 3240 24 130 0 Open ;
|
||||
129 121 125 930 24 130 0 Open ;
|
||||
125 123 121 1500 30 141 0 Open ;
|
||||
123 121 119 2000 30 141 0 Open ;
|
||||
122 121 120 2050 8 130 0 Open ;
|
||||
121 120 117 1870 12 130 0 Open ;
|
||||
120 119 120 730 12 130 0 Open ;
|
||||
119 115 117 2180 12 130 0 Open ;
|
||||
117 263 JUNCTION-105 2725 12 130 0 Open ;
|
||||
116 113 193 1660 12 130 0 Open ;
|
||||
115 107 115 1950 8 130 0 Open ;
|
||||
114 115 113 2000 8 130 0 Open ;
|
||||
113 111 113 1680 12 130 0 Open ;
|
||||
112 115 111 1160 12 130 0 Open ;
|
||||
111 109 111 2000 12 130 0 Open ;
|
||||
PIPE-109 103 109 3940 16 130 0 Open ;
|
||||
107 JUNCTION-105 107 1470 12 130 0 Open ;
|
||||
105 101 JUNCTION-105 2540 12 130 0 Open ;
|
||||
103 101 103 1350 16 130 0 Open ;
|
||||
101 10 101 14200 18 110 0 Open ;
|
||||
60 River 60 1231 24 140 0 Open ;
|
||||
50 2 50 99 99 199 0 Open ;
|
||||
40 1 40 99 99 199 0 Open ;
|
||||
20 3 20 99 99 199 0 Open ;
|
||||
329 61 123 45500 30 140 0 Open ;
|
||||
325 269 271 1290 8 130 0 Open ;
|
||||
323 201 275 300 12 130 0 Open ;
|
||||
321 163 265 1200 30 141 0 Open ;
|
||||
319 273 205 645 12 130 0 Open ;
|
||||
317 273 275 2230 8 130 0 Open ;
|
||||
315 181 271 290 24 130 0 Open ;
|
||||
313 269 189 646 12 130 0 Open ;
|
||||
311 193 267 1170 12 130 0 Open ;
|
||||
309 265 267 1580 8 130 0 Open ;
|
||||
307 261 263 350 12 130 0 Open ;
|
||||
305 117 261 645 12 130 0 Open ;
|
||||
303 257 261 1400 8 130 0 Open ;
|
||||
301 259 263 1400 8 130 0 Open ;
|
||||
299 257 259 350 8 130 0 Open ;
|
||||
297 120 257 645 8 130 0 Open ;
|
||||
295 249 251 1450 12 130 0 Open ;
|
||||
293 255 251 1100 8 130 0 Open ;
|
||||
291 255 253 1100 10 130 0 Open ;
|
||||
289 50 255 925 10 130 0 Open ;
|
||||
287 247 255 1390 10 130 0 Open ;
|
||||
285 247 249 100 12 130 0 Open ;
|
||||
283 239 249 430 12 130 0 Open ;
|
||||
281 241 247 445 10 130 0 Open ;
|
||||
277 241 243 2200 12 130 0 Open ;
|
||||
275 239 241 350 12 130 0 Open ;
|
||||
273 237 239 510 12 130 0 Open ;
|
||||
271 237 229 790 8 130 0 Open ;
|
||||
269 211 237 2080 12 130 0 Open ;
|
||||
263 229 231 1960 12 130 0 Open ;
|
||||
261 213 229 2200 8 130 0 Open ;
|
||||
257 217 225 1560 12 130 0 Open ;
|
||||
251 217 219 2050 14 130 0 Open ;
|
||||
249 215 217 1660 16 130 0 Open ;
|
||||
247 213 215 4285 16 130 0 Open ;
|
||||
245 211 213 990 16 130 0 Open ;
|
||||
243 209 211 1210 16 130 0 Open ;
|
||||
241 208 209 885 12 130 0 Open ;
|
||||
240 206 208 510 12 130 0 Open ;
|
||||
239 275 207 1430 12 130 0 Open ;
|
||||
238 207 206 450 12 130 0 Open ;
|
||||
237 205 207 1200 12 130 0 Open ;
|
||||
235 199 273 725 12 130 0 Open ;
|
||||
233 201 203 120 24 130 0 Open ;
|
||||
231 199 201 630 24 141 0 Open ;
|
||||
229 173 199 4000 24 141 0 Open ;
|
||||
225 111 197 2790 12 130 0 Open ;
|
||||
223 197 191 1150 12 130 0 Open ;
|
||||
221 161 195 2300 8 130 0 Open ;
|
||||
219 193 195 360 12 130 0 Open ;
|
||||
217 191 193 520 12 130 0 Open ;
|
||||
215 267 189 1230 12 130 0 Open ;
|
||||
213 191 187 2560 12 130 0 Open ;
|
||||
211 169 269 646 12 130 0 Open ;
|
||||
209 189 187 500 8 130 0 Open ;
|
||||
207 189 183 1350 12 130 0 Open ;
|
||||
205 204 185 1325 12 130 0 Open ;
|
||||
P-1 119 305-A 1640 12 130 0 Open ;
|
||||
P-2 305-B 151 1820 12 130 0 Open ;
|
||||
|
||||
[PUMPS]
|
||||
;ID Node1 Node2 Parameters
|
||||
PUMP1 60 61 HEAD 335 ;
|
||||
PUMP2 Lake 10 HEAD 10 ;
|
||||
|
||||
[VALVES]
|
||||
;ID Node1 Node2 Diameter Type Setting MinorLoss
|
||||
TCV-1 305-A 305-B 6 TCV 0.2 0 ;
|
||||
|
||||
[TAGS]
|
||||
|
||||
[DEMANDS]
|
||||
;Junction Demand Pattern Category
|
||||
|
||||
[STATUS]
|
||||
;ID Status/Setting
|
||||
TCV-1 Open
|
||||
|
||||
[PATTERNS]
|
||||
;ID Multipliers
|
||||
;
|
||||
1 1.34 1.94 1.46 1.44 0.76 0.92
|
||||
1 0.85 1.07 0.96 1.1 1.08 1.19
|
||||
1 1.16 1.08 0.96 0.83 0.79 0.74
|
||||
1 0.64 0.64 0.85 0.96 1.24 1.67
|
||||
;
|
||||
2 0 0 0 0 0 1219
|
||||
2 0 0 0 1866 1836 1818
|
||||
2 1818 1822 1822 1817 1824 1816
|
||||
2 1833 1817 1830 1814 1840 1859
|
||||
;
|
||||
3 620 620 620 620 620 360
|
||||
3 360 0 0 0 0 360
|
||||
3 360 360 360 360 0 0
|
||||
3 0 0 0 0 360 360
|
||||
;
|
||||
4 1637 1706 1719 1719 1791 1819
|
||||
4 1777 1842 1815 1825 1856 1801
|
||||
4 1819 1733 1664 1620 1613 1620
|
||||
4 1616 1647 1627 1627 1671 1668
|
||||
;
|
||||
5 4439 4531 4511 4582 4531 4582
|
||||
5 4572 4613 4643 4643 4592 4613
|
||||
5 4531 4521 4449 4439 4449 4460
|
||||
5 4439 4419 4368 4399 4470 4480
|
||||
;
|
||||
ValveClosure 1
|
||||
|
||||
[CURVES]
|
||||
;ID X-Value Y-Value
|
||||
;PUMP: PUMP: PUMP: PUMP: PUMP:
|
||||
335 0 200
|
||||
335 8000 138
|
||||
335 14000 86
|
||||
;PUMP: PUMP: PUMP: PUMP: EFFICIENCY:
|
||||
335E 0 75
|
||||
335E 8000 75
|
||||
335E 14000 75
|
||||
;PUMP: PUMP: PUMP: PUMP: PUMP:
|
||||
10 0 104
|
||||
10 2000 92
|
||||
10 4000 63
|
||||
;PUMP: PUMP: PUMP: PUMP: EFFICIENCY:
|
||||
10E 0 75
|
||||
10E 2000 75
|
||||
10E 4000 75
|
||||
|
||||
[CONTROLS]
|
||||
|
||||
|
||||
|
||||
|
||||
[RULES]
|
||||
|
||||
|
||||
|
||||
|
||||
[ENERGY]
|
||||
Global Efficiency 75
|
||||
Global Price 0
|
||||
Demand Charge 0
|
||||
|
||||
[EMITTERS]
|
||||
;Junction Coefficient
|
||||
|
||||
[QUALITY]
|
||||
;Node InitQual
|
||||
|
||||
[SOURCES]
|
||||
;Node Type Quality Pattern
|
||||
|
||||
[REACTIONS]
|
||||
;Type Pipe/Tank Coefficient
|
||||
|
||||
|
||||
[REACTIONS]
|
||||
Order Bulk 1
|
||||
Order Tank 1
|
||||
Order Wall 1
|
||||
Global Bulk 0
|
||||
Global Wall 0
|
||||
Limiting Potential 0
|
||||
Roughness Correlation 0
|
||||
|
||||
[MIXING]
|
||||
;Tank Model
|
||||
|
||||
[TIMES]
|
||||
Duration 24:00
|
||||
Hydraulic Timestep 1:00
|
||||
Quality Timestep 0:05
|
||||
Pattern Timestep 1:00
|
||||
Pattern Start 0:00
|
||||
Report Timestep 1:00
|
||||
Report Start 0:00
|
||||
Start ClockTime 12 am
|
||||
Statistic NONE
|
||||
|
||||
[REPORT]
|
||||
Status No
|
||||
Summary No
|
||||
Page 0
|
||||
|
||||
[OPTIONS]
|
||||
Units GPM
|
||||
Headloss H-W
|
||||
Specific Gravity 1
|
||||
Viscosity 0.985218181818182
|
||||
Trials 40
|
||||
Accuracy 0.001
|
||||
CHECKFREQ 2
|
||||
MAXCHECK 10
|
||||
DAMPLIMIT 0
|
||||
Unbalanced Continue 10
|
||||
Pattern 1
|
||||
Demand Multiplier 1
|
||||
Emitter Exponent 0.5
|
||||
Quality Trace Lake
|
||||
Diffusivity 1
|
||||
Tolerance 0.01
|
||||
|
||||
[COORDINATES]
|
||||
;Node X-Coord Y-Coord
|
||||
275 31.07 8.29
|
||||
273 29.16 7.38
|
||||
271 26.14 11.17
|
||||
269 25.03 12.14
|
||||
267 23.38 12.95
|
||||
265 25.39 13.60
|
||||
263 20.32 21.57
|
||||
261 20.79 21.45
|
||||
259 20.80 23.40
|
||||
257 21.17 23.32
|
||||
255 33.51 2.45
|
||||
253 32.17 1.88
|
||||
251 34.15 1.10
|
||||
249 35.02 1.81
|
||||
247 35.02 2.05
|
||||
243 37.04 0.00
|
||||
241 35.87 2.11
|
||||
239 35.76 2.31
|
||||
237 35.37 3.08
|
||||
231 38.38 2.54
|
||||
229 36.16 3.49
|
||||
225 43.53 7.38
|
||||
219 44.86 9.32
|
||||
217 42.11 8.67
|
||||
215 39.95 8.73
|
||||
213 35.26 6.16
|
||||
211 34.20 5.54
|
||||
209 33.76 6.59
|
||||
208 32.54 6.81
|
||||
207 31.00 6.61
|
||||
206 31.66 6.64
|
||||
205 29.20 6.46
|
||||
204 23.81 10.69
|
||||
203 31.14 8.89
|
||||
201 30.89 8.57
|
||||
199 29.42 8.44
|
||||
197 20.97 15.18
|
||||
195 23.18 14.72
|
||||
193 22.88 14.35
|
||||
191 22.10 14.07
|
||||
189 24.15 11.37
|
||||
187 23.64 11.04
|
||||
185 24.79 9.80
|
||||
184 25.15 9.52
|
||||
183 25.29 10.04
|
||||
181 25.72 10.83
|
||||
179 25.86 10.38
|
||||
173 26.87 11.59
|
||||
171 26.65 11.80
|
||||
169 25.68 12.74
|
||||
167 25.88 12.98
|
||||
166 26.48 15.13
|
||||
164 25.98 15.14
|
||||
163 25.39 14.98
|
||||
161 25.10 15.28
|
||||
159 23.12 17.50
|
||||
157 24.85 20.16
|
||||
153 28.13 22.63
|
||||
151 28.29 21.39
|
||||
149 29.62 20.74
|
||||
147 30.24 20.38
|
||||
145 33.02 19.29
|
||||
143 37.47 21.97
|
||||
141 35.68 23.08
|
||||
139 33.28 24.54
|
||||
131 37.89 29.55
|
||||
129 30.32 26.39
|
||||
127 29.29 26.40
|
||||
125 24.59 25.64
|
||||
123 23.37 27.31
|
||||
121 23.54 25.50
|
||||
120 22.08 23.10
|
||||
119 23.70 22.76
|
||||
117 21.67 21.29
|
||||
115 20.98 19.18
|
||||
113 22.04 16.61
|
||||
111 20.21 17.53
|
||||
109 17.64 18.92
|
||||
107 18.45 20.46
|
||||
JUNCTION-105 16.97 21.28
|
||||
103 12.96 21.31
|
||||
101 13.81 22.94
|
||||
61 23.70 29.03
|
||||
60 23.90 29.94
|
||||
50 33.01 3.01
|
||||
40 27.02 9.81
|
||||
20 29.44 26.91
|
||||
15 38.68 23.76
|
||||
10 9.00 27.85
|
||||
305-A 25.08 22.31
|
||||
305-B 25.82 22.10
|
||||
River 24.15 31.06
|
||||
Lake 8.00 27.53
|
||||
3 29.41 27.27
|
||||
2 32.99 3.45
|
||||
1 27.46 9.84
|
||||
|
||||
[VERTICES]
|
||||
;Link X-Coord Y-Coord
|
||||
PUMP1 23.81 29.49
|
||||
PUMP2 8.50 27.69
|
||||
|
||||
[LABELS]
|
||||
;X-Coord Y-Coord Label & Anchor Node
|
||||
21.91 30.01 "PUMP1"
|
||||
7.86 28.64 "PUMP2"
|
||||
15.90 22.66 "JUNCTION-105"
|
||||
13.69 19.85 "PIPE-109"
|
||||
|
||||
[BACKDROP]
|
||||
DIMENSIONS 6.16 -1.55 46.70 32.61
|
||||
UNITS None
|
||||
FILE
|
||||
OFFSET 0.00 0.00
|
||||
|
||||
[END]
|
|
@ -0,0 +1,649 @@
|
|||
[TITLE]
|
||||
|
||||
|
||||
[JUNCTIONS]
|
||||
;ID Elev Demand Pattern
|
||||
JUNCTION-0 376.06999999999999 0.763534 PATTERN-0 ;
|
||||
JUNCTION-1 192.0 0 ;
|
||||
JUNCTION-2 363.13999999999999 0.830000 PATTERN-0 ;
|
||||
JUNCTION-3 428.06999999999999 4.400000 PATTERN-0 ;
|
||||
JUNCTION-4 477.81 3.836466 PATTERN-0 ;
|
||||
JUNCTION-5 494.23000000000002 3.529833 PATTERN-0 ;
|
||||
JUNCTION-6 505.0 1.850000 PATTERN-0 ;
|
||||
JUNCTION-7 535.23000000000002 0 ;
|
||||
JUNCTION-8 493.42000000000002 1.540000 PATTERN-0 ;
|
||||
JUNCTION-9 488.29000000000002 0 ;
|
||||
JUNCTION-10 333.62 0.341497 PATTERN-0 ;
|
||||
JUNCTION-11 344.10000000000002 1.049859 PATTERN-0 ;
|
||||
JUNCTION-12 379.5 0.025149 PATTERN-0 ;
|
||||
JUNCTION-13 325.94999999999999 0 ;
|
||||
JUNCTION-14 416.85000000000002 0 ;
|
||||
JUNCTION-15 423.49000000000001 1.320167 PATTERN-0 ;
|
||||
JUNCTION-16 383.0 0 ;
|
||||
JUNCTION-17 385.06 25.715680 PATTERN-0 ;
|
||||
JUNCTION-18 478.14999999999998 6.182285 PATTERN-0 ;
|
||||
JUNCTION-19 558.92999999999995 4.603554 PATTERN-0 ;
|
||||
JUNCTION-20 617.73000000000002 2.580000 PATTERN-0 ;
|
||||
JUNCTION-21 652.41999999999996 0 ;
|
||||
JUNCTION-22 625.96000000000004 4.290000 PATTERN-0 ;
|
||||
JUNCTION-23 604.34000000000003 3.194580 PATTERN-0 ;
|
||||
JUNCTION-24 636.61000000000001 0 ;
|
||||
JUNCTION-25 653.92999999999995 5.970000 PATTERN-0 ;
|
||||
JUNCTION-26 683.42999999999995 0 ;
|
||||
JUNCTION-27 690.64999999999998 12.442156 PATTERN-0 ;
|
||||
JUNCTION-28 701.69000000000005 2.092553 PATTERN-0 ;
|
||||
JUNCTION-29 846.27999999999997 0 ;
|
||||
JUNCTION-30 636.0 116.764931 PATTERN-0 ;
|
||||
JUNCTION-31 600.42999999999995 2.370000 PATTERN-0 ;
|
||||
JUNCTION-32 625.85000000000002 6.160000 PATTERN-0 ;
|
||||
JUNCTION-33 622.77999999999997 0.958345 PATTERN-0 ;
|
||||
JUNCTION-34 200.0 0 ;
|
||||
JUNCTION-35 651.97000000000003 9.239535 PATTERN-0 ;
|
||||
JUNCTION-36 634.11000000000001 0 ;
|
||||
JUNCTION-37 677.04999999999995 3.286911 PATTERN-0 ;
|
||||
JUNCTION-38 646.50999999999999 0 ;
|
||||
JUNCTION-39 703.19000000000005 4.907129 PATTERN-0 ;
|
||||
JUNCTION-40 741.63 3.393717 PATTERN-0 ;
|
||||
JUNCTION-41 700.22000000000003 3.052871 PATTERN-0 ;
|
||||
JUNCTION-42 728.04999999999995 11.414126 PATTERN-0 ;
|
||||
JUNCTION-43 653.09000000000003 3.310000 PATTERN-0 ;
|
||||
JUNCTION-44 678.5 5.167447 PATTERN-0 ;
|
||||
JUNCTION-45 747.32000000000005 9.354966 PATTERN-0 ;
|
||||
JUNCTION-46 820.24000000000001 4.365034 PATTERN-0 ;
|
||||
JUNCTION-47 640.47000000000003 0 ;
|
||||
JUNCTION-48 637.45000000000005 0 ;
|
||||
JUNCTION-49 623.89999999999998 1.140000 PATTERN-0 ;
|
||||
JUNCTION-50 611.08000000000004 3.811622 PATTERN-0 ;
|
||||
JUNCTION-51 623.67999999999995 3.010000 PATTERN-0 ;
|
||||
JUNCTION-52 613.26999999999998 4.918378 PATTERN-0 ;
|
||||
JUNCTION-53 607.63 3.030000 PATTERN-0 ;
|
||||
JUNCTION-54 602.11000000000001 4.190000 PATTERN-0 ;
|
||||
JUNCTION-55 603.34000000000003 3.080000 PATTERN-0 ;
|
||||
JUNCTION-56 606.94000000000005 0 ;
|
||||
JUNCTION-57 617.97000000000003 0.431655 PATTERN-0 ;
|
||||
JUNCTION-58 610.21000000000004 22.020000 PATTERN-0 ;
|
||||
JUNCTION-59 620.95000000000005 0 ;
|
||||
JUNCTION-60 623.99000000000001 0 ;
|
||||
JUNCTION-61 625.38 0 ;
|
||||
JUNCTION-62 625.39999999999998 0 ;
|
||||
JUNCTION-63 623.95000000000005 0 ;
|
||||
JUNCTION-64 623.13 0 ;
|
||||
JUNCTION-65 619.37 0 ;
|
||||
JUNCTION-66 619.72000000000003 0 ;
|
||||
JUNCTION-67 624.5 0 ;
|
||||
JUNCTION-68 617.08000000000004 20.900000 PATTERN-0 ;
|
||||
JUNCTION-69 626.0 2.460000 PATTERN-0 ;
|
||||
JUNCTION-70 619.11000000000001 6.250000 PATTERN-0 ;
|
||||
JUNCTION-71 632.17999999999995 2.030000 PATTERN-0 ;
|
||||
JUNCTION-72 622.35000000000002 2.793147 PATTERN-0 ;
|
||||
JUNCTION-73 620.37 2.630000 PATTERN-0 ;
|
||||
JUNCTION-74 622.34000000000003 1.070000 PATTERN-0 ;
|
||||
JUNCTION-75 629.15999999999997 2.546853 PATTERN-0 ;
|
||||
JUNCTION-76 622.54999999999995 2.670000 PATTERN-0 ;
|
||||
JUNCTION-77 624.63999999999999 1.820000 PATTERN-0 ;
|
||||
JUNCTION-78 618.01999999999998 0 ;
|
||||
JUNCTION-79 617.88999999999999 0 ;
|
||||
JUNCTION-80 616.88999999999999 0 ;
|
||||
JUNCTION-81 623.58000000000004 3.460000 PATTERN-0 ;
|
||||
JUNCTION-82 618.75999999999999 10.220000 PATTERN-0 ;
|
||||
JUNCTION-83 617.71000000000004 7.541160 PATTERN-0 ;
|
||||
JUNCTION-84 619.92999999999995 2.878840 PATTERN-0 ;
|
||||
JUNCTION-85 620.25 0 ;
|
||||
JUNCTION-86 623.48000000000002 0 ;
|
||||
JUNCTION-87 622.25999999999999 0 ;
|
||||
JUNCTION-88 621.69000000000005 0 ;
|
||||
JUNCTION-89 626.80999999999995 7.340000 PATTERN-0 ;
|
||||
JUNCTION-90 644.09000000000003 0 ;
|
||||
JUNCTION-91 637.44000000000005 0 ;
|
||||
JUNCTION-92 628.24000000000001 0 ;
|
||||
JUNCTION-93 643.74000000000001 13.990000 PATTERN-0 ;
|
||||
JUNCTION-94 633.48000000000002 2.130000 PATTERN-0 ;
|
||||
JUNCTION-95 630.86000000000001 2.969609 PATTERN-0 ;
|
||||
JUNCTION-96 629.13999999999999 6.100391 PATTERN-0 ;
|
||||
JUNCTION-97 628.99000000000001 4.450000 PATTERN-0 ;
|
||||
JUNCTION-98 643.04999999999995 5.966633 PATTERN-0 ;
|
||||
JUNCTION-99 641.88999999999999 7.173367 PATTERN-0 ;
|
||||
JUNCTION-100 637.89999999999998 5.888099 PATTERN-0 ;
|
||||
JUNCTION-101 645.09000000000003 0.661901 PATTERN-0 ;
|
||||
JUNCTION-102 1094.0699999999999 102.100000 PATTERN-0 ;
|
||||
JUNCTION-103 1031.73 0.755915 PATTERN-1 ;
|
||||
JUNCTION-104 860.63999999999999 0.044085 PATTERN-1 ;
|
||||
JUNCTION-105 0.0 0 ;
|
||||
JUNCTION-106 0.0 0 ;
|
||||
JUNCTION-109 0.0 0 ;
|
||||
JUNCTION-110 0.0 0 ;
|
||||
JUNCTION-111 418.0 0 ;
|
||||
JUNCTION-112 418.0 0 ;
|
||||
JUNCTION-113 359.0 0 ;
|
||||
JUNCTION-114 359.0 0 ;
|
||||
JUNCTION-115 533.0 0 ;
|
||||
JUNCTION-116 533.0 0 ;
|
||||
JUNCTION-117 404.0 0 ;
|
||||
JUNCTION-118 404.0 0 ;
|
||||
JUNCTION-119 849.0 0 ;
|
||||
JUNCTION-120 849.0 0 ;
|
||||
JUNCTION-121 957.0 0 ;
|
||||
JUNCTION-122 957.0 0 ;
|
||||
JUNCTION-123 758.0 0 ;
|
||||
JUNCTION-124 758.0 0 ;
|
||||
JUNCTION-125 434.0 0 ;
|
||||
JUNCTION-126 434.0 0 ;
|
||||
JUNCTION-128 0.0 0 ;
|
||||
|
||||
[RESERVOIRS]
|
||||
;ID Head Pattern
|
||||
RESERVOIR-129 425.0 ;
|
||||
|
||||
[TANKS]
|
||||
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
|
||||
TANK-130 843.89999999999998 15.159000 0.000000 32.100000 186.000000 0.000000 ;
|
||||
TANK-131 1137.0999999999999 17.945000 0.000000 41.900000 106.000000 0.000000 ;
|
||||
|
||||
[PIPES]
|
||||
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
|
||||
LINK-0 JUNCTION-126 JUNCTION-118 7401.000000 20.453411 138.000000 0.000000 Open ;
|
||||
LINK-1 JUNCTION-17 JUNCTION-0 359.000000 7.999894 139.000000 0.000000 Open ;
|
||||
LINK-2 JUNCTION-0 JUNCTION-2 324.000000 7.999894 139.000000 0.000000 Open ;
|
||||
LINK-3 JUNCTION-3 JUNCTION-4 697.000000 7.999810 139.000000 0.000000 Open ;
|
||||
LINK-6 JUNCTION-5 JUNCTION-4 574.000000 7.999807 139.000000 0.000000 Open ;
|
||||
LINK-7 JUNCTION-5 JUNCTION-6 238.000000 7.999912 139.000000 0.000000 Open ;
|
||||
LINK-8 JUNCTION-6 JUNCTION-7 502.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-9 JUNCTION-8 JUNCTION-6 396.000000 7.999894 139.000000 0.000000 Open ;
|
||||
LINK-10 JUNCTION-9 JUNCTION-8 377.000000 7.999894 139.000000 0.000000 Open ;
|
||||
LINK-11 JUNCTION-18 JUNCTION-9 308.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-12 JUNCTION-9 JUNCTION-8 837.000000 7.999841 139.000000 0.000000 Open ;
|
||||
LINK-13 JUNCTION-2 JUNCTION-113 180 8.000000 138.000000 0.000000 Open ;
|
||||
LINK-14 JUNCTION-114 JUNCTION-10 599.000000 7.999901 138.000000 0.000000 Open ;
|
||||
LINK-15 JUNCTION-1 JUNCTION-109 125.000000 16.000000 138.000000 0.000000 Open ;
|
||||
LINK-16 JUNCTION-10 JUNCTION-11 409.000000 7.999841 138.000000 0.000000 Open ;
|
||||
LINK-17 JUNCTION-110 JUNCTION-34 124.000000 12.000000 138.000000 0.000000 Open ;
|
||||
LINK-18 JUNCTION-128 JUNCTION-1 320.000000 30.000000 138.000000 0.000000 Open ;
|
||||
LINK-19 RESERVOIR-129 JUNCTION-128 153 30.000000 138.000000 0.000000 Open ;
|
||||
LINK-20 JUNCTION-12 JUNCTION-13 597.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-21 JUNCTION-12 JUNCTION-11 671.000000 7.999810 138.000000 0.000000 Open ;
|
||||
LINK-22 JUNCTION-14 JUNCTION-12 332.000000 7.999863 139.000000 0.000000 Open ;
|
||||
LINK-23 JUNCTION-5 JUNCTION-15 2089.000000 7.999852 139.000000 0.000000 Open ;
|
||||
LINK-24 JUNCTION-15 JUNCTION-3 150 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-25 JUNCTION-15 JUNCTION-111 190 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-26 JUNCTION-112 JUNCTION-14 196 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-27 JUNCTION-14 JUNCTION-16 928.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-28 JUNCTION-17 JUNCTION-18 1382.000000 16.000290 138.000000 0.000000 Open ;
|
||||
LINK-29 JUNCTION-18 JUNCTION-116 731.000000 16.000150 138.000000 0.000000 Open ;
|
||||
LINK-30 JUNCTION-0 JUNCTION-4 1570.000000 7.999764 139.000000 0.000000 Open ;
|
||||
LINK-31 JUNCTION-29 JUNCTION-28 1402.000000 24.000489 138.000000 0.000000 Open ;
|
||||
LINK-32 JUNCTION-45 JUNCTION-46 1811.000000 7.999830 140.000000 0.000000 Open ;
|
||||
LINK-33 JUNCTION-23 JUNCTION-124 1845.000000 12.000000 140.000000 0.000000 Open ;
|
||||
LINK-34 JUNCTION-122 JUNCTION-123 2433.000000 12.000000 140.000000 0.000000 Open ;
|
||||
LINK-35 JUNCTION-34 JUNCTION-30 10260.284142 24.000979 138.000000 0.000000 Open ;
|
||||
LINK-36 JUNCTION-41 JUNCTION-39 1066.000000 7.999947 138.000000 0.000000 Open ;
|
||||
LINK-37 JUNCTION-2 JUNCTION-3 1066.000000 7.999796 139.000000 0.000000 Open ;
|
||||
LINK-38 JUNCTION-11 JUNCTION-10 1000.000000 7.999805 138.000000 0.000000 Open ;
|
||||
LINK-39 JUNCTION-117 JUNCTION-17 1537.000000 16.000075 138.000000 0.000000 Open ;
|
||||
LINK-40 JUNCTION-20 JUNCTION-21 2125.000000 20.000594 138.000000 0.000000 Open ;
|
||||
LINK-41 JUNCTION-20 JUNCTION-115 3227.000000 16.000327 138.000000 0.000000 Open ;
|
||||
LINK-42 JUNCTION-19 JUNCTION-125 2125.000000 20.000167 138.000000 0.000000 Open ;
|
||||
LINK-43 JUNCTION-19 JUNCTION-20 942.000000 20.000000 138.000000 0.000000 Open ;
|
||||
LINK-44 JUNCTION-21 JUNCTION-22 1257.000000 20.000439 138.000000 0.000000 Open ;
|
||||
LINK-45 JUNCTION-22 JUNCTION-23 1101.000000 24.000739 138.000000 0.000000 Open ;
|
||||
LINK-46 JUNCTION-23 JUNCTION-30 1175.000000 24.000727 138.000000 0.000000 Open ;
|
||||
LINK-47 JUNCTION-22 JUNCTION-24 292.000000 24.000000 138.000000 0.000000 Open ;
|
||||
LINK-48 JUNCTION-24 JUNCTION-25 178.000000 24.000000 138.000000 0.000000 Open ;
|
||||
LINK-49 JUNCTION-25 JUNCTION-26 336.000000 24.000000 138.000000 0.000000 Open ;
|
||||
LINK-50 JUNCTION-26 JUNCTION-27 196.00 24.000000 138.000000 0.000000 Open ;
|
||||
LINK-51 JUNCTION-27 JUNCTION-28 144.000000 24.000000 138.000000 0.000000 Open ;
|
||||
LINK-52 JUNCTION-30 JUNCTION-31 1146.000000 12.000000 138.000000 0.000000 Open ;
|
||||
LINK-53 JUNCTION-31 JUNCTION-32 1699.000000 12.000000 138.000000 0.000000 Open ;
|
||||
LINK-54 JUNCTION-32 JUNCTION-33 645.000000 12.000000 138.000000 0.000000 Open ;
|
||||
LINK-55 JUNCTION-33 JUNCTION-57 754.000000 8.413870 138.000000 0.000000 Open ;
|
||||
LINK-56 JUNCTION-19 JUNCTION-35 1113.000000 7.999903 140.000000 0.000000 Open ;
|
||||
LINK-57 JUNCTION-35 JUNCTION-36 507.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-58 JUNCTION-35 JUNCTION-37 246.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-59 JUNCTION-37 JUNCTION-20 739.000000 7.999947 138.000000 0.000000 Open ;
|
||||
LINK-60 JUNCTION-35 JUNCTION-38 552.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-61 JUNCTION-37 JUNCTION-39 348.000000 8.000000 138.000000 0.000000 Open ;
|
||||
LINK-62 JUNCTION-39 JUNCTION-40 998.000000 8.296935 139.000000 0.000000 Open ;
|
||||
LINK-63 JUNCTION-40 JUNCTION-41 619.000000 8.000000 138.000000 0.000000 Open ;
|
||||
LINK-64 JUNCTION-40 JUNCTION-42 538.000000 7.999947 138.000000 0.000000 Open ;
|
||||
LINK-65 JUNCTION-42 JUNCTION-41 668.000000 8.000000 138.000000 0.000000 Open ;
|
||||
LINK-66 JUNCTION-42 JUNCTION-27 2581.000000 8.019783 138.000000 0.000000 Open ;
|
||||
LINK-67 JUNCTION-24 JUNCTION-43 544.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-68 JUNCTION-43 JUNCTION-25 420.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-69 JUNCTION-43 JUNCTION-44 373.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-70 JUNCTION-44 JUNCTION-26 556.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-71 JUNCTION-44 JUNCTION-28 752.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-72 JUNCTION-29 TANK-130 242.000000 24.000000 138.000000 0.000000 Open ;
|
||||
LINK-73 JUNCTION-21 JUNCTION-47 91.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-74 JUNCTION-47 JUNCTION-48 805.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-75 JUNCTION-48 JUNCTION-49 574.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-76 JUNCTION-49 JUNCTION-22 158.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-77 JUNCTION-49 JUNCTION-50 577.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-78 JUNCTION-50 JUNCTION-51 388.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-79 JUNCTION-51 JUNCTION-48 236.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-80 JUNCTION-51 JUNCTION-52 393.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-81 JUNCTION-52 JUNCTION-47 549.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-82 JUNCTION-52 JUNCTION-50 1381.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-83 JUNCTION-23 JUNCTION-53 919.000000 9.999941 139.000000 0.000000 Open ;
|
||||
LINK-84 JUNCTION-53 JUNCTION-54 386.000000 9.999970 139.000000 0.000000 Open ;
|
||||
LINK-85 JUNCTION-54 JUNCTION-31 229.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-86 JUNCTION-53 JUNCTION-56 232.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-87 JUNCTION-56 JUNCTION-55 390.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-88 JUNCTION-55 JUNCTION-54 254.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-89 JUNCTION-55 JUNCTION-56 873.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-90 JUNCTION-32 JUNCTION-57 945.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-91 JUNCTION-57 JUNCTION-33 230.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-92 JUNCTION-31 JUNCTION-58 1155.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-93 JUNCTION-58 JUNCTION-59 413.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-94 JUNCTION-59 JUNCTION-60 943.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-95 JUNCTION-60 JUNCTION-59 196.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-96 JUNCTION-60 JUNCTION-61 133.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-97 JUNCTION-61 JUNCTION-62 138.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-98 JUNCTION-62 JUNCTION-63 187.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-99 JUNCTION-63 JUNCTION-64 134.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-100 JUNCTION-64 JUNCTION-65 300.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-101 JUNCTION-65 JUNCTION-66 108 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-102 JUNCTION-66 JUNCTION-67 420.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-103 JUNCTION-67 JUNCTION-61 209.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-104 JUNCTION-66 JUNCTION-67 398.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-105 JUNCTION-68 JUNCTION-58 381.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-106 JUNCTION-64 JUNCTION-65 872.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-107 JUNCTION-65 JUNCTION-68 199.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-108 JUNCTION-63 JUNCTION-62 713.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-109 JUNCTION-68 JUNCTION-69 1095.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-110 JUNCTION-69 JUNCTION-70 231.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-111 JUNCTION-70 JUNCTION-71 695.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-112 JUNCTION-70 JUNCTION-72 528.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-113 JUNCTION-73 JUNCTION-69 938.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-114 JUNCTION-72 JUNCTION-74 169.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-115 JUNCTION-74 JUNCTION-73 127.000000 8.000000 140.000000 0.000000 Open ;
|
||||
LINK-116 JUNCTION-72 JUNCTION-75 928.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-117 JUNCTION-75 JUNCTION-74 336.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-118 JUNCTION-75 JUNCTION-76 772.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-119 JUNCTION-76 JUNCTION-77 417.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-120 JUNCTION-77 JUNCTION-73 655.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-121 JUNCTION-76 JUNCTION-78 167.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-122 JUNCTION-78 JUNCTION-79 169.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-123 JUNCTION-79 JUNCTION-80 195.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-124 JUNCTION-80 JUNCTION-81 333.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-125 JUNCTION-81 JUNCTION-77 186 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-126 JUNCTION-78 JUNCTION-71 895.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-127 JUNCTION-80 JUNCTION-82 372.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-128 JUNCTION-82 JUNCTION-83 205.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-129 JUNCTION-83 JUNCTION-84 430.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-130 JUNCTION-84 JUNCTION-81 152.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-131 JUNCTION-84 JUNCTION-83 1586.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-132 JUNCTION-82 JUNCTION-85 174.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-133 JUNCTION-85 JUNCTION-86 456.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-134 JUNCTION-86 JUNCTION-87 341.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-135 JUNCTION-87 JUNCTION-85 507.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-136 JUNCTION-87 JUNCTION-88 195.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-137 JUNCTION-88 JUNCTION-79 250.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-138 JUNCTION-88 JUNCTION-89 191.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-139 JUNCTION-89 JUNCTION-86 926.000000 7.999947 140.000000 0.000000 Open ;
|
||||
LINK-140 JUNCTION-89 JUNCTION-90 464.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-141 JUNCTION-90 JUNCTION-91 178.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-142 JUNCTION-91 JUNCTION-92 167.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-143 JUNCTION-92 JUNCTION-33 403.000000 10.000000 139.000000 0.000000 Open ;
|
||||
LINK-144 JUNCTION-90 JUNCTION-93 143.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-145 JUNCTION-93 JUNCTION-94 331.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-146 JUNCTION-94 JUNCTION-92 157.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-147 JUNCTION-93 JUNCTION-94 1805.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-148 JUNCTION-92 JUNCTION-95 177.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-149 JUNCTION-95 JUNCTION-96 332.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-150 JUNCTION-96 JUNCTION-95 1432.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-151 JUNCTION-91 JUNCTION-97 489.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-152 JUNCTION-97 JUNCTION-96 122.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-153 JUNCTION-97 JUNCTION-98 285.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-154 JUNCTION-98 JUNCTION-99 597.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-155 JUNCTION-99 JUNCTION-100 148.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-156 JUNCTION-100 JUNCTION-101 812.000000 7.999900 139.000000 0.000000 Open ;
|
||||
LINK-157 JUNCTION-101 JUNCTION-98 152.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-158 JUNCTION-100 JUNCTION-101 620.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-159 JUNCTION-98 JUNCTION-99 784.000000 7.999947 139.000000 0.000000 Open ;
|
||||
LINK-160 JUNCTION-97 JUNCTION-71 1214.000000 8.000000 139.000000 0.000000 Open ;
|
||||
LINK-161 JUNCTION-45 JUNCTION-46 718.000000 10.000000 138.000000 0.000000 Open ;
|
||||
LINK-162 JUNCTION-46 JUNCTION-120 315.000000 10.000000 138.000000 0.000000 Open ;
|
||||
LINK-163 JUNCTION-119 JUNCTION-104 201 10.000000 138.000000 0.000000 Open ;
|
||||
LINK-164 JUNCTION-103 JUNCTION-102 930.000000 12.000000 140.000000 0.000000 Open ;
|
||||
LINK-165 JUNCTION-102 TANK-131 559.000000 16.000000 140.000000 0.000000 Open ;
|
||||
LINK-166 JUNCTION-29 JUNCTION-105 169.000000 11.974181 140.000000 0.000000 Open ;
|
||||
LINK-167 JUNCTION-106 JUNCTION-104 84.000000 8.000000 138.000000 0.000000 Open ;
|
||||
LINK-168 JUNCTION-103 JUNCTION-121 291.000000 12.000000 140.000000 0.000000 Open ;
|
||||
LINK-169 JUNCTION-103 JUNCTION-104 4700.000000 10.121698 138.000000 0.000000 Open ;
|
||||
|
||||
[PUMPS]
|
||||
;ID Node1 Node2 Parameters
|
||||
PUMP-170 JUNCTION-105 JUNCTION-106 HEAD CURVE-1 ;
|
||||
PUMP-172 JUNCTION-109 JUNCTION-110 HEAD CURVE-1 ;
|
||||
|
||||
[VALVES]
|
||||
;ID Node1 Node2 Diameter Type Setting MinorLoss
|
||||
VALVE-173 JUNCTION-111 JUNCTION-112 6.000000 TCV 0.2000000 0 ;
|
||||
VALVE-174 JUNCTION-113 JUNCTION-114 6.000000 TCV 0.2000000 0 ;
|
||||
VALVE-175 JUNCTION-115 JUNCTION-116 10.000000 TCV 0.2000000 0 ;
|
||||
VALVE-176 JUNCTION-117 JUNCTION-118 6.000000 TCV 0.2000 0 ;
|
||||
VALVE-177 JUNCTION-119 JUNCTION-120 6.000000 TCV 0.2000000 0 ;
|
||||
VALVE-178 JUNCTION-121 JUNCTION-122 6.000000 TCV 0.2000000 0 ;
|
||||
VALVE-179 JUNCTION-123 JUNCTION-124 8.000000 TCV 0.2000000 0 ;
|
||||
VALVE-180 JUNCTION-125 JUNCTION-126 8.000000 TCV 0.20000 0 ;
|
||||
|
||||
[TAGS]
|
||||
|
||||
[DEMANDS]
|
||||
;Junction Demand Pattern Category
|
||||
|
||||
[STATUS]
|
||||
;ID Status/Setting
|
||||
VALVE-173 Open
|
||||
VALVE-174 Open
|
||||
VALVE-175 Open
|
||||
VALVE-176 Open
|
||||
VALVE-177 Open
|
||||
VALVE-178 Open
|
||||
VALVE-179 Open
|
||||
VALVE-180 Open
|
||||
|
||||
[PATTERNS]
|
||||
;ID Multipliers
|
||||
;
|
||||
PATTERN-0 1.560000 1.360000 1.170000 1.130000 1.080000 1.040000
|
||||
PATTERN-0 1.200000 0.640000 1.080000 0.530000 0.290000 0.900000
|
||||
PATTERN-0 1.110000 1.060000 1.000000 1.650000 0.550000 0.740000
|
||||
PATTERN-0 0.640000 0.460000 0.580000 0.640000 0.710000 0.660000
|
||||
PATTERN-0 0.680000 0.430000 0.370000 0.330000 0.230000 0.210000
|
||||
PATTERN-0 0.060000 0.100000 0.100000 0.140000 0.090000 0.100000
|
||||
PATTERN-0 0.090000 0.090000 0.030000 0.230000 0.270000 0.720000
|
||||
PATTERN-0 0.930000 1.130000 1.390000 1.940000 1.900000 1.830000
|
||||
PATTERN-0 2.730000 1.740000 1.290000 1.410000 1.390000 1.350000
|
||||
PATTERN-0 1.190000 1.340000 0.950000 1.270000 1.280000 1.090000
|
||||
PATTERN-0 1.010000 1.130000 1.000000 0.770000 0.670000 0.760000
|
||||
PATTERN-0 0.760000 0.710000 0.580000 0.860000 0.960000 0.970000
|
||||
PATTERN-0 0.820000 0.710000 0.650000 0.620000 0.440000 0.480000
|
||||
PATTERN-0 0.550000 0.560000 0.610000 0.600000 0.440000 0.460000
|
||||
PATTERN-0 0.440000 0.400000 0.440000 0.690000 0.760000 1.190000
|
||||
PATTERN-0 1.330000 1.730000 1.970000 2.370000 2.280000 2.100000
|
||||
;
|
||||
PATTERN-1 80.000000 80.000000 80.000000 80.000000 80.000000 80.000000
|
||||
PATTERN-1 80.000000 80.000000 80.000000 80.000000 80.000000 80.000000
|
||||
PATTERN-1 80.000000 80.000000 80.000000 80.000000 80.000000 80.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 80.000000 80.000000
|
||||
PATTERN-1 80.000000 80.000000 80.000000 80.000000 80.000000 80.000000
|
||||
PATTERN-1 80.000000 80.000000 80.000000 80.000000 80.000000 80.000000
|
||||
PATTERN-1 80.000000 80.000000 80.000000 80.000000 80.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
|
||||
PATTERN-1 0.000000 0.000000 0.000000 80.000000 80.000000 80.000000
|
||||
;
|
||||
PATTERN-2 0.800000 0.840000 0.880000 0.970000 1.070000 1.010000
|
||||
PATTERN-2 0.960000 0.970000 0.990000 1.080000 1.180000 1.190000
|
||||
PATTERN-2 1.190000 1.220000 1.250000 1.250000 1.260000 1.220000
|
||||
PATTERN-2 1.190000 1.160000 1.140000 1.120000 1.110000 1.100000
|
||||
PATTERN-2 1.100000 1.060000 1.020000 1.010000 1.010000 1.000000
|
||||
PATTERN-2 1.000000 0.850000 0.710000 0.700000 0.690000 0.740000
|
||||
PATTERN-2 0.790000 0.800000 0.800000 0.800000 0.810000 0.770000
|
||||
PATTERN-2 0.740000 0.740000 0.750000 0.780000 0.810000 0.800000
|
||||
;
|
||||
PATTERN-3 423.300000 225.000000 26.700000 26.700000 26.700000 26.700000
|
||||
PATTERN-3 26.700000 26.700000 26.700000 202.100000 377.500000 202.100000
|
||||
PATTERN-3 25.800000 25.900000 25.900000 26.000000 26.000000 26.100000
|
||||
PATTERN-3 26.100000 26.100000 26.200000 26.300000 26.300000 26.300000
|
||||
PATTERN-3 26.300000 26.300000 26.400000 239.900000 453.500000 240.500000
|
||||
PATTERN-3 27.400000 267.800000 508.100000 462.100000 416.000000 327.500000
|
||||
PATTERN-3 238.900000 133.000000 27.100000 27.100000 27.100000 27.100000
|
||||
PATTERN-3 27.100000 248.000000 468.900000 360.700000 252.400000 449.500000
|
||||
PATTERN-3 646.500000 336.600000 26.800000 198.900000 371.100000 198.400000
|
||||
PATTERN-3 25.800000 25.800000 25.800000 25.800000 25.800000 25.900000
|
||||
PATTERN-3 26.000000 26.000000 26.000000 26.100000 26.200000 26.200000
|
||||
PATTERN-3 26.200000 26.200000 26.300000 26.300000 26.300000 26.300000
|
||||
PATTERN-3 26.300000 228.300000 430.200000 657.200000 884.200000 884.200000
|
||||
PATTERN-3 884.300000 884.400000 884.500000 884.500000 884.500000 663.300000
|
||||
PATTERN-3 442.100000 234.200000 26.300000 47.200000 68.000000 352.200000
|
||||
PATTERN-3 636.400000 331.200000 26.000000 26.100000 26.100000 224.700000
|
||||
|
||||
[CURVES]
|
||||
;ID X-Value Y-Value
|
||||
;PUMP: PUMP: PUMP: PUMP: PUMP:
|
||||
CURVE-0 0.000000 445.000000
|
||||
CURVE-0 790.000000 365.000000
|
||||
CURVE-0 1460.000000 120.000000
|
||||
;PUMP: PUMP: PUMP: PUMP: PUMP:
|
||||
CURVE-1 0.000000 730.000000
|
||||
CURVE-1 1000.000000 500.000000
|
||||
CURVE-1 1350.000000 260.000000
|
||||
;PUMP: PUMP: PUMP: PUMP: PUMP:
|
||||
CURVE-2 0.000000 740.000000
|
||||
CURVE-2 2000.000000 530.000000
|
||||
CURVE-2 3240.000000 205.000000
|
||||
|
||||
[CONTROLS]
|
||||
|
||||
|
||||
|
||||
|
||||
[RULES]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[ENERGY]
|
||||
Global Efficiency 75.000000
|
||||
Global Price 0
|
||||
Demand Charge 0.000000
|
||||
|
||||
[EMITTERS]
|
||||
;Junction Coefficient
|
||||
|
||||
[QUALITY]
|
||||
;Node InitQual
|
||||
|
||||
[SOURCES]
|
||||
;Node Type Quality Pattern
|
||||
|
||||
[REACTIONS]
|
||||
;Type Pipe/Tank Coefficient
|
||||
|
||||
|
||||
[REACTIONS]
|
||||
Order Bulk 1
|
||||
Order Tank 1
|
||||
Order Wall 1
|
||||
Global Bulk 0.000000
|
||||
Global Wall 0.000000
|
||||
Limiting Potential 0
|
||||
Roughness Correlation 0
|
||||
|
||||
[MIXING]
|
||||
;Tank Model
|
||||
|
||||
[TIMES]
|
||||
Duration 1:00
|
||||
Hydraulic Timestep 0:30
|
||||
Quality Timestep 0:05
|
||||
Pattern Timestep 0:30
|
||||
Pattern Start 0:00
|
||||
Report Timestep 1:00
|
||||
Report Start 0:00
|
||||
Start ClockTime 8:00 AM
|
||||
Statistic NONE
|
||||
|
||||
[REPORT]
|
||||
Status No
|
||||
Summary No
|
||||
Page 0
|
||||
|
||||
[OPTIONS]
|
||||
Units GPM
|
||||
Headloss H-W
|
||||
Specific Gravity 1.000000
|
||||
Viscosity 1.1e-005
|
||||
Trials 40
|
||||
Accuracy 0.001
|
||||
CHECKFREQ 2
|
||||
MAXCHECK 10
|
||||
DAMPLIMIT 0
|
||||
Unbalanced Stop
|
||||
Pattern PATTERN-0
|
||||
Demand Multiplier 1.000000
|
||||
Emitter Exponent 0.500000
|
||||
Quality None mg/L
|
||||
Diffusivity 100
|
||||
Tolerance 0.010000
|
||||
|
||||
[COORDINATES]
|
||||
;Node X-Coord Y-Coord
|
||||
JUNCTION-0 10660.89 12699.67
|
||||
JUNCTION-1 232.34 198.38
|
||||
JUNCTION-2 10096.30 12963.00
|
||||
JUNCTION-3 8407.85 12291.24
|
||||
JUNCTION-4 9496.42 11972.35
|
||||
JUNCTION-5 9011.59 11369.17
|
||||
JUNCTION-6 9013.79 11080.51
|
||||
JUNCTION-7 9250.29 11199.54
|
||||
JUNCTION-8 9581.36 10752.81
|
||||
JUNCTION-9 10733.82 11618.76
|
||||
JUNCTION-10 9928.19 13544.98
|
||||
JUNCTION-11 8807.74 13153.79
|
||||
JUNCTION-12 7701.69 12907.40
|
||||
JUNCTION-13 6876.11 12848.50
|
||||
JUNCTION-14 8251.47 12444.71
|
||||
JUNCTION-15 8259.98 12265.86
|
||||
JUNCTION-16 6336.78 11924.32
|
||||
JUNCTION-17 11390.23 12721.86
|
||||
JUNCTION-18 11057.11 11140.34
|
||||
JUNCTION-19 18876.92 11353.89
|
||||
JUNCTION-20 17934.43 10606.32
|
||||
JUNCTION-21 17059.69 8043.82
|
||||
JUNCTION-22 17247.33 6999.27
|
||||
JUNCTION-23 17410.54 5888.57
|
||||
JUNCTION-24 17999.87 7351.33
|
||||
JUNCTION-25 18109.38 7395.83
|
||||
JUNCTION-26 19053.01 7351.84
|
||||
JUNCTION-27 19106.85 7553.33
|
||||
JUNCTION-28 19686.69 7293.81
|
||||
JUNCTION-29 21853.72 7382.88
|
||||
JUNCTION-30 17071.34 5128.88
|
||||
JUNCTION-31 15171.37 5740.90
|
||||
JUNCTION-32 13238.08 6332.93
|
||||
JUNCTION-33 12424.38 7418.33
|
||||
JUNCTION-34 1250.49 498.88
|
||||
JUNCTION-35 19673.06 10686.87
|
||||
JUNCTION-36 20403.76 10472.92
|
||||
JUNCTION-37 18985.90 10631.23
|
||||
JUNCTION-38 18607.97 10713.49
|
||||
JUNCTION-39 19166.06 10506.15
|
||||
JUNCTION-40 19099.54 10176.22
|
||||
JUNCTION-41 17861.02 9889.20
|
||||
JUNCTION-42 18385.78 9430.10
|
||||
JUNCTION-43 18490.35 6790.82
|
||||
JUNCTION-44 18645.08 7129.68
|
||||
JUNCTION-45 21195.36 8702.78
|
||||
JUNCTION-46 21278.01 7694.47
|
||||
JUNCTION-47 16855.92 8656.03
|
||||
JUNCTION-48 16904.90 7714.24
|
||||
JUNCTION-49 16927.55 6903.29
|
||||
JUNCTION-50 16551.63 7560.14
|
||||
JUNCTION-51 16614.08 8245.07
|
||||
JUNCTION-52 16228.29 7895.69
|
||||
JUNCTION-53 15807.37 6484.02
|
||||
JUNCTION-54 15143.01 5790.53
|
||||
JUNCTION-55 15452.25 5855.21
|
||||
JUNCTION-56 15614.75 6241.36
|
||||
JUNCTION-57 12641.61 7580.16
|
||||
JUNCTION-58 12889.67 5314.84
|
||||
JUNCTION-59 14170.10 5753.98
|
||||
JUNCTION-60 13812.99 6116.38
|
||||
JUNCTION-61 13623.60 5755.55
|
||||
JUNCTION-62 13553.54 5928.47
|
||||
JUNCTION-63 13138.41 6329.93
|
||||
JUNCTION-64 12860.32 6023.02
|
||||
JUNCTION-65 12449.32 5619.02
|
||||
JUNCTION-66 12955.43 5888.95
|
||||
JUNCTION-67 13301.09 5801.58
|
||||
JUNCTION-68 12578.78 5441.85
|
||||
JUNCTION-69 10677.34 4900.98
|
||||
JUNCTION-70 10181.06 5473.86
|
||||
JUNCTION-71 11140.24 5728.02
|
||||
JUNCTION-72 9885.02 5770.85
|
||||
JUNCTION-73 8969.76 5646.52
|
||||
JUNCTION-74 9308.85 5671.41
|
||||
JUNCTION-75 9946.22 6083.37
|
||||
JUNCTION-76 9607.47 6199.74
|
||||
JUNCTION-77 9051.85 6450.38
|
||||
JUNCTION-78 10166.55 6572.87
|
||||
JUNCTION-79 9485.75 6648.12
|
||||
JUNCTION-80 9568.49 6824.95
|
||||
JUNCTION-81 8741.43 6287.84
|
||||
JUNCTION-82 8978.26 6693.00
|
||||
JUNCTION-83 8345.05 6938.19
|
||||
JUNCTION-84 8751.56 6635.61
|
||||
JUNCTION-85 9279.58 7087.57
|
||||
JUNCTION-86 9876.13 7369.96
|
||||
JUNCTION-87 9804.94 7308.79
|
||||
JUNCTION-88 9879.39 6704.35
|
||||
JUNCTION-89 10235.12 6748.13
|
||||
JUNCTION-90 10216.80 7677.21
|
||||
JUNCTION-91 11071.02 7420.24
|
||||
JUNCTION-92 11350.46 7397.70
|
||||
JUNCTION-93 10935.56 7058.08
|
||||
JUNCTION-94 11167.17 7199.21
|
||||
JUNCTION-95 11919.97 7225.08
|
||||
JUNCTION-96 12279.69 6864.49
|
||||
JUNCTION-97 12009.44 6806.61
|
||||
JUNCTION-98 11504.57 6811.20
|
||||
JUNCTION-99 10798.43 6305.49
|
||||
JUNCTION-100 10495.63 6494.15
|
||||
JUNCTION-101 11456.95 7127.08
|
||||
JUNCTION-102 25891.06 3341.73
|
||||
JUNCTION-103 24306.48 3387.26
|
||||
JUNCTION-104 22275.22 7224.91
|
||||
JUNCTION-105 22205.02 7496.88
|
||||
JUNCTION-106 22698.70 7650.31
|
||||
JUNCTION-109 694.79 -18.12
|
||||
JUNCTION-110 862.27 205.84
|
||||
JUNCTION-111 8270.97 12259.89
|
||||
JUNCTION-112 8176.75 12053.87
|
||||
JUNCTION-113 9457.16 13032.31
|
||||
JUNCTION-114 9711.67 13144.65
|
||||
JUNCTION-115 12096.99 10755.48
|
||||
JUNCTION-116 11965.70 10646.33
|
||||
JUNCTION-117 14008.10 13489.78
|
||||
JUNCTION-118 13980.49 13520.62
|
||||
JUNCTION-119 22395.73 7684.44
|
||||
JUNCTION-120 22300.21 7726.14
|
||||
JUNCTION-121 23322.75 3866.35
|
||||
JUNCTION-122 23012.94 4255.69
|
||||
JUNCTION-123 20282.88 5465.74
|
||||
JUNCTION-124 20326.50 5404.05
|
||||
JUNCTION-125 21576.64 13167.78
|
||||
JUNCTION-126 21563.80 13128.27
|
||||
JUNCTION-128 269.38 602.32
|
||||
RESERVOIR-129 21.20 583.42
|
||||
TANK-130 21873.08 6912.07
|
||||
TANK-131 25900.14 3983.02
|
||||
|
||||
[VERTICES]
|
||||
;Link X-Coord Y-Coord
|
||||
|
||||
[LABELS]
|
||||
;X-Coord Y-Coord Label & Anchor Node
|
||||
16759.25 11079.85 "JUNCTION-20"
|
||||
16667.28 9546.98 "LINK-40"
|
||||
17326.41 8029.44 "JUNCTION-22"
|
||||
9539.44 8075.43 "JUNCTION-90"
|
||||
9064.25 10589.33 "JUNCTION-8"
|
||||
5891.21 11815.63 "JUNCTION-16"
|
||||
21235.22 8719.23 "JUNCTION-45"
|
||||
|
||||
[BACKDROP]
|
||||
DIMENSIONS -1295.01 -677.25 27195.15 14222.23
|
||||
UNITS None
|
||||
FILE
|
||||
OFFSET 0.00 0.00
|
||||
|
||||
[END]
|
|
@ -0,0 +1,134 @@
|
|||
[TITLE]
|
||||
|
||||
|
||||
[JUNCTIONS]
|
||||
;ID Elev Demand Pattern
|
||||
1 0 0 ;
|
||||
2 0 0 ;
|
||||
END 0 1 ;
|
||||
|
||||
[RESERVOIRS]
|
||||
;ID Head Pattern
|
||||
T 100 ;
|
||||
|
||||
[TANKS]
|
||||
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
|
||||
|
||||
[PIPES]
|
||||
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
|
||||
p1 T 1 1000 600 100 0 Open ;
|
||||
p2 2 END 1000 600 100 0 Open ;
|
||||
|
||||
[PUMPS]
|
||||
;ID Node1 Node2 Parameters
|
||||
pump 1 2 HEAD 1 ;
|
||||
|
||||
[VALVES]
|
||||
;ID Node1 Node2 Diameter Type Setting MinorLoss
|
||||
|
||||
[TAGS]
|
||||
|
||||
[DEMANDS]
|
||||
;Junction Demand Pattern Category
|
||||
|
||||
[STATUS]
|
||||
;ID Status/Setting
|
||||
|
||||
[PATTERNS]
|
||||
;ID Multipliers
|
||||
|
||||
[CURVES]
|
||||
;ID X-Value Y-Value
|
||||
;PUMP:
|
||||
1 0 133
|
||||
1 200 100
|
||||
1 400 2
|
||||
|
||||
[CONTROLS]
|
||||
|
||||
[RULES]
|
||||
|
||||
[ENERGY]
|
||||
Global Efficiency 75
|
||||
Global Price 0
|
||||
Demand Charge 0
|
||||
|
||||
[EMITTERS]
|
||||
;Junction Coefficient
|
||||
|
||||
[QUALITY]
|
||||
;Node InitQual
|
||||
|
||||
[SOURCES]
|
||||
;Node Type Quality Pattern
|
||||
|
||||
[REACTIONS]
|
||||
;Type Pipe/Tank Coefficient
|
||||
|
||||
|
||||
[REACTIONS]
|
||||
Order Bulk 1
|
||||
Order Tank 1
|
||||
Order Wall 1
|
||||
Global Bulk 0
|
||||
Global Wall 0
|
||||
Limiting Potential 0
|
||||
Roughness Correlation 0
|
||||
|
||||
[MIXING]
|
||||
;Tank Model
|
||||
|
||||
[TIMES]
|
||||
Duration 0
|
||||
Hydraulic Timestep 1:00
|
||||
Quality Timestep 0:05
|
||||
Pattern Timestep 1:00
|
||||
Pattern Start 0:00
|
||||
Report Timestep 1:00
|
||||
Report Start 0:00
|
||||
Start ClockTime 12 am
|
||||
Statistic None
|
||||
|
||||
[REPORT]
|
||||
Status No
|
||||
Summary No
|
||||
Page 0
|
||||
|
||||
[OPTIONS]
|
||||
Units LPS
|
||||
Headloss H-W
|
||||
Specific Gravity 1
|
||||
Viscosity 1
|
||||
Trials 40
|
||||
Accuracy 0.001
|
||||
CHECKFREQ 2
|
||||
MAXCHECK 10
|
||||
DAMPLIMIT 0
|
||||
Unbalanced Continue 10
|
||||
Pattern 1
|
||||
Demand Multiplier 1.0
|
||||
Emitter Exponent 0.5
|
||||
Quality None mg/L
|
||||
Diffusivity 1
|
||||
Tolerance 0.01
|
||||
|
||||
[COORDINATES]
|
||||
;Node X-Coord Y-Coord
|
||||
1 1583.33 5000.00
|
||||
2 3416.67 5037.04
|
||||
END 5435.19 5000.00
|
||||
T -435.19 5074.07
|
||||
|
||||
[VERTICES]
|
||||
;Link X-Coord Y-Coord
|
||||
|
||||
[LABELS]
|
||||
;X-Coord Y-Coord Label & Anchor Node
|
||||
|
||||
[BACKDROP]
|
||||
DIMENSIONS 0.00 0.00 10000.00 10000.00
|
||||
UNITS None
|
||||
FILE
|
||||
OFFSET 0.00 0.00
|
||||
|
||||
[END]
|
|
@ -0,0 +1,198 @@
|
|||
|
||||
-----------------------------------
|
||||
| HAMMER Engine 08.11.06.113 |
|
||||
-------------------------------------------------------------------------------
|
||||
Based on Technology Originally Developed by GENIVAR(EHG). Compiled by IVF.
|
||||
Copyright (C) 2011 Bentley Systems, Incorporated. All Rights Reserved.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Type of Run: Full
|
||||
Date of Run: 03/21/20
|
||||
Time of Run: 12:33 pm
|
||||
Data File: Tnet0.wtg.sqlite.$$$
|
||||
Hydrograph File: Not Selected
|
||||
Labels: Long
|
||||
|
||||
|
||||
*** SYSTEM INFORMATION ***
|
||||
|
||||
---------------------------------------------------
|
||||
| ITEM | VALUE |
|
||||
---------------------------------------------------
|
||||
| | |
|
||||
| Time Step (s) | |
|
||||
| Automatic | 0.1000 |
|
||||
| User-Selected | 0.1000 |
|
||||
| Total Number | 600 |
|
||||
| Total Simulation Time (s) | 60.00 |
|
||||
| Units | cms, m |
|
||||
| Total Number of Nodes | 3 |
|
||||
| Total Number of Pipes | 2 |
|
||||
| Specific Gravity | 1.00 |
|
||||
| Wave Speed (m/s) | 1200 |
|
||||
| Vapour Pressure(m) | -10.0 |
|
||||
| Reports | |
|
||||
| Number of Nodes | All |
|
||||
| Number of Time Steps | All |
|
||||
| Number of Paths | 0 |
|
||||
| Output | |
|
||||
| Standard | No |
|
||||
| Cavities (Open/Close) | No |
|
||||
| Adjustments | |
|
||||
| Adjusted Variable | Wave Speed |
|
||||
| Warning Limit (%) | 50.00 |
|
||||
| Minimize | Adjustments |
|
||||
| Calculate Transient Forces | No |
|
||||
| Use Auxiliary Data File | Yes |
|
||||
---------------------------------------------------
|
||||
|
||||
*** PREFERENCE AND DEBUG INFORMATION ***
|
||||
|
||||
--------------------------------------------------------
|
||||
| ITEM | VALUE |
|
||||
--------------------------------------------------------
|
||||
| | |
|
||||
| Tolerances | |
|
||||
| Initial Flow Consistency Value | 0.0006 |
|
||||
| Initial Head Consistency Value | 0.030 |
|
||||
| Criterion for Fr. Coef. Flag | 0.020 |
|
||||
| Adjustments | |
|
||||
| Elevation Decrease | 0.00 |
|
||||
| Extreme Heads Display | |
|
||||
| All Times | Yes |
|
||||
| After First Extreme | No |
|
||||
| Friction Coefficient | |
|
||||
| Model | Steady |
|
||||
| 1,000,000 x Kinematic Viscosity | n/a |
|
||||
| Debug Parameters | |
|
||||
| Level | Null |
|
||||
--------------------------------------------------------
|
||||
|
||||
*** NODE INFORMATION ***
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
| | CATEGORY | TYPE | ELEVATION | | | VAP PRESS |
|
||||
| LABEL | DESCRIPTION | DESCRIPTION | (m) | X COORD | Y COORD | (m) |
|
||||
----------------------------------------------------------------------------------------------------
|
||||
| | | | | | | |
|
||||
| 1 | Reservoir | 1 or more | 0.0 | 0.0 | 0.0 | -10.0 |
|
||||
| D2A-3 | Valve | to atmos. | 0.0 | 2613.2 | 10.3 | -10.0 |
|
||||
| 2 | Junction | 2 or more | 0.0 | 1152.3 | 10.3 | -10.0 |
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
*** NODE DATA ***
|
||||
|
||||
----------------------------------------------------------------------
|
||||
| LABEL | DATA |
|
||||
----------------------------------------------------------------------
|
||||
| | |
|
||||
| 1 | |
|
||||
| | |
|
||||
| D2A-3 | Initial/typical Outflow: 0.0500 |
|
||||
| | Corresponding Pressure: 749.9 |
|
||||
| | Operating Time: 2 |
|
||||
| | Time Lag: 0 |
|
||||
| | |
|
||||
| 2 | |
|
||||
----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
*** CONNECTIVITY ***
|
||||
|
||||
---------------------------------------------
|
||||
| PIPE LABEL | FROM NODE | TO NODE |
|
||||
---------------------------------------------
|
||||
| | | |
|
||||
| 2 | 2 | D2A-3 |
|
||||
| 1 | 1 | 2 |
|
||||
---------------------------------------------
|
||||
|
||||
|
||||
|
||||
*** PIPE INFORMATION ***
|
||||
|
||||
-----------------------------------------------------------------------------------------
|
||||
| | LENGTH | DIAMETER | WAVESPEED | D-W | CHECK |
|
||||
| LABEL | (m) | (mm) | (m /s) | FR. COEF. | VALVE |
|
||||
-----------------------------------------------------------------------------------------
|
||||
| | | | | | |
|
||||
| 2 | 2400.0 | 1200.00 | 1200.0 | *0.021 | |
|
||||
| 1 | 1200.0 | 600.00 | 1200.0 | 0.018 | |
|
||||
-----------------------------------------------------------------------------------------
|
||||
* Darcy-Weisbach friction coefficient exceeds 0.020
|
||||
|
||||
*** INITIAL PIPE CONDITIONS ***
|
||||
|
||||
-------------------------------------------------------------------------------------
|
||||
| FROM | HEAD | TO | HEAD | FLOW | VEL |
|
||||
| NODE | (m) | NODE | (m) | (cms) | (m/s) |
|
||||
-------------------------------------------------------------------------------------
|
||||
| | | | | | |
|
||||
| 2 | 749.9 | D2A-3 | 749.9 | 0.0 | 0.0 |
|
||||
| 1 | 750.0 | 2 | 749.9 | 0.0 | 0.2 |
|
||||
-------------------------------------------------------------------------------------
|
||||
|
||||
-----------------------------------
|
||||
| HAMMER Engine 08.11.06.113 |
|
||||
-------------------------------------------------------------------------------
|
||||
Based on Technology Originally Developed by GENIVAR(EHG). Compiled by IVF.
|
||||
Copyright (C) 2011 Bentley Systems, Incorporated. All Rights Reserved.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
*** List of end points with possible discrepancies in input values ***
|
||||
|
||||
NOTE: End points where initial surges generated are included.
|
||||
|
||||
2:D2A-3
|
||||
|
||||
-----------------------------------
|
||||
| HAMMER Engine 08.11.06.113 |
|
||||
-------------------------------------------------------------------------------
|
||||
Based on Technology Originally Developed by GENIVAR(EHG). Compiled by IVF.
|
||||
Copyright (C) 2011 Bentley Systems, Incorporated. All Rights Reserved.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
*** LIST OF SORTED VAPOUR AND AIR POCKETS ***
|
||||
|
||||
|
||||
No vapour/air pockets were formed.
|
||||
|
||||
|
||||
|
||||
-----------------------------------
|
||||
| HAMMER Engine 08.11.06.113 |
|
||||
-------------------------------------------------------------------------------
|
||||
Based on Technology Originally Developed by GENIVAR(EHG). Compiled by IVF.
|
||||
Copyright (C) 2011 Bentley Systems, Incorporated. All Rights Reserved.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
*** SUMMARY FOR Default Project-Base-Tnet0.wtg.sqlite.$$$ ***
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
| END | MAX. PRESS. | MIN. PRESS. | MAX. HEAD | MIN. HEAD |
|
||||
| POINT | (mH) | (mH) | (m) | (m) |
|
||||
--------------------------------------------------------------------------------
|
||||
| | | | | |
|
||||
| 2:2 | 759.3 | 740.6 | 759.3 | 740.6 |
|
||||
| 2:D2A-3 | 761.8 | 738.3 | 761.8 | 738.3 |
|
||||
| 1:1 | 750.0 | 750.0 | 750.0 | 750.0 |
|
||||
| 1:2 | 759.3 | 740.6 | 759.3 | 740.6 |
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*** Maximum pressure in entire network is 761.8 mH at point 2:D2A-3
|
||||
|
||||
*** Minimum pressure in entire network is 738.3 mH at point 2:D2A-3
|
||||
|
||||
|
||||
|
||||
Elapsed time: 0 s.
|
|
@ -0,0 +1,53 @@
|
|||
Page 1 Sat Mar 21 12:33:32 2020
|
||||
|
||||
******************************************************************
|
||||
* W A T E R G E M S *
|
||||
* Hydraulic and Water Quality *
|
||||
* Analysis for Pipe Networks *
|
||||
* Version 8.11 *
|
||||
******************************************************************
|
||||
|
||||
|
||||
Number of Junctions................ 2
|
||||
Number of Reservoirs............... 1
|
||||
Number of Tanks ................... 0
|
||||
Number of Pipes ................... 2
|
||||
Number of Pumps ................... 0
|
||||
Number of Variable Speed Pumps .... 0
|
||||
Number of Valves .................. 0
|
||||
Headloss Formula .................. Darcy-Weisbach
|
||||
Hydraulic Timestep ................ 1.00 hrs
|
||||
Hydraulic Accuracy ................ 0.001000
|
||||
Status Check Frequency ............ 2
|
||||
Maximum Trials Checked ............ 10
|
||||
Damping Limit Threshold ........... 0.000000
|
||||
Maximum Trials .................... 40
|
||||
Quality Analysis .................. None
|
||||
Specific Gravity .................. 1.00
|
||||
Relative Kinematic Viscosity ...... 0.99
|
||||
Relative Chemical Diffusivity ..... -769230769230769150.00
|
||||
Demand Multiplier ................. 1.00
|
||||
Total Duration .................... 0.00 hrs
|
||||
Reporting Criteria:
|
||||
No Nodes
|
||||
No Links
|
||||
|
||||
[Analysis Started]
|
||||
Sat Mar 21 12:33:32 2020
|
||||
|
||||
[Steady State]
|
||||
< 0:00:00 Balancing the network:>
|
||||
Trial 1: relative flow change = 1.968338
|
||||
Trial 2: relative flow change = 0.152481
|
||||
Trial 3: relative flow change = 0.011763
|
||||
Trial 4: relative flow change = 0.000069
|
||||
< 0:00:00 Balanced after 4 trials; relative flow change = 0.000069>
|
||||
<Flow Summary>
|
||||
Flow Supplied 792.48 gpm
|
||||
Flow Demanded 792.48 gpm
|
||||
Flow Stored 0.00 gpm
|
||||
<Flow Summary>
|
||||
0:00:00 Reservoir 63 is emptying
|
||||
|
||||
[Analysis Ended]
|
||||
Sat Mar 21 12:33:32 2020
|