/****************************************************
* 本子程序根据所给的支路导纳及有关信息,形成结点 *
* 导纳矩阵,如打印参数K=1,则输出电导矩阵G和电纳矩B *
****************************************************/
void ybus(int n,int l,int m,float *g,float *b,float *g1,float *b1,float *c1,\
float *c,float *co,int k,int *s1,int *e1)
{
extern FILE *file4;
FILE *fp;
int i,j,io,i0;
int pos1,pos2;
int st,en;
if(file4==NULL)
{
fp=stdout;
}
else
{
fp=file4; /* 输出到文件 */
}
/* 初始化矩阵G,B */
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
pos2=f2(i,j,n);
g[pos2]=0;b[pos2]=0;
}
}
/* 计算支路导纳 */
for(i=1;i<=l;i++)
{
/* 计算对角元 */
pos1=f1(i);
st=s1[pos1];en=e1[pos1];
pos2=f2(st,st,n);
g[pos2]+=g1[pos1];
b[pos2]+=b1[pos1]+c1[pos1];
pos2=f2(en,en,n);
g[pos2]+=g1[pos1];
b[pos2]+=b1[pos1]+c1[pos1];
/* 计算非对角元 */
pos2=f2(st,en,n);
g[pos2]-=g1[pos1];
b[pos2]-=b1[pos1];
g[f2(en,st,n)]=g[f2(st,en,n)];
b[f2(en,st,n)]=b[f2(st,en,n)];
}
/* 计算接地支路导纳 */
for(i=1;i<=n;i++)
{
/* 对称部分 */
b[f2(i,i,n)]+=co[f1(i)];
/* 非对称部分 */
for(j=1;j<=l;j++)
{
b[f2(i,i,n)]+=c[f2(i,j,l)];
}
}
if(k!=1)
{
return; /* 如果K不为 1,则返回;否则,打印导纳矩阵 */
}
fprintf(fp,"\n BUS ADMITTANCE MATRIX Y(BUS):");
fprintf(fp,"\n ******************* ARRAY G ********************");
for(io=1;io<=n;io+=5)
{
i0=(io+4)>n?n:(io+4);
fprintf(fp,"\n");
for(j=io;j<=i0;j++)
{
fprintf(fp,"%13d",j);
}
for(i=1;i<=n;i++)
{
fprintf(fp,"\n%2d",i);
for(j=io;j<=i0;j++)
{
fprintf(fp,"%13.6f",g[f2(i,j,n)]);
}
}
fprintf(fp,"\n");
}
fprintf(fp,"\n ******************* ARRAY B ********************");
for(io=1;io<=n;io+=5)
{
i0=(io+4)>n?n:(io+4);
fprintf(fp,"\n");
for(j=io;j<=i0;j++)
{
fprintf(fp,"%13d",j);
}
for(i=1;i<=n;i++)
{
fprintf(fp,"\n%2d",i);
for(j=io;j<=i0;j++)
{
fprintf(fp,"%13.6f",b[f2(i,j,n)]);
}
}
fprintf(fp,"\n");
}
fprintf(fp,"\n************************************************");
}
评论0