VoltageSourceConverterDcTransmissionLineData.java
/**
* Copyright (c) 2020, RTE (http://www.rte-france.com)
* 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/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.psse.model.pf.io;
import com.powsybl.psse.model.io.*;
import com.powsybl.psse.model.pf.PsseVoltageSourceConverter;
import com.powsybl.psse.model.pf.PsseVoltageSourceConverterDcTransmissionLine;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static com.powsybl.psse.model.PsseVersion.Major.*;
import static com.powsybl.psse.model.pf.io.PowerFlowRecordGroup.INTERNAL_VOLTAGE_SOURCE_CONVERTER_DC_TRANSMISSION_LINE_CONVERTER;
import static com.powsybl.psse.model.pf.io.PowerFlowRecordGroup.VOLTAGE_SOURCE_CONVERTER_DC_TRANSMISSION_LINE;
/**
*
* @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
* @author Jos�� Antonio Marqu��s {@literal <marquesja at aia.es>}
*/
class VoltageSourceConverterDcTransmissionLineData extends AbstractRecordGroup<PsseVoltageSourceConverterDcTransmissionLine> {
private static final String[] FIELD_NAMES_CONVERTER_32_33 = {"ibus", "type", "mode", "dcset", "acset", "aloss", "bloss", "minloss", "smax", "imax", "pwf", "maxq", "minq", "remot", "rmpct"};
VoltageSourceConverterDcTransmissionLineData() {
super(VOLTAGE_SOURCE_CONVERTER_DC_TRANSMISSION_LINE, "name", "mdc", "rdc", "o1", "f1", "o2", "f2", "o3", "f3", "o4", "f4");
withIO(FileFormat.LEGACY_TEXT, new IOLegacyText(this));
withQuotedFields("name");
}
@Override
protected Class<PsseVoltageSourceConverterDcTransmissionLine> psseTypeClass() {
return PsseVoltageSourceConverterDcTransmissionLine.class;
}
private static class IOLegacyText extends RecordGroupIOLegacyText<PsseVoltageSourceConverterDcTransmissionLine> {
IOLegacyText(AbstractRecordGroup<PsseVoltageSourceConverterDcTransmissionLine> recordGroup) {
super(recordGroup);
}
@Override
public List<PsseVoltageSourceConverterDcTransmissionLine> read(LegacyTextReader reader, Context context) throws IOException {
List<String> mainRecords = new ArrayList<>();
List<String> converterRecords = new ArrayList<>();
if (!reader.isQRecordFound()) {
String line = reader.readUntilFindingARecordLineNotEmpty();
while (!reader.endOfBlock(line)) {
mainRecords.add(line);
converterRecords.add(reader.readRecordLine());
converterRecords.add(reader.readRecordLine());
line = reader.readUntilFindingARecordLineNotEmpty();
}
}
List<PsseVoltageSourceConverterDcTransmissionLine> voltageSourceConverterDcList = super.recordGroup.readFromStrings(mainRecords, context);
List<PsseVoltageSourceConverter> convertersList = new PsseVoltageSourceConverterRecordData().readFromStrings(converterRecords, context);
int index = 0;
for (PsseVoltageSourceConverterDcTransmissionLine voltageSourceConverterDc : voltageSourceConverterDcList) {
voltageSourceConverterDc.setConverter1(convertersList.get(index));
index = index + 1;
voltageSourceConverterDc.setConverter2(convertersList.get(index));
index = index + 1;
}
return voltageSourceConverterDcList;
}
@Override
public void write(List<PsseVoltageSourceConverterDcTransmissionLine> voltageSourceConverterDcList, Context context, OutputStream outputStream) {
PsseVoltageSourceConverterRecordData converterRecordData = new PsseVoltageSourceConverterRecordData();
String[] mainHeaders = context.getFieldNames(VOLTAGE_SOURCE_CONVERTER_DC_TRANSMISSION_LINE);
String[] quotedFields = super.recordGroup.quotedFields();
String[] converterHeaders = context.getFieldNames(INTERNAL_VOLTAGE_SOURCE_CONVERTER_DC_TRANSMISSION_LINE_CONVERTER);
List<PsseVoltageSourceConverterDcTransmissionLine> mainList = new ArrayList<>();
List<PsseVoltageSourceConverter> converterList = new ArrayList<>();
voltageSourceConverterDcList.forEach(voltageSourceConverterDc -> {
mainList.add(voltageSourceConverterDc);
converterList.add(voltageSourceConverterDc.getConverter1());
converterList.add(voltageSourceConverterDc.getConverter2());
});
List<String> mainStringList = super.recordGroup.buildRecords(mainList, mainHeaders, quotedFields, context);
List<String> converterStringList = converterRecordData.buildRecords(converterList, converterHeaders, quotedFields, context);
writeBegin(outputStream);
int index = 0;
for (String main : mainStringList) {
String converter1 = converterStringList.get(index);
index = index + 1;
String converter2 = converterStringList.get(index);
index = index + 1;
write(Arrays.asList(main, converter1, converter2), outputStream);
}
writeEnd(outputStream);
}
private static class PsseVoltageSourceConverterRecordData extends AbstractRecordGroup<PsseVoltageSourceConverter> {
PsseVoltageSourceConverterRecordData() {
super(INTERNAL_VOLTAGE_SOURCE_CONVERTER_DC_TRANSMISSION_LINE_CONVERTER);
withFieldNames(V32, FIELD_NAMES_CONVERTER_32_33);
withFieldNames(V33, FIELD_NAMES_CONVERTER_32_33);
withFieldNames(V35, "ibus", "type", "mode", "dcset", "acset", "aloss", "bloss", "minloss", "smax", "imax", "pwf", "maxq", "minq", "vsreg", "nreg", "rmpct");
withQuotedFields();
}
@Override
protected Class<PsseVoltageSourceConverter> psseTypeClass() {
return PsseVoltageSourceConverter.class;
}
}
}
}