📄 jacobac.cpp
字号:
if (PQcont && strpbrk(Eptr->Type,"PQMN")){
if (Acont && strpbrk(Eptr->Cont->Type,"A")) k=1; else k=0;
j=ACvar[Eptr->Cont->N]+1+k+Eptr->Cont->Ncont-Eptr->Ncont;
if (!strcmp(Eptr->Type,"RQ")){
val1=Vj*dPijv/Eptr->Tap;
if (Eptr->From==Eptr->Meter) val1=val1-2*Vi*Vi*(Eptr->G1+Eptr->G)*Eptr->Tap;
}
else if (!strcmp(Eptr->Type,"RP")){
val1=dPiid;
if (Eptr->From==Eptr->Meter) val1= -val1;
} else val1=0;
JacElement(Mptr,i,j,val1);
}
else if(Rcont && Eptr->Cont!=NULL) {
j=ACvar[Eptr->Cont->N]+1;
if (!strcmp(Eptr->Type,"R")){
val1=Vj*dPijv/Eptr->Tap;
if (Eptr->From==Eptr->Meter) val1=val1-2*Vi*Vi*(Eptr->G1+Eptr->G)*Eptr->Tap;
} else val1=0;
JacElement(Mptr,i,j,val1);
}
}
}
if (flagF) dF[i]=ACptr->Area->P-SPij;
}
/* -------------- Regulating Transf. ----------------------- */
if(PQcont) for (ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next) {
Eptr=ELptr->Eptr;
if(strpbrk(Eptr->Type,"PQMN")){
if (Acont && strpbrk(Eptr->Cont->Type,"A")) k=1; else k=0;
i=ACvar[ACptr->N]+1+k+ACptr->Ncont-Eptr->Ncont;
if(Eptr->From==ACptr) {
From=Eptr->From;
To=Eptr->To;
gij=(Eptr->G*cos(Eptr->Ang)-Eptr->B*sin(Eptr->Ang))*Eptr->Tap;
bij=(Eptr->G*sin(Eptr->Ang)+Eptr->B*cos(Eptr->Ang))*Eptr->Tap;
gsij=(Eptr->G1+Eptr->G)*Eptr->Tap*Eptr->Tap-gij;
bsij=(Eptr->B1+Eptr->B)*Eptr->Tap*Eptr->Tap-bij;
}
else {
From=Eptr->To;
To=Eptr->From;
gij=(Eptr->G*cos(Eptr->Ang)+Eptr->B*sin(Eptr->Ang))*Eptr->Tap;
bij=(-Eptr->G*sin(Eptr->Ang)+Eptr->B*cos(Eptr->Ang))*Eptr->Tap;
gsij=Eptr->G+Eptr->G2-gij;
bsij=Eptr->B+Eptr->B2-bij;
}
Vi=From->V;
di=From->Ang;
Vj=To->V;
dj=To->Ang;
dPiid= -Vi*Vj*(gij*sin(di-dj)-bij*cos(di-dj));
dPiiv= -2*Vi*(gij+gsij)+Vj*(gij*cos(di-dj)+bij*sin(di-dj));
dPijd= -dPiid;
dPijv=Vi*(gij*cos(di-dj)+bij*sin(di-dj));
SPij=Vi*Vi*(gij+gsij)-Vj*dPijv;
dQiid=Vj*dPijv;
dQijd= -dQiid;
dQiiv= -dPiid/Vi+2*Vi*(bij+bsij);
dQijv= -dPiid/Vj;
SQij= -Vi*Vi*(bij+bsij)+dPiid;
if (strpbrk(Eptr->Type,"PM")){
if(flagJ){
if(!strcmp(Eptr->Type,"RP")) {
val1= -dPiid;
if (Eptr->From!=ACptr) val1= -val1;
} else val1=1;
JacElement(Mptr,i,i,val1);
j=ACvar[From->N];
if (!strpbrk(From->Type,"S")) { JacElement(Mptr,i,j,dPiid);}
if (From->Cont!=NULL) JacElement(Mptr,i,j+1,dPiiv);
else if (flagH && strpbrk(From->Type,"L")) JacElement(Mptr,i,Mptr->n1,dPiiv);
else JacElement(Mptr,i,j+1,0.);
j=ACvar[To->N];
if (!strpbrk(To->Type,"S")) { JacElement(Mptr,i,j,dPijd);}
if (To->Cont!=NULL) JacElement(Mptr,i,j+1,dPijv);
else if (flagH && strpbrk(To->Type,"L")) JacElement(Mptr,i,Mptr->n1,dPijv);
else JacElement(Mptr,i,j+1,0.);
}
if (flagF) dF[i]=Eptr->Cvar-SPij;
}
else {
if(flagJ){
if(!strcmp(Eptr->Type,"RQ")) {
val1= -dPiid/Eptr->Tap;
if (Eptr->From==ACptr) val1=val1+2*Vi*Vi*(Eptr->B1+Eptr->B)*Eptr->Tap;
} else val1=1;
JacElement(Mptr,i,i,val1);
j=ACvar[From->N];
if (!strpbrk(From->Type,"S")) { JacElement(Mptr,i,j,dQiid);}
if (From->Cont!=NULL) JacElement(Mptr,i,j+1,dQiiv);
else if (flagH && strpbrk(From->Type,"L")) JacElement(Mptr,i,Mptr->n1,dQiiv);
else JacElement(Mptr,i,j+1,0.);
j=ACvar[To->N];
if (!strpbrk(To->Type,"S")) JacElement(Mptr,i,j,dQijd);
if (To->Cont!=NULL) JacElement(Mptr,i,j+1,dQijv);
else if (flagH && strpbrk(To->Type,"L")) JacElement(Mptr,i,Mptr->n1,dQijv);
else JacElement(Mptr,i,j+1,0.);
}
if (flagF) dF[i]=Eptr->Cvar-SQij;
}
}
}
/* -------------- Generator Model ----------------------- */
if (ACptr->Gen!=NULL) {
i=ACptr->Gen->Nvar;
Ra=ACptr->Gen->Ra;
Xd=ACptr->Gen->Xd;
Xq=ACptr->Gen->Xq;
Eq=ACptr->Gen->Eq;
dg=ACptr->Gen->dg;
Vr=ACptr->Gen->Vr;
Vim=ACptr->Gen->Vi;
Ir=ACptr->Gen->Ir;
Iim=ACptr->Gen->Ii;
Vq=ACptr->Gen->Vq;
Vd=ACptr->Gen->Vd;
Iq=ACptr->Gen->Iq;
Id=ACptr->Gen->Id;
Ia=ACptr->Gen->Ia;
if (flagF) {
dF[i+1]=Pg-Vr*Ir-Vim*Iim;
dF[i+2]=Qg-Vim*Ir+Vr*Iim;
dF[i+3]=Eq-Vq-Ra*Iq+Xd*Id;
dF[i+4]=Vd+Ra*Id+Xq*Iq;
dF[i+5]=Vr-cos(dg)*Vq+sin(dg)*Vd;
dF[i+6]=Vim-sin(dg)*Vq-cos(dg)*Vd;
dF[i+7]=Ir-cos(dg)*Iq+sin(dg)*Id;
dF[i+8]=Iim-sin(dg)*Iq-cos(dg)*Id;
dF[i+9]=Vr-Vi*cos(di);
dF[i+10]=Vim-Vi*sin(di);
dF[i+11]=Ia*Ia-Ir*Ir-Iim*Iim;
}
if (flagJ) {
/* df1/dKg */
j=ACvar[BEptr->N];
if(DPg) {
if (strpbrk(BEptr->Type,"S")) JacElement(Mptr,i+1,j,DPg);
else if(Acont) JacElement(Mptr,i+1,j+2,DPg);
}
/* df1/dVr, df1/dVi, df1/dIr, df1/dIi */
JacElement(Mptr,i+1,i+3,-Ir);
JacElement(Mptr,i+1,i+4,-Iim);
JacElement(Mptr,i+1,i+5,-Vr);
JacElement(Mptr,i+1,i+6,-Vim);
/* df2/dQg */
if (QRcont && strpbrk(ACptr->Type,"G")) {
j=ACvar[ACptr->Cont->N];
if (strpbrk(ACptr->cont,"V")) JacElement(Mptr,i+2,j+1,ACptr->Kbg);
else JacElement(Mptr,i+2,j+1,0.);
}
else {
j=ACvar[ACptr->N];
if (strpbrk(ACptr->cont,"V")) JacElement(Mptr,i+2,j+1,1.);
else JacElement(Mptr,i+2,j+1,0.);
}
if (strpbrk(ACptr->cont,"I")) JacElement(Mptr,i+2,i+11,1.);
else JacElement(Mptr,i+2,i+11,0.);
if (strpbrk(ACptr->cont,"E")) JacElement(Mptr,i+2,i+1,1.);
else JacElement(Mptr,i+2,i+1,0.);
/* df2/dVr, df2/dVi, df2/dIr, df2/dIi */
JacElement(Mptr,i+2,i+3,Iim);
JacElement(Mptr,i+2,i+4,-Ir);
JacElement(Mptr,i+2,i+5,-Vim);
JacElement(Mptr,i+2,i+6,Vr);
/* df3/dx */
if (strpbrk(ACptr->cont,"E")) JacElement(Mptr,i+3,i+1,0.);
else JacElement(Mptr,i+3,i+1,1.);
JacElement(Mptr,i+3,i+7,-1.);
JacElement(Mptr,i+3,i+9,-Ra);
JacElement(Mptr,i+3,i+10,Xd);
/* df4/dx */
JacElement(Mptr,i+4,i+8,1.);
JacElement(Mptr,i+4,i+9,Xq);
JacElement(Mptr,i+4,i+10,Ra);
/* df5/dx */
JacElement(Mptr,i+5,i+2,sin(dg)*Vq+cos(dg)*Vd);
JacElement(Mptr,i+5,i+3,1.);
JacElement(Mptr,i+5,i+7,-cos(dg));
JacElement(Mptr,i+5,i+8,sin(dg));
/* df6/dx */
JacElement(Mptr,i+6,i+2,-cos(dg)*Vq+sin(dg)*Vd);
JacElement(Mptr,i+6,i+4,1.);
JacElement(Mptr,i+6,i+7,-sin(dg));
JacElement(Mptr,i+6,i+8,-cos(dg));
/* df7/dx */
JacElement(Mptr,i+7,i+2,sin(dg)*Iq+cos(dg)*Id);
JacElement(Mptr,i+7,i+5,1.);
JacElement(Mptr,i+7,i+9,-cos(dg));
JacElement(Mptr,i+7,i+10,sin(dg));
/* df8/dx */
JacElement(Mptr,i+8,i+2,-cos(dg)*Iq+sin(dg)*Id);
JacElement(Mptr,i+8,i+6,1.);
JacElement(Mptr,i+8,i+9,-sin(dg));
JacElement(Mptr,i+8,i+10,-cos(dg));
/* df9/dV */
j=ACvar[ACptr->N];
if (ACptr->Cont!=NULL) JacElement(Mptr,i+9,j+1,-cos(di));
else JacElement(Mptr,i+9,j+1,0.);
/* df9/ddelta */
if (!strpbrk(ACptr->Type,"S")) {
j=ACvar[ACptr->N];
JacElement(Mptr,i+9,j,Vi*sin(di));
}
/* df9/dVr */
JacElement(Mptr,i+9,i+3,1.);
/* df10/dV */
j=ACvar[ACptr->N];
if (ACptr->Cont!=NULL) JacElement(Mptr,i+10,j+1,-sin(di));
else JacElement(Mptr,i+10,j+1,0.);
/* df10/ddelta */
if (!strpbrk(ACptr->Type,"S")) {
j=ACvar[ACptr->N];
JacElement(Mptr,i+10,j,-Vi*cos(di));
}
/* df10/dVi */
JacElement(Mptr,i+10,i+4,1.);
/* df11/dx */
JacElement(Mptr,i+11,i+5,-2.*Ir);
JacElement(Mptr,i+11,i+6,-2.*Iim);
if (strpbrk(ACptr->cont,"I")) JacElement(Mptr,i+11,i+11,0.);
else JacElement(Mptr,i+11,i+11,2.*Ia);
}
}
}
/* -------------- Detect Area/System Generation Errors ----------------------- */
if (!flagPgMax && val!=NULL) {
if (Acont && Narea>1) for(Aptr=dataPtr->Area;Aptr!=NULL;Aptr=Aptr->Next) {
if (!Aptr->SPg) {
if (!*val) *val=-1;
else *val=-2;
return(Aptr);
}
} else if (!SPg) {
if (!*val) *val=-1;
else *val=-2;
}
}
return(NULL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -