public override void Execute(bool propagate) { //if dew point is known //HumidGasCalculator humidGasCalculator = GetHumidGasCalculator(); if (dewPoint.HasValue) { if (relativeHumidity.HasValue && !temperature.IsSpecifiedAndHasValue) { Calculate(temperature, HumidGasCalculator.GetDryBulbFromDewPointAndRelativeHumidity(dewPoint.Value, relativeHumidity.Value)); } else if (pressure.HasValue) { if (dewPoint.Value <= 1.0e-10 && !moistureContentDryBase.IsSpecifiedAndHasValue) { Calculate(moistureContentDryBase, 0); } else if (!moistureContentDryBase.IsSpecifiedAndHasValue) { Calculate(moistureContentDryBase, HumidGasCalculator.GetHumidityFromDewPointAndPressure(dewPoint.Value, pressure.Value)); } } //Pressure should always be known. So it should not be calculated else if (moistureContentDryBase.HasValue) { //Calculate(pressure, humidGasCalculator.GetPressureFromDewPointAndHumidity(dewPoint.Value, humidity.Value)); } } //if humidity is known if (moistureContentDryBase.HasValue) { if (pressure.HasValue && !dewPoint.IsSpecifiedAndHasValue) { Calculate(dewPoint, HumidGasCalculator.GetDewPointFromHumidityAndPressure(moistureContentDryBase.Value, pressure.Value)); } //to prevent repeated calculation of the same variable //if (relativeHumidity.HasValue && dewPoint.HasValue && !temperature.IsSpecifiedAndHasValue) { if (relativeHumidity.HasValue && dewPoint.HasValue && !temperature.HasValue) { Calculate(temperature, HumidGasCalculator.GetDryBulbFromDewPointAndRelativeHumidity(dewPoint.Value, relativeHumidity.Value)); } //to prevent repeated calculation of the same variable //if (wetBulbTemperature.HasValue && pressure.HasValue && !temperature.IsSpecifiedAndHasValue) { if (wetBulbTemperature.HasValue && pressure.HasValue && !temperature.HasValue) { Calculate(temperature, HumidGasCalculator.GetDryBulbFromWetBulbHumidityAndPressure(wetBulbTemperature.Value, moistureContentDryBase.Value, pressure.Value)); } } //to prevent repeated calculation of the same variable //if (wetBulbTemperature.HasValue && relativeHumidity.HasValue && pressure.HasValue // && !temperature.IsSpecifiedAndHasValue) { if (wetBulbTemperature.HasValue && relativeHumidity.HasValue && pressure.HasValue && !temperature.HasValue) { Calculate(temperature, HumidGasCalculator.GetDryBulbFromWetBulbRelativeHumidityAndPressure(wetBulbTemperature.Value, relativeHumidity.Value, pressure.Value)); } double humidEnthalpyValue; double mcDryBase = moistureContentDryBase.Value; if (specificEnthalpy.HasValue && moistureContentDryBase.HasValue && !specificEnthalpyDryBase.HasValue) { Calculate(specificEnthalpyDryBase, specificEnthalpy.Value * (1.0 + mcDryBase)); } //if (specificEnthalpyDryBase.HasValue && pressure.HasValue && !temperature.IsSpecifiedAndHasValue) { if (specificEnthalpyDryBase.HasValue && pressure.HasValue && !temperature.HasValue) { if (moistureContentDryBase.HasValue) { Calculate(temperature, HumidGasCalculator.GetDryBulbFromHumidEnthalpyHumidityAndPressure(specificEnthalpyDryBase.Value, moistureContentDryBase.Value, pressure.Value)); } else if (relativeHumidity.HasValue) { Calculate(temperature, HumidGasCalculator.GetDryBulbFromHumidEnthalpyRelativeHumidityAndPressure(specificEnthalpyDryBase.Value, relativeHumidity.Value, pressure.Value)); } else if (dewPoint.HasValue) { Calculate(temperature, HumidGasCalculator.GetDryBulbFromHumidEnthalpyDewPointAndPressure(specificEnthalpyDryBase.Value, relativeHumidity.Value, pressure.Value)); } else if (wetBulbTemperature.HasValue) { Calculate(temperature, HumidGasCalculator.GetDryBulbFromHumidEnthalpyWetBulbAndPressure(specificEnthalpyDryBase.Value, wetBulbTemperature.Value, pressure.Value)); } } //if temperature is first known if (temperature.HasValue) { if (dewPoint.HasValue || relativeHumidity.HasValue) { if (dewPoint.HasValue && !relativeHumidity.IsSpecifiedAndHasValue) { Calculate(relativeHumidity, HumidGasCalculator.GetRelativeHumidityFromDryBulbAndDewPoint(temperature.Value, dewPoint.Value)); } else if (relativeHumidity.HasValue && !dewPoint.IsSpecifiedAndHasValue) { Calculate(dewPoint, HumidGasCalculator.GetDewPointFromDryBulbAndRelativeHumidity(temperature.Value, relativeHumidity.Value)); } if (pressure.HasValue) { if (!moistureContentDryBase.IsSpecifiedAndHasValue) { Calculate(moistureContentDryBase, HumidGasCalculator.GetHumidityFromDewPointAndPressure(dewPoint.Value, pressure.Value)); } if (!wetBulbTemperature.IsSpecifiedAndHasValue) { Calculate(wetBulbTemperature, HumidGasCalculator.GetWetBulbFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value)); //double satTemp = humidGasCalculator.GetSatTempFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value); } } else if (moistureContentDryBase.HasValue) { if (!pressure.IsSpecifiedAndHasValue) { Calculate(pressure, HumidGasCalculator.GetPressureFromDewPointAndHumidity(dewPoint.Value, moistureContentDryBase.Value)); } if (!wetBulbTemperature.IsSpecifiedAndHasValue) { Calculate(wetBulbTemperature, HumidGasCalculator.GetWetBulbFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value)); //double satTemp = humidGasCalculator.GetSatTempFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value); } } } else if (wetBulbTemperature.HasValue && pressure.HasValue) { if (!moistureContentDryBase.IsSpecifiedAndHasValue) { Calculate(moistureContentDryBase, HumidGasCalculator.GetHumidityFromDryBulbWetBulbAndPressure(temperature.Value, wetBulbTemperature.Value, pressure.Value)); } if (!relativeHumidity.IsSpecifiedAndHasValue) { Calculate(relativeHumidity, HumidGasCalculator.GetRelativeHumidityFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value)); } if (!dewPoint.IsSpecifiedAndHasValue) { Calculate(dewPoint, HumidGasCalculator.GetDewPointFromDryBulbAndRelativeHumidity(temperature.Value, relativeHumidity.Value)); } } else if (moistureContentDryBase.HasValue && pressure.HasValue) { if (!wetBulbTemperature.IsSpecifiedAndHasValue) { Calculate(wetBulbTemperature, HumidGasCalculator.GetWetBulbFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value)); //double satTemp = humidGasCalculator.GetSatTempFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value); } if (!relativeHumidity.IsSpecifiedAndHasValue) { Calculate(relativeHumidity, HumidGasCalculator.GetRelativeHumidityFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value)); } if (!dewPoint.IsSpecifiedAndHasValue) { Calculate(dewPoint, HumidGasCalculator.GetDewPointFromDryBulbAndRelativeHumidity(temperature.Value, relativeHumidity.Value)); } } else if (wetBulbTemperature.HasValue && moistureContentDryBase.HasValue) { //if (!pressure.IsSpecifiedAndHasValue) { // Calculate(pressure, humidGasCalculator.GetPressureFromDryBulbWetBulbAndHumidity(temperature.Value, wetBulbTemperature.Value, moistureContentDryBase.Value)); //} if (!dewPoint.IsSpecifiedAndHasValue) { Calculate(dewPoint, HumidGasCalculator.GetDewPointFromHumidityAndPressure(temperature.Value, pressure.Value)); } if (!relativeHumidity.IsSpecifiedAndHasValue) { Calculate(relativeHumidity, HumidGasCalculator.GetRelativeHumidityFromDryBulbAndDewPoint(temperature.Value, dewPoint.Value)); } } } mcDryBase = moistureContentDryBase.Value; if (moistureContentDryBase.HasValue && temperature.HasValue) { double cpDryBase = HumidGasCalculator.GetHumidHeat(moistureContentDryBase.Value, temperature.Value); Calculate(specificHeatDryBase, cpDryBase); Calculate(specificHeat, cpDryBase / (1.0 + mcDryBase)); if (pressure.HasValue) { double humidVolumeValue = HumidGasCalculator.GetHumidVolume(temperature.Value, moistureContentDryBase.Value, pressure.Value); Calculate(humidVolume, humidVolumeValue); humidEnthalpyValue = HumidGasCalculator.GetHumidEnthalpyFromDryBulbHumidityAndPressure(temperature.Value, moistureContentDryBase.Value, pressure.Value); Calculate(specificEnthalpyDryBase, humidEnthalpyValue); Calculate(specificEnthalpy, humidEnthalpyValue / (1.0 + mcDryBase)); Calculate(density, (1.0 + mcDryBase) / humidVolumeValue); } } CalculateFlow(); //if (temperature.HasValue && pressure.HasValue && massFlowRate.HasValue && // volumeFlowRate.HasValue && massFlowRateDryBase.HasValue && wetBulbTemperature.HasValue && // dewPoint.HasValue && moistureContentDryBase.HasValue && relativeHumidity.HasValue && // density.HasValue && specificEnthalpy.HasValue && specificHeatDryBase.HasValue) { // solveState = SolveState.Solved; //} bool hasUnsolvedVar = false; foreach (ProcessVarDouble pv in varList) { if (!pv.HasValue) { hasUnsolvedVar = true; break; } } if (!hasUnsolvedVar) { solveState = SolveState.Solved; } //else //{ // foreach (ProcessVarDouble pv in varList) // { // if (!pv.IsSpecified && pv.HasValue) // { // solveState = SolveState.PartiallySolved; // break; // } // } //} if (HasSolvedAlready) { DryingGasComponents dgc = (DryingGasComponents)materialComponents; //we cannot do a calculate operation since these variables are not in the //varList and they cannot be erased after they are initially calculated dgc.DryMedium.SetMassFractionValue(1.0 / (1.0 + Humidity.Value)); dgc.Moisture.SetMassFractionValue(Humidity.Value / (1.0 + Humidity.Value)); dgc.ComponentsFractionsChanged(); } AdjustVarsStates(); OnSolveComplete(); }