Code specification

In this part, we would demonstrate the codes with more detail explanations.

Areas and Interchange

Here is sample codes about mapping areas and interchange data from BPA to ODM;

if(str.trim().startsWith("A")||str.trim().startsWith("AC")){ // read the "A" or "AC" card data;

PSSNetworkXmlType.AreaList.Area area=parser.addNewBaseCaseArea(); // add a new area record under areaList;

final String areaType=strAry[0];

if(!strAry[1].equals("")){

final String modCode=strAry[1];

}

String areaName="";

if(!strAry[2].equals("")){

areaName=strAry[2];

area.setAreaName(areaName); // use Java API to set the area name;

}

String slackBusId;

double ratedVoltage;

if(!strAry[3].equals("")){

slackBusId=strAry[3];

area.addNewSwingBusId().setName(slackBusId); // use Java API to set the slack bus Id;

}

if(!strAry[4].equals("")){

ratedVoltage =new Double(strAry[4]).doubleValue();

area.addNewRatedVoltage().setVoltage(ratedVoltage); // use Java API to set the rated voltage and unit;

area.getRatedVoltage().setUnit(VoltageXmlType.Unit.KV);

}

double exchangeMW=0.0;

if(!strAry[5].equals("")){

ODMData2XmlHelper.setPowerData(area.addNewTotalExchangePower(),

exchangeMW, 0, PowerXmlType.Unit.MVA); // set the interchanged MW between areas;

}

if(!strAry[6].trim().equals("")){ // set zones within each area;

area.addNewZoneList();

int Str6length=strAry[6].length();

final String[] s= new String[20];

int cnt=0, i=0;

while((!strAry[6].substring(i, i+2).equals(""))&& i+2<=Str6length){

s[cnt]=strAry[6].trim().substring(i, i+2);

PSSNetworkXmlType.AreaList.Area.ZoneList.Zone zone= area.getZoneList().addNewZone();

zone.setZoneName(s[cnt]);

if(i+2==Str6length){

break;

}

i=i+3;

cnt=cnt+1;

}

}

}

Bus

final String[] strAry = getBusDataFields(str, adapter); //get the original data in BPA format;

...............

...............

//Name

final String busName = strAry[3];

final String busId = strAry[3];

adapter.getLogger().fine("Bus data loaded, busName: " + busId);

busRec.setId(busId);

busRec.setName(busName); // use Java API to set the bus name

//basekv

double baseKv=100.0;

if(!strAry[4].equals("")){

baseKv= new Double(strAry[4]).doubleValue();

}

ODMData2XmlHelper.setVoltageData(busRec.addNewBaseVoltage(), baseKv, VoltageXmlType.Unit.KV);

// use Java API to set the base Voltage

