Changes between Version 1 and Version 5 of Ticket #6238
- Timestamp:
- 2020-11-23T11:32:26Z (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ticket #6238 – Description
v1 v5 9 9 This problem could be avoided if the {{{Connections.branch()}}} operators could be made time-dependent. It would then be possible to disable the {{{Connections.branch()}}} statements of the circuit breakers being opened. As a consequence, two or more disjoint connection graphs would be formed at the time of the breaker openings, each corresponding to a new synchronous island. The new graph topology should be analyzed at this point, picking a new root node for each newly formed island in the grid. Then, instead of having a single phase reference for the entire system, which would no longer be adequate, one would now have two or more independent phase references, one for each island, which would ensure that the variables of each island reach a steady state, thus avoiding the persistent sinusoidal oscillations found in the case of a statically determined connection topology. 10 10 11 From the point of view of the language specification, this extension only requires to lift (or suitably relax) the restriction mentioned in the definition of the {{{Connection .branch()}}} operator in [https://specification.modelica.org/master/connectors-and-connections.html#overconstrained-equation-operators-for-connection-graphs Section 9.4.1]:11 From the point of view of the language specification, this extension only requires to lift (or suitably relax) the restriction mentioned in the definition of the {{{Connections.branch()}}} operator in [https://specification.modelica.org/master/connectors-and-connections.html#overconstrained-equation-operators-for-connection-graphs Section 9.4.1]: 12 12 13 13 This function can be used at all places where a {{{connect(..)}}} statement is allowed. … … 35 35 }}} 36 36 Note that: 37 - the {{{Connection .branch()}}} operator is called in a branch of an if-equation, so it is only active when {{{closed = true}}}.38 - the if-equation violates the balancing rule of [https://specification.modelica.org/master/equations.html#if-equations Section 8.3.4], apparently breaking the single-assignment rule. However, it only involves overconstrained connector variables that appear in the {{{Connection .branch()}}} call in the same branch of the if-equation37 - the {{{Connections.branch()}}} operator is called in a branch of an if-equation, so it is only active when {{{closed = true}}}. 38 - the if-equation violates the balancing rule of [https://specification.modelica.org/master/equations.html#if-equations Section 8.3.4], apparently breaking the single-assignment rule. However, it only involves overconstrained connector variables that appear in the {{{Connections.branch()}}} call in the same branch of the if-equation 39 39 40 Handling this case at runtime is relatively straighforward. During initialization, and each time an if-equation is triggered that contains a {{{Connection .branch(A.R, B.R)}}} call and an equation {{{A.R = B.R}}}, the runtime must:40 Handling this case at runtime is relatively straighforward. During initialization, and each time an if-equation is triggered that contains a {{{Connections.branch(A.R, B.R)}}} call and an equation {{{A.R = B.R}}}, the runtime must: 41 41 - build the connection graph according to the rules set forth in [https://specification.modelica.org/master/connectors-and-connections.html#equation-operators-for-overconstrained-connection-based-equation-systems1 Section 9.4], only accounting for branches that are active once the if-equation has been processed 42 - identify disjoint sub-graphs and select one root node for each of them, if not already given by {{{Connection .root()}}}42 - identify disjoint sub-graphs and select one root node for each of them, if not already given by {{{Connections.root()}}} 43 43 - break all loops in the graph, replacing the connection equation with the (empty) constraint in each branch that is broken 44 44 - set each overconstrained connector variable of each sub-graph to be equal to the value of the corresponding root node variable (this can be done trivially via pointers)