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

📄 readbas.c

📁 电力系统分析计算 学习调试程序 UNIX / LINUX / CYGWIN 系统使用
💻 C
字号:
/*  Read data: Basic routines. */#include "readdata.h"/* --------- Global Input File --------- */extern FILE *InputDataFile;/* --------- GetStr ------------------- */#ifdef ANSIPROTOchar *GetStr(const char *ptr,int Pos,int Leng,int Tot,char *str)#elsechar *GetStr(ptr,Pos,Leng,Tot,str)char *ptr;char*str;int Pos,Leng,Tot;#endif{  int i,count;  for(i=1;i<Pos;i++) {    ptr++;    if (*ptr=='\0' || *ptr=='\n') {      for(i=1;i<=Tot;str[i-1]=' ',i++);      str[Tot]='\0';      return(str);    }  }  count=1;  for(i=1;i<=Leng && *ptr!='\0' && *ptr!='\n';str[i-1]= *ptr,ptr++,i++,count++);  for(i=count;i<=Tot;str[i-1]=' ',i++);  str[Tot]='\0';  return(str);}/* ---------------------- GetValue ------------------- */#ifdef ANSIPROTOVALUETYPE GetValue(const char *ptr,int Pos,int Leng,int Dec)#elseVALUETYPE GetValue(ptr,Pos,Leng,Dec)char *ptr;int Pos,Leng,Dec;#endif{  int i,count;  BOOLEAN flag=FALSE,flagp=FALSE;  char str[11];  VALUETYPE val;  for(i=1;i<Pos;i++) {    ptr++;    if (*ptr=='\n') {      return(0);    }  }  count=1;  for(i=1;i<=Leng && *ptr!='\n';ptr++,i++,count++) {    if (isdigit(*ptr) || *ptr=='.' || *ptr=='-' || *ptr=='+') {      str[i-1]= *ptr;      flagp=TRUE;    }    else if(*ptr==' ') {      if (flagp) str[i-1]='0';      else str[i-1]=' ';    }    else return(0);    if (*ptr=='.') flag=TRUE;  }  for(i=count;i<=Leng;str[i-1]='0',i++);  str[Leng]='\0';  val=atof(str);  if (Dec!=0 && flag==FALSE) for(i=1;i<=Dec; i++, val=val/10);  return(val);}/* ---------------------- GetInt ------------------- */#ifdef ANSIPROTOINDEX GetInt(const char *ptr,int Pos,int Leng)#elseINDEX GetInt(ptr,Pos,Leng)char *ptr;int Pos,Leng;#endif{  int i,count;  BOOLEAN flagp=FALSE;  char str[11];  INDEX val;  for(i=1;i<Pos;i++) {    ptr++;    if (*ptr=='\n') {      return(0);    }  }  count=1;  for(i=1;i<=Leng && *ptr!='\n';ptr++,i++,count++) {    if (isdigit(*ptr) || *ptr=='-' || *ptr=='+') {      str[i-1]= *ptr;      flagp=TRUE;    }    else if (*ptr==' ') {      if (flagp) str[i-1]='0';      else str[i-1]=' ';    }    else return(0);  }  for(i=count;i<=Leng;str[i-1]='0',i++);  str[Leng]='\0';  val=(INDEX) atoi(str);  return(val);}/* --------------- ACbusInList  ------------------- */#ifdef ANSIPROTOACbusData *ACbusInList(INDEX BusN,char *BusName,VALUETYPE V,INDEX N1,INDEX N2)#elseACbusData *ACbusInList(BusN,BusName,V,N1,N2)char *BusName;VALUETYPE V;INDEX BusN,N1,N2;#endif{  ACbusData *ptr,*ptrp,*ptrn;  int i;  if(N1==0||N2==0) {    if(N1==0) ptrn=NULL;    else ptrn=dataPtr->ACbus;#ifdef WINDOWS    dataPtr->ACbus= new ACbusData;#else    dataPtr->ACbus=(ACbusData *) malloc(sizeof(ACbusData));    if (dataPtr->ACbus==NULL) {      fclose(InputDataFile);      ErrorHalt("Insufficient memory to allocate AC bus data.");      stopExecute(ERROREXIT);    }#endif    ptr=dataPtr->ACbus;    if(ptrn!=NULL) ptrn->Prev=ptr;    ptrp=NULL;  }  else {    ptr=dataPtr->ACbus;    while (ptr!=NULL){      if(BusN==ptr->Num||(BusN==0 && !strcmp(ptr->Name,BusName))) return(ptr);      ptrp=ptr;      ptr=ptr->Next;    }#ifdef WINDOWS    ptr= new ACbusData;#else    ptr=(ACbusData *) malloc(sizeof(ACbusData));    if (ptr==NULL) {      fclose(InputDataFile);      ErrorHalt("Insufficient memory to allocate AC bus data.");      stopExecute(ERROREXIT);    }#endif    ptrp->Next=ptr;    ptrn=NULL;  }  ptr->Num=0;  strcpy(ptr->Name,BusName);  ptr->N=0;  ptr->KV=V;  strcpy(ptr->Type,"B");  strcpy(ptr->Zone,"");  strcpy(ptr->Owner,"");  strcpy(ptr->cont,"");  ptr->Area=NULL;  ptr->Ncont=0;  ptr->Reg=NULL;  ptr->Elem=NULL;  ptr->Gen=NULL;  ptr->V=0;  ptr->VCont=0;  ptr->Ang=1000.;  ptr->Pg=0;  ptr->Qg=0;  ptr->Pl=0;  ptr->Ql=0;  ptr->G=0;  ptr->B=0;  ptr->Bz=0;  ptr->step=0;  ptr->steps=0;  for(i=0;i<=72;ptr->Bx[i]=0,i++);  ptr->PgMax=99999999.;  ptr->Smax=99999999.;  ptr->flagPgMax=0;  ptr->DPg=0;  ptr->Kg=0;  ptr->Pz=0;  ptr->Qz=0;  ptr->Pn=0;  ptr->Qn=0;  ptr->Pzl=0;  ptr->Qzl=0;  ptr->Pnl=0;  ptr->Qnl=0;  ptr->a=0;  ptr->b=0;  ptr->Qmax=0;  ptr->Qmin=0;  ptr->Vmax=0;  ptr->Vmin=0;  ptr->Vlmax=0;  ptr->Vlmin=0;  ptr->CheckVlimits=TRUE;  ptr->Qr=0;  ptr->Kbg=0;  ptr->Kbg1=0;  ptr->Kbg2=0;  ptr->val=0;  ptr->valp=0;  ptr->vals=0;  ptr->valt=0;  ptr->DC=NULL;  ptr->SVC=NULL;      /* FACTS */  ptr->TCSC=NULL;     /* FACTS */  ptr->STATCOM=NULL;  /* FACTS */  ptr->Cont=NULL;  ptr->ContBus=NULL;  ptr->Next=ptrn;  ptr->Prev=ptrp;  return(ptr);}/* --------------- AreaInList  ------------------- */#ifdef ANSIPROTOAreaData *AreaInList(INDEX i,char *Name,INDEX N)#elseAreaData *AreaInList(i,Name,N)char *Name;INDEX i,N;#endif{  AreaData *ptr,*prevptr;  int j;  if(N==0) {#ifdef WINDOWS    dataPtr->Area= new AreaData;#else    dataPtr->Area=(AreaData *) malloc(sizeof(AreaData));    if (dataPtr->Area==NULL) {      fclose(InputDataFile);      ErrorHalt("Insufficient memory to allocate Area data.");      stopExecute(ERROREXIT);    }#endif    ptr=dataPtr->Area;  }  else {    ptr=dataPtr->Area;    while (ptr!=NULL){      if(i==ptr->N||(i==0&&!strcmp(ptr->Name,Name))) return(ptr);      prevptr=ptr;      ptr=ptr->Next;    }#ifdef WINDOWS    ptr= new AreaData;#else    ptr=(AreaData *) malloc(sizeof(AreaData));    if (ptr==NULL) {      fclose(InputDataFile);      ErrorHalt("Insufficient memory to allocate Area data.");      stopExecute(ERROREXIT);    }#endif    prevptr->Next=ptr;  }  ptr->N=0;  ptr->i=0;  strcpy(ptr->Name,Name);  for(j=1;j<=11;j++) strcpy(ptr->Zone[j],"");  ptr->P=0;  ptr->SPg=0;  ptr->Slack=NULL;  ptr->BSptr=NULL;  ptr->Elem=NULL;  ptr->AC=NULL;  ptr->DC=NULL;  ptr->Next=NULL;  return(ptr);}/* --------------- AddElemToList  ------------------- */#ifdef ANSIPROTOElementList *AddElemToList(ElementList *ELptr,ElementData *Eptr)#elseElementList *AddElemToList(ELptr,Eptr)ElementList *ELptr;ElementData *Eptr;#endif{  ElementList *ptr,*prevptr;  prevptr=ELptr;#ifdef WINDOWS  ELptr= new ElementList;#else  ELptr=(ElementList *) malloc(sizeof(ElementList));  if (ELptr==NULL) {    fclose(InputDataFile);    ErrorHalt("Insufficient memory to allocate AC element data.");    stopExecute(ERROREXIT);  }#endif  ptr=ELptr;  ptr->Eptr=Eptr;  ptr->Next=prevptr;  return(ptr);}/* --------------- ElemInList  ------------------- */#ifdef ANSIPROTOElementData *ElemInList(ACbusData *From,ACbusData *To,INDEX N1,INDEX N2,char *Type,char *Ckt)#elseElementData *ElemInList(From,To,N1,N2,Type,Ckt)ACbusData *From,*To;INDEX N1,N2;char *Type,*Ckt;#endif{  ElementData *ptr,*ptrn;  ElementList *ELptr;  if(N1==0 || N2==0) {    if (N1!=0) ptrn=dataPtr->Element;    else ptrn=NULL;#ifdef WINDOWS    dataPtr->Element= new ElementData;#else    dataPtr->Element=(ElementData *) malloc(sizeof(ElementData));    if (dataPtr->Element==NULL) {      fclose(InputDataFile);      ErrorHalt("Insufficient memory to allocate AC element data.");      stopExecute(ERROREXIT);    }#endif    ptr=dataPtr->Element;    if(ptrn!=NULL) ptrn->Prev=ptr;    ptr->From=From;    ptr->To=To;    From->Elem=(ElementList *) AddElemToList(From->Elem,ptr);    To->Elem=(ElementList *) AddElemToList(To->Elem,ptr);    strcpy(ptr->Ckt,Ckt);    strcpy(ptr->Type,"");    strcpy(ptr->Zone,"");    strcpy(ptr->Owner,"");    ptr->Area=NULL;    ptr->Meter=NULL;    ptr->Sec=0;    ptr->G=0;    ptr->B=0;    ptr->G1=0;    ptr->B1=0;    ptr->G2=0;    ptr->B2=0;    ptr->Tap=1;    ptr->Taps=1;    ptr->Ang=0;    ptr->Cont=NULL;    ptr->Ncont=0;    ptr->Cvar=0;    strcpy(ptr->Ctype,"");    ptr->Tmin=0;    ptr->Tmax=0;    ptr->Min=0;    ptr->Max=0;    ptr->Imax=0;    ptr->CheckIlimits=TRUE;    ptr->Next=ptrn;    ptr->Prev=NULL;    return(ptr);  }  else {    for(ELptr=From->Elem;ELptr!=NULL;ELptr=ELptr->Next){      ptr=ELptr->Eptr;      if(strpbrk(ptr->Type,Type) &&         (!strcmp(ptr->Ckt,Ckt)||!strcmp(Ckt," ")||!strcmp(ptr->Ckt," ")) &&         ((ptr->From==From && ptr->To==To)||(ptr->To==From && ptr->From==To))){        if(strcmp(Type,"R") || !strcmp(ptr->Zone,"")) {          if(!strcmp(ptr->Ckt," ")) strcpy(ptr->Ckt,Ckt);          return(ptr);        }      }    }    return(NULL);  }}/* --------------- DCbusInList  ------------------- */#ifdef ANSIPROTODCbusData *DCbusInList(char *BusName,INDEX N)#elseDCbusData *DCbusInList(BusName,N)char *BusName;INDEX N;#endif{  DCbusData *ptr,*prevptr;  if(N==0) {#ifdef WINDOWS    dataPtr->DCbus= new DCbusData;#else    dataPtr->DCbus=(DCbusData *) malloc(sizeof(DCbusData));    if (dataPtr->DCbus==NULL){      fclose(InputDataFile);      ErrorHalt("Insufficient memory to allocate DC bus data.");      stopExecute(ERROREXIT);    }#endif    ptr=dataPtr->DCbus;  }  else {    ptr=dataPtr->DCbus;    while (ptr!=NULL){      if(!strcmp(ptr->Name,BusName)) return(ptr);      prevptr=ptr;      ptr=ptr->Next;    }#ifdef WINDOWS    ptr= new DCbusData;#else    ptr=(DCbusData *) malloc(sizeof(DCbusData));    if (ptr==NULL) {      fclose(InputDataFile);      ErrorHalt("Insufficient memory to allocate DC bus data.");      stopExecute(ERROREXIT);    }#endif    prevptr->Next=ptr;  }  strcpy(ptr->Name,BusName);  ptr->N=0;  strcpy(ptr->Type,"");  strcpy(ptr->Cont1,"");  strcpy(ptr->Cont2,"");  strcpy(ptr->Zone,"");  ptr->Meter=NULL;  ptr->Area=NULL;  ptr->Xc=0;  ptr->Nbr=0;  ptr->Ntrf=0;  ptr->MVA=0;  ptr->Vd=0;  ptr->VdN=0;  ptr->Id=0;  ptr->P=0;  ptr->Q=0;  ptr->Alfa=0;  ptr->AlfaN=0;  ptr->Gamma=0;  ptr->AlfaMin=0;  ptr->AlfaMax=0;  ptr->GammaMin=0;  ptr->Tap=0;  ptr->TapMin=0;  ptr->TapMax=0;  ptr->Vn=0;  ptr->Rd=0;  ptr->AC=NULL;  ptr->To=NULL;  ptr->Next=NULL;  return(ptr);}

⌨️ 快捷键说明

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