189 lines
7.1 KiB
QBasic
189 lines
7.1 KiB
QBasic
Attribute VB_Name = "basNetRes"
|
|
Public Type typNetRes
|
|
nNodes As Long
|
|
nLinks As Long
|
|
|
|
NodesID() As String
|
|
LinksID() As String
|
|
|
|
NodesDemand() As Single
|
|
NodesHead() As Single
|
|
NodesPressure() As Single
|
|
NodesQuality() As Single
|
|
|
|
LinksFlow() As Single
|
|
LinksHeadloss() As Single
|
|
LinksQuality() As Single
|
|
LinksSetting() As Single
|
|
LinksStatus() As Single
|
|
LinksVelocity() As Single
|
|
|
|
End Type
|
|
Public Function ReadOutputFile(OutFile As String, NetRes As typNetRes)
|
|
'---------------------------------------------------------------------------------------
|
|
Dim i As Long, F As Long, r As Long, nRep As Long, j As Long
|
|
Dim tmpArr() As Single
|
|
Dim pos As Long, N As Long
|
|
Dim tmpLong As Long, tmpSingle As Single
|
|
Dim ReportingTimeStep As Long, ReportingStartTime As Long
|
|
Dim SimulationDuration As Long
|
|
Dim ProblemTitletLine As String * 80
|
|
Dim NumberOfNodes As Long
|
|
Dim NumberOfLinks As Long
|
|
Dim NumberOfReservoirsAndTanks As Long
|
|
Dim NumberOfPumps As Long
|
|
Dim NumberOfValves As Long
|
|
Dim WaterQualityOption As Long
|
|
Dim FlowUnitsOption As Long, PressureUnitsOption As Long
|
|
Dim NameOfFile As String * 260, tmpString32 As String * 32
|
|
Dim ii As Long
|
|
Dim WarningFlag As Long
|
|
|
|
With NetRes
|
|
pos = 1: N = 0
|
|
F = FreeFile
|
|
Open OutFile For Binary As #F
|
|
Get #F, pos, tmpLong: pos = pos + 4
|
|
Get #F, pos, tmpLong: pos = pos + 4
|
|
Get #F, pos, NumberOfNodes: pos = pos + 4
|
|
Get #F, pos, NumberOfReservoirsAndTanks: pos = pos + 4
|
|
Get #F, pos, NumberOfLinks: pos = pos + 4
|
|
Get #F, pos, NumberOfPumps: pos = pos + 4
|
|
Get #F, pos, NumberOfValves: pos = pos + 4
|
|
Get #F, pos, WaterQualityOption: pos = pos + 4
|
|
Get #F, pos, tmpLong: pos = pos + 4
|
|
Get #F, pos, FlowUnitsOption: pos = pos + 4
|
|
Get #F, pos, PressureUnitsOption: pos = pos + 4
|
|
Get #F, pos, tmpLong: pos = pos + 4
|
|
Get #F, pos, ReportingStartTime: pos = pos + 4
|
|
Get #F, pos, ReportingTimeStep: pos = pos + 4
|
|
Get #F, pos, SimulationDuration: pos = pos + 4
|
|
Get #F, pos, ProblemTitletLine: pos = pos + 80
|
|
Get #F, pos, ProblemTitletLine: pos = pos + 80
|
|
Get #F, pos, ProblemTitletLine: pos = pos + 80
|
|
Get #F, pos, NameOfFile: pos = pos + 260
|
|
Get #F, pos, NameOfFile: pos = pos + 260
|
|
Get #F, pos, tmpString32: pos = pos + 32
|
|
Get #F, pos, tmpString32: pos = pos + 32
|
|
.nNodes = NumberOfNodes
|
|
.nLinks = NumberOfLinks
|
|
ReDim .NodesID(.nNodes)
|
|
For j = 1 To NumberOfNodes
|
|
Get #F, pos, tmpString32: pos = pos + 32
|
|
i = InStr(1, tmpString32, Chr(0))
|
|
.NodesID(j) = Mid(tmpString32, 1, i - 1)
|
|
Next j
|
|
ReDim .LinksID(.nLinks)
|
|
For j = 1 To NumberOfLinks
|
|
Get #F, pos, tmpString32: pos = pos + 32
|
|
i = InStr(1, tmpString32, Chr(0))
|
|
.LinksID(j) = Mid(tmpString32, 1, i - 1)
|
|
Next j
|
|
For j = 1 To NumberOfLinks * 3 'Index of Start Node of Each Link + Index of End Node of Each Link + Type Code of Each Link
|
|
Get #F, pos, tmpLong: pos = pos + 4
|
|
Next j
|
|
For j = 1 To NumberOfReservoirsAndTanks 'Node Index of Each Tank
|
|
Get #F, pos, tmpLong: pos = pos + 4
|
|
Next j
|
|
For j = 1 To NumberOfReservoirsAndTanks 'Cross-Sectional Area of Each Tank
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
Next j
|
|
For j = 1 To NumberOfNodes 'Elevation of Each Node
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Length of Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Diameter of Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
Next j
|
|
For j = 1 To NumberOfPumps 'Energy Use Section
|
|
Get #F, pos, tmpLong: pos = pos + 4 'Pump Index in List of Links
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Pump Utilization (%)
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Average Efficiency (%)
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Average Kwatts/Million Gallons (/Meter3)
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Average Kwatts
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Peak Kwatts
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Average Cost Per Day
|
|
Next j
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Overall Peak Energy Usage
|
|
|
|
'reporting
|
|
nRep = SimulationDuration / ReportingTimeStep + 1
|
|
ReDim tmpArr(nRep)
|
|
ReDim .NodesDemand(.nNodes, nRep)
|
|
ReDim .NodesHead(.nNodes, nRep)
|
|
ReDim .NodesPressure(.nNodes, nRep)
|
|
ReDim .NodesQuality(.nNodes, nRep)
|
|
|
|
ReDim .LinksFlow(.nLinks, nRep)
|
|
ReDim .LinksHeadloss(.nLinks, nRep)
|
|
ReDim .LinksQuality(.nLinks, nRep)
|
|
ReDim .LinksSetting(.nLinks, nRep)
|
|
ReDim .LinksStatus(.nLinks, nRep)
|
|
ReDim .LinksVelocity(.nLinks, nRep)
|
|
|
|
For r = 1 To nRep
|
|
For j = 1 To NumberOfNodes 'Demand at Each Node
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.NodesDemand(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfNodes 'Hydraulic Head at Each Node
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.NodesHead(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfNodes 'Pressure at Each Node
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.NodesPressure(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfNodes 'Water Quality at Each Node
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.NodesPressure(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Flow in Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.LinksFlow(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Velocity in Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.LinksVelocity(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Headloss per 1000 Units of Length for Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.LinksHeadloss(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Average Water Quality in Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.LinksQuality(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Status Code for Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.LinksStatus(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Setting for Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
.LinksSetting(j, r) = tmpSingle
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Reaction Rate for Each Link (mass/L/day)
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
Next j
|
|
For j = 1 To NumberOfLinks 'Friction Factor for Each Link
|
|
Get #F, pos, tmpSingle: pos = pos + 4
|
|
Next j
|
|
Next r
|
|
|
|
'Epilog Section
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Average bulk reaction rate (mass/hr)
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Average wall reaction rate (mass/hr)
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Average tank reaction rate (mass/hr)
|
|
Get #F, pos, tmpSingle: pos = pos + 4 'Average source inflow rate (mass/hr)
|
|
Get #F, pos, tmpLong: pos = pos + 4 'Number of Reporting Periods
|
|
Get #F, pos, WarningFlag: pos = pos + 4 'Warning Flag
|
|
Get #F, pos, tmpLong: pos = pos + 4 'Magic Number ( = 516114521)
|
|
|
|
Close #F
|
|
End With
|
|
|
|
End Function
|
|
|