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

📄 readinit.cpp

📁 用于潮流计算的程序请让我下载我需要的吧感谢了啊
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                 */
                 if (IaMax<=0) {
                    fCustomPrint(stderr,"***Warning: The generator steady-state data for bus:%s\n",ACptr->Name);
                    fCustomPrint(stderr,"            has IaxMax<=0.  The program will force IaMax=9999999999.\n");
                    IaMax=9999999999.;
                 }
                 ACptr->Gen->IaMax=IaMax;
                 if (EqMax<=0) {
                    fCustomPrint(stderr,"***Warning: The generator steady-state data for bus:%s\n",ACptr->Name);
                    fCustomPrint(stderr,"            has EqMax<=0.  The program will force EqMax=9999999999.\n");
                    EqMax=9999999999.;
                 }
                 ACptr->Gen->EqMax=EqMax;
                 if (EqMin>EqMax || EqMin<0) {
                    fCustomPrint(stderr,"***Warning: The generator steady-state data for bus:%s\n",ACptr->Name);
                    fCustomPrint(stderr,"            has EqMin>EqMax or EqMin<0.  The program will force EqMin=0.\n");
                    EqMax=0.;
                 }
                 ACptr->Gen->EqMin=EqMin;
                 V=ACptr->V;
                 d=ACptr->Ang;
                 Pg=ACptr->Pg;
                 Qg=ACptr->Qg;
                 Vr=V*cos(d);
                 Vi=V*sin(d);
                 Ir=(Vr*Pg+Vi*Qg)/(V*V);
                 Ii=(Vi*Pg-Vr*Qg)/(V*V);
                 Ia=sqrt(Ir*Ir+Ii*Ii);
                 if (Ia>IaMax) Ia=IaMax;
                 else if (Ia==0) Ia=1.;
                 apr=Vr-Xq*Ii;
                 api=Vi+Xq*Ir;
                 dg=atan2(api,apr);
                 Vq=cos(dg)*Vr+sin(dg)*Vi;
                 Vd=-sin(dg)*Vr+cos(dg)*Vi;
                 Iq=cos(dg)*Ir+sin(dg)*Ii;
                 Id=-sin(dg)*Ir+cos(dg)*Ii;
                 Eq=Vq-Xd*Id;
                 if (Eq>EqMax) Eq=EqMax;
                 else if (Eq<EqMin) Eq=EqMin;
                 ACptr->Gen->Eq=Eq;
                 ACptr->Gen->dg=dg;
                 ACptr->Gen->Vr=Vr;
                 ACptr->Gen->Vi=Vi;
                 ACptr->Gen->Ir=Ir;
                 ACptr->Gen->Ii=Ii;
                 ACptr->Gen->Vd=Vd;
                 ACptr->Gen->Vq=Vq;
                 ACptr->Gen->Id=Id;
                 ACptr->Gen->Iq=Iq;
                 ACptr->Gen->Ia=Ia;
                 Ngen++;
              }
           }
        } else ACptr=NULL;
        if (ACptr==NULL) {
            fCustomPrint(stderr,"***Warning: Line-> %s",Line);
            fCustomPrint(stderr,"            will be ignored in file %s.\n",Name);
        }
      }
   }
   fclose(InputFile);
  }

 /* -------------------- Read OH Load Model --------------------- */
  if (!ReadOHload(NameParameter('D'))) {
    if (!NullName(NameParameter('D'))) {
      fCustomPrint(stderr,"Error in file %s.  The program will assume constant\n",NameParameter('D'));
      fCustomPrint(stderr,"P-Q load models.\n");
    }
    if (!flagVloads) for(ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) {
      ACptr->Pn=ACptr->Pl;
      ACptr->a=ACptr->Pz=0;
      ACptr->Qn=ACptr->Ql;
      ACptr->b=ACptr->Qz=0;
    }
  }


 /* -------------------- Voltage/Lambda Options -------------------- */
  Bl=0;
  if (ExistParameter('v')) {
    RealParameter('v',&V,0.0,10.0);
    if (V>0.001) {
      ACptr=NULL;
      N=IntegerParameter('B',0,0,9999);
      if (N) {
         for(ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next)
         if((!strcmp(ACptr->Type,"B")||!strcmp(ACptr->Type,"BA")) && ACptr->Num==N) break;
         if (ACptr==NULL) {
            fCustomPrint(stderr,"***Warning: The program will ignore the number in -B option (not a PQ bus).\n");
         }
      }
      if (ACptr==NULL) {
         for(ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next)
         if(!strcmp(ACptr->Type,"B")||!strcmp(ACptr->Type,"BA")) break;
      }
      if (ACptr!=NULL) {
         BlPtr=ACptr;
         BlPtr->V=V;
         return(TRUE);
      }
      else {
         fCustomPrint(stderr,"***Warning: The program will ignore the -v option (there is no PQ bus).\n");
      }
    } else {
      fCustomPrint(stderr,"***Warning: The program will ignore the -v option (mag=0).\n");
    }
  }
  return(FALSE);
}



