Skip to content

Commit

Permalink
Merge branch 'master' into automaton_a17
Browse files Browse the repository at this point in the history
  • Loading branch information
Nicolas Omont committed Dec 4, 2018
2 parents df0a89c + 6fad121 commit 26298f0
Show file tree
Hide file tree
Showing 8 changed files with 660 additions and 43 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
/file-system-rules-db/target/
/fpf-integration/target/
/histodb-client/target/
/histodb-server/target/
/iidm-actions-contingencies-xml-client/target/
/iidm-ddb/iidm-ddb-ear/target/
/iidm-ddb/iidm-ddb-ejb-remote-client-wildfly/target/
Expand All @@ -23,6 +24,7 @@
/iidm-ddb/iidm-ddb-psse-import-export/target/
/iidm-ddb/iidm-ddb-web/target/
/iidm-ddb/iidm-ddb-example-ejb-client/target/
/iidm-ddb/target/
/mcla-integration/target/
/mmap-offline-db/target/
/modelica-events-adder/target/
Expand All @@ -38,6 +40,7 @@
/online-workflow/target/
/pclfsim-integration/target/
/sampling-integration/target/
/security-analysis-ws/target/
/target/
/uncertainties-analysis/target/
/wca-integration/target/
Expand Down
48 changes: 33 additions & 15 deletions case-projector/src/main/resources/ampl/projector/projector.mod
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ param tempo;
param epsilon_tension_min = 0.5; # On considere qu'une Vmin ou Vmax < 0.5 ne vaut rien (exemple -99999). Idem pour une targetV
param PQmax = 9000; # Toute valeur Pmin Pmax Qmin Qmax au dela de cette valeur sera invalidee
param minReactiveRange = 1; # Tout groupe ayant un intervalle de réglage trop petit sera exclu des groupes réglants
param specificCompatibility = true; # Paramètre de PowSyBl: true: meme comportement qu'Hades2 dans CVG, false: comportement souhaité à terme.
param specificCompatibility = 1 binary; # Paramètre de PowSyBl: true: meme comportement qu'Hades2 dans CVG, false: comportement souhaité à terme.


###############################################################################
Expand Down Expand Up @@ -425,13 +425,15 @@ set QUADCC_DEPH := {(qq,m,n) in QUADCC : quad_ptrDeph[qq,m,n] != -1 };
set UNITCC :=
{(g,n) in UNIT :
n in NOEUDCC
and ( abs(unit_Pc[g,n]) > 0.0001 or abs(unit_Qc[g,n]) > 0.0001 or (unit_vregul[g,n]=="true" and unit_Vc[g,n]>epsilon_tension_min and (not(specificCompatibility) or abs(unit_Pc[g,n])>0.0001 or unit_Pmin<0.0001) ) ) # On refuse les groupes qui ont Pc=0 et Qc=0 saufs s'ils sont réglant (cf definition des groupes reglants ci-dessous).
and ( abs(unit_Pc[g,n]) > 0.0001 or abs(unit_Qc[g,n]) > 0.0001 or (unit_vregul[g,n]=="true" and unit_Vc[g,n]>epsilon_tension_min and (not(specificCompatibility) or abs(unit_Pc[g,n])>0.0001 or unit_Pmin[g,n]<0.0001) ) ) # On refuse les groupes qui ont Pc=0 et Qc=0 saufs s'ils sont réglant (cf definition des groupes reglants ci-dessous).
and ( abs(unit_P0[g,n]) < PQmax and abs(unit_Q0[g,n]) < PQmax ) # On refuse les groupes qui ont P0 ou Q0 à de trop grandes valeurs (exemple -999999)
};

# Groupes qui sont en reglage de tension
# = Groupes qui sont marqués comme reglant, donc la consigne est realiste et, dans le mode de compatibilite, qui ont une consigne non nulle ou une Pmin nulle ou negative. Il est donc impossible d'avoir un groupe compensateur synchrone avec une Pmin strictement positive, mais cela est preferable a mettre des groupes arretes dans le reglage.
set UNITCC_PV := setof {(g,n) in UNITCC: unit_vregul[g,n]=="true" and unit_Vc[g,n]>epsilon_tension_min and (not(specificCompatibility) or abs(unit_Pc[g,n])>0.0001 or unit_Pmin<0.0001)} (g,n);
set UNITCC_PV := setof {(g,n) in UNITCC: unit_vregul[g,n]=="true" and unit_Vc[g,n]>epsilon_tension_min and (not(specificCompatibility) or abs(unit_Pc[g,n])>0.0001 or unit_Pmin[g,n]<0.0001)} (g,n);



#
# Ensembles relatifs aux coupes definissant les domaines dynamiques
Expand Down Expand Up @@ -620,7 +622,7 @@ var unit_Q {(g,n) in UNITCC} >= Qmin[g,n], <= Qmax[g,n];
# definies, c'est-a-dire de valeur absolue inferieure a PQmax
set UNIT_TRAPEZE :=
{ (g,n) in UNITCC :
( (g,n) in UNITCC_PQV or unit_vregul[g,n]=="true" )
( (g,n) in UNITCC_PQV union UNITCC_PV )
and abs(unit_Qp[g,n]) < PQmax
and abs(unit_QP[g,n]) < PQmax
and abs(unit_qP[g,n]) < PQmax
Expand Down Expand Up @@ -694,9 +696,13 @@ subject to limites_reactif_hades{(s,n) in SVC_V}:
var vscconv_P{(sc,n) in VSCCONV} >= vscconv_Pmin[sc,n], <= vscconv_Pmax[sc,n];

# Injection reactive de la station de conversion VSC

param vscconv_Qmin{(sc,n) in VSCCONV}=min( vscconv_qp[sc,n], vscconv_qp0[sc,n], vscconv_qP[sc,n] );
param vscconv_Qmax{(sc,n) in VSCCONV}=max( vscconv_Qp[sc,n], vscconv_Qp0[sc,n], vscconv_QP[sc,n] );

var vscconv_Q{(sc,n) in VSCCONV}
>= min( vscconv_qp[sc,n], vscconv_qp0[sc,n], vscconv_qP[sc,n] ),
<= max( vscconv_Qp[sc,n], vscconv_Qp0[sc,n], vscconv_QP[sc,n] );
>= vscconv_Qmin[sc,n],
<= vscconv_Qmax[sc,n];

# Diagrammes : contraintes trapezoidales reliant P et Q
# La forme generale des droites definissant le diagramme est: Q=q1+*(q2-q1)/(p2-p1)*P
Expand Down Expand Up @@ -749,7 +755,7 @@ subject to bilan_P_noeud {k in NOEUDCC}:
sum{(qq,k,n) in QUADCC} 100 * V[k] * Red_Tran_Act_Dir[qq,k,n]
+ sum{(qq,m,k) in QUADCC} 100 * V[k] * Red_Tran_Act_Inv[qq,m,k]
- sum{(g,k) in UNITCC} unit_P[g,k]
+ sum{(sc,k) in VSCCONV} vscconv_P[sc,k] # Homogene a une conso
+ sum{(sc,k) in VSCCONV} vscconv_P[sc,k] # Homogene a une conso
=
- sum{(c,k) in CONSOCC} conso_PFix[c,k];

Expand Down Expand Up @@ -780,18 +786,30 @@ subject to bilan_Q_noeud {k in NOEUDCC}:
# Fonction objectif
###############################################################################

var sum_unit_P=sum {(g,n) in UNITCC} 100 * ( ( unit_P[g,n] + unit_P0[g,n] ) / ( if abs(Pmax[g,n]-Pmin[g,n])>1 then abs(Pmax[g,n]-Pmin[g,n]) else 1 ))^2;
var sum_unit_Q=sum {(g,n) in UNITCC_PV union UNITCC_PQV } (if (g,n) in UNITCC_PV then 0.1 else 1) * ( ( unit_Q[g,n] + unit_Q0[g,n] ) / ( if abs(Qmax[g,n]-Qmin[g,n])>1 then abs(Qmax[g,n]-Qmin[g,n]) else 1 ))^2;
var sum_svcs_Q=sum {(s,n) in SVC_V} ( ( 100 * svc_b[s,n] * V[n]^2 + svc_Q0[s,n] ) / ( if abs(svc_bmax[s,n]-svc_bmin[s,n])>0 then 100*abs(svc_bmax[s,n]-svc_bmin[s,n]) else 1) )^2;
var sum_hvdc_Q=sum {(sc,n) in VSCCONV : vscconv_vregul[sc,n]=="true"} ( ( vscconv_Q[sc,n] - vscconv_Q0[sc,n] ) / ( if abs(vscconv_Qmax[sc,n]-vscconv_Qmin[sc,n])>1 then abs(vscconv_Qmax[sc,n]-vscconv_Qmin[sc,n]) else 1))^2;
var sum_unit_v=sum {(g,n) in UNITCC_PV union UNITCC_PQV } (V[n] - noeud_V0[n])^2;
var sum_svcs_v=sum {(s,n) in SVC_V } (V[n] - noeud_V0[n])^2;
var sum_hvdc_v=sum {(sc,n) in VSCCONV : vscconv_vregul[sc,n]=="true"} (V[n] - noeud_V0[n])^2;

minimize somme_ecarts_quadratiques :
100 * (
# Tous les groupes
sum {(g,n) in UNITCC} ( unit_P[g,n] + unit_P0[g,n] )^2
# Groupes avec domaine dynamique
#+ sum {(g,n) in UNITCC_PQV} ( unit_Q[g,n] + unit_Q0[g,n] )^2
+ sum {(g,n) in UNITCC} ( unit_Q[g,n] + unit_Q0[g,n] )^2
sum_unit_P
# Tous les groupes avec domaine dynamique et, moins pondérés, les PV sans domaine dynamique (sinon il y a des mouvements quand plusieurs groupes sont connectes au meme noeud)
+ sum_unit_Q
# Tous les CSPRs en réglage
+ sum_svcs_Q
# Toutes les HVDCs en réglage
+ sum_hvdc_Q
# Groupes avec domaine dynamique et groupes PV
+ 1000 * sum {(g,n) in UNITCC_PV union UNITCC_PQV} unit_Pmax[g,n] * (V[n] - noeud_V0[n])^2
+ sum_unit_v
# SVC en reglage de tension
+ 1.0e+6 * sum {(s,n) in SVC_V } (V[n] - noeud_V0[n])^2
# Sations SVC en reglage de tension
+ 1.0e+6 * sum {(sc,n) in VSCCONV : vscconv_vregul[sc,n]=="true"} (V[n] - noeud_V0[n])^2
+ sum_svcs_v
# Stations HVDC en reglage de tension
+ sum_hvdc_v )
;


20 changes: 10 additions & 10 deletions case-projector/src/main/resources/ampl/projector/projector.run
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,17 @@
#
###############################################################################
/*
Valeur modelisee : P Q V
Groupes PV avec domaine dynamique : optimise optimise optimise
Groupes PQ avec domaine dynamique : optimise optimise optimise
Groupes PV sans domaine dynamique : optimise libre optimise
Groupes PQ sans domaine dynamique : optimise fixe libre
SVC en reglage de tension : 0 libre optimise
SVC les autres : 0 fixe libre
Stations VSC en reglage de tension : fixe libre optimise
Stations VSC avec Q fixe : fixe fixe libre
Valeur modelisee : P Q V
Groupes PV avec domaine dynamique : optimise optimise optimise
Groupes PQ avec domaine dynamique : optimise optimise optimise
Groupes PV sans domaine dynamique : optimise optimise* optimise
Groupes PQ sans domaine dynamique : optimise fixe libre
SVC en reglage de tension : 0 optimise optimise
SVC les autres : 0 fixe libre
Stations VSC en reglage de tension : fixe optimise optimise
Stations VSC avec Q fixe : fixe fixe libre
"libre" signifie absent de la fonction objectif
"optimise" signifie present dans la fonction objectif
"optimise" signifie present dans la fonction objectif. "optimise*" correspond � une pond�ration moindre dans l'objectif.
"fixe" signifie que la valeur presente dans la situation est utilisse comme valeur fixe
optimise -> le resultat est ecrit comme target
Pour V optimise, la cible est le V du dernier load flow
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,17 +249,17 @@ printf "%s %i\n","nbGroupesVmaxInvalide",card({(g,n) in UNITCC: substation_Vmax[


# Somme des P,Q avant apres
printf "%s %.1f\n", "sommePavant", sum {(g,n) in UNITCC} unit_Pc[g,n] > projector_results_indic.txt;
printf "%s %.1f\n", "sommePavant", sum {(g,n) in UNITCC} unit_P0[g,n] > projector_results_indic.txt;
printf "%s %.1f\n", "sommePapres", sum {(g,n) in UNITCC} unit_P[g,n] > projector_results_indic.txt;
printf "%s %.1f\n", "sommeQavant", sum {(g,n) in UNITCC} unit_Qc[g,n] > projector_results_indic.txt;
printf "%s %.1f\n", "sommeQavant", sum {(g,n) in UNITCC} unit_Q0[g,n] > projector_results_indic.txt;
printf "%s %.1f\n", "sommeQapres", sum {(g,n) in UNITCC} unit_Q[g,n] > projector_results_indic.txt;

# Variations totales et moyennes P,Q
let tempo := 1.0 / card(UNITCC);
printf "%s %.1f\n", "variationTotaleP", sum {(g,n) in UNITCC} abs(unit_P[g,n] - unit_Pc[g,n]) > projector_results_indic.txt;
printf "%s %.1f\n", "variationTotaleQ", sum {(g,n) in UNITCC} abs(unit_Q[g,n] - unit_Qc[g,n]) > projector_results_indic.txt;
printf "%s %.2f\n", "variationMoyenneP", tempo * sum {(g,n) in UNITCC} abs(unit_P[g,n] - unit_Pc[g,n]) > projector_results_indic.txt;
printf "%s %.2f\n", "variationMoyenneQ", tempo * sum {(g,n) in UNITCC} abs(unit_Q[g,n] - unit_Qc[g,n]) > projector_results_indic.txt;
printf "%s %.1f\n", "variationTotaleP", sum {(g,n) in UNITCC} abs(unit_P[g,n] + unit_P0[g,n]) > projector_results_indic.txt;
printf "%s %.1f\n", "variationTotaleQ", sum {(g,n) in UNITCC} abs(unit_Q[g,n] + unit_Q0[g,n]) > projector_results_indic.txt;
printf "%s %.2f\n", "variationMoyenneP", tempo * sum {(g,n) in UNITCC} abs(unit_P[g,n] + unit_P0[g,n]) > projector_results_indic.txt;
printf "%s %.2f\n", "variationMoyenneQ", tempo * sum {(g,n) in UNITCC} abs(unit_Q[g,n] + unit_Q0[g,n]) > projector_results_indic.txt;

# Moyennes Tensions
let tempo := card({(g,n) in UNITCC: unit_vregul[g,n]=="true"});
Expand All @@ -270,16 +270,16 @@ if tempo > 0 then {
}

# Nombre de groupes modifies P
printf "%s %i\n", "nbGroupesPmodifie01MW", card({(g,n) in UNITCC : abs(unit_P[g,n] - unit_Pc[g,n]) >= 0.1 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesPmodifie1MW", card({(g,n) in UNITCC : abs(unit_P[g,n] - unit_Pc[g,n]) >= 1 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesPmodifie10MW", card({(g,n) in UNITCC : abs(unit_P[g,n] - unit_Pc[g,n]) >= 10 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesPmodifie100MW", card({(g,n) in UNITCC : abs(unit_P[g,n] - unit_Pc[g,n]) >= 100 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesPmodifie01MW", card({(g,n) in UNITCC : abs(unit_P[g,n] + unit_P0[g,n]) >= 0.1 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesPmodifie1MW", card({(g,n) in UNITCC : abs(unit_P[g,n] + unit_P0[g,n]) >= 1 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesPmodifie10MW", card({(g,n) in UNITCC : abs(unit_P[g,n] + unit_P0[g,n]) >= 10 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesPmodifie100MW", card({(g,n) in UNITCC : abs(unit_P[g,n] + unit_P0[g,n]) >= 100 } ) > projector_results_indic.txt;

# Nombre de groupes modifies Q
printf "%s %i\n", "nbGroupesQmodifie01Mvar", card({(g,n) in UNITCC : abs(unit_Q[g,n] - unit_Qc[g,n]) >= 0.1 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesQmodifie1Mvar", card({(g,n) in UNITCC : abs(unit_Q[g,n] - unit_Qc[g,n]) >= 1 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesQmodifie10Mvar", card({(g,n) in UNITCC : abs(unit_Q[g,n] - unit_Qc[g,n]) >= 10 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesQmodifie100Mvar", card({(g,n) in UNITCC : abs(unit_Q[g,n] - unit_Qc[g,n]) >= 100 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesQmodifie01Mvar", card({(g,n) in UNITCC : abs(unit_Q[g,n] + unit_Q0[g,n]) >= 0.1 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesQmodifie1Mvar", card({(g,n) in UNITCC : abs(unit_Q[g,n] + unit_Q0[g,n]) >= 1 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesQmodifie10Mvar", card({(g,n) in UNITCC : abs(unit_Q[g,n] + unit_Q0[g,n]) >= 10 } ) > projector_results_indic.txt;
printf "%s %i\n", "nbGroupesQmodifie100Mvar", card({(g,n) in UNITCC : abs(unit_Q[g,n] + unit_Q0[g,n]) >= 100 } ) > projector_results_indic.txt;

# Nombre de groupes modifies V
printf "%s %i\n", "nbGroupesVmodifie01kV",
Expand All @@ -297,16 +297,16 @@ printf "%s %i\n", "nbGroupesVmodifie5kV",


# Groupe ayant le plus varie en P
let tempo := max {(g,n) in UNITCC} abs(unit_P[g,n] - unit_Pc[g,n]);
let tempo := max {(g,n) in UNITCC} abs(unit_P[g,n] + unit_P0[g,n]);
printf "%s %.1f\n", "variationMaximaleP", tempo > projector_results_indic.txt;
for {(g,n) in UNITCC : abs(unit_P[g,n] - unit_Pc[g,n]) >= tempo } {
for {(g,n) in UNITCC : abs(unit_P[g,n] + unit_P0[g,n]) >= tempo } {
printf "%s %s\n", "groupeVariationMaximaleP", unit_id[g,n] > projector_results_indic.txt;
}

# Groupe ayant le plus varie en Q
let tempo := max {(g,n) in UNITCC} abs(unit_Q[g,n] - unit_Qc[g,n]);
let tempo := max {(g,n) in UNITCC} abs(unit_Q[g,n] + unit_Q0[g,n]);
printf "%s %.1f\n", "variationMaximaleQ", tempo > projector_results_indic.txt;
for {(g,n) in UNITCC : abs(unit_Q[g,n] - unit_Qc[g,n]) >= tempo } {
for {(g,n) in UNITCC : abs(unit_Q[g,n] + unit_Q0[g,n]) >= tempo } {
printf "%s %s\n", "groupeVariationMaximaleQ", unit_id[g,n] > projector_results_indic.txt;
}

Expand Down
55 changes: 55 additions & 0 deletions connectable-switches-collapser/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?xml version="1.0"?>
<!--
Copyright (c) 2016, All partners of the iTesla project (http://www.itesla-project.eu/consortium)
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
-->
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>eu.itesla_project</groupId>
<artifactId>itesla-parent</artifactId>
<version>0.4.0-SNAPSHOT</version>
</parent>

<artifactId>connectable-switches-collapser</artifactId>

<name>Connectable switches collapser post processor</name>

<dependencies>
<!-- Compilation dependencies -->
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
</dependency>
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-iidm-api</artifactId>
</dependency>
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-iidm-converter-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-iidm-impl</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

0 comments on commit 26298f0

Please sign in to comment.