Skip to content

Commit

Permalink
improves compressor initialization (#1350)
Browse files Browse the repository at this point in the history
* improves compressor initialization

* pylint

* minor modifications

* pylint

* renaming state_args

* pylint

* minor modification

---------

Co-authored-by: Keith Beattie <ksbeattie@lbl.gov>
  • Loading branch information
ElmiraShamlou and ksbeattie authored Apr 12, 2024
1 parent d64574a commit 73c4bc3
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 16 deletions.
30 changes: 28 additions & 2 deletions watertap/unit_models/mvc/components/compressor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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
Expand Down
29 changes: 15 additions & 14 deletions watertap/unit_models/mvc/tests/test_mvc.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)


Expand All @@ -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)
Expand All @@ -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)

0 comments on commit 73c4bc3

Please sign in to comment.