⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 writesol.c

📁 电力系统分析计算 学习调试程序 UNIX / LINUX / CYGWIN 系统使用
💻 C
📖 第 1 页 / 共 2 页
字号:
/* 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 ANSIPROTOvoid Output(INDEX Iter,char *File1,char *str)#elsevoid 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.0)*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 + -