Skip to content

Commit 2c2cd66

Browse files
committed
refactor: remove choke from process system
1 parent 18f5388 commit 2c2cd66

6 files changed

Lines changed: 12 additions & 40 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
@@ -11,34 +10,15 @@ def __init__(
1110
self,
1211
shaft: Shaft,
1312
process_units: list[ProcessUnit],
14-
upstream_choke: Choke | None = None,
15-
downstream_choke: Choke | None = None,
1613
):
1714
self._shaft = shaft
1815
self._process_units = process_units
19-
self._upstream_choke = upstream_choke
20-
self._downstream_choke = downstream_choke
2116

2217
def get_shaft(self) -> Shaft:
2318
return self._shaft
2419

25-
def get_downstream_choke(self) -> Choke | None:
26-
return self._downstream_choke
27-
28-
def get_upstream_choke(self) -> Choke | None:
29-
return self._upstream_choke
30-
3120
def propagate_stream(self, inlet_stream: FluidStream) -> FluidStream:
32-
process_units: list[ProcessUnit] = []
33-
if self._upstream_choke is not None:
34-
process_units.append(self._upstream_choke)
35-
36-
process_units.extend(self._process_units)
37-
38-
if self._downstream_choke is not None:
39-
process_units.append(self._downstream_choke)
40-
4121
current_inlet = inlet_stream
42-
for process_unit in process_units:
22+
for process_unit in self._process_units:
4323
current_inlet = process_unit.propagate_stream(inlet_stream=current_inlet)
4424
return current_inlet

tests/libecalc/domain/process/conftest.py

Lines changed: 0 additions & 5 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, VariableSpeedShaft
65
from libecalc.domain.process.process_solver.stream_constraint import PressureStreamConstraint
76
from libecalc.domain.process.process_system.process_error import OutsideCapacityError
@@ -189,8 +188,6 @@ def propagate_stream(self, inlet_stream: FluidStream) -> FluidStream:
189188
def process_system_factory(compressor_stage_factory, fluid_service):
190189
def create_process_system(
191190
process_units: list[ProcessUnit] | None = None,
192-
downstream_choke: Choke | None = None,
193-
upstream_choke: Choke | None = None,
194191
shaft: Shaft | None = None,
195192
):
196193
if process_units is None:
@@ -199,8 +196,6 @@ def create_process_system(
199196
return ProcessSystem(
200197
shaft=shaft,
201198
process_units=process_units,
202-
downstream_choke=downstream_choke,
203-
upstream_choke=upstream_choke,
204199
)
205200

206201
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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ def test_upstream_choke_solver(
2323
):
2424
choke = Choke(fluid_service=fluid_service)
2525
process_system = process_system_factory(
26-
upstream_choke=choke,
2726
process_units=[simple_process_unit_factory(pressure_multiplier=1)],
2827
)
2928

@@ -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

0 commit comments

Comments
 (0)