Skip to main content

SWMM5 calls from python

Project description

SWMM5 Python calling interface (c) Assela Pathirana Released under GNU GPL v.3

Release History:

version 1.0.0.1 first production (non-beta) release.

version 1.1.0.1 version with new SWMM 5.1 version (instead of SWMM 5.0)

Installation:

Windows:

As of version 1.0.0.1 SWMM5 is verified to work with Python 3 as well.

Now (as of version 1.0.0.1) the package is provided as python Wheel too. This means for windows the following command should install SWMM5

pip install SWMM5

Alternatively, use the SWMM5-x.y.z.k.win32.exe file downloaded from the repository for click and install.

If you have your own C compilers, then SWMM5-x.y.z.k.zip can be used to install as

python setup.py install
Linux:

Download SWMM5-x.y.z.k.zip can be used to install as

python setup.py install

Or, just with,

pip install SWMM5

Usage:

New Interface:

One should always use the new interface. The old interface (below) is left only for backward compatibility. The key features of new interface are
  • More pythonic interface

  • A number of convienience functions

Import new interface and run SWMM

>>> from swmm5.swmm5tools import SWMM5Simulation
>>> st=SWMM5Simulation("swmm5/examples/simple/swmm5Example.inp")
Example 1:

Retrive simulation properties.

>>> st.SWMM5_Version()          # Version of underlying SWMM5 engine.
'5.1.000'
>>> st.SWMM5_VERSION            # same thing as an integer
51000
>>> st.Flow_Units()           # Flow units.
'LPS'
>>> st.SWMM_FlowUnits         # returns flow units as an index.  0 = CFS, 1 = GPM, 2 = MGD, 3 = CMS, 4 = LPS, and 5 = LPD
4
>>> st.SWMM_Nperiods          # number of reporting periods
360
>>> st.SWMM_Nsubcatch         # number of subcatchments
6
>>> st.SWMM_Nnodes            # number of drainage system nodes
12
>>> st.SWMM_Nlinks            # number of drainage system links
11
>>> st.SWMM_Npolluts          # number of pollutants tracked
0
>>> print ("%.2f"%st.SWMM_StartDate)  # start date of simulation
40844.00
>>> st.SWMM_ReportStep
60
>>>
Example 2:

Prints available entities

>>> st.entityList()
['SUBCATCH', 'NODE', 'LINK', 'SYS']
>>> st.Subcatch()
['A2', 'A1', 'A3', 'A4', 'A5', 'E1']
>>> st.Node()
['J1', 'J2', 'J3', 'J4', 'J5', 'J6', 'J7', 'J8', 'J9', 'J10', 'J11', 'J12']
>>> st.Link()
['T4-1', 'T4-2', 'T4-3', 'T1-1', 'T1-2', 'T2-1', 'T2-2', 'T2-3', 'T3-1', 'T3-2', 'T5']
>>> st.Sys()
['SYS']
>>> st.Pollutants() # no pollutants in this file.
[]
>>> wq=SWMM5Simulation("swmm5/examples/waterquality/Example5-EXP5.1.inp")
>>> wq.SWMM_Npolluts
1
>>> wq.Pollutants() # TSS in this case.
['TSS']
>>> lst=st.varList("SUBCATCH")
>>> print ("\n".join( "%4i %s"% (i,v) for i,v in  enumerate(lst))) # print in a column with index.
   0 Rainfall (in/hr or mm/hr)
   1 Snow depth (in or mm)
   2 Evaporation + infiltration losses (in/hr or mm/hr)
   3 Runoff rate (flow units)
   4 Groundwater outflow rate (flow units)
   5 Groundwater water table elevation (ft or m)
