📄 writesol.cpp
字号:
fprintf(OutFile,"%7.4lf ",ACptr->Ang);
fprintf(OutFile,"%8.2lf",ACptr->Qg*Sn);
if(ACptr->Qmax==ACptr->Qmin) fprintf(OutFile," ");
else if(ACptr->Qg==ACptr->Qmin) fprintf(OutFile,"L");
else if(ACptr->Qg==ACptr->Qmax) fprintf(OutFile,"H");
else if(ACptr->Qg<ACptr->Qmin) fprintf(OutFile,"U");
else if(ACptr->Qg>ACptr->Qmax) fprintf(OutFile,"O");
else fprintf(OutFile," ");
fprintf(OutFile,"%8.2lf ",Ql*Sn);
fprintf(OutFile,"%8.2lf|\n",ACptr->B*ACptr->V*ACptr->V*Sn);
}
/* -------------------------------------- Generator results -------------------------------------------- */
if (ACptr->Gen!=NULL){
fprintf(OutFile," Gen.-> Ia=%7.4lf[pu]",ACptr->Gen->Ia);
if (ACptr->Gen->Ia>ACptr->Gen->IaMax) fprintf(OutFile,"O");
else if (ACptr->Gen->Ia==ACptr->Gen->IaMax) fprintf(OutFile,"H");
else fprintf(OutFile," ");
if (ACptr->Gen->Ii==0 && ACptr->Gen->Ir==0) fprintf(OutFile," al=%7.2lf[deg]",0.0);
else fprintf(OutFile," al=%7.2lf[deg]",atan2(ACptr->Gen->Ii,ACptr->Gen->Ir)/K3);
fprintf(OutFile,"%23s|\n","");
fprintf(OutFile," Eq=%7.4lf[pu]",ACptr->Gen->Eq);
if (ACptr->Gen->Eq>ACptr->Gen->EqMax) fprintf(OutFile,"O");
else if (ACptr->Gen->Eq==ACptr->Gen->EqMax) fprintf(OutFile,"H");
else if (ACptr->Gen->Eq<ACptr->Gen->EqMin) fprintf(OutFile,"U");
else if (ACptr->Gen->Eq==ACptr->Gen->EqMin) fprintf(OutFile,"L");
else fprintf(OutFile," ");
fprintf(OutFile," dg=%7.2lf[deg]",ACptr->Gen->dg/K3);
fprintf(OutFile,"%23s|\n","");
}
if (Narea>1) {
ACLptr=ACLptr->Next;
if(ACLptr!=NULL) ACptr=ACLptr->AC;
else {
Aptr=Aptr->Next;
if (Aptr!=NULL) { ACLptr=Aptr->AC; ACptr=ACLptr->AC;}
else ACptr=NULL;
}
} else ACptr=ACptr->Next;
}
if (dataPtr->Area!=NULL) {
fprintf(OutFile,"\n\n ***** AC AREA RESULTS *****\n");
fprintf(OutFile,"---------------------------------|-----------------|----|------------|----|------------|-|--------|----\n");
fprintf(OutFile," Area Slack Bus | i Bus Name j Bus C Pmeter To \n");
fprintf(OutFile," n Name k Name | (Meter) Name k (MW) Area\n");
for(Aptr=dataPtr->Area;Aptr!=NULL;Aptr=Aptr->Next){
fprintf(OutFile,"--|------------------------------|----|------------|----|------------|----|------------|-|--------|----\n");
Aptr->SPg=0;
fprintf(OutFile,"%2d ",Aptr->N);
fprintf(OutFile,"%30s ",Aptr->Name);
fprintf(OutFile,"%4d ",Aptr->BSptr->Num);
fprintf(OutFile,"%12s|",Aptr->BSptr->Name);
i=0;
for (DCLptr=Aptr->DC;DCLptr!=NULL;DCLptr=DCLptr->Next) {
DCptr=DCLptr->DC->Meter;
DCptrp=DCptr->To;
if (i!=0) fprintf(OutFile,"%51s|",""); else i++;
fprintf(OutFile,"DC %1s %-12s ",DCptr->Type,DCptr->Name);
fprintf(OutFile," %1s %-12s ",DCptrp->Type,DCptrp->Name);
P= -DCptr->P;
if(DCptr->Area!=Aptr) P= -P;
Aptr->SPg=Aptr->SPg+P;
fprintf(OutFile,"%8.2lf ",P*Sn);
if(DCptr->Area!=Aptr) fprintf(OutFile,"%2d\n",DCptr->Area->N);
else fprintf(OutFile,"%2d\n",DCptrp->Area->N);
}
for(ELptr=Aptr->Elem;ELptr!=NULL;ELptr=ELptr->Next) {
Eptr=ELptr->Eptr;
Vi=Eptr->From->V; di=Eptr->From->Ang;
Vj=Eptr->To->V; dj=Eptr->To->Ang;
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;
if (Eptr->From==Eptr->Meter) {
From=Eptr->From;
To=Eptr->To;
P=Vi*Vi*(Gi+G)-Vi*Vj*(G*cos(di-dj)+B*sin(di-dj));
} else {
From=Eptr->To;
To=Eptr->From;
P=Vj*Vj*(Gj+Gp)-Vi*Vj*(Gp*cos(dj-di)+Bp*sin(dj-di));
}
if (i!=0) fprintf(OutFile,"%51s|",""); else i++;
fprintf(OutFile,"%4d ",From->Num);
fprintf(OutFile,"%12s ",From->Name);
fprintf(OutFile,"%4d ",To->Num);
fprintf(OutFile,"%12s ",To->Name);
fprintf(OutFile,"%1s ",Eptr->Ckt);
if(Eptr->Meter->Area!=Aptr) P= -P;
Aptr->SPg=Aptr->SPg+P;
fprintf(OutFile,"%8.2lf ",P*Sn);
if(From->Area!=Aptr) fprintf(OutFile,"%2d\n",From->Area->N);
else fprintf(OutFile,"%2d\n",To->Area->N);
}
if(i==0) fprintf(OutFile,"\n");
else fprintf(OutFile,"%51s| MW Export = %-10.2lf MW Sched. = %-10.2lf\n","",Aptr->SPg*Sn,Aptr->P*Sn);
}
}
if (dataPtr->DCbus!=NULL) {
fprintf(OutFile,"\n\n ***** DC RESULTS *****\n");
fprintf(OutFile," L=lower limit H=higher limit O=over limit U=under limit\n");
fprintf(OutFile,"---|--|----|------------|--------|-|--|--|--------|--------|--------|--------|--------|--------|---------\n");
fprintf(OutFile," i A j AC Bus DC Bus C S1 S2 Vd Id P Q Alpha Gamma Tap \n");
fprintf(OutFile," n Name Name v (KV) (A) (MW) (MVAR) (deg) (deg) (pu) \n");
i=0;
for(DCptrR=dataPtr->DCbus;DCptrR!=NULL;DCptrR=DCptrR->Next){
DCptrI=DCptrR->To;
if(!strcmp(DCptrR->Type,"R")){
fprintf(OutFile,"---|--|----|------------|--------|-|--|--|--------|--------|--------|--------|--------|--------|---------\n");
fprintf(OutFile,"%3d ",++i);
for (j=1;j<=2;j++) {
if(j==1) {
DCptr=DCptrR;
DCptrp=DCptrI;
}
else {
DCptr=DCptrI;
DCptrp=DCptrR;
fprintf(OutFile,"%4s","");
}
if(DCptr->Area!=NULL) fprintf(OutFile,"%2d ",DCptr->Area->N);
else fprintf(OutFile,"%2d ",0);
fprintf(OutFile,"%4d %12s ",DCptr->AC->Num,DCptr->AC->Name);
fprintf(OutFile,"%8s ",DCptr->Name);
fprintf(OutFile,"%1s ",DCptr->Type);
fprintf(OutFile,"%2s ",DCptr->Cont1);
fprintf(OutFile,"%2s ",DCptr->Cont2);
fprintf(OutFile,"%8.2lf ",DCptr->Vd*DCptr->Vn);
fprintf(OutFile,"%8.2lf ",DCptr->Id*Sn/DCptr->Vn*1000);
fprintf(OutFile,"%8.2lf ",DCptr->P*Sn);
fprintf(OutFile,"%8.2lf ",DCptr->Q*Sn);
fprintf(OutFile,"%8.2lf",DCptr->Alfa/K3);
if(DCptr->Alfa<=DCptr->AlfaMin) fprintf(OutFile,"L");
else if(DCptr->Alfa>=DCptr->AlfaMax) fprintf(OutFile,"H");
else fprintf(OutFile," ");
fprintf(OutFile,"%8.2lf",DCptr->Gamma/K3);
if(DCptr->Gamma<=DCptr->GammaMin) fprintf(OutFile,"L");
else fprintf(OutFile," ");
fprintf(OutFile,"%8.4lf",DCptr->Tap);
if(DCptr->Tap==DCptr->TapMin) fprintf(OutFile,"L");
else if(DCptr->Tap==DCptr->TapMax) fprintf(OutFile,"H");
else if(DCptr->Tap<DCptr->TapMin) fprintf(OutFile,"U");
else if(DCptr->Tap>DCptr->TapMax) fprintf(OutFile,"O");
else fprintf(OutFile," ");
fprintf(OutFile,"\n");
}
}
}
}
/* FACTS */
if(dataPtr->SVCbus!=NULL){
fprintf(OutFile,"\n\n ***** SVC RESULTS *****\n\n");
fprintf(OutFile," L=lower limit H=higher limit\n\n");
fprintf(OutFile,"---|--|----|------------|------|------|----|------------|------|------|--------|--------|--------\n");
fprintf(OutFile," i A j Cont. Bus Vj dj k SVC Bus Vk dk Qsvc Alpha Bv \n");
fprintf(OutFile," n Na me (pu) (deg) Name (pu) (deg) (MVar) (deg) (pu) \n");
i=0;
for(SVCptr=dataPtr->SVCbus;SVCptr!=NULL;SVCptr=SVCptr->Next){
fprintf(OutFile,"---|--|----|------------|------|------|----|------------|------|------|--------|--------|--------\n");
fprintf(OutFile,"%3d ",++i);
if(SVCptr->From->Area!=NULL) fprintf(OutFile,"%2d ",SVCptr->From->Area->N);
else fprintf(OutFile,"%2d ",0);
fprintf(OutFile,"%4d %12s ",SVCptr->Ctrl->Num,SVCptr->Ctrl->Name);
fprintf(OutFile,"%6.4lf %6.2lf ",SVCptr->Ctrl->V,SVCptr->Ctrl->Ang/K3);
fprintf(OutFile,"%4d %12s ",SVCptr->From->Num,SVCptr->Name);
fprintf(OutFile,"%6.4lf %6.2lf ",SVCptr->From->V,SVCptr->From->Ang/K3);
fprintf(OutFile,"%8.2lf ",SVCptr->Qsvc*Sn);
fprintf(OutFile,"%8.2lf",SVCptr->alpha_svc/K3);
if(SVCptr->alpha_svc<=SVCptr->AlphaMin) fprintf(OutFile,"L");
else if(SVCptr->alpha_svc>=SVCptr->AlphaMax) fprintf(OutFile,"H");
else fprintf(OutFile," ");
fprintf(OutFile,"%8.4lf ",SVCptr->Bv);
fprintf(OutFile,"\n\n");
}
}
if(dataPtr->TCSCbus!=NULL){
fprintf(OutFile,"\n\n ***** TCSC RESULTS *****\n\n");
fprintf(OutFile," L=lower limit H=higher limit\n\n");
fprintf(OutFile,"---|--|----|------------|------|------|----|------------|------|------|--------|--------|--------|--------|--------|--------|--------|----|--------\n");
fprintf(OutFile," i A k From Bus Vk dk m To Bus Vm dm Ptcsc Qtcsck Qtcscm Be Alpha Itcsc delta_t Ctrl Ctrl \n");
fprintf(OutFile," n Name (pu) (deg) Name (pu) (deg) (MW) (MVar) (MVar) (pu) (deg) (kA) (deg) mode val \n");
i=0;
for(TCSCptr=dataPtr->TCSCbus;TCSCptr!=NULL;TCSCptr=TCSCptr->Next){
fprintf(OutFile,"---|--|----|------------|------|------|----|------------|------|------|--------|--------|--------|--------|--------|--------|--------|----|--------\n");
Vn=TCSCptr->From->KV;
Xc=TCSCptr->Xc;
Max=TCSCptr->Max;
fprintf(OutFile,"%3d ",++i);
if(TCSCptr->From->Area!=NULL) fprintf(OutFile,"%2d ",TCSCptr->From->Area->N);
else fprintf(OutFile,"%2d ",0);
fprintf(OutFile,"%4d %12s ",TCSCptr->From->Num,TCSCptr->From->Name);
fprintf(OutFile,"%6.4lf %6.2lf ",TCSCptr->From->V,TCSCptr->From->Ang/K3);
fprintf(OutFile,"%4d %12s ",TCSCptr->To->Num,TCSCptr->To->Name);
fprintf(OutFile,"%6.4lf %6.2lf ",TCSCptr->To->V,TCSCptr->To->Ang/K3);
fprintf(OutFile,"%8.2lf ",TCSCptr->Ptcsc*Sn);
fprintf(OutFile,"%8.2lf ",TCSCptr->Qtcsck*Sn);
fprintf(OutFile,"%8.2lf ",TCSCptr->Qtcscm*Sn);
fprintf(OutFile,"%8.2lf ",TCSCptr->Be);
fprintf(OutFile,"%8.2lf",TCSCptr->alpha_tcsc/K3);
if(TCSCptr->alpha_tcsc<=TCSCptr->AlphaMin) fprintf(OutFile,"L");
else if(TCSCptr->alpha_tcsc>=TCSCptr->AlphaMax) fprintf(OutFile,"H");
else fprintf(OutFile," ");
fprintf(OutFile,"%8.3lf ",TCSCptr->Itcsc*Sn/(sqrt(3)*Vn));
fprintf(OutFile,"%8.4lf ",TCSCptr->delta_t/K3);
fprintf(OutFile," %c ",TCSCptr->Cont[0]);
if (!strcmp(TCSCptr->Cont,"X")) fprintf(OutFile," %8.3lf",100.0/(TCSCptr->Bset*Max*Xc));
else if (!strcmp(TCSCptr->Cont,"P")) fprintf(OutFile," %8.3lf",TCSCptr->Control*Sn);
else if (!strcmp(TCSCptr->Cont,"I")) fprintf(OutFile," %8.3lf",TCSCptr->Control*Sn/(sqrt(3)*Vn));
else if (!strcmp(TCSCptr->Cont,"D")) fprintf(OutFile," %8.3lf",TCSCptr->Control/K3);
fprintf(OutFile,"\n\n");
}
}
if(dataPtr->STATCOMbus!=NULL){
fprintf(OutFile,"\n\n ***** STATCOM RESULTS *****\n\n");
fprintf(OutFile," L=lower limit H=higher limit\n\n");
fprintf(OutFile,"---|--|----|------------|------|------|----|------------|------|--------|--------|--------|--------|--------|--------|--------------|--------\n");
fprintf(OutFile," i A j Cont. Bus Vj dj l STATCOM Bus Vinv K Vdc Alpha P Q I I (pu w.r.t. Theta \n");
fprintf(OutFile," n Name (pu) (deg) Name (pu) (pu) (pu) (deg) (MW) (MVar) (kA) STATCOM base) (deg) \n");
i=0;
for(STATCOMptr=dataPtr->STATCOMbus;STATCOMptr!=NULL;STATCOMptr=STATCOMptr->Next){
fprintf(OutFile,"---|--|----|------------|------|------|----|------------|------|--------|--------|--------|--------|--------|--------|--------------|--------\n");
fprintf(OutFile,"%3d ",++i);
if(STATCOMptr->From->Area!=NULL) fprintf(OutFile,"%2d ",STATCOMptr->From->Area->N);
else fprintf(OutFile,"%2d ",0);
fprintf(OutFile,"%4d %12s ",STATCOMptr->Ctrl->Num,STATCOMptr->Ctrl->Name);
fprintf(OutFile,"%6.4lf %6.2lf ",STATCOMptr->Ctrl->V,STATCOMptr->Ctrl->Ang/K3);
fprintf(OutFile,"%4d %12s ",STATCOMptr->From->Num,STATCOMptr->Name);
fprintf(OutFile,"%6.4lf ",STATCOMptr->k*STATCOMptr->Vdc);
fprintf(OutFile,"%8.6lf ",STATCOMptr->k);
KV=STATCOMptr->From->KV;
fprintf(OutFile,"%8.6lf ",STATCOMptr->Vdc);
fprintf(OutFile,"%8.3lf ",STATCOMptr->alpha/K3);
fprintf(OutFile,"%8.4lf ",STATCOMptr->P*Sn);
fprintf(OutFile,"%8.2lf ",STATCOMptr->Q*Sn);
Q=STATCOMptr->Q;
fprintf(OutFile,"%8.3lf ",STATCOMptr->I*Sn/(sqrt(3)*KV));
fprintf(OutFile," %8.3lf",STATCOMptr->I*Sn/STATCOMptr->MVA);
if(STATCOMptr->I>=STATCOMptr->Imin && Q<0) fprintf(OutFile,"L");
else if(STATCOMptr->I>=STATCOMptr->Imax && Q>0) fprintf(OutFile,"H");
else fprintf(OutFile," ");
theta=STATCOMptr->theta;
if (theta>=0) vals=1.00;
else vals=-1.00;
if (fabs(theta)>2*PI) theta=theta-vals*floor(fabs(theta)/(2*PI))*2*PI;
if (fabs(theta)>PI) theta=theta-vals*2*PI;
fprintf(OutFile,"%8.3lf ",theta/K3);
fprintf(OutFile,"\n\n");
}
}
fclose(OutFile);
#ifdef WINDOWS
delete[] File1;
#else
free(File1);
#endif
}
/* --------------- WriteSolution ----------------- */
#ifdef ANSIPROTO
void WriteSolution(INDEX Iter,char *File,char *str)
#else
void WriteSolution(Iter,File,str)
INDEX Iter;
char *File,*str;
#endif
{
fclose(OutputHomot);
if(!ExistParameter('s')) Output(Iter,File,str);
if(ExistParameter('w')||ExistParameter('W')) IEEE();
if(ExistParameter('J')||ExistParameter('j')) WriteJac();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -