?? writesol.cpp
字號:
/* Write solution in files: -Printed output.
-Bus voltages and angles.
-IEEE common format for SSSP or other
P.F. programs. */
#include "write.h"
#include <string.h> /* FACTS */
/* --------------- Output ----------------- */
#ifdef ANSIPROTO
void Output(INDEX Iter,char *File1,char *str)
#else
void Output(Iter,File1,str)
INDEX Iter;
char *File1,*str;
#endif
{
ACbusData *ACptr,*From,*To;
AClist *ACLptr;
DClist *DCLptr;
DCbusData *DCptrR,*DCptrI,*DCptr,*DCptrp;
ElementData *Eptr;
ElementList *ELptr;
AreaData *Aptr;
VALUETYPE P,Q,Pl,Ql,Pij,Qij,Pji,Qji,Vi,di,Vj,dj,Iij,Iji,I,ratio;
VALUETYPE G,B,Gp,Bp,Gi,Bi,Gj,Bj,Pg,KVi,KVj,KV,Qm,delta,theta,vals;
FILE *OutFile;
INDEX i,j;
SVCbusData *SVCptr; /* FACTS */
TCSCbusData *TCSCptr; /* FACTS */
STATCOMbusData *STATCOMptr; /* FACTS */
VALUETYPE Xc,Max,Vn; /* FACTS */
OutFile=OpenOutput(File1);
fCustomPrint(OutFile,"\n%s\n",str);
i=0;
while(i<=2 && dataPtr->Title[0][0]!='\0'){
fCustomPrint(OutFile,"%s",dataPtr->Title[i]);
i++;
}
if (!flagH) lambda_o=0;
fCustomPrint(OutFile," Loading factor -> %-10.6lg\n",lambda+lambda_o);
fCustomPrint(OutFile," AC buses -> %d\n",Nac);
fCustomPrint(OutFile," PV buses -> %d\n",Nvolt);
fCustomPrint(OutFile," X buses -> %d\n",NXvolt);
fCustomPrint(OutFile," Z buses -> %d\n",NZvolt);
fCustomPrint(OutFile," AC elem. -> %d\n",NacEl);
fCustomPrint(OutFile," V Reg. Trf. -> %d\n",NregV);
fCustomPrint(OutFile," PQ Reg. Trf. -> %d\n",NregPQ);
fCustomPrint(OutFile," DC buses -> %d\n",Ndc);
fCustomPrint(OutFile," DC lines -> %d\n",Ndc/2);
fCustomPrint(OutFile," SVCs -> %d\n",Nsvc); /* FACTS */
fCustomPrint(OutFile," TCSCs -> %d\n",Ntcsc); /* FACTS */
fCustomPrint(OutFile," STATCOMs -> %d\n",Nstatcom); /* FACTS */
fCustomPrint(OutFile," No. Areas -> %d\n",Narea);
fCustomPrint(OutFile," Iterations -> %d (Maximum = %d)\n",Iter,MaxIter);
fCustomPrint(OutFile," Max. p.u. mismatch -> %-8.4lg (Tolerance = %-8.4lg)\n",MaxdFi,Tol);
fCustomPrint(OutFile," Reference Bus(es) -> ");
i=0;
for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next)
if(strpbrk(ACptr->Type,"S")){
if (i>0) fCustomPrint(OutFile," ");
fCustomPrint(OutFile,"%d %s (Angle=%6.2lf deg.)\n",ACptr->Num,ACptr->Name,ACptr->Ang/K3);
i++;
}
if (i==0) fCustomPrint(OutFile,"\n");
fCustomPrint(OutFile,"\n");
if (Narea<2) ACptr=dataPtr->ACbus;
else {
Aptr=dataPtr->Area;
ACLptr=Aptr->AC;
ACptr=ACLptr->AC;
}
fCustomPrint(OutFile,"\n ***** AC RESULTS *****\n");
fCustomPrint(OutFile," L=lower limit H=higher limit O=over limit U=under limit\n");
fCustomPrint(OutFile,"--|----|------------|------|-------|--------|--------|--------|----|------------|-|--------|--------|--------|-------|-|-----------------\n");
fCustomPrint(OutFile," A i Bus V(pu) V(kV) Pg(MW) Pload Pshunt| j Bus C Pij Plosses |Iij|(A) kVi/kVj T Controlled Bus \n");
fCustomPrint(OutFile," n Name d(deg) d(rad) Qg(MVAR) Qload Qshunt| Name r Qij Qlosses a(deg) k Name \n");
while(ACptr!=NULL){
fCustomPrint(OutFile,"--|----|------------|------|-------|--------|--------|--------|----|------------|-|--------|--------|--------|-------|-|----|------------\n");
if(ACptr->Area!=NULL) {
fCustomPrint(OutFile,"%2d ",ACptr->Area->N);
} else fCustomPrint(OutFile,"%2d ",0);
fCustomPrint(OutFile,"%4d ",ACptr->Num);
fCustomPrint(OutFile,"%12s ",ACptr->Name);
fCustomPrint(OutFile,"%6.4lf ",ACptr->V);
KVi=ACptr->KV;
if (KVi > 0) fCustomPrint(OutFile,"%7.2lf",KVi*ACptr->V);
else fCustomPrint(OutFile,"%7s","");
if(ACptr->Vmax==ACptr->Vmin) {
if(ACptr->Vlmax==ACptr->Vlmin) fCustomPrint(OutFile," ");
else if(ACptr->V==ACptr->Vlmin) fCustomPrint(OutFile,"L");
else if(ACptr->V==ACptr->Vlmax) fCustomPrint(OutFile,"H");
else if(ACptr->V<ACptr->Vlmin) fCustomPrint(OutFile,"U");
else if(ACptr->V>ACptr->Vlmax) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
}
else if(ACptr->V==ACptr->Vmin) fCustomPrint(OutFile,"L");
else if(ACptr->V==ACptr->Vmax) fCustomPrint(OutFile,"H");
else if(ACptr->V<ACptr->Vmin) fCustomPrint(OutFile,"U");
else if(ACptr->V>ACptr->Vmax) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
Pg=ACptr->PG;
fCustomPrint(OutFile,"%8.2lf",Pg*Sn);
if(Pg==ACptr->Pmax) fCustomPrint(OutFile,"H");
else if(Pg>ACptr->Pmax) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
Pl=(ACptr->Pn+lambda*ACptr->Pnl)*pow(ACptr->V,ACptr->a)+
(ACptr->Pz+lambda*ACptr->Pzl)*ACptr->V*ACptr->V;
Ql=(ACptr->Qn+lambda*ACptr->Qnl)*pow(ACptr->V,ACptr->b)+
(ACptr->Qz+lambda*ACptr->Qzl)*ACptr->V*ACptr->V;
fCustomPrint(OutFile,"%8.2lf ",Pl*Sn);
fCustomPrint(OutFile,"%8.2lf|",ACptr->G*ACptr->V*ACptr->V*Sn);
i=0;
/* -------------------------------------- DC element results ------------------------------------------- */
for (DCLptr=ACptr->DC;DCLptr!=NULL;DCLptr=DCLptr->Next) {
if (i!=0) fCustomPrint(OutFile,"%62s|","");
DCptr=DCLptr->DC;
fCustomPrint(OutFile," DC %-12s %1s ",DCptr->Name,DCptr->Type);
fCustomPrint(OutFile,"%8.2lf ",-DCptr->P*Sn);
fCustomPrint(OutFile," Alpha=%6.2lf",DCptr->Alfa/K3);
if(DCptr->Alfa<=DCptr->AlfaMin) fCustomPrint(OutFile,"L");
else if(DCptr->Alfa>=DCptr->AlfaMax) fCustomPrint(OutFile,"H");
else fCustomPrint(OutFile," ");
fCustomPrint(OutFile," Tap=%6.4lf",DCptr->Tap);
if(DCptr->Tap==DCptr->TapMin) fCustomPrint(OutFile,"L");
else if(DCptr->Tap==DCptr->TapMax) fCustomPrint(OutFile,"H");
else if(DCptr->Tap<DCptr->TapMin) fCustomPrint(OutFile,"U");
else if(DCptr->Tap>DCptr->TapMax) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
fCustomPrint(OutFile,"\n");
if (i==0) {
Qm=ACptr->Smax*ACptr->Smax-Pg*Pg;
if (!flagSmax && Qm>0) {
Qm=sqrt(Qm);
if (ACptr->Qmax<Qm) ACptr->Max=ACptr->Qmax;
else ACptr->Max=Qm;
if (ACptr->Qmin>-Qm) ACptr->Min=ACptr->Qmin;
else ACptr->Min=-Qm;
} else {
ACptr->Max=ACptr->Qmax;
ACptr->Min=ACptr->Qmin;
}
i++; fCustomPrint(OutFile,"%21s","");
delta=ACptr->Ang;
if (delta>=0) vals=1.00;
else vals=-1.00;
if (fabs(delta)>2*PI) delta=delta-vals*floor(fabs(delta)/(2*PI))*2*PI;
if (fabs(delta)>PI) delta=delta-vals*2*PI;
ACptr->Ang=delta;
fCustomPrint(OutFile,"%6.2lf ",ACptr->Ang/K3);
fCustomPrint(OutFile,"%7.4lf ",ACptr->Ang);
fCustomPrint(OutFile,"%8.2lf",ACptr->Qg*Sn);
if(ACptr->Max==ACptr->Min) fCustomPrint(OutFile," ");
else if(ACptr->Qg==ACptr->Min) fCustomPrint(OutFile,"L");
else if(ACptr->Qg==ACptr->Max) fCustomPrint(OutFile,"H");
else if(ACptr->Qg<ACptr->Min) fCustomPrint(OutFile,"U");
else if(ACptr->Qg>ACptr->Max) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
fCustomPrint(OutFile,"%8.2lf ",Ql*Sn);
fCustomPrint(OutFile,"%8.2lf|",ACptr->B*ACptr->V*ACptr->V*Sn);
} else fCustomPrint(OutFile,"%62s|","");
fCustomPrint(OutFile,"%19s ","");
fCustomPrint(OutFile,"%8.2lf ",-DCptr->Q*Sn);
fCustomPrint(OutFile," Gamma=%6.2lf",DCptr->Gamma/K3);
if(DCptr->Gamma<=DCptr->GammaMin) fCustomPrint(OutFile,"L");
else fCustomPrint(OutFile," ");
fCustomPrint(OutFile,"\n");
}
/* --------------------------------------- AC element results -------------------------------------------- */
for (ELptr=ACptr->Elem;ELptr!=NULL;ELptr=ELptr->Next) { Eptr=ELptr->Eptr;
Vi=Eptr->From->V; di=Eptr->From->Ang; KVi=Eptr->From->KV;
Vj=Eptr->To->V; dj=Eptr->To->Ang; KVj=Eptr->To->KV;
if (KVi>0 && KVj>0) ratio=KVi/KVj/Eptr->Tap;
else ratio=1/Eptr->Tap;
G=(Eptr->G*cos(Eptr->Ang)-Eptr->B*sin(Eptr->Ang))*Eptr->Tap;
B=(Eptr->G*sin(Eptr->Ang)+Eptr->B*cos(Eptr->Ang))*Eptr->Tap;
Gi=(Eptr->G1+Eptr->G)*pow(Eptr->Tap,2.0)-G;
Bi=(Eptr->B1+Eptr->B)*pow(Eptr->Tap,2.0)-B;
Gp=(Eptr->G*cos(Eptr->Ang)+Eptr->B*sin(Eptr->Ang))*Eptr->Tap;
Bp=(-Eptr->G*sin(Eptr->Ang)+Eptr->B*cos(Eptr->Ang))*Eptr->Tap;
Gj=Eptr->G+Eptr->G2-Gp;
Bj=Eptr->B+Eptr->B2-Bp;
Pij=Vi*Vi*(Gi+G)-Vi*Vj*(G*cos(di-dj)+B*sin(di-dj));
Qij= -Vi*Vi*(Bi+B)-Vi*Vj*(G*sin(di-dj)-B*cos(di-dj));
Iij=sqrt(Pij*Pij+Qij*Qij)/Vi;
Pji=Vj*Vj*(Gj+Gp)-Vi*Vj*(Gp*cos(dj-di)+Bp*sin(dj-di));
Qji= -Vj*Vj*(Bj+Bp)-Vi*Vj*(Gp*sin(dj-di)-Bp*cos(dj-di));
Iji=sqrt(Pji*Pji+Qji*Qji)/Vj;
if(Eptr->From==ACptr) To=Eptr->To;
else {
To=Eptr->From;
P=Pij; Pij=Pji; Pji=P;
Q=Qij; Qij=Qji; Qji=Q;
I=Iij; Iij=Iji; Iji=I;
KV=KVi; KVi=KVj; KVj=KV;
ratio=1/ratio;
}
if (i!=0) fCustomPrint(OutFile,"%62s|","");
fCustomPrint(OutFile,"%4d ",To->Num);
fCustomPrint(OutFile,"%12s ",To->Name);
fCustomPrint(OutFile,"%1s ",Eptr->Ckt);
fCustomPrint(OutFile,"%8.2lf",Pij*Sn);
if(ACptr!=Eptr->Cont || strcmp(Eptr->Ctype,"P") || Eptr->Max==Eptr->Min) fCustomPrint(OutFile," ");
else if(Pij==Eptr->Min) fCustomPrint(OutFile,"L");
else if(Pij==Eptr->Max) fCustomPrint(OutFile,"H");
else if(Pij<Eptr->Min) fCustomPrint(OutFile,"U");
else if(Pij>Eptr->Max) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
fCustomPrint(OutFile,"%8.2lf ",(Pij+Pji)*Sn);
if (KVi > 0) fCustomPrint(OutFile,"%8.2lf",Iij*1000*Sn/(sqrt(3)*KVi));
else fCustomPrint(OutFile,"%8s","");
if(Eptr->Imax<=0) fCustomPrint(OutFile," ");
else if(Iij==Eptr->Imax) fCustomPrint(OutFile,"H");
else if(Iij>Eptr->Imax) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
if (strpbrk(Eptr->Type,"TR")) {
fCustomPrint(OutFile,"%7.4lf",ratio);
if(!strcmp(Eptr->Ctype,"P")||Eptr->Tmax==Eptr->Tmin) fCustomPrint(OutFile," ");
else if(Eptr->Tap==1/Eptr->Tmin) fCustomPrint(OutFile,"L");
else if(Eptr->Tap==1/Eptr->Tmax) fCustomPrint(OutFile,"H");
else if(Eptr->Tap>1/Eptr->Tmin) fCustomPrint(OutFile,"U");
else if(Eptr->Tap<1/Eptr->Tmax) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
}
else fCustomPrint(OutFile,"%8s","");
fCustomPrint(OutFile,"%1s ",Eptr->Ctype);
if (Eptr->Cont!=NULL) {
fCustomPrint(OutFile,"%4d ",Eptr->Cont->Num);
fCustomPrint(OutFile,"%12s ",Eptr->Cont->Name);
}
fCustomPrint(OutFile,"\n");
if (i==0) {
i++; fCustomPrint(OutFile,"%21s","");
delta=ACptr->Ang;
if (delta>=0) vals=1.00;
else vals=-1.00;
if (fabs(delta)>2*PI) delta=delta-vals*floor(fabs(delta)/(2*PI))*2*PI;
if (fabs(delta)>PI) delta=delta-vals*2*PI;
ACptr->Ang=delta;
fCustomPrint(OutFile,"%6.2lf ",ACptr->Ang/K3);
fCustomPrint(OutFile,"%7.4lf ",ACptr->Ang);
fCustomPrint(OutFile,"%8.2lf",ACptr->Qg*Sn);
if(ACptr->Qmax==ACptr->Qmin) fCustomPrint(OutFile," ");
else if(ACptr->Qg==ACptr->Qmin) fCustomPrint(OutFile,"L");
else if(ACptr->Qg==ACptr->Qmax) fCustomPrint(OutFile,"H");
else if(ACptr->Qg<ACptr->Qmin) fCustomPrint(OutFile,"U");
else if(ACptr->Qg>ACptr->Qmax) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
fCustomPrint(OutFile,"%8.2lf ",Ql*Sn);
fCustomPrint(OutFile,"%8.2lf|",ACptr->B*ACptr->V*ACptr->V*Sn);
} else fCustomPrint(OutFile,"%62s|","");
fCustomPrint(OutFile,"%19s ","");
fCustomPrint(OutFile,"%8.2lf",Qij*Sn);
if(ACptr!=Eptr->Cont || strcmp(Eptr->Ctype,"Q") || Eptr->Max==Eptr->Min)
fCustomPrint(OutFile," ");
else if(Qij==Eptr->Min) fCustomPrint(OutFile,"L");
else if(Qij==Eptr->Max) fCustomPrint(OutFile,"H");
else if(Qij<Eptr->Min) fCustomPrint(OutFile,"U");
else if(Qij>Eptr->Max) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
fCustomPrint(OutFile,"%8.2lf ",(Qij+Qji)*Sn);
fCustomPrint(OutFile,"%9s","");
if (strpbrk(Eptr->Type,"TR")) {
fCustomPrint(OutFile,"%7.3lf",Eptr->Ang/K3);
if(strpbrk(Eptr->Ctype,"QV")||Eptr->Tmax==Eptr->Tmin) fCustomPrint(OutFile," ");
else if(Eptr->Ang==Eptr->Tmin) fCustomPrint(OutFile,"L");
else if(Eptr->Ang==Eptr->Tmax) fCustomPrint(OutFile,"H");
else if(Eptr->Ang<Eptr->Tmin) fCustomPrint(OutFile,"U");
else if(Eptr->Ang>Eptr->Tmax) fCustomPrint(OutFile,"O");
else fCustomPrint(OutFile," ");
}
fCustomPrint(OutFile,"\n");
}
if (i==0) {
i++; fCustomPrint(OutFile,"%21s","");
delta=ACptr->Ang;
if (delta>=0) vals=1.00;
else vals=-1.00;
if (fabs(delta)>2*PI) delta=delta-vals*floor(fabs(delta)/(2*PI))*2*PI;
if (fabs(delta)>PI) delta=delta-vals*2*PI;
ACptr->Ang=delta;
fCustomPrint(OutFile,"%6.2lf ",ACptr->Ang/K3);
fCustomPrint(OutFile,"%7.4lf ",ACptr->Ang);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -