
#define T0  273.16				  
#define K   0.2                   //钢管管壁内表面的当量绝对粗糙度

#include <math.h>


//计算雷诺数
//入口参数：dQ-计算流量(m3/h); lDN-管道内径(mm); dL燃气管道计算长度(m);
//出口参数：dRe-雷诺数.
//返回值：  0 入口参数为0计算失败; 1 计算成功.
short Gas_count_Re(double dQ, double lDN, double dV, double dL, double* dRe)
{
	if(dQ<=0 || lDN<=0 || dV<=0 || dL<=0)
		return 0;
	*dRe = 4*dQ / (3.1415926*lDN*dL*dV);

	return 1;

}



//////////////////////////////////////////////////////////////////////////
///////////////////////计算摩擦阻力系数///////////////////////////////////
//////////////////////////////////////////////////////////////////////////

//计算低压层流状态摩擦阻力系数(Coefficient of Friction)
//入口参数：dRe-雷诺数
//出口参数：dCF-摩擦阻力系数.
//返回值：  0 入口参数为0计算失败; 1 计算成功.
short Gas_Count_Low_Laminar_Flow_CF(double dRe, double* dCF)
{
	if(dRe <= 0)
		return 0;
	*dCF = 64/dRe;
	
	return 1;	
}

//计算低压临界状态摩擦阻力系数(Coefficient of Friction)
//入口参数：dRe-雷诺数
//出口参数：dCF-摩擦阻力系数.
//返回值：  0 入口参数为0计算失败; 1 计算成功.
short Gas_Count_Low_Critical_CF(double dRe, double* dCF)
{
	if(dRe<=2100 || dRe >3500)
		return 0;
	*dCF = 0.03 + (dRe-2100)/(65*dRe - pow(10,5));
	
	return 1;	
}

//计算低压(中高压)湍流状态钢管的摩擦阻系数(Coefficient of Friction)
//入口参数：lDN-管道内径(mm)；dRe-雷诺数；dK管壁内表面的当量绝对粗糙度
//			
//出口参数：dCF-摩擦阻力系数.
//返回值：  0 入口参数为0计算失败; 1 计算成功.
short Gas_Count_Steel_CF(double lDN, double dRe, double dK, double* dCF)
{
	if(lDN<=0 || dRe<=0 || dK<=0)
		return 0;
	*dCF = 0.11*pow(dK/lDN + 68/dRe, 0.25);
	
	return 1;	
}


//计算低压(中高压)湍流状态铸铁管的摩擦阻系数(Coefficient of Friction)
//入口参数：lDN-管道内径(mm)；dQ-计算流量(m3/h)；dV-运动黏度
//						
//出口参数：dCF-摩擦阻力系数
//返回值：  0 入口参数为0计算失败; 1 计算成功.
short Gas_Count_Cas_Iron_CF(double lDN, double dQ, double dV, double* dCF)
{
	if(lDN<=0 || dQ<=0 || dV<=0)
		return 0;
	*dCF = 0.102236 * pow(1/(double)lDN + 5158* (lDN*dV/dQ), 0.284);
	
	return 1;	
}


//////////////////////////////////////////////////////////////////////////
///////////////////计算燃气管道单位长度的摩擦阻力损失/////////////////////
//////////////////////////////////////////////////////////////////////////

//计算低压层流燃气管道摩擦阻力损失
//入口参数：dL-计算长度(m); dQ-计算流量(m3/h); lDN-管道内径(mm); 
//			dV-0度和101.325kPa时的运动黏度(m2/s); dDE-燃气密度(kg/m3); dT-燃气温度(K).	
//出口参数：dHeadLoss-摩擦阻力损失(Pa).
//返回值：  0 入口参数为0计算失败；1 计算成功.
short gas_count_Low_Laminar_Flow(double dL, double dQ, double lDN, double dV, double dDE, double dT, double* dHeadLoss)
{
	if(dL<=0 || dQ<=0 || lDN<=0 || dV<=0 || dDE<=0 || dT<=0)
		return 0;
	* dHeadLoss = 1.13 * pow(10, 10) * (dQ / pow(lDN, 4)) * dV * dDE * (dT/T0) * dL;
	return 1;
}


//计算低压临界状态燃气管道摩擦阻力损失
//入口参数：dL-计算长度(m); dQ-计算流量(m3/h); lDN-管道内径(mm); 
//			dV-0度和101.325kPa时的运动黏度(m2/s); dDE-燃气密度(kg/m3); dT-燃气温度(K)
//出口参数：dHeadLoss-摩擦阻力损失(Pa)
//返回值：  0 入口参数为0计算失败; 1 计算成功
short gas_count_Low_Critical(double dL, double dQ, double lDN, double dV, double dDE, double dT, double * dHeadLoss)
{
	if(dL<=0 || dQ<=0 || lDN<=0 || dV<=0 || dDE<=0 || dT<=0)	
		return 0;
	* dHeadLoss = 1.9*pow(10, 6) * (1 + (11.8*dQ - 7*pow(10, 4)*lDN*dV) / (23*dQ - pow(10,5)*lDN*dV)) * (pow(dQ, 2)/pow(lDN, 5))  * dDE * (dT/T0) * dL;
	return 1;	
}


