@enervance/insight-cim-model 0.0.367 → 0.0.369
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/etl/etl-neplan/neplan-contingency-analysis.js +3 -0
- package/dist/etl/etl-neplan/neplan-contingency-analysis.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/interfaces/model/core/IConnectivityNode.d.ts +0 -2
- package/dist/interfaces/model/core/IIdentifiedObject.d.ts +0 -1
- package/dist/model/assetinfo/SwitchInfo.d.ts +2 -0
- package/dist/model/assetinfo/SwitchInfo.js +6 -1
- package/dist/model/assetinfo/SwitchInfo.js.map +1 -1
- package/dist/model/core/Equipment.d.ts +1 -1
- package/dist/model/core/Equipment.js +1 -4
- package/dist/model/core/Equipment.js.map +1 -1
- package/dist/model/core/EquipmentContainer.d.ts +0 -1
- package/dist/model/core/EquipmentContainer.js +0 -3
- package/dist/model/core/EquipmentContainer.js.map +1 -1
- package/dist/model/core/Feeder.d.ts +1 -2
- package/dist/model/core/Feeder.js +1 -22
- package/dist/model/core/Feeder.js.map +1 -1
- package/dist/model/core/PowerSystemResource.d.ts +0 -1
- package/dist/model/core/PowerSystemResource.js +0 -13
- package/dist/model/core/PowerSystemResource.js.map +1 -1
- package/dist/model/core/Substation.d.ts +0 -1
- package/dist/model/core/Substation.js +0 -4
- package/dist/model/core/Substation.js.map +1 -1
- package/dist/model/core/Terminal.js +0 -3
- package/dist/model/core/Terminal.js.map +1 -1
- package/dist/model/extensions/amprion/additionalassetvalue/AMPRIONAdditionalBayValue.js +1 -1
- package/dist/model/extensions/enervance/operations/EVTerminalAction.js +1 -0
- package/dist/model/extensions/enervance/operations/EVTerminalAction.js.map +1 -1
- package/dist/model/extensions/westnetz-neplan/core/WNFeeder.js.map +1 -1
- package/dist/model/extensions/westnetz-neplan/operations/WNOutage.js +1 -1
- package/dist/model/extensions/westnetz-neplan/operations/WNOutage.js.map +1 -1
- package/dist/model/operations/SwitchingPlan.js.map +1 -1
- package/dist/utils2/cim.model.utils.d.ts +2 -7
- package/dist/utils2/cim.model.utils.js +2 -21
- package/dist/utils2/cim.model.utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/analysis/analysis-neplan/contingency-analysis.neplan.westnetz.d.ts +0 -41
- package/dist/analysis/analysis-neplan/contingency-analysis.neplan.westnetz.js +0 -445
- package/dist/analysis/analysis-neplan/contingency-analysis.neplan.westnetz.js.map +0 -1
|
@@ -1,445 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ContingencyAnalysisNeplanWestnetz = void 0;
|
|
4
|
-
const Switch_1 = require("../../model/wires/Switch.js");
|
|
5
|
-
const ExternalNetworkInjection_1 = require("../../model/wires/ExternalNetworkInjection.js");
|
|
6
|
-
const common_utils_1 = require("../../utils2/common.utils.js");
|
|
7
|
-
const ACLineSegment_1 = require("../../model/wires/ACLineSegment.js");
|
|
8
|
-
const EVSwitchingPlanKind_1 = require("../../model/extensions/enervance/operations/EVSwitchingPlanKind.js");
|
|
9
|
-
const WNConnectivityNode_1 = require("../../model/extensions/westnetz-neplan/core/WNConnectivityNode.js");
|
|
10
|
-
const WNOutage_1 = require("../../model/extensions/westnetz-neplan/operations/WNOutage.js");
|
|
11
|
-
const ConductingEquipment_1 = require("../../model/core/ConductingEquipment.js");
|
|
12
|
-
const EVTerminal_1 = require("../../model/extensions/enervance/core/EVTerminal.js");
|
|
13
|
-
const WNFaultConnectivityNode_1 = require("../../model/extensions/westnetz-neplan/faults/WNFaultConnectivityNode.js");
|
|
14
|
-
const neplan_contingency_analysis_1 = require("../../etl/etl-neplan/neplan-contingency-analysis.js");
|
|
15
|
-
const SwitchActionKind_1 = require("../../model/operations/SwitchActionKind.js");
|
|
16
|
-
const sparql_utils_1 = require("../../util/sparql/sparql-utils.js");
|
|
17
|
-
class ContingencyAnalysisNeplanWestnetz {
|
|
18
|
-
static performContingencyAnalysis(modelContainer) {
|
|
19
|
-
var _a, _b, _c;
|
|
20
|
-
const insertSPARQL = new Array;
|
|
21
|
-
for (const feeder of modelContainer.feeders.values()) {
|
|
22
|
-
const wnFeeder = feeder;
|
|
23
|
-
/** relevante Ausfälle
|
|
24
|
-
* 1 Ausfall des ersten ConnectivityNodes im Abgang
|
|
25
|
-
* 2 Alle ConnectivityNodes mit drei und mehr ACLineSegments */
|
|
26
|
-
const outageNodes = (_a = Array.from(feeder.normalHeadTerminal.values())) === null || _a === void 0 ? void 0 : _a.map(it => it.connectivityNode);
|
|
27
|
-
for (const cn of wnFeeder.normalEnergizedConnectivityNodes.values()) {
|
|
28
|
-
// Muffen sind für N-1-Betrachtung nicht relevant
|
|
29
|
-
// if (cn.getType() === CimAssetAliasNames.Muffe) continue;
|
|
30
|
-
const connectedACLineSegments = Array.from(cn.terminals.values())
|
|
31
|
-
.filter(t => t.isClosed() && t.conductingEquipment instanceof ACLineSegment_1.ACLineSegment)
|
|
32
|
-
.length;
|
|
33
|
-
/** ab 3 ACLineSegments ist der Knoten für die Ausfallanalyse relevant */
|
|
34
|
-
if (connectedACLineSegments >= 3)
|
|
35
|
-
outageNodes.push(cn);
|
|
36
|
-
}
|
|
37
|
-
const resupplyResults = ContingencyAnalysisNeplanWestnetz.findRessuplySwitchingActions(outageNodes, modelContainer);
|
|
38
|
-
for (const resupplyResult of resupplyResults.values()) {
|
|
39
|
-
// Ausfall
|
|
40
|
-
const outageNode = (_b = resupplyResult.find(it => it.faultConnectivityNode)) === null || _b === void 0 ? void 0 : _b.faultConnectivityNode;
|
|
41
|
-
// Freischaltungsmaßnahme
|
|
42
|
-
const deenergizedAction = (_c = resupplyResult.find(it => it.deenergizedActions)) === null || _c === void 0 ? void 0 : _c.deenergizedActions;
|
|
43
|
-
// Schaltmaßnahmen mit vollständiger Wiederversorgung
|
|
44
|
-
const fullyResuppliedActions = resupplyResult.filter(it => !it.cycle && it.resupplyType === EVSwitchingPlanKind_1.EVSwitchingPlanKind.fullyResupply);
|
|
45
|
-
// Schaltmaßnahmen mit partieller Wiederversorgung
|
|
46
|
-
const partiallyResuppliedActions = resupplyResult.filter(it => !it.cycle && it.resupplyType === EVSwitchingPlanKind_1.EVSwitchingPlanKind.partiallyResupply);
|
|
47
|
-
console.log(`Ausfall ${outageNode.getUUID()} | ${outageNode.name}\n
|
|
48
|
-
\tSchaltmaßnahmen mit vollständiger Wiederversorgung: ${fullyResuppliedActions.length}\n
|
|
49
|
-
\tSchaltmaßnahmen mit partieller Wiederversorgung: ${partiallyResuppliedActions.length}`);
|
|
50
|
-
if (fullyResuppliedActions.length === 0)
|
|
51
|
-
continue;
|
|
52
|
-
/** Ausfallschaltmaßnahme anlegen */
|
|
53
|
-
const faultCN = outageNode;
|
|
54
|
-
for (const fullyResuppliedAction of fullyResuppliedActions) {
|
|
55
|
-
const outageNew = new WNOutage_1.WNOutage(common_utils_1.CommonUtils.generateUUID(), `Ausfall-${faultCN.name}`, `${wnFeeder.shortName}`, '', wnFeeder.baseIRI);
|
|
56
|
-
modelContainer.addOutage(outageNew);
|
|
57
|
-
insertSPARQL.push(outageNew.createNewStatementSPARQL());
|
|
58
|
-
/** Equipments */
|
|
59
|
-
for (const object of wnFeeder.additionalGroupedEquipment.values()) {
|
|
60
|
-
if (object instanceof ConductingEquipment_1.ConductingEquipment) {
|
|
61
|
-
insertSPARQL.push(outageNew.addOutageIsolationEquipment(object));
|
|
62
|
-
}
|
|
63
|
-
else if (object instanceof WNConnectivityNode_1.WNConnectivityNode) {
|
|
64
|
-
insertSPARQL.push(outageNew.addOutageIsolationConnectivityNodes(object));
|
|
65
|
-
}
|
|
66
|
-
else if (object instanceof EVTerminal_1.EVTerminal) {
|
|
67
|
-
// TBD
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/** WNConnectivityNodes */
|
|
71
|
-
for (const object of wnFeeder.normalEnergizedConnectivityNodes.values()) {
|
|
72
|
-
insertSPARQL.push(outageNew.addOutageIsolationConnectivityNodes(object));
|
|
73
|
-
}
|
|
74
|
-
/** Fault */
|
|
75
|
-
const cnFaultNew = new WNFaultConnectivityNode_1.WNFaultConnectivityNode(common_utils_1.CommonUtils.generateUUID(), `${faultCN.name}`, '', '', wnFeeder.baseIRI);
|
|
76
|
-
modelContainer.addCustomFault(cnFaultNew);
|
|
77
|
-
insertSPARQL.push(cnFaultNew.createNewStatementSPARQL());
|
|
78
|
-
insertSPARQL.push(cnFaultNew.setConnectivityNode(faultCN));
|
|
79
|
-
insertSPARQL.push(cnFaultNew.setOutage(outageNew));
|
|
80
|
-
/** SwitchingPlan de-energise*/
|
|
81
|
-
const switchingPlanDeEnergise = (0, neplan_contingency_analysis_1.createSwitchingPlan)(common_utils_1.CommonUtils.generateUUID(), wnFeeder.baseIRI, `Schaltmaßnahme-Ausfall`, -1, 'de-energise', outageNew, insertSPARQL);
|
|
82
|
-
modelContainer.addSwitchingPlan(switchingPlanDeEnergise);
|
|
83
|
-
/** SwitchingAction de-energise*/
|
|
84
|
-
const switchingActionDeEnergise = (0, neplan_contingency_analysis_1.createTerminalAction)(common_utils_1.CommonUtils.generateUUID(), wnFeeder.baseIRI, `Schaltung-Ausfall`, SwitchActionKind_1.SwitchActionKind.open, switchingPlanDeEnergise, insertSPARQL);
|
|
85
|
-
modelContainer.addSwitchingAction(switchingActionDeEnergise);
|
|
86
|
-
/** Alle Terminals zur Freischaltung des Ausfallknotens */
|
|
87
|
-
for (const terminal of fullyResuppliedAction.deenergizedActions) {
|
|
88
|
-
insertSPARQL.push(switchingActionDeEnergise.addTerminal(terminal));
|
|
89
|
-
}
|
|
90
|
-
/** SwitchingPlan restore*/
|
|
91
|
-
const switchingPlanRestore = (0, neplan_contingency_analysis_1.createSwitchingPlan)(common_utils_1.CommonUtils.generateUUID(), wnFeeder.baseIRI, `Schaltmaßnahme-Restore`, 0, 'restore', outageNew, insertSPARQL);
|
|
92
|
-
modelContainer.addSwitchingPlan(switchingPlanRestore);
|
|
93
|
-
/** SwitchingAction re-energise*/
|
|
94
|
-
const switchingActionRestore = (0, neplan_contingency_analysis_1.createTerminalAction)(common_utils_1.CommonUtils.generateUUID(), wnFeeder.baseIRI, `Schaltung-Restore`, SwitchActionKind_1.SwitchActionKind.close, switchingPlanRestore, insertSPARQL);
|
|
95
|
-
modelContainer.addSwitchingAction(switchingActionRestore);
|
|
96
|
-
/** Alle terminals des Ausfallknotens */
|
|
97
|
-
for (const terminal of fullyResuppliedAction.deenergizedActions) {
|
|
98
|
-
insertSPARQL.push(switchingActionRestore.addTerminal(terminal));
|
|
99
|
-
}
|
|
100
|
-
/** Wiederversorgungsmaßnahmen */
|
|
101
|
-
for (let i = 0; i < fullyResuppliedAction.switchElements.length; i++) {
|
|
102
|
-
const switchAction = fullyResuppliedAction.switchElements[i];
|
|
103
|
-
/** SwitchingPlan restore*/
|
|
104
|
-
const switchingPlanRestore = (0, neplan_contingency_analysis_1.createSwitchingPlan)(common_utils_1.CommonUtils.generateUUID(), wnFeeder.baseIRI, `Schaltmaßnahme-Restore`, (i + 1), 'energise', outageNew, insertSPARQL);
|
|
105
|
-
insertSPARQL.push(switchingPlanRestore.setKind(fullyResuppliedAction.resupplyType));
|
|
106
|
-
modelContainer.addSwitchingPlan(switchingPlanRestore);
|
|
107
|
-
/** Switch-Element */
|
|
108
|
-
if (switchAction.swtch) {
|
|
109
|
-
const switchingActionRestore = (0, neplan_contingency_analysis_1.createSwitchAction)(common_utils_1.CommonUtils.generateUUID(), wnFeeder.baseIRI, `Schaltung-Restore`, SwitchActionKind_1.SwitchActionKind.close, switchingPlanRestore, insertSPARQL);
|
|
110
|
-
modelContainer.addSwitchingAction(switchingActionRestore);
|
|
111
|
-
insertSPARQL.push(switchingActionRestore.setSwitch(switchAction.swtch));
|
|
112
|
-
}
|
|
113
|
-
/** Switch-Element */
|
|
114
|
-
for (const terminal of switchAction.terminals) {
|
|
115
|
-
const switchingActionRestore = (0, neplan_contingency_analysis_1.createTerminalAction)(common_utils_1.CommonUtils.generateUUID(), wnFeeder.baseIRI, `Schaltung-Restore`, SwitchActionKind_1.SwitchActionKind.close, switchingPlanRestore, insertSPARQL);
|
|
116
|
-
modelContainer.addSwitchingAction(switchingActionRestore);
|
|
117
|
-
insertSPARQL.push(switchingActionRestore.addTerminal(terminal));
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
const length = insertSPARQL.length;
|
|
124
|
-
const graphURI = modelContainer.getGraphURI();
|
|
125
|
-
return length === 0 ? [] : [
|
|
126
|
-
`
|
|
127
|
-
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
|
|
128
|
-
PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
|
|
129
|
-
PREFIX entsoe: <http://entsoe.eu/CIM/SchemaExtension/3/1#>
|
|
130
|
-
PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
|
|
131
|
-
PREFIX enervance: <http://enervance.com/CIM/Extensions#>
|
|
132
|
-
${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, insertSPARQL)}
|
|
133
|
-
`
|
|
134
|
-
];
|
|
135
|
-
}
|
|
136
|
-
static findRessuplySwitchingActions(outageConnectivityNodes, baseModel) {
|
|
137
|
-
var _a, _b, _c;
|
|
138
|
-
const evaluatedResupplyActions = new Map();
|
|
139
|
-
const terminals = (Array.from(baseModel.terminals.values()));
|
|
140
|
-
const allCNs = (Array.from(baseModel.connectivityNodes.values()));
|
|
141
|
-
const externalNetworkInjections = (Array.from(baseModel.externalNetworkInjections.values()));
|
|
142
|
-
const switches = [...baseModel.switches.values(), ...baseModel.loadBreakSwitches.values(), ...baseModel.disconnectors.values(), ...baseModel.breakers.values()];
|
|
143
|
-
for (const faultConnectivityNode of outageConnectivityNodes) {
|
|
144
|
-
const changedTerminals = ContingencyAnalysisNeplanWestnetz.disconnectTerminals(faultConnectivityNode);
|
|
145
|
-
const failedSubstation = faultConnectivityNode.getSubstation();
|
|
146
|
-
const feederHeadNode = ((_a = failedSubstation.getPsrType()) === null || _a === void 0 ? void 0 : _a.getName()) === 'Umspannanlage';
|
|
147
|
-
// 1. CNs der ausgefallenen Station ignorieren
|
|
148
|
-
const failedCNs = feederHeadNode ? [faultConnectivityNode] : allCNs.filter(cn => cn.getSubstation().getUUID() === failedSubstation.getUUID());
|
|
149
|
-
const failedFeeder = feederHeadNode ? (_c = (_b = Array.from(faultConnectivityNode.terminals.values()).find(it => { var _a; return (_a = it.conductingEquipment) === null || _a === void 0 ? void 0 : _a.getAdditionalEquipmentContainer(); })) === null || _b === void 0 ? void 0 : _b.conductingEquipment) === null || _c === void 0 ? void 0 : _c.getAdditionalEquipmentContainer() : failedSubstation.getNormalEnergizingFeeder();
|
|
150
|
-
// CNs der Ortsnetzstationen (nicht Umspannanlage, nicht failed)
|
|
151
|
-
const candidateCNs = allCNs.filter(cn => {
|
|
152
|
-
var _a, _b;
|
|
153
|
-
return (((_a = cn.getSubstation().getPsrType()) === null || _a === void 0 ? void 0 : _a.getName()) !== 'Umspannanlage' && // alle CNs von Umspannanlagen
|
|
154
|
-
cn.getSubstation().getUUID() !== failedSubstation.getUUID()) && // alle CNs der ausgefallenen ONS
|
|
155
|
-
((_b = cn.getSubstation()) === null || _b === void 0 ? void 0 : _b.getNormalEnergizingFeeder()); // Substation muss einen Abgang besitzen
|
|
156
|
-
});
|
|
157
|
-
// 3. Suche nach CNs, die spannungslos sind
|
|
158
|
-
const disconnectedCNs = candidateCNs.filter(cn => !ContingencyAnalysisNeplanWestnetz.isNodeSupplied(cn, terminals.filter(t => !failedCNs.includes(t.connectivityNode)), switches, externalNetworkInjections));
|
|
159
|
-
const openTerminals = ContingencyAnalysisNeplanWestnetz.findOpenedTerminalsToOtherFeeders([faultConnectivityNode], failedFeeder, baseModel);
|
|
160
|
-
const openSwitches = ContingencyAnalysisNeplanWestnetz.findOpenedSwitchesToOtherFeeders([faultConnectivityNode], failedFeeder, baseModel);
|
|
161
|
-
const possibleActions = [...openTerminals, ...openSwitches];
|
|
162
|
-
// 4. Finde alle Kombinationen (1er, 2er, 3er etc.)
|
|
163
|
-
const combinations = ContingencyAnalysisNeplanWestnetz.buildSupplyCombinations(possibleActions).filter(set => set.length > 0);
|
|
164
|
-
const results = [];
|
|
165
|
-
const resupplyResults = new Array();
|
|
166
|
-
for (const combo of combinations) {
|
|
167
|
-
// Schaltzustand anwenden
|
|
168
|
-
const s = new Array();
|
|
169
|
-
for (const c of combo) {
|
|
170
|
-
c.terminals.forEach(it => s.push(it.name));
|
|
171
|
-
}
|
|
172
|
-
ContingencyAnalysisNeplanWestnetz.applySwitchCombination(combo);
|
|
173
|
-
// Abgang auf Zyklen prüfen
|
|
174
|
-
const cycle = ContingencyAnalysisNeplanWestnetz.hasCycleInFeeder(failedFeeder, terminals, switches);
|
|
175
|
-
const resupplyResult = {
|
|
176
|
-
uuid: common_utils_1.CommonUtils.generateUUID(),
|
|
177
|
-
faultConnectivityNode: faultConnectivityNode,
|
|
178
|
-
deenergizedActions: changedTerminals,
|
|
179
|
-
cycle: cycle,
|
|
180
|
-
switchElements: combo,
|
|
181
|
-
deenergezedConnectivityNodes: disconnectedCNs,
|
|
182
|
-
resuppledConnectivityNodes: new Array(),
|
|
183
|
-
resupplyType: EVSwitchingPlanKind_1.EVSwitchingPlanKind.noResupply
|
|
184
|
-
};
|
|
185
|
-
resupplyResults.push(resupplyResult);
|
|
186
|
-
for (const cn of disconnectedCNs) {
|
|
187
|
-
const reachable = ContingencyAnalysisNeplanWestnetz.isNodeSupplied(cn, terminals, switches, externalNetworkInjections);
|
|
188
|
-
if (reachable) {
|
|
189
|
-
resupplyResult.resuppledConnectivityNodes.push(cn);
|
|
190
|
-
results.push({ restoredCN: cn, actions: combo });
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
// resupplyType
|
|
194
|
-
if (resupplyResult.deenergezedConnectivityNodes.length === resupplyResult.resuppledConnectivityNodes.length) {
|
|
195
|
-
resupplyResult.resupplyType = EVSwitchingPlanKind_1.EVSwitchingPlanKind.fullyResupply;
|
|
196
|
-
}
|
|
197
|
-
else if (resupplyResult.resuppledConnectivityNodes.length > 0) {
|
|
198
|
-
resupplyResult.resupplyType = EVSwitchingPlanKind_1.EVSwitchingPlanKind.partiallyResupply;
|
|
199
|
-
}
|
|
200
|
-
// Schaltzustand rückgängig machen
|
|
201
|
-
ContingencyAnalysisNeplanWestnetz.applySwitchCombination(combo);
|
|
202
|
-
console.log(`${combinations.indexOf(combo) + 1} ${s.join(' ')}
|
|
203
|
-
\n cycle ${cycle}
|
|
204
|
-
\n resupplyResult ${resupplyResult.resupplyType}
|
|
205
|
-
\n ${resupplyResult.resuppledConnectivityNodes.map(it => it.name).join(' -> ')}`);
|
|
206
|
-
console.log();
|
|
207
|
-
}
|
|
208
|
-
// Schaltzustand wiederherstellen
|
|
209
|
-
changedTerminals.forEach(it => it.connected = true);
|
|
210
|
-
evaluatedResupplyActions.set(faultConnectivityNode.getUUID(), resupplyResults);
|
|
211
|
-
}
|
|
212
|
-
return evaluatedResupplyActions;
|
|
213
|
-
}
|
|
214
|
-
static hasCycleInFeeder(feeder, terminals, switches) {
|
|
215
|
-
// 1. Relevante ACLineSegment-Terminals filtern
|
|
216
|
-
const relevantTerminals = terminals.filter(t => {
|
|
217
|
-
var _a;
|
|
218
|
-
return ((_a = t.getConnectivityNode().getSubstation().getPsrType()) === null || _a === void 0 ? void 0 : _a.getName()) !== "Umspannanlage" &&
|
|
219
|
-
t.connected &&
|
|
220
|
-
(t.conductingEquipment instanceof ACLineSegment_1.ACLineSegment || t.conductingEquipment instanceof Switch_1.Switch);
|
|
221
|
-
});
|
|
222
|
-
// 2. Geschlossene Switches mit einem Feeder
|
|
223
|
-
const closedSwitches = switches.filter(sw => !sw.open && sw.getAdditionalEquipmentContainer());
|
|
224
|
-
// 3. Union-Find Struktur für ConnectivityNodes (Komponentenbildung über Switches)
|
|
225
|
-
const parent = new Map();
|
|
226
|
-
function find(u) {
|
|
227
|
-
if (!parent.has(u))
|
|
228
|
-
parent.set(u, u);
|
|
229
|
-
if (parent.get(u) === u)
|
|
230
|
-
return u;
|
|
231
|
-
const root = find(parent.get(u));
|
|
232
|
-
parent.set(u, root); // Pfadkompression
|
|
233
|
-
return root;
|
|
234
|
-
}
|
|
235
|
-
function union(u, v) {
|
|
236
|
-
const rootU = find(u);
|
|
237
|
-
const rootV = find(v);
|
|
238
|
-
if (rootU !== rootV) {
|
|
239
|
-
parent.set(rootU, rootV);
|
|
240
|
-
// parent.set(rootV, rootU);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
// 4. Union aller über Switches verbundenen ConnectivityNodes
|
|
244
|
-
for (const sw of closedSwitches) {
|
|
245
|
-
const swTerminals = terminals.filter(t => t.conductingEquipment.getUUID() === sw.getUUID() &&
|
|
246
|
-
t.connected);
|
|
247
|
-
if (swTerminals.length === 2) {
|
|
248
|
-
const [a, b] = swTerminals.map(t => t.getConnectivityNode().getUUID());
|
|
249
|
-
union(a, b);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
// 5. Adjazenzliste basierend auf den "komprimierten" Knoten
|
|
253
|
-
const adjacency = new Map();
|
|
254
|
-
function addEdgeCompressed(a, b) {
|
|
255
|
-
const u = find(a);
|
|
256
|
-
const v = find(b);
|
|
257
|
-
if (u === v)
|
|
258
|
-
return; // kein echter Kantenübergang, gleiches Cluster
|
|
259
|
-
if (!adjacency.has(u))
|
|
260
|
-
adjacency.set(u, new Set());
|
|
261
|
-
if (!adjacency.has(v))
|
|
262
|
-
adjacency.set(v, new Set());
|
|
263
|
-
adjacency.get(u).add(v);
|
|
264
|
-
adjacency.get(v).add(u);
|
|
265
|
-
}
|
|
266
|
-
// 6. ACLineSegment-Verbindungen hinzufügen
|
|
267
|
-
const switchFeeders = closedSwitches.map(it => it.getAdditionalEquipmentContainer());
|
|
268
|
-
const feeders = new Set([feeder, ...switchFeeders]);
|
|
269
|
-
for (const feeder of feeders) {
|
|
270
|
-
for (const eq of feeder.getAdditionalGroupedEquipments().values()) {
|
|
271
|
-
if (!(eq instanceof ACLineSegment_1.ACLineSegment || eq instanceof Switch_1.Switch))
|
|
272
|
-
continue;
|
|
273
|
-
const lineTerminals = relevantTerminals.filter(t => t.conductingEquipment.getUUID() === eq.getUUID());
|
|
274
|
-
if (lineTerminals.length === 2) {
|
|
275
|
-
const [a, b] = lineTerminals.map(t => t.connectivityNode.getUUID());
|
|
276
|
-
addEdgeCompressed(a, b);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
// 7. DFS-Zyklusprüfung auf dem komprimierten Graph
|
|
281
|
-
const visited = new Set();
|
|
282
|
-
function dfs(node, parent) {
|
|
283
|
-
visited.add(node);
|
|
284
|
-
for (const neighbor of adjacency.get(node) || []) {
|
|
285
|
-
if (neighbor === parent)
|
|
286
|
-
continue;
|
|
287
|
-
if (visited.has(neighbor))
|
|
288
|
-
return true;
|
|
289
|
-
if (dfs(neighbor, node))
|
|
290
|
-
return true;
|
|
291
|
-
}
|
|
292
|
-
return false;
|
|
293
|
-
}
|
|
294
|
-
for (const node of adjacency.keys()) {
|
|
295
|
-
if (!visited.has(node)) {
|
|
296
|
-
if (dfs(node, null))
|
|
297
|
-
return true;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
return false;
|
|
301
|
-
}
|
|
302
|
-
static buildSupplyCombinations(arr) {
|
|
303
|
-
const result = [];
|
|
304
|
-
const n = arr.length;
|
|
305
|
-
const max = 1 << n;
|
|
306
|
-
for (let i = 1; i < max; i++) {
|
|
307
|
-
const subset = [];
|
|
308
|
-
for (let j = 0; j < n; j++) {
|
|
309
|
-
if ((i & (1 << j)) !== 0) {
|
|
310
|
-
subset.push(arr[j]);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
result.push(subset);
|
|
314
|
-
}
|
|
315
|
-
return result;
|
|
316
|
-
}
|
|
317
|
-
static disconnectTerminals(faultConnectivityNode) {
|
|
318
|
-
const changedTerminals = new Array();
|
|
319
|
-
for (const terminal of faultConnectivityNode.terminals.values()) {
|
|
320
|
-
if (terminal.connected) {
|
|
321
|
-
terminal.connected = false;
|
|
322
|
-
changedTerminals.push(terminal);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
return changedTerminals;
|
|
326
|
-
}
|
|
327
|
-
static applySwitchCombination(switchElements) {
|
|
328
|
-
for (const switchElement of switchElements) {
|
|
329
|
-
for (const terminal of switchElement.terminals) {
|
|
330
|
-
terminal.connected = !terminal.connected;
|
|
331
|
-
}
|
|
332
|
-
if (switchElement.swtch)
|
|
333
|
-
switchElement.swtch.open = !switchElement.swtch.open;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
static isNodeSupplied(startNode, terminals, switches, externalInjections) {
|
|
337
|
-
var _a;
|
|
338
|
-
const visitedCN = new Set();
|
|
339
|
-
const visitedEquipments = new Set();
|
|
340
|
-
const equipmentIsOpen = new Set();
|
|
341
|
-
for (const sw of switches) {
|
|
342
|
-
if (sw.open)
|
|
343
|
-
equipmentIsOpen.add(sw.getUUID());
|
|
344
|
-
}
|
|
345
|
-
const cnToTerminals = new Map();
|
|
346
|
-
for (const t of terminals) {
|
|
347
|
-
if (!t.connected)
|
|
348
|
-
continue;
|
|
349
|
-
const cnUUID = t.connectivityNode.getUUID();
|
|
350
|
-
if (!cnToTerminals.has(cnUUID))
|
|
351
|
-
cnToTerminals.set(cnUUID, []);
|
|
352
|
-
cnToTerminals.get(cnUUID).push(t);
|
|
353
|
-
}
|
|
354
|
-
const stack = [startNode];
|
|
355
|
-
while (stack.length > 0) {
|
|
356
|
-
const currentCN = stack.pop();
|
|
357
|
-
const currentId = currentCN.getUUID();
|
|
358
|
-
if (visitedCN.has(currentId))
|
|
359
|
-
continue;
|
|
360
|
-
visitedCN.add(currentId);
|
|
361
|
-
const cnTerminals = (_a = cnToTerminals.get(currentId)) !== null && _a !== void 0 ? _a : [];
|
|
362
|
-
for (const terminal of cnTerminals) {
|
|
363
|
-
const eq = terminal.conductingEquipment;
|
|
364
|
-
const eqId = eq.getUUID();
|
|
365
|
-
if (equipmentIsOpen.has(eqId))
|
|
366
|
-
continue;
|
|
367
|
-
if (visitedEquipments.has(eqId))
|
|
368
|
-
continue;
|
|
369
|
-
visitedEquipments.add(eqId);
|
|
370
|
-
// Prüfe: Ist das Equipment ein ExternalNetworkInjection?
|
|
371
|
-
if (eq instanceof ExternalNetworkInjection_1.ExternalNetworkInjection) {
|
|
372
|
-
const isExternalNetworkInjection = externalInjections.some(ext => ext.getUUID() === eq.getUUID());
|
|
373
|
-
if (isExternalNetworkInjection)
|
|
374
|
-
return true;
|
|
375
|
-
}
|
|
376
|
-
// Traverse zu anderen Terminals
|
|
377
|
-
for (const otherTerminal of eq.terminals.values()) {
|
|
378
|
-
if (otherTerminal.getUUID() === terminal.getUUID())
|
|
379
|
-
continue;
|
|
380
|
-
if (!otherTerminal.connected)
|
|
381
|
-
continue;
|
|
382
|
-
const nextCN = otherTerminal.connectivityNode;
|
|
383
|
-
const nextId = nextCN.getUUID();
|
|
384
|
-
if (!visitedCN.has(nextId) && !stack.includes(nextCN)) {
|
|
385
|
-
stack.push(nextCN);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
return false;
|
|
391
|
-
}
|
|
392
|
-
static findOpenedSwitchesToOtherFeeders(connectivityNodes, failedFeeder, baseModel) {
|
|
393
|
-
var _a;
|
|
394
|
-
const results = new Array();
|
|
395
|
-
// Relevante Switches finden
|
|
396
|
-
const switches = [...baseModel.switches.values(), ...baseModel.loadBreakSwitches.values(), ...baseModel.disconnectors.values(), ...baseModel.breakers.values()];
|
|
397
|
-
for (const swtch of switches) {
|
|
398
|
-
// Nur nicht verbundene Switsches
|
|
399
|
-
if (!swtch.open)
|
|
400
|
-
continue;
|
|
401
|
-
const ceFeeder = swtch.getAdditionalEquipmentContainer();
|
|
402
|
-
const cnFeeders = Array.from(swtch.terminals.values()).map(it => { var _a, _b, _c; return (_c = (_b = (_a = it.connectivityNode) === null || _a === void 0 ? void 0 : _a.getSubstation()) === null || _b === void 0 ? void 0 : _b.getNormalEnergizingFeeder()) === null || _c === void 0 ? void 0 : _c.getUUID(); });
|
|
403
|
-
// sind an der Switch-Kombination ACLineSegments von anderen Abgängen angeschlossen
|
|
404
|
-
const switchConnectivityNodes = Array.from(swtch.terminals.values()).map(it => it.connectivityNode);
|
|
405
|
-
const switchConductingEquipments = (_a = switchConnectivityNodes.map(it => {
|
|
406
|
-
return Array.from(it.terminals.values()).map(it => it.conductingEquipment);
|
|
407
|
-
})) === null || _a === void 0 ? void 0 : _a.flat();
|
|
408
|
-
cnFeeders.push(...switchConductingEquipments.map(it => { var _a; return (_a = it.getAdditionalEquipmentContainer()) === null || _a === void 0 ? void 0 : _a.getUUID(); }));
|
|
409
|
-
if ((ceFeeder === null || ceFeeder === void 0 ? void 0 : ceFeeder.getUUID()) !== failedFeeder.getUUID() && !cnFeeders.includes(failedFeeder.getUUID()))
|
|
410
|
-
continue;
|
|
411
|
-
results.push({
|
|
412
|
-
swtch,
|
|
413
|
-
terminals: Array.from(swtch.terminals.values()).filter(it => !it.connected)
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
return results;
|
|
417
|
-
}
|
|
418
|
-
static findOpenedTerminalsToOtherFeeders(connectivityNodes, failedFeeder, baseModel) {
|
|
419
|
-
var _a, _b, _c;
|
|
420
|
-
// Relevante Terminals finden
|
|
421
|
-
const results = new Array();
|
|
422
|
-
for (const terminal of baseModel.terminals.values()) {
|
|
423
|
-
// Nur nicht verbundene Terminals
|
|
424
|
-
if (terminal.connected)
|
|
425
|
-
continue;
|
|
426
|
-
// Verbundungen zu Switches werden übersprungen
|
|
427
|
-
if (terminal.conductingEquipment instanceof Switch_1.Switch)
|
|
428
|
-
continue;
|
|
429
|
-
if (connectivityNodes.includes(terminal.connectivityNode))
|
|
430
|
-
continue;
|
|
431
|
-
// Nur Terminals, die eine Verbindung zum Feeder des betrachteten ConnectivityNodes
|
|
432
|
-
const ceFeeder = (_a = terminal.conductingEquipment) === null || _a === void 0 ? void 0 : _a.getAdditionalEquipmentContainer();
|
|
433
|
-
const cnFeeder = (_c = (_b = terminal.connectivityNode) === null || _b === void 0 ? void 0 : _b.getSubstation()) === null || _c === void 0 ? void 0 : _c.getNormalEnergizingFeeder();
|
|
434
|
-
if ((ceFeeder === null || ceFeeder === void 0 ? void 0 : ceFeeder.getUUID()) !== failedFeeder.getUUID() && (cnFeeder === null || cnFeeder === void 0 ? void 0 : cnFeeder.getUUID()) !== failedFeeder.getUUID())
|
|
435
|
-
continue;
|
|
436
|
-
results.push({
|
|
437
|
-
swtch: null,
|
|
438
|
-
terminals: new Array(terminal)
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
return results;
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
exports.ContingencyAnalysisNeplanWestnetz = ContingencyAnalysisNeplanWestnetz;
|
|
445
|
-
//# sourceMappingURL=contingency-analysis.neplan.westnetz.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contingency-analysis.neplan.westnetz.js","sourceRoot":"","sources":["../../../src/analysis/analysis-neplan/contingency-analysis.neplan.westnetz.ts"],"names":[],"mappings":"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"}
|