DIRECTORY QPSolve, Rope; QPSetup: CEDAR DEFINITIONS = BEGIN OPEN QPSolve; ROPE: TYPE ~ Rope.ROPE; noRow: INT ~ -1; Graph: TYPE ~ REF GraphRep; GraphRep: TYPE ~ RECORD [order: INT, nV: NAT, vList: VertexList, eqnList: EqnList]; Vertex: TYPE ~ REF VertexRep; VertexRep: TYPE ~ RECORD [name: ROPE, visited: INT, tree: Edge, adj: EdgeList, val: REAL ¬ 0.0, vid: INT]; VertexList: TYPE ~ REF VertexListRep; VertexListRep: TYPE ~ RECORD [name: ROPE, first: Vertex, rest: VertexList, forward: Skips]; Level: TYPE ~ NAT; Skips: TYPE ~ REF SkipsRep; SkipsRep: TYPE ~ RECORD[SEQUENCE level: Level OF VertexList]; Edge: TYPE ~ REF EdgeRep; EdgeRep: TYPE ~ RECORD [thisEnd, thatEnd: Vertex, eData: EdgeData, dir: REAL ¬ 1.0]; EdgeList: TYPE ~ LIST OF Edge; EdgeData: TYPE ~ REF EdgeDataRep; EdgeDataRep: TYPE ~ RECORD [ join: Component, spread: REAL ¬ 0.0, squeeze: REAL ¬ 1.0, -- actually, SqRt[squeeze] relaxed: REAL ¬ 0.0, var: NAT, val: REAL ¬ 0.0]; Term: TYPE ~ RECORD [eData: EdgeData, coef: REAL]; TermList: TYPE ~ LIST OF Term; EqnList: TYPE ~ LIST OF TermList; Component: TYPE ~ REF ComponentRep; ComponentRep: TYPE ~ RECORD [ join: Component, weight: INT, edges: EdgeList, cycleEqns, extraEqns: EqnList]; ComponentList: TYPE ~ LIST OF Component; FindComponents: PROC [g: Graph] RETURNS [compList: ComponentList ¬ NIL]; CoupleComponents: PROC [compList: ComponentList, extraEqns: EqnList] RETURNS [coupledList: ComponentList]; FindFreeVars: PROC [cycleEqns, extraEqns: EqnList, nEqns, nVars: NAT] RETURNS [rowOf: IVector]; SolveComponent: PROC [component: Component]; SolveGraph: PROC [g: Graph]; NewGraph: PROC RETURNS [g: Graph]; AcquireVertex: PROC [g: Graph, name: ROPE] RETURNS [v: Vertex]; AcquireEdge: PROC [g: Graph, thisEnd, thatEnd: Vertex] RETURNS [edge: Edge]; SpreadEdge: PROC [g: Graph, edge: Edge, spread: REAL]; SqueezeEdge: PROC [g: Graph, edge: Edge, squeeze: REAL]; RelaxEdge: PROC [g: Graph, edge: Edge, relaxed: REAL]; ConstrainEdges: PROC [g: Graph, termList: TermList]; ListGraph: PROC [g: Graph, full: BOOL ¬ FALSE] RETURNS [list: LIST OF REF]; ESee: PROC [edge: Edge, full: BOOL ¬ FALSE] RETURNS [list: LIST OF REF]; ELSee: PROC [edges: EdgeList, full: BOOL ¬ FALSE] RETURNS [list: LIST OF REF]; ListComp: PROC [comp: Component, full: BOOL ¬ FALSE] RETURNS [list: LIST OF REF]; END..  QPSetup.mesa Copyright Σ 1990, 1992 by Xerox Corporation. All rights reserved. Ken Shoemake, June 15, 1990 1:58 am PDT Return list of biconnected components of graph, with necessary cycle equations. From list of graph bi-connected components (with cycle equations), and list of constraint equations, create list of coupled components. A coupled component will contain the edges and equations of all components whose edges co-occur as variables in some constraint equation, and will also contain the relevant constraint equations. Return rowOf filled with index of row for free vars, noRow for rest of vars. Index means little now; just needs to be different from noRow. Transform component data into QP form and call QPSolve. Transform graph into QP form, call QPSolve, propagate positions. Κ2–"cedarcode" style•NewlineDelimiter ™™ Jšœ Οeœ7™BJ™'—Icode˜šΟk ˜ Kšœ˜K˜—KšΡbnxœžœž ˜Kšœž˜Kšžœ ˜ K˜Kšžœžœžœ˜K˜Kšœžœ˜K˜Kšœžœžœ ˜Kš œ žœžœ žœžœ'˜SKšœžœžœ ˜Kš œ žœžœžœ žœ"žœ žœ˜jKšœ žœžœ˜%Kšœžœžœžœ3˜[Kšœžœžœ˜Kšœžœžœ ˜Kš œ žœžœžœžœ ˜=Kšœžœžœ ˜Kšœ žœžœ2žœ˜TKšœ žœžœžœ˜Kšœ žœžœ ˜!šœ žœžœ˜Kšœ˜Kšœžœ˜Kšœ žœΟc˜/Kšœ žœ˜Kšœžœ˜ Kšœžœ˜—Kšœžœžœžœ˜2Kšœ žœžœžœ˜Kšœ žœžœžœ ˜!Kšœ žœžœ˜#šœžœžœ˜Kšœ˜Kšœžœ˜ Kšœ˜Kšœ˜—Kšœžœžœžœ ˜(K˜šΟnœžœ žœžœ˜HJ™OK˜—š‘œžœ/žœ˜jJ™ΛK˜—š‘ œžœ/žœžœ˜_JšœL™LJ™>K˜—š‘œžœ˜,J™7K˜—š‘ œžœ ˜J™@K˜—Kš‘œžœžœ ˜"Kš ‘ œžœžœžœ ž˜?Kš‘ œžœ&žœ ž˜LKš‘ œžœ žœž˜6Kš‘ œžœ!žœž˜8Kš‘ œžœ!žœž˜6Kš‘œžœž˜4K˜Kš‘ œžœžœžœžœžœžœžœž˜KKš‘œžœžœžœžœžœžœžœ˜HKš‘œžœžœžœžœžœžœžœ˜NKš‘œžœžœžœžœžœžœžœ˜QKšžœ˜K˜K˜—…— b