using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.Calculation.Epanet { public class CalcPressByLevelAndFlowHelper { EpanetHelper _helper = null; public string Initial(string fileName) { _helper = new EpanetHelper(); return _helper.Initial(fileName); } public EpanetScheme CalcPressByLevelAndFlow(List nodes) { if (_helper == null) return default; if (nodes == null || nodes.Count < 1) return default; var inputs = nodes.Select(x => new ModelInput(x.ObjectID, (int)x.Type, x.Value)).ToList(); var err = _helper.GetResultByFlowAndPumpStatus(inputs, out List modelOutputNodes, out List modelOutputLinks); if (!string.IsNullOrEmpty(err)) return default; var scheme = new EpanetScheme(); scheme.OutputNodeList = new List(); scheme.OutputLinkList = new List(); foreach (var node in modelOutputNodes) { var outputNode = new EpanetNodeOutputNode(); outputNode.ObjectID = node.ObjectID; outputNode.Type = (EpanetNodeOutput.eType)node.Type; if (node.result != null) { var result = node.result; outputNode.EN_ELEVATION = result.EN_ELEVATION; outputNode.EN_BASEDEMAND = result.EN_BASEDEMAND; outputNode.EN_DEMAND = result.EN_DEMAND; outputNode.EN_HEAD = result.EN_HEAD; outputNode.EN_PRESSURE = result.EN_PRESSURE; } scheme.OutputNodeList.Add(outputNode); } foreach (var link in modelOutputLinks) { var outputLink = new EpanetNodeOutputLink(); outputLink.ObjectID = link.ObjectID; outputLink.Type = (EpanetNodeOutputLink.eType)link.Type; if (link.result != null) { var result = link.result; outputLink.EN_DIAMETER = result.EN_DIAMETER; outputLink.EN_LENGTH = result.EN_LENGTH; outputLink.EN_FLOW = result.EN_FLOW; outputLink.EN_VELOCITY = result.EN_VELOCITY; outputLink.EN_HEADLOSS = result.EN_HEADLOSS; outputLink.EN_STATUS = result.EN_STATUS; outputLink.EN_SETTING = result.EN_SETTING; outputLink.EN_ENERGY = result.EN_ENERGY; } scheme.OutputLinkList.Add(outputLink); } return scheme; } } }