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

📄 readinit.c

📁 电力系统分析计算 学习调试程序 UNIX / LINUX / CYGWIN 系统使用
💻 C
📖 第 1 页 / 共 2 页
字号:
/*    This routine reads initial values for AC voltage phasors.      The input format is in "i V Ang" format, i.e., bus number      and Voltage magnitude and angle (terminate list with a 0). */#include <limits.h>#include "readdata.h"/* --------------------- ReadInit ---------------------------------- */#ifdef ANSIPROTOBOOLEAN ReadInit(void)#elseBOOLEAN ReadInit()#endif /* Main routine. */{  ACbusData *ACptr;  DCbusData *DCptr;  AreaData *Aptr;  INDEX N;  VALUETYPE V,d,SPg=0,DPg,Sum,Pn,Qn,Pz,Qz,val,PgMax,Vmax,Vmin;  VALUETYPE Ra,Xd,Xq,IaMax,EqMax,EqMin,Smax;  VALUETYPE Pg,Qg,Eq,dg,Vr,Vi,Ir,Ii,Vq,Vd,Iq,Id,Ia,apr,api;  char *Name,BusName[BUFLEN],Line[BUFLEN],*ptr,Vars[BUFLEN],variable[3];  FILE *InputFile;  int i,count,num;  num=6; /* -------------------- Generation and Load Factors --------------- */  Name=NameParameter('K');  Sum=0;  if (!NullName(Name) && (InputFile=OpenInput(Name))!=NULL) {    for (;;) {      DPg=Pn=Qn=Pz=Qz=PgMax=Vmax=Vmin=0;      if (fgets(Line,BUFLEN,InputFile)==NULL) break;      if (Line[0]!='C') {        if (sscanf(Line,"%d %s",&N,BusName)!=2) count=0;        else if (BusName[0]=='\"'||BusName[0]=='\'') {           count=2;           for(ptr=Line;*ptr!='\"'&&*ptr!='\'';ptr++); ptr++;           for(i=0;*ptr!='\"'&&*ptr!='\''&&*ptr!='\n';BusName[i]= *ptr,i++,ptr++);           BusName[i]='\0';           ptr++;           count+=sscanf(ptr,"%lf %lf %lf %lf %lf %lf %lf %lf",&DPg,&Pn,&Qn,&PgMax,&Smax,&Vmax,&Vmin,&Pz,&Qz);        } else {           count=sscanf(Line,"%d %s %lf %lf %lf %lf %lf %lf %lf %lf",&N,BusName,&DPg,&Pn,&Qn,&PgMax,&Smax,&Vmax,&Vmin,&Pz,&Qz);        }        if (!strcmp(BusName,"0")) BusName[0]='\n';        if (count>=num){           for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) {              if(N==ACptr->Num||!strncmp(ACptr->Name,BusName,strlen(BusName))) break;           }           if(ACptr!=NULL){              if (PgMax>ACptr->Pg && PgMax>0) ACptr->PgMax=PgMax;              if (Smax>=ACptr->PgMax && Smax>0) ACptr->Smax=Smax;              if (Vmax>0 && Vmin>0 && Vmax>Vmin) { ACptr->Vlmax=Vmax; ACptr->Vlmin=Vmin; }              ACptr->DPG=ACptr->DPg=DPg;              if (Narea>1 && Acont) ACptr->Area->Slack->Area->SPg+=DPg*DPg;              else SPg+=DPg*DPg;              ACptr->Pnl=Pn; ACptr->Qnl=Qn;              ACptr->Pzl=Pz; ACptr->Qzl=Qz;              Sum+=Pn+Qn+Pz+Qz;           }        } else ACptr=NULL;        if (ACptr==NULL) {           fCustomPrint(stderr,"***Warning: Line-> %s",Line);           fCustomPrint(stderr,"            will be ignored in file %s.\n",Name);        }      }    }    if (Narea>1 && Acont)      for(Aptr=dataPtr->Area;Aptr!=NULL;Aptr=Aptr->Next) {         if(!Aptr->SPg) Aptr->Slack->DPg=Aptr->SPg=1;      }    else if (!ExistParameter('6') || NullName(NameParameter('6'))) {      if (!SPg) {         for(ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) if(strpbrk(ACptr->Type,"S")) break;         ACptr->DPg=SPg=1;      }      for(ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next){        if(Narea>1 && Acont) ACptr->DPg=ACptr->DPg/sqrt(ACptr->Area->Slack->Area->SPg);        else ACptr->DPg=ACptr->DPg/sqrt(SPg);      }    }    fclose(InputFile);  }  if (!flagKdirection) {    if (ExistParameter('v') && !Sum) {      fCustomPrint(stderr,"ERROR: The -v option will yield a singular Jacobian in voltage collapse\n");      fCustomPrint(stderr,"       studies since Pnl, Qnl, Pzl, and Qzl are zero in all load buses.\n");      stopExecute(ERROREXIT);    } else if (ExistParameter('L') && !Sum) {      fCustomPrint(stderr,"***Warning: The loading factor lambda will not yield different results\n");      fCustomPrint(stderr,"            from the base case since Pnl, Qnl, Pzl, and Qzl are zero\n");      fCustomPrint(stderr,"            in all load buses.\n");    } else if ((ExistParameter('H') || ExistParameter('c')) && !Sum) {      fCustomPrint(stderr,"ERROR: The Homotopy Continuation Method will not yield different results\n");      fCustomPrint(stderr,"       from the base case since Pnl, Qnl, Pzl, and Qzl are zero in all\n");      fCustomPrint(stderr,"       load buses.\n");      stopExecute(ERROREXIT);    } else if (ExistParameter('C') && !Sum) {      fCustomPrint(stderr,"ERROR: The Point of Collapse Method will not yield different results\n");      fCustomPrint(stderr,"       from the base case since Pnl, Qnl, Pzl, and Qzl are zero in\n");      fCustomPrint(stderr,"       all load buses.\n");      stopExecute(ERROREXIT);    }  } /* -------------------- Initialize AC/DC Variables -------------------------- */  if (ExistParameter('V')){    Name=NameParameter('V');    if (!NullName(Name) && (InputFile=OpenInput(Name))!=NULL) {      for (;;) {        if (fgets(Line,BUFLEN,InputFile)==NULL) break;        if (Line[0]!='C') {          if ((count=sscanf(Line,"%d %s",&N,BusName))!=2) count=0;          else if (BusName[0]=='\"'||BusName[0]=='\'') {             count=2;             for(ptr=Line;*ptr!='\"'&&*ptr!='\'';ptr++); ptr++;             for(i=0;*ptr!='\"'&&*ptr!='\''&&*ptr!='\n';BusName[i]= *ptr,i++,ptr++);             BusName[i]='\0';             ptr++;          } else {             for (i=1,ptr=Line;i<=2;i++) {                if (ptr!=NULL && *ptr!='\0') for(;*ptr==' '&&*ptr!='\n';ptr++);                if (ptr!=NULL && *ptr!='\0') for(;*ptr!=' '&&*ptr!='\n';ptr++);            }          }          if (count){             for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next)                if(N==ACptr->Num||!strncmp(ACptr->Name,BusName,strlen(BusName))) break;             if(ACptr!=NULL){                if (ptr!=NULL) count=sscanf(ptr,"%lf %lf",&V,&d);                else count=0;                if (count==2) {                   if (V>0 && ACptr->Cont!=NULL) ACptr->V=V;                   ACptr->Ang=d*K3;                }             }             for (DCptr=dataPtr->DCbus;DCptr!=NULL;DCptr=DCptr->Next)             if(!strncmp(DCptr->Name,BusName,strlen(BusName))) break;             if(DCptr!=NULL){                if (ptr!=NULL) count=sscanf(ptr,"%s",Vars);                else count=0;                val=0;                if(ExistParameter('d')) CustomPrint("Read initial values for DC bus %s -> %s\n",DCptr->Name,Vars);                if (count) for(i=1;i<=strlen(Vars) && count;i=i+2) {                   GetStr(Vars,i,2,2,variable);                   if (ptr!=NULL && *ptr!='\0') for(;*ptr==' '&&*ptr!='\n';ptr++);                   if (ptr!=NULL && *ptr!='\0') for(;*ptr!=' '&&*ptr!='\n';ptr++);                   if (ptr!=NULL) {                      count=sscanf(ptr,"%lf",&val);                      if(ExistParameter('d')) CustomPrint("                                           %lf\n",val);                   } else count=0;                   if(!strcmp(variable,"PA") && strcmp(DCptr->Cont1,"PA") && strcmp(DCptr->Cont2,"PA")) DCptr->P=val;                   if(!strcmp(variable,"AL") && strcmp(DCptr->Cont1,"AL") && strcmp(DCptr->Cont2,"AL")) DCptr->Alfa=val;                   if(!strcmp(variable,"GA") && strcmp(DCptr->Cont1,"GA") && strcmp(DCptr->Cont2,"GA")) DCptr->Gamma=val;                   if(!strcmp(variable,"VD") && strcmp(DCptr->Cont1,"VD") && strcmp(DCptr->Cont2,"VD")) DCptr->Vd=val;                   if(!strcmp(variable,"ID") && strcmp(DCptr->Cont1,"ID") && strcmp(DCptr->Cont2,"ID")) DCptr->Id=val;                   if(!strcmp(variable,"QA") && strcmp(DCptr->Cont1,"QA") && strcmp(DCptr->Cont2,"QA")) DCptr->Q=val;                   if(!strcmp(variable,"AT") && strcmp(DCptr->Cont1,"AT") && strcmp(DCptr->Cont2,"AT")) DCptr->Tap=val;                }             }          } else { ACptr=NULL; DCptr=NULL;}          if (ACptr==NULL && DCptr==NULL) {             fCustomPrint(stderr,"***Warning: Line-> %s",Line);             fCustomPrint(stderr,"            will be ignored in file %s.\n",Name);          }        }      }      fclose(InputFile);    }    else if (NullName(Name)) {      for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) {        if (ACptr->Cont!=NULL) ACptr->V=1;        ACptr->Ang=0;      }    }  } /* -------------------- Read Generator Steady-State Data -------------------- */  Name=NameParameter('3');  Ngen=0;  if (!NullName(Name) && (InputFile=OpenInput(Name))!=NULL) {   for (;;) {      Ra=Xd=Xq=IaMax=EqMax=EqMin=0;      if (fgets(Line,BUFLEN,InputFile)==NULL) break;      if (Line[0]!='C') {        if (sscanf(Line,"%d %s",&N,BusName)!=2) count=0;        else if (BusName[0]=='\"'||BusName[0]=='\'') {           count=2;           for(ptr=Line;*ptr!='\"'&&*ptr!='\'';ptr++); ptr++;           for(i=0;*ptr!='\"'&&*ptr!='\''&&*ptr!='\n';BusName[i]= *ptr,i++,ptr++);           BusName[i]='\0';           ptr++;           count+=sscanf(ptr,"%lf %lf %lf %lf %lf %lf",&Ra,&Xd,&Xq,&IaMax,&EqMax,&EqMin);        } else {           count=sscanf(Line,"%d %s %lf %lf %lf %lf %lf %lf",&N,BusName,&Ra,&Xd,&Xq,&IaMax,&EqMax,&EqMin);        }        if (!strcmp(BusName,"0")) BusName[0]='\n';        if (count==8){           for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) {              if(N==ACptr->Num||!strncmp(ACptr->Name,BusName,strlen(BusName))) break;           }           if(ACptr!=NULL){              if (strpbrk(ACptr->Type,"G,Q,E,S,V")==NULL || Xd<=0) {                 fCustomPrint(stderr,"***Warning: Line-> %s",Line);                 fCustomPrint(stderr,"            will be ignored in file %s.\n",Name);                 if (Xd<=0) fCustomPrint(stderr,"            The value of Xd is less than or equal to zero.\n");                 else       fCustomPrint(stderr,"            The bus is not a generator type (BQ,BG,BE,BV,BS).\n");              }              else {#ifdef WINDOWS                 ACptr->Gen=new GenModel;#else                 ACptr->Gen=(GenModel *) malloc (sizeof(GenModel));                 if (ACptr->Gen==NULL) {                    fclose(InputFile);                    ErrorHalt("Insufficient memory to allocate steady-state Generator data.");                    stopExecute(ERROREXIT);                 }#endif                 ACptr->Gen->Ra=fabs(Ra);                 if (Xd<Ra) {                    fCustomPrint(stderr,"***Warning: The generator steady-state data for bus:%s\n",ACptr->Name);                    fCustomPrint(stderr,"            has Ra > Xd.\n");                 }                 ACptr->Gen->Xd=Xd;                 if (Xq==0) Xq=Xd;                 if (Xq>Xd) {                    fCustomPrint(stderr,"***Warning: The generator steady-state data for bus:%s\n",ACptr->Name);                    fCustomPrint(stderr,"            has Xq > Xd.  The program will force Xq=Xd.\n");                    Xq=Xd;                 }                 ACptr->Gen->Xq=fabs(Xq);                   /*                 if (IaMax!=0 && strpbrk(ACptr->Type,"S")) {                    fCustomPrint(stderr,"***Warning: The IaMax limit in slack generator:%s\n",ACptr->Name);                    fCustomPrint(stderr,"            will be assumed large.\n");                    IaMax=9999999999.;                 }

⌨️ 快捷键说明

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