Central Heat Pump Refactor - #11787
Open
mitchute wants to merge 20 commits into
Open
Conversation
Add energy and three-loop routing contracts for all operating modes. Cover final PLR and cycling behavior, sequential flow allocation, and water/glycol node heat transfer.
- capture thermodynamic, routing, curve, flow, and unmet-load state - derive legacy reports, nodes, and wrapper aggregation from module results - preserve simultaneous cooling snapshots explicitly - add result routing, synchronization, energy, and reset tests
Use final operating temperatures for cooling and heating performance curves and replace heating post-scaling with a bounded PLR and cycling solution. Support bicubic EIRFPLR curves and an optional heating leaving-water limit, with transition, documentation, and energy-balance regressions.
- solve modes 3-5 from one converged thermodynamic operating point - route recovered and source heat without dropping useful loads - stage heterogeneous modules sequentially using actual remaining demand - derive dominance from aggregate source transfer - add balanced, dominant, and deterministic staging regressions
- initialize each plant connection using its design flow and loop fluid - allocate actual finite wrapper flow sequentially across modules - centralize result-based bypass mixing and node reporting - add fixed-flow, variable-flow, glycol, and source-routing regressions
- report useful heating and bidirectional source capacity envelopes - use independently stageable minimums for heterogeneous module banks - preserve calculated sizes for hard-size diagnostics - use source sizing data and register direction-safe design flows
- validate static performance inputs and PLR curve domains - resolve flow modes per wrapper and default blank ancillary schedules - honor RunFlag, fail unresolved plant scans, and clear cached results - remove unreachable legacy aggregation and add regression coverage
- document final thermodynamics, dispatch, and heat routing - align IOR and IDD inputs, outputs, units, and curve conventions - clarify blank ancillary schedule behavior in example files
Clear only the cached load and flow request associated with an inactive useful-load connection. Preserve active cooling or heating state during inactive source and opposite-load callbacks, and reset the wrapper only after both useful-load connections are off. Add three-loop regression coverage for active-load preservation and final off-state cleanup.
Delete the unreferenced pre-correction chiller and chiller-heater calculation pipelines, their helper and update methods, and exclusive scratch state. Remove tests tied only to the retired private implementation while retaining active thermodynamic and integration coverage. Both CentralChillerHeaterSystem examples remain numerically identical.
- parse performance objects directly from canonical epJSON fields - retain defaults, Autosize handling, diagnostics, and unused-object tracking - treat object iteration order as an implementation detail - add native epJSON and name-based IDF equivalence coverage
- retain immutable performance definitions and bind modules by index and schedule - isolate per-module sizing, warning, flow-mode, and result state - replace mutable solver aliases and array operating points with named views - bind outputs to the authoritative result and remove legacy shadow state
Replace the 20 fixed wrapper groups with a normalized extensible module_groups schema and parse wrapper input directly from epJSON. Resolve performance definitions and schedules while expanding modules once, remove redundant wrapper association bookkeeping, and require at least one module group. Add IDF/native equivalence, beyond-former-limit, schedule, reference, duplicate-name, and schema-validation coverage.
Move the implementation, header, and unit tests to names matching the CentralHeatPumpSystem object, and update CMake, global state, plant factory, and equipment enum wiring. Use cooling, heating, source, evaporator, and condenser terminology throughout the model. Expand abbreviated performance and report names, remove unused state and a no-op initialization override, and retain the current input and output schema.
- stop part-load bisection on bracket and load tolerances - record solver status, residuals, iterations, and curve evaluations - report stable recurring diagnostics for exhausted solvers - cover tiny loads, convergence, work limits, and exhaustion
Replace module-owned Array1D and state EPVector storage with zero-based std::vector containers. Remove duplicate count and performance-index state while preserving stable immutable performance references. Add container reset, boundary, multiple-definition, and expanded-group regression coverage.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull request overview
Description of the purpose of this PR
Will update the description soon
Pull Request Author
Reviewer