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

📄 nflow_sub.cpp

📁 电力系统潮流程序adsfasdfasfd
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	 {
//			printf("map_ACun[%d].vset_ind==%d\n",I,map_ACun[I].vset_ind);

	  	if(map_bs[map_nd[map_ACun[I].ind].ibs-1].AC_island==NOWISLAND)
	  	{//
       	if(map_ACun[I].vset_ind>-1)//以后考虑人工设定
       	{
/* OLD
		     	NOV++;
		     	REGS[NOV]=map_nd[map_ACun[I].vset_ind].ibs-1;//PV节点与母线关系,指定vset_ind为PV节点
*/
//MOD BY DHW BEGIN 07.06.21
		     	REGS[NOV]=map_nd[map_ACun[I].ind].ibs-1;//PV节点与母线关系
//MOD BY DHW END   07.06.21
					
//ADD BY DHW BEGIN
					pv_rel_un[NOV][lv_pv_rel_un[NOV]]=I;//pv_rel_un[NOV]:从0开始
					lv_pv_rel_un[NOV]++;
//ADD BY DHW END
		     	map_bs[map_nd[map_ACun[I].ind].ibs-1].bs_type=BS_TYPE_PV;//MOD BY DHW typ_bs[map_nd[map_ACun[I].ind].ibs-1]=1
//					printf("444:bs==%d,bs_type==%d\n",map_nd[map_ACun[I].ind].ibs-1,map_bs[map_nd[map_ACun[I].ind].ibs-1].bs_type);
//		     	typ_bs[map_nd[map_ACun[I].ind].ibs-1]=BS_TYPE_PV;//MOD BY DHW typ_bs[map_nd[map_ACun[I].ind].ibs-1]=1
		     	NOV++;
	   	 	} 
	  	} 
	 	} 
	} 
//	printf("555:NOV= %d \n",NOV);
	

 	map_bs[ref_bs].ibus=lv_bus-1;
  map_bus[lv_bus-1].ibs=ref_bs;
	IBS[IV[ref_bs]+1]=IBS[IV[ref_bs]+1]-1;
	IV[ref_bs]=0;

	
	for(I=0;I<NOV;I++)
	{
	 	if(IV[REGS[I]]>0)
	 	{
	  	map_bs[REGS[I]].ibus=lv_bus-1-I-1;
  
    	map_bus[lv_bus-2-I].ibs=REGS[I];
    	IBS[IV[REGS[I]]+1]=IBS[IV[REGS[I]]+1]-1;
	  	IV[REGS[I]]=0;
	 	}
	}
	for(I=1;I<39;I++)
	{
	 	IBS[I+1]=IBS[I+1]+IBS[I];
	}

	for(I=0;I<lv_bs;I++)
	{
	
	 	if(IV[I]>0) 
	 	{
	  	map_bus[IBS[IV[I]]-1].ibs=I;//map_bus[].ibs:实际序号
	  	map_bs[I].ibus=IBS[IV[I]]-1;
	  	IBS[IV[I]]=IBS[IV[I]]+1;
	 	}
	}
	

//	for(I=0;I<lv_bus;I++)
//		printf("bus_no=%d    bs_no=%d\n",I+1,map_bus[I].ibs+1);
//	for(I=0;I<lv_bs;I++)
//		printf("bs_no=%d    bus_no=%d\n",I+1,map_bs[I].ibus+1);//map_bs[I].ibus:实际序号
	return(0);
}

