Skip to content

Commit edee9bc

Browse files
committed
refactor: remove choke from process system
1 parent c01e0ad commit edee9bc

7 files changed

Lines changed: 13 additions & 46 deletions

File tree

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1+
from libecalc.domain.process.entities.process_units.choke import Choke
12
from libecalc.domain.process.process_solver.solver import Solver
23
from libecalc.domain.process.process_system.process_system import ProcessSystem
34
from libecalc.domain.process.value_objects.fluid_stream import FluidStream
45

56

67
class DownstreamChokeSolver(Solver):
7-
def __init__(self, target_pressure: float):
8+
def __init__(self, target_pressure: float, choke: Choke):
89
self._target_pressure = target_pressure
10+
self._choke = choke
911

1012
def solve(self, process_system: ProcessSystem, inlet_stream: FluidStream) -> FluidStream | None:
11-
downstream_choke = process_system.get_downstream_choke()
12-
assert downstream_choke is not None, "DownstreamChokeSolver needs a downstream choke"
13-
1413
outlet_stream = process_system.propagate_stream(inlet_stream=inlet_stream)
1514
if outlet_stream.pressure_bara <= self._target_pressure:
1615
# Don't use choke if outlet pressure is below target
1716
return outlet_stream
1817
else:
1918
# Calculate needed pressure change in downstream choke
2019
pressure_change = outlet_stream.pressure_bara - self._target_pressure
21-
downstream_choke.set_pressure_change(pressure_change=pressure_change)
20+
self._choke.set_pressure_change(pressure_change=pressure_change)
2221
return process_system.propagate_stream(inlet_stream=inlet_stream)

src/libecalc/domain/process/process_solver/solvers/upstream_choke_solver.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
from libecalc.domain.process.compressor.core.train.utils.numeric_methods import find_root
2+
from libecalc.domain.process.entities.process_units.choke import Choke
23
from libecalc.domain.process.process_solver.solver import Solver
34
from libecalc.domain.process.process_system.process_system import ProcessSystem
45
from libecalc.domain.process.value_objects.fluid_stream import FluidService, FluidStream
56

67

78
class UpstreamChokeSolver(Solver):
8-
def __init__(self, target_pressure: float, fluid_service: FluidService, minimum_pressure: float):
9+
def __init__(self, target_pressure: float, fluid_service: FluidService, minimum_pressure: float, choke: Choke):
910
self._target_pressure = target_pressure
1011
self._fluid_service = fluid_service
1112
self._minimum_pressure = minimum_pressure
13+
self._choke = choke
1214

1315
def solve(self, process_system: ProcessSystem, inlet_stream: FluidStream) -> FluidStream | None:
14-
upstream_choke = process_system.get_upstream_choke()
15-
assert upstream_choke is not None, "UpstreamChokeSolver needs an upstream choke"
16-
1716
outlet_stream = process_system.propagate_stream(inlet_stream)
1817
if outlet_stream.pressure_bara <= self._target_pressure:
1918
# Don't use choke if outlet pressure is below target
@@ -36,5 +35,5 @@ def get_outlet_pressure(inlet_pressure: float) -> float:
3635
)
3736

3837
pressure_change = inlet_stream.pressure_bara - choked_inlet_pressure
39-
upstream_choke.set_pressure_change(pressure_change=pressure_change)
38+
self._choke.set_pressure_change(pressure_change=pressure_change)
4039
return process_system.propagate_stream(inlet_stream=inlet_stream)
Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from libecalc.domain.process.entities.process_units.choke import Choke
21
from libecalc.domain.process.entities.shaft import Shaft
32
from libecalc.domain.process.process_system.process_unit import ProcessUnit
43
from libecalc.domain.process.value_objects.fluid_stream import FluidStream
@@ -10,33 +9,14 @@ class ProcessSystem:
109
def __init__(
1110
self,
1211
process_units: list[ProcessUnit],
13-
upstream_choke: Choke | None = None,
14-
downstream_choke: Choke | None = None,
1512
):
1613
self._process_units = process_units
17-
self._upstream_choke = upstream_choke
18-
self._downstream_choke = downstream_choke
1914

2015
def get_shaft(self) -> Shaft:
2116
return self._shaft
2217

23-
def get_downstream_choke(self) -> Choke | None:
24-
return self._downstream_choke
25-
26-
def get_upstream_choke(self) -> Choke | None:
27-
return self._upstream_choke
28-
2918
def propagate_stream(self, inlet_stream: FluidStream) -> FluidStream:
30-
process_units: list[ProcessUnit] = []
31-
if self._upstream_choke is not None:
32-
process_units.append(self._upstream_choke)
33-
34-
process_units.extend(self._process_units)
35-
36-
if self._downstream_choke is not None:
37-
process_units.append(self._downstream_choke)
38-
3919
current_inlet = inlet_stream
40-
for process_unit in process_units:
20+
for process_unit in self._process_units:
4121
current_inlet = process_unit.propagate_stream(inlet_stream=current_inlet)
4222
return current_inlet

