Coverage for backend/ahuora-builder/src/ahuora_builder/custom/custom_turbine.py: 95%
40 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
1# Import Pyomo libraries
2from pyomo.environ import (
3 Var,
4 Suffix,
5 units as pyunits,
6)
7from pyomo.common.config import ConfigBlock, ConfigValue, In
8from idaes.core.util.tables import create_stream_table_dataframe
9from idaes.core.util.exceptions import ConfigurationError
10# Import IDAES cores
11from idaes.core import (
12 declare_process_block_class,
13 UnitModelBlockData,
14 useDefault,
15)
16from idaes.core.util.config import is_physical_parameter_block
17import idaes.core.util.scaling as iscale
18import idaes.logger as idaeslog
20from idaes.models.unit_models.pressure_changer import (
21 TurbineData,
22)
23from idaes.core.util.exceptions import PropertyNotSupportedError, InitializationError
26# Import Python libraries
29# Import Pyomo libraries
30from pyomo.environ import (
31 Block,
32 value,
33 Var,
34 Expression,
35 Constraint,
36 Reference,
37 check_optimal_termination,
38 Reals,
39)
40from pyomo.common.config import ConfigBlock, ConfigValue, In, Bool
41from idaes.core.solvers import get_solver
42from .thermal_utility_systems.willans_turbine import TurbineBaseData
43from .inverted import add_inverted, initialise_inverted
46# When using this file the name "CustomCompressor" is what is imported
47@declare_process_block_class("CustomTurbine")
48class CustomTurbineData(TurbineBaseData):
49 """
50 Zero order Load model
51 """
53 # CONFIG are options for the unit model, this simple model only has the mandatory config options
54 CONFIG = TurbineBaseData.CONFIG()
56 CONFIG.declare(
57 "power_property_package",
58 ConfigValue(
59 default=useDefault,
60 domain=is_physical_parameter_block,
61 description="Property package to use for power",
62 doc="""Power Property parameter object used to define power calculations,
63 **default** - useDefault.
64 **Valid values:** {
65 **useDefault** - use default package from parent model or flowsheet,
66 **PhysicalParameterObject** - a PhysicalParameterBlock object.}""",
67 ),
68 )
69 CONFIG.declare(
70 "power_property_package_args",
71 ConfigBlock(
72 implicit=True,
73 description="Arguments to use for constructing power property packages",
74 doc="""A ConfigBlock with arguments to be passed to a property block(s)
75 and used when constructing these,
76 **default** - None.
77 **Valid values:** {
78 see property package for documentation.}""",
79 ),
80 )
82 def build(self):
83 # build always starts by calling super().build()
84 # This triggers a lot of boilerplate in the background for you
85 super().build()
87 # This creates blank scaling factors, which are populated later
88 self.scaling_factor = Suffix(direction=Suffix.EXPORT)
91 # Add state blocks for inlet, outlet, and waste
92 # These include the state variables and any other properties on demand
94 tmp_dict = dict(**self.config.property_package_args)
95 tmp_dict["parameters"] = self.config.property_package
96 tmp_dict["defined_state"] = True # inlet block is an inlet
97 # Add inlet block
98 # self.properties_in = self.config.property_package.state_block_class(
99 # self.flowsheet().config.time, doc="Material properties of inlet", **tmp_dict
100 # )
103 # Add outlet and waste block
104 tmp_dict["defined_state"] = False # outlet and waste block is not an inlet
105 self.power_properties_out = self.config.power_property_package.state_block_class(
106 self.flowsheet().config.time,
107 doc="Material properties of outlet",
108 **tmp_dict
109 )
112 # Add ports - oftentimes users interact with these rather than the state blocks
113 self.add_port(name="power_outlet", block=self.power_properties_out)
115 # Add constraints
116 # Usually unit models use a control volume to do the mass, energy, and momentum
117 # balances, however, they will be explicitly written out in this example
118 @self.Constraint(
119 self.flowsheet().time,
120 doc="Power out",
121 )
122 def eq_power_out(b, t):
123 return (
124 self.power_properties_out[t].power == self.work_electrical[t] * -1
125 )
127 # Add inverted deltaP property
128 add_inverted(self, "deltaP")
130 def initialize_build(self, *args, **kwargs):
131 initialise_inverted(self, "deltaP")
133 super().initialize_build(*args, **kwargs)
136 @staticmethod
137 def ahuora_metadata():
138 from ahuora_unit_ops.json_config import (
139 JsonAdapterArgConfig,
140 JsonFrontendConfig,
141 JsonGraphicObjectConfig,
142 JsonIdaesAdapterConfig,
143 JsonPortConfig,
144 JsonPropertyConfig,
145 JsonPropertySetGroupConfig,
146 JsonUnitOpConfig,
147 JsonVariantConfig,
148 )
150 return (
151JsonUnitOpConfig(
152 key='turbine',
153 objectType='turbine',
154 enumMember='Turbine',
155 displayType='Turbine',
156 displayName='Turbine',
157 categoryPath=['chemical', 'pressure_changer'],
158 ports={
159 'inlet': JsonPortConfig(
160 displayName='Inlet',
161 type='inlet',
162 streamType='stream',
163 many=False,
164 default=1,
165 minimum=1,
166 makeStream=True,
167 streamOffset=0.75,
168 streamName='S',
169 ),
170 'outlet': JsonPortConfig(
171 displayName='Outlet',
172 type='outlet',
173 streamType='stream',
174 many=False,
175 default=1,
176 minimum=1,
177 makeStream=True,
178 streamOffset=0.75,
179 streamName='S',
180 ),
181 'power_outlet': JsonPortConfig(
182 displayName='Power Stream',
183 type='outlet',
184 streamType='energy_stream',
185 many=False,
186 default=1,
187 minimum=1,
188 makeStream=False,
189 streamOffset=0.75,
190 streamName='PS',
191 ),
192 },
193 propertyPackagePorts={
194 '': ['inlet', 'outlet'],
195 },
196 graphicObject=JsonGraphicObjectConfig(
197 kind='unitop_graphic',
198 ),
199 indexSets=[],
200 properties={
201 'deltaP_inverted': JsonPropertyConfig(
202 propertySetGroup='default',
203 displayName='Pressure Drop',
204 indexSets=None,
205 sumToOne=False,
206 value=None,
207 unit=None,
208 unitType='pressure',
209 description=None,
210 type='numeric',
211 many=False,
212 default=1,
213 options={},
214 hasTimeIndex=True,
215 ),
216 'efficiency_isentropic': JsonPropertyConfig(
217 propertySetGroup='default',
218 displayName='Isentropic Efficiency',
219 indexSets=None,
220 sumToOne=False,
221 value=None,
222 unit=None,
223 unitType='ratio',
224 description=None,
225 type='numeric',
226 many=False,
227 default=1,
228 options={},
229 hasTimeIndex=True,
230 ),
231 'work_mechanical': JsonPropertyConfig(
232 propertySetGroup='default',
233 displayName='Mechanical Work',
234 indexSets=None,
235 sumToOne=False,
236 value=None,
237 unit=None,
238 unitType='heatflow',
239 description=None,
240 type='numeric',
241 many=False,
242 default=1,
243 options={},
244 hasTimeIndex=True,
245 ),
246 'efficiency_motor': JsonPropertyConfig(
247 propertySetGroup='default',
248 displayName='Motor Efficiency',
249 indexSets=None,
250 sumToOne=False,
251 value=1,
252 unit='dimensionless',
253 unitType='ratio',
254 description=None,
255 type='numeric',
256 many=False,
257 default=1,
258 options={},
259 hasTimeIndex=True,
260 ),
261 'work_electrical': JsonPropertyConfig(
262 propertySetGroup='default',
263 displayName='Electrical Work',
264 indexSets=None,
265 sumToOne=False,
266 value=0,
267 unit='kW',
268 unitType='heatflow',
269 description=None,
270 type='numeric',
271 many=False,
272 default=1,
273 options={},
274 hasTimeIndex=True,
275 ),
276 },
277 propertySetGroups={
278 'default': JsonPropertySetGroupConfig(
279 type='stateVars',
280 displayName='Properties',
281 stateVars=['work_mechanical', 'efficiency_isentropic', 'efficiency_motor'],
282 toggle=None,
283 ),
284 },
285 keyProperties=['deltaP_inverted'],
286 splitterFractionName=None,
287 idaesAdapter=JsonIdaesAdapterConfig(
288 constructor='ahuora_builder.custom.custom_turbine.CustomTurbine',
289 args={
290 'property_package': JsonAdapterArgConfig(
291 kind='property_package',
292 label=None,
293 ),
294 'power_property_package': JsonAdapterArgConfig(
295 kind='constant_schema',
296 schema='PowerPPArgSchema',
297 ),
298 'dynamic': JsonAdapterArgConfig(
299 kind='constant',
300 value=False,
301 ),
302 'calculation_method': JsonAdapterArgConfig(
303 kind='constant',
304 value='isentropic',
305 ),
306 },
307 ports=None,
308 properties=None,
309 ),
310 frontend=JsonFrontendConfig(
311 showInPanel=True,
312 variant=JsonVariantConfig(
313 familyKey='turbine',
314 label='Turbine',
315 selectorLabel='Turbine Type',
316 default=True,
317 order=0,
318 preservePorts=True,
319 preserveGraphic=True,
320 ),
321 ),
322 ),
323JsonUnitOpConfig(
324 key='willans_turbine',
325 objectType='willans_turbine',
326 enumMember='WillansTurbine',
327 displayType='Simple Willans Turbine',
328 displayName='Simple Willans Turbine',
329 categoryPath=['chemical', 'pressure_changer'],
330 ports={
331 'inlet': JsonPortConfig(
332 displayName='Inlet',
333 type='inlet',
334 streamType='stream',
335 many=False,
336 default=1,
337 minimum=1,
338 makeStream=True,
339 streamOffset=0.75,
340 streamName='S',
341 ),
342 'outlet': JsonPortConfig(
343 displayName='Outlet',
344 type='outlet',
345 streamType='stream',
346 many=False,
347 default=1,
348 minimum=1,
349 makeStream=True,
350 streamOffset=0.75,
351 streamName='S',
352 ),
353 'power_outlet': JsonPortConfig(
354 displayName='Power Stream',
355 type='outlet',
356 streamType='energy_stream',
357 many=False,
358 default=1,
359 minimum=1,
360 makeStream=False,
361 streamOffset=0.75,
362 streamName='PS',
363 ),
364 },
365 propertyPackagePorts={
366 '': ['inlet', 'outlet'],
367 },
368 graphicObject=JsonGraphicObjectConfig(
369 kind='unitop_graphic',
370 ),
371 indexSets=[],
372 properties={
373 'deltaP_inverted': JsonPropertyConfig(
374 propertySetGroup='default',
375 displayName='Pressure Drop',
376 indexSets=None,
377 sumToOne=False,
378 value=None,
379 unit=None,
380 unitType='pressure',
381 description=None,
382 type='numeric',
383 many=False,
384 default=1,
385 options={},
386 hasTimeIndex=True,
387 ),
388 'efficiency_isentropic': JsonPropertyConfig(
389 propertySetGroup='default',
390 displayName='Isentropic Efficiency',
391 indexSets=None,
392 sumToOne=False,
393 value=None,
394 unit=None,
395 unitType='ratio',
396 description=None,
397 type='numeric',
398 many=False,
399 default=1,
400 options={},
401 hasTimeIndex=True,
402 ),
403 'work_mechanical': JsonPropertyConfig(
404 propertySetGroup='default',
405 displayName='Mechanical Work',
406 indexSets=None,
407 sumToOne=False,
408 value=None,
409 unit=None,
410 unitType='heatflow',
411 description=None,
412 type='numeric',
413 many=False,
414 default=1,
415 options={},
416 hasTimeIndex=True,
417 ),
418 'efficiency_motor': JsonPropertyConfig(
419 propertySetGroup='default',
420 displayName='Motor Efficiency',
421 indexSets=None,
422 sumToOne=False,
423 value=1,
424 unit='dimensionless',
425 unitType='ratio',
426 description=None,
427 type='numeric',
428 many=False,
429 default=1,
430 options={},
431 hasTimeIndex=True,
432 ),
433 'work_electrical': JsonPropertyConfig(
434 propertySetGroup='default',
435 displayName='Electrical Work',
436 indexSets=None,
437 sumToOne=False,
438 value=0,
439 unit='kW',
440 unitType='heatflow',
441 description=None,
442 type='numeric',
443 many=False,
444 default=1,
445 options={},
446 hasTimeIndex=True,
447 ),
448 'willans_intercept': JsonPropertyConfig(
449 propertySetGroup='default',
450 displayName='Willans Intercept',
451 indexSets=None,
452 sumToOne=False,
453 value=None,
454 unit=None,
455 unitType='heatflow',
456 description=None,
457 type='numeric',
458 many=False,
459 default=1,
460 options={},
461 hasTimeIndex=True,
462 ),
463 'willans_slope': JsonPropertyConfig(
464 propertySetGroup='default',
465 displayName='Willans Slope',
466 indexSets=None,
467 sumToOne=False,
468 value=None,
469 unit=None,
470 unitType='molarEnthalpy',
471 description=None,
472 type='numeric',
473 many=False,
474 default=1,
475 options={},
476 hasTimeIndex=True,
477 ),
478 'willans_max_mol': JsonPropertyConfig(
479 propertySetGroup='default',
480 displayName='Maximum Molar Flow',
481 indexSets=None,
482 sumToOne=False,
483 value=None,
484 unit=None,
485 unitType='molarflow',
486 description=None,
487 type='numeric',
488 many=False,
489 default=1,
490 options={},
491 hasTimeIndex=True,
492 ),
493 },
494 propertySetGroups={
495 'default': JsonPropertySetGroupConfig(
496 type='stateVars',
497 displayName='Properties',
498 stateVars=[
499 'willans_slope',
500 'willans_intercept',
501 'willans_max_mol',
502 'deltaP_inverted',
503 'efficiency_motor',
504 ],
505 toggle=None,
506 ),
507 },
508 keyProperties=['work_mechanical'],
509 splitterFractionName=None,
510 idaesAdapter=JsonIdaesAdapterConfig(
511 constructor='ahuora_builder.custom.custom_turbine.CustomTurbine',
512 args={
513 'property_package': JsonAdapterArgConfig(
514 kind='property_package',
515 label=None,
516 ),
517 'power_property_package': JsonAdapterArgConfig(
518 kind='constant_schema',
519 schema='PowerPPArgSchema',
520 ),
521 'dynamic': JsonAdapterArgConfig(
522 kind='constant',
523 value=False,
524 ),
525 'calculation_method': JsonAdapterArgConfig(
526 kind='constant',
527 value='simple_willans',
528 ),
529 },
530 ports=None,
531 properties=None,
532 ),
533 frontend=JsonFrontendConfig(
534 showInPanel=False,
535 variant=JsonVariantConfig(
536 familyKey='turbine',
537 label='Simple Willans Turbine',
538 selectorLabel='Turbine Type',
539 default=False,
540 order=10,
541 preservePorts=True,
542 preserveGraphic=True,
543 ),
544 ),
545 ),
546JsonUnitOpConfig(
547 key='pl_turbine',
548 objectType='pl_turbine',
549 enumMember='PlTurbine',
550 displayType='Part-Load Willans Turbine',
551 displayName='Part-Load Willans Turbine',
552 categoryPath=['chemical', 'pressure_changer'],
553 ports={
554 'inlet': JsonPortConfig(
555 displayName='Inlet',
556 type='inlet',
557 streamType='stream',
558 many=False,
559 default=1,
560 minimum=1,
561 makeStream=True,
562 streamOffset=0.75,
563 streamName='S',
564 ),
565 'outlet': JsonPortConfig(
566 displayName='Outlet',
567 type='outlet',
568 streamType='stream',
569 many=False,
570 default=1,
571 minimum=1,
572 makeStream=True,
573 streamOffset=0.75,
574 streamName='S',
575 ),
576 'power_outlet': JsonPortConfig(
577 displayName='Power Stream',
578 type='outlet',
579 streamType='energy_stream',
580 many=False,
581 default=1,
582 minimum=1,
583 makeStream=False,
584 streamOffset=0.75,
585 streamName='PS',
586 ),
587 },
588 propertyPackagePorts={
589 '': ['inlet', 'outlet'],
590 },
591 graphicObject=JsonGraphicObjectConfig(
592 kind='unitop_graphic',
593 ),
594 indexSets=[],
595 properties={
596 'deltaP_inverted': JsonPropertyConfig(
597 propertySetGroup='default',
598 displayName='Pressure Drop',
599 indexSets=None,
600 sumToOne=False,
601 value=None,
602 unit=None,
603 unitType='pressure',
604 description=None,
605 type='numeric',
606 many=False,
607 default=1,
608 options={},
609 hasTimeIndex=True,
610 ),
611 'efficiency_isentropic': JsonPropertyConfig(
612 propertySetGroup='default',
613 displayName='Isentropic Efficiency',
614 indexSets=None,
615 sumToOne=False,
616 value=None,
617 unit=None,
618 unitType='ratio',
619 description=None,
620 type='numeric',
621 many=False,
622 default=1,
623 options={},
624 hasTimeIndex=True,
625 ),
626 'work_mechanical': JsonPropertyConfig(
627 propertySetGroup='default',
628 displayName='Mechanical Work',
629 indexSets=None,
630 sumToOne=False,
631 value=None,
632 unit=None,
633 unitType='heatflow',
634 description=None,
635 type='numeric',
636 many=False,
637 default=1,
638 options={},
639 hasTimeIndex=True,
640 ),
641 'efficiency_motor': JsonPropertyConfig(
642 propertySetGroup='default',
643 displayName='Motor Efficiency',
644 indexSets=None,
645 sumToOne=False,
646 value=1,
647 unit='dimensionless',
648 unitType='ratio',
649 description=None,
650 type='numeric',
651 many=False,
652 default=1,
653 options={},
654 hasTimeIndex=True,
655 ),
656 'work_electrical': JsonPropertyConfig(
657 propertySetGroup='default',
658 displayName='Electrical Work',
659 indexSets=None,
660 sumToOne=False,
661 value=0,
662 unit='kW',
663 unitType='heatflow',
664 description=None,
665 type='numeric',
666 many=False,
667 default=1,
668 options={},
669 hasTimeIndex=True,
670 ),
671 'willans_intercept': JsonPropertyConfig(
672 propertySetGroup='default',
673 displayName='Willans Intercept',
674 indexSets=None,
675 sumToOne=False,
676 value=None,
677 unit=None,
678 unitType='heatflow',
679 description=None,
680 type='numeric',
681 many=False,
682 default=1,
683 options={},
684 hasTimeIndex=True,
685 ),
686 'willans_slope': JsonPropertyConfig(
687 propertySetGroup='default',
688 displayName='Willans Slope',
689 indexSets=None,
690 sumToOne=False,
691 value=None,
692 unit=None,
693 unitType='molarEnthalpy',
694 description=None,
695 type='numeric',
696 many=False,
697 default=1,
698 options={},
699 hasTimeIndex=True,
700 ),
701 'willans_max_mol': JsonPropertyConfig(
702 propertySetGroup='default',
703 displayName='Maximum Molar Flow',
704 indexSets=None,
705 sumToOne=False,
706 value=None,
707 unit=None,
708 unitType='molarflow',
709 description=None,
710 type='numeric',
711 many=False,
712 default=1,
713 options={},
714 hasTimeIndex=True,
715 ),
716 'willans_a': JsonPropertyConfig(
717 propertySetGroup='default',
718 displayName='Willans A',
719 indexSets=None,
720 sumToOne=False,
721 value=None,
722 unit=None,
723 unitType='ratio',
724 description=None,
725 type='numeric',
726 many=False,
727 default=1,
728 options={},
729 hasTimeIndex=True,
730 ),
731 'willans_b': JsonPropertyConfig(
732 propertySetGroup='default',
733 displayName='Willans B',
734 indexSets=None,
735 sumToOne=False,
736 value=None,
737 unit=None,
738 unitType='heatflow',
739 description=None,
740 type='numeric',
741 many=False,
742 default=1,
743 options={},
744 hasTimeIndex=True,
745 ),
746 'willans_efficiency': JsonPropertyConfig(
747 propertySetGroup='default',
748 displayName='Willans Efficiency',
749 indexSets=None,
750 sumToOne=False,
751 value=None,
752 unit=None,
753 unitType='ratio',
754 description=None,
755 type='numeric',
756 many=False,
757 default=1,
758 options={},
759 hasTimeIndex=True,
760 ),
761 },
762 propertySetGroups={
763 'default': JsonPropertySetGroupConfig(
764 type='stateVars',
765 displayName='Properties',
766 stateVars=[
767 'willans_a',
768 'willans_b',
769 'willans_efficiency',
770 'willans_max_mol',
771 'deltaP_inverted',
772 'efficiency_motor',
773 ],
774 toggle=None,
775 ),
776 },
777 keyProperties=['work_mechanical', 'willans_intercept', 'willans_slope'],
778 splitterFractionName=None,
779 idaesAdapter=JsonIdaesAdapterConfig(
780 constructor='ahuora_builder.custom.custom_turbine.CustomTurbine',
781 args={
782 'property_package': JsonAdapterArgConfig(
783 kind='property_package',
784 label=None,
785 ),
786 'power_property_package': JsonAdapterArgConfig(
787 kind='constant_schema',
788 schema='PowerPPArgSchema',
789 ),
790 'dynamic': JsonAdapterArgConfig(
791 kind='constant',
792 value=False,
793 ),
794 'calculation_method': JsonAdapterArgConfig(
795 kind='constant',
796 value='part_load_willans',
797 ),
798 },
799 ports=None,
800 properties=None,
801 ),
802 frontend=JsonFrontendConfig(
803 showInPanel=False,
804 variant=JsonVariantConfig(
805 familyKey='turbine',
806 label='Part-Load Willans Turbine',
807 selectorLabel='Turbine Type',
808 default=False,
809 order=20,
810 preservePorts=True,
811 preserveGraphic=True,
812 ),
813 ),
814 ),
815JsonUnitOpConfig(
816 key='dts_turbine',
817 objectType='dts_turbine',
818 enumMember='DtsTurbine',
819 displayType='Delta Tsat Willans Turbine',
820 displayName='Delta Tsat Willans Turbine',
821 categoryPath=['chemical', 'pressure_changer'],
822 ports={
823 'inlet': JsonPortConfig(
824 displayName='Inlet',
825 type='inlet',
826 streamType='stream',
827 many=False,
828 default=1,
829 minimum=1,
830 makeStream=True,
831 streamOffset=0.75,
832 streamName='S',
833 ),
834 'outlet': JsonPortConfig(
835 displayName='Outlet',
836 type='outlet',
837 streamType='stream',
838 many=False,
839 default=1,
840 minimum=1,
841 makeStream=True,
842 streamOffset=0.75,
843 streamName='S',
844 ),
845 'power_outlet': JsonPortConfig(
846 displayName='Power Stream',
847 type='outlet',
848 streamType='energy_stream',
849 many=False,
850 default=1,
851 minimum=1,
852 makeStream=False,
853 streamOffset=0.75,
854 streamName='PS',
855 ),
856 },
857 propertyPackagePorts={
858 '': ['inlet', 'outlet'],
859 },
860 graphicObject=JsonGraphicObjectConfig(
861 kind='unitop_graphic',
862 ),
863 indexSets=[],
864 properties={
865 'deltaP_inverted': JsonPropertyConfig(
866 propertySetGroup='default',
867 displayName='Pressure Drop',
868 indexSets=None,
869 sumToOne=False,
870 value=None,
871 unit=None,
872 unitType='pressure',
873 description=None,
874 type='numeric',
875 many=False,
876 default=1,
877 options={},
878 hasTimeIndex=True,
879 ),
880 'efficiency_isentropic': JsonPropertyConfig(
881 propertySetGroup='default',
882 displayName='Isentropic Efficiency',
883 indexSets=None,
884 sumToOne=False,
885 value=None,
886 unit=None,
887 unitType='ratio',
888 description=None,
889 type='numeric',
890 many=False,
891 default=1,
892 options={},
893 hasTimeIndex=True,
894 ),
895 'work_mechanical': JsonPropertyConfig(
896 propertySetGroup='default',
897 displayName='Mechanical Work',
898 indexSets=None,
899 sumToOne=False,
900 value=None,
901 unit=None,
902 unitType='heatflow',
903 description=None,
904 type='numeric',
905 many=False,
906 default=1,
907 options={},
908 hasTimeIndex=True,
909 ),
910 'efficiency_motor': JsonPropertyConfig(
911 propertySetGroup='default',
912 displayName='Motor Efficiency',
913 indexSets=None,
914 sumToOne=False,
915 value=1,
916 unit='dimensionless',
917 unitType='ratio',
918 description=None,
919 type='numeric',
920 many=False,
921 default=1,
922 options={},
923 hasTimeIndex=True,
924 ),
925 'work_electrical': JsonPropertyConfig(
926 propertySetGroup='default',
927 displayName='Electrical Work',
928 indexSets=None,
929 sumToOne=False,
930 value=0,
931 unit='kW',
932 unitType='heatflow',
933 description=None,
934 type='numeric',
935 many=False,
936 default=1,
937 options={},
938 hasTimeIndex=True,
939 ),
940 'willans_intercept': JsonPropertyConfig(
941 propertySetGroup='default',
942 displayName='Willans Intercept',
943 indexSets=None,
944 sumToOne=False,
945 value=None,
946 unit=None,
947 unitType='heatflow',
948 description=None,
949 type='numeric',
950 many=False,
951 default=1,
952 options={},
953 hasTimeIndex=True,
954 ),
955 'willans_slope': JsonPropertyConfig(
956 propertySetGroup='default',
957 displayName='Willans Slope',
958 indexSets=None,
959 sumToOne=False,
960 value=None,
961 unit=None,
962 unitType='molarEnthalpy',
963 description=None,
964 type='numeric',
965 many=False,
966 default=1,
967 options={},
968 hasTimeIndex=True,
969 ),
970 'willans_max_mol': JsonPropertyConfig(
971 propertySetGroup='default',
972 displayName='Maximum Molar Flow',
973 indexSets=None,
974 sumToOne=False,
975 value=None,
976 unit=None,
977 unitType='molarflow',
978 description=None,
979 type='numeric',
980 many=False,
981 default=1,
982 options={},
983 hasTimeIndex=True,
984 ),
985 'willans_a': JsonPropertyConfig(
986 propertySetGroup='default',
987 displayName='Willans A',
988 indexSets=None,
989 sumToOne=False,
990 value=None,
991 unit=None,
992 unitType='ratio',
993 description=None,
994 type='numeric',
995 many=False,
996 default=1,
997 options={},
998 hasTimeIndex=True,
999 ),
1000 'willans_b': JsonPropertyConfig(
1001 propertySetGroup='default',
1002 displayName='Willans B',
1003 indexSets=None,
1004 sumToOne=False,
1005 value=None,
1006 unit=None,
1007 unitType='heatflow',
1008 description=None,
1009 type='numeric',
1010 many=False,
1011 default=1,
1012 options={},
1013 hasTimeIndex=True,
1014 ),
1015 'willans_efficiency': JsonPropertyConfig(
1016 propertySetGroup='default',
1017 displayName='Willans Efficiency',
1018 indexSets=None,
1019 sumToOne=False,
1020 value=None,
1021 unit=None,
1022 unitType='ratio',
1023 description=None,
1024 type='numeric',
1025 many=False,
1026 default=1,
1027 options={},
1028 hasTimeIndex=True,
1029 ),
1030 },
1031 propertySetGroups={
1032 'default': JsonPropertySetGroupConfig(
1033 type='stateVars',
1034 displayName='Properties',
1035 stateVars=['willans_max_mol', 'deltaP_inverted', 'efficiency_motor'],
1036 toggle=None,
1037 ),
1038 },
1039 keyProperties=[
1040 'work_mechanical',
1041 'willans_intercept',
1042 'willans_slope',
1043 'willans_a',
1044 'willans_b',
1045 'willans_efficiency',
1046 ],
1047 splitterFractionName=None,
1048 idaesAdapter=JsonIdaesAdapterConfig(
1049 constructor='ahuora_builder.custom.custom_turbine.CustomTurbine',
1050 args={
1051 'property_package': JsonAdapterArgConfig(
1052 kind='property_package',
1053 label=None,
1054 ),
1055 'power_property_package': JsonAdapterArgConfig(
1056 kind='constant_schema',
1057 schema='PowerPPArgSchema',
1058 ),
1059 'dynamic': JsonAdapterArgConfig(
1060 kind='constant',
1061 value=False,
1062 ),
1063 'calculation_method': JsonAdapterArgConfig(
1064 kind='constant',
1065 value='Tsat_willans',
1066 ),
1067 },
1068 ports=None,
1069 properties=None,
1070 ),
1071 frontend=JsonFrontendConfig(
1072 showInPanel=False,
1073 variant=JsonVariantConfig(
1074 familyKey='turbine',
1075 label='Delta Tsat Willans Turbine',
1076 selectorLabel='Turbine Type',
1077 default=False,
1078 order=30,
1079 preservePorts=True,
1080 preserveGraphic=True,
1081 ),
1082 ),
1083 ),
1084JsonUnitOpConfig(
1085 key='bs_turbine',
1086 objectType='bs_turbine',
1087 enumMember='BsTurbine',
1088 displayType='Backpressure Sun-Willans Turbine',
1089 displayName='Backpressure Sun-Willans Turbine',
1090 categoryPath=['chemical', 'pressure_changer'],
1091 ports={
1092 'inlet': JsonPortConfig(
1093 displayName='Inlet',
1094 type='inlet',
1095 streamType='stream',
1096 many=False,
1097 default=1,
1098 minimum=1,
1099 makeStream=True,
1100 streamOffset=0.75,
1101 streamName='S',
1102 ),
1103 'outlet': JsonPortConfig(
1104 displayName='Outlet',
1105 type='outlet',
1106 streamType='stream',
1107 many=False,
1108 default=1,
1109 minimum=1,
1110 makeStream=True,
1111 streamOffset=0.75,
1112 streamName='S',
1113 ),
1114 'power_outlet': JsonPortConfig(
1115 displayName='Power Stream',
1116 type='outlet',
1117 streamType='energy_stream',
1118 many=False,
1119 default=1,
1120 minimum=1,
1121 makeStream=False,
1122 streamOffset=0.75,
1123 streamName='PS',
1124 ),
1125 },
1126 propertyPackagePorts={
1127 '': ['inlet', 'outlet'],
1128 },
1129 graphicObject=JsonGraphicObjectConfig(
1130 kind='unitop_graphic',
1131 ),
1132 indexSets=[],
1133 properties={
1134 'deltaP_inverted': JsonPropertyConfig(
1135 propertySetGroup='default',
1136 displayName='Pressure Drop',
1137 indexSets=None,
1138 sumToOne=False,
1139 value=None,
1140 unit=None,
1141 unitType='pressure',
1142 description=None,
1143 type='numeric',
1144 many=False,
1145 default=1,
1146 options={},
1147 hasTimeIndex=True,
1148 ),
1149 'efficiency_isentropic': JsonPropertyConfig(
1150 propertySetGroup='default',
1151 displayName='Isentropic Efficiency',
1152 indexSets=None,
1153 sumToOne=False,
1154 value=None,
1155 unit=None,
1156 unitType='ratio',
1157 description=None,
1158 type='numeric',
1159 many=False,
1160 default=1,
1161 options={},
1162 hasTimeIndex=True,
1163 ),
1164 'work_mechanical': JsonPropertyConfig(
1165 propertySetGroup='default',
1166 displayName='Mechanical Work',
1167 indexSets=None,
1168 sumToOne=False,
1169 value=None,
1170 unit=None,
1171 unitType='heatflow',
1172 description=None,
1173 type='numeric',
1174 many=False,
1175 default=1,
1176 options={},
1177 hasTimeIndex=True,
1178 ),
1179 'efficiency_motor': JsonPropertyConfig(
1180 propertySetGroup='default',
1181 displayName='Motor Efficiency',
1182 indexSets=None,
1183 sumToOne=False,
1184 value=1,
1185 unit='dimensionless',
1186 unitType='ratio',
1187 description=None,
1188 type='numeric',
1189 many=False,
1190 default=1,
1191 options={},
1192 hasTimeIndex=True,
1193 ),
1194 'work_electrical': JsonPropertyConfig(
1195 propertySetGroup='default',
1196 displayName='Electrical Work',
1197 indexSets=None,
1198 sumToOne=False,
1199 value=0,
1200 unit='kW',
1201 unitType='heatflow',
1202 description=None,
1203 type='numeric',
1204 many=False,
1205 default=1,
1206 options={},
1207 hasTimeIndex=True,
1208 ),
1209 'willans_intercept': JsonPropertyConfig(
1210 propertySetGroup='default',
1211 displayName='Willans Intercept',
1212 indexSets=None,
1213 sumToOne=False,
1214 value=None,
1215 unit=None,
1216 unitType='heatflow',
1217 description=None,
1218 type='numeric',
1219 many=False,
1220 default=1,
1221 options={},
1222 hasTimeIndex=True,
1223 ),
1224 'willans_slope': JsonPropertyConfig(
1225 propertySetGroup='default',
1226 displayName='Willans Slope',
1227 indexSets=None,
1228 sumToOne=False,
1229 value=None,
1230 unit=None,
1231 unitType='molarEnthalpy',
1232 description=None,
1233 type='numeric',
1234 many=False,
1235 default=1,
1236 options={},
1237 hasTimeIndex=True,
1238 ),
1239 'willans_max_mol': JsonPropertyConfig(
1240 propertySetGroup='default',
1241 displayName='Maximum Molar Flow',
1242 indexSets=None,
1243 sumToOne=False,
1244 value=None,
1245 unit=None,
1246 unitType='molarflow',
1247 description=None,
1248 type='numeric',
1249 many=False,
1250 default=1,
1251 options={},
1252 hasTimeIndex=True,
1253 ),
1254 'willans_a': JsonPropertyConfig(
1255 propertySetGroup='default',
1256 displayName='Willans A',
1257 indexSets=None,
1258 sumToOne=False,
1259 value=None,
1260 unit=None,
1261 unitType='ratio',
1262 description=None,
1263 type='numeric',
1264 many=False,
1265 default=1,
1266 options={},
1267 hasTimeIndex=True,
1268 ),
1269 'willans_b': JsonPropertyConfig(
1270 propertySetGroup='default',
1271 displayName='Willans B',
1272 indexSets=None,
1273 sumToOne=False,
1274 value=None,
1275 unit=None,
1276 unitType='heatflow',
1277 description=None,
1278 type='numeric',
1279 many=False,
1280 default=1,
1281 options={},
1282 hasTimeIndex=True,
1283 ),
1284 'willans_efficiency': JsonPropertyConfig(
1285 propertySetGroup='default',
1286 displayName='Willans Efficiency',
1287 indexSets=None,
1288 sumToOne=False,
1289 value=None,
1290 unit=None,
1291 unitType='ratio',
1292 description=None,
1293 type='numeric',
1294 many=False,
1295 default=1,
1296 options={},
1297 hasTimeIndex=True,
1298 ),
1299 },
1300 propertySetGroups={
1301 'default': JsonPropertySetGroupConfig(
1302 type='stateVars',
1303 displayName='Properties',
1304 stateVars=['willans_max_mol', 'deltaP_inverted', 'efficiency_motor'],
1305 toggle=None,
1306 ),
1307 },
1308 keyProperties=[
1309 'work_mechanical',
1310 'willans_intercept',
1311 'willans_slope',
1312 'willans_a',
1313 'willans_b',
1314 'willans_efficiency',
1315 ],
1316 splitterFractionName=None,
1317 idaesAdapter=JsonIdaesAdapterConfig(
1318 constructor='ahuora_builder.custom.custom_turbine.CustomTurbine',
1319 args={
1320 'property_package': JsonAdapterArgConfig(
1321 kind='property_package',
1322 label=None,
1323 ),
1324 'power_property_package': JsonAdapterArgConfig(
1325 kind='constant_schema',
1326 schema='PowerPPArgSchema',
1327 ),
1328 'dynamic': JsonAdapterArgConfig(
1329 kind='constant',
1330 value=False,
1331 ),
1332 'calculation_method': JsonAdapterArgConfig(
1333 kind='constant',
1334 value='BPST_willans',
1335 ),
1336 },
1337 ports=None,
1338 properties=None,
1339 ),
1340 frontend=JsonFrontendConfig(
1341 showInPanel=False,
1342 variant=JsonVariantConfig(
1343 familyKey='turbine',
1344 label='Backpressure Sun-Willans Turbine',
1345 selectorLabel='Turbine Type',
1346 default=False,
1347 order=40,
1348 preservePorts=True,
1349 preserveGraphic=True,
1350 ),
1351 ),
1352 ),
1353JsonUnitOpConfig(
1354 key='cs_turbine',
1355 objectType='cs_turbine',
1356 enumMember='CsTurbine',
1357 displayType='Condensing Sun-Willans Turbine',
1358 displayName='Condensing Sun-Willans Turbine',
1359 categoryPath=['chemical', 'pressure_changer'],
1360 ports={
1361 'inlet': JsonPortConfig(
1362 displayName='Inlet',
1363 type='inlet',
1364 streamType='stream',
1365 many=False,
1366 default=1,
1367 minimum=1,
1368 makeStream=True,
1369 streamOffset=0.75,
1370 streamName='S',
1371 ),
1372 'outlet': JsonPortConfig(
1373 displayName='Outlet',
1374 type='outlet',
1375 streamType='stream',
1376 many=False,
1377 default=1,
1378 minimum=1,
1379 makeStream=True,
1380 streamOffset=0.75,
1381 streamName='S',
1382 ),
1383 'power_outlet': JsonPortConfig(
1384 displayName='Power Stream',
1385 type='outlet',
1386 streamType='energy_stream',
1387 many=False,
1388 default=1,
1389 minimum=1,
1390 makeStream=False,
1391 streamOffset=0.75,
1392 streamName='PS',
1393 ),
1394 },
1395 propertyPackagePorts={
1396 '': ['inlet', 'outlet'],
1397 },
1398 graphicObject=JsonGraphicObjectConfig(
1399 kind='unitop_graphic',
1400 ),
1401 indexSets=[],
1402 properties={
1403 'deltaP_inverted': JsonPropertyConfig(
1404 propertySetGroup='default',
1405 displayName='Pressure Drop',
1406 indexSets=None,
1407 sumToOne=False,
1408 value=None,
1409 unit=None,
1410 unitType='pressure',
1411 description=None,
1412 type='numeric',
1413 many=False,
1414 default=1,
1415 options={},
1416 hasTimeIndex=True,
1417 ),
1418 'efficiency_isentropic': JsonPropertyConfig(
1419 propertySetGroup='default',
1420 displayName='Isentropic Efficiency',
1421 indexSets=None,
1422 sumToOne=False,
1423 value=None,
1424 unit=None,
1425 unitType='ratio',
1426 description=None,
1427 type='numeric',
1428 many=False,
1429 default=1,
1430 options={},
1431 hasTimeIndex=True,
1432 ),
1433 'work_mechanical': JsonPropertyConfig(
1434 propertySetGroup='default',
1435 displayName='Mechanical Work',
1436 indexSets=None,
1437 sumToOne=False,
1438 value=None,
1439 unit=None,
1440 unitType='heatflow',
1441 description=None,
1442 type='numeric',
1443 many=False,
1444 default=1,
1445 options={},
1446 hasTimeIndex=True,
1447 ),
1448 'efficiency_motor': JsonPropertyConfig(
1449 propertySetGroup='default',
1450 displayName='Motor Efficiency',
1451 indexSets=None,
1452 sumToOne=False,
1453 value=1,
1454 unit='dimensionless',
1455 unitType='ratio',
1456 description=None,
1457 type='numeric',
1458 many=False,
1459 default=1,
1460 options={},
1461 hasTimeIndex=True,
1462 ),
1463 'work_electrical': JsonPropertyConfig(
1464 propertySetGroup='default',
1465 displayName='Electrical Work',
1466 indexSets=None,
1467 sumToOne=False,
1468 value=0,
1469 unit='kW',
1470 unitType='heatflow',
1471 description=None,
1472 type='numeric',
1473 many=False,
1474 default=1,
1475 options={},
1476 hasTimeIndex=True,
1477 ),
1478 'willans_intercept': JsonPropertyConfig(
1479 propertySetGroup='default',
1480 displayName='Willans Intercept',
1481 indexSets=None,
1482 sumToOne=False,
1483 value=None,
1484 unit=None,
1485 unitType='heatflow',
1486 description=None,
1487 type='numeric',
1488 many=False,
1489 default=1,
1490 options={},
1491 hasTimeIndex=True,
1492 ),
1493 'willans_slope': JsonPropertyConfig(
1494 propertySetGroup='default',
1495 displayName='Willans Slope',
1496 indexSets=None,
1497 sumToOne=False,
1498 value=None,
1499 unit=None,
1500 unitType='molarEnthalpy',
1501 description=None,
1502 type='numeric',
1503 many=False,
1504 default=1,
1505 options={},
1506 hasTimeIndex=True,
1507 ),
1508 'willans_max_mol': JsonPropertyConfig(
1509 propertySetGroup='default',
1510 displayName='Maximum Molar Flow',
1511 indexSets=None,
1512 sumToOne=False,
1513 value=None,
1514 unit=None,
1515 unitType='molarflow',
1516 description=None,
1517 type='numeric',
1518 many=False,
1519 default=1,
1520 options={},
1521 hasTimeIndex=True,
1522 ),
1523 'willans_a': JsonPropertyConfig(
1524 propertySetGroup='default',
1525 displayName='Willans A',
1526 indexSets=None,
1527 sumToOne=False,
1528 value=None,
1529 unit=None,
1530 unitType='ratio',
1531 description=None,
1532 type='numeric',
1533 many=False,
1534 default=1,
1535 options={},
1536 hasTimeIndex=True,
1537 ),
1538 'willans_b': JsonPropertyConfig(
1539 propertySetGroup='default',
1540 displayName='Willans B',
1541 indexSets=None,
1542 sumToOne=False,
1543 value=None,
1544 unit=None,
1545 unitType='heatflow',
1546 description=None,
1547 type='numeric',
1548 many=False,
1549 default=1,
1550 options={},
1551 hasTimeIndex=True,
1552 ),
1553 'willans_efficiency': JsonPropertyConfig(
1554 propertySetGroup='default',
1555 displayName='Willans Efficiency',
1556 indexSets=None,
1557 sumToOne=False,
1558 value=None,
1559 unit=None,
1560 unitType='ratio',
1561 description=None,
1562 type='numeric',
1563 many=False,
1564 default=1,
1565 options={},
1566 hasTimeIndex=True,
1567 ),
1568 },
1569 propertySetGroups={
1570 'default': JsonPropertySetGroupConfig(
1571 type='stateVars',
1572 displayName='Properties',
1573 stateVars=['willans_max_mol', 'deltaP_inverted', 'efficiency_motor'],
1574 toggle=None,
1575 ),
1576 },
1577 keyProperties=[
1578 'work_mechanical',
1579 'efficiency_isentropic',
1580 'willans_intercept',
1581 'willans_slope',
1582 'willans_a',
1583 'willans_b',
1584 'willans_efficiency',
1585 ],
1586 splitterFractionName=None,
1587 idaesAdapter=JsonIdaesAdapterConfig(
1588 constructor='ahuora_builder.custom.custom_turbine.CustomTurbine',
1589 args={
1590 'property_package': JsonAdapterArgConfig(
1591 kind='property_package',
1592 label=None,
1593 ),
1594 'power_property_package': JsonAdapterArgConfig(
1595 kind='constant_schema',
1596 schema='PowerPPArgSchema',
1597 ),
1598 'dynamic': JsonAdapterArgConfig(
1599 kind='constant',
1600 value=False,
1601 ),
1602 'calculation_method': JsonAdapterArgConfig(
1603 kind='constant',
1604 value='CT_willans',
1605 ),
1606 },
1607 ports=None,
1608 properties=None,
1609 ),
1610 frontend=JsonFrontendConfig(
1611 showInPanel=False,
1612 variant=JsonVariantConfig(
1613 familyKey='turbine',
1614 label='Condensing Sun-Willans Turbine',
1615 selectorLabel='Turbine Type',
1616 default=False,
1617 order=50,
1618 preservePorts=True,
1619 preserveGraphic=True,
1620 ),
1621 ),
1622 ),
1623 )