📄 tefacdc.c
字号:
/* AC/DC Transient Energy Functions. */#include <stdlib.h>//#ifndef WINDOWS//#include <stdio.h>//#else#include "pfwstdio.h"//#endif#include <math.h>#include <string.h>#include "constant.h"#include "param.h"#include "sparse.h"#include "pflow.h"#ifdef ANSIPROTOvoid TEFac(BOOLEAN flag);void TEFdc(FILE *Out);void MatlabV(FILE *Out);void TEFMatlabFiles(void);void Print(FILE *File,int spaces,int width,int decimals,VALUETYPE val);#elsevoid TEFac();void TEFdc();void MatlabV();void TEFMatlabFiles();void Print();#endif/* ------- Global Variables ------ */extern Data *dataPtr;extern SparseMatrix *Jac;extern INDEX Nac,Ngen,Ndc,NacVar,Narea;extern INDEX *ACvar;extern VALUETYPE *x0p,lambda,Sn;extern AClist *Vlist;extern BOOLEAN flagBS,flagPgMax;VALUETYPE Vac;extern int field;extern BOOLEAN flagPrintTotalPl,flagPrintTotalQl,flagPrintTotalPg,flagPrintTotalQg;/* ------------------ TEFac ----------------------------- */#ifdef ANSIPROTOvoid TEFac(BOOLEAN flag)#elsevoid TEFac(flag)BOOLEAN flag;#endif/* Caculate AC TEF. */{ ACbusData *ACptr,*BEptr,*To; ElementList *ELptr; ElementData *Eptr; VALUETYPE Vi,Vj,di,dj,Pi,Qi,Pl,Ql,val; VALUETYPE gii,bii,gij,bij,gsij,bsij,DPg,Pg; INDEX i,j; if (Narea<2){ for(BEptr=dataPtr->ACbus;BEptr!=NULL;BEptr=BEptr->Next) if(strpbrk(BEptr->Type,"S")) break; } for(Vac=0,ACptr=dataPtr->ACbus; ACptr!=NULL; ACptr=ACptr->Next) { if(ACptr->Area!=NULL) BEptr=ACptr->Area->Slack; if (flagBS) {if (ACptr!=BEptr) DPg=0; else DPg=1;} else DPg=ACptr->DPg; i=ACvar[ACptr->N]; Vi=ACptr->V; di=ACptr->Ang; if (flag) { x0p[i]=di; x0p[i+1]=Vi; } Pl = (ACptr->Pn+lambda*ACptr->Pnl)*pow(Vi,ACptr->a); Ql = (ACptr->Qn-lambda*ACptr->Qnl)*pow(Vi,ACptr->b); Pg=ACptr->Pg+DPg*BEptr->Kg; if (!flagPgMax && Pg>ACptr->PgMax) Pg=ACptr->PgMax; Pi = Pg-Pl; Qi = -Ql; Qi=Qi+ACptr->Qg; gii=ACptr->G+ACptr->Pz+lambda*ACptr->Pzl; bii=ACptr->B+ACptr->Qz+lambda*ACptr->Qzl; for(val=0,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 (flag) { x0p[j]=dj; x0p[j+1]=Vj; } if(Eptr->From==ACptr) { 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)*pow(Eptr->Tap,2.0)-gij; bsij=(Eptr->B1+Eptr->B)*pow(Eptr->Tap,2.0)-bij; } 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; } val=val+0.5*bij*Vi*Vj*cos(di-dj); val=val-gij*x0p[i+1]*x0p[j+1]*cos(x0p[i]-x0p[j])*di-gij*x0p[j+1]*sin(x0p[i]-x0p[j])*Vi; gii=gii+gij+gsij; bii=bii+bij+bsij; } val=val-0.5*bii*Vi*Vi-Pi*di; if (Vi>0) val=val-Qi*log(Vi); val=val+gii*x0p[i+1]*x0p[i+1]*di; Vac=Vac+val; }}/* ------------------ TEFdc ----------------------------- */#ifdef ANSIPROTOvoid TEFdc(FILE *Out)#elsevoid TEFdc(Out)FILE *Out;#endif/* Caculate DC TEF and coupling terms. */{ DCbusData *DCptrR,*DCptrI,*DCptr; VALUETYPE a,b,d,t,cosag,Id,Xc; INDEX j; 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; cosag=cos(DCptr->Alfa); } else { DCptr=DCptrI; cosag=cos(DCptr->Gamma); } Id=DCptr->Id; t=DCptr->Tap*DCptr->Ntrf; Xc=DCptr->Xc; a= -Xc*Xc*Id*Id; b=2*sqrt(2.0)*t*Xc*Id*cosag; /* c=2*t*t*(1-cosag*cosag); */ d=8*t*t*Xc*Xc*Id*Id; Print(Out,0,field,4,a); fCustomPrint(Out," "); Print(Out,0,field,4,b); fCustomPrint(Out," "); Print(Out,0,field,4,d); fCustomPrint(Out," "); } } }}/* --------------------------- MatlabV --------------------------------- */#ifdef ANSIPROTOvoid MatlabV(FILE *Out)#elsevoid MatlabV(Out)FILE *Out;#endif/* Write Matlab commands in output file for ploting profiles. */{ AClist *Lptr; char LineType[4][5]; DCbusData *DCptr,*DCptrp; INDEX count,countp,i,j,k,l,js,ks; VALUETYPE k1,k2,ki,kp,P11,P12,P22,P23,P33,Beta,KV; strcpy(LineType[0],"'-'"); strcpy(LineType[1],"'-.'"); strcpy(LineType[2],"':'"); strcpy(LineType[3],"'--'"); fCustomPrint(Out,"];\n"); fCustomPrint(Out,"%s Plot profiles:\n","%%"); fCustomPrint(Out,"%s Change the value of K to scale L.F.\nK=1;\n","%%"); fCustomPrint(Out,"figure;\nplot("); for(count=countp=0,Lptr=Vlist;Lptr!=NULL;Lptr=Lptr->Next) { count++; if (countp<4) { if (!strcmp(Lptr->Type,"V")) { KV=Lptr->AC->KV; if (KV<=0) KV=1; if (countp==0) fCustomPrint(Out,"K*x(:,1),%5.1f*x(:,%1d)",KV,count+1); else fCustomPrint(Out,",K*x(:,1),%5.1f*x(:,%1d)",KV,count+1); fCustomPrint(Out,",%s", LineType[countp]); } else { if (countp==0) fCustomPrint(Out,"K*x(:,1),x(:,%1d)",count+1); else fCustomPrint(Out,",K*x(:,1),x(:,%1d)",count+1); fCustomPrint(Out,",%s", LineType[countp]); } } countp++; } if (countp<4 && flagPrintTotalPl) { if (countp==0) fCustomPrint(Out,"K*x(:,1),x(:,%1d)",count+1); else fCustomPrint(Out,",K*x(:,1),x(:,%1d)",count+1); fCustomPrint(Out,",%s", LineType[countp]); countp++; } if (countp<4 && flagPrintTotalQl) { if (countp==0) fCustomPrint(Out,"K*x(:,1),x(:,%1d)",count+1); else fCustomPrint(Out,",K*x(:,1),x(:,%1d)",count+1); fCustomPrint(Out,",%s", LineType[countp]); countp++; } if (countp<4 && flagPrintTotalPg) { if (countp==0) fCustomPrint(Out,"K*x(:,1),x(:,%1d)",count+1); else fCustomPrint(Out,",K*x(:,1),x(:,%1d)",count+1); fCustomPrint(Out,",%s", LineType[countp]); countp++; } if (countp<4 && flagPrintTotalQg) { if (countp==0) fCustomPrint(Out,"K*x(:,1),x(:,%1d)",count+1); else fCustomPrint(Out,",K*x(:,1),x(:,%1d)",count+1); fCustomPrint(Out,",%s", LineType[countp]); countp++; } fCustomPrint(Out,");\n"); fCustomPrint(Out,"legend("); for(countp=0,Lptr=Vlist;Lptr!=NULL;Lptr=Lptr->Next) { if (countp<4) { if (Lptr->AC!=NULL && !strcmp(Lptr->Type,"V")) { if (countp==0) fCustomPrint(Out,"'kV_{%s}'",Lptr->AC->Name); else fCustomPrint(Out,",'kV_{%s}'",Lptr->AC->Name); } else if (Lptr->AC!=NULL && !strcmp(Lptr->Type,"D")) { if (countp==0) fCustomPrint(Out,"'deg_{%s}'",Lptr->AC->Name); else fCustomPrint(Out,",'deg_{%s}'",Lptr->AC->Name); } else if (Lptr->AC!=NULL && !strcmp(Lptr->Type,"PL")) { if (countp==0) fCustomPrint(Out,"'L MW_{%s}'",Lptr->AC->Name); else fCustomPrint(Out,",'L MW_{%s}'",Lptr->AC->Name); } else if (Lptr->AC!=NULL && !strcmp(Lptr->Type,"QL")) { if (countp==0) fCustomPrint(Out,"'L MVar_{%s}'",Lptr->AC->Name); else fCustomPrint(Out,",'L MVar_{%s}'",Lptr->AC->Name); } else if (Lptr->AC!=NULL && !strcmp(Lptr->Type,"PG")) { if (countp==0) fCustomPrint(Out,"'G MW_{%s}'",Lptr->AC->Name); else fCustomPrint(Out,",'G MW_{%s}'",Lptr->AC->Name); } else if (Lptr->AC!=NULL && !strcmp(Lptr->Type,"QG")) { if (countp==0) fCustomPrint(Out,"'G MVar_{%s}'",Lptr->AC->Name); else fCustomPrint(Out,",'G MVar_{%s}'",Lptr->AC->Name); } else if(Lptr->Area!=NULL) { if (countp==0) fCustomPrint(Out,"'A MW_{%s}'",Lptr->Type,Lptr->Area->Name); else fCustomPrint(Out,",'A MW_{%s}'",Lptr->Type,Lptr->Area->Name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -