using System; using System.Collections.Generic; using System.Text; using NG_Tools; using System.Windows.Forms; namespace NG_Tools { public class FlowCal { /// /// 标准孔板流量计算 /// /// /// /// public double OFlowCal(ref NG_Cal.GasPropsSTRUCT GasPar, ref NG_Cal.FlowParStruct FlowPar) { //将压力 温度 差压 当地大气压 压力量程 温度量程 和差压量程都换算到标准计算所使用的单位下的值 //UnitConvert Unc = new UnitConvert(); //FlowPar.dPipeD = Unc.Converter("cd", FlowPar.dPipeD, FlowPar.dLenUnit, 3, 5); //FlowPar.dOrificeD = Unc.Converter("cd", FlowPar.dOrificeD, FlowPar.dOrificeUnit, 3, 5); //FlowPar.dTf = Unc.Converter("wd", FlowPar.dTf, FlowPar.dTfUnit, 1, 5); //FlowPar.dPf = Unc.Converter("yl", FlowPar.dPf, FlowPar.dPfUnit, 0, 5); //FlowPar.dDp = Unc.Converter("yl", FlowPar.dDp, FlowPar.dDpUnit, 0, 5); // 考虑膨胀系数后的管道直径 // 考虑膨胀系数后的喉部直径 //直径比 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 = Dszs( FlowPar.dPf/1000000, FlowPar.dTf,2,1); //求动力粘度 dlnd FlowPar.dDViscosity = Dlndjs(FlowPar.dPf/1000000, 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)); conQvA = (double)(0.0000031795 * (1530000.0D * GasPar.dRD_Real / (FlowPar.dDViscosity * FlowPar.dPipeD)) * 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] =9999999999999999999.0F; _10000: for (n = 1; n <= 2; n++) { CQv[n] = C_JiSuan(FlowPar.dPipeD, 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.dPipeD * CQv[2] / (1530000.0D * GasPar.dRD_Real)); //管道雷诺数 FlowPar.dRnPipe = XQv[2]; //FlowPar.dRnPipe =1530000.0D*Qn*GasPar.dRD_Real /(FlowPar.dDViscosity*FlowPar.dPipeD); //流出系数 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.dHhvv); //管道内天然气流速 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; } /// /// 标准孔板流量计算 /// /// /// /// 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; } /// /// 天然气音速喷嘴流量计算 /// /// 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; } /// /// 材料膨胀系数计算 /// /// /// 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; } /// /// 计算重复性 /// /// /// /// /// 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; } /// /// 计算平均值 /// /// /// 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; } /// /// 获取数组中的最大值 /// /// /// /// 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( double Pjy, double T, int PU, int TU) { return Cpjs( Pjy, T, PU, TU) / Cvjs( Pjy, 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( double tempP_jy, 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( double tempP_jy, 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; } } }