internal override double CalculateSinglePhaseHTC(double massFlowRate, double density, double bulkViscosity, double wallViscosity, double thermCond, double specificHeat) { double p = ratingModel.TubePitch.Value; //double ls = ratingModel.BaffleSpacing.Value; double lin = ratingModel.EntranceBaffleSpacing.Value; double lout = ratingModel.ExitBaffleSpacing.Value; double lc = baffleCutLengthValue; double Nc = tubeRowsInOneCrossFlowSetion; double Fc = fractionOfTotalTubesInCrossFlow; double Ncw = crossFlowRowsInEachWindow; double Sm = crossFlowArea; double Fbp = fractionOfCrossFlowAreaForBypass; double Stb = tubeToBaffleLeakageArea; double Ssb = shellToBaffleLeakageArea; double Sw = areaForFlowThroughWindow; double Dw = equivalentDiameterOfWindow; int Nb = ratingModel.NumberOfBaffles.Value; double Do = ratingModel.TubeOuterDiameter.Value; int Nss = ratingModel.SealingStrips.Value; TubeLayout layout = ratingModel.TubeLayout; double Re = Do * massFlowRate / (bulkViscosity * Sm); double jh = CalculateJh(Re, layout, Do, p); double h = specificHeat * massFlowRate / Sm * Math.Pow(thermCond / (specificHeat * bulkViscosity), 2.0 / 3.0) * Math.Pow(bulkViscosity / wallViscosity, 0.14); double ho = jh * h; double Jc = CalculateBaffleConfigFactor(Fc); double Jl = CalculateBaffleLeakageFactor(Sm, Ssb, Stb); double Jb = CalculateBundleBypassFactor(Re, Fbp, Nss, Nc); double Jr = CalculateAdverseTempGradientFactor(Re, Nb, Nc, Ncw); double Js = CalculateUneaqualBaffleSpacingFactor(Re, Nb, lin, lout, lc); double hs = ho * Jc * Jl * Jb * Jr * Js; return(hs); }
public void SetTubeLayout(TubeLayout tubeLayout) { if (tubeLayout == TubeLayout.InlineSquare) { this.comboBoxTubeLayout.SelectedIndex = HXRatingShellAndTubeBellDelawareValuesControl.INDEX_INLINE_SQUARE; } else if (tubeLayout == TubeLayout.RotatedSquare) { this.comboBoxTubeLayout.SelectedIndex = HXRatingShellAndTubeBellDelawareValuesControl.INDEX_ROTATED_SQUARE; } else if (tubeLayout == TubeLayout.Triangular) { this.comboBoxTubeLayout.SelectedIndex = HXRatingShellAndTubeBellDelawareValuesControl.INDEX_TRIANGULAR; } }
internal override double CalculateSinglePhaseDP(double massFlowRate, double density, double bulkViscosity, double wallViscosity) { double p = ratingModel.TubePitch.Value; double ls = ratingModel.BaffleSpacing.Value; double lc = baffleCutLengthValue; double lin = ratingModel.EntranceBaffleSpacing.Value; double lout = ratingModel.ExitBaffleSpacing.Value; double Nc = tubeRowsInOneCrossFlowSetion; double Ncw = crossFlowRowsInEachWindow; double Sm = crossFlowArea; double Fbp = fractionOfCrossFlowAreaForBypass; double Stb = tubeToBaffleLeakageArea; double Ssb = shellToBaffleLeakageArea; double Sw = areaForFlowThroughWindow; double Dw = equivalentDiameterOfWindow; int Nb = ratingModel.NumberOfBaffles.Value; double Do = ratingModel.TubeOuterDiameter.Value; int Nss = ratingModel.SealingStrips.Value; TubeLayout layout = ratingModel.TubeLayout; double Re = Do * massFlowRate / (bulkViscosity * Sm); if (Re <= 0.0) { Re = 1.0; } double Go = massFlowRate / Sm; double fs = CalculateTubeBankFrictionFactor(Re, layout, Do, p); double dPb = 2.0 * fs * Go * Go * Nc / density * Math.Pow(wallViscosity / bulkViscosity, 0.14); double Gw = massFlowRate / Math.Sqrt(Sm * Sw); double dPw = (0.026 * bulkViscosity * (Ncw / (p - Do) + ls / (Dw * Dw)) + Gw) * Gw / density; //for Re <= 100 if (Re > 100) { dPw = 0.5 * Gw * Gw * (2.0 + 0.6 * Ncw) / density; } double Rl = CalculateBaffleLeakageDpFactor(Sm, Ssb, Stb); double Rb = CalculateBundleBypassDpFactor(Re, Fbp, Nss, Nc); double Rs = CalculateUneaqualBaffleSpacingDpFactor(Re, Nb, lin, lout, lc); double dp = Rb * dPb * ((Nb - 1.0) * Rl + (1.0 + Ncw / Nc) * Rs) + Nb * Rl * dPw; return(dp); }
//Section 7-27 of Handbook of Chemical Engineering Calculations public static double CalculateTubeBanksHorizontalHTC_LaminarFlow(double massFlowRate, double length, double liqDensity, double liqViscosity, double liqThermalCond, TubeLayout tubeLayout, double tubePitch, double shellDiameter) { double a = 1.0; if (tubeLayout == TubeLayout.Triangular) { a = 0.951; } else if (tubeLayout == TubeLayout.RotatedSquare) { a = 0.904; } else if (tubeLayout == TubeLayout.InlineSquare) { a = 0.856; } double m = 1.0; if (tubeLayout == TubeLayout.Triangular) { m = 1.155; } else if (tubeLayout == TubeLayout.RotatedSquare) { m = 0.707; } else if (tubeLayout == TubeLayout.InlineSquare) { m = 1.0; } double Nr = m * shellDiameter / tubePitch; double tempValue = liqDensity * liqDensity * 9.8065 * length / (liqViscosity * massFlowRate); double h = a * liqThermalCond * Math.Pow(tempValue, 1.0 / 3.0) * Math.Pow(Nr, -1.0 / 6.0); return(h); }
//Section 7-27 of Handbook of Chemical Engineering Calculations public static double CalculateTubeBanksHorizontalHTC_VaporShearDominated(double massFlowRate, double diameter, double length, double liqDensity, double vapDensity, double liqViscosity, double liqThermalCond, double vaporQuality, TubeLayout tubeLayout, double tubePitch, double baffleSpacing, double shellDiameter) { double b = 1.0; if (tubeLayout == TubeLayout.Triangular) { b = 0.42; } else if (tubeLayout == TubeLayout.RotatedSquare) { b = 0.43; } else if (tubeLayout == TubeLayout.InlineSquare) { b = 0.39; } double m = 1.0; if (tubeLayout == TubeLayout.Triangular) { m = 1.155; } else if (tubeLayout == TubeLayout.RotatedSquare) { m = 0.707; } else if (tubeLayout == TubeLayout.InlineSquare) { m = 1.0; } double Nr = m * shellDiameter / tubePitch; double ac = baffleSpacing * shellDiameter * (tubePitch - diameter) / tubePitch; if (tubeLayout == TubeLayout.RotatedSquare) { ac = 1.5 * ac; } double vapFlowRate = massFlowRate * vaporQuality; double vc = vapFlowRate / (vapDensity * ac); double tempValue = diameter * liqDensity * vc / (liqViscosity); double h = b * liqThermalCond / diameter * Math.Pow(tempValue, 1.0 / 2.0) * Math.Pow(Nr, -1.0 / 6.0); return(h); }
private double CalculateTubeBankFrictionFactor(double Re, TubeLayout layout, double tubeOuterDiam, double tubePitch) { double b1 = 0.372; double b2 = -0.123; double b3 = 7.0; double b4 = 0.5; if (layout == TubeLayout.Triangular) { b3 = 7.0; b4 = 0.5; if (Re > 1.0e4) { b1 = 0.372; b2 = -0.123; } if (Re > 1.0e3) { b1 = 0.486; b2 = -0.152; } else if (Re > 1.0e2) { b1 = 0.457; b2 = -0.476; } else if (Re > 10.0) { b1 = 45.1; b2 = -0.973; } else { b1 = 48.0; b2 = -1.0; } } else if (layout == TubeLayout.InlineSquare) { b3 = 6.3; b4 = 0.378; if (Re > 1.0e4) { b1 = 0.391; b2 = -0.148; } if (Re > 1.0e3) { b1 = 0.0815; b2 = -0.022; } else if (Re > 1.0e2) { b1 = 6.09; b2 = -0.602; } else if (Re > 10.0) { b1 = 32.1; b2 = -0.963; } else { b1 = 35.0; b2 = -1.0; } } else if (layout == TubeLayout.RotatedSquare) { b3 = 6.59; b4 = 0.520; if (Re > 1.0e4) { b1 = 0.303; b2 = -0.126; } if (Re > 1.0e3) { b1 = 0.333; b2 = -0.136; } else if (Re > 1.0e2) { b1 = 3.50; b2 = -0.476; } else if (Re > 10.0) { b1 = 26.2; b2 = -0.913; } else { b1 = 32.0; b2 = -1.0; } } double b = b3 / (1.0 + 0.14 * Math.Pow(Re, b4)); double jFactor = b1 * Math.Pow(Re, b2) * Math.Pow(1.33 * tubeOuterDiam / tubePitch, b); return(jFactor); }
private double CalculateJh(double Re, TubeLayout layout, double tubeOuterDiam, double tubePitch) { double a1 = 0.321; double a2 = -0.388; double a3 = 1.45; double a4 = 0.519; if (layout == TubeLayout.Triangular) { a3 = 1.45; a4 = 0.519; if (Re > 1.0e3) { a1 = 0.321; a2 = -0.388; } else if (Re > 1.0e2) { a1 = 0.593; a2 = -0.477; } else if (Re > 10.0) { a1 = 1.36; a2 = -0.657; } else { a1 = 1.4; a2 = -0.667; } } else if (layout == TubeLayout.InlineSquare) { a3 = 1.187; a4 = 0.370; if (Re > 1.0e4) { a1 = 0.37; a2 = -0.395; } if (Re > 1.0e3) { a1 = 0.107; a2 = -0.266; } else if (Re > 1.0e2) { a1 = 0.408; a2 = -0.46; } else if (Re > 10.0) { a1 = 0.9; a2 = -0.631; } else { a1 = 0.97; a2 = -0.667; } } else if (layout == TubeLayout.RotatedSquare) { a3 = 1.93; a4 = 0.5; if (Re > 1.0e3) { a1 = 0.37; a2 = -0.396; } else if (Re > 1.0e2) { a1 = 0.73; a2 = -0.5; } else if (Re > 10.0) { a1 = 0.498; a2 = -0.656; } else { a1 = 1.55; a2 = -0.667; } } double a = a3 / (1.0 + 0.14 * Math.Pow(Re, a4)); double jh = a1 * Math.Pow(Re, a2) * Math.Pow((1.33 * tubeOuterDiam / tubePitch), a); return(jh); }
//Section 7-20 of Handbook of Chemical Engineering Calculations public static double CalculateTubeBanksHTC_Colburn(double massFlowRate, double diameter, double bulkViscosity, double wallViscosity, double thermalCond, double specificHeat, TubeLayout tubeLayout, double tubePitch, double baffleSpacing, double shellDiameter, bool withFouling) { double ac = baffleSpacing * shellDiameter * (tubePitch - diameter) / tubePitch; if (tubeLayout == TubeLayout.RotatedSquare) { ac = 1.5 * ac; } double massVelocity = massFlowRate / ac; double Re = diameter * massVelocity / bulkViscosity; double m = 1.0; double a = 1.0; if (Re > 200000) { if (tubeLayout == TubeLayout.Triangular || tubeLayout == TubeLayout.RotatedSquare) { m = 0.3; a = 0.166; } else if (tubeLayout == TubeLayout.InlineSquare) { m = 0.3; a = 0.124; } } else if (Re > 300 && Re <= 200000) { if (tubeLayout == TubeLayout.Triangular || tubeLayout == TubeLayout.RotatedSquare) { m = 0.365; a = 0.273; } else if (tubeLayout == TubeLayout.InlineSquare) { m = 0.349; a = 0.211; } } else if (Re < 300) { if (tubeLayout == TubeLayout.Triangular || tubeLayout == TubeLayout.RotatedSquare) { m = 0.64; a = 1.309; } else if (tubeLayout == TubeLayout.InlineSquare) { m = 0.569; a = 0.742; } } double Pr = specificHeat * bulkViscosity / thermalCond; double h = a * specificHeat * massVelocity / (Math.Pow(Re, m) * Math.Pow(Pr, 2.0 / 3.0) * Math.Pow(bulkViscosity / wallViscosity, 0.14)); double Fl = 0.8 * Math.Pow(baffleSpacing / shellDiameter, 1.0 / 4.0); if (withFouling) { Fl = 0.8 * Math.Pow(baffleSpacing / shellDiameter, 1.0 / 6.0); } double Fr = 1.0; if (Re < 100) { Fr = 0.2 * Math.Pow(Re, 1.0 / 3.0); } return(h * Fl * Fr); }