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

📄 nflow_sub.cpp

📁 电力系统潮流程序adsfasdfasfd
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      	
        for(I=0;I<2*lv_bus;I++)
        {
        	B1[I]=0.0;
        	B2[I]=0.0;
        	
				}
        if(MA==1)
        {
        	
        	//dP
        	//P
  	      for(JSQ=0;JSQ<Ym[MX].lv_nz;JSQ++)
  	      {//P的行,形成一行
  	       	//printf("Ym[%d].nz[%d].j==%d\n",MX,JSQ,Ym[MX].nz[JSQ].j);
		        J=2*Ym[MX].nz[JSQ].j;
		        B1[J]=matrix_jacb_newton[MX].EJU_CJPQ[JSQ*2];//Hij
		        B1[J+1]=matrix_jacb_newton[MX].EJU_CJPQ[JSQ*2+1];//Nij
		        B2[J]=matrix_jacb_newton[MX].EJL_CJPQ[JSQ*2];//Hji
		        B2[J+1]=matrix_jacb_newton[MX].EJL_CJPQ[JSQ*2+1];//Jji		        
					}
        	B1[K+1]=matrix_jacb_newton[MX].DJF_CJPQ[0];//Nii,行,Hii是雅可比矩阵的真正对角元 并没有放入
        	B2[K+1]=matrix_jacb_newton[MX].DJF_CJPQ[1];//Jii,列
        	
        	MA=0;
				}
				else if(MA==0)
				{//Q行
					
//					if(typ_bs[map_bus[MX].ibs]==BS_TYPE_PQ)//PQ 节点
					if(map_bs[map_bus[MX].ibs].bs_type==BS_TYPE_PQ)//PQ 节点
					{/*	! MX is a PQ bus*/
        		for(JSQ=0;JSQ<Ym[MX].lv_nz;JSQ++)
        		{
			        J=2*Ym[MX].nz[JSQ].j;
			        B1[J]=-matrix_jacb_newton[MX].EJU_CJPQ[JSQ*2+1];//Jij
			        B1[J+1]=matrix_jacb_newton[MX].EJU_CJPQ[JSQ*2];//Lij
			        B2[J]=-matrix_jacb_newton[MX].EJL_CJPQ[JSQ*2+1];//Nji
			        B2[J+1]=matrix_jacb_newton[MX].EJL_CJPQ[JSQ*2];//Lji
						}
//        		MX=MX+1;
        		MA=1;
					}
        	else
        	{ 
//        		MX=MX+1;
		        MA=1;
//		        printf("222222222222222\n");
		        continue;
        	}
				}


      }
			
      if(flag==1)
      {
				for(i=0;i<lv_bus;i++)
				{
//					if(typ_bs[map_bus[MX].ibs]!=BS_TYPE_PQ)
					if(map_bs[map_bus[i].ibs].bs_type!=BS_TYPE_PQ)
					{/*	! BUS is a PV node*/
						//PV节点,V部分置0,不参与计算
						B1[2*i+1]=0.0;
						B2[2*i+1]=0.0;
					}
				}
				
				B1[2*(lv_bus-1)]=0.0;
				B2[2*(lv_bus-1)]=0.0;


        matrix_fact_newton[K].UD_FACT=matrix_jacb_newton[MX].DJ_CJPQ[MA];//P:Hii/Q:Lii,K行的对角元,MA作为标志,决定是选取Hii还是Lii

//				printf("matrix_fact_newton[%d].UD_FACT==%f\n",K,matrix_fact_newton[K].UD_FACT);
				
//DEBUG
// 				printf("###################K==%d#########################################\n",K);
//	    	printf("mx_jac[%d][%d]==%f\n",K,K,matrix_fact_newton[K].UD_FACT);
//    		for(JSQ=0;JSQ<lv_bus*2;JSQ++)
//	    	{
//					if(fabs(B1[JSQ])>0.00001)
//					{
//	    			printf("mx_jac[%d][%d]==%f \n",K,JSQ,B1[JSQ]);
//					}
//	    	}
//	      
//	      printf("\n");
//		    for(JSQ=0;JSQ<lv_bus*2;JSQ++)
//		    {
//					if(fabs(B2[JSQ])>0.00001)
//					{
//	    			printf("mx_jac[%d][%d]==%f \n",JSQ,K,B2[JSQ]);
//					}
//		    }
//				printf("\n");
//DEBUG

				for(I=0;I<K;I++)
				{//
//					printf("&&&&&&&&&&&&&&&&&&I=%d&&&&&&&&&&&&&&&&&&\n",I);
					for(JSQ=0;JSQ<matrix_fact_newton[I].lv_nz;JSQ++)//NFD_FACT[]:行非对角元个数
					{//I行的所有元
        		J=matrix_fact_newton[I].nz[JSQ].j-1;//非对角元列指
//						printf("=================J==%d================\n",J);
        		if(J==K)
        		{
//					printf("$$$$$$$$$$$$$$$$$$$$$$$$I=%d,lv_nz==%d,JSQ==%d$$$$$$$$$$$$$$$$$$$$$$$\n",I,matrix_fact_newton[I].lv_nz,JSQ);
//						printf("=================JJ==%d================\n",J);
			        AI=matrix_fact_newton[I].nz[JSQ].UL_FACT;//下三角
			        BI=matrix_fact_newton[I].nz[JSQ].UU_FACT;//上三角
//			        	printf("AI:	UL_FACT[%d][%d]==%f,   BI:	UU_FACT[%d][%d]==%f\n",J,I,AI,I,J,BI);
//			        
//		        		printf("UD_FACT[%d]==%f \n",K,matrix_fact_newton[K].UD_FACT);
			        matrix_fact_newton[K].UD_FACT=matrix_fact_newton[K].UD_FACT-AI*BI;//对角元
//		        		printf("UD_FACT[%d]==%f \n\n",K,matrix_fact_newton[K].UD_FACT);
							
							for(J1=JSQ+1;J1<matrix_fact_newton[I].lv_nz;J1++)
							{

				        J=matrix_fact_newton[I].nz[J1].j-1;
//								printf("#########J==%d#############\n",J);
//				        printf("B1[%d]=%f\n",J,B1[J]);
				        B1[J]=B1[J]-AI*matrix_fact_newton[I].nz[J1].UU_FACT;//行

//DEBUG
//				        printf("UU_FACT[%d][%d]==%f\n",I,J,matrix_fact_newton[I].nz[J1].UU_FACT);
//				        printf("B1[%d]=B1[%d]-AI*UU_FACT[%d][%d]\n",J,J,I,J);
//				        printf("B1[%d]==%f\n",J,B1[J]);
//				        printf("B2[%d]=%f\n",J,B2[J]);
//DEBUG

				        B2[J]=B2[J]-BI*matrix_fact_newton[I].nz[J1].UL_FACT;

//DEBUG
//				        printf("UL_FACT[%d][%d]==%f\n",J,I,matrix_fact_newton[I].nz[J1].UL_FACT);
//				        printf("B2[%d]=B2[%d]-BI*UL_FACT[%d][%d]\n",J,J,I,J);
//				        printf("B2[%d]==%f\n",J,B2[J]);
//								printf("\n");
//DEBUG
							}
			        break;
						}
		        else if(J>K)
		        {
							break;
		        }
         	}

        }
//      	printf("#################################\n");  
      	
//DEBUG 07.07.09        matrix_fact_newton[K].lv_nz=0;
        AI=matrix_fact_newton[K].UD_FACT;
        if(fabs(AI)>0.00001)
        {
	        AI=1.0/AI;
	        matrix_fact_newton[K].UD_FACT=AI;//对角元值
	    
//	        printf("matrix_fact_newton[%d].UD_FACT==%f \n",K,matrix_fact_newton[K].UD_FACT);
					for(J=K+1;J<2*lv_bus;J++)
					{
		        if(fabs(B1[J])>0.00001||fabs(B2[J])>0.00001)
		        {
			        matrix_fact_newton[K].nz[matrix_fact_newton[K].lv_nz].UU_FACT=B1[J];
			        matrix_fact_newton[K].nz[matrix_fact_newton[K].lv_nz].UL_FACT=B2[J]*AI;//下三角元除对角元
			        matrix_fact_newton[K].nz[matrix_fact_newton[K].lv_nz].j=J+1;
//			        printf("j=%d,  matrix_fact_newton[%d].nz[%d].UU_FACT=%f\n",matrix_fact_newton[K].nz[matrix_fact_newton[K].lv_nz].j-1,K,matrix_fact_newton[K].lv_nz,matrix_fact_newton[K].nz[matrix_fact_newton[K].lv_nz].UU_FACT);
//			        printf("j=%d,  matrix_fact_newton[%d].nz[%d].UL_FACT=%f\n",matrix_fact_newton[K].nz[matrix_fact_newton[K].lv_nz].j-1,K,matrix_fact_newton[K].lv_nz,matrix_fact_newton[K].nz[matrix_fact_newton[K].lv_nz].UL_FACT);
			        matrix_fact_newton[K].lv_nz++;

			      }
	        }
        }          	
      }
		}
  	else if(MA==1)
  	{
  		MA=0;
		}
    else
    {
    	MA=1;
    }
	}
	
  for(I=0;I<2*lv_bus;I++)
  {
  	
//		printf("555:D[%d]==%f\n",I,matrix_fact_newton[I].UD_FACT);
    
    for(J=0;J<matrix_fact_newton[I].lv_nz;J++)
    {
      matrix_fact_newton[I].nz[J].UU_FACT=matrix_fact_newton[I].nz[J].UU_FACT*matrix_fact_newton[I].UD_FACT;
		}
	}
