|
| 1 | +/* Matching + SCC test originated from the following model |
| 2 | +(the result is indicated with comments): |
| 3 | + |
| 4 | +model TestRL3 |
| 5 | + //iR[i] and iR[i+1] can be computed out of each other |
| 6 | + //uL[i] and uL[i+1] can be computed out of each other |
| 7 | + //All variables form a large algebraic loop |
| 8 | + |
| 9 | + constant Integer N=100000; |
| 10 | + Real iL[N],iR[N],uL[N]; |
| 11 | + parameter Real L=1,R=1,L1=1,U=1,R0=1; |
| 12 | +equation |
| 13 | + for i in 1:N loop |
| 14 | + L*der(iL[i])=uL[i]; // der(iL[1:N]) |
| 15 | + end for; |
| 16 | + for i in 1:N-1 loop |
| 17 | + iR[i]-iR[i+1]-iL[i]=0; // iR[1], iR[3:N] |
| 18 | + uL[i]-uL[i+1]-R*iR[i+1]=0; // iR[2], uL[2:N-1] |
| 19 | + end for; |
| 20 | + U-uL[1]-R*iR[1]=0; // uL[1] |
| 21 | + uL[N]-(iR[N]-iL[N])*R0=0; // uL[N] |
| 22 | +end TestRL3; |
| 23 | +*/ |
| 24 | + |
| 25 | +N = 100000; |
| 26 | + |
| 27 | +F1 = N; |
| 28 | +F2 = N-1+F1; |
| 29 | +F3 = N-1+F2; |
| 30 | +F4 = 1+F3; |
| 31 | +F5 = 1+F4; |
| 32 | +U1 = N+F5; // der(iL) |
| 33 | +U2 = N+U1; // iR |
| 34 | +U3 = N+U2; // uL |
| 35 | + |
| 36 | +E1 = N; // F1 - der(iL[i]) |
| 37 | +E2 = N+E1; // F1 - uL[i] |
| 38 | +E3 = N-1+E2; // F2 - iR[i] |
| 39 | +E4 = N-1+E3; // F2 - iR[i+1] |
| 40 | +E5 = N-1+E4; // F3 - iR[i] |
| 41 | +E6 = N-1+E5; // F3 - uL[i] |
| 42 | +E7 = N-1+E6; // F3 - uL[i+1] |
| 43 | +E8 = 1+E7; // F4 - iR[1] |
| 44 | +E9 = 1+E8; // F4 - uL[1] |
| 45 | +E10 = 1+E9; // F5 - iR[N] |
| 46 | +E11 = 1+E10; // F5 - uL[N] |
| 47 | + |
| 48 | +off1d = F1-E1; |
| 49 | +off2d = F1-E2; |
| 50 | +off3d = F2-E3; |
| 51 | +off4d = F2-E4; |
| 52 | +off5d = F3-E5; |
| 53 | +off6d = F3-E6; |
| 54 | +off7d = F3-E7; |
| 55 | +off8d = F4-E8; |
| 56 | +off9d = F4-E9; |
| 57 | +off10d = F5-E10; |
| 58 | +off11d = F5-E11; |
| 59 | + |
| 60 | +off1b = U1-E1; |
| 61 | +off2b = U3-E2; |
| 62 | +off3b = U2-E3-1; |
| 63 | +off4b = U2-E4; |
| 64 | +off5b = U2-E5; |
| 65 | +off6b = U3-E6-1; |
| 66 | +off7b = U3-E7; |
| 67 | +off8b = U2-E8-N+1; |
| 68 | +off9b = U3-E9-N+1; |
| 69 | +off10b = U2-E10; |
| 70 | +off11b = U3-E11; |
| 71 | + |
| 72 | +V: {[1:1:F1], [F1+1:1:F2], [F2+1:1:F3], [F3+1:1:F4], [F4+1:1:F5] |
| 73 | + , [F5+1:1:U1], [U1+1:1:U2], [U2+1:1:U3]} |
| 74 | +Vmap: <<{[1:1:F1]} -> |0*x+1|, {[F1+1:1:F2]} -> |0*x+2|, {[F2+1:1:F3]} -> |0*x+3 |
| 75 | + |, {[F3+1:1:F4]} -> |0*x+4|, {[F4+1:1:F5]} -> |0*x+5 |
| 76 | + |, {[F5+1:1:U1]} -> |0*x+6|, {[U1+1:1:U2]} -> |0*x+7|, {[U2+1:1:U3]} -> |0*x+8|>> |
| 77 | +map1: <<{[1:1:E1]} -> |1*x+off1d|, {[E1+1:1:E2]} -> |1*x+off2d|, {[E2+1:1:E3]} -> |1*x+off3d |
| 78 | + |, {[E3+1:1:E4]} -> |1*x+off4d|, {[E4+1:1:E5]} -> |1*x+off5d|, {[E5+1:1:E6]} -> |1*x+off6d |
| 79 | + |, {[E6+1:1:E7]} -> |1*x+off7d|, {[E7+1:1:E8]} -> |1*x+off8d|, {[E8+1:1:E9]} -> |1*x+off9d |
| 80 | + |, {[E9+1:1:E10]} -> |1*x+off10d|, {[E10+1:1:E11]} -> |1*x+off11d|>> |
| 81 | +map2: <<{[1:1:E1]} -> |1*x+off1b|, {[E1+1:1:E2]} -> |1*x+off2b|, {[E2+1:1:E3]} -> |1*x+off3b |
| 82 | + |, {[E3+1:1:E4]} -> |1*x+off4b|, {[E4+1:1:E5]} -> |1*x+off5b|, {[E5+1:1:E6]} -> |1*x+off6b |
| 83 | + |, {[E6+1:1:E7]} -> |1*x+off7b|, {[E7+1:1:E8]} -> |1*x+off8b|, {[E8+1:1:E9]} -> |1*x+off9b |
| 84 | + |, {[E9+1:1:E10]} -> |1*x+off10b|, {[E10+1:1:E11]} -> |1*x+off11b|>> |
| 85 | +Emap: <<{[1:1:E1]} -> |0*x+1|, {[E1+1:1:E2]} -> |0*x+2|, {[E2+1:1:E3], [E3+1:1:E4]} -> |0*x+3 |
| 86 | + |, {[E4+1:1:E5], [E5+1:1:E6]} -> |0*x+4 |
| 87 | + |, {[E6+1:1:E7]} -> |0*x+6|, {[E7+1:1:E8]} -> |0*x+7|, {[E8+1:1:E9]} -> |0*x+8 |
| 88 | + |, {[E9+1:1:E10]} -> |0*x+9|, {[E10+1:1:E11]} -> |0*x+10|>>; |
| 89 | + |
| 90 | +matchSCC( |
| 91 | + V: {[1:1:F1], [F1+1:1:F2], [F2+1:1:F3], [F3+1:1:F4], [F4+1:1:F5] |
| 92 | + , [F5+1:1:U1], [U1+1:1:U2], [U2+1:1:U3]} |
| 93 | + Vmap: <<{[1:1:F1]} -> |0*x+1|, {[F1+1:1:F2]} -> |0*x+2|, {[F2+1:1:F3]} -> |0*x+3 |
| 94 | + |, {[F3+1:1:F4]} -> |0*x+4|, {[F4+1:1:F5]} -> |0*x+5 |
| 95 | + |, {[F5+1:1:U1]} -> |0*x+6|, {[U1+1:1:U2]} -> |0*x+7|, {[U2+1:1:U3]} -> |0*x+8|>> |
| 96 | + map1: <<{[1:1:E1]} -> |1*x+off1d|, {[E1+1:1:E2]} -> |1*x+off2d|, {[E2+1:1:E3]} -> |1*x+off3d |
| 97 | + |, {[E3+1:1:E4]} -> |1*x+off4d|, {[E4+1:1:E5]} -> |1*x+off5d|, {[E5+1:1:E6]} -> |1*x+off6d |
| 98 | + |, {[E6+1:1:E7]} -> |1*x+off7d|, {[E7+1:1:E8]} -> |1*x+off8d|, {[E8+1:1:E9]} -> |1*x+off9d |
| 99 | + |, {[E9+1:1:E10]} -> |1*x+off10d|, {[E10+1:1:E11]} -> |1*x+off11d|>> |
| 100 | + map2: <<{[1:1:E1]} -> |1*x+off1b|, {[E1+1:1:E2]} -> |1*x+off2b|, {[E2+1:1:E3]} -> |1*x+off3b |
| 101 | + |, {[E3+1:1:E4]} -> |1*x+off4b|, {[E4+1:1:E5]} -> |1*x+off5b|, {[E5+1:1:E6]} -> |1*x+off6b |
| 102 | + |, {[E6+1:1:E7]} -> |1*x+off7b|, {[E7+1:1:E8]} -> |1*x+off8b|, {[E8+1:1:E9]} -> |1*x+off9b |
| 103 | + |, {[E9+1:1:E10]} -> |1*x+off10b|, {[E10+1:1:E11]} -> |1*x+off11b|>> |
| 104 | + Emap: <<{[1:1:E1]} -> |0*x+1|, {[E1+1:1:E2]} -> |0*x+2|, {[E2+1:1:E3], [E3+1:1:E4]} -> |0*x+3 |
| 105 | + |, {[E4+1:1:E5], [E5+1:1:E6]} -> |0*x+4 |
| 106 | + |, {[E6+1:1:E7]} -> |0*x+6|, {[E7+1:1:E8]} -> |0*x+7|, {[E8+1:1:E9]} -> |0*x+8 |
| 107 | + |, {[E9+1:1:E10]} -> |0*x+9|, {[E10+1:1:E11]} -> |0*x+10|>> |
| 108 | + , 1 |
| 109 | +); |
0 commit comments