>>> lst=wq.varList("SUBCATCH") # for the network that has pollutants.
>>> print ("\n".join( "%4i %s"% (i,v) for i,v in  enumerate(lst))) # print in a column with index.
   0 Rainfall (in/hr or mm/hr)
   1 Snow depth (in or mm)
   2 Evaporation + infiltration losses (in/hr or mm/hr)
   3 Runoff rate (flow units)
   4 Groundwater outflow rate (flow units)
   5 Groundwater water table elevation (ft or m)
   6 Runoff concentration of TSS (mg/l)

>>> lst=wq.varList("NODE")
>>> print ("\n".join( "%4i %s"% (i,v) for i,v in  enumerate(lst))) # print in a column with index.
   0 Depth of water above invert (ft or m)
   1 Hydraulic head (ft or m)
   2 Volume of stored + ponded water (ft3 or m3)
   3 Lateral inflow (flow units)
   4 Total inflow (lateral + upstream) (flow units)
   5 Flow lost to flooding (flow units)
   6 Concentration of TSS (mg/l)
>>> lst=wq.varList("LINK")
>>> print ("\n".join( "%4i %s"% (i,v) for i,v in  enumerate(lst))) # print in a column with index.
   0 Flow rate (flow units)
   1 Flow depth (ft or m)
   2 Flow velocity (ft/s or m/s)
   3 Froude number
   4 Capacity (fraction of conduit filled)
   5 Concentration of TSS (mg/l)
>>> lst=wq.varList("SYS")
>>> print ("\n".join( "%4i %s"% (i,v) for i,v in  enumerate(lst))) # print in a column with index.
   0 Air temperature (deg. F or deg. C)
   1 Rainfall (in/hr or mm/hr)
   2 Snow depth (in or mm)
   3 Evaporation + infiltration loss rate (in/hr or mm/hr)
   4 Runoff flow (flow units)
   5 Dry weather inflow (flow units)
   6 Groundwater inflow (flow units)
   7 RDII inflow (flow units)
   8 User supplied direct inflow (flow units)
   9 Total lateral inflow (sum of variables 4 to 8) (flow units)
  10 Flow lost to flooding (flow units)
  11 Flow leaving through outfalls (flow units)
  12 Volume of stored water (ft3 or m3)
  13 Evaporation rate (in/day or mm/day)
Example 3:

Results

>>> r=list(st.Results('NODE','J1', 4)) # total inflow into node "J1". The Results function returns a generator. We convert it to a list.
>>> print ("\n".join( "%5.2f"% (i) for i in  r[0:10])) # Lets print the first 10 items.
 0.00
 0.00
 0.00
 0.03
 3.32
13.71
28.17
45.93
64.62
83.10
>>> r=st.Results('SYS','SYS', 1)  #1 Rainfall (in/hr or mm/hr). This time we use the generator directly.
>>> print ("\n".join(["%5.2f"% (i) for i in  r]))  #doctest: +ELLIPSIS
 0.00
 0.00
 0.00
 7.20
 7.20
 7.20
 7.60
 7.60
 7.60
 8.00
 ...
 0.00
Example 4:

Pollutant Concentration

>>> wq.Subcatch()
['S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7']

Extracting of pollutants do not work properly in this version. Expect a fix later.

>>> r=list(wq.Results('SUBCATCH','S3', 6)) # TSS out of catchment 'S3'. We convert it to a list.
>>> print ("\n".join( "%5.2f"% (i) for i in  r[0:10])) # Lets print the first 10 items.
 0.00
 0.00
 0.00
 0.00
 0.00
 0.00
 0.00
 0.00
 0.00
 0.00

Above water quality TSS values are wrong!!

Example 5:

Tracking output files

>>> simtemp=SWMM5Simulation("swmm5/examples/simple/swmm5Example.inp")
>>> f=simtemp.getFiles()
>>> f #doctest: +ELLIPSIS
['swmm5/examples/simple/swmm5Example.inp', '...swmm5Example....rpt', '...swmm5Example....dat']
>>> from os.path import isfile
>>> [isfile(x) for x in f] # do they exist in the operating system.
[True, True, True]
>>> simtemp.clean()
>>> [isfile(x) for x in f] # do they exist in the operating system.
[True, False, False]

Thread Safety

Calling SWMM5Simulation with input file as only argument (SWMM5Simulation will choose the report and binary output file names) and subsequent use of the object to retreive results is threadsafe to the degree I could verify.

There is a test test_multithreading.py in the test directory, which can be run to test this to some degree. It should be run as python test_multithreading.py.

Legacy interface

Note:

This is provided only for backward compatibility. Always use the new interface (above).

import swmm5 module

>>> from swmm5 import swmm5 as sw
>>>

run a sample network

>>> ret=sw.RunSwmmDll("./swmm5/examples/simple/swmm5Example.inp","swmm5Example.rpt","swmm5.dat")
>>>

should return 0 if everything is OK (according to to swmm convension)

>>> print (ret)
0
>>>

Now it is possible to retrive results. Open the swmm results file

>>> sw.OpenSwmmOutFile("swmm5.dat")
0
>>>

How many time steps are there?

>>> sw.cvar.SWMM_Nperiods
360
>>>

Let’s retrive rainfall in the system. Systems rainfall at fifth timestep

>>> ret,x=sw.GetSwmmResult(3,0,1,5)
>>> print ('%.2f' % x)
7.20
>>>

Acknowlegements

  • David Townshend

  • Tim Cera

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

SWMM5-1.1.0.2dev.zip (382.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

SWMM5-1.1.0.2dev.win-amd64-py3.3.exe (482.2 kB view details)

Uploaded Source

SWMM5-1.1.0.2dev.win-amd64-py2.7.exe (484.1 kB view details)

Uploaded Source

SWMM5-1.1.0.2dev.win32-py3.3.exe (401.2 kB view details)

Uploaded Source

SWMM5-1.1.0.2dev.win32-py2.7.exe (403.3 kB view details)

Uploaded Source

SWMM5-1.1.0.2dev-cp33-none-win_amd64.whl (254.3 kB view details)

Uploaded CPython 3.3Windows x86-64

SWMM5-1.1.0.2dev-cp33-none-win32.whl (204.6 kB view details)

Uploaded CPython 3.3Windows x86

SWMM5-1.1.0.2dev-cp27-none-win_amd64.whl (254.7 kB view details)

Uploaded CPython 2.7Windows x86-64

SWMM5-1.1.0.2dev-cp27-none-win32.whl (201.5 kB view details)

Uploaded CPython 2.7Windows x86

File details

Details for the file SWMM5-1.1.0.2dev.zip.

File metadata

  • Download URL: SWMM5-1.1.0.2dev.zip
  • Upload date:
  • Size: 382.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for SWMM5-1.1.0.2dev.zip
Algorithm Hash digest
SHA256 1cacd13e5b7615530d2054778bab3828d48c064fe8f572f0071e0f6137c8a422
MD5 b2aaa4496859fe9405cda83d4d96cb96
BLAKE2b-256 a3819f403389b1efeb00891f7396c44ce3bafea8308b8ecc411844d9ab8dc8ac

See more details on using hashes here.

File details

Details for the file SWMM5-1.1.0.2dev.win-amd64-py3.3.exe.

File metadata

File hashes

Hashes for SWMM5-1.1.0.2dev.win-amd64-py3.3.exe
Algorithm Hash digest
SHA256 06ce0d44f7906550224878a154183ea36aa721e6a60f0051a62a05a594df2304
MD5 e0fb2edcd04dba02bce53c68b934a808
BLAKE2b-256 7cf9c80d6c63ec2be59fc6af77c523e92aef16134fde292521432fe26c274490

See more details on using hashes here.

File details

Details for the file SWMM5-1.1.0.2dev.win-amd64-py2.7.exe.

File metadata

File hashes

Hashes for SWMM5-1.1.0.2dev.win-amd64-py2.7.exe
Algorithm Hash digest
SHA256 cdc9149f9464bd0bf96c6c4acd86d6b4709705cf1e3c9f306b9b9337b440aace
MD5 40acf89ced82b9f224fdc8b0a94146de
BLAKE2b-256 d10d984e4f08086da3ed24e086d73116fabce907d659d4d198cc20bafba590c9

See more details on using hashes here.

File details

Details for the file SWMM5-1.1.0.2dev.win32-py3.3.exe.

File metadata

File hashes

Hashes for SWMM5-1.1.0.2dev.win32-py3.3.exe
Algorithm Hash digest
SHA256 c5d89cf0911a763d917652289e534329bb4de737231fa3bd27fd07c37dafd56d
MD5 905a0f43f367ecc2a0ca77dba49228a5
BLAKE2b-256 4b5d64d787f6919f88eb456ec01a7d0b5125919acf6c5a8c331a09d4fbe51c3d

See more details on using hashes here.

File details

Details for the file SWMM5-1.1.0.2dev.win32-py2.7.exe.

File metadata

File hashes

Hashes for SWMM5-1.1.0.2dev.win32-py2.7.exe
Algorithm Hash digest
SHA256 2e8badc106b744f1e68d2e2f13ec976368d7a9fb0e1acf813a191435760b61e7
MD5 73d46a585130f757973b5e386a3839e7
BLAKE2b-256 59cb04a78dca5ec919850d25a03026dd0d59423ddcb885b4baaf6ac57096871f

See more details on using hashes here.

File details

Details for the file SWMM5-1.1.0.2dev-cp33-none-win_amd64.whl.

File metadata

File hashes

Hashes for SWMM5-1.1.0.2dev-cp33-none-win_amd64.whl
Algorithm Hash digest
SHA256 a3da8f083aab10b11d5f9cab5585fc30d8636275d770b9d71360d601b34f8da3
MD5 975bd83d4fb4cb60cb60cad5891eb6c9
BLAKE2b-256 c89c121d64a57256696d4a07ea7c967205fe1b9428f3eacc4095654dae065fa9

See more details on using hashes here.

File details

Details for the file SWMM5-1.1.0.2dev-cp33-none-win32.whl.

File metadata

File hashes

Hashes for SWMM5-1.1.0.2dev-cp33-none-win32.whl
Algorithm Hash digest
SHA256 d6e58f2879c2f9b6407e00a80f789248c0b12e36275ff7eaae1cf8d4ec06f630
MD5 50a42058c7b9af2fba17a91324db7bdf
BLAKE2b-256 ca97e03ee5c61c2c1940816c32580ae49ad20269fcfcb695c9ed2af1d3ab037c

See more details on using hashes here.

File details

Details for the file SWMM5-1.1.0.2dev-cp27-none-win_amd64.whl.

File metadata

File hashes

Hashes for SWMM5-1.1.0.2dev-cp27-none-win_amd64.whl
Algorithm Hash digest
SHA256 db12fb8ef6b8ea32664caad188a15d680ae78a88de744d1d34b7da6baf97b3f6
MD5 a43a387820f2684cf834a27a6b375e55
BLAKE2b-256 d0da689b7c887dcffb941497ceffed7f296e341688b2376fdaa2cce084cfa1ae

See more details on using hashes here.

File details

Details for the file SWMM5-1.1.0.2dev-cp27-none-win32.whl.

File metadata

File hashes

Hashes for SWMM5-1.1.0.2dev-cp27-none-win32.whl
Algorithm Hash digest
SHA256 907eec0ebcd29ef0fc1d28c61e9bf31319bc35543eae8f696017ce5f765748ca
MD5 7ee84fb3a2552c9b30f44b34d004d631
BLAKE2b-256 433dcc62e4cec9103d1c80ee816c88e6c09b6e91b9a7cf325d71a4fef662198f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page