📄 main.cpp
字号:
#include "data_str.h"
#include "BRINV.C"
#include "BRMUL.C"
#include "JLPLQ.C"
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
char inputfile[20];
char outputfile[20];
int n_a=0,pv_n_a=0,b_a=0,direct_b_a=0,g_a=0;
vector<Branch>Branch_data(0);//支路数据
vector<Generator>Generator_data(0);//发电机数据
vector<Node>Node_data(0);//节点数据
cout<<"请输入数据文件的名称:";
cin>>inputfile;
ifstream infile(inputfile);
if(!infile)
cout<<"不能打开输入文件"<<endl;
else
{
infile>>n_a>>pv_n_a>>b_a>>direct_b_a>>g_a;
Branch_data.resize(Branch_data.size()+b_a);
Generator_data.resize(Generator_data.size()+g_a);
Node_data.resize(Node_data.size()+n_a);
for (int i=0;i<b_a;i++)//读入支路数据
{
infile>>Branch_data[i].branch_number>>Branch_data[i].start_node>>Branch_data[i].end_node
>>Branch_data[i].branch_R>>Branch_data[i].branch_X>>Branch_data[i].branch_half_B>>Branch_data[i].branch_trans;
}
for (i=0;i<g_a;i++)//读入发电机数据
{
infile>>Generator_data[i].generator_number>>Generator_data[i].belong_node>>Generator_data[i].min_active
>>Generator_data[i].run_active>>Generator_data[i].min_inactive>>Generator_data[i].max_inactive;
}
for (i=0;i<n_a;i++) //读入节点数据
{
infile>>Node_data[i].node_number>>Node_data[i].node_name>>Node_data[i].voltage_class>>Node_data[i].node_type
>>Node_data[i].active_load>>Node_data[i].inactive_load>>Node_data[i].initial_voltage>>Node_data[i].phase_angle;
}
}
double **Admittance_matrix;//有平衡节点
Admittance_matrix=new double*[n_a];
for (int i=0;i<n_a;i++)
{
Admittance_matrix[i]=new double[n_a];
}
for (i=0;i<n_a;i++)
{
for (int j=0;j<n_a;j++)
{
Admittance_matrix[i][j]=0.0;
}
}
double **Admittance_matrix_n;//没有平衡节点
Admittance_matrix_n=new double*[n_a-1];
for (i=0;i<n_a-1;i++)
{
Admittance_matrix_n[i]=new double[n_a-1];
}
for (i=0;i<n_a-1;i++)
{
for (int j=0;j<n_a-1;j++)
{
Admittance_matrix_n[i][j]=0.0;
}
}
//计算互导纳
for (i = 0; i < n_a-1; i++)
{
for (int m=i+1; m<n_a; m++)
{
for (int j=0;j<b_a;j++)
{
if ((Node_data[i].node_name==Branch_data[j].start_node&&Node_data[m].node_name==Branch_data[j].end_node)||
(Node_data[i].node_name==Branch_data[j].end_node&&Node_data[m].node_name==Branch_data[j].start_node))
{
Admittance_matrix[i][m]-=1/Branch_data[j].branch_X;
}
}
}
}
//计算自导纳
for (i = 0; i < n_a; i++)
{
for (int j=0;j<b_a;j++)
{
if ((Node_data[i].node_name==Branch_data[j].start_node||Node_data[i].node_name==Branch_data[j].end_node))
{
Admittance_matrix[i][i]+=1/Branch_data[j].branch_X+Branch_data[j].branch_half_B;
}
}
}
//处理变压器支路(逐次扫描支路数据如果变比不等于1,就作出相应的处理)
for (i=0;i<b_a;i++)
{
if (Branch_data[i].branch_trans!=1)
{
int line=0,column=0;
for (int j=0;j<n_a;j++)
{
if (Node_data[j].node_name==Branch_data[i].start_node)
{
line=j;
}
if (Node_data[j].node_name==Branch_data[i].end_node)
{
column=j;
}
}
Admittance_matrix[line][line]+=(1/Branch_data[i].branch_trans*Branch_data[i].branch_trans-1)/Branch_data[i].branch_X;
Admittance_matrix[line][column]-=(1/Branch_data[i].branch_trans-1)/Branch_data[i].branch_X;
}
}
//处理接地支路
//*************************************************************//
//处理接地支路
for (i=0;i<n_a;i++)
{
for (int j=i;j<n_a;j++)
{
Admittance_matrix[j][i]=Admittance_matrix[i][j];
}
}
for (i=0;i<n_a-1;i++)
{
for (int j=0;j<n_a-1;j++)
{
Admittance_matrix_n[i][j]=Admittance_matrix[i+1][j+1];
}
}
//处理发电机节点的有功负荷
for (i=0;i<g_a;i++)
{
for (int j=0;j<n_a;j++)
{
if (Generator_data[i].belong_node==Node_data[j].node_name)
{
Node_data[j].active_load=Generator_data[i].run_active;
}
}
}
double **Admittance_matrix_x;//有平衡节点
Admittance_matrix_x=new double*[n_a];
for (i=0;i<n_a;i++)
{
Admittance_matrix_x[i]=new double[n_a];
}
for (i=0;i<n_a;i++)
for (int j=0;j<n_a;j++)
Admittance_matrix_x[i][j]=Admittance_matrix[i][j];
brinv((double *)Admittance_matrix_x,n_a);
//形成P
double *P_load;//有平衡节点
P_load=new double[n_a];
double *P_load_vo;//没有平衡节点
P_load_vo=new double[n_a-1];
double P_VO=0;
for (i=1;i<n_a;i++)
{
P_load[i]=Node_data[i].active_load;
P_load_vo[i-1]=Node_data[i].active_load;
P_VO+=P_load[i];
}
P_load[0]=0-P_VO;
//相角
double *Phase_angle;//有平衡节点
Phase_angle=new double[n_a];
double *Phase_angle_vo;//没有平衡节点
Phase_angle_vo=new double[n_a-1];
for (i=1;i<n_a;i++)
{
Phase_angle[i]=0.0;
Phase_angle_vo[i-1]=0.0;
}
Phase_angle[0]=0.0;
brmul((double *)Admittance_matrix_x,P_load_vo,n_a-1,n_a-1,1,Phase_angle_vo);
//相角
for (i=0;i<n_a-1;i++)
{
Phase_angle[i+1]=Phase_angle_vo[i];
/*cout<<Phase_angle[i]<<endl;*/
}
/*cout<<Phase_angle[++i]<<endl;*/
double *Branch_power;//支路功率
Branch_power=new double[b_a];
for(i=0;i<b_a;i++)
{
Branch_power[i]=0.0;
}
for (i=0;i<b_a;i++)
{
int IBN=-1,IEN=-1;
for (int j=0;j<n_a;j++)
{
if (Branch_data[i].start_node==Node_data[j].node_name)
{
IBN=j;
}
if (Branch_data[i].end_node==Node_data[j].node_name)
{
IEN=j;
}
}
Branch_power[i]=(Phase_angle[IBN]-Phase_angle[IEN])/Branch_data[i].branch_X;
}
for (i=0;i<b_a;i++)
{
cout<<Branch_power[i]<<endl;
}
cout<<"请输入输出文件的名称:";
cin>>outputfile;
ofstream outfile(outputfile);
if(!outfile)
cout<<"不能打开输出文件";
else
{
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -