示例#1
0
        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);
        }
示例#2
0
 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;
     }
 }
示例#3
0
        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);
        }
示例#4
0
        //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);
        }
示例#5
0
        //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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        //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);
        }