@Override public void visitGenerator(Generator generator) { terminals.add(generator.getTerminal()); }
private double newP(Generator generator, double deltaP, double participationFactor, double totalPartecipationFactor) { return generator.getTerminal().getP() - deltaP * participationFactor / totalPartecipationFactor; }
@Override public double initialValue(Network n) { Objects.requireNonNull(n); Generator g = n.getGenerator(id); return g != null && !Double.isNaN(g.getTerminal().getP()) ? g.getTerminal().getP() : 0; }
public static boolean isConnected(Generator generator) { Bus generatorBus = generator.getTerminal().getBusBreakerView().getBus(); double voltage = getV(generator.getTerminal()); if (generatorBus != null && !Double.isNaN(voltage)) { // generator is connected return true; } return false; }
private boolean filteredGenerator(Generator g, boolean isFiltered) { if (isFiltered) { if (!Double.isNaN(g.getTerminal().getP()) && ((-g.getTerminal().getP() > g.getMaxP()) || (-g.getTerminal().getP() < g.getMinP()))) { return true; } } return false; }
private boolean filteredGenerator(Generator g) { if (configExport.getGensPQfilter()) { if (!Double.isNaN(g.getTerminal().getP()) && ((-g.getTerminal().getP() > g.getMaxP()) || (-g.getTerminal().getP() < g.getMinP()))) { return true; } } return false; }
public static void printGeneratorsSetpointDiff(Network network, Logger logger) { for (Generator g : network.getGenerators()) { double dp = Math.abs(g.getTerminal().getP() + g.getTargetP()); double dq = Math.abs(g.getTerminal().getQ() + g.getTargetQ()); double dv = Math.abs(g.getTerminal().getBusBreakerView().getConnectableBus().getV() - g.getTargetV()); if (dp > 1 || dq > 5 || dv > 0.1) { logger.warn("Generator {}: ({}, {}, {}) ({}, {}, {}) -> ({}, {}, {})", g.getId(), dp, dq, dv, -g.getTargetP(), -g.getTargetQ(), g.getTargetV(), g.getTerminal().getP(), g.getTerminal().getQ(), g.getTerminal().getBusBreakerView().getConnectableBus().getV()); } } }
@Override public void modify(Network network, ComputationManager computationManager) { Generator g = network.getGenerator(generatorId); if (g == null) { throw new PowsyblException("Generator '" + generatorId + "' not found"); } g.getTerminal().connect(); }
/** * @param writerMo * @param modContext * @param modelicaModelsList * @param modelicaSim * @param sourceSim * @throws IOException */ private void exportGeneratorsAsFixedInjections(Writer writerMo, ModExportContext modContext, List<String> modelicaModelsList, SimulatorInst modelicaSim, SimulatorInst sourceSim) throws IOException { // Export Generators as Fixed Inyections if ((generatorsInyections.size() != 0) && (!generatorsInyections.isEmpty())) { LOGGER.info("EXPORTING GENERATORS AS FIXED INYECTIONS"); for (Generator generator : generatorsInyections) { LOGGER.info("\t Exporting generator inyection " + generator.getId()); ConnectBusInfo busInfo = findBus(generator.getTerminal(), generator.getId()); GeneratorRecord generatorRecord = ModelConverter.getModelicaRecord(generator, busInfo, modContext, _ddbManager, modelicaSim, sourceSim, true, SNREF, this.paramsDictionary, this._sourceEngine); this.addRecord(generatorRecord, writerMo, modContext, _ddbManager, modelicaSim); } } }
private static void connectGenerator(Generator g) { Terminal t = g.getTerminal(); t.connect(); if (g.isVoltageRegulatorOn()) { Bus bus = t.getBusView().getBus(); if (bus != null) { // set voltage setpoint to the same as other generators connected to the bus double targetV = bus.getGeneratorStream().findFirst().map(Generator::getTargetV).orElse(Double.NaN); // if no other generator connected to the bus, set voltage setpoint to network voltage if (Double.isNaN(targetV) && !Double.isNaN(bus.getV())) { g.setTargetV(bus.getV()); } } } LOGGER.info("Connecting {}", g.getId()); } }
private static void extractGeneratorsData(Network network, NetworkData networkData) { for (Generator generator : network.getGenerators()) { networkData.addGeneratorData(new GeneratorData(generator.getId(), (generator.getTerminal().getBusBreakerView().getBus() != null) ? generator.getTerminal().getBusBreakerView().getBus().getId() : generator.getTerminal().getBusBreakerView().getConnectableBus().getId(), generator.getTerminal().getBusBreakerView().getBus() != null, apparentPower(generator.getTerminal()), generator.getTerminal().getP(), generator.getTerminal().getQ(), generator.getRatedS(), generator.getReactiveLimits().getMaxQ(generator.getTargetP()), generator.getReactiveLimits().getMinQ(generator.getTargetP())) // generator.getReactiveLimits().getMaxQ(generator.getTerminal().getP()), // generator.getReactiveLimits().getMinQ(generator.getTerminal().getP())) ); } }
public static boolean isRedispatchable(Generator generator, float redispatchLimitsPercentage) { return (generator.getTerminal().getBusBreakerView().getBus() != null) // is connected && (generator.getEnergySource() == EnergySource.HYDRO || generator.getEnergySource() == EnergySource.THERMAL) // is hydro or thermal && (generator.getTerminal().getP() < 0) // inject power && (generator.isVoltageRegulatorOn()) // has voltage regulator on && (generator.getTargetP() <= getRedispatchPMax(generator, redispatchLimitsPercentage) && generator.getTargetP() >= getRedispatchPMin(generator, redispatchLimitsPercentage)); // target P is within redispatch limits //&& (generator.getTargetP() <= generator.getMaxP() && generator.getTargetP() >= generator.getMinP()) // target P is within limits }
public AmplNetworkReader readGenerators() throws IOException { // Bug fix, to avoid generators out of main cc to have a different target voltage while connected to same bus (Eurostag check) // In that case it will not be part of result file, so not overwritten. So first reset all target voltages to nominal voltage for (Generator g : network.getGenerators()) { g.setTargetV(g.getTerminal().getVoltageLevel().getNominalV()); } read("_generators", 9, this::readGenerator); return this; }
@Override public double scale(Network n, double asked) { Objects.requireNonNull(n); Generator g = n.getGenerator(id); double done = 0; if (g != null) { Terminal t = g.getTerminal(); if (!t.isConnected()) { connectGenerator(g); } done = Math.min(asked, g.getMaxP() - g.getTargetP()); double oldTargetP = g.getTargetP(); g.setTargetP(g.getTargetP() + done); LOGGER.info("Change active power setpoint of {} from {} to {} (pmax={})", g.getId(), oldTargetP, g.getTargetP(), g.getMaxP()); } else { LOGGER.warn("Generator {} not found", id); } return done; }
@Override protected void writeSubElements(Generator g, VoltageLevel vl, NetworkXmlWriterContext context) throws XMLStreamException { if (g.getRegulatingTerminal() != null && !Objects.equals(g.getRegulatingTerminal().getBusBreakerView().getConnectableBus(), g.getTerminal().getBusBreakerView().getConnectableBus())) { writeTerminalRef(g.getRegulatingTerminal(), context, "regulatingTerminal"); } ReactiveLimitsXml.INSTANCE.write(g, context); }
@Override protected void readSubElements(Generator g, NetworkXmlReaderContext context) throws XMLStreamException { readUntilEndRootElement(context.getReader(), () -> { switch (context.getReader().getLocalName()) { case "regulatingTerminal": String id = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "id")); String side = context.getReader().getAttributeValue(null, "side"); context.getEndTasks().add(() -> g.setRegulatingTerminal(readTerminalRef(g.getTerminal().getVoltageLevel().getSubstation().getNetwork(), id, side))); break; case "reactiveCapabilityCurve": case "minMaxReactiveLimits": ReactiveLimitsXml.INSTANCE.read(g, context); break; default: super.readSubElements(g, context); } }); } }
@Override protected void writeRootElementAttributes(Generator g, VoltageLevel vl, NetworkXmlWriterContext context) throws XMLStreamException { context.getWriter().writeAttribute("energySource", g.getEnergySource().name()); XmlUtil.writeDouble("minP", g.getMinP(), context.getWriter()); XmlUtil.writeDouble("maxP", g.getMaxP(), context.getWriter()); XmlUtil.writeDouble("ratedS", g.getRatedS(), context.getWriter()); context.getWriter().writeAttribute("voltageRegulatorOn", Boolean.toString(g.isVoltageRegulatorOn())); XmlUtil.writeDouble("targetP", g.getTargetP(), context.getWriter()); XmlUtil.writeDouble("targetV", g.getTargetV(), context.getWriter()); XmlUtil.writeDouble("targetQ", g.getTargetQ(), context.getWriter()); writeNodeOrBus(null, g.getTerminal(), context); writePQ(null, g.getTerminal(), context.getWriter()); }
private static void addGenerators(Network network, ConnectedPower balanceMainCC, ConnectedPower balanceOtherCC) { for (Generator g : network.getGenerators()) { Terminal.BusBreakerView view = g.getTerminal().getBusBreakerView(); if (view.getBus() != null) { if (view.getBus().isInMainConnectedComponent()) { balanceMainCC.connectedMaxGeneration += g.getMaxP(); balanceMainCC.connectedGeneration += g.getTargetP(); balanceMainCC.connectedGenerators.add(g.getId()); } else { balanceOtherCC.connectedMaxGeneration += g.getMaxP(); balanceOtherCC.connectedGeneration += g.getTargetP(); balanceOtherCC.connectedGenerators.add(g.getId()); } } else { if (view.getConnectableBus().isInMainConnectedComponent()) { balanceMainCC.disconnectedMaxGeneration += g.getMaxP(); balanceMainCC.disconnectedGeneration += g.getTargetP(); balanceMainCC.disconnectedGenerators.add(g.getId()); } else { balanceOtherCC.disconnectedMaxGeneration += g.getMaxP(); balanceOtherCC.disconnectedGeneration += g.getTargetP(); balanceOtherCC.disconnectedGenerators.add(g.getId()); } } } }
private Void readGenerator(String[] tokens) { int num = Integer.parseInt(tokens[1]); int busNum = Integer.parseInt(tokens[2]); boolean vregul = Boolean.parseBoolean(tokens[3]); double targetV = readDouble(tokens[4]); double targetP = readDouble(tokens[5]); double targetQ = readDouble(tokens[6]); double p = readDouble(tokens[7]); double q = readDouble(tokens[8]); String id = mapper.getId(AmplSubset.GENERATOR, num); Generator g = network.getGenerator(id); if (g == null) { throw new AmplException("Invalid generator id '" + id + "'"); } g.setVoltageRegulatorOn(vregul); g.setTargetP(targetP); g.setTargetQ(targetQ); Terminal t = g.getTerminal(); t.setP(p).setQ(q); double vb = t.getVoltageLevel().getNominalV(); g.setTargetV(targetV * vb); busConnection(t, busNum); return null; }
@Override protected Generator readRootElementAttributes(GeneratorAdder adder, NetworkXmlReaderContext context) { EnergySource energySource = EnergySource.valueOf(context.getReader().getAttributeValue(null, "energySource")); double minP = XmlUtil.readDoubleAttribute(context.getReader(), "minP"); double maxP = XmlUtil.readDoubleAttribute(context.getReader(), "maxP"); double ratedS = XmlUtil.readOptionalDoubleAttribute(context.getReader(), "ratedS"); boolean voltageRegulatorOn = XmlUtil.readBoolAttribute(context.getReader(), "voltageRegulatorOn"); double targetP = XmlUtil.readDoubleAttribute(context.getReader(), "targetP"); double targetV = XmlUtil.readOptionalDoubleAttribute(context.getReader(), "targetV"); double targetQ = XmlUtil.readOptionalDoubleAttribute(context.getReader(), "targetQ"); readNodeOrBus(adder, context); Generator g = adder.setEnergySource(energySource) .setMinP(minP) .setMaxP(maxP) .setRatedS(ratedS) .setVoltageRegulatorOn(voltageRegulatorOn) .setTargetP(targetP) .setTargetV(targetV) .setTargetQ(targetQ) .add(); readPQ(null, g.getTerminal(), context.getReader()); return g; }