OpenPinch 0.7.4__tar.gz → 0.7.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/shared.py +56 -5
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/vapour_compression_cycle.py +102 -33
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/targeting/cascade_vapour_compression.py +7 -1
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/targeting/parallel_vapour_compression.py +4 -1
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/targeting/vapour_compression_mvr.py +8 -4
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/fluids.py +18 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/pulp_mill.json +1 -1
- {openpinch-0.7.4 → openpinch-0.7.6}/PKG-INFO +1 -1
- {openpinch-0.7.4 → openpinch-0.7.6}/pyproject.toml +1 -1
- {openpinch-0.7.4 → openpinch-0.7.6}/.gitignore +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/LICENSE +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/__main__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/csv.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/file_exports.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/json.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/problem_sources.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/records.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/tabular.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/workbook.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/io/workspace_bundles.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/adapters/optional_dependencies.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/economics.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/energy_transfer/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/energy_transfer/cascade.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/energy_transfer/diagram.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/energy_transfer/selection.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/energy_transfer/serialization.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/energy_transfer/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/exergy/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/exergy/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/graphs/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/graphs/composite.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/graphs/grand_composite.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/graphs/metadata.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/graphs/primitives.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/graphs/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/graphs/specifications.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/context.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/controllability.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/duty_optimisation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/errors.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/executor.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/fake_executor.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/fallbacks.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/pathways.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/settings.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/task_builders.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/metadata.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/period_state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/recovery.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/segment_area.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/utility.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/indexing.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/alpha.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/approach.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/area.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/costing.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/execution.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/parameters.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/piecewise.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/superstructure.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/amalgamation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/equations.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/postprocess.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/preprocessing.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/equations.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/evolution.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/objectives.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/postprocess.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/setup.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/verification.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/warm_start.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/base.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/fixed_structure.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/packed_pinch_design.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/packed_stagewise.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/pinch_decomposition.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/problem.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/stage_packing.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/stagewise.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/thermal_profiles.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/prepared_problem.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/reporting/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/reporting/exports.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/reporting/ranking.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/reporting/verification.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/results/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/results/assembly.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/results/seeds.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/results/selection.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/solver/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/solver/arrays.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/solver/backend.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/solver/dependencies.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/solver/piecewise.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/solver/pinch_design_decomposition.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/targeting/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/targeting/_stage.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/targeting/network_evolution_method.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/targeting/open_hens_method.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/targeting/pinch_design_method.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/targeting/thermal_derivative_method.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/targeting/topology.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_multiperiod/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_multiperiod/aggregation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_multiperiod/execution.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_multiperiod/preparation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_multiperiod/setup.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_multiperiod/state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_process_mvr/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_process_mvr/membership.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_process_mvr/replacement_streams.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_process_mvr/selection.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_process_mvr/state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_process_mvr/values.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/_process_mvr/work.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/_shared/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/_shared/air.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/_shared/plotting.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/_shared/streams.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/encoding.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/layout.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/load_selection.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/multi_vc_objective.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/postprocessing.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/preprocessing.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/common/units.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/components.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/_multi_cycle_base.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/brayton_heat_pump.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/carnot_cycles.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/cascade_vapour_compression_cycle.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/mechanical_vapour_recompression_cycle.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/parallel_vapour_compression_cycles.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/vapour_compression_mvr_cascade.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/direct_mvr/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/direct_mvr/execution.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/direct_mvr/models.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/direct_mvr/thermodynamics.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/direct_mvr/units.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/optimisation_adapter.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/adapters/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/adapters/coolprop.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/adapters/tespy.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/characteristics/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/characteristics/openpinch-single-stage-compressor-v1.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/context.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/coolprop_preflight.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/errors.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/factory.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/fluids.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/generation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/models.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/points.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/protocols.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/provenance.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/resources.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/settings.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/target_basis.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/target_records.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/targeting.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/performance_maps/targeting_models.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/process_mvr.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/targeting/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/targeting/_carnot_common.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/targeting/brayton.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/targeting/cascade_carnot.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/targeting/parallel_carnot.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_transfer.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/numerics.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/carnot.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/costing.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/cycle.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/inputs.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/profile.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/search.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/orc/simulated.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/parallelism.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/power/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/power/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/power/steam_turbine.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/area_cost.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/cascade.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/context.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/direct.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/grand_composite.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/heat_recovery_dt_min.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/indirect.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/residual.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/temperature_driving_force.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/targeting/utilities.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/thermodynamics/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/thermodynamics/water.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/allocation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/bounds.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/codec.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/context.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/errors.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/evaluation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/normalization.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/optimisation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/penalties.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/profiles.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/replay.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/start_points.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/thermodynamics.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/utility_placement/units.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/accessors/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/accessors/component.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/accessors/design.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/accessors/plot.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/accessors/target.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/arguments.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/input/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/input/canonicalization.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/input/construction.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/input/loading.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/input/segments.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/input/semantics.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/input/utilities.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/input/validation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/output/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/output/reporting.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/output/result_extraction.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/periods/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/periods/aggregation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/targeting/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/targeting/catalog.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/targeting/dispatch.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/targeting/execution.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/targeting/provenance.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_problem/targeting/state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_workspace/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_workspace/case_inputs.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/_workspace/state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/case_derivation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/commands.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/heat_recovery_dt_min.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/hpr_selection.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/problem.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/residual_utility.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/targeting.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/utility_placement.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/application/workspace.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/common.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/controllability.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/graphs.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/heat_recovery_dt_min.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/hpr.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/hpr_performance_map.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/input.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/output.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/report_metrics.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/report_units.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/reporting.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/resources/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/resources/hpr_performance_map/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/resources/hpr_performance_map/heat-pump-1.0.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/resources/hpr_performance_map/refrigeration-1.0.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/resources/hpr_performance_map/schema-1.0.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/schema.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/synthesis/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/synthesis/common.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/synthesis/method.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/synthesis/result.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/synthesis/task.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/synthesis/topology.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/synthesis/view.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/turbine.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/units.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/utility_placement.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/contracts/workspace.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_heat_exchanger/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_heat_exchanger/area.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_heat_exchanger/period_state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_heat_exchanger/rules.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_heat_exchanger_network/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_heat_exchanger_network/types.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_problem_table/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_problem_table/constants.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_problem_table/equality.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_problem_table/intervals.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_problem_table/types.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream/linearisation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream/profile.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream/segment.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream/segments.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream/thermodynamics.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream/value_state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream_collection/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream_collection/filters.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream_collection/numeric_view.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream_collection/serialization.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_stream_collection/sorting.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_validation.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_value/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_value/coercion.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_value/resolution.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/_value/units.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/analysis.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/configuration.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/configuration_fields.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/enums.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/heat_exchanger.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/heat_exchanger_network.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/hpr.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/problem_table.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/progress.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/solver_options.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/stream.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/stream_collection.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/targets.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/value.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/domain/zone.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/backends/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/backends/_multistart.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/backends/_surrogate.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/backends/bayesian.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/backends/cma_es.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/backends/dual_annealing.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/backends/protocol.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/backends/rbf.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/candidates.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/errors.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/execution.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/feasibility.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/models.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/optimisation/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/configuration.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/configuration_text.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/dashboard/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/dashboard/dashboard.css +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/dashboard/dependencies.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/dashboard/exports.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/dashboard/rendering.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/dashboard/state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/graphs/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/graphs/plotly.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/graphs/problem.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/graphs/simple.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/_constants.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/dependencies.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/geometry.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/labels.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/layout.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/plotly.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/rendering.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/results.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/service.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/state.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/temperatures.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/network_grid/view.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/adapters.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/excel_text.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/hpr.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/problem_table.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/results.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/specialist.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/stream_collection.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/thermal.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/presentation/reporting/workbook.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/resources.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/01_first_solve_and_core_curves.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/02_focused_direct_and_total_site.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/03_multisegment_streams.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/04_workspace_cases_and_scenarios.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/05_workspace_persistence.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/06_multiperiod_heat_integration.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/07_area_cost_and_exergy.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/08_carnot_heat_pump_and_refrigeration.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/09_vapour_compression.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/10_multiperiod_heat_pumps.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/11_process_mvr_and_cascade.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/12_cogeneration.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/13_multiperiod_cogeneration.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/14_energy_transfer.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/15_hen_synthesis_and_selection.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/16_advanced_hen_methods.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/17_multiperiod_hen_synthesis.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/18_results_plots_reports_exports.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/19_utility_placement_optimisation.ipynb +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/notebooks/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/Four-stream-Yee-and-Grossmann-1990-1.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/__init__.py +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/basic_pinch.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/chocolate_factory.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/crude_preheat_train.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/crude_preheat_train_multiperiod.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/dairy_chilling_multiperiod.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/process_mvr.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/zonal_site.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/tutorials/sample_cases/zonal_site_multiperiod.json +0 -0
- {openpinch-0.7.4 → openpinch-0.7.6}/README.md +0 -0
|
@@ -25,6 +25,7 @@ from ....contracts.hpr import (
|
|
|
25
25
|
)
|
|
26
26
|
from ....domain.configuration import tol as _tol
|
|
27
27
|
from ....domain.enums import ProblemTableLabel
|
|
28
|
+
from ....domain.fluids import critical_point
|
|
28
29
|
from ....domain.stream_collection import StreamCollection
|
|
29
30
|
from ....domain.value import Value
|
|
30
31
|
from ..optimisation_adapter import (
|
|
@@ -61,6 +62,7 @@ __all__ = [
|
|
|
61
62
|
"cap_stage_condensing_temperatures",
|
|
62
63
|
"is_negligible_useful_duty",
|
|
63
64
|
"condensing_temperature_search_range",
|
|
65
|
+
"floor_stage_evaporating_temperatures",
|
|
64
66
|
"calc_simulated_hpr_annualized_costs",
|
|
65
67
|
"hpr_penalty_cost_scale",
|
|
66
68
|
"refrigeration_allowance",
|
|
@@ -209,6 +211,12 @@ def calc_hpr_machine_capital_costs(
|
|
|
209
211
|
return tuple(costs)
|
|
210
212
|
|
|
211
213
|
|
|
214
|
+
# A cascade stage doing no more than this fraction of its machine's work has
|
|
215
|
+
# no compressor, so it adds no stage capital (the same fraction as
|
|
216
|
+
# NEGLIGIBLE_USEFUL_DUTY_FRACTION uses for duty).
|
|
217
|
+
NEGLIGIBLE_STAGE_WORK_FRACTION = 1e-3
|
|
218
|
+
|
|
219
|
+
|
|
212
220
|
def _single_cost_unit(
|
|
213
221
|
state: HPRParsedState,
|
|
214
222
|
hpr_streams: StreamCollection,
|
|
@@ -220,7 +228,9 @@ def _single_cost_unit(
|
|
|
220
228
|
Each closed stage has its own compressor, so the stage count comes from
|
|
221
229
|
the solved stage works: a cascade with ``n_cond`` condenser and
|
|
222
230
|
``n_evap`` evaporator levels has ``n_cond + n_evap - 1`` stages, more
|
|
223
|
-
than its ``n_cond`` condensing temperatures.
|
|
231
|
+
than its ``n_cond`` condensing temperatures. A stage whose work is at
|
|
232
|
+
most ``NEGLIGIBLE_STAGE_WORK_FRACTION`` of the machine's work (merged
|
|
233
|
+
levels, or no duty) has no compressor and is not charged.
|
|
224
234
|
"""
|
|
225
235
|
hot = hpr_streams.get_hot_utility_streams()
|
|
226
236
|
Q_cap = (
|
|
@@ -229,9 +239,12 @@ def _single_cost_unit(
|
|
|
229
239
|
else 0.0
|
|
230
240
|
)
|
|
231
241
|
T_cond = np.asarray(state.T_cond, dtype=float).ravel()
|
|
242
|
+
works = np.abs(np.asarray(work_arr if work_arr is not None else [], dtype=float))
|
|
232
243
|
n_stages = (
|
|
233
|
-
np.
|
|
234
|
-
|
|
244
|
+
int(np.count_nonzero(works > NEGLIGIBLE_STAGE_WORK_FRACTION * works.sum()))
|
|
245
|
+
if works.size
|
|
246
|
+
else T_cond.size
|
|
247
|
+
)
|
|
235
248
|
return [
|
|
236
249
|
HPRCostUnit(
|
|
237
250
|
Q_cap=Q_cap,
|
|
@@ -770,7 +783,7 @@ def condensing_temperature_search_range(
|
|
|
770
783
|
return t_hot, t_cold
|
|
771
784
|
try:
|
|
772
785
|
refrigerants = list(getattr(args, "refrigerant_ls", None) or ["water"])
|
|
773
|
-
t_crit = max(float(
|
|
786
|
+
t_crit = max(float(critical_point(ref)[0]) for ref in refrigerants)
|
|
774
787
|
except (ValueError, TypeError):
|
|
775
788
|
return t_hot, t_cold
|
|
776
789
|
ceiling = t_crit - 273.15 - SUBCRITICAL_CONDENSING_MARGIN_K
|
|
@@ -814,7 +827,7 @@ def cap_stage_condensing_temperatures(
|
|
|
814
827
|
for index in range(T_cond.size):
|
|
815
828
|
refrigerant = refrigerants[min(index, len(refrigerants) - 1)]
|
|
816
829
|
try:
|
|
817
|
-
t_crit = float(
|
|
830
|
+
t_crit = float(critical_point(refrigerant)[0]) - 273.15
|
|
818
831
|
except (ValueError, TypeError):
|
|
819
832
|
continue
|
|
820
833
|
ceilings[index] = t_crit - SUBCRITICAL_CONDENSING_MARGIN_K
|
|
@@ -827,6 +840,44 @@ def cap_stage_condensing_temperatures(
|
|
|
827
840
|
return capped
|
|
828
841
|
|
|
829
842
|
|
|
843
|
+
# Keeps a floored temperature above Tmin through the degC to K round trip.
|
|
844
|
+
EVAPORATING_FLOOR_MARGIN_K = 1e-6
|
|
845
|
+
|
|
846
|
+
|
|
847
|
+
def floor_stage_evaporating_temperatures(
|
|
848
|
+
T_evap: np.ndarray,
|
|
849
|
+
args: HeatPumpTargetInputs,
|
|
850
|
+
*,
|
|
851
|
+
first_stage: int = 0,
|
|
852
|
+
) -> np.ndarray:
|
|
853
|
+
"""Raise each evaporator to its own refrigerant's minimum temperature.
|
|
854
|
+
|
|
855
|
+
CoolProp extrapolates saturation below ``Tmin`` without error, so the search
|
|
856
|
+
range must stop there. Flooring at decode keeps candidates evaluable, where
|
|
857
|
+
rejecting them would spend a small search budget on failures. Evaporator
|
|
858
|
+
``i`` uses ``args.refrigerant_ls[first_stage + i]``; the result is
|
|
859
|
+
non-increasing (a floored stage lifts the warmer stages with it).
|
|
860
|
+
"""
|
|
861
|
+
T_evap = np.asarray(T_evap, dtype=float)
|
|
862
|
+
if getattr(args, "simulation_backend", "coolprop") == "tespy":
|
|
863
|
+
return T_evap
|
|
864
|
+
refrigerants = list(getattr(args, "refrigerant_ls", None) or [])
|
|
865
|
+
if not refrigerants:
|
|
866
|
+
return T_evap
|
|
867
|
+
floors = np.full(T_evap.shape, -np.inf)
|
|
868
|
+
for index in range(T_evap.size):
|
|
869
|
+
refrigerant = refrigerants[min(first_stage + index, len(refrigerants) - 1)]
|
|
870
|
+
try:
|
|
871
|
+
t_min = float(_coolprop.PropsSI("Tmin", refrigerant)) - 273.15
|
|
872
|
+
except (ValueError, TypeError):
|
|
873
|
+
continue
|
|
874
|
+
floors[index] = t_min + EVAPORATING_FLOOR_MARGIN_K
|
|
875
|
+
floored = np.maximum(T_evap, floors)
|
|
876
|
+
for index in range(floored.size - 2, -1, -1):
|
|
877
|
+
floored[index] = max(floored[index], floored[index + 1])
|
|
878
|
+
return floored
|
|
879
|
+
|
|
880
|
+
|
|
830
881
|
def validate_vapour_hp_refrigerant_ls(
|
|
831
882
|
num_stages: int,
|
|
832
883
|
args: HeatPumpTargetInputs,
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_pumps/cycles/vapour_compression_cycle.py
RENAMED
|
@@ -13,7 +13,7 @@ from ....domain._stream.linearisation import (
|
|
|
13
13
|
get_piecewise_data_points,
|
|
14
14
|
)
|
|
15
15
|
from ....domain.configuration import tol
|
|
16
|
-
from ....domain.fluids import build_coolprop_abstract_state
|
|
16
|
+
from ....domain.fluids import build_coolprop_abstract_state, critical_point
|
|
17
17
|
from ....domain.stream_collection import StreamCollection
|
|
18
18
|
|
|
19
19
|
# Qualities this close to 0 or 1 are saturated liquid or vapour; differences
|
|
@@ -93,9 +93,12 @@ class VapourCompressionCycle:
|
|
|
93
93
|
"""Set the working-fluid state object and refresh critical properties."""
|
|
94
94
|
self._state = self._get_fluid_state(value)
|
|
95
95
|
self._solved = False
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
if isinstance(value, str):
|
|
97
|
+
self._t_crit, self._p_crit, self._d_crit = critical_point(value)
|
|
98
|
+
else:
|
|
99
|
+
self._p_crit = self._state.keyed_output(CoolProp.iP_critical)
|
|
100
|
+
self._t_crit = self._state.keyed_output(CoolProp.iT_critical)
|
|
101
|
+
self._d_crit = self._state.keyed_output(CoolProp.irhomass_critical)
|
|
99
102
|
|
|
100
103
|
@property
|
|
101
104
|
def cycle_states(self) -> list[dict[str, float]]:
|
|
@@ -324,7 +327,7 @@ class VapourCompressionCycle:
|
|
|
324
327
|
refrigerant: str = None,
|
|
325
328
|
) -> bool:
|
|
326
329
|
if refrigerant is not None:
|
|
327
|
-
self.state =
|
|
330
|
+
self.state = refrigerant
|
|
328
331
|
if self._state is None:
|
|
329
332
|
raise ValueError("A fluid must be specified before solving the cycle.")
|
|
330
333
|
return True
|
|
@@ -413,6 +416,69 @@ class VapourCompressionCycle:
|
|
|
413
416
|
s.update(CoolProp.PQ_INPUTS, P, Q)
|
|
414
417
|
return s
|
|
415
418
|
|
|
419
|
+
def _isobar_points(
|
|
420
|
+
self,
|
|
421
|
+
P: float,
|
|
422
|
+
h_start: float,
|
|
423
|
+
h_end: float,
|
|
424
|
+
num: int,
|
|
425
|
+
) -> list[list[float]]:
|
|
426
|
+
"""Return ``num`` [h, T] points from ``h_start`` to ``h_end`` on isobar ``P``.
|
|
427
|
+
|
|
428
|
+
Pure fluids step in enthalpy. A HEOS mixture's pressure-enthalpy flash
|
|
429
|
+
costs tens of milliseconds, so a mixture steps in quality inside the
|
|
430
|
+
two-phase region and in temperature outside it; both give exact points
|
|
431
|
+
on the same isobar. Segment ends keep their exact enthalpies so that
|
|
432
|
+
adjacent profile blocks still share their boundary point.
|
|
433
|
+
"""
|
|
434
|
+
if len(self._get_fluid_state(self._refrigerant).fluid_names()) == 1:
|
|
435
|
+
return [
|
|
436
|
+
[h, float(self._compute_state_from_pressure_enthalpy(P=P, h=h).T())]
|
|
437
|
+
for h in np.linspace(h_start, h_end, num)
|
|
438
|
+
]
|
|
439
|
+
|
|
440
|
+
h_liquid = self._compute_state_from_pressure_quality(P, 0.0).hmass()
|
|
441
|
+
h_vapour = self._compute_state_from_pressure_quality(P, 1.0).hmass()
|
|
442
|
+
start, end = (
|
|
443
|
+
self._isobar_end_state(P, h, h_liquid, h_vapour) for h in (h_start, h_end)
|
|
444
|
+
)
|
|
445
|
+
if all(h_liquid <= h <= h_vapour for h in (h_start, h_end)):
|
|
446
|
+
states = [
|
|
447
|
+
self._compute_state_from_pressure_quality(P, Q)
|
|
448
|
+
for Q in np.linspace(start[2], end[2], num)[1:-1]
|
|
449
|
+
]
|
|
450
|
+
else:
|
|
451
|
+
states = [
|
|
452
|
+
self._compute_state_from_pressure_temperature(P, T)
|
|
453
|
+
for T in np.linspace(start[1], end[1], num)[1:-1]
|
|
454
|
+
]
|
|
455
|
+
interior = [[float(s.hmass()), float(s.T())] for s in states]
|
|
456
|
+
return [[start[0], start[1]], *interior, [end[0], end[1]]]
|
|
457
|
+
|
|
458
|
+
def _isobar_end_state(
|
|
459
|
+
self,
|
|
460
|
+
P: float,
|
|
461
|
+
h: float,
|
|
462
|
+
h_liquid: float,
|
|
463
|
+
h_vapour: float,
|
|
464
|
+
) -> tuple[float, float, float | None]:
|
|
465
|
+
"""Return (h, T, quality) of a profile segment end on a mixture isobar.
|
|
466
|
+
|
|
467
|
+
Saturation ends and solved cycle states are already known; only an end
|
|
468
|
+
strictly inside the two-phase region needs a flash, for its quality.
|
|
469
|
+
"""
|
|
470
|
+
if h == h_vapour:
|
|
471
|
+
return h, float(self._compute_state_from_pressure_quality(P, 1.0).T()), 1.0
|
|
472
|
+
if h == h_liquid:
|
|
473
|
+
return h, float(self._compute_state_from_pressure_quality(P, 0.0).T()), 0.0
|
|
474
|
+
if not h_liquid < h < h_vapour:
|
|
475
|
+
for point in self._cycle_states:
|
|
476
|
+
if point and point["P"] == P and point["H"] == h:
|
|
477
|
+
return h, point["T"], None
|
|
478
|
+
state = self._compute_state_from_pressure_enthalpy(P=P, h=h)
|
|
479
|
+
quality = float(state.Q()) if h_liquid < h < h_vapour else None
|
|
480
|
+
return h, float(state.T()), quality
|
|
481
|
+
|
|
416
482
|
def _compute_compressor_outlet_state(
|
|
417
483
|
self, h_in: float, s_in: float, P_out: float
|
|
418
484
|
) -> CoolProp.AbstractState:
|
|
@@ -601,6 +667,13 @@ class VapourCompressionCycle:
|
|
|
601
667
|
0.0,
|
|
602
668
|
)
|
|
603
669
|
|
|
670
|
+
# CoolProp extrapolates saturation below Tmin without error.
|
|
671
|
+
if self._T_evap < self._state.Tmin():
|
|
672
|
+
raise ValueError(
|
|
673
|
+
"Evaporating temperature is below the refrigerant's minimum "
|
|
674
|
+
"temperature."
|
|
675
|
+
)
|
|
676
|
+
|
|
604
677
|
P_lo = self._get_P_sat_from_T(self._T_evap, Q=1.0)
|
|
605
678
|
P_hi = self._get_P_sat_from_T(self._T_cond, Q=0.0)
|
|
606
679
|
|
|
@@ -846,27 +919,23 @@ class VapourCompressionCycle:
|
|
|
846
919
|
).hmass()
|
|
847
920
|
|
|
848
921
|
if H[4] > h_sat_vapor:
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
922
|
+
t_h_curve_points.extend(
|
|
923
|
+
self._isobar_points(p_high, H[4], max(h_sat_vapor, H[2]), 21)
|
|
924
|
+
)
|
|
852
925
|
|
|
853
926
|
if H[4] > h_sat_liquid and not (H[2] > h_sat_vapor):
|
|
854
|
-
for
|
|
855
|
-
min(h_sat_vapor, H[4]), max(h_sat_liquid, H[2]), 21
|
|
927
|
+
for point in self._isobar_points(
|
|
928
|
+
p_high, min(h_sat_vapor, H[4]), max(h_sat_liquid, H[2]), 21
|
|
856
929
|
):
|
|
857
|
-
if not _repeats_last_point(t_h_curve_points,
|
|
858
|
-
|
|
859
|
-
P=p_high, h=h
|
|
860
|
-
)
|
|
861
|
-
t_h_curve_points.append([h, float(state.T())])
|
|
930
|
+
if not _repeats_last_point(t_h_curve_points, point[0]):
|
|
931
|
+
t_h_curve_points.append(point)
|
|
862
932
|
|
|
863
933
|
if H[2] < h_sat_liquid:
|
|
864
|
-
for
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
)
|
|
869
|
-
t_h_curve_points.append([h, float(state.T())])
|
|
934
|
+
for point in self._isobar_points(
|
|
935
|
+
p_high, min(h_sat_liquid, H[4]), H[2], 21
|
|
936
|
+
):
|
|
937
|
+
if not _repeats_last_point(t_h_curve_points, point[0]):
|
|
938
|
+
t_h_curve_points.append(point)
|
|
870
939
|
|
|
871
940
|
else:
|
|
872
941
|
# Determine supercritical gas cooler profile
|
|
@@ -918,23 +987,23 @@ class VapourCompressionCycle:
|
|
|
918
987
|
h_sat_liquid = self._compute_state_from_pressure_quality(p_low, 0.0).hmass()
|
|
919
988
|
|
|
920
989
|
if H[3] < h_sat_liquid:
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
990
|
+
t_h_curve_points.extend(
|
|
991
|
+
self._isobar_points(p_low, H[3], min(h_sat_liquid, H[5]), 21)
|
|
992
|
+
)
|
|
924
993
|
|
|
925
994
|
if H[3] < h_sat_vapor and not (H[5] < h_sat_liquid):
|
|
926
|
-
for
|
|
927
|
-
max(h_sat_liquid, H[3]), min(h_sat_vapor, H[5]), 21
|
|
995
|
+
for point in self._isobar_points(
|
|
996
|
+
p_low, max(h_sat_liquid, H[3]), min(h_sat_vapor, H[5]), 21
|
|
928
997
|
):
|
|
929
|
-
if not _repeats_last_point(t_h_curve_points,
|
|
930
|
-
|
|
931
|
-
t_h_curve_points.append([h, float(state.T())])
|
|
998
|
+
if not _repeats_last_point(t_h_curve_points, point[0]):
|
|
999
|
+
t_h_curve_points.append(point)
|
|
932
1000
|
|
|
933
1001
|
if H[5] > h_sat_vapor:
|
|
934
|
-
for
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
1002
|
+
for point in self._isobar_points(
|
|
1003
|
+
p_low, max(h_sat_vapor, H[3]), H[5], 21
|
|
1004
|
+
):
|
|
1005
|
+
if not _repeats_last_point(t_h_curve_points, point[0]):
|
|
1006
|
+
t_h_curve_points.append(point)
|
|
938
1007
|
|
|
939
1008
|
else:
|
|
940
1009
|
# Determine supercritical gas heater profile
|
|
@@ -34,6 +34,7 @@ from ..common.shared import (
|
|
|
34
34
|
cap_stage_condensing_temperatures,
|
|
35
35
|
condensing_temperature_search_range,
|
|
36
36
|
evaluate_vapour_hpr_result,
|
|
37
|
+
floor_stage_evaporating_temperatures,
|
|
37
38
|
validate_vapour_hp_refrigerant_ls,
|
|
38
39
|
)
|
|
39
40
|
from ..cycles.cascade_vapour_compression_cycle import CascadeVapourCompressionCycle
|
|
@@ -246,7 +247,12 @@ def _parse_cascade_hp_state_variables(
|
|
|
246
247
|
T_cond = cap_stage_condensing_temperatures(
|
|
247
248
|
map_x_arr_to_T_arr(x_cond, *condensing_temperature_search_range(args)), args
|
|
248
249
|
)
|
|
249
|
-
T_evap =
|
|
250
|
+
T_evap = floor_stage_evaporating_temperatures(
|
|
251
|
+
map_x_arr_to_T_arr(x_evap, args.T_hot[-1], args.T_hot[0]),
|
|
252
|
+
args,
|
|
253
|
+
# Process evaporators sit on the coldest stages.
|
|
254
|
+
first_stage=n_cond - 1,
|
|
255
|
+
)
|
|
250
256
|
dT_subcool = map_x_arr_to_DT_arr(x_subcool, T_cond, args.T_cold[0])
|
|
251
257
|
Q_heat_available = (
|
|
252
258
|
limit_available_duty(
|
|
@@ -28,6 +28,7 @@ from ..common.shared import (
|
|
|
28
28
|
cap_stage_condensing_temperatures,
|
|
29
29
|
condensing_temperature_search_range,
|
|
30
30
|
evaluate_vapour_hpr_result,
|
|
31
|
+
floor_stage_evaporating_temperatures,
|
|
31
32
|
validate_vapour_hp_refrigerant_ls,
|
|
32
33
|
)
|
|
33
34
|
from ..cycles.parallel_vapour_compression_cycles import (
|
|
@@ -161,7 +162,9 @@ def _parse_parallel_hp_state_temperatures(
|
|
|
161
162
|
T_cond = cap_stage_condensing_temperatures(
|
|
162
163
|
map_x_arr_to_T_arr(x_cond, *condensing_temperature_search_range(args)), args
|
|
163
164
|
)
|
|
164
|
-
T_evap =
|
|
165
|
+
T_evap = floor_stage_evaporating_temperatures(
|
|
166
|
+
map_x_arr_to_T_arr(x_evap, args.T_hot[-1], args.T_hot[0]), args
|
|
167
|
+
)
|
|
165
168
|
dT_subcool = map_x_arr_to_DT_arr(x_subcool, T_cond, T_evap)
|
|
166
169
|
Q_heat_available = (
|
|
167
170
|
limit_available_duty(
|
|
@@ -30,6 +30,7 @@ from ..common.shared import (
|
|
|
30
30
|
cap_stage_condensing_temperatures,
|
|
31
31
|
condensing_temperature_search_range,
|
|
32
32
|
evaluate_vapour_hpr_result,
|
|
33
|
+
floor_stage_evaporating_temperatures,
|
|
33
34
|
is_negligible_useful_duty,
|
|
34
35
|
post_solve_error,
|
|
35
36
|
validate_vapour_hp_refrigerant_ls,
|
|
@@ -176,10 +177,13 @@ def _parse_vc_mvr_state_variables(
|
|
|
176
177
|
map_x_arr_to_T_arr(parts["x_cond"], *condensing_temperature_search_range(args)),
|
|
177
178
|
args,
|
|
178
179
|
)
|
|
179
|
-
T_evap_vc =
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
T_evap_vc = floor_stage_evaporating_temperatures(
|
|
181
|
+
map_x_arr_to_T_arr(
|
|
182
|
+
parts["x_evap"],
|
|
183
|
+
args.T_hot[-1],
|
|
184
|
+
args.T_hot[0],
|
|
185
|
+
),
|
|
186
|
+
args,
|
|
183
187
|
)
|
|
184
188
|
Q_heat_available = limit_available_duty(
|
|
185
189
|
get_Q_vals_at_T_hpr_from_bckgrd_profile(
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import functools
|
|
5
6
|
import math
|
|
6
7
|
import re
|
|
7
8
|
from typing import Any
|
|
@@ -52,6 +53,23 @@ def build_coolprop_abstract_state(value: str | Any):
|
|
|
52
53
|
return state
|
|
53
54
|
|
|
54
55
|
|
|
56
|
+
@functools.cache
|
|
57
|
+
def critical_point(value: str) -> tuple[float, float, float]:
|
|
58
|
+
"""Return a fluid spec's critical temperature (K), pressure (Pa) and density.
|
|
59
|
+
|
|
60
|
+
A mixture's critical point is a costly CoolProp solve, so each spec is
|
|
61
|
+
solved once per process.
|
|
62
|
+
"""
|
|
63
|
+
import CoolProp
|
|
64
|
+
|
|
65
|
+
state = build_coolprop_abstract_state(value)
|
|
66
|
+
return (
|
|
67
|
+
state.keyed_output(CoolProp.iT_critical),
|
|
68
|
+
state.keyed_output(CoolProp.iP_critical),
|
|
69
|
+
state.keyed_output(CoolProp.irhomass_critical),
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
55
73
|
def validate_coolprop_fluid_name(value: str) -> None:
|
|
56
74
|
"""Validate a CoolProp fluid or mixture name by constructing its state object."""
|
|
57
75
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: OpenPinch
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.6
|
|
4
4
|
Summary: An advanced pinch analysis and total site integration toolkit
|
|
5
5
|
Project-URL: Homepage, https://github.com/waikato-ahuora-smart-energy-systems/OpenPinch
|
|
6
6
|
Project-URL: Issues, https://github.com/waikato-ahuora-smart-energy-systems/OpenPinch/issues
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/controllability.py
RENAMED
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/duty_optimisation.py
RENAMED
|
File without changes
|
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/__init__.py
RENAMED
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/executor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/pathways.py
RENAMED
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/execution/settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/service.py
RENAMED
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/extraction/utility.py
RENAMED
|
File without changes
|
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/alpha.py
RENAMED
|
File without changes
|
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/_base/area.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openpinch-0.7.4 → openpinch-0.7.6}/OpenPinch/analysis/heat_exchanger_networks/models/base.py
RENAMED
|
File without changes
|