if(loadMw != 0.0 || loadMvar != 0.0||pGen!=0.0||qGenOrQGenMax!=0.0

||vMinOrAngDeg!=0.0||pGenMax!=0.0){

LoadflowBusDataXmlType busData = busRec.addNewLoadflowBusData();

if (g != 0.0 || b != 0.0) {

ODMData2XmlHelper.setYData(busData.addNewShuntY(), g, b, // use Java API set G B

YXmlType.Unit.MHO);

}

// set load

if (loadMw != 0.0 || loadMvar != 0.0) {

ODMData2XmlHelper.setLoadData(busData,

LoadflowBusDataXmlType.LoadData.Code.CONST_P, loadMw,// use Java API set load

loadMvar, PowerXmlType.Unit.MVA);

}

if(busType==swingBus){ // convert swing bus data;

// set bus voltage

if(vpu!=0.0){

if(vpu>10){

vpu=vpu/1000;

}

ODMData2XmlHelper.setVoltageData(busData.addNewVoltage(), vpu,

VoltageXmlType.Unit.PU);

}

// set bus angle

ODMData2XmlHelper.setAngleData(busData.addNewAngle(), vMinOrAngDeg, // set bus angle

AngleXmlType.Unit.DEG);

//set gen data

if(pGen!=0.0||qGenOrQGenMax!=0.0){

ODMData2XmlHelper.setGenData(busData,

LoadflowBusDataXmlType.GenData.Code.SWING, pGen, 0.0, // use Java API set Generation MW and Mvar

PowerXmlType.Unit.MVA);

}

// set Q limit

if(qGenOrQGenMax!=0.0||qGenMin!=0.0){

ODMData2XmlHelper.setGenQLimitData(busData.getGenData(),

qGenOrQGenMax, qGenMin, GenDataXmlType.QGenLimit.QLimitUnit.MVAR); // use Java API set generator limits

}

// set P limit

if(pGenMax!=0.0){

if(busData.getGenData().getGen()

.getPGenLimit()==null){

busData.getGenData().getGen().addNewPGenLimit();

}

ODMData2XmlHelper.setLimitData(busData.getGenData().getGen()

.getPGenLimit().addNewPLimit(), pGenMax, 0);

}

}else if(busType==pqBus){ // convert pq bus data

if(pGen!=0.0||qGenOrQGenMax!=0.0){

ODMData2XmlHelper.setGenData(busData,

LoadflowBusDataXmlType.GenData.Code.PQ, pGen, qGenOrQGenMax,

PowerXmlType.Unit.MVA);

}

if(vpu!=0 ||vMinOrAngDeg!=0){

if(busData.getGenData()==null){

busData.addNewGenData().addNewGen().addNewVGenLimit();

}else if(busData.getGenData().getGen()==null){

busData.getGenData().addNewGen().addNewVGenLimit();

}else if(busData.getGenData().getGen().getVGenLimit()==null){

busData.getGenData().getGen().addNewVGenLimit();

}

busData.getGenData().getGen().getVGenLimit();

ODMData2XmlHelper.setLimitData(busData.getGenData().getGen().getVGenLimit() // set V limit

.addNewVLimit(), vpu, vMinOrAngDeg);

}

}else if(busType==pvBus){ // convert pv Bus data

// set bus voltage

if(vpu!=0.0){

if(vpu>10){

vpu=vpu/1000;

}

ODMData2XmlHelper.setVoltageData(busData.addNewVoltage(), vpu, // set bus voltage

VoltageXmlType.Unit.PU);

}

// set gen data

if(pGen!=0.0||qGenOrQGenMax!=0.0){

ODMData2XmlHelper.setGenData(busData,

LoadflowBusDataXmlType.GenData.Code.PV, pGen, 0.0,

PowerXmlType.Unit.MVA);

}

if(qGenOrQGenMax!=0.0||qGenMin!=0.0){

ODMData2XmlHelper.setGenQLimitData(busData.getGenData(),

qGenOrQGenMax, qGenMin, GenDataXmlType.QGenLimit.QLimitUnit.MVAR); // set Q limit

}

if(pGenMax!=0.0){

if(busData.getGenData().getGen()

.getPGenLimit()==null){

busData.getGenData().getGen()

.addNewPGenLimit();

}

ODMData2XmlHelper.setLimitData(busData.getGenData().getGen() // set P limit

.getPGenLimit().addNewPLimit(), pGenMax, 0);

}

}

//for BG and BX, controlled bus name and voltage

// desired bus voltage is specified in strAry[14], equals to vpu

final String controlledBus= strAry[16];

double controlledBusRatedVol=0.0;

if(!strAry[17].equals("")){

controlledBusRatedVol= new Double(strAry[17]).doubleValue();

}

if(strAry[0].equals("BG")||strAry[0].equals("BX")){

if(!controlledBus.equals("")){

busData.getGenData().getGen().addNewDesiredRemoteVoltage(); // set remote controled bus data

busData.getGenData().getGen().getDesiredRemoteVoltage().

getRemoteBus().setIdRef(controlledBus);

ODMData2XmlHelper.setVoltageData(busData.getGenData().getGen()

.getDesiredRemoteVoltage().addNewDesiredVoltage(),

vpu, VoltageXmlType.Unit.PU);

}

}

}

Branch

