Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions src/libecalc/domain/process/compressor/core/train/stage.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from libecalc.domain.process.entities.process_units.mixer.mixer import Mixer
from libecalc.domain.process.entities.process_units.rate_modifier.rate_modifier import RateModifier
from libecalc.domain.process.entities.process_units.splitter.splitter import Splitter
from libecalc.domain.process.entities.process_units.temperature_setter.temperature_setter import TemperatureSetter
from libecalc.domain.process.entities.process_units.temperature_setter import TemperatureSetter
from libecalc.domain.process.value_objects.chart.chart_area_flag import ChartAreaFlag
from libecalc.domain.process.value_objects.fluid_stream import FluidService, FluidStream
from libecalc.domain.process.value_objects.fluid_stream.fluid import Fluid
Expand Down Expand Up @@ -83,10 +83,6 @@ def pressure_drop_ahead_of_stage(self) -> float:
def inlet_temperature_kelvin(self) -> float:
return self.temperature_setter.required_temperature_kelvin

def set_temperature(self, inlet_stream_stage: FluidStream) -> FluidStream:
"""Cool the inlet stream to the required temperature."""
return self.temperature_setter.set_temperature(inlet_stream_stage)

def modify_pressure(self, inlet_stream_stage: FluidStream) -> FluidStream:
"""Choke the inlet stream if a differential pressure control valve is defined."""
if self.pressure_modifier:
Expand Down Expand Up @@ -148,7 +144,9 @@ def evaluate(
inlet_stream_after_choke = inlet_stream_after_mixer

# Then the stream passes through the TemperatureSetter (which is always defined),
inlet_stream_after_temperature_setter = self.set_temperature(inlet_stream_after_choke)
inlet_stream_after_temperature_setter = self.temperature_setter.propagate_stream(
inlet_stream=inlet_stream_after_choke
)

# Then the stream passes through the LiquidRemover (if defined),
if self.liquid_remover is not None:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from libecalc.domain.process.process_system.process_unit import ProcessUnit
from libecalc.domain.process.value_objects.fluid_stream import FluidService, FluidStream


class TemperatureSetter(ProcessUnit):
def __init__(self, required_temperature_kelvin: float, fluid_service: FluidService):
self._required_temperature_kelvin = required_temperature_kelvin
self._fluid_service = fluid_service

@property
def required_temperature_kelvin(self) -> float:
return self._required_temperature_kelvin

def propagate_stream(self, inlet_stream: FluidStream) -> FluidStream:
"""This process unit currently acts as both a cooler and a heater. This is because eCalc currently attaches
all information about stream temperature to the compressor stage. We dont really know the temperature of the
stream until the temperature setter is reached (stream could have standard temperature).

If the inlet stream is hotter than the required temperature, it cools it down to the required temperature.
If the inlet stream is cooler than the required temperature, it heats it up to the required temperature.

TODO: When the YAML file has a full definition of inlet streams and hence temperatures are all defined in the
correct place, make this unit into a cooler, that only reduces temperature, and raise an error if the inlet
stream is cooler than the required temperature.

Args:
inlet_stream: The fluid stream to set the temperature of.

Returns:
A new FluidStream at the required temperature.
"""
if inlet_stream.temperature_kelvin != self.required_temperature_kelvin:
Comment thread
olelod marked this conversation as resolved.
new_fluid = self._fluid_service.create_fluid(
inlet_stream.fluid_model,
inlet_stream.pressure_bara,
self.required_temperature_kelvin,
)
return inlet_stream.with_new_fluid(new_fluid)
return inlet_stream

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
from libecalc.domain.process.entities.process_units.mixer.mixer import Mixer
from libecalc.domain.process.entities.process_units.rate_modifier.rate_modifier import RateModifier
from libecalc.domain.process.entities.process_units.splitter.splitter import Splitter
from libecalc.domain.process.entities.process_units.temperature_setter.temperature_setter import TemperatureSetter
from libecalc.domain.process.entities.process_units.temperature_setter import TemperatureSetter
from libecalc.domain.process.entities.shaft import Shaft, SingleSpeedShaft, VariableSpeedShaft
from libecalc.domain.process.evaluation_input import (
CompressorEvaluationInput,
Expand Down
2 changes: 1 addition & 1 deletion tests/libecalc/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from libecalc.domain.process.entities.process_units.mixer.mixer import Mixer
from libecalc.domain.process.entities.process_units.rate_modifier.rate_modifier import RateModifier
from libecalc.domain.process.entities.process_units.splitter.splitter import Splitter
from libecalc.domain.process.entities.process_units.temperature_setter.temperature_setter import TemperatureSetter
from libecalc.domain.process.entities.process_units.temperature_setter import TemperatureSetter
from libecalc.domain.process.entities.shaft import Shaft, SingleSpeedShaft, VariableSpeedShaft
from libecalc.domain.process.value_objects.chart import ChartCurve
from libecalc.domain.process.value_objects.chart.chart import Chart, ChartData
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from libecalc.domain.process.entities.process_units.compressor.compressor import Compressor
from libecalc.domain.process.entities.process_units.liquid_remover import LiquidRemover
from libecalc.domain.process.entities.process_units.rate_modifier.rate_modifier import RateModifier
from libecalc.domain.process.entities.process_units.temperature_setter.temperature_setter import TemperatureSetter
from libecalc.domain.process.entities.process_units.temperature_setter import TemperatureSetter
from libecalc.domain.process.entities.shaft import Shaft, SingleSpeedShaft, VariableSpeedShaft
from libecalc.domain.process.value_objects.chart import ChartCurve
from libecalc.domain.process.value_objects.chart.chart import ChartData
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from ecalc_neqsim_wrapper.thermo import STANDARD_PRESSURE_BARA, STANDARD_TEMPERATURE_KELVIN
from libecalc.domain.process.entities.process_units.temperature_setter.temperature_setter import TemperatureSetter
from libecalc.domain.process.entities.process_units.temperature_setter import TemperatureSetter


def test_set_temperature(fluid_model_medium, fluid_service):
Expand All @@ -10,7 +10,7 @@ def test_set_temperature(fluid_model_medium, fluid_service):
standard_rate_m3_per_day=100000,
)
temperature_setter = TemperatureSetter(required_temperature_kelvin=273.15, fluid_service=fluid_service)
outlet_stream = temperature_setter.set_temperature(inlet_stream)
outlet_stream = temperature_setter.propagate_stream(inlet_stream)

assert inlet_stream.temperature_kelvin == STANDARD_TEMPERATURE_KELVIN
assert outlet_stream.temperature_kelvin == 273.15
2 changes: 1 addition & 1 deletion tests/libecalc/domain/process/test_process_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def test_speed_solver(
stream_constraint=stream_constraint,
)
assert process_solver.find_solution()
assert process_system.get_shaft().get_speed() == snapshot(98.8165960635718)
assert process_system.get_shaft().get_speed() == snapshot(102.66555959304989)

Comment thread
olelod marked this conversation as resolved.
outlet_stream = process_system.propagate_stream(inlet_stream=inlet_stream)
assert outlet_stream.pressure_bara == pytest.approx(target_pressure)
Expand Down