Esempio n. 1
0
        /// <summary>Builds linked list of links adjacent to each node.</summary>
        ///  <param name="adjlist">Nodes adjacency list.</param>
        /// <param name="nodes">Collecion of hydraulic simulation nodes.</param>
        /// <param name="links">Collection of hydraulic simulation links.</param>
        /// <param name="paraflag">Remove parallel links.</param>
        private void BuildLists(
            List <AdjItem>[] adjlist,
            IEnumerable <SimulationNode> nodes,
            IEnumerable <SimulationLink> links,
            bool paraflag)
        {
            bool pmark = false;

            foreach (SimulationLink link  in  links)
            {
                int k = link.Index + 1;
                int i = link.First.Index + 1;
                int j = link.Second.Index + 1;

                if (paraflag)
                {
                    pmark = ParaLink(adjlist, i, j, k);
                }

                // Include link in start node i's list
                AdjItem alink = new AdjItem(!pmark ? j : 0, k);

                adjlist[i].Insert(0, alink);

                // Include link in end node j's list
                alink = new AdjItem(!pmark ? i : 0, k);

                adjlist[j].Insert(0, alink);
            }
        }
Esempio n. 2
0
 ///<summary>Creates new entries in knode's adjacency list for all unlinked pairs of active nodes that are adjacent to knode.</summary>
 /// <param name="adjlist">Nodes adjacency list.</param>
 /// <param name="knode">Node id.</param>
 private void GrowList(List <AdjItem>[] adjlist, int knode)
 {
     for (int i = 0; i < adjlist[knode].Count; i++)
     {
         AdjItem alink = adjlist[knode][i];
         int     node  = alink.Node;
         if (_degree[node] > 0)
         {
             _degree[node]--;
             NewLink(adjlist, adjlist[knode], i);
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        ///  Links end of current adjacent link to end nodes
        ///  of all links that follow it on adjacency list.
        ///  </summary>
        ///  <param name="adjList">Nodes adjacency list.</param>
        ///  <param name="list">Adjacent links</param>
        /// <param name="id">Link id.</param>
        private void NewLink(List <AdjItem>[] adjList, List <AdjItem> list, int id)
        {
            int inode = list[id].Node;

            for (int i = id + 1; i < list.Count; i++)
            {
                AdjItem blink = list[i];
                int     jnode = blink.Node;

                if (_degree[jnode] > 0)
                {
                    if (!Linked(adjList, inode, jnode))
                    {
                        _coeffsCount++;
                        AddLink(adjList, inode, jnode, _coeffsCount);
                        AddLink(adjList, jnode, inode, _coeffsCount);
                        _degree[inode]++;
                        _degree[jnode]++;
                    }
                }
            }
        }
Esempio n. 4
0
        /// <summary>Augments node i's adjacency list with node j.</summary>
        private static void AddLink(List <AdjItem>[] adjList, int i, int j, int n)
        {
            AdjItem alink = new AdjItem(j, n);

            adjList[i].Insert(0, alink);
        }