if(str.startsWith("L")){ //processing symetry branch data

final String[] strAry = getBranchDataFields(str,adapter);

// symetry branch

final String branchType=strAry[0];

final String modCode =strAry[1];

final String owner=strAry[2];

final String fid = strAry[3];

final String tid = strAry[6];

adapter.getLogger().fine("Branch data loaded, from-Bus, to-Bus: " + fid + ", " + tid);

if(!fid.equals("")){

branchRec.addNewFromBus().setIdRef(fid); //set "from" bus id

}

if(!tid.equals("")){

branchRec.addNewToBus().setIdRef(tid); // set "to" bus id

}

double fVol=0.0;

double tVol=0.0;

if(!strAry[4].equals("")){

fVol= new Double(strAry[4]).doubleValue(); // set "from" trun base voltage

}

if(!strAry[7].equals("")){

tVol= new Double(strAry[4]).doubleValue(); // set "to" turn base voltage

}

// measure location for power interchange, 1--from side, 2- to side

//set transfer power measured location in tie line data

int measureLocation=0;

if(!strAry[5].equals("")){ // specify the metered location, either at the from turn bus or the end turn bus

measureLocation= new Integer(strAry[5]).intValue();

try{

if(measureLocation==1){

PSSNetworkXmlType.TieLineList.Tieline tieLine=parser.addNewBaseCaseTieline();

// set tieline data

tieLine.addNewMeteredBus().setName(fid);

tieLine.addNewNonMeteredBus().setName(tid);

BusRecordXmlType busRecFrom=ODMData2XmlHelper.getBusRecord(fid, baseCaseNet);

busRecFrom.getZone();

PSSNetworkXmlType.AreaList.Area areaFrom=ODMData2XmlHelper.

getAreaRecordByZone(busRecFrom.getZone(), baseCaseNet);

tieLine.setMeteredArea(areaFrom.getAreaName());

BusRecordXmlType busRecTo=ODMData2XmlHelper.getBusRecord(tid, baseCaseNet);

busRecTo.getZone();

PSSNetworkXmlType.AreaList.Area areaTo=ODMData2XmlHelper.

getAreaRecordByZone(busRecTo.getZone(), baseCaseNet);

tieLine.setNonMeteredArea(areaTo.getAreaName());

// to do: set area number

}else{

PSSNetworkXmlType.TieLineList.Tieline tieLine=parser.addNewBaseCaseTieline();

tieLine.addNewMeteredBus().setName(tid);

tieLine.addNewNonMeteredBus().setName(fid);

ODMData2XmlHelper.getBusRecord(fid, baseCaseNet).getZone();

BusRecordXmlType busRecFrom=ODMData2XmlHelper.getBusRecord(tid, baseCaseNet);

busRecFrom.getZone();

PSSNetworkXmlType.AreaList.Area areaFrom=ODMData2XmlHelper.

getAreaRecordByZone(busRecFrom.getZone(), baseCaseNet);

tieLine.setMeteredArea(areaFrom.getAreaName());

BusRecordXmlType busRecTo=ODMData2XmlHelper.getBusRecord(fid, baseCaseNet);

busRecTo.getZone();

PSSNetworkXmlType.AreaList.Area areaTo=ODMData2XmlHelper.

getAreaRecordByZone(busRecTo.getZone(), baseCaseNet);

tieLine.setNonMeteredArea(areaTo.getAreaName());

}

}catch (final Exception e){

e.printStackTrace();

}

}

// set cirId, if not specified, set to 1

String cirId="";

if(!strAry[8].equals("")){

cirId = strAry[8];

}else{

cirId="1";

}

branchRec.setCircuitId(cirId); // set circuid id

branchRec.addNewLoadflowBranchData();

branchRec.setId(ODMData2XmlHelper.formBranchId(fid, tid, cirId));

branchRec.getLoadflowBranchData().setCode(LoadflowBranchDataXmlType.Code.LINE); // set branch to be a semetry line

String multiSectionId="";

if(!strAry[9].equals("")){

multiSectionId = strAry[9];

//set multiSection data if necessary

}

//if currentRating!=0.0,set rated current

double currentRating=0.0;

if(!strAry[10].equals("")){

currentRating = new Double(strAry[10]).doubleValue(); // set branch current rating limit

ODMData2XmlHelper.setBranchRatingLimitData(branchRec.getLoadflowBranchData(),

currentRating, LoadflowBranchDataXmlType.RatingLimit.CurrentRatingUnit.AMP);

}

double rpu=0.0, xpu=0.0001, halfGpu=0.0, halfBpu=0.0;

if(!strAry[12].equals("")){

rpu = new Double(strAry[12]).doubleValue();

if(rpu>10.0){

rpu=rpu/100000;

}

//rpu=StringUtil.getNumberFormat(rpu);

}

if(!strAry[13].equals("")){

xpu = new Double(strAry[13]).doubleValue();

if(xpu>10.0){

xpu=xpu/100000;

}

//xpu=StringUtil.getNumberFormat(xpu);

}

if(!strAry[14].equals("")){

halfGpu = new Double(strAry[14]).doubleValue();

if(halfGpu>10.0){

halfGpu=halfGpu/100000;

}

}

if(!strAry[15].equals("")){

halfBpu = new Double(strAry[15]).doubleValue();

if(halfBpu>10.0){

halfBpu=halfBpu/100000;

}

}

if(rpu!=0.0||xpu!=0.0||halfGpu!=0.0||halfBpu!=0.0){ // set branch shunt mva

ODMData2XmlHelper.setLineData(branchRec.getLoadflowBranchData(), rpu, xpu,

ZXmlType.Unit.PU, 2*halfGpu, 2*halfBpu, YXmlType.Unit.PU);

}

//branch length

double length=0.0;

if(!strAry[16].equals("")){

branchRec.getLoadflowBranchData().getLineData(). // set branch length

addNewLength().setLength(length);

branchRec.getLoadflowBranchData().getLineData().

getLength().setUnit(LengthXmlType.Unit.MILE);

}

// if there is a description, set

String desc= "";

if(!strAry[17].equals("")){ // set branch description if there is any

desc= strAry[17];

NameValuePairXmlType nvPair = branchRec.getLoadflowBranchData().getLineData().

addNewNvPairList().addNewNvPair();

nvPair.setName("branch description");

nvPair.setValue(desc);

}

}

