📄 nflow_sub.cpp
字号:
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 + -