Changes between Version 1 and Version 5 of Ticket #6238


Ignore:
Timestamp:
2020-11-23T11:32:26Z (4 years ago)
Author:
Francesco Casella
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #6238 – Description

    v1 v5  
    99This 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.
    1010
    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]:
     11From 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]:
    1212
    1313  This function can be used at all places where a {{{connect(..)}}} statement is allowed.
     
    3535}}}
    3636Note 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-equation
     37- 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
    3939
    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:
     40Handling 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:
    4141- 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()}}}
    4343- break all loops in the graph, replacing the connection equation with the (empty) constraint in each branch that is broken
    4444- 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)