Coverage for backend/idaes_service/solver/methods/adapter_library.py: 100%
58 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
1from idaes.models.unit_models import (
2 Pump,
3 Heater,
4 Mixer,
5 StateJunction,
6 HeatExchanger,
7 Turbine,
8 PressureChanger,
9)
10from idaes.models.unit_models.heat_exchanger import delta_temperature_underwood_callback
11from idaes.models.unit_models.pressure_changer import ThermodynamicAssumption
12from idaes.models.unit_models.separator import SplittingType, EnergySplittingType
13from idaes_service.solver.custom.heat_exchanger_1d_wrapper import HeatExchanger1DWrapper
14from . import adapter_methods as methods
15from ..custom.custom_heat_exchanger import CustomHeatExchanger
16from ..custom.PySMOModel import PySMOModel
17from ..custom.energy.link import Link
18from ..custom.energy.power_property_package import PowerParameterBlock
19from ..custom.energy.ac_property_package import acParameterBlock
20from ..custom.energy.transformer_property_package import transformerParameterBlock
21from ..custom.updated_pressure_changer import Compressor
22from ..custom.energy.solar import Solar
23from ..custom.custom_valve import Valve
24from ..custom.energy.wind import Wind
25from ..custom.energy.energy_mixer import EnergyMixer
26from ..custom.energy.bus import Bus
27from ..custom.energy.acBus import acBus
28from ..custom.energy.transmissionLine import transmissionLine
29from ..custom.valve_wrapper import ValveWrapper
30from ..custom.energy.load import Load
31from ..custom.energy.hydro import Hydro
32from ..custom.energy.transformer import Transformer
33from ..custom.energy.storage import Storage
34from ..custom.direct_steam_injection import Dsi
35from ..custom.translator import GenericTranslator
36from idaes.models.control.controller import ControllerType, ControllerMVBoundType
37from ..custom.PIDController import PIDController2
38from ..custom.energy.grid import Grid
39from ..custom.custom_heater import DynamicHeater
40from ..custom.custom_tank import CustomTank
41from ..custom.custom_compressor import CustomCompressor
42from ..custom.custom_pump import CustomPump
43from ..custom.integration_block import IntegrationBlock
44from idaes.models.unit_models.cstr import CSTR
45from ..custom.energy.energy_splitter import EnergySplitter
46from ..custom.custom_turbine import CustomTurbine
47from ..custom.energy.mainDistributionBoard import MDB
48from ..custom.custom_separator import CustomSeparator
49from ..custom.custom_variable import CustomVariable
50from ..custom.thermal_utility_systems.steam_header import SteamHeader
51from ..custom.thermal_utility_systems.header import simple_header
52from ..custom.reactions.hda_stoich import HDAStoichiometricReactor
53from ..custom.custom_heat_exchanger_1d import CustomHeatExchanger1D
54from ..custom.thermal_utility_systems.simple_heat_pump import SimpleHeatPump
55from ..custom.thermal_utility_systems.steam_user import SteamUser
56from ..custom.thermal_utility_systems.desuperheater import Desuperheater
57from idaes.models_extra.power_generation.unit_models.waterpipe import WaterPipe
58from ..custom.SimpleEffectivenessHX_DH import HeatExchangerEffectiveness
59from idaes.models.unit_models.heat_exchanger_lc import HeatExchangerLumpedCapacitance
60from ..custom.custom_cooler import CustomCooler
62class UnitModelConstructor:
63 """
64 Schema for adapter library items
65 """
67 def __init__(self, model_constructor: type, arg_parsers: dict):
68 # idaes model constructor
69 self.model_constructor: type = model_constructor
70 # dictionary of argument parsers
71 self.arg_parsers: dict[str,methods.AdapterBase] = arg_parsers
75"""
76A dictionary of adapters for the idaes model constructors
77"""
78AdapterLibrary: dict[str, UnitModelConstructor] = {
79 "pump": UnitModelConstructor(
80 CustomPump,
81 {
82 "property_package": methods.PropertyPackage(),
83 "dynamic": methods.Constant(False),
84 "power_property_package": methods.PowerPropertyPackage(),
86 },
87 ),
88 "heater": UnitModelConstructor(
89 DynamicHeater,
90 {
91 "property_package": methods.PropertyPackage(),
92 "has_pressure_change": methods.Value(),
93 "dynamic": methods.Value(),
94 "has_holdup": methods.Value(),
95 },
96 ),
97 "compressor": UnitModelConstructor(
98 CustomCompressor,
99 {
100 "property_package": methods.PropertyPackage(),
101 "power_property_package": methods.PowerPropertyPackage(),
102 "dynamic": methods.Constant(False),
103 },
104 ),
105 "turbine": UnitModelConstructor(
106 CustomTurbine,
107 {
108 "property_package": methods.PropertyPackage(),
109 "power_property_package": methods.PowerPropertyPackage(),
110 "dynamic": methods.Constant(False),
111 "calculation_method": methods.Constant("isentropic"),
112 },
113 ),
114 "willans_turbine": UnitModelConstructor(
115 CustomTurbine,
116 {
117 "property_package": methods.PropertyPackage(),
118 "power_property_package": methods.PowerPropertyPackage(),
119 "dynamic": methods.Constant(False),
120 "calculation_method": methods.Constant("simple_willans"),
121 },
122 ),
123 "pl_turbine": UnitModelConstructor(
124 CustomTurbine,
125 {
126 "property_package": methods.PropertyPackage(),
127 "power_property_package": methods.PowerPropertyPackage(),
128 "dynamic": methods.Constant(False),
129 "calculation_method": methods.Constant("part_load_willans"),
130 }
131 ),
132 "dts_turbine": UnitModelConstructor(
133 CustomTurbine,
134 {
135 "property_package": methods.PropertyPackage(),
136 "power_property_package": methods.PowerPropertyPackage(),
137 "dynamic": methods.Constant(False),
138 "calculation_method": methods.Constant("Tsat_willans"),
139 }
140 ),
141 "bs_turbine": UnitModelConstructor(
142 CustomTurbine,
143 {
144 "property_package": methods.PropertyPackage(),
145 "power_property_package": methods.PowerPropertyPackage(),
146 "dynamic": methods.Constant(False),
147 "calculation_method": methods.Constant("BPST_willans"),
148 }
149 ),
150 "cs_turbine": UnitModelConstructor(
151 CustomTurbine,
152 {
153 "property_package": methods.PropertyPackage(),
154 "power_property_package": methods.PowerPropertyPackage(),
155 "dynamic": methods.Constant(False),
156 "calculation_method": methods.Constant("CT_willans"),
157 }
158 ),
159 "mixer": UnitModelConstructor(
160 Mixer,
161 {
162 "property_package": methods.PropertyPackage(),
163 "num_inlets": methods.Value(),
164 },
165 ),
166 "Tank": UnitModelConstructor(
167 CustomTank,
168 {
169 "property_package": methods.PropertyPackage(),
170 "dynamic": methods.Value(),
171 "has_holdup": methods.Value(),
172 "tank_type": methods.Constant("vertical_cylindrical_tank"),
173 "has_heat_transfer": methods.Constant(True),
174 }
175 ),
176 "heatExchanger": UnitModelConstructor(
177 CustomHeatExchanger,
178 {
179 "delta_temperature_callback": methods.Constant(
180 delta_temperature_underwood_callback
181 ),
182 "hot_side": methods.Dictionary(
183 {
184 "property_package": methods.PropertyPackage(),
185 "has_pressure_change": methods.Constant(True),
186 }
187 ),
188 "cold_side": methods.Dictionary(
189 {
190 "property_package": methods.PropertyPackage(),
191 "has_pressure_change": methods.Constant(True),
192 }
193 ),
194 "dynamic": methods.Constant(False),
195 },
196 ),
197 "heatPump": UnitModelConstructor(
198 SimpleHeatPump,
199 {
200 "source": methods.Dictionary(
201 {
202 "property_package": methods.PropertyPackage(),
203 "has_pressure_change": methods.Constant(False),
204 }
205 ),
206 "sink": methods.Dictionary(
207 {
208 "property_package": methods.PropertyPackage(),
209 "has_pressure_change": methods.Constant(False),
210 }
211 ),
212 "dynamic": methods.Constant(False),
213 },
214 ),
215 "valve": UnitModelConstructor(
216 ValveWrapper, # type: ignore
217 {
218 "property_package": methods.PropertyPackage(),
219 "enable_coefficients": methods.Value(),
220 "valve_function": methods.Value(),
221 "dynamic": methods.Constant(False),
222 },
223 ),
224 "cooler": UnitModelConstructor(
225 CustomCooler,
226 {
227 "property_package": methods.PropertyPackage(),
228 "has_pressure_change": methods.Value(),
229 "dynamic": methods.Constant(False),
230 },
231 ),
232 "splitter": UnitModelConstructor(
233 CustomSeparator,
234 {
235 "property_package": methods.PropertyPackage(),
236 "num_outlets": methods.Value(),
237 },
238 ),
239 "phaseSeparator": UnitModelConstructor(
240 CustomSeparator,
241 {
242 "property_package": methods.PropertyPackage(),
243 "num_outlets": methods.Value(),
244 "split_basis": methods.Constant(
245 SplittingType.phaseFlow
246 ),
247 "energy_split_basis": methods.Constant(
248 EnergySplittingType.enthalpy_split
249 ),
250 },
251 ),
252 "compoundSeparator": UnitModelConstructor(
253 CustomSeparator,
254 {
255 "property_package": methods.PropertyPackage(),
256 "num_outlets": methods.Value(),
257 "split_basis": methods.Constant(
258 SplittingType.componentFlow
259 ),
260 },
261 ),
262 "machineLearningBlock": UnitModelConstructor(PySMOModel, {
263 "property_package": methods.PropertyPackage(),
264 "model": methods.Value(),
265 "ids": methods.Value(),
266 "unitopNames": methods.Value(),
267 "num_inlets": methods.Value(),
268 "num_outlets": methods.Value(),
269 }),
270 "link": UnitModelConstructor(
271 Link,
272 {
273 "property_package": methods.PowerPropertyPackage(),
274 },
275 ),
276 "solar": UnitModelConstructor(
277 Solar,
278 {
279 "property_package": methods.PowerPropertyPackage(),
280 },
281 ),
282 "wind": UnitModelConstructor(
283 Wind,
284 {
285 "property_package": methods.PowerPropertyPackage(),
286 },
287 ),
288 "energy_mixer": UnitModelConstructor(
289 EnergyMixer,
290 {
291 "property_package": methods.PowerPropertyPackage(),
292 "num_inlets": methods.Value(),
293 },
294 ),
295 "bus": UnitModelConstructor(
296 Bus,
297 {
298 "property_package": methods.PowerPropertyPackage(),
299 "num_inlets": methods.Value(),
301 },
302 ),
303 "acBus": UnitModelConstructor(
304 acBus,
305 {
306 "property_package": methods.acPropertyPackage(),
307 "num_inlets": methods.Value(),
308 "num_outlets": methods.Value(),
309 },
310 ),
311 "transmissionLine": UnitModelConstructor(
312 transmissionLine,
313 {
314 "property_package": methods.PowerPropertyPackage(),
315 "num_inlets": methods.Value(),
316 "num_outlets": methods.Value(),
317 },
318 ),
319 "load": UnitModelConstructor(
320 Load,
321 {
322 "property_package": methods.PowerPropertyPackage(),
323 },
324 ),
325 "hydro": UnitModelConstructor(
326 Hydro,
327 {
328 "property_package": methods.PowerPropertyPackage(),
329 },
330 ),
332 "transformer": UnitModelConstructor(
333 Transformer,
334 {
335 "property_package": methods.PowerPropertyPackage(),
336 },
337 ),
338 "storage": UnitModelConstructor(
339 Storage,
340 {
341 "property_package": methods.PowerPropertyPackage(),
342 "has_holdup": methods.Value(),
343 "dynamic": methods.Value(),
344 },
345 ),
346 "direct_steam_injection": UnitModelConstructor(
347 Dsi,
348 {
349 "property_package": methods.PropertyPackage(),
350 "steam_property_package": methods.PropertyPackage(),
351 },
352 ),
353 "translator": UnitModelConstructor(
354 GenericTranslator,
355 {
356 "inlet_property_package": methods.PropertyPackage(),
357 "outlet_property_package": methods.PropertyPackage(),
358 "translator_type": methods.Value(),
359 },
360 ),
361 "pid_controller": UnitModelConstructor(
362 PIDController2,
363 {
364 "dynamic": methods.Constant(True),
365 "controller_type": methods.Constant(ControllerType.PI),
366 "calculate_initial_integral": methods.Constant(True),
367 "mv_bound_type": methods.Constant(ControllerMVBoundType.SMOOTH_BOUND),
368 },
369 ),
370 "custom_variable": UnitModelConstructor(
371 CustomVariable,
372 {},
373 ),
374 "grid": UnitModelConstructor(
375 Grid,
376 {
377 "property_package": methods.PowerPropertyPackage(),
378 },
379 ),
380 "integration": UnitModelConstructor(
381 IntegrationBlock,
382 {
383 },
384 ),
385 "stoich_hda": UnitModelConstructor(
386 HDAStoichiometricReactor,
387 {
388 "property_package": methods.ReactorPropertyPackage(),
389 "has_heat_transfer": methods.Constant(True),
390 #"has_heat_of_reaction": methods.Value(),
391 #"has_pressure_change": methods.Value(),
392 "has_holdup": methods.Constant(False),
393 "dynamic": methods.Constant(False),
394 "reaction_package": methods.ReactionPackage(),
395 },
396 ),
397 "stoich_hda": UnitModelConstructor(
398 HDAStoichiometricReactor,
399 {
400 "property_package": methods.ReactorPropertyPackage(),
401 "has_heat_transfer": methods.Constant(True),
402 #"has_heat_of_reaction": methods.Value(),
403 #"has_pressure_change": methods.Value(),
404 "has_holdup": methods.Constant(False),
405 "dynamic": methods.Constant(False),
406 "reaction_package": methods.ReactionPackage(),
407 },
408 ),
409 "RCT_CSTR": UnitModelConstructor(
410 CSTR,
411 {
412 "property_package": methods.ReactorPropertyPackage(),
413 "has_heat_transfer": methods.Value(),
414 "has_heat_of_reaction": methods.Value(),
415 "has_pressure_change": methods.Value(),
416 "has_holdup": methods.Value(),
417 "dynamic": methods.Value(),
418 "reaction_package": methods.ReactionPackage(),
419 },
421 ),
422 "energy_splitter": UnitModelConstructor(
423 EnergySplitter,
424 {
425 "property_package": methods.PowerPropertyPackage(),
426 "num_inlets": methods.Value(),
427 "num_outlets": methods.Value(),
428 },
429 ),
430 "mdb": UnitModelConstructor(
431 MDB,
432 {
433 "property_package": methods.PowerPropertyPackage(),
434 "num_inlets": methods.Value(),
435 "num_outlets": methods.Value(),
436 }
437 ),
438 "header": UnitModelConstructor(
439 SteamHeader,
440 {
441 "property_package": methods.PropertyPackage(),
442 "num_inlets": methods.Value(),
443 "num_outlets": methods.Value(),
444 },
445 ),
446 "simple_header": UnitModelConstructor(
447 simple_header,
448 {
449 "property_package": methods.PropertyPackage(),
450 "num_inlets": methods.Value(),
451 "num_outlets": methods.Value(),
452 },
453 ),
454 "heat_exchanger_1d": UnitModelConstructor(
455 HeatExchanger1DWrapper,
456 {
457 "hot_side": methods.Dictionary({
458 "property_package": methods.PropertyPackage(),
459 "transformation_method": methods.Value(),
460 "transformation_scheme": methods.Value(),
461 "has_pressure_change": methods.Constant(False),
462 }),
463 "cold_side": methods.Dictionary({
464 "property_package": methods.PropertyPackage(),
465 "transformation_method": methods.Value(),
466 "transformation_scheme": methods.Value(),
467 "has_pressure_change": methods.Constant(False),
468 }),
469 "finite_elements": methods.Value(),
470 "collocation_points": methods.Value(),
471 "flow_type": methods.Value(),
472 },
473 ),
474 "steam_user": UnitModelConstructor(
475 SteamUser,
476 {
477 "property_package": methods.PropertyPackage(),
478 }
479 ),
480 "desuperheater": UnitModelConstructor(
481 Desuperheater,
482 {
483 "property_package": methods.PropertyPackage(),
484 }
485 ),
486 "heat_exchanger_ntu": UnitModelConstructor(
487 HeatExchangerEffectiveness,
488 {
489 "hot_side": methods.Dictionary(
490 {
491 "property_package": methods.PropertyPackage(),
492 "has_pressure_change": methods.Constant(True),
493 }
494 ),
495 "cold_side": methods.Dictionary(
496 {
497 "property_package": methods.PropertyPackage(),
498 "has_pressure_change": methods.Constant(True),
499 }
500 ),
501 "dynamic": methods.Constant(False),
502 },
503 ),
504 "waterpipe": UnitModelConstructor(
505 WaterPipe,
506 {
507 "property_package": methods.PropertyPackage(),
508 "has_heat_transfer": methods.Constant(False),
509 "has_pressure_change": methods.Constant(True),
510 }
511 ),
512 "heat_exchanger_lc": UnitModelConstructor(
513 HeatExchangerLumpedCapacitance,
514 {
515 "hot_side": methods.Dictionary(
516 {
517 "property_package": methods.PropertyPackage(),
518 "has_pressure_change": methods.Constant(False),
519 }
520 ),
521 "cold_side": methods.Dictionary(
522 {
523 "property_package": methods.PropertyPackage(),
524 "has_pressure_change": methods.Constant(False),
525 }
526 ),
527 "dynamic_heat_balance": methods.Constant(False),
528 },
529 )
530 }