From e45f71078a9ddd87e7b58e228562fba507b9b11b Mon Sep 17 00:00:00 2001 From: vmouradian Date: Wed, 29 Jan 2025 11:52:07 +0100 Subject: [PATCH] cache outerloop config supplier Signed-off-by: vmouradian --- .../powsybl/openloadflow/OpenLoadFlowParameters.java | 6 ++++-- .../lf/outerloop/config/AbstractAcOuterLoopConfig.java | 8 ++++++++ .../lf/outerloop/config/AbstractDcOuterLoopConfig.java | 10 +++++++++- .../powsybl/openloadflow/sa/AcSecurityAnalysis.java | 3 ++- .../powsybl/openloadflow/sa/DcSecurityAnalysis.java | 3 ++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/powsybl/openloadflow/OpenLoadFlowParameters.java b/src/main/java/com/powsybl/openloadflow/OpenLoadFlowParameters.java index a38078adb3..357168616a 100644 --- a/src/main/java/com/powsybl/openloadflow/OpenLoadFlowParameters.java +++ b/src/main/java/com/powsybl/openloadflow/OpenLoadFlowParameters.java @@ -31,6 +31,8 @@ import com.powsybl.openloadflow.dc.equations.DcEquationSystemCreationParameters; import com.powsybl.openloadflow.graph.GraphConnectivityFactory; import com.powsybl.openloadflow.lf.AbstractLoadFlowParameters; +import com.powsybl.openloadflow.lf.outerloop.config.AbstractAcOuterLoopConfig; +import com.powsybl.openloadflow.lf.outerloop.config.AbstractDcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.AcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.DcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.DefaultAcOuterLoopConfig; @@ -1824,14 +1826,14 @@ public static AcLoadFlowParameters createAcParameters(Network network, LoadFlowP } static List createAcOuterLoops(LoadFlowParameters parameters, OpenLoadFlowParameters parametersExt) { - AcOuterLoopConfig outerLoopConfig = AcOuterLoopConfig.findOuterLoopConfig() + AcOuterLoopConfig outerLoopConfig = AbstractAcOuterLoopConfig.getOuterLoopConfig() .orElseGet(() -> parametersExt.getOuterLoopNames() != null ? new ExplicitAcOuterLoopConfig() : new DefaultAcOuterLoopConfig()); return outerLoopConfig.configure(parameters, parametersExt); } static List createDcOuterLoops(LoadFlowParameters parameters, OpenLoadFlowParameters parametersExt) { - DcOuterLoopConfig outerLoopConfig = DcOuterLoopConfig.findOuterLoopConfig() + DcOuterLoopConfig outerLoopConfig = AbstractDcOuterLoopConfig.getOuterLoopConfig() .orElseGet(() -> parametersExt.getOuterLoopNames() != null ? new ExplicitDcOuterLoopConfig() : new DefaultDcOuterLoopConfig()); return outerLoopConfig.configure(parameters, parametersExt); diff --git a/src/main/java/com/powsybl/openloadflow/lf/outerloop/config/AbstractAcOuterLoopConfig.java b/src/main/java/com/powsybl/openloadflow/lf/outerloop/config/AbstractAcOuterLoopConfig.java index 09c15843bb..f01cac2f52 100644 --- a/src/main/java/com/powsybl/openloadflow/lf/outerloop/config/AbstractAcOuterLoopConfig.java +++ b/src/main/java/com/powsybl/openloadflow/lf/outerloop/config/AbstractAcOuterLoopConfig.java @@ -7,6 +7,7 @@ */ package com.powsybl.openloadflow.lf.outerloop.config; +import com.google.common.base.Suppliers; import com.powsybl.loadflow.LoadFlowParameters; import com.powsybl.openloadflow.OpenLoadFlowParameters; import com.powsybl.openloadflow.ac.outerloop.*; @@ -17,6 +18,7 @@ import java.util.List; import java.util.Optional; +import java.util.function.Supplier; /** * @author Geoffroy Jamgotchian {@literal } @@ -25,9 +27,15 @@ public abstract class AbstractAcOuterLoopConfig implements AcOuterLoopConfig { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractAcOuterLoopConfig.class); + private static final Supplier> CONFIG_SUPPLIER = Suppliers.memoize(AcOuterLoopConfig::findOuterLoopConfig); + protected AbstractAcOuterLoopConfig() { } + public static Optional getOuterLoopConfig() { + return CONFIG_SUPPLIER.get(); + } + protected static Optional createDistributedSlackOuterLoop(LoadFlowParameters parameters, OpenLoadFlowParameters parametersExt, ContingencyLoadFlowParameters contingencyParameters) { if (contingencyParameters.isDistributedSlack(parameters)) { return Optional.of(DistributedSlackOuterLoop.create(contingencyParameters.getBalanceType(parameters), parametersExt.isLoadPowerFactorConstant(), parametersExt.isUseActiveLimits(), diff --git a/src/main/java/com/powsybl/openloadflow/lf/outerloop/config/AbstractDcOuterLoopConfig.java b/src/main/java/com/powsybl/openloadflow/lf/outerloop/config/AbstractDcOuterLoopConfig.java index 6e14ea20a1..fbb22cae9f 100644 --- a/src/main/java/com/powsybl/openloadflow/lf/outerloop/config/AbstractDcOuterLoopConfig.java +++ b/src/main/java/com/powsybl/openloadflow/lf/outerloop/config/AbstractDcOuterLoopConfig.java @@ -7,6 +7,7 @@ */ package com.powsybl.openloadflow.lf.outerloop.config; +import com.google.common.base.Suppliers; import com.powsybl.loadflow.LoadFlowParameters; import com.powsybl.openloadflow.OpenLoadFlowParameters; import com.powsybl.openloadflow.dc.DcAreaInterchangeControlOuterLoop; @@ -16,15 +17,22 @@ import com.powsybl.openloadflow.sa.extensions.ContingencyLoadFlowParameters; import java.util.Optional; +import java.util.function.Supplier; /** * @author Valentin Mouradian {@literal } */ -abstract class AbstractDcOuterLoopConfig implements DcOuterLoopConfig { +public abstract class AbstractDcOuterLoopConfig implements DcOuterLoopConfig { + + public static final Supplier> CONFIG_SUPPLIER = Suppliers.memoize(DcOuterLoopConfig::findOuterLoopConfig); protected AbstractDcOuterLoopConfig() { } + public static Optional getOuterLoopConfig() { + return CONFIG_SUPPLIER.get(); + } + protected static Optional createAreaInterchangeControlOuterLoop(LoadFlowParameters parameters, OpenLoadFlowParameters parametersExt, ContingencyLoadFlowParameters contingencyParameters) { if (contingencyParameters.isAreaInterchangeControl(parametersExt)) { ActivePowerDistribution activePowerDistribution = ActivePowerDistribution.create(contingencyParameters.getBalanceType(parameters), parametersExt.isLoadPowerFactorConstant(), parametersExt.isUseActiveLimits()); diff --git a/src/main/java/com/powsybl/openloadflow/sa/AcSecurityAnalysis.java b/src/main/java/com/powsybl/openloadflow/sa/AcSecurityAnalysis.java index 9caa7271c5..0d46566778 100644 --- a/src/main/java/com/powsybl/openloadflow/sa/AcSecurityAnalysis.java +++ b/src/main/java/com/powsybl/openloadflow/sa/AcSecurityAnalysis.java @@ -21,6 +21,7 @@ import com.powsybl.openloadflow.ac.outerloop.AcOuterLoop; import com.powsybl.openloadflow.graph.GraphConnectivityFactory; import com.powsybl.openloadflow.lf.outerloop.OuterLoopStatus; +import com.powsybl.openloadflow.lf.outerloop.config.AbstractAcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.AcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.DefaultAcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.ExplicitAcOuterLoopConfig; @@ -127,7 +128,7 @@ protected Consumer createParametersResetter(AcLoadFlowPara @Override protected void applyContingencyParameters(AcLoadFlowParameters parameters, ContingencyLoadFlowParameters contingencyParameters, LoadFlowParameters loadFlowParameters, OpenLoadFlowParameters openLoadFlowParameters) { - AcOuterLoopConfig outerLoopConfig = AcOuterLoopConfig.findOuterLoopConfig() + AcOuterLoopConfig outerLoopConfig = AbstractAcOuterLoopConfig.getOuterLoopConfig() .orElseGet(() -> contingencyParameters.getOuterLoopNames().isPresent() ? new ExplicitAcOuterLoopConfig() : new DefaultAcOuterLoopConfig()); parameters.setOuterLoops(outerLoopConfig.configure(loadFlowParameters, openLoadFlowParameters, contingencyParameters)); diff --git a/src/main/java/com/powsybl/openloadflow/sa/DcSecurityAnalysis.java b/src/main/java/com/powsybl/openloadflow/sa/DcSecurityAnalysis.java index a076cf9259..db3024712d 100644 --- a/src/main/java/com/powsybl/openloadflow/sa/DcSecurityAnalysis.java +++ b/src/main/java/com/powsybl/openloadflow/sa/DcSecurityAnalysis.java @@ -16,6 +16,7 @@ import com.powsybl.openloadflow.dc.equations.DcEquationType; import com.powsybl.openloadflow.dc.equations.DcVariableType; import com.powsybl.openloadflow.graph.GraphConnectivityFactory; +import com.powsybl.openloadflow.lf.outerloop.config.AbstractDcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.DcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.DefaultDcOuterLoopConfig; import com.powsybl.openloadflow.lf.outerloop.config.ExplicitDcOuterLoopConfig; @@ -90,7 +91,7 @@ protected Consumer createParametersResetter(DcLoadFlowPara @Override protected void applyContingencyParameters(DcLoadFlowParameters parameters, ContingencyLoadFlowParameters contingencyParameters, LoadFlowParameters loadFlowParameters, OpenLoadFlowParameters openLoadFlowParameters) { - DcOuterLoopConfig outerLoopConfig = DcOuterLoopConfig.findOuterLoopConfig() + DcOuterLoopConfig outerLoopConfig = AbstractDcOuterLoopConfig.getOuterLoopConfig() .orElseGet(() -> contingencyParameters.getOuterLoopNames().isPresent() ? new ExplicitDcOuterLoopConfig() : new DefaultDcOuterLoopConfig()); parameters.setOuterLoops(outerLoopConfig.configure(loadFlowParameters, openLoadFlowParameters, contingencyParameters));