| | |
| | | using Yw.Hydro; |
| | | using SqlSugar; |
| | | using Yw.EPAnet; |
| | | using System.Diagnostics.Metrics; |
| | | using Yw.Hydro; |
| | | using Yw.Model; |
| | | using SqlSugar; |
| | | namespace Yw.WinFrmUI |
| | | { |
| | | /// <summary> |
| | |
| | | /// <summary> |
| | | /// 计算 |
| | | /// </summary> |
| | | public static HydroCalcuResult Calcu(this Yw.Model.HydroModelInfo hydroInfo, string calcuMode = Yw.EPAnet.CalcuMode.Simple) |
| | | public static HydroCalcuResult Calcu |
| | | ( |
| | | this Yw.Model.HydroModelInfo hydroInfo, |
| | | string calcuMode = Yw.EPAnet.CalcuMode.Simple, |
| | | bool isHead = false |
| | | ) |
| | | { |
| | | var network = hydroInfo.ToNetwork(); |
| | | if (network == null) |
| | |
| | | { |
| | | return default; |
| | | } |
| | | return hydroInfo.GetCalcuResult(calcuResult); |
| | | return hydroInfo.GetCalcuResult(calcuResult, isHead); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取计算结果 |
| | | /// </summary> |
| | | public static HydroCalcuResult GetCalcuResult(this Yw.Model.HydroModelInfo hydroInfo, Yw.EPAnet.CalcuResult calcuResult) |
| | | public static HydroCalcuResult GetCalcuResult |
| | | ( |
| | | this Yw.Model.HydroModelInfo hydroInfo, |
| | | Yw.EPAnet.CalcuResult calcuResult, |
| | | bool isHead = false |
| | | ) |
| | | { |
| | | if (hydroInfo == null) |
| | | { |
| | |
| | | if (calcuJunctionResult != null) |
| | | { |
| | | var calcuJunctionNewResult = new HydroCalcuJunctionResult(calcuJunctionResult); |
| | | calcuJunctionNewResult.CalcuPr = calcuJunctionResult.CalcuPress; |
| | | calcuJunctionNewResult.CalcuPr = isHead ? calcuJunctionResult.CalcuHead : calcuJunctionResult.CalcuPress; |
| | | hydroCalcuResult.NodeList.Remove(calcuJunctionResult); |
| | | hydroCalcuResult.NodeList.Add(calcuJunctionNewResult); |
| | | } |
| | |
| | | if (calcuBluntheadResult != null) |
| | | { |
| | | var calcuBluntheadNewResult = new HydroCalcuBluntheadResult(calcuBluntheadResult); |
| | | calcuBluntheadNewResult.CalcuPr = calcuBluntheadResult.CalcuPress; |
| | | calcuBluntheadNewResult.CalcuPr = isHead ? calcuBluntheadResult.CalcuHead : calcuBluntheadResult.CalcuPress; |
| | | hydroCalcuResult.NodeList.Remove(calcuBluntheadResult); |
| | | hydroCalcuResult.NodeList.Add(calcuBluntheadNewResult); |
| | | } |
| | |
| | | if (calcuElbowResult != null) |
| | | { |
| | | var calcuElbowNewResult = new HydroCalcuElbowResult(calcuElbowResult); |
| | | calcuElbowNewResult.CalcuPr = calcuElbowResult.CalcuPress; |
| | | calcuElbowNewResult.CalcuPr = isHead ? calcuElbowResult.CalcuHead : calcuElbowResult.CalcuPress; |
| | | hydroCalcuResult.NodeList.Remove(calcuElbowResult); |
| | | hydroCalcuResult.NodeList.Add(calcuElbowNewResult); |
| | | } |
| | |
| | | if (calcuThreelinkResult != null) |
| | | { |
| | | var calcuThreelinkNewResult = new HydroCalcuThreelinkResult(calcuThreelinkResult); |
| | | calcuThreelinkNewResult.CalcuPr = calcuThreelinkResult.CalcuPress; |
| | | calcuThreelinkNewResult.CalcuPr = isHead ? calcuThreelinkResult.CalcuHead : calcuThreelinkResult.CalcuPress; |
| | | hydroCalcuResult.NodeList.Remove(calcuThreelinkResult); |
| | | hydroCalcuResult.NodeList.Add(calcuThreelinkNewResult); |
| | | } |
| | |
| | | if (calcuFourlinkResult != null) |
| | | { |
| | | var calcuFourlinkNewResult = new HydroCalcuFourlinkResult(calcuFourlinkResult); |
| | | calcuFourlinkNewResult.CalcuPr = calcuFourlinkResult.CalcuPress; |
| | | calcuFourlinkNewResult.CalcuPr = isHead ? calcuFourlinkResult.CalcuHead : calcuFourlinkResult.CalcuPress; |
| | | hydroCalcuResult.NodeList.Remove(calcuFourlinkResult); |
| | | hydroCalcuResult.NodeList.Add(calcuFourlinkNewResult); |
| | | } |
| | |
| | | if (calcuHydrantResult != null) |
| | | { |
| | | var calcuHydrantNewResult = new HydroCalcuHydrantResult(calcuHydrantResult); |
| | | calcuHydrantNewResult.CalcuPr = calcuHydrantResult.CalcuPress; |
| | | calcuHydrantNewResult.CalcuPr = isHead ? calcuHydrantResult.CalcuHead : calcuHydrantResult.CalcuPress; |
| | | |
| | | var linkHydrantList = allLinkList?.Where(x => x.StartCode == hydrant.Code || x.EndCode == hydrant.Code).ToList(); |
| | | if (linkHydrantList != null && linkHydrantList.Count > 0) |
| | |
| | | if (calcuNozzleResult != null) |
| | | { |
| | | var calcuNozzleNewResult = new HydroCalcuNozzleResult(calcuNozzleResult); |
| | | calcuNozzleNewResult.CalcuPr = calcuNozzleResult.CalcuPress; |
| | | calcuNozzleNewResult.CalcuPr = isHead ? calcuNozzleResult.CalcuHead : calcuNozzleResult.CalcuPress; |
| | | |
| | | var linkNozzleList = allLinkList?.Where(x => x.StartCode == nozzle.Code || x.EndCode == nozzle.Code).ToList(); |
| | | if (linkNozzleList != null && linkNozzleList.Count > 0) |
| | |
| | | if (calcuCoolingResult != null) |
| | | { |
| | | var calcuCoolingNewResult = new HydroCalcuCoolingResult(calcuCoolingResult); |
| | | calcuCoolingNewResult.CalcuPr = calcuCoolingResult.CalcuPress; |
| | | calcuCoolingNewResult.CalcuPr = isHead ? calcuCoolingResult.CalcuHead : calcuCoolingResult.CalcuPress; |
| | | |
| | | var linkCoolingList = allLinkList?.Where(x => x.StartCode == cooling.Code || x.EndCode == cooling.Code).ToList(); |
| | | if (linkCoolingList != null && linkCoolingList.Count > 0) |
| | |
| | | if (calcuMeterResult != null) |
| | | { |
| | | var calcuMeterNewResult = new HydroCalcuMeterResult(calcuMeterResult); |
| | | calcuMeterNewResult.CalcuPr = calcuMeterResult.CalcuPress; |
| | | calcuMeterNewResult.CalcuPr = isHead ? calcuMeterResult.CalcuHead : calcuMeterResult.CalcuPress; |
| | | |
| | | var linkMeterList = allLinkList?.Where(x => x.StartCode == meter.Code || x.EndCode == meter.Code).ToList(); |
| | | if (linkMeterList != null && linkMeterList.Count > 0) |
| | |
| | | if (calcuFlowmeterResult != null) |
| | | { |
| | | var calcuFlowmeterNewResult = new HydroCalcuFlowmeterResult(calcuFlowmeterResult); |
| | | calcuFlowmeterNewResult.CalcuPr = calcuFlowmeterResult.CalcuPress; |
| | | calcuFlowmeterNewResult.CalcuPr = isHead ? calcuFlowmeterResult.CalcuHead : calcuFlowmeterResult.CalcuPress; |
| | | |
| | | var linkFlowmeterList = allLinkList?.Where(x => x.StartCode == flowmeter.Code || x.EndCode == flowmeter.Code).ToList(); |
| | | if (linkFlowmeterList != null && linkFlowmeterList.Count > 0) |
| | |
| | | if (calcuPressmeterResult != null) |
| | | { |
| | | var calcuPressmeterNewResult = new HydroCalcuPressmeterResult(calcuPressmeterResult); |
| | | calcuPressmeterNewResult.CalcuPr = calcuPressmeterResult.CalcuPress; |
| | | calcuPressmeterNewResult.CalcuPr = isHead ? calcuPressmeterResult.CalcuHead : calcuPressmeterResult.CalcuPress; |
| | | hydroCalcuResult.NodeList.Remove(calcuPressmeterResult); |
| | | hydroCalcuResult.NodeList.Add(calcuPressmeterNewResult); |
| | | } |
| | |
| | | var calcuStartPipeNodeResult = allCalcuResultVisualDict?.GetValue(startPipeCode) as HydroCalcuNodeResult; |
| | | if (calcuStartPipeNodeResult != null) |
| | | { |
| | | calcuPipeNewResult.CalcuPr1 = calcuStartPipeNodeResult.CalcuPress; |
| | | calcuPipeNewResult.CalcuPr1 = isHead ? calcuStartPipeNodeResult.CalcuHead : calcuStartPipeNodeResult.CalcuPress; |
| | | } |
| | | var endPipeCode = calcuPipeResult.CalcuFlow.Value > 0 ? pipe.EndCode : pipe.StartCode; |
| | | var calcuEndPipeNodeResult = allCalcuResultVisualDict?.GetValue(endPipeCode) as HydroCalcuNodeResult; |
| | | if (calcuEndPipeNodeResult != null) |
| | | { |
| | | calcuPipeNewResult.CalcuPr2 = calcuEndPipeNodeResult.CalcuPress; |
| | | calcuPipeNewResult.CalcuPr2 = isHead ? calcuEndPipeNodeResult.CalcuHead : calcuEndPipeNodeResult.CalcuPress; |
| | | } |
| | | } |
| | | |
| | |
| | | var calcuStartTranslationNodeResult = allCalcuResultVisualDict?.GetValue(startTranslationCode) as HydroCalcuNodeResult; |
| | | if (calcuStartTranslationNodeResult != null) |
| | | { |
| | | calcuTranslationNewResult.CalcuPr1 = calcuStartTranslationNodeResult.CalcuPress; |
| | | calcuTranslationNewResult.CalcuPr1 = isHead ? calcuStartTranslationNodeResult.CalcuHead : calcuStartTranslationNodeResult.CalcuPress; |
| | | } |
| | | var endTranslationCode = calcuTranslationResult.CalcuFlow.Value > 0 ? translation.EndCode : translation.StartCode; |
| | | var calcuEndTranslationNodeResult = allCalcuResultVisualDict?.GetValue(endTranslationCode) as HydroCalcuNodeResult; |
| | | if (calcuEndTranslationNodeResult != null) |
| | | { |
| | | calcuTranslationNewResult.CalcuPr2 = calcuEndTranslationNodeResult.CalcuPress; |
| | | calcuTranslationNewResult.CalcuPr2 = isHead ? calcuEndTranslationNodeResult.CalcuHead : calcuEndTranslationNodeResult.CalcuPress; |
| | | } |
| | | } |
| | | |
| | |
| | | var calcuStartPumpNodeResult = allCalcuResultVisualDict?.GetValue(startPumpCode) as HydroCalcuNodeResult; |
| | | if (calcuStartPumpNodeResult != null) |
| | | { |
| | | calcuPumpNewResult.CalcuPr1 = calcuStartPumpNodeResult.CalcuPress; |
| | | calcuPumpNewResult.CalcuPr1 = isHead ? calcuStartPumpNodeResult.CalcuHead : calcuStartPumpNodeResult.CalcuPress; |
| | | } |
| | | } |
| | | |
| | |
| | | var calcuEndPumpNodeResult = allCalcuResultVisualDict?.GetValue(endPumpCode) as HydroCalcuNodeResult; |
| | | if (calcuEndPumpNodeResult != null) |
| | | { |
| | | calcuPumpNewResult.CalcuPr2 = calcuEndPumpNodeResult.CalcuPress; |
| | | calcuPumpNewResult.CalcuPr2 = isHead ? calcuEndPumpNodeResult.CalcuHead : calcuEndPumpNodeResult.CalcuPress; |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | var pr1 = CalculationHelper.M2Mpa(calcuPumpNewResult.CalcuPr1.Value); |
| | | var pr2 = CalculationHelper.M2Mpa(calcuPumpNewResult.CalcuPr2.Value); |
| | | var d1 = pump.InletDiameter; |
| | | var d2 = pump.OutletDiameter; |
| | | var z1 = (startPumpNode as HydroJunctionInfo)?.Elev; |
| | | var z2 = (endPumpNode as HydroJunctionInfo)?.Elev; |
| | | double? d1 = pump.InletDiameter < 1 ? null : pump.InletDiameter; |
| | | double? d2 = pump.OutletDiameter < 1 ? null : pump.OutletDiameter; |
| | | double? z1 = (startPumpNode as HydroJunctionInfo)?.Elev; |
| | | double? z2 = (endPumpNode as HydroJunctionInfo)?.Elev; |
| | | calcuPumpNewResult.CalcuH = Yw.Pump.CalculationHelper.CalcuH(pr1, pr2, calcuPumpNewResult.CalcuQ.Value, d1, d2, z1, z2); |
| | | } |
| | | |
| | | //功率 |
| | | if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open && pump.RatedN.HasValue) |
| | | if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open) |
| | | { |
| | | var curveqp = hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP); |
| | | if (curveqp != null) |
| | |
| | | if (curveqp.CurveData != null && curveqp.CurveData.Count > 3) |
| | | { |
| | | var point2dList = curveqp.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); |
| | | var point2dSimularList = point2dList.GetQPPointListByN(pump.RatedN.Value, pump.RatedN.Value * pump.SpeedRatio); |
| | | var point2dSimularList = point2dList.GetQPPointListByN(pump.RatedN, pump.RatedN * pump.SpeedRatio); |
| | | var pumpCurveQp = new Yw.Pump.CurveQP(Yw.Ahart.eFeatType.Cubic, point2dSimularList); |
| | | calcuPumpNewResult.CalcuP = pumpCurveQp.FeatCurve.GetPointYUnlimited(calcuPumpNewResult.CalcuQ.Value); |
| | | } |
| | |
| | | var calcuStartValveNodeResult = allCalcuResultVisualDict?.GetValue(startValveCode) as HydroCalcuNodeResult; |
| | | if (calcuStartValveNodeResult != null) |
| | | { |
| | | calcuValveNewResult.CalcuPr1 = calcuStartValveNodeResult.CalcuPress; |
| | | calcuValveNewResult.CalcuPr1 = isHead ? calcuStartValveNodeResult.CalcuHead : calcuStartValveNodeResult.CalcuPress; |
| | | } |
| | | var endValveCode = calcuValveResult.CalcuFlow.Value > 0 ? valve.EndCode : valve.StartCode; |
| | | var calcuEndValveNodeResult = allCalcuResultVisualDict?.GetValue(endValveCode) as HydroCalcuNodeResult; |
| | | if (calcuEndValveNodeResult != null) |
| | | { |
| | | calcuValveNewResult.CalcuPr2 = calcuEndValveNodeResult.CalcuPress; |
| | | calcuValveNewResult.CalcuPr2 = isHead ? calcuEndValveNodeResult.CalcuHead : calcuEndValveNodeResult.CalcuPress; |
| | | } |
| | | } |
| | | |
| | |
| | | var calcuStartExchangerNodeResult = allCalcuResultVisualDict?.GetValue(startExchangerCode) as HydroCalcuNodeResult; |
| | | if (calcuStartExchangerNodeResult != null) |
| | | { |
| | | calcuExchangerNewResult.CalcuPr1 = calcuStartExchangerNodeResult.CalcuPress; |
| | | calcuExchangerNewResult.CalcuPr1 = isHead ? calcuStartExchangerNodeResult.CalcuHead : calcuStartExchangerNodeResult.CalcuPress; |
| | | } |
| | | var endExchangerCode = calcuExchangerResult.CalcuFlow.Value > 0 ? exchanger.EndCode : exchanger.StartCode; |
| | | var calcuEndExchangerNodeResult = allCalcuResultVisualDict?.GetValue(endExchangerCode) as HydroCalcuNodeResult; |
| | | if (calcuEndExchangerNodeResult != null) |
| | | { |
| | | calcuExchangerNewResult.CalcuPr2 = calcuEndExchangerNodeResult.CalcuPress; |
| | | calcuExchangerNewResult.CalcuPr2 = isHead ? calcuEndExchangerNodeResult.CalcuHead : calcuEndExchangerNodeResult.CalcuPress; |
| | | } |
| | | } |
| | | |
| | |
| | | var calcuStartCompressorNodeResult = allCalcuResultVisualDict?.GetValue(startCompressorCode) as HydroCalcuNodeResult; |
| | | if (calcuStartCompressorNodeResult != null) |
| | | { |
| | | calcuCompressorNewResult.CalcuPr1 = calcuStartCompressorNodeResult.CalcuPress; |
| | | calcuCompressorNewResult.CalcuPr1 = isHead ? calcuStartCompressorNodeResult.CalcuHead : calcuStartCompressorNodeResult.CalcuPress; |
| | | } |
| | | var endCompressorCode = calcuCompressorResult.CalcuFlow.Value > 0 ? compressor.EndCode : compressor.StartCode; |
| | | var calcuEndCompressorNodeResult = allCalcuResultVisualDict?.GetValue(endCompressorCode) as HydroCalcuNodeResult; |
| | | if (calcuEndCompressorNodeResult != null) |
| | | { |
| | | calcuCompressorNewResult.CalcuPr2 = calcuEndCompressorNodeResult.CalcuPress; |
| | | calcuCompressorNewResult.CalcuPr2 = isHead ? calcuEndCompressorNodeResult.CalcuHead : calcuEndCompressorNodeResult.CalcuPress; |
| | | } |
| | | } |
| | | |