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

📄 update.cpp

📁 用于潮流计算的程序请让我下载我需要的吧感谢了啊
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        ACptrp=ACptr->ContBus->AC;
        if (j==0) ACptr->val=ACptr->V;
        ACptr->val=ACptr->val+cons*dx[k+1];
        if (ACptr->val<=0) ACptr->V=0.00001;
        else if (strpbrk(ACptrp->cont,"Q")) {
          if (Recover && ACptrp->Qg>=ACptrp->Max && ACptr->val>ACptr->VCont && Limits)      ACptr->V=ACptr->VCont;
          else if (Recover && ACptrp->Qg<=ACptrp->Min && ACptr->val<ACptr->VCont && Limits) ACptr->V=ACptr->VCont;
          else                                                                              ACptr->V=ACptr->val;
        }
        else if (strpbrk(ACptrp->cont,"E")) {
          if (Recover && ACptrp->Gen->Eq>=ACptrp->Gen->EqMax && ACptr->val>ACptr->VCont && Limits)      ACptr->V=ACptr->VCont;
          else if (Recover && ACptrp->Gen->Eq<=ACptrp->Gen->EqMin && ACptr->val<ACptr->VCont && Limits) ACptr->V=ACptr->VCont;
          else                                                                                          ACptr->V=ACptr->val;
        }
        else if (strpbrk(ACptrp->cont,"I")) {
          if (Recover && ACptrp->Gen->Ia>=ACptrp->Gen->IaMax && ACptr->val>ACptr->VCont && Limits) ACptr->V=ACptr->VCont;
          else                                                                                     ACptr->V=ACptr->val;
        }
        else ACptr->V=ACptr->val;
      }
      else
        ACptr->Qr=ACptr->Qr+cons*dx[k+1];
    }
    else if (strpbrk(ACptr->Type,"R")) {
      k=ACvar[ACptr->N];
      ACptr->Ang=ACptr->Ang+cons*dx[k];
      if (j==0) ACptr->val=ACptr->V;
      ACptr->val=ACptr->val+cons*dx[k+1];
      if (Rcont && ACptr->val>ACptr->Vmax && Limits)      ACptr->V=ACptr->Vmax;
      else if (Rcont && ACptr->val<ACptr->Vmin && Limits) ACptr->V=ACptr->Vmin;
      else if (ACptr->val<=0)                             ACptr->V=0.00001;
      else                                                ACptr->V=ACptr->val;
    }
    else if (strpbrk(ACptr->Type,"T")){
      k=ACvar[ACptr->N];
      ACptr->Ang=ACptr->Ang+cons*dx[k];
      if (Rcont) {
        for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next){
          Eptr=ELptr->Eptr;
          if (!strcmp(Eptr->Type,"R")) {
            if (j==0) Eptr->val=Eptr->Tap;
            Eptr->val=Eptr->val+cons*dx[k+1];
            if (Tlim && Eptr->val<1/Eptr->Tmax+0.00001 && Limits) Eptr->Tap=1/Eptr->Tmax;
            else if (Tlim && Eptr->val>1/Eptr->Tmin-0.00001 && Limits) Eptr->Tap=1/Eptr->Tmin;
            else Eptr->Tap=Eptr->val;
          }
        }
      } else {
        if (j==0) ACptr->val=ACptr->V;
        ACptr->val=ACptr->val+cons*dx[k+1];
        if (ACptr->val<=0) ACptr->V=0.00001;
        else ACptr->V=ACptr->val;
      }
    }
    if (PQcont) for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next) {
      Eptr=ELptr->Eptr;
      if(strpbrk(Eptr->Type,"PQMN")) {
        k=ACvar[ACptr->N]+1;
        if(Acont && strpbrk(ACptr->Type,"A")) k=k+1;
        k=k+Eptr->Cont->Ncont-Eptr->Ncont;
        if (!strcmp(Eptr->Type,"RP")) {
          if (j==0) Eptr->val=Eptr->Ang;
          Eptr->val=Eptr->val+cons*dx[k];
          if (Tlim && Eptr->val>Eptr->Tmax && Limits) Eptr->Ang=Eptr->Tmax;
          else if (Tlim && Eptr->val<Eptr->Tmin && Limits) Eptr->Ang=Eptr->Tmin;
          else Eptr->Ang=Eptr->val;
        }
        else if (!strcmp(Eptr->Type,"RQ")) {
          if (j==0) Eptr->val=Eptr->Tap;
          Eptr->val=Eptr->val+cons*dx[k];
          if (Tlim && Eptr->val<1/Eptr->Tmax+0.00001 && Limits) Eptr->Tap=1/Eptr->Tmax;
          else if (Tlim && Eptr->val>1/Eptr->Tmin-0.00001 && Limits) Eptr->Tap=1/Eptr->Tmin;
          else Eptr->Tap=Eptr->val;
        }
        else if (strpbrk(Eptr->Type,"MN")) {
          if (j==0) Eptr->val=Eptr->Cvar;
          Eptr->val=Eptr->val+cons*dx[k];
          if (PQlim && Eptr->val>Eptr->Max && Limits) Eptr->Cvar=Eptr->Max;
          else if (PQlim && Eptr->val<Eptr->Min && Limits) Eptr->Cvar=Eptr->Min;
          else Eptr->Cvar=Eptr->val;
        }
        else Eptr->Cvar=Eptr->Cvar+cons*dx[k];
      }
    }
    if (ACptr->Gen!=NULL) {
      k=ACptr->Gen->Nvar;
      if (!strpbrk(ACptr->cont,"E")) {
        if (j==0) ACptr->vals=ACptr->Gen->Eq;
        ACptr->vals=ACptr->vals+cons*dx[k+1];
        if (Elim && ACptr->vals>ACptr->Gen->EqMax && Limits)      ACptr->Gen->Eq=ACptr->Gen->EqMax;
        else if (Elim && ACptr->vals<ACptr->Gen->EqMin && Limits) ACptr->Gen->Eq=ACptr->Gen->EqMin;
        else if (ACptr->vals<=0)                                  ACptr->Gen->Eq=0.00001;
        else                                                      ACptr->Gen->Eq=ACptr->vals;
      }
      else {
        if (j==0) ACptr->vals=ACptr->Qg;
        ACptr->vals=ACptr->vals+cons*dx[k+1];
        if (strpbrk(ACptr->Type,"V")) {
          if (Recover && ACptr->Gen->Eq>=ACptr->Gen->EqMax && ACptr->vals>ACptr->VCont && Limits)      ACptr->Qg=ACptr->VCont;
          else if (Recover && ACptr->Gen->Eq<=ACptr->Gen->EqMin && ACptr->vals<ACptr->VCont && Limits) ACptr->Qg=ACptr->VCont;
          else                                                                                         ACptr->Qg=ACptr->vals;
        }
        else {
          if (Qlim && ACptr->vals>ACptr->Max && Limits)      ACptr->Qg=ACptr->Max;
          else if (Qlim && ACptr->vals<ACptr->Min && Limits) ACptr->Qg=ACptr->Min;
          else                                               ACptr->Qg=ACptr->vals;
        }
      }
      ACptr->Gen->dg=ACptr->Gen->dg+cons*dx[k+2];
      ACptr->Gen->Vr=ACptr->Gen->Vr+cons*dx[k+3];
      ACptr->Gen->Vi=ACptr->Gen->Vi+cons*dx[k+4];
      ACptr->Gen->Ir=ACptr->Gen->Ir+cons*dx[k+5];
      ACptr->Gen->Ii=ACptr->Gen->Ii+cons*dx[k+6];
      ACptr->Gen->Vq=ACptr->Gen->Vq+cons*dx[k+7];
      ACptr->Gen->Vd=ACptr->Gen->Vd+cons*dx[k+8];
      ACptr->Gen->Iq=ACptr->Gen->Iq+cons*dx[k+9];
      ACptr->Gen->Id=ACptr->Gen->Id+cons*dx[k+10];
      if (!strpbrk(ACptr->cont,"I")) {
        if (j==0) ACptr->valt=ACptr->Gen->Ia;
        ACptr->valt=ACptr->valt+cons*dx[k+11];
        if (Ilim && ACptr->valt>ACptr->Gen->IaMax && Limits) ACptr->Gen->Ia=ACptr->Gen->IaMax;
        else if (ACptr->valt<=0)                             ACptr->Gen->Ia=0.00001;
        else                                                 ACptr->Gen->Ia=ACptr->valt;
      }
      else {
        if (j==0) ACptr->valt=ACptr->Qg;
        ACptr->valt=ACptr->valt+cons*dx[k+11];
        if (strpbrk(ACptr->Type,"V")) {
          if (Recover && ACptr->Gen->Ia>=ACptr->Gen->IaMax && ACptr->valt>ACptr->VCont && Limits) ACptr->Qg=ACptr->VCont;
          else                                                                                    ACptr->Qg=ACptr->valt;
        }
        else {
          if (Qlim && ACptr->valt>ACptr->Max && Limits)      ACptr->Qg=ACptr->Max;
          else if (Qlim && ACptr->valt<ACptr->Min && Limits) ACptr->Qg=ACptr->Min;
          else                                               ACptr->Qg=ACptr->valt;
        }
      }
    }
  }

  for (ACptr=dataPtr->ACbus; ACptr!=NULL; ACptr=ACptr->Next) {
    if (QRcont && strpbrk(ACptr->Type,"G")  && strpbrk(ACptr->cont,"V")){
      k=ACvar[ACptr->Cont->N];
      if (ACptr->Cont->Qr>=0) ACptr->Kbg=ACptr->Kbg1;
      else                    ACptr->Kbg=ACptr->Kbg2;
      ACptr->valp=ACptr->Kbg*ACptr->Cont->Qr;
      if (Qlim && ACptr->valp>ACptr->Max && Limits)      ACptr->Qg=ACptr->Max;
      else if (Qlim && ACptr->valp<ACptr->Min && Limits) ACptr->Qg=ACptr->Min;
      else                                               ACptr->Qg=ACptr->valp;
    }
  }

  if (flagH && !Bl) lambda=lambda+cons*dx[Jac->n1];
}


