📄 outdata.cpp
字号:
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
#include"datastruct.h"
#include"second.h"
#include"matrix.h"
void outdata(FILE *fp,struct Busdata *busdata,struct Branchdata *branchdata,struct Gendata *gendata,double *load_index,
int Busnum,int Branchnum,int Gennum,int *balanceno,double *sample,int NumSamp,int loadnum)
{
int k1,k2,k3,k4;
int f;
double a,temp,temp1;
int *igen,*iline;
double *state;
double *loadloss;
igen=new int[Gennum];
iline=new int[Branchnum];
struct Busdata *tempbusdata;
struct Branchdata *tempbranchdata;
struct Gendata *tempgendata;
tempbusdata=new struct Busdata[Busnum];
tempbranchdata=new struct Branchdata[Branchnum];
tempgendata=new struct Gendata[Gennum];
state=new double[NumSamp*loadnum];
loadloss=new double[NumSamp*loadnum];
matrix_zeros(state,NumSamp,loadnum);
matrix_zeros(loadloss,NumSamp,loadnum);
int j=0;
for(int i=0;i<Busnum;i++)
{
if(busdata[i].PL>0)
{
load_index[j]=busdata[i].busno;
j++;
}
}
load_index[j]=-1;
for(j=0;j<loadnum;j++)
{
fprintf(fp,"负荷点%d失负荷\t",int(load_index[j]));
load_index[loadnum+j]=0;
load_index[2*loadnum+j]=0;
load_index[3*loadnum+j]=0;
}
for(k1=0;k1<NumSamp;k1++)
{
for(k2=0;k2<Gennum+Branchnum;k2++)
{
a=gerand();
if(k2<Gennum)
{
if(sample[3*k2]<=a)
igen[k2]=0; //generator up state
else
igen[k2]=1; //generator down state
}
else
{
if(sample[3*k2]<=a)
iline[k2-Gennum]=0; //line up state
else
iline[k2-Gennum]=1; //line down state
}
}
temp=0;
temp1=0;
for(k3=0;k3<Gennum;k3++)
temp+=igen[k3];
for(k4=0;k4<Branchnum;k4++)
temp1+=iline[k4];
if(temp==0&&temp1==0)
f=0;
else
{
if(temp>0&&temp1==0)
f=1;
else
//线路故障存在判断其是否解列系统
{
int *flag3,*flag4,*flag5,*flag6;
flag3=new int[Busnum];
flag4=new int[Busnum];
flag5=new int[Branchnum];
flag6=new int[Branchnum];
for(int i=0;i<Busnum;i++)
{
*(flag3+i)=0;
*(flag4+i)=-1;
}
for(i=0;i<Branchnum;i++)
{
*(flag5+i)=0;
*(flag6+i)=-1;
}
int flag=0;
int flag1=1;
int flag2=0;
int startfind;
//////////////////////////////////////////////////////////
while(flag2!=Busnum)
{
if(flag2==0)
{
startfind=*balanceno;//从平衡节点开始搜索
*(flag3+startfind)=1;
*(flag4+flag2)=startfind;
}
else if(*(flag4+flag2)!=-1)
startfind=*(flag4+flag2);
for(i=0;i<Branchnum;i++)
{
if(iline[i]==0&&tempbranchdata[i].from==tempbusdata[startfind].busno)
{
if(*(flag5+i)==0)
{
*(flag5+i)=1;
*(flag6+flag)=i;
flag++;
}
for(int j=0;j<Busnum;j++)
{
if(tempbusdata[j].busno==tempbranchdata[i].to)
{
if(*(flag3+j)==0)
{
*(flag3+j)=1;
*(flag4+flag1)=j;
flag1++;
}
break;
}
}
}
else if(iline[i]==0&&tempbranchdata[i].to==tempbusdata[startfind].busno)
{
if(*(flag5+i)==0)
{
*(flag5+i)=1;
*(flag6+flag)=i;
flag++;
}
for(int j=0;j<Busnum;j++)
{
if(tempbusdata[j].busno==tempbranchdata[i].from)
{
if(*(flag3+j)==0)
{
*(flag3+j)=1;
*(flag4+flag1)=j;
flag1++;
}
break;
}
}
}
}
if(*(flag4+flag2)==-1)
flag2=Busnum-1;
flag2++;
}
delete []flag3;
flag3=NULL;
delete []flag4;
flag4=NULL;
delete []flag5;
flag5=NULL;
delete []flag6;
flag6=NULL;
if(flag1!=Busnum)//系统解列
f=2;
else
f=1;
}
}
switch(f)
{
case 0:
for(j=0;j<Busnum;j++)
tempbusdata[j]=busdata[j];
break;
case 1:
/////////////////////////////////////////////////////////////////////////////
//////////////////////处理单纯的发电机故障及其线路故障未解列/////////////////
/////////////////////////////////////////////////////////////////////////////
for(j=0;j<Busnum;j++)
tempbusdata[j]=busdata[j];
for(j=0;j<Branchnum;j++)
tempbranchdata[j]=branchdata[j];
for(j=0;j<Gennum;j++)
tempgendata[j]=gendata[j];
enum_generator(tempgendata,tempbusdata,tempbranchdata,Busnum,Branchnum,Gennum,balanceno,igen);
break;
case 2:
for(j=0;j<Busnum;j++)
tempbusdata[j]=busdata[j];
for(j=0;j<Branchnum;j++)
{
tempbranchdata[j]=branchdata[j];
if(iline[j]==1)
tempbranchdata[j].alrnum=0;
}
for(j=0;j<Gennum;j++)
tempgendata[j]=gendata[j];
enum_branch(tempgendata,tempbusdata,tempbranchdata,Busnum,Branchnum,Gennum,balanceno,igen);
break;
}
for(k3=0;k3<loadnum-1;k3++)
{
i=int(load_index[k3])-1;
temp=busdata[i].PL-tempbusdata[i].PL;
if(temp>0)
{
state[k1*loadnum+k3]=1.0;
loadloss[k1*loadnum+k3]=temp;
}
}
temp1=0;
for(k4=0;k4<loadnum-1;k4++)
temp1+=loadloss[k1*loadnum+k4];
if(temp1>0)
{
state[k1*loadnum+loadnum-1]=1.0;
loadloss[k1*loadnum+loadnum-1]=temp1;
}
}
delete []igen;
igen=NULL;
delete []iline;
iline=NULL;
delete []tempbusdata;
tempbusdata=NULL;
delete []tempbranchdata;
tempbranchdata=NULL;
delete []tempgendata;
tempgendata=NULL;
for(k3=0;k3<loadnum;k3++)
{
temp=0;
temp1=0;
for(k4=0;k4<NumSamp;k4++)
{
temp+=state[k4*loadnum+k3];
temp1+=loadloss[k4*loadnum+k3];
}
load_index[loadnum+k3]=temp/NumSamp;
load_index[2*loadnum+k3]=temp1/NumSamp;
load_index[3*loadnum+k3]=8760*temp1/NumSamp;
}
for(i=0;i<loadnum;i++)
{
printf("%4.5f %4.5f %4.5f %4.5f\n",load_index[i],load_index[loadnum+i],load_index[2*loadnum+i],load_index[3*loadnum+i]);
}
printf("\n");
fprintf(fp,"\n");
for(k1=1;k1<4;k1++)
{
for(k2=0;k2<loadnum;k2++)
fprintf(fp,"%4.5f\t\t\t",load_index[k1*loadnum+k2]);
fprintf(fp,"\n");
}
delete []state;
state=NULL;
delete []loadloss;
loadloss=NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -