Skip to content

Commit aa7ddb7

Browse files
committed
refactor: remove compressor stage logic
1 parent 7b2db7a commit aa7ddb7

2 files changed

Lines changed: 22 additions & 68 deletions

File tree

  • src/libecalc/domain/process

src/libecalc/domain/process/compressor/core/train/stage.py

Lines changed: 18 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -85,32 +85,6 @@ def pressure_drop_ahead_of_stage(self) -> float:
8585
def inlet_temperature_kelvin(self) -> float:
8686
return self.temperature_setter.required_temperature_kelvin
8787

88-
def set_temperature(self, inlet_stream_stage: FluidStream) -> FluidStream:
89-
"""Cool the inlet stream to the required temperature."""
90-
return self.temperature_setter.set_temperature(inlet_stream_stage)
91-
92-
def remove_liquid(self, inlet_stream_stage: FluidStream) -> FluidStream:
93-
"""Remove liquid from the inlet stream if required."""
94-
if self.liquid_remover:
95-
return self.liquid_remover.remove_liquid(inlet_stream_stage)
96-
return inlet_stream_stage
97-
98-
def modify_pressure(self, inlet_stream_stage: FluidStream) -> FluidStream:
99-
"""Choke the inlet stream if a differential pressure control valve is defined."""
100-
if self.pressure_modifier:
101-
return self.pressure_modifier.modify_pressure(inlet_stream_stage)
102-
return inlet_stream_stage
103-
104-
def add_rate(self, inlet_stream_stage: FluidStream) -> FluidStream:
105-
return self.rate_modifier.add_rate(
106-
stream=inlet_stream_stage,
107-
)
108-
109-
def remove_rate(self, outlet_stream_stage: FluidStream) -> FluidStream:
110-
return self.rate_modifier.remove_rate(
111-
stream=outlet_stream_stage,
112-
)
113-
11488
def evaluate(
11589
self,
11690
inlet_stream_stage: FluidStream,
@@ -132,43 +106,47 @@ def evaluate(
132106
# First the stream passes through the Splitter (if defined)
133107
if self.splitter is not None:
134108
self.splitter.rates_out_of_splitter = rates_out_of_splitter
135-
inlet_stream_after_splitter = self.split(
136-
inlet_stream_stage=inlet_stream_stage,
109+
split_streams = self.splitter.split_stream(
110+
stream=inlet_stream_stage,
137111
)
112+
inlet_stream_after_splitter = split_streams[-1] # The last stream goes to the compressor stage
138113
else:
139114
inlet_stream_after_splitter = inlet_stream_stage
140115

141-
# Then the stream passes through the Mixer (if defined)
116+
# Then the stream passes through the Mixer (if defined)
142117
if self.mixer is not None:
143118
if streams_in_to_mixer is None:
144119
raise IllegalStateException("streams_in_to_mixer cannot be None when a mixer is defined")
120+
145121
inlet_stream_after_mixer = self.mix(
146122
inlet_stream_stage=inlet_stream_after_splitter,
147123
streams_in_to_mixer=streams_in_to_mixer,
148124
)
149125
else:
150126
inlet_stream_after_mixer = inlet_stream_after_splitter
151127

152-
# Then the stream passes through the PressureModifier (if defined),
128+
# Then the stream passes through the PressureModifier (if defined): Choke inlet stream if pressure control valve is defined.
153129
if self.pressure_modifier is not None:
154-
inlet_stream_after_pressure_modifier = self.modify_pressure(inlet_stream_after_mixer)
130+
inlet_stream_after_pressure_modifier = self.pressure_modifier.modify_pressure(inlet_stream_after_mixer)
155131
else:
156132
inlet_stream_after_pressure_modifier = inlet_stream_after_mixer
157133

158-
# Then the stream passes through the TemperatureSetter (which is always defined),
159-
inlet_stream_after_temperature_setter = self.set_temperature(inlet_stream_after_pressure_modifier)
134+
# Then the stream passes through the TemperatureSetter (which is always defined) - cool stream to required temperature.
135+
inlet_stream_after_temperature_setter = self.temperature_setter.set_temperature(
136+
inlet_stream_after_pressure_modifier
137+
)
160138

161-
# Then the stream passes through the LiquidRemover (if defined),
139+
# Then the stream passes through the LiquidRemover (if defined):
162140
if self.liquid_remover is not None:
163-
inlet_stream_after_liquid_remover = self.remove_liquid(inlet_stream_after_temperature_setter)
141+
inlet_stream_after_liquid_remover = self.liquid_remover.remove_liquid(inlet_stream_after_temperature_setter)
164142
else:
165143
inlet_stream_after_liquid_remover = inlet_stream_after_temperature_setter
166144

167145
inlet_stream_compressor = inlet_stream_after_liquid_remover
168146

169147
# Then additional rate is added by the RateModifier (if defined),
170-
inlet_stream_compressor_including_asv = self.add_rate(
171-
inlet_stream_stage=inlet_stream_compressor,
148+
inlet_stream_compressor_including_asv = self.rate_modifier.add_rate(
149+
stream=inlet_stream_compressor,
172150
)
173151

174152
# Compressor
@@ -177,8 +155,8 @@ def evaluate(
177155
rate_before_asv_m3_per_h=inlet_stream_after_liquid_remover.volumetric_rate_m3_per_hour
178156
)
179157

180-
outlet_stream_compressor_including_asv = self.compress(
181-
inlet_stream_compressor=inlet_stream_compressor_including_asv
158+
outlet_stream_compressor_including_asv = self.compressor.compress(
159+
inlet_stream=inlet_stream_compressor_including_asv
182160
)
183161
operational_point = self.compressor.operational_point
184162
chart_area_flag = self.compressor.chart_area_flag
@@ -206,25 +184,6 @@ def evaluate(
206184
polytropic_enthalpy_change_before_choke_kJ_per_kg=enthalpy_change / 1000,
207185
)
208186

209-
def split(
210-
self,
211-
inlet_stream_stage: FluidStream,
212-
) -> FluidStream:
213-
"""Split the inlet stream into many streams. One stream goes to the compressor stage. The other(s) are taken out.
214-
In the future, the additional streams could be used for other purposes, but today they are just dropped completely.
215-
216-
Args:
217-
inlet_stream_stage (FluidStream): The inlet stream for the stage.
218-
219-
Returns:
220-
FluidStream: The stream going to the compressor stage.
221-
"""
222-
assert self.splitter is not None
223-
split_streams = self.splitter.split_stream(
224-
stream=inlet_stream_stage,
225-
)
226-
return split_streams[-1] # The last stream goes to the compressor stage
227-
228187
def mix(
229188
self,
230189
inlet_stream_stage: FluidStream,
@@ -248,12 +207,7 @@ def mix(
248207
FluidStream: The mixed stream.
249208
"""
250209
assert self.mixer is not None
251-
assert streams_in_to_mixer is not None
252-
if self.mixer.number_of_inputs != len(streams_in_to_mixer) + 1:
253-
raise IllegalStateException(
254-
f"Number of additional rates to Mixer ({len(streams_in_to_mixer)}) "
255-
f"does not match number of Mixer inputs ({self.mixer.number_of_inputs})."
256-
)
210+
# assert streams_in_to_mixer is not None
257211

258212
all_streams_to_mixer = [inlet_stream_stage] + streams_in_to_mixer
259213
if sum(s.mass_rate_kg_per_h for s in all_streams_to_mixer) == 0:
@@ -264,9 +218,6 @@ def mix(
264218
streams=all_streams_to_mixer,
265219
)
266220

267-
def compress(self, inlet_stream_compressor: FluidStream) -> FluidStream:
268-
return self.compressor.compress(inlet_stream=inlet_stream_compressor)
269-
270221
def evaluate_given_speed_and_target_discharge_pressure(
271222
self,
272223
inlet_stream_stage: FluidStream,

src/libecalc/domain/process/entities/process_units/mixer/mixer.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ def mix_streams(self, streams: list[FluidStream]) -> FluidStream:
2020
FluidStream: The resulting mixed fluid stream.
2121
"""
2222
if self.number_of_inputs != len(streams):
23-
raise ValueError("Number of input streams must match the number of inputs defined for the mixer.")
23+
raise ValueError(
24+
f"Number of input streams ({len(streams)}) must match "
25+
f"the number of inputs defined for the mixer ({self.number_of_inputs})."
26+
)
2427

2528
return self._stream_mixer.mix_streams(streams=streams)

0 commit comments

Comments
 (0)