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); }