tests/libecalc/domain/process/conftest.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import pytest
22

33
from libecalc.domain.process.compressor.core.train.stage import CompressorTrainStage
4-
from libecalc.domain.process.entities.process_units.choke import Choke
54
from libecalc.domain.process.entities.shaft import Shaft
65
from libecalc.domain.process.process_solver.stream_constraint import PressureStreamConstraint
76
from libecalc.domain.process.process_system.process_error import OutsideCapacityError
@@ -175,9 +174,6 @@ class StageProcessUnit(ProcessUnit):
175174
def __init__(self, compressor_stage: CompressorTrainStage):
176175
self._compressor_stage = compressor_stage
177176

178-
def get_shaft(self) -> Shaft:
179-
return self._compressor_stage.compressor.shaft
180-
181177
def propagate_stream(self, inlet_stream: FluidStream) -> FluidStream:
182178
result = self._compressor_stage.evaluate(inlet_stream_stage=inlet_stream)
183179
if not result.within_capacity:
@@ -189,15 +185,11 @@ def propagate_stream(self, inlet_stream: FluidStream) -> FluidStream:
189185
def process_system_factory(compressor_stage_factory, fluid_service):
190186
def create_process_system(
191187
process_units: list[ProcessUnit] | None = None,
192-
downstream_choke: Choke | None = None,
193-
upstream_choke: Choke | None = None,
194188
):
195189
if process_units is None:
196190
process_units = [simple_process_unit_factory(fluid_service)]
197191
return ProcessSystem(
198192
process_units=process_units,
199-
downstream_choke=downstream_choke,
200-
upstream_choke=upstream_choke,
201193
)
202194

203195
return create_process_system

tests/libecalc/domain/process/solvers/test_downstream_choke_solver.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ def test_downstream_choke_solver(
2222
):
2323
downstream_choke = Choke(fluid_service=fluid_service)
2424
process_system = process_system_factory(
25-
downstream_choke=downstream_choke,
26-
process_units=[simple_process_unit_factory(pressure_multiplier=1)],
25+
process_units=[simple_process_unit_factory(pressure_multiplier=1), downstream_choke],
2726
)
2827

2928
inlet_stream = stream_factory(standard_rate_m3_per_day=1000, pressure_bara=inlet_pressure)
3029

31-
downstream_choke_solver = DownstreamChokeSolver(target_pressure=target_pressure)
30+
downstream_choke_solver = DownstreamChokeSolver(target_pressure=target_pressure, choke=downstream_choke)
3231
outlet_stream = downstream_choke_solver.solve(process_system, inlet_stream)
3332

3433
assert outlet_stream.pressure_bara == expected_pressure

tests/libecalc/domain/process/solvers/test_upstream_choke_solver.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ def test_upstream_choke_solver(
2323
):
2424
choke = Choke(fluid_service=fluid_service)
2525
process_system = process_system_factory(
26-
upstream_choke=choke,
27-
process_units=[simple_process_unit_factory(pressure_multiplier=1)],
26+
process_units=[choke, simple_process_unit_factory(pressure_multiplier=1)],
2827
)
2928

3029
inlet_stream = stream_factory(standard_rate_m3_per_day=1000, pressure_bara=inlet_pressure)
@@ -33,6 +32,7 @@ def test_upstream_choke_solver(
3332
fluid_service=fluid_service,
3433
target_pressure=target_pressure,
3534
minimum_pressure=EPSILON,
35+
choke=choke,
3636
)
3737
outlet_stream = upstream_choke_solver.solve(process_system, inlet_stream)
3838

tests/libecalc/domain/process/test_process_solver.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import pytest
22
from inline_snapshot import snapshot
33

4-
from libecalc.domain.process.entities.process_units.choke import Choke
54
from libecalc.domain.process.entities.shaft import VariableSpeedShaft
65
from libecalc.domain.process.process_solver.boundary import Boundary
76
from libecalc.domain.process.process_solver.process_solver import (
@@ -38,7 +37,6 @@ def test_speed_solver(
3837
stream_constraint = stream_constraint_factory(pressure=target_pressure)
3938
process_system = process_system_factory(
4039
process_units=[compressor_train_stage_process_unit_factory(chart_data=chart_data, shaft=shaft)],
41-
downstream_choke=Choke(fluid_service=fluid_service),
4240
)
4341

4442
process_solver = ProcessSolver(

0 commit comments

Comments
 (0)