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

📄 nflow_sub.cpp

📁 电力系统潮流程序adsfasdfasfd
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		if(SYS_DIM==2)
		{
			for(I=0;I<lv_map_ACun;I++)
			{
	  		if(map_bs[map_nd[map_ACun[I].ind].ibs-1].AC_island==NOWISLAND)
        {
//					if(netval_->STATE_UN[i].GENTING$M_UN!=0)
					{
        		IK=map_bs[map_nd[map_ACun[I].ind].ibs-1].ibus;
        		map_bus[IK].dyn_xi=map_bus[IK].dyn_xi+map_ACun[I].snom;//snom:机组额定容量(MVA)
        		MS=MS+map_ACun[I].snom;
    			}
    		}
    	}
    }
		
		printf("111:MS==%f\n",MS);
		for(I=0;I<lv_map_ACun;I++)
		{
			map_ACun[I].dyn_xi=0.0;
			
 	  	if(map_bs[map_nd[map_ACun[I].ind].ibs-1].AC_island==NOWISLAND)
      {//SYS_DIM:系统规模
//				if(SYS_DIM==1)
//				{
//					if(netflt_->XD_UN[i]>0.0001)
//					{
//        		IK=netpf_->JA_BS[netbus_->I$BS_UN[i]-1]-1;
//    				netval_->PARTLNG_UN[i]=(1.0/netflt_->XD_UN[i])/MS;
// 					}
// 				}
//				else 
				if(SYS_DIM==2)
				{
//					if(netval_->STATE_UN[i].GENTING$M_UN!=0)
					{//PARTLNG_UN:机组的修正系数
						map_ACun[I].dyn_xi=map_ACun[I].snom/MS;//机组分配系数
//						printf("222:map_ACun[%d].dyn_xi==%f\n",I,map_ACun[I].dyn_xi);
    			}
    		}
    	}
    }


		for(I=0;I<lv_bus;I++)
		{//XI_BUS:母线的修正系数
			map_bus[I].dyn_xi=map_bus[I].dyn_xi/MS;//分配系数
//			printf("222:map_bus[%d].dyn_xi==%f\n",I,map_bus[I].dyn_xi);
    }

		map_AC_island[NOWISLAND-1].p_un=0.0;//用交流岛
		for(I=0;I<lv_map_ACun;I++)
		{
	  	if(map_bs[map_nd[map_ACun[I].ind].ibs-1].AC_island==NOWISLAND)
    	{
//    		printf("888:map_ACun[%d].p==%f\n",I,map_ACun[I].p);
				map_AC_island[NOWISLAND-1].p_un=map_AC_island[NOWISLAND-1].p_un+map_ACun[I].p;//岛内的总有功发电量(MW)
    	}
    }
    
	    	

		map_AC_island[NOWISLAND-1].p_ld=0.0;//用交流岛
		for(I=0;I<lv_map_ACld;I++)
		{
	 		if(map_ACld[I].ibs>-1)
	 		{

	  		if(map_bs[map_ACld[I].ibs-1].AC_island==NOWISLAND)
    		{
//     			printf("999:map_ACld[%d].p==%f\n",I,map_ACld[I].p);
   				map_AC_island[NOWISLAND-1].p_ld=map_AC_island[NOWISLAND-1].p_ld+map_ACld[I].p;
      	}
      }
    }
