Esempio n. 1
0
        public static double CalculateWaterSaturationTemperature(double pressure)
        {
            double temperature = 1.0e-6;

            if (pressure < 1.0e-6)
            {
                pressure = 1.0e-6;
            }

            if (pressure <= 611.22) //temperature below the steam table can deal with
            //temperature = 193.03 + 28.633 * Math.Pow(pressure, 0.1609);
            {
                double a = Math.Log(pressure / 611.21);
                temperature = a * 240.97 / (17.502 - a) + 273.15;
            }
            else if (pressure > 611.22)
            {
                SteamTable steamTable = SteamTable.GetInstance();
                temperature = steamTable.GetSaturationTemperature(pressure);
            }

            /*//use correlation from Perry's to finalize
             * else {
             * //use simple correlation to do a rough estimation
             * temperature = 3816.44/(23.197 - Math.Log(pressure)) + 46.13;
             * double old_temp;
             * double fx;
             * double dfx;
             * int i = 0;
             * do {
             *    i++;
             *    old_temp = temperature;
             *    //direct iterative method
             *    //temperature = -7258.2/(Math.Log(pressure) - 73.649 + 7.3037 * Math.Log(old_temp)
             *    //   - 4.1653e-6 * old_temp * old_temp);
             *    //Newton iterative method--much better convergence speed
             *    fx = 73.649 - 7258.2/old_temp - 7.3037 * Math.Log(old_temp) + 4.1653e-6 * old_temp * old_temp - Math.Log(pressure);
             *    dfx = 7258.2/(old_temp * old_temp) - 7.3037/old_temp + 2.0 * 4.1653e-6 * old_temp;
             *    temperature = old_temp - fx/dfx;
             * } while (i < 500 && Math.Abs(temperature - old_temp) > 1.0e-6);
             * }*/

            return(temperature);
        }