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

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 

19 

20from idaes.models.unit_models.pressure_changer import ( 

21 TurbineData, 

22) 

23from idaes.core.util.exceptions import PropertyNotSupportedError, InitializationError 

24 

25 

26# Import Python libraries 

27 

28 

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 

44 

45 

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 """ 

52 

53 # CONFIG are options for the unit model, this simple model only has the mandatory config options 

54 CONFIG = TurbineBaseData.CONFIG() 

55 

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 ) 

81 

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() 

86 

87 # This creates blank scaling factors, which are populated later 

88 self.scaling_factor = Suffix(direction=Suffix.EXPORT) 

89 

90 

91 # Add state blocks for inlet, outlet, and waste 

92 # These include the state variables and any other properties on demand 

93 

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 # ) 

101 

102 

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 ) 

110 

111 

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) 

114 

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 ) 

126 

127 # Add inverted deltaP property 

128 add_inverted(self, "deltaP") 

129 

130 def initialize_build(self, *args, **kwargs): 

131 initialise_inverted(self, "deltaP") 

132 

133 super().initialize_build(*args, **kwargs) 

134 

135 

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 ) 

149 

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 )