int pf_build_y_matrix(int NOWISLAND)
{
	int i1,i2,I,J,pos;
	float T1,C1;
	
	//初始化
	for(i1=0;i1<lv_bus;i1++)
	{
		Ym[i1].lv_nz=0;
		Ym[i1].x.val=0.0;
		Ym[i1].g.val=0.0;
		Ym[i1].b.val=0.0;
		for(i2=0;i2<MX_NZ;i2++)
		{
	   	Ym[i1].nz[i2].x.val=0.0;
	   	Ym[i1].nz[i2].g.val=0.0;
	   	Ym[i1].nz[i2].b.val=0.0;		
		}
	}
	
	printf("lv_map_AClnbrh==%d\n",lv_map_AClnbrh);
	
	for(i1=0;i1<lv_map_AClnbrh;i1++)
	{
	 	if(map_nd[map_AClnbrh[i1].ind].ibs>0) 
	 	{
		 	if(map_bs[map_nd[map_AClnbrh[i1].ind].ibs-1].AC_island==NOWISLAND)
		 	{
	   	 	I=map_bs[map_nd[map_AClnbrh[i1].ind].ibs-1].ibus;
	   	 	J=map_bs[map_nd[map_AClnbrh[i1].znd].ibs-1].ibus;
	   	 
			  //printf("240:lnbrh=%s   ibus=%d,  zbus=%d,   r=%f   x=%f   bch=%f  g=%f  b=%f\n",map_ACln[map_AClnbrh[i1].ACln_no].name,I,J,map_AClnbrh[i1].r,map_AClnbrh[i1].x,map_AClnbrh[i1].bch,map_AClnbrh[i1].g,map_AClnbrh[i1].b);

	   	 	if(J<I)
	   	 	{
	       	pos=J;
	       	J=I;
	       	I=pos;
       	}
	   	 	pos=-1;
	   	 	for(i2=0;i2<Ym[I].lv_nz;i2++)
	   	 	{
	    		if(Ym[I].nz[i2].j==J)
	    		{
	       		pos=i2;
	    		}
	   	 	}
	   	 	if(pos==-1)
	   	 	{
       	 	pos=Ym[I].lv_nz;
	     	 	Ym[I].nz[pos].j=J;
	       	Ym[I].lv_nz++;
	   	 	}

//				printf("211:AClnbrh_no=%d  ibus=%d  zbus=%d pos=%d  lv_nz=%d\n",i1+1,I,J,pos,Ym[I].lv_nz);
				
//				if(fabs(map_AClnbrh[i1].x)<0.00001)
//					printf("321:ln_name==%s,	x==%f\n",map_ACln[map_AClnbrh[i1].ACln_no].name,map_AClnbrh[i1].x);
		   	
		   	Ym[I].x.val=Ym[I].x.val-1.0/map_AClnbrh[i1].x;
		   	Ym[I].g.val=Ym[I].g.val+map_AClnbrh[i1].g;
		   	Ym[I].b.val=Ym[I].b.val+map_AClnbrh[i1].b+0.5*map_AClnbrh[i1].bch;
		   	Ym[J].x.val=Ym[J].x.val-1.0/map_AClnbrh[i1].x;
		   	Ym[J].g.val=Ym[J].g.val+map_AClnbrh[i1].g;
		   	Ym[J].b.val=Ym[J].b.val+map_AClnbrh[i1].b+0.5*map_AClnbrh[i1].bch;
		   	Ym[I].nz[pos].x.val=Ym[I].nz[pos].x.val+1.0/map_AClnbrh[i1].x;
		   	Ym[I].nz[pos].g.val=Ym[I].nz[pos].g.val-map_AClnbrh[i1].g;
		   	Ym[I].nz[pos].b.val=Ym[I].nz[pos].b.val-map_AClnbrh[i1].b;
	  	}
	 	}
	}
	
//	printf("\n");

	for(i1=0;i1<lv_map_ACxfbrh;i1++)
	{//K:1模型,变比在I侧,高等电力网络p12
	 	if(map_nd[map_ACxfbrh[i1].ind].ibs>0) 
	 	{
     	if(map_bs[map_nd[map_ACxfbrh[i1].ind].ibs-1].AC_island==NOWISLAND)
     	{
		   	I=map_bs[map_nd[map_ACxfbrh[i1].ind].ibs-1].ibus;
		   	J=map_bs[map_nd[map_ACxfbrh[i1].znd].ibs-1].ibus;
	   	
		  	C1=1.0/map_ACxfbrh[i1].x;
				T1=1.0/map_ACxfbrh[i1].k;

//				printf("C1==%f,T1==%f,\n",C1,T1);
//
//				printf("Ym[%d].x==%f, Ym[%d].g==%f, Ym[%d].b==%f\n",I,Ym[I].x.val,I,Ym[I].g.val,I,Ym[I].b.val);			
//				printf("Ym[%d].x==%f, Ym[%d].g==%f, Ym[%d].b==%f\n",J,Ym[J].x.val,J,Ym[J].g.val,J,Ym[J].b.val);			

		  	Ym[I].x.val=Ym[I].x.val-C1;
		  	Ym[I].g.val=Ym[I].g.val+map_ACxfbrh[i1].g*T1*T1;
		  	Ym[I].b.val=Ym[I].b.val+map_ACxfbrh[i1].b*T1*T1;

		  	Ym[J].x.val=Ym[J].x.val-C1;
		  	Ym[J].g.val=Ym[J].g.val+map_ACxfbrh[i1].g;
		  	Ym[J].b.val=Ym[J].b.val+map_ACxfbrh[i1].b;

//				printf("Ym[%d].x==%f, Ym[%d].g==%f, Ym[%d].b==%f\n",I,Ym[I].x.val,I,Ym[I].g.val,I,Ym[I].b.val);			
//				printf("Ym[%d].x==%f, Ym[%d].g==%f, Ym[%d].b==%f\n",J,Ym[J].x.val,J,Ym[J].g.val,J,Ym[J].b.val);			

		  	if(J<I)
		  	{
	     		pos=J;
	     		J=I;
	     		I=pos;
      	}
	   		pos=-1;
	   		for(i2=0;i2<Ym[I].lv_nz;i2++)
	   		{
	    		if(Ym[I].nz[i2].j==J)
	    		{
	       		pos=i2;
	    		}
	   		}
	   		if(pos==-1)
	   		{
       		pos=Ym[I].lv_nz;
	     		Ym[I].nz[pos].j=J;
	     		Ym[I].lv_nz++;
	   		}

//				printf("Ym[%d].nz[%d].x==%f,  Ym[%d].nz[%d].g==%f, Ym[%d].nz[%d].b==%f\n",I,pos,Ym[I].nz[pos].x.val,I,pos,Ym[I].nz[pos].g.val,I,pos,Ym[I].nz[pos].b.val);			
				
		  	Ym[I].nz[pos].x.val=Ym[I].nz[pos].x.val+C1;
		  	Ym[I].nz[pos].g.val=Ym[I].nz[pos].g.val-map_ACxfbrh[i1].g*T1;
		  	Ym[I].nz[pos].b.val=Ym[I].nz[pos].b.val-map_ACxfbrh[i1].b*T1;

//				printf("Ym[%d].nz[%d].x==%f,  Ym[%d].nz[%d].g==%f, Ym[%d].nz[%d].b==%f\n",I,pos,Ym[I].nz[pos].x.val,I,pos,Ym[I].nz[pos].g.val,I,pos,Ym[I].nz[pos].b.val);			
		  
	  	}
	 	}
	}
	

	printf("lv_map_ACcpbrh==%d\n",lv_map_ACcpbrh);
	for(i1=0;i1<lv_map_ACcpbrh;i1++)
	{
	 	if(map_nd[map_ACcpbrh[i1].ind].ibs>0) 
	 	{
     	if(map_bs[map_nd[map_ACcpbrh[i1].ind].ibs-1].AC_island==NOWISLAND)
     	{
	   		I=map_bs[map_nd[map_ACcpbrh[i1].ind].ibs-1].ibus;
	   		J=map_bs[map_nd[map_ACcpbrh[i1].znd].ibs-1].ibus;

	   		if(J<I)
	   		{
	     		pos=J;
	     		J=I;
	     		I=pos;
      	}
	   		pos=-1;
	   		for(i2=0;i2<Ym[I].lv_nz;i2++)
	   		{
	    		if(Ym[I].nz[i2].j==J)
	    		{
	       		pos=i2;
	    		}
	   		}
	   		if(pos==-1)
	   		{
       		pos=Ym[I].lv_nz;
	     		Ym[I].nz[pos].j=J;
	     		Ym[I].lv_nz++;
	   		}
//MOD BY DHW 07.07.05	   		C1=100.0/map_ACcp[i1].mvar;
				C1=map_ACcpbrh[i1].b;//MOD BY DHW 07.07.05
	   		Ym[I].x.val=Ym[I].x.val-C1;
	   		Ym[I].b.val=Ym[I].b.val+C1;
	   		Ym[J].x.val=Ym[J].x.val-C1;
	   		Ym[J].b.val=Ym[J].b.val+C1;
	   		Ym[I].nz[pos].x.val=Ym[I].nz[pos].x.val+C1;
	   		Ym[I].nz[pos].b.val=Ym[I].nz[pos].b.val-C1;
	  	}
	 	}
	}

	printf("lv_map_ACcpin==%d\n",lv_map_ACcpin);
	
//mod by dhw 08.04.16 begin 
	//并联容抗器的处理
	for(i1=0;i1<lv_map_ACcpin;i1++)
	{
	 	if(map_nd[map_ACcpin[i1].ind].ibs>0) 
	 	{
     	if(map_bs[map_nd[map_ACcpin[i1].ind].ibs-1].AC_island==NOWISLAND)
     	{
	   		I=map_bs[map_nd[map_ACcpin[i1].ind].ibs-1].ibus;
//		   	C1=100.0/map_ACcp[map_ACcpin[i1].ACcp_no].mvar;
//		   	Ym[I].b.val=Ym[I].b.val+C1;
	   	}
	 	}
	}
//mod by dhw 08.04.16 end 

//#ifdef _DEBUG	
//	for(I=0;I<lv_bus;I++)
//	{
//		
//    	printf("300:bus_no=%d Ym_b=%f Ym_g=%f  lv_nz=%d\n",I,Ym[I].b.val,Ym[I].g.val,Ym[I].lv_nz);
//    for(J=0;J<Ym[I].lv_nz;J++)
//    {
//			
//	  		printf("800:G[%d][%d]=%f B[%d][%d]=%f\n",I,Ym[I].nz[J].j,Ym[I].nz[J].g.val,I,Ym[I].nz[J].j,Ym[I].nz[J].b.val);
//	  }
//	}
//#endif
	return(0);
}

