Skip to content

Commit 5e3546b

Browse files
committed
refactor: create fluid factory fixtures for compressor tests
1 parent 0140ded commit 5e3546b

3 files changed

Lines changed: 59 additions & 93 deletions

File tree

tests/libecalc/core/conftest.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from libecalc.domain.process.value_objects.fluid_stream.fluid_model import EoSModel, FluidComposition, FluidModel
1818
from libecalc.dto.emission import Emission
1919
from libecalc.expression import Expression
20+
from libecalc.infrastructure.neqsim_fluid_provider.neqsim_fluid_factory import NeqSimFluidFactory
2021
from libecalc.presentation.yaml.mappers.fluid_mapper import DRY_MW_18P3, MEDIUM_MW_19P4, RICH_MW_21P4
2122
from libecalc.presentation.yaml.yaml_types.models import YamlTurbine
2223
from libecalc.testing.yaml_builder import YamlTurbineBuilder
@@ -46,6 +47,21 @@ def fluid_model_dry() -> FluidModel:
4647
)
4748

4849

50+
@pytest.fixture
51+
def fluid_factory_medium(fluid_model_medium) -> NeqSimFluidFactory:
52+
return NeqSimFluidFactory(fluid_model_medium)
53+
54+
55+
@pytest.fixture
56+
def fluid_factory_rich(fluid_model_rich) -> NeqSimFluidFactory:
57+
return NeqSimFluidFactory(fluid_model_rich)
58+
59+
60+
@pytest.fixture
61+
def fluid_factory_dry(fluid_model_dry) -> NeqSimFluidFactory:
62+
return NeqSimFluidFactory(fluid_model_dry)
63+
64+
4965
@pytest.fixture
5066
def fuel_dto() -> libecalc.dto.fuel_type.FuelType:
5167
return libecalc.dto.fuel_type.FuelType(

tests/libecalc/core/models/compressor_modelling/test_simplified_compressor_train.py

Lines changed: 27 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@
1919
calculate_polytropic_head_campbell,
2020
)
2121
from libecalc.domain.process.value_objects.chart.generic import GenericChartFromDesignPoint, GenericChartFromInput
22-
from libecalc.domain.process.value_objects.fluid_stream import FluidStream, ProcessConditions
2322
from libecalc.infrastructure.neqsim_fluid_provider.neqsim_fluid_factory import NeqSimFluidFactory
24-
from libecalc.infrastructure.neqsim_fluid_provider.neqsim_thermo_system import NeqSimThermoSystem
2523

2624

2725
@pytest.fixture
@@ -203,7 +201,7 @@ def test_simplified_compressor_train_unknown_stages_with_constant_power_adjustme
203201
)
204202

205203