//    for(i=0;i<ipmom_->LV$XLD;i++)
//    {
//    	if(netbus_->I$BS_ND[ipmap_->NDSUB_XLD[i]-1]>0) 
//    	{
//        if(netbus_->I$ISLAND_BS[netbus_->I$BS_ND[ipmap_->NDSUB_XLD[i]-1]-1]==pfpart1_->NOWISLND) 
//        {
//					netbus_->WLOAD_ISLAND[pfpart1_->NOWISLND-1]=netbus_->WLOAD_ISLAND[pfpart1_->NOWISLND-1]+ipmap_->W_XLD[i];
//        }
//      }
//    }

		printf("999:P_LD_ISLND[%d]= %f \n",NOWISLAND,map_AC_island[NOWISLAND-1].p_ld);
		printf("888:P_UN_ISLND[%d]= %f \n\n",NOWISLAND,map_AC_island[NOWISLAND-1].p_un);

		//WACC_ISLAND:岛加速有功
		map_AC_island[NOWISLAND-1].p_acc=(map_AC_island[NOWISLAND-1].p_acc+map_AC_island[NOWISLAND-1].p_un-map_AC_island[NOWISLAND-1].p_ld)/SBS;
		
		printf("777:P_ACC_ISLAND= %f \n",map_AC_island[NOWISLAND-1].p_acc);
    	
  }
	
	map_AC_island[NOWISLAND-1].p_loss=map_AC_island[NOWISLAND-1].p_swm;
	
	printf("111:map_AC_island[%d].p_acc-p_loss==%f,p_loss=%f,	p_acc==%f\n",NOWISLAND,map_AC_island[NOWISLAND-1].p_acc-map_AC_island[NOWISLAND-1].p_loss,map_AC_island[NOWISLAND-1].p_loss,map_AC_island[NOWISLAND-1].p_acc);

	if(NEWT_FLAG==0)
	{//PQ
		for(I=0;I<lv_bus;I++)
		{
			map_bus[I].DPX=-map_bus[I].dyn_xi*(map_AC_island[NOWISLAND-1].p_acc-map_AC_island[NOWISLAND-1].p_loss)+map_bus[I].v_pu*C[I];
    }
  }
	else if(NEWT_FLAG==1)
	{
		for(I=0;I<lv_bus;I++)
		{//
			map_bus[I].DPX=C[2*I]-map_bus[I].dyn_xi*(map_AC_island[NOWISLAND-1].p_acc-map_AC_island[NOWISLAND-1].p_loss);
//			printf("222:bus_no[%d]:	dpi==%f,	DPX==%f,dyn_xi==%f\n",I,C[2*I],map_bus[I].DPX,map_bus[I].dyn_xi);
    }
	}


	MXP_ITER[IT]=0.0;
  if(NEWT_FLAG==0)
 	{//PQ
 		for(I=0;I<lv_bus-1;I++)
		{
			if(fabs(map_bus[I].DPX)>fabs(MXP_ITER[IT]))
			{
				MXPBUS_ITER[IT]=I+1;
				MXP_ITER[IT]=map_bus[I].DPX;
			}
		}
		
 	}
  else if(NEWT_FLAG==1)
  {
		for(I=0;I<lv_bus-1;I++)
		{
			if(fabs(map_bus[I].DPX)>fabs(MXP_ITER[IT]))
			{
				MXPBUS_ITER[IT]=I+1;
				MXP_ITER[IT]=map_bus[I].DPX;
			}
		}
		for(I=0;I<lv_bus-NOV-1;I++)
		{
			if(fabs(C[2*I+1])>fabs(MXQ_ITER[IT]))
			{
				MXQBUS_ITER[IT]=I+1;
				MXQ_ITER[IT]=C[2*I+1];
			}
		}
	}
	return RET_OK;
}

        
int dy_dpl(int NOWISLAND)
{//
  float XI,DPL ;
	int I;
       
  DPL=0.0;
  XI=0.0;
	for(I=0;I<lv_bus;I++)
	{
		DPL=DPL-map_bus[I].DPX/map_bus[I].v_pu;
//		printf("map_bus[%d].DPX==%f\n",I,map_bus[I].DPX);
		
    XI=XI+map_bus[I].dyn_xi/map_bus[I].v_pu;
//		printf("map_bus[%d].dyn_xi==%f\n",I,map_bus[I].dyn_xi);
  }
  printf("111:DPL==%f,XI==%f\n",DPL,XI);
 	if(fabs(XI)>0.0001)
 	{
 		DPL=DPL/XI;
	}
  printf("222:DPL==%f\n",DPL);
	
	map_AC_island[NOWISLAND-1].p_loss=map_AC_island[NOWISLAND-1].p_loss+DPL;
	map_AC_island[NOWISLAND-1].p_swm=map_AC_island[NOWISLAND-1].p_loss;

	printf("p_loss==%f\n",map_AC_island[NOWISLAND-1].p_loss);	
 	if(NEWT_FLAG==0)
	{//PQ
		for(I=0;I<lv_bus-1;I++)
		{
			C[I]=(map_bus[I].DPX+map_bus[I].dyn_xi*DPL)/map_bus[I].v_pu;
    }
    C[lv_bus-1]=0.0;
	}
 	else if(NEWT_FLAG==1)
	{
		for(I=0;I<lv_bus-1;I++)
		{
			C[2*I]=map_bus[I].DPX+map_bus[I].dyn_xi*DPL;//dp
    }
    C[2*lv_bus-2]=0.0;
    
		for(I=lv_bus-NOV-1;I<lv_bus;I++)
		{
 			if(map_bs[map_bus[I].ibs].bs_type!=BS_TYPE_PQ)
    	{
    		C[2*I+1]=0.0;//dq
    	}
		}
	}
 	return RET_OK;

}