int powerflow(int NOWISLAND)
{
	int ret;
	printf("******************************* cal-flow of island %d%  begin*************\n",NOWISLAND);
	powerflow_com(NOWISLAND);

	if(NEWT_FLAG==0)
	{
		ret=powerflow_pq(NOWISLAND);
	}
	if(NEWT_FLAG==1)
	{
		ret=powerflow_newton(NOWISLAND);
	}
	printf("******************************* cal-flow of island %d% end *************\n",NOWISLAND);

	if(ret==RET_OK)
	{
// 		print_debug_info(11);
		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;
	}
	else
	{
		return RET_FA;
	}
}

///////////////////////////////////
int powerflow_newton(int NOWISLAND)
{//计算指定岛潮流
//	powerflow_com(NOWISLAND);

	while(IT<MAX_ITER)
	{
		printf("#####################NEWTON:iter_num: %d#################################\n",IT+1);
		
		cjpq_newton(NOWISLAND);
//		print_debug_info(8);
				
		if(DYN_FLAG==1)
		{
  		dy_xi_dpx(NOWISLAND);
  		dy_dpl(NOWISLAND);
  	}
  			
		printf("111:max_dp==%f , max_dq==%f\n",MXP_ITER[IT],MXQ_ITER[IT]);
		if(fabs(MXP_ITER[IT])>eps_max||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||fabs(MXQ_ITER[IT])>eps_set)
	 	{
  		fact_newton(NOWISLAND);//牛顿法雅可比矩阵因子表分解,07.04.28
	  	qjj_newton(NOWISLAND);//牛顿法前代回代运算
			print_debug_info(11);
		}
		else
		{
// 			print_debug_info(11);
			printf("cal flow success end!!!!, iter_num:  %d  !\n\n",IT+1);
			break;
		}
		IT++;
	}
// 	print_debug_info(11);
	
//	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 powerflow_com(int NOWISLAND)
{
//	print_debug_info(16);
//	print_debug_info(17);

//	print_debug_info(18);
	pf_busordering(NOWISLAND);
	
	map_AC_island[NOWISLAND-1].p_swm=0.0;
	map_AC_island[NOWISLAND-1].p_acc=0.0;
	
//	print_debug_info(19);
	print_debug_info(1);
//	print_debug_info(20);

//	print_debug_info(6);
//	print_debug_info(5);

//	print_debug_info(14);
	pf_build_y_matrix(NOWISLAND);

	
//	print_debug_info(4);

	pf_businjections(NOWISLAND);
	pf_clear_iter(NOWISLAND);
//	print_debug_info(11);
//	print_debug_info(22);	
	return RET_OK;
}
int calc_dev_I()
{
//计算节点和支路电流
	
//	for(i=0;i<MX$BS;i++){
//	 if(netbus_->I$ISLAND_BS[i]<1)
//	 	netbus_->KV_BS[i]=0.0;
//	}
//	
//	for(i=0;i<netmom_->LV$UN;i++) {
//	 netbus_->I_UN[i]=0.0;
//	 if(netbus_->I$BS_ND[netparm_->I$ND_UN[i]-1]>0){
//	 if(netbus_->KV_BS[netbus_->I$BS_ND[netparm_->I$ND_UN[i]-1]-1]>3.0){
//	  if(fabs(netbus_->W_UN[i])>0.01||fabs(netbus_->R_UN[i])>0.01){
//	   netbus_->I_UN[i]=(1000.0/1.732)*sqrt(netbus_->W_UN[i]*netbus_->W_UN[i]+netbus_->R_UN[i]*netbus_->R_UN[i])/netbus_->KV_BS[netbus_->I$BS_ND[netparm_->I$ND_UN[i]-1]-1];
//	  }
//	 }
//	 }
//	}
//	
//	for(i=0;i<netmom_->LV$LD;i++) {
//	 netbus_->I_LD[i]=0.0;
//	 if(netbus_->I$BS_ND[netparm_->I$ND_LD[i]-1]>0){
//	 if(netbus_->KV_BS[netbus_->I$BS_ND[netparm_->I$ND_LD[i]-1]-1]>3.0){
//	  if(fabs(netbus_->W_LD[i])>0.01||fabs(netbus_->R_LD[i])>0.01){
//	   netbus_->I_LD[i]=(1000.0/1.732)*sqrt(netbus_->W_LD[i]*netbus_->W_LD[i]+netbus_->R_LD[i]*netbus_->R_LD[i])/netbus_->KV_BS[netbus_->I$BS_ND[netparm_->I$ND_LD[i]-1]-1];
//	  }
//	 }
//	 }
//	}
//	
//	for(i=0;i<netmom_->LV$LN;i++) {
//	 j=netparm_->I$LN2_LN[i]-1;
//	 k=netparm_->Z$LN2_LN[i]-1;
//	 netbus_->PLAST_LN2[j]=0.0;
//	 netbus_->PLAST_LN2[k]=0.0;
//	 if(netbus_->KV_BS[netbus_->I$BS_ND[netparm_->I$ND_LN[i]-1]-1]>20.001){
//	  if(fabs(netbus_->W_LN2[j])>0.01||fabs(netbus_->R_LN2[j])>0.01){

⌨️ 快捷键说明

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