Transformer:

if(strAry[0].startsWith("T")){ //processing transformer data

dataType=transformer;

}else if(strAry[0].startsWith("TP")){

dataType=phaseShiftXfr;

}

branchRec.addNewLoadflowBranchData();

if(dataType==transformer){

branchRec.getLoadflowBranchData().setCode(LoadflowBranchDataXmlType.Code.TRANSFORMER);

branchRec.getLoadflowBranchData().addNewXformerData(); // add a new transformer data in loadflow data record

}else {

branchRec.getLoadflowBranchData().setCode(LoadflowBranchDataXmlType.Code.PHASE_SHIFT_XFORMER);

branchRec.getLoadflowBranchData().addNewPhaseShiftXfrData();

}

final String modCode =strAry[1];

final String owner=strAry[2];

final String fid = strAry[3];

final String tid = strAry[6];

adapter.getLogger().fine("Branch data loaded, from-bus, to-bus: " + fid + ", " + tid);

branchRec.addNewFromBus().setIdRef(fid); // set from end and to end bus id and base voltage

branchRec.addNewToBus().setIdRef(tid);

final double fVol= new Double(strAry[4]).doubleValue();

final double tVol= new Double(strAry[7]).doubleValue();

// set tieline data, measure location for power interchange, 1--from side, 2- to side

int measureLocation=0;

