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.
782 lines
35 KiB
782 lines
35 KiB
function [V,W,Q,s,d,JG,KG]=hemMachinePFSalientcontinueSep(SimData,SysData,SysPara,x,pShare,Vsp)
|
|
% HE computation of power flow (extended including synchronous generators)
|
|
%
|
|
% FUNCTION hemMachinePFSalientcontinueSep
|
|
%
|
|
% 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)
|
|
%
|
|
|
|
global IS_OCTAVE;
|
|
|
|
[bus,sw,pv,pq,shunt,line,ind,zip,syn,exc,tg,agc,cac,cluster]=unfoldSysData(SysData);
|
|
[V0,Q0,s0,d0,w,eq1,eq2,ed1,ed2,psid,psiq,Pm0,Ef0,Vavrm,Vavrr,Vavrf,Vavrref,tgovg,tgovm,tgovmech,f,dpg,qplt,vg]=unfoldX(x,SysData);
|
|
[pqIncr,pvIncr,Rind0,Rind1,Reind0,Reind1,Rzip0,Rzip1,Ytr,~,Ysh0,Ysh1,VspSq2,~,~,~,~,Tmech1,Varref1,Ef1,Pm1,Eq11]=unfoldSysPara(SysPara);
|
|
[maxAlpha,segAlpha,dAlpha,nlvl,taylorN,alphaTol,diffTol,diffTolMax,method]=unfoldSimData(SimData);
|
|
|
|
nbus=size(bus,1);
|
|
nline=size(line,1);
|
|
if isfield(SysPara,'nIslands')&&isfield(SysPara,'islands')&&isfield(SysPara,'refs')
|
|
nIslands=SysPara.nIslands;islands=SysPara.islands;refs=SysPara.refs;
|
|
else
|
|
[nIslands,islands,refs]=searchIslands(bus(:,1),line(:,1:2));
|
|
end
|
|
|
|
Pls=zeros(nbus,1);Pls(pq(:,1))=pqIncr(:,1);if ~isempty(pv);Pls(pv(:,1))=Pls(pv(:,1))-pvIncr;end
|
|
Qls=zeros(nbus,1);Qls(pq(:,1))=pqIncr(:,2);
|
|
|
|
[Y,Ytr,Ysh,ytrfr,ytrto,yshfr,yshto]=getYMatrix(nbus,line);
|
|
|
|
busType=zeros(nbus,1);
|
|
if isempty(pv)
|
|
pv=zeros(0,6);
|
|
end
|
|
if isempty(pq)
|
|
pq=zeros(0,6);
|
|
end
|
|
if isempty(shunt)
|
|
shunt=zeros(0,7);
|
|
end
|
|
if isempty(sw)
|
|
sw=zeros(0,13);
|
|
end
|
|
busType(pv(:,1))=1;
|
|
busType(sw(:,1))=2;
|
|
|
|
isw=find(busType==2);
|
|
ipv=find(busType==1);
|
|
ipq=find(busType==0);
|
|
busTypePvPq=busType(busType~=2);
|
|
ipvInPvPq=find(busTypePvPq==1);
|
|
npq=size(ipq,1);
|
|
npv=size(ipv,1);
|
|
|
|
% yShunt=zeros(nbus,1);
|
|
% yShunt(shunt(:,1))=shunt(:,5)+1j*shunt(:,6);
|
|
% if ~isempty(zip)%zipMode=0
|
|
% yShunt=yShunt+accumarray(zip(:,1),(zip(:,5)+1j*zip(:,8)).*zip(:,12),[nbus,1]);
|
|
% end
|
|
% Ysh=Ysh+yShunt;
|
|
% Y=Y+sparse(1:nbus,1:nbus,yShunt,nbus,nbus);
|
|
|
|
if ~isempty(zip)%zipMode=0
|
|
Ysh0=Ysh0+accumarray(zip(:,1),Rzip0.*(zip(:,5)+1j*zip(:,8)).*zip(:,12),[nbus,1]);
|
|
Ysh1=Ysh1+accumarray(zip(:,1),Rzip1.*(zip(:,5)+1j*zip(:,8)).*zip(:,12),[nbus,1]);
|
|
end
|
|
Y=Ytr+sparse(1:nbus,1:nbus,Ysh0,nbus,nbus);
|
|
|
|
pVec=zeros(nbus,1);
|
|
qVec=zeros(nbus,1);
|
|
% vSp=zeros(nbus,1);
|
|
|
|
pVec(pv(:,1))=pVec(pv(:,1))+pv(:,4);
|
|
pVec(pq(:,1))=pVec(pq(:,1))-pq(:,4);
|
|
qVec(pq(:,1))=qVec(pq(:,1))-pq(:,5);
|
|
if ~isempty(zip)%zipMode=0, account for the PQ components in ZIP loads
|
|
pVec=pVec-accumarray(zip(:,1),Rzip0.*zip(:,7).*zip(:,12),[nbus,1]);
|
|
qVec=qVec-accumarray(zip(:,1),Rzip0.*zip(:,10).*zip(:,12),[nbus,1]);
|
|
end
|
|
% qVec(ipv)=Q0(ipv);
|
|
% vSp(ipv)=pv(:,5);
|
|
|
|
V=zeros(nbus,nlvl+1);
|
|
V(:,1)=V0;
|
|
V(isw,2)=Vsp(isw);
|
|
W=zeros(nbus,nlvl+1);
|
|
W(:,1)=1./V0;
|
|
P=zeros(nbus,nlvl+1);
|
|
P(:,1)=pVec;
|
|
% P(isw,2:end)=0;
|
|
Q=zeros(nbus,nlvl+1);
|
|
Qxtra=zeros(size(Q));
|
|
Q(:,1)=Q0;
|
|
Qxtra(:,1)=qVec;
|
|
P(:,2:(size(Pls,2)+1))=-Pls;
|
|
Qxtra(:,2:(size(Qls,2)+1))=-Qls;
|
|
if ~isempty(zip)
|
|
P(:,2)=P(:,2)-accumarray(zip(:,1),Rzip1.*zip(:,7).*zip(:,12),[nbus,1]);
|
|
Qxtra(:,2)=Qxtra(:,2)-accumarray(zip(:,1),Rzip1.*zip(:,10).*zip(:,12),[nbus,1]);
|
|
end
|
|
|
|
C0=real(V(:,1));
|
|
D0=imag(V(:,1));
|
|
E0=real(W(:,1));
|
|
F0=imag(W(:,1));
|
|
Pspec=P(:,1);
|
|
Qspec=Q(:,1)+Qxtra(:,1);
|
|
V0sq=C0.*C0+D0.*D0;
|
|
|
|
C0M=sparse(1:nbus,1:nbus,C0,nbus,nbus);
|
|
D0M=sparse(1:nbus,1:nbus,D0,nbus,nbus);
|
|
E0M=sparse(1:nbus,1:nbus,E0,nbus,nbus);
|
|
F0M=sparse(1:nbus,1:nbus,F0,nbus,nbus);
|
|
P0M=sparse(1:nbus,1:nbus,Pspec,nbus,nbus);
|
|
Q0M=sparse(1:nbus,1:nbus,Qspec,nbus,nbus);
|
|
|
|
G=real(Y);
|
|
B=imag(Y);
|
|
|
|
if ~isempty(ind)
|
|
nInd=size(ind,1);
|
|
indIdx=ind(:,1);
|
|
s=zeros(nInd,nlvl+1);
|
|
s(:,1)=s0;
|
|
IL=zeros(nInd,nlvl+1);
|
|
IR=zeros(nInd,nlvl+1);
|
|
Vm=zeros(nInd,nlvl+1);
|
|
|
|
R1=ind(:,7);
|
|
X1=ind(:,8);
|
|
Z1=ind(:,7)+1j*ind(:,8);
|
|
Ze=1j*ind(:,13);
|
|
R2=ind(:,9);
|
|
X2=ind(:,10);
|
|
T0=ind(:,15)+ind(:,16)+ind(:,17);
|
|
T1=-ind(:,16)-2*ind(:,17);
|
|
T2=ind(:,17);
|
|
|
|
Am=sparse(indIdx,(1:nInd)',ones(1,nInd),nbus,nInd);
|
|
|
|
IL(:,1)=V0(indIdx)./(Z1+Ze.*(R2+1j*X2.*s0)./(R2.*Reind0+(1j*X2.*Reind0+Ze).*s0));
|
|
Vm(:,1)=V0(indIdx)-IL(:,1).*Z1;
|
|
IR(:,1)=Vm(:,1).*s0./(R2+1j*X2.*s0);
|
|
|
|
J0=real(IR(:,1));
|
|
K0=imag(IR(:,1));
|
|
JL0=real(IL(:,1));
|
|
KL0=imag(IL(:,1));
|
|
|
|
Yeind0=Reind0./Ze;
|
|
Yeind1=Reind1./Ze;
|
|
Ye1ind0=Reind0.*Z1./Ze;
|
|
Ye1ind1=Reind1.*Z1./Ze;
|
|
Ge=real(Yeind0);
|
|
Be=imag(Yeind0);
|
|
kg1e=real(Ye1ind0);
|
|
kb1e=imag(Ye1ind0);
|
|
Ge1=real(Yeind1);
|
|
Be1=imag(Yeind1);
|
|
kg1e1=real(Ye1ind1);
|
|
kb1e1=imag(Ye1ind1);
|
|
|
|
% The structure:
|
|
% |C|D||x| |E|
|
|
% |A|B||y|=|F|
|
|
% Ly=(D-CA^-1B)y=E-CA^-1F
|
|
% x=-A^-1By+A^-1F
|
|
% x=[J;K;s];y=[JL;KL;C;D];
|
|
% L=[R,S][y1;y2];
|
|
% y1=[JL;KL];y2=[C;D];
|
|
% y1=-R\S*y2+R\(E-CA^-1F)
|
|
%
|
|
% idxE=[1,2,5];
|
|
% idxM=[3,4,6,7];
|
|
%
|
|
% LHS_MatInd_Shr=zeros(nInd,2,2);
|
|
% RHS_C_Shr=zeros(nInd,2,5);
|
|
% LHS_MatInd_Shr2=zeros(nInd,3,4); % A^-1B
|
|
% LHS_MatInd_Shr3=zeros(nInd,3,3); % A^-1
|
|
%
|
|
% LHS_MatInd_Shr_1=zeros(nInd,2,2);
|
|
% RHS_C_Shr_1=zeros(nInd,2,5);
|
|
% LHS_MatInd_Shr2_1=zeros(nInd,3,4); % A^-1B
|
|
% LHS_MatInd_Shr3_1=zeros(nInd,3,3); % A^-1
|
|
|
|
% for i=1:nInd
|
|
% if Rind0(i)~=0
|
|
% LHS_MatInd=[R2(i),-X2(i)*s0(i),R1(i)*s0(i),-X1(i)*s0(i),-K0(i)*X2(i)-C0(indIdx(i))+JL0(i)*R1(i)-KL0(i)*X1(i),-s0(i),0;...
|
|
% X2(i)*s0(i), R2(i),X1(i)*s0(i), R1(i)*s0(i), J0(i)*X2(i)-D0(indIdx(i))+JL0(i)*X1(i)+KL0(i)*R1(i),0,-s0(i);...
|
|
% 2*J0(i),2*K0(i),0,0,-(Rind0(i)*T0(i)+2*Rind0(i)*T1(i)*s0(i)+3*Rind0(i)*T2(i)*s0(i)*s0(i))/R2(i),0,0;...
|
|
% -1,0,1+kg1e(i),-kb1e(i),0,-Ge(i), Be(i);...
|
|
% 0,-1,kb1e(i), 1+kg1e(i),0,-Be(i),-Ge(i);];
|
|
% temp0=LHS_MatInd([3,4,5],idxE)\eye(3); % A^-1
|
|
% LHS_MatInd_Shr2(i,:,:)=temp0*LHS_MatInd([3,4,5],idxM); % A^-1B
|
|
% LHS_MatInd_Shr3(i,:,:)=temp0; % A^-1
|
|
% temp1=LHS_MatInd([1,2],idxE)/LHS_MatInd([3,4,5],idxE); % CA^-1
|
|
% temp2=LHS_MatInd([1,2],idxM)-temp1*LHS_MatInd([3,4,5],idxM); % L=D-CA^-1B
|
|
% LHS_MatInd_Shr(i,:,:)=-temp2(:,[1,2])\temp2(:,[3,4]); % -R\S
|
|
% RHS_C_Shr(i,:,:)=temp2(:,[1,2])\[eye(2),-temp1]; % R\[I,-CA^-1]
|
|
%
|
|
% LHS_MatInd_Shr_1(i,:,:)=LHS_MatInd_Shr(i,:,:);
|
|
% RHS_C_Shr_1(i,:,:)=RHS_C_Shr(i,:,:);
|
|
% LHS_MatInd_Shr2_1(i,:,:)=LHS_MatInd_Shr2(i,:,:);
|
|
% LHS_MatInd_Shr3_1(i,:,:)=LHS_MatInd_Shr3(i,:,:);
|
|
% else % singular case
|
|
% LHS_MatInd=[R2(i),-X2(i)*s0(i),R1(i)*s0(i),-X1(i)*s0(i),-K0(i)*X2(i)-C0(indIdx(i))+JL0(i)*R1(i)-KL0(i)*X1(i),-s0(i),0;...
|
|
% X2(i)*s0(i), R2(i),X1(i)*s0(i), R1(i)*s0(i), J0(i)*X2(i)-D0(indIdx(i))+JL0(i)*X1(i)+KL0(i)*R1(i),0,-s0(i);...
|
|
% 2*real(IR(i,2)),2*imag(IR(i,2)),0,0,-(Rind1(i)*T0(i)+2*Rind1(i)*T1(i)*s0(i)+3*Rind1(i)*T2(i)*s0(i)*s0(i))/R2(i),0,0;...
|
|
% -1,0,1+kg1e(i),-kb1e(i),0,-Ge(i), Be(i);...
|
|
% 0,-1,kb1e(i), 1+kg1e(i),0,-Be(i),-Ge(i);];
|
|
% temp0=LHS_MatInd([3,4,5],idxE)\eye(3); % A^-1
|
|
% LHS_MatInd_Shr2(i,:,:)=temp0*LHS_MatInd([3,4,5],idxM); % A^-1B
|
|
% LHS_MatInd_Shr3(i,:,:)=temp0; % A^-1
|
|
% temp1=LHS_MatInd([1,2],idxE)/LHS_MatInd([3,4,5],idxE); % CA^-1
|
|
% temp2=LHS_MatInd([1,2],idxM)-temp1*LHS_MatInd([3,4,5],idxM); % L=D-CA^-1B
|
|
% LHS_MatInd_Shr(i,:,:)=-temp2(:,[1,2])\temp2(:,[3,4]); % -R\S
|
|
% RHS_C_Shr(i,:,:)=temp2(:,[1,2])\[eye(2),-temp1]; % R\[I,-CA^-1]
|
|
%
|
|
% temp3=[1+kg1e(i),-kb1e(i);kb1e(i), 1+kg1e(i)];
|
|
% temp4=[Ge(i),-Be(i);Be(i),Ge(i)];
|
|
% LHS_MatInd_Shr_1(i,:,:)=temp3\temp4; % -R\S (i=1)
|
|
% RHS_C_Shr_1(i,:,:)=temp3\[eye(2),zeros(2,3)]; % R\[I,-CA^-1] (i=1)
|
|
% end
|
|
% end
|
|
% LHS_MatInd_Bus=zeros(nbus,2,2); % \sum{-R\S} by buses
|
|
% LHS_MatInd_Bus(:,1,1)=accumarray(indIdx,LHS_MatInd_Shr(:,1,1),[nbus,1]);
|
|
% LHS_MatInd_Bus(:,1,2)=accumarray(indIdx,LHS_MatInd_Shr(:,1,2),[nbus,1]);
|
|
% LHS_MatInd_Bus(:,2,1)=accumarray(indIdx,LHS_MatInd_Shr(:,2,1),[nbus,1]);
|
|
% LHS_MatInd_Bus(:,2,2)=accumarray(indIdx,LHS_MatInd_Shr(:,2,2),[nbus,1]);
|
|
%
|
|
% LHS_MatInd_Bus_1=zeros(nbus,2,2); % \sum{-R\S} by buses (i=1)
|
|
% LHS_MatInd_Bus_1(:,1,1)=accumarray(indIdx,LHS_MatInd_Shr_1(:,1,1),[nbus,1]);
|
|
% LHS_MatInd_Bus_1(:,1,2)=accumarray(indIdx,LHS_MatInd_Shr_1(:,1,2),[nbus,1]);
|
|
% LHS_MatInd_Bus_1(:,2,1)=accumarray(indIdx,LHS_MatInd_Shr_1(:,2,1),[nbus,1]);
|
|
% LHS_MatInd_Bus_1(:,2,2)=accumarray(indIdx,LHS_MatInd_Shr_1(:,2,2),[nbus,1]);
|
|
LHS_MatInd_Full=zeros(nInd,5,2);
|
|
LHS_MatInd_Shr=zeros(nInd,2,2);
|
|
% LHS_MatInd_Shr_1=zeros(nInd,2,2);
|
|
RHS_C_Shr=zeros(nInd,5,5);
|
|
for i=1:nInd
|
|
LHS_MatInd=[R2(i),-X2(i)*s0(i),R1(i)*s0(i),-X1(i)*s0(i),-K0(i)*X2(i)-C0(indIdx(i))+JL0(i)*R1(i)-KL0(i)*X1(i),-s0(i),0;...
|
|
X2(i)*s0(i), R2(i),X1(i)*s0(i), R1(i)*s0(i), J0(i)*X2(i)-D0(indIdx(i))+JL0(i)*X1(i)+KL0(i)*R1(i),0,-s0(i);...
|
|
C0(indIdx(i))-JL0(i)*R1(i)+KL0(i)*X1(i),D0(indIdx(i))-KL0(i)*R1(i)-JL0(i)*X1(i),-J0(i)*R1(i)-K0(i)*X1(i),-K0(i)*R1(i)+J0(i)*X1(i),-Rind0(i)*(T1(i)+2*T2(i)*s0(i)),J0(i),K0(i);...
|
|
-1,0,1+kg1e(i),-kb1e(i),0,-Ge(i), Be(i);...
|
|
0,-1,kb1e(i), 1+kg1e(i),0,-Be(i),-Ge(i);];
|
|
MatIndA=LHS_MatInd(:,1:5);
|
|
MatIndB=LHS_MatInd(:,[6,7]);
|
|
MatInvA=MatIndA\eye(5);
|
|
MatCDtoRest=-MatInvA*MatIndB;
|
|
|
|
RHS_C_Shr(i,:,:)=MatInvA;
|
|
LHS_MatInd_Full(i,:,:)=MatCDtoRest;
|
|
LHS_MatInd_Shr(i,:,:)=MatCDtoRest([3,4],:);
|
|
% LHS_MatInd_Shr_1(i,:,:)=LHS_MatInd_Shr(i,:,:);
|
|
% temp0=LHS_MatInd([3,4,5],idxE)\eye(3); % A^-1
|
|
% LHS_MatInd_Shr2(i,:,:)=temp0*LHS_MatInd([3,4,5],idxM); % A^-1B
|
|
% LHS_MatInd_Shr3(i,:,:)=temp0; % A^-1
|
|
% temp1=LHS_MatInd([1,2],idxE)/LHS_MatInd([3,4,5],idxE); % CA^-1
|
|
% temp2=LHS_MatInd([1,2],idxM)-temp1*LHS_MatInd([3,4,5],idxM); % L=D-CA^-1B
|
|
% LHS_MatInd_Shr(i,:,:)=-temp2(:,[1,2])\temp2(:,[3,4]); % -R\S
|
|
% RHS_C_Shr(i,:,:)=temp2(:,[1,2])\[eye(2),-temp1]; % R\[I,-CA^-1]
|
|
%
|
|
% LHS_MatInd_Shr_1(i,:,:)=LHS_MatInd_Shr(i,:,:);
|
|
% RHS_C_Shr_1(i,:,:)=RHS_C_Shr(i,:,:);
|
|
% LHS_MatInd_Shr2_1(i,:,:)=LHS_MatInd_Shr2(i,:,:);
|
|
% LHS_MatInd_Shr3_1(i,:,:)=LHS_MatInd_Shr3(i,:,:);
|
|
end
|
|
LHS_MatInd_Bus=zeros(nbus,2,2); % \sum{-R\S} by buses
|
|
LHS_MatInd_Bus(:,1,1)=accumarray(indIdx,LHS_MatInd_Shr(:,1,1),[nbus,1]);
|
|
LHS_MatInd_Bus(:,1,2)=accumarray(indIdx,LHS_MatInd_Shr(:,1,2),[nbus,1]);
|
|
LHS_MatInd_Bus(:,2,1)=accumarray(indIdx,LHS_MatInd_Shr(:,2,1),[nbus,1]);
|
|
LHS_MatInd_Bus(:,2,2)=accumarray(indIdx,LHS_MatInd_Shr(:,2,2),[nbus,1]);
|
|
|
|
% LHS_MatInd_Bus_1=zeros(nbus,2,2); % \sum{-R\S} by buses (i=1)
|
|
% LHS_MatInd_Bus_1(:,1,1)=accumarray(indIdx,LHS_MatInd_Shr_1(:,1,1),[nbus,1]);
|
|
% LHS_MatInd_Bus_1(:,1,2)=accumarray(indIdx,LHS_MatInd_Shr_1(:,1,2),[nbus,1]);
|
|
% LHS_MatInd_Bus_1(:,2,1)=accumarray(indIdx,LHS_MatInd_Shr_1(:,2,1),[nbus,1]);
|
|
% LHS_MatInd_Bus_1(:,2,2)=accumarray(indIdx,LHS_MatInd_Shr_1(:,2,2),[nbus,1]);
|
|
else
|
|
s=[];
|
|
end
|
|
|
|
if ~isempty(zip)
|
|
nZip=size(zip,1);
|
|
zipIdx=zip(:,1);
|
|
IiL=zeros(nZip,nlvl+1);
|
|
BiL=zeros(nZip,nlvl+1);
|
|
|
|
Bi0=abs(V0(zipIdx));
|
|
JI=zip(:,6);
|
|
KI=-zip(:,9);
|
|
|
|
Ii0L=Rzip0.*(JI+1j*KI).*V0(zipIdx)./Bi0;
|
|
Ji0L=real(Ii0L);
|
|
Ki0L=imag(Ii0L);
|
|
|
|
IiL(:,1)=Ii0L;
|
|
BiL(:,1)=Bi0;
|
|
|
|
Ci0=real(V0(zipIdx));
|
|
Di0=imag(V0(zipIdx));
|
|
|
|
LHS_MatZip=[Rzip0.*JI./Bi0-Ci0.*Ji0L./Bi0./Bi0,-Rzip0.*KI./Bi0-Di0.*Ji0L./Bi0./Bi0,...
|
|
Rzip0.*KI./Bi0-Ci0.*Ki0L./Bi0./Bi0,Rzip0.*JI./Bi0-Di0.*Ki0L./Bi0./Bi0];
|
|
Mat_BZip=[Ci0./Bi0,Di0./Bi0];
|
|
else
|
|
IiL=[];
|
|
end
|
|
|
|
if ~isempty(syn)
|
|
nSyn=size(syn,1);
|
|
synIdx=syn(:,1);
|
|
Rs=syn(:,7);
|
|
Xd=syn(:,8);
|
|
Xq=syn(:,13);
|
|
Ms=syn(:,18);
|
|
Ds=syn(:,19);
|
|
|
|
d=zeros(nSyn,nlvl+1);
|
|
JG=zeros(nSyn,nlvl+1);
|
|
KG=zeros(nSyn,nlvl+1);
|
|
Cd=zeros(nSyn,nlvl+1);
|
|
Sd=zeros(nSyn,nlvl+1);
|
|
Ef=zeros(nSyn,nlvl+1);
|
|
d(:,1)=d0;
|
|
|
|
Efd=zeros(nSyn,1);
|
|
Efq=Ef0;
|
|
cosd=cos(d0);
|
|
sind=sin(d0);
|
|
Cg=C0(synIdx);
|
|
Dg=D0(synIdx);
|
|
Vd=sind.*Cg-cosd.*Dg;
|
|
Vq=cosd.*Cg+sind.*Dg;
|
|
Id=(Rs.*(Efd-Vd)+Xq.*(Efq-Vq))./(Rs.*Rs+Xq.*Xd);
|
|
Iq=(-Xd.*(Efd-Vd)+Rs.*(Efq-Vq))./(Rs.*Rs+Xq.*Xd);
|
|
IG0=(sind.*Id+cosd.*Iq)+1j*(-cosd.*Id+sind.*Iq);
|
|
% IG0=(Ef0.*(cos(d0)+1j*sin(d0))-V0(synIdx))./(Rs+1j*Xs);
|
|
JG(:,1)=real(IG0);
|
|
KG(:,1)=imag(IG0);
|
|
Cd(:,1)=cos(d0);
|
|
Sd(:,1)=sin(d0);
|
|
Ef(:,[1,2])=[Ef0,Ef1];
|
|
|
|
CG0=C0(synIdx);
|
|
DG0=D0(synIdx);
|
|
JG0=JG(:,1);
|
|
KG0=KG(:,1);
|
|
Cd0=Cd(:,1);
|
|
Sd0=Sd(:,1);
|
|
|
|
[cosp,sinp,taylorN]=getTaylorPolynomials(d0,taylorN); % taylorN may be truncated
|
|
|
|
Pm=zeros(nSyn,nlvl+1);
|
|
Pm(:,1)=Pm0;
|
|
if ~isempty(Pm1)
|
|
Pm(:,2)=Pm1;
|
|
end
|
|
|
|
A1n=zeros(nSyn,1);
|
|
B1n=zeros(nSyn,1);
|
|
for i=1:taylorN
|
|
A1n=A1n.*d0+(taylorN+1-i)*cosp(:,taylorN+2-i);
|
|
B1n=B1n.*d0+(taylorN+1-i)*sinp(:,taylorN+2-i);
|
|
end
|
|
|
|
synByIsland=islands(synIdx);
|
|
sumShare=accumarray(synByIsland,pShare);
|
|
nIsland=length(sumShare);
|
|
pShare=pShare./sumShare(synByIsland);
|
|
mAuxIsland=sparse(1:nSyn,synByIsland,pShare,nSyn,nIsland);
|
|
[~,idxBal]=max(mAuxIsland);
|
|
idxBalSyn=idxBal(synByIsland);
|
|
|
|
MatG1C=sparse(1:nSyn,synIdx,Cd0,nSyn,nbus);
|
|
MatG1D=sparse(1:nSyn,synIdx,Sd0,nSyn,nbus);
|
|
MatG2C=sparse(1:nSyn,synIdx,Sd0,nSyn,nbus);
|
|
MatG2D=sparse(1:nSyn,synIdx,-Cd0,nSyn,nbus);
|
|
MatG5AC=sparse([1:nSyn,1:nSyn],[synIdx;synIdx(idxBalSyn)],[-pShare(idxBalSyn).*JG0;JG0(idxBalSyn).*pShare],nSyn,nbus);
|
|
MatG5AD=sparse([1:nSyn,1:nSyn],[synIdx;synIdx(idxBalSyn)],[-pShare(idxBalSyn).*KG0;KG0(idxBalSyn).*pShare],nSyn,nbus);
|
|
MatG5BC=sparse(nIsland,nbus);
|
|
MatG5BD=sparse(nIsland,nbus);
|
|
|
|
MatG5AC(idxBal,:)=MatG5BC;
|
|
MatG5AD(idxBal,:)=MatG5BD;
|
|
|
|
MatG1J=sparse(1:nSyn,1:nSyn,Rs.*Cd0+Xd.*Sd0,nSyn,nSyn);
|
|
MatG1K=sparse(1:nSyn,1:nSyn,Rs.*Sd0-Xd.*Cd0,nSyn,nSyn);
|
|
MatG1d=sparse(1:nSyn,1:nSyn,(CG0+Rs.*JG0-Xd.*KG0).*A1n+(DG0+Rs.*KG0+Xd.*JG0).*B1n,nSyn,nSyn);
|
|
MatG2J=sparse(1:nSyn,1:nSyn,Rs.*Sd0-Xq.*Cd0,nSyn,nSyn);
|
|
MatG2K=sparse(1:nSyn,1:nSyn,-Rs.*Cd0-Xq.*Sd0,nSyn,nSyn);
|
|
MatG2d=sparse(1:nSyn,1:nSyn,(-DG0-Rs.*KG0-Xq.*JG0).*A1n+(CG0+Rs.*JG0-Xq.*KG0).*B1n,nSyn,nSyn);
|
|
MatG5AJ=sparse([1:nSyn,1:nSyn],[1:nSyn,idxBalSyn'],[-pShare(idxBalSyn).*(CG0+2*JG0.*Rs);(CG0(idxBalSyn)+2*JG0(idxBalSyn).*Rs(idxBalSyn)).*pShare],nSyn,nSyn);
|
|
MatG5AK=sparse([1:nSyn,1:nSyn],[1:nSyn,idxBalSyn'],[-pShare(idxBalSyn).*(DG0+2*KG0.*Rs);(DG0(idxBalSyn)+2*KG0(idxBalSyn).*Rs(idxBalSyn)).*pShare],nSyn,nSyn);
|
|
MatG5Ad=sparse(nSyn,nSyn);
|
|
MatG5BJ=sparse(nIsland,nSyn);
|
|
MatG5BK=sparse(nIsland,nSyn);
|
|
MatG5Bd=sparse(synByIsland,1:nSyn,Ms,nIsland,nSyn);
|
|
|
|
MatG5AJ(idxBal,:)=MatG5BJ;
|
|
MatG5AK(idxBal,:)=MatG5BK;
|
|
MatG5Ad(idxBal,:)=MatG5Bd;
|
|
|
|
% [MatGA,MatGB]*[CD;JKd]=RHS
|
|
% JKd=-MatGA\MatGB*CD+MatGA\RHS=MatGBiA*CD+MatGA\RHS
|
|
MatGA=[MatG1C,MatG1D;MatG2C,MatG2D;MatG5AC,MatG5AD];
|
|
MatGB=[MatG1J,MatG1K,MatG1d;MatG2J,MatG2K,MatG2d;MatG5AJ,MatG5AK,MatG5Ad];
|
|
% MatGB2=[MatG1J,MatG1K,sparse(1:nSyn,1:nSyn,(CG0+Rs.*JG0-Xd.*KG0),nSyn,nSyn),sparse(1:nSyn,1:nSyn,(DG0+Rs.*KG0+Xd.*JG0),nSyn,nSyn),sparse(nSyn,nSyn);...
|
|
% MatG2J,MatG2K,sparse(1:nSyn,1:nSyn,(-DG0-Rs.*KG0-Xq.*JG0),nSyn,nSyn),sparse(1:nSyn,1:nSyn,(CG0+Rs.*JG0-Xq.*KG0),nSyn,nSyn),sparse(nSyn,nSyn);...
|
|
% sparse(nSyn,nSyn),sparse(nSyn,nSyn),sparse(1:nSyn,1:nSyn,ones(1,nSyn),nSyn,nSyn),sparse(nSyn,nSyn),sparse(1:nSyn,1:nSyn,-A1n,nSyn,nSyn);...
|
|
% sparse(nSyn,nSyn),sparse(nSyn,nSyn),sparse(nSyn,nSyn),sparse(1:nSyn,1:nSyn,ones(1,nSyn),nSyn,nSyn),sparse(1:nSyn,1:nSyn,-B1n,nSyn,nSyn);...
|
|
% MatG5AJ,MatG5AK,sparse(nSyn,nSyn),sparse(nSyn,nSyn),MatG5Ad];
|
|
|
|
MatGBiA=-MatGB\MatGA;
|
|
GTrMat=sparse(synIdx,1:nSyn,ones(nSyn,1),nbus,nSyn);
|
|
MatGTrans=[GTrMat,sparse(nbus,nSyn),sparse(nbus,nSyn);sparse(nbus,nSyn),GTrMat,sparse(nbus,nSyn)];
|
|
MatGCD=MatGTrans*MatGBiA;
|
|
else
|
|
d=[];
|
|
JG=[];
|
|
KG=[];
|
|
end
|
|
|
|
Y11=-G;Y12=B;Y21=-B;Y22=-G;
|
|
YEF11=P0M;YEF12=-Q0M;YEF21=-Q0M;YEF22=-P0M;
|
|
|
|
|
|
if ~isempty(zip)
|
|
Y11=Y11-sparse(1:nbus,1:nbus,accumarray(zipIdx,LHS_MatZip(:,1),[nbus,1]),nbus,nbus);
|
|
Y12=Y12-sparse(1:nbus,1:nbus,accumarray(zipIdx,LHS_MatZip(:,2),[nbus,1]),nbus,nbus);
|
|
Y21=Y21-sparse(1:nbus,1:nbus,accumarray(zipIdx,LHS_MatZip(:,3),[nbus,1]),nbus,nbus);
|
|
Y22=Y22-sparse(1:nbus,1:nbus,accumarray(zipIdx,LHS_MatZip(:,4),[nbus,1]),nbus,nbus);
|
|
end
|
|
YLHS=[Y11,Y12;Y21,Y22];
|
|
% YLHS_1=[Y11,Y12;Y21,Y22];
|
|
|
|
if ~isempty(ind)
|
|
YLHS=YLHS-...
|
|
[sparse(1:nbus,1:nbus,LHS_MatInd_Bus(:,1,1),nbus,nbus),sparse(1:nbus,1:nbus,LHS_MatInd_Bus(:,1,2),nbus,nbus);...
|
|
sparse(1:nbus,1:nbus,LHS_MatInd_Bus(:,2,1),nbus,nbus),sparse(1:nbus,1:nbus,LHS_MatInd_Bus(:,2,2),nbus,nbus)];
|
|
% YLHS_1=YLHS_1-...
|
|
% [sparse(1:nbus,1:nbus,LHS_MatInd_Bus_1(:,1,1),nbus,nbus),sparse(1:nbus,1:nbus,LHS_MatInd_Bus_1(:,1,2),nbus,nbus);...
|
|
% sparse(1:nbus,1:nbus,LHS_MatInd_Bus_1(:,2,1),nbus,nbus),sparse(1:nbus,1:nbus,LHS_MatInd_Bus_1(:,2,2),nbus,nbus)];
|
|
end
|
|
|
|
if ~isempty(syn)
|
|
YLHS=YLHS+MatGCD;
|
|
% YLHS_1=YLHS_1+MatGCD;
|
|
end
|
|
|
|
% Branch 0: smaller matrix
|
|
C0i=C0./V0sq;
|
|
D0i=D0./V0sq;
|
|
% C0Mi=sparse(1:nbus,1:nbus,C0./V0sq,nbus,nbus);
|
|
% D0Mi=sparse(1:nbus,1:nbus,D0./V0sq,nbus,nbus);
|
|
PCQD=Pspec.*C0i+Qspec.*D0i;
|
|
PDQC=Pspec.*D0i-Qspec.*C0i;
|
|
YLHSx=YLHS-...
|
|
[sparse(1:nbus,1:nbus,PCQD.*E0+PDQC.*F0,nbus,nbus),sparse(1:nbus,1:nbus,-PCQD.*F0+PDQC.*E0,nbus,nbus);...
|
|
sparse(1:nbus,1:nbus, PDQC.*E0-PCQD.*F0,nbus,nbus),sparse(1:nbus,1:nbus,-PDQC.*F0-PCQD.*E0,nbus,nbus)];
|
|
idxNonSw=find(busType~=2);
|
|
idxStackMat=[idxNonSw;idxNonSw+nbus];
|
|
C0Mx=sparse(1:npv,ipvInPvPq,C0(ipv),npv,npv+npq);
|
|
D0Mx=sparse(1:npv,ipvInPvPq,D0(ipv),npv,npv+npq);
|
|
|
|
LHS_matx=[YLHSx(idxStackMat,idxStackMat),[-F0M(busType~=2,ipv);-E0M(busType~=2,ipv)];...
|
|
C0Mx,D0Mx,sparse(npv,npv)];
|
|
|
|
useLU=isfield(SysPara,'iden')&&isfield(SysPara,'p_amd');
|
|
|
|
if useLU
|
|
if isempty(SysPara.p_amd)
|
|
p_amd = colamd (LHS_matx) ;
|
|
save([SysPara.iden,'.mat'],'p_amd');
|
|
else
|
|
p_amd=SysPara.p_amd;
|
|
end
|
|
MxI = speye (size(LHS_matx)) ;
|
|
MxQ = MxI (:, p_amd) ;
|
|
if IS_OCTAVE
|
|
[MxL,MxU,MxP,MxQx] = lu (LHS_matx*MxQ) ;
|
|
else
|
|
[MxL,MxU,MxP] = lu (LHS_matx*MxQ) ;
|
|
end
|
|
end
|
|
% END OF Branch 0: smaller matrix
|
|
|
|
% Branch 1: larger matrix
|
|
% idxNonSw=find(busType~=2);
|
|
% idxStackMat=[idxNonSw;idxNonSw+nbus];
|
|
%
|
|
% LHS_mat=[YLHS(idxStackMat,idxStackMat),...
|
|
% [YEF11(busType~=2,busType~=2),YEF12(busType~=2,busType~=2),-F0M(busType~=2,ipv);...
|
|
% YEF21(busType~=2,busType~=2),YEF22(busType~=2,busType~=2),-E0M(busType~=2,ipv)];...
|
|
% C0M(ipv,busType~=2),D0M(ipv,busType~=2),sparse(npv,2*npq+3*npv);...
|
|
% E0M(busType~=2,busType~=2),-F0M(busType~=2,busType~=2),C0M(busType~=2,busType~=2),-D0M(busType~=2,busType~=2),sparse(npq+npv,npv);...
|
|
% F0M(busType~=2,busType~=2),E0M(busType~=2,busType~=2),D0M(busType~=2,busType~=2),C0M(busType~=2,busType~=2),sparse(npq+npv,npv);];
|
|
%
|
|
% useLU=isfield(SysPara,'iden')&&isfield(SysPara,'p_amd');
|
|
%
|
|
% if useLU
|
|
% if isempty(SysPara.p_amd)
|
|
% p_amd = colamd (LHS_mat) ;
|
|
% save([SysPara.iden,'.mat'],'p_amd');
|
|
% else
|
|
% p_amd=SysPara.p_amd;
|
|
% end
|
|
% MxI = speye (size(LHS_mat)) ;
|
|
% MxQ = MxI (:, p_amd) ;
|
|
% [MxL,MxU,MxP] = lu (LHS_mat*MxQ) ;
|
|
% end
|
|
% END OF Branch 1: larger matrix
|
|
|
|
% if nbus<=LU_SIZE_TH
|
|
% [L_LHS_mat,U_LHS_mat,p_LHS_mat]=lu(LHS_mat,'vector');
|
|
% end
|
|
|
|
% LHS_mat_1=[YLHS_1,[YEF11,YEF12,-F0M(:,ipv);YEF21,YEF22,-E0M(:,ipv)];...
|
|
% C0M(ipv,:),D0M(ipv,:),sparse(npv,2*nbus+npv);...
|
|
% E0M,-F0M,C0M,-D0M,sparse(nbus,npv);...
|
|
% F0M,E0M,D0M,C0M,sparse(nbus,npv);];
|
|
|
|
for i=1:nlvl
|
|
|
|
seq2=getseq(i,2);
|
|
seq2p=getseq(i+1,2);
|
|
seq3=getseq(i,3);
|
|
idxSeq2=sum(seq2==i,2);
|
|
idxSeq2p=sum(seq2p>=i,2);
|
|
idxSeq3=sum(seq3==i,2);
|
|
idxSeq3x=sum(seq3(:,[2,3])==i,2);
|
|
seq2R=seq2(idxSeq2==0,:);
|
|
seq2px=seq2(idxSeq2p==0,:);
|
|
seq3R=seq3(idxSeq3==0,:);
|
|
seq3Rx=seq3(idxSeq3x==0,:);
|
|
seq2m=getseq(i-1,2);
|
|
seq3m=getseq(i-1,3);
|
|
seq2mm=getseq(i-2,2);
|
|
|
|
RHSILr=zeros(nbus,1);
|
|
RHSILi=zeros(nbus,1);
|
|
if ~isempty(ind)
|
|
% rhsBus=zeros(2,nInd);
|
|
% rhsM=sum(Vm(:,seq2R(:,1)+1).*s(:,seq2R(:,2)+1),2)-1j*X2.*sum(IR(:,seq2R(:,1)+1).*s(:,seq2R(:,2)+1),2);
|
|
% rhsI=-real(sum(IR(:,seq2R(:,1)+1).*conj(IR(:,seq2R(:,2)+1)),2))+...
|
|
% (T1.*sum(s(:,seq2R(:,1)+1).*s(:,seq2R(:,2)+1),2)+T2.*sum(s(:,seq3R(:,1)+1).*s(:,seq3R(:,2)+1).*s(:,seq3R(:,3)+1),2)).*Rind0./R2+...
|
|
% (T0.*s(:,i)+T1.*sum(s(:,seq2m(:,1)+1).*s(:,seq2m(:,2)+1),2)+T2.*sum(s(:,seq3m(:,1)+1).*s(:,seq3m(:,2)+1).*s(:,seq3m(:,3)+1),2)).*Rind1./R2;
|
|
% rhsIx=-real(sum(IR(:,seq2px(:,1)+1).*conj(IR(:,seq2px(:,2)+1)),2))+...
|
|
% (T1.*sum(s(:,seq2R(:,1)+1).*s(:,seq2R(:,2)+1),2)+T2.*sum(s(:,seq3R(:,1)+1).*s(:,seq3R(:,2)+1).*s(:,seq3R(:,3)+1),2)).*Rind1./R2;
|
|
% rhsImod=Rind1.*(T1.*s(:,i)+T2.*sum(s(:,seq2m(:,1)+1).*s(:,seq2m(:,2)+1),2))+Rind0.*T2.*sum(s(:,seq2R(:,1)+1).*s(:,seq2R(:,2)+1),2)-...
|
|
% real(sum(V(indIdx,seq2R(:,1)+1).*conj(IR(:,seq2R(:,2)+1)),2))+...
|
|
% real(sum(IL(:,seq2R(:,1)+1).*conj(IR(:,seq2R(:,2)+1)),2).*Z1);
|
|
% if i==1
|
|
% rhsImod=rhsImod+Rind1.*T0;
|
|
% end
|
|
% rhsIL=V(indIdx,i).*Yeind1-IL(:,i).*Ye1ind1;
|
|
% for j=1:nInd
|
|
% % if Rind0(j)~=0
|
|
% % rhsBus(:,j)=squeeze(RHS_C_Shr(j,:,:))*[real(rhsM(j));imag(rhsM(j));rhsI(j);real(rhsIL(j));imag(rhsIL(j))];
|
|
% % else
|
|
% % if i==1
|
|
% % s(j,i+1)=R2(j)*Rind1(j)*T0(j)/...
|
|
% % ((C0(indIdx(j))-R1(j)*JL0(j)+X1(j)*KL0(j))*(C0(indIdx(j))-R1(j)*JL0(j)+X1(j)*KL0(j))+...
|
|
% % (D0(indIdx(j))-X1(j)*JL0(j)-R1(j)*KL0(j))*(D0(indIdx(j))-X1(j)*JL0(j)-R1(j)*KL0(j)));
|
|
% % IR(j,i+1)=s(j,i+1)/R2(j)*((C0(indIdx(j))-R1(j)*JL0(j)+X1(j)*KL0(j))+1j*(D0(indIdx(j))-X1(j)*JL0(j)-R1(j)*KL0(j)));
|
|
% % rhsBus(:,j)=squeeze(RHS_C_Shr_1(j,:,:))*[real(IR(j,i+1)+rhsIL(j));imag(IR(j,i+1)+rhsIL(j));0;0;0];
|
|
% % else
|
|
% % rhsBus(:,j)=squeeze(RHS_C_Shr(j,:,:))*[real(rhsM(j));imag(rhsM(j));rhsIx(j);real(rhsIL(j));imag(rhsIL(j))];
|
|
% % end
|
|
% % end
|
|
% rhsBus(:,j)=squeeze(RHS_C_Shr(j,:,:))*[real(rhsM(j));imag(rhsM(j));rhsImod(j);real(rhsIL(j));imag(rhsIL(j))];
|
|
% end
|
|
% %accumulate currents
|
|
% RHSILr=accumarray(indIdx,rhsBus(1,:)',[nbus,1]);
|
|
% RHSILi=accumarray(indIdx,rhsBus(2,:)',[nbus,1]);
|
|
|
|
rhsBus=zeros(5,nInd);
|
|
rhsM=sum(Vm(:,seq2R(:,1)+1).*s(:,seq2R(:,2)+1),2)-1j*X2.*sum(IR(:,seq2R(:,1)+1).*s(:,seq2R(:,2)+1),2);
|
|
rhsImod=Rind1.*(T1.*s(:,i)+T2.*sum(s(:,seq2m(:,1)+1).*s(:,seq2m(:,2)+1),2))+Rind0.*T2.*sum(s(:,seq2R(:,1)+1).*s(:,seq2R(:,2)+1),2)-...
|
|
real(sum(V(indIdx,seq2R(:,1)+1).*conj(IR(:,seq2R(:,2)+1)),2))+...
|
|
real(sum(IL(:,seq2R(:,1)+1).*conj(IR(:,seq2R(:,2)+1)),2).*Z1);
|
|
if i==1
|
|
rhsImod=rhsImod+Rind1.*T0;
|
|
end
|
|
rhsIL=V(indIdx,i).*Yeind1-IL(:,i).*Ye1ind1;
|
|
for j=1:nInd
|
|
rhsBus(:,j)=squeeze(RHS_C_Shr(j,:,:))*[real(rhsM(j));imag(rhsM(j));rhsImod(j);real(rhsIL(j));imag(rhsIL(j))];
|
|
end
|
|
RHSILr=accumarray(indIdx,rhsBus(3,:)',[nbus,1]);
|
|
RHSILi=accumarray(indIdx,rhsBus(4,:)',[nbus,1]);
|
|
end
|
|
|
|
RHSIiLr=zeros(nbus,1);
|
|
RHSIiLi=zeros(nbus,1);
|
|
if ~isempty(zip)
|
|
RHS_BZip=(real(sum(V(zipIdx,seq2R(:,1)+1).*conj(V(zipIdx,seq2R(:,2)+1)),2))-sum(BiL(:,seq2R(:,1)+1).*BiL(:,seq2R(:,2)+1),2))./Bi0/2;
|
|
RHZ_BIConv=sum(IiL(:,seq2R(:,1)+1).*BiL(:,seq2R(:,2)+1),2);
|
|
RHSILr_full=Rzip1.*(JI.*real(V(zipIdx,i))-KI.*imag(V(zipIdx,i)))./Bi0-real(RHZ_BIConv)./Bi0-Ji0L.*RHS_BZip./Bi0;
|
|
RHSILi_full=Rzip1.*(KI.*real(V(zipIdx,i))+JI.*imag(V(zipIdx,i)))./Bi0-imag(RHZ_BIConv)./Bi0-Ki0L.*RHS_BZip./Bi0;
|
|
RHSIiLr=accumarray(zipIdx,RHSILr_full,[nbus,1]);
|
|
RHSIiLi=accumarray(zipIdx,RHSILi_full,[nbus,1]);
|
|
end
|
|
|
|
RHSIGr=zeros(nbus,1);
|
|
RHSIGi=zeros(nbus,1);
|
|
if ~isempty(syn)
|
|
AG0=zeros(nSyn,1);
|
|
BG0=zeros(nSyn,1);
|
|
|
|
if taylorN>=2
|
|
AG0=AG0+cosp(:,3).*sum(d(:,seq2R(:,1)+1).*d(:,seq2R(:,2)+1),2);
|
|
BG0=BG0+sinp(:,3).*sum(d(:,seq2R(:,1)+1).*d(:,seq2R(:,2)+1),2);
|
|
end
|
|
if taylorN>=3
|
|
AG0=AG0+cosp(:,4).*sum(d(:,seq3R(:,1)+1).*d(:,seq3R(:,2)+1).*d(:,seq3R(:,3)+1),2);
|
|
BG0=BG0+sinp(:,4).*sum(d(:,seq3R(:,1)+1).*d(:,seq3R(:,2)+1).*d(:,seq3R(:,3)+1),2);
|
|
end
|
|
if taylorN>=4
|
|
seq4=getseq(i,4);
|
|
idxSeq4=sum(seq4==i,2);
|
|
seq4R=seq4(idxSeq4==0,:);
|
|
|
|
AG0=AG0+cosp(:,5).*sum(d(:,seq4R(:,1)+1).*d(:,seq4R(:,2)+1).*d(:,seq4R(:,3)+1).*d(:,seq4R(:,4)+1),2);
|
|
BG0=BG0+sinp(:,5).*sum(d(:,seq4R(:,1)+1).*d(:,seq4R(:,2)+1).*d(:,seq4R(:,3)+1).*d(:,seq4R(:,4)+1),2);
|
|
end
|
|
|
|
CCr=sum(real(V(synIdx,seq2R(:,1)+1)).*Cd(:,seq2R(:,2)+1),2);
|
|
DCr=sum(imag(V(synIdx,seq2R(:,1)+1)).*Cd(:,seq2R(:,2)+1),2);
|
|
CSr=sum(real(V(synIdx,seq2R(:,1)+1)).*Sd(:,seq2R(:,2)+1),2);
|
|
DSr=sum(imag(V(synIdx,seq2R(:,1)+1)).*Sd(:,seq2R(:,2)+1),2);
|
|
JCr=sum(JG(:,seq2R(:,1)+1).*Cd(:,seq2R(:,2)+1),2);
|
|
KCr=sum(KG(:,seq2R(:,1)+1).*Cd(:,seq2R(:,2)+1),2);
|
|
JSr=sum(JG(:,seq2R(:,1)+1).*Sd(:,seq2R(:,2)+1),2);
|
|
KSr=sum(KG(:,seq2R(:,1)+1).*Sd(:,seq2R(:,2)+1),2);
|
|
|
|
RHSIG1=Ef(:,i+1)-(CCr+DSr+Rs.*(JCr+KSr)+Xd.*(JSr-KCr))-(CG0+Rs.*JG0-Xd.*KG0).*AG0-(DG0+Rs.*KG0+Xd.*JG0).*BG0;
|
|
RHSIG2=-(CSr-DCr+Rs.*(JSr-KCr)-Xq.*(JCr+KSr))-(-DG0-Rs.*KG0-Xq.*JG0).*AG0-(CG0+Rs.*JG0-Xq.*KG0).*BG0;
|
|
RHSIG3temp=-Pm(:,i+1)+...
|
|
sum(real(V(synIdx,seq2R(:,1)+1).*(JG(:,seq2R(:,2)+1)-1j*KG(:,seq2R(:,2)+1))),2)+...
|
|
(sum(JG(:,seq2R(:,1)+1).*JG(:,seq2R(:,2)+1),2)+sum(KG(:,seq2R(:,1)+1).*KG(:,seq2R(:,2)+1),2)).*Rs;
|
|
|
|
RHSIG3=pShare(idxBalSyn).*RHSIG3temp-RHSIG3temp(idxBalSyn).*pShare;
|
|
RHSIG3(idxBal)=0;
|
|
RHSIG=MatGB\[RHSIG1;RHSIG2;RHSIG3];
|
|
RHSIGJK=MatGTrans*RHSIG;
|
|
RHSIGr=RHSIGJK(1:nbus);
|
|
RHSIGi=RHSIGJK((nbus+1):(2*nbus));
|
|
end
|
|
|
|
% HEM Body
|
|
RHS1=sum((-P(:,seq2(:,1)+1)+1j*(Q(:,seq2(:,1)+1)+Qxtra(:,seq2(:,1)+1))).*conj(W(:,seq2(:,2)+1)),2)+Ysh1.*V(:,i);
|
|
RHS2=-0.5*real(sum(V(:,seq2R(:,1)+1).*conj(V(:,seq2R(:,2)+1)),2));
|
|
RHS3=sum(-W(:,seq2R(:,1)+1).*V(:,seq2R(:,2)+1),2);
|
|
|
|
if i==1
|
|
RHS2=RHS2+0.5*VspSq2(:,2);
|
|
end
|
|
|
|
compactRHS1=RHS1(busType~=2);
|
|
if ~isempty(isw);compactRHS1=compactRHS1+Y(busType~=2,isw)*V(isw,i+1);end
|
|
|
|
RHS3r=real(RHS3);RHS3i=imag(RHS3);
|
|
|
|
% RHS=[real(compactRHS1)+RHSILr(busType~=2)+RHSIiLr(busType~=2)-RHSIGr(busType~=2);...
|
|
% imag(compactRHS1)+RHSILi(busType~=2)+RHSIiLi(busType~=2)-RHSIGi(busType~=2);...
|
|
% RHS2(ipv);...
|
|
% RHS3r(busType~=2);...
|
|
% RHS3i(busType~=2);];
|
|
%
|
|
% if useLU
|
|
% x = MxQ * (MxU \ (MxL \ (MxP * RHS))) ;
|
|
% else
|
|
% x=LHS_mat\RHS;
|
|
% end
|
|
%
|
|
% V(busType~=2,i+1)=x(1:(npq+npv))+1j*x(((npq+npv)+1):(2*(npq+npv)));
|
|
% W(busType~=2,i+1)=x((2*(npq+npv)+1):(3*(npq+npv)))+1j*x((3*(npq+npv)+1):(4*(npq+npv)));
|
|
% Q(ipv,i+1)=x((4*(npq+npv)+1):end);
|
|
|
|
% Solve a smaller system
|
|
|
|
RHS3xr=PCQD.*RHS3r+PDQC.*RHS3i;
|
|
RHS3xi=PDQC.*RHS3r-PCQD.*RHS3i;
|
|
RHSx=[real(compactRHS1)+RHSILr(busType~=2)+RHSIiLr(busType~=2)-RHSIGr(busType~=2)-RHS3xr(busType~=2);...
|
|
imag(compactRHS1)+RHSILi(busType~=2)+RHSIiLi(busType~=2)-RHSIGi(busType~=2)-RHS3xi(busType~=2);...
|
|
RHS2(ipv);];
|
|
|
|
if useLU
|
|
if IS_OCTAVE
|
|
x = MxQ * MxQx* (MxU \ (MxL \ (MxP * RHSx))) ;
|
|
else
|
|
x = MxQ * (MxU \ (MxL \ (MxP * RHSx))) ;
|
|
end
|
|
else
|
|
x=LHS_matx\RHSx;
|
|
end
|
|
|
|
V(busType~=2,i+1)=x(1:(npq+npv))+1j*x(((npq+npv)+1):(2*(npq+npv)));
|
|
Q(ipv,i+1)=x((2*(npq+npv)+1):end);
|
|
|
|
Cx=real(V(:,i+1));Dx=imag(V(:,i+1));
|
|
RHS3xxr=RHS3r-E0.*Cx+F0.*Dx;RHS3xxi=RHS3i-F0.*Cx-E0.*Dx;
|
|
Ex=C0i.*RHS3xxr+D0i.*RHS3xxi;Fx=-D0i.*RHS3xxr+C0i.*RHS3xxi;
|
|
W(busType~=2,i+1)=Ex(busType~=2)+1j*Fx(busType~=2);
|
|
|
|
if ~isempty(ind)
|
|
for j=1:nInd
|
|
% if Rind0(j)~=0
|
|
% tempIL=squeeze(LHS_MatInd_Shr(j,:,:))*[real(V(indIdx(j),i+1));imag(V(indIdx(j),i+1))]+rhsBus(:,j);
|
|
% tempIRs=-squeeze(LHS_MatInd_Shr2(j,:,:))*[tempIL;real(V(indIdx(j),i+1));imag(V(indIdx(j),i+1))]+...
|
|
% squeeze(LHS_MatInd_Shr3(j,:,:))*[rhsI(j);real(rhsIL(j));imag(rhsIL(j))];
|
|
% IL(j,i+1)=tempIL(1)+1j*tempIL(2);
|
|
% IR(j,i+1)=tempIRs(1)+1j*tempIRs(2);
|
|
% s(j,i+1)=tempIRs(3);
|
|
% Vm(j,i+1)=V(indIdx(j),i+1)-IL(j,i+1)*Z1(j);
|
|
% else % singular case
|
|
% if i==1
|
|
% % s and IR already generated.
|
|
% % s(j,i+1)=R2(j)*Rind1(j)*T0(j)/...
|
|
% % ((C0(indIdx(j))-R1(j)*JL0(j)+X1(j)*KL0(j))*(C0(indIdx(j))-R1(j)*JL0(j)+X1(j)*KL0(j))+...
|
|
% % (D0(indIdx(j))-X1(j)*JL0(j)-R1(j)*KL0(j))*(D0(indIdx(j))-X1(j)*JL0(j)-R1(j)*KL0(j)));
|
|
% % IR(j,i+1)=s(j,i+1)/R2(j)*((C0(indIdx(j))-R1(j)*JL0(j)+X1(j)*KL0(j))+1j*(D0(indIdx(j))-X1(j)*JL0(j)-R1(j)*KL0(j)));
|
|
% IL(j,i+1)=(V(indIdx(j),i+1)*Yeind0(j)+IR(j,i+1)+V(indIdx(j),i)*Yeind1(j)-IL(j,i)*Ye1ind1(j))/(1+Ye1ind0(j));
|
|
% Vm(j,i+1)=V(indIdx(j),i+1)-IL(j,i+1)*Z1(j);
|
|
% else
|
|
% tempIL=squeeze(LHS_MatInd_Shr(j,:,:))*[real(V(indIdx(j),i+1));imag(V(indIdx(j),i+1))]+rhsBus(:,j);
|
|
% tempIRs=-squeeze(LHS_MatInd_Shr2(j,:,:))*[tempIL;real(V(indIdx(j),i+1));imag(V(indIdx(j),i+1))]+...
|
|
% squeeze(LHS_MatInd_Shr3(j,:,:))*[rhsIx(j);real(rhsIL(j));imag(rhsIL(j))];
|
|
% IL(j,i+1)=tempIL(1)+1j*tempIL(2);
|
|
% IR(j,i+1)=tempIRs(1)+1j*tempIRs(2);
|
|
% s(j,i+1)=tempIRs(3);
|
|
% Vm(j,i+1)=V(indIdx(j),i+1)-IL(j,i+1)*Z1(j);
|
|
% end
|
|
% end
|
|
tempx=squeeze(LHS_MatInd_Full(j,:,:))*[real(V(indIdx(j),i+1));imag(V(indIdx(j),i+1))]+rhsBus(:,j);
|
|
IL(j,i+1)=tempx(3)+1j*tempx(4);
|
|
IR(j,i+1)=tempx(1)+1j*tempx(2);
|
|
s(j,i+1)=tempx(5);
|
|
Vm(j,i+1)=V(indIdx(j),i+1)-IL(j,i+1)*Z1(j);
|
|
end
|
|
end
|
|
|
|
if ~isempty(zip)
|
|
IiL(:,i+1)=(LHS_MatZip(:,1)+1j*LHS_MatZip(:,3)).*real(V(zipIdx,i+1))+(LHS_MatZip(:,2)+1j*LHS_MatZip(:,4)).*imag(V(zipIdx,i+1))+(RHSILr_full+1j*RHSILi_full);
|
|
BiL(:,i+1)=Mat_BZip(:,1).*real(V(zipIdx,i+1))+Mat_BZip(:,2).*imag(V(zipIdx,i+1))+RHS_BZip;
|
|
end
|
|
|
|
if ~isempty(syn)
|
|
IGJKd=MatGBiA*[real(V(:,i+1));imag(V(:,i+1))]+RHSIG;
|
|
JG(:,i+1)=IGJKd(1:nSyn);
|
|
KG(:,i+1)=IGJKd((nSyn+1):(2*nSyn));
|
|
d(:,i+1)=IGJKd((2*nSyn+1):(3*nSyn));
|
|
Cd(:,i+1)=A1n.*d(:,i+1)+AG0;
|
|
Sd(:,i+1)=B1n.*d(:,i+1)+BG0;
|
|
end
|
|
end
|
|
end |