From ae2c298f6f76ac321c12c5366ba2d3eb3cd60628 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Thu, 10 Mar 2022 09:59:04 -0700 Subject: [PATCH 01/13] Stub sql convenience methods for fenestration assembly. --- src/utilities/sql/SqlFile_Impl.cpp | 27 ++++++++++++++++++++++++++ src/utilities/sql/SqlFile_Impl.hpp | 31 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index e22aef8b91e..e99b54e48ef 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -907,6 +907,33 @@ namespace detail { return execAndReturnFirstDouble(s, reportName, rowName, columnName); } + /// fenestration assembly + boost::optional SqlFile_Impl::assemblyUFactorByWindow(const std::string& windowName) const { + std::string rowName = boost::to_upper_copy(windowName); + + const std::string& s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Exterior Fenestration' + AND RowName=? + AND ColumnName='Assembly U-Factor')"; + + boost::optional d = execAndReturnFirstDouble(s, rowName); + + if (!d) { + const s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Interior Fenestration' + AND RowName=? + AND ColumnName='Assembly U-Factor')"; + + d = execAndReturnFirstDouble(s, rowName); + } + + return d; + } + /// hours simulated boost::optional SqlFile_Impl::hoursSimulated() const { const std::string& s = R"(SELECT Value FROM TabularDataWithStrings diff --git a/src/utilities/sql/SqlFile_Impl.hpp b/src/utilities/sql/SqlFile_Impl.hpp index c224b7c13eb..45ca687fd4f 100644 --- a/src/utilities/sql/SqlFile_Impl.hpp +++ b/src/utilities/sql/SqlFile_Impl.hpp @@ -146,6 +146,37 @@ namespace detail { const openstudio::EndUseCategoryType& t_categoryType, const openstudio::MonthOfYear& t_monthOfYear) const; + /// TODO + boost::optional assemblyUFactorByWindow(const std::string& windowName) const; + + boost::optional assemblyUFactorTotalorAverage() const; + + boost::optional assemblyUFactorNorthTotalorAverage() const; + + boost::optional assemblyUFactorNonNorthTotalorAverage() const; + + boost::optional assemblyUFactorShadedState() const; + + boost::optional assemblySHGCByWindow() const; + + boost::optional assemblySHGCTotalorAverage() const; + + boost::optional assemblySHGCNorthTotalorAverage() const; + + boost::optional assemblySHGCNonNorthTotalorAverage() const; + + boost::optional assemblySHGCShadedState() const; + + boost::optional assemblyVisibleTransmittanceByWindow() const; + + boost::optional assemblyVisibleTransmittanceTotalorAverage() const; + + boost::optional assemblyVisibleTransmittanceNorthTotalorAverage() const; + + boost::optional assemblyVisibleTransmittanceNonNorthTotalorAverage() const; + + boost::optional assemblyVisibleTransmittanceShadedState() const; + /// Returns the total energy cost over the analysis period in dollars according to the discounting convention. /// Requires EnergyPlus simulation output and LifeCycleCost_Parameters input object to calculate. boost::optional economicsEnergyCost() const; From fe559bc1409feb8adcd4cfd5db7965b7bb0e1630 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Thu, 10 Mar 2022 09:59:14 -0700 Subject: [PATCH 02/13] Stub sql test for fenestration assembly. --- src/utilities/sql/Test/SqlFile_GTest.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/utilities/sql/Test/SqlFile_GTest.cpp b/src/utilities/sql/Test/SqlFile_GTest.cpp index 001aab3c706..93e01956890 100644 --- a/src/utilities/sql/Test/SqlFile_GTest.cpp +++ b/src/utilities/sql/Test/SqlFile_GTest.cpp @@ -805,3 +805,16 @@ TEST_F(SqlFileFixture, 4298_YearField) { ASSERT_TRUE(reportingFreqs); EXPECT_EQ(0, reportingFreqs->size()); } + +TEST_F(SqlFileFixture, 4403_FenestrationAssembly) { + // Test for #4403 - Add Sql helper methods to retrieve U-factors, SHGC, or VT for glazing systems + + // This one has fenestration that includes frames + // TODO: must include WindowProperty:FrameAndDivider so that NFRC Product Type is defined + openstudio::path path = resourcesPath() / toPath("energyplus/TODO/eplusout.sql"); + sqlFile = openstudio::SqlFile(path); + ASSERT_TRUE(sqlFile.connectionOpen()); + + boost::optional d = sqlFile->assemblyUFactorByWindow("Win-1"); + ASSERT_TRUE(d); +} \ No newline at end of file From a49e8155eef9d27cea3e8a2f910e59a0654375cd Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Thu, 10 Mar 2022 09:59:28 -0700 Subject: [PATCH 03/13] Clang format. --- src/utilities/sql/SqlFile_Impl.cpp | 10 +++++----- src/utilities/sql/SqlFile_Impl.hpp | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index e99b54e48ef..81a55eee600 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -910,16 +910,16 @@ namespace detail { /// fenestration assembly boost::optional SqlFile_Impl::assemblyUFactorByWindow(const std::string& windowName) const { std::string rowName = boost::to_upper_copy(windowName); - + const std::string& s = R"(SELECT Value FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='Exterior Fenestration' AND RowName=? AND ColumnName='Assembly U-Factor')"; - + boost::optional d = execAndReturnFirstDouble(s, rowName); - + if (!d) { const s = R"(SELECT Value FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' @@ -927,10 +927,10 @@ namespace detail { AND TableName='Interior Fenestration' AND RowName=? AND ColumnName='Assembly U-Factor')"; - + d = execAndReturnFirstDouble(s, rowName); } - + return d; } diff --git a/src/utilities/sql/SqlFile_Impl.hpp b/src/utilities/sql/SqlFile_Impl.hpp index 45ca687fd4f..bafc6d12d0a 100644 --- a/src/utilities/sql/SqlFile_Impl.hpp +++ b/src/utilities/sql/SqlFile_Impl.hpp @@ -148,33 +148,33 @@ namespace detail { /// TODO boost::optional assemblyUFactorByWindow(const std::string& windowName) const; - + boost::optional assemblyUFactorTotalorAverage() const; - + boost::optional assemblyUFactorNorthTotalorAverage() const; - + boost::optional assemblyUFactorNonNorthTotalorAverage() const; - + boost::optional assemblyUFactorShadedState() const; boost::optional assemblySHGCByWindow() const; - + boost::optional assemblySHGCTotalorAverage() const; - + boost::optional assemblySHGCNorthTotalorAverage() const; - + boost::optional assemblySHGCNonNorthTotalorAverage() const; - + boost::optional assemblySHGCShadedState() const; boost::optional assemblyVisibleTransmittanceByWindow() const; - + boost::optional assemblyVisibleTransmittanceTotalorAverage() const; - + boost::optional assemblyVisibleTransmittanceNorthTotalorAverage() const; - + boost::optional assemblyVisibleTransmittanceNonNorthTotalorAverage() const; - + boost::optional assemblyVisibleTransmittanceShadedState() const; /// Returns the total energy cost over the analysis period in dollars according to the discounting convention. From 7d98fd9690f888d057a06f34067720b8fcba2987 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Fri, 11 Mar 2022 09:31:33 -0700 Subject: [PATCH 04/13] Stub methods on subsurface class. --- src/model/ModelObject.cpp | 44 ++++++++++++++++++++++++ src/model/ModelObject.hpp | 4 +++ src/model/ModelObject_Impl.hpp | 4 +++ src/model/SubSurface.cpp | 12 +++++++ src/model/SubSurface.hpp | 6 ++++ src/model/SubSurface_Impl.hpp | 8 +++++ src/utilities/sql/SqlFile_Impl.cpp | 26 +------------- src/utilities/sql/SqlFile_Impl.hpp | 16 ++------- src/utilities/sql/Test/SqlFile_GTest.cpp | 4 +-- 9 files changed, 83 insertions(+), 41 deletions(-) diff --git a/src/model/ModelObject.cpp b/src/model/ModelObject.cpp index b1bd6fb0cac..ec5433e1b70 100644 --- a/src/model/ModelObject.cpp +++ b/src/model/ModelObject.cpp @@ -376,6 +376,50 @@ namespace model { return result; } + /** Gets the fenestration value from the sql file **/ + boost::optional ModelObject_Impl::getFenestrationValue(std::string valueName) const { + boost::optional result; + + // Get the object name + if (!name()) { + LOG(Warn, "This object does not have a name, cannot retrieve the fenestration value '" + valueName + "'."); + return result; + } + + // Get the object name and transform to the way it is recorded + // in the sql file + std::string rowName = name().get(); + boost::to_upper(rowName); + + // Check that the model has a sql file + if (!model().sqlFile()) { + LOG(Warn, "This model has no sql file, cannot retrieve the autosized value '" + valueName + "'."); + return result; + } + + const std::string& s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Exterior Fenestration' + AND RowName=? + AND ColumnName=?)"; + + boost::optional d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, valueName); + + if (!d) { + const s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Interior Fenestration' + AND RowName=? + AND ColumnName=?)"; + + d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, valueName); + } + + return d; + } + //void ModelObject_Impl::connect(unsigned outletPort, ModelObject target, unsigned inletPort) //{ // OptionalConnection connection = getOutletConnection(outletPort); diff --git a/src/model/ModelObject.hpp b/src/model/ModelObject.hpp index d2ceacace78..11aa46e38ec 100644 --- a/src/model/ModelObject.hpp +++ b/src/model/ModelObject.hpp @@ -257,6 +257,10 @@ namespace model { /** Gets the autosized component value from the sql file **/ boost::optional getAutosizedValue(std::string valueName, std::string unitString) const; + /** Gets the fenestration value from the sql file **/ + boost::optional getFenestrationValue(std::string valueName) const; + + /** Return the names of the available ems actuators. */ virtual std::vector emsActuatorNames() const; diff --git a/src/model/ModelObject_Impl.hpp b/src/model/ModelObject_Impl.hpp index 9080e2caff2..f9dd68af5bf 100644 --- a/src/model/ModelObject_Impl.hpp +++ b/src/model/ModelObject_Impl.hpp @@ -202,6 +202,10 @@ namespace model { /** Gets the autosized component value from the sql file **/ boost::optional getAutosizedValue(std::string valueName, std::string unitString) const; + /** Gets the fenestration value from the sql file **/ + boost::optional getFenestrationValue(std::string valueName) const; + + protected: ModelObject_Impl(const IdfObject& idfObject, Model_Impl* model, bool keepHandle); diff --git a/src/model/SubSurface.cpp b/src/model/SubSurface.cpp index d790b9e37ea..20aba40bd46 100644 --- a/src/model/SubSurface.cpp +++ b/src/model/SubSurface.cpp @@ -602,6 +602,18 @@ namespace model { return result; } + boost::optional SubSurface_Impl::assemblyUFactor(() const { + return getFenestrationValue("Assembly U-Factor"); + } + + boost::optional SubSurface_Impl::assemblySHGC() const { + return getFenestrationValue("Assembly SHGC"); + } + + boost::optional SubSurface_Impl::assemblyVisibleTransmittance() const { + return getFenestrationValue("Assembly Visible Transmittance"); + } + bool SubSurface_Impl::setSubSurfaceType(const std::string& subSurfaceType) { bool result = setString(OS_SubSurfaceFields::SubSurfaceType, subSurfaceType); if (result) { diff --git a/src/model/SubSurface.hpp b/src/model/SubSurface.hpp index 4985c49d369..8b58c0f7f72 100644 --- a/src/model/SubSurface.hpp +++ b/src/model/SubSurface.hpp @@ -118,6 +118,12 @@ namespace model { bool isNumberofVerticesAutocalculated() const; + boost::optional assemblyUFactor(() const; + + boost::optional assemblySHGC() const; + + boost::optional assemblyVisibleTransmittance() const; + //@} /** @name Setters */ //@{ diff --git a/src/model/SubSurface_Impl.hpp b/src/model/SubSurface_Impl.hpp index d6d4c37f9cc..b9e5e88325b 100644 --- a/src/model/SubSurface_Impl.hpp +++ b/src/model/SubSurface_Impl.hpp @@ -166,6 +166,14 @@ namespace model { bool isNumberofVerticesAutocalculated() const; + // Assembly methods + + boost::optional assemblyUFactor(() const; + + boost::optional assemblySHGC() const; + + boost::optional assemblyVisibleTransmittance() const; + //@} /** @name Setters */ //@{ diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index 81a55eee600..7ff38a00ca3 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -908,31 +908,7 @@ namespace detail { } /// fenestration assembly - boost::optional SqlFile_Impl::assemblyUFactorByWindow(const std::string& windowName) const { - std::string rowName = boost::to_upper_copy(windowName); - - const std::string& s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Exterior Fenestration' - AND RowName=? - AND ColumnName='Assembly U-Factor')"; - - boost::optional d = execAndReturnFirstDouble(s, rowName); - - if (!d) { - const s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Interior Fenestration' - AND RowName=? - AND ColumnName='Assembly U-Factor')"; - - d = execAndReturnFirstDouble(s, rowName); - } - - return d; - } + // TODO /// hours simulated boost::optional SqlFile_Impl::hoursSimulated() const { diff --git a/src/utilities/sql/SqlFile_Impl.hpp b/src/utilities/sql/SqlFile_Impl.hpp index bafc6d12d0a..3cc111de7b3 100644 --- a/src/utilities/sql/SqlFile_Impl.hpp +++ b/src/utilities/sql/SqlFile_Impl.hpp @@ -147,35 +147,23 @@ namespace detail { const openstudio::MonthOfYear& t_monthOfYear) const; /// TODO - boost::optional assemblyUFactorByWindow(const std::string& windowName) const; - - boost::optional assemblyUFactorTotalorAverage() const; + /* boost::optional assemblyUFactorTotalorAverage() const; boost::optional assemblyUFactorNorthTotalorAverage() const; boost::optional assemblyUFactorNonNorthTotalorAverage() const; - boost::optional assemblyUFactorShadedState() const; - - boost::optional assemblySHGCByWindow() const; - boost::optional assemblySHGCTotalorAverage() const; boost::optional assemblySHGCNorthTotalorAverage() const; boost::optional assemblySHGCNonNorthTotalorAverage() const; - boost::optional assemblySHGCShadedState() const; - - boost::optional assemblyVisibleTransmittanceByWindow() const; - boost::optional assemblyVisibleTransmittanceTotalorAverage() const; boost::optional assemblyVisibleTransmittanceNorthTotalorAverage() const; - boost::optional assemblyVisibleTransmittanceNonNorthTotalorAverage() const; - - boost::optional assemblyVisibleTransmittanceShadedState() const; + boost::optional assemblyVisibleTransmittanceNonNorthTotalorAverage() const; */ /// Returns the total energy cost over the analysis period in dollars according to the discounting convention. /// Requires EnergyPlus simulation output and LifeCycleCost_Parameters input object to calculate. diff --git a/src/utilities/sql/Test/SqlFile_GTest.cpp b/src/utilities/sql/Test/SqlFile_GTest.cpp index 93e01956890..0f07f9d7725 100644 --- a/src/utilities/sql/Test/SqlFile_GTest.cpp +++ b/src/utilities/sql/Test/SqlFile_GTest.cpp @@ -806,7 +806,7 @@ TEST_F(SqlFileFixture, 4298_YearField) { EXPECT_EQ(0, reportingFreqs->size()); } -TEST_F(SqlFileFixture, 4403_FenestrationAssembly) { +/* TEST_F(SqlFileFixture, 4403_FenestrationAssembly) { // Test for #4403 - Add Sql helper methods to retrieve U-factors, SHGC, or VT for glazing systems // This one has fenestration that includes frames @@ -817,4 +817,4 @@ TEST_F(SqlFileFixture, 4403_FenestrationAssembly) { boost::optional d = sqlFile->assemblyUFactorByWindow("Win-1"); ASSERT_TRUE(d); -} \ No newline at end of file +} */ \ No newline at end of file From 23945d650028784156d8dc1cfc007b3bbf818c78 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Fri, 11 Mar 2022 11:01:27 -0700 Subject: [PATCH 05/13] Add new resources test idf with frame and divider. --- resources/CMakeLists.txt | 2 + resources/energyplus/FrameAndDivider/in.idf | 1598 +++++++++++++++++++ src/model/ModelObject.cpp | 2 +- src/model/ModelObject.hpp | 1 - src/model/ModelObject_Impl.hpp | 1 - src/model/SubSurface.cpp | 6 +- src/model/SubSurface.hpp | 6 +- src/model/SubSurface_Impl.hpp | 8 +- src/utilities/sql/SqlFile_Impl.cpp | 3 - src/utilities/sql/SqlFile_Impl.hpp | 19 - src/utilities/sql/Test/SqlFile_GTest.cpp | 9 +- 11 files changed, 1614 insertions(+), 41 deletions(-) create mode 100644 resources/energyplus/FrameAndDivider/in.idf diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index f3d69ed8a2d..7bab109905f 100644 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -245,6 +245,7 @@ set(energyplus_resources_src energyplus/ZoneBoundaryCondition/Bug_486_zone_bdr_test.idf energyplus/SmallOffice/SmallOffice.idf energyplus/AllFuelTypes/in.idf + energyplus/FrameAndDivider/in.idf ) # update the resources @@ -256,6 +257,7 @@ RUN_ENERGYPLUS("in.idf" "energyplus/Daylighting_Office" "USA_CO_Golden-NREL.7246 RUN_ENERGYPLUS("in.idf" "energyplus/Daylighting_School" "USA_CO_Golden-NREL.724666_TMY3.epw") RUN_ENERGYPLUS("in.idf" "energyplus/Office_With_Many_HVAC_Types" "USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw") RUN_ENERGYPLUS("in.idf" "energyplus/AllFuelTypes" "USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw") +RUN_ENERGYPLUS("in.idf" "energyplus/FrameAndDivider" "USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw") # add target add_custom_target(openstudio_energyplus_resources diff --git a/resources/energyplus/FrameAndDivider/in.idf b/resources/energyplus/FrameAndDivider/in.idf new file mode 100644 index 00000000000..c1e7b8eda2a --- /dev/null +++ b/resources/energyplus/FrameAndDivider/in.idf @@ -0,0 +1,1598 @@ + +Version, + 22.1; !- Version Identifier + +Timestep, + 4; !- Number of Timesteps per Hour + +LifeCycleCost:Parameters, + Life Cycle Cost Parameters, !- Name + EndOfYear, !- Discounting Convention + ConstantDollar, !- Inflation Approach + 0.03, !- Real Discount Rate + , !- Nominal Discount Rate + , !- Inflation + , !- Base Date Month + 2011, !- Base Date Year + , !- Service Date Month + 2011, !- Service Date Year + 25, !- Length of Study Period in Years + , !- Tax rate + None; !- Depreciation Method + +LifeCycleCost:UsePriceEscalation, + U.S. Avg Commercial-Electricity, !- Name + Electricity, !- Resource + 2011, !- Escalation Start Year + January, !- Escalation Start Month + 0.9838, !- Year Escalation 1 + 0.9730, !- Year Escalation 2 + 0.9632, !- Year Escalation 3 + 0.9611, !- Year Escalation 4 + 0.9571, !- Year Escalation 5 + 0.9553, !- Year Escalation 6 + 0.9539, !- Year Escalation 7 + 0.9521, !- Year Escalation 8 + 0.9546, !- Year Escalation 9 + 0.9550, !- Year Escalation 10 + 0.9553, !- Year Escalation 11 + 0.9564, !- Year Escalation 12 + 0.9575, !- Year Escalation 13 + 0.9596, !- Year Escalation 14 + 0.9618, !- Year Escalation 15 + 0.9614, !- Year Escalation 16 + 0.9618, !- Year Escalation 17 + 0.9618, !- Year Escalation 18 + 0.9593, !- Year Escalation 19 + 0.9589, !- Year Escalation 20 + 0.9607, !- Year Escalation 21 + 0.9625, !- Year Escalation 22 + 0.9650, !- Year Escalation 23 + 0.9708, !- Year Escalation 24 + 0.9751, !- Year Escalation 25 + 0.9762, !- Year Escalation 26 + 0.9766, !- Year Escalation 27 + 0.9766, !- Year Escalation 28 + 0.9769, !- Year Escalation 29 + 0.9773; !- Year Escalation 30 + +LifeCycleCost:UsePriceEscalation, + U.S. Avg Commercial-Distillate Oil, !- Name + FuelOilNo1, !- Resource + 2011, !- Escalation Start Year + January, !- Escalation Start Month + 0.9714, !- Year Escalation 1 + 0.9730, !- Year Escalation 2 + 0.9942, !- Year Escalation 3 + 1.0164, !- Year Escalation 4 + 1.0541, !- Year Escalation 5 + 1.0928, !- Year Escalation 6 + 1.1267, !- Year Escalation 7 + 1.1580, !- Year Escalation 8 + 1.1792, !- Year Escalation 9 + 1.1967, !- Year Escalation 10 + 1.2200, !- Year Escalation 11 + 1.2333, !- Year Escalation 12 + 1.2566, !- Year Escalation 13 + 1.2709, !- Year Escalation 14 + 1.2826, !- Year Escalation 15 + 1.2985, !- Year Escalation 16 + 1.3102, !- Year Escalation 17 + 1.3250, !- Year Escalation 18 + 1.3261, !- Year Escalation 19 + 1.3282, !- Year Escalation 20 + 1.3324, !- Year Escalation 21 + 1.3356, !- Year Escalation 22 + 1.3431, !- Year Escalation 23 + 1.3510, !- Year Escalation 24 + 1.3568, !- Year Escalation 25 + 1.3606, !- Year Escalation 26 + 1.3637, !- Year Escalation 27 + 1.3674, !- Year Escalation 28 + 1.3706, !- Year Escalation 29 + 1.3743; !- Year Escalation 30 + +LifeCycleCost:UsePriceEscalation, + U.S. Avg Commercial-Residual Oil, !- Name + FuelOilNo2, !- Resource + 2011, !- Escalation Start Year + January, !- Escalation Start Month + 0.8469, !- Year Escalation 1 + 0.8257, !- Year Escalation 2 + 0.8681, !- Year Escalation 3 + 0.8988, !- Year Escalation 4 + 0.9289, !- Year Escalation 5 + 0.9604, !- Year Escalation 6 + 0.9897, !- Year Escalation 7 + 1.0075, !- Year Escalation 8 + 1.0314, !- Year Escalation 9 + 1.0554, !- Year Escalation 10 + 1.0861, !- Year Escalation 11 + 1.1278, !- Year Escalation 12 + 1.1497, !- Year Escalation 13 + 1.1620, !- Year Escalation 14 + 1.1743, !- Year Escalation 15 + 1.1852, !- Year Escalation 16 + 1.1948, !- Year Escalation 17 + 1.2037, !- Year Escalation 18 + 1.2071, !- Year Escalation 19 + 1.2119, !- Year Escalation 20 + 1.2139, !- Year Escalation 21 + 1.2194, !- Year Escalation 22 + 1.2276, !- Year Escalation 23 + 1.2365, !- Year Escalation 24 + 1.2420, !- Year Escalation 25 + 1.2461, !- Year Escalation 26 + 1.2509, !- Year Escalation 27 + 1.2550, !- Year Escalation 28 + 1.2591, !- Year Escalation 29 + 1.2638; !- Year Escalation 30 + +LifeCycleCost:UsePriceEscalation, + U.S. Avg Commercial-Natural gas, !- Name + NaturalGas, !- Resource + 2011, !- Escalation Start Year + January, !- Escalation Start Month + 0.9823, !- Year Escalation 1 + 0.9557, !- Year Escalation 2 + 0.9279, !- Year Escalation 3 + 0.9257, !- Year Escalation 4 + 0.9346, !- Year Escalation 5 + 0.9412, !- Year Escalation 6 + 0.9512, !- Year Escalation 7 + 0.9645, !- Year Escalation 8 + 0.9856, !- Year Escalation 9 + 1.0067, !- Year Escalation 10 + 1.0222, !- Year Escalation 11 + 1.0410, !- Year Escalation 12 + 1.0610, !- Year Escalation 13 + 1.0787, !- Year Escalation 14 + 1.0942, !- Year Escalation 15 + 1.1098, !- Year Escalation 16 + 1.1220, !- Year Escalation 17 + 1.1308, !- Year Escalation 18 + 1.1386, !- Year Escalation 19 + 1.1486, !- Year Escalation 20 + 1.1619, !- Year Escalation 21 + 1.1763, !- Year Escalation 22 + 1.1918, !- Year Escalation 23 + 1.2118, !- Year Escalation 24 + 1.2284, !- Year Escalation 25 + 1.2439, !- Year Escalation 26 + 1.2605, !- Year Escalation 27 + 1.2772, !- Year Escalation 28 + 1.2938, !- Year Escalation 29 + 1.3115; !- Year Escalation 30 + +LifeCycleCost:UsePriceEscalation, + U.S. Avg Commercial-Coal, !- Name + Coal, !- Resource + 2011, !- Escalation Start Year + January, !- Escalation Start Month + 0.9970, !- Year Escalation 1 + 1.0089, !- Year Escalation 2 + 1.0089, !- Year Escalation 3 + 0.9941, !- Year Escalation 4 + 0.9941, !- Year Escalation 5 + 1.0000, !- Year Escalation 6 + 1.0030, !- Year Escalation 7 + 1.0059, !- Year Escalation 8 + 1.0089, !- Year Escalation 9 + 1.0119, !- Year Escalation 10 + 1.0148, !- Year Escalation 11 + 1.0178, !- Year Escalation 12 + 1.0208, !- Year Escalation 13 + 1.0267, !- Year Escalation 14 + 1.0297, !- Year Escalation 15 + 1.0356, !- Year Escalation 16 + 1.0415, !- Year Escalation 17 + 1.0534, !- Year Escalation 18 + 1.0564, !- Year Escalation 19 + 1.0593, !- Year Escalation 20 + 1.0653, !- Year Escalation 21 + 1.0712, !- Year Escalation 22 + 1.0742, !- Year Escalation 23 + 1.0801, !- Year Escalation 24 + 1.0831, !- Year Escalation 25 + 1.0831, !- Year Escalation 26 + 1.0861, !- Year Escalation 27 + 1.0890, !- Year Escalation 28 + 1.0920, !- Year Escalation 29 + 1.0950; !- Year Escalation 30 + +Building, + Building 1, !- Name + , !- North Axis {deg} + , !- Terrain + , !- Loads Convergence Tolerance Value {W} + , !- Temperature Convergence Tolerance Value {deltaC} + , !- Solar Distribution + , !- Maximum Number of Warmup Days + ; !- Minimum Number of Warmup Days + +Zone, + Story 1 Core Thermal Zone, !- Name + -0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + , !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + , !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + +BuildingSurface:Detailed, + Story 1 Core Space Exterior Ground Floor, !- Name + Floor, !- Surface Type + 000_ExtSlabCarpet_4in_ClimateZone 1-8, !- Construction Name + Story 1 Core Thermal Zone, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + 0, 0, 0, !- X,Y,Z Vertex 1 {m} + 0, 50, 0, !- X,Y,Z Vertex 2 {m} + 100, 50, 0, !- X,Y,Z Vertex 3 {m} + 100, 0, 0; !- X,Y,Z Vertex 4 {m} + +BuildingSurface:Detailed, + Story 1 Core Space Exterior Roof, !- Name + Ceiling, !- Surface Type + Adiabatic Construction, !- Construction Name + Story 1 Core Thermal Zone, !- Zone Name + , !- Space Name + Adiabatic, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + 100, 0, 4, !- X,Y,Z Vertex 1 {m} + 100, 50, 4, !- X,Y,Z Vertex 2 {m} + 0, 50, 4, !- X,Y,Z Vertex 3 {m} + 0, 0, 4; !- X,Y,Z Vertex 4 {m} + +BuildingSurface:Detailed, + Story 1 Core Space Exterior Wall, !- Name + Wall, !- Surface Type + ASHRAE_189.1-2009_ExtWall_SteelFrame_ClimateZone 4-8, !- Construction Name + Story 1 Core Thermal Zone, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + 100, 0, 4, !- X,Y,Z Vertex 1 {m} + 100, 0, 0, !- X,Y,Z Vertex 2 {m} + 100, 50, 0, !- X,Y,Z Vertex 3 {m} + 100, 50, 4; !- X,Y,Z Vertex 4 {m} + +FenestrationSurface:Detailed, + Story 1 Core Space Exterior Wall Window, !- Name + Window, !- Surface Type + ASHRAE_189.1-2009_ExtWindow_ClimateZone 4-5, !- Construction Name + Story 1 Core Space Exterior Wall, !- Building Surface Name + , !- Outside Boundary Condition Object + , !- View Factor to Ground + Window Property Frame And Divider 1, !- Frame and Divider Name + , !- Multiplier + , !- Number of Vertices + 100, 0.0254, 2.60162725328934, !- X,Y,Z Vertex 1 {m} + 100, 0.0254, 1, !- X,Y,Z Vertex 2 {m} + 100, 49.9746, 1, !- X,Y,Z Vertex 3 {m} + 100, 49.9746, 2.60162725328934; !- X,Y,Z Vertex 4 {m} + +BuildingSurface:Detailed, + Story 1 Core Space Exterior Wall 1, !- Name + Wall, !- Surface Type + ASHRAE_189.1-2009_ExtWall_SteelFrame_ClimateZone 4-8, !- Construction Name + Story 1 Core Thermal Zone, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + 100, 50, 4, !- X,Y,Z Vertex 1 {m} + 100, 50, 0, !- X,Y,Z Vertex 2 {m} + 0, 50, 0, !- X,Y,Z Vertex 3 {m} + 0, 50, 4; !- X,Y,Z Vertex 4 {m} + +FenestrationSurface:Detailed, + Story 1 Core Space Exterior Wall 1 Window, !- Name + Window, !- Surface Type + ASHRAE_189.1-2009_ExtWindow_ClimateZone 4-5, !- Construction Name + Story 1 Core Space Exterior Wall 1, !- Building Surface Name + , !- Outside Boundary Condition Object + , !- View Factor to Ground + Window Property Frame And Divider 1, !- Frame and Divider Name + , !- Multiplier + , !- Number of Vertices + 99.9746, 50, 2.60081321311226, !- X,Y,Z Vertex 1 {m} + 99.9746, 50, 1, !- X,Y,Z Vertex 2 {m} + 0.0253999999999905, 50, 1, !- X,Y,Z Vertex 3 {m} + 0.0253999999999905, 50, 2.60081321311226; !- X,Y,Z Vertex 4 {m} + +BuildingSurface:Detailed, + Story 1 Core Space Exterior Wall 2, !- Name + Wall, !- Surface Type + ASHRAE_189.1-2009_ExtWall_SteelFrame_ClimateZone 4-8, !- Construction Name + Story 1 Core Thermal Zone, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + 0, 50, 4, !- X,Y,Z Vertex 1 {m} + 0, 50, 0, !- X,Y,Z Vertex 2 {m} + 0, 0, 0, !- X,Y,Z Vertex 3 {m} + 0, 0, 4; !- X,Y,Z Vertex 4 {m} + +FenestrationSurface:Detailed, + Story 1 Core Space Exterior Wall 2 Window, !- Name + Window, !- Surface Type + ASHRAE_189.1-2009_ExtWindow_ClimateZone 4-5, !- Construction Name + Story 1 Core Space Exterior Wall 2, !- Building Surface Name + , !- Outside Boundary Condition Object + , !- View Factor to Ground + Window Property Frame And Divider 1, !- Frame and Divider Name + , !- Multiplier + , !- Number of Vertices + 0, 49.9746, 2.60162725328934, !- X,Y,Z Vertex 1 {m} + 0, 49.9746, 1, !- X,Y,Z Vertex 2 {m} + 0, 0.0254000000000048, 1, !- X,Y,Z Vertex 3 {m} + 0, 0.0254000000000048, 2.60162725328934; !- X,Y,Z Vertex 4 {m} + +BuildingSurface:Detailed, + Story 1 Core Space Exterior Wall 3, !- Name + Wall, !- Surface Type + ASHRAE_189.1-2009_ExtWall_SteelFrame_ClimateZone 4-8, !- Construction Name + Story 1 Core Thermal Zone, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + 0, 0, 4, !- X,Y,Z Vertex 1 {m} + 0, 0, 0, !- X,Y,Z Vertex 2 {m} + 100, 0, 0, !- X,Y,Z Vertex 3 {m} + 100, 0, 4; !- X,Y,Z Vertex 4 {m} + +FenestrationSurface:Detailed, + Story 1 Core Space Exterior Wall 3 Window, !- Name + Window, !- Surface Type + ASHRAE_189.1-2009_ExtWindow_ClimateZone 4-5, !- Construction Name + Story 1 Core Space Exterior Wall 3, !- Building Surface Name + , !- Outside Boundary Condition Object + , !- View Factor to Ground + Window Property Frame And Divider 1, !- Frame and Divider Name + , !- Multiplier + , !- Number of Vertices + 0.0254, 0, 2.60081321311226, !- X,Y,Z Vertex 1 {m} + 0.0254, 0, 1, !- X,Y,Z Vertex 2 {m} + 99.9746, 0, 1, !- X,Y,Z Vertex 3 {m} + 99.9746, 0, 2.60081321311226; !- X,Y,Z Vertex 4 {m} + +ZoneControl:Thermostat, + Story 1 Core Thermal Zone Thermostat, !- Name + Story 1 Core Thermal Zone, !- Zone or ZoneList Name + Story 1 Core Thermal Zone Thermostat Schedule, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Thermostat Setpoint Dual Setpoint 1, !- Control 1 Name + , !- Control 2 Object Type + , !- Control 2 Name + , !- Control 3 Object Type + , !- Control 3 Name + , !- Control 4 Object Type + , !- Control 4 Name + 0; !- Temperature Difference Between Cutout And Setpoint {deltaC} + +Schedule:Compact, + Story 1 Core Thermal Zone Thermostat Schedule, !- Name + Story 1 Core Thermal Zone Thermostat Schedule Type Limits, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00, !- Field 3 + 4; !- Field 4 + +ScheduleTypeLimits, + Story 1 Core Thermal Zone Thermostat Schedule Type Limits, !- Name + 0, !- Lower Limit Value {BasedOnField A3} + 4, !- Upper Limit Value {BasedOnField A3} + DISCRETE; !- Numeric Type + +ThermostatSetpoint:DualSetpoint, + Thermostat Setpoint Dual Setpoint 1, !- Name + Heating Sch, !- Heating Setpoint Temperature Schedule Name + Cooling Sch; !- Cooling Setpoint Temperature Schedule Name + +ScheduleTypeLimits, + Temperature, !- Name + , !- Lower Limit Value {BasedOnField A3} + , !- Upper Limit Value {BasedOnField A3} + Continuous, !- Numeric Type + temperature; !- Unit Type + +Schedule:Day:Interval, + Heating Sch Default, !- Name + Temperature, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 19; !- Value Until Time 1 + +Schedule:Week:Daily, + Heating Sch Week Rule - Jan1-Dec31, !- Name + Heating Sch Default, !- Sunday Schedule:Day Name + Heating Sch Default, !- Monday Schedule:Day Name + Heating Sch Default, !- Tuesday Schedule:Day Name + Heating Sch Default, !- Wednesday Schedule:Day Name + Heating Sch Default, !- Thursday Schedule:Day Name + Heating Sch Default, !- Friday Schedule:Day Name + Heating Sch Default, !- Saturday Schedule:Day Name + Heating Sch Default, !- Holiday Schedule:Day Name + Heating Sch Default, !- SummerDesignDay Schedule:Day Name + Heating Sch Default, !- WinterDesignDay Schedule:Day Name + Heating Sch Default, !- CustomDay1 Schedule:Day Name + Heating Sch Default; !- CustomDay2 Schedule:Day Name + +Schedule:Year, + Heating Sch, !- Name + Temperature, !- Schedule Type Limits Name + Heating Sch Week Rule - Jan1-Dec31, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + +Schedule:Day:Interval, + Cooling Sch Default, !- Name + Temperature, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 26; !- Value Until Time 1 + +Schedule:Week:Daily, + Cooling Sch Week Rule - Jan1-Dec31, !- Name + Cooling Sch Default, !- Sunday Schedule:Day Name + Cooling Sch Default, !- Monday Schedule:Day Name + Cooling Sch Default, !- Tuesday Schedule:Day Name + Cooling Sch Default, !- Wednesday Schedule:Day Name + Cooling Sch Default, !- Thursday Schedule:Day Name + Cooling Sch Default, !- Friday Schedule:Day Name + Cooling Sch Default, !- Saturday Schedule:Day Name + Cooling Sch Default, !- Holiday Schedule:Day Name + Cooling Sch Default, !- SummerDesignDay Schedule:Day Name + Cooling Sch Default, !- WinterDesignDay Schedule:Day Name + Cooling Sch Default, !- CustomDay1 Schedule:Day Name + Cooling Sch Default; !- CustomDay2 Schedule:Day Name + +Schedule:Year, + Cooling Sch, !- Name + Temperature, !- Schedule Type Limits Name + Cooling Sch Week Rule - Jan1-Dec31, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 +! +! HVACTemplate:Zone:IdealLoadsAirSystem, +! Story 1 Core Thermal Zone, !- Zone Name +! , !- Template Thermostat Name +! , !- System Availability Schedule Name +! , !- Maximum Heating Supply Air Temperature {C} +! , !- Minimum Cooling Supply Air Temperature {C} +! , !- Maximum Heating Supply Air Humidity Ratio {kgWater/kgDryAir} +! , !- Minimum Cooling Supply Air Humidity Ratio {kgWater/kgDryAir} +! , !- Heating Limit +! , !- Maximum Heating Air Flow Rate {m3/s} +! , !- Maximum Sensible Heating Capacity {W} +! , !- Cooling Limit +! , !- Maximum Cooling Air Flow Rate {m3/s} +! , !- Maximum Total Cooling Capacity {W} +! , !- Heating Availability Schedule Name +! , !- Cooling Availability Schedule Name +! , !- Dehumidification Control Type +! , !- Cooling Sensible Heat Ratio {dimensionless} +! , !- Dehumidification Setpoint {percent} +! , !- Humidification Control Type +! , !- Humidification Setpoint {percent} +! , !- Outdoor Air Method +! , !- Outdoor Air Flow Rate per Person {m3/s} +! , !- Outdoor Air Flow Rate per Zone Floor Area {m3/s-m2} +! , !- Outdoor Air Flow Rate per Zone {m3/s} +! , !- Design Specification Outdoor Air Object Name +! ; !- Demand Controlled Ventilation Type + +Sizing:Zone, + Story 1 Core Thermal Zone, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14, !- Zone Cooling Design Supply Air Temperature {C} + 11.11, !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 40, !- Zone Heating Design Supply Air Temperature {C} + 11.11, !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + Baseline Model OA, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + 0.000762, !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + 0, !- Cooling Minimum Air Flow {m3/s} + 0, !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + 0.002032, !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + 0.1415762, !- Heating Maximum Air Flow {m3/s} + 0.3, !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No; !- Account for Dedicated Outdoor Air System + +DesignSpecification:OutdoorAir, + Baseline Model OA, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + 0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0, !- Outdoor Air Flow per Zone {m3/s} + 0; !- Outdoor Air Flow Air Changes per Hour {1/hr} + +ZoneVentilation:DesignFlowRate, + Story 1 Core Thermal Zone Ventilation per Person, !- Name + Story 1 Core Thermal Zone, !- Zone or ZoneList Name + Baseline Model People Lights and Equipment Schedule, !- Schedule Name + Flow/Person, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow Rate per Zone Floor Area {m3/s-m2} + 0.009438948864, !- Flow Rate per Person {m3/s-person} + , !- Air Changes per Hour {1/hr} + , !- Ventilation Type + , !- Fan Pressure Rise {Pa} + , !- Fan Total Efficiency + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +SimulationControl, + Yes, !- Do Zone Sizing Calculation + No, !- Do System Sizing Calculation + No, !- Do Plant Sizing Calculation + No, !- Run Simulation for Sizing Periods + Yes, !- Run Simulation for Weather File Run Periods + , !- Do HVAC Sizing Simulation for Sizing Periods + ; !- Maximum Number of HVAC Sizing Simulation Passes + +Sizing:Parameters, + 1.25, !- Heating Sizing Factor + 1.15; !- Cooling Sizing Factor + +RunPeriod, + Run Period 1, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + 2009, !- Begin Year + 12, !- End Month + 31, !- End Day of Month + 2009, !- End Year + Thursday, !- Day of Week for Start Day + No, !- Use Weather File Holidays and Special Days + No, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + +Output:Table:SummaryReports, + AllSummary; !- Report Name 1 + +GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + Counterclockwise, !- Vertex Entry Direction + Relative, !- Coordinate System + Relative, !- Daylighting Reference Point Coordinate System + Relative; !- Rectangular Surface Coordinate System + +Material, + 000_F08 Metal surface, !- Name + Smooth, !- Roughness + 0.0008, !- Thickness {m} + 45.28, !- Conductivity {W/m-K} + 7824, !- Density {kg/m3} + 500, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + 000_F16 Acoustic tile, !- Name + MediumSmooth, !- Roughness + 0.0191, !- Thickness {m} + 0.06, !- Conductivity {W/m-K} + 368, !- Density {kg/m3} + 590, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + 000_G01a 19mm gypsum board, !- Name + MediumSmooth, !- Roughness + 0.019, !- Thickness {m} + 0.16, !- Conductivity {W/m-K} + 800, !- Density {kg/m3} + 1090, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + 000_G05 25mm wood, !- Name + MediumSmooth, !- Roughness + 0.0254, !- Thickness {m} + 0.15, !- Conductivity {W/m-K} + 608, !- Density {kg/m3} + 1630, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + 000_I01 25mm insulation board, !- Name + MediumRough, !- Roughness + 0.0254, !- Thickness {m} + 0.03, !- Conductivity {W/m-K} + 43, !- Density {kg/m3} + 1210, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + 000_M11 100mm lightweight concrete, !- Name + MediumRough, !- Roughness + 0.1016, !- Thickness {m} + 0.53, !- Conductivity {W/m-K} + 1280, !- Density {kg/m3} + 840, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + 1/2IN Gypsum, !- Name + Smooth, !- Roughness + 0.0127, !- Thickness {m} + 0.16, !- Conductivity {W/m-K} + 784.9, !- Density {kg/m3} + 830, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.92, !- Solar Absorptance + 0.92; !- Visible Absorptance + +Material, + MAT-CC05 4 HW CONCRETE, !- Name + Rough, !- Roughness + 0.1016, !- Thickness {m} + 1.311, !- Conductivity {W/m-K} + 2240, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + Metal Decking, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.006, !- Conductivity {W/m-K} + 7680, !- Density {kg/m3} + 418.4, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.3; !- Visible Absorptance + +Material, + Roof Insulation [21], !- Name + MediumRough, !- Roughness + 0.2105, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + Roof Membrane, !- Name + VeryRough, !- Roughness + 0.0095, !- Thickness {m} + 0.16, !- Conductivity {W/m-K} + 1121.29, !- Density {kg/m3} + 1460, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material, + Wall Insulation [39], !- Name + MediumRough, !- Roughness + 0.1184, !- Thickness {m} + 0.045, !- Conductivity {W/m-K} + 265, !- Density {kg/m3} + 836.8, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +Material:AirGap, + 000_F04 Wall air space resistance, !- Name + 0.15; !- Thermal Resistance {m2-K/W} + +Material:AirGap, + 000_F05 Ceiling air space resistance, !- Name + 0.18; !- Thermal Resistance {m2-K/W} + +Material:NoMass, + CP02 CARPET PAD, !- Name + VeryRough, !- Roughness + 0.2165, !- Thermal Resistance {m2-K/W} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.8; !- Visible Absorptance + +Material:NoMass, + MAT-SHEATH, !- Name + Rough, !- Roughness + 0.3626, !- Thermal Resistance {m2-K/W} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +WindowMaterial:Gas, + 000_Air 13mm, !- Name + Air, !- Gas Type + 0.0127; !- Thickness {m} + +WindowMaterial:Glazing, + 000_Clear 3mm, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.837, !- Solar Transmittance at Normal Incidence + 0.075, !- Front Side Solar Reflectance at Normal Incidence + 0.075, !- Back Side Solar Reflectance at Normal Incidence + 0.898, !- Visible Transmittance at Normal Incidence + 0.081, !- Front Side Visible Reflectance at Normal Incidence + 0.081, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.84, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + +WindowMaterial:Glazing, + Theoretical Glass [207], !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.3311, !- Solar Transmittance at Normal Incidence + 0.6189, !- Front Side Solar Reflectance at Normal Incidence + 0.6189, !- Back Side Solar Reflectance at Normal Incidence + 0.44, !- Visible Transmittance at Normal Incidence + 0.51, !- Front Side Visible Reflectance at Normal Incidence + 0.51, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.9, !- Front Side Infrared Hemispherical Emissivity + 0.9, !- Back Side Infrared Hemispherical Emissivity + 0.0133, !- Conductivity {W/m-K} + 1, !- Dirt Correction Factor for Solar and Visible Transmittance + No; !- Solar Diffusing + +WindowProperty:FrameAndDivider, + Window Property Frame And Divider 1, !- Name + 0, !- Frame Width {m} + 0, !- Frame Outside Projection {m} + 0, !- Frame Inside Projection {m} + , !- Frame Conductance {W/m2-K} + 1, !- Ratio of Frame-Edge Glass Conductance to Center-Of-Glass Conductance + 0.7, !- Frame Solar Absorptance + 0.7, !- Frame Visible Absorptance + 0.9, !- Frame Thermal Hemispherical Emissivity + DividedLite, !- Divider Type + 0, !- Divider Width {m} + 0, !- Number of Horizontal Dividers + 0, !- Number of Vertical Dividers + 0, !- Divider Outside Projection {m} + 0, !- Divider Inside Projection {m} + 0, !- Divider Conductance {W/m2-K} + 1, !- Ratio of Divider-Edge Glass Conductance to Center-Of-Glass Conductance + 0, !- Divider Solar Absorptance + 0, !- Divider Visible Absorptance + 0.9, !- Divider Thermal Hemispherical Emissivity + 0, !- Outside Reveal Solar Absorptance + 0, !- Inside Sill Depth {m} + 0, !- Inside Sill Solar Absorptance + 0, !- Inside Reveal Depth {m} + 0, !- Inside Reveal Solar Absorptance + ProjectingSingle; !- NFRC Product Type for Assembly Calculations + +Construction, + 000_Exterior Door, !- Name + 000_F08 Metal surface, !- Layer 1 + 000_I01 25mm insulation board; !- Layer 2 + +Construction, + 000_Exterior Window, !- Name + 000_Clear 3mm, !- Layer 1 + 000_Air 13mm, !- Layer 2 + 000_Clear 3mm; !- Layer 3 + +Construction, + 000_ExtSlabCarpet_4in_ClimateZone 1-8, !- Name + MAT-CC05 4 HW CONCRETE, !- Layer 1 + CP02 CARPET PAD; !- Layer 2 + +Construction, + 000_Interior Ceiling, !- Name + 000_M11 100mm lightweight concrete, !- Layer 1 + 000_F05 Ceiling air space resistance, !- Layer 2 + 000_F16 Acoustic tile; !- Layer 3 + +Construction, + 000_Interior Door, !- Name + 000_G05 25mm wood; !- Layer 1 + +Construction, + 000_Interior Floor, !- Name + 000_F16 Acoustic tile, !- Layer 1 + 000_F05 Ceiling air space resistance, !- Layer 2 + 000_M11 100mm lightweight concrete; !- Layer 3 + +Construction, + 000_Interior Partition, !- Name + 000_G05 25mm wood; !- Layer 1 + +Construction, + 000_Interior Wall, !- Name + 000_G01a 19mm gypsum board, !- Layer 1 + 000_F04 Wall air space resistance, !- Layer 2 + 000_G01a 19mm gypsum board; !- Layer 3 + +Construction, + 000_Interior Window, !- Name + 000_Clear 3mm; !- Layer 1 + +Construction, + Adiabatic Construction, !- Name + MAT-SHEATH, !- Layer 1 + Wall Insulation [39], !- Layer 2 + 1/2IN Gypsum; !- Layer 3 + +Construction, + ASHRAE_189.1-2009_ExtRoof_IEAD_ClimateZone 2-5, !- Name + Roof Membrane, !- Layer 1 + Roof Insulation [21], !- Layer 2 + Metal Decking; !- Layer 3 + +Construction, + ASHRAE_189.1-2009_ExtWall_SteelFrame_ClimateZone 4-8, !- Name + MAT-SHEATH, !- Layer 1 + Wall Insulation [39], !- Layer 2 + 1/2IN Gypsum; !- Layer 3 + +Construction, + ASHRAE_189.1-2009_ExtWindow_ClimateZone 4-5, !- Name + Theoretical Glass [207]; !- Layer 1 + +Construction:AirBoundary, + Air_Wall_ConstructionAirBoundary, !- Name + None, !- Air Exchange Method + 0, !- Simple Mixing Air Changes per Hour {1/hr} + ; !- Simple Mixing Schedule Name + +ScheduleTypeLimits, + ActivityLevel, !- Name + 0, !- Lower Limit Value {BasedOnField A3} + , !- Upper Limit Value {BasedOnField A3} + Continuous, !- Numeric Type + activitylevel; !- Unit Type + +ScheduleTypeLimits, + Fractional, !- Name + 0, !- Lower Limit Value {BasedOnField A3} + 1, !- Upper Limit Value {BasedOnField A3} + Continuous; !- Numeric Type + +Schedule:Day:Interval, + Baseline Model Infiltration Schedule Schedule All Days, !- Name + Fractional, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 06:00, !- Time 1 {hh:mm} + 1, !- Value Until Time 1 + 22:00, !- Time 2 {hh:mm} + 0.25, !- Value Until Time 2 + 24:00, !- Time 3 {hh:mm} + 1; !- Value Until Time 3 + +Schedule:Day:Interval, + Baseline Model Infiltration Schedule Summer Design Day, !- Name + Fractional, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 1; !- Value Until Time 1 + +Schedule:Day:Interval, + Baseline Model Infiltration Schedule Winter Design Day, !- Name + Fractional, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 1; !- Value Until Time 1 + +Schedule:Day:Interval, + Baseline Model People Activity Schedule Default, !- Name + ActivityLevel, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 120; !- Value Until Time 1 + +Schedule:Day:Interval, + Baseline Model People Lights and Equipment Schedule Saturday, !- Name + Fractional, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 06:00, !- Time 1 {hh:mm} + 0, !- Value Until Time 1 + 08:00, !- Time 2 {hh:mm} + 0.1, !- Value Until Time 2 + 14:00, !- Time 3 {hh:mm} + 0.5, !- Value Until Time 3 + 17:00, !- Time 4 {hh:mm} + 0.1, !- Value Until Time 4 + 24:00, !- Time 5 {hh:mm} + 0; !- Value Until Time 5 + +Schedule:Day:Interval, + Baseline Model People Lights and Equipment Schedule Schedule Sunday, !- Name + Fractional, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 0; !- Value Until Time 1 + +Schedule:Day:Interval, + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Name + Fractional, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 06:00, !- Time 1 {hh:mm} + 0, !- Value Until Time 1 + 07:00, !- Time 2 {hh:mm} + 0.1, !- Value Until Time 2 + 08:00, !- Time 3 {hh:mm} + 0.2, !- Value Until Time 3 + 12:00, !- Time 4 {hh:mm} + 0.95, !- Value Until Time 4 + 13:00, !- Time 5 {hh:mm} + 0.5, !- Value Until Time 5 + 17:00, !- Time 6 {hh:mm} + 0.95, !- Value Until Time 6 + 18:00, !- Time 7 {hh:mm} + 0.7, !- Value Until Time 7 + 20:00, !- Time 8 {hh:mm} + 0.4, !- Value Until Time 8 + 22:00, !- Time 9 {hh:mm} + 0.1, !- Value Until Time 9 + 24:00, !- Time 10 {hh:mm} + 0.05; !- Value Until Time 10 + +Schedule:Day:Interval, + Baseline Model People Lights and Equipment Schedule Summer Design Day, !- Name + Fractional, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 1; !- Value Until Time 1 + +Schedule:Day:Interval, + Baseline Model People Lights and Equipment Schedule Winter Design Day, !- Name + Fractional, !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 0; !- Value Until Time 1 + +Schedule:Day:Interval, + Schedule Day 2, !- Name + , !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 0; !- Value Until Time 1 + +Schedule:Day:Interval, + Schedule Day 3, !- Name + , !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 0; !- Value Until Time 1 + +Schedule:Day:Interval, + Schedule Day 4, !- Name + , !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 0; !- Value Until Time 1 + +Schedule:Day:Interval, + Schedule Day 5, !- Name + , !- Schedule Type Limits Name + No, !- Interpolate to Timestep + 24:00, !- Time 1 {hh:mm} + 0; !- Value Until Time 1 + +Schedule:Week:Daily, + Baseline Model Infiltration Schedule Week Rule - Jan1-Dec31, !- Name + Baseline Model Infiltration Schedule Schedule All Days, !- Sunday Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days, !- Monday Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days, !- Tuesday Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days, !- Wednesday Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days, !- Thursday Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days, !- Friday Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days, !- Saturday Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days, !- Holiday Schedule:Day Name + Baseline Model Infiltration Schedule Summer Design Day, !- SummerDesignDay Schedule:Day Name + Baseline Model Infiltration Schedule Winter Design Day, !- WinterDesignDay Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days, !- CustomDay1 Schedule:Day Name + Baseline Model Infiltration Schedule Schedule All Days; !- CustomDay2 Schedule:Day Name + +Schedule:Year, + Baseline Model Infiltration Schedule, !- Name + Fractional, !- Schedule Type Limits Name + Baseline Model Infiltration Schedule Week Rule - Jan1-Dec31, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + +Schedule:Week:Daily, + Baseline Model People Activity Schedule Week Rule - Jan1-Dec31, !- Name + Baseline Model People Activity Schedule Default, !- Sunday Schedule:Day Name + Baseline Model People Activity Schedule Default, !- Monday Schedule:Day Name + Baseline Model People Activity Schedule Default, !- Tuesday Schedule:Day Name + Baseline Model People Activity Schedule Default, !- Wednesday Schedule:Day Name + Baseline Model People Activity Schedule Default, !- Thursday Schedule:Day Name + Baseline Model People Activity Schedule Default, !- Friday Schedule:Day Name + Baseline Model People Activity Schedule Default, !- Saturday Schedule:Day Name + Baseline Model People Activity Schedule Default, !- Holiday Schedule:Day Name + Baseline Model People Activity Schedule Default, !- SummerDesignDay Schedule:Day Name + Baseline Model People Activity Schedule Default, !- WinterDesignDay Schedule:Day Name + Baseline Model People Activity Schedule Default, !- CustomDay1 Schedule:Day Name + Baseline Model People Activity Schedule Default; !- CustomDay2 Schedule:Day Name + +Schedule:Year, + Baseline Model People Activity Schedule, !- Name + ActivityLevel, !- Schedule Type Limits Name + Baseline Model People Activity Schedule Week Rule - Jan1-Dec31, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + +Schedule:Week:Daily, + Baseline Model People Lights and Equipment Schedule Week Rule - Jan1-Jan3, !- Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Sunday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Monday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Tuesday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Wednesday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Thursday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Friday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Saturday, !- Saturday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Holiday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Summer Design Day, !- SummerDesignDay Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Winter Design Day, !- WinterDesignDay Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- CustomDay1 Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day; !- CustomDay2 Schedule:Day Name + +Schedule:Week:Daily, + Baseline Model People Lights and Equipment Schedule Week Rule - Jan4-Dec31, !- Name + Baseline Model People Lights and Equipment Schedule Schedule Sunday, !- Sunday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Monday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Tuesday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Wednesday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Thursday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Friday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Saturday, !- Saturday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- Holiday Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Summer Design Day, !- SummerDesignDay Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Winter Design Day, !- WinterDesignDay Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day, !- CustomDay1 Schedule:Day Name + Baseline Model People Lights and Equipment Schedule Schedule Week Day; !- CustomDay2 Schedule:Day Name + +Schedule:Year, + Baseline Model People Lights and Equipment Schedule, !- Name + Fractional, !- Schedule Type Limits Name + Baseline Model People Lights and Equipment Schedule Week Rule - Jan1-Jan3, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 1, !- End Month 1 + 3, !- End Day 1 + Baseline Model People Lights and Equipment Schedule Week Rule - Jan4-Dec31, !- Schedule:Week Name 2 + 1, !- Start Month 2 + 4, !- Start Day 2 + 12, !- End Month 2 + 31; !- End Day 2 + +Schedule:Constant, + Always On Discrete, !- Name + , !- Schedule Type Limits Name + 1; !- Hourly Value + +Schedule:Constant, + Always Off Discrete, !- Name + , !- Schedule Type Limits Name + 0; !- Hourly Value + +Schedule:Constant, + Always On Continuous, !- Name + , !- Schedule Type Limits Name + 1; !- Hourly Value + +OutdoorAir:Node, + Model Outdoor Air Node; !- Name + +SizingPeriod:DesignDay, + Chicago Ohare Intl Ap Ann Clg .4% Condns DB=>MWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 33.3, !- Maximum Dry-Bulb Temperature {C} + 10.5, !- Daily Dry-Bulb Temperature Range {deltaC} + DefaultMultipliers, !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 23.7, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 98934, !- Barometric Pressure {Pa} + 5.2, !- Wind Speed {m/s} + 230, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAETau, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + 0.455, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + 2.05, !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + , !- Sky Clearness + , !- Maximum Number Warmup Days + FullResetAtBeginEnvironment; !- Begin Environment Reset Mode + +SizingPeriod:DesignDay, + Chicago Ohare Intl Ap Ann Htg 99.6% Condns DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -20, !- Maximum Dry-Bulb Temperature {C} + 0, !- Daily Dry-Bulb Temperature Range {deltaC} + DefaultMultipliers, !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -20, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 98934, !- Barometric Pressure {Pa} + 4.9, !- Wind Speed {m/s} + 270, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0, !- Sky Clearness + , !- Maximum Number Warmup Days + FullResetAtBeginEnvironment; !- Begin Environment Reset Mode + +ZoneList, + Baseline Model Space Type, !- Name + Story 1 Core Thermal Zone; !- Zone Name 1 + +Lights, + Baseline Model Lights, !- Name + Baseline Model Space Type, !- Zone or ZoneList or Space or SpaceList Name + Baseline Model People Lights and Equipment Schedule, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.7639104167097, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + , !- Return Air Fraction + , !- Fraction Radiant + , !- Fraction Visible + 1, !- Fraction Replaceable + General; !- End-Use Subcategory + +People, + Baseline Model People, !- Name + Baseline Model Space Type, !- Zone or ZoneList or Space or SpaceList Name + Baseline Model People Lights and Equipment Schedule, !- Number of People Schedule Name + People/Area, !- Number of People Calculation Method + , !- Number of People + 0.0538195520835486, !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + Baseline Model People Activity Schedule; !- Activity Level Schedule Name + +ElectricEquipment, + Baseline Model Electric Equipment, !- Name + Baseline Model Space Type, !- Zone or ZoneList or Space or SpaceList Name + Baseline Model People Lights and Equipment Schedule, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.7639104167097, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + , !- Fraction Latent + , !- Fraction Radiant + , !- Fraction Lost + General; !- End-Use Subcategory + +ZoneInfiltration:DesignFlowRate, + Baseline Model Infiltration, !- Name + Baseline Model Space Type, !- Zone or ZoneList Name + Baseline Model Infiltration Schedule, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.0003048, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OutputControl:Table:Style, + HTML; !- Column Separator + +Output:VariableDictionary, + IDF, !- Key Field + Unsorted; !- Sort Option + +Output:SQLite, + SimpleAndTabular; !- Option Type + +LifeCycleCost:NonrecurringCost, + Default Cost, !- Name + Construction, !- Category + 0, !- Cost + ServicePeriod; !- Start of Costs + +Output:Variable, + , !- Key Value + Site Outdoor Air Drybulb Temperature, !- Variable Name + monthly; !- Reporting Frequency + +Output:Variable, + , !- Key Value + Zone Air Temperature, !- Variable Name + hourly; !- Reporting Frequency + +Output:Variable, + , !- Key Value + Zone Air Relative Humidity, !- Variable Name + hourly; !- Reporting Frequency + +Output:Table:Monthly, + Building Energy Performance - Electricity, !- Name + 2, !- Digits After Decimal + InteriorLights:Electricity, !- Variable or Meter Name 1 + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + ExteriorLights:Electricity, !- Variable or Meter Name 2 + SumOrAverage, !- Aggregation Type for Variable or Meter 2 + InteriorEquipment:Electricity, !- Variable or Meter Name 3 + SumOrAverage, !- Aggregation Type for Variable or Meter 3 + ExteriorEquipment:Electricity, !- Variable or Meter Name 4 + SumOrAverage, !- Aggregation Type for Variable or Meter 4 + Fans:Electricity, !- Variable or Meter Name 5 + SumOrAverage, !- Aggregation Type for Variable or Meter 5 + Pumps:Electricity, !- Variable or Meter Name 6 + SumOrAverage, !- Aggregation Type for Variable or Meter 6 + Heating:Electricity, !- Variable or Meter Name 7 + SumOrAverage, !- Aggregation Type for Variable or Meter 7 + Cooling:Electricity, !- Variable or Meter Name 8 + SumOrAverage, !- Aggregation Type for Variable or Meter 8 + HeatRejection:Electricity, !- Variable or Meter Name 9 + SumOrAverage, !- Aggregation Type for Variable or Meter 9 + Humidifier:Electricity, !- Variable or Meter Name 10 + SumOrAverage, !- Aggregation Type for Variable or Meter 10 + HeatRecovery:Electricity, !- Variable or Meter Name 11 + SumOrAverage, !- Aggregation Type for Variable or Meter 11 + WaterSystems:Electricity, !- Variable or Meter Name 12 + SumOrAverage, !- Aggregation Type for Variable or Meter 12 + Cogeneration:Electricity, !- Variable or Meter Name 13 + SumOrAverage, !- Aggregation Type for Variable or Meter 13 + Refrigeration:Electricity, !- Variable or Meter Name 14 + SumOrAverage; !- Aggregation Type for Variable or Meter 14 + +Output:Table:Monthly, + Building Energy Performance - Natural Gas, !- Name + 2, !- Digits After Decimal + InteriorEquipment:NaturalGas, !- Variable or Meter Name 1 + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + ExteriorEquipment:NaturalGas, !- Variable or Meter Name 2 + SumOrAverage, !- Aggregation Type for Variable or Meter 2 + Heating:NaturalGas, !- Variable or Meter Name 3 + SumOrAverage, !- Aggregation Type for Variable or Meter 3 + Cooling:NaturalGas, !- Variable or Meter Name 4 + SumOrAverage, !- Aggregation Type for Variable or Meter 4 + WaterSystems:NaturalGas, !- Variable or Meter Name 5 + SumOrAverage, !- Aggregation Type for Variable or Meter 5 + Cogeneration:NaturalGas, !- Variable or Meter Name 6 + SumOrAverage; !- Aggregation Type for Variable or Meter 6 + +Output:Table:Monthly, + Building Energy Performance - District Heating, !- Name + 2, !- Digits After Decimal + InteriorLights:DistrictHeating, !- Variable or Meter Name 1 + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + ExteriorLights:DistrictHeating, !- Variable or Meter Name 2 + SumOrAverage, !- Aggregation Type for Variable or Meter 2 + InteriorEquipment:DistrictHeating, !- Variable or Meter Name 3 + SumOrAverage, !- Aggregation Type for Variable or Meter 3 + ExteriorEquipment:DistrictHeating, !- Variable or Meter Name 4 + SumOrAverage, !- Aggregation Type for Variable or Meter 4 + Fans:DistrictHeating, !- Variable or Meter Name 5 + SumOrAverage, !- Aggregation Type for Variable or Meter 5 + Pumps:DistrictHeating, !- Variable or Meter Name 6 + SumOrAverage, !- Aggregation Type for Variable or Meter 6 + Heating:DistrictHeating, !- Variable or Meter Name 7 + SumOrAverage, !- Aggregation Type for Variable or Meter 7 + Cooling:DistrictHeating, !- Variable or Meter Name 8 + SumOrAverage, !- Aggregation Type for Variable or Meter 8 + HeatRejection:DistrictHeating, !- Variable or Meter Name 9 + SumOrAverage, !- Aggregation Type for Variable or Meter 9 + Humidifier:DistrictHeating, !- Variable or Meter Name 10 + SumOrAverage, !- Aggregation Type for Variable or Meter 10 + HeatRecovery:DistrictHeating, !- Variable or Meter Name 11 + SumOrAverage, !- Aggregation Type for Variable or Meter 11 + WaterSystems:DistrictHeating, !- Variable or Meter Name 12 + SumOrAverage, !- Aggregation Type for Variable or Meter 12 + Cogeneration:DistrictHeating, !- Variable or Meter Name 13 + SumOrAverage; !- Aggregation Type for Variable or Meter 13 + +Output:Table:Monthly, + Building Energy Performance - District Cooling, !- Name + 2, !- Digits After Decimal + InteriorLights:DistrictCooling, !- Variable or Meter Name 1 + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + ExteriorLights:DistrictCooling, !- Variable or Meter Name 2 + SumOrAverage, !- Aggregation Type for Variable or Meter 2 + InteriorEquipment:DistrictCooling, !- Variable or Meter Name 3 + SumOrAverage, !- Aggregation Type for Variable or Meter 3 + ExteriorEquipment:DistrictCooling, !- Variable or Meter Name 4 + SumOrAverage, !- Aggregation Type for Variable or Meter 4 + Fans:DistrictCooling, !- Variable or Meter Name 5 + SumOrAverage, !- Aggregation Type for Variable or Meter 5 + Pumps:DistrictCooling, !- Variable or Meter Name 6 + SumOrAverage, !- Aggregation Type for Variable or Meter 6 + Heating:DistrictCooling, !- Variable or Meter Name 7 + SumOrAverage, !- Aggregation Type for Variable or Meter 7 + Cooling:DistrictCooling, !- Variable or Meter Name 8 + SumOrAverage, !- Aggregation Type for Variable or Meter 8 + HeatRejection:DistrictCooling, !- Variable or Meter Name 9 + SumOrAverage, !- Aggregation Type for Variable or Meter 9 + Humidifier:DistrictCooling, !- Variable or Meter Name 10 + SumOrAverage, !- Aggregation Type for Variable or Meter 10 + HeatRecovery:DistrictCooling, !- Variable or Meter Name 11 + SumOrAverage, !- Aggregation Type for Variable or Meter 11 + WaterSystems:DistrictCooling, !- Variable or Meter Name 12 + SumOrAverage, !- Aggregation Type for Variable or Meter 12 + Cogeneration:DistrictCooling, !- Variable or Meter Name 13 + SumOrAverage; !- Aggregation Type for Variable or Meter 13 + +Output:Table:Monthly, + Building Energy Performance - Electricity Peak Demand, !- Name + 2, !- Digits After Decimal + Electricity:Facility, !- Variable or Meter Name 1 + Maximum, !- Aggregation Type for Variable or Meter 1 + InteriorLights:Electricity, !- Variable or Meter Name 2 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 2 + ExteriorLights:Electricity, !- Variable or Meter Name 3 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 3 + InteriorEquipment:Electricity, !- Variable or Meter Name 4 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 4 + ExteriorEquipment:Electricity, !- Variable or Meter Name 5 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 5 + Fans:Electricity, !- Variable or Meter Name 6 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 6 + Pumps:Electricity, !- Variable or Meter Name 7 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 7 + Heating:Electricity, !- Variable or Meter Name 8 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 8 + Cooling:Electricity, !- Variable or Meter Name 9 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 9 + HeatRejection:Electricity, !- Variable or Meter Name 10 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 10 + Humidifier:Electricity, !- Variable or Meter Name 11 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 11 + HeatRecovery:Electricity, !- Variable or Meter Name 12 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 12 + WaterSystems:Electricity, !- Variable or Meter Name 13 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 13 + Cogeneration:Electricity, !- Variable or Meter Name 14 + ValueWhenMaximumOrMinimum; !- Aggregation Type for Variable or Meter 14 + +Output:Table:Monthly, + Building Energy Performance - Natural Gas Peak Demand, !- Name + 2, !- Digits After Decimal + NaturalGas:Facility, !- Variable or Meter Name 1 + Maximum, !- Aggregation Type for Variable or Meter 1 + InteriorEquipment:NaturalGas, !- Variable or Meter Name 2 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 2 + ExteriorEquipment:NaturalGas, !- Variable or Meter Name 3 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 3 + Heating:NaturalGas, !- Variable or Meter Name 4 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 4 + Cooling:NaturalGas, !- Variable or Meter Name 5 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 5 + WaterSystems:NaturalGas, !- Variable or Meter Name 6 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 6 + Cogeneration:NaturalGas, !- Variable or Meter Name 7 + ValueWhenMaximumOrMinimum; !- Aggregation Type for Variable or Meter 7 + +Output:Table:Monthly, + Building Energy Performance - District Heating Peak Demand, !- Name + 2, !- Digits After Decimal + DistrictHeating:Facility, !- Variable or Meter Name 1 + Maximum, !- Aggregation Type for Variable or Meter 1 + InteriorLights:DistrictHeating, !- Variable or Meter Name 2 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 2 + ExteriorLights:DistrictHeating, !- Variable or Meter Name 3 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 3 + InteriorEquipment:DistrictHeating, !- Variable or Meter Name 4 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 4 + ExteriorEquipment:DistrictHeating, !- Variable or Meter Name 5 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 5 + Fans:DistrictHeating, !- Variable or Meter Name 6 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 6 + Pumps:DistrictHeating, !- Variable or Meter Name 7 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 7 + Heating:DistrictHeating, !- Variable or Meter Name 8 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 8 + Cooling:DistrictHeating, !- Variable or Meter Name 9 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 9 + HeatRejection:DistrictHeating, !- Variable or Meter Name 10 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 10 + Humidifier:DistrictHeating, !- Variable or Meter Name 11 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 11 + HeatRecovery:DistrictHeating, !- Variable or Meter Name 12 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 12 + WaterSystems:DistrictHeating, !- Variable or Meter Name 13 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 13 + Cogeneration:DistrictHeating, !- Variable or Meter Name 14 + ValueWhenMaximumOrMinimum; !- Aggregation Type for Variable or Meter 14 + +Output:Table:Monthly, + Building Energy Performance - District Cooling Peak Demand, !- Name + 2, !- Digits After Decimal + DistrictCooling:Facility, !- Variable or Meter Name 1 + Maximum, !- Aggregation Type for Variable or Meter 1 + InteriorLights:DistrictCooling, !- Variable or Meter Name 2 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 2 + ExteriorLights:DistrictCooling, !- Variable or Meter Name 3 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 3 + InteriorEquipment:DistrictCooling, !- Variable or Meter Name 4 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 4 + ExteriorEquipment:DistrictCooling, !- Variable or Meter Name 5 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 5 + Fans:DistrictCooling, !- Variable or Meter Name 6 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 6 + Pumps:DistrictCooling, !- Variable or Meter Name 7 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 7 + Heating:DistrictCooling, !- Variable or Meter Name 8 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 8 + Cooling:DistrictCooling, !- Variable or Meter Name 9 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 9 + HeatRejection:DistrictCooling, !- Variable or Meter Name 10 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 10 + Humidifier:DistrictCooling, !- Variable or Meter Name 11 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 11 + HeatRecovery:DistrictCooling, !- Variable or Meter Name 12 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 12 + WaterSystems:DistrictCooling, !- Variable or Meter Name 13 + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 13 + Cogeneration:DistrictCooling, !- Variable or Meter Name 14 + ValueWhenMaximumOrMinimum; !- Aggregation Type for Variable or Meter 14 + +Output:Meter:MeterFileOnly, + NaturalGas:Facility, !- Key Name + Daily; !- Reporting Frequency + +Output:Meter:MeterFileOnly, + Electricity:Facility, !- Key Name + Timestep; !- Reporting Frequency + +Output:Meter:MeterFileOnly, + Electricity:Facility, !- Key Name + Daily; !- Reporting Frequency + +Output:Meter, + Electricity:Facility, !- Key Name + Timestep; !- Reporting Frequency + +Output:Meter, + NaturalGas:Facility, !- Key Name + Timestep; !- Reporting Frequency + +Output:Meter, + DistrictCooling:Facility, !- Key Name + Timestep; !- Reporting Frequency + +Output:Meter, + DistrictHeating:Facility, !- Key Name + Timestep; !- Reporting Frequency +! +! ------------------------------------------------------------- +! New objects created from ExpandObjects +! ------------------------------------------------------------- +! + +ZoneHVAC:EquipmentConnections, + Story 1 Core Thermal Zone, !- Zone Name + Story 1 Core Thermal Zone Equipment, !- Zone Conditioning Equipment List Name + Story 1 Core Thermal Zone Ideal Loads Supply Inlet, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Story 1 Core Thermal Zone Zone Air Node, !- Zone Air Node Name + Story 1 Core Thermal Zone Return Outlet; !- Zone Return Air Node Name + +ZoneHVAC:EquipmentList, + Story 1 Core Thermal Zone Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:IdealLoadsAirSystem, !- Zone Equipment Object Type + Story 1 Core Thermal Zone Ideal Loads Air System, !- Zone Equipment Name + 1, !- Zone Equipment Cooling Sequence + 1, !- Zone Equipment Heating or No-Load Sequence + , !- Zone Equipment Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment Sequential Heating Fraction Schedule Name + +ZoneHVAC:IdealLoadsAirSystem, + Story 1 Core Thermal Zone Ideal Loads Air System, !- Name + , !- Availability Schedule Name + Story 1 Core Thermal Zone Ideal Loads Supply Inlet, !- Zone Supply Air Node Name + , !- Zone Exhaust Air Node Name + , !- System Inlet Air Node Name + 50, !- Maximum Heating Supply Air Temperature [C] + 13, !- Minimum Cooling Supply Air Temperature [C] + 0.0156, !- Maximum Heating Supply Air Humidity Ratio [kg-H20/kg-air] + 0.0077, !- Minimum Cooling Supply Air Humidity Ratio [kg-H20/kg-air] + NoLimit, !- Heating Limit + , !- Maximum Heating Air Flow Rate {m3/s} + , !- Maximum Sensible Heating Capacity {m3/s} + NoLimit, !- Cooling Limit + , !- Maximum Cooling Air Flow Rate {m3/s} + , !- Maximum Total Cooling Capacity {m3/s} + , !- Heating Availability Schedule Name + , !- Cooling Availability Schedule Name + ConstantSensibleHeatRatio, !- Dehumidification Control Type + 0.7, !- Cooling Sensible Heat Ratio + None, !- Humidification Control Type + , !- Design Specification Outdoor Air Object Name + , !- Outdoor Air Inlet Node Name + None, !- Demand Controlled Ventilation Type + NoEconomizer, !- Outdoor Air Economizer Type + None, !- Heat Recovery Type + 0.7, !- Sensible Heat Recovery Effectiveness + 0.65; !- Latent Heat Recovery Effectiveness diff --git a/src/model/ModelObject.cpp b/src/model/ModelObject.cpp index ec5433e1b70..7d8443c54cd 100644 --- a/src/model/ModelObject.cpp +++ b/src/model/ModelObject.cpp @@ -385,7 +385,7 @@ namespace model { LOG(Warn, "This object does not have a name, cannot retrieve the fenestration value '" + valueName + "'."); return result; } - + // Get the object name and transform to the way it is recorded // in the sql file std::string rowName = name().get(); diff --git a/src/model/ModelObject.hpp b/src/model/ModelObject.hpp index 11aa46e38ec..640087e3bb0 100644 --- a/src/model/ModelObject.hpp +++ b/src/model/ModelObject.hpp @@ -260,7 +260,6 @@ namespace model { /** Gets the fenestration value from the sql file **/ boost::optional getFenestrationValue(std::string valueName) const; - /** Return the names of the available ems actuators. */ virtual std::vector emsActuatorNames() const; diff --git a/src/model/ModelObject_Impl.hpp b/src/model/ModelObject_Impl.hpp index f9dd68af5bf..dbc4aed2912 100644 --- a/src/model/ModelObject_Impl.hpp +++ b/src/model/ModelObject_Impl.hpp @@ -205,7 +205,6 @@ namespace model { /** Gets the fenestration value from the sql file **/ boost::optional getFenestrationValue(std::string valueName) const; - protected: ModelObject_Impl(const IdfObject& idfObject, Model_Impl* model, bool keepHandle); diff --git a/src/model/SubSurface.cpp b/src/model/SubSurface.cpp index 20aba40bd46..3f6cd4fec40 100644 --- a/src/model/SubSurface.cpp +++ b/src/model/SubSurface.cpp @@ -602,14 +602,14 @@ namespace model { return result; } - boost::optional SubSurface_Impl::assemblyUFactor(() const { + boost::optional SubSurface_Impl::assemblyUFactor() const { return getFenestrationValue("Assembly U-Factor"); } - + boost::optional SubSurface_Impl::assemblySHGC() const { return getFenestrationValue("Assembly SHGC"); } - + boost::optional SubSurface_Impl::assemblyVisibleTransmittance() const { return getFenestrationValue("Assembly Visible Transmittance"); } diff --git a/src/model/SubSurface.hpp b/src/model/SubSurface.hpp index 8b58c0f7f72..467e4afd616 100644 --- a/src/model/SubSurface.hpp +++ b/src/model/SubSurface.hpp @@ -118,10 +118,10 @@ namespace model { bool isNumberofVerticesAutocalculated() const; - boost::optional assemblyUFactor(() const; - + boost::optional assemblyUFactor() const; + boost::optional assemblySHGC() const; - + boost::optional assemblyVisibleTransmittance() const; //@} diff --git a/src/model/SubSurface_Impl.hpp b/src/model/SubSurface_Impl.hpp index b9e5e88325b..71e46a8cded 100644 --- a/src/model/SubSurface_Impl.hpp +++ b/src/model/SubSurface_Impl.hpp @@ -167,11 +167,11 @@ namespace model { bool isNumberofVerticesAutocalculated() const; // Assembly methods - - boost::optional assemblyUFactor(() const; - + + boost::optional assemblyUFactor() const; + boost::optional assemblySHGC() const; - + boost::optional assemblyVisibleTransmittance() const; //@} diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index 7ff38a00ca3..e22aef8b91e 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -907,9 +907,6 @@ namespace detail { return execAndReturnFirstDouble(s, reportName, rowName, columnName); } - /// fenestration assembly - // TODO - /// hours simulated boost::optional SqlFile_Impl::hoursSimulated() const { const std::string& s = R"(SELECT Value FROM TabularDataWithStrings diff --git a/src/utilities/sql/SqlFile_Impl.hpp b/src/utilities/sql/SqlFile_Impl.hpp index 3cc111de7b3..c224b7c13eb 100644 --- a/src/utilities/sql/SqlFile_Impl.hpp +++ b/src/utilities/sql/SqlFile_Impl.hpp @@ -146,25 +146,6 @@ namespace detail { const openstudio::EndUseCategoryType& t_categoryType, const openstudio::MonthOfYear& t_monthOfYear) const; - /// TODO - /* boost::optional assemblyUFactorTotalorAverage() const; - - boost::optional assemblyUFactorNorthTotalorAverage() const; - - boost::optional assemblyUFactorNonNorthTotalorAverage() const; - - boost::optional assemblySHGCTotalorAverage() const; - - boost::optional assemblySHGCNorthTotalorAverage() const; - - boost::optional assemblySHGCNonNorthTotalorAverage() const; - - boost::optional assemblyVisibleTransmittanceTotalorAverage() const; - - boost::optional assemblyVisibleTransmittanceNorthTotalorAverage() const; - - boost::optional assemblyVisibleTransmittanceNonNorthTotalorAverage() const; */ - /// Returns the total energy cost over the analysis period in dollars according to the discounting convention. /// Requires EnergyPlus simulation output and LifeCycleCost_Parameters input object to calculate. boost::optional economicsEnergyCost() const; diff --git a/src/utilities/sql/Test/SqlFile_GTest.cpp b/src/utilities/sql/Test/SqlFile_GTest.cpp index 0f07f9d7725..7379cdef85c 100644 --- a/src/utilities/sql/Test/SqlFile_GTest.cpp +++ b/src/utilities/sql/Test/SqlFile_GTest.cpp @@ -806,15 +806,12 @@ TEST_F(SqlFileFixture, 4298_YearField) { EXPECT_EQ(0, reportingFreqs->size()); } -/* TEST_F(SqlFileFixture, 4403_FenestrationAssembly) { +TEST_F(SqlFileFixture, 4403_FenestrationAssembly) { // Test for #4403 - Add Sql helper methods to retrieve U-factors, SHGC, or VT for glazing systems // This one has fenestration that includes frames // TODO: must include WindowProperty:FrameAndDivider so that NFRC Product Type is defined - openstudio::path path = resourcesPath() / toPath("energyplus/TODO/eplusout.sql"); + openstudio::path path = resourcesPath() / toPath("energyplus/FrameAndDivider/eplusout.sql"); sqlFile = openstudio::SqlFile(path); ASSERT_TRUE(sqlFile.connectionOpen()); - - boost::optional d = sqlFile->assemblyUFactorByWindow("Win-1"); - ASSERT_TRUE(d); -} */ \ No newline at end of file +} \ No newline at end of file From 0d06d63ecebf27aab1020ee3e1bfb08f30e3ef6c Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Fri, 11 Mar 2022 14:14:19 -0700 Subject: [PATCH 06/13] Sql methods are working. --- src/model/ModelObject.cpp | 39 +++++----- src/model/ModelObject.hpp | 2 +- src/model/ModelObject_Impl.hpp | 2 +- src/model/SubSurface.cpp | 12 ++++ src/utilities/sql/SqlFile.cpp | 24 +++++++ src/utilities/sql/SqlFile.hpp | 9 +++ src/utilities/sql/SqlFile_Impl.cpp | 90 ++++++++++++++++++++++++ src/utilities/sql/SqlFile_Impl.hpp | 9 +++ src/utilities/sql/Test/SqlFile_GTest.cpp | 12 +++- 9 files changed, 178 insertions(+), 21 deletions(-) diff --git a/src/model/ModelObject.cpp b/src/model/ModelObject.cpp index 7d8443c54cd..af9c3abd65e 100644 --- a/src/model/ModelObject.cpp +++ b/src/model/ModelObject.cpp @@ -377,12 +377,12 @@ namespace model { } /** Gets the fenestration value from the sql file **/ - boost::optional ModelObject_Impl::getFenestrationValue(std::string valueName) const { + boost::optional ModelObject_Impl::getFenestrationValue(std::string columnName) const { boost::optional result; // Get the object name if (!name()) { - LOG(Warn, "This object does not have a name, cannot retrieve the fenestration value '" + valueName + "'."); + LOG(Warn, "This object does not have a name, cannot retrieve the fenestration value '" + columnName + "'."); return result; } @@ -393,28 +393,28 @@ namespace model { // Check that the model has a sql file if (!model().sqlFile()) { - LOG(Warn, "This model has no sql file, cannot retrieve the autosized value '" + valueName + "'."); + LOG(Warn, "This model has no sql file, cannot retrieve the fenestration value '" + columnName + "'."); return result; } - const std::string& s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Exterior Fenestration' - AND RowName=? - AND ColumnName=?)"; + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Exterior Fenestration' + AND RowName=? + AND ColumnName=?)"; - boost::optional d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, valueName); + boost::optional d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); if (!d) { - const s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Interior Fenestration' - AND RowName=? - AND ColumnName=?)"; + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Interior Fenestration' + AND RowName=? + AND ColumnName=?)"; - d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, valueName); + d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); } return d; @@ -986,6 +986,11 @@ namespace model { return getImpl()->getAutosizedValue(valueName, units); } + /** Gets the fenestration value from the sql file **/ + boost::optional ModelObject::getFenestrationValue(std::string columnName) const { + return getImpl()->getFenestrationValue(columnName); + } + std::vector ModelObject::emsActuatorNames() const { return getImpl()->emsActuatorNames(); } diff --git a/src/model/ModelObject.hpp b/src/model/ModelObject.hpp index 640087e3bb0..796f3c02cd5 100644 --- a/src/model/ModelObject.hpp +++ b/src/model/ModelObject.hpp @@ -258,7 +258,7 @@ namespace model { boost::optional getAutosizedValue(std::string valueName, std::string unitString) const; /** Gets the fenestration value from the sql file **/ - boost::optional getFenestrationValue(std::string valueName) const; + boost::optional getFenestrationValue(std::string columnName) const; /** Return the names of the available ems actuators. */ diff --git a/src/model/ModelObject_Impl.hpp b/src/model/ModelObject_Impl.hpp index dbc4aed2912..eb572d134e2 100644 --- a/src/model/ModelObject_Impl.hpp +++ b/src/model/ModelObject_Impl.hpp @@ -203,7 +203,7 @@ namespace model { boost::optional getAutosizedValue(std::string valueName, std::string unitString) const; /** Gets the fenestration value from the sql file **/ - boost::optional getFenestrationValue(std::string valueName) const; + boost::optional getFenestrationValue(std::string columnName) const; protected: ModelObject_Impl(const IdfObject& idfObject, Model_Impl* model, bool keepHandle); diff --git a/src/model/SubSurface.cpp b/src/model/SubSurface.cpp index 3f6cd4fec40..8d89a9129b2 100644 --- a/src/model/SubSurface.cpp +++ b/src/model/SubSurface.cpp @@ -1431,6 +1431,18 @@ namespace model { return getImpl()->isNumberofVerticesAutocalculated(); } + boost::optional SubSurface::assemblyUFactor() const { + return getImpl()->assemblyUFactor(); + } + + boost::optional SubSurface::assemblySHGC() const { + return getImpl()->assemblySHGC(); + } + + boost::optional SubSurface::assemblyVisibleTransmittance() const { + return getImpl()->assemblyVisibleTransmittance(); + } + bool SubSurface::setSubSurfaceType(const std::string& subSurfaceType) { return getImpl()->setSubSurfaceType(subSurfaceType); } diff --git a/src/utilities/sql/SqlFile.cpp b/src/utilities/sql/SqlFile.cpp index 345f52e3a38..58a7fdc2c95 100644 --- a/src/utilities/sql/SqlFile.cpp +++ b/src/utilities/sql/SqlFile.cpp @@ -1385,4 +1385,28 @@ bool SqlFile::hasIlluminanceMapYear() const { return true; } +boost::optional SqlFile::assemblyUFactor(const std::string& rowName) const { + boost::optional result; + if (m_impl) { + result = m_impl->assemblyUFactor(rowName); + } + return result; +} + +boost::optional SqlFile::assemblySHGC(const std::string& rowName) const { + boost::optional result; + if (m_impl) { + result = m_impl->assemblySHGC(rowName); + } + return result; +} + +boost::optional SqlFile::assemblyVisibleTransmittance(const std::string& rowName) const { + boost::optional result; + if (m_impl) { + result = m_impl->assemblyVisibleTransmittance(rowName); + } + return result; +} + } // namespace openstudio diff --git a/src/utilities/sql/SqlFile.hpp b/src/utilities/sql/SqlFile.hpp index 925c62de449..c22631187bc 100644 --- a/src/utilities/sql/SqlFile.hpp +++ b/src/utilities/sql/SqlFile.hpp @@ -111,6 +111,15 @@ class UTILITIES_API SqlFile // Check if the SqlFile contains 'Year' field for DaylightMapHourlyReports (added Year in 9.2.0) bool hasIlluminanceMapYear() const; + // return an Assembly U-Factor value for matching rowName + boost::optional assemblyUFactor(const std::string& rowName) const; + + // return an Assembly SHGC value for matching rowName + boost::optional assemblySHGC(const std::string& rowName) const; + + // return an Assembly Visible Transmittance value for matching rowName + boost::optional assemblyVisibleTransmittance(const std::string& rowName) const; + /// close the file bool close(); diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index e22aef8b91e..c163a265cae 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -499,6 +499,96 @@ namespace detail { return m_hasIlluminanceMapYear; } + boost::optional SqlFile_Impl::assemblyUFactor(const std::string& rowName) const { + boost::optional result; + + // Get the object name and transform to the way it is recorded + // in the sql file + std::string queryRowName = boost::to_upper_copy(rowName); + + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Exterior Fenestration' + AND RowName=? + AND ColumnName='Assembly U-Factor')"; + + boost::optional d = execAndReturnFirstDouble(s, queryRowName); + + if (!d) { + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Interior Fenestration' + AND RowName=? + AND ColumnName='Assembly U-Factor')"; + + d = execAndReturnFirstDouble(s, queryRowName); + } + + return d; + } + + boost::optional SqlFile_Impl::assemblySHGC(const std::string& rowName) const { + boost::optional result; + + // Get the object name and transform to the way it is recorded + // in the sql file + std::string queryRowName = boost::to_upper_copy(rowName); + + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Exterior Fenestration' + AND RowName=? + AND ColumnName='Assembly SHGC')"; + + boost::optional d = execAndReturnFirstDouble(s, queryRowName); + + if (!d) { + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Interior Fenestration' + AND RowName=? + AND ColumnName='Assembly SHGC')"; + + d = execAndReturnFirstDouble(s, queryRowName); + } + + return d; + } + + boost::optional SqlFile_Impl::assemblyVisibleTransmittance(const std::string& rowName) const { + boost::optional result; + + // Get the object name and transform to the way it is recorded + // in the sql file + std::string queryRowName = boost::to_upper_copy(rowName); + + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Exterior Fenestration' + AND RowName=? + AND ColumnName='Assembly Visible Transmittance')"; + + boost::optional d = execAndReturnFirstDouble(s, queryRowName); + + if (!d) { + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Interior Fenestration' + AND RowName=? + AND ColumnName='Assembly Visible Transmittance')"; + + d = execAndReturnFirstDouble(s, queryRowName); + } + + return d; + } + bool SqlFile_Impl::isValidConnection() { std::string energyPlusVersion = this->energyPlusVersion(); if (energyPlusVersion.empty()) { diff --git a/src/utilities/sql/SqlFile_Impl.hpp b/src/utilities/sql/SqlFile_Impl.hpp index c224b7c13eb..4240327633f 100644 --- a/src/utilities/sql/SqlFile_Impl.hpp +++ b/src/utilities/sql/SqlFile_Impl.hpp @@ -755,6 +755,15 @@ namespace detail { // DaylightMapHourlyReports added Year in 9.2.0 bool hasIlluminanceMapYear() const; + // return an Assembly U-Factor value for matching rowName + boost::optional assemblyUFactor(const std::string& rowName) const; + + // return an Assembly SHGC value for matching rowName + boost::optional assemblySHGC(const std::string& rowName) const; + + // return an Assembly Visible Transmittance value for matching rowName + boost::optional assemblyVisibleTransmittance(const std::string& rowName) const; + private: void init(); diff --git a/src/utilities/sql/Test/SqlFile_GTest.cpp b/src/utilities/sql/Test/SqlFile_GTest.cpp index 7379cdef85c..300dfac18a1 100644 --- a/src/utilities/sql/Test/SqlFile_GTest.cpp +++ b/src/utilities/sql/Test/SqlFile_GTest.cpp @@ -809,9 +809,17 @@ TEST_F(SqlFileFixture, 4298_YearField) { TEST_F(SqlFileFixture, 4403_FenestrationAssembly) { // Test for #4403 - Add Sql helper methods to retrieve U-factors, SHGC, or VT for glazing systems - // This one has fenestration that includes frames - // TODO: must include WindowProperty:FrameAndDivider so that NFRC Product Type is defined + // This one has fenestration that includes WindowProperty:FrameAndDivider openstudio::path path = resourcesPath() / toPath("energyplus/FrameAndDivider/eplusout.sql"); sqlFile = openstudio::SqlFile(path); ASSERT_TRUE(sqlFile.connectionOpen()); + + ASSERT_TRUE(sqlFile.assemblyUFactor("Story 1 Core Space Exterior Wall Window")); + EXPECT_EQ(2.546, sqlFile.assemblyUFactor("Story 1 Core Space Exterior Wall Window").get()); + + ASSERT_TRUE(sqlFile.assemblySHGC("Story 1 Core Space Exterior Wall Window")); + EXPECT_EQ(0.350, sqlFile.assemblySHGC("Story 1 Core Space Exterior Wall Window").get()); + + ASSERT_TRUE(sqlFile.assemblyVisibleTransmittance("Story 1 Core Space Exterior Wall Window")); + EXPECT_EQ(0.440, sqlFile.assemblyVisibleTransmittance("Story 1 Core Space Exterior Wall Window").get()); } \ No newline at end of file From 425ab07b4f428e549050e1641f0408836ed32143 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 14 Mar 2022 09:58:04 -0700 Subject: [PATCH 07/13] Add new test for subsurface getters. --- src/model/test/SubSurface_GTest.cpp | 34 +++++++++++++++++++++++++++++ src/utilities/sql/SqlFile.hpp | 4 ++-- src/utilities/sql/SqlFile_Impl.hpp | 4 ++-- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/model/test/SubSurface_GTest.cpp b/src/model/test/SubSurface_GTest.cpp index 70dba931cf4..91e29401312 100644 --- a/src/model/test/SubSurface_GTest.cpp +++ b/src/model/test/SubSurface_GTest.cpp @@ -54,6 +54,9 @@ #include "../Model_Impl.hpp" #include "../ThermalZone.hpp" +#include "../../energyplus/ReverseTranslator.hpp" +#include "../../utilities/sql/SqlFile.hpp" + #include "../../utilities/geometry/Geometry.hpp" #include "../../utilities/geometry/Point3d.hpp" #include "../../utilities/geometry/Vector3d.hpp" @@ -1531,3 +1534,34 @@ TEST_F(ModelFixture, Issue_4361_Multi_Subsurfaces_Overlapping) { windowWallRatio = surface.windowToWallRatio(); EXPECT_NEAR(windowWallRatio, 0.2742, 0.01); } + +TEST_F(ModelFixture, 4403_FenestrationAssembly) { + // Test for #4403 - Add Sql helper methods to retrieve U-factors, SHGC, or VT for glazing systems + + // This one has fenestration that includes WindowProperty:FrameAndDivider + openstudio::path idfPath = resourcesPath() / toPath("energyplus/FrameAndDivider/in.idf"); + energyplus::ReverseTranslator reverseTranslator; + ASSERT_NO_THROW(reverseTranslator.loadModel(idfPath)); + OptionalModel _model = reverseTranslator.loadModel(idfPath); + ASSERT_TRUE(_model); + Model model = _model.get(); + + openstudio::path sqlPath = resourcesPath() / toPath("energyplus/FrameAndDivider/eplusout.sql"); + openstudio::SqlFile sqlFile = openstudio::SqlFile(sqlPath); + ASSERT_TRUE(sqlFile.connectionOpen()); + + model.setSqlFile(sqlFile); + ASSERT_TRUE(model.sqlFile()); + + OptionalSubSurface subSurface = model.getModelObjectByName("Story 1 Core Space Exterior Wall Window"); + ASSERT_TRUE(subSurface); + + ASSERT_TRUE(subSurface->assemblyUFactor()); + EXPECT_EQ(2.546, subSurface->assemblyUFactor().get()); + + ASSERT_TRUE(subSurface->assemblySHGC()); + EXPECT_EQ(0.350, subSurface->assemblySHGC().get()); + + ASSERT_TRUE(subSurface->assemblyVisibleTransmittance()); + EXPECT_EQ(0.440, subSurface->assemblyVisibleTransmittance().get()); +} diff --git a/src/utilities/sql/SqlFile.hpp b/src/utilities/sql/SqlFile.hpp index c22631187bc..881c8fb2e25 100644 --- a/src/utilities/sql/SqlFile.hpp +++ b/src/utilities/sql/SqlFile.hpp @@ -113,10 +113,10 @@ class UTILITIES_API SqlFile // return an Assembly U-Factor value for matching rowName boost::optional assemblyUFactor(const std::string& rowName) const; - + // return an Assembly SHGC value for matching rowName boost::optional assemblySHGC(const std::string& rowName) const; - + // return an Assembly Visible Transmittance value for matching rowName boost::optional assemblyVisibleTransmittance(const std::string& rowName) const; diff --git a/src/utilities/sql/SqlFile_Impl.hpp b/src/utilities/sql/SqlFile_Impl.hpp index 4240327633f..50653d7ce89 100644 --- a/src/utilities/sql/SqlFile_Impl.hpp +++ b/src/utilities/sql/SqlFile_Impl.hpp @@ -757,10 +757,10 @@ namespace detail { // return an Assembly U-Factor value for matching rowName boost::optional assemblyUFactor(const std::string& rowName) const; - + // return an Assembly SHGC value for matching rowName boost::optional assemblySHGC(const std::string& rowName) const; - + // return an Assembly Visible Transmittance value for matching rowName boost::optional assemblyVisibleTransmittance(const std::string& rowName) const; From b88749032a7d0a0bcaa0fccb99a576f6e2b00d58 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 14 Mar 2022 13:44:17 -0700 Subject: [PATCH 08/13] Move from modelobject to subsurface, and condense duplicate code. --- src/model/ModelObject.cpp | 49 ------------ src/model/ModelObject.hpp | 3 - src/model/ModelObject_Impl.hpp | 3 - src/model/SubSurface.cpp | 97 ++++++++++++++++++------ src/model/SubSurface.hpp | 7 ++ src/model/SubSurface_Impl.hpp | 7 ++ src/utilities/sql/SqlFile.cpp | 20 +++-- src/utilities/sql/SqlFile.hpp | 13 ++-- src/utilities/sql/SqlFile_Impl.cpp | 74 ++++-------------- src/utilities/sql/SqlFile_Impl.hpp | 15 ++-- src/utilities/sql/Test/SqlFile_GTest.cpp | 2 +- 11 files changed, 132 insertions(+), 158 deletions(-) diff --git a/src/model/ModelObject.cpp b/src/model/ModelObject.cpp index af9c3abd65e..b1bd6fb0cac 100644 --- a/src/model/ModelObject.cpp +++ b/src/model/ModelObject.cpp @@ -376,50 +376,6 @@ namespace model { return result; } - /** Gets the fenestration value from the sql file **/ - boost::optional ModelObject_Impl::getFenestrationValue(std::string columnName) const { - boost::optional result; - - // Get the object name - if (!name()) { - LOG(Warn, "This object does not have a name, cannot retrieve the fenestration value '" + columnName + "'."); - return result; - } - - // Get the object name and transform to the way it is recorded - // in the sql file - std::string rowName = name().get(); - boost::to_upper(rowName); - - // Check that the model has a sql file - if (!model().sqlFile()) { - LOG(Warn, "This model has no sql file, cannot retrieve the fenestration value '" + columnName + "'."); - return result; - } - - std::string s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Exterior Fenestration' - AND RowName=? - AND ColumnName=?)"; - - boost::optional d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); - - if (!d) { - std::string s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Interior Fenestration' - AND RowName=? - AND ColumnName=?)"; - - d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); - } - - return d; - } - //void ModelObject_Impl::connect(unsigned outletPort, ModelObject target, unsigned inletPort) //{ // OptionalConnection connection = getOutletConnection(outletPort); @@ -986,11 +942,6 @@ namespace model { return getImpl()->getAutosizedValue(valueName, units); } - /** Gets the fenestration value from the sql file **/ - boost::optional ModelObject::getFenestrationValue(std::string columnName) const { - return getImpl()->getFenestrationValue(columnName); - } - std::vector ModelObject::emsActuatorNames() const { return getImpl()->emsActuatorNames(); } diff --git a/src/model/ModelObject.hpp b/src/model/ModelObject.hpp index 796f3c02cd5..d2ceacace78 100644 --- a/src/model/ModelObject.hpp +++ b/src/model/ModelObject.hpp @@ -257,9 +257,6 @@ namespace model { /** Gets the autosized component value from the sql file **/ boost::optional getAutosizedValue(std::string valueName, std::string unitString) const; - /** Gets the fenestration value from the sql file **/ - boost::optional getFenestrationValue(std::string columnName) const; - /** Return the names of the available ems actuators. */ virtual std::vector emsActuatorNames() const; diff --git a/src/model/ModelObject_Impl.hpp b/src/model/ModelObject_Impl.hpp index eb572d134e2..9080e2caff2 100644 --- a/src/model/ModelObject_Impl.hpp +++ b/src/model/ModelObject_Impl.hpp @@ -202,9 +202,6 @@ namespace model { /** Gets the autosized component value from the sql file **/ boost::optional getAutosizedValue(std::string valueName, std::string unitString) const; - /** Gets the fenestration value from the sql file **/ - boost::optional getFenestrationValue(std::string columnName) const; - protected: ModelObject_Impl(const IdfObject& idfObject, Model_Impl* model, bool keepHandle); diff --git a/src/model/SubSurface.cpp b/src/model/SubSurface.cpp index 8d89a9129b2..4386767d4fb 100644 --- a/src/model/SubSurface.cpp +++ b/src/model/SubSurface.cpp @@ -602,18 +602,6 @@ namespace model { return result; } - boost::optional SubSurface_Impl::assemblyUFactor() const { - return getFenestrationValue("Assembly U-Factor"); - } - - boost::optional SubSurface_Impl::assemblySHGC() const { - return getFenestrationValue("Assembly SHGC"); - } - - boost::optional SubSurface_Impl::assemblyVisibleTransmittance() const { - return getFenestrationValue("Assembly Visible Transmittance"); - } - bool SubSurface_Impl::setSubSurfaceType(const std::string& subSurfaceType) { bool result = setString(OS_SubSurfaceFields::SubSurfaceType, subSurfaceType); if (result) { @@ -1355,6 +1343,62 @@ namespace model { return boost::none; } + boost::optional SubSurface_Impl::assemblyUFactor() const { + return getFenestrationValue("Assembly U-Factor"); + } + + boost::optional SubSurface_Impl::assemblySHGC() const { + return getFenestrationValue("Assembly SHGC"); + } + + boost::optional SubSurface_Impl::assemblyVisibleTransmittance() const { + return getFenestrationValue("Assembly Visible Transmittance"); + } + + /** Gets the fenestration value from the sql file **/ + boost::optional SubSurface_Impl::getFenestrationValue(std::string columnName) const { + boost::optional result; + + // Get the object name + if (!name()) { + LOG(Warn, "This object does not have a name, cannot retrieve the fenestration value '" + columnName + "'."); + return result; + } + + // Get the object name and transform to the way it is recorded + // in the sql file + std::string rowName = name().get(); + boost::to_upper(rowName); + + // Check that the model has a sql file + if (!model().sqlFile()) { + LOG(Warn, "This model has no sql file, cannot retrieve the fenestration value '" + columnName + "'."); + return result; + } + + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Exterior Fenestration' + AND RowName=? + AND ColumnName=?)"; + + boost::optional d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); + + if (!d) { + std::string s = R"(SELECT Value FROM TabularDataWithStrings + WHERE ReportName='EnvelopeSummary' + AND ReportForString='Entire Facility' + AND TableName='Interior Fenestration' + AND RowName=? + AND ColumnName=?)"; + + d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); + } + + return d; + } + } // namespace detail SubSurface::SubSurface(const std::vector& vertices, const Model& model) : PlanarSurface(SubSurface::iddObjectType(), vertices, model) { @@ -1431,18 +1475,6 @@ namespace model { return getImpl()->isNumberofVerticesAutocalculated(); } - boost::optional SubSurface::assemblyUFactor() const { - return getImpl()->assemblyUFactor(); - } - - boost::optional SubSurface::assemblySHGC() const { - return getImpl()->assemblySHGC(); - } - - boost::optional SubSurface::assemblyVisibleTransmittance() const { - return getImpl()->assemblyVisibleTransmittance(); - } - bool SubSurface::setSubSurfaceType(const std::string& subSurfaceType) { return getImpl()->setSubSurfaceType(subSurfaceType); } @@ -1783,5 +1815,22 @@ namespace model { return getImpl()->airflowNetworkSurface(); } + boost::optional SubSurface::assemblyUFactor() const { + return getImpl()->assemblyUFactor(); + } + + boost::optional SubSurface::assemblySHGC() const { + return getImpl()->assemblySHGC(); + } + + boost::optional SubSurface::assemblyVisibleTransmittance() const { + return getImpl()->assemblyVisibleTransmittance(); + } + + /** Gets the fenestration value from the sql file **/ + boost::optional SubSurface::getFenestrationValue(std::string columnName) const { + return getImpl()->getFenestrationValue(columnName); + } + } // namespace model } // namespace openstudio diff --git a/src/model/SubSurface.hpp b/src/model/SubSurface.hpp index 467e4afd616..b9146995e87 100644 --- a/src/model/SubSurface.hpp +++ b/src/model/SubSurface.hpp @@ -289,6 +289,13 @@ namespace model { // DLM: todo add methods to create light shelves by projection factor + //@} + /** @name Queries */ + //@{ + + /** Gets the fenestration value from the sql file **/ + boost::optional getFenestrationValue(std::string columnName) const; + protected: /// @cond typedef detail::SubSurface_Impl ImplType; diff --git a/src/model/SubSurface_Impl.hpp b/src/model/SubSurface_Impl.hpp index 71e46a8cded..4b2ebce0c7b 100644 --- a/src/model/SubSurface_Impl.hpp +++ b/src/model/SubSurface_Impl.hpp @@ -307,6 +307,13 @@ namespace model { boost::optional airflowNetworkSurface() const; + //@} + /** @name Queries */ + //@{ + + /** Gets the fenestration value from the sql file **/ + boost::optional getFenestrationValue(std::string columnName) const; + protected: private: friend class openstudio::model::SubSurface; diff --git a/src/utilities/sql/SqlFile.cpp b/src/utilities/sql/SqlFile.cpp index 58a7fdc2c95..cc1d6e57fab 100644 --- a/src/utilities/sql/SqlFile.cpp +++ b/src/utilities/sql/SqlFile.cpp @@ -1385,26 +1385,34 @@ bool SqlFile::hasIlluminanceMapYear() const { return true; } -boost::optional SqlFile::assemblyUFactor(const std::string& rowName) const { +boost::optional SqlFile::getFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const { boost::optional result; if (m_impl) { - result = m_impl->assemblyUFactor(rowName); + result = m_impl->getFenestrationValue(subSurfaceName, columnName); } return result; } -boost::optional SqlFile::assemblySHGC(const std::string& rowName) const { +boost::optional SqlFile::assemblyUFactor(const std::string& subSurfaceName) const { boost::optional result; if (m_impl) { - result = m_impl->assemblySHGC(rowName); + result = m_impl->assemblyUFactor(subSurfaceName); } return result; } -boost::optional SqlFile::assemblyVisibleTransmittance(const std::string& rowName) const { +boost::optional SqlFile::assemblySHGC(const std::string& subSurfaceName) const { boost::optional result; if (m_impl) { - result = m_impl->assemblyVisibleTransmittance(rowName); + result = m_impl->assemblySHGC(subSurfaceName); + } + return result; +} + +boost::optional SqlFile::assemblyVisibleTransmittance(const std::string& subSurfaceName) const { + boost::optional result; + if (m_impl) { + result = m_impl->assemblyVisibleTransmittance(subSurfaceName); } return result; } diff --git a/src/utilities/sql/SqlFile.hpp b/src/utilities/sql/SqlFile.hpp index 881c8fb2e25..f1d186f7cf7 100644 --- a/src/utilities/sql/SqlFile.hpp +++ b/src/utilities/sql/SqlFile.hpp @@ -111,13 +111,16 @@ class UTILITIES_API SqlFile // Check if the SqlFile contains 'Year' field for DaylightMapHourlyReports (added Year in 9.2.0) bool hasIlluminanceMapYear() const; - // return an Assembly U-Factor value for matching rowName - boost::optional assemblyUFactor(const std::string& rowName) const; + // return a fenestration value for matching subSurfaceName (RowName) and columnName + boost::optional getFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const; - // return an Assembly SHGC value for matching rowName - boost::optional assemblySHGC(const std::string& rowName) const; + // return an Assembly U-Factor value for matching subSurfaceName (RowName) + boost::optional assemblyUFactor(const std::string& subSurfaceName) const; - // return an Assembly Visible Transmittance value for matching rowName + // return an Assembly SHGC value for matching subSurfaceName (RowName) + boost::optional assemblySHGC(const std::string& subSurfaceName) const; + + // return an Assembly Visible Transmittance value for matching subSurfaceName (RowName) boost::optional assemblyVisibleTransmittance(const std::string& rowName) const; /// close the file diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index c163a265cae..512436dc00c 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -499,81 +499,33 @@ namespace detail { return m_hasIlluminanceMapYear; } - boost::optional SqlFile_Impl::assemblyUFactor(const std::string& rowName) const { - boost::optional result; - - // Get the object name and transform to the way it is recorded - // in the sql file - std::string queryRowName = boost::to_upper_copy(rowName); - - std::string s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Exterior Fenestration' - AND RowName=? - AND ColumnName='Assembly U-Factor')"; - - boost::optional d = execAndReturnFirstDouble(s, queryRowName); - - if (!d) { - std::string s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Interior Fenestration' - AND RowName=? - AND ColumnName='Assembly U-Factor')"; - - d = execAndReturnFirstDouble(s, queryRowName); - } - - return d; + boost::optional SqlFile_Impl::assemblyUFactor(const std::string& subSurfaceName) const { + return getFenestrationValue(subSurfaceName, "Assembly U-Factor"); } - boost::optional SqlFile_Impl::assemblySHGC(const std::string& rowName) const { - boost::optional result; - - // Get the object name and transform to the way it is recorded - // in the sql file - std::string queryRowName = boost::to_upper_copy(rowName); - - std::string s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Exterior Fenestration' - AND RowName=? - AND ColumnName='Assembly SHGC')"; - - boost::optional d = execAndReturnFirstDouble(s, queryRowName); - - if (!d) { - std::string s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Interior Fenestration' - AND RowName=? - AND ColumnName='Assembly SHGC')"; - - d = execAndReturnFirstDouble(s, queryRowName); - } + boost::optional SqlFile_Impl::assemblySHGC(const std::string& subSurfaceName) const { + return getFenestrationValue(subSurfaceName, "Assembly SHGC"); + } - return d; + boost::optional SqlFile_Impl::assemblyVisibleTransmittance(const std::string& subSurfaceName) const { + return getFenestrationValue(subSurfaceName, "Assembly Visible Transmittance"); } - boost::optional SqlFile_Impl::assemblyVisibleTransmittance(const std::string& rowName) const { + boost::optional SqlFile_Impl::getFenestrationValue(const std::string& subSurfaceName, const std::string columnName) const { boost::optional result; // Get the object name and transform to the way it is recorded // in the sql file - std::string queryRowName = boost::to_upper_copy(rowName); + std::string queryRowName = boost::to_upper_copy(subSurfaceName); std::string s = R"(SELECT Value FROM TabularDataWithStrings WHERE ReportName='EnvelopeSummary' AND ReportForString='Entire Facility' AND TableName='Exterior Fenestration' AND RowName=? - AND ColumnName='Assembly Visible Transmittance')"; + AND ColumnName=?)"; - boost::optional d = execAndReturnFirstDouble(s, queryRowName); + boost::optional d = execAndReturnFirstDouble(s, queryRowName, columnName); if (!d) { std::string s = R"(SELECT Value FROM TabularDataWithStrings @@ -581,9 +533,9 @@ namespace detail { AND ReportForString='Entire Facility' AND TableName='Interior Fenestration' AND RowName=? - AND ColumnName='Assembly Visible Transmittance')"; + AND ColumnName=?)"; - d = execAndReturnFirstDouble(s, queryRowName); + d = execAndReturnFirstDouble(s, queryRowName, columnName); } return d; diff --git a/src/utilities/sql/SqlFile_Impl.hpp b/src/utilities/sql/SqlFile_Impl.hpp index 50653d7ce89..104f52a7857 100644 --- a/src/utilities/sql/SqlFile_Impl.hpp +++ b/src/utilities/sql/SqlFile_Impl.hpp @@ -755,14 +755,17 @@ namespace detail { // DaylightMapHourlyReports added Year in 9.2.0 bool hasIlluminanceMapYear() const; - // return an Assembly U-Factor value for matching rowName - boost::optional assemblyUFactor(const std::string& rowName) const; + // return a fenestration value for matching subSurfaceName (RowName) and columnName + boost::optional getFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const; - // return an Assembly SHGC value for matching rowName - boost::optional assemblySHGC(const std::string& rowName) const; + // return an Assembly U-Factor value for matching subSurfaceName (RowName) + boost::optional assemblyUFactor(const std::string& subSurfaceName) const; - // return an Assembly Visible Transmittance value for matching rowName - boost::optional assemblyVisibleTransmittance(const std::string& rowName) const; + // return an Assembly SHGC value for matching subSurfaceName (RowName) + boost::optional assemblySHGC(const std::string& subSurfaceName) const; + + // return an Assembly Visible Transmittance value for matching subSurfaceName (RowName) + boost::optional assemblyVisibleTransmittance(const std::string& subSurfaceName) const; private: void init(); diff --git a/src/utilities/sql/Test/SqlFile_GTest.cpp b/src/utilities/sql/Test/SqlFile_GTest.cpp index 300dfac18a1..0e46a56a6e1 100644 --- a/src/utilities/sql/Test/SqlFile_GTest.cpp +++ b/src/utilities/sql/Test/SqlFile_GTest.cpp @@ -822,4 +822,4 @@ TEST_F(SqlFileFixture, 4403_FenestrationAssembly) { ASSERT_TRUE(sqlFile.assemblyVisibleTransmittance("Story 1 Core Space Exterior Wall Window")); EXPECT_EQ(0.440, sqlFile.assemblyVisibleTransmittance("Story 1 Core Space Exterior Wall Window").get()); -} \ No newline at end of file +} From a522174756938ed1716b14941f4938d8d179165a Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 14 Mar 2022 14:32:43 -0700 Subject: [PATCH 09/13] Typo. --- src/utilities/sql/SqlFile_Impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index 512436dc00c..a9447460448 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -511,7 +511,7 @@ namespace detail { return getFenestrationValue(subSurfaceName, "Assembly Visible Transmittance"); } - boost::optional SqlFile_Impl::getFenestrationValue(const std::string& subSurfaceName, const std::string columnName) const { + boost::optional SqlFile_Impl::getFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const { boost::optional result; // Get the object name and transform to the way it is recorded From 2903f6d443ddd84194c278a9ae082b93ad8590dd Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 15 Mar 2022 10:59:03 -0700 Subject: [PATCH 10/13] Remove query for interior fenestration. --- src/model/SubSurface.cpp | 15 ++------------- src/utilities/sql/SqlFile_Impl.cpp | 15 ++------------- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/src/model/SubSurface.cpp b/src/model/SubSurface.cpp index 4386767d4fb..7b583c1dbc8 100644 --- a/src/model/SubSurface.cpp +++ b/src/model/SubSurface.cpp @@ -1383,20 +1383,9 @@ namespace model { AND RowName=? AND ColumnName=?)"; - boost::optional d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); + result = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); - if (!d) { - std::string s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Interior Fenestration' - AND RowName=? - AND ColumnName=?)"; - - d = model().sqlFile().get().execAndReturnFirstDouble(s, rowName, columnName); - } - - return d; + return result; } } // namespace detail diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index a9447460448..537f2223ad0 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -525,20 +525,9 @@ namespace detail { AND RowName=? AND ColumnName=?)"; - boost::optional d = execAndReturnFirstDouble(s, queryRowName, columnName); + result = execAndReturnFirstDouble(s, queryRowName, columnName); - if (!d) { - std::string s = R"(SELECT Value FROM TabularDataWithStrings - WHERE ReportName='EnvelopeSummary' - AND ReportForString='Entire Facility' - AND TableName='Interior Fenestration' - AND RowName=? - AND ColumnName=?)"; - - d = execAndReturnFirstDouble(s, queryRowName, columnName); - } - - return d; + return result; } bool SqlFile_Impl::isValidConnection() { From 0dcb09c879d85093206bbe715fddd735093d3267 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 15 Mar 2022 12:58:13 -0700 Subject: [PATCH 11/13] Method name change. --- src/model/SubSurface.cpp | 8 ++++---- src/model/SubSurface.hpp | 2 +- src/model/SubSurface_Impl.hpp | 2 +- src/utilities/sql/SqlFile.cpp | 4 ++-- src/utilities/sql/SqlFile.hpp | 2 +- src/utilities/sql/SqlFile_Impl.cpp | 8 ++++---- src/utilities/sql/SqlFile_Impl.hpp | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/model/SubSurface.cpp b/src/model/SubSurface.cpp index 7b583c1dbc8..059e87ce9ca 100644 --- a/src/model/SubSurface.cpp +++ b/src/model/SubSurface.cpp @@ -1344,19 +1344,19 @@ namespace model { } boost::optional SubSurface_Impl::assemblyUFactor() const { - return getFenestrationValue("Assembly U-Factor"); + return getExteriorFenestrationValue("Assembly U-Factor"); } boost::optional SubSurface_Impl::assemblySHGC() const { - return getFenestrationValue("Assembly SHGC"); + return getExteriorFenestrationValue("Assembly SHGC"); } boost::optional SubSurface_Impl::assemblyVisibleTransmittance() const { - return getFenestrationValue("Assembly Visible Transmittance"); + return getExteriorFenestrationValue("Assembly Visible Transmittance"); } /** Gets the fenestration value from the sql file **/ - boost::optional SubSurface_Impl::getFenestrationValue(std::string columnName) const { + boost::optional SubSurface_Impl::getExteriorFenestrationValue(std::string columnName) const { boost::optional result; // Get the object name diff --git a/src/model/SubSurface.hpp b/src/model/SubSurface.hpp index b9146995e87..e0d4104008a 100644 --- a/src/model/SubSurface.hpp +++ b/src/model/SubSurface.hpp @@ -294,7 +294,7 @@ namespace model { //@{ /** Gets the fenestration value from the sql file **/ - boost::optional getFenestrationValue(std::string columnName) const; + boost::optional getExteriorFenestrationValue(std::string columnName) const; protected: /// @cond diff --git a/src/model/SubSurface_Impl.hpp b/src/model/SubSurface_Impl.hpp index 4b2ebce0c7b..c2caa310308 100644 --- a/src/model/SubSurface_Impl.hpp +++ b/src/model/SubSurface_Impl.hpp @@ -312,7 +312,7 @@ namespace model { //@{ /** Gets the fenestration value from the sql file **/ - boost::optional getFenestrationValue(std::string columnName) const; + boost::optional getExteriorFenestrationValue(std::string columnName) const; protected: private: diff --git a/src/utilities/sql/SqlFile.cpp b/src/utilities/sql/SqlFile.cpp index cc1d6e57fab..ba0624729ed 100644 --- a/src/utilities/sql/SqlFile.cpp +++ b/src/utilities/sql/SqlFile.cpp @@ -1385,10 +1385,10 @@ bool SqlFile::hasIlluminanceMapYear() const { return true; } -boost::optional SqlFile::getFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const { +boost::optional SqlFile::getExteriorFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const { boost::optional result; if (m_impl) { - result = m_impl->getFenestrationValue(subSurfaceName, columnName); + result = m_impl->getExteriorFenestrationValue(subSurfaceName, columnName); } return result; } diff --git a/src/utilities/sql/SqlFile.hpp b/src/utilities/sql/SqlFile.hpp index f1d186f7cf7..d936b1b4293 100644 --- a/src/utilities/sql/SqlFile.hpp +++ b/src/utilities/sql/SqlFile.hpp @@ -112,7 +112,7 @@ class UTILITIES_API SqlFile bool hasIlluminanceMapYear() const; // return a fenestration value for matching subSurfaceName (RowName) and columnName - boost::optional getFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const; + boost::optional getExteriorFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const; // return an Assembly U-Factor value for matching subSurfaceName (RowName) boost::optional assemblyUFactor(const std::string& subSurfaceName) const; diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp index 537f2223ad0..5b11cc7a1e6 100644 --- a/src/utilities/sql/SqlFile_Impl.cpp +++ b/src/utilities/sql/SqlFile_Impl.cpp @@ -500,18 +500,18 @@ namespace detail { } boost::optional SqlFile_Impl::assemblyUFactor(const std::string& subSurfaceName) const { - return getFenestrationValue(subSurfaceName, "Assembly U-Factor"); + return getExteriorFenestrationValue(subSurfaceName, "Assembly U-Factor"); } boost::optional SqlFile_Impl::assemblySHGC(const std::string& subSurfaceName) const { - return getFenestrationValue(subSurfaceName, "Assembly SHGC"); + return getExteriorFenestrationValue(subSurfaceName, "Assembly SHGC"); } boost::optional SqlFile_Impl::assemblyVisibleTransmittance(const std::string& subSurfaceName) const { - return getFenestrationValue(subSurfaceName, "Assembly Visible Transmittance"); + return getExteriorFenestrationValue(subSurfaceName, "Assembly Visible Transmittance"); } - boost::optional SqlFile_Impl::getFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const { + boost::optional SqlFile_Impl::getExteriorFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const { boost::optional result; // Get the object name and transform to the way it is recorded diff --git a/src/utilities/sql/SqlFile_Impl.hpp b/src/utilities/sql/SqlFile_Impl.hpp index 104f52a7857..b64f1d29032 100644 --- a/src/utilities/sql/SqlFile_Impl.hpp +++ b/src/utilities/sql/SqlFile_Impl.hpp @@ -756,7 +756,7 @@ namespace detail { bool hasIlluminanceMapYear() const; // return a fenestration value for matching subSurfaceName (RowName) and columnName - boost::optional getFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const; + boost::optional getExteriorFenestrationValue(const std::string& subSurfaceName, const std::string& columnName) const; // return an Assembly U-Factor value for matching subSurfaceName (RowName) boost::optional assemblyUFactor(const std::string& subSurfaceName) const; From 39e45e785c6d28c951fd88c50394f77331d63062 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 15 Mar 2022 16:04:34 -0700 Subject: [PATCH 12/13] Missed a name update. --- src/model/SubSurface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/SubSurface.cpp b/src/model/SubSurface.cpp index 059e87ce9ca..d07f75c1947 100644 --- a/src/model/SubSurface.cpp +++ b/src/model/SubSurface.cpp @@ -1817,7 +1817,7 @@ namespace model { } /** Gets the fenestration value from the sql file **/ - boost::optional SubSurface::getFenestrationValue(std::string columnName) const { + boost::optional SubSurface::getExteriorFenestrationValue(std::string columnName) const { return getImpl()->getFenestrationValue(columnName); } From b3d13c09872308e4e7283cdf199ae5442b6557a2 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Wed, 16 Mar 2022 07:48:28 -0700 Subject: [PATCH 13/13] Another name update. --- src/model/SubSurface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/SubSurface.cpp b/src/model/SubSurface.cpp index d07f75c1947..3cdda9b41ed 100644 --- a/src/model/SubSurface.cpp +++ b/src/model/SubSurface.cpp @@ -1818,7 +1818,7 @@ namespace model { /** Gets the fenestration value from the sql file **/ boost::optional SubSurface::getExteriorFenestrationValue(std::string columnName) const { - return getImpl()->getFenestrationValue(columnName); + return getImpl()->getExteriorFenestrationValue(columnName); } } // namespace model