//	printf("\n\n");
//	print_debug_info(7);
//	print_debug_info(9);
//	print_debug_info(21);
	
	return RET_OK;	
}

int qjj_newton(int NOWISLAN)
{
	//按(dO1,dV1/V1,dO2,dV2/V2,...dOn,dVn/Vn)顺序排列变量
	//三角分解法解方程
 
  int I,J,JSQ;
//	printf("OPT_FLAG=%d\n",OPT_FLAG);
 // 	printf("111111111111111111\n");
//		print_debug_info(10);

	if(OPT_FLAG==0)
	{
   	C[2*(lv_bus-1)]=0.0;//VO节点
  	
  	for(I=lv_bus-NOV-1;I<lv_bus;I++)
  	{
//  		if(typ_bs[map_bus[I].ibs]!=BS_TYPE_PQ)//PV节点
  		if(map_bs[map_bus[I].ibs].bs_type!=BS_TYPE_PQ)//PV节点
  		{
  			C[2*I+1]=0.0;//dQ==0
  		}
  	}
//  	printf("11111111111111111\n\n");
  	
  	//原始方程: YV=I
  	//导纳矩阵分解:Y=LDU,三角分解法解方程顺序: LZ=I,DX=Z,UV=X
  	
  	//LZ=I方程
    for(I=0;I<2*lv_bus;I++)
    {
//    	printf("I==%d\n\n",I);
    	for(JSQ=0;JSQ<matrix_fact_newton[I].lv_nz;JSQ++)
    	{
    		
    		J=matrix_fact_newton[I].nz[JSQ].j-1;
//				{
//	    		printf("J==%d\n",J);
//	    		printf("C[%d]=%f,C[%d]==%f\n",I,C[I],J,C[J]);
//					printf("L[%d][%d]==%f\n",J,I,matrix_fact_newton[I].nz[JSQ].UL_FACT);
//					printf("C[%d]=C[%d]-C[%d]*L[%d][%d]\n\n",J,J,I,J,I);
//				}
    		C[J]=C[J]-C[I]*matrix_fact_newton[I].nz[JSQ].UL_FACT;//按列
				
//    		printf("111:C[%d]=%f\n",J,C[J]);
			
			}
		}
//  	printf("22222222222222222222\n");
//		print_debug_info(10);

//  	printf("22222222222222222222\n");
   
    
    for(I=2*lv_bus-1;I>-1;I--)
    {
    	//DX=Z
//			printf("D[%d]=%f\n",I,matrix_fact_newton[I].UD_FACT);

//			printf("C[%d]=%f,D%d=%f\n",I,C[I],I,matrix_fact_newton[I].UD_FACT);
	    C[I]=C[I]*matrix_fact_newton[I].UD_FACT;
//			printf("222:C[%d]=%f\n",I,C[I]);
    	
    	//UV=X
    	for(JSQ=0;JSQ<matrix_fact_newton[I].lv_nz;JSQ++)
    	{
	   		J=matrix_fact_newton[I].nz[JSQ].j-1;

//if(I==484&&IT==1)
//				{  
//	    		printf("111:C[%d]=%f,C[%d]==%f\n",I,C[I],J,C[J]);
//					printf("U[%d][%d]==%f\n",I,J,matrix_fact_newton[I].nz[JSQ].UU_FACT);
//					printf("C[%d]=C[%d]-C[%d]*U[%d][%d]\n",I,I,J,I,J);
//				} 
    		C[I]=C[I]-C[J]*matrix_fact_newton[I].nz[JSQ].UU_FACT;
//if(I==484&&IT==1)
// 			printf("333:C[%d]=%f\n\n",I,C[I]);

			}
			
		}
//  	printf("4444444444444444\n\n");

    
    C[2*(lv_bus-1)]=0.0;
    
//    for(I=lv_bus-NOV-1;I<lv_bus;I++)
    for(I=0;I<lv_bus;I++)
    {
//    	if(typ_bs[map_bus[I].ibs]!=BS_TYPE_PQ)
    	if(map_bs[map_bus[I].ibs].bs_type!=BS_TYPE_PQ)
    	{
    		C[2*I+1]=0.0;
//    		printf("C[%d]==%f\n",2*I+1,C[2*I+1]);
    	}
    }
//   	printf("5555555555555555555555\n\n");
 
  
    //计算新的电压/角度值
    for(I=0;I<lv_bus;I++)
    {
     	map_bus[I].v_pu=map_bus[I].v_pu-C[2*I+1]*map_bus[I].v_pu;
    	map_bus[I].a_pu=map_bus[I].a_pu-C[2*I];
    }

	}

//	else if(OPT_FLAG==1)
//	{//NO DEBUG
//    for(I=0;I<2*lv_bus;I++)
//    {
//    	for(JSQ=0;JSQ<matrix_fact_newton[I].lv_nz;JSQ++)
//    	{
//    		J=matrix_fact_newton[I].nz[JSQ].j-1;
//    		B[J]=B[J]-B[I]*matrix_fact_newton[I].nz[JSQ].UU_FACT;
//
//			}
//		}
//    for(I=2*lv_bus-1;I>-1;I--)
//    {
//    	B[I]=B[I]*matrix_fact_newton[I].UD_FACT;
//    	for(JSQ=0;JSQ<matrix_fact_newton[I].lv_nz;JSQ++)
//    	{
//		   
//		    J=matrix_fact_newton[I].nz[JSQ].j;
//		    B[I]=B[I]-B[J-1]*matrix_fact_newton[I].nz[JSQ].UL_FACT;
//			}
//		}
//	}
//  printf("33333333333333333333333333\n");
	print_debug_info(10);
	
	return RET_OK;	
}

int pf_bus_to_bs(int NOWISLAND)
{
	int I;
	
	for(I=0;I<lv_bs;I++)
	{
		if(map_bs[I].AC_island==NOWISLAND)
		{
			map_bs[I].v_ym=map_bus[map_bs[I].ibus].v_pu*map_vt[map_vl[map_bs[I].vl_no].vt_no].vbase;
			map_bs[I].a_ym=map_bus[map_bs[I].ibus].a_pu*180.0/3.14159;
		}
	}
	
	pf_bus(NOWISLAND);
	pf_branch(NOWISLAND);
	pf_inj(NOWISLAND);

//	for(I=0;I<lv_map_AClnbrh;I++)
//	{
//		if(map_AClnbrh[I].iln2>-1&&map_bs[map_nd[map_AClnbrh[I].ind].ibs-1].AC_island==NOWISLAND)
//		{
//			if(fabs(map_ACln2[map_AClnbrh[I].iln2].Pi-map_ACln2[map_AClnbrh[I].iln2].p/100.0)>0.1)
//			{
//				printf("ln_name_i==%s,	Pij==%f,	dlt_p==%f\n",map_ACln[map_AClnbrh[I].ACln_no].name,map_ACln2[map_AClnbrh[I].iln2].Pi,map_ACln2[map_AClnbrh[I].iln2].Pi-map_ACln2[map_AClnbrh[I].iln2].p/100.0);
//			}
//			
//			if(fabs(map_ACln2[map_AClnbrh[I].iln2].Qi-map_ACln2[map_AClnbrh[I].iln2].q/100.0)>0.1)
//			{
//				printf("ln_name_i==%s,	Qij==%f,	dlt_q==%f\n",map_ACln[map_AClnbrh[I].ACln_no].name,map_ACln2[map_AClnbrh[I].iln2].Qi,map_ACln2[map_AClnbrh[I].iln2].Qi-map_ACln2[map_AClnbrh[I].iln2].q/100.0);
//			}
//		}
//		
//		if(map_AClnbrh[I].zln2>-1&&map_bs[map_nd[map_AClnbrh[I].znd].ibs-1].AC_island==NOWISLAND)
//		{
//			if(fabs(map_ACln2[map_AClnbrh[I].zln2].Pi-map_ACln2[map_AClnbrh[I].zln2].p/100.0)>0.1)
//			{
//				printf("ln_name_z==%s,	Pij==%f,	dlt_p==%f\n",map_ACln[map_AClnbrh[I].ACln_no].name,map_ACln2[map_AClnbrh[I].zln2].Pi,map_ACln2[map_AClnbrh[I].zln2].Pi-map_ACln2[map_AClnbrh[I].zln2].p/100.0);
//			}
//			
//			if(fabs(map_ACln2[map_AClnbrh[I].iln2].Qi-map_ACln2[map_AClnbrh[I].iln2].q/100.0)>0.1)
//			{
//				printf("ln_name_z==%s,	Qij==%f,	dlt_q==%f\n",map_ACln[map_AClnbrh[I].ACln_no].name,map_ACln2[map_AClnbrh[I].zln2].Qi,map_ACln2[map_AClnbrh[I].zln2].Qi-map_ACln2[map_AClnbrh[I].zln2].q/100.0);
//			}
//		}		
//	}
//	for(I=0;I<lv_map_ACxfbrh;I++)
//	{
//		if(map_ACxfbrh[I].ixf>-1&&map_bs[map_nd[map_ACxfbrh[I].ind].ibs-1].AC_island==NOWISLAND)
//		{
//			if(fabs(map_ACxf[map_ACxfbrh[I].ixf].Pi-map_ACxf[map_ACxfbrh[I].ixf].p/100.0)>0.1)
//			{
//				printf("xf_name==%s,	st_name==%s,	Pij==%f,	dlt_p==%f\n",map_ACxf[map_ACxfbrh[I].ixf].name,map_st[map_ACxf[map_ACxfbrh[I].ixf].st_no].name,map_ACxf[map_ACxfbrh[I].ixf].Pi,map_ACxf[map_ACxfbrh[I].ixf].Pi-map_ACxf[map_ACxfbrh[I].ixf].p/100.0);
//			}
//			
//			if(fabs(map_ACln2[map_AClnbrh[I].iln2].Qi-map_ACln2[map_AClnbrh[I].iln2].q/100.0)>0.1)
//			{
//				printf("xf_name==%s,	st_name==%s,	Qij==%f,	dlt_q==%f\n",map_ACxf[map_ACxfbrh[I].ixf].name,map_st[map_ACxf[map_ACxfbrh[I].ixf].st_no].name,map_ACxf[map_ACxfbrh[I].ixf].Qi,map_ACxf[map_ACxfbrh[I].ixf].Qi-map_ACxf[map_ACxfbrh[I].ixf].q/100.0);
//			}
//			
//	
//		}	
//	}		
	return RET_OK;	
}

int dy_xi_dpx(int NOWISLAND)
{
	float MS; 
	int I,IK;
//C[I]的顺序:I,DPi,I+1,DQi

 	if(IT<1)
 	{//首次计算
		MS=0.0;
		for(I=0;I<lv_bus;I++)
		{
 			map_bus[I].dyn_xi=0.0;
		}
		

//		if(SYS_DIM==1)
//		{
//			for(I=0;I<lv_map_ACun;I++)
//			{
//	  		if(map_bs[map_nd[map_ACun[I].ind].ibs-1].AC_island==NOWISLAND)
//        {
//					if(netflt_->XD_UN[i]>0.0001)
//					{//一般不用这种方式计算系数
//        		IK=netpf_->JA_BS[netbus_->I$BS_UN[i]-1]-1;
//        		pfpart1_->XI_BUS[IK]=pfpart1_->XI_BUS[IK]+1.0/netflt_->XD_UN[i];
//        		MS=MS+1.0/netflt_->XD_UN[i];//XD_UN??
//    			}
//    		}
//    	}
//    }
//		else 
		

⌨️ 快捷键说明

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