/* -----------------UpdateDCvar ---------------------------- */
#ifdef ANSIPROTO
void UpdateDCvar(VALUETYPE cons,INDEX j,BOOLEAN Limits)
#else
void UpdateDCvar(cons,j,Limits)
VALUETYPE cons;
INDEX j;
BOOLEAN Limits;
#endif
{
  DCbusData *DCptrR,*DCptrI,*DCptr;
  INDEX i,k,m;

  k=NacVar;
  for (DCptrR=dataPtr->DCbus;DCptrR!=NULL;DCptrR=DCptrR->Next){
    DCptrI=DCptrR->To;
    if (!strcmp(DCptrR->Type,"R")){
      for (m=1;m<=2;m++) {
        i= -1;
        if(m==1) DCptr=DCptrR;
        else DCptr=DCptrI;
        if (strcmp(DCptr->Cont1,"VD") && strcmp(DCptr->Cont2,"VD")){
          i++;
          if (j==0) DCptr->val[i]=DCptr->Vd;
          DCptr->val[i]=DCptr->val[i]+cons*dx[++k];
          if (DCptr->VdN && ((DCptr->Tap>=DCptr->TapMax && DCptr->val[i]>DCptr->VdN)||
              (DCptr->Tap<=DCptr->TapMin && DCptr->val[i]<DCptr->VdN) ||
              (strpbrk(DCptr->Cont1,"IP")&&DCptr->Tap>DCptr->TapMin&&DCptr->val[i]>DCptr->VdN)))
             DCptr->Vd=DCptr->VdN;
          else DCptr->Vd=DCptr->val[i];}
        if (strcmp(DCptr->Cont1,"AT") && strcmp(DCptr->Cont2,"AT")){
          i++;
          if (j==0) DCptr->val[i]=DCptr->Tap;
          DCptr->val[i]=DCptr->val[i]+cons*dx[++k]/DCptr->Ntrf;
          if (DCptr->val[i]>DCptr->TapMax && Limits) DCptr->Tap=DCptr->TapMax;
          else if (DCptr->val[i]<DCptr->TapMin && Limits) DCptr->Tap=DCptr->TapMin;
          else DCptr->Tap=DCptr->val[i];}
        if (strcmp(DCptr->Cont1,"AL") && strcmp(DCptr->Cont2,"AL")){
          i++;
          if (j==0) DCptr->val[i]=cos(DCptr->Alfa);
          DCptr->val[i]=DCptr->val[i]+cons*dx[++k];
          if (DCptr->val[i]<cos(DCptr->AlfaMax)) DCptr->Alfa=DCptr->AlfaMax;
          else if (DCptr->val[i]>cos(DCptr->AlfaMin)) DCptr->Alfa=DCptr->AlfaMin;
          else if (DCptr->AlfaN && ((DCptr->Tap>=DCptr->TapMax && DCptr->val[i]<cos(DCptr->AlfaN))||
                   (DCptr->Tap<=DCptr->TapMin && DCptr->val[i]>cos(DCptr->AlfaN)))) DCptr->Alfa=DCptr->AlfaN;
          else DCptr->Alfa=acos(DCptr->val[i]);}
        if (strcmp(DCptr->Cont1,"GA") && strcmp(DCptr->Cont2,"GA")){
          i++;
          if (j==0) DCptr->val[i]=cos(DCptr->Gamma);
          DCptr->val[i]=DCptr->val[i]+cons*dx[++k];
          if (fabs(DCptr->val[i])>cos(DCptr->GammaMin)) DCptr->Gamma=DCptr->GammaMin;
          else DCptr->Gamma=acos(DCptr->val[i]);}
        DCptr->MVA=DCptr->MVA+cons*dx[++k];
        if (strcmp(DCptr->Cont1,"PA") && strcmp(DCptr->Cont2,"PA"))
          DCptr->P=DCptr->P+cons*dx[++k];
        if (strcmp(DCptr->Cont1,"QA") && strcmp(DCptr->Cont2,"QA"))
          DCptr->Q=DCptr->Q+cons*dx[++k];
      }
      if (strcmp(DCptrR->Cont1,"ID") && strcmp(DCptrR->Cont2,"ID") &&
          strcmp(DCptrI->Cont1,"ID") && strcmp(DCptrI->Cont2,"ID"))
        DCptrI->Id=DCptrR->Id=DCptrR->Id+cons*dx[++k];
    }
  }
}

⌨️ 快捷键说明

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