📄 中压计算.cpp
字号:
#include<stdio.h>
#include<math.h>
#define H1 3.3 //用气低峰时小时系数
#define H2 4 //用气高峰时小时系数
#define P2 130 //进调压器最低允许压力kp
#define P1 200 //气源厂压力kp
#define P3 250 //气源厂压力kp
#define P0 100 //大气压力kp
#define Z 1 //当压力小于1.2Mp时取1
#define Q2 20442 //储配站2用气低峰时独立储配站应储存的流量m^3
#define Q3 51558 //储配站1用气低峰时独立储配站应储存的流量m^3
#define dP 1050 //区域街区压降数Pa
#define L0 6443 //高压管用气高峰气源到供气最远点的长度m
#define L01 6443 //高,中压压管用气低峰气源到供气最远点的长度m
#define L02 10440 //中压管用气低峰气源到供气最远点的长度m
#define T0 273.125 //0摄氏度的凯尔文温度K
#define Y1 1.4*1e+9 //中压天然气水利计算公式系数钢管
#define Y2 1.3*1e+9 //中压天然气水利计算公式系数铸铁管
#define T 3.5 //计算地区的年平均温度温度C
#define V 1e-6 //运动粘度单位10^-6
#define N 2 //中压低峰用气,高峰用气管网
#define k1 1 //可选管径的最小编号(管径表中)
#define k2 12 //可选管径的最小编号
#define dcg0 0.026 //新铸铁管当量绝对粗糙度cm
#define dcg1 0.02 //钢管当量绝对粗糙度cm
#define dcg2 0.001 //塑料管材当量绝对粗糙度cm
#define no 32 //中压节点编号数
#define bo 37 //中压管道数
#define N5 19 //所选的标准管径数
#define h0 1 //中压除参考点外已知压力点个数数
#define zq0 73870.25 //高崖管供气的中压总节点流量数储气
#define zq01 2076.901 //高崖管供气的中压总节点流量数输气
#define zq02 22312.25 //中压管供气总节点流量数储气
#define zq03 1223.90 //中压管供气总节点流量数输气
#define kp0 0 //约定为高中压
#define kp1 1 //约定为低压
#define ksg0 0 //约定为事故工况
#define ksg1 1 //约定为计算工况
#define gcc0 0 //管材选取参数0为铸铁管
#define gcc1 1 //管材选取参数1为钢管
#define gcc2 2 //管材选取参数2为塑料管
#define gg1 11 //对钢管和铸铁管紊流区计算公式选取参数11谢维列夫旧钢管公式
#define gg2 12 //对钢管和铸铁管紊流区计算公式选取参数12谢维列夫新钢管公式
#define gg3 13 //对紊流区计算公式选取参数13阿里特苏里公式
#define gg4 14 //对紊流区计算公式选取参数14柯列勃洛克公式
int bzgj[N][bo]; //查得标准铸铁管管径
struct natralgas //天然气物性结构体
{char name[20]; //各组成成分名称
double ri; //各组成成分溶积成分
double mi; //各组成成分分子量
double ki; //各组成成分密度
double Hh; //各组成成分高热值
double Hl; //各组成成分低热值
double vi; //各组成成分运动粘度
double Lh; //各组成成分爆炸上限
double Ll; //各组成成分爆炸下限
}ng;
struct codefjsflude //管径结构体
{int n; //管段编号
double l; //管长
int a; //管线起点
int b; //管线终点
double q; //管线计算流量
double diameter; //计算管径
}c[bo]; //结构体的大小由最大区域最大管道数数决定,此处为一区bo1=53
struct biaoguan
{int num;
int zfe;
int steel;
int pe;
}bg[N5];
struct codeflude //节点流量结构体
{int name; //节点号
double q; //该节点流量
}cf[no];
struct codeflude1 //低峰节点流量结构体
{int name1; //节点号
double q1; //该节点流量
int flag; //flag等于1为调压站,0为非调压站的节点
}cf1[no];
struct codeflude2 //高峰节点流量结构体
{int name2; //节点号
double q2; //该节点流量
}cf2[no];
void open0()
{int i;
FILE *fp;
fp=fopen("天然气基础数据表.txt","r"); //打开基础数据表1并显示数据
printf("名称 容积成分 分子量 密度 高热值 低热值 运动粘度 爆炸上限 爆炸下限\n");
printf("单位 %% ρ(kg/Nm^3) Hh(MJ/ Nm^3) Hh(MJ/ Nm^3) ν*10^6m/s % %%\n");
fscanf(fp,"%s%lf%lf%lf%lf%lf%lf%lf%lf",ng.name,&ng.ri,&ng.mi,&ng.ki,&ng.Hh,&ng.Hl,&ng.vi,&ng.Lh,&ng.Ll);
printf("%-6s %8.3lf %8.3lf %8.3lf %8.3lf %8.3lf %8.3lf %8.3lf %8.3lf\n",ng.name,ng.ri,ng.mi,ng.ki,ng.Hh,ng.Hl,ng.vi,ng.Lh,ng.Ll);
fclose(fp);
printf("标号 铸铁管mm 钢管mm 塑料管(外径)mm\n");
fp=fopen("标准管径.txt","r"); //打开标准管径并显示数据
for(i=0;i<N5;i++)
{fscanf(fp,"%d%d%d%d",&bg[i].num,&bg[i].zfe,&bg[i].steel,&bg[i].pe);
printf("%d %8d %8d %8d\n",bg[i].num,bg[i].zfe,bg[i].steel,bg[i].pe);
}
fclose(fp);
fp=fopen("中压节点流量.txt","r"); //打开节点流量表
for(i=0;i<no;i++)
{fscanf(fp,"%d%lf%d",&cf1[i].name1,&cf1[i].q1,&cf1[i].flag);
printf("%d %.3lf %d\n",cf1[i].name1,cf1[i].q1,cf1[i].flag);
}
fclose(fp);
for(i=0;i<no;i++)
{cf2[i].name2=cf1[i].name1; //将个元素赋给高峰节点流量结构体
cf2[i].q2=cf1[i].q1;
}
}
void open(char *jsdata,char *indata)
{ int i;
FILE *fp;
fp=fopen(jsdata,"r"); //打开计算流量表
for(i=0;i<bo;i++)
{fscanf(fp,"%d%lf%d%d%lf",&c[i].n,&c[i].l,&c[i].a,&c[i].b,&c[i].q);
printf("%d %.3lf %d %d %.3lf\n",c[i].n,c[i].l,c[i].a,c[i].b,c[i].q);
}
fclose(fp);
fp=fopen(indata,"r"); //打开节点流量表
for(i=0;i<no;i++)
fscanf(fp,"%d%lf",&cf[i].name,&cf[i].q);
fclose(fp);
}
void change(int *a,int *b) //交换函数将终点标号大于起点的交换,始终维持左端标号最大
{int temp;
if(*a<*b)
{temp=*b;*b=*a;*a=temp; }
}
/*choosediameter0(double d) //选铸铁管函数
{int i=0;
double up=-1;
double down=0;
double p;
for(i=0;up<0&&i<bo;i++)
up=bg[i].zfe-d;
down=bg[i-2].zfe-d;
p=fabs(down)/(bg[i-1].zfe-bg[i-2].zfe);
if(p<0.1)
return(bg[i-2].zfe);
else
return(bg[i-1].zfe);
}
choosediameter1(double d) //选钢管函数
{int i=0;
double up=-1;
double down=0;
double p;
for(i=0;up<0&&i<bo;i++)
up=bg[i].steel-d;
down=bg[i-2].steel-d;
p=fabs(down)/(bg[i-1].steel-bg[i-2].steel);
if(p<0.1)
return(bg[i-2].steel);
else
return(bg[i-1].steel);
}
choosediameter2(double d) //选塑料管函数
{int i=0;
double up=-1;
double down=0;
double p;
for(i=0;up<0&&i<bo;i++)
up=bg[i].pe-d;
down=bg[i-2].pe-d;
p=fabs(down)/(bg[i-1].pe-bg[i-2].pe);
if(p<0.1)
return(bg[i-2].pe);
else
return(bg[i-1].pe);
}*/
void calculate()
{int i;
for(i=0;i<no;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -