qinjie
2023-12-19 15d15d24fbccb9b70a305b46b71453b2ab1a720e
Hydro.Inp/NetWork.cs
@@ -2,6 +2,7 @@
//using Hydro.HydraulicModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Ports;
@@ -174,20 +175,20 @@
            nozzles.ForEach(nozzle => { AddNozzle(nozzle); });
        }
        private void CheckNodesExist(NodeModel node)
        private void CheckNodesExist(NodeCalcModel node)
        {
            if (Nodes.Any(d => d.ID == node.ID))
                throw new Exception("已存在重复的对象");
        }
        private void CheckLinksExist(LinkModel link)
        private void CheckLinksExist(LinkCalcModel link)
        {
            if (Links.Any(d => d.ID == link.ID))
                throw new Exception("已存在重复的对象");
        }
        public List<NodeModel> Nodes { get; set; } = new List<NodeModel>();
        public List<LinkModel> Links { get; set; } = new List<LinkModel>();
        public List<NodeCalcModel> Nodes { get; set; } = new List<NodeCalcModel>();
        public List<LinkCalcModel> Links { get; set; } = new List<LinkCalcModel>();
        /// <summary>
        /// 根据INP文件生成
@@ -465,7 +466,7 @@
                #region 优化方案
                int k1 = 0;
                int k2 = 0;
                Nodes.Sort((a, b) => string.Compare(a.ID, b.ID));
                points.Sort((a, b) => string.Compare(a.ID, b.ID));
@@ -493,7 +494,7 @@
                }
                #endregion
                //建立点线关系链表StartNode,先将管线以Node1(节点1的ID)排序,再将Nodes按ID排序,建立两个游标k1、k2,正向一次循环,建立链表关系
                //时间复杂度 O(n)
@@ -564,7 +565,7 @@
            }
            if (!File.Exists(tempPath))
            {
                throw new Exception("模板文件不存在");
                throw new Exception("模板文件不存在," + tempPath);
            }
            if (!File.Exists(InpPath))
                File.Create(InpPath).Close();
@@ -954,9 +955,15 @@
            HydraulicModel.Epanet epanet = new HydraulicModel.Epanet();
            var result = new List<TimePoint>();
            var err = epanet.open(InpPath, "d:\\5.log", "");
            if (err != 0)
            {
                throw new Exception($"计算失败:{err}");
                throw new Exception($"打开计算文件失败:{err}");
            }
            var errCal = epanet.solveH();
            if (errCal != 0)
            {
                throw new Exception($"计算失败:{errCal}");
            }
            int nodeCount = 0, linkCount = 0;
            epanet.getcount((int)CountType.Node, ref nodeCount);
@@ -1007,7 +1014,7 @@
        /// <returns></returns>
        public virtual List<TimePoint> Calc()
        {
            var inpPath = Path.Combine(Directory.GetCurrentDirectory(), @"data\inp\calc.inp");
            var inpPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"data\inp\calc.inp");
            BuildToInp(inpPath);
            return Calc(inpPath);
        }