/* --------------------- ReadOHload ---------------------------------- */
#ifdef ANSIPROTO
BOOLEAN ReadOHload(char *File)
#else
BOOLEAN ReadOHload(File)
char *File;
#endif
 /* Read Ontatio Hydro load model using SSSP (OH) format. */
{
  ACbusData *ACptr;
  FILE *Input;
  char Line[BUFLEN],Name[13];
  int LineNum=0;
  BOOLEAN flag=FALSE,flagp=FALSE;
  INDEX Num,NA,Nlow,Nhigh;
  VALUETYPE Pn,Pz,Qn,Qz,a,b,MinMW,MinMVAR;


  if (!NullName(File) && (Input=OpenInput(File))!=NULL) {
    for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) {
      ACptr->Pn=0;
      ACptr->Pz=1;
      ACptr->a=0;
      ACptr->Qn=0;
      ACptr->Qz=1;
      ACptr->b=0;
    }
    for(;;){ /* Reading Loop */
      if (fgets(Line,BUFLEN,Input)==NULL) {
         ErrorHalt("Missing NLBS, EDATA, or END cards on OH load data file.");
         fclose(Input);
         return(FALSE);
      }
      LineNum++;

      /* -------------- Comments ------------- */
      if (!strncmp(Line,"!",1) || !strncmp(Line,"C",1) ) continue;

      /* ------------ OH load Model ---------- */
      else if (!strncmp(Line," NLBS",5)) flag=TRUE;
      else if (flag && (!strncmp(Line,"EDATA",5) || !strncmp(Line,"  END",5))) break;
      else if (flag) {
         GetStr(Line,1,12,12,Name);
         Num=GetInt(Line,1,5);
         if (strncmp(Name,"50000",5) && strncmp(Name,"60000",5)) {

         /* -------------- Definition of each bus ------------- */
            for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) {
               if(!strncmp(ACptr->Name,Name,strlen(Name))){
                  flagp=TRUE;
                  ACptr->Pn=(VALUETYPE) GetInt(Line,13,5)/100.0;
                  ACptr->Pz=1-ACptr->Pn;
                  ACptr->a=GetValue(Line,23,10,5);
                  ACptr->Qn=(VALUETYPE) GetInt(Line,18,5)/100.0;
                  ACptr->Qz=1-ACptr->Qn;
                  ACptr->b=GetValue(Line,33,10,5);
                  break;
               } else if(Num==ACptr->Num) {
                  flagp=TRUE;
                  ACptr->Pn=(VALUETYPE) GetInt(Line,6,5)/100.0;
                  ACptr->Pz=1-ACptr->Pn;
                  ACptr->a=GetValue(Line,16,10,5);
                  ACptr->Qn=(VALUETYPE) GetInt(Line,11,5)/100.0;
                  ACptr->Qz=1-ACptr->Qn;
                  ACptr->b=GetValue(Line,26,10,5);
                  break;
               }
            }
            if (ACptr==NULL) {
               fCustomPrint(stderr,"***Warning: Line #%d-> %s",LineNum,Line);
               fCustomPrint(stderr,"            will be ignored in file %s.\n",File);
            }
         }

         /* -------------- Definition of buses by range ------------------- */
         else {
            Pn=(VALUETYPE) GetInt(Line,6,5)/100.0;
            Pz=1-Pn;
            a=GetValue(Line,16,10,5);
            Qn=(VALUETYPE) GetInt(Line,11,5)/100.0;
            Qz=1-Qn;
            b=GetValue(Line,26,10,5);
            LineNum++;
            if (fgets(Line,BUFLEN,Input)==NULL || !strncmp(Line,"EDATA",5) || !strncmp(Line,"  END",5)) {
               fCustomPrint(stderr,"Range card is missing in line #%d of file %s.\n",LineNum,File);
               fclose(Input);
               return(FALSE);
            }
            NA=GetInt(Line,1,5);
            if (!strncmp(Name,"50000",5) && Narea<=1 ) {
               fCustomPrint(stderr,"***Warning: Area %d doen't exist (line #%d of file %s).\n",NA,LineNum,File);
               fCustomPrint(stderr,"            The program will assume these data for all system loads.\n");
            }
            Nlow=GetInt(Line,6,5);
            if (Nlow<=0) Nlow=1;
            Nhigh=GetInt(Line,11,5);
            if (Nhigh<=0) Nhigh=INT_MAX;
            MinMW=GetValue(Line,16,10,5);
            MinMW=MinMW/Sn;
            MinMVAR=GetValue(Line,26,10,5);
            MinMVAR=MinMVAR/Sn;
            for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) {
               if (!strncmp(Name,"60000",5) || Narea<=1 || ACptr->Area->N==NA) {
                  flagp=TRUE;
                  if (ACptr->Num<=Nhigh && ACptr->Num>=Nlow) {
                     if (ACptr->Pl>MinMW) {
                        ACptr->Pn=Pn;
                        ACptr->Pz=Pz;
                        ACptr->a=a;
                     }
                     if (ACptr->Ql>MinMVAR) {
                        ACptr->Qn=Qn;
                        ACptr->Qz=Qz;
                        ACptr->b=b;
                     }
                  }
               }
            }
         }
      }
    }
    fclose(Input);
  }
  return(flagp);
}

⌨️ 快捷键说明

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