Skip to content

Commit

Permalink
Merge pull request #10528 from NREL/10302-CalcEquipmentFlowRates
Browse files Browse the repository at this point in the history
Fix #10302 - CalcEquipmentFlowRates assert failure due to out of bounds std::array indexing
  • Loading branch information
Myoldmopar authored May 31, 2024
2 parents 6cccca9 + 517946f commit 19e1844
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/EnergyPlus/SolarCollectors.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1979,7 +1979,7 @@ namespace SolarCollectors {
CondOfAir = Conductivity[Index];
PrOfAir = Pr[Index];
DensOfAir = Density[Index];
} else if (Index > NumOfPropDivisions) {
} else if (Index >= NumOfPropDivisions) { // 0-index, hence MaxIndex = NumOfPropDivisions - 1
Index = NumOfPropDivisions - 1;
VisDOfAir = Mu[Index];
CondOfAir = Conductivity[Index];
Expand Down
2 changes: 2 additions & 0 deletions src/EnergyPlus/SolarCollectors.hh
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@

// EnergyPlus Headers
#include <EnergyPlus/DataGlobals.hh>
#include <EnergyPlus/EPVector.hh>
#include <EnergyPlus/EnergyPlus.hh>
#include <EnergyPlus/Plant/DataPlant.hh>
#include <EnergyPlus/PlantComponent.hh>

namespace EnergyPlus {
Expand Down
1 change: 1 addition & 0 deletions tst/EnergyPlus/unit/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ set(test_src
SizeWaterHeatingCoil.unit.cc
SizingAnalysisObjects.unit.cc
SizingManager.unit.cc
SolarCollectors.unit.cc
SolarShading.unit.cc
Standard621SimplifiedProcedure.unit.cc
StandardRatings.unit.cc
Expand Down
78 changes: 78 additions & 0 deletions tst/EnergyPlus/unit/SolarCollectors.unit.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// EnergyPlus, Copyright (c) 1996-2024, The Board of Trustees of the University of Illinois,
// The Regents of the University of California, through Lawrence Berkeley National Laboratory
// (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge
// National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other
// contributors. All rights reserved.
//
// NOTICE: This Software was developed under funding from the U.S. Department of Energy and the
// U.S. Government consequently retains certain rights. As such, the U.S. Government has been
// granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable,
// worldwide license in the Software to reproduce, distribute copies to the public, prepare
// derivative works, and perform publicly and display publicly, and to permit others to do so.
//
// Redistribution and use in source and binary forms, with or without modification, are permitted
// provided that the following conditions are met:
//
// (1) Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// (2) Redistributions in binary form must reproduce the above copyright notice, this list of
// conditions and the following disclaimer in the documentation and/or other materials
// provided with the distribution.
//
// (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory,
// the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific prior
// written permission.
//
// (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form
// without changes from the version obtained under this License, or (ii) Licensee makes a
// reference solely to the software portion of its product, Licensee must refer to the
// software as "EnergyPlus version X" software, where "X" is the version number Licensee
// obtained under this License and may not use a different name for the software. Except as
// specifically required in this Section (4), Licensee shall not use in a company name, a
// product name, in advertising, publicity, or other promotional activities any name, trade
// name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly
// similar designation, without the U.S. Department of Energy's prior written consent.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

// Google Test Headers
#include <gtest/gtest.h>

// EnergyPlus Headers
#include "Fixtures/EnergyPlusFixture.hh"
#include <EnergyPlus/SolarCollectors.hh>

#include <cmath>

using namespace EnergyPlus;

TEST_F(EnergyPlusFixture, CalcConvCoeffBetweenPlates)
{
constexpr Real64 TempSurf1 = 251.0; // temperature of surface 1
constexpr Real64 TempSurf2 = 26.5; // temperature of surface 2

constexpr Real64 Tref = 0.5 * (TempSurf1 + TempSurf2);

constexpr Real64 maxArrayTemp = 126.85; // This is the max temperature in the `Temps` array that stores the correlation temps
EXPECT_TRUE(Tref > maxArrayTemp);

// Irrelevant to this test
constexpr Real64 AirGap = 0.05; // characteristic length [m]
constexpr Real64 CosTilt = 0.87; // cosine of surface tilt angle relative to the horizontal
constexpr Real64 SinTilt = 0.80; // sine of surface tilt angle relative to the horizontal

Real64 hConvCoef = EnergyPlus::SolarCollectors::CollectorData::CalcConvCoeffBetweenPlates(TempSurf1, TempSurf2, AirGap, CosTilt, SinTilt);
EXPECT_FALSE(std::isnan(hConvCoef));
EXPECT_TRUE(std::isfinite(hConvCoef));
EXPECT_NEAR(4.71593, hConvCoef, 0.001);
}

5 comments on commit 19e1844

@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: OK (2806 of 2806 tests passed, 0 test warnings)

Build Badge Test 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.18-clang-15.0.0: OK (2785 of 2785 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.

develop (Myoldmopar) - Win64-Windows-10-VisualStudio-16: OK (2784 of 2784 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 (1996 of 1996 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

@nrel-bot-2c
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 (791 of 791 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

Please sign in to comment.