11from typing import Any
22
33from libecalc .common .energy_model_type import EnergyModelType
4- from libecalc .common .fluid import MultipleStreamsAndPressureStream
5- from libecalc .common .fluid_stream_type import FluidStreamType
64from libecalc .common .logger import logger
75from libecalc .domain .infrastructure .energy_components .turbine import Turbine
86from libecalc .domain .process .compressor .core .base import CompressorModel , CompressorWithTurbineModel
97from libecalc .domain .process .compressor .core .sampled import CompressorModelSampled
10- from libecalc .domain .process .compressor .core .train .fluid import FluidStream
118from libecalc .domain .process .compressor .core .train .simplified_train import (
129 CompressorTrainSimplifiedKnownStages ,
1310 CompressorTrainSimplifiedUnknownStages ,
3229 VariableSpeedCompressorTrainMultipleStreamsAndPressures ,
3330)
3431from libecalc .domain .process .compressor .dto .model_types import CompressorModelTypes as CompressorModelDTO
32+ from libecalc .domain .process .value_objects .fluid_stream .fluid_factory import FluidFactoryInterface
33+ from libecalc .domain .process .value_objects .fluid_stream .fluid_model import FluidModel
34+ from libecalc .domain .process .value_objects .fluid_stream .multiple_streams_stream import (
35+ FluidStreamType ,
36+ MultipleStreamsAndPressureStream ,
37+ )
38+ from libecalc .infrastructure .neqsim_fluid_provider .neqsim_fluid_factory import NeqSimFluidFactory
39+
40+
41+ def _create_fluid_factory (fluid_model : FluidModel | None ) -> FluidFactoryInterface | None :
42+ """Create a fluid factory from a fluid model."""
43+ if fluid_model is None :
44+ return None
45+ return NeqSimFluidFactory (fluid_model )
3546
3647
3748def _create_variable_speed_compressor_train_multiple_streams_and_pressures_stream (
@@ -41,7 +52,7 @@ def _create_variable_speed_compressor_train_multiple_streams_and_pressures_strea
4152 is_inlet_stream = stream_data .typ == FluidStreamType .INGOING
4253 return FluidStreamObjectForMultipleStreams (
4354 name = stream_data .name ,
44- fluid = FluidStream ( fluid_model = stream_data .fluid_model ) if stream_data . fluid_model else None ,
55+ fluid_model = stream_data .fluid_model ,
4556 is_inlet_stream = is_inlet_stream ,
4657 connected_to_stage_no = stream_references [stream_data .name ],
4758 )
@@ -52,8 +63,12 @@ def _create_compressor_train_simplified_with_known_stages(
5263) -> CompressorTrainSimplifiedKnownStages :
5364 # Energy usage adjustment not supported for this model (yet)
5465 # Issue error if factors are not default (and not changing the energy usage result)
66+ fluid_factory = _create_fluid_factory (compressor_model_dto .fluid_model )
67+ if fluid_factory is None :
68+ raise ValueError ("Fluid model is required for compressor train" )
5569 return CompressorTrainSimplifiedKnownStages (
5670 data_transfer_object = compressor_model_dto ,
71+ fluid_factory = fluid_factory ,
5772 )
5873
5974
@@ -81,24 +96,48 @@ def _create_compressor_with_turbine(
8196def _create_single_speed_compressor_train (
8297 compressor_model_dto : SingleSpeedCompressorTrain ,
8398) -> SingleSpeedCompressorTrainCommonShaft :
99+ fluid_factory = _create_fluid_factory (compressor_model_dto .fluid_model )
100+ if fluid_factory is None :
101+ raise ValueError ("Fluid model is required for compressor train" )
84102 return SingleSpeedCompressorTrainCommonShaft (
85103 data_transfer_object = compressor_model_dto ,
104+ fluid_factory = fluid_factory ,
86105 )
87106
88107
89108def _create_variable_speed_compressor_train (
90109 compressor_model_dto : VariableSpeedCompressorTrain ,
91110) -> VariableSpeedCompressorTrainCommonShaft :
111+ fluid_factory = _create_fluid_factory (compressor_model_dto .fluid_model )
112+ if fluid_factory is None :
113+ raise ValueError ("Fluid model is required for compressor train" )
92114 return VariableSpeedCompressorTrainCommonShaft (
93115 data_transfer_object = compressor_model_dto ,
116+ fluid_factory = fluid_factory ,
94117 )
95118
96119
97120def _create_variable_speed_compressor_train_multiple_streams_and_pressures (
98121 compressor_model_dto : VariableSpeedCompressorTrainMultipleStreamsAndPressures ,
99122) -> VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPressures :
123+ # Find the first inlet stream's fluid model for the train inlet
124+ fluid_model_train_inlet = None
125+ for stream in compressor_model_dto .streams :
126+ if stream .typ == FluidStreamType .INGOING and stream .fluid_model is not None :
127+ fluid_model_train_inlet = stream .fluid_model
128+ break
129+
130+ # Fall back to dto fluid_model if no inlet stream has a fluid model
131+ if fluid_model_train_inlet is None :
132+ fluid_model_train_inlet = compressor_model_dto .fluid_model
133+
134+ fluid_factory_train_inlet = _create_fluid_factory (fluid_model_train_inlet )
135+ if fluid_factory_train_inlet is None :
136+ raise ValueError ("Fluid model is required for compressor train" )
137+
100138 return VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPressures (
101139 data_transfer_object = compressor_model_dto ,
140+ fluid_factory = fluid_factory_train_inlet ,
102141 streams = [
103142 _create_variable_speed_compressor_train_multiple_streams_and_pressures_stream (
104143 stream_specification_dto , compressor_model_dto .stream_references
@@ -111,7 +150,13 @@ def _create_variable_speed_compressor_train_multiple_streams_and_pressures(
111150def _create_compressor_train_simplified_with_unknown_stages (
112151 compressor_model_dto : CompressorTrainSimplifiedWithUnknownStages ,
113152) -> CompressorTrainSimplifiedUnknownStages :
114- return CompressorTrainSimplifiedUnknownStages (data_transfer_object = compressor_model_dto )
153+ fluid_factory = _create_fluid_factory (compressor_model_dto .fluid_model )
154+ if fluid_factory is None :
155+ raise ValueError ("Fluid model is required for compressor train" )
156+ return CompressorTrainSimplifiedUnknownStages (
157+ data_transfer_object = compressor_model_dto ,
158+ fluid_factory = fluid_factory ,
159+ )
115160
116161
117162def _create_compressor_sampled (compressor_model_dto : CompressorSampled ) -> CompressorModelSampled :
0 commit comments