Conversation
Fix CI to run on prs from external forks
Install QtIFW even for forks
Don't set code signing args for external prs
* fix: autosize resistive defrost heater capacity in hvac_library.osm Hardcoded values (1e-07 for the VRF system, 2000 for the four DX heating coils) prevented EnergyPlus from sizing defrost heater power to the equipment capacity. Fixes #770 * fix: rename mislabeled gas/electric unitary system, add genuine VRF-free DX heat pump "Multi Speed HP AirToAir" was categorized as a heat pump but used a 2-stage gas heating coil with electric supplemental heat, so it is renamed to "Multi Speed DX_Clg Gas_Htg" to reflect its actual coils. A new AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed object named "Multi Speed HP AirToAir" is added with a genuine 2-stage DX heating coil (reverse-cycle defrost, autosized resistive defrost heater) and 2-stage DX cooling coil, matching the example provided in the issue. Fixes #834 * feat: add 2-speed DX cycling unitary system with CoolReheat dehumidification to hvac library Adds 'Unitary - 2-Speed DX Elec heat - Cycling - Dehumidify' to the default HVAC library, using OS:Coil:Cooling:DX:TwoStageWithHumidityControlMode and CoolReheat dehumidification control — a common high-humidity climate system not previously buildable from the OpenStudio App UI. All five referenced objects (fan, heating coil, cooling coil, supplemental coil, availability schedule) reuse existing library entries. Co-Authored-By: Claude Sonnet 4.6 <[email protected]> * fix: correct NaturalGas fuel type to Electricity on two DX multispeed cooling coils Both OS:Coil:Cooling:DX:MultiSpeed objects in hvac_library.osm had their Fuel Type field incorrectly set to NaturalGas. DX cooling coils are electrically driven; this was a copy-paste error. Co-Authored-By: Claude Sonnet 4.6 <[email protected]> --------- Co-authored-by: Claude Sonnet 4.6 <[email protected]> Co-authored-by: Dan Macumber <[email protected]>
* feat: add hot-gas reheat unitary system with Coil:Heating:Desuperheater Adds 'Unitary - Single Speed DX cooling - Elec heat - CAV - Hotgas reheat' to the default HVAC library, using CoolReheat dehumidification control with a Coil:Heating:Desuperheater as the reheat coil. The desuperheater reclaims waste heat from the unitary system's own DX cooling coil rather than using resistance reheat, avoiding the extra energy cost of electric reheat. Also fixes AirLoopHVACUnitarySystem cloning (drag-from-library and "copy system"): ModelObject::clone() only remaps parent-child ownership, but CoilHeatingDesuperheater::heatingSource() is a lateral reference to a sibling coil, so it was left unset on the clone. fixupClonedDesuperheaterHeatingSource() re-links the cloned desuperheater coil to the cloned cooling coil. Co-Authored-By: Claude Sonnet 5 <[email protected]> * refactor: generalize clone lateral-reference fixup beyond desuperheater ModelObject::clone() clones each child individually and reattaches it via setParent(), so parent-child edges are correctly remapped, but lateral (sibling-to-sibling) object-list references within the cloned subtree are left pointing at the original objects. The previous fix special-cased just CoilHeatingDesuperheater::heatingSource(), but the same bug applies to any lateral reference (e.g. SetpointManager:MixedAir's node fields). Replace it with a generic fixup: build an old-handle -> clone map by walking the original and cloned subtrees in parallel, then use IddObject::objectLists()/WorkspaceObject::getTarget()/setPointer() to rewrite any object-list field in the clone that still points into the original subtree. This fixes the desuperheater case as before, and any future lateral-reference case, without needing a new special case per object type. Co-Authored-By: Claude Sonnet 5 <[email protected]> * fix: correct clone fixup for fields clone() clears instead of staling Rename the library template to "Desuperheater reheat" for clarity. Testing the generalized fixup against the real SDK (loading hvac_library.osm and cloning the new UnitarySystem both within the same model and across models) showed remapLateralReferences was a no-op for CoilHeatingDesuperheater::heatingSource(): clone() doesn't leave that field pointing at the stale original object, it clears it outright. The previous implementation only rewrote fields that already had some target set on the clone, so it silently did nothing for this case -- reproduced live in the app as a fatal EnergyPlus error (missing heating_source_name / heating_source_object_type) when simulating the new system. Fixed by reading the field to remap from `original` instead of from the clone, and unconditionally forcing the clone's field to match whenever the original's target was itself part of the cloned subtree. Verified against the SDK directly (Ruby) for both same-model ("copy system") and cross-model (drag-from-library) clone scenarios, and confirmed the simulation now runs cleanly in the rebuilt app. Co-Authored-By: Claude Sonnet 5 <[email protected]> * fix: reach loop-branch equipment when fixing up cloned references ParentObject::children() is true ownership (e.g. a UnitarySystem's own fan/coils) but does not include HVACComponents placed on a Loop's supply/demand branches. A UnitarySystem sitting on an AirLoopHVAC's supply branch is only reachable via supplyComponents(), not children(). Cloning a whole loop ("Copy System") therefore never visited the branch equipment at all -- including the desuperheater's heating source inside it -- because buildCloneHandleMap/remapLateralReferences only recursed via children(). Reproduced live: copying an existing (working) desuperheater airloop and reassigning zones still hit the same fatal EnergyPlus error, since the copy's desuperheater was never touched by the fixup. Fixed by walking children(), supplyComponents(), and demandComponents() as independently size-matched groups rather than one combined list -- demand-side counts legitimately differ between original and clone (connected thermal zones are never duplicated by clone(), by design), so that mismatch must not block fixing up the supply side, where the equipment lines up 1:1 with the original. Verified against the SDK directly (Ruby) by reproducing the actual AirLoopHVAC topology (OA system, unitary system, zone, terminal) and confirmed live in the app: both "drag from library" and "Copy System" on a whole airloop now correctly re-wire the desuperheater's heating source and a manually-added SetpointManager:MixedAir's node references. Co-Authored-By: Claude Sonnet 5 <[email protected]> * fix: reach outdoor-air/relief branch equipment in clone fixup too Same traversal gap as loop supply/demand branches, one level deeper: equipment placed on an AirLoopHVACOutdoorAirSystem's outdoor-air or relief branch (e.g. an evaporative cooler, or a SetpointManager:MixedAir sitting on one of those nodes) is reachable only via oaComponents()/reliefComponents(), not children() and not the loop's own supplyComponents()/demandComponents() (which only see the OA system as a single opaque object on the main branch). Reproduced with the stock File > Examples > Example Model: its airloop's outdoor air system has an evaporative cooler with a SetpointManager: MixedAir on it. Copying that airloop left the copy's setpoint manager's node fields empty, since the fixup never visited that branch at all. Fixed by adding oaComponents()/reliefComponents() as two more independently size-matched groups in childSubtreeObjectGroups(). Verified against the SDK directly (Ruby, using OpenStudio::Model.exampleModel) -- all 4 of the example model's SetpointManagerMixedAir objects correctly resolve their node references on the clone -- and confirmed live in the rebuilt app. Co-Authored-By: Claude Sonnet 5 <[email protected]> * style: fix clang-format indentation in HVACSystemsController.cpp CI flagged the anonymous namespace body as over-indented; clang-format doesn't indent namespace contents under this repo's style. * perf: pass clonedObject by const reference in fixupClonedReferences cppcheck flagged the unnecessary copy -- the parameter is only forwarded into buildCloneHandleMap/remapLateralReferences, both of which already accept it by const reference. * refactor: address review feedback on clone lateral-reference fixup Move fixupClonedReferences and its helpers from HVACSystemsController.cpp into src/utilities/CloneFixup.{hpp,cpp} and add unit tests covering the CoilHeatingDesuperheater::heatingSource() case. Also, per review: merge the duplicated tree-walk in buildCloneHandleMap/remapLateralReferences into a single recursive pass (collectClonedObjectPairs), pass clonedObject by reference instead of copying it down the recursion, and switch the handle map to std::unordered_map (ordering was never relied on). Co-Authored-By: Claude Sonnet 5 <[email protected]> * fix: silence cppcheck constParameter finding on fixupClonedReferences clonedObject is only ever forwarded into collectClonedObjectPairs's const-ref parameter here; the actual mutation happens later on the copy stored in the pairs vector, which is safe since ModelObject shares its underlying object via shared_ptr regardless of wrapper constness. Co-Authored-By: Claude Sonnet 5 <[email protected]> --------- Co-authored-by: Claude Sonnet 5 <[email protected]>
…Transmittance Schedule columns (#883) Closes #882 Co-authored-by: Claude Sonnet 4.6 <[email protected]> Co-authored-by: Dan Macumber <[email protected]>
…plication into develop
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
No description provided.