From e83145e43086d26315a938b5b1ae97e7eb03a8a8 Mon Sep 17 00:00:00 2001 From: Giovanni Ferrari Date: Fri, 8 Jun 2018 10:23:01 +0200 Subject: [PATCH] Updated scripts with hvdc and svc support --- .../resources/ampl/projector/projector.dat | 17 +- .../resources/ampl/projector/projector.mod | 209 ++++++++++++++++-- .../resources/ampl/projector/projector.run | 33 ++- .../ampl/projector/projectorOutput.run | 18 +- 4 files changed, 248 insertions(+), 29 deletions(-) diff --git a/case-projector/src/main/resources/ampl/projector/projector.dat b/case-projector/src/main/resources/ampl/projector/projector.dat index 5c6f0fcb..a4a7bd36 100644 --- a/case-projector/src/main/resources/ampl/projector/projector.dat +++ b/case-projector/src/main/resources/ampl/projector/projector.dat @@ -42,7 +42,6 @@ param: TAPS: tap_ratio tap_x tap_angle tap_fault tap_curative := include ampl_ne #param: REGL: regl_tap0 regl_table regl_onLoad regl_V regl_fault regl_curative regl_id := include ampl_network_rtc.txt; param: REGL: regl_tap0 regl_table regl_onLoad regl_V regl_fault regl_id := include ampl_network_rtc.txt; - # ampl_network_ptc.txt #"num" "tap" "table" "fault" "curative" "id" param: DEPH: deph_tap0 deph_table deph_fault deph_curative deph_id := include ampl_network_ptc.txt; @@ -51,6 +50,18 @@ param: DEPH: deph_tap0 deph_table deph_fault deph_curative deph_id := include am #"num" "bus1" "bus2" "3wt num" "sub.1" "sub.2" "r (pu)" "x (pu)" "g1 (pu)" "g2 (pu)" "b1 (pu)" "b2 (pu)" "cst ratio (pu)" "ratio tc" "phase tc" "p1 (MW)" "p2 (MW)" "q1 (MVar)" "q2 (MVar)" "patl1 (A)" "patl2 (A)" "merged" "fault" "curative" "id" "description" param: QUAD: quad_3wt quad_subor quad_subex quad_R quad_X quad_Gor quad_Gex quad_Bor quad_Bex quad_cstratio quad_ptrRegl quad_ptrDeph quad_Por quad_Pex quad_Qor quad_Qex quad_patl1 quad_patl2 quad_merged quad_fault quad_curative quad_id quad_nom := include ampl_network_branches.txt; +# ampl_network_static_var_compensators.txt +#"num" "bus" "con. bus" "substation" "minB (S)" "maxB (S)" "v regul." "targetV (pu)" "fault" "curative" "id" "description" "P (MW)" "Q (MVar)" +param: SVC: svc_noeudpossible svc_substation svc_bmin svc_bmax svc_vregul svc_targetV svc_fault svc_curative svc_id svc_description svc_P0 svc_Q0 := include ampl_network_static_var_compensators.txt; + +#ampl_network_hvdc.txt +#"num" "type" "converterStation1" "converterStation2" "r(ohm)" "nomV(KV)" "convertersMode" "targetP(MW)" "maxP(MW)" "fault" "curative" "id" "description" +param: HVDC: hvdc_type hvdc_conv1 hvdc_conv2 hvdc_r hvdc_Vnom hvdc_convertersMode hvdc_targetP hvdc_Pmax hvdc_fault hvdc_curative hvdc_id hvdc_description := include ampl_network_hvdc.txt; + +#ampl_network_vsc_converter_stations.txt +#"num" "bus" "con. bus" "substation" "minP(MW)" "maxP(MW)" "minQmaxP(MVar)" "minQ0(MVar)" "minQminP(MVar)" "maxQmaxP(MVar)" "maxQ0(MVar)" "maxQminP(MVar)" "v regul." "targetV(pu)" "targetQ(MVar)" "lossFactor(%PDC)" "fault" "curative" "id" "description" "P(MW)" "Q(MVar)" +param: VSCCONV: vscconv_noeudpossible vscconv_substation vscconv_Pmin vscconv_Pmax vscconv_qP vscconv_qp0 vscconv_qp vscconv_QP vscconv_Qp0 vscconv_Qp vscconv_vregul vscconv_targetV vscconv_targetQ vscconv_lossFactor vscconv_fault vscconv_curative vscconv_id vscconv_description vscconv_P0 vscconv_Q0 := include ampl_network_vsc_converter_stations.txt; + # ampl_generators_domains.txt #num id P(MW) Q(MVar) V(kV) RHS(lt) Vnominal(kV) id_internal @@ -58,4 +69,6 @@ param: DOMAIN: domain_coeffP domain_coeffQ domain_coeffV domain_RHS domain_Vnomi # ampl_network_limits.txt #"num" "branch" "side" "limit (A)" "accept. duration (s)" "fault" "curative" -# Fichier non lu +# Fichier non lu par le porjecteur + + diff --git a/case-projector/src/main/resources/ampl/projector/projector.mod b/case-projector/src/main/resources/ampl/projector/projector.mod index 1656cab9..9270837c 100644 --- a/case-projector/src/main/resources/ampl/projector/projector.mod +++ b/case-projector/src/main/resources/ampl/projector/projector.mod @@ -21,6 +21,15 @@ param tempo; +############################################################################### +# +# Autres parametres +# +############################################################################### +param epsilon_tension_min = 0.5; # On considere qu'une Vmin ou Vmax < 0.5 ne vaut rien (exemple -99999) + + + ############################################################################### # Donnees postes ############################################################################### @@ -172,6 +181,32 @@ check {(s,n) in SHUNT}: n in NOEUD union {-1}; check {(s,n) in SHUNT}: shunt_substation[s,n] in SUBSTATIONS; +############################################################################### +# Donnees Static Var Compensator (== CSPR) +############################################################################### + +set SVC dimen 2; # [svc, noeud] +param svc_noeudpossible {SVC} integer; +param svc_substation {SVC} integer; +param svc_bmin {SVC}; # Susceptance B en p.u. : faire B*100*V^2 pour obtenir des MVAr +param svc_bmax {SVC}; # Susceptance B en p.u. : faire B*100*V^2 pour obtenir des MVAr +param svc_vregul {SVC} symbolic; # Indique si le svc est en mode de regulation de la tension +param svc_targetV {SVC}; # Cible pour la regulation de tension +param svc_fault {SVC}; +param svc_curative {SVC}; +param svc_id {SVC} symbolic; +param svc_description {SVC} symbolic; +param svc_P0 {SVC}; +param svc_Q0 {SVC}; # Valeur fixe a utiliser si le svc ne regule pas la tension (e-mail Nicolas Omont 30 mai 2018) + +# +# Consistance +# +check {(s,n) in SVC}: n in NOEUD union {-1}; +check {(s,n) in SVC}: svc_substation[s,n] in SUBSTATIONS; + + + ############################################################################### # Donnees Tables des prises ############################################################################### @@ -293,6 +328,68 @@ param noeud_Ytot {k in NOEUD} = );# Fin de la somme +############################################################################### +# Donnees stations de conversion de type VSC / VSC converter station data +############################################################################### +set VSCCONV dimen 2; # num, bus +param vscconv_noeudpossible{VSCCONV} integer; +param vscconv_substation {VSCCONV} integer; +param vscconv_Pmin {VSCCONV}; +param vscconv_Pmax {VSCCONV}; +param vscconv_qP {VSCCONV}; +param vscconv_qp0 {VSCCONV}; +param vscconv_qp {VSCCONV}; +param vscconv_QP {VSCCONV}; +param vscconv_Qp0 {VSCCONV}; +param vscconv_Qp {VSCCONV}; +param vscconv_vregul {VSCCONV} symbolic; +param vscconv_targetV {VSCCONV}; +param vscconv_targetQ {VSCCONV}; +param vscconv_lossFactor {VSCCONV}; +param vscconv_fault {VSCCONV}; +param vscconv_curative {VSCCONV}; +param vscconv_id {VSCCONV} symbolic; +param vscconv_description {VSCCONV} symbolic; +param vscconv_P0 {VSCCONV}; +param vscconv_Q0 {VSCCONV}; + +# +# Consistance +# +check {(cs,n) in VSCCONV}: n in NOEUD union {-1}; +check {(cs,n) in VSCCONV}: vscconv_substation[cs,n] in SUBSTATIONS; +check {(cs,n) in VSCCONV}: vscconv_Pmin[cs,n] <= vscconv_Pmax[cs,n]; +check {(cs,n) in VSCCONV}: vscconv_qp[cs,n] <= vscconv_Qp[cs,n]; # Qmin et Qmax a Pmin +check {(cs,n) in VSCCONV}: vscconv_qp0[cs,n] <= vscconv_Qp0[cs,n]; # Qmin et Qmax a P=0 +check {(cs,n) in VSCCONV}: vscconv_qP[cs,n] <= vscconv_QP[cs,n]; # Qmin et Qmax a Pmax +check {(cs,n) in VSCCONV: vscconv_vregul[cs,n] == "true"}: vscconv_targetV[cs,n] >= epsilon_tension_min; + + +############################################################################### +# Donnees HVDC +# Rq: si on utilise les injections des stations VSC fixes, les donnees de la hvdc ne sont pas utilisees +############################################################################### +set HVDC dimen 1; +param hvdc_type {HVDC} integer; # 1->vscConverterStation, 2->lccConverterStation +param hvdc_conv1 {HVDC} integer; +param hvdc_conv2 {HVDC} integer; +param hvdc_r {HVDC}; +param hvdc_Vnom {HVDC}; +param hvdc_convertersMode {HVDC} symbolic; +param hvdc_targetP {HVDC}; +param hvdc_Pmax {HVDC}; +param hvdc_fault {HVDC}; +param hvdc_curative {HVDC}; +param hvdc_id {HVDC} symbolic; +param hvdc_description {HVDC} symbolic; + +check {h in HVDC}: hvdc_type[h] == 1; # Doit valoir 1 ou 2 mais le type 2 n'est pas encore developpe ici +check {h in HVDC}: hvdc_conv1[h] != hvdc_conv2[h]; +check {h in HVDC}: hvdc_Vnom[h] >= epsilon_tension_min; +check {h in HVDC}: hvdc_convertersMode[h] == "SIDE_1_RECTIFIER_SIDE_2_INVERTER" or hvdc_convertersMode[h] == "SIDE_1_INVERTER_SIDE_2_RECTIFIER"; +check {h in HVDC}: hvdc_targetP[h] >= 0.0; +check {h in HVDC}: hvdc_targetP[h] <= hvdc_Pmax[h]; + ############################################################################### # Definition d'ensembles supplementaires @@ -377,7 +474,7 @@ param quad_dephex {(qq,m,n) in QUADCC} = 0; # Bornes en tension ############################################################################### -param epsilon_tension_min = 0.5; # On considere qu'une Vmin ou Vmax < 0.5 ne vaut rien (exemple -99999) +#param epsilon_tension_min = 0.5; # On considere qu'une Vmin ou Vmax < 0.5 ne vaut rien (exemple -99999) param Vmin_defaut_horsgroupe := 0.80; param Vmax_defaut_horsgroupe := 1.15; param Vmin_defaut_groupe := 0.95; @@ -468,6 +565,7 @@ check{(g,n) in UNITCC} : Qmin[g,n] <= Qmax[g,n]; set UNITHORSPMIN := setof {(g,n) in UNITCC : unit_Pc[g,n] < unit_Pmin[g,n]} unit_id[g,n] ; set UNITHORSPMAX := setof {(g,n) in UNITCC : unit_Pc[g,n] > unit_Pmax[g,n]} unit_id[g,n]; + ############################################################################### # Variables de production ############################################################################### @@ -495,6 +593,62 @@ subject to ctr_domain{(numero,g,n,gid) in UNIT_DOMAIN_CTR : gen_vnom_mismatch[g, <= domain_RHS[numero,gid]; +############################################################################### +# Static Var Compensators (==CSPR) +############################################################################### + +# SVC sur la composante connexe principale +set SVCCC := {(s,n) in SVC : n in NOEUDCC}; + +# SVC qui regulent une tension +set SVC_V := {(s,n) in SVCCC : svc_vregul[s,n]=="true" && svc_targetV[s,n] >= epsilon_tension_min }; + +# SVC qui regulent une valeur reactive +# Mai 2018 : donnees pas encore disponibles pour le reglage d'une consigne reactive +set SVC_Q dimen 2; # Vide + +# SVC avec Q fixe +set SVC_FIXE := {(s,n) in SVCCC : (s,n) not in SVC_V};# && (s,n) not in SVC_Q}; + + +# Variable "b" dans ses bornes +var svc_b{(s,n) in SVC_V} >= svc_bmin[s,n], <= svc_bmax[s,n]; + +# Dans Hades, la production de reactif est limitee par bmin*Vnominale^2 et bmax*Vnominale^2. On veut garder ces limitations ici. +subject to limites_reactif_hades{(s,n) in SVC_V}: + svc_bmin[s,n] <= svc_b[s,n] * V[n]^2 <= svc_bmax[s,n]; # Vnominale est egale a 1kV + + +############################################################################### +# Stations de conversion VSC +############################################################################### + +# Injection active de la station de conversion VSC +var vscconv_P{(sc,n) in VSCCONV} >= vscconv_Pmin[sc,n], <= vscconv_Pmax[sc,n]; + +# Injection reactive de la station de conversion VSC +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] ); + +# Diagrammes : contraintes trapezoidales reliant P et Q +# La forme generale des droites definissant le diagramme est: Q=q1+*(q2-q1)/(p2-p1)*P +# S'il s'agit d'une limite superieure, on remplace = par <= +# S'il s'agit d'une limite inferieure, on remplace = par >= + +# Limites entre P=0 et Pmax +subject to limites_sup_reactif_Ppositif{(sc,n) in VSCCONV}: + vscconv_Q[sc,n] <= vscconv_Qp0[sc,n] + (vscconv_QP[sc,n]-vscconv_Qp0[sc,n])/(vscconv_Pmax[sc,n]-0.0)*vscconv_P[sc,n]; +subject to limites_inf_reactif_Ppositif{(sc,n) in VSCCONV}: + vscconv_Q[sc,n] >= vscconv_qp0[sc,n] + (vscconv_qP[sc,n]-vscconv_qp0[sc,n])/(vscconv_Pmax[sc,n]-0.0)*vscconv_P[sc,n]; + +# Limites entre Pmin et P=0 +subject to limites_sup_reactif_Pnegatif{(sc,n) in VSCCONV}: + vscconv_Q[sc,n] <= vscconv_Qp0[sc,n] + (vscconv_Qp[sc,n]-vscconv_Qp0[sc,n])/(vscconv_Pmin[sc,n]-0.0)*vscconv_P[sc,n]; +subject to limites_inf_reactif_Pnegatif{(sc,n) in VSCCONV}: + vscconv_Q[sc,n] >= vscconv_qp0[sc,n] + (vscconv_qp[sc,n]-vscconv_qp0[sc,n])/(vscconv_Pmin[sc,n]-0.0)*vscconv_P[sc,n]; + + ############################################################################### # Transits ############################################################################### @@ -552,27 +706,37 @@ var term_bilan_P_noeud_nul{k in NOEUDCC} = # Sauf si gros probleme numerique, il faut mettre shunt_noeud[k] * V[k]^2 subject to bilan_Q_noeud {k in NOEUDCC}: - - 100 * noeud_Ytot[k] * V[k]^2 - - sum{(shunt,k) in SHUNTCC} 100 * shunt_valnom[shunt,k] * V[k]^2 - + sum{(qq,k,n) in QUADCC} 100 * V[k] * Red_Tran_Rea_Dir[qq,k,n] - + sum{(qq,m,k) in QUADCC} 100 * V[k] * Red_Tran_Rea_Inv[qq,m,k] - - sum{(g,k) in UNITCC} unit_Q[g,k] - = - - sum{(c,k) in CONSOCC} conso_QFix[c,k]; + - 100 * noeud_Ytot[k] * V[k]^2 + - sum{(shunt,k) in SHUNTCC } 100 * shunt_valnom[shunt,k] * V[k]^2 + - sum{(svc,k) in SVC_V } 100 * svc_b[svc,k] * V[k]^2 + - sum{(svc,k) in SVC_FIXE} svc_Q0[svc,k] + - sum{(sc,k) in VSCCONV } vscconv_Q[sc,k] + + sum{(qq,k,n) in QUADCC} 100 * V[k] * Red_Tran_Rea_Dir[qq,k,n] + + sum{(qq,m,k) in QUADCC} 100 * V[k] * Red_Tran_Rea_Inv[qq,m,k] + - sum{(g,k) in UNITCC} unit_Q[g,k] + = + - sum{(c,k) in CONSOCC} conso_QFix[c,k]; var term_bilan_Q_noeud {k in NOEUDCC} = - - 100 * noeud_Ytot[k] * V[k]^2 - - sum{(shunt,k) in SHUNTCC} 100 * shunt_valnom[shunt,k] * V[k]^2 - + sum{(qq,k,n) in QUADCC} 100 * V[k] * Red_Tran_Rea_Dir[qq,k,n] - + sum{(qq,m,k) in QUADCC} 100 * V[k] * Red_Tran_Rea_Inv[qq,m,k] - - sum{(g,k) in UNITCC} unit_Q[g,k]; + - 100 * noeud_Ytot[k] * V[k]^2 + - sum{(shunt,k) in SHUNTCC } 100 * shunt_valnom[shunt,k] * V[k]^2 + - sum{(svc,k) in SVC_V } 100 * svc_b[svc,k] * V[k]^2 + - sum{(svc,k) in SVC_FIXE} svc_Q0[svc,k] + - sum{(sc,k) in VSCCONV } vscconv_Q[sc,k] + + sum{(qq,k,n) in QUADCC} 100 * V[k] * Red_Tran_Rea_Dir[qq,k,n] + + sum{(qq,m,k) in QUADCC} 100 * V[k] * Red_Tran_Rea_Inv[qq,m,k] + - sum{(g,k) in UNITCC} unit_Q[g,k]; + var term_bilan_Q_noeud_nul {k in NOEUDCC} = - - 100 * noeud_Ytot[k] * V[k]^2 - - sum{(shunt,k) in SHUNTCC} 100 * shunt_valnom[shunt,k] * V[k]^2 - + sum{(qq,k,n) in QUADCC} 100 * V[k] * Red_Tran_Rea_Dir[qq,k,n] - + sum{(qq,m,k) in QUADCC} 100 * V[k] * Red_Tran_Rea_Inv[qq,m,k] - - sum{(g,k) in UNITCC} unit_Q[g,k] - + sum{(c,k) in CONSOCC} conso_QFix[c,k]; + - 100 * noeud_Ytot[k] * V[k]^2 + - sum{(shunt,k) in SHUNTCC } 100 * shunt_valnom[shunt,k] * V[k]^2 + - sum{(svc,k) in SVC_V } 100 * svc_b[svc,k] * V[k]^2 + - sum{(svc,k) in SVC_FIXE} svc_Q0[svc,k] + - sum{(sc,k) in VSCCONV } vscconv_Q[sc,k] + + sum{(qq,k,n) in QUADCC} 100 * V[k] * Red_Tran_Rea_Dir[qq,k,n] + + sum{(qq,m,k) in QUADCC} 100 * V[k] * Red_Tran_Rea_Inv[qq,m,k] + - sum{(g,k) in UNITCC} unit_Q[g,k] + + sum{(c,k) in CONSOCC} conso_QFix[c,k]; ############################################################################### @@ -582,4 +746,9 @@ var term_bilan_Q_noeud_nul {k in NOEUDCC} = minimize somme_ecarts_quadratiques : sum {(g,n) in UNIT_PQV} ( unit_P[g,n] - unit_Pc[g,n] )^2 + sum {(g,n) in UNIT_PQV} ( unit_Q[g,n] - unit_Qc[g,n] )^2 - + 10 * sum {(g,n) in UNIT_PV inter UNIT_PQV } ( unit_Pmax[g,n] * (V[n] - unit_Vc[g,n]) )^2; + + 10 * sum {(g,n) in UNIT_PV inter UNIT_PQV } ( unit_Pmax[g,n] * (V[n] - unit_Vc[g,n]) )^2 + + 10 * sum {(s,n) in SVC_V } 100 * (V[n] - svc_targetV[s,n])^2 # Ici le 100 signifie qu'en general les VSC ont une capacite de l'ordre de 100MVAr + + 1.0e+8 * sum{(sc,n) in VSCCONV} (V[n] - vscconv_targetV[sc,n])^2 + ; + + diff --git a/case-projector/src/main/resources/ampl/projector/projector.run b/case-projector/src/main/resources/ampl/projector/projector.run index e9c21c51..bdcd6370 100644 --- a/case-projector/src/main/resources/ampl/projector/projector.run +++ b/case-projector/src/main/resources/ampl/projector/projector.run @@ -112,6 +112,26 @@ let {(g,n) in UNIT} unit_QP[g,n]:=tmp[g,n]; check; + +############################################################################### +# Correction des valeurs bmin et bmax des CSPR +############################################################################### +# 31 mai 2018 : les conversions pour les CSPR sont erronnees dans Powsybl, donc on doit modifier les valeurs ici +for {(s,n) in SVCCC} { + if ( abs(svc_bmin[s,n]) + abs(svc_bmax[s,n]) ) < 0.1 + then { + printf "Poste %s : valeur bmin du VSC '%s' trop faible, corrigee par %f * %i^2 / 100 = %.2f\n", + substation_id[noeud_poste[n]],svc_id[s,n],svc_bmin[s,n],substation_Vnomi[noeud_poste[n]], + svc_bmin[s,n] * 0.01 * substation_Vnomi[noeud_poste[n]]^2; + printf "Poste %s : valeur bmax du VSC '%s' trop faible, corrigee par %f * %i^2 / 100 = %.2f\n", + substation_id[noeud_poste[n]],svc_id[s,n],svc_bmax[s,n],substation_Vnomi[noeud_poste[n]], + svc_bmax[s,n] * 0.01 * substation_Vnomi[noeud_poste[n]]^2; + let svc_bmin[s,n] := svc_bmin[s,n] * 0.01 * substation_Vnomi[noeud_poste[n]]^2; + let svc_bmax[s,n] := svc_bmax[s,n] * 0.01 * substation_Vnomi[noeud_poste[n]]^2; + } +} + + ################################################################################ # Calcul du noeud qui aura la phase fixee ################################################################################ @@ -166,6 +186,10 @@ fix {(g,n) in UNITCC diff UNIT_PQV} unit_Q[g,n]; # On ne peut pas en plus fixer la tension, sinon risque de non realisabilite pour question numerique (si on veut fixer P Q V en meme temps, il y a risque d'erreur numerique) +# Fonctionnement des stations de conversion HVDC mode VSC : injection fisee +fix {(sc,n) in VSCCONV} vscconv_P[sc,n] := vscconv_P0[sc,n]; + + ############################################################################### # Descriptifs ############################################################################### @@ -184,7 +208,8 @@ display card(NOEUDCC),card(NOEUDCC_V0), UNITHORSPMIN,UNITHORSPMAX, card(UNIT_DOMAIN_CTR), UNIT_DOMAIN, - DOMAIN_ID + DOMAIN_ID, + SVC,SVC_V,SVC_FIXE ; printf "Nombre de noeuds dans la composante connexe pincipale (i.e. la composante connexe numero 0) : %i\n",card(NOEUDCC); @@ -222,7 +247,7 @@ let {(g,n) in UNIT_PQV} ctr_trapeze_qmax[g,n].cscalefactor := 1/max(1.0,abs(ctr_ let {(g,n) in UNIT_PQV} ctr_trapeze_qmin[g,n].cscalefactor := 1/max(1.0,abs(ctr_trapeze_qmin_rhs[g,n])); let {(numero,g,n,gid) in UNIT_DOMAIN_CTR} ctr_domain[numero,g,n,gid].cscalefactor := 1/max(1.0,abs(domain_RHS[numero,gid])); - +#let {(s,n) in SVC_V} svc_b[s,n].xscalefactor := (svc_bmax[s,n] - svc_bmin[s,n]); # Semble ralentir le calcul. A retester ############################################################################### @@ -237,6 +262,7 @@ let {n in NOEUDCC} bilan_Q_noeud[n].cfeastol := 0.01; let {(g,n) in UNIT_PQV} ctr_trapeze_qmax[g,n].cfeastol := 0.01; let {(g,n) in UNIT_PQV} ctr_trapeze_qmin[g,n].cfeastol := 0.01; let {(numero,g,n,gid) in UNIT_DOMAIN_CTR} ctr_domain[numero,g,n,gid].cfeastol := 0.01; +let {(s,n) in SVC_V} limites_reactif_hades[s,n].cfeastol := 0.001; ############################################################################### @@ -250,9 +276,9 @@ display bilan_P_noeud, term_bilan_Q_noeud, term_bilan_Q_noeud_nul > bilan_P_noeud.txt; +expand limites_sup_reactif_Ppositif,limites_inf_reactif_Ppositif,limites_sup_reactif_Pnegatif,limites_inf_reactif_Pnegatif ; */ - ############################################################################### # Resolution ############################################################################### @@ -272,7 +298,6 @@ repeat { while ( ( solve_result_num >= 100 and solve_result_num < 400 ) or solve_result_num >= 410 ) and nb_solve projector_results_static_var_compensators.txt; +printf {(s,n) in SVCCC} + "%i %i %s %f %f\n", + s,n, + if (s,n) in SVC_V then "true" else "false", + if (s,n) in SVC_V then V[n] else svc_targetV[s,n], + if (s,n) in SVC_V then 100*svc_b[s,n]*V[n]^2 + else if (s,n) in SVC_FIXE then svc_Q0[s,n] + > projector_results_static_var_compensators.txt; ########################################################################### @@ -205,7 +213,7 @@ printf '#"num" "bus" "v_regul" "targetV(pu)" "Q(MVar)"\n' ########################################################################### printf '#"num" "bus" "P(MW)" "Q(MVar)"\n' - > projector_results_static_lcc_converter_stations.txt; + > projector_results_lcc_converter_stations.txt; ########################################################################### @@ -215,8 +223,11 @@ printf '#"num" "bus" "P(MW)" "Q(MVar)"\n' ########################################################################### printf '#"num" "bus" "v_regul" "targetV(pu)" "targetQ(MVar)" "P(MW)" "Q(MVar)"\n' - > projector_results_static_vsc_converter_stations.txt; - + > projector_results_vsc_converter_stations.txt; +printf {(sc,n) in VSCCONV} + "%i %i %s %f %f %f %f\n", + sc,n,vscconv_vregul[sc,n],V[n],vscconv_Q[sc,n],vscconv_P[sc,n],vscconv_Q[sc,n] + > projector_results_vsc_converter_stations.txt; ########################################################################### @@ -345,3 +356,4 @@ for {(g,n) in UNITCC : unit_PV[g,n]=="true" and abs(V[n]-unit_Vc[g,n])*substatio # Fin du fichier ############################################################################### print "Fin du fichier projectorOutput.run"; +