DoInitialGlobalRoute:
PUBLIC
PROC [context:
GC.Context] = {
Determine strategic paths for the wiring among the cells.
EachNet: RTStructure.EachNetAction ~ {
connectionStrength:
GCCIG.ConnectionStrength ←
IF Rope.Equal[net.name, "Vdd"] OR Rope.Equal[net.name, "Gnd"] THEN power
ELSE goodInternal;
nodeSetList: GCCIG.NodeSetList ← GCCIG.InsertNet[cig, net, connectionStrength];
IF GCCIG.Length[nodeSetList] > 1 THEN GCCIG.ShortestPath[cig, nodeSetList, net];
GCCIG.RemoveNodes[cig, nodeSetList];
};
cig: GCCIG.Graph;
GCPrivate.DestroyChannels[context];
GCPrivate.CreateChannels[context];
GCPrivate.AssignCoordinates[context];
IF context.topologicalOrder #
NIL
THEN
RouteDiGraph.DestroyGraph[NARROW[context.topologicalOrder]];
context.topologicalOrder ← GCPrivate.FindTopologicalOrder[NARROW[context.topology]];
cig ← GCCIG.Create[context];
[] ← RTStructure.EnumerateNets[context.structure, EachNet];
GCPrivate.AssignCoordinates[context];
GCCIG.Destroy[cig];
};
}.