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

📄 outdata.cpp

📁 电力系统发输电系统基于非序贯的蒙特卡罗抽样的风险评估程序
💻 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 + -