diff --git a/design/FY2022/EnergyPlusOutputCSVFormatting_NFP.md b/design/FY2022/EnergyPlusOutputCSVFormatting_NFP.md new file mode 100644 index 00000000000..9836e198977 --- /dev/null +++ b/design/FY2022/EnergyPlusOutputCSVFormatting_NFP.md @@ -0,0 +1,111 @@ +# EnergyPlus Output CSV Formatting (RVI/MVI) # + +**Brett Bass, Mark Adams** + +**Oak Ridge National Laboratory** + +- Date: April 7, 2022 + +## Justification for new feature ## + +--- +EnergyPlus output CSV format does not currently allow for ordering of reporting or meter variables or specification of variable units. + +## Overview ## + +--- + +The EnergyPlus native CSV output is a useful new feature but it eliminates the need for “ReadVarsESO”. “ReadVarsESO” previously had the capability to use “.rvi” or “.mvi” file types. The “.rvi” file was used to order and filter the reporting variables while the “.mvi” was used to order and filter meter variables. A need for unit conversions in the native CSV output has also been raised. This was previously possible using the convertESOMTR executable. +These new features will address these deficiencies in the native CSV output by adding “rvi”, “mvi”, “CSV:Style” objects which can be used to: + +- Filter and order the output reporting (rvi) and meter variables (mvi) +- Convert output units (CSV:Style) + +## Approach ## + +--- + +This new feature will be added through and execution of these subtasks: + +1. Create three new EnergyPlus input objects (rvi, mvi, ouput units) +2. Properly read and integrate new EnergyPlus input objects +3. Add filtering and sorting mechanism based on rvi and mvi input object +4. Add ability to convert units between SI and imperial units to “CSVWriter::parseTSOutputs” based on output unit input object +5. Create unit tests to ensure that column order and unit conversions are correct +6. Document changes + +## Testing/Validation/Data Sources ## + +--- +Additions will be made to the Input Output Reference for the mvi, rvi, and output unit objects. + +## Input Description ## + +--- + +``` +OutputControl:RVI, + \extensible:1 + \memo Determine order of CSV output reporting variables + \unique-object + A1, \field Key Name 1 + \begin-extensible + A2, \field Key Name 2 + A3, \field Key Name 3 + A4, \field Key Name 4 + A5, \field Key Name 5 + A6, \field Key Name 6 + A7, \field Key Name 7 + A8, \field Key Name 8 + A9, \field Key Name 9 + A10; \field Key Name 10 + +OutputControl:MVI, + \extensible:1 + \memo Determine order of CSV output meter variables + \unique-object + A1, \field Key Name 1 + \begin-extensible + A2, \field Key Name 2 + A3, \field Key Name 3 + A4, \field Key Name 4 + A5, \field Key Name 5 + A6, \field Key Name 6 + A7, \field Key Name 7 + A8, \field Key Name 8 + A9, \field Key Name 9 + A10; \field Key Name 10 + +OutputControl:CSV:Style, + \memo Unit conversions on reporting and meter variables + \unique-object + A1; \field Unit Conversion + \type choice + \key None + \key JtoKWH + \key JtoMJ + \key JtoGJ + \key InchPound + \default None +``` + +## Outputs Description ## + +--- +The order of output reporting and meter variables in the CSV output and the units of the CSV output may change based on the rvi, mvi, and output unit input objects. + +## Engineering Reference ## + +--- +There will be no change to the Engineering Reference as only column order and units will be changed with this new feature. + +## Example File and Transition Changes ## + +--- +Suitable example file will be generated to demonstrate the ability to change output CSV column order and units + +## References ## + +--- + +NA diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index db79b098c14..16d338eee59 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -105095,6 +105095,55 @@ Meter:CustomDecrement, A47; \field Output Variable or Meter Name 22 +OutputControl:RVI, + \extensible:1 + \memo Determine order of CSV output reporting variables + \unique-object + A1, \field Key Name 1 + \begin-extensible + A2, \field Key Name 2 + A3, \field Key Name 3 + A4, \field Key Name 4 + A5, \field Key Name 5 + A6, \field Key Name 6 + A7, \field Key Name 7 + A8, \field Key Name 8 + A9, \field Key Name 9 + A10; \field Key Name 10 + + +OutputControl:MVI, + \extensible:1 + \memo Determine order of CSV output meter variables + \unique-object + A1, \field Key Name 1 + \begin-extensible + A2, \field Key Name 2 + A3, \field Key Name 3 + A4, \field Key Name 4 + A5, \field Key Name 5 + A6, \field Key Name 6 + A7, \field Key Name 7 + A8, \field Key Name 8 + A9, \field Key Name 9 + A10; \field Key Name 10 + +OutputControl:Timestamp, + \memo Control timestamp format, currently applies only to JSON and CSV + \unique-object + A1, \field ISO 8601 Format + \note Use the ISO 8601 format YYYY-MM-DDThh:mm:ss + \type choice + \key Yes + \key No + \default No + A2; \field Timestamp at end of interval + \note Determines where the timestamp is produced, either at the beginning (No) or end (Yes) of the interval + \type choice + \key Yes + \key No + \default Yes + OutputControl:Files, \memo Conditionally turn on/off output from EnergyPlus. \unique-object diff --git a/scripts/dev/generate_epJSON_schema/modify_schema.py b/scripts/dev/generate_epJSON_schema/modify_schema.py index e0eecf749a8..9125d4f56f3 100644 --- a/scripts/dev/generate_epJSON_schema/modify_schema.py +++ b/scripts/dev/generate_epJSON_schema/modify_schema.py @@ -183,6 +183,8 @@ def isInt(s): 'PythonPlugin:Variables': 'global_py_vars', 'PythonPlugin:SearchPaths': 'py_search_paths', 'Output:Diagnostics': 'diagnostics', + 'OutputControl:RVI': 'output_variables', + 'OutputControl:MVI': 'output_meters' } remaining_objects = [ 'Site:SpectrumData', diff --git a/src/EnergyPlus/IOFiles.cc b/src/EnergyPlus/IOFiles.cc index e86ed2f7f91..9e0f50e2534 100644 --- a/src/EnergyPlus/IOFiles.cc +++ b/src/EnergyPlus/IOFiles.cc @@ -52,6 +52,7 @@ #include "FileSystem.hh" #include "InputProcessing/EmbeddedEpJSONSchema.hh" #include "InputProcessing/InputProcessor.hh" +#include "ResultsFramework.hh" #include "UtilityRoutines.hh" #include @@ -442,6 +443,67 @@ void IOFiles::OutputControl::getInput(EnergyPlusData &state) } } } + + auto &ip = state.dataInputProcessing->inputProcessor; + auto const rvi_instances = ip->epJSON.find("OutputControl:RVI"); + if (rvi_instances != ip->epJSON.end()) { + auto const &objectSchemaProps = ip->getObjectSchemaProps(state, "OutputControl:RVI"); + auto const &instancesValue = rvi_instances.value(); + for (auto instance = instancesValue.begin(); instance != instancesValue.end(); ++instance) { + auto const &fields = instance.value(); + ip->markObjectAsUsed("OutputControl:RVI", instance.key()); + + auto extensibles = fields.find("output_variables"); + if (extensibles != fields.end()) { + auto const &extensionSchemaProps = objectSchemaProps["output_variables"]["items"]["properties"]; + auto const &extensiblesArray = extensibles.value(); + rviKeyNames.reserve(extensiblesArray.size()); + for (auto extensibleInstance = extensiblesArray.begin(); extensibleInstance != extensiblesArray.end(); ++extensibleInstance) { + rviKeyNames.emplace_back(ip->getAlphaFieldValue(extensibleInstance.value(), extensionSchemaProps, "key_name")); + } + } + } + } + + auto const mvi_instances = ip->epJSON.find("OutputControl:MVI"); + if (mvi_instances != ip->epJSON.end()) { + auto const &objectSchemaProps = ip->getObjectSchemaProps(state, "OutputControl:MVI"); + auto const &instancesValue = mvi_instances.value(); + for (auto instance = instancesValue.begin(); instance != instancesValue.end(); ++instance) { + auto const &fields = instance.value(); + ip->markObjectAsUsed("OutputControl:MVI", instance.key()); + + auto extensibles = fields.find("output_meters"); + if (extensibles != fields.end()) { + auto const &extensionSchemaProps = objectSchemaProps["output_meters"]["items"]["properties"]; + auto const &extensiblesArray = extensibles.value(); + mviKeyNames.reserve(extensiblesArray.size()); + for (auto extensibleInstance = extensiblesArray.begin(); extensibleInstance != extensiblesArray.end(); ++extensibleInstance) { + mviKeyNames.emplace_back(ip->getAlphaFieldValue(extensibleInstance.value(), extensionSchemaProps, "key_name")); + } + } + } + } + + auto const timestamp_instances = ip->epJSON.find("OutputControl:Timestamp"); + if (timestamp_instances != ip->epJSON.end()) { + auto const &objectSchemaProps = ip->getObjectSchemaProps(state, "OutputControl:Timestamp"); + auto const &instancesValue = timestamp_instances.value(); + for (auto instance = instancesValue.begin(); instance != instancesValue.end(); ++instance) { + auto const &fields = instance.value(); + ip->markObjectAsUsed("OutputControl:Timestamp", instance.key()); + + auto item = fields.find("iso_8601_format"); + if (item != fields.end()) { + state.dataResultsFramework->resultsFramework->setISO8601(item->get() == "Yes"); + } + + item = fields.find("timestamp_at_end_of_interval"); + if (item != fields.end()) { + state.dataResultsFramework->resultsFramework->setStartOfInterval(item->get() == "Yes"); + } + } + } } void IOFiles::flushAll() diff --git a/src/EnergyPlus/IOFiles.hh b/src/EnergyPlus/IOFiles.hh index 41048914d55..766fc8d34b6 100644 --- a/src/EnergyPlus/IOFiles.hh +++ b/src/EnergyPlus/IOFiles.hh @@ -701,6 +701,9 @@ public: bool json = true; bool tabular = true; bool sqlite = true; + + std::vector rviKeyNames; + std::vector mviKeyNames; }; OutputControl outputControl; diff --git a/src/EnergyPlus/OutputProcessor.cc b/src/EnergyPlus/OutputProcessor.cc index ddcd5c66ac9..d5beee4ab0d 100644 --- a/src/EnergyPlus/OutputProcessor.cc +++ b/src/EnergyPlus/OutputProcessor.cc @@ -2465,7 +2465,7 @@ namespace OutputProcessor { ScheduleManager::dayTypeNames[CurDayType]); if (state.dataResultsFramework->resultsFramework->TSMeters.rDataFrameEnabled()) { state.dataResultsFramework->resultsFramework->TSMeters.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, EndMinute); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, EndMinute, state.dataGlobal->CalendarYear); } PrintTimeStamp = false; PrintTimeStampToSQL = false; @@ -2573,7 +2573,7 @@ namespace OutputProcessor { ScheduleManager::dayTypeNames[CurDayType]); if (state.dataResultsFramework->resultsFramework->HRMeters.rDataFrameEnabled()) { state.dataResultsFramework->resultsFramework->HRMeters.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } PrintTimeStamp = false; PrintTimeStampToSQL = false; @@ -2656,7 +2656,7 @@ namespace OutputProcessor { ScheduleManager::dayTypeNames[CurDayType]); if (state.dataResultsFramework->resultsFramework->DYMeters.rDataFrameEnabled()) { state.dataResultsFramework->resultsFramework->DYMeters.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } PrintTimeStamp = false; PrintTimeStampToSQL = false; @@ -2729,7 +2729,7 @@ namespace OutputProcessor { state.dataEnvrn->Month); if (state.dataResultsFramework->resultsFramework->MNMeters.rDataFrameEnabled()) { state.dataResultsFramework->resultsFramework->MNMeters.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } PrintTimeStamp = false; PrintTimeStampToSQL = false; @@ -2795,7 +2795,7 @@ namespace OutputProcessor { state, state.files.mtr, op->YearlyStampReportChr, state.dataGlobal->CalendarYearChr, PrintTimeStamp && PrintTimeStampToSQL); if (state.dataResultsFramework->resultsFramework->YRMeters.rDataFrameEnabled()) { state.dataResultsFramework->resultsFramework->YRMeters.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } PrintTimeStamp = false; PrintTimeStampToSQL = false; @@ -2872,7 +2872,7 @@ namespace OutputProcessor { PrintTimeStamp && PrintTimeStampToSQL); if (state.dataResultsFramework->resultsFramework->SMMeters.rDataFrameEnabled()) { state.dataResultsFramework->resultsFramework->SMMeters.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } PrintTimeStamp = false; PrintTimeStampToSQL = false; @@ -4991,13 +4991,19 @@ void UpdateDataandReport(EnergyPlusData &state, OutputProcessor::TimeStepType co if (state.dataResultsFramework->resultsFramework->timeSeriesEnabled()) { if (t_TimeStepTypeKey == TimeStepType::Zone) { - state.dataResultsFramework->resultsFramework->RIDetailedZoneTSData.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, op->TimeValue.at(TimeStepType::Zone).CurMinute); + state.dataResultsFramework->resultsFramework->RIDetailedZoneTSData.newRow(state.dataEnvrn->Month, + state.dataEnvrn->DayOfMonth, + state.dataGlobal->HourOfDay, + op->TimeValue.at(TimeStepType::Zone).CurMinute, + state.dataGlobal->CalendarYear); } if (t_TimeStepTypeKey == TimeStepType::System) { // TODO this was an error probably, was using TimeValue(1) - state.dataResultsFramework->resultsFramework->RIDetailedHVACTSData.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, op->TimeValue.at(TimeStepType::System).CurMinute); + state.dataResultsFramework->resultsFramework->RIDetailedHVACTSData.newRow(state.dataEnvrn->Month, + state.dataEnvrn->DayOfMonth, + state.dataGlobal->HourOfDay, + op->TimeValue.at(TimeStepType::System).CurMinute, + state.dataGlobal->CalendarYear); } } @@ -5187,8 +5193,11 @@ void UpdateDataandReport(EnergyPlusData &state, OutputProcessor::TimeStepType co state.dataResultsFramework->resultsFramework->initializeITSDataFrame( ReportingFrequency::TimeStep, op->IVariableTypes, op->NumOfIVariable); } - state.dataResultsFramework->resultsFramework->RITimestepTSData.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, op->TimeValue.at(TimeStepType::Zone).CurMinute); + state.dataResultsFramework->resultsFramework->RITimestepTSData.newRow(state.dataEnvrn->Month, + state.dataEnvrn->DayOfMonth, + state.dataGlobal->HourOfDay, + op->TimeValue.at(TimeStepType::Zone).CurMinute, + state.dataGlobal->CalendarYear); } for (auto &thisTimeStepType : {TimeStepType::Zone, TimeStepType::System}) { // Zone, HVAC @@ -5358,7 +5367,7 @@ void UpdateDataandReport(EnergyPlusData &state, OutputProcessor::TimeStepType co ReportingFrequency::Hourly, op->IVariableTypes, op->NumOfIVariable); } state.dataResultsFramework->resultsFramework->RIHourlyTSData.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } for (auto &thisTimeStepType : {TimeStepType::Zone, TimeStepType::System}) { // Zone, HVAC @@ -5461,7 +5470,7 @@ void UpdateDataandReport(EnergyPlusData &state, OutputProcessor::TimeStepType co ReportingFrequency::Daily, op->IVariableTypes, op->NumOfIVariable); } state.dataResultsFramework->resultsFramework->RIDailyTSData.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } op->NumHoursInMonth += 24; @@ -5510,7 +5519,7 @@ void UpdateDataandReport(EnergyPlusData &state, OutputProcessor::TimeStepType co ReportingFrequency::Monthly, op->IVariableTypes, op->NumOfIVariable); } state.dataResultsFramework->resultsFramework->RIMonthlyTSData.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } op->NumHoursInSim += op->NumHoursInMonth; @@ -5557,7 +5566,7 @@ void UpdateDataandReport(EnergyPlusData &state, OutputProcessor::TimeStepType co ReportingFrequency::Simulation, op->IVariableTypes, op->NumOfIVariable); } state.dataResultsFramework->resultsFramework->RIRunPeriodTSData.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } for (auto &thisTimeStepType : {TimeStepType::Zone, TimeStepType::System}) { // Zone, HVAC for (int Loop = 1; Loop <= op->NumOfRVariable; ++Loop) { @@ -5594,7 +5603,7 @@ void UpdateDataandReport(EnergyPlusData &state, OutputProcessor::TimeStepType co ReportingFrequency::Yearly, op->IVariableTypes, op->NumOfIVariable); } state.dataResultsFramework->resultsFramework->RIYearlyTSData.newRow( - state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0); + state.dataEnvrn->Month, state.dataEnvrn->DayOfMonth, state.dataGlobal->HourOfDay, 0, state.dataGlobal->CalendarYear); } for (auto &thisTimeStepType : {TimeStepType::Zone, TimeStepType::System}) { // Zone, HVAC for (int Loop = 1; Loop <= op->NumOfRVariable; ++Loop) { diff --git a/src/EnergyPlus/ResultsFramework.cc b/src/EnergyPlus/ResultsFramework.cc index d5454bba9a2..e647a5f37e6 100644 --- a/src/EnergyPlus/ResultsFramework.cc +++ b/src/EnergyPlus/ResultsFramework.cc @@ -377,7 +377,7 @@ namespace ResultsFramework { return variableMap.at(lastVarID); } - void DataFrame::newRow(const int month, const int dayOfMonth, int hourOfDay, int curMin) + void DataFrame::newRow(const int month, const int dayOfMonth, int hourOfDay, int curMin, int calendarYear) { if (curMin > 0) { hourOfDay -= 1; @@ -387,9 +387,21 @@ namespace ResultsFramework { hourOfDay += 1; } + if (startOfInterval) { + if (hourOfDay == 24) { + hourOfDay = 0; + } + std::swap(hourOfDay, lastHour); + std::swap(curMin, lastMinute); + } // future start of ISO 8601 datetime output // fmt::format("YYYY-{:02d}/{:02d}T{:02d}:{:02d}:00", month, dayOfMonth, hourOfDay, curMin); - TS.emplace_back(fmt::format("{:02d}/{:02d} {:02d}:{:02d}:00", month, dayOfMonth, hourOfDay, curMin)); + // fmt::format("{:02d}/{:02d} {:02d}:{:02d}:00", month, dayOfMonth, hourOfDay, curMin); + if (iso8601) { + TS.emplace_back(fmt::format("{:04d}-{:02d}-{:02d}T{:02d}:{:02d}:00", calendarYear, month, dayOfMonth, hourOfDay, curMin)); + } else { + TS.emplace_back(fmt::format("{:02d}/{:02d} {:02d}:{:02d}:00", month, dayOfMonth, hourOfDay, curMin)); + } } // void DataFrame::newRow(const std::string &ts) @@ -737,10 +749,7 @@ namespace ResultsFramework { return root; } - void CSVWriter::parseTSOutputs(EnergyPlusData &state, - json const &data, - std::vector const &outputVariables, - OutputProcessor::ReportingFrequency reportingFrequency) + void CSVWriter::parseTSOutputs(EnergyPlusData &state, json const &data, OutputProcessor::ReportingFrequency reportingFrequency) { if (data.empty()) return; updateReportingFrequency(reportingFrequency); @@ -748,25 +757,36 @@ namespace ResultsFramework { std::unordered_set seen; std::string search_string; + std::vector keyNameToOutputData(keyNames.size()); + std::string reportFrequency = data.at("ReportFrequency").get(); if (reportFrequency == "Detailed-HVAC" || reportFrequency == "Detailed-Zone") { reportFrequency = "Each Call"; } + auto const &columns = data.at("Cols"); + int column_index = 0; for (auto const &column : columns) { search_string = fmt::format("{0} [{1}]({2})", column.at("Variable").get(), column.at("Units").get(), reportFrequency); - auto found = std::find(outputVariables.begin(), outputVariables.end(), search_string); + auto found = outputVariables.find(search_string); if (found == outputVariables.end()) { search_string = fmt::format("{0} [{1}]({2})", column.at("Variable").get(), column.at("Units").get(), "Each Call"); - found = std::find(outputVariables.begin(), outputVariables.end(), search_string); + found = outputVariables.find(search_string); } - if (found == outputVariables.end()) { + + if (found != outputVariables.end()) { + outputVariableIndices[found->second] = true; + indices.emplace_back(found->second); + auto const keyNameIndex = outputVariableIndexToKeyNameIndexMapping[found->second]; + if (keyNameIndex != -1) { + keyNameToOutputData[keyNameIndex] = column_index; + } + } else { ShowFatalError(state, fmt::format("Output variable ({0}) not found output variable list", search_string)); } - outputVariableIndices[std::distance(outputVariables.begin(), found)] = true; - indices.emplace_back(std::distance(outputVariables.begin(), found)); + ++column_index; } auto const &rows = data.at("Rows"); @@ -774,26 +794,27 @@ namespace ResultsFramework { for (auto &el : row.items()) { auto found_key = outputs.find(el.key()); if (found_key == outputs.end()) { - std::vector output(outputVariables.size()); - int i = 0; - for (auto const &col : el.value()) { - if (col.is_null()) { - output[indices[i]] = ""; - } else { + std::vector output(keyNames.size(), ""); + for (int i = 0; i < keyNames.size(); ++i) { + auto const &col = el.value()[keyNameToOutputData[i]]; + if (!col.is_null()) { dtoa(col.get(), s); - output[indices[i]] = s; + output[i] = s; } - ++i; } outputs[el.key()] = output; } else { int i = 0; for (auto const &col : el.value()) { - if (col.is_null()) { - found_key->second[indices[i]] = ""; - } else { - dtoa(col.get(), s); - found_key->second[indices[i]] = s; + int const outputIndex = outputVariableIndexToKeyNameIndexMapping[indices[i]]; + assert(outputIndex < keyNames.size()); + if (outputIndex != -1) { + if (col.is_null()) { + found_key->second[outputIndex] = ""; + } else { + dtoa(col.get(), s); + found_key->second[outputIndex] = s; + } } ++i; } @@ -832,49 +853,43 @@ namespace ResultsFramework { time = datetime.substr(pos); } if (time != " 24:00:00") { - ShowFatalError(state, "Monthly output variables should occur at the end of the day."); + ShowFatalError(state, "Monthly output variables should occur at the end of the day."); // This seems like a developer error -> assert } datetime = months.find(month)->second; return datetime; } - void - CSVWriter::writeOutput(EnergyPlusData &state, std::vector const &outputVariables, InputOutputFile &outputFile, bool outputControl) + void CSVWriter::writeOutput(EnergyPlusData &state, InputOutputFile &outputFile, bool outputControl, bool rewriteTimestamp) { outputFile.ensure_open(state, "OpenOutputFiles", outputControl); + std::vector keyNameToOutputs; print(outputFile, "{}", "Date/Time,"); std::string sep; - for (auto it = outputVariables.begin(); it != outputVariables.end(); ++it) { - if (!outputVariableIndices[std::distance(outputVariables.begin(), it)]) continue; - print(outputFile, "{}{}", sep, *it); + for (auto const &keyName : keyNames) { + print(outputFile, "{}{}", sep, keyName); if (sep.empty()) sep = ","; } + print(outputFile, "{}", '\n'); for (auto &item : outputs) { std::string datetime = item.first; - if (smallestReportingFrequency < OutputProcessor::ReportingFrequency::Monthly) { - datetime = datetime.replace(datetime.find(' '), 1, " "); - } else { - convertToMonth(state, datetime); + if (rewriteTimestamp) { + if (smallestReportingFrequency < OutputProcessor::ReportingFrequency::Monthly) { + datetime = datetime.replace(datetime.find(' '), 1, " "); + } else { + convertToMonth(state, datetime); + } } print(outputFile, " {},", datetime); - item.second.erase(std::remove_if(item.second.begin(), - item.second.end(), - [&](const std::string &d) { - auto pos = (&d - &*item.second.begin()); - return !outputVariableIndices[pos]; - }), - item.second.end()); - auto result = std::find_if(item.second.rbegin(), item.second.rend(), [](std::string const &v) { return !v.empty(); }); - auto last = item.second.end() - 1; - if (result != item.second.rend()) { - last = (result + 1).base(); - } - print(outputFile, "{},", fmt::join(item.second.begin(), last, ",")); - print(outputFile, "{}\n", *last); + sep = ""; + for (auto &data : item.second) { + print(outputFile, "{}{}", sep, data); + if (sep.empty()) sep = ","; + } + print(outputFile, "{}", '\n'); } outputFile.close(); @@ -1319,82 +1334,83 @@ namespace ResultsFramework { if (!hasOutputData()) { return; } - CSVWriter csv(outputVariables.size()); - CSVWriter mtr_csv(outputVariables.size()); + + CSVWriter csv(state.files.outputControl.rviKeyNames, outputVariables, outputVariableKeyNames); + CSVWriter mtr_csv(state.files.outputControl.mviKeyNames, outputVariables, outputVariableKeyNames); // Output yearly time series data if (hasRIYearlyTSData()) { - csv.parseTSOutputs(state, RIYearlyTSData.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Yearly); + csv.parseTSOutputs(state, RIYearlyTSData.getJSON(), OutputProcessor::ReportingFrequency::Yearly); } if (hasYRMeters()) { - csv.parseTSOutputs(state, YRMeters.getJSON(true), outputVariables, OutputProcessor::ReportingFrequency::Yearly); - mtr_csv.parseTSOutputs(state, YRMeters.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Yearly); + csv.parseTSOutputs(state, YRMeters.getJSON(true), OutputProcessor::ReportingFrequency::Yearly); + mtr_csv.parseTSOutputs(state, YRMeters.getJSON(), OutputProcessor::ReportingFrequency::Yearly); } // Output run period time series data if (hasRIRunPeriodTSData()) { - csv.parseTSOutputs(state, RIRunPeriodTSData.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Simulation); + csv.parseTSOutputs(state, RIRunPeriodTSData.getJSON(), OutputProcessor::ReportingFrequency::Simulation); } if (hasSMMeters()) { - csv.parseTSOutputs(state, SMMeters.getJSON(true), outputVariables, OutputProcessor::ReportingFrequency::Simulation); - mtr_csv.parseTSOutputs(state, SMMeters.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Simulation); + csv.parseTSOutputs(state, SMMeters.getJSON(true), OutputProcessor::ReportingFrequency::Simulation); + mtr_csv.parseTSOutputs(state, SMMeters.getJSON(), OutputProcessor::ReportingFrequency::Simulation); } // Output monthly time series data if (hasRIMonthlyTSData()) { - csv.parseTSOutputs(state, RIMonthlyTSData.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Monthly); + csv.parseTSOutputs(state, RIMonthlyTSData.getJSON(), OutputProcessor::ReportingFrequency::Monthly); } if (hasMNMeters()) { - csv.parseTSOutputs(state, MNMeters.getJSON(true), outputVariables, OutputProcessor::ReportingFrequency::Monthly); - mtr_csv.parseTSOutputs(state, MNMeters.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Monthly); + csv.parseTSOutputs(state, MNMeters.getJSON(true), OutputProcessor::ReportingFrequency::Monthly); + mtr_csv.parseTSOutputs(state, MNMeters.getJSON(), OutputProcessor::ReportingFrequency::Monthly); } // Output daily time series data if (hasRIDailyTSData()) { - csv.parseTSOutputs(state, RIDailyTSData.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Daily); + csv.parseTSOutputs(state, RIDailyTSData.getJSON(), OutputProcessor::ReportingFrequency::Daily); } if (hasDYMeters()) { - csv.parseTSOutputs(state, DYMeters.getJSON(true), outputVariables, OutputProcessor::ReportingFrequency::Daily); - mtr_csv.parseTSOutputs(state, DYMeters.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Daily); + csv.parseTSOutputs(state, DYMeters.getJSON(true), OutputProcessor::ReportingFrequency::Daily); + mtr_csv.parseTSOutputs(state, DYMeters.getJSON(), OutputProcessor::ReportingFrequency::Daily); } // Output hourly time series data if (hasRIHourlyTSData()) { - csv.parseTSOutputs(state, RIHourlyTSData.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Hourly); + csv.parseTSOutputs(state, RIHourlyTSData.getJSON(), OutputProcessor::ReportingFrequency::Hourly); } if (hasHRMeters()) { - csv.parseTSOutputs(state, HRMeters.getJSON(true), outputVariables, OutputProcessor::ReportingFrequency::Hourly); - mtr_csv.parseTSOutputs(state, HRMeters.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::Hourly); + csv.parseTSOutputs(state, HRMeters.getJSON(true), OutputProcessor::ReportingFrequency::Hourly); + mtr_csv.parseTSOutputs(state, HRMeters.getJSON(), OutputProcessor::ReportingFrequency::Hourly); } // Output timestep time series data if (hasRITimestepTSData()) { - csv.parseTSOutputs(state, RITimestepTSData.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::TimeStep); + csv.parseTSOutputs(state, RITimestepTSData.getJSON(), OutputProcessor::ReportingFrequency::TimeStep); } if (hasTSMeters()) { - csv.parseTSOutputs(state, TSMeters.getJSON(true), outputVariables, OutputProcessor::ReportingFrequency::TimeStep); - mtr_csv.parseTSOutputs(state, TSMeters.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::TimeStep); + csv.parseTSOutputs(state, TSMeters.getJSON(true), OutputProcessor::ReportingFrequency::TimeStep); + mtr_csv.parseTSOutputs(state, TSMeters.getJSON(), OutputProcessor::ReportingFrequency::TimeStep); } // Output detailed HVAC time series data if (hasRIDetailedHVACTSData()) { - csv.parseTSOutputs(state, RIDetailedHVACTSData.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::EachCall); + csv.parseTSOutputs(state, RIDetailedHVACTSData.getJSON(), OutputProcessor::ReportingFrequency::EachCall); } // Output detailed Zone time series data if (hasRIDetailedZoneTSData()) { - csv.parseTSOutputs(state, RIDetailedZoneTSData.getJSON(), outputVariables, OutputProcessor::ReportingFrequency::EachCall); + csv.parseTSOutputs(state, RIDetailedZoneTSData.getJSON(), OutputProcessor::ReportingFrequency::EachCall); } - csv.writeOutput(state, outputVariables, state.files.csv, state.files.outputControl.csv); + csv.writeOutput(state, state.files.csv, state.files.outputControl.csv, rewriteTimestamp); if (hasMeterData()) { - mtr_csv.writeOutput(state, outputVariables, state.files.mtr_csv, state.files.outputControl.csv); + mtr_csv.writeOutput(state, state.files.mtr_csv, state.files.outputControl.csv, rewriteTimestamp); } } @@ -1557,13 +1573,34 @@ namespace ResultsFramework { std::string const &units, OutputProcessor::ReportingFrequency const reportingInterval) { - outputVariables.emplace_back(fmt::format("{0}:{1} [{2}]({3})", keyedValue, variableName, units, reportingFrequency(reportingInterval))); + auto const reportVariable = fmt::format("{0}:{1} [{2}]({3})", keyedValue, variableName, units, reportingFrequency(reportingInterval)); + outputVariables.emplace_back(reportVariable); + + std::string outputVariableKeyName(variableName.begin(), variableName.end()); + std::transform(variableName.begin(), variableName.end(), outputVariableKeyName.begin(), ::tolower); + auto it = outputVariableKeyNames.find(outputVariableKeyName); + if (it != outputVariableKeyNames.end()) { + it->second.emplace_back(reportVariable); + } else { + outputVariableKeyNames.emplace(outputVariableKeyName, std::vector({reportVariable})); + } } - void - ResultsFramework::addReportMeter(std::string const &meter, std::string const &units, OutputProcessor::ReportingFrequency const reportingInterval) + void ResultsFramework::addReportMeter(std::string_view const meter, + std::string const &units, + OutputProcessor::ReportingFrequency const reportingInterval) { - outputVariables.emplace_back(fmt::format("{0} [{1}]({2})", meter, units, reportingFrequency(reportingInterval))); + auto const meterVariable = fmt::format("{0} [{1}]({2})", meter, units, reportingFrequency(reportingInterval)); + outputVariables.emplace_back(meterVariable); + + std::string outputVariableKeyName(meter.begin(), meter.end()); + std::transform(meter.begin(), meter.end(), outputVariableKeyName.begin(), ::tolower); + auto it = outputVariableKeyNames.find(outputVariableKeyName); + if (it != outputVariableKeyNames.end()) { + it->second.emplace_back(meterVariable); + } else { + outputVariableKeyNames.emplace(outputVariableKeyName, std::vector({meterVariable})); + } } } // namespace ResultsFramework diff --git a/src/EnergyPlus/ResultsFramework.hh b/src/EnergyPlus/ResultsFramework.hh index 637d53dab3a..d45e8222ebd 100644 --- a/src/EnergyPlus/ResultsFramework.hh +++ b/src/EnergyPlus/ResultsFramework.hh @@ -83,14 +83,18 @@ namespace ResultsFramework { class BaseResultObject { public: - BaseResultObject(){}; + BaseResultObject() = default; + virtual ~BaseResultObject() = default; }; class SimInfo : public BaseResultObject { public: + SimInfo() = default; + ~SimInfo() override = default; + void setProgramVersion(const std::string &programVersion); - std::string getProgramVersion() const; + [[nodiscard]] std::string getProgramVersion() const; void setSimulationEnvironment(const std::string &simulationEnvironment); void setInputModelURI(const std::string &inputModelURI); void setStartDateTimeStamp(const std::string &startDateTimeStamp); @@ -98,7 +102,7 @@ namespace ResultsFramework { void setNumErrorsWarmup(const std::string &numWarningsDuringWarmup, const std::string &numSevereDuringWarmup); void setNumErrorsSizing(const std::string &numWarningsDuringSizing, const std::string &numSevereDuringSizing); void setNumErrorsSummary(const std::string &numWarnings, const std::string &numSevere); - json getJSON() const; + [[nodiscard]] json getJSON() const; protected: std::string ProgramVersion; @@ -113,6 +117,7 @@ namespace ResultsFramework { { public: Variable() = default; + ~Variable() override = default; Variable(const std::string &VarName, const OutputProcessor::ReportingFrequency reportFrequency, const OutputProcessor::TimeStepType timeStepType, @@ -125,30 +130,30 @@ namespace ResultsFramework { OutputProcessor::Unit units, const std::string &customUnits); - std::string variableName() const; + [[nodiscard]] std::string variableName() const; void setVariableName(const std::string &VarName); - std::string sReportFrequency() const; - OutputProcessor::ReportingFrequency iReportFrequency() const; + [[nodiscard]] std::string sReportFrequency() const; + [[nodiscard]] OutputProcessor::ReportingFrequency iReportFrequency() const; void setReportFrequency(const OutputProcessor::ReportingFrequency reportFrequency); - OutputProcessor::TimeStepType timeStepType() const; + [[nodiscard]] OutputProcessor::TimeStepType timeStepType() const; void setTimeStepType(const OutputProcessor::TimeStepType timeStepType); - int reportID() const; + [[nodiscard]] int reportID() const; void setReportID(const int Id); - OutputProcessor::Unit units() const; + [[nodiscard]] OutputProcessor::Unit units() const; void setUnits(OutputProcessor::Unit units); - std::string customUnits() const; + [[nodiscard]] std::string customUnits() const; void setCustomUnits(const std::string &customUnits); void pushValue(const double val); - double value(size_t index) const; - size_t numValues() const; + [[nodiscard]] double value(size_t index) const; + [[nodiscard]] size_t numValues() const; - virtual json getJSON() const; + [[nodiscard]] virtual json getJSON() const; protected: std::string varName; @@ -156,7 +161,7 @@ namespace ResultsFramework { OutputProcessor::ReportingFrequency iReportFreq = OutputProcessor::ReportingFrequency::EachCall; OutputProcessor::TimeStepType m_timeStepType = OutputProcessor::TimeStepType::Zone; int rptID = -1; - OutputProcessor::Unit Units; + OutputProcessor::Unit Units = OutputProcessor::Unit::unknown; std::string m_customUnits; std::vector Values; }; @@ -176,6 +181,7 @@ namespace ResultsFramework { const int ReportID, OutputProcessor::Unit units, const std::string &customUnits); + ~OutputVariable() override = default; }; class MeterVariable : public Variable @@ -188,13 +194,14 @@ namespace ResultsFramework { OutputProcessor::Unit units, const bool MeterOnly, const bool Acculumative = false); + ~MeterVariable() override = default; - bool accumulative() const; + [[nodiscard]] bool accumulative() const; void setAccumulative(bool state); - bool meterOnly() const; + [[nodiscard]] bool meterOnly() const; void setMeterOnly(bool state); - json getJSON() const override; + [[nodiscard]] json getJSON() const override; protected: bool acc = false; @@ -207,38 +214,43 @@ namespace ResultsFramework { typedef std::pair VarPtrPair; explicit DataFrame(const std::string &ReportFreq); - virtual ~DataFrame() = default; + ~DataFrame() override = default; void addVariable(Variable const &var); void setRDataFrameEnabled(bool state); void setIDataFrameEnabled(bool state); - bool rDataFrameEnabled() const; - bool iDataFrameEnabled() const; + [[nodiscard]] bool rDataFrameEnabled() const; + [[nodiscard]] bool iDataFrameEnabled() const; void setRVariablesScanned(bool state); void setIVariablesScanned(bool state); - bool rVariablesScanned() const; - bool iVariablesScanned() const; + [[nodiscard]] bool rVariablesScanned() const; + [[nodiscard]] bool iVariablesScanned() const; - void newRow(const int month, const int dayOfMonth, int hourOfDay, int curMin); + void newRow(const int month, const int dayOfMonth, int hourOfDay, int curMin, int calendarYear); // void newRow(const std::string &ts); virtual void pushVariableValue(const int reportID, double value); Variable &lastVariable(); - json getVariablesJSON(); - json getJSON() const; + [[nodiscard]] json getVariablesJSON(); + [[nodiscard]] json getJSON() const; void writeReport(JsonOutputFilePaths &jsonOutputFilePaths, bool outputJSON, bool outputCBOR, bool outputMsgPack); + bool iso8601 = false; + bool startOfInterval = false; + protected: bool IDataFrameEnabled = false; bool RDataFrameEnabled = false; bool RVariablesScanned = false; bool IVariablesScanned = false; + int lastHour = 0; + int lastMinute = 0; std::string ReportFrequency; std::vector TS; std::map variableMap; @@ -249,13 +261,13 @@ namespace ResultsFramework { { public: explicit MeterDataFrame(const std::string &ReportFreq) : DataFrame(ReportFreq){}; - virtual ~MeterDataFrame() = default; + ~MeterDataFrame() override = default; void addVariable(MeterVariable const &var); void pushVariableValue(const int reportID, double value) override; - json getJSON(bool meterOnlyCheck = false) const; + [[nodiscard]] json getJSON(bool meterOnlyCheck = false) const; protected: std::map meterMap; @@ -264,6 +276,9 @@ namespace ResultsFramework { class Table : public BaseResultObject { public: + Table() = default; + ~Table() override = default; + std::string TableName; std::string FootnoteText; std::vector ColHeaders; @@ -276,7 +291,7 @@ namespace ResultsFramework { std::string const &tableName, std::string const &footnoteText); - json getJSON() const; + [[nodiscard]] json getJSON() const; }; class Report : public BaseResultObject @@ -286,7 +301,10 @@ namespace ResultsFramework { std::string ReportForString; std::vector Tables; - json getJSON() const; + Report() = default; + ~Report() override = default; + + [[nodiscard]] json getJSON() const; }; class ReportsCollection : public BaseResultObject @@ -295,6 +313,7 @@ namespace ResultsFramework { typedef std::pair RptPtrPair; ReportsCollection(); + ~ReportsCollection() override = default; void addReportTable(Array2D_string const &body, Array1D_string const &rowLabels, @@ -311,7 +330,7 @@ namespace ResultsFramework { std::string const &tableName, std::string const &footnoteText); - json getJSON() const; + [[nodiscard]] json getJSON() const; protected: std::unordered_map reportsMap; @@ -322,16 +341,44 @@ namespace ResultsFramework { { public: CSVWriter() = default; - explicit CSVWriter(std::size_t num_output_variables) + ~CSVWriter() override = default; + + CSVWriter(std::vector const &key_names, + std::vector const &output_variables, + std::map> const &outputVariableKeyNames) { - outputVariableIndices = std::vector(num_output_variables, false); + outputVariableIndices = std::vector(output_variables.size(), false); + outputVariableIndexToKeyNameIndexMapping = std::vector(output_variables.size(), -1); + for (std::size_t i = 0; i < output_variables.size(); ++i) { + outputVariables.emplace(output_variables[i], i); + } + + int index = 0; + for (auto const &keyName : key_names) { + + auto exact_match = outputVariables.find(keyName); + if (exact_match != outputVariables.end()) { + keyNames.emplace_back(exact_match->first); + outputVariableIndexToKeyNameIndexMapping[exact_match->second] = index; + ++index; + continue; + } + + std::string lowerKeyName = keyName; + std::transform(keyName.begin(), keyName.end(), lowerKeyName.begin(), ::tolower); + auto it = outputVariableKeyNames.find(lowerKeyName); + if (it != outputVariableKeyNames.end()) { + for (auto const &outputVariableIndex : it->second) { + outputVariableIndexToKeyNameIndexMapping[outputVariables.at(outputVariableIndex)] = index; + keyNames.emplace_back(outputVariableIndex); + ++index; + } + } + } } - void writeOutput(EnergyPlusData &state, std::vector const &outputVariables, InputOutputFile &outputFile, bool outputControl); - void parseTSOutputs(EnergyPlusData &state, - json const &data, - std::vector const &outputVariables, - OutputProcessor::ReportingFrequency reportingFrequency); + void writeOutput(EnergyPlusData &state, InputOutputFile &outputFile, bool outputControl, bool rewriteTimestamp = false); + void parseTSOutputs(EnergyPlusData &state, json const &data, OutputProcessor::ReportingFrequency reportingFrequency); private: friend class EnergyPlus::EnergyPlusFixture; @@ -341,11 +388,12 @@ namespace ResultsFramework { OutputProcessor::ReportingFrequency smallestReportingFrequency = OutputProcessor::ReportingFrequency::Yearly; std::map> outputs; std::vector outputVariableIndices; + std::map outputVariables; + std::vector keyNames; + std::vector outputVariableIndexToKeyNameIndexMapping; static std::string &convertToMonth(EnergyPlusData &state, std::string &datetime); void updateReportingFrequency(OutputProcessor::ReportingFrequency reportingFrequency); - // void readRVI(); - // void readMVI(); }; class ResultsFramework : public BaseResultObject @@ -353,19 +401,19 @@ namespace ResultsFramework { public: ResultsFramework() = default; - virtual ~ResultsFramework() = default; + ~ResultsFramework() override = default; void setupOutputOptions(EnergyPlusData &state); - bool timeSeriesEnabled() const; + [[nodiscard]] bool timeSeriesEnabled() const; - bool timeSeriesAndTabularEnabled() const; + [[nodiscard]] bool timeSeriesAndTabularEnabled() const; - bool JSONEnabled() const; + [[nodiscard]] bool JSONEnabled() const; - bool CBOREnabled() const; + [[nodiscard]] bool CBOREnabled() const; - bool MsgPackEnabled() const; + [[nodiscard]] bool MsgPackEnabled() const; void initializeRTSDataFrame(const OutputProcessor::ReportingFrequency reportFrequency, const Array1D &RVariableTypes, @@ -394,6 +442,43 @@ namespace ResultsFramework { MeterDataFrame SMMeters = MeterDataFrame("RunPeriod"); MeterDataFrame YRMeters = MeterDataFrame("Yearly"); + void setISO8601(const bool value) + { + rewriteTimestamp = !value; + RIDetailedZoneTSData.iso8601 = value; + RIDetailedHVACTSData.iso8601 = value; + RITimestepTSData.iso8601 = value; + RIHourlyTSData.iso8601 = value; + RIDailyTSData.iso8601 = value; + RIMonthlyTSData.iso8601 = value; + RIRunPeriodTSData.iso8601 = value; + RIYearlyTSData.iso8601 = value; + TSMeters.iso8601 = value; + HRMeters.iso8601 = value; + DYMeters.iso8601 = value; + MNMeters.iso8601 = value; + SMMeters.iso8601 = value; + YRMeters.iso8601 = value; + } + + void setStartOfInterval(const bool value) + { + RIDetailedZoneTSData.startOfInterval = value; + RIDetailedHVACTSData.startOfInterval = value; + RITimestepTSData.startOfInterval = value; + RIHourlyTSData.startOfInterval = value; + RIDailyTSData.startOfInterval = value; + RIMonthlyTSData.startOfInterval = value; + RIRunPeriodTSData.startOfInterval = value; + RIYearlyTSData.startOfInterval = value; + TSMeters.startOfInterval = value; + HRMeters.startOfInterval = value; + DYMeters.startOfInterval = value; + MNMeters.startOfInterval = value; + SMMeters.startOfInterval = value; + YRMeters.startOfInterval = value; + } + void writeOutputs(EnergyPlusData &state); void addReportVariable(std::string_view const keyedValue, @@ -401,7 +486,7 @@ namespace ResultsFramework { std::string const &units, OutputProcessor::ReportingFrequency const reportingInterval); - void addReportMeter(std::string const &meter, std::string const &units, OutputProcessor::ReportingFrequency const reportingInterval); + void addReportMeter(std::string_view const meter, std::string const &units, OutputProcessor::ReportingFrequency const reportingInterval); SimInfo SimulationInformation; @@ -415,7 +500,9 @@ namespace ResultsFramework { bool outputJSON = false; bool outputCBOR = false; bool outputMsgPack = false; + bool rewriteTimestamp = true; // Convert monthly data timestamp to month name std::vector outputVariables; + std::map> outputVariableKeyNames; void writeTimeSeriesReports(JsonOutputFilePaths &jsonOutputFilePaths); @@ -428,88 +515,88 @@ namespace ResultsFramework { friend class EnergyPlus::ResultsFrameworkFixture; protected: - inline bool hasRIDetailedZoneTSData() const + [[nodiscard]] inline bool hasRIDetailedZoneTSData() const { return RIDetailedZoneTSData.iDataFrameEnabled() || RIDetailedZoneTSData.rDataFrameEnabled(); }; - inline bool hasRIDetailedHVACTSData() const + [[nodiscard]] inline bool hasRIDetailedHVACTSData() const { return RIDetailedHVACTSData.iDataFrameEnabled() || RIDetailedHVACTSData.rDataFrameEnabled(); }; - inline bool hasRITimestepTSData() const + [[nodiscard]] inline bool hasRITimestepTSData() const { return RITimestepTSData.iDataFrameEnabled() || RITimestepTSData.rDataFrameEnabled(); }; - inline bool hasRIHourlyTSData() const + [[nodiscard]] inline bool hasRIHourlyTSData() const { return RIHourlyTSData.iDataFrameEnabled() || RIHourlyTSData.rDataFrameEnabled(); }; - inline bool hasRIDailyTSData() const + [[nodiscard]] inline bool hasRIDailyTSData() const { return RIDailyTSData.iDataFrameEnabled() || RIDailyTSData.rDataFrameEnabled(); }; - inline bool hasRIMonthlyTSData() const + [[nodiscard]] inline bool hasRIMonthlyTSData() const { return RIMonthlyTSData.iDataFrameEnabled() || RIMonthlyTSData.rDataFrameEnabled(); }; - inline bool hasRIRunPeriodTSData() const + [[nodiscard]] inline bool hasRIRunPeriodTSData() const { return RIRunPeriodTSData.iDataFrameEnabled() || RIRunPeriodTSData.rDataFrameEnabled(); }; - inline bool hasRIYearlyTSData() const + [[nodiscard]] inline bool hasRIYearlyTSData() const { return RIYearlyTSData.iDataFrameEnabled() || RIYearlyTSData.rDataFrameEnabled(); }; - inline bool hasTSMeters() const + [[nodiscard]] inline bool hasTSMeters() const { return TSMeters.rDataFrameEnabled(); }; - inline bool hasHRMeters() const + [[nodiscard]] inline bool hasHRMeters() const { return HRMeters.rDataFrameEnabled(); }; - inline bool hasDYMeters() const + [[nodiscard]] inline bool hasDYMeters() const { return DYMeters.rDataFrameEnabled(); }; - inline bool hasMNMeters() const + [[nodiscard]] inline bool hasMNMeters() const { return MNMeters.rDataFrameEnabled(); }; - inline bool hasSMMeters() const + [[nodiscard]] inline bool hasSMMeters() const { return SMMeters.rDataFrameEnabled(); }; - inline bool hasYRMeters() const + [[nodiscard]] inline bool hasYRMeters() const { return YRMeters.rDataFrameEnabled(); }; - inline bool hasMeterData() const + [[nodiscard]] inline bool hasMeterData() const { return hasTSMeters() || hasHRMeters() || hasDYMeters() || hasMNMeters() || hasSMMeters() || hasYRMeters(); }; - inline bool hasTSData() const + [[nodiscard]] inline bool hasTSData() const { return hasRIDetailedZoneTSData() || hasRIDetailedHVACTSData() || hasRITimestepTSData() || hasRIHourlyTSData() || hasRIDailyTSData() || hasRIMonthlyTSData() || hasRIRunPeriodTSData() || hasRIYearlyTSData(); }; - inline bool hasOutputData() const + [[nodiscard]] inline bool hasOutputData() const { return hasTSData() || hasMeterData(); }; diff --git a/testfiles/5ZoneVAV-Pri-SecLoop_rvi_mvi.idf b/testfiles/5ZoneVAV-Pri-SecLoop_rvi_mvi.idf new file mode 100644 index 00000000000..ecd87732aa6 --- /dev/null +++ b/testfiles/5ZoneVAV-Pri-SecLoop_rvi_mvi.idf @@ -0,0 +1,3669 @@ +!-Generator IDFEditor 1.34 +!-Option OriginalOrderTop UseSpecialFormat +!-NOTE: All comments with '!-' are ignored by the IDFEditor and are generated automatically. +!- Use '!' comments if they need to be retained when using the IDFEditor. +! 5ZoneVAV-TwowayCommonPipe.idf +! Basic file description: 1 story building divided into 4 exterior and one interior conditioned zones and return plenum +! illustrates the use of primary-secondary chilled water loops with different primary and secondary setpoints. +! Highlights: Primary-Secondary chilled water loops, controlled to different setpoints. +! +! Simulation Location/Run: CHICAGO_IL_USA TMY2-94846, 2 design days, 2 run periods, +! Run Control executes the run periods using the weather file +! +! Location: Chicago, IL +! +! Design Days: CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C +! CHICAGO_IL_USA Annual Cooling 1% Design Conditions, MaxDB= 31.5°C MCWB= 23.0°C +! +! Run Period (Weather File): Winter 1/14, Summer 7/7, CHICAGO_IL_USA TMY2-94846 +! +! Run Control: Zone and System sizing with weather file run control (no design days run) +! +! Building: Single floor rectangular building 100 ft x 50 ft. 5 zones - 4 exterior, 1 interior, zone height 8 feet. +! Exterior zone depth is 12 feet. There is a 2 foot high return plenum: the overall building height is +! 10 feet. There are windows on all 4 facades; the south and north facades have glass doors. +! The south facing glass is shaded by overhangs. The walls are woodshingle over plywood, R11 insulation, +! and gypboard. The roof is a gravel built up roof with R-3 mineral board insulation and plywood sheathing. +! The windows are of various single and double pane construction with 3mm and 6mm glass and either 6mm or +! 13mm argon or air gap. The window to wall ratio is approximately 0.29. +! The south wall and door have overhangs. +! +! The building is oriented 30 degrees east of north. +! +! Floor Area: 463.6 m2 (5000 ft2) +! Number of Stories: 1 +! +! Zone Description Details: +! +! (0,15.2,0) (30.5,15.2,0) +! _____ ________ ____ +! |\ *** **************** /| +! | \ / | +! | \ (26.8,11.6,0) / | +! * \_____________________________/ * +! * |(3.7,11.6,0) | * +! * | | * +! * | | * +! * | (26.8,3.7,0)| * +! * |___________________________| * +! * / (3.7,3.7,0) \ * +! | / \ | +! | / \ | +! |/___******************___***________\| +! | Overhang | | +! |_______________________| | window/door = * +! |___| +! +! (0,0,0) (30.5,0,0) +! +! Internal gains description: lighting is 1.5 watts/ft2, office equip is 1.0 watts/ft2. There is 1 occupant +! per 100 ft2 of floor area. The infiltration is 0.25 air changes per hour. +! +! Interzone Surfaces: 6 interzone surfaces (see diagram) +! Internal Mass: None +! People: 50 +! Lights: 7500 W +! Windows: 4 ea.: 1) Double pane clear, 3mm glass, 13mm air gap +! 2) Double pane clear, 3mm glass, 13mm argon gap +! 3) Double pane clear, 6mm glass, 6mm air gap +! 4) Double pane lowE, 6mm lowE glass outside, 6mm air gap, 6mm clear glass +! +! Doors: 2 ea.: Single pane grey, 3mm glass +! +! Detached Shading: None +! Daylight: None +! Natural Ventilation: None +! Compact Schedules: Yes +! +! HVAC: Fan powered VAV system with outside air economizer, hot water reheat coils, +! central chilled water cooling coil. Central Plant is single hot water +! boiler, electric compression chiller with air cooled condenser. +! Primary-secondary chilled water loops. Primary controlled to 5.0C, +! and secondary controlled to 7.22C using twoway common pipe. +! All equipment is autosized except the primary loop equipment. +! +! Zonal Equipment: No +! Central Air Handling Equipment: Yes +! System Equipment Autosize: Yes +! Purchased Cooling: None +! Purchased Heating: None +! Coils: Yes +! Pumps: Yes +! Boilers: Yes +! Chillers: Yes +! +! Results: +! Standard Reports: None +! Timestep or Hourly Variables: Hourly +! Time bins Report: None +! HTML Report: None +! Environmental Emissions: None +! Utility Tariffs: None + + Version,22.2; + + ShadowCalculation,,,30; + + Building, + Building, !- Name + 30., !- North Axis {deg} + City, !- Terrain + 0.04, !- Loads Convergence Tolerance Value {W} + 0.4, !- Temperature Convergence Tolerance Value {deltaC} + FullExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + Timestep,4; + + SurfaceConvectionAlgorithm:Inside,TARP; + + SurfaceConvectionAlgorithm:Outside,DOE-2; + + HeatBalanceAlgorithm,ConductionTransferFunction; + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + CounterClockWise, !- Vertex Entry Direction + Relative; !- Coordinate System + + ScheduleTypeLimits, + Any Number; !- Name + + ScheduleTypeLimits, + Fraction, !- Name + 0.0, !- Lower Limit Value + 1.0, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + CONTINUOUS, !- Numeric Type + Temperature; !- Unit Type + + ScheduleTypeLimits, + Control Type, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + FlowRate, !- Name + 0.0, !- Lower Limit Value + 10, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + RunPeriod, + Run Period 1, !- Name + 1, !- Begin Month + 14, !- Begin Day of Month + , !- Begin Year + 1, !- End Month + 14, !- End Day of Month + , !- End Year + Tuesday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + + RunPeriod, + Run Period 2, !- Name + 7, !- Begin Month + 7, !- Begin Day of Month + , !- Begin Year + 7, !- End Month + 7, !- End Day of Month + , !- End Year + Tuesday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + +! + + Site:Location, + CHICAGO_IL_USA TMY2-94846, !- Name + 41.78, !- Latitude {deg} + -87.75, !- Longitude {deg} + -6.00, !- Time Zone {hr} + 190.00; !- Elevation {m} + + SimulationControl, + Yes, !- Do Zone Sizing Calculation + Yes, !- Do System Sizing Calculation + Yes, !- Do Plant Sizing Calculation + No, !- Run Simulation for Sizing Periods + Yes, !- Run Simulation for Weather File Run Periods + No, !- Do HVAC Sizing Simulation for Sizing Periods + 1; !- Maximum Number of HVAC Sizing Simulation Passes + +! CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C + + SizingPeriod:DesignDay, + CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -17.3, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -17.3, !- 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} + 99063., !- 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.0; !- Sky Clearness + +! CHICAGO_IL_USA Annual Cooling 1% Design Conditions, MaxDB= 31.5°C MCWB= 23.0°C + + SizingPeriod:DesignDay, + CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 31.5, !- Maximum Dry-Bulb Temperature {C} + 10.7, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 23.0, !- 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} + 99063., !- Barometric Pressure {Pa} + 5.3, !- Wind Speed {m/s} + 230, !- 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} + 1.0; !- Sky Clearness + + Site:GroundTemperature:BuildingSurface,21.5,21.4,21.5,21.5,22.0,22.9,23.0,23.1,23.1,22.2,21.7,21.6; + + Material, + WD10, !- Name + MediumSmooth, !- Roughness + 0.667, !- Thickness {m} + 0.115, !- Conductivity {W/m-K} + 513, !- Density {kg/m3} + 1381, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.78, !- Solar Absorptance + 0.78; !- Visible Absorptance + + Material, + RG01, !- Name + Rough, !- Roughness + 1.2700000E-02, !- Thickness {m} + 1.442000, !- Conductivity {W/m-K} + 881.0000, !- Density {kg/m3} + 1674.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + + Material, + BR01, !- Name + VeryRough, !- Roughness + 9.4999997E-03, !- Thickness {m} + 0.1620000, !- Conductivity {W/m-K} + 1121.000, !- Density {kg/m3} + 1464.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.7000000; !- Visible Absorptance + + Material, + IN46, !- Name + VeryRough, !- Roughness + 7.6200001E-02, !- Thickness {m} + 2.3000000E-02, !- Conductivity {W/m-K} + 24.00000, !- Density {kg/m3} + 1590.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.5000000, !- Solar Absorptance + 0.5000000; !- Visible Absorptance + + Material, + WD01, !- Name + MediumSmooth, !- Roughness + 1.9099999E-02, !- Thickness {m} + 0.1150000, !- Conductivity {W/m-K} + 513.0000, !- Density {kg/m3} + 1381.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7800000, !- Solar Absorptance + 0.7800000; !- Visible Absorptance + + Material, + PW03, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 0.1150000, !- Conductivity {W/m-K} + 545.0000, !- Density {kg/m3} + 1213.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7800000, !- Solar Absorptance + 0.7800000; !- Visible Absorptance + + Material, + IN02, !- Name + Rough, !- Roughness + 9.0099998E-02, !- Thickness {m} + 4.3000001E-02, !- Conductivity {W/m-K} + 10.00000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + GP01, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 0.1600000, !- Conductivity {W/m-K} + 801.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + GP02, !- Name + MediumSmooth, !- Roughness + 1.5900001E-02, !- Thickness {m} + 0.1600000, !- Conductivity {W/m-K} + 801.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + CC03, !- Name + MediumRough, !- Roughness + 0.1016000, !- Thickness {m} + 1.310000, !- Conductivity {W/m-K} + 2243.000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + + Material:NoMass, + CP01, !- Name + Rough, !- Roughness + 0.3670000, !- Thermal Resistance {m2-K/W} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material:NoMass, + MAT-SB-U, !- Name + Rough, !- Roughness + 0.117406666, !- Thermal Resistance {m2-K/W} + 0.65, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material:NoMass, + MAT-CLNG-1, !- Name + Rough, !- Roughness + 0.652259290, !- Thermal Resistance {m2-K/W} + 0.65, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material:NoMass, + MAT-FLOOR-1, !- Name + Rough, !- Roughness + 3.522199631, !- Thermal Resistance {m2-K/W} + 0.65, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material:AirGap, + AL21, !- Name + 0.1570000; !- Thermal Resistance {m2-K/W} + + Material:AirGap, + AL23, !- Name + 0.1530000; !- Thermal Resistance {m2-K/W} + + Construction, + ROOF-1, !- Name + RG01, !- Outside Layer + BR01, !- Layer 2 + IN46, !- Layer 3 + WD01; !- Layer 4 + + Construction, + WALL-1, !- Name + WD01, !- Outside Layer + PW03, !- Layer 2 + IN02, !- Layer 3 + GP01; !- Layer 4 + + Construction, + CLNG-1, !- Name + MAT-CLNG-1; !- Outside Layer + + Construction, + FLOOR-SLAB-1, !- Name + CC03; !- Outside Layer + + Construction, + INT-WALL-1, !- Name + GP02, !- Outside Layer + AL21, !- Layer 2 + GP02; !- Layer 3 + + WindowMaterial:Gas, + AIR 6MM, !- Name + Air, !- Gas Type + 0.0063; !- Thickness {m} + + WindowMaterial:Gas, + AIR 13MM, !- Name + Air, !- Gas Type + 0.0127; !- Thickness {m} + + WindowMaterial:Gas, + ARGON 13MM, !- Name + Argon, !- Gas Type + 0.0127; !- Thickness {m} + + WindowMaterial:Glazing, + 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.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, + GREY 3MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.626, !- Solar Transmittance at Normal Incidence + 0.061, !- Front Side Solar Reflectance at Normal Incidence + 0.061, !- Back Side Solar Reflectance at Normal Incidence + 0.611, !- Visible Transmittance at Normal Incidence + 0.061, !- Front Side Visible Reflectance at Normal Incidence + 0.061, !- Back Side Visible Reflectance at Normal Incidence + 0.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, + CLEAR 6MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.006, !- Thickness {m} + 0.775, !- Solar Transmittance at Normal Incidence + 0.071, !- Front Side Solar Reflectance at Normal Incidence + 0.071, !- Back Side Solar Reflectance at Normal Incidence + 0.881, !- Visible Transmittance at Normal Incidence + 0.080, !- Front Side Visible Reflectance at Normal Incidence + 0.080, !- Back Side Visible Reflectance at Normal Incidence + 0.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, + LoE CLEAR 6MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.006, !- Thickness {m} + 0.600, !- Solar Transmittance at Normal Incidence + 0.170, !- Front Side Solar Reflectance at Normal Incidence + 0.220, !- Back Side Solar Reflectance at Normal Incidence + 0.840, !- Visible Transmittance at Normal Incidence + 0.055, !- Front Side Visible Reflectance at Normal Incidence + 0.078, !- Back Side Visible Reflectance at Normal Incidence + 0.0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.10, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + + Construction, + Dbl Clr 3mm/13mm Air, !- Name + CLEAR 3MM, !- Outside Layer + AIR 13MM, !- Layer 2 + CLEAR 3MM; !- Layer 3 + + Construction, + Sgl Grey 3mm, !- Name + GREY 3MM; !- Outside Layer + + Schedule:Compact, + OCCUPY-1, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays SummerDesignDay CustomDay1 CustomDay2, !- Field 2 + Until: 8:00,0.0, !- Field 3 + Until: 11:00,1.00, !- Field 5 + Until: 12:00,0.80, !- Field 7 + Until: 13:00,0.40, !- Field 9 + Until: 14:00,0.80, !- Field 11 + Until: 18:00,1.00, !- Field 13 + Until: 19:00,0.50, !- Field 15 + Until: 21:00,0.10, !- Field 17 + Until: 24:00,0.0, !- Field 19 + For: Weekends WinterDesignDay Holiday, !- Field 21 + Until: 24:00,0.0; !- Field 22 + + Schedule:Compact, + LIGHTS-1, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays SummerDesignDay CustomDay1 CustomDay2, !- Field 2 + Until: 8:00,0.05, !- Field 3 + Until: 9:00,0.9, !- Field 5 + Until: 10:00,0.95, !- Field 7 + Until: 11:00,1.00, !- Field 9 + Until: 12:00,0.95, !- Field 11 + Until: 13:00,0.8, !- Field 13 + Until: 14:00,0.9, !- Field 15 + Until: 18:00,1.00, !- Field 17 + Until: 19:00,0.60, !- Field 19 + Until: 21:00,0.40, !- Field 21 + Until: 24:00,0.05, !- Field 23 + For: Weekends WinterDesignDay Holiday, !- Field 25 + Until: 24:00,0.05; !- Field 26 + + Schedule:Compact, + EQUIP-1, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays SummerDesignDay CustomDay1 CustomDay2, !- Field 2 + Until: 8:00,0.02, !- Field 3 + Until: 9:00,0.4, !- Field 5 + Until: 14:00,0.9, !- Field 7 + Until: 15:00,0.8, !- Field 9 + Until: 16:00,0.7, !- Field 11 + Until: 18:00,0.5, !- Field 13 + Until: 21:00,0.3, !- Field 15 + Until: 24:00,0.02, !- Field 17 + For: Weekends WinterDesignDay Holiday, !- Field 19 + Until: 24:00,0.02; !- Field 20 + + Schedule:Compact, + INFIL-SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays CustomDay1 CustomDay2, !- Field 2 + Until: 7:00,1.0, !- Field 3 + Until: 21:00,0.0, !- Field 5 + Until: 24:00,1.0, !- Field 7 + For: Weekends Holiday, !- Field 9 + Until: 24:00,1.0, !- Field 10 + For: SummerDesignDay, !- Field 12 + Until: 24:00,1.0, !- Field 13 + For: WinterDesignDay, !- Field 15 + Until: 24:00,1.0; !- Field 16 + + Schedule:Compact, + ActSchd, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,117.239997864; !- Field 3 + + !- Field 4 + + Schedule:Compact, + ShadeTransSch, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.0; !- Field 3 + + Zone, + PLENUM-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 0.609600067, !- Ceiling Height {m} + 283.2; !- Volume {m3} + + BuildingSurface:Detailed, + WALL-1PF, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,0.0,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,0.0,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PR, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,0.0,3.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PB, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 0.0,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PL, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 0.0,0.0,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TOP-1, !- Name + ROOF, !- Surface Type + ROOF-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.00000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,3.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,3.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C1-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C1-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C2-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C2-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C3-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C3-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C4-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C4-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C5-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C5-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + SPACE1-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 239.247360229; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + SPACE1-1 Infil 1, !- Name + SPACE1-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.0167, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + SPACE1-1 People 1, !- Name + SPACE1-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 11, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + SPACE1-1 Lights 1, !- Name + SPACE1-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 1584, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ElectricEquipment, + SPACE1-1 ElecEq 1, !- Name + SPACE1-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 1056, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + BuildingSurface:Detailed, + FRONT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WF-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + FRONT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 3.0,0.0,2.1, !- X,Y,Z ==> Vertex 1 {m} + 3.0,0.0,0.9, !- X,Y,Z ==> Vertex 2 {m} + 16.8,0.0,0.9, !- X,Y,Z ==> Vertex 3 {m} + 16.8,0.0,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + DF-1, !- Name + GLASSDOOR, !- Surface Type + Sgl Grey 3mm, !- Construction Name + FRONT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 21.3,0.0,2.1, !- X,Y,Z ==> Vertex 1 {m} + 21.3,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 23.8,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 23.8,0.0,2.1; !- X,Y,Z ==> Vertex 4 {m} + + Shading:Zone:Detailed, + Main South Overhang, !- Name + FRONT-1, !- Base Surface Name + ShadeTransSch, !- Transmittance Schedule Name + 4, !- Number of Vertices + 0.0,-1.3,2.2, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.2, !- X,Y,Z ==> Vertex 2 {m} + 19.8,0.0,2.2, !- X,Y,Z ==> Vertex 3 {m} + 19.8,-1.3,2.2; !- X,Y,Z ==> Vertex 4 {m} + + Shading:Zone:Detailed, + South Door Overhang, !- Name + FRONT-1, !- Base Surface Name + ShadeTransSch, !- Transmittance Schedule Name + 4, !- Number of Vertices + 21.0,-2.0,2.6, !- X,Y,Z ==> Vertex 1 {m} + 21.0,0.0,2.6, !- X,Y,Z ==> Vertex 2 {m} + 24.1,0.0,2.6, !- X,Y,Z ==> Vertex 3 {m} + 24.1,-2.0,2.6; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C1-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C1-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F1-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB12, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB21, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB14, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB41, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB15, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB51, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + SPACE2-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 103.311355591; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + SPACE2-1 Infil 1, !- Name + SPACE2-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.00717, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + SPACE2-1 People 1, !- Name + SPACE2-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 5, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + SPACE2-1 Lights 1, !- Name + SPACE2-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 684, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ElectricEquipment, + SPACE2-1 ElecEq 1, !- Name + SPACE2-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 456, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + BuildingSurface:Detailed, + RIGHT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WR-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + RIGHT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 30.5,3.8,2.1, !- X,Y,Z ==> Vertex 1 {m} + 30.5,3.8,0.9, !- X,Y,Z ==> Vertex 2 {m} + 30.5,11.4,0.9, !- X,Y,Z ==> Vertex 3 {m} + 30.5,11.4,2.1; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C2-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C2-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F2-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB21, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB12, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB23, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB32, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB25, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB52, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + SPACE3-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 239.247360229; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + SPACE3-1 Infil 1, !- Name + SPACE3-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.0167, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + SPACE3-1 People 1, !- Name + SPACE3-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 11, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + SPACE3-1 Lights 1, !- Name + SPACE3-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 1584, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ElectricEquipment, + SPACE3-1 ElecEq 1, !- Name + SPACE3-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 1056, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + BuildingSurface:Detailed, + BACK-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WB-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + BACK-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 27.4,15.2,2.1, !- X,Y,Z ==> Vertex 1 {m} + 27.4,15.2,0.9, !- X,Y,Z ==> Vertex 2 {m} + 13.7,15.2,0.9, !- X,Y,Z ==> Vertex 3 {m} + 13.7,15.2,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + DB-1, !- Name + GLASSDOOR, !- Surface Type + Sgl Grey 3mm, !- Construction Name + BACK-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 9.1,15.2,2.1, !- X,Y,Z ==> Vertex 1 {m} + 9.1,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 7.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 7.0,15.2,2.1; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C3-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C3-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F3-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB32, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB23, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB34, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB43, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB35, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB53, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + SPACE4-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 103.311355591; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + SPACE4-1 Infil 1, !- Name + SPACE4-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.00717, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + SPACE4-1 People 1, !- Name + SPACE4-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 5, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + SPACE4-1 Lights 1, !- Name + SPACE4-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 684, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ElectricEquipment, + SPACE4-1 ElecEq 1, !- Name + SPACE4-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 456, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + BuildingSurface:Detailed, + LEFT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WL-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + LEFT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 0.0,11.4,2.1, !- X,Y,Z ==> Vertex 1 {m} + 0.0,11.4,0.9, !- X,Y,Z ==> Vertex 2 {m} + 0.0,3.8,0.9, !- X,Y,Z ==> Vertex 3 {m} + 0.0,3.8,2.1; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C4-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C4-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F4-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB41, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB14, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB43, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB34, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB45, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB54, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + SPACE5-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 447.682556152; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + SPACE5-1 Infil 1, !- Name + SPACE5-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.031089, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + SPACE5-1 People 1, !- Name + SPACE5-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 20, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + SPACE5-1 Lights 1, !- Name + SPACE5-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 2964, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ElectricEquipment, + SPACE5-1 ElecEq 1, !- Name + SPACE5-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 1976, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + BuildingSurface:Detailed, + C5-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C5-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F5-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB51, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB15, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB52, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB25, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB53, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB35, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB54, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB45, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + +! For heating, recover 2 hrs early + + Schedule:Compact, + Htg-SetP-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays CustomDay1 CustomDay2, !- Field 2 + Until: 6:00,13.0, !- Field 3 + Until: 7:00,18.0, !- Field 5 + Until: 21:00,23.0, !- Field 7 + Until: 24:00,13.0, !- Field 9 + For: WeekEnds Holiday, !- Field 11 + Until: 24:00,13.0, !- Field 12 + For: SummerDesignDay, !- Field 14 + Until: 24:00,13.0, !- Field 15 + For: WinterDesignDay, !- Field 17 + Until: 24:00,23.0; !- Field 18 + +! For cooling, recover 1 hr early + + Schedule:Compact, + Clg-SetP-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays CustomDay1 CustomDay2, !- Field 2 + Until: 7:00,32.0, !- Field 3 + Until: 21:00,24.0, !- Field 5 + Until: 24:00,32.0, !- Field 7 + For: WeekEnds Holiday, !- Field 9 + Until: 24:00,32.0, !- Field 10 + For: SummerDesignDay, !- Field 12 + Until: 24:00,24.0, !- Field 13 + For: WinterDesignDay, !- Field 15 + Until: 24:00,32.0; !- Field 16 + + Schedule:Compact, + FanAvailSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays CustomDay1 CustomDay2, !- Field 2 + Until: 7:00,0.0, !- Field 3 + Until: 21:00,1.0, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: Weekends Holiday, !- Field 9 + Until: 24:00,0.0, !- Field 10 + For: SummerDesignDay, !- Field 12 + Until: 24:00,1.0, !- Field 13 + For: WinterDesignDay, !- Field 15 + Until: 24:00,1.0; !- Field 16 + + Schedule:Compact, + Min OA Sched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays CustomDay1 CustomDay2, !- Field 2 + Until: 8:00,0.0, !- Field 3 + Until: 21:00,1.0, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: Weekends Holiday, !- Field 9 + Until: 24:00,0.0, !- Field 10 + For: SummerDesignDay, !- Field 12 + Until: 24:00,1.0, !- Field 13 + For: WinterDesignDay, !- Field 15 + Until: 24:00,1.0; !- Field 16 + + Sizing:Parameters, + 1.2, !- Heating Sizing Factor + 1.2; !- Cooling Sizing Factor + +! +! ------------------------------------------------------------- +! New objects created from CompactHVAC objects +! ------------------------------------------------------------- +! + + ScheduleTypeLimits, + COMPACT HVAC Any Number; !- Name + + Schedule:Compact, + COMPACT HVAC-ALWAYS 1, !- Name + COMPACT HVAC Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1; !- Field 3 + + Schedule:Compact, + COMPACT HVAC-ALWAYS 4, !- Name + COMPACT HVAC Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,4; !- Field 3 + + ThermostatSetpoint:DualSetpoint, + All Zones Dual SP Control, !- Name + Htg-SetP-Sch, !- Heating Setpoint Temperature Schedule Name + Clg-SetP-Sch; !- Cooling Setpoint Temperature Schedule Name + + ZoneControl:Thermostat, + SPACE5-1 Thermostat, !- Name + SPACE5-1, !- Zone or ZoneList Name + COMPACT HVAC-ALWAYS 4, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + All Zones Dual SP Control; !- Control 1 Name + + Sizing:Zone, + SPACE5-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE5-1, !- Design Specification Outdoor Air Object Name + 0, !- Zone Heating Sizing Factor + 0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE5-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0; !- Outdoor Air Flow per Zone {m3/s} + + ZoneHVAC:EquipmentConnections, + SPACE5-1, !- Zone Name + SPACE5-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE5-1 Supply Inlet, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + SPACE5-1 Zone Air Node, !- Zone Air Node Name + SPACE5-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentList, + SPACE5-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE5-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:AirDistributionUnit, + SPACE5-1 ATU, !- Name + SPACE5-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + SPACE5-1 VAV Reheat; !- Air Terminal Name + + AirTerminal:SingleDuct:VAV:Reheat, + SPACE5-1 VAV Reheat, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + SPACE5-1 Damper Outlet, !- Damper Air Outlet Node Name + SPACE5-1 Zone Equip Inlet, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + SPACE5-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + SPACE5-1 Supply Inlet, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + ReverseWithLimits, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + Coil:Heating:Water, + SPACE5-1 Reheat Coil, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + SPACE5-1 Reheat Coil HW Inlet, !- Water Inlet Node Name + SPACE5-1 Reheat Coil HW Outlet, !- Water Outlet Node Name + SPACE5-1 Damper Outlet, !- Air Inlet Node Name + SPACE5-1 Supply Inlet, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Branch, + SPACE5-1 Reheat Coil HW Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + SPACE5-1 Reheat Coil, !- Component 1 Name + SPACE5-1 Reheat Coil HW Inlet, !- Component 1 Inlet Node Name + SPACE5-1 Reheat Coil HW Outlet; !- Component 1 Outlet Node Name + + ZoneControl:Thermostat, + SPACE1-1 Thermostat, !- Name + SPACE1-1, !- Zone or ZoneList Name + COMPACT HVAC-ALWAYS 4, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + All Zones Dual SP Control; !- Control 1 Name + + Sizing:Zone, + SPACE1-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE1-1, !- Design Specification Outdoor Air Object Name + 0, !- Zone Heating Sizing Factor + 0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE1-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0; !- Outdoor Air Flow per Zone {m3/s} + + ZoneHVAC:EquipmentConnections, + SPACE1-1, !- Zone Name + SPACE1-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE1-1 Supply Inlet, !- Zone Air Inlet Node or NodeList Name + SPACE1-1 PIU Secondary From Zone, !- Zone Air Exhaust Node or NodeList Name + SPACE1-1 Zone Air Node, !- Zone Air Node Name + SPACE1-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentList, + SPACE1-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE1-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:AirDistributionUnit, + SPACE1-1 ATU, !- Name + SPACE1-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + SPACE1-1 VAV Series PIU Reheat; !- Air Terminal Name + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + SPACE1-1 VAV Series PIU Reheat, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- Maximum Air Flow Rate {m3/s} + autosize, !- Maximum Primary Air Flow Rate {m3/s} + autosize, !- Minimum Primary Air Flow Fraction + SPACE1-1 Zone Equip Inlet, !- Supply Air Inlet Node Name + SPACE1-1 PIU Secondary From Zone, !- Secondary Air Inlet Node Name + SPACE1-1 Supply Inlet, !- Outlet Node Name + SPACE1-1 PIU Fan Outlet, !- Reheat Coil Air Inlet Node Name + SPACE1-1 PIU Mixer, !- Zone Mixer Name + SPACE1-1 PIU Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + SPACE1-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + 0.001; !- Convergence Tolerance + + AirLoopHVAC:ZoneMixer, + SPACE1-1 PIU Mixer, !- Name + SPACE1-1 PIU Mixer Outlet, !- Outlet Node Name + SPACE1-1 Zone Equip Inlet, !- Inlet 1 Node Name + SPACE1-1 PIU Secondary From Zone; !- Inlet 2 Node Name + + Fan:ConstantVolume, + SPACE1-1 PIU Fan, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 1000, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1, !- Motor In Airstream Fraction + SPACE1-1 PIU Mixer Outlet, !- Air Inlet Node Name + SPACE1-1 PIU Fan Outlet; !- Air Outlet Node Name + + Coil:Heating:Water, + SPACE1-1 Reheat Coil, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + SPACE1-1 Reheat Coil HW Inlet, !- Water Inlet Node Name + SPACE1-1 Reheat Coil HW Outlet, !- Water Outlet Node Name + SPACE1-1 PIU Fan Outlet, !- Air Inlet Node Name + SPACE1-1 Supply Inlet, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Branch, + SPACE1-1 Reheat Coil HW Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + SPACE1-1 Reheat Coil, !- Component 1 Name + SPACE1-1 Reheat Coil HW Inlet, !- Component 1 Inlet Node Name + SPACE1-1 Reheat Coil HW Outlet; !- Component 1 Outlet Node Name + + ZoneControl:Thermostat, + SPACE2-1 Thermostat, !- Name + SPACE2-1, !- Zone or ZoneList Name + COMPACT HVAC-ALWAYS 4, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + All Zones Dual SP Control; !- Control 1 Name + + Sizing:Zone, + SPACE2-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE2-1, !- Design Specification Outdoor Air Object Name + 0, !- Zone Heating Sizing Factor + 0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE2-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0; !- Outdoor Air Flow per Zone {m3/s} + + ZoneHVAC:EquipmentConnections, + SPACE2-1, !- Zone Name + SPACE2-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE2-1 Supply Inlet, !- Zone Air Inlet Node or NodeList Name + SPACE2-1 PIU Secondary From Zone, !- Zone Air Exhaust Node or NodeList Name + SPACE2-1 Zone Air Node, !- Zone Air Node Name + SPACE2-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentList, + SPACE2-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE2-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:AirDistributionUnit, + SPACE2-1 ATU, !- Name + SPACE2-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + SPACE2-1 VAV Series PIU Reheat; !- Air Terminal Name + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + SPACE2-1 VAV Series PIU Reheat, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- Maximum Air Flow Rate {m3/s} + autosize, !- Maximum Primary Air Flow Rate {m3/s} + autosize, !- Minimum Primary Air Flow Fraction + SPACE2-1 Zone Equip Inlet, !- Supply Air Inlet Node Name + SPACE2-1 PIU Secondary From Zone, !- Secondary Air Inlet Node Name + SPACE2-1 Supply Inlet, !- Outlet Node Name + SPACE2-1 PIU Fan Outlet, !- Reheat Coil Air Inlet Node Name + SPACE2-1 PIU Mixer, !- Zone Mixer Name + SPACE2-1 PIU Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + SPACE2-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + 0.001; !- Convergence Tolerance + + AirLoopHVAC:ZoneMixer, + SPACE2-1 PIU Mixer, !- Name + SPACE2-1 PIU Mixer Outlet, !- Outlet Node Name + SPACE2-1 Zone Equip Inlet, !- Inlet 1 Node Name + SPACE2-1 PIU Secondary From Zone; !- Inlet 2 Node Name + + Fan:ConstantVolume, + SPACE2-1 PIU Fan, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 1000, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1, !- Motor In Airstream Fraction + SPACE2-1 PIU Mixer Outlet, !- Air Inlet Node Name + SPACE2-1 PIU Fan Outlet; !- Air Outlet Node Name + + Coil:Heating:Water, + SPACE2-1 Reheat Coil, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + SPACE2-1 Reheat Coil HW Inlet, !- Water Inlet Node Name + SPACE2-1 Reheat Coil HW Outlet, !- Water Outlet Node Name + SPACE2-1 PIU Fan Outlet, !- Air Inlet Node Name + SPACE2-1 Supply Inlet, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Branch, + SPACE2-1 Reheat Coil HW Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + SPACE2-1 Reheat Coil, !- Component 1 Name + SPACE2-1 Reheat Coil HW Inlet, !- Component 1 Inlet Node Name + SPACE2-1 Reheat Coil HW Outlet; !- Component 1 Outlet Node Name + + ZoneControl:Thermostat, + SPACE3-1 Thermostat, !- Name + SPACE3-1, !- Zone or ZoneList Name + COMPACT HVAC-ALWAYS 4, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + All Zones Dual SP Control; !- Control 1 Name + + Sizing:Zone, + SPACE3-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE3-1, !- Design Specification Outdoor Air Object Name + 0, !- Zone Heating Sizing Factor + 0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE3-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0; !- Outdoor Air Flow per Zone {m3/s} + + ZoneHVAC:EquipmentConnections, + SPACE3-1, !- Zone Name + SPACE3-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE3-1 Supply Inlet, !- Zone Air Inlet Node or NodeList Name + SPACE3-1 PIU Secondary From Zone, !- Zone Air Exhaust Node or NodeList Name + SPACE3-1 Zone Air Node, !- Zone Air Node Name + SPACE3-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentList, + SPACE3-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE3-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:AirDistributionUnit, + SPACE3-1 ATU, !- Name + SPACE3-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + SPACE3-1 VAV Series PIU Reheat; !- Air Terminal Name + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + SPACE3-1 VAV Series PIU Reheat, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- Maximum Air Flow Rate {m3/s} + autosize, !- Maximum Primary Air Flow Rate {m3/s} + autosize, !- Minimum Primary Air Flow Fraction + SPACE3-1 Zone Equip Inlet, !- Supply Air Inlet Node Name + SPACE3-1 PIU Secondary From Zone, !- Secondary Air Inlet Node Name + SPACE3-1 Supply Inlet, !- Outlet Node Name + SPACE3-1 PIU Fan Outlet, !- Reheat Coil Air Inlet Node Name + SPACE3-1 PIU Mixer, !- Zone Mixer Name + SPACE3-1 PIU Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + SPACE3-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + 0.001; !- Convergence Tolerance + + AirLoopHVAC:ZoneMixer, + SPACE3-1 PIU Mixer, !- Name + SPACE3-1 PIU Mixer Outlet, !- Outlet Node Name + SPACE3-1 Zone Equip Inlet, !- Inlet 1 Node Name + SPACE3-1 PIU Secondary From Zone; !- Inlet 2 Node Name + + Fan:ConstantVolume, + SPACE3-1 PIU Fan, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 1000, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1, !- Motor In Airstream Fraction + SPACE3-1 PIU Mixer Outlet, !- Air Inlet Node Name + SPACE3-1 PIU Fan Outlet; !- Air Outlet Node Name + + Coil:Heating:Water, + SPACE3-1 Reheat Coil, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + SPACE3-1 Reheat Coil HW Inlet, !- Water Inlet Node Name + SPACE3-1 Reheat Coil HW Outlet, !- Water Outlet Node Name + SPACE3-1 PIU Fan Outlet, !- Air Inlet Node Name + SPACE3-1 Supply Inlet, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Branch, + SPACE3-1 Reheat Coil HW Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + SPACE3-1 Reheat Coil, !- Component 1 Name + SPACE3-1 Reheat Coil HW Inlet, !- Component 1 Inlet Node Name + SPACE3-1 Reheat Coil HW Outlet; !- Component 1 Outlet Node Name + + ZoneControl:Thermostat, + SPACE4-1 Thermostat, !- Name + SPACE4-1, !- Zone or ZoneList Name + COMPACT HVAC-ALWAYS 4, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + All Zones Dual SP Control; !- Control 1 Name + + Sizing:Zone, + SPACE4-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE4-1, !- Design Specification Outdoor Air Object Name + 0, !- Zone Heating Sizing Factor + 0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE4-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0; !- Outdoor Air Flow per Zone {m3/s} + + ZoneHVAC:EquipmentConnections, + SPACE4-1, !- Zone Name + SPACE4-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE4-1 Supply Inlet, !- Zone Air Inlet Node or NodeList Name + SPACE4-1 PIU Secondary From Zone, !- Zone Air Exhaust Node or NodeList Name + SPACE4-1 Zone Air Node, !- Zone Air Node Name + SPACE4-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentList, + SPACE4-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE4-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:AirDistributionUnit, + SPACE4-1 ATU, !- Name + SPACE4-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + SPACE4-1 VAV Series PIU Reheat; !- Air Terminal Name + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + SPACE4-1 VAV Series PIU Reheat, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- Maximum Air Flow Rate {m3/s} + autosize, !- Maximum Primary Air Flow Rate {m3/s} + autosize, !- Minimum Primary Air Flow Fraction + SPACE4-1 Zone Equip Inlet, !- Supply Air Inlet Node Name + SPACE4-1 PIU Secondary From Zone, !- Secondary Air Inlet Node Name + SPACE4-1 Supply Inlet, !- Outlet Node Name + SPACE4-1 PIU Fan Outlet, !- Reheat Coil Air Inlet Node Name + SPACE4-1 PIU Mixer, !- Zone Mixer Name + SPACE4-1 PIU Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + SPACE4-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + 0.001; !- Convergence Tolerance + + AirLoopHVAC:ZoneMixer, + SPACE4-1 PIU Mixer, !- Name + SPACE4-1 PIU Mixer Outlet, !- Outlet Node Name + SPACE4-1 Zone Equip Inlet, !- Inlet 1 Node Name + SPACE4-1 PIU Secondary From Zone; !- Inlet 2 Node Name + + Fan:ConstantVolume, + SPACE4-1 PIU Fan, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 1000, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1, !- Motor In Airstream Fraction + SPACE4-1 PIU Mixer Outlet, !- Air Inlet Node Name + SPACE4-1 PIU Fan Outlet; !- Air Outlet Node Name + + Coil:Heating:Water, + SPACE4-1 Reheat Coil, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + SPACE4-1 Reheat Coil HW Inlet, !- Water Inlet Node Name + SPACE4-1 Reheat Coil HW Outlet, !- Water Outlet Node Name + SPACE4-1 PIU Fan Outlet, !- Air Inlet Node Name + SPACE4-1 Supply Inlet, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Branch, + SPACE4-1 Reheat Coil HW Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + SPACE4-1 Reheat Coil, !- Component 1 Name + SPACE4-1 Reheat Coil HW Inlet, !- Component 1 Inlet Node Name + SPACE4-1 Reheat Coil HW Outlet; !- Component 1 Outlet Node Name + + Sizing:System, + VAV Sys 1, !- AirLoop Name + sensible, !- Type of Load to Size On + autosize, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 7, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 11.0, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 14, !- Central Cooling Design Supply Air Temperature {C} + 10.0, !- Central Heating Design Supply Air Temperature {C} + noncoincident, !- Type of Zone Sum to Use + no, !- 100% Outdoor Air in Cooling + no, !- 100% Outdoor Air in Heating + 0.008, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + 0, !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + 0, !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + , !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + VAV; !- Central Cooling Capacity Control Method + + AirLoopHVAC, + VAV Sys 1, !- Name + VAV Sys 1 Controllers, !- Controller List Name + VAV Sys 1 Availability Managers, !- Availability Manager List Name + autosize, !- Design Supply Air Flow Rate {m3/s} + VAV Sys 1 Branches, !- Branch List Name + , !- Connector List Name + VAV Sys 1 Air Loop Inlet,!- Supply Side Inlet Node Name + VAV Sys 1 Return Air Outlet, !- Demand Side Outlet Node Name + VAV Sys 1 Supply Path Inlet, !- Demand Side Inlet Node Names + VAV Sys 1 Supply Fan Outlet; !- Supply Side Outlet Node Names + + AirLoopHVAC:ControllerList, + VAV Sys 1 Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + VAV Sys 1 Cooling Coil Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + VAV Sys 1 Heating Coil Controller; !- Controller 2 Name + + BranchList, + VAV Sys 1 Branches, !- Name + VAV Sys 1 Main Branch; !- Branch 1 Name + + Branch, + VAV Sys 1 Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + VAV Sys 1 OA System, !- Component 1 Name + VAV Sys 1 Air Loop Inlet,!- Component 1 Inlet Node Name + VAV Sys 1 Mixed Air Outlet, !- Component 1 Outlet Node Name + Coil:Cooling:Water:DetailedGeometry, !- Component 2 Object Type + VAV Sys 1 Cooling Coil, !- Component 2 Name + VAV Sys 1 Mixed Air Outlet, !- Component 2 Inlet Node Name + VAV Sys 1 Cooling Coil Outlet, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + VAV Sys 1 Heating Coil, !- Component 3 Name + VAV Sys 1 Cooling Coil Outlet, !- Component 3 Inlet Node Name + VAV Sys 1 Heating Coil Outlet, !- Component 3 Outlet Node Name + Fan:VariableVolume, !- Component 4 Object Type + VAV Sys 1 Supply Fan, !- Component 4 Name + VAV Sys 1 Heating Coil Outlet, !- Component 4 Inlet Node Name + VAV Sys 1 Supply Fan Outlet; !- Component 4 Outlet Node Name + + AirLoopHVAC:SupplyPath, + VAV Sys 1 Supply Path, !- Name + VAV Sys 1 Supply Path Inlet, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + VAV Sys 1 Zone Splitter; !- Component 1 Name + + AirLoopHVAC:ZoneSplitter, + VAV Sys 1 Zone Splitter, !- Name + VAV Sys 1 Supply Path Inlet, !- Inlet Node Name + SPACE5-1 Zone Equip Inlet, !- Outlet 1 Node Name + SPACE1-1 Zone Equip Inlet, !- Outlet 2 Node Name + SPACE2-1 Zone Equip Inlet, !- Outlet 3 Node Name + SPACE3-1 Zone Equip Inlet, !- Outlet 4 Node Name + SPACE4-1 Zone Equip Inlet; !- Outlet 5 Node Name + + AirLoopHVAC:ReturnPath, + VAV Sys 1 Return Path, !- Name + VAV Sys 1 Return Air Outlet, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + VAV Sys 1 Return Plenum; !- Component 1 Name + + AirLoopHVAC:ReturnPlenum, + VAV Sys 1 Return Plenum, !- Name + PLENUM-1, !- Zone Name + PLENUM-1 Zone Air Node, !- Zone Node Name + VAV Sys 1 Return Air Outlet, !- Outlet Node Name + , !- Induced Air Outlet Node or NodeList Name + SPACE5-1 Return Outlet, !- Inlet 1 Node Name + SPACE1-1 Return Outlet, !- Inlet 2 Node Name + SPACE2-1 Return Outlet, !- Inlet 3 Node Name + SPACE3-1 Return Outlet, !- Inlet 4 Node Name + SPACE4-1 Return Outlet; !- Inlet 5 Node Name + + AvailabilityManagerAssignmentList, + VAV Sys 1 Availability Managers, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + VAV Sys 1 Availability; !- Availability Manager 1 Name + + AvailabilityManager:NightCycle, + VAV Sys 1 Availability, !- Name + COMPACT HVAC-ALWAYS 1, !- Applicability Schedule Name + FanAvailSched, !- Fan Schedule Name + CycleOnAnyZoneFansOnly, !- Control Type + 1, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 3600; !- Cycling Run Time {s} + + Schedule:Compact, + COMPACT HVAC-ALWAYS 14, !- Name + COMPACT HVAC Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,14; !- Field 3 + + SetpointManager:Scheduled, + VAV Sys 1 Cooling Supply Air Temp Manager, !- Name + Temperature, !- Control Variable + COMPACT HVAC-ALWAYS 14, !- Schedule Name + VAV Sys 1 Supply Fan Outlet; !- Setpoint Node or NodeList Name + + Coil:Cooling:Water:DetailedGeometry, + VAV Sys 1 Cooling Coil, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- Maximum Water Flow Rate {m3/s} + autosize, !- Tube Outside Surface Area {m2} + autosize, !- Total Tube Inside Area {m2} + autosize, !- Fin Surface Area {m2} + autosize, !- Minimum Airflow Area {m2} + autosize, !- Coil Depth {m} + autosize, !- Fin Diameter {m} + 0.0015, !- Fin Thickness {m} + 0.01445, !- Tube Inside Diameter {m} + 0.0159, !- Tube Outside Diameter {m} + 386.0, !- Tube Thermal Conductivity {W/m-K} + 204.0, !- Fin Thermal Conductivity {W/m-K} + 0.0018, !- Fin Spacing {m} + 0.026, !- Tube Depth Spacing {m} + 4, !- Number of Tube Rows + autosize, !- Number of Tubes per Row + VAV Sys 1 Cooling Coil ChW Inlet, !- Water Inlet Node Name + VAV Sys 1 Cooling Coil ChW Outlet, !- Water Outlet Node Name + VAV Sys 1 Mixed Air Outlet, !- Air Inlet Node Name + VAV Sys 1 Cooling Coil Outlet; !- Air Outlet Node Name + + Controller:WaterCoil, + VAV Sys 1 Cooling Coil Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + FLOW, !- Actuator Variable + VAV Sys 1 Cooling Coil Outlet, !- Sensor Node Name + VAV Sys 1 Cooling Coil ChW Inlet, !- Actuator Node Name + autosize, !- Controller Convergence Tolerance {deltaC} + autosize, !- Maximum Actuated Flow {m3/s} + 0; !- Minimum Actuated Flow {m3/s} + + SetpointManager:MixedAir, + VAV Sys 1 Cooling Coil Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV Sys 1 Supply Fan Outlet, !- Reference Setpoint Node Name + VAV Sys 1 Heating Coil Outlet, !- Fan Inlet Node Name + VAV Sys 1 Supply Fan Outlet, !- Fan Outlet Node Name + VAV Sys 1 Mixed Air Nodes; !- Setpoint Node or NodeList Name + + NodeList, + VAV Sys 1 Mixed Air Nodes, !- Name + VAV Sys 1 Cooling Coil Outlet, !- Node 1 Name + VAV Sys 1 Mixed Air Outlet; !- Node 2 Name + + Branch, + VAV Sys 1 Cooling Coil ChW Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water:DetailedGeometry, !- Component 1 Object Type + VAV Sys 1 Cooling Coil, !- Component 1 Name + VAV Sys 1 Cooling Coil ChW Inlet, !- Component 1 Inlet Node Name + VAV Sys 1 Cooling Coil ChW Outlet; !- Component 1 Outlet Node Name + + Coil:Heating:Water, + VAV Sys 1 Heating Coil, !- Name + COMPACT HVAC-ALWAYS 1, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + VAV Sys 1 Heating Coil HW Inlet, !- Water Inlet Node Name + VAV Sys 1 Heating Coil HW Outlet, !- Water Outlet Node Name + VAV Sys 1 Cooling Coil Outlet, !- Air Inlet Node Name + VAV Sys 1 Heating Coil Outlet, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Branch, + VAV Sys 1 Heating Coil HW Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + VAV Sys 1 Heating Coil, !- Component 1 Name + VAV Sys 1 Heating Coil HW Inlet, !- Component 1 Inlet Node Name + VAV Sys 1 Heating Coil HW Outlet; !- Component 1 Outlet Node Name + + Controller:WaterCoil, + VAV Sys 1 Heating Coil Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + FLOW, !- Actuator Variable + VAV Sys 1 Heating Coil Outlet, !- Sensor Node Name + VAV Sys 1 Heating Coil HW Inlet, !- Actuator Node Name + autosize, !- Controller Convergence Tolerance {deltaC} + autosize, !- Maximum Actuated Flow {m3/s} + 0; !- Minimum Actuated Flow {m3/s} + + Schedule:Compact, + COMPACT HVAC-ALWAYS 10.0,!- Name + COMPACT HVAC Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,10.0; !- Field 3 + +! NOTE: Heating supply air setpoint is placed on Supply Path Inlet node to allow separate heating and cooling setpoints. +! The mixed air setpoint manager Heating Coil Air Temp Manager adjusts this setpoint for fan heat +! and places it on the Heating Coil Outlet + + SetpointManager:Scheduled, + VAV Sys 1 Heating Supply Air Temp Manager, !- Name + Temperature, !- Control Variable + COMPACT HVAC-ALWAYS 10.0,!- Schedule Name + VAV Sys 1 Supply Path Inlet; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV Sys 1 Heating Coil Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV Sys 1 Supply Path Inlet, !- Reference Setpoint Node Name + VAV Sys 1 Heating Coil Outlet, !- Fan Inlet Node Name + VAV Sys 1 Supply Fan Outlet, !- Fan Outlet Node Name + VAV Sys 1 Heating Coil Outlet; !- Setpoint Node or NodeList Name + + Fan:VariableVolume, + VAV Sys 1 Supply Fan, !- Name + FanAvailSched, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 600, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + Fraction, !- Fan Power Minimum Flow Rate Input Method + 0.25, !- Fan Power Minimum Flow Fraction + , !- Fan Power Minimum Air Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1, !- Motor In Airstream Fraction + 0.35071223, !- Fan Power Coefficient 1 + 0.30850535, !- Fan Power Coefficient 2 + -0.54137364, !- Fan Power Coefficient 3 + 0.87198823, !- Fan Power Coefficient 4 + 0, !- Fan Power Coefficient 5 + VAV Sys 1 Heating Coil Outlet, !- Air Inlet Node Name + VAV Sys 1 Supply Fan Outlet; !- Air Outlet Node Name + + OutdoorAir:NodeList, + VAV Sys 1 Outside Air Inlet; !- Node or NodeList Name 1 + + AirLoopHVAC:OutdoorAirSystem, + VAV Sys 1 OA System, !- Name + VAV Sys 1 OA System Controllers, !- Controller List Name + VAV Sys 1 OA System Equipment; !- Outdoor Air Equipment List Name + + AirLoopHVAC:ControllerList, + VAV Sys 1 OA System Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + VAV Sys 1 OA Controller; !- Controller 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + VAV Sys 1 OA System Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + VAV Sys 1 OA Mixing Box; !- Component 1 Name + + OutdoorAir:Mixer, + VAV Sys 1 OA Mixing Box, !- Name + VAV Sys 1 Mixed Air Outlet, !- Mixed Air Node Name + VAV Sys 1 Outside Air Inlet, !- Outdoor Air Stream Node Name + VAV Sys 1 Relief Air Outlet, !- Relief Air Stream Node Name + VAV Sys 1 Air Loop Inlet;!- Return Air Stream Node Name + + Controller:OutdoorAir, + VAV Sys 1 OA Controller, !- Name + VAV Sys 1 Relief Air Outlet, !- Relief Air Outlet Node Name + VAV Sys 1 Air Loop Inlet,!- Return Air Node Name + VAV Sys 1 Mixed Air Outlet, !- Mixed Air Node Name + VAV Sys 1 Outside Air Inlet, !- Actuator Node Name + autosize, !- Minimum Outdoor Air Flow Rate {m3/s} + autosize, !- Maximum Outdoor Air Flow Rate {m3/s} + DifferentialDryBulb, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 19, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + , !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + 4, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + Min OA Sched; !- Minimum Outdoor Air Schedule Name + + Sizing:Plant, + Hot Water Loop Hot Water Loop, !- Plant or Condenser Loop Name + Heating, !- Loop Type + 82, !- Design Loop Exit Temperature {C} + 11; !- Loop Design Temperature Difference {deltaC} + + PlantLoop, + Hot Water Loop Hot Water Loop, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Hot Water Loop Operation,!- Plant Equipment Operation Scheme Name + Hot Water Loop HW Supply Outlet, !- Loop Temperature Setpoint Node Name + 100, !- Maximum Loop Temperature {C} + 10, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Hot Water Loop HW Supply Inlet, !- Plant Side Inlet Node Name + Hot Water Loop HW Supply Outlet, !- Plant Side Outlet Node Name + Hot Water Loop HW Supply Side Branches, !- Plant Side Branch List Name + Hot Water Loop HW Supply Side Connectors, !- Plant Side Connector List Name + Hot Water Loop HW Demand Inlet, !- Demand Side Inlet Node Name + Hot Water Loop HW Demand Outlet, !- Demand Side Outlet Node Name + Hot Water Loop HW Demand Side Branches, !- Demand Side Branch List Name + Hot Water Loop HW Demand Side Connectors, !- Demand Side Connector List Name + SequentialLoad, !- Load Distribution Scheme + , !- Availability Manager List Name + SingleSetPoint; !- Plant Loop Demand Calculation Scheme + + PlantEquipmentOperationSchemes, + Hot Water Loop Operation,!- Name + PlantEquipmentOperation:HeatingLoad, !- Control Scheme 1 Object Type + Hot Water Loop Operation All Hours, !- Control Scheme 1 Name + COMPACT HVAC-ALWAYS 1; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:HeatingLoad, + Hot Water Loop Operation All Hours, !- Name + 0, !- Load Range 1 Lower Limit {W} + 1000000000000000, !- Load Range 1 Upper Limit {W} + Hot Water Loop All Equipment; !- Range 1 Equipment List Name + + PlantEquipmentList, + Hot Water Loop All Equipment, !- Name + Boiler:HotWater, !- Equipment 1 Object Type + Main Boiler; !- Equipment 1 Name + + SetpointManager:OutdoorAirReset, + Hot Water Loop HW Temp Manager, !- Name + Temperature, !- Control Variable + 82.2, !- Setpoint at Outdoor Low Temperature {C} + -6.7, !- Outdoor Low Temperature {C} + 65.6, !- Setpoint at Outdoor High Temperature {C} + 10, !- Outdoor High Temperature {C} + Hot Water Loop HW Supply Outlet; !- Setpoint Node or NodeList Name + + BranchList, + Hot Water Loop HW Supply Side Branches, !- Name + Hot Water Loop HW Supply Inlet Branch, !- Branch 1 Name + Main Boiler HW Branch, !- Branch 2 Name + Hot Water Loop HW Supply Bypass Branch, !- Branch 3 Name + Hot Water Loop HW Supply Outlet Branch; !- Branch 4 Name + + ConnectorList, + Hot Water Loop HW Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Hot Water Loop HW Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Hot Water Loop HW Supply Mixer; !- Connector 2 Name + + Connector:Splitter, + Hot Water Loop HW Supply Splitter, !- Name + Hot Water Loop HW Supply Inlet Branch, !- Inlet Branch Name + Hot Water Loop HW Supply Bypass Branch, !- Outlet Branch 1 Name + Main Boiler HW Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Hot Water Loop HW Supply Mixer, !- Name + Hot Water Loop HW Supply Outlet Branch, !- Outlet Branch Name + Hot Water Loop HW Supply Bypass Branch, !- Inlet Branch 1 Name + Main Boiler HW Branch; !- Inlet Branch 2 Name + + Branch, + Hot Water Loop HW Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Hot Water Loop HW Supply Side Bypass Pipe, !- Component 1 Name + Hot Water Loop HW Supply Bypass Inlet, !- Component 1 Inlet Node Name + Hot Water Loop HW Supply Bypass Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Hot Water Loop HW Supply Side Bypass Pipe, !- Name + Hot Water Loop HW Supply Bypass Inlet, !- Inlet Node Name + Hot Water Loop HW Supply Bypass Outlet; !- Outlet Node Name + + Pump:ConstantSpeed, + Hot Water Loop HW Supply Pump, !- Name + Hot Water Loop HW Supply Inlet, !- Inlet Node Name + Hot Water Loop HW Pump Outlet, !- Outlet Node Name + autosize, !- Design Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0, !- Fraction of Motor Inefficiencies to Fluid Stream + INTERMITTENT; !- Pump Control Type + + Branch, + Hot Water Loop HW Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:ConstantSpeed, !- Component 1 Object Type + Hot Water Loop HW Supply Pump, !- Component 1 Name + Hot Water Loop HW Supply Inlet, !- Component 1 Inlet Node Name + Hot Water Loop HW Pump Outlet; !- Component 1 Outlet Node Name + + Branch, + Hot Water Loop HW Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Hot Water Loop HW Supply Outlet Pipe, !- Component 1 Name + Hot Water Loop HW Supply Outlet Pipe Inlet, !- Component 1 Inlet Node Name + Hot Water Loop HW Supply Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Hot Water Loop HW Supply Outlet Pipe, !- Name + Hot Water Loop HW Supply Outlet Pipe Inlet, !- Inlet Node Name + Hot Water Loop HW Supply Outlet; !- Outlet Node Name + + BranchList, + Hot Water Loop HW Demand Side Branches, !- Name + Hot Water Loop HW Demand Inlet Branch, !- Branch 1 Name + SPACE5-1 Reheat Coil HW Branch, !- Branch 2 Name + SPACE1-1 Reheat Coil HW Branch, !- Branch 3 Name + SPACE2-1 Reheat Coil HW Branch, !- Branch 4 Name + SPACE3-1 Reheat Coil HW Branch, !- Branch 5 Name + SPACE4-1 Reheat Coil HW Branch, !- Branch 6 Name + VAV Sys 1 Heating Coil HW Branch, !- Branch 7 Name + Hot Water Loop HW Demand Bypass Branch, !- Branch 8 Name + Hot Water Loop HW Demand Outlet Branch; !- Branch 9 Name + + ConnectorList, + Hot Water Loop HW Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Hot Water Loop HW Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Hot Water Loop HW Demand Mixer; !- Connector 2 Name + + Connector:Splitter, + Hot Water Loop HW Demand Splitter, !- Name + Hot Water Loop HW Demand Inlet Branch, !- Inlet Branch Name + SPACE5-1 Reheat Coil HW Branch, !- Outlet Branch 1 Name + SPACE1-1 Reheat Coil HW Branch, !- Outlet Branch 2 Name + SPACE2-1 Reheat Coil HW Branch, !- Outlet Branch 3 Name + SPACE3-1 Reheat Coil HW Branch, !- Outlet Branch 4 Name + SPACE4-1 Reheat Coil HW Branch, !- Outlet Branch 5 Name + VAV Sys 1 Heating Coil HW Branch, !- Outlet Branch 6 Name + Hot Water Loop HW Demand Bypass Branch; !- Outlet Branch 7 Name + + Connector:Mixer, + Hot Water Loop HW Demand Mixer, !- Name + Hot Water Loop HW Demand Outlet Branch, !- Outlet Branch Name + SPACE5-1 Reheat Coil HW Branch, !- Inlet Branch 1 Name + SPACE1-1 Reheat Coil HW Branch, !- Inlet Branch 2 Name + SPACE2-1 Reheat Coil HW Branch, !- Inlet Branch 3 Name + SPACE3-1 Reheat Coil HW Branch, !- Inlet Branch 4 Name + SPACE4-1 Reheat Coil HW Branch, !- Inlet Branch 5 Name + VAV Sys 1 Heating Coil HW Branch, !- Inlet Branch 6 Name + Hot Water Loop HW Demand Bypass Branch; !- Inlet Branch 7 Name + + Branch, + Hot Water Loop HW Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Hot Water Loop HW Demand Inlet Pipe, !- Component 1 Name + Hot Water Loop HW Demand Inlet, !- Component 1 Inlet Node Name + Hot Water Loop HW Demand Inlet Pipe Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Hot Water Loop HW Demand Inlet Pipe, !- Name + Hot Water Loop HW Demand Inlet, !- Inlet Node Name + Hot Water Loop HW Demand Inlet Pipe Outlet; !- Outlet Node Name + + Branch, + Hot Water Loop HW Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Hot Water Loop HW Demand Side Bypass Pipe, !- Component 1 Name + Hot Water Loop HW Demand Bypass Inlet, !- Component 1 Inlet Node Name + Hot Water Loop HW Demand Bypass Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Hot Water Loop HW Demand Side Bypass Pipe, !- Name + Hot Water Loop HW Demand Bypass Inlet, !- Inlet Node Name + Hot Water Loop HW Demand Bypass Outlet; !- Outlet Node Name + + Branch, + Hot Water Loop HW Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Hot Water Loop HW Demand Outlet Pipe, !- Component 1 Name + Hot Water Loop HW Demand Outlet Pipe Inlet, !- Component 1 Inlet Node Name + Hot Water Loop HW Demand Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Hot Water Loop HW Demand Outlet Pipe, !- Name + Hot Water Loop HW Demand Outlet Pipe Inlet, !- Inlet Node Name + Hot Water Loop HW Demand Outlet; !- Outlet Node Name + + Boiler:HotWater, + Main Boiler, !- Name + NaturalGas, !- Fuel Type + autosize, !- Nominal Capacity {W} + 0.8, !- Nominal Thermal Efficiency + LeavingBoiler, !- Efficiency Curve Temperature Evaluation Variable + BoilerEfficiency, !- Normalized Boiler Efficiency Curve Name + autosize, !- Design Water Flow Rate {m3/s} + 0, !- Minimum Part Load Ratio + 1.1, !- Maximum Part Load Ratio + 1, !- Optimum Part Load Ratio + Main Boiler HW Inlet, !- Boiler Water Inlet Node Name + Main Boiler HW Outlet, !- Boiler Water Outlet Node Name + 100, !- Water Outlet Upper Temperature Limit {C} + ConstantFlow, !- Boiler Flow Mode + 0; !- Parasitic Electric Load {W} + + Curve:Quadratic, + BoilerEfficiency, !- Name + 0.97, !- Coefficient1 Constant + 0.0633, !- Coefficient2 x + -0.0333, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1; !- Maximum Value of x + + Branch, + Main Boiler HW Branch, !- Name + , !- Pressure Drop Curve Name + Boiler:HotWater, !- Component 1 Object Type + Main Boiler, !- Component 1 Name + Main Boiler HW Inlet, !- Component 1 Inlet Node Name + Main Boiler HW Outlet; !- Component 1 Outlet Node Name + + Chiller:Electric:EIR, + Main Chiller, !- Name + 70000, !- Reference Capacity {W} + 3.2, !- Reference COP {W/W} + 6.67, !- Reference Leaving Chilled Water Temperature {C} + 29.4, !- Reference Entering Condenser Fluid Temperature {C} + 0.12396E-02, !- Reference Chilled Water Flow Rate {m3/s} + 0.19379E-02, !- Reference Condenser Fluid Flow Rate {m3/s} + Main Chiller RecipCapFT, !- Cooling Capacity Function of Temperature Curve Name + Main Chiller RecipEIRFT, !- Electric Input to Cooling Output Ratio Function of Temperature Curve Name + Main Chiller RecipEIRFPLR, !- Electric Input to Cooling Output Ratio Function of Part Load Ratio Curve Name + 0, !- Minimum Part Load Ratio + 1, !- Maximum Part Load Ratio + 1, !- Optimum Part Load Ratio + 0.25, !- Minimum Unloading Ratio + Main Chiller ChW Inlet, !- Chilled Water Inlet Node Name + Main Chiller ChW Outlet, !- Chilled Water Outlet Node Name + Main Chiller Cnd Inlet, !- Condenser Inlet Node Name + Main Chiller Cnd Outlet, !- Condenser Outlet Node Name + WaterCooled, !- Condenser Type + , !- Condenser Fan Power Ratio {W/W} + 1, !- Fraction of Compressor Electric Consumption Rejected by Condenser + 5, !- Leaving Chilled Water Lower Temperature Limit {C} + ConstantFlow, !- Chiller Flow Mode + 0.0; !- Design Heat Recovery Water Flow Rate {m3/s} + + Branch, + Main Chiller ChW Branch, !- Name + , !- Pressure Drop Curve Name + Chiller:Electric:EIR, !- Component 1 Object Type + Main Chiller, !- Component 1 Name + Main Chiller ChW Inlet, !- Component 1 Inlet Node Name + Main Chiller ChW Outlet; !- Component 1 Outlet Node Name + + Branch, + Main Chiller CndW Branch,!- Name + , !- Pressure Drop Curve Name + Chiller:Electric:EIR, !- Component 1 Object Type + Main Chiller, !- Component 1 Name + Main Chiller Cnd Inlet, !- Component 1 Inlet Node Name + Main Chiller Cnd Outlet; !- Component 1 Outlet Node Name + +! Cooling Capacity Function of Temperature Curve for open or hermetic water-cooled reciprocating chillers +! Same as DOE-2.1E HERM-REC-CAP-FT (CCAPT4) and OPEN-REC-CAP-FT (CCAPT2) + + Curve:Biquadratic, + Main Chiller RecipCapFT, !- Name + 0.507883, !- Coefficient1 Constant + 0.145228, !- Coefficient2 x + -0.00625644, !- Coefficient3 x**2 + -0.0011178, !- Coefficient4 y + -0.0001296, !- Coefficient5 y**2 + -0.00028188, !- Coefficient6 x*y + 5, !- Minimum Value of x + 10, !- Maximum Value of x + 24, !- Minimum Value of y + 35, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +! Energy Input to Cooling Output Ratio Function of Temperature Curve for open or hermetic water-cooled reciprocating chillers +! Same as DOE-2.1E HERM-REC-EIR-FT (EIRT4) and OPEN-REC-EIR-FT (EIRT2) + + Curve:Biquadratic, + Main Chiller RecipEIRFT, !- Name + 1.03076, !- Coefficient1 Constant + -0.103536, !- Coefficient2 x + 0.00710208, !- Coefficient3 x**2 + 0.0093186, !- Coefficient4 y + 0.00031752, !- Coefficient5 y**2 + -0.00104328, !- Coefficient6 x*y + 5, !- Minimum Value of x + 10, !- Maximum Value of x + 24, !- Minimum Value of y + 35, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +! Energy Input to Cooling Output Ratio Function of Part Load Ratio Curve for open or hermetic water-cooled reciprocating chillers +! Same as DOE-2.1E HERM-REC-EIR-FPLR (EIRPLR4) and OPEN-REC-EIR-FPLR (EIRPLR2) + + Curve:Quadratic, + Main Chiller RecipEIRFPLR, !- Name + 0.088065, !- Coefficient1 Constant + 1.137742, !- Coefficient2 x + -0.225806, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1; !- Maximum Value of x + + CoolingTower:SingleSpeed, + Main Tower, !- Name + Main Tower CndW Inlet, !- Water Inlet Node Name + Main Tower CndW Outlet, !- Water Outlet Node Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Fan Power {W} + autosize, !- Design U-Factor Times Area Value {W/K} + autocalculate, !- Free Convection Regime Air Flow Rate {m3/s} + , !- Free Convection Regime Air Flow Rate Sizing Factor + autocalculate, !- Free Convection Regime U-Factor Times Area Value {W/K} + , !- Free Convection U-Factor Times Area Value Sizing Factor + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + , !- Heat Rejection Capacity and Nominal Capacity Sizing Ratio + , !- Nominal Capacity {W} + , !- Free Convection Capacity {W} + , !- Free Convection Nominal Capacity Sizing Factor + , !- Design Inlet Air Dry-Bulb Temperature {C} + , !- Design Inlet Air Wet-Bulb Temperature {C} + , !- Design Approach Temperature {deltaC} + , !- Design Range Temperature {deltaC} + , !- Basin Heater Capacity {W/K} + , !- Basin Heater Setpoint Temperature {C} + , !- Basin Heater Operating Schedule Name + , !- Evaporation Loss Mode + , !- Evaporation Loss Factor {percent/K} + , !- Drift Loss Percent {percent} + , !- Blowdown Calculation Mode + ; !- Blowdown Concentration Ratio + + Branch, + Main Tower CndW Branch, !- Name + , !- Pressure Drop Curve Name + CoolingTower:SingleSpeed,!- Component 1 Object Type + Main Tower, !- Component 1 Name + Main Tower CndW Inlet, !- Component 1 Inlet Node Name + Main Tower CndW Outlet; !- Component 1 Outlet Node Name + + Sizing:Plant, + Chilled Water Loop Secondary Water Loop, !- Plant or Condenser Loop Name + Cooling, !- Loop Type + 7.22, !- Design Loop Exit Temperature {C} + 6.67; !- Loop Design Temperature Difference {deltaC} + + Sizing:Plant, + Chilled Water Loop Primary Water Loop, !- Plant or Condenser Loop Name + Cooling, !- Loop Type + 5.0, !- Design Loop Exit Temperature {C} + 6.67; !- Loop Design Temperature Difference {deltaC} + + PlantLoop, + Chilled Water Loop Primary Water Loop, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Chilled Water Loop Chiller Operation, !- Plant Equipment Operation Scheme Name + Chilled Water Loop ChW Pri Supply Outlet, !- Loop Temperature Setpoint Node Name + 98, !- Maximum Loop Temperature {C} + 1, !- Minimum Loop Temperature {C} + 0.12396E-02, !- Maximum Loop Flow Rate {m3/s} + 0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Chilled Water Loop ChW Pri Supply Inlet, !- Plant Side Inlet Node Name + Chilled Water Loop ChW Pri Supply Outlet, !- Plant Side Outlet Node Name + Chilled Water Loop ChW Pri Supply Side Branches, !- Plant Side Branch List Name + Chilled Water Loop ChW Pri Supply Side Connectors, !- Plant Side Connector List Name + Chilled Water Loop ChW Sec Demand Inlet, !- Demand Side Inlet Node Name + Chilled Water Loop ChW Sec Demand Outlet, !- Demand Side Outlet Node Name + Chilled Water Loop ChW Sec Demand Side Branches, !- Demand Side Branch List Name + Chilled Water Loop ChW Sec Demand Side Connectors, !- Demand Side Connector List Name + SequentialLoad, !- Load Distribution Scheme + , !- Availability Manager List Name + SingleSetPoint, !- Plant Loop Demand Calculation Scheme + TwoWayCommonPipe; !- Common Pipe Simulation + + PlantEquipmentOperationSchemes, + Chilled Water Loop Chiller Operation, !- Name + PlantEquipmentOperation:CoolingLoad, !- Control Scheme 1 Object Type + Chilled Water Loop Chiller Operation All Hours, !- Control Scheme 1 Name + COMPACT HVAC-ALWAYS 1; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:CoolingLoad, + Chilled Water Loop Chiller Operation All Hours, !- Name + 0, !- Load Range 1 Lower Limit {W} + 1000000000000000, !- Load Range 1 Upper Limit {W} + Chilled Water Loop All Chillers; !- Range 1 Equipment List Name + + PlantEquipmentList, + Chilled Water Loop All Chillers, !- Name + Chiller:Electric:EIR, !- Equipment 1 Object Type + Main Chiller; !- Equipment 1 Name + + Schedule:Compact, + COMPACT HVAC-ALWAYS 5.0, !- Name + COMPACT HVAC Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,5.0; !- Field 3 + + SetpointManager:Scheduled, + Chilled Water Primary Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + COMPACT HVAC-ALWAYS 5.0, !- Schedule Name + Chilled Water Loop ChW Pri Supply Outlet; !- Setpoint Node or NodeList Name + + Schedule:Compact, + COMPACT HVAC-ALWAYS 7.22,!- Name + COMPACT HVAC Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,7.22; !- Field 3 + + SetpointManager:Scheduled, + Chilled Water Secondary Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + COMPACT HVAC-ALWAYS 7.22,!- Schedule Name + Chilled Water Loop ChW Sec Demand Inlet; !- Setpoint Node or NodeList Name + + BranchList, + Chilled Water Loop ChW Pri Supply Side Branches, !- Name + Chilled Water Loop ChW Pri Supply Inlet Branch, !- Branch 1 Name + Main Chiller ChW Branch, !- Branch 2 Name + Chilled Water Loop ChW Pri Supply Bypass Branch, !- Branch 3 Name + Chilled Water Loop ChW Pri Supply Outlet Branch; !- Branch 4 Name + + ConnectorList, + Chilled Water Loop ChW Pri Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Chilled Water Loop ChW Pri Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Chilled Water Loop ChW Pri Supply Mixer; !- Connector 2 Name + + Connector:Splitter, + Chilled Water Loop ChW Pri Supply Splitter, !- Name + Chilled Water Loop ChW Pri Supply Inlet Branch, !- Inlet Branch Name + Main Chiller ChW Branch, !- Outlet Branch 1 Name + Chilled Water Loop ChW Pri Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Chilled Water Loop ChW Pri Supply Mixer, !- Name + Chilled Water Loop ChW Pri Supply Outlet Branch, !- Outlet Branch Name + Main Chiller ChW Branch, !- Inlet Branch 1 Name + Chilled Water Loop ChW Pri Supply Bypass Branch; !- Inlet Branch 2 Name + + Branch, + Chilled Water Loop ChW Pri Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop ChW Pri Supply Side Bypass Pipe, !- Component 1 Name + Chilled Water Loop ChW Pri Supply Bypass Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop ChW Pri Supply Bypass Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop ChW Pri Supply Side Bypass Pipe, !- Name + Chilled Water Loop ChW Pri Supply Bypass Inlet, !- Inlet Node Name + Chilled Water Loop ChW Pri Supply Bypass Outlet; !- Outlet Node Name + + Pump:ConstantSpeed, + Chilled Water Loop ChW Pri Supply Pump, !- Name + Chilled Water Loop ChW Pri Supply Inlet, !- Inlet Node Name + Chilled Water Loop ChW Pri Pump Outlet, !- Outlet Node Name + 0.12396E-02, !- Design Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + 316.71, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0, !- Fraction of Motor Inefficiencies to Fluid Stream + INTERMITTENT, !- Pump Control Type + COMPACT HVAC-ALWAYS 1; !- Pump Flow Rate Schedule Name + + Branch, + Chilled Water Loop ChW Pri Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:ConstantSpeed, !- Component 1 Object Type + Chilled Water Loop ChW Pri Supply Pump, !- Component 1 Name + Chilled Water Loop ChW Pri Supply Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop ChW Pri Pump Outlet; !- Component 1 Outlet Node Name + + Branch, + Chilled Water Loop ChW Pri Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop ChW Pri Supply Outlet Pipe, !- Component 1 Name + Chilled Water Loop ChW Pri Supply Outlet Pipe Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop ChW Pri Supply Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop ChW Pri Supply Outlet Pipe, !- Name + Chilled Water Loop ChW Pri Supply Outlet Pipe Inlet, !- Inlet Node Name + Chilled Water Loop ChW Pri Supply Outlet; !- Outlet Node Name + + Pump:VariableSpeed, + Chilled Water Loop ChW Sec Supply Pump, !- Name + Chilled Water Loop ChW Sec Demand Inlet, !- Inlet Node Name + Chilled Water Loop ChW Sec Demand Inlet Pipe Outlet, !- Outlet Node Name + 0.12396E-02, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT, !- Pump Control Type + COMPACT HVAC-ALWAYS 1; !- Pump Flow Rate Schedule Name + + BranchList, + Chilled Water Loop ChW Sec Demand Side Branches, !- Name + Chilled Water Loop ChW Sec Demand Inlet Branch, !- Branch 1 Name + VAV Sys 1 Cooling Coil ChW Branch, !- Branch 2 Name + Chilled Water Loop ChW Sec Demand Bypass Branch, !- Branch 3 Name + Chilled Water Loop ChW Sec Demand Outlet Branch; !- Branch 4 Name + + ConnectorList, + Chilled Water Loop ChW Sec Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Chilled Water Loop ChW Sec Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Chilled Water Loop ChW Sec Demand Mixer; !- Connector 2 Name + + Connector:Splitter, + Chilled Water Loop ChW Sec Demand Splitter, !- Name + Chilled Water Loop ChW Sec Demand Inlet Branch, !- Inlet Branch Name + VAV Sys 1 Cooling Coil ChW Branch, !- Outlet Branch 1 Name + Chilled Water Loop ChW Sec Demand Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Chilled Water Loop ChW Sec Demand Mixer, !- Name + Chilled Water Loop ChW Sec Demand Outlet Branch, !- Outlet Branch Name + VAV Sys 1 Cooling Coil ChW Branch, !- Inlet Branch 1 Name + Chilled Water Loop ChW Sec Demand Bypass Branch; !- Inlet Branch 2 Name + + Branch, + Chilled Water Loop ChW Sec Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + Chilled Water Loop ChW Sec Supply Pump, !- Component 1 Name + Chilled Water Loop ChW Sec Demand Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop ChW Sec Demand Inlet Pipe Outlet; !- Component 1 Outlet Node Name + + Branch, + Chilled Water Loop ChW Sec Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop ChW Sec Demand Side Bypass Pipe, !- Component 1 Name + Chilled Water Loop ChW Sec Demand Bypass Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop ChW Sec Demand Bypass Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop ChW Sec Demand Side Bypass Pipe, !- Name + Chilled Water Loop ChW Sec Demand Bypass Inlet, !- Inlet Node Name + Chilled Water Loop ChW Sec Demand Bypass Outlet; !- Outlet Node Name + + Branch, + Chilled Water Loop ChW Sec Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop ChW Sec Demand Outlet Pipe, !- Component 1 Name + Chilled Water Loop ChW Sec Demand Outlet Pipe Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop ChW Sec Demand Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop ChW Sec Demand Outlet Pipe, !- Name + Chilled Water Loop ChW Sec Demand Outlet Pipe Inlet, !- Inlet Node Name + Chilled Water Loop ChW Sec Demand Outlet; !- Outlet Node Name + + Sizing:Plant, + Chilled Water Loop Condenser Water Loop, !- Plant or Condenser Loop Name + Condenser, !- Loop Type + 29.4, !- Design Loop Exit Temperature {C} + 5.6; !- Loop Design Temperature Difference {deltaC} + + CondenserLoop, + Chilled Water Loop Condenser Water Loop, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Chilled Water Loop Condenser Operation, !- Condenser Equipment Operation Scheme Name + Chilled Water Loop CndW Supply Outlet, !- Condenser Loop Temperature Setpoint Node Name + 80, !- Maximum Loop Temperature {C} + 5, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Condenser Loop Volume {m3} + Chilled Water Loop CndW Supply Inlet, !- Condenser Side Inlet Node Name + Chilled Water Loop CndW Supply Outlet, !- Condenser Side Outlet Node Name + Chilled Water Loop CndW Supply Side Branches, !- Condenser Side Branch List Name + Chilled Water Loop CndW Supply Side Connectors, !- Condenser Side Connector List Name + Chilled Water Loop CndW Demand Inlet, !- Demand Side Inlet Node Name + Chilled Water Loop CndW Demand Outlet, !- Demand Side Outlet Node Name + Chilled Water Loop CndW Demand Side Branches, !- Condenser Demand Side Branch List Name + Chilled Water Loop CndW Demand Side Connectors, !- Condenser Demand Side Connector List Name + SequentialLoad; !- Load Distribution Scheme + + CondenserEquipmentOperationSchemes, + Chilled Water Loop Condenser Operation, !- Name + PlantEquipmentOperation:CoolingLoad, !- Control Scheme 1 Object Type + Chilled Water Loop Condenser Operation All Hours, !- Control Scheme 1 Name + COMPACT HVAC-ALWAYS 1; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:CoolingLoad, + Chilled Water Loop Condenser Operation All Hours, !- Name + 0, !- Load Range 1 Lower Limit {W} + 1000000000000000, !- Load Range 1 Upper Limit {W} + Chilled Water Loop All Condensers; !- Range 1 Equipment List Name + + CondenserEquipmentList, + Chilled Water Loop All Condensers, !- Name + CoolingTower:SingleSpeed,!- Equipment 1 Object Type + Main Tower; !- Equipment 1 Name + + Schedule:Compact, + COMPACT HVAC-ALWAYS 29.4,!- Name + COMPACT HVAC Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,29.4; !- Field 3 + + SetpointManager:Scheduled, + Chilled Water Loop CndW Temp Manager, !- Name + Temperature, !- Control Variable + COMPACT HVAC-ALWAYS 29.4,!- Schedule Name + Chilled Water Loop CndW Supply Outlet; !- Setpoint Node or NodeList Name + + BranchList, + Chilled Water Loop CndW Supply Side Branches, !- Name + Chilled Water Loop CndW Supply Inlet Branch, !- Branch 1 Name + Main Tower CndW Branch, !- Branch 2 Name + Chilled Water Loop CndW Supply Bypass Branch, !- Branch 3 Name + Chilled Water Loop CndW Supply Outlet Branch; !- Branch 4 Name + + ConnectorList, + Chilled Water Loop CndW Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Chilled Water Loop CndW Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Chilled Water Loop CndW Supply Mixer; !- Connector 2 Name + + Connector:Splitter, + Chilled Water Loop CndW Supply Splitter, !- Name + Chilled Water Loop CndW Supply Inlet Branch, !- Inlet Branch Name + Main Tower CndW Branch, !- Outlet Branch 1 Name + Chilled Water Loop CndW Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Chilled Water Loop CndW Supply Mixer, !- Name + Chilled Water Loop CndW Supply Outlet Branch, !- Outlet Branch Name + Main Tower CndW Branch, !- Inlet Branch 1 Name + Chilled Water Loop CndW Supply Bypass Branch; !- Inlet Branch 2 Name + + Pump:VariableSpeed, + Chilled Water Loop CndW Supply Pump, !- Name + Chilled Water Loop CndW Supply Inlet, !- Inlet Node Name + Chilled Water Loop CndW Pump Outlet, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT, !- Pump Control Type + COMPACT HVAC-ALWAYS 1; !- Pump Flow Rate Schedule Name + + Branch, + Chilled Water Loop CndW Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + Chilled Water Loop CndW Supply Pump, !- Component 1 Name + Chilled Water Loop CndW Supply Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop CndW Pump Outlet; !- Component 1 Outlet Node Name + + Branch, + Chilled Water Loop CndW Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop CndW Supply Outlet Pipe, !- Component 1 Name + Chilled Water Loop CndW Supply Outlet Pipe Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop CndW Supply Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop CndW Supply Outlet Pipe, !- Name + Chilled Water Loop CndW Supply Outlet Pipe Inlet, !- Inlet Node Name + Chilled Water Loop CndW Supply Outlet; !- Outlet Node Name + + Branch, + Chilled Water Loop CndW Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop CndW Supply Side Bypass Pipe, !- Component 1 Name + Chilled Water Loop CndW Supply Bypass Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop CndW Supply Bypass Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop CndW Supply Side Bypass Pipe, !- Name + Chilled Water Loop CndW Supply Bypass Inlet, !- Inlet Node Name + Chilled Water Loop CndW Supply Bypass Outlet; !- Outlet Node Name + + BranchList, + Chilled Water Loop CndW Demand Side Branches, !- Name + Chilled Water Loop CndW Demand Inlet Branch, !- Branch 1 Name + Main Chiller CndW Branch,!- Branch 2 Name + Chilled Water Loop CndW Demand Bypass Branch, !- Branch 3 Name + Chilled Water Loop CndW Demand Outlet Branch; !- Branch 4 Name + + ConnectorList, + Chilled Water Loop CndW Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Chilled Water Loop CndW Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Chilled Water Loop CndW Demand Mixer; !- Connector 2 Name + + Connector:Splitter, + Chilled Water Loop CndW Demand Splitter, !- Name + Chilled Water Loop CndW Demand Inlet Branch, !- Inlet Branch Name + Main Chiller CndW Branch,!- Outlet Branch 1 Name + Chilled Water Loop CndW Demand Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Chilled Water Loop CndW Demand Mixer, !- Name + Chilled Water Loop CndW Demand Outlet Branch, !- Outlet Branch Name + Main Chiller CndW Branch,!- Inlet Branch 1 Name + Chilled Water Loop CndW Demand Bypass Branch; !- Inlet Branch 2 Name + + Branch, + Chilled Water Loop CndW Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop CndW Demand Inlet Pipe, !- Component 1 Name + Chilled Water Loop CndW Demand Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop CndW Demand Inlet Pipe Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop CndW Demand Inlet Pipe, !- Name + Chilled Water Loop CndW Demand Inlet, !- Inlet Node Name + Chilled Water Loop CndW Demand Inlet Pipe Outlet; !- Outlet Node Name + + Branch, + Chilled Water Loop CndW Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop CndW Demand Side Bypass Pipe, !- Component 1 Name + Chilled Water Loop CndW Demand Bypass Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop CndW Demand Bypass Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop CndW Demand Side Bypass Pipe, !- Name + Chilled Water Loop CndW Demand Bypass Inlet, !- Inlet Node Name + Chilled Water Loop CndW Demand Bypass Outlet; !- Outlet Node Name + + Branch, + Chilled Water Loop CndW Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Chilled Water Loop CndW Demand Outlet Pipe, !- Component 1 Name + Chilled Water Loop CndW Demand Outlet Pipe Inlet, !- Component 1 Inlet Node Name + Chilled Water Loop CndW Demand Outlet; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Chilled Water Loop CndW Demand Outlet Pipe, !- Name + Chilled Water Loop CndW Demand Outlet Pipe Inlet, !- Inlet Node Name + Chilled Water Loop CndW Demand Outlet; !- Outlet Node Name + + Output:Variable,*,Site Outdoor Air Drybulb Temperature,hourly; + + Output:Variable,*,Zone Air Temperature,hourly; + + Output:Variable,*,Zone Air System Sensible Cooling Rate,hourly; + + Output:Variable,*,Zone Air System Sensible Heating Rate,hourly; + + Output:Variable,*,Zone Mean Air Temperature,hourly; + + Output:Variable,*,Zone Air Relative Humidity,hourly; + + Output:Variable,*,Zone Heating Setpoint Not Met While Occupied Time,hourly; + + Output:Variable,*,Zone Cooling Setpoint Not Met While Occupied Time,hourly; + + Output:Variable,*,Zone Air Terminal VAV Damper Position,hourly; + + Output:Variable,*,Fan Electricity Rate,hourly; + + Output:Variable,*,Heating Coil Heating Rate,hourly; + + Output:Variable,*,Cooling Coil Total Cooling Rate,hourly; + + Output:Variable,*,Cooling Coil Sensible Cooling Rate,hourly; + + Output:Variable,*,Plant Supply Side Outlet Temperature,hourly; + + Output:Variable,*,Chiller Evaporator Cooling Rate,hourly; + + Output:Variable,*,Chiller Condenser Heat Transfer Rate,hourly; + + Output:Variable,*,Chiller Electricity Rate,hourly; + + Output:Variable,*,Chiller COP,hourly; + + Output:Variable,*,Boiler Heating Rate,hourly; + + Output:Variable,*,Boiler NaturalGas Rate,hourly; + + Output:Variable,*,Boiler Efficiency,Hourly; + + Output:Variable,*,Cooling Tower Heat Transfer Rate,hourly; + + Output:Variable,*,Cooling Tower Fan Electricity Rate,hourly; + + Output:VariableDictionary,Regular; + + Output:Surfaces:Drawing,dxf; + + Output:Surfaces:List,lines; + + Output:Meter:MeterFileOnly,Electricity:Facility,monthly; + + Output:Meter:MeterFileOnly,Electricity:Building,monthly; + + Output:Meter:MeterFileOnly,InteriorLights:Electricity,monthly; + + Output:Meter:MeterFileOnly,Electricity:HVAC,monthly; + + Output:Meter:MeterFileOnly,Electricity:Plant,monthly; + + Output:Meter:MeterFileOnly,NaturalGas:Plant,monthly; + + Output:Meter:MeterFileOnly,NaturalGas:Facility,monthly; + + Output:Meter:MeterFileOnly,Electricity:Facility,runperiod; + + Output:Meter:MeterFileOnly,Electricity:Building,runperiod; + + Output:Meter:MeterFileOnly,InteriorLights:Electricity,runperiod; + + Output:Meter:MeterFileOnly,Electricity:HVAC,runperiod; + + Output:Meter:MeterFileOnly,Electricity:Plant,runperiod; + + Output:Meter:MeterFileOnly,NaturalGas:Plant,runperiod; + + Output:Meter:MeterFileOnly,NaturalGas:Facility,runperiod; + + OutputControl:Files,Yes; + + OutputControl:RVI,Site Outdoor Air Drybulb Temperature,Zone Air Temperature,Zone Air Relative Humidity,Zone Air Terminal VAV Damper Position,Zone Air System Sensible Cooling Rate,Zone Air System Sensible Heating Rate,Heating Coil Heating Rate,Cooling Coil Total Cooling Rate,Cooling Coil Sensible Cooling Rate,Plant Supply Side Outlet Temperature,Chiller Evaporator Cooling Rate,Chiller Condenser Heat Transfer Rate,Chiller Electricity Rate,Chiller COP,Boiler Heating Rate,Boiler NaturalGas Rate,Cooling Tower Heat Transfer Rate,Cooling Tower Fan Electricity Rate,Zone Heating Setpoint Not Met While Occupied Time,Zone Cooling Setpoint Not Met While Occupied Time; + + OutputControl:MVI,InteriorLights:Electricity,Electricity:Building,Electricity:HVAC,Electricity:Plant,Electricity:Facility,NaturalGas:Plant,NaturalGas:Facility; + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:Table:SummaryReports, + AllSummary; !- Report 1 Name + diff --git a/testfiles/CMakeLists.txt b/testfiles/CMakeLists.txt index abb7bffd4d5..31e5f92a7bd 100644 --- a/testfiles/CMakeLists.txt +++ b/testfiles/CMakeLists.txt @@ -111,6 +111,7 @@ add_simulation_test(IDF_FILE 5ZoneVAV-ChilledWaterStorage-Mixed_DCV_MaxZd.idf EP add_simulation_test(IDF_FILE 5ZoneVAV-ChilledWaterStorage-Mixed_DCV_MultiPath.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE 5ZoneVAV-ChilledWaterStorage-Stratified.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE 5ZoneVAV-Pri-SecLoop.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) +add_simulation_test(IDF_FILE 5ZoneVAV-Pri-SecLoop_rvi_mvi.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE 5ZoneWLHPPlantLoopTower.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE 5ZoneWarmest.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE 5ZoneWarmestMultDDSizBypass.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) diff --git a/tst/EnergyPlus/unit/Fixtures/ResultsFrameworkFixture.hh b/tst/EnergyPlus/unit/Fixtures/ResultsFrameworkFixture.hh index e8a1ae4ec2d..9c1e43cc585 100644 --- a/tst/EnergyPlus/unit/Fixtures/ResultsFrameworkFixture.hh +++ b/tst/EnergyPlus/unit/Fixtures/ResultsFrameworkFixture.hh @@ -84,6 +84,27 @@ protected: { return ResultsFramework::CSVWriter::convertToMonth(state, datetime); } + + std::map> getCSVOutputs(EnergyPlusData &state, + json const &data, + OutputProcessor::ReportingFrequency reportingFrequency, + std::vector const &keyNames, + std::vector const &outputVariables, + std::map> const &outputVariableKeyNames) + { + ResultsFramework::CSVWriter csv(keyNames, outputVariables, outputVariableKeyNames); + csv.parseTSOutputs(state, data, reportingFrequency); + return csv.outputs; + } + + std::map> getCSVOutputs(EnergyPlusData &state, + json const &data, + ResultsFramework::ResultsFramework const &resultsFramework, + OutputProcessor::ReportingFrequency reportingFrequency, + std::vector const &keyNames) + { + return getCSVOutputs(state, data, reportingFrequency, keyNames, resultsFramework.outputVariables, resultsFramework.outputVariableKeyNames); + } }; } // namespace EnergyPlus diff --git a/tst/EnergyPlus/unit/ResultsFramework.unit.cc b/tst/EnergyPlus/unit/ResultsFramework.unit.cc index a23789b68a0..ea77e739eee 100644 --- a/tst/EnergyPlus/unit/ResultsFramework.unit.cc +++ b/tst/EnergyPlus/unit/ResultsFramework.unit.cc @@ -233,10 +233,10 @@ TEST_F(ResultsFrameworkFixture, ResultsFramework_DataFrameInfo2) Variable var0("SALESFLOOR INLET NODE:System Node Temperature", ReportingFrequency::TimeStep, indexType, reportId, Unit::C); state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var0); - state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 45); // month,day,hour,minute - state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 60); // month,day,hour,minute - state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 45); // month,day,hour,minute - state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 60); // month,day,hour,minute + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 60, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 60, 2017); // month,day,hour,minute,year state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 1.0); state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 2.0); @@ -496,4 +496,223 @@ TEST_F(ResultsFrameworkFixture, ResultsFramework_convertToMonth) EXPECT_THROW(convertToMonth(*state, datetime), FatalError); } +TEST_F(ResultsFrameworkFixture, ResultsFramework_RVIFilter_explicit_keys) +{ + + json OutputData; + OutputProcessor::TimeStepType indexType = OutputProcessor::TimeStepType::Zone; + int reportId = 1; + + Variable var0("SALESFLOOR INLET NODE:System Node Temperature", ReportingFrequency::TimeStep, indexType, reportId, Unit::C); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var0); + state->dataResultsFramework->resultsFramework->addReportVariable( + "SALESFLOOR INLET NODE", "System Node Temperature", "C", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->setISO8601(true); + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 60, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 60, 2017); // month,day,hour,minute,year + + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 1.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 2.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 3.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 4.0); + + reportId++; + Variable var1("SALESFLOOR INLET NODE:System Node Humidity Ratio", ReportingFrequency::TimeStep, indexType, reportId, Unit::kgWater_kgDryAir); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var1); + state->dataResultsFramework->resultsFramework->addReportVariable( + "SALESFLOOR INLET NODE", "System Node Humidity Ratio", "kgWater/kgDryAir", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 5.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 6.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 7.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 8.0); + + // If add one more, it also should go to the top of json cols array + reportId++; + Variable var2("SALESFLOOR OUTLET NODE:System Node Temperature", ReportingFrequency::TimeStep, indexType, reportId, Unit::C); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var2); + state->dataResultsFramework->resultsFramework->addReportVariable( + "SALESFLOOR OUTLET NODE", "System Node Temperature", "C", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 9.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 10.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 11.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 12.0); + OutputData["TimeStep"] = state->dataResultsFramework->resultsFramework->RITimestepTSData.getJSON(); + + std::vector const rvi_keys = {"SALESFLOOR OUTLET NODE:System Node Temperature [C](TimeStep)", + "SALESFLOOR INLET NODE:System Node Temperature [C](TimeStep)"}; + + auto outputs = getCSVOutputs(*state, + state->dataResultsFramework->resultsFramework->RITimestepTSData.getJSON(), + *state->dataResultsFramework->resultsFramework, + OutputProcessor::ReportingFrequency::TimeStep, + rvi_keys); + + std::map> expected_output = {{"2017-02-25T00:45:00", {"9.0", "1.0"}}, + {"2017-02-25T01:00:00", {"10.0", "2.0"}}, + {"2017-02-25T23:45:00", {"11.0", "3.0"}}, + {"2017-02-25T24:00:00", {"12.0", "4.0"}}}; + + EXPECT_EQ(expected_output, outputs); +} + +TEST_F(ResultsFrameworkFixture, ResultsFramework_RVIFilter_pattern_key) +{ + + json OutputData; + OutputProcessor::TimeStepType indexType = OutputProcessor::TimeStepType::Zone; + int reportId = 1; + + Variable var0("SALESFLOOR INLET NODE:System Node Temperature", ReportingFrequency::TimeStep, indexType, reportId, Unit::C); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var0); + state->dataResultsFramework->resultsFramework->addReportVariable( + "SALESFLOOR INLET NODE", "System Node Temperature", "C", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->setStartOfInterval(true); + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 60, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 60, 2017); // month,day,hour,minute,year + + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 1.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 2.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 3.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 4.0); + + reportId++; + Variable var1("SALESFLOOR INLET NODE:System Node Humidity Ratio", ReportingFrequency::TimeStep, indexType, reportId, Unit::kgWater_kgDryAir); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var1); + state->dataResultsFramework->resultsFramework->addReportVariable( + "SALESFLOOR INLET NODE", "System Node Humidity Ratio", "kgWater/kgDryAir", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 5.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 6.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 7.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 8.0); + + // If add one more, it also should go to the top of json cols array + reportId++; + Variable var2("SALESFLOOR OUTLET NODE:System Node Temperature", ReportingFrequency::TimeStep, indexType, reportId, Unit::C); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var2); + state->dataResultsFramework->resultsFramework->addReportVariable( + "SALESFLOOR OUTLET NODE", "System Node Temperature", "C", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 9.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 10.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 11.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 12.0); + OutputData["TimeStep"] = state->dataResultsFramework->resultsFramework->RITimestepTSData.getJSON(); + + std::vector const rvi_keys = { + "System Node Temperature", + }; + + auto outputs = getCSVOutputs(*state, + state->dataResultsFramework->resultsFramework->RITimestepTSData.getJSON(), + *state->dataResultsFramework->resultsFramework, + OutputProcessor::ReportingFrequency::TimeStep, + rvi_keys); + + std::map> expected_output = {{"02/25 00:00:00", {"1.0", "9.0"}}, + {"02/25 00:45:00", {"2.0", "10.0"}}, + {"02/25 01:00:00", {"3.0", "11.0"}}, + {"02/25 23:45:00", {"4.0", "12.0"}}}; + + EXPECT_EQ(expected_output, outputs); +} + +TEST_F(ResultsFrameworkFixture, ResultsFramework_MVIFilter_explicit_key) +{ + json OutputData; + OutputProcessor::TimeStepType indexType = OutputProcessor::TimeStepType::Zone; + int reportId = 1; + + // Electricity:Facility,NaturalGas:Plant,NaturalGas:Facility + Variable var0("Electricity:Facility", ReportingFrequency::TimeStep, indexType, reportId, Unit::J); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var0); + state->dataResultsFramework->resultsFramework->addReportMeter("Electricity:Facility", "J", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 60, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 60, 2017); // month,day,hour,minute,year + + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 1.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 2.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 3.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 4.0); + + reportId++; + Variable var1("NaturalGas:Facility", ReportingFrequency::TimeStep, indexType, reportId, Unit::J); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var1); + state->dataResultsFramework->resultsFramework->addReportMeter("NaturalGas:Facility", "J", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 5.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 6.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 7.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 8.0); + + OutputData["TimeStep"] = state->dataResultsFramework->resultsFramework->RITimestepTSData.getJSON(); + + std::vector const mvi_keys = { + "Electricity:Facility", + }; + + auto outputs = getCSVOutputs(*state, + state->dataResultsFramework->resultsFramework->RITimestepTSData.getJSON(), + *state->dataResultsFramework->resultsFramework, + OutputProcessor::ReportingFrequency::TimeStep, + mvi_keys); + + std::map> expected_output = { + {"02/25 00:45:00", {"1.0"}}, {"02/25 01:00:00", {"2.0"}}, {"02/25 23:45:00", {"3.0"}}, {"02/25 24:00:00", {"4.0"}}}; + + EXPECT_EQ(expected_output, outputs); +} + +TEST_F(ResultsFrameworkFixture, ResultsFramework_MVIFilter_pattern_key) +{ + json OutputData; + OutputProcessor::TimeStepType indexType = OutputProcessor::TimeStepType::Zone; + int reportId = 1; + + // Electricity:Facility,NaturalGas:Plant,NaturalGas:Facility + Variable var0("Electricity:Facility", ReportingFrequency::TimeStep, indexType, reportId, Unit::J); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var0); + state->dataResultsFramework->resultsFramework->setISO8601(true); + state->dataResultsFramework->resultsFramework->setStartOfInterval(true); + state->dataResultsFramework->resultsFramework->addReportMeter("Electricity:Facility", "J", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 1, 60, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 45, 2017); // month,day,hour,minute,year + state->dataResultsFramework->resultsFramework->RITimestepTSData.newRow(2, 25, 24, 60, 2017); // month,day,hour,minute,year + + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 1.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 2.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 3.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 4.0); + + reportId++; + Variable var1("NaturalGas:Facility", ReportingFrequency::TimeStep, indexType, reportId, Unit::J); + state->dataResultsFramework->resultsFramework->RITimestepTSData.addVariable(var1); + state->dataResultsFramework->resultsFramework->addReportMeter("NaturalGas:Facility", "J", ReportingFrequency::TimeStep); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 5.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 6.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 7.0); + state->dataResultsFramework->resultsFramework->RITimestepTSData.pushVariableValue(reportId, 8.0); + + OutputData["TimeStep"] = state->dataResultsFramework->resultsFramework->RITimestepTSData.getJSON(); + + std::vector const mvi_keys = { + "Electricity:Facility [J](TimeStep)", + }; + + auto outputs = getCSVOutputs(*state, + state->dataResultsFramework->resultsFramework->RITimestepTSData.getJSON(), + *state->dataResultsFramework->resultsFramework, + OutputProcessor::ReportingFrequency::TimeStep, + mvi_keys); + + std::map> expected_output = { + {"2017-02-25T00:00:00", {"1.0"}}, {"2017-02-25T00:45:00", {"2.0"}}, {"2017-02-25T01:00:00", {"3.0"}}, {"2017-02-25T23:45:00", {"4.0"}}}; + + EXPECT_EQ(expected_output, outputs); +} + } // namespace EnergyPlus