Skip to content

Commit

Permalink
New phase shifter regulation mode: keep regularing attribute
Browse files Browse the repository at this point in the history
  • Loading branch information
geofjamg committed Oct 24, 2016
1 parent 17b3d29 commit a4de076
Show file tree
Hide file tree
Showing 22 changed files with 182 additions and 172 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -540,17 +540,18 @@ private void createPhaseTapChanger(cim1.model.PhaseTapChanger ptc, cim1.model.Te
cim1.model.RegulatingControl rc = ptc.getRegulatingControl();
switch (rc.getMode()) {
case currentFlow:
Terminal regulatingTerminal;
Terminal regulationTerminal;
if (rc.getTerminal() == t1) {
regulatingTerminal = transfo.getTerminal1();
regulationTerminal = transfo.getTerminal1();
} else if (rc.getTerminal() == t2) {
regulatingTerminal = transfo.getTerminal2();
regulationTerminal = transfo.getTerminal2();
} else {
regulatingTerminal = getTerminalMapping(rc.getTerminal().getTopologicalNode());
regulationTerminal = getTerminalMapping(rc.getTerminal().getTopologicalNode());
}
ptca.setRegulationMode(PhaseTapChanger.RegulationMode.CURRENT_LIMITER)
.setRegulationValue(rc.getTargetValue())
.setTerminal(regulatingTerminal);
.setRegulating(true)
.setRegulationTerminal(regulationTerminal);
break;

case fixed:
Expand Down Expand Up @@ -607,19 +608,19 @@ private void createRatioTapChanger(cim1.model.RatioTapChanger rtc, Supplier<Rati
regulating = false;
targetV = Float.NaN;
}
Terminal regulatingTerminal = null;
Terminal regulationTerminal = null;
for (Map.Entry<cim1.model.Terminal, Terminal> e : terminals.entrySet()) {
if (rc.getTerminal() == e.getKey()) {
regulatingTerminal = e.getValue();
regulationTerminal = e.getValue();
}
}
if (regulatingTerminal == null) {
regulatingTerminal = getTerminalMapping(rc.getTerminal().getTopologicalNode());
if (regulationTerminal == null) {
regulationTerminal = getTerminalMapping(rc.getTerminal().getTopologicalNode());
}
rtca.setLoadTapChangingCapabilities(true)
.setRegulating(regulating)
.setTargetV(targetV)
.setTerminal(regulatingTerminal);
.setRegulationTerminal(regulationTerminal);
break;

case fixed:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ private void createTransformers(EsgNetwork esgNetwork, EsgGeneralParameters para
PhaseTapChanger ptc = twt.getPhaseTapChanger();
if (rtc != null && ptc == null) {
if (rtc.isRegulating()) {
ConnectionBus regulatingBus = ConnectionBus.fromTerminal(rtc.getTerminal(), config, null);
ConnectionBus regulatingBus = ConnectionBus.fromTerminal(rtc.getRegulationTerminal(), config, null);
if (regulatingBus.getId() != null) {
regulatingMode = EsgDetailedTwoWindingTransformer.RegulatingMode.VOLTAGE;
zbusr = new Esg8charName(dictionary.getEsgId(regulatingBus.getId()));
Expand All @@ -272,8 +272,8 @@ private void createTransformers(EsgNetwork esgNetwork, EsgGeneralParameters para
}

} else if (ptc != null && rtc == null) {
if (ptc.getRegulationMode() == PhaseTapChanger.RegulationMode.CURRENT_LIMITER) {
String regulbus = EchUtil.getBus(ptc.getTerminal(), config).getId();
if (ptc.getRegulationMode() == PhaseTapChanger.RegulationMode.CURRENT_LIMITER && ptc.isRegulating()) {
String regulbus = EchUtil.getBus(ptc.getRegulationTerminal(), config).getId();
if (regulbus.equals(bus1.getId())) {
regulatingMode = EsgDetailedTwoWindingTransformer.RegulatingMode.ACTIVE_FLUX_SIDE_1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1443,7 +1443,8 @@ public void dumpDataAutomatons(SimulatorInst eurostagSim, DDBManager ddbmanager,
) {
dumpDataTransformerAutomaton(t, eurostagSim, "A14_HT", dtaOutStream, iidm2eurostagId);
} else if(t.getPhaseTapChanger() != null
&& t.getPhaseTapChanger().getRegulationMode() != PhaseTapChanger.RegulationMode.OFF) { // TD
&& t.getPhaseTapChanger().getRegulationMode() != PhaseTapChanger.RegulationMode.FIXED_TAP
&& t.getPhaseTapChanger().isRegulating()) { // TD
//TODO
//dumpDataTransformerAutomaton(t, eurostagSim, "A14_TD", dtaOutStream, iidm2eurostagId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,11 @@ public interface PhaseTapChanger extends TapChanger<PhaseTapChanger, PhaseTapCha
enum RegulationMode {
CURRENT_LIMITER,
ACTIVE_POWER_CONTROL,
OFF
FIXED_TAP
}

/**
* Get the regulation mode.
* <p>
* Depends on the working state.
* @return the regulation mode
*/
RegulationMode getRegulationMode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,13 @@ interface StepAdder {

PhaseTapChangerAdder setTapPosition(int tapPosition);

PhaseTapChangerAdder setRegulating(boolean regulating);

PhaseTapChangerAdder setRegulationMode(PhaseTapChanger.RegulationMode regulationMode);

PhaseTapChangerAdder setRegulationValue(float regulationValue);

PhaseTapChangerAdder setTerminal(Terminal terminal);
PhaseTapChangerAdder setRegulationTerminal(Terminal regulationTerminal);

StepAdder beginStep();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,20 +34,4 @@ public interface RatioTapChanger extends TapChanger<RatioTapChanger, RatioTapCha
*/
boolean hasLoadTapChangingCapabilities();

/**
* Get the regulating status.
* <p>
* Depends on the working state.
* @see StateManager
*/
boolean isRegulating();

/**
* Set the regulating status.
* <p>
* Depends on the working state.
* @see StateManager
*/
RatioTapChanger setRegulating(boolean regulating);

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public interface StepAdder {

RatioTapChangerAdder setTargetV(float targetV);

RatioTapChangerAdder setTerminal(Terminal terminal);
RatioTapChangerAdder setRegulationTerminal(Terminal regulationTerminal);

StepAdder beginStep();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,31 @@ public interface TapChanger<TC extends TapChanger<TC, TCS>, TCS extends TapChang
*/
TCS getCurrentStep();

/**
* Get the regulating status.
* <p>
* Depends on the working state.
* @see StateManager
*/
boolean isRegulating();

/**
* Set the regulating status.
* <p>
* Depends on the working state.
* @see StateManager
*/
TC setRegulating(boolean regulating);

/**
* Get the terminal used for regulation.
*/
Terminal getTerminal();
Terminal getRegulationTerminal();

/**
* Set the terminal used for regulation.
*/
void setTerminal(Terminal t);
TC setRegulationTerminal(Terminal regulationTerminal);

/**
* Remove the tap changer.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import eu.itesla_project.iidm.network.PhaseTapChanger;
import eu.itesla_project.iidm.network.PhaseTapChangerAdder;
import eu.itesla_project.iidm.network.RatioTapChangerAdder;
import eu.itesla_project.iidm.network.Terminal;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -27,11 +26,13 @@ class PhaseTapChangerAdderImpl implements PhaseTapChangerAdder {

private final List<PhaseTapChangerStepImpl> steps = new ArrayList<>();

private PhaseTapChanger.RegulationMode regulationMode = PhaseTapChanger.RegulationMode.OFF;
private PhaseTapChanger.RegulationMode regulationMode = PhaseTapChanger.RegulationMode.FIXED_TAP;

private float regulationValue = Float.NaN;

private TerminalExt terminal;
private boolean regulating = false;

private TerminalExt regulationTerminal;

class StepAdderImpl implements StepAdder {

Expand Down Expand Up @@ -143,8 +144,14 @@ public PhaseTapChangerAdder setRegulationValue(float regulationValue) {
}

@Override
public PhaseTapChangerAdder setTerminal(Terminal terminal) {
this.terminal = (TerminalExt) terminal;
public PhaseTapChangerAdder setRegulating(boolean regulating) {
this.regulating = regulating;
return this;
}

@Override
public PhaseTapChangerAdder setRegulationTerminal(Terminal regulationTerminal) {
this.regulationTerminal = (TerminalExt) regulationTerminal;
return this;
}

Expand All @@ -167,9 +174,9 @@ public PhaseTapChanger add() {
+ tapPosition + " [" + lowTapPosition + ", "
+ highTapPosition + "]");
}
ValidationUtil.checkPhaseTapChangerRegulation(transformer, regulationMode, regulationValue, terminal, getNetwork());
ValidationUtil.checkPhaseTapChangerRegulation(transformer, regulationMode, regulationValue, regulating, regulationTerminal, getNetwork());
PhaseTapChangerImpl tapChanger
= new PhaseTapChangerImpl(transformer, lowTapPosition, steps, terminal, tapPosition, regulationMode, regulationValue);
= new PhaseTapChangerImpl(transformer, lowTapPosition, steps, regulationTerminal, tapPosition, regulating, regulationMode, regulationValue);
transformer.setPhaseTapChanger(tapChanger);
return tapChanger;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@
package eu.itesla_project.iidm.network.impl;

import eu.itesla_project.iidm.network.PhaseTapChanger;
import eu.itesla_project.iidm.network.Terminal;
import gnu.trove.list.array.TFloatArrayList;
import gnu.trove.list.array.TIntArrayList;

import java.util.BitSet;
import java.util.List;

/**
Expand All @@ -20,21 +19,20 @@
class PhaseTapChangerImpl extends TapChangerImpl<TwoWindingsTransformerImpl, PhaseTapChangerImpl, PhaseTapChangerStepImpl>
implements PhaseTapChanger {

// attributes depending on the state
private RegulationMode regulationMode;

private final TIntArrayList regulationMode;
// attributes depending on the state

private final TFloatArrayList regulationValue;

PhaseTapChangerImpl(TwoWindingsTransformerImpl parent, int lowTapPosition,
List<PhaseTapChangerStepImpl> steps, TerminalExt terminal,
int tapPosition, RegulationMode regulationMode, float regulationValue) {
super(parent.getNetwork().getRef(), parent, lowTapPosition, steps, terminal, tapPosition);
List<PhaseTapChangerStepImpl> steps, TerminalExt regulationTerminal,
int tapPosition, boolean regulating, RegulationMode regulationMode, float regulationValue) {
super(parent.getNetwork().getRef(), parent, lowTapPosition, steps, regulationTerminal, tapPosition, regulating);
int stateArraySize = network.get().getStateManager().getStateArraySize();
this.regulationMode = new TIntArrayList(stateArraySize);
this.regulationMode = regulationMode;
this.regulationValue = new TFloatArrayList(stateArraySize);
for (int i = 0; i < stateArraySize; i++) {
this.regulationMode.add(regulationMode.ordinal());
this.regulationValue.add(regulationValue);
}
}
Expand All @@ -46,13 +44,13 @@ protected NetworkImpl getNetwork() {

@Override
public RegulationMode getRegulationMode() {
return RegulationMode.values()[regulationMode.get(network.get().getStateIndex())];
return regulationMode;
}

@Override
public PhaseTapChanger setRegulationMode(RegulationMode regulationMode) {
ValidationUtil.checkPhaseTapChangerRegulation(parent, regulationMode, getRegulationValue(), getTerminal(), getNetwork());
this.regulationMode.set(network.get().getStateIndex(), regulationMode.ordinal());
public PhaseTapChangerImpl setRegulationMode(RegulationMode regulationMode) {
ValidationUtil.checkPhaseTapChangerRegulation(parent, regulationMode, getRegulationValue(), isRegulating(), getRegulationTerminal(), getNetwork());
this.regulationMode = regulationMode;
return this;
}

Expand All @@ -62,12 +60,18 @@ public float getRegulationValue() {
}

@Override
public PhaseTapChanger setRegulationValue(float regulationValue) {
ValidationUtil.checkPhaseTapChangerRegulation(parent, getRegulationMode(), regulationValue, getTerminal(), getNetwork());
public PhaseTapChangerImpl setRegulationValue(float regulationValue) {
ValidationUtil.checkPhaseTapChangerRegulation(parent, regulationMode, regulationValue, isRegulating(), getRegulationTerminal(), getNetwork());
this.regulationValue.set(network.get().getStateIndex(), regulationValue);
return this;
}

@Override
public PhaseTapChangerImpl setRegulationTerminal(Terminal regulationTerminal) {
ValidationUtil.checkPhaseTapChangerRegulation(parent, regulationMode, getRegulationValue(), isRegulating(), regulationTerminal, getNetwork());
return super.setRegulationTerminal(regulationTerminal);
}

@Override
public void remove() {
parent.setPhaseTapChanger(null);
Expand All @@ -76,18 +80,15 @@ public void remove() {
@Override
public void extendStateArraySize(int initStateArraySize, int number, int sourceIndex) {
super.extendStateArraySize(initStateArraySize, number, sourceIndex);
regulationMode.ensureCapacity(regulationMode.size() + number);
regulationValue.ensureCapacity(regulationValue.size() + number);
for (int i = 0; i < number; i++) {
regulationMode.add(regulationMode.get(sourceIndex));
regulationValue.add(regulationValue.get(sourceIndex));
}
}

@Override
public void reduceStateArraySize(int number) {
super.reduceStateArraySize(number);
regulationMode.remove(regulationMode.size() - number, number);
regulationValue.remove(regulationValue.size() - number, number);
}

Expand All @@ -101,7 +102,6 @@ public void deleteStateArrayElement(int index) {
public void allocateStateArrayElement(int[] indexes, final int sourceIndex) {
super.allocateStateArrayElement(indexes, sourceIndex);
for (int index : indexes) {
regulationMode.set(index, regulationMode.get(sourceIndex));
regulationValue.set(index, regulationValue.get(sourceIndex));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ class RatioTapChangerAdderImpl implements RatioTapChangerAdder {

private final List<RatioTapChangerStepImpl> steps = new ArrayList<>();

private Boolean loadTapChangingCapabilities;
private boolean loadTapChangingCapabilities = false;

private Boolean regulating;
private boolean regulating = false;

private float targetV = Float.NaN;

private TerminalExt terminal;
private TerminalExt regulationTerminal;

class StepAdderImpl implements StepAdder {

Expand Down Expand Up @@ -139,8 +139,8 @@ public RatioTapChangerAdder setTargetV(float targetV) {
}

@Override
public RatioTapChangerAdder setTerminal(Terminal terminal) {
this.terminal = (TerminalExt) terminal;
public RatioTapChangerAdder setRegulationTerminal(Terminal regulationTerminal) {
this.regulationTerminal = (TerminalExt) regulationTerminal;
return this;
}

Expand All @@ -163,34 +163,10 @@ public RatioTapChanger add() {
+ tapPosition + " [" + lowTapPosition + ", "
+ highTapPosition + "]");
}
if (loadTapChangingCapabilities == null) {
throw new ValidationException(parent, "load tap changing capabilities is not set");
}
if (loadTapChangingCapabilities) {
if (regulating == null) {
throw new ValidationException(parent,
"a regulating status has to be set for a ratio tap changer with load tap changing capabilities");
}
if (regulating) {
if (Float.isNaN(targetV)) {
throw new ValidationException(parent,
"a target voltage has to be set for a regulating ratio tap changer");
}
if (targetV <= 0) {
throw new ValidationException(parent, "bad target voltage " + targetV);
}
if (terminal == null) {
throw new ValidationException(parent,
"a regulation terminal has to be set for a regulating ratio tap changer");
}
}
}
if (terminal != null && terminal.getVoltageLevel().getNetwork() != getNetwork()) {
throw new ValidationException(parent, "regulation terminal is not part of the network");
}
ValidationUtil.checkRatioTapChangerRegulation(parent, loadTapChangingCapabilities, regulating, regulationTerminal, targetV, getNetwork());
RatioTapChangerImpl tapChanger
= new RatioTapChangerImpl(parent, lowTapPosition, steps, terminal, loadTapChangingCapabilities,
tapPosition, regulating != null ? regulating : false, targetV);
= new RatioTapChangerImpl(parent, lowTapPosition, steps, regulationTerminal, loadTapChangingCapabilities,
tapPosition, regulating, targetV);
parent.setRatioTapChanger(tapChanger);
return tapChanger;
}
Expand Down

0 comments on commit a4de076

Please sign in to comment.