/// <summary>
        ///
        /// </summary>
        /// <param name="temperature"></param>
        /// <param name="pressure"></param>
        /// <returns>null if out of range</returns>
        public override PVTEntry GetEntryAtTemperatureAndPressure(double temperature, double pressure)
        {
            SteamEquationRegion equationRegion = FindRegion(temperature, pressure);
            IPVTEntryFactory    fac            = null;

            switch (equationRegion)
            {
            case SteamEquationRegion.Region1:
                fac = new Region1Factory(temperature, pressure);
                break;

            case SteamEquationRegion.Region2:
                fac = new Region2Factory(temperature, pressure, CriticalTemperature, CriticalPressure);
                break;

            case SteamEquationRegion.Region3:
                Range tempRange = GetTemperatureRange(pressure);
                fac = new Region3Factory(temperature, pressure, tempRange);
                break;

            case SteamEquationRegion.Region4:
                fac = new Region4Factory(temperature, pressure);
                break;

            case SteamEquationRegion.Region5:
                fac = new Region5Factory(temperature, pressure, CriticalTemperature, CriticalPressure);
                break;

            case SteamEquationRegion.OutOfRange:
            default:
                fac = null;
                break;
            }
            return(fac?.BuildThermoEntry());
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="satTemp">Must be between 273.15 and CriticalTemperature (in K)</param>
        /// <param name="phase"></param>
        /// <returns>null if out of range</returns>
        public override PVTEntry GetEntryAtSatTemp(double satTemp, SaturationRegion phase)
        {
            double?satPressure = GetSatPressure(satTemp);

            if (satPressure == null)
            {
                return(null);
            }
            IPVTEntryFactory fac = null;

            switch (phase)
            {
            case SaturationRegion.Liquid:
                fac = new Region1Factory(satTemp, satPressure.Value);
                break;

            case SaturationRegion.Vapor:
                fac = new Region2Factory(satTemp, satPressure.Value, CriticalTemperature, CriticalPressure);
                break;

            case SaturationRegion.Solid:
            default:
                fac = null;
                break;
            }
            return(fac?.BuildThermoEntry());
        }