diff --git a/watertap/unit_models/mvc/components/compressor.py b/watertap/unit_models/mvc/components/compressor.py index 73c2946679..ff679d78f7 100644 --- a/watertap/unit_models/mvc/components/compressor.py +++ b/watertap/unit_models/mvc/components/compressor.py @@ -18,6 +18,7 @@ units as pyunits, ) from pyomo.common.config import ConfigBlock, ConfigValue, In +from copy import copy # Import IDAES cores from idaes.core import ( @@ -300,19 +301,44 @@ def initialize_build( else: state_args[k] = state_dict[k].value + state_args_out_isentropic = copy(state_args) + state_args_out_isentropic["pressure"] = ( + state_args["pressure"] * self.pressure_ratio.value * pyunits.Pa + ) + state_args_out_isentropic["temperature"] = ( + state_args["temperature"] + * self.pressure_ratio.value ** (1 - 1 / 1.3) + * pyunits.K + ) + self.properties_isentropic_out.initialize( outlvl=outlvl, optarg=optarg, solver=solver, - state_args=state_args, + state_args=state_args_out_isentropic, ) init_log.info_high("Initialization Step 2 Complete.") + state_args_out_actual = copy(state_args_out_isentropic) + # assume a constant vapor specific heat for initialization: + state_args_out_actual["temperature"] = ( + state_args_out_isentropic["temperature"] + - state_args["temperature"] * pyunits.K + ) / self.efficiency.value + state_args["temperature"] * pyunits.K + + self.control_volume.properties_out.initialize( + outlvl=outlvl, + optarg=optarg, + solver=solver, + state_args=state_args_out_actual, + ) + init_log.info_high("Initialization Step 3 Complete.") + # --------------------------------------------------------------------- # Solve unit with idaeslog.solver_log(solve_log, idaeslog.DEBUG) as slc: res = opt.solve(self, tee=slc.tee) - init_log.info_high("Initialization Step 3 {}.".format(idaeslog.condition(res))) + init_log.info_high("Initialization Step 4 {}.".format(idaeslog.condition(res))) # --------------------------------------------------------------------- # Release Inlet state diff --git a/watertap/unit_models/mvc/tests/test_mvc.py b/watertap/unit_models/mvc/tests/test_mvc.py index 709230fe5c..fd3ba4db69 100644 --- a/watertap/unit_models/mvc/tests/test_mvc.py +++ b/watertap/unit_models/mvc/tests/test_mvc.py @@ -25,7 +25,6 @@ import idaes.core.util.scaling as iscale import idaes.logger as idaeslog from idaes.core.util.initialization import propagate_state -from idaes.core.util.exceptions import InitializationError # Import components from watertap.unit_models.mvc.components import Evaporator @@ -106,8 +105,7 @@ def specify(m): m.fs.evaporator.area.fix(400) # m^2 # Compressor - m.fs.compressor.pressure_ratio = 2 - m.fs.compressor.control_volume.work.fix(5.8521e05) + m.fs.compressor.pressure_ratio.fix(2) m.fs.compressor.efficiency.fix(0.8) @@ -123,10 +121,8 @@ def initialize(m, solver=None): # initialize compressor propagate_state(m.fs.s01) - try: - m.fs.compressor.initialize(outlvl=idaeslog.DEBUG) - except InitializationError: - pass + + m.fs.compressor.initialize(outlvl=idaeslog.DEBUG) # initialize condenser propagate_state(m.fs.s02) @@ -150,27 +146,32 @@ def test_mvc(): results = solver.solve(m, tee=True) assert_optimal_termination(results) + brine_blk = m.fs.evaporator.properties_brine[0] m.fs.compressor.report() m.fs.condenser.report() m.fs.evaporator.display() - brine_blk = m.fs.evaporator.properties_brine[0] + # evaporator values assert brine_blk.pressure.value == pytest.approx(1.9849e4, rel=1e-3) - assert m.fs.evaporator.lmtd.value == pytest.approx(30.50, rel=1e-3) - assert m.fs.evaporator.heat_transfer.value == pytest.approx(1.220e7, rel=1e-3) + assert m.fs.evaporator.lmtd.value == pytest.approx(26.1769036038, rel=1e-3) + assert m.fs.evaporator.heat_transfer.value == pytest.approx( + 10470761.441558, rel=1e-3 + ) # compressor values compressed_blk = m.fs.compressor.control_volume.properties_out[0] + assert m.fs.compressor.control_volume.work[0].value == pytest.approx( - 5.8521e5, rel=1e-3 + 500376.0409289, rel=1e-3 ) - assert compressed_blk.pressure.value == pytest.approx(3.9656e4, rel=1e-3) + + assert compressed_blk.pressure.value == pytest.approx(39723.543091, rel=1e-3) assert compressed_blk.temperature.value == pytest.approx(407.70, rel=1e-3) # condenser values condensed_blk = m.fs.condenser.control_volume.properties_out[0] assert m.fs.condenser.control_volume.heat[0].value == pytest.approx( - -1.220e7, rel=1e-3 + -10470761.441558, rel=1e-3 ) - assert condensed_blk.temperature.value == pytest.approx(342.20, rel=1e-3) + assert condensed_blk.temperature.value == pytest.approx(339.13470452, rel=1e-3)