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

📄 homotjac.cpp

📁 用于潮流计算的程序请让我下载我需要的吧感谢了啊
💻 CPP
字号:
/* Homotopy Continuation Method: Jacobian */

#include "homot.h"

/* ------- Global Variables ------ */
extern VALUETYPE *Dx,Dparam,param0,*x0,*x0p,Kh,Htol,SD0,AngTr,
                 VoltageSum,VoltageSum0,DxiMax,VSF,SF,ZeroDx,Tol;
extern INDEX NewNumEq,CountSteps,NumSteps;
extern AClist *Vlist,*Vlistp;
extern BOOLEAN flagReducedContinuation,flagReduceSystem,*DxZero;


/* ------------------ HFunJac ----------------------------- */
#ifdef ANSIPROTO
int HFunJac(BOOLEAN FlagFunction,BOOLEAN FlagJacobian,AreaData *Aptr,VALUETYPE *vec)
#else
int HFunJac(FlagFunction,FlagJacobian,Aptr,vec)
BOOLEAN FlagFunction,FlagJacobian;
AreaData *Aptr;
VALUETYPE *vec;
#endif
/* Add a row to the Jacobian. */
{
  ACbusData *ACptr,*ACptrp;
  DCbusData *DCptrR,*DCptrI,*DCptr;
  SVCbusData *SVCptr;                  /* FACTS */
  TCSCbusData *TCSCptr;                /* FACTS */
  STATCOMbusData *STATCOMptr;          /* FACTS */
  ElementData *Eptr;
  ElementList *ELptr;
  INDEX i,j,l;
  VALUETYPE valp;
  int val;

  val=0;
  l=Jac->n1;
  if (FlagFunction) {
    if (Bl) dF[l]=0;
    else dF[l]=Dparam*(lambda-param0-Dparam);
  }
  if (FlagJacobian) {
    if (Dparam) JacElement(Jac,l,l,Dparam);
    else JacElement(Jac,l,l,1.0);
  }
  for(ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next){
    if (ACptr->Cont!=NULL) {
      i=ACvar[ACptr->N];
      if (strpbrk(ACptr->Type,"S")) {
        if (FlagFunction) {
          if (flagReducedContinuation && DxZero[i]) dF[i]=0;
          dF[l] +=vec[i]*(ACptr->Kg-x0[i]-vec[i]);
        }
        if (FlagJacobian) {
          if (Aptr==NULL && fabs(vec[i])<1e-6) val=-1;
          JacElement(Jac,l,i,vec[i]);
        }
      } else {
        if (FlagFunction) {
          if (flagReducedContinuation && DxZero[i]) dF[i]=0;
          dF[l] +=vec[i]*(ACptr->Ang-x0[i]-vec[i]);
        }
        if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      }
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i+1]) dF[i+1]=0;
        dF[l] +=vec[i+1]*(ACptr->V-x0[i+1]-vec[i+1]);
      }
      if (FlagJacobian) JacElement(Jac,l,i+1,vec[i+1]);
    }
    else if(strpbrk(ACptr->Type,"L")) {
      i=ACvar[ACptr->N];
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Ang-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      if (FlagFunction) dF[l] +=vec[i+1]*(lambda-x0[i+1]-vec[i+1]);
      if (FlagJacobian) JacElement(Jac,l,i+1,vec[i+1]);
      if (FlagFunction) dF[l] +=Dparam*(ACptr->V-param0-Dparam);
    }
    else if(QRcont && strpbrk(ACptr->Type,"C")){
      i=ACvar[ACptr->N];
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Ang-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i+1]) dF[i+1]=0;
        dF[l] +=vec[i+1]*(ACptr->Qr-x0[i+1]-vec[i+1]);
      }
      if (FlagJacobian) JacElement(Jac,l,i+1,vec[i+1]);
    }
    else if(Rcont && strpbrk(ACptr->Type,"T")){
      i=ACvar[ACptr->N];
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Ang-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next){
        Eptr=ELptr->Eptr;
        if(!strcmp(Eptr->Type,"R")) break;
      }
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i+1]) dF[i+1]=0;
        dF[l] +=vec[i+1]*(Eptr->Tap-x0[i+1]-vec[i+1]);
      }
      if (FlagJacobian) JacElement(Jac,l,i+1,vec[i+1]);
    }
    else if(strpbrk(ACptr->Type,"Q,S,V,Z")|| (!QRcont && strpbrk(ACptr->Type,"G"))){
      i=ACvar[ACptr->N];
      if (strpbrk(ACptr->Type,"S")) {
        if (FlagFunction) {
          if (flagReducedContinuation && DxZero[i]) dF[i]=0;
          dF[l] +=vec[i]*(ACptr->Kg-x0[i]-vec[i]);
        }
        if (FlagJacobian) {
          if (Aptr==NULL && fabs(vec[i])<1e-6) val=-1;
          JacElement(Jac,l,i,vec[i]);
        }
      } else {
        if (FlagFunction) {
          if (flagReducedContinuation && DxZero[i]) dF[i]=0;
          dF[l] +=vec[i]*(ACptr->Ang-x0[i]-vec[i]);
        }
        if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      }
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i+1]) dF[i+1]=0;
        dF[l] +=vec[i+1]*(ACptr->Qg-x0[i+1]-vec[i+1]);
      }
      if (FlagJacobian) JacElement(Jac,l,i+1,vec[i+1]);
    }
    if(Acont && strpbrk(ACptr->Type,"A")){
      i=ACvar[ACptr->N]+2;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Kg-x0[i]-vec[i]);
      }
      if (FlagJacobian) {
        if (Aptr!=NULL && ACptr->Area==Aptr && fabs(vec[i])<1e-6) val=-1;
        JacElement(Jac,l,i,vec[i]);
      }
    }
    if (PQcont) for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next) {
      Eptr=ELptr->Eptr;
      if(strpbrk(Eptr->Type,"PQNM")) {
        i=ACvar[ACptr->N]+1+ACptr->Ncont-Eptr->Ncont;
        if (Acont && strpbrk(ACptr->Type,"A")) i++;
        if(!strcmp(Eptr->Type,"RP")){
          if (FlagFunction) {
            if (flagReducedContinuation && DxZero[i]) dF[i]=0;
            dF[l] +=vec[i]*(Eptr->Ang-x0[i]-vec[i]);
          }
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
        else if(!strcmp(Eptr->Type,"RQ")){
          if (FlagFunction) {
            if (flagReducedContinuation && DxZero[i]) dF[i]=0;
            dF[l] +=vec[i]*(Eptr->Tap-x0[i]-vec[i]);
          }
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
        else {
          if (FlagFunction) {
            if (flagReducedContinuation && DxZero[i]) dF[i]=0;
            dF[l] +=vec[i]*(Eptr->Cvar-x0[i]-vec[i]);
          }
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
      }
    }
    if (ACptr->Gen!=NULL) {
      i=ACptr->Gen->Nvar+1;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        if (!strpbrk(ACptr->cont,"E")) dF[l] +=vec[i]*(ACptr->Gen->Eq-x0[i]-vec[i]);
        else                                dF[l] +=vec[i]*(ACptr->Qg-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->dg-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->Vr-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->Vi-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->Ir-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->Ii-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->Vq-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->Vd-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->Iq-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        dF[l] +=vec[i]*(ACptr->Gen->Id-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      i++;
      if (FlagFunction) {
        if (flagReducedContinuation && DxZero[i]) dF[i]=0;
        if (!strpbrk(ACptr->cont,"I")) dF[l] +=vec[i]*(ACptr->Gen->Ia-x0[i]-vec[i]);
        else                           dF[l] +=vec[i]*(ACptr->Qg-x0[i]-vec[i]);
      }
      if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
    }
  }
  i=NacVar;
  for(DCptrR=dataPtr->DCbus;DCptrR!=NULL;DCptrR=DCptrR->Next){
    DCptrI=DCptrR->To;
    if(!strcmp(DCptrR->Type,"R")){
      for (j=1;j<=2;j++) {
        if (j==1) DCptr=DCptrR;
        else DCptr=DCptrI;
        if(strcmp(DCptr->Cont1,"VD")&&strcmp(DCptr->Cont2,"VD")) {
          i++; if (FlagFunction) dF[l] +=vec[i]*(DCptr->Vd-x0[i]-vec[i]);
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
        if(strcmp(DCptr->Cont1,"AT")&&strcmp(DCptr->Cont2,"AT")) {
          i++; if (FlagFunction) dF[l] +=vec[i]*(DCptr->Tap*DCptr->Ntrf-x0[i]-vec[i]);
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
        if(strcmp(DCptr->Cont1,"AL")&&strcmp(DCptr->Cont2,"AL")) {
          i++; if (FlagFunction) dF[l] +=vec[i]*(cos(DCptr->Alfa)-x0[i]-vec[i]);
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
        if(strcmp(DCptr->Cont1,"GA")&&strcmp(DCptr->Cont2,"GA")) {
          i++; if (FlagFunction) dF[l] +=vec[i]*(cos(DCptr->Gamma)-x0[i]-vec[i]);
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
        i++; if (FlagFunction) dF[l] +=vec[i]*(DCptr->MVA-x0[i]-vec[i]);
        if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        if(strcmp(DCptr->Cont1,"PA")&&strcmp(DCptr->Cont2,"PA")) {
          i++; if (FlagFunction) dF[l] +=vec[i]*(DCptr->P-x0[i]-vec[i]);
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
        if(strcmp(DCptr->Cont1,"QA")&&strcmp(DCptr->Cont2,"QA")) {
          i++; if (FlagFunction) dF[l] +=vec[i]*(DCptr->Q-x0[i]-vec[i]);
          if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
        }
      }
      if(strcmp(DCptrR->Cont1,"ID")&&strcmp(DCptrR->Cont2,"ID")&&
         strcmp(DCptrI->Cont1,"ID")&&strcmp(DCptrI->Cont2,"ID")) {
        i++; if (FlagFunction) dF[l] +=vec[i]*(DCptrR->Id-x0[i]-vec[i]);
        if (FlagJacobian) JacElement(Jac,l,i,vec[i]);
      }
    }
  }
                                     /* FACTS */
  i=NacVar+11*Ndc/2;
  for(SVCptr=dataPtr->SVCbus;SVCptr!=NULL;SVCptr=SVCptr->Next){
     i++; if(FlagFunction) dF[l] +=vec[i]*(SVCptr->Qsvc-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(SVCptr->Bv-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     if(!strcmp(SVCptr->Cont,"AL")){
       i++; if(FlagFunction) dF[l] +=vec[i]*(SVCptr->alpha_svc-x0[i]-vec[i]);
       if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     } else {
       i++; if(FlagFunction) dF[l] +=vec[i]*(SVCptr->Vvar-x0[i]-vec[i]);
       if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     }
  }
  i=NacVar+11*Ndc/2+3*Nsvc;
  for(TCSCptr=dataPtr->TCSCbus;TCSCptr!=NULL;TCSCptr=TCSCptr->Next){
     i++; if(FlagFunction) dF[l] +=vec[i]*(TCSCptr->Ptcsc-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(TCSCptr->Qtcsck-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(TCSCptr->Qtcscm-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(TCSCptr->Be-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(TCSCptr->alpha_tcsc-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(TCSCptr->Itcsc-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(TCSCptr->delta_t-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
  }
  i=NacVar+11*Ndc/2+3*Nsvc+NtcscVar;
  for(STATCOMptr=dataPtr->STATCOMbus;STATCOMptr!=NULL;STATCOMptr=STATCOMptr->Next){
     if (!strcmp(STATCOMptr->Cont,"PW") || !strcmp(STATCOMptr->Cont,"AL")) {
       i++; if(FlagFunction) dF[l] +=vec[i]*(STATCOMptr->I-x0[i]-vec[i]);
       if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     } else {
       i++; if(FlagFunction) dF[l] +=vec[i]*(STATCOMptr->Vvar-x0[i]-vec[i]);
       if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     }
     i++; if(FlagFunction) dF[l] +=vec[i]*(STATCOMptr->theta-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(STATCOMptr->Vdc-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(STATCOMptr->k-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(STATCOMptr->alpha-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(STATCOMptr->P-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
     i++; if(FlagFunction) dF[l] +=vec[i]*(STATCOMptr->Q-x0[i]-vec[i]);
     if(FlagJacobian)JacElement(Jac,l,i,vec[i]);
  }
                                  /* END FACTS */
  return(val);
}


⌨️ 快捷键说明

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