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.
1260 lines
57 KiB
1260 lines
57 KiB
function [xTemp,diff,exitflag]=singleStepTRAP(SimData,SysData,SysPara,xt,t,dt,iden,AEmethod)
|
|
% Single step of trapezoidal formulation
|
|
% 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
|
|
% SimData - Simulation parameters
|
|
% SysData - System data for simulation
|
|
% SysPara - Parameters representing the events happening in the system
|
|
% xt - Initial system state
|
|
% t - Relative time compared with SysPara starting time
|
|
% dt - time step length
|
|
% iden - Aux identifier
|
|
% AEmethod - Method for solving algebraic equations
|
|
% 0 - HE
|
|
% 1 - NR
|
|
%
|
|
% OUTPUT
|
|
% xTemp - State at the new step
|
|
% diff - Error vector
|
|
% exitflag -
|
|
% 0 - Normally exit
|
|
% -1 - Fail
|
|
%
|
|
|
|
[bus,sw,pv,pq,shunt,line,ind,zip,syn,exc,tg,agc,cac,cluster]=unfoldSysData(SysData);
|
|
[nState,idxs]...
|
|
=getIndexDyn(SysData);
|
|
[pqIncr,pvIncr,Rind0,Rind1,Reind0,Reind1,Rzip0,Rzip1,Ytr0,Ytr1,Ysh0,Ysh1,VspSq2,~,~,~,~,Tmech1,Varref1,Ef1,Pm1,Eq11]=unfoldSysPara(SysPara);
|
|
[maxTime,segTime,~,nlvl,taylorN,alphaTol,diffTol,diffTolMax,method]=unfoldSimData(SimData);
|
|
|
|
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
|
|
|
|
nbus=size(bus,1);
|
|
|
|
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~=0);
|
|
ipq=find(busType==0);
|
|
npq=size(ipq,1);
|
|
npv=size(ipv,1);
|
|
|
|
% Determine the frequency model of each island
|
|
freqTypeTag=zeros(nIslands,1);%0:sw,1:syn,2:steady-state f
|
|
freqKeptTag=zeros(nbus,1);% corresponds to freqType=2
|
|
frefs=refs;
|
|
fswTag=zeros(nbus,1);
|
|
fsynTag=zeros(nbus,1);
|
|
fswTag(isw)=1;
|
|
fswTagxD=fswTag;
|
|
fsynTag(syn(:,1))=1;
|
|
D0=imag(xt(idxs.vIdx));
|
|
for isl=1:nIslands
|
|
if isempty(find(fswTag(islands==isl)==1, 1))
|
|
if isempty(find(fsynTag(islands==isl)==1, 1))
|
|
freqTypeTag(isl)=2;
|
|
busesInIsland=find(islands==isl);
|
|
[~,imin]=min(abs(D0(busesInIsland)));
|
|
frefs(isl)=busesInIsland(imin(1));
|
|
fswTagxD(frefs(isl))=1;
|
|
freqKeptTag(busesInIsland)=1;
|
|
else
|
|
freqTypeTag(isl)=1;
|
|
end
|
|
end
|
|
end
|
|
freqKeptTagxRef=freqKeptTag;
|
|
freqKeptTagxRef(frefs)=0;
|
|
nFreqKept=sum(freqKeptTag);
|
|
|
|
if ~isempty(agc)
|
|
agcExt=zeros(nbus,size(agc,2));
|
|
agcExt(agc(:,1),:)=agc;
|
|
fdk=agcExt(:,2)+agcExt(:,3); %1/R+D
|
|
else
|
|
fdk=zeros(nbus,1);
|
|
end
|
|
fIngIdx=((2*nbus+1):(3*nbus))';
|
|
|
|
stateFilterTag=ones(nState,1);
|
|
stateFilterTag(idxs.vIdx)=0;
|
|
stateFilterTag(idxs.qIdx)=0;
|
|
stateFilterTag(idxs.pgIdx)=0;
|
|
stateFilterTag(idxs.efIdx)=0;
|
|
stateFilterTag(idxs.tgovmIdx)=0;
|
|
stateFilterTag(idxs.fIdx)=0;
|
|
% stateFilterTag(dpgIdx)=0;
|
|
% busFilterTag=ones(nbus,1);
|
|
% busFilterTag(sw(:,1))=0;
|
|
% jacBusFilterTag=[busFilterTag;busFilterTag];
|
|
|
|
busTag=ones(nbus,1);
|
|
busTag(sw(:,1))=0;
|
|
jggRowTag=[busTag;busTag;freqKeptTagxRef];
|
|
jggColTag=[busTag;fswTagxD==0;freqKeptTag];
|
|
|
|
idxNonSw=find(busType~=2);
|
|
idxNonSwD=find(busType~=2&fswTagxD==1);
|
|
|
|
nInd=size(ind,1);
|
|
if ~isempty(ind)
|
|
indIdx=ind(:,1);
|
|
Rm1=ind(:,7);
|
|
Xm1=ind(:,8);
|
|
Zm1=ind(:,7)+1j*ind(:,8);
|
|
Rm2=ind(:,9);
|
|
Xm2=ind(:,10);
|
|
Zmm=1j*ind(:,13);
|
|
Tm0=ind(:,15)+ind(:,16)+ind(:,17);
|
|
Tm1=-ind(:,16)-2*ind(:,17);
|
|
Tm2=ind(:,17);
|
|
Hm=ind(:,14);
|
|
end
|
|
|
|
nSyn=size(syn,1);
|
|
if ~isempty(syn)
|
|
synIdx=syn(:,1);
|
|
wgb=syn(:,4);
|
|
model=syn(:,5);
|
|
Xgl=syn(:,6);
|
|
Rga=syn(:,7);
|
|
Xgd=syn(:,8);
|
|
Xgd1=syn(:,9);
|
|
Xgd2=syn(:,10);
|
|
Tgd1=syn(:,11);
|
|
Tgd2=syn(:,12);
|
|
Xgq=syn(:,13);
|
|
Xgq1=syn(:,14);
|
|
Xgq2=syn(:,15);
|
|
Tgq1=syn(:,16);
|
|
Tgq2=syn(:,17);
|
|
Mg=syn(:,18);
|
|
Dg=syn(:,19);
|
|
TgAA=syn(:,24);
|
|
gammad=Tgd2./Tgd1.*Xgd2./Xgd1.*(Xgd-Xgd1);
|
|
gammaq=Tgq2./Tgq1.*Xgq2./Xgq1.*(Xgq-Xgq1);
|
|
end
|
|
|
|
nExc=size(exc,1);
|
|
if ~isempty(exc)
|
|
excIdx=exc(:,1);
|
|
VavrMax=exc(:,3);
|
|
VavrMin=exc(:,4);
|
|
muavr0=exc(:,5);
|
|
Tavr1=exc(:,7);
|
|
Tavr2=exc(:,6);
|
|
vavrf0=exc(:,8);
|
|
Vavr0=exc(:,9);
|
|
Tavre=exc(:,10);
|
|
Tavrr=exc(:,11);
|
|
end
|
|
|
|
nTg=size(tg,1);
|
|
if ~isempty(tg)
|
|
tgIdx=tg(:,1);
|
|
wtgref=tg(:,3);
|
|
Rtg=tg(:,4);
|
|
Ttgmax=tg(:,5);
|
|
Ttgmin=tg(:,6);
|
|
Ttg2=tg(:,7);
|
|
Ttg1=tg(:,8);
|
|
end
|
|
|
|
[V0,Q0,s0,d0,w0,eq10,eq20,ed10,ed20,psid0,psiq0,Pm0,Ef0,Vavrm0,Vavrr0,Vavrf0,Vavrref0,tgovg0,tgovm0,tgovmech0,f0,dpg0,qplt0,vg0]=unfoldX(xt,SysData);
|
|
if ~isempty(ind)
|
|
[YshInd0,Yshind1]=getLinearInterpolatorInd(nbus,ind,s0,s0);
|
|
Ysh0x=Ysh0+YshInd0;
|
|
Ysh1x=Ysh1+Yshind1;
|
|
else
|
|
Ysh0x=zeros(nbus,1);
|
|
Ysh1x=zeros(nbus,1);
|
|
end
|
|
Ytr=Ytr0+Ytr1*t;
|
|
Ysh=Ysh0x+Ysh1x*t;
|
|
YtrNew=Ytr0+Ytr1*(t+dt);
|
|
YshNew=Ysh0x+Ysh1x*(t+dt);
|
|
|
|
SNew=-accumarray(pq(:,1),pq(:,4)+1j*pq(:,5),[nbus,1])+accumarray(pv(:,1),pv(:,4),[nbus,1]);
|
|
SNew=SNew-accumarray(pq(:,1),pqIncr(:,1)+1j*pqIncr(:,2),[nbus,1])*(t+dt)+accumarray(pv(:,1),pvIncr,[nbus,1])*(t+dt);
|
|
if size(pqIncr,2)>=4;SNew=SNew-accumarray(pq(:,1),pqIncr(:,3)+1j*pqIncr(:,4),[nbus,1])*(t+dt)*(t+dt);end
|
|
SNew=SNew-accumarray(zip(:,1),(Rzip0+Rzip1*(t+dt)).*(zip(:,7)+1j*zip(:,10)),[nbus,1]);
|
|
|
|
INew=-accumarray(zip(:,1),(Rzip0+Rzip1*(t+dt)).*(zip(:,6)-1j*zip(:,9)),[nbus,1]);
|
|
JNew=real(INew);
|
|
KNew=imag(INew);
|
|
|
|
YNew=YtrNew+sparse(1:nbus,1:nbus,YshNew,nbus,nbus);
|
|
GNew=real(YNew);BNew=imag(YNew);
|
|
|
|
% Calculate diff and jac, do N-R
|
|
Vtemp=V0;
|
|
pqx=pq;pqx(:,[4,5])=pq(:,[4,5])+pqIncr(:,1:2)*t;if size(pqIncr,2)>=4;pqx(:,[4,5])=pqx(:,[4,5])+pqIncr(:,3:4)*t*t;end
|
|
pvx=pv;pvx(:,4)=pv(:,4)+pvIncr*t;
|
|
indx=ind;if ~isempty(ind);indx(:,15:17)=ind(:,15:17).*repmat(Rind0+Rind1*t,1,3);indx(:,13)=ind(:,13)./(Reind0+Reind1*t);end
|
|
zipx=zip;if ~isempty(zip);zipx(:,5:10)=zip(:,5:10).*repmat(Rzip0+Rzip1*t,1,6);end
|
|
SysDatax=foldSysData(bus,sw,pvx,pqx,shunt,line,indx,zipx,syn,exc,tg,agc,cac,cluster);
|
|
|
|
pqxx=pq;pqxx(:,[4,5])=pq(:,[4,5])+pqIncr(:,1:2)*(t+dt);if size(pqIncr,2)>=4;pqxx(:,[4,5])=pqxx(:,[4,5])+pqIncr(:,3:4)*(t+dt)*(t+dt);end
|
|
pvxx=pv;pvxx(:,4)=pv(:,4)+pvIncr*(t+dt);
|
|
indxx=ind;if ~isempty(ind);indxx(:,15:17)=ind(:,15:17).*repmat(Rind0+Rind1*(t+dt),1,3);indxx(:,13)=ind(:,13)./(Reind0+Reind1*(t+dt));end
|
|
zipxx=zip;if ~isempty(zip);zipxx(:,5:10)=zip(:,5:10).*repmat(Rzip0+Rzip1*(t+dt),1,6);end
|
|
SysDataxx=foldSysData(bus,sw,pvxx,pqxx,shunt,line,indxx,zipxx,syn,exc,tg,agc,cac,cluster);
|
|
|
|
SysData=foldSysData(bus,sw,pvx,pqx,shunt,line,ind,zip,syn,exc,tg,agc,cac,cluster);
|
|
dx1=integ(SysDatax,SysPara,xt,dt);
|
|
xTemp=xt;
|
|
xTemp=xTemp+dx1;
|
|
|
|
iterMax=10;
|
|
exitflag=-1;
|
|
for iter=1:iterMax
|
|
% calculate df and dg
|
|
dx2=integ(SysDataxx,SysPara,xTemp,dt);
|
|
diffF=xt-xTemp+(dx1+dx2)/2;
|
|
diffF(stateFilterTag==0)=0;
|
|
|
|
Ctemp=real(Vtemp);
|
|
Dtemp=imag(Vtemp);
|
|
Atemp=abs(Vtemp);
|
|
Vgtemp=Vtemp(syn(:,1));
|
|
ftemp=xTemp(idxs.fIdx);
|
|
|
|
eq0=Ef0;ed0=zeros(size(Ef0));
|
|
[~,~,sNew,dNew,wNew,eq1New,eq2New,ed1New,ed2New,psidNew,psiqNew,EdNew,EfNew,VavrmNew,VavrrNew,VavrfNew,VavrrefNew,tgovgNew,tgovmNew,tgovmechNew,fNew,dpgNew,qpltNew,vgNew]=unfoldX(xTemp,SysData);
|
|
eqNew=EfNew;edNew=zeros(size(EfNew));
|
|
|
|
[MatGV0,MatGV1,MatGRhs0,MatGRhs1]=getLinearInterpolatorSyn(syn,[],d0,dNew,ed0,ed10,ed20,edNew,ed1New,ed2New,eq0,eq10,eq20,eqNew,eq1New,eq2New,psid0,psiq0,psidNew,psiqNew);
|
|
|
|
MatGVNew=MatGV0+MatGV1;
|
|
MatGRhsNew=MatGRhs0+MatGRhs1;
|
|
J1=GNew+sparse(syn(:,1),syn(:,1),MatGVNew(:,1),nbus,nbus);
|
|
J2=-BNew+sparse(syn(:,1),syn(:,1),MatGVNew(:,2),nbus,nbus);
|
|
J3=BNew+sparse(syn(:,1),syn(:,1),MatGVNew(:,3),nbus,nbus);
|
|
J4=GNew+sparse(syn(:,1),syn(:,1),MatGVNew(:,4),nbus,nbus);
|
|
P2freq=sparse(1:nbus,1:nbus,-freqKeptTag.*fdk,nbus,nbus);
|
|
Freq2freq=sparse([1:nbus,1:nbus],[1:nbus,frefs(islands)'],[ones(1,nbus),-ones(1,nbus)],nbus,nbus);
|
|
|
|
Ig=accumarray(syn(:,1),MatGRhsNew(:,1)+1j*MatGRhsNew(:,2),[nbus,1])-...
|
|
accumarray(syn(:,1),(MatGVNew(:,1).*real(Vgtemp)+MatGVNew(:,2).*imag(Vgtemp))+1j*(MatGVNew(:,3).*real(Vgtemp)+MatGVNew(:,4).*imag(Vgtemp)),[nbus,1]);
|
|
% diffG=conj(SNew)+INew.*abs(Vtemp)+Ig.*conj(Vtemp)-(YNew*Vtemp).*conj(Vtemp)+freqKeptTag.*(dpgNew-fdk.*fNew);
|
|
% diffG(busFilterTag==0)=0;
|
|
% diffGf=zeros(nbus,1);
|
|
|
|
diff=conj(SNew)+INew.*abs(Vtemp)+Ig.*conj(Vtemp)-(YNew*Vtemp).*conj(Vtemp);
|
|
diffP=real(diff)+freqKeptTag.*(-fdk.*ftemp+dpg0);
|
|
diffVQ=imag(diff);
|
|
diffGf=ftemp-ftemp(frefs(islands));
|
|
if ~isempty(pv)
|
|
diffVQ(pv(:,1))=abs(Vtemp(pv(:,1))).*abs(Vtemp(pv(:,1)))-(VspSq2(pv(:,1),1)+VspSq2(pv(:,1),2)*(t+dt));
|
|
end
|
|
|
|
diffGx=[diffP;diffVQ;diffGf];
|
|
diffGx(jggRowTag==0)=0;
|
|
|
|
if iter>1&&max(abs([diffF;diffGx]))<diffTol
|
|
exitflag=0;
|
|
break;
|
|
end
|
|
|
|
% construct Jgg
|
|
dCtemp=sparse(1:nbus,1:nbus,Ctemp,nbus,nbus);
|
|
dDtemp=sparse(1:nbus,1:nbus,Dtemp,nbus,nbus);
|
|
Jac1=[dCtemp*J1+dDtemp*J3,dCtemp*J2+dDtemp*J4;...
|
|
dCtemp*J3-dDtemp*J1,dCtemp*J4-dDtemp*J2];
|
|
Jac2=[sparse(1:nbus,1:nbus,J1*Ctemp+J2*Dtemp,nbus,nbus),sparse(1:nbus,1:nbus,J3*Ctemp+J4*Dtemp,nbus,nbus);...
|
|
sparse(1:nbus,1:nbus,J3*Ctemp+J4*Dtemp,nbus,nbus),-sparse(1:nbus,1:nbus,J1*Ctemp+J2*Dtemp,nbus,nbus)];
|
|
Jac3=[sparse(1:nbus,1:nbus,JNew.*Ctemp./Atemp,nbus,nbus),sparse(1:nbus,1:nbus,JNew.*Dtemp./Atemp,nbus,nbus);...
|
|
sparse(1:nbus,1:nbus,KNew.*Ctemp./Atemp,nbus,nbus),sparse(1:nbus,1:nbus,KNew.*Dtemp./Atemp,nbus,nbus)];
|
|
Jac4=[sparse(syn(:,1),syn(:,1),MatGRhsNew(:,1),nbus,nbus),sparse(syn(:,1),syn(:,1),MatGRhsNew(:,2),nbus,nbus);...
|
|
sparse(syn(:,1),syn(:,1),MatGRhsNew(:,2),nbus,nbus),-sparse(syn(:,1),syn(:,1),MatGRhsNew(:,1),nbus,nbus)];
|
|
Jac=Jac3+Jac4-Jac1-Jac2;
|
|
|
|
JacVc=sparse(1:nbus,1:nbus,2*Ctemp,nbus,nbus);
|
|
JacVd=sparse(1:nbus,1:nbus,2*Dtemp,nbus,nbus);
|
|
|
|
Jac(nbus+ipv,:)=[JacVc(ipv,:),JacVd(ipv,:)];
|
|
|
|
Jgg=[Jac,[P2freq;sparse(nbus,nbus)];...
|
|
sparse(nbus,2*nbus),Freq2freq];
|
|
|
|
% construct Jgf
|
|
|
|
jgfi=zeros(0,1);
|
|
jgfj=zeros(0,1);
|
|
jgfv=zeros(0,1);
|
|
jfgi=zeros(0,1);
|
|
jfgj=zeros(0,1);
|
|
jfgv=zeros(0,1);
|
|
jffi=zeros(0,1);
|
|
jffj=zeros(0,1);
|
|
jffv=zeros(0,1);
|
|
|
|
if ~isempty(ind)
|
|
% s
|
|
deltasx=1e-3;
|
|
Zind0=Zm1+Zmm.*(Rm2+1j*Xm2.*sNew)./(Rm2+(Zmm+1j*Xm2).*sNew);
|
|
Yind0=1./Zind0;
|
|
|
|
ZindNew=Zm1+Zmm.*(Rm2+1j*Xm2.*(sNew+deltasx))./(Rm2+(Zmm+1j*Xm2).*(sNew+deltasx));
|
|
YindNew=1./ZindNew;
|
|
|
|
Yshind1x=YindNew-Yind0;
|
|
jgfi=[jgfi;indIdx;indIdx+nbus];
|
|
jgfj=[jgfj;idxs.sIdx;idxs.sIdx];
|
|
jgfv=[jgfv;Vtemp(indIdx).*conj(Vtemp(indIdx)).*real(Yshind1x/deltasx);Vtemp(indIdx).*conj(Vtemp(indIdx)).*imag(Yshind1x/deltasx)];
|
|
end
|
|
|
|
if ~isempty(syn)
|
|
Vgtemp=Vtemp(synIdx);
|
|
Cgtemp=real(Vgtemp);
|
|
Dgtemp=imag(Vgtemp);
|
|
|
|
cosd0=cos(dNew);
|
|
sind0=sin(dNew);
|
|
deltadNew=1e-5*abs(dNew)+1e-6;
|
|
cosdx=cos(dNew+deltadNew);
|
|
sindx=sin(dNew+deltadNew);
|
|
|
|
MatGV0x=zeros(nSyn,4);
|
|
MatGV1x=zeros(nSyn,4);
|
|
|
|
MatGRhs0x=zeros(nSyn,2);
|
|
MatGRhs1x=zeros(nSyn,2);
|
|
|
|
for i=1:nSyn
|
|
Mg0=[sind0(i),-cosd0(i);cosd0(i),sind0(i)];
|
|
Mgx=[sindx(i),-cosdx(i);cosdx(i),sindx(i)];
|
|
if model(i)==6||model(i)==5
|
|
Yg=[Rga(i),Xgq2(i);-Xgd2(i),Rga(i)]/(Rga(i)*Rga(i)+Xgd2(i)*Xgq2(i));
|
|
Mxye=Mg0'*Yg;
|
|
Mdqe=Yg;
|
|
dIdq=-Yg*(Mgx-Mg0)*[Cgtemp(i);Dgtemp(i)]/deltadNew(i);
|
|
dVdq=-Yg*Mg0;
|
|
jgfi=[jgfi;synIdx(i);synIdx(i);synIdx(i)+nbus;synIdx(i)+nbus];
|
|
jgfj=[jgfj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.ed2Idx(i);idxs.eq2Idx(i)];
|
|
jgfv=[jgfv;Cgtemp(i)*Mxye(1,1)+Dgtemp(i)*Mxye(2,1);Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2);Cgtemp(i)*Mxye(2,1)-Dgtemp(i)*Mxye(1,1);Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2)];
|
|
|
|
jffi=[jffi;idxs.eq2Idx(i);idxs.eq2Idx(i);idxs.eq2Idx(i)];
|
|
jffj=[jffj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,1)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,2)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*dIdq(1)/Tgd2(i)];
|
|
jffi=[jffi;idxs.ed2Idx(i);idxs.ed2Idx(i);idxs.ed2Idx(i)];
|
|
jffj=[jffj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,1)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,2)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*dIdq(2)/Tgq2(i)];
|
|
jffi=[jffi;idxs.eq1Idx(i);idxs.eq1Idx(i);idxs.eq1Idx(i)];
|
|
jffj=[jffj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,2)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*dIdq(1)/Tgd1(i)];
|
|
if model(i)==6
|
|
jffi=[jffi;idxs.ed1Idx(i);idxs.ed1Idx(i);idxs.ed1Idx(i)];
|
|
jffj=[jffj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,2)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*dIdq(2)/Tgq1(i)];
|
|
end
|
|
|
|
jfgi=[jfgi;idxs.eq2Idx(i);idxs.eq2Idx(i)];
|
|
jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
jfgv=[jfgv;-(Xgd1(i)-Xgd2(i)+gammad(i))*dVdq(1,1)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*dVdq(1,2)/Tgd2(i)];
|
|
jfgi=[jfgi;idxs.ed2Idx(i);idxs.ed2Idx(i)];
|
|
jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
jfgv=[jfgv;(Xgq1(i)-Xgq2(i)+gammaq(i))*dVdq(2,1)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*dVdq(2,2)/Tgq2(i)];
|
|
jfgi=[jfgi;idxs.eq1Idx(i);idxs.eq1Idx(i)];
|
|
jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
jfgv=[jfgv;-(Xgd(i)-Xgd1(i)-gammad(i))*dVdq(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*dVdq(1,2)/Tgd1(i)];
|
|
if model(i)==6
|
|
jfgi=[jfgi;idxs.ed1Idx(i);idxs.ed1Idx(i)];
|
|
jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
jfgv=[jfgv;(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,2)/Tgq1(i)];
|
|
end
|
|
|
|
MatGRhs0x(i,:)=(Mg0'*Yg*[ed2New(i);eq2New(i)]).';
|
|
MatGRhs1x(i,:)=(Mgx'*Yg*[ed2New(i);eq2New(i)]).'-MatGRhs0x(i,:);
|
|
elseif model(i)==4
|
|
Yg=[Rga(i),Xgq1(i);-Xgd1(i),Rga(i)]/(Rga(i)*Rga(i)+Xgd1(i)*Xgq1(i));
|
|
Mxye=Mg0'*Yg;
|
|
Mdqe=Yg;
|
|
dVdq=-Yg*Mg0;
|
|
dIdq=-Yg*(Mgx-Mg0)*[Cgtemp(i);Dgtemp(i)]/deltadNew(i);
|
|
jgfi=[jgfi;synIdx(i);synIdx(i);synIdx(i)+nbus;synIdx(i)+nbus];
|
|
jgfj=[jgfj;idxs.ed1Idx(i);idxs.eq1Idx(i);idxs.ed1Idx(i);idxs.eq1Idx(i)];
|
|
jgfv=[jgfv;Cgtemp(i)*Mxye(1,1)+Dgtemp(i)*Mxye(2,1);Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2);Cgtemp(i)*Mxye(2,1)-Dgtemp(i)*Mxye(1,1);Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2)];
|
|
|
|
jffi=[jffi;idxs.eq1Idx(i);idxs.eq1Idx(i);idxs.eq1Idx(i)];
|
|
jffj=[jffj;idxs.ed1Idx(i);idxs.eq1Idx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;-(Xgd(i)-Xgd1(i))*Mdqe(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i))*Mdqe(1,2)/Tgd1(i);-(Xgd(i)-Xgd1(i))*dIdq(1)/Tgd1(i)];
|
|
jffi=[jffi;idxs.ed1Idx(i);idxs.ed1Idx(i);idxs.ed1Idx(i)];
|
|
jffj=[jffj;idxs.ed1Idx(i);idxs.eq1Idx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;(Xgq(i)-Xgq1(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i))*Mdqe(2,2)/Tgq1(i);(Xgq(i)-Xgq1(i))*dIdq(2)/Tgq1(i)];
|
|
|
|
jfgi=[jfgi;idxs.eq1Idx(i);idxs.eq1Idx(i)];
|
|
jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
jfgv=[jfgv;-(Xgd(i)-Xgd1(i))*dVdq(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i))*dVdq(1,2)/Tgd1(i)];
|
|
jfgi=[jfgi;idxs.ed1Idx(i);idxs.ed1Idx(i)];
|
|
jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
jfgv=[jfgv;(Xgq(i)-Xgq1(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i))*Mdqe(2,2)/Tgq1(i)];
|
|
|
|
MatGRhs0x(i,:)=(Mg0'*Yg*[ed1New(i);eq1New(i)]).';
|
|
MatGRhs1x(i,:)=(Mgx'*Yg*[ed1New(i);eq1New(i)]).'-MatGRhs0x(i,:);
|
|
elseif model(i)==3||model(i)==2
|
|
Yg=[Rga(i),Xgq(i);-Xgd1(i),Rga(i)]/(Rga(i)*Rga(i)+Xgd1(i)*Xgq(i));
|
|
Mxye=Mg0'*Yg;
|
|
Mdqe=Yg;
|
|
dVdq=-Yg*Mg0;
|
|
dIdq=-Yg*(Mgx-Mg0)*[Cgtemp(i);Dgtemp(i)]/deltadNew(i);
|
|
if model(i)==3
|
|
jgfi=[jgfi;synIdx(i);synIdx(i)+nbus];
|
|
jgfj=[jgfj;idxs.eq1Idx(i);idxs.eq1Idx(i)];
|
|
jgfv=[jgfv;Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2);Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2)];
|
|
jffi=[jffi;idxs.eq1Idx(i);idxs.eq1Idx(i)];
|
|
jffj=[jffj;idxs.eq1Idx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;-(Xgd(i)-Xgd1(i))*Mdqe(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i))*dIdq(1)/Tgd1(i)];
|
|
jfgi=[jfgi;idxs.eq1Idx(i);idxs.eq1Idx(i)];
|
|
jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
jfgv=[jfgv;-(Xgd(i)-Xgd1(i))*dVdq(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i))*dVdq(1,2)/Tgd1(i)];
|
|
end
|
|
|
|
MatGRhs0x(i,:)=(Mg0'*Yg*[edNew(i);eq1New(i)]).';
|
|
MatGRhs1x(i,:)=(Mgx'*Yg*[edNew(i);eq1New(i)]).'-MatGRhs0x(i,:);
|
|
elseif model(i)==8
|
|
Yg=zeros(2);
|
|
Mxye=Mg0'*diag([1/Xgd2(i);1/Xgq2(i)]);
|
|
Mdqe=diag([1/Xgd2(i);1/Xgq2(i)]);
|
|
dVdq=-Yg*Mg0;
|
|
dIdq=-Yg*(Mgx-Mg0)*[Cgtemp(i);Dgtemp(i)]/deltadNew(i);
|
|
jgfi=[jgfi;synIdx(i);synIdx(i);synIdx(i)+nbus;synIdx(i)+nbus];
|
|
jgfj=[jgfj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.ed2Idx(i);idxs.eq2Idx(i)];
|
|
jgfv=[jgfv;-(Cgtemp(i)*Mxye(1,1)+Dgtemp(i)*Mxye(2,1));Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2);-(Cgtemp(i)*Mxye(2,1)-Dgtemp(i)*Mxye(1,1));Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2)];
|
|
jgfi=[jgfi;synIdx(i);synIdx(i);synIdx(i)+nbus;synIdx(i)+nbus];
|
|
jgfj=[jgfj;idxs.psiqIdx(i);idxs.psidIdx(i);idxs.psiqIdx(i);idxs.psidIdx(i)];
|
|
jgfv=[jgfv;-(Cgtemp(i)*Mxye(1,1)+Dgtemp(i)*Mxye(2,1));-(Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2));-(Cgtemp(i)*Mxye(2,1)-Dgtemp(i)*Mxye(1,1));-(Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2))];
|
|
|
|
jffi=[jffi;idxs.eq2Idx(i);idxs.eq2Idx(i);idxs.eq2Idx(i);idxs.eq2Idx(i);idxs.eq2Idx(i)];
|
|
jffj=[jffj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.psiqIdx(i);idxs.psidIdx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,1)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,2)/Tgd2(i);...
|
|
-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,1)/Tgd2(i);(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,2)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*dIdq(1)/Tgd2(i)];
|
|
jffi=[jffi;idxs.ed2Idx(i);idxs.ed2Idx(i);idxs.ed2Idx(i);idxs.ed2Idx(i);idxs.ed2Idx(i)];
|
|
jffj=[jffj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.psiqIdx(i);idxs.psidIdx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,1)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,2)/Tgq2(i);...
|
|
(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,1)/Tgq2(i);-(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,2)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*dIdq(2)/Tgq2(i)];
|
|
jffi=[jffi;idxs.eq1Idx(i);idxs.eq1Idx(i);idxs.eq1Idx(i);idxs.eq1Idx(i);idxs.eq1Idx(i)];
|
|
jffj=[jffj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.psiqIdx(i);idxs.psidIdx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,2)/Tgd1(i);...
|
|
-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,1)/Tgd1(i);(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,2)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*dIdq(1)/Tgd1(i)];
|
|
jffi=[jffi;idxs.ed1Idx(i);idxs.ed1Idx(i);idxs.ed1Idx(i);idxs.ed1Idx(i);idxs.ed1Idx(i)];
|
|
jffj=[jffj;idxs.ed2Idx(i);idxs.eq2Idx(i);idxs.psiqIdx(i);idxs.psidIdx(i);idxs.deltaIdx(i)];
|
|
jffv=[jffv;(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,2)/Tgq1(i);...
|
|
(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,1)/Tgq1(i);-(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,2)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*dIdq(2)/Tgq1(i)];
|
|
|
|
MatGRhs0x(i,:)=(Mg0'*[(eq2New(i)-psidNew(i))/Xgd2(i);(-ed2New(i)-psiqNew(i))/Xgq2(i)]).';
|
|
MatGRhs1x(i,:)=(Mgx'*[(eq2New(i)-psidNew(i))/Xgd2(i);(-ed2New(i)-psiqNew(i))/Xgq2(i)]).'-MatGRhs0x(i,:);
|
|
end
|
|
MatVg0x=Mg0'*Yg*Mg0;
|
|
MatVgNewx=Mgx'*Yg*Mgx;
|
|
MatGV0x(i,:)=[MatVg0x(1,1),MatVg0x(1,2),MatVg0x(2,1),MatVg0x(2,2)];
|
|
MatGV1x(i,:)=[MatVgNewx(1,1),MatVgNewx(1,2),MatVgNewx(2,1),MatVgNewx(2,2)]-MatGV0x(i,:);
|
|
|
|
jgfi=[jgfi;synIdx(i);synIdx(i)+nbus];
|
|
jgfj=[jgfj;idxs.deltaIdx(i);idxs.deltaIdx(i)];
|
|
jgfv=[jgfv;...
|
|
(Cgtemp(i)*(MatGRhs1x(i,1)-MatGV1x(i,1)*Cgtemp(i)-MatGV1x(i,2)*Dgtemp(i))+Dgtemp(i)*(MatGRhs1x(i,2)-MatGV1x(i,3)*Cgtemp(i)-MatGV1x(i,4)*Dgtemp(i)))/deltadNew(i);...
|
|
(-Dgtemp(i)*(MatGRhs1x(i,1)-MatGV1x(i,1)*Cgtemp(i)-MatGV1x(i,2)*Dgtemp(i))+Cgtemp(i)*(MatGRhs1x(i,2)-MatGV1x(i,3)*Cgtemp(i)-MatGV1x(i,4)*Dgtemp(i)))/deltadNew(i)];
|
|
end
|
|
|
|
end
|
|
Jgf=sparse(jgfi,jgfj,jgfv,3*nbus,nState);
|
|
|
|
% construct Jff & Jfg
|
|
|
|
if ~isempty(ind)
|
|
% s
|
|
jffi=[jffi;idxs.sIdx];
|
|
jffj=[jffj;idxs.sIdx];
|
|
divs=((Rm2+Rm1.*sNew).*(Rm2+Rm1.*sNew)+(Xm2+Xm1).*(Xm2+Xm1).*sNew.*sNew);
|
|
jffv=[jffv;(Tm1+2*Tm2.*sNew+Vtemp(indIdx).*conj(Vtemp(indIdx)).*Rm2.*(1./divs-2*sNew.*(sNew.*(Xm2+Xm1).*(Xm2+Xm1)+Rm1.*(Rm2+Rm1.*sNew))./divs./divs))/2./Hm];
|
|
% il=V(indIdx).*yind;
|
|
% ir=il-(V(indIdx)-il.*Zm1)./Zmm;
|
|
% dx(sIdx)=dt*((Tm0+Tm1.*s+Tm2.*s.*s)-ir.*conj(ir).*Rm2./s)/2./Hm;
|
|
|
|
yind=1./(Zm1+Zmm.*(Rm2+1j*Xm2.*sNew)./(Rm2+sNew.*(Zmm+1j*Xm2)));
|
|
yInds=(1+Zm1./Zmm).*yind-1./Zmm;
|
|
yIndsRs=yInds.*conj(yInds).*Rm2./sNew;
|
|
yIndsRs(isnan(yIndsRs))=0;
|
|
jfgi=[jfgi;idxs.sIdx;idxs.sIdx];
|
|
jfgj=[jfgj;indIdx;indIdx+nbus];
|
|
jfgv=[jfgv;2*real(Vtemp(indIdx)).*yIndsRs/2./Hm;2*imag(Vtemp(indIdx)).*yIndsRs/2./Hm];
|
|
end
|
|
|
|
if ~isempty(syn)
|
|
if ~isempty(tg)
|
|
pActiveInSyn=ones(nSyn,1);
|
|
tgovmActive=ones(nTg,1);
|
|
tgovmActive((tgovm0-Ttgmax)>0)=0;
|
|
tgovmActive((tgovm0-Ttgmin)<0)=0;
|
|
pActiveInSyn(tgIdx)=tgovmActive;
|
|
% else
|
|
% tgIdx=[];
|
|
% tgovmActive=zeros(nTg,1);
|
|
% pActiveInSyn=zeros(nTg,1);
|
|
end
|
|
if ~isempty(exc)
|
|
texcActive=ones(nExc,1);
|
|
texcActive((Vavrf0-VavrMax)>0)=0;
|
|
texcActive((Vavrf0-VavrMin)<0)=0;
|
|
texcActiveInSyn=zeros(nSyn,1);
|
|
texcActiveInSyn(tgIdx)=texcActive;
|
|
end
|
|
numSynOnBus=accumarray(syn(:,1),1,[nbus,1]);
|
|
%delta
|
|
jffi=[jffi;idxs.deltaIdx];
|
|
jffj=[jffj;idxs.omegaIdx];
|
|
jffv=[jffv;wgb];
|
|
%omega
|
|
jffi=[jffi;idxs.omegaIdx;idxs.omegaIdx(tgIdx);idxs.omegaIdx(tgIdx);idxs.omegaIdx(tgIdx);idxs.omegaIdx];
|
|
jffj=[jffj;idxs.omegaIdx;idxs.tgovgIdx;idxs.omegaIdx(tgIdx);idxs.tmechIdx;idxs.dpgIdx(synIdx)];
|
|
jffv=[jffv;-Dg/2./Mg;tgovmActive;-tgovmActive.*Ttg1./Ttg2./Rtg;tgovmActive;pActiveInSyn./numSynOnBus(synIdx)];
|
|
%psiq
|
|
jffi=[jffi;idxs.psidIdx(model>=8)];
|
|
jffj=[jffj;idxs.psiqIdx(model>=8)];
|
|
jffv=[jffv;wgb(model>=8)];
|
|
%psid
|
|
jffi=[jffi;idxs.psiqIdx(model>=8)];
|
|
jffj=[jffj;idxs.psidIdx(model>=8)];
|
|
jffv=[jffv;-wgb(model>=8)];
|
|
%ed''
|
|
jffi=[jffi;idxs.ed2Idx(model>=5);idxs.ed2Idx(model>=5)];
|
|
jffj=[jffj;idxs.ed2Idx(model>=5);idxs.ed1Idx(model>=5)];
|
|
jffv=[jffv;-1./Tgq2(model>=5);1./Tgq2(model>=5)];
|
|
%eq''
|
|
jffi=[jffi;idxs.eq2Idx(model>=5);idxs.eq2Idx(model>=5);idxs.eq2Idx(model>=5&texcActiveInSyn==1)];
|
|
jffj=[jffj;idxs.eq2Idx(model>=5);idxs.eq1Idx(model>=5);idxs.vavrfIdx(texcActive==1&model(excIdx)>=5)];
|
|
jffv=[jffv;-1./Tgd2(model>=5);1./Tgd2(model>=5);TgAA(model>=5&texcActiveInSyn==1)./Tgd1(model>=5&texcActiveInSyn==1)./Tgd2(model>=5&texcActiveInSyn==1)];
|
|
%ed'
|
|
jffi=[jffi;idxs.ed1Idx(model>=4)];
|
|
jffj=[jffj;idxs.ed1Idx(model>=4)];
|
|
jffv=[jffv;-1./Tgq1(model>=4)];
|
|
%eq'
|
|
jffi=[jffi;idxs.eq1Idx(model>=3)];
|
|
jffj=[jffj;idxs.eq1Idx(model>=3)];
|
|
jffv=[jffv;-1./Tgd1(model>=3)];
|
|
jffi=[jffi;idxs.eq1Idx(model>=5&texcActiveInSyn==1)];
|
|
jffj=[jffj;idxs.vavrfIdx(texcActive==1&model(excIdx)>=5)];
|
|
jffv=[jffv;(1-TgAA(model>=5&texcActiveInSyn==1)./Tgd1(model>=5&texcActiveInSyn==1))./Tgd2(model>=5&texcActiveInSyn==1)];
|
|
jffi=[jffi;idxs.eq1Idx((model==3|model==4)&texcActiveInSyn==1)];
|
|
jffj=[jffj;idxs.vavrfIdx(texcActive==1&(model(excIdx)==3|model(excIdx)==4))];
|
|
jffv=[jffv;(1-TgAA((model==3|model==4)&texcActiveInSyn==1)./Tgd1((model==3|model==4)&texcActiveInSyn==1))./Tgd2((model==3|model==4)&texcActiveInSyn==1)];
|
|
end
|
|
|
|
if ~isempty(tg)
|
|
jffi=[jffi;idxs.tgovgIdx;idxs.tgovgIdx];
|
|
jffj=[jffj;idxs.omegaIdx;idxs.tgovgIdx];
|
|
jffv=[jffv;-(1-Ttg1./Ttg2)./Rtg./Ttg2;-1./Ttg2];
|
|
end
|
|
|
|
if ~isempty(exc)
|
|
VmagAvr=abs(Vtemp(synIdx(excIdx)));
|
|
|
|
jffi=[jffi;idxs.vavrmIdx];
|
|
jffj=[jffj;idxs.vavrmIdx];
|
|
jffv=[jffv;-1./Tavrr];
|
|
|
|
jffi=[jffi;idxs.vavrrIdx;idxs.vavrrIdx;idxs.vavrrIdx];
|
|
jffj=[jffj;idxs.vavrmIdx;idxs.vavrrefIdx;idxs.vavrrIdx];
|
|
jffv=[jffv;-muavr0.*(1-Tavr1./Tavr2)./Tavr2;muavr0.*(1-Tavr1./Tavr2)./Tavr2;-1./Tavr2];
|
|
|
|
jffi=[jffi;idxs.vavrfIdx;idxs.vavrfIdx;idxs.vavrfIdx;idxs.vavrfIdx];
|
|
jffj=[jffj;idxs.vavrmIdx;idxs.vavrrefIdx;idxs.vavrrIdx;idxs.vavrfIdx];
|
|
jffv=[jffv;-muavr0.*Tavr1./Tavr2./Tavre.*VmagAvr./Vavr0;muavr0.*Tavr1./Tavr2./Tavre.*VmagAvr./Vavr0;VmagAvr./Vavr0./Tavre;-1./Tavre];
|
|
end
|
|
|
|
if ~isempty(agc)
|
|
agcExt=zeros(nbus,size(agc,2));
|
|
agcExt(agc(:,1),:)=agc;
|
|
|
|
jfgi=[jfgi;idxs.dpgIdx(freqKeptTag==1)];
|
|
jfgj=[jfgj;idxs.fIngIdx(freqKeptTag==1)];%f
|
|
jfgv=[jfgv;-agcExt(freqKeptTag==1,4)];
|
|
|
|
numSynOnBus=accumarray(syn(:,1),1,[nbus,1]);
|
|
jffi=[jffi;idxs.dpgIdx(syn(:,1))];
|
|
jffj=[jffj;idxs.omegaIdx];%f
|
|
jffv=[jffv;-agcExt(syn(:,1),4)./numSynOnBus(syn(:,1))];
|
|
end
|
|
|
|
Jff=dt*sparse(jffi,jffj,jffv,nState,nState)/2-speye(nState,nState);
|
|
|
|
% construct Jfg
|
|
Jfg=dt*sparse(jfgi,jfgj,jfgv,nState,3*nbus)/2; %P,Q,f
|
|
|
|
jac=[Jff(stateFilterTag==1,stateFilterTag==1),Jfg(stateFilterTag==1,jggColTag==1);Jgf(jggRowTag==1,stateFilterTag==1),Jgg(jggRowTag==1,jggColTag==1)];
|
|
|
|
correction=-jac\[diffF(stateFilterTag==1);diffGx(jggRowTag==1)];
|
|
nStateCorr=sum(stateFilterTag);
|
|
xTemp(stateFilterTag==1)=xTemp(stateFilterTag==1)+correction(1:nStateCorr);
|
|
corrFull=zeros(3*nbus,1);
|
|
corrFull(jggRowTag==1)=correction((nStateCorr+1):end);
|
|
Vtemp=Vtemp+corrFull(1:nbus)+1j*corrFull((nbus+1):(2*nbus));
|
|
xTemp(idxs.vIdx)=Vtemp;
|
|
xTemp(idxs.fIdx)=corrFull(fIngIdx);
|
|
xTemp=adjustAlgebraic(SysDataxx,xTemp);
|
|
end
|
|
|
|
dxc=(xTemp-xt)/dt;
|
|
SysParaxx=foldSysPara([],[],[],[],[],[],[],[],Ytr0+Ytr1*(t+dt),[],Ysh0+Ysh1*(t+dt),[],[VspSq2(:,1)+VspSq2(:,2)*(t+dt),zeros(size(VspSq2,1),1)],[],[],[],[]);
|
|
diff=checkEquationBalanceSynDyn(SysDataxx,SysParaxx,xTemp,dxc);
|
|
|
|
end
|
|
% % function [xTemp,diff,exitflag]=singleStepTRAP(SimData,SysData,SysPara,xt,t,dt,iden,AEmethod)
|
|
% % % Single step of trapezoidal formulation
|
|
% % % Copyright (C) Rui Yao <yaorui.thu@gmail.com>
|
|
% % %
|
|
% % % INPUT
|
|
% % % SimData - Simulation parameters
|
|
% % % SysData - System data for simulation
|
|
% % % SysPara - Parameters representing the events happening in the system
|
|
% % % xt - Initial system state
|
|
% % % t - Relative time compared with SysPara starting time
|
|
% % % dt - time step length
|
|
% % % iden - Aux identifier
|
|
% % % AEmethod - Method for solving algebraic equations
|
|
% % % 0 - HE
|
|
% % % 1 - NR
|
|
% % %
|
|
% % % OUTPUT
|
|
% % % xTemp - State at the new step
|
|
% % % diff - Error vector
|
|
% % % exitflag -
|
|
% % % 0 - Normally exit
|
|
% % % -1 - Fail
|
|
% % %
|
|
% %
|
|
% % [bus,sw,pv,pq,shunt,line,ind,zip,syn,exc,tg,agc,cac,cluster]=unfoldSysData(SysData);
|
|
% % % [nState,vIdx,qIdx,sIdx,deltaIdx,omegaIdx,eq1Idx,eq2Idx,ed1Idx,ed2Idx,psidIdx,psiqIdx,pgIdx,efIdx,...
|
|
% % % vavrmIdx,vavrrIdx,vavrfIdx,vavrrefIdx,tgovgIdx,tgovmIdx,tmechIdx,fIdx,dpgIdx,qpltIdx,vgIdx]...
|
|
% % % =getIndexDyn(SysData);
|
|
% % [nState,idxs]...
|
|
% % =getIndexDyn(SysData);
|
|
% % [pqIncr,pvIncr,Rind0,Rind1,Reind0,Reind1,Rzip0,Rzip1,Ytr0,Ytr1,Ysh0,Ysh1,VspSq2,~,~,~,~,Tmech1,Varref1,Ef1,Pm1,Eq11]=unfoldSysPara(SysPara);
|
|
% % [maxTime,segTime,~,nlvl,taylorN,alphaTol,diffTol,diffTolMax,method]=unfoldSimData(SimData);
|
|
% %
|
|
% % 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
|
|
% %
|
|
% % nbus=size(bus,1);
|
|
% %
|
|
% % 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~=0);
|
|
% % ipq=find(busType==0);
|
|
% % npq=size(ipq,1);
|
|
% % npv=size(ipv,1);
|
|
% %
|
|
% % % Determine the frequency model of each island
|
|
% % freqTypeTag=zeros(nIslands,1);%0:sw,1:syn,2:steady-state f
|
|
% % freqKeptTag=zeros(nbus,1);% corresponds to freqType=2
|
|
% % frefs=refs;
|
|
% % fswTag=zeros(nbus,1);
|
|
% % fsynTag=zeros(nbus,1);
|
|
% % fswTag(isw)=1;
|
|
% % fswTagxD=fswTag;
|
|
% % fsynTag(syn(:,1))=1;
|
|
% % D0=imag(xt(vIdx));
|
|
% % for isl=1:nIslands
|
|
% % if isempty(find(fswTag(islands==isl)==1, 1))
|
|
% % if isempty(find(fsynTag(islands==isl)==1, 1))
|
|
% % freqTypeTag(isl)=2;
|
|
% % busesInIsland=find(islands==isl);
|
|
% % [~,imin]=min(abs(D0(busesInIsland)));
|
|
% % frefs(isl)=busesInIsland(imin(1));
|
|
% % fswTagxD(frefs(isl))=1;
|
|
% % freqKeptTag(busesInIsland)=1;
|
|
% % else
|
|
% % freqTypeTag(isl)=1;
|
|
% % end
|
|
% % end
|
|
% % end
|
|
% % freqKeptTagxRef=freqKeptTag;
|
|
% % freqKeptTagxRef(frefs)=0;
|
|
% % nFreqKept=sum(freqKeptTag);
|
|
% %
|
|
% % if ~isempty(agc)
|
|
% % agcExt=zeros(nbus,size(agc,2));
|
|
% % agcExt(agc(:,1),:)=agc;
|
|
% % fdk=agcExt(:,2)+agcExt(:,3); %1/R+D
|
|
% % else
|
|
% % fdk=zeros(nbus,1);
|
|
% % end
|
|
% % fIngIdx=((2*nbus+1):(3*nbus))';
|
|
% %
|
|
% % stateFilterTag=ones(nState,1);
|
|
% % stateFilterTag(vIdx)=0;
|
|
% % stateFilterTag(qIdx)=0;
|
|
% % stateFilterTag(pgIdx)=0;
|
|
% % stateFilterTag(efIdx)=0;
|
|
% % stateFilterTag(tgovmIdx)=0;
|
|
% % stateFilterTag(fIdx)=0;
|
|
% % % stateFilterTag(dpgIdx)=0;
|
|
% % % busFilterTag=ones(nbus,1);
|
|
% % % busFilterTag(sw(:,1))=0;
|
|
% % % jacBusFilterTag=[busFilterTag;busFilterTag];
|
|
% %
|
|
% % busTag=ones(nbus,1);
|
|
% % busTag(sw(:,1))=0;
|
|
% % jggRowTag=[busTag;busTag;freqKeptTagxRef];
|
|
% % jggColTag=[busTag;fswTagxD==0;freqKeptTag];
|
|
% %
|
|
% % idxNonSw=find(busType~=2);
|
|
% % idxNonSwD=find(busType~=2&fswTagxD==1);
|
|
% %
|
|
% % nInd=size(ind,1);
|
|
% % if ~isempty(ind)
|
|
% % indIdx=ind(:,1);
|
|
% % Rm1=ind(:,7);
|
|
% % Xm1=ind(:,8);
|
|
% % Zm1=ind(:,7)+1j*ind(:,8);
|
|
% % Rm2=ind(:,9);
|
|
% % Xm2=ind(:,10);
|
|
% % Zmm=1j*ind(:,13);
|
|
% % Tm0=ind(:,15)+ind(:,16)+ind(:,17);
|
|
% % Tm1=-ind(:,16)-2*ind(:,17);
|
|
% % Tm2=ind(:,17);
|
|
% % Hm=ind(:,14);
|
|
% % end
|
|
% %
|
|
% % nSyn=size(syn,1);
|
|
% % if ~isempty(syn)
|
|
% % synIdx=syn(:,1);
|
|
% % wgb=syn(:,4);
|
|
% % model=syn(:,5);
|
|
% % Xgl=syn(:,6);
|
|
% % Rga=syn(:,7);
|
|
% % Xgd=syn(:,8);
|
|
% % Xgd1=syn(:,9);
|
|
% % Xgd2=syn(:,10);
|
|
% % Tgd1=syn(:,11);
|
|
% % Tgd2=syn(:,12);
|
|
% % Xgq=syn(:,13);
|
|
% % Xgq1=syn(:,14);
|
|
% % Xgq2=syn(:,15);
|
|
% % Tgq1=syn(:,16);
|
|
% % Tgq2=syn(:,17);
|
|
% % Mg=syn(:,18);
|
|
% % Dg=syn(:,19);
|
|
% % TgAA=syn(:,24);
|
|
% % gammad=Tgd2./Tgd1.*Xgd2./Xgd1.*(Xgd-Xgd1);
|
|
% % gammaq=Tgq2./Tgq1.*Xgq2./Xgq1.*(Xgq-Xgq1);
|
|
% % end
|
|
% %
|
|
% % nExc=size(exc,1);
|
|
% % if ~isempty(exc)
|
|
% % excIdx=exc(:,1);
|
|
% % VavrMax=exc(:,3);
|
|
% % VavrMin=exc(:,4);
|
|
% % muavr0=exc(:,5);
|
|
% % Tavr1=exc(:,7);
|
|
% % Tavr2=exc(:,6);
|
|
% % vavrf0=exc(:,8);
|
|
% % Vavr0=exc(:,9);
|
|
% % Tavre=exc(:,10);
|
|
% % Tavrr=exc(:,11);
|
|
% % end
|
|
% %
|
|
% % nTg=size(tg,1);
|
|
% % if ~isempty(tg)
|
|
% % tgIdx=tg(:,1);
|
|
% % wtgref=tg(:,3);
|
|
% % Rtg=tg(:,4);
|
|
% % Ttgmax=tg(:,5);
|
|
% % Ttgmin=tg(:,6);
|
|
% % Ttg2=tg(:,7);
|
|
% % Ttg1=tg(:,8);
|
|
% % end
|
|
% %
|
|
% % [V0,Q0,s0,d0,w0,eq10,eq20,ed10,ed20,psid0,psiq0,Pm0,Ef0,Vavrm0,Vavrr0,Vavrf0,Vavrref0,tgovg0,tgovm0,tgovmech0,f0,dpg0,qplt0,vg0]=unfoldX(xt,SysData);
|
|
% % if ~isempty(ind)
|
|
% % [YshInd0,Yshind1]=getLinearInterpolatorInd(nbus,ind,s0,s0);
|
|
% % Ysh0x=Ysh0+YshInd0;
|
|
% % Ysh1x=Ysh1+Yshind1;
|
|
% % else
|
|
% % Ysh0x=zeros(nbus,1);
|
|
% % Ysh1x=zeros(nbus,1);
|
|
% % end
|
|
% % Ytr=Ytr0+Ytr1*t;
|
|
% % Ysh=Ysh0x+Ysh1x*t;
|
|
% % YtrNew=Ytr0+Ytr1*(t+dt);
|
|
% % YshNew=Ysh0x+Ysh1x*(t+dt);
|
|
% %
|
|
% % SNew=-accumarray(pq(:,1),pq(:,4)+1j*pq(:,5),[nbus,1])+accumarray(pv(:,1),pv(:,4),[nbus,1]);
|
|
% % SNew=SNew-accumarray(pq(:,1),pqIncr(:,1)+1j*pqIncr(:,2),[nbus,1])*(t+dt)+accumarray(pv(:,1),pvIncr,[nbus,1])*(t+dt);
|
|
% % if size(pqIncr,2)>=4;SNew=SNew-accumarray(pq(:,1),pqIncr(:,3)+1j*pqIncr(:,4),[nbus,1])*(t+dt)*(t+dt);end
|
|
% % SNew=SNew-accumarray(zip(:,1),(Rzip0+Rzip1*(t+dt)).*(zip(:,7)+1j*zip(:,10)),[nbus,1]);
|
|
% %
|
|
% % INew=-accumarray(zip(:,1),(Rzip0+Rzip1*(t+dt)).*(zip(:,6)-1j*zip(:,9)),[nbus,1]);
|
|
% % JNew=real(INew);
|
|
% % KNew=imag(INew);
|
|
% %
|
|
% % YNew=YtrNew+sparse(1:nbus,1:nbus,YshNew,nbus,nbus);
|
|
% % GNew=real(YNew);BNew=imag(YNew);
|
|
% %
|
|
% % % Calculate diff and jac, do N-R
|
|
% % Vtemp=V0;
|
|
% % pqx=pq;pqx(:,[4,5])=pq(:,[4,5])+pqIncr(:,1:2)*t;if size(pqIncr,2)>=4;pqx(:,[4,5])=pqx(:,[4,5])+pqIncr(:,3:4)*t*t;end
|
|
% % pvx=pv;pvx(:,4)=pv(:,4)+pvIncr*t;
|
|
% % indx=ind;if ~isempty(ind);indx(:,15:17)=ind(:,15:17).*repmat(Rind0+Rind1*t,1,3);indx(:,13)=ind(:,13)./(Reind0+Reind1*t);end
|
|
% % zipx=zip;if ~isempty(zip);zipx(:,5:10)=zip(:,5:10).*repmat(Rzip0+Rzip1*t,1,6);end
|
|
% % SysDatax=foldSysData(bus,sw,pvx,pqx,shunt,line,indx,zipx,syn,exc,tg,agc,cac,cluster);
|
|
% %
|
|
% % pqxx=pq;pqxx(:,[4,5])=pq(:,[4,5])+pqIncr(:,1:2)*(t+dt);if size(pqIncr,2)>=4;pqxx(:,[4,5])=pqxx(:,[4,5])+pqIncr(:,3:4)*(t+dt)*(t+dt);end
|
|
% % pvxx=pv;pvxx(:,4)=pv(:,4)+pvIncr*(t+dt);
|
|
% % indxx=ind;if ~isempty(ind);indxx(:,15:17)=ind(:,15:17).*repmat(Rind0+Rind1*(t+dt),1,3);indxx(:,13)=ind(:,13)./(Reind0+Reind1*(t+dt));end
|
|
% % zipxx=zip;if ~isempty(zip);zipxx(:,5:10)=zip(:,5:10).*repmat(Rzip0+Rzip1*(t+dt),1,6);end
|
|
% % SysDataxx=foldSysData(bus,sw,pvxx,pqxx,shunt,line,indxx,zipxx,syn,exc,tg,agc,cac,cluster);
|
|
% %
|
|
% % SysData=foldSysData(bus,sw,pvx,pqx,shunt,line,ind,zip,syn,exc,tg,agc,cac,cluster);
|
|
% % dx1=integ(SysDatax,SysPara,xt,dt);
|
|
% % xTemp=xt;
|
|
% % xTemp=xTemp+dx1;
|
|
% %
|
|
% % iterMax=10;
|
|
% % exitflag=-1;
|
|
% % for iter=1:iterMax
|
|
% % % calculate df and dg
|
|
% % dx2=integ(SysDataxx,SysPara,xTemp,dt);
|
|
% % diffF=xt-xTemp+(dx1+dx2)/2;
|
|
% % diffF(stateFilterTag==0)=0;
|
|
% %
|
|
% % Ctemp=real(Vtemp);
|
|
% % Dtemp=imag(Vtemp);
|
|
% % Atemp=abs(Vtemp);
|
|
% % Vgtemp=Vtemp(syn(:,1));
|
|
% % ftemp=xTemp(fIdx);
|
|
% %
|
|
% % eq0=Ef0;ed0=zeros(size(Ef0));
|
|
% % [~,~,sNew,dNew,wNew,eq1New,eq2New,ed1New,ed2New,psidNew,psiqNew,EdNew,EfNew,VavrmNew,VavrrNew,VavrfNew,VavrrefNew,tgovgNew,tgovmNew,tgovmechNew,fNew,dpgNew,qpltNew,vgNew]=unfoldX(xTemp,SysData);
|
|
% % eqNew=EfNew;edNew=zeros(size(EfNew));
|
|
% %
|
|
% % [MatGV0,MatGV1,MatGRhs0,MatGRhs1]=getLinearInterpolatorSyn(syn,[],d0,dNew,ed0,ed10,ed20,edNew,ed1New,ed2New,eq0,eq10,eq20,eqNew,eq1New,eq2New,psid0,psiq0,psidNew,psiqNew);
|
|
% %
|
|
% % MatGVNew=MatGV0+MatGV1;
|
|
% % MatGRhsNew=MatGRhs0+MatGRhs1;
|
|
% % J1=GNew+sparse(syn(:,1),syn(:,1),MatGVNew(:,1),nbus,nbus);
|
|
% % J2=-BNew+sparse(syn(:,1),syn(:,1),MatGVNew(:,2),nbus,nbus);
|
|
% % J3=BNew+sparse(syn(:,1),syn(:,1),MatGVNew(:,3),nbus,nbus);
|
|
% % J4=GNew+sparse(syn(:,1),syn(:,1),MatGVNew(:,4),nbus,nbus);
|
|
% % P2freq=sparse(1:nbus,1:nbus,-freqKeptTag.*fdk,nbus,nbus);
|
|
% % Freq2freq=sparse([1:nbus,1:nbus],[1:nbus,frefs(islands)'],[ones(1,nbus),-ones(1,nbus)],nbus,nbus);
|
|
% %
|
|
% % Ig=accumarray(syn(:,1),MatGRhsNew(:,1)+1j*MatGRhsNew(:,2),[nbus,1])-...
|
|
% % accumarray(syn(:,1),(MatGVNew(:,1).*real(Vgtemp)+MatGVNew(:,2).*imag(Vgtemp))+1j*(MatGVNew(:,3).*real(Vgtemp)+MatGVNew(:,4).*imag(Vgtemp)),[nbus,1]);
|
|
% % % diffG=conj(SNew)+INew.*abs(Vtemp)+Ig.*conj(Vtemp)-(YNew*Vtemp).*conj(Vtemp)+freqKeptTag.*(dpgNew-fdk.*fNew);
|
|
% % % diffG(busFilterTag==0)=0;
|
|
% % % diffGf=zeros(nbus,1);
|
|
% %
|
|
% % diff=conj(SNew)+INew.*abs(Vtemp)+Ig.*conj(Vtemp)-(YNew*Vtemp).*conj(Vtemp);
|
|
% % diffP=real(diff)+freqKeptTag.*(-fdk.*ftemp+dpg0);
|
|
% % diffVQ=imag(diff);
|
|
% % diffGf=ftemp-ftemp(frefs(islands));
|
|
% % if ~isempty(pv)
|
|
% % diffVQ(pv(:,1))=abs(Vtemp(pv(:,1))).*abs(Vtemp(pv(:,1)))-(VspSq2(pv(:,1),1)+VspSq2(pv(:,1),2)*(t+dt));
|
|
% % end
|
|
% %
|
|
% % diffGx=[diffP;diffVQ;diffGf];
|
|
% % diffGx(jggRowTag==0)=0;
|
|
% %
|
|
% % if iter>1&&max(abs([diffF;diffGx]))<diffTol
|
|
% % exitflag=0;
|
|
% % break;
|
|
% % end
|
|
% %
|
|
% % % construct Jgg
|
|
% % dCtemp=sparse(1:nbus,1:nbus,Ctemp,nbus,nbus);
|
|
% % dDtemp=sparse(1:nbus,1:nbus,Dtemp,nbus,nbus);
|
|
% % Jac1=[dCtemp*J1+dDtemp*J3,dCtemp*J2+dDtemp*J4;...
|
|
% % dCtemp*J3-dDtemp*J1,dCtemp*J4-dDtemp*J2];
|
|
% % Jac2=[sparse(1:nbus,1:nbus,J1*Ctemp+J2*Dtemp,nbus,nbus),sparse(1:nbus,1:nbus,J3*Ctemp+J4*Dtemp,nbus,nbus);...
|
|
% % sparse(1:nbus,1:nbus,J3*Ctemp+J4*Dtemp,nbus,nbus),-sparse(1:nbus,1:nbus,J1*Ctemp+J2*Dtemp,nbus,nbus)];
|
|
% % Jac3=[sparse(1:nbus,1:nbus,JNew.*Ctemp./Atemp,nbus,nbus),sparse(1:nbus,1:nbus,JNew.*Dtemp./Atemp,nbus,nbus);...
|
|
% % sparse(1:nbus,1:nbus,KNew.*Ctemp./Atemp,nbus,nbus),sparse(1:nbus,1:nbus,KNew.*Dtemp./Atemp,nbus,nbus)];
|
|
% % Jac4=[sparse(syn(:,1),syn(:,1),MatGRhsNew(:,1),nbus,nbus),sparse(syn(:,1),syn(:,1),MatGRhsNew(:,2),nbus,nbus);...
|
|
% % sparse(syn(:,1),syn(:,1),MatGRhsNew(:,2),nbus,nbus),-sparse(syn(:,1),syn(:,1),MatGRhsNew(:,1),nbus,nbus)];
|
|
% % Jac=Jac3+Jac4-Jac1-Jac2;
|
|
% %
|
|
% % JacVc=sparse(1:nbus,1:nbus,2*Ctemp,nbus,nbus);
|
|
% % JacVd=sparse(1:nbus,1:nbus,2*Dtemp,nbus,nbus);
|
|
% %
|
|
% % Jac(nbus+ipv,:)=[JacVc(ipv,:),JacVd(ipv,:)];
|
|
% %
|
|
% % Jgg=[Jac,[P2freq;sparse(nbus,nbus)];...
|
|
% % sparse(nbus,2*nbus),Freq2freq];
|
|
% %
|
|
% % % construct Jgf
|
|
% %
|
|
% % jgfi=zeros(0,1);
|
|
% % jgfj=zeros(0,1);
|
|
% % jgfv=zeros(0,1);
|
|
% % jfgi=zeros(0,1);
|
|
% % jfgj=zeros(0,1);
|
|
% % jfgv=zeros(0,1);
|
|
% % jffi=zeros(0,1);
|
|
% % jffj=zeros(0,1);
|
|
% % jffv=zeros(0,1);
|
|
% %
|
|
% % if ~isempty(ind)
|
|
% % % s
|
|
% % deltasx=1e-3;
|
|
% % Zind0=Zm1+Zmm.*(Rm2+1j*Xm2.*sNew)./(Rm2+(Zmm+1j*Xm2).*sNew);
|
|
% % Yind0=1./Zind0;
|
|
% %
|
|
% % ZindNew=Zm1+Zmm.*(Rm2+1j*Xm2.*(sNew+deltasx))./(Rm2+(Zmm+1j*Xm2).*(sNew+deltasx));
|
|
% % YindNew=1./ZindNew;
|
|
% %
|
|
% % Yshind1x=YindNew-Yind0;
|
|
% % jgfi=[jgfi;indIdx;indIdx+nbus];
|
|
% % jgfj=[jgfj;sIdx;sIdx];
|
|
% % jgfv=[jgfv;Vtemp(indIdx).*conj(Vtemp(indIdx)).*real(Yshind1x/deltasx);Vtemp(indIdx).*conj(Vtemp(indIdx)).*imag(Yshind1x/deltasx)];
|
|
% % end
|
|
% %
|
|
% % if ~isempty(syn)
|
|
% % Vgtemp=Vtemp(synIdx);
|
|
% % Cgtemp=real(Vgtemp);
|
|
% % Dgtemp=imag(Vgtemp);
|
|
% %
|
|
% % cosd0=cos(dNew);
|
|
% % sind0=sin(dNew);
|
|
% % deltadNew=1e-5*abs(dNew)+1e-6;
|
|
% % cosdx=cos(dNew+deltadNew);
|
|
% % sindx=sin(dNew+deltadNew);
|
|
% %
|
|
% % MatGV0x=zeros(nSyn,4);
|
|
% % MatGV1x=zeros(nSyn,4);
|
|
% %
|
|
% % MatGRhs0x=zeros(nSyn,2);
|
|
% % MatGRhs1x=zeros(nSyn,2);
|
|
% %
|
|
% % for i=1:nSyn
|
|
% % Mg0=[sind0(i),-cosd0(i);cosd0(i),sind0(i)];
|
|
% % Mgx=[sindx(i),-cosdx(i);cosdx(i),sindx(i)];
|
|
% % if model(i)==6||model(i)==5
|
|
% % Yg=[Rga(i),Xgq2(i);-Xgd2(i),Rga(i)]/(Rga(i)*Rga(i)+Xgd2(i)*Xgq2(i));
|
|
% % Mxye=Mg0'*Yg;
|
|
% % Mdqe=Yg;
|
|
% % dIdq=-Yg*(Mgx-Mg0)*[Cgtemp(i);Dgtemp(i)]/deltadNew(i);
|
|
% % dVdq=-Yg*Mg0;
|
|
% % jgfi=[jgfi;synIdx(i);synIdx(i);synIdx(i)+nbus;synIdx(i)+nbus];
|
|
% % jgfj=[jgfj;ed2Idx(i);eq2Idx(i);ed2Idx(i);eq2Idx(i)];
|
|
% % jgfv=[jgfv;Cgtemp(i)*Mxye(1,1)+Dgtemp(i)*Mxye(2,1);Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2);Cgtemp(i)*Mxye(2,1)-Dgtemp(i)*Mxye(1,1);Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2)];
|
|
% %
|
|
% % jffi=[jffi;eq2Idx(i);eq2Idx(i);eq2Idx(i)];
|
|
% % jffj=[jffj;ed2Idx(i);eq2Idx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,1)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,2)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*dIdq(1)/Tgd2(i)];
|
|
% % jffi=[jffi;ed2Idx(i);ed2Idx(i);ed2Idx(i)];
|
|
% % jffj=[jffj;ed2Idx(i);eq2Idx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,1)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,2)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*dIdq(2)/Tgq2(i)];
|
|
% % jffi=[jffi;eq1Idx(i);eq1Idx(i);eq1Idx(i)];
|
|
% % jffj=[jffj;ed2Idx(i);eq2Idx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,2)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*dIdq(1)/Tgd1(i)];
|
|
% % if model(i)==6
|
|
% % jffi=[jffi;ed1Idx(i);ed1Idx(i);ed1Idx(i)];
|
|
% % jffj=[jffj;ed2Idx(i);eq2Idx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,2)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*dIdq(2)/Tgq1(i)];
|
|
% % end
|
|
% %
|
|
% % jfgi=[jfgi;eq2Idx(i);eq2Idx(i)];
|
|
% % jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
% % jfgv=[jfgv;-(Xgd1(i)-Xgd2(i)+gammad(i))*dVdq(1,1)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*dVdq(1,2)/Tgd2(i)];
|
|
% % jfgi=[jfgi;ed2Idx(i);ed2Idx(i)];
|
|
% % jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
% % jfgv=[jfgv;(Xgq1(i)-Xgq2(i)+gammaq(i))*dVdq(2,1)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*dVdq(2,2)/Tgq2(i)];
|
|
% % jfgi=[jfgi;eq1Idx(i);eq1Idx(i)];
|
|
% % jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
% % jfgv=[jfgv;-(Xgd(i)-Xgd1(i)-gammad(i))*dVdq(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*dVdq(1,2)/Tgd1(i)];
|
|
% % if model(i)==6
|
|
% % jfgi=[jfgi;ed1Idx(i);ed1Idx(i)];
|
|
% % jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
% % jfgv=[jfgv;(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,2)/Tgq1(i)];
|
|
% % end
|
|
% %
|
|
% % MatGRhs0x(i,:)=(Mg0'*Yg*[ed2New(i);eq2New(i)]).';
|
|
% % MatGRhs1x(i,:)=(Mgx'*Yg*[ed2New(i);eq2New(i)]).'-MatGRhs0x(i,:);
|
|
% % elseif model(i)==4
|
|
% % Yg=[Rga(i),Xgq1(i);-Xgd1(i),Rga(i)]/(Rga(i)*Rga(i)+Xgd1(i)*Xgq1(i));
|
|
% % Mxye=Mg0'*Yg;
|
|
% % Mdqe=Yg;
|
|
% % dVdq=-Yg*Mg0;
|
|
% % dIdq=-Yg*(Mgx-Mg0)*[Cgtemp(i);Dgtemp(i)]/deltadNew(i);
|
|
% % jgfi=[jgfi;synIdx(i);synIdx(i);synIdx(i)+nbus;synIdx(i)+nbus];
|
|
% % jgfj=[jgfj;ed1Idx(i);eq1Idx(i);ed1Idx(i);eq1Idx(i)];
|
|
% % jgfv=[jgfv;Cgtemp(i)*Mxye(1,1)+Dgtemp(i)*Mxye(2,1);Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2);Cgtemp(i)*Mxye(2,1)-Dgtemp(i)*Mxye(1,1);Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2)];
|
|
% %
|
|
% % jffi=[jffi;eq1Idx(i);eq1Idx(i);eq1Idx(i)];
|
|
% % jffj=[jffj;ed1Idx(i);eq1Idx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;-(Xgd(i)-Xgd1(i))*Mdqe(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i))*Mdqe(1,2)/Tgd1(i);-(Xgd(i)-Xgd1(i))*dIdq(1)/Tgd1(i)];
|
|
% % jffi=[jffi;ed1Idx(i);ed1Idx(i);ed1Idx(i)];
|
|
% % jffj=[jffj;ed1Idx(i);eq1Idx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;(Xgq(i)-Xgq1(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i))*Mdqe(2,2)/Tgq1(i);(Xgq(i)-Xgq1(i))*dIdq(2)/Tgq1(i)];
|
|
% %
|
|
% % jfgi=[jfgi;eq1Idx(i);eq1Idx(i)];
|
|
% % jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
% % jfgv=[jfgv;-(Xgd(i)-Xgd1(i))*dVdq(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i))*dVdq(1,2)/Tgd1(i)];
|
|
% % jfgi=[jfgi;ed1Idx(i);ed1Idx(i)];
|
|
% % jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
% % jfgv=[jfgv;(Xgq(i)-Xgq1(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i))*Mdqe(2,2)/Tgq1(i)];
|
|
% %
|
|
% % MatGRhs0x(i,:)=(Mg0'*Yg*[ed1New(i);eq1New(i)]).';
|
|
% % MatGRhs1x(i,:)=(Mgx'*Yg*[ed1New(i);eq1New(i)]).'-MatGRhs0x(i,:);
|
|
% % elseif model(i)==3||model(i)==2
|
|
% % Yg=[Rga(i),Xgq(i);-Xgd1(i),Rga(i)]/(Rga(i)*Rga(i)+Xgd1(i)*Xgq(i));
|
|
% % Mxye=Mg0'*Yg;
|
|
% % Mdqe=Yg;
|
|
% % dVdq=-Yg*Mg0;
|
|
% % dIdq=-Yg*(Mgx-Mg0)*[Cgtemp(i);Dgtemp(i)]/deltadNew(i);
|
|
% % if model(i)==3
|
|
% % jgfi=[jgfi;synIdx(i);synIdx(i)+nbus];
|
|
% % jgfj=[jgfj;eq1Idx(i);eq1Idx(i)];
|
|
% % jgfv=[jgfv;Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2);Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2)];
|
|
% % jffi=[jffi;eq1Idx(i);eq1Idx(i)];
|
|
% % jffj=[jffj;eq1Idx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;-(Xgd(i)-Xgd1(i))*Mdqe(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i))*dIdq(1)/Tgd1(i)];
|
|
% % jfgi=[jfgi;eq1Idx(i);eq1Idx(i)];
|
|
% % jfgj=[jfgj;synIdx(i);synIdx(i)+nbus];
|
|
% % jfgv=[jfgv;-(Xgd(i)-Xgd1(i))*dVdq(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i))*dVdq(1,2)/Tgd1(i)];
|
|
% % end
|
|
% %
|
|
% % MatGRhs0x(i,:)=(Mg0'*Yg*[edNew(i);eq1New(i)]).';
|
|
% % MatGRhs1x(i,:)=(Mgx'*Yg*[edNew(i);eq1New(i)]).'-MatGRhs0x(i,:);
|
|
% % elseif model(i)==8
|
|
% % Yg=zeros(2);
|
|
% % Mxye=Mg0'*diag([1/Xgd2(i);1/Xgq2(i)]);
|
|
% % Mdqe=diag([1/Xgd2(i);1/Xgq2(i)]);
|
|
% % dVdq=-Yg*Mg0;
|
|
% % dIdq=-Yg*(Mgx-Mg0)*[Cgtemp(i);Dgtemp(i)]/deltadNew(i);
|
|
% % jgfi=[jgfi;synIdx(i);synIdx(i);synIdx(i)+nbus;synIdx(i)+nbus];
|
|
% % jgfj=[jgfj;ed2Idx(i);eq2Idx(i);ed2Idx(i);eq2Idx(i)];
|
|
% % jgfv=[jgfv;-(Cgtemp(i)*Mxye(1,1)+Dgtemp(i)*Mxye(2,1));Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2);-(Cgtemp(i)*Mxye(2,1)-Dgtemp(i)*Mxye(1,1));Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2)];
|
|
% % jgfi=[jgfi;synIdx(i);synIdx(i);synIdx(i)+nbus;synIdx(i)+nbus];
|
|
% % jgfj=[jgfj;psiqIdx(i);psidIdx(i);psiqIdx(i);psidIdx(i)];
|
|
% % jgfv=[jgfv;-(Cgtemp(i)*Mxye(1,1)+Dgtemp(i)*Mxye(2,1));-(Cgtemp(i)*Mxye(1,2)+Dgtemp(i)*Mxye(2,2));-(Cgtemp(i)*Mxye(2,1)-Dgtemp(i)*Mxye(1,1));-(Cgtemp(i)*Mxye(2,2)-Dgtemp(i)*Mxye(1,2))];
|
|
% %
|
|
% % jffi=[jffi;eq2Idx(i);eq2Idx(i);eq2Idx(i);eq2Idx(i);eq2Idx(i)];
|
|
% % jffj=[jffj;ed2Idx(i);eq2Idx(i);psiqIdx(i);psidIdx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,1)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,2)/Tgd2(i);...
|
|
% % -(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,1)/Tgd2(i);(Xgd1(i)-Xgd2(i)+gammad(i))*Mdqe(1,2)/Tgd2(i);-(Xgd1(i)-Xgd2(i)+gammad(i))*dIdq(1)/Tgd2(i)];
|
|
% % jffi=[jffi;ed2Idx(i);ed2Idx(i);ed2Idx(i);ed2Idx(i);ed2Idx(i)];
|
|
% % jffj=[jffj;ed2Idx(i);eq2Idx(i);psiqIdx(i);psidIdx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,1)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,2)/Tgq2(i);...
|
|
% % (Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,1)/Tgq2(i);-(Xgq1(i)-Xgq2(i)+gammaq(i))*Mdqe(2,2)/Tgq2(i);(Xgq1(i)-Xgq2(i)+gammaq(i))*dIdq(2)/Tgq2(i)];
|
|
% % jffi=[jffi;eq1Idx(i);eq1Idx(i);eq1Idx(i);eq1Idx(i);eq1Idx(i)];
|
|
% % jffj=[jffj;ed2Idx(i);eq2Idx(i);psiqIdx(i);psidIdx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,1)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,2)/Tgd1(i);...
|
|
% % -(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,1)/Tgd1(i);(Xgd(i)-Xgd1(i)-gammad(i))*Mdqe(1,2)/Tgd1(i);-(Xgd(i)-Xgd1(i)-gammad(i))*dIdq(1)/Tgd1(i)];
|
|
% % jffi=[jffi;ed1Idx(i);ed1Idx(i);ed1Idx(i);ed1Idx(i);ed1Idx(i)];
|
|
% % jffj=[jffj;ed2Idx(i);eq2Idx(i);psiqIdx(i);psidIdx(i);deltaIdx(i)];
|
|
% % jffv=[jffv;(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,1)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,2)/Tgq1(i);...
|
|
% % (Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,1)/Tgq1(i);-(Xgq(i)-Xgq1(i)-gammaq(i))*Mdqe(2,2)/Tgq1(i);(Xgq(i)-Xgq1(i)-gammaq(i))*dIdq(2)/Tgq1(i)];
|
|
% %
|
|
% % MatGRhs0x(i,:)=(Mg0'*[(eq2New(i)-psidNew(i))/Xgd2(i);(-ed2New(i)-psiqNew(i))/Xgq2(i)]).';
|
|
% % MatGRhs1x(i,:)=(Mgx'*[(eq2New(i)-psidNew(i))/Xgd2(i);(-ed2New(i)-psiqNew(i))/Xgq2(i)]).'-MatGRhs0x(i,:);
|
|
% % end
|
|
% % MatVg0x=Mg0'*Yg*Mg0;
|
|
% % MatVgNewx=Mgx'*Yg*Mgx;
|
|
% % MatGV0x(i,:)=[MatVg0x(1,1),MatVg0x(1,2),MatVg0x(2,1),MatVg0x(2,2)];
|
|
% % MatGV1x(i,:)=[MatVgNewx(1,1),MatVgNewx(1,2),MatVgNewx(2,1),MatVgNewx(2,2)]-MatGV0x(i,:);
|
|
% %
|
|
% % jgfi=[jgfi;synIdx(i);synIdx(i)+nbus];
|
|
% % jgfj=[jgfj;deltaIdx(i);deltaIdx(i)];
|
|
% % jgfv=[jgfv;...
|
|
% % (Cgtemp(i)*(MatGRhs1x(i,1)-MatGV1x(i,1)*Cgtemp(i)-MatGV1x(i,2)*Dgtemp(i))+Dgtemp(i)*(MatGRhs1x(i,2)-MatGV1x(i,3)*Cgtemp(i)-MatGV1x(i,4)*Dgtemp(i)))/deltadNew(i);...
|
|
% % (-Dgtemp(i)*(MatGRhs1x(i,1)-MatGV1x(i,1)*Cgtemp(i)-MatGV1x(i,2)*Dgtemp(i))+Cgtemp(i)*(MatGRhs1x(i,2)-MatGV1x(i,3)*Cgtemp(i)-MatGV1x(i,4)*Dgtemp(i)))/deltadNew(i)];
|
|
% % end
|
|
% %
|
|
% % end
|
|
% % Jgf=sparse(jgfi,jgfj,jgfv,3*nbus,nState);
|
|
% %
|
|
% % % construct Jff & Jfg
|
|
% %
|
|
% % if ~isempty(ind)
|
|
% % % s
|
|
% % jffi=[jffi;sIdx];
|
|
% % jffj=[jffj;sIdx];
|
|
% % divs=((Rm2+Rm1.*sNew).*(Rm2+Rm1.*sNew)+(Xm2+Xm1).*(Xm2+Xm1).*sNew.*sNew);
|
|
% % jffv=[jffv;(Tm1+2*Tm2.*sNew+Vtemp(indIdx).*conj(Vtemp(indIdx)).*Rm2.*(1./divs-2*sNew.*(sNew.*(Xm2+Xm1).*(Xm2+Xm1)+Rm1.*(Rm2+Rm1.*sNew))./divs./divs))/2./Hm];
|
|
% % % il=V(indIdx).*yind;
|
|
% % % ir=il-(V(indIdx)-il.*Zm1)./Zmm;
|
|
% % % dx(sIdx)=dt*((Tm0+Tm1.*s+Tm2.*s.*s)-ir.*conj(ir).*Rm2./s)/2./Hm;
|
|
% %
|
|
% % yind=1./(Zm1+Zmm.*(Rm2+1j*Xm2.*sNew)./(Rm2+sNew.*(Zmm+1j*Xm2)));
|
|
% % yInds=(1+Zm1./Zmm).*yind-1./Zmm;
|
|
% % yIndsRs=yInds.*conj(yInds).*Rm2./sNew;
|
|
% % yIndsRs(isnan(yIndsRs))=0;
|
|
% % jfgi=[jfgi;sIdx;sIdx];
|
|
% % jfgj=[jfgj;indIdx;indIdx+nbus];
|
|
% % jfgv=[jfgv;2*real(Vtemp(indIdx)).*yIndsRs/2./Hm;2*imag(Vtemp(indIdx)).*yIndsRs/2./Hm];
|
|
% % end
|
|
% %
|
|
% % if ~isempty(syn)
|
|
% % pActiveInSyn=ones(nSyn,1);
|
|
% % tgovmActive=ones(nTg,1);
|
|
% % tgovmActive((tgovm0-Ttgmax)>0)=0;
|
|
% % tgovmActive((tgovm0-Ttgmin)<0)=0;
|
|
% % pActiveInSyn(tgIdx)=tgovmActive;
|
|
% % texcActive=ones(nExc,1);
|
|
% % texcActive((Vavrf0-VavrMax)>0)=0;
|
|
% % texcActive((Vavrf0-VavrMin)<0)=0;
|
|
% % texcActiveInSyn=zeros(nSyn,1);
|
|
% % texcActiveInSyn(tgIdx)=texcActive;
|
|
% % numSynOnBus=accumarray(syn(:,1),1,[nbus,1]);
|
|
% % %delta
|
|
% % jffi=[jffi;deltaIdx];
|
|
% % jffj=[jffj;omegaIdx];
|
|
% % jffv=[jffv;wgb];
|
|
% % %omega
|
|
% % jffi=[jffi;omegaIdx;omegaIdx(tgIdx);omegaIdx(tgIdx);omegaIdx(tgIdx);omegaIdx];
|
|
% % jffj=[jffj;omegaIdx;tgovgIdx;omegaIdx(tgIdx);tmechIdx;dpgIdx(synIdx)];
|
|
% % jffv=[jffv;-Dg/2./Mg;tgovmActive;-tgovmActive.*Ttg1./Ttg2./Rtg;tgovmActive;pActiveInSyn./numSynOnBus(synIdx)];
|
|
% % %psiq
|
|
% % jffi=[jffi;psidIdx(model>=8)];
|
|
% % jffj=[jffj;psiqIdx(model>=8)];
|
|
% % jffv=[jffv;wgb(model>=8)];
|
|
% % %psid
|
|
% % jffi=[jffi;psiqIdx(model>=8)];
|
|
% % jffj=[jffj;psidIdx(model>=8)];
|
|
% % jffv=[jffv;-wgb(model>=8)];
|
|
% % %ed''
|
|
% % jffi=[jffi;ed2Idx(model>=5);ed2Idx(model>=5)];
|
|
% % jffj=[jffj;ed2Idx(model>=5);ed1Idx(model>=5)];
|
|
% % jffv=[jffv;-1./Tgq2(model>=5);1./Tgq2(model>=5)];
|
|
% % %eq''
|
|
% % jffi=[jffi;eq2Idx(model>=5);eq2Idx(model>=5);eq2Idx(model>=5&texcActiveInSyn==1)];
|
|
% % jffj=[jffj;eq2Idx(model>=5);eq1Idx(model>=5);vavrfIdx(texcActive==1&model(excIdx)>=5)];
|
|
% % jffv=[jffv;-1./Tgd2(model>=5);1./Tgd2(model>=5);TgAA(model>=5&texcActiveInSyn==1)./Tgd1(model>=5&texcActiveInSyn==1)./Tgd2(model>=5&texcActiveInSyn==1)];
|
|
% % %ed'
|
|
% % jffi=[jffi;ed1Idx(model>=4)];
|
|
% % jffj=[jffj;ed1Idx(model>=4)];
|
|
% % jffv=[jffv;-1./Tgq1(model>=4)];
|
|
% % %eq'
|
|
% % jffi=[jffi;eq1Idx(model>=3)];
|
|
% % jffj=[jffj;eq1Idx(model>=3)];
|
|
% % jffv=[jffv;-1./Tgd1(model>=3)];
|
|
% % jffi=[jffi;eq1Idx(model>=5&texcActiveInSyn==1)];
|
|
% % jffj=[jffj;vavrfIdx(texcActive==1&model(excIdx)>=5)];
|
|
% % jffv=[jffv;(1-TgAA(model>=5&texcActiveInSyn==1)./Tgd1(model>=5&texcActiveInSyn==1))./Tgd2(model>=5&texcActiveInSyn==1)];
|
|
% % jffi=[jffi;eq1Idx((model==3|model==4)&texcActiveInSyn==1)];
|
|
% % jffj=[jffj;vavrfIdx(texcActive==1&(model(excIdx)==3|model(excIdx)==4))];
|
|
% % jffv=[jffv;(1-TgAA((model==3|model==4)&texcActiveInSyn==1)./Tgd1((model==3|model==4)&texcActiveInSyn==1))./Tgd2((model==3|model==4)&texcActiveInSyn==1)];
|
|
% % end
|
|
% %
|
|
% % if ~isempty(tg)
|
|
% % jffi=[jffi;tgovgIdx;tgovgIdx];
|
|
% % jffj=[jffj;omegaIdx;tgovgIdx];
|
|
% % jffv=[jffv;-(1-Ttg1./Ttg2)./Rtg./Ttg2;-1./Ttg2];
|
|
% % end
|
|
% %
|
|
% % if ~isempty(exc)
|
|
% % VmagAvr=abs(Vtemp(synIdx(excIdx)));
|
|
% %
|
|
% % jffi=[jffi;vavrmIdx];
|
|
% % jffj=[jffj;vavrmIdx];
|
|
% % jffv=[jffv;-1./Tavrr];
|
|
% %
|
|
% % jffi=[jffi;vavrrIdx;vavrrIdx;vavrrIdx];
|
|
% % jffj=[jffj;vavrmIdx;vavrrefIdx;vavrrIdx];
|
|
% % jffv=[jffv;-muavr0.*(1-Tavr1./Tavr2)./Tavr2;muavr0.*(1-Tavr1./Tavr2)./Tavr2;-1./Tavr2];
|
|
% %
|
|
% % jffi=[jffi;vavrfIdx;vavrfIdx;vavrfIdx;vavrfIdx];
|
|
% % jffj=[jffj;vavrmIdx;vavrrefIdx;vavrrIdx;vavrfIdx];
|
|
% % jffv=[jffv;-muavr0.*Tavr1./Tavr2./Tavre.*VmagAvr./Vavr0;muavr0.*Tavr1./Tavr2./Tavre.*VmagAvr./Vavr0;VmagAvr./Vavr0./Tavre;-1./Tavre];
|
|
% % end
|
|
% %
|
|
% % if ~isempty(agc)
|
|
% % agcExt=zeros(nbus,size(agc,2));
|
|
% % agcExt(agc(:,1),:)=agc;
|
|
% %
|
|
% % jfgi=[jfgi;dpgIdx(freqKeptTag==1)];
|
|
% % jfgj=[jfgj;fIngIdx(freqKeptTag==1)];%f
|
|
% % jfgv=[jfgv;-agcExt(freqKeptTag==1,4)];
|
|
% %
|
|
% % numSynOnBus=accumarray(syn(:,1),1,[nbus,1]);
|
|
% % jffi=[jffi;dpgIdx(syn(:,1))];
|
|
% % jffj=[jffj;omegaIdx];%f
|
|
% % jffv=[jffv;-agcExt(syn(:,1),4)./numSynOnBus(syn(:,1))];
|
|
% % end
|
|
% %
|
|
% % Jff=dt*sparse(jffi,jffj,jffv,nState,nState)/2-speye(nState,nState);
|
|
% %
|
|
% % % construct Jfg
|
|
% % Jfg=dt*sparse(jfgi,jfgj,jfgv,nState,3*nbus)/2; %P,Q,f
|
|
% %
|
|
% % jac=[Jff(stateFilterTag==1,stateFilterTag==1),Jfg(stateFilterTag==1,jggColTag==1);Jgf(jggRowTag==1,stateFilterTag==1),Jgg(jggRowTag==1,jggColTag==1)];
|
|
% %
|
|
% % correction=-jac\[diffF(stateFilterTag==1);diffGx(jggRowTag==1)];
|
|
% % nStateCorr=sum(stateFilterTag);
|
|
% % xTemp(stateFilterTag==1)=xTemp(stateFilterTag==1)+correction(1:nStateCorr);
|
|
% % corrFull=zeros(3*nbus,1);
|
|
% % corrFull(jggRowTag==1)=correction((nStateCorr+1):end);
|
|
% % Vtemp=Vtemp+corrFull(1:nbus)+1j*corrFull((nbus+1):(2*nbus));
|
|
% % xTemp(vIdx)=Vtemp;
|
|
% % xTemp(fIdx)=corrFull(fIngIdx);
|
|
% % xTemp=adjustAlgebraic(SysDataxx,xTemp);
|
|
% % end
|
|
% %
|
|
% % dxc=(xTemp-xt)/dt;
|
|
% % SysParaxx=foldSysPara([],[],[],[],[],[],[],[],Ytr0+Ytr1*(t+dt),[],Ysh0+Ysh1*(t+dt),[],[VspSq2(:,1)+VspSq2(:,2)*(t+dt),zeros(size(VspSq2,1),1)],[],[],[],[]);
|
|
% % diff=checkEquationBalanceSynDyn(SysDataxx,SysParaxx,xTemp,dxc);
|
|
% %
|
|
% % end |