/* * @(#)OpfDataSetter.java * * Copyright (C) 2008 www.interpss.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * @Author Mike Zhou * @Version 1.0 * @Date 04/11/2010 * * Revision History * ================ * */ package org.ieee.odm.model.opf; import static org.ieee.odm.ODMObjectFactory.OdmObjFactory; import java.util.List; import org.ieee.odm.model.aclf.AclfDataSetter; import org.ieee.odm.schema.ActivePowerPriceEnumType; import org.ieee.odm.schema.CostAmountXmlType; import org.ieee.odm.schema.CostPriceXmlType; import org.ieee.odm.schema.IncCostXmlType; import org.ieee.odm.schema.LinCoeffXmlType; import org.ieee.odm.schema.MWUnitXmlType; import org.ieee.odm.schema.OPFUnitCostXmlType; import org.ieee.odm.schema.OpfGenBusXmlType; import org.ieee.odm.schema.PieceWiseLinearModelXmlType; import org.ieee.odm.schema.QuadraticModelXmlType; import org.ieee.odm.schema.SqrCoeffXmlType; import org.ieee.odm.schema.StairStepXmlType; /** * OPF ODM model parser data setter functions * * @author mzhou * */ public class OpfDataSetter extends AclfDataSetter { /** * set QuadraticModel data * * @param incCost * @param sq * @param sqUnit * @param ln * @param lnUnit * @param cnst */ public static void setQuadraticModel(IncCostXmlType incCost,double sq, ActivePowerPriceEnumType sqUnit, double ln,ActivePowerPriceEnumType lnUnit, double cnst ){ QuadraticModelXmlType quaModel = OdmObjFactory.createQuadraticModelXmlType(); // set sqr term coeff SqrCoeffXmlType sqr = new SqrCoeffXmlType(); sqr.setValue(sq); sqr.setUnit(sqUnit); quaModel.setSqrCoeff(sqr); //set linear term coeff LinCoeffXmlType lnc = new LinCoeffXmlType(); lnc.setValue(ln); lnc.setUnit(lnUnit); quaModel.setLinCoeff(lnc); // set const term quaModel.setConstCoeff(cnst); incCost.setQuadraticModel(quaModel); } /** * set PWModel data * * @param incCost * @param point */ public static void setPWModel(IncCostXmlType incCost, double[] point){ PieceWiseLinearModelXmlType pwModel = OdmObjFactory.createPieceWiseLinearModelXmlType(); int size = point.length; List<StairStepXmlType> stepList = pwModel.getStairStep(); for(int i =0 ; i<size/2-1; i++){ double p0 = point[2*i]; double f0 = point[2*i+1]; double p1 = point[2*i+2]; double f1 = point[2*i+3]; double price_val = (f1-f0)/(p1-p0); setStep(stepList,price_val,OPFUnitCostXmlType.DOLLAR_PER_M_WH, p0,MWUnitXmlType.MW); setStep(stepList,price_val,OPFUnitCostXmlType.DOLLAR_PER_M_WH, p1,MWUnitXmlType.MW); incCost.setPieceWiseLinearModel(pwModel); } } /** * set Step data * * @param stepList * @param price_val * @param priceUnit * @param amount_val * @param mwUnit */ private static void setStep(List<StairStepXmlType> stepList,double price_val, OPFUnitCostXmlType priceUnit, double amount_val, MWUnitXmlType mwUnit){ StairStepXmlType step = OdmObjFactory.createStairStepXmlType(); CostPriceXmlType cost = new CostPriceXmlType(); cost.setValue(price_val); cost.setUnit(priceUnit); CostAmountXmlType amount = new CostAmountXmlType(); amount.setValue(amount_val); amount.setUnit(mwUnit); step.setAmount(amount); step.setPrice(cost); stepList.add(step); } }