diff --git a/.gitignore b/.gitignore index 204a3074..be323709 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,12 @@ temp test_cases/verif_mtd_pp/idfs/ *.sbatch dist/ +*.html +*.js +.buildinfo +.nojekyll +*.inv +docs/_modules +docs/_sources +docs/_static +docs/.doctrees diff --git a/constrain/api/verification_library.py b/constrain/api/verification_library.py index 8de63142..5ef2d3e3 100644 --- a/constrain/api/verification_library.py +++ b/constrain/api/verification_library.py @@ -13,7 +13,7 @@ library_schema = { "library_item_id": (int, str, float), "description_brief": str, - "description_detail": str, + "description_detailed": str, "description_index": list, "description_datapoints": dict, "description_assertions": list, @@ -144,8 +144,8 @@ def validate_library(self, items: List[str] = None) -> Dict: # verify the library.json file for lib_key in library_schema.keys(): - # check if lib keys exist. "description_detail" key is optional - if lib_key not in ["description_detail"] and not self.lib_items[ + # check if lib keys exist. "description_detailed" key is optional + if lib_key not in ["description_detailed"] and not self.lib_items[ item ].get(lib_key): logging.error( @@ -169,7 +169,7 @@ def validate_library(self, items: List[str] = None) -> Dict: ) except KeyError: - # if `description_detail` key doesn't exist, output a warning. + # if `description_detailed` key doesn't exist, output a warning. validity_info[item][lib_key] = None logging.warning(f"{lib_key} doesn't exist.") diff --git a/constrain/api/workflow.py b/constrain/api/workflow.py index a16fc339..c22c3ffb 100644 --- a/constrain/api/workflow.py +++ b/constrain/api/workflow.py @@ -113,11 +113,7 @@ def import_package(self) -> None: """Import third party packages based on the "imports" element values of the workflow json. E.g.: { ... - "imports": [ - "numpy as np", - "pandas as pd", - "datetime" - ], + "imports": ["numpy as np","pandas as pd","datetime"], ... } """ diff --git a/docs/source/Acknowledgment.rst b/docs/source/Acknowledgment.rst new file mode 100644 index 00000000..92906ca0 --- /dev/null +++ b/docs/source/Acknowledgment.rst @@ -0,0 +1,3 @@ +Acknowledgement +================ +**ConStrain** was developed at the Pacific Northwest National Laboratory, and was funded under contract with the U.S. Department of Energy (DOE). It is actively being developed as an open-source project. \ No newline at end of file diff --git a/docs/source/Code Documentation.rst b/docs/source/Code Documentation.rst index c7ae4713..99de85f2 100644 --- a/docs/source/Code Documentation.rst +++ b/docs/source/Code Documentation.rst @@ -1,6 +1,16 @@ Code Documentation =================== +.. automodule:: checklib + :members: + :inherited-members: + :undoc-members: + :show-inheritance: +.. automodule:: api.brick_compliance + :members: + :inherited-members: + :undoc-members: + :show-inheritance: .. automodule:: api.data_processing :members: :inherited-members: diff --git a/docs/source/Contributing.rst b/docs/source/Contributing.rst new file mode 100644 index 00000000..f04987dd --- /dev/null +++ b/docs/source/Contributing.rst @@ -0,0 +1,22 @@ +Contributing +============== +Contributions are welcome and greatly appreciated. + +Issues +------- +Users of **ConStrain** are welcome to open issues to: + 1. Ask for help + 2. Report issues with the current code base + 3. Request new features to be implemented + +Pull requests +-------------- +Pull requests should be submitted through forks and tagged with appropriate available labels. The title and description of the pull request should be legible and clearly describe the proposed changes. + + 1. Bug fixes, improvements, and new features + + Bug fixes, improvements and new features should be tied to one or multiple issues. Please open an issue(s) prior to opening a pull request and documenting the proposed change(s) to **ConStrain**. The development team is open to reviewing any proposed changes as long as the changes are explained in detail (using the code review feature of GitHub), and backed with sufficient research. Each pull request addressing bug fixes or improvements needs to include one or more unit tests. + + 2. Data + + **ConStrain** uses a data-driven approach meaning that the more data it has access to, the better and the more relevant the curves generated by **ConStrain** will be. The development team welcomes contributions aiming to add data to **ConStrain**'s libraries. New data should be submitted through a pull request. The pull request should include the data in a format that can be used by **ConStrain** (For example, **ConStrain** currently uses performance curves, so no data tables should be submitted). To be included in **ConStrain**, the data should be publicly available, sharable, and accurate (and a reference should be provided for the team's review). diff --git a/docs/source/Expand Exisiting Verifications.rst b/docs/source/Expand Exisiting Verifications.rst new file mode 100644 index 00000000..ac83a2f6 --- /dev/null +++ b/docs/source/Expand Exisiting Verifications.rst @@ -0,0 +1,23 @@ +Expand Exisiting Verifications +=============================== + +.. role:: python(code) + :language: python + +1. A new verification logic file should be added to the `contrain/library` folder which already includes several verification logic + - At a minimum (for rule-based verification) the logic should be wrapped into a :python:`verify()` function as shown below where :python:`df` is a :python:`pandas.DataFrame` that contains the data needed for the verification + - For more complicated verifications (e.g., procedure-based) the functions in the :meth:`checklib.CheckLibBase` class can be overloaded + +.. sourcecode:: python + + from constrain.checklib import RuleCheckBase + + + class NewVerificationLogicClassName(RuleCheckBase): + points = ["point_1", "point_2"] + + def verify(self): + self.result = (self.df["point_1"] > self.df["point_2"]) + +2. The new verification class name should be added to the list of class already listed in the `__init__.py` file located in that same directory +3. A library file that includes all the information needed by the verification logic should be created or appended if it already exists \ No newline at end of file diff --git a/docs/source/License.rst b/docs/source/License.rst new file mode 100644 index 00000000..eeecc0c6 --- /dev/null +++ b/docs/source/License.rst @@ -0,0 +1,18 @@ +License +======== + +This material was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the United States Department of Energy, nor Battelle, nor any of their employees, nor any jurisdiction or organization that has cooperated in the development of these materials, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness or any information, apparatus, product, software, or process disclosed, or represents that its use would not infringe privately owned rights. + +Reference herein to any specific commercial product, process, or service by tradename, trademark, manufacturer, or otherwise does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Governmentor any agency thereof, or Battelle Memorial Institute. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or any agency thereof. + +PACIFIC NORTHWEST NATIONAL LABORATORY operated by BATTELLE for the UNITED STATES DEPARTMENT OF ENERGY under Contract DE-AC05-76RL01830 + +Control Strainer (ConStrain): A Data-driven Control Verification Framework (formally known as ANIMATE) Copyright (c) 2021, Battelle Memorial Institute All rights reserved. + +1. Battelle Memorial Institute (hereinafter Battelle) hereby grants permission to any person or entity lawfully obtaining a copy of this software and associated documentation files (hereinafter “the Software”) to redistribute and use the Software in source and binary forms, with or without modification. Such person or entity may use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and may permit others to do so, subject to the following conditions: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Other than as used herein, neither the name Battelle Memorial Institute or Battelle may be used in any form whatsoever without the express written consent of Battelle. + +2. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BATTELLE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/docs/source/Quickstart Guide.rst b/docs/source/Quickstart Guide.rst new file mode 100644 index 00000000..88998bd2 --- /dev/null +++ b/docs/source/Quickstart Guide.rst @@ -0,0 +1,332 @@ +Quickstart Guide +================= + +.. role:: python(code) + :language: python +.. role:: json(code) + :language: JSON +.. role:: bash(code) + :language: bash + +This guide provides a quick overview of how to get started with **ConStrain**. Verifications of building system control related timeseries using **ConStrain** can either be done by using **ConStrain** as a Python library or by using a **ConStrain** workflow. + +Installing **ConStrain** +------------------------- +**ConStrain** can be installed from PyPI by running the following command. + +.. sourcecode:: bash + + pip install constrain + +Running Verifications using **ConStrain** +------------------------------------------------------ + +**ConStrain** relies on verification case files to perform verifications. These are JSON files that contain all the necessary information about data points, reference to verification logics, and simulation parameters when applicable. A verification case file can be built as follows: + + 1. Identify if the desired verification is already part of the default library. **ConStrain**'s default verifications are documented :doc:`here <../Verifications>`. If not, consider expanding the default verifications, help is provided :doc:`here <../Expand Exisiting Verifications>`. + 2. Create a JSON file that contains all the information needed by ConStrain to run the verification as detailed below or as defined on this schema (TBD). + 3. Run the verification either using **ConStrain** as a :ref:`library ` or using a **ConStrain** :ref:`workflow `. + +.. sourcecode:: JSON + + { + "cases": [ + { + "no": 1, + "run_simulation": false, + "simulation_IO": { + "idf": "modelica_dataset_set", + "idd": "./resources/Energy+V9_0_1.idd", + "weather": "./weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw", + "output": "./demo/G36_demo/data/G36_Modelica_Jan.csv", + "ep_path": "C:\\EnergyPlusV9-0-1\\energyplus.exe" + }, + "expected_result": "pass", + "datapoints_source": { + "dev_settings": { + "heating_output": "heating_output", + "cooling_output": "cooling_output", + "ra_p": "ra_p", + "max_ra_p": "max_ra_p", + "oa_p": "oa_p", + "max_oa_p": "max_oa_p" + }, + "parameters": { + "ra_p_tol": 0.01, + "oa_p_tol": 0.01 + } + }, + "verification_class": "G36ReturnAirDamperPositionForReliefDamperOrFan" + } + ] + } + +- :json:`"no"`: A verification case JSON file can contain multiple cases, this corresponds to the ID of a case +- :json:`"run_simulation"`: Is a flag (:json:`true` or :json:`false`) that indicates if an EnergyPlus simulation should be performed +- :json:`"simulation_IO"`: Is a dictionary that contains information about what reference files should be used for the simulation if a simulation is not required the :json:`"output"` is still required, it corresponds to the file that **ConStrain** will use to run verifications +- :json:`"expected_result"`: Expected result from the verification, either :json:`"pass"` or :json:`"fail"` +- :json:`"verification_class"`: Name of the verification from the library to carry out +- :json:`"datapoints_source"`: Dictionary that contains information on the data points used for the verification; They can be of different types: :json:`"parameters"` (constant values), :json:`"dev_settings"` (mapping of the expected datapoint for the verification to column headers in the data), or :json:`"idf_output_variables"` (for EnergyPlus-based simulations); The latter should be defined also as a dictionary where each variable is expressed through a :json:`"subject"` (EnergyPlus output variable name), :json:`"variable"` (EnergyPlus output variable type), and :json:`"frequency"` (EnergyPlus output variable reporting frequency), see an example below + +.. sourcecode:: JSON + + "idf_output_variables": { + "T_sa_set": { + "subject": "VAV_1 Supply Equipment Outlet Node", + "variable": "System Node Setpoint Temperature", + "frequency": "detailed" + } + } + +.. _library: + +Using **ConStrain** as a Python Library +---------------------------------------- + +First, let's import the package. + +.. sourcecode:: python + + import constrain as cs + +**ConStrain** includes an :python:`Examples` module which contains sample data and examples of verifications. Information about each example can be obtained by running the following command. A dictionary is returned which shows information about each example. + +.. sourcecode:: python + + # Load examples + examples = cs.Examples() + + # Get the data + data = examples.info + +Let's proceed with :python:`example_1` which according to its description aims to: + + *Perform verification of ASHRAE Guideline 36-2021 sequence of operation on a dataset generated through the simulation of an AHU in Modelica. The verifications include the following: supply temperature reset, outdoor air damper psition for relief damper/fan, and return air damper psition for relief damper/fan*. + +.. sourcecode:: python + + # Get the data + data = examples.data("example_1") + + # Loading the verification cases + cases = cs.api.VerificationCase(json_case_path=examples.verifications("example_1")) + +Here, :python:`data` is a :python:`pandas.DataFrame` which contains the timeseries for the verification, and :python:`cases` is a **ConStrain** :meth:`api.verification_case.VerificationCase` that contains all the information needed to perform a verification. To see the case information in a readable format (dictionary), run :python:`cases.case_suite`. Outside of examples, data for verifications can be directly loaded as :python:`pandas.DataFrame` and pre-processed using the functions in :meth:`api.data_processing` of **ConStrain**. + +Next, we want to validate :python:`cases` by calling :meth:`api.verification_case.VerificationCase.validate` to make sure that the verification structure is correct. + +.. sourcecode:: python + + cases.validate() + +Then, we'll want to instantiate a verification and configure it, and run the verifications. + +.. sourcecode:: python + + verif = cs.api.Verification(verifications=cases) + verif.configure(output_path = "./", + lib_items_path = examples.library(), + plot_option = "all-expand", + fig_size = (10, 5), + num_threads = 1, + preprocessed_data = data) + verif.run() + +Finally, we can create summary report. A summary report for all verification will be created which will show the status of each verification + +.. sourcecode:: python + + reporting = cs.api.Reporting(verification_json= "./*_md.json", + result_md_name = "report_summary.md", + report_format = "markdown") + + reporting.report_multiple_cases() + +.. _workflow: + +Using **ConStrain**'s' Workflows +---------------------------------- + +A workflow is a group of instructions that define an end-to-end verification, from data parsing and manipulation to running the verfication(s) and reporting the results. Workflows are defined using the JSON file format so once they have been established they can be re-used easily without making significant modifications. Workflows rely on **ConStrain**'s APIs. + +Below is shown a valid workflow. + +.. sourcecode:: JSON + + { + "workflow_name": "G36 Demo workflow", + "meta": { + "author": "ConStrain Team", + "date": "06/29/2023", + "version": "1.0", + "description": "Demo workflow to showcase G36 verification item development" + }, + "imports": [ + "numpy as np", + "pandas as pd" + ], + "states": { + "load data": { + "Type": "MethodCall", + "MethodCall": "DataProcessing", + "Parameters": { + "data_path": "./demo/G36_demo/data/G36_Modelica_Jan.csv", + "data_source": "EnergyPlus" + }, + "Payloads": { + "data_processing_obj": "$", + "data": "$.data" + }, + "Start": "True", + "Next": "load verification cases" + }, + "load verification cases": { + "Type": "MethodCall", + "MethodCall": "VerificationCase", + "Parameters": { + "json_case_path": "./demo/G36_demo/data/G36_library_verification_cases.json" + }, + "Payloads": { + "verification_case_obj": "$", + "original_case_keys": "$.case_suite.keys()" + }, + "Next": "check original case length" + }, + "check original case length": { + "Type": "Choice", + "Choices": [ + { + "Value": "len(Payloads['original_case_keys']) == 3", + "Equals": "True", + "Next": "validate cases" + } + ], + "Default": "Report Error in workflow" + }, + "validate cases": { + "Type": "Choice", + "Choices": [ + { + "Value": "Payloads['verification_case_obj'].validate()", + "Equals": "True", + "Next": "setup verification" + } + ], + "Default": "Report Error in workflow" + }, + "setup verification": { + "Type": "MethodCall", + "MethodCall": "Verification", + "Parameters": { + "verifications": "Payloads['verification_case_obj']" + }, + "Payloads": { + "verification_obj": "$" + }, + "Next": "configure verification runner" + }, + "configure verification runner": { + "Type": "MethodCall", + "MethodCall": "Payloads['verification_obj'].configure", + "Parameters": { + "output_path": "./demo/G36_demo", + "lib_items_path": "./schema/library.json", + "plot_option": "+x None", + "fig_size": "+x (6, 5)", + "num_threads": 1, + "preprocessed_data": "Payloads['data']" + }, + "Payloads": {}, + "Next": "run verification" + }, + "run verification": { + "Type": "MethodCall", + "MethodCall": "Payloads['verification_obj'].run", + "Parameters": {}, + "Payloads": { + "verification_return": "$" + }, + "Next": "check results" + }, + "check results": { + "Type": "MethodCall", + "MethodCall": "glob.glob", + "Parameters": [ + "./demo/G36_demo/*_md.json" + ], + "Payloads": { + "length_of_mdjson": "len($)" + }, + "Next": "check number of result files" + }, + "check number of result files": { + "Type": "Choice", + "Choices": [ + { + "Value": "Payloads['length_of_mdjson']", + "Equals": "3", + "Next": "reporting_object_instantiation" + } + ], + "Default": "Report Error in workflow" + }, + "reporting_object_instantiation": { + "Type": "MethodCall", + "MethodCall": "Reporting", + "Parameters": { + "verification_json": "./demo/G36_demo/*_md.json", + "result_md_name": "report_summary.md", + "report_format": "markdown" + }, + "Payloads": { + "reporting_obj": "$" + }, + "Next": "report_cases" + }, + "report_cases": { + "Type": "MethodCall", + "MethodCall": "Payloads['reporting_obj'].report_multiple_cases", + "Parameters": {}, + "Payloads": {}, + "Next": "Success" + }, + "Success": { + "Type": "MethodCall", + "MethodCall": "print", + "Parameters": [ + "Congratulations! the demo workflow is executed with expected results and no error!" + ], + "End": "True" + }, + "Report Error in workflow": { + "Type": "MethodCall", + "MethodCall": "logging.error", + "Parameters": [ + "Something is wrong in the workflow execution" + ], + "End": "True" + } + } + } + +Where: + +- :json:`"workflow_name"`: Name of the workflow +- :json:`"meta"`: Metadata about the workflow +- :json:`"imports"`: Python package import needed to run the workflow +- :json:`"states"`: Sequential steps to follow to perform the verification; :json:`"states"` can either be :json:`"MethodCall"` which represent a method call to one of **ConStrain**'s APIs or a :json:`"Choice"` which can be used to help define alternative steps in a workflow based on the result (referred to as payloads in a workflow). + +Running a workflow can be done as follows. + +.. sourcecode:: python + + import constrain as cs + + workflow_file = "./demo/G36_demo/G36_demo_workflow.json" + workflow = cs.Workflow(workflow=workflow_file) + workflow.run_workflow(verbose=True) + +Using **ConStrain**'s Graphical User Interface (GUI) +----------------------------------------------------- + +Workflow can be pretty complex and difficult to fully visualise from JSON files. **ConStrain** includes a GUI to help user create, edit, and picture workflows. If **ConStrain** has been installed, the GUI can be run by just running :bash:`constrain` in a command prompt or terminal. diff --git a/docs/source/Statement of Need.rst b/docs/source/Statement of Need.rst new file mode 100644 index 00000000..4ecadbde --- /dev/null +++ b/docs/source/Statement of Need.rst @@ -0,0 +1,6 @@ +Statement of Need +================== + +Advances in building control have shown significant potential for improving building energy performance and decarbonization. Studies show that designs utilizing optimized controls that are properly tuned could reduce commercial building energy consumption. Driven by the significant control-related energy-saving potential, commercial building energy codes (such as ASHRAE Standard 90.1) have progressed with many control-related addenda. + +However, one of the challenges to realizing those savings is the correct implementation of such advanced control strategies and regularly verifying their actual operational performance. A field study found that only 50% of systems observed have their control system correctly configured to meet the energy codes requirement, and control-related compliance verification is typically not included in the commissioning scope. Current control verification is often conducted manually, which is time-consuming, ad-hoc, incomplete, and error-prone. \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 91af83b8..1a6abc1b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -17,6 +17,10 @@ sys.path.insert(0, os.path.abspath("../../constrain")) import api +sys.path.append(os.getcwd()) +import generate_verification_docs + +generate_verification_docs.generate_verification_docs() # -- Project information ----------------------------------------------------- @@ -25,9 +29,9 @@ author = "Pacific Northwest National Laboratory" # The short X.Y version -version = "0.1.0" +version = "0.4.0" # The full version, including alpha/beta/rc tags -release = "0.1.0" +release = "0.4.0" # -- General configuration --------------------------------------------------- @@ -214,7 +218,7 @@ # -- Options for intersphinx extension --------------------------------------- # Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {"https://docs.python.org/": None} +intersphinx_mapping = {"": ("https://docs.python.org/", None)} # -- Options for todo extension ---------------------------------------------- diff --git a/docs/source/generate_verification_docs.py b/docs/source/generate_verification_docs.py new file mode 100644 index 00000000..0bce8360 --- /dev/null +++ b/docs/source/generate_verification_docs.py @@ -0,0 +1,59 @@ +""" +This scripts auto-generate the documentationfor verifications included in the library +""" + +import json + +LIBRARY_PATH = "../../schema/library.json" + + +def upper_case_all_words(words): + upper_case_words = [] + for word in words: + upper_case_words.append(f"{word[0].upper()}{word[1:]}") + return upper_case_words + + +def generate_verification_docs(): + lib = json.load(open(LIBRARY_PATH, "r")) + main_doc_page = open("./Verifications.rst", "w") + main_doc_page.write("Verifications\n===============\n\n") + main_doc_page.write( + "Listed below are all the verification currently implemented in ConStrain.\n\n" + ) + main_doc_page.write(".. toctree::\n") + main_doc_page.write(" :maxdepth: 1\n\n") + for verification, verification_info in lib.items(): + main_doc_page.write(f" {verification}\n") + verification_documentation = open(f"./{verification}.rst", "w") + verification_documentation.write(f"{verification}\n") + verification_documentation.write( + "====================================================================\n\n" + ) + for k in verification_info.keys(): + # skip IDs + if "id" not in k: + subtitle_words = k.split("_") + # inverse description + if "description" in subtitle_words: + subtitle_words.reverse() + verification_documentation.write( + f"{' '.join(upper_case_all_words(subtitle_words))}\n" + ) + verification_documentation.write( + "-------------------------------------------------------------------------------\n" + ) + content = verification_info[k] + if isinstance(content, list): + for i in range(len(content)): + verification_documentation.write(f" * {content[i]}\n\n") + elif isinstance(content, dict): + for k, v in content.items(): + verification_documentation.write(f" * {k}: {content[k]}\n") + verification_documentation.write("\n") + else: + verification_documentation.write(f"{content.capitalize()}\n\n") + + +if __name__ == "__main__": + generate_verification_docs() diff --git a/docs/source/index.rst b/docs/source/index.rst index 87aacf6c..6984959d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -3,7 +3,18 @@ Documentation for ConStrain **Version**: |release| +**ConStrain** is a data-driven knowledge-integrated framework that automatically verifies that controls function as intended. **ConStrain** is designed around three key features: building control knowledge integration, analytics, and automation. The framework includes three major components: a control verification algorithm library (rule-based, procedure-based, and AI-based), an automated preparation process and verification case generation, a standardized performance evaluation and reporting process. + +Applications of **ConStrain** include verifications of the implementation of control-related building energy code requirements (e.g., ASHRAE Standard 90.1) and sequences of operation (e.g., ASHRAE Guideline 36) using either data generated from building energy simulations and/or actual building monitoring system trend data. + .. toctree:: :maxdepth: 1 - Code Documentation \ No newline at end of file + Statement of Need + Quickstart Guide + Verifications + Expand Exisiting Verifications + Code Documentation + Contributing + License + Acknowledgment \ No newline at end of file diff --git a/schema/library.json b/schema/library.json index 6496359f..cc8af507 100644 --- a/schema/library.json +++ b/schema/library.json @@ -2,7 +2,7 @@ "SupplyAirTempReset": { "library_item_id": 1, "description_brief": "Cooling supply air temperature reset scale (25%)", - "description_detail": "Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.", + "description_detailed": "Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.", "description_index": [ "Section 6.5.3.5 in 90.1-2016" ], @@ -19,7 +19,7 @@ "EconomizerHighLimitA": { "library_item_id": 2, "description_brief": "Fixed dry bulb economizer high limit", - "description_detail": "Economizer needs to be OFF when High-Limit Condition was satisfied. Y_e_HL =f($Climate Zone, $Toa, $Tra, $hoa, $hra)", + "description_detailed": "Economizer needs to be OFF when High-Limit Condition was satisfied. Y_e_HL =f($Climate Zone, $Toa, $Tra, $hoa, $hra)", "description_index": [ "Table 6.5.1.1.3 in 90.1-2016" ], @@ -38,7 +38,7 @@ "EconomizerHighLimitB": { "library_item_id": 3, "description_brief": "Differential dry bulb economizer high limit", - "description_detail": "Check the 90.1-2016 table", + "description_detailed": "Check the 90.1-2016 table", "description_index": [ "Table 6.5.1.1.3 in 90.1-2016" ], @@ -57,7 +57,7 @@ "EconomizerHighLimitC": { "library_item_id": 4, "description_brief": "Fixed enthalpy + fixed dry bulb economizer high limit", - "description_detail": "N/A", + "description_detailed": "N/A", "description_index": [ "Table 6.5.1.1.3 in 90.1-2016" ], @@ -78,7 +78,7 @@ "EconomizerHighLimitD": { "library_item_id": 5, "description_brief": "Differential enthalpy + fixed dry bulb economizer high limit (case study)", - "description_detail": "N/A", + "description_detailed": "N/A", "description_index": [ "Table 6.5.1.1.3 in 90.1-2016" ], @@ -99,7 +99,7 @@ "IntegratedEconomizerControl": { "library_item_id": 6, "description_brief": "Economizer shall be integrated with mechanical cooling", - "description_detail": "Economizer systems shall be integrated with the mechanical cooling system and be capable of and configured to provide partial cooling even when additional mechanical cooling is required to meet the remainder of the cooling load. Controls shall not false load the mechanical cooling systems by limiting or disabling the economizer or by any other means, such as hot-gas bypass, except at the lowest stage of mechanical cooling. (case study, add non-integrated economizer (check each seprate on, but not both on)", + "description_detailed": "Economizer systems shall be integrated with the mechanical cooling system and be capable of and configured to provide partial cooling even when additional mechanical cooling is required to meet the remainder of the cooling load. Controls shall not false load the mechanical cooling systems by limiting or disabling the economizer or by any other means, such as hot-gas bypass, except at the lowest stage of mechanical cooling. (case study, add non-integrated economizer (check each seprate on, but not both on)", "description_index": [ "Section 6.5.1.3 in 90.1-2016" ], @@ -117,7 +117,7 @@ "ERVRatio": { "library_item_id": 7, "description_brief": "ERV ratio of at least 50%", - "description_detail": "Energy recovery systems required by this section shall result in an enthalpy recovery ratio of at least 50%. A 50% enthalpy recovery ratio shall mean a change in the enthalpy of the outdoor air supply equal to 50% of the difference between the outdoor air and entering exhaust air enthalpies at design conditions.", + "description_detailed": "Energy recovery systems required by this section shall result in an enthalpy recovery ratio of at least 50%. A 50% enthalpy recovery ratio shall mean a change in the enthalpy of the outdoor air supply equal to 50% of the difference between the outdoor air and entering exhaust air enthalpies at design conditions.", "description_index": [ "Section 6.5.6.1 in 90.1-2016" ], @@ -135,7 +135,7 @@ "ZoneTempControl": { "library_item_id": 8, "description_brief": "Zone temperature setpoint deadband >= 5F (2.77C)", - "description_detail": "Where used to control both heating and cooling, zone thermostatic controls shall be capable of and configured to provide a temperature range or dead band of at least 5°F within which the supply of heating and cooling energy to the zone is shut off or reduced to a minimum. (case study for zone temperature reset, not for this one)", + "description_detailed": "Where used to control both heating and cooling, zone thermostatic controls shall be capable of and configured to provide a temperature range or dead band of at least 5°F within which the supply of heating and cooling energy to the zone is shut off or reduced to a minimum. (case study for zone temperature reset, not for this one)", "description_index": [ "Section 6.4.3.1.2 in 90.1-2016" ], @@ -152,7 +152,7 @@ "HWReset": { "library_item_id": 9, "description_brief": "Hot water supply water temperature reset", - "description_detail": "Hot-water systems with a design capacity exceeding 300,000 Btu/h supplying heated water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)", + "description_detailed": "Hot-water systems with a design capacity exceeding 300,000 Btu/h supplying heated water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)", "description_index": [ "Section 6.5.4.4 in 90.1-2016" ], @@ -174,7 +174,7 @@ "CHWReset": { "library_item_id": 10, "description_brief": "Chilled water supply water temperature reset", - "description_detail": "Chilled-water systems with a design capacity exceeding 300,000 Btu/h supplying chilled water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)", + "description_detailed": "Chilled-water systems with a design capacity exceeding 300,000 Btu/h supplying chilled water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)", "description_index": [ "Section 6.5.4.4 in 90.1-2016" ], @@ -196,7 +196,7 @@ "ZoneHeatSetpointMinimum": { "library_item_id": 11, "description_brief": "Zone heating setpoint reset temperature minimum value check", - "description_detail": "Heating systems located in climate zones 2-8 shall be equipped with controls that have the capability to automatically restart and temporarily operate the system as required to maintain zone temperatures above a heating setpoint adjustable down to 55°F or lower. (case study)", + "description_detailed": "Heating systems located in climate zones 2-8 shall be equipped with controls that have the capability to automatically restart and temporarily operate the system as required to maintain zone temperatures above a heating setpoint adjustable down to 55°F or lower. (case study)", "description_index": [ "Section 6.4.3.2.2 in 90.1-2004" ], @@ -537,7 +537,7 @@ "G36SupplyAirTemperatureSetpoint": { "library_item_id": 30, "description_brief": "Supply air temperature operation following the Guideline 36 recommendations", - "description_detail": "Verify that the supply air temperature setpoint of a system follows the Guideline 36 recommendations", + "description_detailed": "Verify that the supply air temperature setpoint of a system follows the Guideline 36 recommendations", "description_index": [ "Section 5.16.2.2 in ASHRAE Guideline 36-2021" ], @@ -605,7 +605,7 @@ "G36ReturnAirDamperPositionForReliefDamperOrFan": { "library_item_id": 32, "description_brief": "Verify that the return air damper operation follows Guideline 36 recommendations for systems with relief damper/fan", - "description_detail": "Verify that the return air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", + "description_detailed": "Verify that the return air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", "description_index": [ "Section 5.16.2.3 in ASHRAE Guideline 36-2021" ], @@ -649,7 +649,7 @@ "G36OutdoorAirDamperPositionForReliefDamperOrFan": { "library_item_id": 33, "description_brief": "Verify that the outdoor air damper operation follows Guideline 36 recommendations for systems with relief damper/fan", - "description_detail": "Verify that the outdoor air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", + "description_detailed": "Verify that the outdoor air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", "description_index": [ "Section 5.16.2.3 in ASHRAE Guideline 36-2021" ], @@ -706,7 +706,7 @@ "G36ReturnAirDamperPositionForReturnFanAirflowTracking": { "library_item_id": 34, "description_brief": "Verify that the return air damper operation follows Guideline 36 recommendations for systems with return fan with airflow tracking", - "description_detail": "Verify that the return air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", + "description_detailed": "Verify that the return air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", "description_index": [ "Section 5.16.2.3 in ASHRAE Guideline 36-2021" ], @@ -724,7 +724,7 @@ "G36OutdoorAirDamperPositionForReturnFanAirflowTracking": { "library_item_id": 35, "description_brief": "Verify that the outdoor air damper operation follows Guideline 36 recommendations for systems with return fan with airflow tracking", - "description_detail": "Verify that the outdoor air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", + "description_detailed": "Verify that the outdoor air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", "description_index": [ "Section 5.16.2.3 in ASHRAE Guideline 36-2021" ], @@ -746,7 +746,7 @@ "G36ReliefAirDamperPositionForReturnFanAirflowTracking": { "library_item_id": 36, "description_brief": "Verify that the outdoor air damper operation follows Guideline 36 recommendations for systems with return fan with airflow tracking", - "description_detail": "Verify that the outdoor air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", + "description_detailed": "Verify that the outdoor air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", "description_index": [ "Section 5.16.2.3 in ASHRAE Guideline 36-2021" ], @@ -783,7 +783,7 @@ "G36ReturnAirDamperPositionForReturnFanDirectBuildingPressure": { "library_item_id": 37, "description_brief": "Verify that the return air damper operation follows Guideline 36 recommendations for systems with return fan with direct building pressure control", - "description_detail": "Verify that the return air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", + "description_detailed": "Verify that the return air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", "description_index": [ "Section 5.16.2.3 in ASHRAE Guideline 36-2021" ], @@ -819,7 +819,7 @@ "G36OutdoorAirDamperPositionForReturnFanDirectBuildingPressure": { "library_item_id": 38, "description_brief": "Verify that the outdoor air damper operation follows Guideline 36 recommendations for systems with return fan with direct building pressure control", - "description_detail": "Verify that the outdoor air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", + "description_detailed": "Verify that the outdoor air damper operation follows the Guideline 36 recommendations for supply air temperature setpoint operations", "description_index": [ "Section 5.16.2.3 in ASHRAE Guideline 36-2021" ], diff --git a/tests/api/data/reporting_data/ASHRAE901_Hospital_STD2004_Atlanta_Batch0_md.json b/tests/api/data/reporting_data/ASHRAE901_Hospital_STD2004_Atlanta_Batch0_md.json index ec660626..b87aa3cc 100644 --- a/tests/api/data/reporting_data/ASHRAE901_Hospital_STD2004_Atlanta_Batch0_md.json +++ b/tests/api/data/reporting_data/ASHRAE901_Hospital_STD2004_Atlanta_Batch0_md.json @@ -1 +1 @@ -{"2": {"md_content": "\n## Results for Verification Case ID 2\n\n### Pass/Fail check result\n{'Sample #': 52978, 'Pass #': 0, 'Fail #': 52978, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 1.0, 'Failure Severity': 0.28, 'Priority Ranking': 4, 'Calculated Priority Ranking': 0.28, 'Max Actual Control1': 0.0, 'Max Control Setpoint1': 2.8}\n\n### Result visualization\n\n![../results/imgs/VerificationCase2\\All_plot_aio.png](./imgs/VerificationCase2\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase2\\All_plot_obo.png](./imgs/VerificationCase2\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase2\\Day_plot_aio.png](./imgs/VerificationCase2\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase2\\Day_plot_obo.png](./imgs/VerificationCase2\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 2,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2004_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"fail\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_sa_set\": {\n \"subject\": \"VAV_1 Supply Equipment Outlet Node\",\n \"variable\": \"System Node Setpoint Temperature\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"T_z_coo\": 24.0\n }\n },\n \"verification_class\": \"SupplyAirTempReset\",\n \"library_item_id\": 1,\n \"description_brief\": \"Cooling supply air temperature reset scale (25%)\",\n \"description_detail\": \"Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.\",\n \"description_index\": [\n \"Section 6.5.3.5 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_sa_set\": \"AHU supply air temperature setpoint\",\n \"T_z_coo\": \"Design zone cooling air temperature\"\n },\n \"description_assertions\": [\n \"Max(T_sa_set) - Min(T_sa_set) >= (T_z_coo - Min(T_sa_set)) * 0.25\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52978, "Pass #": 0, "Fail #": 52978, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 1.0, "Failure Severity": 0.28, "Priority Ranking": 4, "Calculated Priority Ranking": 0.28, "Max Actual Control1": 0.0, "Max Control Setpoint1": 2.8}, "model_file": "ASHRAE901_Hospital_STD2004_Atlanta", "verification_class": "SupplyAirTempReset"}, "4": {"md_content": "\n## Results for Verification Case ID 4\n\n### Pass/Fail check result\n{'Sample #': 52978, 'Pass #': 0, 'Fail #': 52978, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 1.0, 'Failure Severity': 0.28, 'Priority Ranking': 4, 'Calculated Priority Ranking': 0.28, 'Max Actual Control1': 0.0, 'Max Control Setpoint1': 2.8}\n\n### Result visualization\n\n![../results/imgs/VerificationCase4\\All_plot_aio.png](./imgs/VerificationCase4\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase4\\All_plot_obo.png](./imgs/VerificationCase4\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase4\\Day_plot_aio.png](./imgs/VerificationCase4\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase4\\Day_plot_obo.png](./imgs/VerificationCase4\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 4,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2004_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"fail\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_sa_set\": {\n \"subject\": \"VAV_2 Supply Equipment Outlet Node\",\n \"variable\": \"System Node Setpoint Temperature\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"T_z_coo\": 24.0\n }\n },\n \"verification_class\": \"SupplyAirTempReset\",\n \"library_item_id\": 1,\n \"description_brief\": \"Cooling supply air temperature reset scale (25%)\",\n \"description_detail\": \"Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.\",\n \"description_index\": [\n \"Section 6.5.3.5 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_sa_set\": \"AHU supply air temperature setpoint\",\n \"T_z_coo\": \"Design zone cooling air temperature\"\n },\n \"description_assertions\": [\n \"Max(T_sa_set) - Min(T_sa_set) >= (T_z_coo - Min(T_sa_set)) * 0.25\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52978, "Pass #": 0, "Fail #": 52978, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 1.0, "Failure Severity": 0.28, "Priority Ranking": 4, "Calculated Priority Ranking": 0.28, "Max Actual Control1": 0.0, "Max Control Setpoint1": 2.8}, "model_file": "ASHRAE901_Hospital_STD2004_Atlanta", "verification_class": "SupplyAirTempReset"}, "8": {"md_content": "\n## Results for Verification Case ID 8\n\n### Pass/Fail check result\n{'Sample #': 52560, 'Pass #': 152, 'Fail #': 52408, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 0.997, 'Failure Severity': 3.301, 'Priority Ranking': 9, 'Calculated Priority Ranking': 3.291, 'Max Actual Control1': 82.0, 'Max Control Setpoint1': 60.0, 'Max Actual Control2': 82.0, 'Max Control Setpoint2': 48.89}\n\n### Result visualization\n\n![../results/imgs/VerificationCase8\\All_plot_aio.png](./imgs/VerificationCase8\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase8\\All_plot_obo.png](./imgs/VerificationCase8\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase8\\Day_plot_aio.png](./imgs/VerificationCase8\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase8\\Day_plot_obo.png](./imgs/VerificationCase8\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 8,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2004_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"fail\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_oa_db\": {\n \"subject\": \"Environment\",\n \"variable\": \"Site Outdoor Air Drybulb Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"T_hw\": {\n \"subject\": \"HeatSys1 Supply Outlet Node\",\n \"variable\": \"System Node Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"m_hw\": {\n \"subject\": \"HeatSys1 Supply Outlet Node\",\n \"variable\": \"System Node Mass Flow Rate\",\n \"frequency\": \"TimeStep\"\n }\n },\n \"parameters\": {\n \"T_oa_max\": 10,\n \"T_oa_min\": -6.7,\n \"T_hw_max_st\": 60.0,\n \"T_hw_min_st\": 48.89\n }\n },\n \"verification_class\": \"HWReset\",\n \"library_item_id\": 9,\n \"description_brief\": \"Hot water supply water temperature reset\",\n \"description_detail\": \"Hot-water systems with a design capacity exceeding 300,000 Btu/h supplying heated water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)\",\n \"description_index\": [\n \"Section 6.5.4.4 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_oa_db\": \"OA dry-bulb temperature\",\n \"T_oa_max\": \"OA dry-bulb upper threshold\",\n \"T_oa_min\": \"OA dry-bulb lower threshold\",\n \"T_hw\": \"Hot water temp observed from the system node\",\n \"m_hw\": \"Hot water flow rate\",\n \"T_hw_max_st\": \"Hot water maximum temp setpoint\",\n \"T_hw_min_st\": \"Hot water minimum temp setpoint\"\n },\n \"description_assertions\": [\n \"When m_hw > 0, T_hw <= T_hw_max_st and T_hw >= T_hw_min_st; When m_hw < 0, always pass\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52560, "Pass #": 152, "Fail #": 52408, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 0.997, "Failure Severity": 3.301, "Priority Ranking": 9, "Calculated Priority Ranking": 3.291, "Max Actual Control1": 82.0, "Max Control Setpoint1": 60.0, "Max Actual Control2": 82.0, "Max Control Setpoint2": 48.89}, "model_file": "ASHRAE901_Hospital_STD2004_Atlanta", "verification_class": "HWReset"}, "10": {"md_content": "\n## Results for Verification Case ID 10\n\n### Pass/Fail check result\n{'Sample #': 52560, 'Pass #': 16040, 'Fail #': 36520, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 0.695, 'Failure Severity': 0.11, 'Priority Ranking': 9, 'Calculated Priority Ranking': 0.076, 'Max Actual Control1': 9.709, 'Max Control Setpoint1': 8.89, 'Max Actual Control2': 9.709, 'Max Control Setpoint2': 6.7}\n\n### Result visualization\n\n![../results/imgs/VerificationCase10\\All_plot_aio.png](./imgs/VerificationCase10\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase10\\All_plot_obo.png](./imgs/VerificationCase10\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase10\\Day_plot_aio.png](./imgs/VerificationCase10\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase10\\Day_plot_obo.png](./imgs/VerificationCase10\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 10,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2004_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"fail\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_oa_db\": {\n \"subject\": \"Environment\",\n \"variable\": \"Site Outdoor Air Drybulb Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"T_chw\": {\n \"subject\": \"CoolSys1 Supply Outlet Node\",\n \"variable\": \"System Node Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"m_chw\": {\n \"subject\": \"CoolSys1 Supply Outlet Node\",\n \"variable\": \"System Node Mass Flow Rate\",\n \"frequency\": \"TimeStep\"\n }\n },\n \"parameters\": {\n \"T_oa_max\": 21.11,\n \"T_oa_min\": 12.78,\n \"T_chw_max_st\": 8.89,\n \"T_chw_min_st\": 6.7\n }\n },\n \"verification_class\": \"CHWReset\",\n \"library_item_id\": 10,\n \"description_brief\": \"Chilled water supply water temperature reset\",\n \"description_detail\": \"Chilled-water systems with a design capacity exceeding 300,000 Btu/h supplying chilled water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)\",\n \"description_index\": [\n \"Section 6.5.4.4 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_oa_db\": \"OA dry-bulb temperature\",\n \"T_oa_max\": \"OA dry-bulb upper threshold\",\n \"T_oa_min\": \"OA dry-bulb lower threshold\",\n \"T_chw\": \"Chilled water temp observed from the system node\",\n \"m_chw\": \"Chilled water flow rate\",\n \"T_chw_max_st\": \"Chilled water maximum temp setpoint\",\n \"T_chw_min_st\": \"Chilled water minimum temp setpoint\"\n },\n \"description_assertions\": [\n \"When m_chw > 0, T_chw <= T_chw_max_st and T_chw >= T_chw_min_st; When m_chw <= 0 , always pass\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52560, "Pass #": 16040, "Fail #": 36520, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 0.695, "Failure Severity": 0.11, "Priority Ranking": 9, "Calculated Priority Ranking": 0.076, "Max Actual Control1": 9.709, "Max Control Setpoint1": 8.89, "Max Actual Control2": 9.709, "Max Control Setpoint2": 6.7}, "model_file": "ASHRAE901_Hospital_STD2004_Atlanta", "verification_class": "CHWReset"}} \ No newline at end of file +{"2": {"md_content": "\n## Results for Verification Case ID 2\n\n### Pass/Fail check result\n{'Sample #': 52978, 'Pass #': 0, 'Fail #': 52978, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 1.0, 'Failure Severity': 0.28, 'Priority Ranking': 4, 'Calculated Priority Ranking': 0.28, 'Max Actual Control1': 0.0, 'Max Control Setpoint1': 2.8}\n\n### Result visualization\n\n![../results/imgs/VerificationCase2\\All_plot_aio.png](./imgs/VerificationCase2\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase2\\All_plot_obo.png](./imgs/VerificationCase2\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase2\\Day_plot_aio.png](./imgs/VerificationCase2\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase2\\Day_plot_obo.png](./imgs/VerificationCase2\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 2,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2004_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"fail\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_sa_set\": {\n \"subject\": \"VAV_1 Supply Equipment Outlet Node\",\n \"variable\": \"System Node Setpoint Temperature\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"T_z_coo\": 24.0\n }\n },\n \"verification_class\": \"SupplyAirTempReset\",\n \"library_item_id\": 1,\n \"description_brief\": \"Cooling supply air temperature reset scale (25%)\",\n \"description_detailed\": \"Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.\",\n \"description_index\": [\n \"Section 6.5.3.5 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_sa_set\": \"AHU supply air temperature setpoint\",\n \"T_z_coo\": \"Design zone cooling air temperature\"\n },\n \"description_assertions\": [\n \"Max(T_sa_set) - Min(T_sa_set) >= (T_z_coo - Min(T_sa_set)) * 0.25\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52978, "Pass #": 0, "Fail #": 52978, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 1.0, "Failure Severity": 0.28, "Priority Ranking": 4, "Calculated Priority Ranking": 0.28, "Max Actual Control1": 0.0, "Max Control Setpoint1": 2.8}, "model_file": "ASHRAE901_Hospital_STD2004_Atlanta", "verification_class": "SupplyAirTempReset"}, "4": {"md_content": "\n## Results for Verification Case ID 4\n\n### Pass/Fail check result\n{'Sample #': 52978, 'Pass #': 0, 'Fail #': 52978, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 1.0, 'Failure Severity': 0.28, 'Priority Ranking': 4, 'Calculated Priority Ranking': 0.28, 'Max Actual Control1': 0.0, 'Max Control Setpoint1': 2.8}\n\n### Result visualization\n\n![../results/imgs/VerificationCase4\\All_plot_aio.png](./imgs/VerificationCase4\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase4\\All_plot_obo.png](./imgs/VerificationCase4\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase4\\Day_plot_aio.png](./imgs/VerificationCase4\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase4\\Day_plot_obo.png](./imgs/VerificationCase4\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 4,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2004_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"fail\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_sa_set\": {\n \"subject\": \"VAV_2 Supply Equipment Outlet Node\",\n \"variable\": \"System Node Setpoint Temperature\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"T_z_coo\": 24.0\n }\n },\n \"verification_class\": \"SupplyAirTempReset\",\n \"library_item_id\": 1,\n \"description_brief\": \"Cooling supply air temperature reset scale (25%)\",\n \"description_detailed\": \"Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.\",\n \"description_index\": [\n \"Section 6.5.3.5 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_sa_set\": \"AHU supply air temperature setpoint\",\n \"T_z_coo\": \"Design zone cooling air temperature\"\n },\n \"description_assertions\": [\n \"Max(T_sa_set) - Min(T_sa_set) >= (T_z_coo - Min(T_sa_set)) * 0.25\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52978, "Pass #": 0, "Fail #": 52978, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 1.0, "Failure Severity": 0.28, "Priority Ranking": 4, "Calculated Priority Ranking": 0.28, "Max Actual Control1": 0.0, "Max Control Setpoint1": 2.8}, "model_file": "ASHRAE901_Hospital_STD2004_Atlanta", "verification_class": "SupplyAirTempReset"}, "8": {"md_content": "\n## Results for Verification Case ID 8\n\n### Pass/Fail check result\n{'Sample #': 52560, 'Pass #': 152, 'Fail #': 52408, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 0.997, 'Failure Severity': 3.301, 'Priority Ranking': 9, 'Calculated Priority Ranking': 3.291, 'Max Actual Control1': 82.0, 'Max Control Setpoint1': 60.0, 'Max Actual Control2': 82.0, 'Max Control Setpoint2': 48.89}\n\n### Result visualization\n\n![../results/imgs/VerificationCase8\\All_plot_aio.png](./imgs/VerificationCase8\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase8\\All_plot_obo.png](./imgs/VerificationCase8\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase8\\Day_plot_aio.png](./imgs/VerificationCase8\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase8\\Day_plot_obo.png](./imgs/VerificationCase8\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 8,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2004_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"fail\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_oa_db\": {\n \"subject\": \"Environment\",\n \"variable\": \"Site Outdoor Air Drybulb Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"T_hw\": {\n \"subject\": \"HeatSys1 Supply Outlet Node\",\n \"variable\": \"System Node Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"m_hw\": {\n \"subject\": \"HeatSys1 Supply Outlet Node\",\n \"variable\": \"System Node Mass Flow Rate\",\n \"frequency\": \"TimeStep\"\n }\n },\n \"parameters\": {\n \"T_oa_max\": 10,\n \"T_oa_min\": -6.7,\n \"T_hw_max_st\": 60.0,\n \"T_hw_min_st\": 48.89\n }\n },\n \"verification_class\": \"HWReset\",\n \"library_item_id\": 9,\n \"description_brief\": \"Hot water supply water temperature reset\",\n \"description_detailed\": \"Hot-water systems with a design capacity exceeding 300,000 Btu/h supplying heated water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)\",\n \"description_index\": [\n \"Section 6.5.4.4 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_oa_db\": \"OA dry-bulb temperature\",\n \"T_oa_max\": \"OA dry-bulb upper threshold\",\n \"T_oa_min\": \"OA dry-bulb lower threshold\",\n \"T_hw\": \"Hot water temp observed from the system node\",\n \"m_hw\": \"Hot water flow rate\",\n \"T_hw_max_st\": \"Hot water maximum temp setpoint\",\n \"T_hw_min_st\": \"Hot water minimum temp setpoint\"\n },\n \"description_assertions\": [\n \"When m_hw > 0, T_hw <= T_hw_max_st and T_hw >= T_hw_min_st; When m_hw < 0, always pass\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52560, "Pass #": 152, "Fail #": 52408, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 0.997, "Failure Severity": 3.301, "Priority Ranking": 9, "Calculated Priority Ranking": 3.291, "Max Actual Control1": 82.0, "Max Control Setpoint1": 60.0, "Max Actual Control2": 82.0, "Max Control Setpoint2": 48.89}, "model_file": "ASHRAE901_Hospital_STD2004_Atlanta", "verification_class": "HWReset"}, "10": {"md_content": "\n## Results for Verification Case ID 10\n\n### Pass/Fail check result\n{'Sample #': 52560, 'Pass #': 16040, 'Fail #': 36520, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 0.695, 'Failure Severity': 0.11, 'Priority Ranking': 9, 'Calculated Priority Ranking': 0.076, 'Max Actual Control1': 9.709, 'Max Control Setpoint1': 8.89, 'Max Actual Control2': 9.709, 'Max Control Setpoint2': 6.7}\n\n### Result visualization\n\n![../results/imgs/VerificationCase10\\All_plot_aio.png](./imgs/VerificationCase10\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase10\\All_plot_obo.png](./imgs/VerificationCase10\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase10\\Day_plot_aio.png](./imgs/VerificationCase10\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase10\\Day_plot_obo.png](./imgs/VerificationCase10\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 10,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2004_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"fail\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_oa_db\": {\n \"subject\": \"Environment\",\n \"variable\": \"Site Outdoor Air Drybulb Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"T_chw\": {\n \"subject\": \"CoolSys1 Supply Outlet Node\",\n \"variable\": \"System Node Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"m_chw\": {\n \"subject\": \"CoolSys1 Supply Outlet Node\",\n \"variable\": \"System Node Mass Flow Rate\",\n \"frequency\": \"TimeStep\"\n }\n },\n \"parameters\": {\n \"T_oa_max\": 21.11,\n \"T_oa_min\": 12.78,\n \"T_chw_max_st\": 8.89,\n \"T_chw_min_st\": 6.7\n }\n },\n \"verification_class\": \"CHWReset\",\n \"library_item_id\": 10,\n \"description_brief\": \"Chilled water supply water temperature reset\",\n \"description_detailed\": \"Chilled-water systems with a design capacity exceeding 300,000 Btu/h supplying chilled water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)\",\n \"description_index\": [\n \"Section 6.5.4.4 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_oa_db\": \"OA dry-bulb temperature\",\n \"T_oa_max\": \"OA dry-bulb upper threshold\",\n \"T_oa_min\": \"OA dry-bulb lower threshold\",\n \"T_chw\": \"Chilled water temp observed from the system node\",\n \"m_chw\": \"Chilled water flow rate\",\n \"T_chw_max_st\": \"Chilled water maximum temp setpoint\",\n \"T_chw_min_st\": \"Chilled water minimum temp setpoint\"\n },\n \"description_assertions\": [\n \"When m_chw > 0, T_chw <= T_chw_max_st and T_chw >= T_chw_min_st; When m_chw <= 0 , always pass\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52560, "Pass #": 16040, "Fail #": 36520, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 0.695, "Failure Severity": 0.11, "Priority Ranking": 9, "Calculated Priority Ranking": 0.076, "Max Actual Control1": 9.709, "Max Control Setpoint1": 8.89, "Max Actual Control2": 9.709, "Max Control Setpoint2": 6.7}, "model_file": "ASHRAE901_Hospital_STD2004_Atlanta", "verification_class": "CHWReset"}} \ No newline at end of file diff --git a/tests/api/data/reporting_data/ASHRAE901_Hospital_STD2019_Atlanta_Batch0_md.json b/tests/api/data/reporting_data/ASHRAE901_Hospital_STD2019_Atlanta_Batch0_md.json index 990adac5..b188aa9e 100644 --- a/tests/api/data/reporting_data/ASHRAE901_Hospital_STD2019_Atlanta_Batch0_md.json +++ b/tests/api/data/reporting_data/ASHRAE901_Hospital_STD2019_Atlanta_Batch0_md.json @@ -1 +1 @@ -{"1": {"md_content": "\n## Results for Verification Case ID 1\n\n### Pass/Fail check result\n{'Sample #': 53573, 'Pass #': 53573, 'Fail #': 0, 'Untest #': 0, 'Verification Passed?': True, 'Failure Ratio': 0.0, 'Failure Severity': 0.0, 'Priority Ranking': 4, 'Calculated Priority Ranking': 0.0, 'Max Actual Control1': 2.8, 'Max Control Setpoint1': 2.8}\n\n### Result visualization\n\n![../results/imgs/VerificationCase1\\All_plot_aio.png](./imgs/VerificationCase1\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase1\\All_plot_obo.png](./imgs/VerificationCase1\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase1\\Day_plot_aio.png](./imgs/VerificationCase1\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase1\\Day_plot_obo.png](./imgs/VerificationCase1\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 1,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_sa_set\": {\n \"subject\": \"VAV_1 Supply Equipment Outlet Node\",\n \"variable\": \"System Node Setpoint Temperature\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"T_z_coo\": 24.0\n }\n },\n \"verification_class\": \"SupplyAirTempReset\",\n \"library_item_id\": 1,\n \"description_brief\": \"Cooling supply air temperature reset scale (25%)\",\n \"description_detail\": \"Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.\",\n \"description_index\": [\n \"Section 6.5.3.5 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_sa_set\": \"AHU supply air temperature setpoint\",\n \"T_z_coo\": \"Design zone cooling air temperature\"\n },\n \"description_assertions\": [\n \"Max(T_sa_set) - Min(T_sa_set) >= (T_z_coo - Min(T_sa_set)) * 0.25\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 53573, "Pass #": 53573, "Fail #": 0, "Untest #": 0, "Verification Passed?": true, "Failure Ratio": 0.0, "Failure Severity": 0.0, "Priority Ranking": 4, "Calculated Priority Ranking": 0.0, "Max Actual Control1": 2.8, "Max Control Setpoint1": 2.8}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "SupplyAirTempReset"}, "3": {"md_content": "\n## Results for Verification Case ID 3\n\n### Pass/Fail check result\n{'Sample #': 53573, 'Pass #': 53573, 'Fail #': 0, 'Untest #': 0, 'Verification Passed?': True, 'Failure Ratio': 0.0, 'Failure Severity': 0.0, 'Priority Ranking': 4, 'Calculated Priority Ranking': 0.0, 'Max Actual Control1': 2.8, 'Max Control Setpoint1': 2.8}\n\n### Result visualization\n\n![../results/imgs/VerificationCase3\\All_plot_aio.png](./imgs/VerificationCase3\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase3\\All_plot_obo.png](./imgs/VerificationCase3\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase3\\Day_plot_aio.png](./imgs/VerificationCase3\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase3\\Day_plot_obo.png](./imgs/VerificationCase3\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 3,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_sa_set\": {\n \"subject\": \"VAV_2 Supply Equipment Outlet Node\",\n \"variable\": \"System Node Setpoint Temperature\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"T_z_coo\": 24.0\n }\n },\n \"verification_class\": \"SupplyAirTempReset\",\n \"library_item_id\": 1,\n \"description_brief\": \"Cooling supply air temperature reset scale (25%)\",\n \"description_detail\": \"Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.\",\n \"description_index\": [\n \"Section 6.5.3.5 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_sa_set\": \"AHU supply air temperature setpoint\",\n \"T_z_coo\": \"Design zone cooling air temperature\"\n },\n \"description_assertions\": [\n \"Max(T_sa_set) - Min(T_sa_set) >= (T_z_coo - Min(T_sa_set)) * 0.25\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 53573, "Pass #": 53573, "Fail #": 0, "Untest #": 0, "Verification Passed?": true, "Failure Ratio": 0.0, "Failure Severity": 0.0, "Priority Ranking": 4, "Calculated Priority Ranking": 0.0, "Max Actual Control1": 2.8, "Max Control Setpoint1": 2.8}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "SupplyAirTempReset"}, "7": {"md_content": "\n## Results for Verification Case ID 7\n\n### Pass/Fail check result\n{'Sample #': 52560, 'Pass #': 52560, 'Fail #': 0, 'Untest #': 0, 'Verification Passed?': True, 'Failure Ratio': 0.0, 'Failure Severity': 0.0, 'Priority Ranking': 9, 'Calculated Priority Ranking': 0.0, 'Max Actual Control1': 60.0, 'Max Control Setpoint1': 60.0, 'Max Actual Control2': 60.0, 'Max Control Setpoint2': 48.89}\n\n### Result visualization\n\n![../results/imgs/VerificationCase7\\All_plot_aio.png](./imgs/VerificationCase7\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase7\\All_plot_obo.png](./imgs/VerificationCase7\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase7\\Day_plot_aio.png](./imgs/VerificationCase7\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase7\\Day_plot_obo.png](./imgs/VerificationCase7\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 7,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_oa_db\": {\n \"subject\": \"Environment\",\n \"variable\": \"Site Outdoor Air Drybulb Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"T_hw\": {\n \"subject\": \"HeatSys1 Supply Outlet Node\",\n \"variable\": \"System Node Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"m_hw\": {\n \"subject\": \"HeatSys1 Supply Outlet Node\",\n \"variable\": \"System Node Mass Flow Rate\",\n \"frequency\": \"TimeStep\"\n }\n },\n \"parameters\": {\n \"T_oa_max\": 10,\n \"T_oa_min\": -6.7,\n \"T_hw_max_st\": 60.0,\n \"T_hw_min_st\": 48.89\n }\n },\n \"verification_class\": \"HWReset\",\n \"library_item_id\": 9,\n \"description_brief\": \"Hot water supply water temperature reset\",\n \"description_detail\": \"Hot-water systems with a design capacity exceeding 300,000 Btu/h supplying heated water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)\",\n \"description_index\": [\n \"Section 6.5.4.4 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_oa_db\": \"OA dry-bulb temperature\",\n \"T_oa_max\": \"OA dry-bulb upper threshold\",\n \"T_oa_min\": \"OA dry-bulb lower threshold\",\n \"T_hw\": \"Hot water temp observed from the system node\",\n \"m_hw\": \"Hot water flow rate\",\n \"T_hw_max_st\": \"Hot water maximum temp setpoint\",\n \"T_hw_min_st\": \"Hot water minimum temp setpoint\"\n },\n \"description_assertions\": [\n \"When m_hw > 0, T_hw <= T_hw_max_st and T_hw >= T_hw_min_st; When m_hw < 0, always pass\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52560, "Pass #": 52560, "Fail #": 0, "Untest #": 0, "Verification Passed?": true, "Failure Ratio": 0.0, "Failure Severity": 0.0, "Priority Ranking": 9, "Calculated Priority Ranking": 0.0, "Max Actual Control1": 60.0, "Max Control Setpoint1": 60.0, "Max Actual Control2": 60.0, "Max Control Setpoint2": 48.89}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "HWReset"}, "9": {"md_content": "\n## Results for Verification Case ID 9\n\n### Pass/Fail check result\n{'Sample #': 52560, 'Pass #': 40157, 'Fail #': 12403, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 0.236, 'Failure Severity': 0.044, 'Priority Ranking': 9, 'Calculated Priority Ranking': 0.01, 'Max Actual Control1': 11.182, 'Max Control Setpoint1': 8.89, 'Max Actual Control2': 11.182, 'Max Control Setpoint2': 6.7}\n\n### Result visualization\n\n![../results/imgs/VerificationCase9\\All_plot_aio.png](./imgs/VerificationCase9\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase9\\All_plot_obo.png](./imgs/VerificationCase9\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase9\\Day_plot_aio.png](./imgs/VerificationCase9\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase9\\Day_plot_obo.png](./imgs/VerificationCase9\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 9,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_oa_db\": {\n \"subject\": \"Environment\",\n \"variable\": \"Site Outdoor Air Drybulb Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"T_chw\": {\n \"subject\": \"CoolSys1 Supply Outlet Node\",\n \"variable\": \"System Node Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"m_chw\": {\n \"subject\": \"CoolSys1 Supply Outlet Node\",\n \"variable\": \"System Node Mass Flow Rate\",\n \"frequency\": \"TimeStep\"\n }\n },\n \"parameters\": {\n \"T_oa_max\": 21.11,\n \"T_oa_min\": 12.78,\n \"T_chw_max_st\": 8.89,\n \"T_chw_min_st\": 6.7\n }\n },\n \"verification_class\": \"CHWReset\",\n \"library_item_id\": 10,\n \"description_brief\": \"Chilled water supply water temperature reset\",\n \"description_detail\": \"Chilled-water systems with a design capacity exceeding 300,000 Btu/h supplying chilled water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)\",\n \"description_index\": [\n \"Section 6.5.4.4 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_oa_db\": \"OA dry-bulb temperature\",\n \"T_oa_max\": \"OA dry-bulb upper threshold\",\n \"T_oa_min\": \"OA dry-bulb lower threshold\",\n \"T_chw\": \"Chilled water temp observed from the system node\",\n \"m_chw\": \"Chilled water flow rate\",\n \"T_chw_max_st\": \"Chilled water maximum temp setpoint\",\n \"T_chw_min_st\": \"Chilled water minimum temp setpoint\"\n },\n \"description_assertions\": [\n \"When m_chw > 0, T_chw <= T_chw_max_st and T_chw >= T_chw_min_st; When m_chw <= 0 , always pass\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52560, "Pass #": 40157, "Fail #": 12403, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 0.236, "Failure Severity": 0.044, "Priority Ranking": 9, "Calculated Priority Ranking": 0.01, "Max Actual Control1": 11.182, "Max Control Setpoint1": 8.89, "Max Actual Control2": 11.182, "Max Control Setpoint2": 6.7}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "CHWReset"}, "14": {"md_content": "\n## Results for Verification Case ID 14\n\n### Pass/Fail check result\n{'Sample #': 53573, 'Pass #': 53573, 'Fail #': 0, 'Untest #': 0, 'Verification Passed?': True, 'Failure Ratio': 0.0, 'Failure Severity': 0.0, 'Priority Ranking': 10, 'Calculated Priority Ranking': 0.0, 'Max Actual Control1': 4.0, 'Max Control Setpoint1': 4.0}\n\n### Result visualization\n\n![../results/imgs/VerificationCase14\\All_plot_aio.png](./imgs/VerificationCase14\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase14\\All_plot_obo.png](./imgs/VerificationCase14\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase14\\Day_plot_aio.png](./imgs/VerificationCase14\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase14\\Day_plot_obo.png](./imgs/VerificationCase14\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 14,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"ct_op_cells\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Operating Cells Count\",\n \"frequency\": \"detailed\"\n },\n \"m\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Mass Flow Rate\",\n \"frequency\": \"detailed\"\n },\n \"P_fan_ct\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Fan Electric Power\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"ct_cells\": 4,\n \"m_des\": 0.0375568,\n \"min_flow_frac_per_cell\": 0.05\n }\n },\n \"verification_class\": \"HeatRejectionFanVariableFlowControlsCells\",\n \"library_item_id\": 19,\n \"description_brief\": \"Heat rejection fan variable flow controls cells\",\n \"description_index\": [\n \"Section 6.5.5.2.2 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"ct_op_cells\": \"Number of operating cooling tower cells\",\n \"ct_cells\": \"Number of cooling tower cells\",\n \"m\": \"Cooling tower mass flow rate\",\n \"m_des\": \"Cooling tower design mass flow rate\",\n \"min_flow_frac_per_cell\": \"Minimum flow fraction per cooling tower cell\",\n \"P_fan_ct\": \"Cooling tower fan power\"\n },\n \"description_assertions\": [\n \"if the number of operating cooling tower cells is equal to the maximum number of cooling tower cells then pass else fail\"\n ],\n \"description_verification_type\": \"procedure-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 53573, "Pass #": 53573, "Fail #": 0, "Untest #": 0, "Verification Passed?": true, "Failure Ratio": 0.0, "Failure Severity": 0.0, "Priority Ranking": 10, "Calculated Priority Ranking": 0.0, "Max Actual Control1": 4.0, "Max Control Setpoint1": 4.0}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "HeatRejectionFanVariableFlowControlsCells"}, "21": {"md_content": "\n## Results for Verification Case ID 21\n\n### Pass/Fail check result\n{'Sample #': 1, 'Pass #': 17832, 'Fail #': 0, 'Verification Passed?': True, 'Failure Ratio': 0, 'Failure Severity': 0.0, 'Priority Ranking': 'N/A', 'Calculated Priority Ranking': 0.0}\n\n### Result visualization\n\n\n### Verification case definition\n```\n{\n \"no\": 21,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"P_ct_fan\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Fan Electric Power\",\n \"frequency\": \"Detailed\"\n },\n \"m_ct_fan_ratio\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Air Flow Rate Ratio\",\n \"frequency\": \"Detailed\"\n }\n },\n \"parameters\": {\n \"m_ct_fan_dsgn\": 36.47,\n \"P_ct_fan_dsgn\": 13359.2\n }\n },\n \"verification_class\": \"HeatRejectionFanVariableFlowControl\",\n \"library_item_id\": 26,\n \"description_brief\": \"The cooling tower fan power is 30% of the design value at 50% flow\",\n \"description_index\": [\n \"Section 6.5.5.2.1 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"P_ct_fan\": \"Cooling Tower Fan Power\",\n \"P_ct_fan_dsgn\": \"Cooling Tower Design Fan Power\",\n \"m_ct_fan\": \"Cooling Tower Air Flow\",\n \"m_ct_fan_dsgn\": \"Cooling Tower Design Air Flow\"\n },\n \"description_assertions\": [\n \"Verify that at 5% flow, the cooling tower fan power is 30% of the design value. Since simulation results might not include that exact point, we use a regression based approach to determining if the code requirement is met\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 1, "Pass #": 17832, "Fail #": 0, "Verification Passed?": true, "Failure Ratio": 0, "Failure Severity": 0.0, "Priority Ranking": "N/A", "Calculated Priority Ranking": 0.0}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "HeatRejectionFanVariableFlowControl"}} \ No newline at end of file +{"1": {"md_content": "\n## Results for Verification Case ID 1\n\n### Pass/Fail check result\n{'Sample #': 53573, 'Pass #': 53573, 'Fail #': 0, 'Untest #': 0, 'Verification Passed?': True, 'Failure Ratio': 0.0, 'Failure Severity': 0.0, 'Priority Ranking': 4, 'Calculated Priority Ranking': 0.0, 'Max Actual Control1': 2.8, 'Max Control Setpoint1': 2.8}\n\n### Result visualization\n\n![../results/imgs/VerificationCase1\\All_plot_aio.png](./imgs/VerificationCase1\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase1\\All_plot_obo.png](./imgs/VerificationCase1\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase1\\Day_plot_aio.png](./imgs/VerificationCase1\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase1\\Day_plot_obo.png](./imgs/VerificationCase1\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 1,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_sa_set\": {\n \"subject\": \"VAV_1 Supply Equipment Outlet Node\",\n \"variable\": \"System Node Setpoint Temperature\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"T_z_coo\": 24.0\n }\n },\n \"verification_class\": \"SupplyAirTempReset\",\n \"library_item_id\": 1,\n \"description_brief\": \"Cooling supply air temperature reset scale (25%)\",\n \"description_detailed\": \"Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.\",\n \"description_index\": [\n \"Section 6.5.3.5 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_sa_set\": \"AHU supply air temperature setpoint\",\n \"T_z_coo\": \"Design zone cooling air temperature\"\n },\n \"description_assertions\": [\n \"Max(T_sa_set) - Min(T_sa_set) >= (T_z_coo - Min(T_sa_set)) * 0.25\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 53573, "Pass #": 53573, "Fail #": 0, "Untest #": 0, "Verification Passed?": true, "Failure Ratio": 0.0, "Failure Severity": 0.0, "Priority Ranking": 4, "Calculated Priority Ranking": 0.0, "Max Actual Control1": 2.8, "Max Control Setpoint1": 2.8}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "SupplyAirTempReset"}, "3": {"md_content": "\n## Results for Verification Case ID 3\n\n### Pass/Fail check result\n{'Sample #': 53573, 'Pass #': 53573, 'Fail #': 0, 'Untest #': 0, 'Verification Passed?': True, 'Failure Ratio': 0.0, 'Failure Severity': 0.0, 'Priority Ranking': 4, 'Calculated Priority Ranking': 0.0, 'Max Actual Control1': 2.8, 'Max Control Setpoint1': 2.8}\n\n### Result visualization\n\n![../results/imgs/VerificationCase3\\All_plot_aio.png](./imgs/VerificationCase3\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase3\\All_plot_obo.png](./imgs/VerificationCase3\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase3\\Day_plot_aio.png](./imgs/VerificationCase3\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase3\\Day_plot_obo.png](./imgs/VerificationCase3\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 3,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_sa_set\": {\n \"subject\": \"VAV_2 Supply Equipment Outlet Node\",\n \"variable\": \"System Node Setpoint Temperature\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"T_z_coo\": 24.0\n }\n },\n \"verification_class\": \"SupplyAirTempReset\",\n \"library_item_id\": 1,\n \"description_brief\": \"Cooling supply air temperature reset scale (25%)\",\n \"description_detailed\": \"Multiple zone HVAC systems must include controls that automatically reset the supply air temperature in response to representative building loads, or to outdoor air temperature. The controls shall reset the supply air temperature at least 25% of the difference between the design supply air temperature and the design room air temperature. Controls that adjust the reset based on zone humidity are allowed. Zones that are expected to experience relatively constant loads, such as electronic equipment rooms, shall be designed for the fully reset supply temperature.\",\n \"description_index\": [\n \"Section 6.5.3.5 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_sa_set\": \"AHU supply air temperature setpoint\",\n \"T_z_coo\": \"Design zone cooling air temperature\"\n },\n \"description_assertions\": [\n \"Max(T_sa_set) - Min(T_sa_set) >= (T_z_coo - Min(T_sa_set)) * 0.25\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 53573, "Pass #": 53573, "Fail #": 0, "Untest #": 0, "Verification Passed?": true, "Failure Ratio": 0.0, "Failure Severity": 0.0, "Priority Ranking": 4, "Calculated Priority Ranking": 0.0, "Max Actual Control1": 2.8, "Max Control Setpoint1": 2.8}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "SupplyAirTempReset"}, "7": {"md_content": "\n## Results for Verification Case ID 7\n\n### Pass/Fail check result\n{'Sample #': 52560, 'Pass #': 52560, 'Fail #': 0, 'Untest #': 0, 'Verification Passed?': True, 'Failure Ratio': 0.0, 'Failure Severity': 0.0, 'Priority Ranking': 9, 'Calculated Priority Ranking': 0.0, 'Max Actual Control1': 60.0, 'Max Control Setpoint1': 60.0, 'Max Actual Control2': 60.0, 'Max Control Setpoint2': 48.89}\n\n### Result visualization\n\n![../results/imgs/VerificationCase7\\All_plot_aio.png](./imgs/VerificationCase7\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase7\\All_plot_obo.png](./imgs/VerificationCase7\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase7\\Day_plot_aio.png](./imgs/VerificationCase7\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase7\\Day_plot_obo.png](./imgs/VerificationCase7\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 7,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_oa_db\": {\n \"subject\": \"Environment\",\n \"variable\": \"Site Outdoor Air Drybulb Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"T_hw\": {\n \"subject\": \"HeatSys1 Supply Outlet Node\",\n \"variable\": \"System Node Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"m_hw\": {\n \"subject\": \"HeatSys1 Supply Outlet Node\",\n \"variable\": \"System Node Mass Flow Rate\",\n \"frequency\": \"TimeStep\"\n }\n },\n \"parameters\": {\n \"T_oa_max\": 10,\n \"T_oa_min\": -6.7,\n \"T_hw_max_st\": 60.0,\n \"T_hw_min_st\": 48.89\n }\n },\n \"verification_class\": \"HWReset\",\n \"library_item_id\": 9,\n \"description_brief\": \"Hot water supply water temperature reset\",\n \"description_detailed\": \"Hot-water systems with a design capacity exceeding 300,000 Btu/h supplying heated water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)\",\n \"description_index\": [\n \"Section 6.5.4.4 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_oa_db\": \"OA dry-bulb temperature\",\n \"T_oa_max\": \"OA dry-bulb upper threshold\",\n \"T_oa_min\": \"OA dry-bulb lower threshold\",\n \"T_hw\": \"Hot water temp observed from the system node\",\n \"m_hw\": \"Hot water flow rate\",\n \"T_hw_max_st\": \"Hot water maximum temp setpoint\",\n \"T_hw_min_st\": \"Hot water minimum temp setpoint\"\n },\n \"description_assertions\": [\n \"When m_hw > 0, T_hw <= T_hw_max_st and T_hw >= T_hw_min_st; When m_hw < 0, always pass\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52560, "Pass #": 52560, "Fail #": 0, "Untest #": 0, "Verification Passed?": true, "Failure Ratio": 0.0, "Failure Severity": 0.0, "Priority Ranking": 9, "Calculated Priority Ranking": 0.0, "Max Actual Control1": 60.0, "Max Control Setpoint1": 60.0, "Max Actual Control2": 60.0, "Max Control Setpoint2": 48.89}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "HWReset"}, "9": {"md_content": "\n## Results for Verification Case ID 9\n\n### Pass/Fail check result\n{'Sample #': 52560, 'Pass #': 40157, 'Fail #': 12403, 'Untest #': 0, 'Verification Passed?': False, 'Failure Ratio': 0.236, 'Failure Severity': 0.044, 'Priority Ranking': 9, 'Calculated Priority Ranking': 0.01, 'Max Actual Control1': 11.182, 'Max Control Setpoint1': 8.89, 'Max Actual Control2': 11.182, 'Max Control Setpoint2': 6.7}\n\n### Result visualization\n\n![../results/imgs/VerificationCase9\\All_plot_aio.png](./imgs/VerificationCase9\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase9\\All_plot_obo.png](./imgs/VerificationCase9\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase9\\Day_plot_aio.png](./imgs/VerificationCase9\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase9\\Day_plot_obo.png](./imgs/VerificationCase9\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 9,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"T_oa_db\": {\n \"subject\": \"Environment\",\n \"variable\": \"Site Outdoor Air Drybulb Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"T_chw\": {\n \"subject\": \"CoolSys1 Supply Outlet Node\",\n \"variable\": \"System Node Temperature\",\n \"frequency\": \"TimeStep\"\n },\n \"m_chw\": {\n \"subject\": \"CoolSys1 Supply Outlet Node\",\n \"variable\": \"System Node Mass Flow Rate\",\n \"frequency\": \"TimeStep\"\n }\n },\n \"parameters\": {\n \"T_oa_max\": 21.11,\n \"T_oa_min\": 12.78,\n \"T_chw_max_st\": 8.89,\n \"T_chw_min_st\": 6.7\n }\n },\n \"verification_class\": \"CHWReset\",\n \"library_item_id\": 10,\n \"description_brief\": \"Chilled water supply water temperature reset\",\n \"description_detailed\": \"Chilled-water systems with a design capacity exceeding 300,000 Btu/h supplying chilled water to comfort conditioning systems shall include controls that automatically reset supply water temperatures by representative building loads (including return water temperature) or by outdoor air temperature. Where DDC is used to control valves, the set point shall be reset based on valve positions until one valve is nearly wide open or setpoint limits of the system equipment or application have been reached. (case study)\",\n \"description_index\": [\n \"Section 6.5.4.4 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"T_oa_db\": \"OA dry-bulb temperature\",\n \"T_oa_max\": \"OA dry-bulb upper threshold\",\n \"T_oa_min\": \"OA dry-bulb lower threshold\",\n \"T_chw\": \"Chilled water temp observed from the system node\",\n \"m_chw\": \"Chilled water flow rate\",\n \"T_chw_max_st\": \"Chilled water maximum temp setpoint\",\n \"T_chw_min_st\": \"Chilled water minimum temp setpoint\"\n },\n \"description_assertions\": [\n \"When m_chw > 0, T_chw <= T_chw_max_st and T_chw >= T_chw_min_st; When m_chw <= 0 , always pass\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 52560, "Pass #": 40157, "Fail #": 12403, "Untest #": 0, "Verification Passed?": false, "Failure Ratio": 0.236, "Failure Severity": 0.044, "Priority Ranking": 9, "Calculated Priority Ranking": 0.01, "Max Actual Control1": 11.182, "Max Control Setpoint1": 8.89, "Max Actual Control2": 11.182, "Max Control Setpoint2": 6.7}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "CHWReset"}, "14": {"md_content": "\n## Results for Verification Case ID 14\n\n### Pass/Fail check result\n{'Sample #': 53573, 'Pass #': 53573, 'Fail #': 0, 'Untest #': 0, 'Verification Passed?': True, 'Failure Ratio': 0.0, 'Failure Severity': 0.0, 'Priority Ranking': 10, 'Calculated Priority Ranking': 0.0, 'Max Actual Control1': 4.0, 'Max Control Setpoint1': 4.0}\n\n### Result visualization\n\n![../results/imgs/VerificationCase14\\All_plot_aio.png](./imgs/VerificationCase14\\All_plot_aio.png)\n\n![../results/imgs/VerificationCase14\\All_plot_obo.png](./imgs/VerificationCase14\\All_plot_obo.png)\n\n![../results/imgs/VerificationCase14\\Day_plot_aio.png](./imgs/VerificationCase14\\Day_plot_aio.png)\n\n![../results/imgs/VerificationCase14\\Day_plot_obo.png](./imgs/VerificationCase14\\Day_plot_obo.png)\n\n\n### Verification case definition\n```\n{\n \"no\": 14,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"ct_op_cells\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Operating Cells Count\",\n \"frequency\": \"detailed\"\n },\n \"m\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Mass Flow Rate\",\n \"frequency\": \"detailed\"\n },\n \"P_fan_ct\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Fan Electric Power\",\n \"frequency\": \"detailed\"\n }\n },\n \"parameters\": {\n \"ct_cells\": 4,\n \"m_des\": 0.0375568,\n \"min_flow_frac_per_cell\": 0.05\n }\n },\n \"verification_class\": \"HeatRejectionFanVariableFlowControlsCells\",\n \"library_item_id\": 19,\n \"description_brief\": \"Heat rejection fan variable flow controls cells\",\n \"description_index\": [\n \"Section 6.5.5.2.2 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"ct_op_cells\": \"Number of operating cooling tower cells\",\n \"ct_cells\": \"Number of cooling tower cells\",\n \"m\": \"Cooling tower mass flow rate\",\n \"m_des\": \"Cooling tower design mass flow rate\",\n \"min_flow_frac_per_cell\": \"Minimum flow fraction per cooling tower cell\",\n \"P_fan_ct\": \"Cooling tower fan power\"\n },\n \"description_assertions\": [\n \"if the number of operating cooling tower cells is equal to the maximum number of cooling tower cells then pass else fail\"\n ],\n \"description_verification_type\": \"procedure-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 53573, "Pass #": 53573, "Fail #": 0, "Untest #": 0, "Verification Passed?": true, "Failure Ratio": 0.0, "Failure Severity": 0.0, "Priority Ranking": 10, "Calculated Priority Ranking": 0.0, "Max Actual Control1": 4.0, "Max Control Setpoint1": 4.0}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "HeatRejectionFanVariableFlowControlsCells"}, "21": {"md_content": "\n## Results for Verification Case ID 21\n\n### Pass/Fail check result\n{'Sample #': 1, 'Pass #': 17832, 'Fail #': 0, 'Verification Passed?': True, 'Failure Ratio': 0, 'Failure Severity': 0.0, 'Priority Ranking': 'N/A', 'Calculated Priority Ranking': 0.0}\n\n### Result visualization\n\n\n### Verification case definition\n```\n{\n \"no\": 21,\n \"run_simulation\": true,\n \"simulation_IO\": {\n \"idf\": \"../test_cases/doe_prototype_cases/ASHRAE901_Hospital_STD2019_Atlanta.idf\",\n \"idd\": \"../resources/Energy+V9_0_1.idd\",\n \"weather\": \"../weather/USA_GA_Atlanta-Hartsfield.Jackson.Intl.AP.722190_TMY3.epw\",\n \"output\": \"eplusout.csv\",\n \"ep_path\": \"C:\\\\EnergyPlusV9-0-1\\\\energyplus.exe\"\n },\n \"expected_result\": \"pass\",\n \"datapoints_source\": {\n \"idf_output_variables\": {\n \"P_ct_fan\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Fan Electric Power\",\n \"frequency\": \"Detailed\"\n },\n \"m_ct_fan_ratio\": {\n \"subject\": \"TOWERWATERSYS COOLTOWER 2\",\n \"variable\": \"Cooling Tower Air Flow Rate Ratio\",\n \"frequency\": \"Detailed\"\n }\n },\n \"parameters\": {\n \"m_ct_fan_dsgn\": 36.47,\n \"P_ct_fan_dsgn\": 13359.2\n }\n },\n \"verification_class\": \"HeatRejectionFanVariableFlowControl\",\n \"library_item_id\": 26,\n \"description_brief\": \"The cooling tower fan power is 30% of the design value at 50% flow\",\n \"description_index\": [\n \"Section 6.5.5.2.1 in 90.1-2016\"\n ],\n \"description_datapoints\": {\n \"P_ct_fan\": \"Cooling Tower Fan Power\",\n \"P_ct_fan_dsgn\": \"Cooling Tower Design Fan Power\",\n \"m_ct_fan\": \"Cooling Tower Air Flow\",\n \"m_ct_fan_dsgn\": \"Cooling Tower Design Air Flow\"\n },\n \"description_assertions\": [\n \"Verify that at 5% flow, the cooling tower fan power is 30% of the design value. Since simulation results might not include that exact point, we use a regression based approach to determining if the code requirement is met\"\n ],\n \"description_verification_type\": \"rule-based\",\n \"assertions_type\": \"pass\"\n}\n```\n\n---\n\n", "outcome_notes": {"Sample #": 1, "Pass #": 17832, "Fail #": 0, "Verification Passed?": true, "Failure Ratio": 0, "Failure Severity": 0.0, "Priority Ranking": "N/A", "Calculated Priority Ranking": 0.0}, "model_file": "ASHRAE901_Hospital_STD2019_Atlanta", "verification_class": "HeatRejectionFanVariableFlowControl"}} \ No newline at end of file diff --git a/tests/api/test_verification_library.py b/tests/api/test_verification_library.py index fe24e725..54c4e7bd 100644 --- a/tests/api/test_verification_library.py +++ b/tests/api/test_verification_library.py @@ -65,7 +65,7 @@ def test_validate_library(self): [ "library_item_id", "description_brief", - "description_detail", + "description_detailed", "description_index", "description_datapoints", "description_assertions",