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

📄 pointac.c

📁 电力系统分析计算 学习调试程序 UNIX / LINUX / CYGWIN 系统使用
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Point of Collapse:  AC Hessian. */#include "pointl.h"/* ------------------ ACFunHes ----------------------------- */#ifdef ANSIPROTOvoid ACFunHes(BOOLEAN flagF,BOOLEAN flagJ)#elsevoid ACFunHes(flagF,flagJ)BOOLEAN flagF,flagJ;#endif/* Construct the AC part of the PoC Jacobian. */{  SparseMatrixElement *Jptr;  ACbusData *ACptr,*To,*From,*BEptr,*BSptr;  AClist *ALptr;  ElementList *ELptr;  ElementData *Eptr;  VALUETYPE Vi,Vj,di,dj,gij,bij,gsij,bsij,gji,bji;  VALUETYPE v1,dv1,v2,dv2,v3,dv3,v4,dv4,v5,v6,dv6,v7,v8,dv8,v9,v10,dv10,v11;  VALUETYPE Ddi,Dvi,Ddip,Dvip,Ddj,Dvj,Dval,a,b,Dlambda,DPg;  VALUETYPE Ra,Xd,Xq,dg,Vd,Vq,Vr,Vim,Iq,Id,Ir,Iim,Ia;  INDEX N,i,j,k,l;  N=NacVar+11*Ndc/2+3*Nsvc+NtcscVar+7*Nstatcom;     /*  FACTS  */  for(v1=0,i=1+N;i<Jac->n1;i++) {    if (fabs(x0[i-N])>v1) {      k=i-N;      v1=fabs(x0[k]);      if(x0[k]>0) v2=1.0;      else v2= -1.0;    }    if (flagJ) JacElement(Jac,Jac->n1,i,0.);    if (flagF) dF[i]=0;  }  if (flagF) dF[Jac->n1]=v1-1;  if (flagJ) JacElement(Jac,Jac->n1,k+N,v2);  if (flagJ) for(i=1;i<=Jac->n1;i++) {    Jptr=Jac->ColHead[i];    while(Jptr!=NULL) {      j=Jptr->Col;      if (OldCol->p[j]) j=OldCol->p[j];      l=Jptr->Row;      if (OldRow->p[l]) l=OldRow->p[l];      if (flagJ && j<=N && l<=N) JacElement(Jac,j+N,l+N,Jptr->Value);      Jptr=Jptr->ColNext;    }  }  for(ALptr=dataPtr->KGbus;ALptr!=NULL;ALptr=ALptr->Next) {    BSptr=ALptr->AC;    if(strpbrk(ALptr->AC->Type,"S"))  break;  }  for(ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next){    if (ACptr->Area!=NULL) BSptr=ACptr->Area->Slack;    i=ACvar[ACptr->N];    Vi=ACptr->V;    di=ACptr->Ang;    a=ACptr->a;    b=ACptr->b;    From=ACptr;    Ddi=Dvi=Ddip=Dvip=0;    /*if (flagF) dF[Jac->n1]+=-ACptr->DPl*x0[i]-ACptr->DQl*x0[i+1];*/    for(ELptr=ACptr->Elem; ELptr!=NULL; ELptr=ELptr->Next) {      Eptr=ELptr->Eptr;      if (Eptr->From==ACptr) To=Eptr->To;      else To=Eptr->From;      j=ACvar[To->N];      Vj=To->V;      dj=To->Ang;      if(Eptr->From==From) {        gij=(Eptr->G*cos(Eptr->Ang)-Eptr->B*sin(Eptr->Ang))*Eptr->Tap;        bij=(Eptr->G*sin(Eptr->Ang)+Eptr->B*cos(Eptr->Ang))*Eptr->Tap;        gsij=(Eptr->G1+Eptr->G)*Eptr->Tap*Eptr->Tap-gij;        bsij=(Eptr->B1+Eptr->B)*Eptr->Tap*Eptr->Tap-bij;        gji=(Eptr->G*cos(Eptr->Ang)+Eptr->B*sin(Eptr->Ang))*Eptr->Tap;        bji=(-Eptr->G*sin(Eptr->Ang)+Eptr->B*cos(Eptr->Ang))*Eptr->Tap;      } else {        gij=(Eptr->G*cos(Eptr->Ang)+Eptr->B*sin(Eptr->Ang))*Eptr->Tap;        bij=(-Eptr->G*sin(Eptr->Ang)+Eptr->B*cos(Eptr->Ang))*Eptr->Tap;        gsij=Eptr->G+Eptr->G2-gij;        bsij=Eptr->B+Eptr->B2-bij;        gji=(Eptr->G*cos(Eptr->Ang)-Eptr->B*sin(Eptr->Ang))*Eptr->Tap;        bji=(Eptr->G*sin(Eptr->Ang)+Eptr->B*cos(Eptr->Ang))*Eptr->Tap;      }      v1=sin(di-dj)*(gij*x0[i]+gji*x0[j]);      dv1=cos(di-dj)*(gij*x0[i]+gji*x0[j]);      v2=cos(di-dj)*(bij*x0[i]-bji*x0[j]);      dv2= -sin(di-dj)*(bij*x0[i]-bji*x0[j]);      v3=cos(di-dj)*(gij*x0[i+1]-gji*x0[j+1]);      dv3= -sin(di-dj)*(gij*x0[i+1]-gji*x0[j+1]);      v4=sin(di-dj)*(bij*x0[i+1]+bji*x0[j+1]);      dv4=cos(di-dj)*(bij*x0[i+1]+bji*x0[j+1]);      v5= -2*((gij+gsij)*x0[i]-(bij+bsij)*x0[i+1]);      if (Acont && From->Area!=To->Area) {        BEptr=From->Area->Slack;        if(!strpbrk(BEptr->Type,"S")) {          k=ACvar[BEptr->N]+2;          if (Eptr->Meter==From) {            v6= -(gij*sin(di-dj)-bij*cos(di-dj))*x0[k];            dv6= -(gij*cos(di-dj)+bij*sin(di-dj))*x0[k];            v7= -2*(gij+gsij)*x0[k];          } else {            v6= -(gji*sin(dj-di)-bji*cos(dj-di))*x0[k];            dv6=(gji*cos(dj-di)+bji*sin(dj-di))*x0[k];            v7=0;          }        } else v6=dv6=v7=0;        BEptr=To->Area->Slack;        if(!strpbrk(BEptr->Type,"S")) {          k=ACvar[BEptr->N]+2;          if (Eptr->Meter==From) {            v8=(gij*sin(di-dj)-bij*cos(di-dj))*x0[k];            dv8=(gij*cos(di-dj)+bij*sin(di-dj))*x0[k];            v9=2*(gij+gsij)*x0[k];          } else {            v8=(gji*sin(dj-di)-bji*cos(dj-di))*x0[k];            dv8= -(gji*cos(dj-di)+bji*sin(dj-di))*x0[k];            v9=0;          }        } else v8=dv8=v9=0;      } else v6=dv6=v7=v8=dv8=v9=0;      if (PQcont && strpbrk(Eptr->Type,"PM")){        k=ACvar[Eptr->Cont->N]+1+Eptr->Cont->Ncont-Eptr->Ncont;        if (Acont && strpbrk(Eptr->Cont->Type,"A")) k++;        if (Eptr->Cont==From) {          v10= -(gij*sin(di-dj)-bij*cos(di-dj))*x0[k];          dv10= -(gij*cos(di-dj)+bij*sin(di-dj))*x0[k];          v11= -2*(gij+gsij)*x0[k];        } else {          v10=(gji*sin(dj-di)-bji*cos(dj-di))*x0[k];          dv10= -(gji*cos(dj-di)+bji*sin(dj-di))*x0[k];          v11=0;        }      } else if (PQcont && strpbrk(Eptr->Type,"QN")){        k=ACvar[Eptr->Cont->N]+1+Eptr->Cont->Ncont-Eptr->Ncont;        if (Acont && strpbrk(Eptr->Cont->Type,"A")) k++;        if (Eptr->Cont==From) {          v10=(gij*cos(di-dj)+bij*sin(di-dj))*x0[k];          dv10= -(gij*sin(di-dj)-bij*cos(di-dj))*x0[k];          v11=2*(bij+bsij)*x0[k];        } else {          v10= -(gji*cos(dj-di)+bji*sin(dj-di))*x0[k];          dv10= -(gji*sin(dj-di)-bji*cos(dj-di))*x0[k];          v11=0;        }      } else v10=dv10=v11=0;      if(flagF){        if (!strpbrk(From->Type,"S")) dF[i+N]+=Vi*Vj*(-v1+v2+v3+v4+v6+v8+v10);        if (From->Cont!=NULL)         dF[i+N+1]+=Vj*(dv1-dv2-dv3-dv4-dv6-dv8-dv10)+Vi*(v5+v7+v9+v11);      }      if(flagJ){        if (!strpbrk(From->Type,"S")){          Ddj=Vi*Vj*(dv1-dv2-dv3-dv4-dv6-dv8-dv10);          Ddi=Ddi-Ddj;          Dvj=Vi*(-v1+v2+v3+v4+v6+v8+v10);          Dvi=Dvi+Vj*(-v1+v2+v3+v4+v6+v8+v10);          if (!strpbrk(To->Type,"S"))  JacElement(Jac,i+N,j,Ddj);          if (To->Cont!=NULL)  JacElement(Jac,i+N,j+1,Dvj);          else JacElement(Jac,i+N,j+1,0.);          if (PQcont && strpbrk(Eptr->Type,"PQMN")){            k=ACvar[Eptr->Cont->N]+1+Eptr->Cont->Ncont-Eptr->Ncont;            if (Acont && strpbrk(Eptr->Cont->Type,"A")) k++;            if(!strcmp(Eptr->Type,"RQ"))              Dval=Vi*Vj/Eptr->Tap*(-v1+v2+v3+v4+v6+v8+v10);            else if(!strcmp(Eptr->Type,"RP"))              Dval=Vi*Vj*(-dv2+dv1-dv4-dv3-dv6-dv8-dv10);            else Dval=0;            JacElement(Jac,i+N,k,Dval);          }          else if(Rcont && Eptr->Cont!=NULL) {            k=ACvar[Eptr->Cont->N]+1;            if(!strcmp(Eptr->Type,"R"))              Dval=Vi*Vj/Eptr->Tap*(-v1+v2+v3+v4+v6+v8+v10);            else Dval=0;            JacElement(Jac,i+N,k,Dval);          }        }        if (From->Cont!=NULL) {          Ddj= -Vj*(-v1+v2+v3+v4+v6+v8+v10);          Ddip=Ddip-Ddj;          Dvj=dv1-dv2-dv3-dv4-dv6-dv8-dv10;          Dvip=Dvip+v5+v7+v9+v11;          if (!strpbrk(To->Type,"S"))  JacElement(Jac,i+1+N,j,Ddj);          if (To->Cont!=NULL) JacElement(Jac,i+1+N,j+1,Dvj);          else JacElement(Jac,i+1+N,j+1,0.);          if (PQcont && strpbrk(Eptr->Type,"PQMN")){            k=ACvar[Eptr->Cont->N]+1+Eptr->Cont->Ncont-Eptr->Ncont;            if (Acont && strpbrk(Eptr->Cont->Type,"A")) k++;            if(!strcmp(Eptr->Type,"RQ")) {              Dval=Vj/Eptr->Tap*(dv1-dv2-dv3-dv4-dv6-dv8-dv10);              if(Eptr->From==From) Dval=Dval+2*Vi/Eptr->Tap*(v5+v7+v9+v11);}            else if(!strcmp(Eptr->Type,"RP"))              Dval=Vj*(-v2+v1-v4-v3-v6-v8-v10);            else Dval=0;            JacElement(Jac,i+1+N,k,Dval);          } else if(Rcont && Eptr->Cont!=NULL) {            k=ACvar[Eptr->Cont->N]+1;            if(!strcmp(Eptr->Type,"R")) {              Dval=Vj/Eptr->Tap*(dv1-dv2-dv3-dv4-dv6-dv8-dv10);              if(Eptr->From==From) Dval=Dval+2*Vi/Eptr->Tap*(v5+v7+v9+v11);}            else Dval=0;            JacElement(Jac,i+1+N,k,Dval);          }        } else {          JacElement(Jac,i+1+N,j,0.);          JacElement(Jac,i+1+N,j+1,0.);          if (PQcont && strpbrk(Eptr->Type,"PQMN")){            k=ACvar[Eptr->Cont->N]+1+Eptr->Cont->Ncont-Eptr->Ncont;            if (Acont && strpbrk(Eptr->Cont->Type,"A")) k++;            JacElement(Jac,i+1+N,k,0.);          } else if(Rcont && Eptr->Cont!=NULL) {            k=ACvar[Eptr->Cont->N]+1;            JacElement(Jac,i+1+N,k,0.);          }        }      }    }    if (flagF) {      DPg=ACptr->DPG;      if(DPg) {        k=ACvar[BSptr->N];        if (strpbrk(BSptr->Type,"S")) dF[k+N]+=DPg*x0[i];        else if(Acont)                dF[k+N+2]+=DPg*x0[i];      }      if (ACptr->Cont!=NULL)        dF[i+N+1]+=-2*Vi*(ACptr->G*x0[i]-ACptr->B*x0[i+1])                   -2*Vi*(ACptr->Pz+ACptr->Pzl*lambda)*x0[i]                   -a*pow(Vi,a-1)*(ACptr->Pn+ACptr->Pnl*lambda)*x0[i]                   -2*Vi*(ACptr->Qz+ACptr->Qzl*lambda)*x0[i+1]                   -b*pow(Vi,b-1)*(ACptr->Qn+ACptr->Qnl*lambda)*x0[i+1];      if(QRcont && strpbrk(ACptr->Type,"G")) {        j=ACvar[ACptr->Cont->N];        if (strpbrk(ACptr->cont,"V")) dF[j+N+1]+=ACptr->Kbg*x0[i+1];        else if (ACptr->Gen!=NULL) {          j=ACptr->Gen->Nvar;          if (strpbrk(ACptr->cont,"E"))   dF[j+N+1]+=x0[i+1];          else                            dF[j+N+11]+=x0[i+1];        }      }      else if(strpbrk(ACptr->Type,"V,Q,S,Z") || (!QRcont && strpbrk(ACptr->Type,"G")) ) {        if (strpbrk(ACptr->cont,"V")) dF[i+N+1]+=x0[i+1];        else if (ACptr->Gen!=NULL) {          j=ACptr->Gen->Nvar;          if (strpbrk(ACptr->cont,"E"))   dF[j+N+1]+=x0[i+1];          else                            dF[j+N+11]+=x0[i+1];        }      }    }    if (flagJ){      if (!strpbrk(From->Type,"S")) JacElement(Jac,i+N,i,Ddi);      if (From->Cont!=NULL) {        Dvip=Dvip-2*(ACptr->G*x0[i]-ACptr->B*x0[i+1])             -2*(ACptr->Pz+ACptr->Pzl*lambda)*x0[i]             -a*(a-1)*pow(Vi,a-2)*(ACptr->Pn+ACptr->Pnl*lambda)*x0[i]             -2*(ACptr->Qz+ACptr->Qzl*lambda)*x0[i+1]             -b*(b-1)*pow(Vi,b-2)*(ACptr->Qn+ACptr->Qnl*lambda)*x0[i+1];        JacElement(Jac,i+N,i+1,Dvi);        JacElement(Jac,i+1+N,i,Ddip);        JacElement(Jac,i+1+N,i+1,Dvip);        Dlambda=-(2*Vi*ACptr->Pzl+a*pow(Vi,a-1)*ACptr->Pnl)*x0[i]                -(2*Vi*ACptr->Qzl+b*pow(Vi,b-1)*ACptr->Qnl)*x0[i+1];        if (Dlambda) {          JacElement(Jac,i+1+N,Jac->n1,Dlambda);

⌨️ 快捷键说明

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