DynamicSecurityAnalysisParameters.java
/**
* Copyright (c) 2023, 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.security.dynamic;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.powsybl.commons.config.ModuleConfig;
import com.powsybl.commons.config.PlatformConfig;
import com.powsybl.commons.extensions.AbstractExtendable;
import com.powsybl.commons.util.ServiceLoaderCache;
import com.powsybl.dynamicsimulation.DynamicSimulationParameters;
import com.powsybl.security.dynamic.json.JsonDynamicSecurityAnalysisParameters;
import java.nio.file.Path;
import java.util.Objects;
/**
* Parameters for dynamic security analysis computation.
* Extensions may be added, for instance for implementation-specific parameters.
*
* @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
*/
public class DynamicSecurityAnalysisParameters extends AbstractExtendable<DynamicSecurityAnalysisParameters> {
public static final String VERSION = "1.0";
private DynamicSimulationParameters dynamicSimulationParameters = new DynamicSimulationParameters();
private ContingenciesParameters contingenciesParameters = new ContingenciesParameters();
public static class ContingenciesParameters {
static final double DEFAULT_CONTINGENCIES_START_TIME = 5d;
@JsonProperty("contingencies-start-time")
private double contingenciesStartTime;
public ContingenciesParameters() {
this(DEFAULT_CONTINGENCIES_START_TIME);
}
public ContingenciesParameters(double contingenciesStartTime) {
this.contingenciesStartTime = contingenciesStartTime;
}
/**
* Defines when the contingencies start during the dynamic simulation.
* Must be between {@link DynamicSimulationParameters#getStartTime()} and {@link DynamicSimulationParameters#getStopTime()} ()}
* @return
*/
public double getContingenciesStartTime() {
return contingenciesStartTime;
}
public ContingenciesParameters setContingenciesStartTime(double contingenciesStartTime) {
this.contingenciesStartTime = contingenciesStartTime;
return this;
}
public void load(ModuleConfig config) {
setContingenciesStartTime(config.getDoubleProperty("contingencies-start-time", DEFAULT_CONTINGENCIES_START_TIME));
}
}
/**
* Load parameters from platform default config.
*/
public static DynamicSecurityAnalysisParameters load() {
return load(PlatformConfig.defaultConfig());
}
/**
* Load parameters from a provided platform config.
*/
public static DynamicSecurityAnalysisParameters load(PlatformConfig platformConfig) {
Objects.requireNonNull(platformConfig);
DynamicSecurityAnalysisParameters parameters = new DynamicSecurityAnalysisParameters();
parameters.setDynamicSimulationParameters(DynamicSimulationParameters.load(platformConfig));
platformConfig.getOptionalModuleConfig("dynamic-security-analysis-default-parameters")
.ifPresent(config -> parameters.getDynamicContingenciesParameters().load(config));
parameters.readExtensions(platformConfig);
return parameters;
}
private void readExtensions(PlatformConfig platformConfig) {
for (DynamicSecurityAnalysisProvider provider : new ServiceLoaderCache<>(DynamicSecurityAnalysisProvider.class).getServices()) {
provider.loadSpecificParameters(platformConfig).ifPresent(securityAnalysisParametersExtension ->
addExtension((Class) securityAnalysisParametersExtension.getClass(), securityAnalysisParametersExtension));
}
}
public DynamicSimulationParameters getDynamicSimulationParameters() {
return dynamicSimulationParameters;
}
public DynamicSecurityAnalysisParameters setDynamicSimulationParameters(DynamicSimulationParameters dynamicSimulationParameters) {
this.dynamicSimulationParameters = dynamicSimulationParameters;
return this;
}
public ContingenciesParameters getDynamicContingenciesParameters() {
return contingenciesParameters;
}
public DynamicSecurityAnalysisParameters setDynamicContingenciesParameters(ContingenciesParameters contingenciesParameters) {
this.contingenciesParameters = contingenciesParameters;
return this;
}
public void write(Path parametersPath) {
JsonDynamicSecurityAnalysisParameters.write(this, parametersPath);
}
public void update(Path parametersPath) {
JsonDynamicSecurityAnalysisParameters.update(this, parametersPath);
}
}