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

📄 writejac.c

📁 电力系统分析计算 学习调试程序 UNIX / LINUX / CYGWIN 系统使用
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Write Jacobian. */#include "write.h"/* ---------- Global Variables --------- */INDEX TFnum,TFbus;char TFname[13];extern VALUETYPE K;extern INDEX *ACvar;/* --------------- WriteJac ---------------------- */#ifdef ANSIPROTOvoid WriteJac(void)#elsevoid WriteJac()#endif{  SparseMatrixElement *Jptr;  ACbusData *ACptr,*ACptrp;  AClist *Lptr;  DCbusData *DCptrR,*DCptrI,*DCptr;  ElementData *Eptr;  ElementList *ELptr;  char Namebase[80],Name[80],str[80],type[2];  FILE *OutFile,*OutFilep;  int i,j,k,l;  INDEX I,J,N,Nvar;  BOOLEAN flag=FALSE;  SVCbusData *SVCptr;                  /* FACTS */  TCSCbusData *TCSCptr;                /* FACTS */  STATCOMbusData *STATCOMptr;          /* FACTS */  if (ExistParameter('J')) strcpy(Namebase,NameParameter('J'));  else strcpy(Namebase,NameParameter('j'));  if(NullName(Namebase)) return;  if (ExistParameter('J') && Bl)    for (ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) {      if(ACptr->Num==Bl) {	strcpy(ACptr->Type,"B");	if(ACptr->Area!=NULL && ACptr->Area->Slack==ACptr) strcat(ACptr->Type,"A");	Bl=0;	ACptr->Cont=ACptr;	break;      }    }  flag=(!ExistParameter('J')) && flagPoC;  DeleteJac(Jac,NewRow,NewCol,OldRow,OldCol);  RowPer=NewRow; ColPer=NewCol;  Nvar=NacVar+11*Ndc/2+3*Nsvc+NtcscVar+7*Nstatcom;  /*  FACTS  */   ACFunJac(Jac,NULL,TRUE,TRUE,FALSE);  DCFunJac(Jac,TRUE,TRUE);  SVCFunJac(Jac,TRUE,TRUE);                  /*  FACTS  */  TCSCFunJac(Jac,TRUE,TRUE);                 /*  FACTS  */  STATCOMFunJac(Jac,TRUE,TRUE);              /*  FACTS  */  if(flagH) { Nvar++; HFunJac(TRUE,TRUE,NULL,Dx);}  else if (flag) {    Nvar=2*Nvar+1;    ACFunHes(TRUE,TRUE);    DCFunHes(TRUE,TRUE);    SVCFunHes(TRUE,TRUE);                   /* FACTS  */    TCSCFunHes(TRUE,TRUE);                  /* FACTS  */    STATCOMFunHes(TRUE,TRUE);               /* FACTS  */  }  SortRowsColumns(Jac);  strcpy(Name,Namebase);  strcat(Name,".jac");  OutFile=OpenOutput(Name);  fCustomPrint(OutFile,"%d %d\n",Nvar,Nvar);  for(i=1;i<=Nvar;i++) {    for(Jptr=Jac->RowHead[i];Jptr!=NULL;Jptr=Jptr->RowNext)      fCustomPrint(OutFile,"%4d %4d %-11.5g\n",Jptr->Row,Jptr->Col,Jptr->Value);  }  fCustomPrint(OutFile,"%4d %4d %-11.5g\n",0,0,0.);  fclose(OutFile);  strcpy(Name,Namebase);  strcat(Name,".var");  OutFile=OpenOutput(Name);  strcpy(Name,Namebase);  strcat(Name,".mis");  OutFilep=OpenOutput(Name);  fCustomPrint(OutFile,"%d 1\n",Nvar);  fCustomPrint(OutFilep,"%d 1\n",Nvar);  for (i=0,ACptr=dataPtr->ACbus; ACptr!=NULL; ACptr=ACptr->Next){    if (ACptr->Cont!=NULL) {      if (strpbrk(ACptr->Type,"S")) {        sprintf(str,"kg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Kg);      }      else {        sprintf(str,"d%-d",ACptr->Num);  fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Ang);      }      sprintf(str,"dP%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"V%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->V);      sprintf(str,"dQ%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);    }    else if(QRcont && strpbrk(ACptr->Type,"C")){      sprintf(str,"d%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Ang);      sprintf(str,"dP%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      for(Lptr=ACptr->ContBus;Lptr!=NULL;Lptr=Lptr->Next){        ACptrp=Lptr->AC;        if (strpbrk(ACptrp->cont,"V")) break;      }      sprintf(str,"Qr%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Qr);      sprintf(str,"dQ%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);    }    else if(Rcont && strpbrk(ACptr->Type,"T")){      sprintf(str,"d%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Ang);      sprintf(str,"dP%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next){	     Eptr=ELptr->Eptr;	     I=Eptr->From->Num;	     J=Eptr->To->Num;	     if(!strcmp(Eptr->Type,"R")) break;      }      sprintf(str,"1/t%-d_%-d",I,J);      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,Eptr->Tap);      sprintf(str,"dQ%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);    }    else if(strpbrk(ACptr->Type,"L")) {      sprintf(str,"d%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Ang);      sprintf(str,"dP%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,"l",lambda);      sprintf(str,"dQ%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);    }    else if(strpbrk(ACptr->Type,"Q") || strpbrk(ACptr->Type,"V") || (!QRcont && strpbrk(ACptr->Type,"G"))) {      if (strpbrk(ACptr->Type,"S")) {        sprintf(str,"kg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Kg);      }      else {        sprintf(str,"d%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Ang);      }      sprintf(str,"dP%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"Qg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Qg);      sprintf(str,"dQ%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);    }    else if(strpbrk(ACptr->Type,"Z")) {      sprintf(str,"d%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Ang);      sprintf(str,"dP%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"Qz%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Qg);      sprintf(str,"dQ%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);    }    else if(strpbrk(ACptr->Type,"S")){      sprintf(str,"kg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Kg);      sprintf(str,"dP%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"Qg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Qg);      sprintf(str,"dQ%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);    }    if(Acont && strpbrk(ACptr->Type,"A")){      sprintf(str,"kg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Kg);      sprintf(str,"dPA%-d",ACptr->Area->N); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);    }    if (PQcont) for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next) {      Eptr=ELptr->Eptr;      if(strpbrk(Eptr->Type,"PQNM")) {      	 if (Eptr->From==ACptr) {	         I=Eptr->From->Num;	         J=Eptr->To->Num;      	 } else {	         J=Eptr->From->Num;	         I=Eptr->To->Num;	       }	       if(!strcmp(Eptr->Type,"RP")){	         sprintf(str,"a%-d_%-d",I,J); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,Eptr->Ang);	         sprintf(str,"dP%-d_%-d",I,J); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);	       }	       else if(strpbrk(Eptr->Type,"PM")){	         sprintf(str,"P%-d_%-d",I,J); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,Eptr->Cvar);	         sprintf(str,"dP%-d_%-d",I,J); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      	 }	       else if(!strcmp(Eptr->Type,"RQ")){	         sprintf(str,"1/t%-d_%-d",I,J); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,Eptr->Tap);	         sprintf(str,"dQ%-d_%-d",I,J); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);	       }	       else {	         sprintf(str,"Q%-d_%-d",I,J); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,Eptr->Cvar);	         sprintf(str,"dQ%-d_%-d",I,J); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);	       }      }    }    if (ACptr->Gen!=NULL) {      i=ACptr->Gen->Nvar;      sprintf(str,"dPg%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dQg%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dEq%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dEd%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dVd%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dVq%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dId%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dIq%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dVr%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dVi%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      sprintf(str,"dIa%-d",ACptr->Num); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",++i,str,dF[i]);      i=ACptr->Gen->Nvar;      if (strpbrk(ACptr->cont,"E")) {        sprintf(str,"Qg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Qg);      } else {        sprintf(str,"Eq%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Eq);      }      sprintf(str,"dg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->dg);      sprintf(str,"Vr%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Vr);      sprintf(str,"Vi%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Vi);      sprintf(str,"Ir%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Ir);      sprintf(str,"Ii%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Ii);      sprintf(str,"Vq%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Vq);      sprintf(str,"Vd%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Vd);      sprintf(str,"Iq%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Iq);      sprintf(str,"Id%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Id);      if (strpbrk(ACptr->cont,"I")) {	       sprintf(str,"Qg%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Qg);      } else {	       sprintf(str,"Ia%-d",ACptr->Num); fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++i,str,ACptr->Gen->Ia);      }    }  }  for(k=0,DCptrR=dataPtr->DCbus;DCptrR!=NULL;DCptrR=DCptrR->Next){    DCptrI=DCptrR->To;    if(!strcmp(DCptrR->Type,"R")){      for (k++,l=1;l<=11;l++){	       sprintf(str,"Fdc%-d_%-d",k,l); i++;       	fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      }      for(l=i-11,j=1;j<=2;j++){	       if(j==1) { DCptr=DCptrR; strcpy(type,"r"); }	       else { DCptr=DCptrI; strcpy(type,"i"); }	       if(strcmp(DCptr->Cont1,"VD")&&strcmp(DCptr->Cont2,"VD")) {	         sprintf(str,"Vd%1s%-d",type,k);       	  fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++l,str,DCptr->Vd);       	}       	if(strcmp(DCptr->Cont1,"AT")&&strcmp(DCptr->Cont2,"AT")) {       	  sprintf(str,"t%1s%-d",type,k);       	  fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++l,str,DCptr->Tap);       	}       	if(strcmp(DCptr->Cont1,"AL")&&strcmp(DCptr->Cont2,"AL")) {       	  sprintf(str,"al%1s%-d",type,k);       	  fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++l,str,DCptr->Alfa);       	}       	if(strcmp(DCptr->Cont1,"GA")&&strcmp(DCptr->Cont2,"GA")) {       	  sprintf(str,"ga%1s%-d",type,k);	         fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++l,str,DCptr->Gamma);       	}       	sprintf(str,"s%1s%-d",type,k);       	fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++l,str,DCptr->MVA);       	if(strcmp(DCptr->Cont1,"PA")&&strcmp(DCptr->Cont2,"PA")) {       	  sprintf(str,"P%1s%-d",type,k);       	  fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++l,str,DCptr->P);       	}       	if(strcmp(DCptr->Cont1,"QA")&&strcmp(DCptr->Cont2,"QA")) {       	  sprintf(str,"Q%1s%-d",type,k);       	  fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++l,str,DCptr->Q);       	}      }      if(strcmp(DCptrR->Cont1,"ID")&&strcmp(DCptrR->Cont2,"ID")&&       	 strcmp(DCptrI->Cont1,"ID")&&strcmp(DCptrI->Cont2,"ID")) {        sprintf(str,"Id%-d",k);        fCustomPrint(OutFile,"%4d %8s %-11.5g\n",++l,str,DCptrR->Id);      }    }  }                               /*   FACTS   */  for(k=0,SVCptr=dataPtr->SVCbus;SVCptr!=NULL;SVCptr=SVCptr->Next){      k++; l=0;      sprintf(str,"Qsvc%-d",k);i++;      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,SVCptr->Qsvc);      sprintf(str,"Fsvc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"Bv%-d",k);i++;       fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,SVCptr->Bv);      sprintf(str,"Fsvc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      if(!strcmp(SVCptr->Cont,"AL")){        sprintf(str,"alpha%-d",k);i++;        fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,SVCptr->alpha_svc);      } else {	       sprintf(str,"Vrefc%-d",k);i++;        fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,SVCptr->Vvar);      }      sprintf(str,"Fsvc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);  }  for(k=0,TCSCptr=dataPtr->TCSCbus;TCSCptr!=NULL;TCSCptr=TCSCptr->Next){      k++; l=0;      sprintf(str,"Ptcsc%-d",k);i++;      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,TCSCptr->Ptcsc);      sprintf(str,"Ftcsc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"Qtcsck%-d",k);i++;      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,TCSCptr->Qtcsck);      sprintf(str,"Ftcsc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"Qtcscm%-d",k);i++;      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,TCSCptr->Qtcscm);      sprintf(str,"Ftcsc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"Be%-d",k);i++;      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,TCSCptr->Be);      sprintf(str,"Ftcsc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"alpha%-d",k);i++;      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,TCSCptr->alpha_tcsc);      sprintf(str,"Ftcsc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"Itcsc%-d",k);i++;      fCustomPrint(OutFile,"%4d %8s %-11.5g\n",i,str,TCSCptr->Itcsc);      sprintf(str,"Ftcsc%-d_%-d",k,++l); fCustomPrint(OutFilep,"%4d %8s %-11.5g\n",i,str,dF[i]);      sprintf(str,"delta%-d",k);i++;

⌨️ 快捷键说明

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