//PQ---------------
int powerflow_pq(int NOWISLAND)
{
//	powerflow_com(NOWISLAND);
	fact_b1(NOWISLAND);//B1因子表计算
 	fact_b2(NOWISLAND);//B2因子表计算

	while(IT<MAX_ITER)
	{
		printf("#####################PQ:iter_num: %d#################################\n",IT+1);
		calc_dlt_dp(NOWISLAND);//PQ分解法有功偏差计算
		if(DYN_FLAG==1)
		{
  		dy_xi_dpx(NOWISLAND);
  		dy_dpl(NOWISLAND);
  	}
	
		if(fabs(MXP_ITER[IT])>eps_max)
		{
			printf("cal flow fail end!, iter_num:  %d  !\n\n",IT+1);
//		 	print_debug_info(11);

			return RET_FA;
		}
		else if(fabs(MXP_ITER[IT])>eps_set)
		{
			qjj_b1(NOWISLAND,C);//PQ分解法计算相角修正量
			do_iter(NOWISLAND);	
		}

		
		calc_dlt_dq(NOWISLAND);
		if(fabs(MXQ_ITER[IT])>eps_max)
		{
			printf("cal flow fail end!, iter_num:  %d  !\n\n",IT+1);
//		 	print_debug_info(11);

			return RET_FA;
		}
		else if(fabs(MXP_ITER[IT])>eps_set)
		{
			qjj_b2(NOWISLAND,C);//PQ分解法计算电压修正量
			dv_iter(NOWISLAND);	
		}
		printf("111:max_dp==%f , max_dq==%f\n",MXP_ITER[IT],MXQ_ITER[IT]);
		if(fabs(MXP_ITER[IT])<eps_set&&fabs(MXQ_ITER[IT])<eps_set)
		{
			printf("cal flow success end!, iter_num:  %d  !\n\n",IT+1);
			break;
		}
		IT++;				
	
	}	
	
//	pf_bus_to_bs(NOWISLAND);
//
//	//岛加速功率
//	map_AC_island[NOWISLAND-1].p_acc=map_AC_island[NOWISLAND-1].p_acc-map_AC_island[NOWISLAND-1].p_loss;
//	
//	printf("333:ISLAND[%d].p_acc==%f,	p_loss==%f\n",NOWISLAND,map_AC_island[NOWISLAND-1].p_acc,map_AC_island[NOWISLAND-1].p_loss);
	
	return RET_OK;
	
}

int calc_dlt_dp(int NOWISLAND)
{//OK
  int I,J,JSQ;
  float VI,VJ,AN,A8,B8,C8,D8,AI,BI,CI,DI;

	for(I=0;I<lv_bus;I++)
	{
		C[I]=0.0;
	}

  for(I=0;I<lv_bus;I++)
  {
	  VI=map_bus[I].v_pu*map_bus[I].v_pu;
	  C[I]=C[I]+Ym[I].g.val*VI;
//	  map_bus[I].Qi=map_bus[I].Qi-Ym[I].b.val*VI;
//		printf("111:calc_bus_inj:   VI=%f  Pi=%f  Qi=%f\n",VI,map_bus[I].Pi,map_bus[I].Qi);
	
	  for(JSQ=0;JSQ<Ym[I].lv_nz;JSQ++)
	  {
		  J=Ym[I].nz[JSQ].j;
		  VJ=map_bus[I].v_pu*map_bus[J].v_pu;
		  AN=map_bus[I].a_pu-map_bus[J].a_pu;
		  A8=AN*(1.0-AN*AN/6.0);
		  B8=1.0-AN*AN*(1.0-AN*AN/12.0)/2.0;
		  C8=VJ*Ym[I].nz[JSQ].g.val;
		  D8=VJ*Ym[I].nz[JSQ].b.val;
		
		  AI=B8*C8;
		  BI=A8*D8;
		  CI=A8*C8;
		  DI=B8*D8;
//			printf("100:calc_bus_inj:   A1_pu=%f  A2_pu=%f \n",map_bus[I].a_pu,map_bus[J].a_pu);
//			printf("101:calc_bus_inj:   A8=%f  B8=%f  C8=%f  D8=%f\n",A8,B8,C8,D8);
//			printf("102:calc_bus_inj:   AI=%f  BI=%f  CI=%f  DI=%f\n",AI,BI,CI,DI);
		
		  C[I]=C[I]+AI+BI;
		  C[J]=C[J]+AI-BI;
	
	  }
//		printf("211:calc_bus_inj:   bus_no=%d  Pi=%f  Qi=%f\n",I+1,map_bus[I].Pi,map_bus[I].Qi);
  }

	for( I=0;I<lv_bus;I++)
	{
		printf("C[%d].P==%f,map_bus[%d].Pi==%f\n",I,C[I],I,map_bus[I].Pi);
		C[I]=map_bus[I].Pi-C[I];
	}

	if(DYN_FLAG==0)
	{
	 	MXP_ITER[IT]=0.0;
	 	for(I=0;I<lv_bus-1;I++)
	 	{
	  	if(fabs(C[I])>fabs(MXP_ITER[IT])) 
	  	{
	   		MXP_ITER[IT]=C[I];
				MXPBUS_ITER[IT]=I+1;//最大有功偏差的节点
//				printf("MXP_ITER[%d]==%f\n",I+1,MXP_ITER[IT]);
	  	}
	 	}
	}	
	return RET_OK;
}

