|
1 | 1 | from abc import ABC, abstractmethod |
2 | 2 | from collections.abc import Sequence |
| 3 | +from dataclasses import dataclass |
3 | 4 | from enum import StrEnum |
4 | 5 |
|
5 | 6 | from libecalc.process.fluid_stream.fluid_stream import FluidStream |
| 7 | +from libecalc.process.process_pipeline.process_unit import ProcessUnitId |
6 | 8 | from libecalc.process.process_solver.configuration import Configuration, RecirculationConfiguration |
7 | | -from libecalc.process.process_solver.solver import Solution |
| 9 | +from libecalc.process.process_solver.solver import Solution, SolverFailure |
8 | 10 |
|
9 | 11 |
|
10 | 12 | class AntiSurgeType(StrEnum): |
@@ -41,3 +43,32 @@ def reset(self) -> None: |
41 | 43 | from a previous evaluation would corrupt the result (e.g. upstream-choke search). |
42 | 44 | """ |
43 | 45 | ... |
| 46 | + |
| 47 | + |
| 48 | +@dataclass |
| 49 | +class NoAntiSurgeControlFailure(SolverFailure): |
| 50 | + source_id: ProcessUnitId |
| 51 | + reason: str = "" |
| 52 | + |
| 53 | + |
| 54 | +class NoAntiSurgeStrategy(AntiSurgeStrategy): |
| 55 | + """ |
| 56 | + TODO: Should this raise error if attempted to be used, because that would mean that |
| 57 | + we need Anti-Surge, but we have no way of handling it. |
| 58 | + """ |
| 59 | + |
| 60 | + def __init__( |
| 61 | + self, |
| 62 | + source_id: ProcessUnitId, |
| 63 | + ): |
| 64 | + self._source_id = source_id |
| 65 | + |
| 66 | + def reset(self) -> None: ... |
| 67 | + |
| 68 | + def apply(self, inlet_stream: FluidStream) -> Solution[Sequence[Configuration[RecirculationConfiguration]]]: |
| 69 | + return Solution( |
| 70 | + configuration=[], |
| 71 | + failure=NoAntiSurgeControlFailure( |
| 72 | + source_id=self._source_id, reason="No Anti-Surge protection added when apparently needed." |
| 73 | + ), |
| 74 | + ) |
0 commit comments