Initial commit of VB6 code to perform comparison of binary output files
Related to #16
This commit is contained in:
35
tests/scripts/vb6_binary_files_compare/BinaryCompare.vbp
Normal file
35
tests/scripts/vb6_binary_files_compare/BinaryCompare.vbp
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
Type=Exe
|
||||||
|
Form=frmMain.frm
|
||||||
|
Module=basShellSync; ShellSync.bas
|
||||||
|
Module=basNetRes; basNetRes.bas
|
||||||
|
IconForm="frmMain"
|
||||||
|
Startup="frmMain"
|
||||||
|
HelpFile=""
|
||||||
|
Title="Testing"
|
||||||
|
ExeName32="BinaryCompare.exe"
|
||||||
|
Command32=""
|
||||||
|
Name="BinaryCompare"
|
||||||
|
HelpContextID="0"
|
||||||
|
CompatibleMode="0"
|
||||||
|
MajorVer=1
|
||||||
|
MinorVer=0
|
||||||
|
RevisionVer=1
|
||||||
|
AutoIncrementVer=1
|
||||||
|
ServerSupportFiles=0
|
||||||
|
VersionComments="by Elad Salomons"
|
||||||
|
CompilationType=0
|
||||||
|
OptimizationType=0
|
||||||
|
FavorPentiumPro(tm)=0
|
||||||
|
CodeViewDebugInfo=0
|
||||||
|
NoAliasing=0
|
||||||
|
BoundsCheck=0
|
||||||
|
OverflowCheck=0
|
||||||
|
FlPointCheck=0
|
||||||
|
FDIVCheck=0
|
||||||
|
UnroundedFP=0
|
||||||
|
StartMode=0
|
||||||
|
Unattended=0
|
||||||
|
Retained=0
|
||||||
|
ThreadPerObject=0
|
||||||
|
MaxNumberOfThreads=1
|
||||||
|
DebugStartupOption=0
|
||||||
39
tests/scripts/vb6_binary_files_compare/ShellSync.bas
Normal file
39
tests/scripts/vb6_binary_files_compare/ShellSync.bas
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
Attribute VB_Name = "basShellSync"
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Private Const INFINITE = &HFFFFFFFF
|
||||||
|
Private Const SYNCHRONIZE = &H100000
|
||||||
|
Private Const PROCESS_QUERY_INFORMATION = &H400&
|
||||||
|
|
||||||
|
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
|
||||||
|
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
|
||||||
|
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
|
||||||
|
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
|
||||||
|
Public Function ShellSync(ByVal PathName As String, ByVal WindowStyle As VbAppWinStyle) As Long
|
||||||
|
'-----------------------------------------------------------------------------------------------
|
||||||
|
'Shell and wait. Return exit code result, raise an
|
||||||
|
'exception on any error.
|
||||||
|
Dim lngPid As Long
|
||||||
|
Dim lngHandle As Long
|
||||||
|
Dim lngExitCode As Long
|
||||||
|
|
||||||
|
lngPid = Shell(PathName, WindowStyle)
|
||||||
|
If lngPid <> 0 Then
|
||||||
|
lngHandle = OpenProcess(SYNCHRONIZE Or PROCESS_QUERY_INFORMATION, 0, lngPid)
|
||||||
|
If lngHandle <> 0 Then
|
||||||
|
WaitForSingleObject lngHandle, INFINITE
|
||||||
|
If GetExitCodeProcess(lngHandle, lngExitCode) <> 0 Then
|
||||||
|
ShellSync = lngExitCode
|
||||||
|
CloseHandle lngHandle
|
||||||
|
Else
|
||||||
|
CloseHandle lngHandle
|
||||||
|
Err.Raise &H8004AA00, "ShellSync", "Failed to retrieve exit code, error " & CStr(Err.LastDllError)
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
Err.Raise &H8004AA01, "ShellSync", "Failed to open child process"
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
Err.Raise &H8004AA02, "ShellSync", "Failed to Shell child process"
|
||||||
|
End If
|
||||||
|
|
||||||
|
End Function
|
||||||
188
tests/scripts/vb6_binary_files_compare/basNetRes.bas
Normal file
188
tests/scripts/vb6_binary_files_compare/basNetRes.bas
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
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
|
||||||
|
|
||||||
179
tests/scripts/vb6_binary_files_compare/frmMain.frm
Normal file
179
tests/scripts/vb6_binary_files_compare/frmMain.frm
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
VERSION 5.00
|
||||||
|
Begin VB.Form frmMain
|
||||||
|
Caption = "Form1"
|
||||||
|
ClientHeight = 5304
|
||||||
|
ClientLeft = 48
|
||||||
|
ClientTop = 396
|
||||||
|
ClientWidth = 9648
|
||||||
|
LinkTopic = "Form1"
|
||||||
|
ScaleHeight = 5304
|
||||||
|
ScaleWidth = 9648
|
||||||
|
StartUpPosition = 3 'Windows Default
|
||||||
|
Begin VB.ListBox List1
|
||||||
|
Height = 4272
|
||||||
|
Left = 1680
|
||||||
|
TabIndex = 1
|
||||||
|
Top = 360
|
||||||
|
Width = 7092
|
||||||
|
End
|
||||||
|
Begin VB.CommandButton cmdRun
|
||||||
|
Caption = "RUN"
|
||||||
|
Height = 372
|
||||||
|
Left = 360
|
||||||
|
TabIndex = 0
|
||||||
|
Top = 360
|
||||||
|
Width = 972
|
||||||
|
End
|
||||||
|
End
|
||||||
|
Attribute VB_Name = "frmMain"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = True
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Dim NetName As String
|
||||||
|
|
||||||
|
Dim net1 As typNetRes
|
||||||
|
Dim net2 As typNetRes
|
||||||
|
|
||||||
|
Private Sub CompareVersions(NetName As String)
|
||||||
|
'-----------------------------------------------
|
||||||
|
Dim i As Long
|
||||||
|
Dim v1 As Single, v2 As Single
|
||||||
|
Dim T As Long
|
||||||
|
Dim L As Long
|
||||||
|
Dim maxDiff As Single
|
||||||
|
Dim diff As Single
|
||||||
|
Dim nRep As Long
|
||||||
|
Dim F As Long
|
||||||
|
|
||||||
|
i = ShellSync("epanet2d.exe nets\" & NetName & ".inp nets\" & NetName & "_1.rep nets\" & NetName & "_1.out", vbNormalFocus)
|
||||||
|
i = ReadOutputFile("nets\" & NetName & "_1.out", net1)
|
||||||
|
|
||||||
|
i = ShellSync("epanet2.exe nets\" & NetName & ".inp nets\" & NetName & "_2.rep nets\" & NetName & "_2.out", vbNormalFocus)
|
||||||
|
i = ReadOutputFile("nets\" & NetName & "_2.out", net2)
|
||||||
|
|
||||||
|
F = FreeFile
|
||||||
|
Open App.Path & "\Nets\" & NetName & ".dif" For Output As #F
|
||||||
|
|
||||||
|
nRep = UBound(net1.LinksFlow, 2)
|
||||||
|
|
||||||
|
maxDiff = 100: diff = 101
|
||||||
|
For L = 1 To net1.nLinks
|
||||||
|
For T = 1 To nRep
|
||||||
|
v1 = net1.LinksFlow(L, T)
|
||||||
|
v2 = net2.LinksFlow(L, T)
|
||||||
|
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
|
||||||
|
If diff < maxDiff Then maxDiff = diff
|
||||||
|
Next T
|
||||||
|
Next L
|
||||||
|
Print #F, "Links Flow max diff = " & Format(maxDiff, "0")
|
||||||
|
|
||||||
|
maxDiff = 100: diff = 101
|
||||||
|
For L = 1 To net1.nLinks
|
||||||
|
For T = 1 To nRep
|
||||||
|
v1 = net1.LinksHeadloss(L, T)
|
||||||
|
v2 = net2.LinksHeadloss(L, T)
|
||||||
|
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
|
||||||
|
If diff < maxDiff Then maxDiff = diff
|
||||||
|
Next T
|
||||||
|
Next L
|
||||||
|
Print #F, "Links Headloss max diff = " & Format(maxDiff, "0")
|
||||||
|
|
||||||
|
maxDiff = 100: diff = 101
|
||||||
|
For L = 1 To net1.nLinks
|
||||||
|
For T = 1 To nRep
|
||||||
|
v1 = net1.LinksQuality(L, T)
|
||||||
|
v2 = net2.LinksQuality(L, T)
|
||||||
|
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
|
||||||
|
If diff < maxDiff Then maxDiff = diff
|
||||||
|
Next T
|
||||||
|
Next L
|
||||||
|
Print #F, "Links Quality max diff = " & Format(maxDiff, "0")
|
||||||
|
|
||||||
|
maxDiff = 100: diff = 101
|
||||||
|
For L = 1 To net1.nLinks
|
||||||
|
For T = 1 To nRep
|
||||||
|
v1 = net1.LinksVelocity(L, T)
|
||||||
|
v2 = net2.LinksVelocity(L, T)
|
||||||
|
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
|
||||||
|
If diff < maxDiff Then maxDiff = diff
|
||||||
|
Next T
|
||||||
|
Next L
|
||||||
|
Print #F, "Links Velocity max diff = " & Format(maxDiff, "0")
|
||||||
|
|
||||||
|
maxDiff = 100: diff = 101
|
||||||
|
For L = 1 To net1.nNodes
|
||||||
|
For T = 1 To nRep
|
||||||
|
v1 = net1.NodesDemand(L, T)
|
||||||
|
v2 = net2.NodesDemand(L, T)
|
||||||
|
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
|
||||||
|
If diff < maxDiff Then maxDiff = diff
|
||||||
|
Next T
|
||||||
|
Next L
|
||||||
|
Print #F, "Nodes Demand max diff = " & Format(maxDiff, "0")
|
||||||
|
|
||||||
|
maxDiff = 100: diff = 101
|
||||||
|
For L = 1 To net1.nNodes
|
||||||
|
For T = 1 To nRep
|
||||||
|
v1 = net1.NodesHead(L, T)
|
||||||
|
v2 = net2.NodesHead(L, T)
|
||||||
|
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
|
||||||
|
If diff < maxDiff Then maxDiff = diff
|
||||||
|
Next T
|
||||||
|
Next L
|
||||||
|
Print #F, "Nodes Head max diff = " & Format(maxDiff, "0")
|
||||||
|
|
||||||
|
maxDiff = 100: diff = 101
|
||||||
|
For L = 1 To net1.nNodes
|
||||||
|
For T = 1 To nRep
|
||||||
|
v1 = net1.NodesPressure(L, T)
|
||||||
|
v2 = net2.NodesPressure(L, T)
|
||||||
|
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10))
|
||||||
|
If diff < maxDiff Then maxDiff = diff
|
||||||
|
Next T
|
||||||
|
Next L
|
||||||
|
Print #F, "Nodes Pressure max diff = " & Format(maxDiff, "0")
|
||||||
|
|
||||||
|
maxDiff = 100: diff = 101
|
||||||
|
For L = 1 To net1.nNodes
|
||||||
|
For T = 1 To nRep
|
||||||
|
v1 = net1.NodesQuality(L, T)
|
||||||
|
v2 = net2.NodesQuality(L, T)
|
||||||
|
If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2))) / Log(10)
|
||||||
|
If diff < maxDiff Then maxDiff = diff
|
||||||
|
Next T
|
||||||
|
Next L
|
||||||
|
Print #F, "Nodes Quality max diff = " & Format(maxDiff, "0")
|
||||||
|
|
||||||
|
Close #F
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub cmdRun_Click()
|
||||||
|
'----------------------------------------------
|
||||||
|
Dim fName As String
|
||||||
|
|
||||||
|
fName = Dir(App.Path & "\Nets\*.inp")
|
||||||
|
If fName <> "" Then
|
||||||
|
Do
|
||||||
|
List1.AddItem fName: DoEvents
|
||||||
|
fName = StrReverse(fName)
|
||||||
|
fName = Mid(fName, 5)
|
||||||
|
fName = StrReverse(fName)
|
||||||
|
Call CompareVersions(fName)
|
||||||
|
fName = Dir
|
||||||
|
Loop Until fName = ""
|
||||||
|
End If
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
|
Private Sub Form_Load()
|
||||||
|
|
||||||
|
List1.Clear
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
8
tests/scripts/vb6_binary_files_compare/nets/Net2.dif
Normal file
8
tests/scripts/vb6_binary_files_compare/nets/Net2.dif
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Links Flow max diff = 3
|
||||||
|
Links Headloss max diff = 4
|
||||||
|
Links Quality max diff = 3
|
||||||
|
Links Velocity max diff = 6
|
||||||
|
Nodes Demand max diff = 3
|
||||||
|
Nodes Head max diff = 5
|
||||||
|
Nodes Pressure max diff = 3
|
||||||
|
Nodes Quality max diff = 100
|
||||||
311
tests/scripts/vb6_binary_files_compare/nets/Net2.inp
Normal file
311
tests/scripts/vb6_binary_files_compare/nets/Net2.inp
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
[TITLE]
|
||||||
|
EPANET Example Network 2
|
||||||
|
Example of modeling a 55-hour fluoride tracer study.
|
||||||
|
Measured fluoride data is contained in the file Net2-FL.dat
|
||||||
|
and should be registered with the project to produce a
|
||||||
|
Calibration Report (select Calibration Data from the Project
|
||||||
|
menu).
|
||||||
|
|
||||||
|
[JUNCTIONS]
|
||||||
|
;ID Elev Demand Pattern
|
||||||
|
1 50 -694.4 2 ;
|
||||||
|
2 100 8 ;
|
||||||
|
3 60 14 ;
|
||||||
|
4 60 8 ;
|
||||||
|
5 100 8 ;
|
||||||
|
6 125 5 ;
|
||||||
|
7 160 4 ;
|
||||||
|
8 110 9 ;
|
||||||
|
9 180 14 ;
|
||||||
|
10 130 5 ;
|
||||||
|
11 185 34.78 ;
|
||||||
|
12 2100 16 ;
|
||||||
|
13 210 2 ;
|
||||||
|
14 200 2 ;
|
||||||
|
15 190 2 ;
|
||||||
|
16 150 20 ;
|
||||||
|
17 180 20 ;
|
||||||
|
18 100 20 ;
|
||||||
|
19 150 5 ;
|
||||||
|
20 170 19 ;
|
||||||
|
21 150 16 ;
|
||||||
|
22 200 10 ;
|
||||||
|
23 230 8 ;
|
||||||
|
24 190 11 ;
|
||||||
|
25 230 6 ;
|
||||||
|
27 130 8 ;
|
||||||
|
28 110 0 ;
|
||||||
|
29 110 7 ;
|
||||||
|
30 130 3 ;
|
||||||
|
31 190 17 ;
|
||||||
|
32 110 17 ;
|
||||||
|
33 180 1.5 ;
|
||||||
|
34 190 1.5 ;
|
||||||
|
35 110 0 ;
|
||||||
|
36 110 1 ;
|
||||||
|
|
||||||
|
[RESERVOIRS]
|
||||||
|
;ID Head Pattern
|
||||||
|
|
||||||
|
[TANKS]
|
||||||
|
;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
|
||||||
|
26 235 56.7 50 70 50 0 ;
|
||||||
|
|
||||||
|
[PIPES]
|
||||||
|
;ID Node1 Node2 Length Diameter Roughness MinorLoss Status
|
||||||
|
1 1 2 2400 12 100 0 Open ;
|
||||||
|
2 2 5 800 12 100 0 Open ;
|
||||||
|
3 2 3 1300 8 100 0 Open ;
|
||||||
|
4 3 4 1200 8 100 0 Open ;
|
||||||
|
5 4 5 1000 12 100 0 Open ;
|
||||||
|
6 5 6 1200 12 100 0 Open ;
|
||||||
|
7 6 7 2700 12 100 0 Open ;
|
||||||
|
8 7 8 1200 12 140 0 Open ;
|
||||||
|
9 7 9 400 12 100 0 Open ;
|
||||||
|
10 8 10 1000 8 140 0 Open ;
|
||||||
|
11 9 11 700 12 100 0 Open ;
|
||||||
|
12 11 12 1900 12 100 0 Open ;
|
||||||
|
13 12 13 600 12 100 0 Open ;
|
||||||
|
14 13 14 400 12 100 0 Open ;
|
||||||
|
15 14 15 300 12 100 0 Open ;
|
||||||
|
16 13 16 1500 8 100 0 Open ;
|
||||||
|
17 15 17 1500 8 100 0 Open ;
|
||||||
|
18 16 17 600 8 100 0 Open ;
|
||||||
|
19 17 18 700 12 100 0 Open ;
|
||||||
|
20 18 32 350 12 100 0 Open ;
|
||||||
|
21 16 19 1400 8 100 0 Open ;
|
||||||
|
22 14 20 1100 12 100 0 Open ;
|
||||||
|
23 20 21 1300 8 100 0 Open ;
|
||||||
|
24 21 22 1300 8 100 0 Open ;
|
||||||
|
25 20 22 1300 8 100 0 Open ;
|
||||||
|
26 24 23 600 12 100 0 Open ;
|
||||||
|
27 15 24 250 12 100 0 Open ;
|
||||||
|
28 23 25 300 12 100 0 Open ;
|
||||||
|
29 25 26 200 12 100 0 Open ;
|
||||||
|
30 25 31 600 12 100 0 Open ;
|
||||||
|
31 31 27 400 8 100 0 Open ;
|
||||||
|
32 27 29 400 8 100 0 Open ;
|
||||||
|
34 29 28 700 8 100 0 Open ;
|
||||||
|
35 22 33 1000 8 100 0 Open ;
|
||||||
|
36 33 34 400 8 100 0 Open ;
|
||||||
|
37 32 19 500 8 100 0 Open ;
|
||||||
|
38 29 35 500 8 100 0 Open ;
|
||||||
|
39 35 30 1000 8 100 0 Open ;
|
||||||
|
40 28 35 700 8 100 0 Open ;
|
||||||
|
41 28 36 300 8 100 0 Open ;
|
||||||
|
|
||||||
|
[PUMPS]
|
||||||
|
;ID Node1 Node2 Parameters
|
||||||
|
|
||||||
|
[VALVES]
|
||||||
|
;ID Node1 Node2 Diameter Type Setting MinorLoss
|
||||||
|
|
||||||
|
[TAGS]
|
||||||
|
|
||||||
|
[DEMANDS]
|
||||||
|
;Junction Demand Pattern Category
|
||||||
|
|
||||||
|
[STATUS]
|
||||||
|
;ID Status/Setting
|
||||||
|
|
||||||
|
[PATTERNS]
|
||||||
|
;ID Multipliers
|
||||||
|
;Demand Pattern
|
||||||
|
1 1.26 1.04 .97 .97 .89 1.19
|
||||||
|
1 1.28 .67 .67 1.34 2.46 .97
|
||||||
|
1 .92 .68 1.43 .61 .31 .78
|
||||||
|
1 .37 .67 1.26 1.56 1.19 1.26
|
||||||
|
1 .6 1.1 1.03 .73 .88 1.06
|
||||||
|
1 .99 1.72 1.12 1.34 1.12 .97
|
||||||
|
1 1.04 1.15 .91 .61 .68 .46
|
||||||
|
1 .51 .74 1.12 1.34 1.26 .97
|
||||||
|
1 .82 1.37 1.03 .81 .88 .81
|
||||||
|
1 .81
|
||||||
|
;Pump Station Outflow Pattern
|
||||||
|
2 .96 .96 .96 .96 .96 .96
|
||||||
|
2 .62 0 0 0 0 0
|
||||||
|
2 .8 1 1 1 1 .15
|
||||||
|
2 0 0 0 0 0 0
|
||||||
|
2 .55 .92 .92 .92 .92 .9
|
||||||
|
2 .9 .45 0 0 0 0
|
||||||
|
2 0 .7 1 1 1 1
|
||||||
|
2 .2 0 0 0 0 0
|
||||||
|
2 0 .74 .92 .92 .92 .92
|
||||||
|
2 .92
|
||||||
|
;Pump Station Fluoride Pattern
|
||||||
|
3 .98 1.02 1.05 .99 .64 .46
|
||||||
|
3 .35 .35 .35 .35 .35 .35
|
||||||
|
3 .17 .17 .13 .13 .13 .15
|
||||||
|
3 .15 .15 .15 .15 .15 .15
|
||||||
|
3 .15 .12 .1 .08 .11 .09
|
||||||
|
3 .09 .08 .08 .08 .08 .08
|
||||||
|
3 .08 .09 .07 .07 .09 .09
|
||||||
|
3 .09 .09 .09 .09 .09 .09
|
||||||
|
3 .09 .08 .35 .72 .82 .92
|
||||||
|
3 1
|
||||||
|
|
||||||
|
[CURVES]
|
||||||
|
;ID X-Value Y-Value
|
||||||
|
|
||||||
|
[CONTROLS]
|
||||||
|
|
||||||
|
|
||||||
|
[RULES]
|
||||||
|
|
||||||
|
|
||||||
|
[ENERGY]
|
||||||
|
Global Efficiency 75
|
||||||
|
Global Price 0.0
|
||||||
|
Demand Charge 0.0
|
||||||
|
|
||||||
|
[EMITTERS]
|
||||||
|
;Junction Coefficient
|
||||||
|
|
||||||
|
[QUALITY]
|
||||||
|
;Node InitQual
|
||||||
|
1 1.0
|
||||||
|
2 1.0
|
||||||
|
3 1.0
|
||||||
|
4 1.0
|
||||||
|
5 1.0
|
||||||
|
6 1.0
|
||||||
|
7 1.0
|
||||||
|
8 1.0
|
||||||
|
9 1.0
|
||||||
|
10 1.0
|
||||||
|
11 1.0
|
||||||
|
12 1.0
|
||||||
|
13 1.0
|
||||||
|
14 1.0
|
||||||
|
15 1.0
|
||||||
|
16 1.0
|
||||||
|
17 1.0
|
||||||
|
18 1.0
|
||||||
|
19 1.0
|
||||||
|
20 1.0
|
||||||
|
21 1.0
|
||||||
|
22 1.0
|
||||||
|
23 1.0
|
||||||
|
24 1.0
|
||||||
|
25 1.0
|
||||||
|
27 1.0
|
||||||
|
28 1.0
|
||||||
|
29 1.0
|
||||||
|
30 1.0
|
||||||
|
31 1.0
|
||||||
|
32 1.0
|
||||||
|
33 1.0
|
||||||
|
34 1.0
|
||||||
|
35 1.0
|
||||||
|
36 1.0
|
||||||
|
26 1.0
|
||||||
|
|
||||||
|
[SOURCES]
|
||||||
|
;Node Type Quality Pattern
|
||||||
|
1 CONCEN 1.0 3
|
||||||
|
|
||||||
|
[REACTIONS]
|
||||||
|
;Type Pipe/Tank Coefficient
|
||||||
|
|
||||||
|
|
||||||
|
[REACTIONS]
|
||||||
|
Order Bulk 1
|
||||||
|
Order Tank 1
|
||||||
|
Order Wall 1
|
||||||
|
Global Bulk 0.0
|
||||||
|
Global Wall 0.0
|
||||||
|
Limiting Potential 0.0
|
||||||
|
Roughness Correlation 0.0
|
||||||
|
|
||||||
|
[MIXING]
|
||||||
|
;Tank Model
|
||||||
|
|
||||||
|
[TIMES]
|
||||||
|
Duration 55: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 8 am
|
||||||
|
Statistic NONE
|
||||||
|
|
||||||
|
[REPORT]
|
||||||
|
Status Full
|
||||||
|
Summary No
|
||||||
|
Page 0
|
||||||
|
|
||||||
|
[OPTIONS]
|
||||||
|
Units GPM
|
||||||
|
Headloss H-W
|
||||||
|
Specific Gravity 1.0
|
||||||
|
Viscosity 1.0
|
||||||
|
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 Fluoride mg/L
|
||||||
|
Diffusivity 1.0
|
||||||
|
Tolerance 0.01
|
||||||
|
|
||||||
|
[COORDINATES]
|
||||||
|
;Node X-Coord Y-Coord
|
||||||
|
1 21.00 4.00
|
||||||
|
2 19.00 20.00
|
||||||
|
3 11.00 21.00
|
||||||
|
4 14.00 28.00
|
||||||
|
5 19.00 25.00
|
||||||
|
6 28.00 23.00
|
||||||
|
7 36.00 39.00
|
||||||
|
8 38.00 30.00
|
||||||
|
9 36.00 42.00
|
||||||
|
10 37.00 23.00
|
||||||
|
11 37.00 49.00
|
||||||
|
12 39.00 60.00
|
||||||
|
13 38.00 64.00
|
||||||
|
14 38.00 66.00
|
||||||
|
15 37.00 69.00
|
||||||
|
16 27.00 65.00
|
||||||
|
17 27.00 69.00
|
||||||
|
18 23.00 68.00
|
||||||
|
19 21.00 59.00
|
||||||
|
20 45.00 68.00
|
||||||
|
21 51.00 62.00
|
||||||
|
22 54.00 69.00
|
||||||
|
23 35.00 74.00
|
||||||
|
24 37.00 71.00
|
||||||
|
25 35.00 76.00
|
||||||
|
27 39.00 87.00
|
||||||
|
28 49.00 85.00
|
||||||
|
29 42.00 86.00
|
||||||
|
30 47.00 80.00
|
||||||
|
31 37.00 80.00
|
||||||
|
32 23.00 64.00
|
||||||
|
33 56.00 73.00
|
||||||
|
34 56.00 77.00
|
||||||
|
35 43.00 81.00
|
||||||
|
36 53.00 87.00
|
||||||
|
26 33.00 76.00
|
||||||
|
|
||||||
|
[VERTICES]
|
||||||
|
;Link X-Coord Y-Coord
|
||||||
|
|
||||||
|
[LABELS]
|
||||||
|
;X-Coord Y-Coord Label & Anchor Node
|
||||||
|
24.00 7.00 "Pump"
|
||||||
|
24.00 4.00 "Station"
|
||||||
|
26.76 77.42 "Tank"
|
||||||
|
|
||||||
|
[BACKDROP]
|
||||||
|
DIMENSIONS 8.75 -0.15 58.25 91.15
|
||||||
|
UNITS None
|
||||||
|
FILE
|
||||||
|
OFFSET 0.00 0.00
|
||||||
|
|
||||||
|
[END]
|
||||||
12
tests/scripts/vb6_binary_files_compare/readme.txt
Normal file
12
tests/scripts/vb6_binary_files_compare/readme.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
The program will run all INP files in the Nets sub-directory.
|
||||||
|
A report, binary output files and a .dif file will be created for each INP file.
|
||||||
|
The report is the min(—log10(abs(X1-X2))) where X1 and X2 are the results arrays obtains from the two binary files.
|
||||||
|
|
||||||
|
Files needed in the code directory:
|
||||||
|
epanet2d.exe is the official EPANET standalone version.
|
||||||
|
epanet2.exe is the current development version (the one being tested).
|
||||||
|
|
||||||
|
How to use: run the program and click the RUN button.
|
||||||
|
|
||||||
|
By Elad Salomons
|
||||||
|
email: selad@optiwater.com
|
||||||
Reference in New Issue
Block a user