namespace Yw.Epanet
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public static class NetworkRepairExtensions
|
{
|
/// <summary>
|
/// 修复
|
/// </summary>
|
public static void Repair(this Network nw)
|
{
|
//验证
|
if (nw == null)
|
{
|
return;
|
}
|
var allNodeList = nw.GetAllNodes();
|
if (allNodeList == null || allNodeList.Count < 1)
|
{
|
return;
|
}
|
var allLinkList = nw.GetAllLinks();
|
if (allLinkList == null || allLinkList.Count < 1)
|
{
|
return;
|
}
|
var allJunctionList = nw.GetAllJunctions();
|
if (allJunctionList == null || allJunctionList.Count < 1)
|
{
|
return;
|
}
|
|
//节点links处理
|
foreach (var node in allNodeList)
|
{
|
var links = allLinkList.Where(x => x.StartNodeId == node.Id || x.EndNodeId == node.Id).ToList();
|
node.Links = links;
|
}
|
|
//管段上下游处理
|
foreach (var link in allLinkList)
|
{
|
link.StartNode = allNodeList.Find(x => x.Id == link.StartNodeId);
|
link.EndNode = allNodeList.Find(x => x.Id == link.EndNodeId);
|
}
|
|
//管道参数处理
|
var allPipeList = nw.Pipes;
|
if (allPipeList != null && allPipeList.Count > 0)
|
{
|
foreach (var pipe in allPipeList)
|
{
|
if (pipe.Roughness < 10)
|
{
|
pipe.Roughness = ConstParas.DefaultRoughness;
|
}
|
if (pipe.Length < ConstParas.MinPipeLength)
|
{
|
pipe.Length = ConstParas.MinPipeLength;
|
}
|
pipe.StartMinorLoss = 0;
|
pipe.EndMinorLoss = 0;
|
}
|
}
|
|
//连接节点参数处理
|
foreach (var junction in allJunctionList)
|
{
|
if (junction.Demand < 0)
|
{
|
junction.Demand = 0;
|
}
|
if (junction.MinorLoss < 0)
|
{
|
junction.MinorLoss = 0;
|
}
|
if (junction.MinorLoss > 0)
|
{
|
var pipes = junction.GetPipes();
|
if (pipes != null && pipes.Count > 0)
|
{
|
var littleMinorLoss = junction.MinorLoss / pipes.Count;
|
var nextPipes = junction.GetNextPipes();
|
nextPipes?.ForEach(x => x.StartMinorLoss += littleMinorLoss);
|
var prevPipes = junction.GetPrevPipes();
|
prevPipes?.ForEach(x => x.EndMinorLoss += littleMinorLoss);
|
}
|
}
|
}
|
|
|
|
|
}
|
|
}
|
}
|