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
4 changes: 4 additions & 0 deletions src/libecalc/common/errors/ecalc_validation_error.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ class ProcessPressureRatioValidationException(EcalcValidationException):
pass


class ProcessNonPositivePressureValidationException(EcalcValidationException):
pass


class ProcessDischargePressureValidationException(EcalcValidationException):
pass

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from libecalc.common.energy_usage_type import EnergyUsageType
from libecalc.common.errors.ecalc_validation_error import (
EcalcValidationException,
ProcessNonPositivePressureValidationException,
ProcessPressureRatioValidationException,
)
from libecalc.common.errors.exceptions import InvalidResourceException
Expand Down Expand Up @@ -220,7 +221,7 @@ def map_rate_fractions(
]


def validate_increasing_pressure(
def validate_pressures(
suction_pressure: ExpressionTimeSeriesPressure,
discharge_pressure: ExpressionTimeSeriesPressure,
intermediate_pressure: ExpressionTimeSeriesPressure | None = None,
Expand All @@ -240,8 +241,20 @@ def validate_increasing_pressure(
if validation_mask[i]:
sp = suction_pressure_values[i]
dp = discharge_pressure_values[i]
if sp <= 0:
raise ProcessNonPositivePressureValidationException(
message=f"Invalid pressure at timestep {i + 1}: suction pressure ({sp}) is non-positive, which is not physically possible."
)
if dp <= 0:
raise ProcessNonPositivePressureValidationException(
message=f"Invalid pressure at timestep {i + 1}: discharge pressure ({dp}) is non-positive, which is not physically possible."
)
if intermediate_pressure_values is not None:
ip = intermediate_pressure_values[i]
if ip <= 0:
raise ProcessNonPositivePressureValidationException(
message=f"Invalid pressure at timestep {i + 1}: intermediate pressure ({ip}) is non-positive, which is not physically possible."
)
if not (sp <= ip <= dp):
raise ProcessPressureRatioValidationException(
message=f"Invalid pressures at index {i + 1}: suction pressure ({sp}) must be less than intermediate pressure ({ip}), which must be less than discharge pressure ({dp})."
Expand Down Expand Up @@ -1123,7 +1136,7 @@ def _map_pump(
validation_mask=pressure_validation_mask,
)

validate_increasing_pressure(
validate_pressures(
suction_pressure=suction_pressure,
discharge_pressure=discharge_pressure,
)
Expand Down Expand Up @@ -1211,7 +1224,7 @@ def _map_multiple_streams_compressor(
else None
)

validate_increasing_pressure(
validate_pressures(
suction_pressure=suction_pressure,
discharge_pressure=discharge_pressure,
intermediate_pressure=interstage_control_pressure,
Expand Down Expand Up @@ -1280,7 +1293,7 @@ def _map_compressor(
),
validation_mask=validation_mask,
)
if model.suction_pressure
if model.suction_pressure is not None
else None
)

Expand All @@ -1291,7 +1304,7 @@ def _map_compressor(
),
validation_mask=validation_mask,
)
if model.discharge_pressure
if model.discharge_pressure is not None
else None
)
operational_data = CompressorOperationalTimeSeries.from_time_series(
Expand All @@ -1309,7 +1322,7 @@ def _map_compressor(
raise InvalidConsumptionType(actual=consumption_type, expected=consumes)

if suction_pressure is not None and discharge_pressure is not None:
validate_increasing_pressure(
validate_pressures(
suction_pressure=suction_pressure,
discharge_pressure=discharge_pressure,
)
Expand Down Expand Up @@ -1453,7 +1466,7 @@ def _map_compressor_system(
]

for suction_pressure, discharge_pressure in zip(suction_pressures, discharge_pressures):
validate_increasing_pressure(
validate_pressures(
suction_pressure=suction_pressure,
discharge_pressure=discharge_pressure,
)
Expand Down Expand Up @@ -1615,7 +1628,7 @@ def _map_pump_system(
] * number_of_pumps

for suction_pressure, discharge_pressure in zip(suction_pressures, discharge_pressures):
validate_increasing_pressure(
validate_pressures(
suction_pressure=suction_pressure,
discharge_pressure=discharge_pressure,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
InvalidPressureException,
)
from libecalc.presentation.yaml.domain.time_series_expression import TimeSeriesExpression
from libecalc.presentation.yaml.mappers.consumer_function_mapper import validate_increasing_pressure
from libecalc.presentation.yaml.mappers.consumer_function_mapper import validate_pressures

periods = [
Period(start=datetime(2020, 1, 1), end=datetime(2021, 1, 1)),
Expand Down Expand Up @@ -44,7 +44,7 @@ def test_expressions_with_pressure_ratio_less_than_one(expression_evaluator_fact
)

with pytest.raises(ProcessPressureRatioValidationException):
validate_increasing_pressure(
validate_pressures(
suction_pressure=ExpressionTimeSeriesPressure(
time_series_expression=TimeSeriesExpression(expression="SIM1;PS", expression_evaluator=evaluator)
),
Expand All @@ -54,7 +54,7 @@ def test_expressions_with_pressure_ratio_less_than_one(expression_evaluator_fact
)

with pytest.raises(ProcessPressureRatioValidationException):
validate_increasing_pressure(
validate_pressures(
suction_pressure=ExpressionTimeSeriesPressure(
time_series_expression=TimeSeriesExpression(expression="SIM1;PS", expression_evaluator=evaluator)
),
Expand Down