Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/doc md #208

Open
wants to merge 67 commits into
base: feature/doc_md
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
0bef5e7
[YJ] branch to validate evos from Artelys
yoannjanvier Nov 19, 2024
27fab32
[YJ] branch to validate evos from Artelys
yoannjanvier Nov 19, 2024
52e6cf6
Revert "[YJ] branch to validate evos from Artelys"
yoannjanvier Nov 19, 2024
3fd3512
--allow-empty
yoannjanvier Nov 19, 2024
4e0befc
[YJ] missing tables ref
yoannjanvier Nov 19, 2024
c24337b
[YJ] doc adjustment
yoannjanvier Nov 29, 2024
c1c1cb6
[YJ] docs rep
yoannjanvier Dec 3, 2024
54fc18e
[YJ] doc link
yoannjanvier Dec 3, 2024
4a8a40e
[YJ] reorg
yoannjanvier Dec 6, 2024
3369981
[YJ] update doc
yoannjanvier Dec 10, 2024
fa2314b
[YJ] doc in progress
yoannjanvier Dec 10, 2024
4a758b4
[YJ] tableau des options de calculs
yoannjanvier Dec 11, 2024
ae9ca72
[YJ] tableau des options de resultats
yoannjanvier Dec 11, 2024
7ddd46a
[YJ] tableau informations nodales
yoannjanvier Dec 11, 2024
4db47cc
[YJ] tableau conso
yoannjanvier Dec 11, 2024
0111e9f
[YJ] tableau groupes
yoannjanvier Dec 11, 2024
37345a2
[YJ] tableau groupes
yoannjanvier Dec 11, 2024
e5663dd
[YJ] (avec commit precedent) donnees des tableaux jusqua groupes veri…
yoannjanvier Dec 11, 2024
dc594af
[YJ] tableau quad elementaires
yoannjanvier Dec 12, 2024
67d8e4f
[YJ] tableau depahseurs
yoannjanvier Dec 12, 2024
9153507
[YJ] tableau ligne cc
yoannjanvier Dec 12, 2024
ad72195
[YJ] tableau incidents n-1 et n-k
yoannjanvier Dec 12, 2024
982d13f
[YJ] tableau curatif
yoannjanvier Dec 12, 2024
8ca8c10
[YJ] tableau var couplees
yoannjanvier Dec 12, 2024
7d231c6
[YJ] tableau var marginales
yoannjanvier Dec 12, 2024
ae69110
[YJ] adding parades section and remove useless lancement de metrix
yoannjanvier Dec 12, 2024
3e4ac68
[YJ] modifs mineures doc
yoannjanvier Dec 12, 2024
3132930
[YJ] modifs io_doc
yoannjanvier Dec 12, 2024
0257cea
[YJ] adding some variant param missing
yoannjanvier Dec 12, 2024
798f0e6
[YJ] Variants done
yoannjanvier Dec 18, 2024
9e7d096
[YJ] parades more or less done (would a more complet parades.csv test)
yoannjanvier Dec 18, 2024
a1ba6af
[YJ] little doc updates
yoannjanvier Dec 18, 2024
0741fae
[YJ] beginning output doc
yoannjanvier Jan 6, 2025
4772f4e
[YJ] res tab R2 à revoir
yoannjanvier Jan 7, 2025
f34ea8d
[io_doc OK]
yoannjanvier Jan 7, 2025
1d5b5cf
[YJ] modifying TUs results according to new results file dump
yoannjanvier Jan 7, 2025
c36f76a
[YJ] début modèle math
yoannjanvier Jan 7, 2025
02370f8
[YJ] algo and math docs WIP
yoannjanvier Jan 8, 2025
a6c4b66
[YJ] intro
yoannjanvier Jan 13, 2025
081bcbd
[YJ] doc corrections et début de modélisation du réseau
yoannjanvier Jan 21, 2025
20c0b3a
[YJ] doc algo et math pour prod WIP
yoannjanvier Jan 21, 2025
ef61470
[YJ] little board fix
yoannjanvier Jan 21, 2025
398b3be
[YJ] domaines var prod
yoannjanvier Jan 21, 2025
f759a07
[YJ] groupes OK => conso
yoannjanvier Jan 21, 2025
a58205d
[YJ] doc autres fichiers de sortie
yoannjanvier Feb 4, 2025
46fe28e
[YJ] fix
yoannjanvier Feb 4, 2025
67043ca
[YJ]ajout partie config
yoannjanvier Feb 11, 2025
9667376
[YJ] config doc WIP
yoannjanvier Feb 12, 2025
a2dc0d6
[YJ]conso OK
yoannjanvier Feb 24, 2025
bf57c60
[YJ] light modif
yoannjanvier Feb 25, 2025
a9204b3
[YJ] TDs
yoannjanvier Feb 26, 2025
9d88589
[YJ] LCC
yoannjanvier Mar 17, 2025
0485857
[YJ] small doc fixes
yoannjanvier Mar 18, 2025
ea3aade
[YJ] incidents
yoannjanvier Mar 24, 2025
f0ac66e
[YJ] docs parades
yoannjanvier Mar 25, 2025
7165438
[YJ] cohérence notations
yoannjanvier Mar 25, 2025
1ccac36
[YJ] mv math model overview to algo
yoannjanvier Mar 25, 2025
34ea02c
[YJ] notations, restant a faire algo et METRIX
yoannjanvier Mar 25, 2025
03212bf
[YJ] doc math adequacy
yoannjanvier Mar 25, 2025
cf58c48
[YJ] Adequacy and Redispatching phase coherence
yoannjanvier Mar 25, 2025
989127f
[YJ] redis new ctr, pb au niveau de la cohérence des notations
yoannjanvier Mar 25, 2025
dd158fe
[YJ] cur offre-demande ctr en cours mais quid de ELEMCUR ??
yoannjanvier Mar 25, 2025
4560948
[YJ] math model done
yoannjanvier Mar 27, 2025
996cc04
[YJ] little fox
yoannjanvier Mar 27, 2025
5b8db57
[YJ] first version of doc
yoannjanvier Apr 3, 2025
494d60e
[YJ] sum to max for R7 curative
yoannjanvier Apr 8, 2025
6472faf
[YJ] temporary commit to check the pipelines
yoannjanvier Apr 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
488 changes: 488 additions & 0 deletions DOC.md

Large diffs are not rendered by default.

Binary file added docs/adequacy_phase.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
684 changes: 684 additions & 0 deletions docs/algo.md

Large diffs are not rendered by default.

46 changes: 46 additions & 0 deletions docs/board.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Introduction

Metrix simulator est un exécutable C++ indépendant. Ce module est capable d'effectuer des calculs de Power Load Flow ainsi que d'Optimal Power Load Flow pour des réeaux avec plusieurs varaiantes.

# Installation et versons

## Installation

[Install](install.md)

## Versions

cf. Excel (non car Git interne, p-e GitHub public)

# Exécution

## Lancement

[Launching](launching.md)

## I/O

[IO_doc](io_doc.md)

# Descriptions fonctionnelle et mathématique

## Configurations et scénarios

OPF, Load Flow only, OPF w/o redispatching (with gap variables), and OPF_WITH_OVERLOAD.
PTDFs, LODF
Gestion des crashs
Parade topologique en N

[Config](config.md)

## Algorithme

Steps, micro-iterations, variants, network modelling.
[Algo](algo.md)

## Modèle mathématique

Optimization problem formulaiton
[Math](math.md)


104 changes: 104 additions & 0 deletions docs/config.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<style>
r { color: Red }
o { color: Orange }
g { color: Green }
y { color: yellow}
</style>

# Mode de lancements

Il existe 4 modes de lancement :
- Load Flow (LF)
- Optimal Power Load Flow sans redispatching (OPF w/o redispatching)
- Optimal Power Load Flow (OPF)
- Optimal Power Load Flow avec surcharge (OPF with overload)

Pour tous ces modes, les premières étapes sont :
- construction de la jacobienne et factorisation LU de cette dernière
- pour chacune des variantes :
- mise à jour de la topologie réseau
- mise à jour de la jacobienne
- refactorisation de la jacobienne
- calculs LODFs et PTDFs


Les différents types de contraintes sont :
- CONTRAINTE_EMUL_AC_N = 1 (contrainte en N sur un quadripôle fictif)
- CONTRAINTE_EMULATION_AC = 2 (contrainte en N-k sur un quadripôle fictif)
- CONTRAINTE_N = 3 (contrainte en N sur un quadripôle non-fictif)
- CONTRAINTE_N_MOINS_K = 4 (contrainte en N-k sur un quadripôle non-fictif)
- CONTRAINTE_PARADE = 5 (contrainte sur une parade)
- CONTRAINTE_ACTIVATION = 6 (contrainte d'activation d'une parade)
- CONTRAINTE_NON_DEF = -1

## Load Flow (LF)
Mode basique de simulation réseau avec des productions et consommations fixes. Metrix retourne alors le flot sur les lignes du réseau.
Pour ce mode : **MODECALC = 1**.
Dans ce mode :
- Les parades ne sont pas lues
- Si des groupes ou consommateurs sont renseignés comme étant disponibles pour le curatif alors ils sont ignorés
- Il n'y a pas de phase de détection de contraintes