if(!strAry[5].equals("")){

measureLocation= new Integer(strAry[5]).intValue();

try{

if(measureLocation==1){ // set measured location, either at the from-turn or at the end-turn;

PSSNetworkXmlType.TieLineList.Tieline tieLine=parser.addNewBaseCaseTieline();

tieLine.addNewMeteredBus().setName(fid);

tieLine.addNewNonMeteredBus().setName(tid);

BusRecordXmlType busRecFrom=ODMData2XmlHelper.getBusRecord(fid, baseCaseNet);

PSSNetworkXmlType.AreaList.Area areaFrom=ODMData2XmlHelper.

getAreaRecordByZone(busRecFrom.getZone(), baseCaseNet);

tieLine.setMeteredArea(areaFrom.getAreaName());

BusRecordXmlType busRecTo=ODMData2XmlHelper.getBusRecord(tid, baseCaseNet);

PSSNetworkXmlType.AreaList.Area areaTo=ODMData2XmlHelper.

getAreaRecordByZone(busRecTo.getZone(), baseCaseNet);

tieLine.setNonMeteredArea(areaTo.getAreaName());

}else{

PSSNetworkXmlType.TieLineList.Tieline tieLine=parser.addNewBaseCaseTieline();

tieLine.addNewMeteredBus().setName(tid);

tieLine.addNewNonMeteredBus().setName(fid);

ODMData2XmlHelper.getBusRecord(fid, baseCaseNet).getZone();

BusRecordXmlType busRecFrom=ODMData2XmlHelper.getBusRecord(tid, baseCaseNet);

busRecFrom.getZone();

PSSNetworkXmlType.AreaList.Area areaFrom=ODMData2XmlHelper.

getAreaRecordByZone(busRecFrom.getZone(), baseCaseNet);

tieLine.setMeteredArea(areaFrom.getAreaName());

BusRecordXmlType busRecTo=ODMData2XmlHelper.getBusRecord(fid, baseCaseNet);

busRecTo.getZone();

PSSNetworkXmlType.AreaList.Area areaTo=ODMData2XmlHelper.

getAreaRecordByZone(busRecTo.getZone(), baseCaseNet);

tieLine.setNonMeteredArea(areaTo.getAreaName());

}

}catch (final Exception e) {

e.printStackTrace();

}

}

String cirId="1";

if(!strAry[8].equals("")){

cirId = strAry[8];

}

branchRec.setCircuitId(cirId); // set curcuit identifier

branchRec.setId(ODMData2XmlHelper.formBranchId(fid, tid, cirId));

final String multiSectionId = strAry[9];

//set rated current

double MwRating=0.0;

if(!strAry[11].equals("")){

MwRating = new Integer(strAry[11]).intValue();

}

// set xfr rating data

if(dataType==transformer){

ODMData2XmlHelper.setXfrRatingData(branchRec.getLoadflowBranchData().getXformerData(),

fVol, tVol,VoltageXmlType.Unit.KV, MwRating, PowerXmlType.Unit.MVA);

}else {

ODMData2XmlHelper.setXfrRatingData(branchRec.getLoadflowBranchData().getPhaseShiftXfrData(),

fVol, tVol,VoltageXmlType.Unit.KV, MwRating, PowerXmlType.Unit.MVA);

}

double rpu=0.0, xpu=0.0001, Gpu=0.0, Bpu=0.0;

if(!strAry[12].equals("")){

rpu = new Double(strAry[12]).doubleValue();

if(rpu>10.0){

rpu=rpu/100000;

}

}

if(!strAry[13].equals("")){

xpu = new Double(strAry[13]).doubleValue();

if(xpu>10.0){

xpu=xpu/100000;

}

}

if(!strAry[14].equals("")){

Gpu = new Double(strAry[14]).doubleValue();

if(Gpu>10.0){

Gpu=Gpu/100000;

}

}

if(!strAry[15].equals("")){

Bpu = new Double(strAry[15]).doubleValue();

if(Bpu>10.0){

Bpu=Bpu/100000;

}

}

if(rpu!=0.0||xpu!=0.0){ // set transformer R and X

if(dataType==transformer){

ODMData2XmlHelper.setZValue(branchRec.getLoadflowBranchData().getXformerData().addNewZ(),

rpu, xpu, ZXmlType.Unit.PU);

}else{

ODMData2XmlHelper.setZValue(branchRec.getLoadflowBranchData().getPhaseShiftXfrData().addNewZ(),

rpu, xpu, ZXmlType.Unit.PU);

}

}

if(Gpu!=0.0||Bpu!=0.0){ //set g b, g, b---> from side

if(dataType==transformer){

ODMData2XmlHelper.setYData(branchRec.getLoadflowBranchData().getXformerData().addNewFromShuntY(),

Gpu, Bpu, YXmlType.Unit.PU);

}else{

ODMData2XmlHelper.setYData(branchRec.getLoadflowBranchData().getPhaseShiftXfrData().addNewFromShuntY(),

Gpu, Bpu, YXmlType.Unit.PU);

}

}

double fromTurnRatedVolOrAngDeg=0.0, toTurnRatedVolOrZero=0.0; // tap1 tap2 or angle for phase shift

if(!strAry[16].equals("")){

fromTurnRatedVolOrAngDeg = new Double(strAry[16]).doubleValue();

}

if(!strAry[17].equals("")){

toTurnRatedVolOrZero = new Double(strAry[17]).doubleValue();

}

double fRatio=1.0, tRatio=1.0;

if (dataType==transformer){ // set transformer ratio and phaseshiftxfr angle

//to see what is the input data format, specified or not.

if(fromTurnRatedVolOrAngDeg>=2*fVol){

fromTurnRatedVolOrAngDeg=fromTurnRatedVolOrAngDeg/100;

fRatio=fromTurnRatedVolOrAngDeg/fVol;

}

branchRec.getLoadflowBranchData().getXformerData()

.setFromTurnRatio(fRatio);

if(toTurnRatedVolOrZero>=2*tVol){

toTurnRatedVolOrZero=toTurnRatedVolOrZero/100;

tRatio=toTurnRatedVolOrZero/tVol;

}

branchRec.getLoadflowBranchData().getXformerData()

.setToTurnRatio(tRatio);

}else {

ODMData2XmlHelper.setAngleData(branchRec.getLoadflowBranchData().getPhaseShiftXfrData().

addNewFromAngle(), fromTurnRatedVolOrAngDeg, AngleXmlType.Unit.DEG);

ODMData2XmlHelper.setAngleData(branchRec.getLoadflowBranchData().getPhaseShiftXfrData().

addNewToAngle(), 0, AngleXmlType.Unit.DEG);

}

}

