You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.4 KiB
154 lines
5.4 KiB
function [bus,pv,pq,sw,line,shunt,ind,zip,syn,exc,tg,agc,cac,cluster,pm,oldToNew,newToOld]=regulateSystemData(bus,pv,pq,sw,line,shunt,ind,zip,syn,exc,tg,agc,cac,cluster)
|
|
% Regulate input data, including checking integrity of input data, align base power, renumbering bus
|
|
%
|
|
% FUNCTION regulateSystemData
|
|
%
|
|
% Author: Rui Yao <ruiyao@ieee.org>
|
|
%
|
|
% Copyright (C) 2021, UChicago Argonne, LLC. All rights reserved.
|
|
%
|
|
% OPEN SOURCE LICENSE
|
|
%
|
|
% Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
%
|
|
% 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
% 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
% 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
%
|
|
%
|
|
% ******************************************************************************************************
|
|
% DISCLAIMER
|
|
%
|
|
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
|
% WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
% PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
|
% DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
% PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
% OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
% ***************************************************************************************************
|
|
%
|
|
% INPUT (will be consolidated in a future version)
|
|
%
|
|
% OUTPUT (will be consolidated in a future version)
|
|
%
|
|
|
|
if nargin<9; syn=[];end
|
|
if nargin<10; exc=[];end
|
|
if nargin<11; tg=[]; end
|
|
if nargin<12; agc=[];end
|
|
if nargin<13; cac=[];end
|
|
if nargin<14; cluster=[];end
|
|
|
|
nbus=size(bus,1);
|
|
|
|
newToOld=bus(:,1);
|
|
oldToNew=zeros(max(newToOld),1);
|
|
oldToNew(newToOld)=1:nbus;
|
|
bus(:,1)=oldToNew(bus(:,1));
|
|
pv(:,1)=oldToNew(pv(:,1));
|
|
pq(:,1)=oldToNew(pq(:,1));
|
|
sw(:,1)=oldToNew(sw(:,1));
|
|
line(:,1:2)=oldToNew(line(:,1:2));
|
|
shunt(:,1)=oldToNew(shunt(:,1));
|
|
ind(:,1)=oldToNew(ind(:,1));
|
|
zip(:,1)=oldToNew(zip(:,1));
|
|
syn(:,1)=oldToNew(syn(:,1));
|
|
|
|
pv=pv(pv(:,end)==1,:);
|
|
pq=pq(pq(:,end)==1,:);
|
|
line=line(line(:,end)==1,:);
|
|
shunt=shunt(shunt(:,end)==1,:);
|
|
ind=ind(ind(:,end)==1,:);
|
|
zip=zip(zip(:,end)==1,:);
|
|
% syn=syn(syn(:,end)==1,:);
|
|
% exc=exc(exc(:,end)==1,:);
|
|
% tg=tg(tg(:,end)==1,:);
|
|
|
|
busShunt=zeros(nbus,2);
|
|
busPQ=zeros(nbus,2);
|
|
if isempty(sw)&&~isempty(pv)
|
|
sw=zeros(1,13);
|
|
sw(1,1:3)=pv(1,1:3);
|
|
sw(1,4)=pv(1,5);
|
|
sw(1,6:end)=[9.9 -9.9 1.2 0.8 2.324 1 1 1];
|
|
pv=pv(2:end,:);
|
|
end
|
|
|
|
pvw=zeros(nbus,size(pv,2));
|
|
if ~isempty(pv)
|
|
for idx=2:size(pv,2)
|
|
pvw(:,idx)=accumarray(pv(:,1),pv(:,idx).*pv(:,end),[nbus,1]);
|
|
end
|
|
npv=accumarray(pv(:,1),ones(size(pv(:,1))),[nbus,1]);
|
|
pvw(:,1)=1:nbus;
|
|
pvw=pvw(npv>0,:);
|
|
npv=npv(npv>0);
|
|
pvw(:,[2,3,5,8,9,10,11])=pvw(:,[2,3,5,8,9,10,11])./repmat(npv,1,7);
|
|
pvw=pvw(pvw(:,end)>0,:);
|
|
pvw(:,end)=1;
|
|
pv=pvw;
|
|
end
|
|
|
|
if ~isempty(pq)
|
|
busPQ(:,1)=busPQ(:,1)+accumarray(pq(:,1),pq(:,4).*pq(:,9),[nbus,1]);
|
|
busPQ(:,2)=busPQ(:,2)+accumarray(pq(:,1),pq(:,5).*pq(:,9),[nbus,1]);
|
|
end
|
|
if ~isempty(shunt)
|
|
busShunt(:,1)=accumarray(shunt(:,1),shunt(:,5).*shunt(:,7),[nbus,1]);
|
|
busShunt(:,2)=accumarray(shunt(:,1),shunt(:,6).*shunt(:,7),[nbus,1]);
|
|
end
|
|
if ~isempty(zip)
|
|
busShunt(:,1)=busShunt(:,1)+accumarray(zip(:,1),zip(:,5).*zip(:,12),[nbus,1]);
|
|
busShunt(:,2)=busShunt(:,2)+accumarray(zip(:,1),zip(:,8).*zip(:,12),[nbus,1]);
|
|
busPQ(:,1)=busPQ(:,1)+accumarray(zip(:,1),zip(:,7).*zip(:,12),[nbus,1]);
|
|
busPQ(:,2)=busPQ(:,2)+accumarray(zip(:,1),zip(:,10).*zip(:,12),[nbus,1]);
|
|
end
|
|
|
|
pq(:,4:5)=0;
|
|
shunt(:,5:6)=0;
|
|
zipBus=zeros(nbus,12);
|
|
zipBus(:,1)=1:nbus;
|
|
zipBus(:,2)=100;
|
|
zipBus(:,3)=bus(:,2);
|
|
zipBus(:,4)=60;
|
|
zipBus(:,[5,8])=busShunt;
|
|
zipBus(:,[7,10])=busPQ;
|
|
zipBus(:,12)=1;
|
|
|
|
if ~isempty(zip)
|
|
zipBus(zip(:,1),[6,9])=zip(:,[6,9]);
|
|
end
|
|
|
|
zip=zipBus(sum(zipBus(:,5:10),2)~=0,:);
|
|
|
|
if ~isempty(syn)
|
|
pg=zeros(nbus,1);
|
|
if ~isempty(pv)
|
|
pg(pv(:,1))=pv(:,4);
|
|
end
|
|
% if ~isempty(sw)
|
|
% pg(sw(:,1))=sw(:,10);
|
|
% end
|
|
pm=pg(syn(:,1));
|
|
nm=accumarray(syn(:,1),ones(size(syn,1),1),[nbus,1]);
|
|
pm=pm./nm(syn(:,1));
|
|
pg=pg-accumarray(syn(:,1),pm,[nbus,1]);
|
|
if ~isempty(pv)
|
|
pv(:,4)=pg(pv(:,1));
|
|
end
|
|
else
|
|
pm=[];
|
|
end
|
|
|
|
|
|
% Regulate non-standard data
|
|
% Non-standard base power
|
|
sBase=100;
|
|
sw(:,6:7)=sw(:,6:7).*repmat(sw(:,2)/sBase,1,2);sw(:,2)=sBase;
|
|
pv(:,[4,6,7])=pv(:,[4,6,7]).*repmat(pv(:,2)/sBase,1,3);pv(:,2)=sBase;
|
|
pq(:,[4,5])=pq(:,[4,5]).*repmat(pq(:,2)/sBase,1,2);pq(:,2)=sBase;
|
|
shunt(:,[5,6])=shunt(:,[5,6]).*repmat(shunt(:,2)/sBase,1,2);shunt(:,2)=sBase;
|
|
|
|
|
|
end |