1812 lines
57 KiB
C#
1812 lines
57 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Text;
|
|||
|
using NG_Tools;
|
|||
|
using System.Windows.Forms;
|
|||
|
|
|||
|
|
|||
|
namespace NG_Tools
|
|||
|
{
|
|||
|
public class FlowCal
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 标准孔板流量计算
|
|||
|
/// </summary>
|
|||
|
/// <param name="ptAGA10"></param>
|
|||
|
/// <param name="flPar"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public double OFlowCal(ref NG_Cal.GasPropsSTRUCT GasPar, ref NG_Cal.FlowParStruct FlowPar)
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
//将压力 温度 差压 当地大气压 压力量程 温度量程 和差压量程都换算到标准计算所使用的单位下的值
|
|||
|
|
|||
|
|
|||
|
// 考虑膨胀系数后的管道直径
|
|||
|
// 考虑膨胀系数后的喉部直径
|
|||
|
//直径比
|
|||
|
FlowPar.dOrificeD = FlowPar.dOrificeD * (1 + 0.000001 * CaiLiaoPzxs(FlowPar.dOrificeMaterial) * (FlowPar.dTf - 293.15));
|
|||
|
FlowPar.dPipeD = FlowPar.dPipeD * (1 + 0.000001 * CaiLiaoPzxs(FlowPar.dPipeMaterial) * (FlowPar.dTf - 293.15));
|
|||
|
FlowPar.dBeta = FlowPar.dOrificeD / FlowPar.dPipeD;
|
|||
|
|
|||
|
//FlowPar.dOrificeD = 150.24;
|
|||
|
//FlowPar.dPipeD = 259.37;
|
|||
|
//FlowPar.dBeta = 0.5792;
|
|||
|
|
|||
|
// //Z
|
|||
|
// double tempZ;
|
|||
|
// double tempZn;
|
|||
|
// double tempFz;
|
|||
|
// FlowPar. = (double)(Zcal.Crit(ref GasPar, 0));
|
|||
|
// //Zn _11062
|
|||
|
//tempZn = (double)(Zx[34]);
|
|||
|
// //Fz
|
|||
|
//tempFz = (double)(Math.Sqrt(tempPar[69] / tempZ));
|
|||
|
|
|||
|
//double tempMor;
|
|||
|
//double tempXdmd;
|
|||
|
//double tempRn;
|
|||
|
//double tempRf;
|
|||
|
|
|||
|
// //分子量 摩尔密度
|
|||
|
// tempMor = (double)(Zx[29]);
|
|||
|
// //相对密度
|
|||
|
// tempXdmd = (double)(Zx[33]);
|
|||
|
// //标况密度.
|
|||
|
// tempRn = (double)(Zx[32]);
|
|||
|
|
|||
|
// //工况密度
|
|||
|
//tempRf = (double)(Zx[30]);
|
|||
|
|
|||
|
//求渐近速度系数 E
|
|||
|
FlowPar.dE = (double)(1 / Math.Pow((1 - Math.Pow(FlowPar.dBeta, 4)), 0.5));
|
|||
|
//FlowPar.dE = 1.0615;
|
|||
|
|
|||
|
//求相对密度系数 FG
|
|||
|
// LiuTiType = 1
|
|||
|
FlowPar.dFG = (double)(Math.Pow((1 / GasPar.dRD_Real), 0.5));
|
|||
|
//FlowPar.dFG = 1.2531;
|
|||
|
//求流动温度系数 'FT
|
|||
|
FlowPar.dFT = (double)(Math.Pow((293.15 / FlowPar.dTf), 0.5));
|
|||
|
//FlowPar.dFT = 1.0086;
|
|||
|
//求等熵指数?????????????????????????????????
|
|||
|
|
|||
|
FlowPar.dKappa = GasPar.dKappa;
|
|||
|
//FlowPar.dKappa = 1.357;
|
|||
|
|
|||
|
//求动力粘度 dlnd
|
|||
|
FlowPar.dDViscosity = Dlndjs(FlowPar.dPf, FlowPar.dTf, 2, 1);
|
|||
|
//FlowPar.dDViscosity = 0.01096;
|
|||
|
|
|||
|
//求可膨胀系数
|
|||
|
FlowPar.dDExpCoefficient = KePenZhang_JiSuan(FlowPar.dPf / 1e6, FlowPar.dDp, FlowPar.dBeta, FlowPar.dKappa, FlowPar.dCoreType, 0);
|
|||
|
//FlowPar.dDExpCoefficient = 0.9977;
|
|||
|
//迭代计算流量和流出系数
|
|||
|
|
|||
|
double conQvA = 0;
|
|||
|
conQvA = (double)(0.0000031795 * (1530000.0D * GasPar.dRD_Real / (FlowPar.dDViscosity * FlowPar.dOrificeD)) *
|
|||
|
FlowPar.dE * Math.Pow(FlowPar.dOrificeD, 2) * GasPar.dFpv * FlowPar.dFG * FlowPar.dDExpCoefficient *
|
|||
|
FlowPar.dFT * Math.Sqrt(FlowPar.dPf * FlowPar.dDp / 1e6));
|
|||
|
double[] XQv = new double[4];
|
|||
|
double[] CQv = new double[4];
|
|||
|
double[] dQv = new double[4];
|
|||
|
double Qn = 0;
|
|||
|
int n = 0;
|
|||
|
XQv[0] = 1000000.0F;
|
|||
|
_10000:
|
|||
|
for (n = 1; n <= 2; n++)
|
|||
|
{
|
|||
|
CQv[n] = C_JiSuan(FlowPar.dOrificeD, FlowPar.dBeta, XQv[n - 1], conQvA, FlowPar.dPtmode, FlowPar.dCoreType, 0);
|
|||
|
XQv[n] = conQvA * CQv[n];
|
|||
|
dQv[n] = XQv[n] - XQv[n - 1];
|
|||
|
}
|
|||
|
if (XQv[2] == XQv[1] || dQv[2] == dQv[1])
|
|||
|
{
|
|||
|
Qn = (double)(conQvA * FlowPar.dDViscosity * FlowPar.dOrificeD * CQv[2] / (1530000.0D * GasPar.dRD_Real));
|
|||
|
//管道雷诺数
|
|||
|
FlowPar.dRnPipe = XQv[2];
|
|||
|
//流出系数
|
|||
|
FlowPar.dCd = CQv[2];
|
|||
|
|
|||
|
}
|
|||
|
if (Math.Abs((conQvA - XQv[2] / CQv[1]) / conQvA) > 0.00000000000000005)
|
|||
|
{
|
|||
|
XQv[0] = (double)(XQv[n - 1] - dQv[n - 1] * ((XQv[n - 1] - XQv[n - 2]) / (dQv[n - 1] - dQv[n - 2])));
|
|||
|
goto _10000;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//孔板锐利度系数Bk
|
|||
|
FlowPar.dOrificeSharpness = 1;
|
|||
|
if (FlowPar.dCoreType == 0)
|
|||
|
{
|
|||
|
FlowPar.dBk = (FlowPar.dOrificeSharpness == 0) ? (BkTable(FlowPar.dOrificeRk, FlowPar.dOrificeD, 1)) : (FlowPar.dOrificeSharpness);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
FlowPar.dBk = 1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//管道粗糙度系数 Gme
|
|||
|
FlowPar.dRoughNessPipe = CcdXsjs(FlowPar.dPipeType, FlowPar.dPipeD, FlowPar.dBeta, FlowPar.dRnPipe);
|
|||
|
//修正后的流出系数
|
|||
|
FlowPar.dCd = FlowPar.dCd * FlowPar.dBk * FlowPar.dRoughNessPipe;
|
|||
|
//标况体积流量 m³、s
|
|||
|
FlowPar.dVFlowb = Qn * FlowPar.dBk * FlowPar.dRoughNessPipe;
|
|||
|
//工况体积流量
|
|||
|
FlowPar.dVFlowf = FlowConvert_BaseToWork(ref FlowPar ,ref GasPar );
|
|||
|
//标况质量流量
|
|||
|
FlowPar.dMFlowb = (double)(FlowPar.dVFlowb * GasPar.dRhob);
|
|||
|
//标况能量流量
|
|||
|
FlowPar.dEFlowb = (double)(FlowPar.dVFlowb * GasPar.dHhvm);
|
|||
|
//管道内天然气流速
|
|||
|
FlowPar.dVelocityFlow = (double)(FlowPar.dVFlowf / (3.1415926 * Math.Pow((FlowPar.dPipeD / 2000), 2)));
|
|||
|
//压力损失
|
|||
|
FlowPar.dPressLost = YaLiSunShi(FlowPar.dCd, FlowPar.dBeta, FlowPar.dDp, FlowPar.dCoreType);
|
|||
|
|
|||
|
return FlowPar.dVFlowb;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 标准孔板流量计算
|
|||
|
/// </summary>
|
|||
|
/// <param name="ptAGA10"></param>
|
|||
|
/// <param name="flPar"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public double SdFlowCal(ref NG_Cal.GasPropsSTRUCT GasPar, ref NG_Cal.FlowParStruct FlowPar)
|
|||
|
{
|
|||
|
//工况体积流量 m³、s
|
|||
|
FlowPar.dVFlowf = FlowPar.dPulseNum / FlowPar.dMeterFactor;
|
|||
|
|
|||
|
//标况体积流量 m³、s
|
|||
|
FlowPar.dVFlowb = FlowConvert_WorkToBase(ref FlowPar, ref GasPar);
|
|||
|
|
|||
|
//标况质量流量
|
|||
|
FlowPar.dMFlowb = (double)(FlowPar.dVFlowb * GasPar.dRhob);
|
|||
|
//标况能量流量
|
|||
|
FlowPar.dEFlowb = (double)(FlowPar.dVFlowb * GasPar.dHhvm);
|
|||
|
|
|||
|
|
|||
|
return FlowPar.dVFlowb;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 天然气音速喷嘴流量计算
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public double NozellFLowCal(ref NG_Tools.NG_Cal.GasPropsSTRUCT ptAGA10, ref NG_Tools.NG_Cal.FlowParStruct flPar)
|
|||
|
{
|
|||
|
double dAnt;// 喷嘴喉部面积
|
|||
|
//double dCR;//临界流系数
|
|||
|
double dP1Z;//滞止压力
|
|||
|
double dT1Z;//滞止温度
|
|||
|
//double dPbeta;//上下游压力比
|
|||
|
double dDcorrect;// 考虑膨胀系数后的管道直径
|
|||
|
double ddcorrect;// 考虑膨胀系数后的喉部直径
|
|||
|
double dBeta;//直径比
|
|||
|
double dQm;
|
|||
|
try
|
|||
|
{
|
|||
|
ddcorrect = flPar.dOrificeD * (1 + 0.000001 * CaiLiaoPzxs(flPar.dOrificeMaterial) * (flPar.dTf - 293.15));
|
|||
|
dDcorrect = flPar.dPipeD * (1 + 0.000001 * CaiLiaoPzxs(flPar.dOrificeMaterial) * (flPar.dTf - 293.15));
|
|||
|
dBeta = ddcorrect / dDcorrect;
|
|||
|
dAnt = 3.1415926 * (ddcorrect / 2) * (ddcorrect / 2);
|
|||
|
//ptNGcal.SOS(ref ptAGA10);
|
|||
|
|
|||
|
//dCR = ptAGA10.dCstar * Math.Sqrt(ptAGA10.dZf);
|
|||
|
dP1Z = flPar.dPf * (1 + ptAGA10.dKappa / 2 * Math.Pow((2 / (ptAGA10.dKappa + 1)), ((ptAGA10.dKappa + 1) / (ptAGA10.dKappa - 1))) * Math.Pow(dBeta, 4));
|
|||
|
dT1Z = flPar.dTf * (1 + (ptAGA10.dKappa - 1) / 2 * (2 / Math.Pow((ptAGA10.dKappa + 1), ((ptAGA10.dKappa + 1) / (ptAGA10.dKappa - 1)))) * Math.Pow(dBeta, 4));
|
|||
|
// dQm = dAnt * flPar.dCd * ptAGA10.dCstar * dP1Z / Math.Sqrt(8314.51 * dT1Z / ptAGA10.dMrx);
|
|||
|
dQm = dAnt * flPar.dCd * ptAGA10.dCstar * Math.Sqrt(ptAGA10.dZf * dP1Z * ptAGA10.dRhof);
|
|||
|
|
|||
|
if (dBeta > 0.25)
|
|||
|
{
|
|||
|
dQm = dQm * BetaG25(dP1Z, dT1Z, dBeta, ref ptAGA10);
|
|||
|
}
|
|||
|
flPar.dMFlowb = dQm;
|
|||
|
flPar.dVFlowb = flPar.dMFlowb / ptAGA10.dRhob;
|
|||
|
//标况能量流量
|
|||
|
flPar.dEFlowb = (double)(flPar.dVFlowb * ptAGA10.dHhvm);
|
|||
|
flPar.dVFlowf = FlowConvert_BaseToWork(ref flPar, ref ptAGA10);
|
|||
|
return flPar.dVFlowb;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
return 0.0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private double BetaG25(double P0, double T0, double BetaB, ref NG_Tools.NG_Cal.GasPropsSTRUCT ptAGA10)
|
|||
|
{
|
|||
|
double[] nik0 = new double[9];
|
|||
|
double[] Sik0 = new double[9];
|
|||
|
double[] Tik0 = new double[9];
|
|||
|
double[] nik1 = new double[9];
|
|||
|
double[] Sik1 = new double[9];
|
|||
|
double[] Tik1 = new double[9];
|
|||
|
double C0 = 0;
|
|||
|
double C1 = 0;
|
|||
|
double Pai = 0;
|
|||
|
double Tuo = 0;
|
|||
|
double b = 0;
|
|||
|
double F0 = 0;
|
|||
|
double F1 = 0;
|
|||
|
double Rf = 0.65;
|
|||
|
// 直径比大于0.25的修正因子
|
|||
|
nik0[0] = 1.068826e-3;
|
|||
|
nik0[1] = 1.199593e-2;
|
|||
|
nik0[2] = -1.48292e-3;
|
|||
|
nik0[3] = 2.764799e-4;
|
|||
|
nik0[4] = 7.920711e-5;
|
|||
|
nik0[5] = 1.11278e-3;
|
|||
|
nik0[6] = -6.815626e-5;
|
|||
|
nik0[7] = 3.86249e-8;
|
|||
|
|
|||
|
nik1[0] = -3.46148e-3;
|
|||
|
nik1[1] = 5.28029e-3;
|
|||
|
nik1[2] = 1.195016e-2;
|
|||
|
nik1[3] = 1.664232e-3;
|
|||
|
nik1[4] = 1.159371e-3;
|
|||
|
nik1[5] = 7.260461e-3;
|
|||
|
nik1[6] = -7.541933e-4;
|
|||
|
nik1[7] = 2.613967e-7;
|
|||
|
|
|||
|
Sik0[0] = 0;
|
|||
|
Sik0[1] = 0;
|
|||
|
Sik0[2] = 0.5;
|
|||
|
Sik0[3] = 1;
|
|||
|
Sik0[4] = 2;
|
|||
|
Sik0[5] = 3;
|
|||
|
Sik0[6] = 5;
|
|||
|
Sik0[7] = 10;
|
|||
|
|
|||
|
Sik1[0] = 0;
|
|||
|
Sik1[1] = 0;
|
|||
|
Sik1[2] = 0;
|
|||
|
Sik1[3] = 1;
|
|||
|
Sik1[4] = 1.5;
|
|||
|
Sik1[5] = 3;
|
|||
|
Sik1[6] = 5;
|
|||
|
Sik1[7] = 10;
|
|||
|
|
|||
|
Tik0[0] = -1;
|
|||
|
Tik0[1] = 0;
|
|||
|
Tik0[2] = -6;
|
|||
|
Tik0[3] = -1;
|
|||
|
Tik0[4] = -2;
|
|||
|
Tik0[5] = -8;
|
|||
|
Tik0[6] = -10;
|
|||
|
Tik0[7] = -18;
|
|||
|
|
|||
|
Tik1[0] = -3;
|
|||
|
Tik1[1] = -1;
|
|||
|
Tik1[2] = 0;
|
|||
|
Tik1[3] = -2;
|
|||
|
Tik1[4] = -4;
|
|||
|
Tik1[5] = -10;
|
|||
|
Tik1[6] = -12;
|
|||
|
Tik1[7] = -15;
|
|||
|
|
|||
|
Pai = P0 / (ptAGA10.Pc * 1000000);
|
|||
|
Tuo = T0 / ptAGA10.TC;
|
|||
|
for (int i = 0; i <= 7; i += 1)
|
|||
|
{
|
|||
|
C0 = (double)(C0 + nik0[i] * Math.Pow(Pai, Sik0[i]) * Math.Pow(Tuo, Tik0[i]));
|
|||
|
C1 = (double)(C1 + nik1[i] * Math.Pow(Pai, Sik1[i]) * Math.Pow(Tuo, Tik1[i]));
|
|||
|
}
|
|||
|
b = 25.879 * Math.Pow(BetaB, 6) - 32.693 * Math.Pow(BetaB, 5) + 34.276 * Math.Pow(BetaB, 4) - 6.0199 * Math.Pow(BetaB, 3) - 1.1156 * Math.Pow(BetaB, 2) - 0.1122 * BetaB + 0.0047;
|
|||
|
F0 = 1 + b * C0;
|
|||
|
F1 = 1 + b * C1;
|
|||
|
return (1 - Rf) * F0 + Rf * F1;
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 材料膨胀系数计算
|
|||
|
/// </summary>
|
|||
|
/// <param name="tempCaiLiao"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static double CaiLiaoPzxs(int tempCaiLiao)
|
|||
|
{
|
|||
|
double CaiLiaoPzxs = 0;
|
|||
|
// 孔板和管道材料的膨胀系数
|
|||
|
// 0 A3、15号钢
|
|||
|
// 1 10 号钢
|
|||
|
// 2 20 号钢
|
|||
|
// 3 45 号钢
|
|||
|
// 4 1 Cr13?2Cr13
|
|||
|
// 5 Cr17
|
|||
|
// 6 12 CrMoV
|
|||
|
// 7 10 CrMo910
|
|||
|
// 8 Cr6SiMo
|
|||
|
// 9 X20CrMoV121
|
|||
|
// 10 1 Cr18Ni9Ti
|
|||
|
// 11 普通碳钢
|
|||
|
// 12 工业用铜
|
|||
|
// 13 黄铜
|
|||
|
// 14 红铜
|
|||
|
switch (tempCaiLiao)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
CaiLiaoPzxs = 11.75;
|
|||
|
break;
|
|||
|
|
|||
|
case 1:
|
|||
|
CaiLiaoPzxs = 11.6;
|
|||
|
break;
|
|||
|
|
|||
|
case 2:
|
|||
|
CaiLiaoPzxs = 11.16;
|
|||
|
break;
|
|||
|
|
|||
|
case 3:
|
|||
|
CaiLiaoPzxs = 11.59;
|
|||
|
break;
|
|||
|
|
|||
|
case 4:
|
|||
|
CaiLiaoPzxs = 10.5;
|
|||
|
break;
|
|||
|
|
|||
|
case 5:
|
|||
|
CaiLiaoPzxs = 10D;
|
|||
|
break;
|
|||
|
|
|||
|
case 6:
|
|||
|
CaiLiaoPzxs = 10.2;
|
|||
|
break;
|
|||
|
|
|||
|
case 7:
|
|||
|
CaiLiaoPzxs = 15.5;
|
|||
|
break;
|
|||
|
|
|||
|
case 8:
|
|||
|
CaiLiaoPzxs = 11.5;
|
|||
|
break;
|
|||
|
|
|||
|
case 9:
|
|||
|
CaiLiaoPzxs = 10.8;
|
|||
|
break;
|
|||
|
|
|||
|
case 10:
|
|||
|
CaiLiaoPzxs = 16.6;
|
|||
|
break;
|
|||
|
|
|||
|
case 11:
|
|||
|
CaiLiaoPzxs = 11.4;
|
|||
|
break;
|
|||
|
|
|||
|
case 12:
|
|||
|
CaiLiaoPzxs = 16.55;
|
|||
|
break;
|
|||
|
|
|||
|
case 13:
|
|||
|
CaiLiaoPzxs = 17.8;
|
|||
|
break;
|
|||
|
|
|||
|
case 14:
|
|||
|
CaiLiaoPzxs = 17.2;
|
|||
|
break;
|
|||
|
}
|
|||
|
return CaiLiaoPzxs;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 计算重复性
|
|||
|
/// </summary>
|
|||
|
/// <param name="data"></param>
|
|||
|
/// <param name="Num"></param>
|
|||
|
/// <param name="DataAver"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static double DataEr(ref double DataAver, double[] data, int Num = 0) /* = 0.0 */
|
|||
|
{
|
|||
|
double DataEr = 0;
|
|||
|
int n = 0;
|
|||
|
int i = 0;
|
|||
|
double DataSum = 0;
|
|||
|
// 重复性计算
|
|||
|
|
|||
|
if (Num == 0)
|
|||
|
{
|
|||
|
n = data.GetUpperBound(0) + 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
n = Num;
|
|||
|
}
|
|||
|
if (n <= 1)
|
|||
|
{
|
|||
|
return DataEr;
|
|||
|
}
|
|||
|
DataSum = 0;
|
|||
|
for (i = 0; i <= n - 1; i += 1)
|
|||
|
{
|
|||
|
DataSum = DataSum + data[i];
|
|||
|
}
|
|||
|
DataAver = DataSum / n;
|
|||
|
|
|||
|
DataSum = 0;
|
|||
|
for (i = 0; i <= n - 1; i += 1)
|
|||
|
{
|
|||
|
DataSum = DataSum + Math.Pow((data[i] - DataAver), 2);
|
|||
|
}
|
|||
|
|
|||
|
DataSum = Math.Sqrt(DataSum / (n - 1));
|
|||
|
|
|||
|
DataEr = DataSum * 100 / DataAver; // 重复性
|
|||
|
return DataEr;
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 计算平均值
|
|||
|
/// </summary>
|
|||
|
/// <param name="data"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static double DataAVG(double[] data)
|
|||
|
{
|
|||
|
double DataAVG = 0;
|
|||
|
int n = 0;
|
|||
|
int i = 0;
|
|||
|
double DataSum = 0;
|
|||
|
// 平均值
|
|||
|
DataAVG = 0;
|
|||
|
n = data.GetUpperBound(0) + 1;
|
|||
|
DataSum = 0;
|
|||
|
for (i = 0; i <= n - 1; i += 1)
|
|||
|
{
|
|||
|
DataSum = DataSum + data[i];
|
|||
|
}
|
|||
|
DataAVG = DataSum / n;
|
|||
|
|
|||
|
return DataAVG;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取数组中的最大值
|
|||
|
/// </summary>
|
|||
|
/// <param name="MyArray"></param>
|
|||
|
/// <param name="NumMin"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static double GetMax(double[] MyArray, ref double NumMin /* = 0.0 */)
|
|||
|
{
|
|||
|
int gIterations = 0;
|
|||
|
int Index = 0;
|
|||
|
double temp = 0;
|
|||
|
int NextElement = 0;
|
|||
|
// 获得一个数组中的最大值
|
|||
|
NextElement = 0;
|
|||
|
while ((NextElement < MyArray.GetUpperBound(0)))
|
|||
|
{
|
|||
|
Index = MyArray.GetUpperBound(0);
|
|||
|
while ((Index > NextElement))
|
|||
|
{
|
|||
|
if (MyArray[Index] >= MyArray[Index - 1])
|
|||
|
{
|
|||
|
temp = MyArray[Index];
|
|||
|
MyArray[Index] = MyArray[Index - 1];
|
|||
|
MyArray[Index - 1] = temp;
|
|||
|
}
|
|||
|
Index = Index - 1;
|
|||
|
gIterations = gIterations + 1;
|
|||
|
}
|
|||
|
NextElement = NextElement + 1;
|
|||
|
gIterations = gIterations + 1;
|
|||
|
}
|
|||
|
NumMin = MyArray[MyArray.GetUpperBound(0)];
|
|||
|
return MyArray[0];
|
|||
|
}
|
|||
|
|
|||
|
// #########################################################################
|
|||
|
// ######################'流量转换 标况转工况##############################
|
|||
|
// ########################################################################
|
|||
|
public static double FlowConvert_BaseToWork(ref NG_Cal.FlowParStruct flPar, ref NG_Cal.GasPropsSTRUCT ptAGA10)
|
|||
|
{
|
|||
|
double tempPn = 0;
|
|||
|
double tempTn = 0;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
|
|||
|
if (ptAGA10.dZf == 0 || ptAGA10.dZb == 0)
|
|||
|
{
|
|||
|
return 0.0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
switch (ptAGA10.dCbtj)
|
|||
|
{
|
|||
|
case 2:
|
|||
|
tempPn = 101325;
|
|||
|
tempTn = 273.15;
|
|||
|
break;
|
|||
|
|
|||
|
case 1:
|
|||
|
tempPn = 101325;
|
|||
|
tempTn = 288.15;
|
|||
|
break;
|
|||
|
|
|||
|
case 0:
|
|||
|
tempPn = 101325;
|
|||
|
tempTn = 293.15;
|
|||
|
break;
|
|||
|
|
|||
|
case 3:
|
|||
|
tempPn = 10155981;
|
|||
|
tempTn = 288.7055555;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
flPar.dVFlowf = flPar.dVFlowb * (tempPn * flPar.dTf * ptAGA10.dZf) / (flPar.dPf * tempTn * ptAGA10.dZb);
|
|||
|
return flPar.dVFlowf;
|
|||
|
// WARNING: ErrDo: is not supported
|
|||
|
}
|
|||
|
catch (Exception exc)
|
|||
|
{
|
|||
|
return 0.0;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// #########################################################################
|
|||
|
// ######################流量转换工况转标况##############################
|
|||
|
// ########################################################################
|
|||
|
public static double FlowConvert_WorkToBase(ref NG_Cal.FlowParStruct flPar, ref NG_Cal.GasPropsSTRUCT ptAGA10)
|
|||
|
{
|
|||
|
double tempPn = 0;
|
|||
|
double tempTn = 0;
|
|||
|
|
|||
|
// WARNING: On Error GOTO ErrDo is not supported
|
|||
|
try
|
|||
|
{
|
|||
|
|
|||
|
switch (ptAGA10.dCbtj)
|
|||
|
{
|
|||
|
case 2:
|
|||
|
tempPn = 101325;
|
|||
|
tempTn = 273.15;
|
|||
|
break;
|
|||
|
|
|||
|
case 1:
|
|||
|
tempPn = 101325;
|
|||
|
tempTn = 288.15;
|
|||
|
break;
|
|||
|
|
|||
|
case 0:
|
|||
|
tempPn = 101325;
|
|||
|
tempTn = 293.15;
|
|||
|
break;
|
|||
|
|
|||
|
case 3:
|
|||
|
tempPn = 0.10155981;
|
|||
|
tempTn = 288.7055555;
|
|||
|
break;
|
|||
|
}
|
|||
|
flPar.dVFlowb = flPar.dVFlowf * (flPar.dPf * tempTn * ptAGA10.dZb) / (tempPn * flPar.dTf * ptAGA10.dZf);
|
|||
|
return flPar.dVFlowb;
|
|||
|
// WARNING: ErrDo: is not supported
|
|||
|
}
|
|||
|
catch (Exception exc)
|
|||
|
{
|
|||
|
return 0.0;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//压力损失计算
|
|||
|
public double YaLiSunShi(double tempLiuChuXiShu, double tempZjb, double tempDp, int JieLiuZhuangZhi)
|
|||
|
{
|
|||
|
double ylss = 0;
|
|||
|
switch (JieLiuZhuangZhi)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
ylss = (tempDp * (Math.Sqrt(1 - tempZjb) - tempLiuChuXiShu * Math.Pow(tempZjb, 2)) / (Math.Sqrt(1 - tempZjb) + tempLiuChuXiShu * Math.Pow(tempZjb, 2)));
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
ylss = (tempDp * (Math.Sqrt(1 - tempZjb) - tempLiuChuXiShu * Math.Pow(tempZjb, 2)) / (Math.Sqrt(1 - tempZjb) + tempLiuChuXiShu * Math.Pow(tempZjb, 2)));
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
ylss = (tempDp * (Math.Sqrt(1 - tempZjb) - tempLiuChuXiShu * Math.Pow(tempZjb, 2)) / (Math.Sqrt(1 - tempZjb) + tempLiuChuXiShu * Math.Pow(tempZjb, 2)));
|
|||
|
break;
|
|||
|
}
|
|||
|
return ylss;
|
|||
|
}
|
|||
|
//查表计算粘度μ
|
|||
|
// VBConversions Note: Former VB static variables moved to class level because they aren't supported in C#.
|
|||
|
private double[,] Dlndjs_Dlnd_Data = new double[8, 11];
|
|||
|
private double[] Dlndjs_Dlnd_T = new double[8];
|
|||
|
private double[] Dlndjs_Dlnd_P = new double[11];
|
|||
|
|
|||
|
public double Dlndjs(double tempP_jy, double tempT, int PU, int TU)
|
|||
|
{
|
|||
|
// static double[,] Dlnd_Data = new double[8, 11]; //VBConversions Note: Static variable moved to class level and renamed Dlndjs_Dlnd_Data. Local static variables are not supported in C#.
|
|||
|
// static double[] Dlnd_T = new double[8]; //VBConversions Note: Static variable moved to class level and renamed Dlndjs_Dlnd_T. Local static variables are not supported in C#.
|
|||
|
// static double[] Dlnd_P = new double[11]; //VBConversions Note: Static variable moved to class level and renamed Dlndjs_Dlnd_P. Local static variables are not supported in C#.
|
|||
|
double s1 = 0;
|
|||
|
double s2 = 0;
|
|||
|
double ky = 0;
|
|||
|
double kx = 0;
|
|||
|
long i = 0;
|
|||
|
long m = 0;
|
|||
|
long n = 0;
|
|||
|
//On Error Resume Next VBConversions Warning: On Error Resume Next not supported in C#
|
|||
|
Dlndjs_Dlnd_T[0] = (double)(-15 + 273.15);
|
|||
|
Dlndjs_Dlnd_T[1] = (double)(0 + 273.15);
|
|||
|
Dlndjs_Dlnd_T[2] = (double)(15 + 273.15);
|
|||
|
Dlndjs_Dlnd_T[3] = (double)(30 + 273.15);
|
|||
|
Dlndjs_Dlnd_T[4] = (double)(45 + 273.15);
|
|||
|
Dlndjs_Dlnd_T[5] = (double)(60 + 273.15);
|
|||
|
Dlndjs_Dlnd_T[6] = (double)(75 + 273.15);
|
|||
|
Dlndjs_Dlnd_T[7] = (double)(90 + 273.15);
|
|||
|
|
|||
|
Dlndjs_Dlnd_P[0] = 0.1F;
|
|||
|
Dlndjs_Dlnd_P[1] = 1;
|
|||
|
Dlndjs_Dlnd_P[2] = 2;
|
|||
|
Dlndjs_Dlnd_P[3] = 3;
|
|||
|
Dlndjs_Dlnd_P[4] = 4;
|
|||
|
Dlndjs_Dlnd_P[5] = 5;
|
|||
|
Dlndjs_Dlnd_P[6] = 6;
|
|||
|
Dlndjs_Dlnd_P[7] = 7;
|
|||
|
Dlndjs_Dlnd_P[8] = 8;
|
|||
|
Dlndjs_Dlnd_P[9] = 9;
|
|||
|
Dlndjs_Dlnd_P[10] = 10;
|
|||
|
Dlndjs_Dlnd_Data[0, 0] = 976;
|
|||
|
Dlndjs_Dlnd_Data[1, 0] = 1027;
|
|||
|
Dlndjs_Dlnd_Data[2, 0] = 1071;
|
|||
|
Dlndjs_Dlnd_Data[3, 0] = 1123;
|
|||
|
Dlndjs_Dlnd_Data[4, 0] = 1167;
|
|||
|
Dlndjs_Dlnd_Data[5, 0] = 1213;
|
|||
|
Dlndjs_Dlnd_Data[6, 0] = 1260;
|
|||
|
Dlndjs_Dlnd_Data[7, 0] = 1303;
|
|||
|
Dlndjs_Dlnd_Data[0, 1] = 991;
|
|||
|
Dlndjs_Dlnd_Data[1, 1] = 1040;
|
|||
|
Dlndjs_Dlnd_Data[2, 1] = 1082;
|
|||
|
Dlndjs_Dlnd_Data[3, 1] = 1135;
|
|||
|
Dlndjs_Dlnd_Data[4, 1] = 1178;
|
|||
|
Dlndjs_Dlnd_Data[5, 1] = 1224;
|
|||
|
Dlndjs_Dlnd_Data[6, 1] = 1270;
|
|||
|
Dlndjs_Dlnd_Data[7, 1] = 1312;
|
|||
|
Dlndjs_Dlnd_Data[0, 2] = 1014;
|
|||
|
Dlndjs_Dlnd_Data[1, 2] = 1063;
|
|||
|
Dlndjs_Dlnd_Data[2, 2] = 1106;
|
|||
|
Dlndjs_Dlnd_Data[3, 2] = 1153;
|
|||
|
Dlndjs_Dlnd_Data[4, 2] = 1196;
|
|||
|
Dlndjs_Dlnd_Data[5, 2] = 1239;
|
|||
|
Dlndjs_Dlnd_Data[6, 2] = 1281;
|
|||
|
Dlndjs_Dlnd_Data[7, 2] = 1323;
|
|||
|
Dlndjs_Dlnd_Data[0, 3] = 1044;
|
|||
|
Dlndjs_Dlnd_Data[1, 3] = 1091;
|
|||
|
Dlndjs_Dlnd_Data[2, 3] = 1127;
|
|||
|
Dlndjs_Dlnd_Data[3, 3] = 1174;
|
|||
|
Dlndjs_Dlnd_Data[4, 3] = 1216;
|
|||
|
Dlndjs_Dlnd_Data[5, 3] = 1257;
|
|||
|
Dlndjs_Dlnd_Data[6, 3] = 1297;
|
|||
|
Dlndjs_Dlnd_Data[7, 3] = 1338;
|
|||
|
Dlndjs_Dlnd_Data[0, 4] = 1073;
|
|||
|
Dlndjs_Dlnd_Data[1, 4] = 1118;
|
|||
|
Dlndjs_Dlnd_Data[2, 4] = 1149;
|
|||
|
Dlndjs_Dlnd_Data[3, 4] = 1195;
|
|||
|
Dlndjs_Dlnd_Data[4, 4] = 1236;
|
|||
|
Dlndjs_Dlnd_Data[5, 4] = 1275;
|
|||
|
Dlndjs_Dlnd_Data[6, 4] = 1313;
|
|||
|
Dlndjs_Dlnd_Data[7, 4] = 1352;
|
|||
|
Dlndjs_Dlnd_Data[0, 5] = 1114;
|
|||
|
Dlndjs_Dlnd_Data[1, 5] = 1151;
|
|||
|
Dlndjs_Dlnd_Data[2, 5] = 1180;
|
|||
|
Dlndjs_Dlnd_Data[3, 5] = 1224;
|
|||
|
Dlndjs_Dlnd_Data[4, 5] = 1261;
|
|||
|
Dlndjs_Dlnd_Data[5, 5] = 1297;
|
|||
|
Dlndjs_Dlnd_Data[6, 5] = 1333;
|
|||
|
Dlndjs_Dlnd_Data[7, 5] = 1372;
|
|||
|
Dlndjs_Dlnd_Data[0, 6] = 1156;
|
|||
|
Dlndjs_Dlnd_Data[1, 6] = 1185;
|
|||
|
Dlndjs_Dlnd_Data[2, 6] = 1211;
|
|||
|
Dlndjs_Dlnd_Data[3, 6] = 1253;
|
|||
|
Dlndjs_Dlnd_Data[4, 6] = 1287;
|
|||
|
Dlndjs_Dlnd_Data[5, 6] = 1320;
|
|||
|
Dlndjs_Dlnd_Data[6, 6] = 1352;
|
|||
|
Dlndjs_Dlnd_Data[7, 6] = 1391;
|
|||
|
Dlndjs_Dlnd_Data[0, 7] = 1207;
|
|||
|
Dlndjs_Dlnd_Data[1, 7] = 1230;
|
|||
|
Dlndjs_Dlnd_Data[2, 7] = 1250;
|
|||
|
Dlndjs_Dlnd_Data[3, 7] = 1289;
|
|||
|
Dlndjs_Dlnd_Data[4, 7] = 1318;
|
|||
|
Dlndjs_Dlnd_Data[5, 7] = 1346;
|
|||
|
Dlndjs_Dlnd_Data[6, 7] = 1374;
|
|||
|
Dlndjs_Dlnd_Data[7, 7] = 1412;
|
|||
|
Dlndjs_Dlnd_Data[0, 8] = 1261;
|
|||
|
Dlndjs_Dlnd_Data[1, 8] = 1276;
|
|||
|
Dlndjs_Dlnd_Data[2, 8] = 1289;
|
|||
|
Dlndjs_Dlnd_Data[3, 8] = 1324;
|
|||
|
Dlndjs_Dlnd_Data[4, 8] = 1350;
|
|||
|
Dlndjs_Dlnd_Data[5, 8] = 1373;
|
|||
|
Dlndjs_Dlnd_Data[6, 8] = 1396;
|
|||
|
Dlndjs_Dlnd_Data[7, 8] = 1432;
|
|||
|
Dlndjs_Dlnd_Data[0, 9] = 1331;
|
|||
|
Dlndjs_Dlnd_Data[1, 9] = 1331;
|
|||
|
Dlndjs_Dlnd_Data[2, 9] = 1335;
|
|||
|
Dlndjs_Dlnd_Data[3, 9] = 1366;
|
|||
|
Dlndjs_Dlnd_Data[4, 9] = 1385;
|
|||
|
Dlndjs_Dlnd_Data[5, 9] = 1403;
|
|||
|
Dlndjs_Dlnd_Data[6, 9] = 1424;
|
|||
|
Dlndjs_Dlnd_Data[7, 9] = 1456;
|
|||
|
Dlndjs_Dlnd_Data[0, 10] = 1405;
|
|||
|
Dlndjs_Dlnd_Data[1, 10] = 1389;
|
|||
|
Dlndjs_Dlnd_Data[2, 10] = 1383;
|
|||
|
Dlndjs_Dlnd_Data[3, 10] = 1409;
|
|||
|
Dlndjs_Dlnd_Data[4, 10] = 1421;
|
|||
|
Dlndjs_Dlnd_Data[5, 10] = 1435;
|
|||
|
Dlndjs_Dlnd_Data[6, 10] = 1451;
|
|||
|
Dlndjs_Dlnd_Data[7, 10] = 1482;
|
|||
|
|
|||
|
if (tempT < Dlndjs_Dlnd_T[0])
|
|||
|
{
|
|||
|
tempT = Dlndjs_Dlnd_T[0];
|
|||
|
}
|
|||
|
if (tempT > Dlndjs_Dlnd_T[7])
|
|||
|
{
|
|||
|
tempT = Dlndjs_Dlnd_T[7];
|
|||
|
}
|
|||
|
if (tempP_jy < Dlndjs_Dlnd_P[0])
|
|||
|
{
|
|||
|
tempP_jy = Dlndjs_Dlnd_P[0];
|
|||
|
}
|
|||
|
if (tempP_jy > Dlndjs_Dlnd_P[10])
|
|||
|
{
|
|||
|
tempP_jy = Dlndjs_Dlnd_P[10];
|
|||
|
}
|
|||
|
|
|||
|
for (i = 0; i <= 6; i++)
|
|||
|
{
|
|||
|
if (tempT >= Dlndjs_Dlnd_T[i] && tempT <= Dlndjs_Dlnd_T[(int)(i + 1)])
|
|||
|
{
|
|||
|
m = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for (i = 0; i <= 9; i++)
|
|||
|
{
|
|||
|
if (tempP_jy >= Dlndjs_Dlnd_P[i] && tempP_jy <= Dlndjs_Dlnd_P[(int)(i + 1)])
|
|||
|
{
|
|||
|
n = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (Dlndjs_Dlnd_P[(int)(n + 1)] - Dlndjs_Dlnd_P[n] != 0)
|
|||
|
{
|
|||
|
ky = (double)((tempP_jy - Dlndjs_Dlnd_P[n]) / (Dlndjs_Dlnd_P[(int)(n + 1)] - Dlndjs_Dlnd_P[n]));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ky = 0;
|
|||
|
}
|
|||
|
if (Dlndjs_Dlnd_T[(int)(m + 1)] - Dlndjs_Dlnd_T[m] != 0)
|
|||
|
{
|
|||
|
kx = (double)((tempT - Dlndjs_Dlnd_T[m]) / (Dlndjs_Dlnd_T[(int)(m + 1)] - Dlndjs_Dlnd_T[m]));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
kx = 0;
|
|||
|
}
|
|||
|
s1 = Dlndjs_Dlnd_Data[m, n] + (Dlndjs_Dlnd_Data[m, (int)(n + 1)] - Dlndjs_Dlnd_Data[m, n]) * ky;
|
|||
|
s2 = Dlndjs_Dlnd_Data[(int)(m + 1), n] + (Dlndjs_Dlnd_Data[(int)(m + 1), (int)(n + 1)] - Dlndjs_Dlnd_Data[(int)(m + 1), n]) * ky;
|
|||
|
return (double)((s1 + (s2 - s1) * kx) / 100000.0D);
|
|||
|
}
|
|||
|
//可膨胀系数计算
|
|||
|
private double KePenZhang_JiSuan(double tempP_jy_MPa, double tempDp_Pa, double tempZjb, double tempDszs, int JIeliuType, int JiSuanBiaoZhun) // 求可膨胀系数
|
|||
|
{
|
|||
|
double returnValue = 0;
|
|||
|
//0标准孔板
|
|||
|
//1ISA1932喷嘴
|
|||
|
//2长径喷嘴
|
|||
|
//3文丘里喷嘴
|
|||
|
//4粗铸收缩段经典文丘里管
|
|||
|
//5机械加工收缩段经典文丘里管
|
|||
|
//6粗焊铁板收缩段经典文丘里管
|
|||
|
//7 1/4圆孔板
|
|||
|
|
|||
|
double tuo = 0;
|
|||
|
switch (JIeliuType)
|
|||
|
{
|
|||
|
case 0: //孔板流量计算
|
|||
|
switch (JiSuanBiaoZhun)
|
|||
|
{
|
|||
|
case 0: //6143-2004
|
|||
|
tuo = (double)((tempP_jy_MPa * 1000000.0D - tempDp_Pa) / (tempP_jy_MPa * 1000000.0D));
|
|||
|
returnValue = (double)(1 - (0.351 + 0.256 * Math.Pow(tempZjb, 4) + 0.93 * Math.Pow(tempZjb, 8)) * (1 - Math.Pow(tuo, (1 / tempDszs))));
|
|||
|
break;
|
|||
|
case 1: //6143-1996
|
|||
|
returnValue = (double)(1 - (0.41 + 0.35 * Math.Pow(tempZjb, 4)) * tempDp_Pa / (1000000 * tempP_jy_MPa * tempDszs));
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
case 2:
|
|||
|
case 3:
|
|||
|
case 4:
|
|||
|
case 5:
|
|||
|
case 6:
|
|||
|
switch (JiSuanBiaoZhun)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
|
|||
|
//标准喷嘴 iso5167-2002
|
|||
|
tuo = (double)((tempP_jy_MPa * 10000000.0D - tempDp_Pa) / (tempP_jy_MPa * 10000000.0D));
|
|||
|
returnValue = (double)(Math.Pow((((tempDszs * Math.Pow(tuo, (2 / tempDszs))) / (tempDszs - 1)) * ((1 - Math.Pow(tempZjb, 4)) / (1 - Math.Pow(tempZjb, 4) * Math.Pow(tuo, (2 / tempDszs)))) * ((1 - Math.Pow(tuo, ((tempDszs - 1) / tempDszs))) / (1 - tuo))), 0.5));
|
|||
|
break;
|
|||
|
|
|||
|
case 1: //iso5167-93
|
|||
|
returnValue = (double)(1 - (0.41 + 0.35 * Math.Pow(tempZjb, 4)) * tempDp_Pa / (1000000 * tempP_jy_MPa * tempDszs));
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 7: //1/4圆孔板
|
|||
|
returnValue = (double)(1 - (0.41 + 0.35 * Math.Pow(tempZjb, 4)) * tempDp_Pa / (1000000 * tempP_jy_MPa * tempDszs));
|
|||
|
break;
|
|||
|
case 8: //锥形入口孔板
|
|||
|
tuo = (double)((tempP_jy_MPa * 1000000.0D - tempDp_Pa) / (tempP_jy_MPa * 1000000.0D));
|
|||
|
returnValue = (double)(1 - (0.351 + 0.256 * Math.Pow(tempZjb, 4) + 0.93 * Math.Pow(tempZjb, 8)) * (1 - Math.Pow(tuo, (1 / tempDszs))));
|
|||
|
|
|||
|
tuo = (double)((tempP_jy_MPa * 10000000.0D - tempDp_Pa) / (tempP_jy_MPa * 10000000.0D));
|
|||
|
|
|||
|
returnValue = (double)(0.5 * (returnValue + Math.Pow((((tempDszs * Math.Pow(tuo, (2 / tempDszs))) / (tempDszs - 1)) * ((1 - Math.Pow(tempZjb, 4)) / (1 - Math.Pow(tempZjb, 4) * Math.Pow(tuo, (2 / tempDszs)))) * ((1 - Math.Pow(tuo, ((tempDszs - 1) / tempDszs))) / (1 - tuo))), 0.5)));
|
|||
|
break;
|
|||
|
case 9: //偏心孔板
|
|||
|
returnValue = (double)(1 - (0.41 + 0.35 * Math.Pow(tempZjb, 4)) * tempDp_Pa / (1000000 * tempP_jy_MPa * tempDszs));
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
return returnValue;
|
|||
|
}
|
|||
|
//流出系数计算
|
|||
|
public double C_JiSuan(double tempGj, double tempZjb, double tempReD, double tempconQvA, int tempQyfs, int JieLiuType, int JiSuanBiaoZhun)
|
|||
|
{
|
|||
|
double returnValue = 0;
|
|||
|
//流出系数计算函数
|
|||
|
//输入:直径比,雷诺数,取压方式,节流装置类型,计算采用标准
|
|||
|
//输出:流出系数
|
|||
|
|
|||
|
//jieliutype
|
|||
|
|
|||
|
//0标准孔板
|
|||
|
//1ISA1932喷嘴
|
|||
|
//2长径喷嘴
|
|||
|
//3文丘里喷嘴
|
|||
|
//4粗铸收缩段经典文丘里管
|
|||
|
//5机械加工收缩段经典文丘里管
|
|||
|
//6粗焊铁板收缩段经典文丘里管
|
|||
|
|
|||
|
double L1 = 0;
|
|||
|
double L2 = 0;
|
|||
|
switch (JieLiuType)
|
|||
|
{
|
|||
|
case 0: //孔板
|
|||
|
switch (tempQyfs)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
L1 = (double)(25.4 / tempGj);
|
|||
|
L2 = L1;
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
L1 = 0;
|
|||
|
L2 = 0;
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
L1 = 1;
|
|||
|
L2 = (double)(0.47F);
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
switch (JiSuanBiaoZhun)
|
|||
|
{
|
|||
|
case 0: //6143-2004
|
|||
|
if (tempGj >= 71.12)
|
|||
|
{
|
|||
|
returnValue = (double)(0.5961 +
|
|||
|
0.0261 * Math.Pow(tempZjb, 2) -
|
|||
|
0.216 * Math.Pow(tempZjb, 8) +
|
|||
|
0.000521 * Math.Pow((1000000.0D * tempZjb / tempReD), 0.7) +
|
|||
|
(0.0188 + 0.0063 * Math.Pow((19000 * tempZjb / tempReD), 0.8)) *
|
|||
|
Math.Pow(tempZjb, 3.5) * Math.Pow((1000000.0D / tempReD), 0.3) +
|
|||
|
(0.043 + 0.08 * Math.Exp(-10 * L1) - 0.123 * Math.Exp(-7 * L1)) *
|
|||
|
(1 - 0.11 * Math.Pow((19000 * tempZjb / tempReD), 0.8)) *
|
|||
|
(Math.Pow(tempZjb, 4) * Math.Pow((1 - Math.Pow(tempZjb, 4)), (-1))) -
|
|||
|
0.031 * (2 * L2 / (1 - tempZjb) -
|
|||
|
0.8 * Math.Pow((2 * L2 / (1 - tempZjb)), 1.1)) * Math.Pow(tempZjb, 1.3));
|
|||
|
|
|||
|
}
|
|||
|
else if (tempGj < 71.12)
|
|||
|
{
|
|||
|
returnValue = (0.5961 + 0.0261 * Math.Pow(tempZjb, 2) - 0.216 * Math.Pow(tempZjb, 8) + 0.000521 * Math.Pow((1000000.0D * tempZjb / tempReD), 0.7) + (0.0188 + 0.0063 * Math.Pow((19000 * tempZjb / tempReD), 0.8)) * Math.Pow(tempZjb, 3.5) * Math.Pow((1000000.0D / tempReD), 0.3) + (0.043 + 0.08 * Math.Exp(-10 * L1) - 0.123 * Math.Exp(-7 * L1)) * (1 - 0.11 * Math.Pow((19000 * tempZjb / tempReD), 0.8)) * Math.Pow(tempZjb, 4) * Math.Pow((1 - Math.Pow(tempZjb, 4)), (-1)) - 0.031 * (2 * L2 / (1 - tempZjb) - 0.8 * Math.Pow((2 * L2 * (1 - tempZjb)), 1.1)) * Math.Pow(tempZjb, 1.3) + 0.011 * (0.75 - tempZjb) * (2.8 - tempGj / 25.4));
|
|||
|
}
|
|||
|
break;
|
|||
|
case 1: //6143-1996
|
|||
|
if (0.09 * L1 >= 0.039)
|
|||
|
{
|
|||
|
returnValue = (double)(0.5959 + 0.0312 * Math.Pow(tempZjb, (2.1)) - 0.184 * Math.Pow(tempZjb, 8) + 0.0029 * Math.Pow(tempZjb, 2.5) * Math.Pow((1000000.0D / tempReD), 0.75) + 0.039 * Math.Pow(tempZjb, 4) * Math.Pow((1 - Math.Pow(tempZjb, 4)), (-1)) - 0.0337 * L1 * Math.Pow(tempZjb, 3));
|
|||
|
}
|
|||
|
else if (0.09 * L1 < 0.039)
|
|||
|
{
|
|||
|
returnValue = (0.5959 + 0.0312 * Math.Pow(tempZjb, (2.1)) - 0.184 * Math.Pow(tempZjb, 8) + 0.0029 * Math.Pow(tempZjb, 2.5) * Math.Pow((1000000.0D / tempReD), 0.75) + 0.09 * L1 * Math.Pow(tempZjb, 4) * Math.Pow((1 - Math.Pow(tempZjb, 4)), (-1)) - 0.0337 * L1 * Math.Pow(tempZjb, 3));
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
case 1: //ISA1932喷嘴
|
|||
|
returnValue = (0.99 - 0.2262 * Math.Pow(tempZjb, 4.1) - (0.00175 * Math.Pow(tempZjb, 2) - 0.0033 * Math.Pow(tempZjb, 4.15)) * (1000000.0D / Math.Pow(tempReD, 1.15)));
|
|||
|
break;
|
|||
|
|
|||
|
case 2: //长径喷嘴
|
|||
|
returnValue = (0.9965 - 0.00653 * Math.Pow(tempZjb, 0.5) * Math.Pow((1000000.0D / tempReD), 0.5));
|
|||
|
break;
|
|||
|
case 3: //文丘里喷嘴
|
|||
|
returnValue = (0.9858 - 0.196 * Math.Pow(tempZjb, 4.5));
|
|||
|
break;
|
|||
|
case 4: //粗铸收缩段经典文丘里管
|
|||
|
returnValue = (0.984F);
|
|||
|
break;
|
|||
|
case 5: //机械加工收缩段经典文丘里管
|
|||
|
returnValue = (0.995F);
|
|||
|
break;
|
|||
|
case 6: //粗焊铁板收缩段经典文丘里管
|
|||
|
returnValue = (0.985F);
|
|||
|
break;
|
|||
|
case 7: //1/4圆孔板
|
|||
|
returnValue = 0.73823 - 0.3309 * tempZjb - 1.1615 * Math.Pow(tempZjb, 2) + 1.5084 * Math.Pow(tempZjb, 3);
|
|||
|
break;
|
|||
|
case 8: //锥形入口孔板
|
|||
|
returnValue = (0.734F);
|
|||
|
break;
|
|||
|
case 9: //偏心孔板
|
|||
|
returnValue = (double)(0.9355 - 1.6889 * tempZjb + 3.0428 * Math.Pow(tempZjb, 2) - 1.7989 * Math.Pow(tempZjb, 3));
|
|||
|
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
double tempRed1 = 0;
|
|||
|
switch (JieLiuType)
|
|||
|
{
|
|||
|
case 0: //孔板流量计算
|
|||
|
tempRed1 = tempconQvA * returnValue;
|
|||
|
switch (JieLiuType)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
if (tempRed1 < (170 * Math.Pow(tempZjb, 2) * tempGj))
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过标准孔板的使用范围!停止计算!", "提示");
|
|||
|
return returnValue;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
if (tempZjb >= 0.1 & tempZjb <= 0.56)
|
|||
|
{
|
|||
|
if (tempRed1 < 5000)
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过标准喷嘴的使用范围!停止计算!", "提示");
|
|||
|
return returnValue;
|
|||
|
}
|
|||
|
}
|
|||
|
if (tempZjb > 0.56)
|
|||
|
{
|
|||
|
if (tempRed1 < (16000 * Math.Pow(tempZjb, 2) * tempGj))
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过标准喷嘴的使用范围!停止计算!", "提示");
|
|||
|
return returnValue;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case 1: //标准喷嘴
|
|||
|
tempRed1 = tempconQvA * returnValue;
|
|||
|
if (tempZjb >= 0.3 & tempZjb < 0.44)
|
|||
|
{
|
|||
|
if (tempRed1 < 70000 | tempRed1 > 10000000.0D)
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过标准喷嘴的使用范围!停止计算!", "提示");
|
|||
|
}
|
|||
|
}
|
|||
|
if (tempZjb >= 0.44 & tempZjb < 0.8)
|
|||
|
{
|
|||
|
if (tempRed1 < 20000 | tempRed1 > 10000000.0D)
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过标准喷嘴的使用范围!停止计算!", "提示");
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
case 2: //长径喷嘴
|
|||
|
tempRed1 = tempconQvA * returnValue;
|
|||
|
if (tempRed1 < 10000.0D | tempRed1 > 10000000.0D)
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过长径喷嘴的使用范围!停止计算!", "提示");
|
|||
|
}
|
|||
|
break;
|
|||
|
case 3: //文丘里喷嘴
|
|||
|
tempRed1 = tempconQvA * returnValue;
|
|||
|
if (tempRed1 < 150000.0D | tempRed1 > 2000000.0D)
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过文丘里喷嘴的使用范围!停止计算!", "提示");
|
|||
|
}
|
|||
|
break;
|
|||
|
case 4: //粗铸收缩段经典文丘里管
|
|||
|
tempRed1 = tempconQvA * returnValue;
|
|||
|
if (tempRed1 < 200000.0D | tempRed1 > 2000000.0D)
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过粗铸收缩段经典文丘里管的使用范围!停止计算!", "提示");
|
|||
|
return returnValue;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 5: //机械加工收缩段经典文丘里管
|
|||
|
tempRed1 = tempconQvA * returnValue;
|
|||
|
if (tempRed1 < 200000.0D | tempRed1 > 1000000.0D)
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过机械加工收缩段经典文丘里管的使用范围!停止计算!", "提示");
|
|||
|
}
|
|||
|
break;
|
|||
|
case 6: //粗焊铁板收缩段经典文丘里管
|
|||
|
tempRed1 = tempconQvA * returnValue;
|
|||
|
if (tempRed1 < 200000.0D | tempRed1 > 2000000.0D)
|
|||
|
{
|
|||
|
MessageBox.Show("雷诺数超过粗焊铁板收缩段经典文丘里管的使用范围!停止计算!", "提示");
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
//标准孔板
|
|||
|
//ISA1932喷嘴
|
|||
|
//长径喷嘴
|
|||
|
//文丘里喷嘴
|
|||
|
//粗铸收缩段经典文丘里管
|
|||
|
//机械加工收缩段经典文丘里管
|
|||
|
//粗焊铁板收缩段经典文丘里管
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
return returnValue;
|
|||
|
}
|
|||
|
//管道 孔板膨胀后尺寸计算
|
|||
|
private double Work_Cd(int tempCaiLiao, double tempWd_C, double tempCD20)
|
|||
|
{
|
|||
|
//孔板和管道材料的膨胀系数 6143标准
|
|||
|
//0 A3、15号钢
|
|||
|
//1 10 号钢
|
|||
|
//2 20 号钢
|
|||
|
//3 45 号钢
|
|||
|
//4 1 Cr13?2Cr13
|
|||
|
//5 Cr17
|
|||
|
//6 12 CrMoV
|
|||
|
//7 10 CrMo910
|
|||
|
//8 Cr6SiMo
|
|||
|
//9 X20CrMoV121
|
|||
|
//10 1 Cr18Ni9Ti
|
|||
|
//11 普通碳钢
|
|||
|
//12 工业用铜
|
|||
|
//13 黄铜
|
|||
|
//14 红铜
|
|||
|
double CaiLiaoPzxs = 0;
|
|||
|
switch (tempCaiLiao)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
CaiLiaoPzxs = (double)(11.75F);
|
|||
|
|
|||
|
CaiLiaoPzxs = (double)(11.6F);
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
CaiLiaoPzxs = (double)(11.16F);
|
|||
|
|
|||
|
CaiLiaoPzxs = (double)(11.59F);
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
CaiLiaoPzxs = (double)(10.5F);
|
|||
|
|
|||
|
CaiLiaoPzxs = 10.0F;
|
|||
|
break;
|
|||
|
case 6:
|
|||
|
CaiLiaoPzxs = (double)(10.2F);
|
|||
|
|
|||
|
CaiLiaoPzxs = (double)(15.5F);
|
|||
|
break;
|
|||
|
case 8:
|
|||
|
CaiLiaoPzxs = (double)(11.5F);
|
|||
|
|
|||
|
CaiLiaoPzxs = (double)(10.8F);
|
|||
|
break;
|
|||
|
case 10:
|
|||
|
CaiLiaoPzxs = (double)(16.6F);
|
|||
|
|
|||
|
CaiLiaoPzxs = (double)(11.4F);
|
|||
|
break;
|
|||
|
case 12:
|
|||
|
CaiLiaoPzxs = (double)(16.55F);
|
|||
|
|
|||
|
CaiLiaoPzxs = (double)(17.8F);
|
|||
|
break;
|
|||
|
case 14:
|
|||
|
CaiLiaoPzxs = (double)(17.2F);
|
|||
|
break;
|
|||
|
}
|
|||
|
return (double)(tempCD20 * (1 + 0.000001 * CaiLiaoPzxs * (tempWd_C - 20)));
|
|||
|
}
|
|||
|
//查表计算孔板尖锐度系数bk
|
|||
|
// VBConversions Note: Former VB static variables moved to class level because they aren't supported in C#.
|
|||
|
private double[] BkTable_x = new double[10];
|
|||
|
private double[] BkTable_Y = new double[10];
|
|||
|
|
|||
|
private double BkTable(double temPrk, double tempKj, int tempBkjsff)
|
|||
|
{
|
|||
|
|
|||
|
//On Error Resume Next VBConversions Warning: On Error Resume Next not supported in C#
|
|||
|
|
|||
|
if (tempBkjsff == 1)
|
|||
|
{
|
|||
|
|
|||
|
double tempRkBiKj = 0;
|
|||
|
tempRkBiKj = temPrk / tempKj;
|
|||
|
|
|||
|
// static double[] x = new double[10]; //VBConversions Note: Static variable moved to class level and renamed BkTable_x. Local static variables are not supported in C#.
|
|||
|
// static double[] Y = new double[10]; //VBConversions Note: Static variable moved to class level and renamed BkTable_Y. Local static variables are not supported in C#.
|
|||
|
long i = 0;
|
|||
|
long xIndex = 0;
|
|||
|
//If x(0) = 0 Then
|
|||
|
BkTable_x[0] = 0.0004F;
|
|||
|
BkTable_x[1] = 0.001F;
|
|||
|
BkTable_x[2] = 0.002F;
|
|||
|
BkTable_x[3] = 0.004F;
|
|||
|
BkTable_x[4] = 0.006F;
|
|||
|
BkTable_x[5] = 0.008F;
|
|||
|
BkTable_x[6] = 0.01F;
|
|||
|
BkTable_x[7] = 0.012F;
|
|||
|
BkTable_x[8] = 0.014F;
|
|||
|
BkTable_x[9] = 0.015F;
|
|||
|
|
|||
|
BkTable_Y[0] = 1;
|
|||
|
BkTable_Y[1] = 1.005F;
|
|||
|
BkTable_Y[2] = 1.012F;
|
|||
|
BkTable_Y[3] = 1.022F;
|
|||
|
BkTable_Y[4] = 1.032F;
|
|||
|
BkTable_Y[5] = 1.04F;
|
|||
|
BkTable_Y[6] = 1.048F;
|
|||
|
BkTable_Y[7] = 1.055F;
|
|||
|
BkTable_Y[8] = 1.062F;
|
|||
|
BkTable_Y[9] = 1.065F;
|
|||
|
//End If
|
|||
|
|
|||
|
if (tempRkBiKj <= 0.0004)
|
|||
|
{
|
|||
|
return 1;
|
|||
|
|
|||
|
}
|
|||
|
if (tempRkBiKj > 0.015)
|
|||
|
{
|
|||
|
return (double)(1.065F);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
for (i = 0; i <= 8; i++)
|
|||
|
{
|
|||
|
if (tempRkBiKj >= BkTable_x[i] && tempRkBiKj <= BkTable_x[(int)(i + 1)])
|
|||
|
{
|
|||
|
xIndex = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return (double)(BkTable_Y[xIndex] + (tempRkBiKj - BkTable_x[xIndex]) * (BkTable_Y[(int)(xIndex + 1)] - BkTable_Y[xIndex]) / (BkTable_x[(int)(xIndex + 1)] - BkTable_x[xIndex]));
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
//管道粗糙度计算
|
|||
|
private double CcdXsjs(double tempPipeType, double tempGj, double tempZjb, double TempRed)
|
|||
|
{
|
|||
|
double returnValue = 0;
|
|||
|
//粗糙度系数计算
|
|||
|
double Jdccd = 0; //绝对粗糙度
|
|||
|
double Xdccd = 0; //相对粗糙度
|
|||
|
//Dim CcdXs As single
|
|||
|
double s1 = 0;
|
|||
|
double s2 = 0;
|
|||
|
double ky = 0;
|
|||
|
double kx = 0;
|
|||
|
long i = 0;
|
|||
|
long m = 0;
|
|||
|
long n = 0;
|
|||
|
if (tempPipeType == 0)
|
|||
|
{
|
|||
|
Jdccd = (double)(0.029F);
|
|||
|
|
|||
|
Jdccd = (double)(0.075F);
|
|||
|
}
|
|||
|
else if (tempPipeType == 2)
|
|||
|
{
|
|||
|
Jdccd = (double)(0.075F);
|
|||
|
|
|||
|
Jdccd = (double)(0.075F);
|
|||
|
}
|
|||
|
else if (tempPipeType == 4)
|
|||
|
{
|
|||
|
Jdccd = (double)(0.1F);
|
|||
|
|
|||
|
Jdccd = (double)(0.15F);
|
|||
|
}
|
|||
|
else if (tempPipeType == 6)
|
|||
|
{
|
|||
|
Jdccd = 1;
|
|||
|
|
|||
|
Jdccd = (double)(2.1F);
|
|||
|
}
|
|||
|
else if (tempPipeType == 8)
|
|||
|
{
|
|||
|
Jdccd = (double)(0.04F);
|
|||
|
|
|||
|
Jdccd = (double)(0.15F);
|
|||
|
}
|
|||
|
else if (tempPipeType == 10)
|
|||
|
{
|
|||
|
Jdccd = (double)(0.13F);
|
|||
|
|
|||
|
Jdccd = (double)(0.25F);
|
|||
|
}
|
|||
|
Xdccd = tempGj / Jdccd;
|
|||
|
if (Xdccd < 400)
|
|||
|
{
|
|||
|
MessageBox.Show("粗糙度取得太高,粗略计算", "提示");
|
|||
|
Xdccd = 400;
|
|||
|
}
|
|||
|
if (Xdccd >= 3400)
|
|||
|
{
|
|||
|
Xdccd = 3400;
|
|||
|
}
|
|||
|
|
|||
|
if (Xdccd < 3200 & Math.Pow(tempZjb, 2) > 0.1 & Math.Pow(tempZjb, 2) < 0.64)
|
|||
|
{
|
|||
|
|
|||
|
int[] Xdccdb = new int[10];
|
|||
|
double[] Btf = new double[8];
|
|||
|
double[,] CcdXsb = new double[10, 8];
|
|||
|
|
|||
|
Xdccdb[0] = 400;
|
|||
|
Xdccdb[1] = 800;
|
|||
|
Xdccdb[2] = 1200;
|
|||
|
Xdccdb[3] = 1600;
|
|||
|
Xdccdb[4] = 2000;
|
|||
|
Xdccdb[5] = 2400;
|
|||
|
Xdccdb[6] = 2800;
|
|||
|
Xdccdb[7] = 3200;
|
|||
|
Xdccdb[8] = 3400;
|
|||
|
|
|||
|
Btf[0] = 0.1F;
|
|||
|
Btf[1] = 0.2F;
|
|||
|
Btf[2] = 0.3F;
|
|||
|
Btf[3] = 0.4F;
|
|||
|
Btf[4] = 0.5F;
|
|||
|
Btf[5] = 0.6F;
|
|||
|
Btf[6] = 0.64F;
|
|||
|
|
|||
|
CcdXsb[0, 0] = 1.002;
|
|||
|
CcdXsb[1, 0] = 1;
|
|||
|
CcdXsb[2, 0] = 1;
|
|||
|
CcdXsb[3, 0] = 1;
|
|||
|
CcdXsb[4, 0] = 1;
|
|||
|
CcdXsb[5, 0] = 1;
|
|||
|
CcdXsb[6, 0] = 1;
|
|||
|
CcdXsb[7, 0] = 1;
|
|||
|
CcdXsb[8, 0] = 1;
|
|||
|
CcdXsb[0, 1] = 1.003;
|
|||
|
CcdXsb[1, 1] = 1.002;
|
|||
|
CcdXsb[2, 1] = 1.001;
|
|||
|
CcdXsb[3, 1] = 1;
|
|||
|
CcdXsb[4, 1] = 1;
|
|||
|
CcdXsb[5, 1] = 1;
|
|||
|
CcdXsb[6, 1] = 1;
|
|||
|
CcdXsb[7, 1] = 1;
|
|||
|
CcdXsb[8, 0] = 1;
|
|||
|
CcdXsb[0, 2] = 1.006;
|
|||
|
CcdXsb[1, 2] = 1.004;
|
|||
|
CcdXsb[2, 2] = 1.002;
|
|||
|
CcdXsb[3, 2] = 1.001;
|
|||
|
CcdXsb[4, 2] = 1;
|
|||
|
CcdXsb[5, 2] = 1;
|
|||
|
CcdXsb[6, 2] = 1;
|
|||
|
CcdXsb[7, 2] = 1;
|
|||
|
CcdXsb[8, 0] = 1;
|
|||
|
CcdXsb[0, 3] = 1.009;
|
|||
|
CcdXsb[1, 3] = 1.006;
|
|||
|
CcdXsb[2, 3] = 1.004;
|
|||
|
CcdXsb[3, 3] = 1.002;
|
|||
|
CcdXsb[4, 3] = 1.001;
|
|||
|
CcdXsb[5, 3] = 1;
|
|||
|
CcdXsb[6, 3] = 1;
|
|||
|
CcdXsb[7, 3] = 1;
|
|||
|
CcdXsb[8, 0] = 1;
|
|||
|
CcdXsb[0, 4] = 1.014;
|
|||
|
CcdXsb[1, 4] = 1.009;
|
|||
|
CcdXsb[2, 4] = 1.006;
|
|||
|
CcdXsb[3, 4] = 1.004;
|
|||
|
CcdXsb[4, 4] = 1.002;
|
|||
|
CcdXsb[5, 4] = 1.001;
|
|||
|
CcdXsb[6, 4] = 1;
|
|||
|
CcdXsb[7, 4] = 1;
|
|||
|
CcdXsb[8, 0] = 1;
|
|||
|
CcdXsb[0, 5] = 1.02;
|
|||
|
CcdXsb[1, 5] = 1.013;
|
|||
|
CcdXsb[2, 5] = 1.009;
|
|||
|
CcdXsb[3, 5] = 1.006;
|
|||
|
CcdXsb[4, 5] = 1.003;
|
|||
|
CcdXsb[5, 5] = 1.002;
|
|||
|
CcdXsb[6, 5] = 1;
|
|||
|
CcdXsb[7, 5] = 1;
|
|||
|
CcdXsb[8, 0] = 1;
|
|||
|
CcdXsb[0, 6] = 1.024;
|
|||
|
CcdXsb[1, 6] = 1.016;
|
|||
|
CcdXsb[2, 6] = 1.011;
|
|||
|
CcdXsb[3, 6] = 1.007;
|
|||
|
CcdXsb[4, 6] = 1.004;
|
|||
|
CcdXsb[5, 6] = 1.002;
|
|||
|
CcdXsb[6, 6] = 1.002;
|
|||
|
CcdXsb[7, 6] = 1;
|
|||
|
CcdXsb[8, 0] = 1;
|
|||
|
|
|||
|
for (i = 0; i <= 8; i++)
|
|||
|
{
|
|||
|
if (Xdccd >= Xdccdb[i] && Xdccd <= Xdccdb[(int)(i + 1)])
|
|||
|
{
|
|||
|
m = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
for (i = 0; i <= 6; i++)
|
|||
|
{
|
|||
|
if (Math.Pow(tempZjb, 2) >= Btf[i] && Math.Pow(tempZjb, 2) <= Btf[(int)(i + 1)])
|
|||
|
{
|
|||
|
n = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
ky = (Btf[(int)(n + 1)] - Btf[n] != 0) ? ((Math.Pow(tempZjb, 2) - Btf[n]) / (Btf[(int)(n + 1)] - Btf[n])) : 0;
|
|||
|
|
|||
|
kx = (Xdccdb[(int)(m + 1)] - Xdccdb[m] != 0) ? ((Xdccd - Xdccdb[m]) / (Xdccdb[(int)(m + 1)] - Xdccdb[m])) : 0;
|
|||
|
|
|||
|
s1 = CcdXsb[m, n] + (CcdXsb[m, (int)(n + 1)] - CcdXsb[m, n]) * ky;
|
|||
|
s2 = CcdXsb[(int)(m + 1), n] + (CcdXsb[(int)(m + 1), (int)(n + 1)] - CcdXsb[(int)(m + 1), n]) * ky;
|
|||
|
returnValue = s1 + (s2 - s1) * kx;
|
|||
|
|
|||
|
returnValue = TempRed > 1000000.0 ? returnValue : ((returnValue - 1) * Math.Pow((Math.Log10(TempRed) / 2), 2) + 1);
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
returnValue = 1;
|
|||
|
}
|
|||
|
return returnValue;
|
|||
|
}
|
|||
|
//流量换算 工况 标况转寰
|
|||
|
public double LiuLiang_Zhuanghuan(double tempQ, double tempP_jy_MPa, double tempT_Kai, double tempZn, double tempZ, int ZhuanHuanFangXiang, double tempPn, double tempTn)
|
|||
|
{
|
|||
|
//流量转换
|
|||
|
|
|||
|
|
|||
|
double temp = 0;
|
|||
|
|
|||
|
|
|||
|
//double tempPn = 0;
|
|||
|
//double tempTn = 0;
|
|||
|
//switch (tempCbtj)
|
|||
|
//{
|
|||
|
// case 0:
|
|||
|
// tempPn = (double) (0.101325F);
|
|||
|
// tempTn = (double) (293.15F);
|
|||
|
// break;
|
|||
|
// case 1:
|
|||
|
// tempPn = (double) (0.101325F);
|
|||
|
// tempTn = (double) (288.15F);
|
|||
|
// break;
|
|||
|
// case 2:
|
|||
|
// tempPn = (double) (0.101325F);
|
|||
|
// tempTn = (double) (273.15F);
|
|||
|
// break;
|
|||
|
// case 3:
|
|||
|
// tempPn = (double) (0.10155981F);
|
|||
|
// tempTn = (double) (288.7055555F);
|
|||
|
// break;
|
|||
|
// // Case 4
|
|||
|
// // LlCs6143.Qn = LlCs6143.Qn * tempLiuChuXiShubT * 0.101325 * llcs6143.ZnZdy / (293.15 * tempLiuChuXiShubP * llcs6143.Zn)
|
|||
|
//}
|
|||
|
|
|||
|
switch (ZhuanHuanFangXiang)
|
|||
|
{
|
|||
|
case 0: //工况转标况
|
|||
|
temp = tempQ * (tempP_jy_MPa * tempTn * tempZn) / (tempPn * tempT_Kai * tempZ);
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
temp = tempQ * (tempPn * tempT_Kai * tempZ) / (tempP_jy_MPa * tempTn * tempZn);
|
|||
|
break;
|
|||
|
}
|
|||
|
return temp;
|
|||
|
}
|
|||
|
//计算等熵指数
|
|||
|
public double Dszs(ref double Pjy, ref double T, ref int PU, ref int TU)
|
|||
|
{
|
|||
|
return Cpjs(ref Pjy, ref T, PU, TU) / Cvjs(ref Pjy, ref T, PU, TU);
|
|||
|
}
|
|||
|
//查表计算甲烷的定压比热Cv
|
|||
|
// VBConversions Note: Former VB static variables moved to class level because they aren't supported in C#.
|
|||
|
private double[,] Cvjs_Cv_Data = new double[8, 11];
|
|||
|
private double[] Cvjs_Cv_T = new double[8];
|
|||
|
private double[] Cvjs_Cv_P = new double[11];
|
|||
|
|
|||
|
public double Cvjs(ref double tempP_jy, ref double tempT, int PU, int TU)
|
|||
|
{
|
|||
|
// static double[,] Cv_Data = new double[8, 11]; //VBConversions Note: Static variable moved to class level and renamed Cvjs_Cv_Data. Local static variables are not supported in C#.
|
|||
|
// static double[] Cv_T = new double[8]; //VBConversions Note: Static variable moved to class level and renamed Cvjs_Cv_T. Local static variables are not supported in C#.
|
|||
|
// static double[] Cv_P = new double[11]; //VBConversions Note: Static variable moved to class level and renamed Cvjs_Cv_P. Local static variables are not supported in C#.
|
|||
|
double s1 = 0;
|
|||
|
double s2 = 0;
|
|||
|
double ky = 0;
|
|||
|
double kx = 0;
|
|||
|
long i = 0;
|
|||
|
long m = 0;
|
|||
|
long n = 0;
|
|||
|
//On Error Resume Next VBConversions Warning: On Error Resume Next not supported in C#
|
|||
|
Cvjs_Cv_T[0] = (double)(-20 + 273.15);
|
|||
|
Cvjs_Cv_T[1] = (double)(-10 + 273.15);
|
|||
|
Cvjs_Cv_T[2] = (double)(0 + 273.15);
|
|||
|
Cvjs_Cv_T[3] = (double)(10 + 273.15);
|
|||
|
Cvjs_Cv_T[4] = (double)(20 + 273.15);
|
|||
|
Cvjs_Cv_T[5] = (double)(30 + 273.15);
|
|||
|
Cvjs_Cv_T[6] = (double)(40 + 273.15);
|
|||
|
Cvjs_Cv_T[7] = (double)(50 + 273.15);
|
|||
|
|
|||
|
Cvjs_Cv_P[0] = 0.1F;
|
|||
|
Cvjs_Cv_P[1] = 1;
|
|||
|
Cvjs_Cv_P[2] = 2;
|
|||
|
Cvjs_Cv_P[3] = 3;
|
|||
|
Cvjs_Cv_P[4] = 4;
|
|||
|
Cvjs_Cv_P[5] = 5;
|
|||
|
Cvjs_Cv_P[6] = 6;
|
|||
|
Cvjs_Cv_P[7] = 7;
|
|||
|
Cvjs_Cv_P[8] = 8;
|
|||
|
Cvjs_Cv_P[9] = 9;
|
|||
|
Cvjs_Cv_P[10] = 10;
|
|||
|
Cvjs_Cv_Data[0, 0] = 1.537;
|
|||
|
Cvjs_Cv_Data[1, 0] = 1.583;
|
|||
|
Cvjs_Cv_Data[2, 0] = 1.624;
|
|||
|
Cvjs_Cv_Data[3, 0] = 1.666;
|
|||
|
Cvjs_Cv_Data[4, 0] = 1.704;
|
|||
|
Cvjs_Cv_Data[5, 0] = 1.746;
|
|||
|
Cvjs_Cv_Data[6, 0] = 1.788;
|
|||
|
Cvjs_Cv_Data[7, 0] = 1.825;
|
|||
|
Cvjs_Cv_Data[0, 1] = 1.5491;
|
|||
|
Cvjs_Cv_Data[1, 1] = 1.5951;
|
|||
|
Cvjs_Cv_Data[2, 1] = 1.641;
|
|||
|
Cvjs_Cv_Data[3, 1] = 1.683;
|
|||
|
Cvjs_Cv_Data[4, 1] = 1.725;
|
|||
|
Cvjs_Cv_Data[5, 1] = 1.771;
|
|||
|
Cvjs_Cv_Data[6, 1] = 1.804;
|
|||
|
Cvjs_Cv_Data[7, 1] = 1.842;
|
|||
|
Cvjs_Cv_Data[0, 2] = 1.5492;
|
|||
|
Cvjs_Cv_Data[1, 2] = 1.5952;
|
|||
|
Cvjs_Cv_Data[2, 2] = 1.649;
|
|||
|
Cvjs_Cv_Data[3, 2] = 1.695;
|
|||
|
Cvjs_Cv_Data[4, 2] = 1.745;
|
|||
|
Cvjs_Cv_Data[5, 2] = 1.787;
|
|||
|
Cvjs_Cv_Data[6, 2] = 1.825;
|
|||
|
Cvjs_Cv_Data[7, 2] = 1.859;
|
|||
|
Cvjs_Cv_Data[0, 3] = 1.5493;
|
|||
|
Cvjs_Cv_Data[1, 3] = 1.599;
|
|||
|
Cvjs_Cv_Data[2, 3] = 1.6621;
|
|||
|
Cvjs_Cv_Data[3, 3] = 1.712;
|
|||
|
Cvjs_Cv_Data[4, 3] = 1.766;
|
|||
|
Cvjs_Cv_Data[5, 3] = 1.808;
|
|||
|
Cvjs_Cv_Data[6, 3] = 1.842;
|
|||
|
Cvjs_Cv_Data[7, 3] = 1.871;
|
|||
|
Cvjs_Cv_Data[0, 4] = 1.581;
|
|||
|
Cvjs_Cv_Data[1, 4] = 1.623;
|
|||
|
Cvjs_Cv_Data[2, 4] = 1.6622;
|
|||
|
Cvjs_Cv_Data[3, 4] = 1.716;
|
|||
|
Cvjs_Cv_Data[4, 4] = 1.775;
|
|||
|
Cvjs_Cv_Data[5, 4] = 1.817;
|
|||
|
Cvjs_Cv_Data[6, 4] = 1.854;
|
|||
|
Cvjs_Cv_Data[7, 4] = 1.887;
|
|||
|
Cvjs_Cv_Data[0, 5] = 1.614;
|
|||
|
Cvjs_Cv_Data[1, 5] = 1.632;
|
|||
|
Cvjs_Cv_Data[2, 5] = 1.678;
|
|||
|
Cvjs_Cv_Data[3, 5] = 1.732;
|
|||
|
Cvjs_Cv_Data[4, 5] = 1.783;
|
|||
|
Cvjs_Cv_Data[5, 5] = 1.821;
|
|||
|
Cvjs_Cv_Data[6, 5] = 1.859;
|
|||
|
Cvjs_Cv_Data[7, 5] = 1.892;
|
|||
|
Cvjs_Cv_Data[0, 6] = 1.616;
|
|||
|
Cvjs_Cv_Data[1, 6] = 1.644;
|
|||
|
Cvjs_Cv_Data[2, 6] = 1.687;
|
|||
|
Cvjs_Cv_Data[3, 6] = 1.753;
|
|||
|
Cvjs_Cv_Data[4, 6] = 1.803;
|
|||
|
Cvjs_Cv_Data[5, 6] = 1.841;
|
|||
|
Cvjs_Cv_Data[6, 6] = 1.871;
|
|||
|
Cvjs_Cv_Data[7, 6] = 1.9;
|
|||
|
Cvjs_Cv_Data[0, 7] = 1.769;
|
|||
|
Cvjs_Cv_Data[1, 7] = 1.645;
|
|||
|
Cvjs_Cv_Data[2, 7] = 1.672;
|
|||
|
Cvjs_Cv_Data[3, 7] = 1.735;
|
|||
|
Cvjs_Cv_Data[4, 7] = 1.785;
|
|||
|
Cvjs_Cv_Data[5, 7] = 1.831;
|
|||
|
Cvjs_Cv_Data[6, 7] = 1.864;
|
|||
|
Cvjs_Cv_Data[7, 7] = 1.901;
|
|||
|
Cvjs_Cv_Data[0, 8] = 1.746;
|
|||
|
Cvjs_Cv_Data[1, 8] = 1.619;
|
|||
|
Cvjs_Cv_Data[2, 8] = 1.648;
|
|||
|
Cvjs_Cv_Data[3, 8] = 1.722;
|
|||
|
Cvjs_Cv_Data[4, 8] = 1.784;
|
|||
|
Cvjs_Cv_Data[5, 8] = 1.833;
|
|||
|
Cvjs_Cv_Data[6, 8] = 1.871;
|
|||
|
Cvjs_Cv_Data[7, 8] = 1.905;
|
|||
|
Cvjs_Cv_Data[0, 9] = 1.708;
|
|||
|
Cvjs_Cv_Data[1, 9] = 1.549;
|
|||
|
Cvjs_Cv_Data[2, 9] = 1.627;
|
|||
|
Cvjs_Cv_Data[3, 9] = 1.71;
|
|||
|
Cvjs_Cv_Data[4, 9] = 1.78;
|
|||
|
Cvjs_Cv_Data[5, 9] = 1.834;
|
|||
|
Cvjs_Cv_Data[6, 9] = 1.875;
|
|||
|
Cvjs_Cv_Data[7, 9] = 1.912;
|
|||
|
Cvjs_Cv_Data[0, 10] = 1.767;
|
|||
|
Cvjs_Cv_Data[1, 10] = 1.566;
|
|||
|
Cvjs_Cv_Data[2, 10] = 1.603;
|
|||
|
Cvjs_Cv_Data[3, 10] = 1.697;
|
|||
|
Cvjs_Cv_Data[4, 10] = 1.779;
|
|||
|
Cvjs_Cv_Data[5, 10] = 1.837;
|
|||
|
Cvjs_Cv_Data[6, 10] = 1.883;
|
|||
|
Cvjs_Cv_Data[7, 10] = 1.917;
|
|||
|
|
|||
|
if (tempT < Cvjs_Cv_T[0])
|
|||
|
{
|
|||
|
tempT = Cvjs_Cv_T[0];
|
|||
|
}
|
|||
|
if (tempT > Cvjs_Cv_T[7])
|
|||
|
{
|
|||
|
tempT = Cvjs_Cv_T[7];
|
|||
|
}
|
|||
|
if (tempP_jy < Cvjs_Cv_P[0])
|
|||
|
{
|
|||
|
tempP_jy = Cvjs_Cv_P[0];
|
|||
|
}
|
|||
|
if (tempP_jy > Cvjs_Cv_P[10])
|
|||
|
{
|
|||
|
tempP_jy = Cvjs_Cv_P[10];
|
|||
|
}
|
|||
|
|
|||
|
for (i = 0; i <= 6; i++)
|
|||
|
{
|
|||
|
if (tempT >= Cvjs_Cv_T[i] && tempT <= Cvjs_Cv_T[(int)(i + 1)])
|
|||
|
{
|
|||
|
m = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for (i = 0; i <= 9; i++)
|
|||
|
{
|
|||
|
if (tempP_jy >= Cvjs_Cv_P[i] && tempP_jy <= Cvjs_Cv_P[(int)(i + 1)])
|
|||
|
{
|
|||
|
n = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (Cvjs_Cv_P[(int)(n + 1)] - Cvjs_Cv_P[n] != 0)
|
|||
|
{
|
|||
|
ky = (double)((tempP_jy - Cvjs_Cv_P[n]) / (Cvjs_Cv_P[(int)(n + 1)] - Cvjs_Cv_P[n]));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ky = 0;
|
|||
|
}
|
|||
|
if (Cvjs_Cv_T[(int)(m + 1)] - Cvjs_Cv_T[m] != 0)
|
|||
|
{
|
|||
|
kx = (double)((tempT - Cvjs_Cv_T[m]) / (Cvjs_Cv_T[(int)(m + 1)] - Cvjs_Cv_T[m]));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
kx = 0;
|
|||
|
}
|
|||
|
s1 = Cvjs_Cv_Data[m, n] + (Cvjs_Cv_Data[m, (int)(n + 1)] - Cvjs_Cv_Data[m, n]) * ky;
|
|||
|
s2 = Cvjs_Cv_Data[(int)(m + 1), n] + (Cvjs_Cv_Data[(int)(m + 1), (int)(n + 1)] - Cvjs_Cv_Data[(int)(m + 1), n]) * ky;
|
|||
|
return s1 + (s2 - s1) * kx;
|
|||
|
}
|
|||
|
//查表计算甲烷的定压比热Cp
|
|||
|
// VBConversions Note: Former VB static variables moved to class level because they aren't supported in C#.
|
|||
|
private double[,] Cpjs_Cp_Data = new double[8, 11];
|
|||
|
private double[] Cpjs_Cp_T = new double[8];
|
|||
|
private double[] Cpjs_Cp_P = new double[11];
|
|||
|
|
|||
|
public double Cpjs(ref double tempP_jy, ref double tempT, int PU, int TU)
|
|||
|
{
|
|||
|
|
|||
|
// static double[,] Cp_Data = new double[8, 11]; //VBConversions Note: Static variable moved to class level and renamed Cpjs_Cp_Data. Local static variables are not supported in C#.
|
|||
|
// static double[] Cp_T = new double[8]; //VBConversions Note: Static variable moved to class level and renamed Cpjs_Cp_T. Local static variables are not supported in C#.
|
|||
|
// static double[] Cp_P = new double[11]; //VBConversions Note: Static variable moved to class level and renamed Cpjs_Cp_P. Local static variables are not supported in C#.
|
|||
|
double Cp1 = 0;
|
|||
|
double Cp2 = 0;
|
|||
|
double ky = 0;
|
|||
|
double kx = 0;
|
|||
|
long i = 0;
|
|||
|
long m = 0;
|
|||
|
long n = 0;
|
|||
|
//On Error Resume Next VBConversions Warning: On Error Resume Next not supported in C#
|
|||
|
Cpjs_Cp_T[0] = (double)(-20 + 273.15);
|
|||
|
Cpjs_Cp_T[1] = (double)(-10 + 273.15);
|
|||
|
Cpjs_Cp_T[2] = (double)(0 + 273.15);
|
|||
|
Cpjs_Cp_T[3] = (double)(10 + 273.15);
|
|||
|
Cpjs_Cp_T[4] = (double)(20 + 273.15);
|
|||
|
Cpjs_Cp_T[5] = (double)(30 + 273.15);
|
|||
|
Cpjs_Cp_T[6] = (double)(40 + 273.15);
|
|||
|
Cpjs_Cp_T[7] = (double)(50 + 273.15);
|
|||
|
|
|||
|
Cpjs_Cp_P[0] = 0.1F;
|
|||
|
Cpjs_Cp_P[1] = 1;
|
|||
|
Cpjs_Cp_P[2] = 2;
|
|||
|
Cpjs_Cp_P[3] = 3;
|
|||
|
Cpjs_Cp_P[4] = 4;
|
|||
|
Cpjs_Cp_P[5] = 5;
|
|||
|
Cpjs_Cp_P[6] = 6;
|
|||
|
Cpjs_Cp_P[7] = 7;
|
|||
|
Cpjs_Cp_P[8] = 8;
|
|||
|
Cpjs_Cp_P[9] = 9;
|
|||
|
Cpjs_Cp_P[10] = 10;
|
|||
|
Cpjs_Cp_Data[0, 0] = 2.064;
|
|||
|
Cpjs_Cp_Data[1, 0] = 2.11;
|
|||
|
Cpjs_Cp_Data[2, 0] = 2.152;
|
|||
|
Cpjs_Cp_Data[3, 0] = 2.194;
|
|||
|
Cpjs_Cp_Data[4, 0] = 2.231;
|
|||
|
Cpjs_Cp_Data[5, 0] = 2.273;
|
|||
|
Cpjs_Cp_Data[6, 0] = 2.315;
|
|||
|
Cpjs_Cp_Data[7, 0] = 2.357;
|
|||
|
Cpjs_Cp_Data[0, 1] = 2.147;
|
|||
|
Cpjs_Cp_Data[1, 1] = 2.184;
|
|||
|
Cpjs_Cp_Data[2, 1] = 2.222;
|
|||
|
Cpjs_Cp_Data[3, 1] = 2.26;
|
|||
|
Cpjs_Cp_Data[4, 1] = 2.298;
|
|||
|
Cpjs_Cp_Data[5, 1] = 2.335;
|
|||
|
Cpjs_Cp_Data[6, 1] = 2.369;
|
|||
|
Cpjs_Cp_Data[7, 1] = 2.403;
|
|||
|
Cpjs_Cp_Data[0, 2] = 2.242;
|
|||
|
Cpjs_Cp_Data[1, 2] = 2.267;
|
|||
|
Cpjs_Cp_Data[2, 2] = 2.305;
|
|||
|
Cpjs_Cp_Data[3, 2] = 2.338;
|
|||
|
Cpjs_Cp_Data[4, 2] = 2.376;
|
|||
|
Cpjs_Cp_Data[5, 2] = 2.406;
|
|||
|
Cpjs_Cp_Data[6, 2] = 2.435;
|
|||
|
Cpjs_Cp_Data[7, 2] = 2.46;
|
|||
|
Cpjs_Cp_Data[0, 3] = 2.357;
|
|||
|
Cpjs_Cp_Data[1, 3] = 2.366;
|
|||
|
Cpjs_Cp_Data[2, 3] = 2.391;
|
|||
|
Cpjs_Cp_Data[3, 3] = 2.421;
|
|||
|
Cpjs_Cp_Data[4, 3] = 2.455;
|
|||
|
Cpjs_Cp_Data[5, 3] = 2.48;
|
|||
|
Cpjs_Cp_Data[6, 3] = 2.501;
|
|||
|
Cpjs_Cp_Data[7, 3] = 2.518;
|
|||
|
Cpjs_Cp_Data[0, 4] = 2.492;
|
|||
|
Cpjs_Cp_Data[1, 4] = 2.481;
|
|||
|
Cpjs_Cp_Data[2, 4] = 2.486;
|
|||
|
Cpjs_Cp_Data[3, 4] = 2.507;
|
|||
|
Cpjs_Cp_Data[4, 4] = 2.533;
|
|||
|
Cpjs_Cp_Data[5, 4] = 2.55;
|
|||
|
Cpjs_Cp_Data[6, 4] = 2.563;
|
|||
|
Cpjs_Cp_Data[7, 4] = 2.576;
|
|||
|
Cpjs_Cp_Data[0, 5] = 2.664;
|
|||
|
Cpjs_Cp_Data[1, 5] = 2.604;
|
|||
|
Cpjs_Cp_Data[2, 5] = 2.593;
|
|||
|
Cpjs_Cp_Data[3, 5] = 2.606;
|
|||
|
Cpjs_Cp_Data[4, 5] = 2.615;
|
|||
|
Cpjs_Cp_Data[5, 5] = 2.624;
|
|||
|
Cpjs_Cp_Data[6, 5] = 2.629;
|
|||
|
Cpjs_Cp_Data[7, 5] = 2.638;
|
|||
|
Cpjs_Cp_Data[0, 6] = 2.868;
|
|||
|
Cpjs_Cp_Data[1, 6] = 2.728;
|
|||
|
Cpjs_Cp_Data[2, 6] = 2.696;
|
|||
|
Cpjs_Cp_Data[3, 6] = 2.696;
|
|||
|
Cpjs_Cp_Data[4, 6] = 2.696;
|
|||
|
Cpjs_Cp_Data[5, 6] = 2.695;
|
|||
|
Cpjs_Cp_Data[6, 6] = 2.694;
|
|||
|
Cpjs_Cp_Data[7, 6] = 2.692;
|
|||
|
Cpjs_Cp_Data[0, 7] = 3.311;
|
|||
|
Cpjs_Cp_Data[1, 7] = 3.001;
|
|||
|
Cpjs_Cp_Data[2, 7] = 2.906;
|
|||
|
Cpjs_Cp_Data[3, 7] = 2.872;
|
|||
|
Cpjs_Cp_Data[4, 7] = 2.849;
|
|||
|
Cpjs_Cp_Data[5, 7] = 2.834;
|
|||
|
Cpjs_Cp_Data[6, 7] = 2.814;
|
|||
|
Cpjs_Cp_Data[7, 7] = 2.803;
|
|||
|
Cpjs_Cp_Data[0, 8] = 3.485;
|
|||
|
Cpjs_Cp_Data[1, 8] = 3.128;
|
|||
|
Cpjs_Cp_Data[2, 8] = 3.005;
|
|||
|
Cpjs_Cp_Data[3, 8] = 2.956;
|
|||
|
Cpjs_Cp_Data[4, 8] = 2.924;
|
|||
|
Cpjs_Cp_Data[5, 8] = 2.9;
|
|||
|
Cpjs_Cp_Data[6, 8] = 2.875;
|
|||
|
Cpjs_Cp_Data[7, 8] = 2.859;
|
|||
|
Cpjs_Cp_Data[0, 9] = 3.633;
|
|||
|
Cpjs_Cp_Data[1, 9] = 3.236;
|
|||
|
Cpjs_Cp_Data[2, 9] = 3.092;
|
|||
|
Cpjs_Cp_Data[3, 9] = 3.034;
|
|||
|
Cpjs_Cp_Data[4, 9] = 2.994;
|
|||
|
Cpjs_Cp_Data[5, 9] = 2.954;
|
|||
|
Cpjs_Cp_Data[6, 9] = 2.932;
|
|||
|
Cpjs_Cp_Data[7, 9] = 2.904;
|
|||
|
Cpjs_Cp_Data[0, 10] = 3.778;
|
|||
|
Cpjs_Cp_Data[1, 10] = 3.347;
|
|||
|
Cpjs_Cp_Data[2, 10] = 3.179;
|
|||
|
Cpjs_Cp_Data[3, 10] = 3.109;
|
|||
|
Cpjs_Cp_Data[4, 10] = 3.06;
|
|||
|
Cpjs_Cp_Data[5, 10] = 3.018;
|
|||
|
Cpjs_Cp_Data[6, 10] = 2.986;
|
|||
|
Cpjs_Cp_Data[7, 10] = 2.953;
|
|||
|
|
|||
|
if (tempT < Cpjs_Cp_T[0])
|
|||
|
{
|
|||
|
tempT = Cpjs_Cp_T[0];
|
|||
|
}
|
|||
|
if (tempT > Cpjs_Cp_T[7])
|
|||
|
{
|
|||
|
tempT = Cpjs_Cp_T[7];
|
|||
|
}
|
|||
|
if (tempP_jy < Cpjs_Cp_P[0])
|
|||
|
{
|
|||
|
tempP_jy = Cpjs_Cp_P[0];
|
|||
|
}
|
|||
|
if (tempP_jy > Cpjs_Cp_P[10])
|
|||
|
{
|
|||
|
tempP_jy = Cpjs_Cp_P[10];
|
|||
|
}
|
|||
|
for (i = 0; i <= 6; i++)
|
|||
|
{
|
|||
|
if (tempT >= Cpjs_Cp_T[i] && tempT <= Cpjs_Cp_T[(int)(i + 1)])
|
|||
|
{
|
|||
|
m = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
for (i = 0; i <= 9; i++)
|
|||
|
{
|
|||
|
if (tempP_jy >= Cpjs_Cp_P[i] && tempP_jy <= Cpjs_Cp_P[(int)(i + 1)])
|
|||
|
{
|
|||
|
n = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if (Cpjs_Cp_P[(int)(n + 1)] - Cpjs_Cp_P[n] != 0)
|
|||
|
{
|
|||
|
ky = (double)((tempP_jy - Cpjs_Cp_P[n]) / (Cpjs_Cp_P[(int)(n + 1)] - Cpjs_Cp_P[n]));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ky = 0;
|
|||
|
}
|
|||
|
if (Cpjs_Cp_T[(int)(m + 1)] - Cpjs_Cp_T[m] != 0)
|
|||
|
{
|
|||
|
kx = (double)((tempT - Cpjs_Cp_T[m]) / (Cpjs_Cp_T[(int)(m + 1)] - Cpjs_Cp_T[m]));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
kx = 0;
|
|||
|
}
|
|||
|
Cp1 = Cpjs_Cp_Data[m, n] + (Cpjs_Cp_Data[m, (int)(n + 1)] - Cpjs_Cp_Data[m, n]) * ky;
|
|||
|
Cp2 = Cpjs_Cp_Data[(int)(m + 1), n] + (Cpjs_Cp_Data[(int)(m + 1), (int)(n + 1)] - Cpjs_Cp_Data[(int)(m + 1), n]) * ky;
|
|||
|
return Cp1 + (Cp2 - Cp1) * kx;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|