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

📄 writesol.cpp

📁 用于潮流计算的程序请让我下载我需要的吧感谢了啊
💻 CPP
📖 第 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 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 + -