All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.powsybl.sensitivity.SensitivityAnalysisProvider Maven / Gradle / Ivy

/*
 * Copyright (c) 2020, 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.sensitivity;

import com.google.common.collect.Lists;
import com.powsybl.commons.Versionable;
import com.powsybl.commons.config.PlatformConfig;
import com.powsybl.commons.config.PlatformConfigNamedProvider;
import com.powsybl.commons.extensions.Extension;
import com.powsybl.commons.extensions.ExtensionJsonSerializer;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.ComputationManager;
import com.powsybl.contingency.Contingency;
import com.powsybl.iidm.network.Network;

import java.util.*;
import java.util.concurrent.CompletableFuture;

/**
 * Sensitivity analysis provider
 *
 * 

* Sensitivity analysis is used to assess the impact of a small modification * of a network variables on the value of network functions. * This analysis can be assimilated to a partial derivative computed on a given * network variant and on that variant modified based on a list of contingencies, if specified. *

*

* PTDFs used in Flowbased methodology for example are sensitivity analysis * results. The sensitivity variables are the GSK shift and the function reference * are the monitored lines/transformers flows. *

* @author Sebastien Murgey {@literal } */ public interface SensitivityAnalysisProvider extends Versionable, PlatformConfigNamedProvider { static List findAll() { return Lists.newArrayList(ServiceLoader.load(SensitivityAnalysisProvider.class, SensitivityAnalysisProvider.class.getClassLoader())); } /** * Run a single sensitivity analysis. * Factors are given by a {@code factorReader} on the {@code workingVariantId} of the {@code network} * on pre-contingency state and after each {@link com.powsybl.contingency.Contingency} provided by * {@code contingencies} according to the {@code parameters}. * * @param network IIDM network on which the sensitivity analysis will be performed * @param workingVariantId network variant ID on which the analysis will be performed * @param factorReader provider of sensitivity factors to be computed * @param resultWriter provider of sensitivity results * @param contingencies list of contingencies after which sensitivity factors will be computed * @param variableSets list of variableSets * @param parameters specific sensitivity analysis parameters * @param computationManager a computation manager to external program execution * @param reportNode a reportNode for functional logs * @return a {@link CompletableFuture} on {@link SensitivityAnalysisResult} that gathers sensitivity factor values */ CompletableFuture run(Network network, String workingVariantId, SensitivityFactorReader factorReader, SensitivityResultWriter resultWriter, List contingencies, List variableSets, SensitivityAnalysisParameters parameters, ComputationManager computationManager, ReportNode reportNode); /** * The serializer for implementation-specific parameters, or {@link Optional#empty()} if the implementation * does not have any specific parameters, or does not support JSON serialization. * *

Note that the actual serializer type should be {@code ExtensionJsonSerializer} * where {@code MyParametersExtension} is the specific parameters class. * * @return The serializer for implementation-specific parameters. */ default Optional getSpecificParametersSerializer() { return Optional.empty(); } /** * Reads implementation-specific parameters from platform config, or return {@link Optional#empty()} * if the implementation does not have any specific parameters, or does not support loading from config. * * @return The specific parameters read from platform config. */ default Optional> loadSpecificParameters(PlatformConfig config) { return Optional.empty(); } /** * Reads implementation-specific parameters from a Map, or return {@link Optional#empty()} * if the implementation does not have any specific parameters, or does not support loading from config. * * @return The specific parameters read from Map. */ default Optional> loadSpecificParameters(Map properties) { return Optional.empty(); } /** * Updates implementation-specific parameters from a Map. */ default void updateSpecificParameters(Extension extension, Map properties) { } /** * * @return The name of the loadflow used for the sensitivity analysis. */ default Optional getLoadFlowProviderName() { return Optional.empty(); } /** * get the list of the specific parameters names. * * @return the list of the specific parameters names. */ default List getSpecificParametersNames() { return Collections.emptyList(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy