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

📄 writesol.cpp

📁 用于电力系统潮流计算 c++程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      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 + -