Files
EPANET/tests/scripts/vb6_binary_files_compare/basNetRes.bas
2018-04-09 15:03:03 +03:00

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