public static void processXfrAdjustData(final String str, // processing transformer adjustment data

final PSSNetworkXmlType baseCaseNet,BPAAdapter adapter){

final String[] strAry = getXfrAdjustDataFields(str,adapter);

int dataType=0;

int angleAdjustment=1;

int tapAdjustment=2;

int adjustType=3;

int tapVoltageAdjustment=4;

int tapVarAdjustment=5;

int pAngleAdjustment=6;

int mAngleAdjustment=7;

if(strAry[0].equals("RP")||strAry[0].equals("RM")){

dataType=angleAdjustment;

if(strAry[0].equals("RP")){

adjustType=pAngleAdjustment;

}else{

adjustType=mAngleAdjustment;

}

}else{

dataType=tapAdjustment;

if(strAry[0].equals("R")||strAry[0].equals("RV")){

adjustType=tapVoltageAdjustment;

}else {

adjustType=tapVarAdjustment;

}

}

//adjustType: R or RV---remote bus control

final String modCode = strAry[1];

final String owner = strAry[2];

final String fromBus =strAry[3];

final double fromTurnRatedV = new Double(strAry[4]).doubleValue();

final String toBus = strAry[6];

final double toTurnRatedV = new Double(strAry[7]).doubleValue();

BranchRecordXmlType branchRec= ODMData2XmlHelper.getXfrBranchRecord(fromBus,

toBus, baseCaseNet);

String controlBusId = "";

final String adjBus =strAry[8];

final String adjVol =strAry[9];

// set tapAdjSide

int tapAdjSide = 0;

if(!strAry[5].equals("")){

tapAdjSide=new Integer(strAry[5]).intValue();

}

double stepSize=0.0,maxVoltPQ = 0.0, minVoltPQ = 0.0, totalTap=0.0;

double max=0.0, min=0.0;

// Minimum MVAR or MW limit [F]

// Maximum MVAR or MW limit [F]

if(!strAry[10].equals("")){

max = new Double(strAry[10]).doubleValue();

}

if(!strAry[11].equals("")){

min = new Double(strAry[11]).doubleValue();

}

if(!strAry[12].equals("")){

totalTap = new Double(strAry[12]).doubleValue();

}

if(!strAry[13].equals("")){

maxVoltPQ = new Double(strAry[13]).doubleValue();

}

if(!strAry[14].equals("")){

minVoltPQ = new Double(strAry[14]).doubleValue();

}

// calculate stepsize

if (totalTap!=0.0){

stepSize =(max-min)/totalTap;

}

// scheduled Q for RQ

double scheduleQ=0.0;

if(!strAry[13].equals("")){

scheduleQ = new Double(strAry[13]).doubleValue();

}

if(dataType==tapAdjustment){

TransformerDataXmlType.TapAdjustment tapAdj = branchRec.getLoadflowBranchData().

getXformerData().addNewTapAdjustment();

if(tapAdjSide==1){

tapAdj.setTapAdjOnFromSide(true);

if(max>=2*fromTurnRatedV){

max=max/100;

}

max=max/fromTurnRatedV;

if(min>=2*fromTurnRatedV){

min=min/100;

}

min=min/fromTurnRatedV;

}else{

tapAdj.setTapAdjOnFromSide(false);

if(max>=2*toTurnRatedV){

max=max/100;

}

max=max/toTurnRatedV;

if(min>=2*toTurnRatedV){

min=min/100;

}

min=min/toTurnRatedV;

}

// save result to two digits after .

NumberFormat ddf1=NumberFormat.getNumberInstance() ;

ddf1.setMaximumFractionDigits(2);

max= new Double(ddf1.format(max)).doubleValue() ;

min= new Double(ddf1.format(min)).doubleValue() ;

if(tapAdjSide==2){

tapAdj.setTapAdjOnFromSide(false);

controlBusId=toBus;

}else{

tapAdj.setTapAdjOnFromSide(true);

controlBusId=fromBus;

}

ODMData2XmlHelper.setLimitData(tapAdj.addNewTapLimit(), max,

min);

tapAdj.setTapAdjStepSize(stepSize);

if (adjustType==tapVoltageAdjustment ){ // voltage control

TransformerDataXmlType.TapAdjustment.VoltageAdjData voltTapAdj = tapAdj

.addNewVoltageAdjData();

voltTapAdj.addNewAdjVoltageBus().setIdRef(controlBusId);

voltTapAdj

.setAdjBusLocation((adjBus == toBus ? TransformerDataXmlType.TapAdjustment.VoltageAdjData.AdjBusLocation.NEAR_TO_BUS

: TransformerDataXmlType.TapAdjustment.VoltageAdjData.AdjBusLocation.NEAR_FROM_BUS));

voltTapAdj.setMode(AdjustmentDataXmlType.Mode.RANGE_ADJUSTMENT);

if(maxVoltPQ!=0.0||minVoltPQ!=0.0){

ODMData2XmlHelper.setLimitData(voltTapAdj.addNewDesiredRange(),

maxVoltPQ, minVoltPQ);

}

} else if (adjustType==tapVarAdjustment) { // var control

TransformerDataXmlType.TapAdjustment.MvarFlowAdjData mvarTapAdj = tapAdj

.addNewMvarFlowAdjData();

ODMData2XmlHelper.setLimitData(mvarTapAdj.addNewDesiredRange(),

maxVoltPQ, minVoltPQ);

mvarTapAdj.setMode(AdjustmentDataXmlType.Mode.RANGE_ADJUSTMENT);

mvarTapAdj.setMvarMeasuredOnFormSide(true);

}

} else if(dataType==angleAdjustment){ // angle adjustment

PhaseShiftXfrDataXmlType.AngleAdjustment angAdj = branchRec.getLoadflowBranchData().

getPhaseShiftXfrData().addNewAngleAdjustment();

ODMData2XmlHelper.setLimitData(angAdj.addNewAngleDegLimit(), max,

min);

ODMData2XmlHelper.setLimitData(angAdj.addNewDesiredRange(), maxVoltPQ,

minVoltPQ);

angAdj.setMode(AdjustmentDataXmlType.Mode.RANGE_ADJUSTMENT);

angAdj.setDesiredMeasuredOnFromSide(true);

}

}