From 7c38660a4ec09133d15a4749ac1bf3179c13af4b Mon Sep 17 00:00:00 2001 From: CARON Alice Date: Fri, 16 Jan 2026 17:25:11 +0100 Subject: [PATCH] Clean documentation part, redirect to read the docs only Signed-off-by: CARON Alice --- backup/EmptyContingencyListProvider.md | 26 - backup/configuration/itools.md | 58 - .../parameters/DynamicSimulationParameters.md | 34 - .../parameters/DynawoSimulationParameters.md | 33 - .../parameters/SecurityAnalysisParameters.md | 38 - backup/configuration/providers/index.md | 54 - backup/installation/itools-packager.md | 101 -- backup/itools-mpi.md | 27 - backup/plugins-info.md | 38 - backup/run-impact-analysis.md | 71 - backup/schema-iidm.png | Bin 62921 -> 0 bytes backup/to_sort/configuration.md | 49 - backup/tutorials/iidm/exporter.md | 112 -- backup/tutorials/iidm/importer.md | 153 -- backup/tutorials/index.md | 20 - backup/tutorials/itools/extend-itools.md | 221 --- .../user_stories/images/Compute_Optimizer.svg | 77 - backup/user_stories/images/Compute_SA.svg | 77 - .../images/Compute_Sensitivity.svg | 77 - backup/user_stories/images/Export.svg | 79 - backup/user_stories/images/Modify_iAL.svg | 83 - backup/user_stories/images/Network.svg | 100 -- .../user_stories/images/Network_extract.svg | 112 -- .../user_stories/images/Network_merging.svg | 112 -- .../Workflow_Capacity_Calculation_RSC.svg | 699 -------- .../images/[Process]N-1Eurostag.svg | 1492 ----------------- .../images/busBreakerTopology.svg | 395 ----- backup/user_stories/images/busTopology.svg | 329 ---- .../images/nodeBreakerTopology.svg | 675 -------- .../images/nodeBreakerTopologyGraph.svg | 1126 ------------- backup/user_stories/topology.md | 100 -- .../developer/scripting/groovy.md | 30 - .../developer/scripting/img/groovy-logo.png | Bin 12303 -> 0 bytes .../developer/scripting/img/python-logo.png | Bin 10550 -> 0 bytes .../developer/scripting/index.md | 20 - .../user/configuration/computation-local.md | 41 - .../default-computation-manager.md | 35 - .../user/configuration/network.md | 26 - .../configuration/simulation-parameters.md | 75 - .../user/configuration/table-formatter.md | 47 - pages/documentation/user/index.md | 183 -- .../user-stories/capacity_calculation_rsc.md | 129 -- .../capacity_calculation_rsc/Compute_LF.svg | 77 - .../Compute_Optimizer.svg | 77 - .../capacity_calculation_rsc/Compute_SA.svg | 77 - .../Compute_Sensitivity.svg | 77 - .../img/capacity_calculation_rsc/Export.svg | 79 - .../img/capacity_calculation_rsc/File.svg | 63 - .../img/capacity_calculation_rsc/Import.svg | 84 - .../capacity_calculation_rsc/Modify_N-1.svg | 109 -- .../capacity_calculation_rsc/Modify_iAL.svg | 83 - .../img/capacity_calculation_rsc/Network.svg | 100 -- .../Network_Simple_Final.svg | 217 --- .../Network_Simple_Initial.svg | 239 --- .../Network_extract.svg | 112 -- .../Network_merging.svg | 112 -- .../img/capacity_calculation_rsc/Workflow.svg | 459 ----- .../Workflow_Capacity_Calculation_RSC.svg | 704 -------- .../[Process]N-1Eurostag.svg | 1492 ----------------- .../busBreakerTopology.svg | 395 ----- .../capacity_calculation_rsc/busTopology.svg | 329 ---- .../nodeBreakerTopology.svg | 675 -------- .../nodeBreakerTopologyGraph.svg | 1126 ------------- .../documentation/user/user-stories/index.md | 7 - pages/overview/getting-started.html | 1 - 65 files changed, 13848 deletions(-) delete mode 100644 backup/EmptyContingencyListProvider.md delete mode 100644 backup/configuration/itools.md delete mode 100644 backup/configuration/parameters/DynamicSimulationParameters.md delete mode 100644 backup/configuration/parameters/DynawoSimulationParameters.md delete mode 100644 backup/configuration/parameters/SecurityAnalysisParameters.md delete mode 100644 backup/configuration/providers/index.md delete mode 100644 backup/installation/itools-packager.md delete mode 100644 backup/itools-mpi.md delete mode 100644 backup/plugins-info.md delete mode 100644 backup/run-impact-analysis.md delete mode 100644 backup/schema-iidm.png delete mode 100644 backup/to_sort/configuration.md delete mode 100644 backup/tutorials/iidm/exporter.md delete mode 100644 backup/tutorials/iidm/importer.md delete mode 100644 backup/tutorials/index.md delete mode 100644 backup/tutorials/itools/extend-itools.md delete mode 100644 backup/user_stories/images/Compute_Optimizer.svg delete mode 100644 backup/user_stories/images/Compute_SA.svg delete mode 100644 backup/user_stories/images/Compute_Sensitivity.svg delete mode 100644 backup/user_stories/images/Export.svg delete mode 100644 backup/user_stories/images/Modify_iAL.svg delete mode 100644 backup/user_stories/images/Network.svg delete mode 100644 backup/user_stories/images/Network_extract.svg delete mode 100644 backup/user_stories/images/Network_merging.svg delete mode 100644 backup/user_stories/images/Workflow_Capacity_Calculation_RSC.svg delete mode 100644 backup/user_stories/images/[Process]N-1Eurostag.svg delete mode 100644 backup/user_stories/images/busBreakerTopology.svg delete mode 100644 backup/user_stories/images/busTopology.svg delete mode 100644 backup/user_stories/images/nodeBreakerTopology.svg delete mode 100644 backup/user_stories/images/nodeBreakerTopologyGraph.svg delete mode 100644 backup/user_stories/topology.md delete mode 100644 pages/documentation/developer/scripting/groovy.md delete mode 100644 pages/documentation/developer/scripting/img/groovy-logo.png delete mode 100644 pages/documentation/developer/scripting/img/python-logo.png delete mode 100644 pages/documentation/developer/scripting/index.md delete mode 100644 pages/documentation/user/configuration/computation-local.md delete mode 100644 pages/documentation/user/configuration/default-computation-manager.md delete mode 100644 pages/documentation/user/configuration/network.md delete mode 100644 pages/documentation/user/configuration/simulation-parameters.md delete mode 100644 pages/documentation/user/configuration/table-formatter.md delete mode 100644 pages/documentation/user/index.md delete mode 100644 pages/documentation/user/user-stories/capacity_calculation_rsc.md delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_LF.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_Optimizer.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_SA.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_Sensitivity.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Export.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/File.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Import.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Modify_N-1.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Modify_iAL.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_Simple_Final.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_Simple_Initial.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_extract.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_merging.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Workflow.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/Workflow_Capacity_Calculation_RSC.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/[Process]N-1Eurostag.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/busBreakerTopology.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/busTopology.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/nodeBreakerTopology.svg delete mode 100644 pages/documentation/user/user-stories/img/capacity_calculation_rsc/nodeBreakerTopologyGraph.svg delete mode 100644 pages/documentation/user/user-stories/index.md diff --git a/backup/EmptyContingencyListProvider.md b/backup/EmptyContingencyListProvider.md deleted file mode 100644 index 50b5f1ff..00000000 --- a/backup/EmptyContingencyListProvider.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: EmptyContingencyListProvider -layout: default ---- - -The `com.powsybl.contingency.EmptyContingencyListProvider` is a special implementation of the -[ContingenciesProvider](index.md#ContingenciesProvider) interface that provided an empty list of contingencies. This -implementation should be use to check violations on a N-state. - -# Configuration - -To use the `EmptyContingencyListProvider`, configure the `ContingenciesProviderFactory` property of the -[componentDefaultConfig](../pages/documentation/user/configuration/componentDefaultConfig.md) module. - -## YAML -```yaml -componentDefaultConfig: - ContingenciesProviderFactory: com.powsybl.contingency.EmptyContingencyListProviderFactory -``` - -## XML -```xml - - com.powsybl.action.dsl.GroovyDslContingenciesProviderFactory - -``` diff --git a/backup/configuration/itools.md b/backup/configuration/itools.md deleted file mode 100644 index 0bf1f06e..00000000 --- a/backup/configuration/itools.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: itools.conf -layout: default ---- - -The `POWSYBL_HOME/etc/itools.conf` file is a [properties](https://en.wikipedia.org/wiki/.properties) file that contains -system properties to configure the framework. It is generated by the [itools-packager](../installation/itools-packager.md) -maven plugin. - -# Properties - -## java_xmx -The `java_xmx` property is an optional property that defines the amount of the Java Heap memory. The default value is 8 Gb. - -## powsybl_config_dirs -The `itools_config_dir` property is an optional property that defines the configuration folders. The default -value is `$HOME/.itools`. The folders are separated by a colon. - -## powsybl_config_name -The `powsybl_config_name` property is an optional property that defines the basename of the configuration file. The default -value is `config`. - -At startup, Powsybl looks in the configuration directories defined in the `powsybl_config_dirs` for a YAML configuration -file first, for a XML configuration file then and finally for properties files. - -All the configuration files are stacked to allow a user to partially or totally overload the system configuration of a -module. - -# Deprecated properties - -## itools_cache_dir -The `itools_cache_dir` property is deprecated since V2.2.0. The `itools_cache_dir` property was an optional property that -defined the path to the cache folder used by modules that required cache functionalities. The default value was -`$HOME/.cache/itools`. - -## itools_config_dir -The `itools_config_dir` property is deprecated since V2.2.0. Use the `powsybl_config_dirs` property instead. - -## itools_config_name -The `itools_config_name` property is deprecated since V2.2.0. Use the `powsybl_config_name` property instead. - -## mpi_hosts -The `mpi_hosts` property is deprecated since V3.0.0. This parameter is configured in [itools-mpi.conf](../itools-mpi.md). - -## mpi_tasks -The `mpi_tasks` property is deprecated since V3.0.0. This parameter is configured in [itools-mpi.conf](../itools-mpi.md). - -# Example -```properties -# Configuration's directories -powsybl_config_dirs=$HOME/powsybl/etc:$HOME/.itools - -# Configuration's file basename -powsybl_config_name=config - -# Java maximum heap memory -java_xmx=8G -``` diff --git a/backup/configuration/parameters/DynamicSimulationParameters.md b/backup/configuration/parameters/DynamicSimulationParameters.md deleted file mode 100644 index e4146e98..00000000 --- a/backup/configuration/parameters/DynamicSimulationParameters.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: DynamicSimulationParameters -layout: default ---- - -The `com.powsybl.dynamicsimulation.DynamicSimulationParameters` class provides the generic parameters for all `com.powsybl.dynamicsimulation.DynamicSimulation` -implementations. Specific parameters should be provided as an extension of the `DynamicSimulationParameters` class. - -# Properties - -## startTime -The `startTime` property is an optional property that defines the instant of time at which the dynamic simulation begins, in -seconds. - -## stopTime -The `stopTime` property is an optional property that defined the instant of time at which the dynamic simulation ends, in -seconds. - -# Configuration -The default values of all the optional properties are read from the [dynamic-simulation-default-parameter](../../../pages/documentation/user/configuration/dynamic-simulation-default-parameters.md) -module, defined in the configuration file. - -## Examples -```json -{ - "version": "1.0" - "startTime": 0 - "stopTime": 3600 - "extensions": { - ... - } -} - -``` diff --git a/backup/configuration/parameters/DynawoSimulationParameters.md b/backup/configuration/parameters/DynawoSimulationParameters.md deleted file mode 100644 index 113f3238..00000000 --- a/backup/configuration/parameters/DynawoSimulationParameters.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: DynawoSimulationParameters -layout: default ---- - -The `com.powsybl.dynawo.simulator.DynawoSimulationParameters` class provides the specific parameters of a dynamic simulation run with Dynawo. - -# Properties - -## parametersFile -The `parametersFile` property is a required property that defines the path of the main parameters file. - -## network.parametersFile -The `network.parametersFile` property is a required property that defines the path of the network parameters file - -## network.parametersId -The `network.parametersId` property is an optional property that defines the set of network parameters. The default value for this property is `NETWORK`. - -## solver.type -The `solver.type` property is an optional property that defines the solver used in the simulation. The default value for this property is `SIM`. The available `com.powsybl.dynawo.simulator.DynawoSimulationParameters.SolverType` -values are: -- SIM: the simplified solver (fixed time step solver) -- IDA: the IDA solver (variable time step solver) - -## solver.parametersFile -The `solver.parametersFile` property is a required property that defines the path of the solver parameters file - -## solver.parametersId -The `solver.parametersId` property is an optional property that defines the set of solver parameters. The default value for this property is `SIM`. - -# Configuration -The default values of all the optional properties are read from the [dynawo-default-parameter](../../../pages/documentation/user/configuration/dynawo-default-parameters.md) -module, defined in the configuration file. diff --git a/backup/configuration/parameters/SecurityAnalysisParameters.md b/backup/configuration/parameters/SecurityAnalysisParameters.md deleted file mode 100644 index 04019712..00000000 --- a/backup/configuration/parameters/SecurityAnalysisParameters.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: SecurityAnalysisParameters -layout: default ---- - -The `com.powsybl.security.SecurityAnalysisParameters` class provides the generic parameters for all `com.powsybl.security.SecurityAnalysis` -implementations. Specific parameters should be provided as an extension of the `SecurityAnalysisParameters` class. - -# Properties - -## load-flow-parameters -The `load-flow-parameters` property is an optional property that defines the [LoadFlowParameters](LoadFlowParameters.md) -to use. If this property is not set, the default values of all the optional properties are read from -the [load-flow-default-parameters](../../../pages/documentation/user/configuration/load-flow-default-parameters.md) module, defined in the -configuration file. - -# Examples -```json -{ - "version" : "1.0", - "load-flow-parameters" : { - "voltageInitMode" : "PREVIOUS_VALUES", - "transformerVoltageControlOn" : true, - "phaseShifterRegulationOn" : false, - "noGeneratorReactiveLimits" : true, - "specificCompatibility" : false, - "extensions" : { - ... - }, - }, - "extensions" : { - ... - } -} -``` - -Note that there are two `extensions` field. The first one contains the extensions of the `LoadFlowParameters` whereas the -the second one contains the extensions of the `SecurityAnalysisParameters`. diff --git a/backup/configuration/providers/index.md b/backup/configuration/providers/index.md deleted file mode 100644 index 1124c4e8..00000000 --- a/backup/configuration/providers/index.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Configuration Providers -layout: default ---- - -Configuration can typically come from different sources. For exemple, command line or desktop apps usually store the configuration in files in the user home directory; server deployments might use a central configuration database; or during testing, the configuration might be hardcoded in the test. - -To implement this behavior, Powsybl defines a Configuration Provider interface: `com.powsybl.commons.config.PlatformConfigProvider`. You can use the implementations shipped with Powsybl or implement your own. - -Note: The `iTools` and `GSE` distributions automatically use the `ClassicPlatformConfigProvider` so you don't have to think about it when using these programs. But if you are a developper using Powsybl as a plain java library, you must choose a configuration provider. To choose a configuration provider, ensure that it is the only implementation of PlatformConfigProvider available to Java's ServiceLoader. Otherwise, you will get one the following exceptions: -``` -com.powsybl.commons.PowsyblException: Platform configuration provider not found - at com.powsybl.commons.config.PlatformConfig.defaultConfig (PlatformConfig.java:70) - [...] -``` -or -``` -com.powsybl.commons.PowsyblException: Multiple platform configuration providers found - at com.powsybl.commons.config.PlatformConfig.defaultConfig (PlatformConfig.java:74) - [...] -``` - - - -## List of Configuration Providers - -### Classic Config -The ClassicPlatformConfigProvider is described in [Modules configuration](../modules/). It is the historical and main way to configure Powsybl. Add the following dependency in the pom.xml of your project to use it: -```xml - - com.powsybl - powsybl-config-classic - ${powsybl.version} - -``` - -### Test Config -The TestPlatformConfigProvider reads all the config from the classpath, making the test indepedant from the user's filesystem. This is done to have reproducible tests. Add the following dependency in the pom.xml of your project to use it: -```xml - - com.powsybl - powsybl-config-test - ${powsybl.version} - -``` -The files must be present in the classpath in the folder "com/powsybl/config/test/" and must also be listed manually (this is a limitation due to how resource loading from the classpath works) in the file "com/powsybl/config/test/filelist.txt". For example, to specify a config.yml used by maven for tests, put the files in -``` -src/test/resources/com/powsybl/config/test/filelist.txt -src/test/resources/com/powsybl/config/test/config.yml -``` -Put the following content in filelist.txt: -``` -config.yml -``` diff --git a/backup/installation/itools-packager.md b/backup/installation/itools-packager.md deleted file mode 100644 index c832cacf..00000000 --- a/backup/installation/itools-packager.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: itools-packager -layout: default ---- - -The `itools-packager` Maven plugin provides a way to assemble distribution bundles based on [iTools](../tools/index.md). - -The layout of such distribution is the following: -``` - -├── bin -│   ├── itools -│   ├── itools.bat -│   └── powsyblsh -├── etc -│   ├── itools.conf -│   └── logback-itools.xml -├── lib -└── share - └── java - ├── -``` - -# Goals overview -The `itools-packager` only has one goal. -- The `package-zip` goal creates a zip package based on `iTools` - -# Configuration - -## Properties - -### archiveName -The `archiveName` property defines the basename of the archive. If this property is not set, `itools-packager` uses the -packageName. - -### packageName -The `packageName` property defines the name of the root folder of the distribution. If this property is not set, -`itools-packager` uses the finalName of the maven project. - -### configName -The `configName` property defines the the basename of the configuration file. The default value is `config` - -### javaXmx -The `javaXmx` property defines the amout of the Java Heap memory. The default value is 8 Gb. This property is used to -initialize the `java_xmx` property of the `itools.conf` file. - -### copyToBin -The `copyToBin` property defines the list of files to copy in the `bin` directory of the distribution. - -### copyToLib -The `copyToLib` property defines the list of files to copy in the `etc` directory of the distribution. - -### copyToEtc -The `copyToEtc` property defines the list of files to copy in the `etc` directory of the distribution. - -## Example -```xml - - - - com.powsybl - powsybl-itools-packager-maven-plugin - ${powsybl.core.version} - - - package - - package-zip - - - - - powsybl - powsybl-V${project.version} - 512M - - - - -``` - -# Usage -The `itools-packager` plugin copies all the maven dependencies to the `share/java` folder of the distribution. To enable -a feature, add a runtime dependency to the `pom.xml` file. Refer to the [iTools](../tools/index.md) documentation to -learn more about existing `iTools` commands. - -The `itools-packager` demo gives the minimal configuration of an `iTools` based distribution. -```shell -$> git clone https://github.com/powsybl/powsybl-tutorials.git -$> cd powsybl-tutorials/itools-packager -$> mvn package -$> cd target/powsybl/bin -$> ./itools --help -usage: itools [OPTIONS] COMMAND [ARGS] - -Available options are: - --config-name Override configuration file name - -Available commands are: - -``` diff --git a/backup/itools-mpi.md b/backup/itools-mpi.md deleted file mode 100644 index e2e278ab..00000000 --- a/backup/itools-mpi.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: itools-mpi.conf -layout: default ---- - -The `POWSYBL_HOME/etc/itools-mpi.conf` file is a [properties](https://en.wikipedia.org/wiki/.properties) file that contains -system properties to configure MPI tasks. This configuration file is read by the `itools-mpi` script, that runs computations -on a MPI cluster. - -# Properties - -## mpi_hosts -The `mpi_hosts` property is a required property to run parallel command with MPI that defines the list of hosts of the MPI -cluster. The hosts are separated by a comma. - -## mpi_tasks -The `mpi_tasks` property is a required property to run parallel command wih MPI that defines the maximum number of parallel -tasks. - -# Example -```properties -# MPI maximum parallel tasks count -mpi_tasks=2 - -# MPI comma sperated hosts list -mpi_hosts=localhost -``` diff --git a/backup/plugins-info.md b/backup/plugins-info.md deleted file mode 100644 index 8aa5c766..00000000 --- a/backup/plugins-info.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: plugins-info -layout: default -todo: - - add links to the different kind of plugins - - update the list of available plugins ---- - -The `plugins-info` command prints for each kind of plugin, the currently available implementations Ids. The available -kind of plugins are: -- [exporter](../iidm/exporter/index.md) -- [import-post-processor](../iidm/importer/post-processor/index.md) -- [importer](../iidm/importer/index.md) -- [loadflow-validation computation](../loadflow/validation.md) - -# Usage -```shell -$> itools plugins-info -Plugins: -+---------------------------------+-----------------------------------------------------+ -| Plugin type name | Available plugin IDs | -+---------------------------------+-----------------------------------------------------+ -| exporter | AMPL, XIIDM | -| import-post-processor | groovyScript, javaScript, loadflowResultsCompletion | -| importer | CGMES, UCTE, XIIDM | -| loadflow-validation computation | loadflow, loadflowResultsCompletion | -+---------------------------------+-----------------------------------------------------+ -``` - -# Maven configuration -To use the `plugins-info` command, add the following dependencies to the `pom.xml` file: -```xml - - com.powsybl - powsybl-tools - ${powsybl.version} - -``` diff --git a/backup/run-impact-analysis.md b/backup/run-impact-analysis.md deleted file mode 100644 index a6717823..00000000 --- a/backup/run-impact-analysis.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: run-impact-analysis -layout: default -todo: - - add link to IPST implementation (pclf / https://github.com/itesla/ipst/tree/master/pclfsim-integration) ---- - -The `run-impact-analysis` command is used to run dynamic simulations on one or several networks, for all the configured -contingencies and re-calculate all the predefined security-indexes. - -# Usage -```shell -$> itools run-impact-analysis --help -usage: itools [OPTIONS] run-impact-analysis --case-file [--contingencies - ] [--help] [-I ] [--import-parameters - ] [--output-csv-file ] - - -Available options are: - --config-name Override configuration file name - -Available arguments are: - --case-file the case path - --contingencies contingencies to test separated by , - (all the db in not set) - --help display the help and quit --I use value for given - importer parameter - --import-parameters the importer configuation - file - --output-csv-file output CSV file path (pretty print - on standard output if not specified) -``` - -## Required parameters - -### case-file -Use the `--case-file` to specify the path of the case file. - -## Optional parameters - -### contingencies -Use the `--contingencies` parameter to filter the list of contingencies to simulate. If this parameter is not set, all -the contingencies provided by the `com.powsybl.contingency.ContingencyProvider` are simulated. - -### import-parameters -Use the `--import-parameters` parameter to specify the path of the configuration file of the importer. It is possible to -overload one or many parameters using the `-I property=value` parameter. The properties depend on the input format. -Refer to the documentation page of each [importer](../iidm/importer/index.md) to know their specific configuration. - -### output-csv-file -Use the `--output-csv-file` parameter to export the output to the specified CSV file. If this parameter is not set, the -outputs are printed to the console. - -# Configuration -To run an impact analysis, one has to choose the implementation of the `com.powsybl.contingency.ContingenciesProviderFactory` -to use, by setting the `ContingenciesProviderFactory` property to the [componentDefaultConfig](../pages/documentation/user/configuration/componentDefaultConfig.md) -module. To learn more about contingencies or available `ContingenciesProvider` read this [documentation](../contingencies/index.md) page. - -Read the [simulation-parameters](../pages/documentation/user/configuration/simulation-parameters.md) documentation to learn how to -configure the impact analysis parameters. - -# Maven configuration -To use `run-impact-analysis` command, add the following dependencies to the `pom.xml` file: -```xml - - com.powsybl - powsybl-simulation-api - ${powsybl.version} - -``` diff --git a/backup/schema-iidm.png b/backup/schema-iidm.png deleted file mode 100644 index 40eb1d6f5794953668f036d5d2520bf5cf6bb067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62921 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 Sq(nb!&iXpHuNQ0EKm0EkXT28y diff --git a/backup/to_sort/configuration.md b/backup/to_sort/configuration.md deleted file mode 100644 index 1b08076a..00000000 --- a/backup/to_sort/configuration.md +++ /dev/null @@ -1,49 +0,0 @@ -# Configuration providers - -Configuration can typically come from different sources. For example, command line or desktop apps usually store the configuration in files in the user home directory; server deployments might use a central configuration database; or during testing, the configuration might be hardcoded in the test. - -To implement this behavior, PowSyBl defines a Configuration Provider interface: `com.powsybl.commons.config.PlatformConfigProvider`. You can use the implementations shipped with PowSyBl or implement your own. - -Note: The `iTools` distribution automatically uses the `ClassicPlatformConfigProvider` so you don't have to think about it when using it. But if you are a developper using PowSyBl as a plain java library, you must choose a configuration provider. To choose a configuration provider, ensure that it is the only implementation of PlatformConfigProvider available to Java's ServiceLoader. Otherwise, you will get one the following exceptions: -``` -com.powsybl.commons.PowSyBlException: Platform configuration provider not found - at com.powsybl.commons.config.PlatformConfig.defaultConfig (PlatformConfig.java:70) - [...] -``` -or -``` -com.powsybl.commons.PowSyBlException: Multiple platform configuration providers found - at com.powsybl.commons.config.PlatformConfig.defaultConfig (PlatformConfig.java:74) - [...] -``` - -## List of Configuration Providers - -### Classic Config -The ClassicPlatformConfigProvider is described in [Modules configuration](../modules/). It is the historical and main way to configure PowSyBl. Add the following dependency in the pom.xml of your project to use it: -```xml - - com.powsybl - powsybl-config-classic - ${powsybl.version} - -``` - -### Test Config -The TestPlatformConfigProvider reads all the config from the classpath, making the test indepedant from the user's filesystem. This is done to have reproducible tests. Add the following dependency in the pom.xml of your project to use it: -```xml - - com.powsybl - powsybl-config-test - ${powsybl.version} - -``` -The files must be present in the classpath in the folder "com/powsybl/config/test/" and must also be listed manually (this is a limitation due to how resource loading from the classpath works) in the file "com/powsybl/config/test/filelist.txt". For example, to specify a config.yml used by maven for tests, put the files in -``` -src/test/resources/com/powsybl/config/test/filelist.txt -src/test/resources/com/powsybl/config/test/config.yml -``` -Put the following content in filelist.txt: -``` -config.yml -``` diff --git a/backup/tutorials/iidm/exporter.md b/backup/tutorials/iidm/exporter.md deleted file mode 100644 index 3b615ca9..00000000 --- a/backup/tutorials/iidm/exporter.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: How to write an IIDM exporter -layout: default ---- - -From Powsybl's [Exporter](../../iidm/exporter/index.md) interface, it is possible to add a new data serialization format -for a [IIDM](../../iidm/model/index.md) network. - -In order to do so, you will need to: -- Write an implementation of the `Exporter` interface and assign it a unique ID format -- Declare the new class as a service implementation with the `@AutoService` annotation -- Build your jar - -# Configuring your module - -In order to implement a new `Exporter`, add the following dependencies in your `pom.xml` file: -- `auto-service (com.google.auto.service)`: Configuration/metadata generator for `ServiceLoader`-style providers -- `powsybl-iidm-converter-api`: IIDM network import/export API - -```xml - - - com.google.auto.service - auto-service - 1.0-rc2 - - - com.powsybl - powsybl-iidm-converter-api - ${powsybl.core.version} - - -``` - -# Implementation - -As said above, you will need to write your own implementation of the `Exporter` interface and declare it as a service -implementation. Here is an empty class template of an `Exporter` implementation: - -```java -import com.powsybl.commons.datasource.DataSource; -import com.powsybl.iidm.export.Exporter; -import com.powsybl.iidm.network.Network; - -import java.util.Properties; - -@AutoService(Exporter.class) -public class MyExporter implements Exporter { - - /** - * @return the unique ID for the given format - */ - @Override - public String getFormat() { - return null; - } - - /** - * @return information about the exporter - */ - @Override - public String getComment() { - return null; - } - - /** - * @param network the IIDM network to export - * @param parameters properties specific to this exporter - * @param dataSource access to outputStream - */ - @Override - public void export(Network network, Properties parameters, DataSource dataSource) { - // business logic to export a model to a given format - } - -} -``` - -# Deployment - -## Generating jar - -Once your implementation is ready, run the following command to create your project jar: -``` -$ cd -$ mvn clean package -``` - -The jar file will be generated in `/target`. - -## Adding the format in iTools - -[iTools](../../tools/index.md) allows the user to convert a network from one format to another via the -[convert-network](../../tools/convert-network.md) command line. - -You can add your custom export format to the available output formats of the command by copying the generated jar in -your powsybl distribution: -``` -$> cp target/my-exporter.jar /share/java -``` - -# Examples - -The code of a simple CSV Exporter is available in [powsybl-tutorials](https://github.com/powsybl/powsybl-tutorials) as a -complete example of this tutorial. - -To try it, clone the project and deploy as below: -``` -$ git clone https://github.com/powsybl/powsybl-tutorials.git -$ cd powsybl-tutorials/csv-exporter -$ mvn clean package -``` diff --git a/backup/tutorials/iidm/importer.md b/backup/tutorials/iidm/importer.md deleted file mode 100644 index 3ba8fbbc..00000000 --- a/backup/tutorials/iidm/importer.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: How to write an IIDM importer -layout: default ---- - -From Powsybl's [Importer](../../iidm/importer/index.md) interface, it is possible to add a new file format from which -an [IIDM](../../iidm/model/index.md) data model can be loaded. - -In order to do so, you will need to: -- Write an implementation of the `Importer` interface -- Declare the new class as a service implementation with the `@AutoService` annotation -- Build your jar - -# Configuring your module - -In order to implement a new `Importer`, add the following dependencies in your `pom.xml` file: -- `auto-service (com.google.auto.service)`: Configuration/metadata generator for `ServiceLoader`-style providers -- `powsybl-iidm-converter-api`: IIDM network import/export API - -```xml - - - com.google.auto.service - auto-service - 1.0-rc2 - - - com.powsybl - powsybl-iidm-converter-api - ${powsybl.core.version} - - -``` - -# Implementation - -As said above, you will need to write your own implementation of the `Importer` interface and declare it as a service -implementation. Here is an empty class template of an `Importer` implementation: - -```java -import com.powsybl.commons.datasource.DataSource; -import com.powsybl.commons.datasource.ReadOnlyDataSource; -import com.powsybl.iidm.import_.Importer; -import com.powsybl.iidm.network.Network; -import com.powsybl.iidm.parameters.Parameter; - -import java.util.List; -import java.util.Properties; - -@AutoService(Importer.class) -public class MyImporter implements Importer { - - /** - * Get a unique identifier of the format. - * - * @return the unique ID for the given format - */ - @Override - public String getFormat() { - return null; - } - - /** - * This override is optional. By default, it returns Collections.emptyList() - * - * @return description of import parameters - */ - @Override - public List getParameters() { - return Collections.emptyList(); - } - - /** - * Get some information about this importer. - * - * @return information about the importer - */ - @Override - public String getComment() { - return null; - } - - /** - * Check if the data source is importable - * - * @param dataSource the data source - * @return true if the data source is importable, false otherwise - */ - @Override - public boolean exists(ReadOnlyDataSource dataSource) { - return false; - } - - /** - * Create a model. - * - * @param dataSource data source - * @param parameters some properties to configure the import - * @return the model - */ - @Override - public Network importData(ReadOnlyDataSource dataSource, Properties parameters) { - // business logic to import a network from a data source in a given format - return null; - } - - /** - * Copy data from one data source to another. - * - * @param fromDataSource from data source - * @param toDataSource destination data source - */ - @Override - public void copy(ReadOnlyDataSource fromDataSource, DataSource toDataSource) { - // business logic to copy a network from a data source to another file in a given format - } -} -``` - -# Deployment - -## Generating jar - -Once your implementation is ready, run the following command to create your project jar: -``` -$ cd -$ mvn clean package -``` - -The jar file will be generated in `/target`. - -## Adding the format in iTools - -[iTools](../../tools/index.md) allows the user to convert a network from one format to another via the -[convert-network](../../tools/convert-network.md) command line. - -You can add your custom import format, allowing files in this format to be converted using the command, by copying the -generated jar in your powsybl distribution: -``` -$> cp target/my-exporter.jar /share/java -``` - -# Examples - -The code of a simple CSV Importer is available in [powsybl-tutorials](https://github.com/powsybl/powsybl-tutorials) as a -complete example of this tutorial. - -To try it, clone the project and deploy as below: -``` -$ git clone https://github.com/powsybl/powsybl-tutorials.git -$ cd powsybl-tutorials/csv-importer -$ mvn clean package -``` diff --git a/backup/tutorials/index.md b/backup/tutorials/index.md deleted file mode 100644 index 2102b61a..00000000 --- a/backup/tutorials/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Advanced tutorials -layout: default ---- - -## Deployment - -- [How to use PowSyBl as a custom desktop application](powsybl-javafx-packager.md) -- [How to use PowsyBl as a command line](../todo.md) - -## Using PowSyBl APIs - -- [How to use AFS](afs/afs.md) - -## Extending PowSyBl APIs - -- [How to extend AFS](../todo.md) -- [How to write an IIDM exporter](iidm/exporter.md) -- [How to write an IIDM importer](iidm/importer.md) -- [How to extend iTools](itools/extend-itools.md) diff --git a/backup/tutorials/itools/extend-itools.md b/backup/tutorials/itools/extend-itools.md deleted file mode 100644 index aeb60513..00000000 --- a/backup/tutorials/itools/extend-itools.md +++ /dev/null @@ -1,221 +0,0 @@ ---- -title: How to extend iTools -layout: default ---- - -The `iTools` script is designed to be easily extended with new commands that would be added to the set of -available commands, providing users with new command line functionalities. Read this documentation [page](../../tools/index.md) -to learn more... - -In order to create a new `iTools` command: -1. Create a new maven project and add all the required dependencies. -2. Implement the `com.powsybl.tools.Tool` interface. -3. Compile your project and add the jar to your powsybl installation. - -In the following sections we will see how, following these steps, you can implement a new `iTools` command to display -how many lines there are in a network. - -The complete example described in this tutorial is available on GitHub: -```shell -$> git clone https://github.com/powsybl/powsybl-tutorials.git -$> cd powsybl-tutorials/count-network-lines -$> mvn package -``` - -# Maven dependencies - -After creating a new Maven project, you need to add the necessary dependencies to your `pom.xml` file. The required -dependencies to implement a new `iTools` command are the following: -- Google Auto Service to declare your new tool as a plugin -- The Powsybl tools module which contains the base interfaces for all `iTools` commands - -```xml - - com.google.auto.service - auto-service - 1.0-rc2 - - - com.powsybl - powsybl-tools - ${powsybl.version} - -``` - -In your project you also need to add the other dependencies required by your command business logic implementation, e.g. -to implement the `iTools` command displaying the number of lines of a network, you would have to add the following -dependency to get the IIDM converter API, needed to import IIDM networks: - -```xml - - com.powsybl - powsybl-iidm-converter-api - ${powsybl.version} - -``` - -# Implement the Tool interface - -To create a new `iTools` command, you need to implement the `com.powsybl.tools.Tool` interface. Following is a sample -class, where you will put the code to display the number of lines of an IIDM network. - -```java -import com.google.auto.service.AutoService; - -import org.apache.commons.cli.CommandLine; - -import com.powsybl.tools.Command; -import com.powsybl.tools.Tool; -import com.powsybl.tools.ToolRunningContext; - -@AutoService(Tool.class) -public class CountNetworkLinesTool implements Tool { - - @Override - public Command getCommand() { - return null; - } - - @Override - public void run(CommandLine line, ToolRunningContext context) { - } -} -``` - -You have to declare the class as a service implementation, using the `@Autoservice` annotation. This will allow you to -have the new command automatically added to the list of available `iTools` commands, and to be able to run it (see last -section). - -The methods of the `Tool` interface to override in your class are: -- the `getCommand` method, that returns the declaration of your command -- the `run` method, in charge of running your command - -## Implementing the `getCommand` method -The `getCommand` method returns an instance of the `com.powsybl.tools.Command` interface. This interface declares your -command, defining its name, its description and a theme. The theme is used to group the commands by category. Please read -this documentation [page](../../tools/index.md#available-commands) to discover the existing -themes. In our tutorial, we chose to create a new theme, called `Network`. - -```java - private static final String CASE_FILE = "case-file"; - - @Override - public Command getCommand() { - return new Command() { - - @Override - public String getName() { - return "count-network-lines"; - } - - @Override - public String getTheme() { - return "Network"; - } - - @Override - public String getDescription() { - return "Count network lines"; - } - - @Override - public Options getOptions() { - Options options = new Options(); - options.addOption(Option.builder().longOpt(CASE_FILE) - .desc("the case path") - .hasArg() - .argName("FILE") - .required() - .build()); - return options; - } - - @Override - public String getUsageFooter() { - return null; - } - }; - } -``` - -The `Command` class also defines your command options (input parameters), if they are required or optional and if they -need an argument or not. The only option defined in our sample class, `case-file`, allows the user to specify the network -file to analyze. This option is required and has an argument named `FILE` to get the input case file: -```java - options.addOption(Option.builder().longOpt(CASE_FILE) - .desc("the case path") - .hasArg() - .argName("FILE") - .required() - .build()); - -``` -Read the [commons-cli](https://www.javadoc.io/doc/commons-cli/commons-cli/) documentation page -to learn more. - -## Implementing the `run` method -The `run` method is in charge of running your command, implementing your business logic. This methods has two parameters: -```java - @Override - public void run(CommandLine line, ToolRunningContext context) { - - } -``` - -The `line` parameter gives you access to the input options provided by the user through the command line. In our example, -we use it to read the path to the input network file. - -The `context` parameter provides you with some context objects, such as an `OutputStream` object allowing you to print some -information in the console, a `ComputationManager` object sometimes required to run computations or a `FileSystem` -object for accessing the local file system (see [ToolRunningContext](https://www.javadoc.io/doc/powsybl-core/powsybl-core/) -for more information). - -In our tutorial, we load the input case file to get an IIDM network instance and assert that the network was loaded -successfully: -```java - Path caseFile = context.getFileSystem().getPath(line.getOptionValue(CASE_FILE)); - context.getOutputStream().println("Loading network '" + caseFile + "'"); - Network network = Importers.loadNetwork(caseFile, context.getShortTimeExecutionComputationManager(), ImportConfig.load(), null); - if (network == null) { - throw new PowsyblException("Case '" + caseFile + "' not found"); - } -``` - -Then we get the number of lines in this network and print a message in the console: -```java - int lineCount = network.getLineCount(); - context.getOutputStream().println("Network contains '" + lineCount + "' lines"); -``` - -# Update your installation with the new command - -Run the following command to build your project jar: -```bash -$> mvn package -``` - -The generated jar will be located under the target folder of your project. Copy the generated jar to the `share/java` -folder of your Powsybl distribution (you might need to copy in this directory other dependencies jars, specific to your -new command). - -Then run `iTools` to check if your command is available: -```shell -$> cd /bin -$> ./itools count-network-lines --help -usage: itools [OPTIONS] count-network-lines --case-file [--help] - -Available options are: - --config-name Override configuration file name - -Available arguments are: - --case-file the case path - --help display the help and quit -``` - -You can run the new command, using the following command: -```shell -$> cd /bin -$> ./itools count-network-lines --case-file ~/network.xiidm -Loading network '~/network.xiidm' -Network contains '2' lines -``` diff --git a/backup/user_stories/images/Compute_Optimizer.svg b/backup/user_stories/images/Compute_Optimizer.svg deleted file mode 100644 index 5167f8b6..00000000 --- a/backup/user_stories/images/Compute_Optimizer.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - Optimizer - - - diff --git a/backup/user_stories/images/Compute_SA.svg b/backup/user_stories/images/Compute_SA.svg deleted file mode 100644 index 706b5b22..00000000 --- a/backup/user_stories/images/Compute_SA.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - SA - - - diff --git a/backup/user_stories/images/Compute_Sensitivity.svg b/backup/user_stories/images/Compute_Sensitivity.svg deleted file mode 100644 index 3256deee..00000000 --- a/backup/user_stories/images/Compute_Sensitivity.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - Sensitivity - - - diff --git a/backup/user_stories/images/Export.svg b/backup/user_stories/images/Export.svg deleted file mode 100644 index a9ea3566..00000000 --- a/backup/user_stories/images/Export.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/backup/user_stories/images/Modify_iAL.svg b/backup/user_stories/images/Modify_iAL.svg deleted file mode 100644 index 15324fec..00000000 --- a/backup/user_stories/images/Modify_iAL.svg +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - iAL - - - - diff --git a/backup/user_stories/images/Network.svg b/backup/user_stories/images/Network.svg deleted file mode 100644 index 2d94ee80..00000000 --- a/backup/user_stories/images/Network.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/backup/user_stories/images/Network_extract.svg b/backup/user_stories/images/Network_extract.svg deleted file mode 100644 index 60d0cc85..00000000 --- a/backup/user_stories/images/Network_extract.svg +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - extract - - - diff --git a/backup/user_stories/images/Network_merging.svg b/backup/user_stories/images/Network_merging.svg deleted file mode 100644 index daf6955b..00000000 --- a/backup/user_stories/images/Network_merging.svg +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - merging - - - diff --git a/backup/user_stories/images/Workflow_Capacity_Calculation_RSC.svg b/backup/user_stories/images/Workflow_Capacity_Calculation_RSC.svg deleted file mode 100644 index 68386d4f..00000000 --- a/backup/user_stories/images/Workflow_Capacity_Calculation_RSC.svg +++ /dev/null @@ -1,699 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CGMESUCTE - - - LF - - - - - - - - - CRAC - - - Sensitivity - - - - - - - - - - - merging - - - - Action - - - - - - - SA - - - Optimizer - Bestremedialactions - - - - - - - - diff --git a/backup/user_stories/images/[Process]N-1Eurostag.svg b/backup/user_stories/images/[Process]N-1Eurostag.svg deleted file mode 100644 index 280fec2c..00000000 --- a/backup/user_stories/images/[Process]N-1Eurostag.svg +++ /dev/null @@ -1,1492 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 606,5 - 302,4 - 302,4 - 300,4 - 300,4 - 600 - - - - - - - - - - - - - - - - - - - - - - - - 611,4 - 610,6 - 601 - 600 - - - - - - - - - - - - - - - - - - - - - - - - - - - merging - - - - - - - - - - - extract - - - - LF - - - - SA - - - - Sensitivity - - - - iAL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 606,5 - 302,4 - 302,4 - 300,4 - 300,4 - 600 - - - - - - - - - - - - - - - - - - - - - - - - 611,4 - 610,6 - 601 - 600 - - - - - LF - - - - - N-1 - - - - - - LF - - - - - - - - - - - - - - - - Final state - - - - N-1 - - - - - diff --git a/backup/user_stories/images/busBreakerTopology.svg b/backup/user_stories/images/busBreakerTopology.svg deleted file mode 100644 index bcc62705..00000000 --- a/backup/user_stories/images/busBreakerTopology.svg +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/backup/user_stories/images/busTopology.svg b/backup/user_stories/images/busTopology.svg deleted file mode 100644 index 2546923d..00000000 --- a/backup/user_stories/images/busTopology.svg +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/backup/user_stories/images/nodeBreakerTopology.svg b/backup/user_stories/images/nodeBreakerTopology.svg deleted file mode 100644 index c8428ddf..00000000 --- a/backup/user_stories/images/nodeBreakerTopology.svg +++ /dev/null @@ -1,675 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/backup/user_stories/images/nodeBreakerTopologyGraph.svg b/backup/user_stories/images/nodeBreakerTopologyGraph.svg deleted file mode 100644 index 179f034b..00000000 --- a/backup/user_stories/images/nodeBreakerTopologyGraph.svg +++ /dev/null @@ -1,1126 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BBS2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/backup/user_stories/topology.md b/backup/user_stories/topology.md deleted file mode 100644 index 624df646..00000000 --- a/backup/user_stories/topology.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Second basic tutorial - topology management -layout: default ---- - - -This example aims to create a substation with a node/breaker topology model and to visit it through the bus/breaker and the bus views. -In a second time, we create the same substation with a bus/breaker topology model and we visit it through the bus/breaker and the bus views. -The corresponding code is fully available in the [topology](https://github.com/powsybl/powsybl-tutorials) tutorial. - - - -# Building a network in node/breaker topology model - -The substation of this tutorial has two voltage levels VL1 and VL2 described with a node/breaker topology model. -The first voltage level VL1 has 2 busbar sections BBS1 and BBS2, a generator GN, a load LD and a coupler BR3 between busbar sections BBS1 and BBS2. -The second voltage level VL2 has a single busbar section BBS3, a line LN and is connected to voltage level VL1 through transformer TR. -Below is a diagram of the substation: - -![Node breaker topology](images/nodeBreakerTopology.svg){: width="50%" .center-image} - -The node/breaker topology model is stored inside the voltage level as a graph, in which the vertices correspond to connectivity nodes and the edges correspond to [switches](../iidm/model/switch.md) (or internal connections). -The next diagram shows how to map the substation topology to a graph. - -![Node breaker graph](images/nodeBreakerTopologyGraph.svg){: width="50%" .center-image} - -- Each voltage level has its own topology graph. Voltage level VL1 has 8 connectivity nodes. Generator GN is connected to node 1, load LD to node 5, busbar sections BBS1 and BBS2 to node 3 and 4. 2, 6 and 7 are internal connectivity nodes. -- Voltage level VL2 has 3 nodes, line LN is connected to node 1, busbar section BBS3 to node 2. -- Transformer TR is connected to node 8 of voltage level 400 KV and node 3 of voltage level 225 KV. -- Plain edges represent closed switches. -- Dashed edges represent open switches. -- Green edges will disappear during the bus/breaker topology computation whereas pink edges (like 3<->4 in this case) will be retained, whatever their state (see [switches](../iidm/model/switch.md)). - -## Bus/breaker view - -The following diagram shows the computed bus/breaker topology. -Compared to the node/breaker topology, only the equipements (GN, LD, TR, LN) and the switches flagged as retained (BR3) remain in the network description. -The equipments are now connected through buses (B1, B2 and B3). - -![Bus breaker graph](images/busBreakerTopology.svg){: width="50%" .center-image} - -We can switch to a bus/breaker view on the substation voltage level VL1. -VL1 contains 2 buses in the bus/breaker view. -The first bus connects the nodes 1, 2, 3, 5 and 6, and consequently the generator GN and the load LD. -Note that the load LD does not belong to the connected component, because the switch BR2 is open. -The second bus connects nodes 4, 7 and 8. Note that VL1 contains only one switch in the bus/breaker view (BR3). -Here are the corresponding prints in the tutorial: - -```` -Bus: VL1_1 - Generators: GN -Bus: VL1_4 - T2W: TR -Bus: VL1_5 - Loads: LD, connected component: null -Switch: BR3 -Bus: VL2_1 - T2W: TR -```` - -## Bus view - -The following diagram shows the computed bus topology. Compared to bus/breaker topology, there is no switches anymore. Only remains equipements (GN, TR, LN) connected through buses. LD is not connected. - -![Bus graph](images/busTopology.svg){: width="50%" .center-image} - -We can switch to a bus view on substation voltage level VL1. VL1 contains 1 bus in the bus view. This bus connects all the equipements of voltage level VL1. Here are the corresponding prints in the tutorial: - -```` -Bus:VL1_1 - Generators: GN - T2Ws: TR -Bus:VL2_1 - T2Ws: TR -```` - -# Building a network in bus/breaker topology model - -Note that creating a substation with a bus/breaker topology model is easier. -Instead of creating VL1 and VL3 with a node/breaker topology model, we can directly create them in a simpler bus/breaker topology model. -It can be very useful when data source only contains bus/branch data link in UCTE-DEF or in CIM-CGMES format sometimes. -Warning: in that case the node/breaker view status on voltage level VL1 and VL2 is N/A (not available). -Here are the corresponding prints in the tutorial. Note that the load LD is not printed in that case: - -```` -bus/breaker network in bus/breaker view: -Bus: B1 - Generators: GN -Bus: B2 - T2Ws: TR -Switches: BR3 -Bus: B3 - T2Ws: TR -bus/breaker network in bus view: -Bus:VL1_0 - Generators: GN - T2Ws: TR -Bus:VL2_0 - T2Ws: TR -```` diff --git a/pages/documentation/developer/scripting/groovy.md b/pages/documentation/developer/scripting/groovy.md deleted file mode 100644 index 7e04f5dc..00000000 --- a/pages/documentation/developer/scripting/groovy.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: default ---- - -# Groovy scripting -[Apache Groovy](https://groovy-lang.org/) is an object-oriented programming language for the Java platform. This language is widely used in PowSyBl to implement domain specific languages such as the [contingency DSL](../../simulation/securityanalysis/contingency-dsl.md), the [action DSL](../../simulation/securityanalysis/action-dsl.md) or the DSLs for time-domain simulations. With Groovy, you have access to all features of the framework without any payload. - -## iTools run-script -The first way to use Groovy scripts is to use the [iTools run-script](https://powsybl.readthedocs.io/projects/powsybl-core/en/latest/user/itools/run-script.html) command. It relies on a complete [iTools distribution](../../user/index.md#installation-from-binaries). To make it easier to write scripts, we provide a small DSL that allow: -- to load and save a case file -- to easily run power flow simulations. - -It's possible to extend this DSL with user-friendly functions by writing [extensions](). - -## Example -This small example shows how to load a case file and run a power simulation in Groovy: -```groovy -import com.powsybl.loadflow.LoadFlow - -// Load a case file -network = loadNetwork("eurostag-tutorial-example1.xml") - -// Run a power flow with OpenLF implementation -result = LoadFlow.find("OpenLoadFlow").run(network) -println "Computation OK? " + result.isOk() -println "Metrics: " + result.getMetrics() - -// Save the network -saveNetwork("XIIDM", network, null, "eurostag-tutorial-example1-after-lf.xml") -``` diff --git a/pages/documentation/developer/scripting/img/groovy-logo.png b/pages/documentation/developer/scripting/img/groovy-logo.png deleted file mode 100644 index 54af4c185280e6d7770bf6e4b50443bf5584cc0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12303 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 diff --git a/pages/documentation/developer/scripting/img/python-logo.png b/pages/documentation/developer/scripting/img/python-logo.png deleted file mode 100644 index 6b6ea38b39f4e7d8890d1d12d498bc01e8be8ac3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10550 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 diff --git a/pages/documentation/developer/scripting/index.md b/pages/documentation/developer/scripting/index.md deleted file mode 100644 index cfb9e987..00000000 --- a/pages/documentation/developer/scripting/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: default ---- - -# Scripting - -PowSyBl offers two different scripts' languages. Depending on your profile, you may be interested in [python scripting](python.md) or [groovy scripting](groovy.md). - -## Python scripting -PyPowSyBl project allow Python developer to call PowSyBl features written in Java within Python scripts. Python and Java are interfaced at the native level in both virtual machines. This shared memory based approach achieves decent computing performance, while providing the access to the entirety of CPython and Java libraries. - -Learn more > - -## Groovy scripting -[Apache Groovy](https://groovy-lang.org/) is an object-oriented programming language for the Java platform. Within groovy scripts, you have access to all features of the framework without any payload. - -Learn more > - - - diff --git a/pages/documentation/user/configuration/computation-local.md b/pages/documentation/user/configuration/computation-local.md deleted file mode 100644 index 4ebde1d8..00000000 --- a/pages/documentation/user/configuration/computation-local.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -layout: default ---- - -# computation-local -The `computation-local` module is used by the `com.powsybl.computation.local.LocalComputationManager` to run computations on the local host, if it is configured in the [default-computation-manager](default-computation-manager.md) module. - -## Optional properties - -**available-core** -The `available-core` property is an optional property that defines the maximum number of parallel computations. The default value of this property is `1`. To use all the processors of the system, set this property to `0`. - -**tmp-dir** -The `tmp-dir` property is an optional property that defines a list of paths where the temporary files generated during the computations can be stored. The temporary files will be generated in the first existing path of this list. If none of the paths exists, a `ConfigurationException` is thrown. The default value of this property is initialized with the `java.io.tmpdir` JVM system property. - -## Deprecated properties - -**availableCore** -The `availableCore` property is deprecated since v2.1.0. Use the `available-core` property instead. - -**tmpDir** -The `tmpDir` property is deprecated since v2.1.0. Use the `tmp-dir` property instead. - -## Examples - -**YAML configuration:** -```yaml -computation-local: - available-core: 1 - tmp-dir: - - /home/user/tmp - - /tmp -``` - -**XML configuration:** -```xml - - 1 - /home/user/tmp:/tmp - -``` diff --git a/pages/documentation/user/configuration/default-computation-manager.md b/pages/documentation/user/configuration/default-computation-manager.md deleted file mode 100644 index a6a0bac6..00000000 --- a/pages/documentation/user/configuration/default-computation-manager.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: default ---- - -# default-computation-manager -The `default-computation-manager` module is an optional module loaded when an `iTools` command starts, to determine which `com.powsybl.computation.ComputationManager` implementation should be used for short-time and long-time computations. The choice of using the short-time or the long-time computation manager factory is done by the implementation of each type of computation (e.g. load-flow, security-analysis, etc.). - -If this module is not set, the `com.powsybl.computation.local.LocalComputationManager` implementation is used. Read the [computation-local](computation-local.md) page to learn how to configure the `LocalComputationManager`. - -## Required properties - -**short-time-execution-computation-manager-factory** -The `short-time-execution-computation-manager-factory` property is a required property that defines the name of the `com.powsybl.computation.ComputationManagerFactory` implementation to use for short-time computations. - -## Optional properties - -**long-time-execution-computation-manager-factory** -The `long-time-execution-computation-manager-factory` property is an optional property that defines the name of the `com.powsybl.computation.ComputationManagerFactory` implementation to use for long-time computations. If not defined, this property returns the same value as the `short-time-execution-manager-factory`. - -## Examples - -**YAML configuration:** -```yaml -default-computation-manager: - long-time-execution-computation-manager-factory: com.powsybl.computation.local.LocalComputationManagerFactory - short-time-execution-computation-manager-factory: com.powsybl.computation.local.LocalComputationManagerFactory -``` - -**XML configuration:** -```xml - - com.powsybl.computation.local.LocalComputationManagerFactory - com.powsybl.computation.local.LocalComputationManagerFactory - -``` diff --git a/pages/documentation/user/configuration/network.md b/pages/documentation/user/configuration/network.md deleted file mode 100644 index f2038c9d..00000000 --- a/pages/documentation/user/configuration/network.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: default ---- - -# network -The `network` module is used to configure the network default implementation name. The network implementation is the set of classes implementing all the network elements, such as VoltageLevel or Generator. The implementation named "Default" is the classic PowSyBl in-memory implementation. - -## Required properties - -**default-impl-name** -The `default-impl-name` property is a required property that specifies the name of the default network implementation. - -## Examples - -**YAML configuration:** -```yaml -network: - default-impl-name: Default -``` - -**XML configuration:** -```xml - - Default - -``` diff --git a/pages/documentation/user/configuration/simulation-parameters.md b/pages/documentation/user/configuration/simulation-parameters.md deleted file mode 100644 index 605d73cb..00000000 --- a/pages/documentation/user/configuration/simulation-parameters.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -layout: default ---- - -# simulation-parameters -The `simulation-parameters` module is used by the [run-impact-analysis]() command or when a dynamic simulation is run. Its properties define a simulation scenario. - -## Required properties - -**branchSideOneFaultShortCircuitDuration** -The `branchSideOneFaultShortCircuitDuration` property is a required property that defines the duration of the short -circuit in seconds for the side `ONE` of a branch. - -**branchSideTwoFaultShortCircuitDuration** -The `branchSideTwoFaultShortCircuitDuration` property is a required property that defines the duration of the short -circuit in seconds for the side `TWO` of a branch. - -**faultEventInstant** -The `faultEventInstant` property is a required property that defines the fault instant event in seconds. - -**generatorFaultShortCircuitDuration** -The `generatorFaultShortCircuitDuration` property is a required property that defines the duration of the short circuit in seconds for a generator. - -**preFaultSimulationStopInstant** -The `preFaultSimulationStopInstant` property is a required property that defines the stop instant event for pre fault -simulations in seconds. - -**postFaultSimulationStopInstant** -The `postFaultSimulationStopInstant` property is a required property that defines the stop instant event for post fault simulations in seconds. - -## Optional properties - -**branchFaultReactance** -The `branchFaultReactance` property is an optional property that defines the branch fault reactance. The default -value of this property is `0.01`. - -**branchFaultResistance** -The `branchFaultResistance` property is an optional property that defines the branch fault resistance. The default -value of this property is 0. - -**branchShortCircuitDistance** -The `branchShortCircuitDistance` property is an optional property that defines the location of the short circuit on the branch in %. The -default value of this property is `50`. - -**generatorFaultReactance** -The `generatorFaultReactance` property is an optional property that defines the generator fault reactance. The default -value of this property is `0.00001`. - -**generatorFaultResistance** -The `generatorFaultResistance` property is an optional property that defines the generator fault resistance. The default value of this property is `0.00001`. - -## Examples - -**YAML configuration:** -```yaml -simulation-parameters: - preFaultSimulationStopInstant: 0.1 - faultEventInstant: 0.2 - branchSideOneFaultShortCircuitDuration: 0.35 - branchSideTwoFaultShortCircuitDuration: 0.75 - generatorFaultShortCircuitDuration: 0.3 - postFaultSimulationStopInstant: 0.8 -``` - -**XML configuration:** -```xml - - 0.1 - 0.2 - 0.35 - 0.75 - 0.3 - 0.8 - -``` diff --git a/pages/documentation/user/configuration/table-formatter.md b/pages/documentation/user/configuration/table-formatter.md deleted file mode 100644 index 8eeffdcd..00000000 --- a/pages/documentation/user/configuration/table-formatter.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: default ---- - -# table-formatter -The `table-formatter` module is used to configure the rendering of tables displayed in the console. It is also used to export data in CSV files. - -## Optional properties - -**invalidString** -The `invalidString` property is an optional property that defines the replacement string to display when a value is absent. The default value of this property is `inv`. - -**language** -The `language` property is an optional property that defines the language code of the locale to use. The default value -of this property is the language code (2-characters code) of the system default locale. - -**printHeader** -The `printHeader` property is an optional property that defines whether the headers of the columns are displayed or not. The default value of this property is `true`. - -**printTitle** -The `printTitle` property is an optional property that defines whether the title of the table is displayed or not. The default value of this property is `true`. - -**separator** -The `separator` property is an optional property that defines the column separator used in CSV files. The default value of this property is `;`. - -## Examples - -**YAML configuration:** -```yaml -table-formatter: - invalidString: inv - language: FR - printHeader: true - printTitle: true - separator: ; -``` - -**XML configuration:** -```xml - - inv - FR - true - true - ; - -``` diff --git a/pages/documentation/user/index.md b/pages/documentation/user/index.md deleted file mode 100644 index adeb456d..00000000 --- a/pages/documentation/user/index.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -layout: default ---- - -# Getting started - -* TOC -{:toc} - -## Introduction - -Follow these simple steps to get familiar with the PowSyBl environment. Below are instructions to install a -basic PowSyBl distribution and to start running iTools commands. - -Please note that this PowSyBl distribution is functional on Windows and Linux but -is not supported for MacOS yet. - -## Installation from binaries - -Start by downloading the [latest version of a PowSyBl distribution](../../download/index.html). -Unzip the downloaded package. You can now add `/powsybl-distribution-/bin` to your environment variable `PATH`. - -You can now use iTools commands in your terminal: - -``` -$> itools --help -usage: itools [OPTIONS] COMMAND [ARGS] - -Available options are: - --config-name Override configuration file name - -Available commands are: - -Computation: - compare-security-analysis-results Compare security analysis results - loadflow Run loadflow - loadflow-validation Validate load-flow results of a network - security-analysis Run security analysis - -Data conversion: - convert-network convert a network from one format to another - -Misc: - plugins-info List the available plugins - -Script: - run-script run script (only groovy is supported) - -``` -**Optional**: You can set a default configuration by copying the provided configuration file in the `.itools` repository -in your `HOME` (note that you will need to create this repository if it does not exist): -``` -$ mkdir /.itools -$ cp /resources/config/config.yml /.itools/config.yml -``` -This step is not mandatory **if you already have a custom configuration file and the necessary configuration modules are filled**. -For more information, go to the [documentation page of the configuration](https://powsybl.readthedocs.io/projects/powsybl-core/en/latest/user/configuration/index.html). - -## Installation from sources - -It is also possible to install PowSyBl distribution from sources. - -First download the sources of [`powsybl-distribution` repository](https://github.com/powsybl/powsybl-distribution): -``` -$ git clone https://github.com/powsybl/powsybl-distribution.git -``` -If you want to work on a stable version, go to [the latest release tag](https://github.com/powsybl/powsybl-distribution/releases/latest): -``` -$ git checkout tags/ -b latest-release -``` - -Generate a basic PowSyBl distribution by launching from the root repository: -``` -$ cd -$ mvn clean package -``` - -The distribution is generated in `/target`. You can then add `/target/powsybl-distribution-/bin` -to your environment variable `PATH`. - -You can now use iTools commands in your terminal: - -``` -$> itools --help -usage: itools [OPTIONS] COMMAND [ARGS] - -Available options are: - --config-name Override configuration file name - -Available commands are: - -Computation: - compare-security-analysis-results Compare security analysis results - loadflow Run loadflow - loadflow-validation Validate load-flow results of a network - security-analysis Run security analysis - -Data conversion: - convert-network convert a network from one format to another - -Misc: - plugins-info List the available plugins - -Script: - run-script run script (only groovy is supported) - -``` -**Optional**: You can set a default configuration by copying the provided configuration file in the `.itools` repository -in your `HOME` (note that you will need to create this repository if it does not exist): -``` -$ mkdir /.itools -$ cp /resources/config/config.yml /.itools/config.yml -``` -This step is not mandatory **if you already have a custom configuration file and the necessary configuration modules are filled**. -For more information, go to the [documentation page of the configuration](https://powsybl.readthedocs.io/projects/powsybl-core/en/latest/user/configuration/index.html). - -**NB**: The pom file used to generate a basic PowSyBl distribution from the sources can be extended in order for the distribution to -allow for more features (even custom features). For more information about how to do it, -go to the [tutorial to create your own iTools packager](../developer/tutorials/itools-packager.md). - -## Run 1st iTools command - -Once your PowSyBl distribution is installed, you will be able to run iTools commands. The `iTools` script provides a command-line interface to interact with PowSyBl. -In other words, you will be able to run command lines from your terminal to use some features from PowSyBl. For more information, -go to the [documentation page of iTools command](itools/index.md). - -### Available features - -The available iTools commands in a basic PowSyBl distribution (installation guide described above) are the following: - - -- [`compare-security-analysis-results`](itools/compare-security-analysis-results.md): Compare results of two security analyses (their violations pre and post contingencies) -- [`convert-network`](itools/convert-network.md): Convert a file describing a network in a given format into another format -- [`loadflow`](itools/loadflow.md): Run a load-flow on a network imported from a file -- [`loadflow-validation`](itools/loadflow-validation.md): Check if a load-flow's results (voltages, angles, flows...) are valid -- [`security-analysis`](itools/security-analysis.md): Run a security analysis on a network imported from a file -- [`plugins-info`](): List the available implementations for each plugins -- [`run-script`](itools/run-script.md): Run a script based on PowSyBl - -### Examples - -#### Converting a UCTE network file to XIIDM - -In this example, you will convert a UCTE file describing the Belgian network to XIIDM format. -The `beTestGridForMerging.uct` file available in `/resources/UCTE` repository will be used. - -Run the following command: -``` -$ itools convert-network --input-file /resources/UCTE/beTestGridForMerging.uct --output-file /beTestGridForMerging --output-format XIIDM -Loading network '/resources/UCTE/beTestGridForMerging.uct' -Generating file /beTestGridForMerging.xiidm... -``` - -Once the command is completed, the XIIDM file describing the Belgian network will be present as `beTestGridForMerging.xiidm` in your `HOME` repository. - -#### Update an XIIDM network file after running a load-flow - -In this example, you will update an XIIDM file describing the example Eurostag network after running a load-flow using `powsybl-open-loadflow`. -The `eurostag-tutorial-example1.xml` file available in `/resources/XIIDM` repository. Please note that this will permanently -change the file. In order to keep it, you can start by copying it: -``` -$ cp /resources/XIIDM/eurostag-tutorial-example1.xml /resources/XIIDM/eurostag-tutorial-example1.xiidm -``` - -Run the following command: -``` -$ itools loadflow --case-file /resources/XIIDM/eurostag-tutorial-example1.xiidm --output-case-file /resources/XIIDM/eurostag-tutorial-example1.xiidm --output-case-format XIIDM -Loading network '/resources/XIIDM/eurostag-tutorial-example1.xiidm' -loadflow results: -+--------+----------------------------------------------------------------------------------------+ -| Result | Metrics | -+--------+----------------------------------------------------------------------------------------+ -| true | {nbIter=5, dureeCalcul=9.25E-4, cause=0, contraintes=0, statut=OK, csprMarcheForcee=0} | -+--------+----------------------------------------------------------------------------------------+ -``` - -Once the command is completed, the `eurostag-tutorial-example1.xiidm` file will be updated to contain post load-flow results, including calculated bus voltage, calculated bus angles and calculated flows. - -## Going further -- [About Configuration](https://powsybl.readthedocs.io/projects/powsybl-core/en/latest/user/configuration/index.html) -- [About iTools commands](itools/index.md) -- [Tutorial to create your own custom iTools command](../developer/tutorials/itools-command.md) -- [Tutorial to create your own iTools packager](../developer/tutorials/itools-packager.md) diff --git a/pages/documentation/user/user-stories/capacity_calculation_rsc.md b/pages/documentation/user/user-stories/capacity_calculation_rsc.md deleted file mode 100644 index ce17e385..00000000 --- a/pages/documentation/user/user-stories/capacity_calculation_rsc.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -layout: default ---- - -# Capacity calculation for RSC - -This user story concerns Regional Security Coordinators (RSCs). An efficient and safe management of the European electricity system requires coordination at regional level. -This is the role of RSCs, whose objectives are the coordinated security of the electricity system, the integration of large-scale renewable energy generation -and the development of the European electricity market. They perform five core services for TSOs: - -- Coordinated security analysis -- Outage planning coordination -- Coordinated capacity allocation -- Short-term and very short-term adequacy forecast -- Individual and common grid modeling and data set delivery - - -We are going to explain how to perform a coordinated capacity computation using PowSyBl and some specific developments. -We want to ensure that flows across borders respect given maximum admissible values, while ensuring electricity security of supply. -If some overloads are reported, a remedial actions optimization is called to find the cheapest solution to solve the constraints. -Remedial actions can be either changing the tap of a PST (it modifies the impedance of the network and so the load-flows) or doing generator redispatching. - -## Workflow - -The first input data of this process is the network model, coming from UCTE or CIM-CGMES European exchange formats. -We also need an object to define the security domain of the network, built from a CRAC file (**C**ontingency list, **R**emedial **A**ctions and additional **C**onstraints): -it contains a contingencies list, the constraints to monitor and the available remedial actions to get rid of the constraints. - -In this process, we also need two computation engines: -- A loadflow computation is launched before and after each contingency to identify overloads. -- A sensitivity analysis: for each border, a sensitivity analysis determines the impact on the flow of a small variation of the PST angle, and that for all PSTs, and determines the impact on the flow of a small variation of the generation, and that for all generators. - -A cost function is built from the previous results of the sensitivity analysis. It is then sent to a solver to find the remedial actions avoiding constraints at a minimal cost. - -A security analysis is performed at the end of the process to validate the set of remedial actions found by the optimization. - -All PowSyBl features used in this workflow are described below with some implementation examples. - -![Workflow](img/capacity_calculation_rsc/Workflow_Capacity_Calculation_RSC.svg){: width="70%" .center-image} - -## Identification of the power system blocks - -This user story involves several features from the PowSyBl framework and some other features that are specific: - -

- -

-The studied network comes from a set of TSOs' networks. The TSOs' networks can be provided in a common TSO exchange format such as UCTE or CIM-CGMES formats. -The following lines of code come format from [powsybl-tutorials](https://github.com/powsybl/powsybl-tutorials/tree/main/cgmes) and illustrate this functionality. - -```java -File fileBe = new File("/path/to/file/MicroGridTestConfiguration_T4_BE_BB_Complete_v2.zip"); -File fileNl = new File("/path/to/file/MicroGridTestConfiguration_T4_NL_BB_Complete_v2.zip"); -``` - -
- -

- -

-Each input file is imported and transformed to an in-memory object representing the network. - -```java -Network networkBe = Importers.loadNetwork(fileBe.toString()); -Network networkNl = Importers.loadNetwork(fileNl.toString()); -``` - -
- -

- -

-A topological merge of the TSOs' networks is done. The following lines of code come from [powsybl-tutorials](https://github.com/powsybl/powsybl-tutorials/tree/main/cgmes) and illustrate this functionality. - -```java -networkBe.merge(networkNl); -``` - -
- -

- -

-Then, flows are computed with a load flow simulator such as OpenLoadFlow or DynaFlow implementations. - -A loadflow is run on the working variant of the in-memory network with a set of parameters. A computation manager `computationManager` (here defined locally) is used. The default parameters are listed [here](../configuration/parameters/LoadFlowParameters.md). Here angles are set to zero and voltages are set to one per unit. We also create a new variant to store the calculated flows. Note that a network variant is close to a state vector and gathers variables such as injections, productions, tap positions, states of buses, etc. - -```java -LoadFlowParameters loadFlowParameters = new LoadFlowParameters().setVoltageInitMode(LoadFlowParameters.VoltageInitMode.DC_VALUES); -LoadFlowResult result = LoadFlow.run(network, loadFlowParameters); -``` -
- -

- -

-The sensitivity analysis module is dedicated to compute the linearized impact of small network variations on the state variables of some elements. The sensitivity computation is fully described [here](../sensitivity/index.md). In this user story, we use this module to compute all coefficients of the cost function. You can use OpenLoadFlow implementation for these computations. - -
- -

- -

-Remedial actions are read from the CRAC file and given to the optimizer which is a specific module. The best set of remedial actions is converted in actions understandable by PowSyBl. The CRAC file also provides the contingency list, which is also converted to an understandable object for PowSyBl called [Contingency](../contingencies/index.md). - - - -
- -

- -

-The final set of remedial actions is validated through a security analysis. A security analysis needs an input variant, a set of parameters as a `securityAnalysisParameters` object and a set of contingencies through a list. - -```java - -``` - -## External features are: - -

- -

-The cost function builder is in fact a big toolbox using some power system blocks from the PowSyBl framework. For more details about this builder, please refer to [FARAO website](https://farao-community.github.io/). The Google OR-Tools open source library is used to perform the optimization: please visit this [page for more details](https://developers.google.com/optimization/). - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_LF.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_LF.svg deleted file mode 100644 index b97a7f5b..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_LF.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - LF - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_Optimizer.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_Optimizer.svg deleted file mode 100644 index 5167f8b6..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_Optimizer.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - Optimizer - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_SA.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_SA.svg deleted file mode 100644 index 706b5b22..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_SA.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - SA - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_Sensitivity.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_Sensitivity.svg deleted file mode 100644 index 3256deee..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Compute_Sensitivity.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - Sensitivity - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Export.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Export.svg deleted file mode 100644 index a9ea3566..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Export.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/File.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/File.svg deleted file mode 100644 index 89171559..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/File.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Import.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Import.svg deleted file mode 100644 index 613045f5..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Import.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Modify_N-1.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Modify_N-1.svg deleted file mode 100644 index f6d87da6..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Modify_N-1.svg +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - N-1 - - - - - N-1 - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Modify_iAL.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Modify_iAL.svg deleted file mode 100644 index 15324fec..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Modify_iAL.svg +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - iAL - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network.svg deleted file mode 100644 index 2d94ee80..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_Simple_Final.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_Simple_Final.svg deleted file mode 100644 index ce256b02..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_Simple_Final.svg +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 611,4 - 610,6 - 601 - 600 - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_Simple_Initial.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_Simple_Initial.svg deleted file mode 100644 index 68f44a2e..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_Simple_Initial.svg +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 606,5 - 302,4 - 302,4 - 300,4 - 300,4 - 600 - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_extract.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_extract.svg deleted file mode 100644 index 60d0cc85..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_extract.svg +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - extract - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_merging.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_merging.svg deleted file mode 100644 index daf6955b..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Network_merging.svg +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - merging - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Workflow.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Workflow.svg deleted file mode 100644 index 73090b2e..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Workflow.svg +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - LF - - - - N-1 - - - - - LF - - - - - - - - - - - - - - - - Final state - - - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Workflow_Capacity_Calculation_RSC.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Workflow_Capacity_Calculation_RSC.svg deleted file mode 100644 index 1f830966..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/Workflow_Capacity_Calculation_RSC.svg +++ /dev/null @@ -1,704 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CGMESUCTE - - - LF - - - - - - - - - CRAC - - - Sensitivity - - - - - - - - - - - merging - - - - Action - - - - - - - SA - - - Optimizer - Bestremedialactions - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/[Process]N-1Eurostag.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/[Process]N-1Eurostag.svg deleted file mode 100644 index 280fec2c..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/[Process]N-1Eurostag.svg +++ /dev/null @@ -1,1492 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 606,5 - 302,4 - 302,4 - 300,4 - 300,4 - 600 - - - - - - - - - - - - - - - - - - - - - - - - 611,4 - 610,6 - 601 - 600 - - - - - - - - - - - - - - - - - - - - - - - - - - - merging - - - - - - - - - - - extract - - - - LF - - - - SA - - - - Sensitivity - - - - iAL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 606,5 - 302,4 - 302,4 - 300,4 - 300,4 - 600 - - - - - - - - - - - - - - - - - - - - - - - - 611,4 - 610,6 - 601 - 600 - - - - - LF - - - - - N-1 - - - - - - LF - - - - - - - - - - - - - - - - Final state - - - - N-1 - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/busBreakerTopology.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/busBreakerTopology.svg deleted file mode 100644 index bcc62705..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/busBreakerTopology.svg +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/busTopology.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/busTopology.svg deleted file mode 100644 index 2546923d..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/busTopology.svg +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/nodeBreakerTopology.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/nodeBreakerTopology.svg deleted file mode 100644 index c8428ddf..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/nodeBreakerTopology.svg +++ /dev/null @@ -1,675 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/nodeBreakerTopologyGraph.svg b/pages/documentation/user/user-stories/img/capacity_calculation_rsc/nodeBreakerTopologyGraph.svg deleted file mode 100644 index 179f034b..00000000 --- a/pages/documentation/user/user-stories/img/capacity_calculation_rsc/nodeBreakerTopologyGraph.svg +++ /dev/null @@ -1,1126 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BBS2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pages/documentation/user/user-stories/index.md b/pages/documentation/user/user-stories/index.md deleted file mode 100644 index 476f6c95..00000000 --- a/pages/documentation/user/user-stories/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: default ---- - -# User stories -You'll find here the description of user stories based on PowSyBl: -- [How to calculate capacity for a Regional Security Center?](capacity_calculation_rsc.md) diff --git a/pages/overview/getting-started.html b/pages/overview/getting-started.html index dee59e4a..a35789f1 100644 --- a/pages/overview/getting-started.html +++ b/pages/overview/getting-started.html @@ -10,7 +10,6 @@ -

You can also find all our "getting started" resources here. Some of them are highlighted below.