FinalStepModels.java
/**
* Copyright (c) 2024, RTE (http://www.rte-france.com/)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.dynawo;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.dynawo.models.BlackBoxModel;
import com.powsybl.dynawo.models.macroconnections.MacroConnect;
import com.powsybl.dynawo.models.macroconnections.MacroConnectionsAdder;
import com.powsybl.dynawo.models.macroconnections.MacroConnector;
import com.powsybl.dynawo.parameters.ParametersSet;
import com.powsybl.dynawo.xml.DynawoData;
import com.powsybl.dynawo.xml.MacroStaticReference;
import java.util.*;
import java.util.function.Consumer;
/**
* @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
*/
public final class FinalStepModels implements DynawoData {
private final List<BlackBoxModel> dynamicModels;
private final Map<String, MacroStaticReference> macroStaticReferences;
private final List<MacroConnect> macroConnectList;
private final Map<String, MacroConnector> macroConnectorsMap;
public static FinalStepModels createFrom(BlackBoxModelSupplier blackBoxModelSupplier, SimulationModels simulationModels,
List<BlackBoxModel> dynamicModels, Consumer<ParametersSet> parametersAdder, ReportNode reportNode) {
BlackBoxModelSupplier finalStepBbmSupplier = BlackBoxModelSupplier.createFrom(blackBoxModelSupplier, dynamicModels);
Map<String, MacroStaticReference> macroStaticReferences = new LinkedHashMap<>();
List<MacroConnect> macroConnectList = new ArrayList<>();
Map<String, MacroConnector> macroConnectorsMap = new LinkedHashMap<>();
MacroConnectionsAdder macroConnectionsAdder = new MacroConnectionsAdder(
finalStepBbmSupplier::getEquipmentDynamicModel,
finalStepBbmSupplier::getPureDynamicModel,
macroConnectList::add,
(n, f) -> {
if (!simulationModels.hasMacroConnector(n)) {
macroConnectorsMap.computeIfAbsent(n, f);
}
},
reportNode);
// Write macro connection
for (BlackBoxModel bbm : dynamicModels) {
if (!simulationModels.hasMacroStaticReference(bbm)) {
macroStaticReferences.computeIfAbsent(bbm.getName(), k -> new MacroStaticReference(k, bbm.getVarsMapping()));
}
bbm.createMacroConnections(macroConnectionsAdder);
bbm.createDynamicModelParameters(parametersAdder);
}
return new FinalStepModels(dynamicModels, macroConnectList, macroConnectorsMap, macroStaticReferences);
}
private FinalStepModels(List<BlackBoxModel> dynamicModels,
List<MacroConnect> macroConnectList,
Map<String, MacroConnector> macroConnectorsMap,
Map<String, MacroStaticReference> macroStaticReferences) {
this.dynamicModels = dynamicModels;
this.macroConnectList = macroConnectList;
this.macroConnectorsMap = macroConnectorsMap;
this.macroStaticReferences = macroStaticReferences;
}
@Override
public List<BlackBoxModel> getBlackBoxDynamicModels() {
return dynamicModels;
}
@Override
public Collection<MacroConnector> getMacroConnectors() {
return macroConnectorsMap.values();
}
@Override
public Collection<MacroStaticReference> getMacroStaticReferences() {
return macroStaticReferences.values();
}
@Override
public List<MacroConnect> getMacroConnectList() {
return macroConnectList;
}
}