int calc_dlt_dq(int NOWISLAND)
{
  int I,J,JSQ;
  float VI,VJ,AN,A8,B8,C8,D8,AI,BI,CI,DI;

	for(I=0;I<lv_bus;I++)
	{
		C[I]=0.0;
	}

  for(I=0;I<lv_bus;I++)
  {
	  VI=map_bus[I].v_pu*map_bus[I].v_pu;
	  C[I]=C[I]-Ym[I].b.val*VI;
//		printf("111:calc_bus_inj:   VI=%f  Pi=%f  Qi=%f\n",VI,map_bus[I].Pi,map_bus[I].Qi);
	
	  for(JSQ=0;JSQ<Ym[I].lv_nz;JSQ++)
	  {
		  J=Ym[I].nz[JSQ].j;
		  VJ=map_bus[I].v_pu*map_bus[J].v_pu;
		  AN=map_bus[I].a_pu-map_bus[J].a_pu;
		  A8=AN*(1.0-AN*AN/6.0);
		  B8=1.0-AN*AN*(1.0-AN*AN/12.0)/2.0;
		  C8=VJ*Ym[I].nz[JSQ].g.val;
		  D8=VJ*Ym[I].nz[JSQ].b.val;
		
		  AI=B8*C8;
		  BI=A8*D8;
		  CI=A8*C8;
		  DI=B8*D8;
//			printf("100:calc_bus_inj:   A1_pu=%f  A2_pu=%f \n",map_bus[I].a_pu,map_bus[J].a_pu);
//			printf("101:calc_bus_inj:   A8=%f  B8=%f  C8=%f  D8=%f\n",A8,B8,C8,D8);
//			printf("102:calc_bus_inj:   AI=%f  BI=%f  CI=%f  DI=%f\n",AI,BI,CI,DI);
		
		  C[I]=C[I]+CI-DI;
		  C[J]=C[J]-CI-DI;
	
	  }
//		printf("211:calc_bus_inj:   bus_no=%d  Pi=%f  Qi=%f\n",I+1,map_bus[I].Pi,map_bus[I].Qi);
  }
  
	for( I=0;I<lv_bus;I++)
	{
//		printf("C[%d].Q==%f,map_bus[%d].Qi==%f\n",I,C[I],I,map_bus[I].Qi);
		C[I]=map_bus[I].Qi-C[I];
	}


 	MXQ_ITER[IT]=0.0;
 	for(I=0;I<lv_bus-1;I++)
 	{
 		if(map_bs[map_bus[I].ibs].bs_type==BS_TYPE_PQ)
 		{
	  	if(fabs(C[I])>fabs(MXQ_ITER[IT])) 
	  	{
	   		MXQ_ITER[IT]=C[I];
				MXQBUS_ITER[IT]=I+1;//最大无功偏差的节点
//				printf("MXQ_ITER[%d]==%f\n",I,C[I]);
	  	}
  	}
 	}


	return RET_OK;	
}

int fact_b1(int NOWISLAND)
{//按行消去
	int I,IM,J,JSQ,K1,M;
	float AI;
 
	for(I=0;I<lv_bus;I++)
	{
		matrix_fact_pq_b1[I].lv_nz=0;
		matrix_fact_pq_b1[I].FX_BUS=0.0;
	}

	for(I=0;I<lv_bus;I++)
	{//按行消去

 		for( K1=0;K1<lv_bus;K1++)
 		{
 			B[K1]=0.0;
 		}
 		
  	B[I]=Ym[I].x.val;//B1矩阵的I行对角元值

  	for(JSQ=0;JSQ<Ym[I].lv_nz;JSQ++)
  	{//I行所有B1矩阵非对角元缓存到B[]向量中
    	J=Ym[I].nz[JSQ].j;
    	B[J]=Ym[I].nz[JSQ].x.val;//B[]中已经按列序号排列
  	}

  	if(I<lv_bus-1)
  	{//松弛节点不参与修正
  		B[lv_bus-1]=0.0;
		}
	
  	for(IM=0;IM<I;IM++)
  	{//按行

⌨️ 快捷键说明

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