## Optimal Power Load Flow sans redispatching (OPF w/o redispatching)
Ce mode ne permet pas à Metrix-simulator de faire du redispatching (modifier les injections et consommations) mais il tend à minimiser les violations des différentes contraintes grâce à l'utilisation de parades topologiques, de modifications des déphasages des Transformateurs-Déphaseurs ou encore de modifications des flux sur les Lignes à Courant Continu.
Pour ce mode : **MODECALC = 2**.
Dans ce mode :
- Si un groupe est indiqué comme disponible pour le redispatching :
- et uniquement pour le redispatching (i.e. 'OUI_AR') alors il est considéré comme n'étant pas disponible ni pour le redispatching ni pour l'adequacy (i.e. 'NON_HR_AR')
- mais aussi pour l'adequacy (i.e. 'OUI_HR_AR') alors il est considéré comme étant uniquement disponible pour l'adequacy (i.e. 'OUI_HR')
- Si des groupes sont renseignés comme étant disponibles pour le curatif alors ils sont ignorés
- Les défaillances sont interdites ici (i.e. les variables de variations de consommation sont fixes et )
- Des variables d'écart sont ajoutées pour toute contrainte avec un type autre que 'CONTRAINTE_EMUL_AC_N', 'CONTRAINTE_EMULATION_AC' ou 'CONTRAINTE_ACTIVATION'.

## Optimal Power Load Flow (OPF)
Ce mode a la possibilité toures les actions possibles (redispatching en plus des actions énoncées dans le chapitre précédent) afin de minimiser, à moindre coût, les violations des contriantes.
Pour ce mode : **MODECALC = 0**.

## Optimal Power Load Flow avec surcharge (OPF with overload)
Ce mode fonctionne comme le précédent, toutefois si aucune solution n'est trouvée le programme ne retourne pas d'erreur mais des résultats avec surcharge.
Pour ce mode : **MODECALC = 3**.

Si des consommateurs sont renseignés comme étant disponibles pour le curatif alors ils sont ignorés.
Il n'y a pas de contraintes de couplage ici.
Des variables d'écart sont ajoutées pour toute contrainte avec un type autre que 'CONTRAINTE_EMUL_AC_N', 'CONTRAINTE_EMULATION_AC' ou 'CONTRAINTE_ACTIVATION'.

# Générations fichiers PTDFs

La génération des fichiers se fait via l'appel au simulateur. Il n'est pour l'instant pas possible d'uniquement générer les fichiers PTDFs pour chacune des variantes sans lancer de résolution.
Toutefois, il n'y a, a priori, pas de raison à ce que cela ne soit pas possible.

# Codes de retour et gestion des crashs

Les diférents status de retour sont les suivants :
- METRIX_PROBLEME (= -1) : KO
- METRIX_PAS_PROBLEME (= 0) : OK
- METRIX_PAS_SOLUTION (= 1) : problème infaisable ou pas de solution trouvée
- METRIX_NB_MAX_CONT_ATTEINT (= 2) : nombre maximum de contraintes ajoutées atteint
- METRIX_NB_MICROIT (= 3) : nombre maximum de micro-iterations atteint
- METRIX_VARIANTE_IGNOREE (= 4) : variante ignorée
- METRIX_CONTRAINTE_IGNOREE (= 3) : contrainte ignorée car équivalente, Tmax non défini ou pas d'action possible (dans le cas d'un OPF sans redispatching ou d'un OPF avec surcharge)

# Parade topologique en N

Il est possible de ???????

# Seuils ITAM

Il est possible de paramétrer l'outil afin d'utiliser les seuils avant manoeuvre (i.e. post incident mais avant curatif) via le paramètre *TESTITAM*.
Si ces seuils sont activés, une parade "ne rien faire" est ajoutée sur les incidents avec curatif mais sans parade.

## Contexte LF+
En LF+, lorsqu’il y a dépassement d’un seuil ITAM avant utilisation des parades topologiques curatives, il n’y a pas d’alerte ou d‘indicateur indiquant ce dépassement. Alors que la solution retournée peut préconiser l’utilisation de parades curatives qui favorisent, potentiellement, le respect des seuils ITAM d’après les logs finaux.
Ce comportement n’est pas réaliste puisqu’en situation réelle, les parades curatives n’ont pas le temps d’être activée afin de respecter ces seuils ITAM.

## Problématique
Metrix résolve le problème via de l’optimisation globale. Autrement dit, ce dernier tente de trouver une solution optimale respectant l’ensemble des contraintes tout en minimisant l’ensemble des objectifs définis (ex : minimisation des dépassements en LF+). Ceci implique que, du point de vue de Metrix, la minimisation des dépassement se fait « d’un coup » et non pas séquentiellement comme ce pourrait être le cas manuellement. Ainsi, en sortie de Metrix, ce dernier peut considérer qu’il n’y a plus de dépassement alors que ce sont des parades curatives qui permettent de respecter les seuils ITAM (non réaliste d’après le paragraphe précédent).


## Options possibles :

- Utiliser les fichiers « tmp » afin de lever une alerte
- Modifier le modèle afin que seules les parades topologiques curatives n’ayant pas d’impact sur les éléments avec dépassements de leur seuil ITAM soient activables (cette solution semble complexe à implémenter a priori)
- Pour tout élément avec un seuil N-k ainsi qu’un seuil ITAM mais pas de parade préventive pour cet élément : suppression de seuils N-k de cet élément ?

Compte tenu du paradigme LF+ (minimisation des dépassements de différents seuils pour un même élément et optimisation globale), le process le plus réaliste semble être de lever une alerte/warning indiquant qu’un seuil n’est pas respecté.
Binary file added docs/indRes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
91 changes: 91 additions & 0 deletions docs/install.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
##### Requirements

To build metrix-simulator, you need:
- A C++ compiler that supports C++11 ([clang](https://clang.llvm.org) 3.3 or higher, [g++](https://gcc.gnu.org) 5.0 or higher)
- [CMake](https://cmake.org) (3.12 or higher)
- [Make](https://www.gnu.org/software/make/)
- [Boost](https://www.boost.org) development packages (1.66 or higher)

###### Ubuntu 20.04
```
$> apt install -y cmake g++ git libboost-all-dev libxml2-dev make
```

###### Ubuntu 18.04
```
$> apt install -y g++ git libboost-all-dev libxml2-dev make wget
```

**Note:** Under Ubuntu 18.04, the default CMake package is too old (3.10), so you have to install it manually:
```
$> wget https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.tar.gz
$> tar xzf cmake-3.12.0-Linux-x86_64.tar.gz
$> export PATH=$PWD/cmake-3.12.0-Linux-x86_64/bin:$PATH
```

###### CentOS 8
```
$> yum install -y boost-devel gcc-c++ git libxml2-devel make wget
```

**Note:** Under CentOS 8, the default CMake package is too old (3.11.4), so you have to install it manually:
```
$> wget https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.tar.gz
$> tar xzf cmake-3.12.0-Linux-x86_64.tar.gz
$> export PATH=$PWD/cmake-3.12.0-Linux-x86_64/bin:$PATH
```

###### CentOS 7
```
$> yum install -y gcc-c++ git libxml2-devel make wget
```
**Note:** Under CentOS 7, the default `boost-devel` package is too old (1.53), so we install Boost 1.66 from `epel-release`.
```
$> yum install -y epel-release
$> yum install -y boost166-devel
$> export BOOST_INCLUDEDIR=/usr/include/boost166
$> export BOOST_LIBRARYDIR=/usr/lib64/boost166
```

**Note:** Under CentOS 7, the default CMake package is too old (2.8.12), so you have to install it manually:
```
$> wget https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.tar.gz
$> tar xzf cmake-3.12.0-Linux-x86_64.tar.gz
$> export PATH=$PWD/cmake-3.12.0-Linux-x86_64/bin:$PATH
```
##### Build sources

1 - Clone the project
```
$> git clone https://github.com/powsybl/powsybl-metrix.git
$> cd powsybl-metrix/metrix-simulator
```

2 - Build the project, with 3rd parties
First build the 3rd parties
```
$> mkdir build
$> mkdir build/external
$> cd build/external
$> cmake ../../external -DCMAKE_BUILD_TYPE=<BUILD_TYPE_3PARTIES>
$> cmake --build .
```

Then build the executable
```
$> cd ..
$> cmake .. -DCMAKE_INSTALL_PREFIX=<PREFIX> -DCMAKE_BUILD_TYPE=<BUILD_TYPE>
$> cmake --build . --target install
```

The following CMAKE options can be set for the executable configuration:
- USE_SIRIUS_SHARED (default = OFF): If active, project will link using the shared library of sirius solver instead of static library
- METRIX_RUN_ALL_TESTS (default = ON): If inactive, projects will execute a reduced scope of tests

###### Checkstyle
This project uses [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) to verify the code style. This tool is provided with the clang extra tools. To enable the code style checking, add the `-DCMAKE_CXX_CLANG_TIDY=clang-tidy` flag to the configure command.

A clang-format file is also provided to format the code by using [clang-format](https://clang.llvm.org/docs/ClangFormat.html). Most of IDEs have a option to format files using clang-format automatically.

###### Code coverage
This project uses either [gcov](https://gcc.gnu.org/onlinedocs/gcc/Gcov.html) or [llvm-cov](https://llvm.org/docs/CommandGuide/llvm-cov.html) to compute the code coverage. We also use [gcovr](https://gcovr.com/en/stable/) (4.2 or higher) to generate both sonar and HTML reports. To compute the code coverage, add the `-DCODE_COVERAGE=TRUE` flag to the configure command.
Loading
Loading