//计算低压湍流状态钢管燃气管道摩擦阻力损失
//入口参数：dL-计算长度(m); dQ-计算流量(m3/h); lDN-管道内径(mm); dV-0度和101.325kPa时的运动黏度(m2/s); 
//			dDE-燃气密度(kg/m3); dT-燃气温度(K); dK管壁内表面的当量绝对粗糙度 
//出口参数：dHeadLoss-摩擦阻力损失(Pa).
//返回值：  0 入口参数为0计算失败；1 计算成功.
short gas_count_Low_Overfall_Steel(double dL, double dQ, double lDN, double dV, double dDE, double dT, double dK, double * dHeadLoss)
{
	if(dL<=0 || dQ<=0 || lDN<=0 || dV<=0 || dDE<=0 || dT<=0)
		return 0;
	* dHeadLoss = 6.9*pow(10, 6) * pow((dK/lDN + 192.2*(lDN*dV) / dQ), 0.25) * pow(dQ,2)/pow(lDN,5) * dDE * (dT/T0) * dL;
	return 1;	
}


//计算低压湍流状态铸铁管燃气管道摩擦阻力损失
//入口参数：dQ-计算流量(m3/h); lDN-管道内径(mm); 
//			dDE-燃气密度(kg/m3); dT-燃气温度(K).
//出口参数：dHeadLoss-摩擦阻力损失(Pa).
//返回值：  0 入口参数为0计算失败；1 计算成功.
short gas_count_Low_Cas_Iron(double dL, double dQ, double lDN, double dV, double dDE, double dT, double * dHeadLoss)
{
	if(dL<=0 || dQ<=0 || lDN<=0 || dV<=0 || dDE<=0 || dT<=0)
		return 0;

	* dHeadLoss = 6.4*pow(10,6) * pow((1/lDN + 5158*lDN*dV / dQ), 0.248) * pow(dQ,2)/pow(lDN,5) * dDE * (dT/T0) * dL;
	return 1;
	
}


//计算高压钢管燃气管道摩擦阻力损失
//入口参数：dQ-计算流量(m3/h); lDN-管道内径(mm);  
//			dDE-燃气密度(kg/m3); dT-燃气温度(K).
//出口参数：dHeadLoss-摩擦阻力损失(Pa).
//返回值：  0 入口参数为0计算失败；1 计算成功.
short gas_count_High_Overfall_Steel(double dL, double dQ, double lDN, double dV, double dDE, double dT, double dK, double * dHeadLoss)
{
	if(dL<=0 || dQ<=0 || lDN<=0 || dV<=0 || dDE<=0 || dT<=0)
		return 0;
	
	//* dHeadLoss =1000 * sqrt(1.4*pow(10, 9) * pow((dK/lDN + 192.2*(lDN*dV)/ dQ), 0.25) * pow(dQ,2)/pow(lDN,5)* dDE *(dT/T0) * (dL/1000));
	*dHeadLoss = 1.4*pow(10, 9) * pow((dK/lDN + 192.2*(lDN*dV)/dQ), 0.25) * pow(dQ,2)/pow(lDN,5)* dDE *(dT/T0) * (dL/1000);
	return 1;
	
}


//计算高压铸铁管燃气管道摩擦阻力损失
//入口参数：dQ-计算流量(m3/h); lDN-管道内径(mm); 
//			dDE-燃气密度(kg/m3); dT-燃气温度(K).
//出口参数：dHeadLoss-摩擦阻力损失(Pa).
//返回值：  0 入口参数为0计算失败；1 计算成功.
short gas_count_High_Cas_Iron(double dL, double dQ, double lDN, double dV, double dDE, double dT, double * dHeadLoss)
{
	if(dL<=0 || dQ<=0 || lDN<=0 || dV<=0 || dDE<=0 || dT<=0)		
		return 0;
	
//	* dHeadLoss = 1000 * sqrt(1.3*pow(10,9) * pow((1/lDN + 5158*lDN*dV / dQ), 0.284) * pow(dQ,2)/pow(lDN,5) * dDE * (dT/T0) * (dL/1000));
	* dHeadLoss = /*1000 **/ 1.3*pow(10,9) * pow((1/lDN + 5158*lDN*dV / dQ), 0.284) * pow(dQ,2)/pow(lDN,5) * dDE * (dT/T0) * (dL/1000);
	return 1;
	
}


