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

📄 main.cpp

📁 一种很好的潮流编程程序
💻 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 + -