Skip to content

Commit

Permalink
Merge pull request #10351 from NREL/Dayltg3
Browse files Browse the repository at this point in the history
DaylightingManager Refactor -- Part 2
  • Loading branch information
Myoldmopar authored Jan 5, 2024
2 parents 5436820 + 5ce88f5 commit 993f569
Show file tree
Hide file tree
Showing 37 changed files with 5,098 additions and 5,894 deletions.
70 changes: 31 additions & 39 deletions src/EnergyPlus/AirflowNetwork/src/Solver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3582,9 +3582,9 @@ namespace AirflowNetwork {
// Assign occupant ventilation control number from zone to surface
for (int i = 1; i <= AirflowNetworkNumOfSurfaces; ++i) {
int j = MultizoneSurfaceData(i).SurfNum;
if (m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::Window ||
m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::Door ||
m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::GlassDoor) {
auto const &surf = m_state.dataSurface->Surface(j);
if (surf.OriginalClass == SurfaceClass::Window || surf.OriginalClass == SurfaceClass::Door ||
surf.OriginalClass == SurfaceClass::GlassDoor) {
for (n = 1; n <= AirflowNetworkNumOfZones; ++n) {
if (MultizoneZoneData(n).ZoneNum == m_state.dataSurface->Surface(j).Zone) {
if (MultizoneZoneData(n).OccupantVentilationControlNum > 0 && MultizoneSurfaceData(i).OccupantVentilationControlNum == 0) {
Expand Down Expand Up @@ -4621,6 +4621,8 @@ namespace AirflowNetwork {
int compnum = compnum_iter->second;
AirflowNetworkLinkageData(count).CompNum = compnum;

auto &surf = m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum);

switch (AirflowNetworkLinkageData(count).element->type()) {
case ComponentType::DOP: {
// if (AirflowNetworkLinkageData(count).CompName ==
Expand All @@ -4630,26 +4632,23 @@ namespace AirflowNetwork {
// if (AirflowNetworkCompData(i).CompTypeNum == iComponentTypeNum::DOP) {
++j;
AirflowNetworkLinkageData(count).DetOpenNum = j;
MultizoneSurfaceData(count).Multiplier = m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Multiplier;
if (m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Tilt < 10.0 ||
m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Tilt > 170.0) {
MultizoneSurfaceData(count).Multiplier = surf.Multiplier;
if (surf.Tilt < 10.0 || surf.Tilt > 170.0) {
ShowWarningError(m_state, "An AirflowNetwork:Multizone:Surface object has an air-flow opening corresponding to");
ShowContinueError(m_state, "window or door = " + MultizoneSurfaceData(count).SurfName + ", which is within ");
ShowContinueError(m_state, "10 deg of being horizontal. Airflows through large horizontal openings are poorly");
ShowContinueError(m_state, "modeled in the AirflowNetwork model resulting in only one-way airflow.");
}
if (!(m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::Window ||
m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::GlassDoor ||
m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::Door ||
m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).IsAirBoundarySurf)) {
if (!(surf.OriginalClass == SurfaceClass::Window || surf.OriginalClass == SurfaceClass::GlassDoor ||
surf.OriginalClass == SurfaceClass::Door || surf.IsAirBoundarySurf)) {
ShowSevereError(m_state,
format(RoutineName) +
"AirflowNetworkComponent: The opening must be assigned to a window, door, glassdoor or air boundary at " +
AirflowNetworkLinkageData(count).Name);
ErrorsFound = true;
}
if (m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::Door ||
m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::GlassDoor) {

if (surf.OriginalClass == SurfaceClass::Door || surf.OriginalClass == SurfaceClass::GlassDoor) {
if (MultizoneCompDetOpeningData(AirflowNetworkCompData(compnum).TypeNum).LVOType == 2) {
ShowSevereError(m_state,
format(RoutineName) +
Expand All @@ -4662,20 +4661,17 @@ namespace AirflowNetwork {
} break;
case ComponentType::SOP: {
// if (AirflowNetworkCompData(i).CompTypeNum == iComponentTypeNum::SOP) {
MultizoneSurfaceData(count).Multiplier = m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Multiplier;
if (m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Tilt < 10.0 ||
m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Tilt > 170.0) {
MultizoneSurfaceData(count).Multiplier = surf.Multiplier;
if (surf.Tilt < 10.0 || surf.Tilt > 170.0) {
ShowSevereError(m_state, "An AirflowNetwork:Multizone:Surface object has an air-flow opening corresponding to");
ShowContinueError(m_state, "window or door = " + MultizoneSurfaceData(count).SurfName + ", which is within");
ShowContinueError(m_state, "10 deg of being horizontal. Airflows through horizontal openings are not allowed.");
ShowContinueError(m_state, "AirflowNetwork:Multizone:Component:SimpleOpening = " + AirflowNetworkCompData(compnum).Name);
ErrorsFound = true;
}

if (!(m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::Window ||
m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::GlassDoor ||
m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::Door ||
m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).IsAirBoundarySurf)) {
if (!(surf.OriginalClass == SurfaceClass::Window || surf.OriginalClass == SurfaceClass::GlassDoor ||
surf.OriginalClass == SurfaceClass::Door || surf.IsAirBoundarySurf)) {
ShowSevereError(m_state,
format(RoutineName) +
"AirflowNetworkComponent: The opening must be assigned to a window, door, glassdoor or air boundary at " +
Expand All @@ -4685,7 +4681,7 @@ namespace AirflowNetwork {
} break;
case ComponentType::HOP: {
// if (AirflowNetworkCompData(i).CompTypeNum == iComponentTypeNum::HOP) {
MultizoneSurfaceData(count).Multiplier = m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Multiplier;
MultizoneSurfaceData(count).Multiplier = surf.Multiplier;
// Get linkage height from upper and lower zones
if (MultizoneZoneData(AirflowNetworkLinkageData(count).NodeNums[0]).ZoneNum > 0) {
AirflowNetworkLinkageData(count).NodeHeights[0] =
Expand Down Expand Up @@ -4714,21 +4710,16 @@ namespace AirflowNetwork {
ErrorsFound = true;
}
}
if (!(m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Tilt > 170.0 &&
m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Tilt < 190.0) &&
!(m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Tilt > -10.0 &&
m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).Tilt < 10.0)) {
if (!(surf.Tilt > 170.0 && surf.Tilt < 190.0) && !(surf.Tilt > -10.0 && surf.Tilt < 10.0)) {
ShowWarningError(m_state, "An AirflowNetwork:Multizone:Surface object has an air-flow opening corresponding to");
ShowContinueError(m_state, "window or door = " + MultizoneSurfaceData(count).SurfName + ", which is above");
ShowContinueError(m_state, "10 deg of being horizontal. Airflows through non-horizontal openings are not modeled");
ShowContinueError(m_state,
"with the object of AirflowNetwork:Multizone:Component:HorizontalOpening = " +
AirflowNetworkCompData(compnum).Name);
}
if (!(m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::Window ||
m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::GlassDoor ||
m_state.dataSurface->SurfWinOriginalClass(MultizoneSurfaceData(count).SurfNum) == SurfaceClass::Door ||
m_state.dataSurface->Surface(MultizoneSurfaceData(count).SurfNum).IsAirBoundarySurf)) {
if (!(surf.OriginalClass == SurfaceClass::Window || surf.OriginalClass == SurfaceClass::GlassDoor ||
surf.OriginalClass == SurfaceClass::Door || surf.IsAirBoundarySurf)) {
ShowSevereError(m_state,
format(RoutineName) +
"AirflowNetworkComponent: The opening must be assigned to a window, door, glassdoor or air boundary at " +
Expand Down Expand Up @@ -6432,9 +6423,9 @@ namespace AirflowNetwork {
}
if (MultizoneSurfaceData(i).OccupantVentilationControlNum == 0) MultizoneSurfaceData(i).OpenFactor = 0.0;
j = MultizoneSurfaceData(i).SurfNum;
if (m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::Window ||
m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::Door ||
m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::GlassDoor || m_state.dataSurface->Surface(j).IsAirBoundarySurf) {
auto const &surf = m_state.dataSurface->Surface(j);
if (surf.OriginalClass == SurfaceClass::Window || surf.OriginalClass == SurfaceClass::Door ||
surf.OriginalClass == SurfaceClass::GlassDoor || surf.IsAirBoundarySurf) {
if (MultizoneSurfaceData(i).OccupantVentilationControlNum > 0) {
if (MultizoneSurfaceData(i).OpeningStatus == OpenStatus::FreeOperation) {
if (MultizoneSurfaceData(i).OpeningProbStatus == ProbabilityCheck::ForceChange) {
Expand Down Expand Up @@ -6513,9 +6504,9 @@ namespace AirflowNetwork {
for (i = 1; i <= AirflowNetworkNumOfSurfaces; ++i) {
if (i > AirflowNetworkNumOfSurfaces - NumOfLinksIntraZone) continue;
j = MultizoneSurfaceData(i).SurfNum;
if (m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::Window ||
m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::Door ||
m_state.dataSurface->SurfWinOriginalClass(j) == SurfaceClass::GlassDoor) {
auto const &surf = m_state.dataSurface->Surface(j);
if (surf.OriginalClass == SurfaceClass::Window || surf.OriginalClass == SurfaceClass::Door ||
surf.OriginalClass == SurfaceClass::GlassDoor) {
if (MultizoneSurfaceData(i).HybridCtrlGlobal) {
MultizoneSurfaceData(i).OpenFactor = GlobalOpenFactor;
}
Expand Down Expand Up @@ -11302,7 +11293,9 @@ namespace AirflowNetwork {
if (ActualZoneNum > 0) {
for (ANSurfaceNum = 1; ANSurfaceNum <= AirflowNetworkNumOfSurfaces; ++ANSurfaceNum) {
SurfNum = MultizoneSurfaceData(ANSurfaceNum).SurfNum;
if (m_state.dataSurface->Surface(SurfNum).Zone == ActualZoneNum) {
auto const &surf = m_state.dataSurface->Surface(SurfNum);

if (surf.Zone == ActualZoneNum) {
if (VentilationCtrl == HybridVentCtrl_Close) {
MultizoneSurfaceData(ANSurfaceNum).HybridVentClose = true;
} else {
Expand All @@ -11312,10 +11305,9 @@ namespace AirflowNetwork {
if (ControlType == GlobalCtrlType) {
MultizoneSurfaceData(ANSurfaceNum).HybridCtrlGlobal = true;
if (HybridVentSysAvailMaster(SysAvailNum) == ActualZoneNum) {
if ((m_state.dataSurface->SurfWinOriginalClass(SurfNum) == SurfaceClass::Window ||
m_state.dataSurface->SurfWinOriginalClass(SurfNum) == SurfaceClass::Door ||
m_state.dataSurface->SurfWinOriginalClass(SurfNum) == SurfaceClass::GlassDoor) &&
m_state.dataSurface->Surface(SurfNum).ExtBoundCond == ExternalEnvironment) {
if ((surf.OriginalClass == SurfaceClass::Window || surf.OriginalClass == SurfaceClass::Door ||
surf.OriginalClass == SurfaceClass::GlassDoor) &&
surf.ExtBoundCond == ExternalEnvironment) {
MultizoneSurfaceData(ANSurfaceNum).HybridCtrlMaster = true;
Found = true;
}
Expand Down
10 changes: 5 additions & 5 deletions src/EnergyPlus/CostEstimateManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,12 @@
#include <EnergyPlus/CostEstimateManager.hh>
#include <EnergyPlus/DXCoils.hh>
#include <EnergyPlus/Data/EnergyPlusData.hh>
#include <EnergyPlus/DataDaylighting.hh>
// #include <EnergyPlus/DataDaylighting.hh>
#include <EnergyPlus/DataHeatBalance.hh>
#include <EnergyPlus/DataIPShortCuts.hh>
#include <EnergyPlus/DataPhotovoltaics.hh>
#include <EnergyPlus/DataSurfaces.hh>
#include <EnergyPlus/DaylightingManager.hh>
#include <EnergyPlus/HeatingCoils.hh>
#include <EnergyPlus/InputProcessing/InputProcessor.hh>
#include <EnergyPlus/PlantChillers.hh>
Expand Down Expand Up @@ -453,7 +454,7 @@ namespace CostEstimateManager {
} else {
ThisZoneID = Util::FindItem(state.dataCostEstimateManager->CostLineItem(Item).ParentObjName, Zone);
if (ThisZoneID > 0) {
state.dataCostEstimateManager->CostLineItem(Item).Qty = state.dataDaylightingData->ZoneDaylight(ThisZoneID).totRefPts;
state.dataCostEstimateManager->CostLineItem(Item).Qty = state.dataDayltg->ZoneDaylight(ThisZoneID).totRefPts;
} else {
ShowSevereError(state,
format("ComponentCost:LineItem: \"{}\", Daylighting:Controls, need to specify a valid zone name",
Expand Down Expand Up @@ -879,12 +880,11 @@ namespace CostEstimateManager {
} break;
case ParentObject::DaylightingControls: {
if (state.dataCostEstimateManager->CostLineItem(Item).ParentObjName == "*") { // wildcard, apply to all such components
state.dataCostEstimateManager->CostLineItem(Item).Qty =
sum(state.dataDaylightingData->ZoneDaylight, &Dayltg::ZoneDaylightCalc::totRefPts);
state.dataCostEstimateManager->CostLineItem(Item).Qty = sum(state.dataDayltg->ZoneDaylight, &Dayltg::ZoneDaylightCalc::totRefPts);
} else if (!state.dataCostEstimateManager->CostLineItem(Item).ParentObjName.empty()) {
ThisZoneID = Util::FindItem(state.dataCostEstimateManager->CostLineItem(Item).ParentObjName, Zone);
if (ThisZoneID > 0) {
state.dataCostEstimateManager->CostLineItem(Item).Qty = state.dataDaylightingData->ZoneDaylight(ThisZoneID).totRefPts;
state.dataCostEstimateManager->CostLineItem(Item).Qty = state.dataDayltg->ZoneDaylight(ThisZoneID).totRefPts;
}
}

Expand Down
Loading

9 comments on commit 993f569

@nrel-bot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - Win64-Windows-10-VisualStudio-16: OK (2756 of 2756 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2b
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-Linux-Ubuntu-22.04-gcc-11.4: OK (2778 of 2778 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-Linux-Ubuntu-22.04-gcc-11.4-UnitTestsCoverage-Debug: OK (1969 of 1969 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

@nrel-bot-2b
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-Linux-Ubuntu-22.04-gcc-11.4-IntegrationCoverage-Debug: OK (790 of 790 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

@nrel-bot-3
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop (Myoldmopar) - x86_64-MacOS-10.17-clang-14.0.0: OK (2757 of 2757 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2b
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Improved-duct-model (Myoldmopar) - x86_64-Linux-Ubuntu-22.04-gcc-11.4: OK (3584 of 3584 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Improved-duct-model (Myoldmopar) - Win64-Windows-10-VisualStudio-16: OK (2756 of 2756 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2b
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Improved-duct-model (Myoldmopar) - x86_64-Linux-Ubuntu-22.04-gcc-11.4-UnitTestsCoverage-Debug: OK (1969 of 1969 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

@nrel-bot-2b
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Improved-duct-model (Myoldmopar) - x86_64-Linux-Ubuntu-22.04-gcc-11.4-IntegrationCoverage-Debug: OK (790 of 790 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

Please sign in to comment.