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

📄 homotpro.cpp

📁 用于潮流计算的程序请让我下载我需要的吧感谢了啊
💻 CPP
📖 第 1 页 / 共 3 页
字号:
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    }
    else if(strpbrk(ACptr->Type,"Z")) {
      sprintf(str,"d%-d",ACptr->Num); i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Qz%-d",ACptr->Num); i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    }
    else if(strpbrk(ACptr->Type,"S")){
      sprintf(str,"kg%-d",ACptr->Num); i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Qg%-d",ACptr->Num); i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    }
    if(Acont && strpbrk(ACptr->Type,"A")){
      sprintf(str,"kg%-d",ACptr->Num); i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    }
    if (PQcont) for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next) {
      Eptr=ELptr->Eptr;
      if(strpbrk(Eptr->Type,"PQNM")) {
         if (Eptr->From==ACptr) {
           I=Eptr->From->Num;
           J=Eptr->To->Num;
         } else {
           J=Eptr->From->Num;
           I=Eptr->To->Num;
         }
         if(!strcmp(Eptr->Type,"RP")){
           sprintf(str,"a%-d_%-d",I,J); i++;
           fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
         } else if(strpbrk(Eptr->Type,"PM")){
           sprintf(str,"P%-d_%-d",I,J); i++;
           fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
         } else if(!strcmp(Eptr->Type,"RQ")){
           sprintf(str,"1/t%-d_%-d",I,J); i++;
           fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
         } else {
           sprintf(str,"Q%-d_%-d",I,J); i++;
           fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
         }
      }
    }
    if (ACptr->Gen!=NULL) {
      i=ACptr->Gen->Nvar;
      if (!strpbrk(ACptr->cont,"E")) sprintf(str,"Eq%-d",ACptr->Num);
      else                           sprintf(str,"Qg%-d",ACptr->Num);
      i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"dg%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Vr%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Vi%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Ir%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Ii%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Vq%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Vd%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Iq%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      sprintf(str,"Id%-d",ACptr->Num); i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      if (!strpbrk(ACptr->cont,"I")) sprintf(str,"Ia%-d",ACptr->Num);
      else                           sprintf(str,"Qg%-d",ACptr->Num);
      i++; fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    }
  }
  for(k=0,DCptrR=dataPtr->DCbus;DCptrR!=NULL;DCptrR=DCptrR->Next){
    DCptrI=DCptrR->To;
    if(!strcmp(DCptrR->Type,"R")){
      k++;
      for(j=1;j<=2;j++){
        if(j==1) { DCptr=DCptrR; strcpy(type,"r"); }
        else { DCptr=DCptrI; strcpy(type,"i"); }
        if(strcmp(DCptr->Cont1,"VD")&&strcmp(DCptr->Cont2,"VD")) {
          sprintf(str,"Vd%1s%-d",type,k); i++;
          fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
        }
        if(strcmp(DCptr->Cont1,"AT")&&strcmp(DCptr->Cont2,"AT")) {
          sprintf(str,"t%1s%-d",type,k); i++;
          fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
        }
        if(strcmp(DCptr->Cont1,"AL")&&strcmp(DCptr->Cont2,"AL")) {
          sprintf(str,"al%1s%-d",type,k); i++;
          fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
        }
        if(strcmp(DCptr->Cont1,"GA")&&strcmp(DCptr->Cont2,"GA")) {
          sprintf(str,"ga%1s%-d",type,k); i++;
          fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
        }
        sprintf(str,"S%1s%-d",type,k); i++;
        fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
        if(strcmp(DCptr->Cont1,"PA")&&strcmp(DCptr->Cont2,"PA")) {
          sprintf(str,"P%1s%-d",type,k); i++;
          fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
        }
        if(strcmp(DCptr->Cont1,"QA")&&strcmp(DCptr->Cont2,"QA")) {
          sprintf(str,"Q%1s%-d",type,k); i++;
          fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
        }
      }
      if(strcmp(DCptrR->Cont1,"ID")&&strcmp(DCptrR->Cont2,"ID")&&
         strcmp(DCptrI->Cont1,"ID")&&strcmp(DCptrI->Cont2,"ID")) {
        sprintf(str,"Id%-d",k); i++;
        fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
      }
    }
  }
                             /* FACTS */
  for(k=0,SVCptr=dataPtr->SVCbus;SVCptr!=NULL;SVCptr=SVCptr->Next){
    k++;
    sprintf(str,"Qsvc%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"Bv%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    if(!strcmp(SVCptr->Cont,"AL")){
      sprintf(str,"alpha%-d",k);i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    }
    else {
      sprintf(str,"Vrefc%-d",k);i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    }
  }

  for(k=0,TCSCptr=dataPtr->TCSCbus;TCSCptr!=NULL;TCSCptr=TCSCptr->Next){
    k++;
    sprintf(str,"Ptcsc%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"Qtcsck%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"Qtcscm%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"Be%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"alpha%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"Itcsc%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"delta%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
  }

  for(k=0,STATCOMptr=dataPtr->STATCOMbus;STATCOMptr!=NULL;STATCOMptr=STATCOMptr->Next){
    k++;
    if(!strcmp(STATCOMptr->Cont,"PW") || !strcmp(STATCOMptr->Cont,"AL")){
      sprintf(str,"Istat%-d",k);i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    } else {
      sprintf(str,"Vrefc%-d",k);i++;
      fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    }
    sprintf(str,"theta%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"Vdc%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"k%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"alpha%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"Pstat%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
    sprintf(str,"Qstat%-d",k);i++;
    fCustomPrint(Out,"%4d %8s %-11.5g\n",i,str,vector[i]/Max);
  }
                             /* END FACTS */

  if (Option!='Y') {
    if (!Bl) fCustomPrint(Out,"%4d %8s %-11.5g\n",++i,"l",Dparam);
    else {
      sprintf(str,"V%-d",BlPtr->Num);
      fCustomPrint(Out,"%4d %8s %-11.5g\n",++i,str,Dparam);
    }
  }
  fCustomPrint(Out,"0 0 0.0\n");
  fclose(Out);
}


/* --------------------------- IndicesMatlab --------------------------------- */
#ifdef ANSIPROTO
void IndicesMatlab(INDEX count)
#else
void IndicesMatlab(count)
INDEX count;
#endif
/* Print plotting and other Matlab commands needed by the -0 option (VS indices) */
{
  char Namebase[80],Name[80];
  FILE *OutFile;
  INDEX i;
  

  strcpy(Namebase,NameParameter('0'));
  if(NullName(Namebase)) return;
  sprintf(Name,"%s.m",Namebase);
  OutFile=OpenOutput(Name);
  fCustomPrint(OutFile,"clear lambda evJ svJ evPF svPF evQV svQV detD_ll t_ll\n");
  fCustomPrint(OutFile,"clear crsvJ crevJ crsvPF crevPF crsvQV crevQV\n");
  fCustomPrint(OutFile,"warning off\n");
  for(i=1; i<=count; i++) fCustomPrint(OutFile,"%s%d\n",Namebase,i);
  fCustomPrint(OutFile,"figure; plot(lambda,evJ); \n");
  fCustomPrint(OutFile,"title('Full matrix |e-val.| index');\n");
  fCustomPrint(OutFile,"xlabel('lambda [p.u.]');\n");
  fCustomPrint(OutFile,"figure; plot(lambda,svJ); \n");
  fCustomPrint(OutFile,"title('Full matrix sing. val. index');\n");
  fCustomPrint(OutFile,"xlabel('lambda [p.u.]');\n");
  fCustomPrint(OutFile,"disp(' '); disp('Critical bus numbers and bus l rank for J indices are stored in crevJ and crsvJ')\n");
  fCustomPrint(OutFile,"figure; plot(lambda,evPF); \n");
  fCustomPrint(OutFile,"title('Power flow matrix |e-val.| index');\n");
  fCustomPrint(OutFile,"xlabel('lambda [p.u.]');\n");
  fCustomPrint(OutFile,"figure; plot(lambda,svPF); \n");
  fCustomPrint(OutFile,"title('Power flow matrix sing. val. index');\n");
  fCustomPrint(OutFile,"xlabel('lambda [p.u.]');\n");
  fCustomPrint(OutFile,"disp(' '); disp('Critical bus numbers and bus l rank for J_PV indices are stored in crevPF and crsvPF')\n");
  fCustomPrint(OutFile,"figure; plot(lambda,evQV,lambda,svQV,'-.'); \n");
  fCustomPrint(OutFile,"title('J_{QV} matrix |e-val.| and sing. val. indices');\n");
  fCustomPrint(OutFile,"xlabel('lambda [p.u.]');\n");
  fCustomPrint(OutFile,"legend('e-v','s.v.');\n");
  fCustomPrint(OutFile,"disp(' '); disp('Critical bus numbers and bus l rank the J_QV indices are stored in crevQV and crsvQV')\n");
  fCustomPrint(OutFile,"figure; plot(lambda,detD_ll); \n");
  fCustomPrint(OutFile,"title('Reduced det. index');\n");
  fCustomPrint(OutFile,"xlabel('lambda [p.u.]');\n");
  fCustomPrint(OutFile,"figure; plot(lambda,-t_ll); \n");
  fCustomPrint(OutFile,"title('Test func. index');\n");
  fCustomPrint(OutFile,"xlabel('lambda [p.u.]');\n");
  fCustomPrint(OutFile,"disp(' '); disp('Bus l used for the red. det. and test func. indices is: %d %s')\n",TFbus,TFname);
  fCustomPrint(OutFile,"warning on\n\n");
  fclose(OutFile);
  /* --------------- Create 'rankbus.m' file needed for Matlab computations --------------- */
  OutFile=OpenOutput("rankbus.m");
  fCustomPrint(OutFile,"function num_rank=rankbus(vec,num)\n");
  fCustomPrint(OutFile,"%s\n","%%");
  fCustomPrint(OutFile,"%s Rank entry 'num' in abs(vec).\n","%%");
  fCustomPrint(OutFile,"%s\n","%%");
  fCustomPrint(OutFile,"\n");
  fCustomPrint(OutFile,"N=length(vec);\n");
  fCustomPrint(OutFile,"[val,I]=sort(abs(vec));\n");
  fCustomPrint(OutFile,"I=flipud(I);\n");
  fCustomPrint(OutFile,"for i=1:N,\n");
  fCustomPrint(OutFile,"  if (I(i)==num), num_rank=i; break; end\n");
  fCustomPrint(OutFile,"end\n");
  fclose(OutFile);
  /* ----------------  Create 'inviter.m' file needed for Matlab computations --------------- */
  OutFile=OpenOutput("inviter.m");
  fCustomPrint(OutFile,"function [e_val,v]=inviter(A,e_o,tol,iter,warn)\n");
  fCustomPrint(OutFile,"%s\n","%%");
  fCustomPrint(OutFile,"%s Inverse iteration method to compute a real e-value.\n","%%");
  fCustomPrint(OutFile,"%s Designed for sparse matrices, but works with full matrices.\n","%%");
  fCustomPrint(OutFile,"%s\n","%%");
  fCustomPrint(OutFile,"%s      [v,e_val]=inviter(A,e_o,tol,iter,warn)\n","%%");
  fCustomPrint(OutFile,"%s \n","%%");
  fCustomPrint(OutFile,"%s Input:  A    -> NxN matrix\n","%%");
  fCustomPrint(OutFile,"%s         e_o  -> Optional eigenvalue guess (default 0)\n","%%");
  fCustomPrint(OutFile,"%s          tol  -> Optional convergence tolerance (default 1e-4)\n","%%");
  fCustomPrint(OutFile,"%s         iter -> Optional maximum number of iterations (default 30)\n","%%");
  fCustomPrint(OutFile,"%s         warn -> Use 0 to cancel display of no convergence warning message\n","%%");
  fCustomPrint(OutFile,"%s                 (default 1, i.e., display warning)\n","%%");
  fCustomPrint(OutFile,"%s\n","%%");
  fCustomPrint(OutFile,"%s OutFileput: e_val -> Eigenvalue\n","%%");
  fCustomPrint(OutFile,"%s         v     -> Eigenvector\n","%%");
  fCustomPrint(OutFile,"%s\n","%%");
  fCustomPrint(OutFile,"%s\n","%%");
  fCustomPrint(OutFile,"%s Copyright (c) Claudio Canizares, Shu Zhang, 1996, 2006.\n","%%");
  fCustomPrint(OutFile,"%s University of Waterloo, Waterloo, Canada\n","%%");
  fCustomPrint(OutFile,"%s\n","%%");
  fCustomPrint(OutFile,"if nargin<2, e_o=0; sign=1;\n");
  fCustomPrint(OutFile,"else\n");
  fCustomPrint(OutFile,"  if e_o<0, sign=-1;  else, sign=1;  end\n");
  fCustomPrint(OutFile,"end\n");
  fCustomPrint(OutFile,"if nargin<3, tol=1e-4; else, tol=abs(tol); end\n");
  fCustomPrint(OutFile,"if nargin<4, iter=30; else, iter=abs(iter); end\n");
  fCustomPrint(OutFile,"if nargin<5, warn=1; end\n");
  fCustomPrint(OutFile,"\n");
  fCustomPrint(OutFile,"N=size(A);\n");
  fCustomPrint(OutFile,"count=1; \n");
  fCustomPrint(OutFile,"conv=0;\n");
  fCustomPrint(OutFile,"J=sparse(A-e_o*eye(N(1)));\n");
  fCustomPrint(OutFile,"[L,U,P]=lu(J);\n");
  fCustomPrint(OutFile,"while (count<=2)\n");
  fCustomPrint(OutFile,"  v=ones(N(1),1);\n");
  fCustomPrint(OutFile,"  for I=1:iter,\n");
  fCustomPrint(OutFile,"   e_val=sign*1/norm(v,1);\n");
  fCustomPrint(OutFile,"   v=v*e_val;\n");
  fCustomPrint(OutFile,"   z=L\\(P*v);\n");
  fCustomPrint(OutFile,"   vp=U\\z;\n");
  fCustomPrint(OutFile,"   if(norm((1/e_val)*v-vp,1)<tol) break; end,\n");
  fCustomPrint(OutFile,"   v=vp;\n");
  fCustomPrint(OutFile,"  end\n");
  fCustomPrint(OutFile,"  if (I<iter)\n");
  fCustomPrint(OutFile,"    conv=1;\n");
  fCustomPrint(OutFile,"    break;\n");
  fCustomPrint(OutFile,"  else\n");
  fCustomPrint(OutFile,"    sign=-sign;\n");
  fCustomPrint(OutFile,"  end\n");
  fCustomPrint(OutFile,"  count=count+1;\n");
  fCustomPrint(OutFile,"end\n");
  fCustomPrint(OutFile,"e_val=e_o+sign*1/norm(vp,1);\n");
  fCustomPrint(OutFile,"v=e_val*vp;\n");
  fCustomPrint(OutFile,"\n");
  fCustomPrint(OutFile,"if (conv==0 & warn==1)\n");
  fCustomPrint(OutFile,"  disp(' ')\n");
  fCustomPrint(OutFile,"  disp('Warning: Inverse iteration method failed to converge')\n");
  fCustomPrint(OutFile,"  str=sprintf('         for tol=%s6.4e, iter=%sd.',tol,iter);\n","%%","%%");
  fCustomPrint(OutFile,"  disp(str)\n");
  fCustomPrint(OutFile,"  disp(' ')\n");
  fCustomPrint(OutFile,"end\n");
  fclose(OutFile);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -