// See https://aka.ms/new-console-template for more information
|
|
using System.Diagnostics;
|
using Yw.Epanet;
|
|
class Program
|
{
|
private static object _locer = new();
|
|
static void Main()
|
{
|
|
|
// 创建一个 Stopwatch 实例
|
Stopwatch stopwatch = new Stopwatch();
|
|
// 开始计时
|
stopwatch.Start();
|
|
CalcuH();
|
|
// 停止计时
|
stopwatch.Stop();
|
|
Console.WriteLine($"总时间:{stopwatch.Elapsed.TotalSeconds}");
|
|
Console.ReadLine();
|
}
|
|
/// <summary>
|
/// 水力计算
|
/// </summary>
|
public static void CalcuH()
|
{
|
|
var result = new CalcuResult();
|
|
using (var helper = new InteropXHelper())
|
{
|
var code = helper.Open("test.inp", "test.rpt", string.Empty);
|
if (code != eErrorCode.OK)
|
{
|
helper.GetError(code, out string errorMsg);
|
result.FailedList.Add(new CalcuFailed()
|
{
|
Code = code,
|
Message = errorMsg
|
});
|
helper.Close();
|
return;
|
}
|
code = helper.SolveH();
|
if (code != eErrorCode.OK)
|
{
|
if (code >= eErrorCode.Err101)
|
{
|
helper.GetError(code, out string errorMsg);
|
result.FailedList.Add(new CalcuFailed()
|
{
|
Code = code,
|
Message = errorMsg
|
});
|
helper.Close();
|
return;
|
}
|
}
|
|
//节点计算值遍历获取
|
var allCalcuNodeDict = new Dictionary<string, CalcuNode>();
|
helper.GetCount(eCountType.Node, out int nodeCount);
|
for (int i = 1; i <= nodeCount; i++)
|
{
|
helper.GetNodeId(i, out string nodeId);
|
helper.GetNodeValue(i, eNodeProperty.Head, out double headValue);
|
helper.GetNodeValue(i, eNodeProperty.Pressure, out double pressureValue);
|
helper.GetNodeValue(i, eNodeProperty.Demand, out double demandValue);
|
var calcuNode = new CalcuNode()
|
{
|
Id = nodeId,
|
Head = headValue,
|
Press = pressureValue,
|
Demand = demandValue
|
};
|
result.VisualList.Add(calcuNode);
|
allCalcuNodeDict.Add(nodeId, calcuNode);
|
}
|
|
//管段计算值遍历获取
|
var allCalcuLinkDict = new Dictionary<string, CalcuLink>();
|
helper.GetCount(eCountType.Link, out int linkCount);
|
for (int i = 1; i <= linkCount; i++)
|
{
|
helper.GetLinkId(i, out string linkId);
|
helper.GetLinkValue(i, eLinkProperty.Flow, out double flowValue);
|
helper.GetLinkValue(i, eLinkProperty.Velocity, out double velocityValue);
|
helper.GetLinkValue(i, eLinkProperty.HeadLoss, out double headLossValue);
|
var calcuLink = new CalcuLink()
|
{
|
Id = linkId,
|
Flow = flowValue,
|
Velocity = velocityValue,
|
HeadLoss = headLossValue,
|
};
|
result.VisualList.Add(calcuLink);
|
allCalcuLinkDict.Add(linkId, calcuLink);
|
}
|
|
helper.Close();
|
}
|
}
|
|
|
|
}
|