206-
def test_calculate_maximum_rate_for_stage(simplified_compressor_train_known_stages_dto, fluid_model_medium, caplog):
204+
def test_calculate_maximum_rate_for_stage(simplified_compressor_train_known_stages_dto, fluid_factory_medium, caplog):
207205
fluid_factory = NeqSimFluidFactory(simplified_compressor_train_known_stages_dto.fluid_model)
208206
compressor_train = CompressorTrainSimplifiedKnownStages(
209207
data_transfer_object=simplified_compressor_train_known_stages_dto,
@@ -219,33 +217,21 @@ def test_calculate_maximum_rate_for_stage(simplified_compressor_train_known_stag
219217
approx_expected_max_rates = [1116990, 1358999, 1536193, 1052085, 1052085, 1052085, 1052085, 1052085]
220218
for pressure_ratio, approx_expected_max_rate in zip(pressure_ratios, approx_expected_max_rates):
221219
calculated_max_rate = CompressorTrainSimplifiedKnownStages.calculate_maximum_rate_for_stage(
222-
inlet_stream=FluidStream(
223-
thermo_system=NeqSimThermoSystem(
224-
composition=fluid_model_medium.composition,
225-
eos_model=fluid_model_medium.eos_model,
226-
conditions=ProcessConditions(
227-
pressure_bara=inlet_pressure,
228-
temperature_kelvin=inlet_temperature_kelvin,
229-
),
230-
),
231-
mass_rate=1,
220+
inlet_stream=fluid_factory_medium.create_stream_from_mass_rate(
221+
pressure_bara=inlet_pressure,
222+
temperature_kelvin=inlet_temperature_kelvin,
223+
mass_rate_kg_per_h=1,
232224
),
233225
pressure_ratio=pressure_ratio,
234226
compressor_chart=stage.compressor_chart,
235227
)
236228
np.testing.assert_almost_equal(calculated_max_rate, approx_expected_max_rate, decimal=0)
237229

238230
caplog.set_level("CRITICAL")
239-
inlet_stream = FluidStream(
240-
thermo_system=NeqSimThermoSystem(
241-
composition=fluid_model_medium.composition,
242-
eos_model=fluid_model_medium.eos_model,
243-
conditions=ProcessConditions(
244-
pressure_bara=STANDARD_PRESSURE_BARA,
245-
temperature_kelvin=STANDARD_TEMPERATURE_KELVIN,
246-
),
247-
),
248-
mass_rate=1,
231+
inlet_stream = fluid_factory_medium.create_stream_from_mass_rate(
232+
pressure_bara=STANDARD_PRESSURE_BARA,
233+
temperature_kelvin=STANDARD_TEMPERATURE_KELVIN,
234+
mass_rate_kg_per_h=1,
249235
)
250236
with pytest.raises(EcalcError):
251237
CompressorTrainSimplifiedKnownStages.calculate_maximum_rate_for_stage(
@@ -718,7 +704,7 @@ def test_evaluate_compressor_simplified_valid_points(
718704
)
719705

720706

721-
def test_calculate_compressor_work(fluid_model_medium):
707+
def test_calculate_compressor_work(fluid_factory_medium):
722708
polytropic_efficiency = 0.75
723709
# Test with predefined compressor (one stage)
724710
compressor_chart = GenericChartFromDesignPoint(
@@ -734,7 +720,7 @@ def test_calculate_compressor_work(fluid_model_medium):
734720
pressure_ratios_per_stage = np.asarray([2.0, 1.8, 1.4, 1.5, 1.3, 2.8, 1.7])
735721

736722
compressor_train_dto = dto.CompressorTrainSimplifiedWithKnownStages(
737-
fluid_model=fluid_model_medium,
723+
fluid_model=fluid_factory_medium.fluid_model,
738724
stages=[
739725
dto.CompressorStage(
740726
compressor_chart=compressor_chart,
@@ -747,23 +733,17 @@ def test_calculate_compressor_work(fluid_model_medium):
747733
energy_usage_adjustment_constant=0,
748734
energy_usage_adjustment_factor=1,
749735
)
750-
fluid_factory = NeqSimFluidFactory(fluid_model_medium)
736+
fluid_factory = fluid_factory_medium
751737
compressor_train = CompressorTrainSimplifiedKnownStages(
752738
data_transfer_object=compressor_train_dto,
753739
fluid_factory=fluid_factory,
754740
)
755741
compressor_result = []
756742
for mass_rate, inlet_pressure, pressure_ratio in zip(mass_rates, inlet_pressures, pressure_ratios_per_stage):
757-
inlet_stream = FluidStream(
758-
thermo_system=NeqSimThermoSystem(
759-
composition=fluid_model_medium.composition,
760-
eos_model=fluid_model_medium.eos_model,
761-
conditions=ProcessConditions(
762-
pressure_bara=inlet_pressure,
763-
temperature_kelvin=313.15,
764-
),
765-
),
766-
mass_rate=mass_rate,
743+
inlet_stream = fluid_factory.create_stream_from_mass_rate(
744+
pressure_bara=inlet_pressure,
745+
temperature_kelvin=313.15,
746+
mass_rate_kg_per_h=mass_rate,
767747
)
768748
compressor_result.append(
769749
compressor_train.calculate_compressor_stage_work_given_outlet_pressure(
@@ -852,7 +832,7 @@ def test_calculate_compressor_work(fluid_model_medium):
852832
polytropic_efficiency = 0.75
853833

854834
compressor_train_dto = dto.CompressorTrainSimplifiedWithKnownStages(
855-
fluid_model=fluid_model_medium,
835+
fluid_model=fluid_factory_medium.fluid_model,
856836
stages=[
857837
dto.CompressorStage(
858838
inlet_temperature_kelvin=313.15,
@@ -866,7 +846,7 @@ def test_calculate_compressor_work(fluid_model_medium):
866846
energy_usage_adjustment_constant=0,
867847
energy_usage_adjustment_factor=1,
868848
)
869-
fluid_factory2 = NeqSimFluidFactory(fluid_model_medium)
849+
fluid_factory2 = fluid_factory_medium
870850
compressor_train = CompressorTrainSimplifiedKnownStages(
871851
data_transfer_object=compressor_train_dto,
872852
fluid_factory=fluid_factory2,
@@ -878,16 +858,10 @@ def test_calculate_compressor_work(fluid_model_medium):
878858
)
879859
compressor_result_chart_from_input_data = []
880860
for mass_rate, inlet_pressure, pressure_ratio in zip(mass_rates, inlet_pressures, pressure_ratios_per_stage):
881-
inlet_stream = FluidStream(
882-
thermo_system=NeqSimThermoSystem(
883-
composition=fluid_model_medium.composition,
884-
eos_model=fluid_model_medium.eos_model,
885-
conditions=ProcessConditions(
886-
pressure_bara=inlet_pressure,
887-
temperature_kelvin=313.15,
888-
),
889-
),
890-
mass_rate=mass_rate,
861+
inlet_stream = fluid_factory2.create_stream_from_mass_rate(
862+
pressure_bara=inlet_pressure,
863+
temperature_kelvin=313.15,
864+
mass_rate_kg_per_h=mass_rate,
891865
)
892866
compressor_result_chart_from_input_data.append(
893867
compressor_train.calculate_compressor_stage_work_given_outlet_pressure(
@@ -903,7 +877,7 @@ def test_calculate_compressor_work(fluid_model_medium):
903877
assert ~np.array([x.head_exceeds_maximum for x in compressor_result_chart_from_input_data]).all()
904878

905879

906-
def test_calculate_enthalpy_change_head_iteration_and_outlet_stream(fluid_model_dry):
880+
def test_calculate_enthalpy_change_head_iteration_and_outlet_stream(fluid_factory_dry):
907881
(
908882
inlet_pressure_values,
909883
pressure_ratio_values,
@@ -1058,16 +1032,10 @@ def test_calculate_enthalpy_change_head_iteration_and_outlet_stream(fluid_model_
10581032
]
10591033

10601034
inlet_streams = [
1061-
FluidStream(
1062-
thermo_system=NeqSimThermoSystem(
1063-
composition=fluid_model_dry.composition,
1064-
eos_model=fluid_model_dry.eos_model,
1065-
conditions=ProcessConditions(
1066-
pressure_bara=inlet_pressure,
1067-
temperature_kelvin=inlet_temperature_kelvin,
1068-
),
1069-
),
1070-
mass_rate=1.0, # Mass rate is not used in this test, so set to 1.0
1035+
fluid_factory_dry.create_stream_from_mass_rate(
1036+
pressure_bara=inlet_pressure,
1037+
temperature_kelvin=inlet_temperature_kelvin,
1038+
mass_rate_kg_per_h=1.0, # Mass rate is not used in this test, so set to 1.0
10711039
)
10721040
for inlet_pressure, inlet_temperature_kelvin in zip(inlet_pressure_values, inlet_temperature_kelvin_values)
10731041
]

tests/libecalc/core/models/compressor_modelling/test_single_speed_compressor_train_common_shaft.py

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
from libecalc.domain.process.compressor.core.train.train_evaluation_input import CompressorTrainEvaluationInput
1010
from libecalc.domain.process.core.results.compressor import CompressorTrainCommonShaftFailureStatus
1111
from libecalc.domain.process.value_objects.chart.chart_area_flag import ChartAreaFlag
12-
from libecalc.domain.process.value_objects.fluid_stream import FluidStream, ProcessConditions
1312
from libecalc.infrastructure.neqsim_fluid_provider.neqsim_fluid_factory import NeqSimFluidFactory
14-
from libecalc.infrastructure.neqsim_fluid_provider.neqsim_thermo_system import NeqSimThermoSystem
1513

1614

1715
@pytest.fixture
@@ -301,20 +299,14 @@ def test_evaluate_rate_ps_pd_common_asv(self, single_speed_compressor_train_comm
301299

302300

303301
class TestCalculateSingleSpeedCompressorStage:
304-
def test_rate_below_minimum_chart_rate(self, single_speed_compressor_train_stage, fluid_model_medium):
302+
def test_rate_below_minimum_chart_rate(self, single_speed_compressor_train_stage, fluid_factory_medium):
305303
mass_rate_kg_per_hour = 85500.0
306304
inlet_pressure_train_bara = 80.0
307305

308-
inlet_stream = FluidStream(
309-
thermo_system=NeqSimThermoSystem(
310-
composition=fluid_model_medium.composition,
311-
eos_model=fluid_model_medium.eos_model,
312-
conditions=ProcessConditions(
313-
pressure_bara=inlet_pressure_train_bara,
314-
temperature_kelvin=single_speed_compressor_train_stage.inlet_temperature_kelvin,
315-
),
316-
),
317-
mass_rate=mass_rate_kg_per_hour,
306+
inlet_stream = fluid_factory_medium.create_stream_from_mass_rate(
307+
pressure_bara=inlet_pressure_train_bara,
308+
temperature_kelvin=single_speed_compressor_train_stage.inlet_temperature_kelvin,
309+
mass_rate_kg_per_h=mass_rate_kg_per_hour,
318310
)
319311

320312
# stage.mass_rate_kg_per_hour = mass_rate_kg_per_hour
@@ -330,21 +322,15 @@ def test_rate_below_minimum_chart_rate(self, single_speed_compressor_train_stage
330322
assert result.outlet_stream.temperature_kelvin == pytest.approx(374.71, rel=0.001)
331323
assert result.outlet_stream.density == pytest.approx(117.14, rel=0.001)
332324

333-
def test_rate_within_chart_curve_range(self, single_speed_compressor_train_stage, fluid_model_medium):
325+
def test_rate_within_chart_curve_range(self, single_speed_compressor_train_stage, fluid_factory_medium):
334326
mass_rate_kg_per_hour = 200000.0
335327
# stage.mass_rate_kg_per_hour = mass_rate_kg_per_hour
336328
inlet_pressure_train_bara = 80.0
337329

338-
inlet_stream = FluidStream(
339-
thermo_system=NeqSimThermoSystem(
340-
composition=fluid_model_medium.composition,
341-
eos_model=fluid_model_medium.eos_model,
342-
conditions=ProcessConditions(
343-
pressure_bara=inlet_pressure_train_bara,
344-
temperature_kelvin=single_speed_compressor_train_stage.inlet_temperature_kelvin,
345-
),
346-
),
347-
mass_rate=mass_rate_kg_per_hour,
330+
inlet_stream = fluid_factory_medium.create_stream_from_mass_rate(
331+
pressure_bara=inlet_pressure_train_bara,
332+
temperature_kelvin=single_speed_compressor_train_stage.inlet_temperature_kelvin,
333+
mass_rate_kg_per_h=mass_rate_kg_per_hour,
348334
)
349335

350336
result = single_speed_compressor_train_stage.evaluate(
@@ -468,16 +454,12 @@ def test_calculate_single_speed_compressor_stage_given_target_discharge_pressure
468454
inlet_pressure_train_bara = 80.0
469455
mass_rate_kg_per_hour = 200000.0
470456
stage: CompressorTrainStage = single_speed_compressor_train_common_shaft_downstream_choking.stages[0]
471-
inlet_stream_stage = FluidStream(
472-
thermo_system=NeqSimThermoSystem(
473-
composition=single_speed_compressor_train_common_shaft_downstream_choking.fluid_factory.fluid_model.composition,
474-
eos_model=single_speed_compressor_train_common_shaft_downstream_choking.fluid_factory.fluid_model.eos_model,
475-
conditions=ProcessConditions(
476-
pressure_bara=inlet_pressure_train_bara,
477-
temperature_kelvin=stage.inlet_temperature_kelvin,
478-
),
479-
),
480-
mass_rate=mass_rate_kg_per_hour,
457+
inlet_stream_stage = (
458+
single_speed_compressor_train_common_shaft_downstream_choking.fluid_factory.create_stream_from_mass_rate(
459+
pressure_bara=inlet_pressure_train_bara,
460+
temperature_kelvin=stage.inlet_temperature_kelvin,
461+
mass_rate_kg_per_h=mass_rate_kg_per_hour,
462+
)
481463
)
482464
target_outlet_pressure = 130
483465

0 commit comments

Comments
 (0)