public Substance(Pressure pressure, Enthalpy enthalpy) { Pressure = pressure; //Checking what region the Substanse belong to: //1. check if it is region 1 try { Temperature = new Temperature(Region1BackwardEquation_Tph.CalculateTemperature(pressure.Value, enthalpy.Value)); CalculateProperties(Temperature, Pressure); } catch (CantDetermineRegionException) { } if (SpecificEnthalpy!=null && Math.Round(SpecificEnthalpy.Value) == Math.Round(enthalpy.Value)) { //it is region 1 return; } //2. check if it is region 2 if (pressure.Value<=4) { Temperature = new Temperature(Region2aBackwardEquation_Tph.CalculateTemperature(pressure.Value, enthalpy.Value)); CalculateProperties(Temperature, Pressure); if (Math.Round(SpecificEnthalpy.Value, 1) == Math.Round(enthalpy.Value, 1)) { //it is region 2a return; } } else if (Region2B2bcEquation.is2cSubregion(pressure.Value, enthalpy.Value) == false) { Temperature = new Temperature(Region2bBackwardEquation_Tph.CalculateTemperature(pressure.Value, enthalpy.Value)); CalculateProperties(Temperature, Pressure); if (Math.Round(SpecificEnthalpy.Value, 1) == Math.Round(enthalpy.Value, 1)) { //it is region 2b return; } } else if (Region2B2bcEquation.is2cSubregion(pressure.Value, enthalpy.Value)) { Temperature = new Temperature(Region2cBackwardEquation_Tph.CalculateTemperature(pressure.Value, enthalpy.Value)); CalculateProperties(Temperature, Pressure); if (Math.Round(SpecificEnthalpy.Value, 1) == Math.Round(enthalpy.Value, 1)) { //it is region 2c return; } } else { throw new CantDetermineRegionException("It seems no region fits to these values pressure and enthalpy"); } }
public Substance(Pressure pressure, Entropy entropy) { Pressure = pressure; //Checking what region the Substanse belong to: //1. check if it is region 1 try { Temperature = new Temperature(Region1BackwardEquation_Tps.CalculateTemperature(pressure.Value, entropy.Value)); CalculateProperties(Temperature, Pressure); } catch (CantDetermineRegionException) { } if (SpecificEntropy!=null && Math.Round(SpecificEntropy.Value, 3) == Math.Round(entropy.Value, 3)) { //it is region 1 return; } //2. check if it is region 2 if (pressure.Value <= 4) { Temperature = new Temperature(Region2aBackwardEquation_Tps.CalculateTemperature(pressure.Value, entropy.Value )); CalculateProperties(Temperature, Pressure); if (Math.Round(SpecificEntropy.Value, 3) == Math.Round(entropy.Value, 3)) { //it is region 2a return; } } else if (entropy.Value>=5.85) { Temperature = new Temperature(Region2bBackwardEquation_Tps.CalculateTemperature(pressure.Value, entropy.Value)); CalculateProperties(Temperature, Pressure); if (Math.Round(SpecificEntropy.Value, 3) == Math.Round(entropy.Value, 3)) { //it is region 2b return; } } else { Temperature = new Temperature(Region2cBackwardEquation_Tps.CalculateTemperature(pressure.Value, entropy.Value)); CalculateProperties(Temperature, Pressure); if (Math.Round(SpecificEntropy.Value, 3) == Math.Round(entropy.Value, 3)) { //it is region 2c return; } } }
private void Region5Calculations(Temperature temperature, Pressure pressure) { Temperature = temperature; Pressure = pressure; SpecificVolume = Region5.CalculateSpecificVolume(temperature.Value, pressure.Value); SpecificEnthalpy = new Enthalpy(Region5.CalculateSpecificEnthalpy(temperature.Value, pressure.Value)); SpecificInternalEnergy = Region5.CalculateSpecificInternalEnergy(temperature.Value, pressure.Value); SpecificEntropy = new Entropy(Region5.CalculateSpecificEntropy(temperature.Value, pressure.Value)); SpecificIsobaricHeatCapacity = Region5.SpecificIsobaricHeatCapacity(temperature.Value, pressure.Value); SpeedOfSound = Region5.SpeedOfSound(temperature.Value, pressure.Value); SpecificIsochoricHeatCapacity = Region5.SpecificIsochoricHeatCapacity(temperature.Value, pressure.Value); }
private void Region4Calculations(Temperature temperature, Pressure pressure, State state) { switch (state) { case State.Water: if (IsRegion1(temperature, pressure)) { Region1Calculations(temperature, pressure); } break; case State.Steam: if (IsRegion2(temperature, pressure)) { Region2Calculations(temperature, pressure); } break; default: throw new CantDetermineRegionException ("The pressure value may be out of range. If you do not trying to find saturation line properties, you must not specify the state"); } }
private void CalculateProperties(Temperature temperature, Pressure pressure) { //check if it is region 1 if (IsRegion1(temperature, pressure)) { Region1Calculations(temperature, pressure); } //check if it is region 2 else if (IsRegion2(temperature, pressure)) { Region2Calculations(temperature, pressure); } //check if it is region 5 else if (IsRegion5(temperature, pressure)) { Region5Calculations(temperature, pressure); } else { throw new CantDetermineRegionException ("Can not determine what region substance belongs to, temperature or pressure value may be out of range"); } }
private static bool IsRegion5(Temperature temperature, Pressure pressure) { return temperature.Value >= 1073.15 && temperature.Value <= 2273.15 && pressure.Value > 0 && pressure.Value <= 50; }
public Substance(Temperature temperature, Pressure pressure) { CalculateProperties(temperature, pressure); }
private static bool IsRegion2(Temperature temperature, Pressure pressure) { return ( temperature.Value >= 273.15 && temperature.Value <= 623.15 && pressure.Value > 0 && pressure.Value <= Region4.CalculateSaturationPressure(temperature.Value) ) || ( temperature.Value >= 623.15 && temperature.Value <= 863.15 && pressure.Value > 0 && pressure.Value <= BoundaryRegion2Region3.CalculateBoundaryPressure(temperature.Value) ) || ( temperature.Value > 863.15 && temperature.Value <= 1073.15 && pressure.Value > 0 && pressure.Value <= 100 ); }
private static bool IsRegion1(Temperature temperature, Pressure pressure) { return temperature.Value >= 273.15 && temperature.Value <= 623.15 && Math.Round(pressure.Value, 9) >= Math.Round(Region4.CalculateSaturationPressure(temperature.Value), 9) && pressure.Value <= 100; }
/// <summary> /// Get saturation line substance properties /// </summary> public Substance(Temperature temperature, State state) { Pressure pressure = new Pressure(Region4.CalculateSaturationPressure(temperature.Value)); Region4Calculations(temperature, pressure, state); }