From c744936a0fbbf2f7ad09dac259dd47ea1118b2c4 Mon Sep 17 00:00:00 2001 From: Chip Barnaby Date: Wed, 19 Aug 2020 14:19:34 -0400 Subject: [PATCH 01/25] Initial json.hpp experiments --- src/CMakeLists.txt | 1 + src/CNLOADS.CPP | 14 + src/a205face.cpp | 41 + src/json.hpp | 25447 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 25503 insertions(+) create mode 100644 src/a205face.cpp create mode 100644 src/json.hpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0bc5deaeb..16ac1ee3c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -131,6 +131,7 @@ set(source XIOPAK.CPP XMODULE.CPP YACAM.CPP + A205FACE.CPP ) set(precomp diff --git a/src/CNLOADS.CPP b/src/CNLOADS.CPP index eabb9aad9..9e0b023d9 100644 --- a/src/CNLOADS.CPP +++ b/src/CNLOADS.CPP @@ -1531,6 +1531,7 @@ RC ZNR::zn_ComfortCR() // calculate comfort conditions, conv/radiant model #endif return rc; } // ZNR::zn_ComfortCR + //============================================================================= /*virtual*/ RSYS::~RSYS() { @@ -1769,6 +1770,18 @@ RC RSYS::rs_TopRSys1() // check RSYS, initial set up for run } } +#if 1 + extern RC TestCBOR(const char* filePath); + + TestCBOR +#if 1 + ("Unitary-Constant-Efficiency.RS0002.a205.json"); +#else + ("Unitary-Constant-Efficiency.RS0002.a205.cbor"); +#endif +#endif + + return rc; } // RSYS::rs_TopRSys1 //----------------------------------------------------------------------------- @@ -4805,4 +4818,5 @@ x // ?? This is *NOT* the full CEC current algorithm. Where is the 1 degF hyster return RCOK; } // ZNR::zn_AfterHour + // end of cnloads.cpp diff --git a/src/a205face.cpp b/src/a205face.cpp new file mode 100644 index 000000000..1fdd581c3 --- /dev/null +++ b/src/a205face.cpp @@ -0,0 +1,41 @@ +// Copyright (c) 1997-2020 The CSE Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license +// that can be found in the LICENSE file. + +// a205face.cpp: Interface to ASHRAE205 equipment data representations + +#include "cnglob.h" +#include +#include +#include +#include + +#include "json.hpp" + +using json = nlohmann::json; + +RC TestCBOR( + const char* filePath) +{ + RC rc = RCOK; + + std::ifstream fileStream(filePath); + + const char* ext = strpathparts(filePath, STRPPEXT); + bool isCBOR = stricmp(ext, ".cbor") == 0; + + json x = + isCBOR ? json::from_cbor( fileStream) + : json::parse(fileStream); + + std::string rs_id = x.value("RS_ID", "?"); + + for (auto it = x.begin(); it != x.end(); ++it) + { + std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; + } + + return rc; +} + +// a205face.cpp end \ No newline at end of file diff --git a/src/json.hpp b/src/json.hpp new file mode 100644 index 000000000..a70aaf8cb --- /dev/null +++ b/src/json.hpp @@ -0,0 +1,25447 @@ +/* + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ +| | |__ | | | | | | version 3.9.1 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2019 Niels Lohmann . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#define NLOHMANN_JSON_VERSION_MAJOR 3 +#define NLOHMANN_JSON_VERSION_MINOR 9 +#define NLOHMANN_JSON_VERSION_PATCH 1 + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#include // istream, ostream +#include // random_access_iterator_tag +#include // unique_ptr +#include // accumulate +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include + + +#include + +// #include + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include + + +#include // exception +#include // runtime_error +#include // to_string + +// #include + + +#include // size_t + +namespace nlohmann +{ +namespace detail +{ +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // pair +// #include +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + * + * To the extent possible under law, the author(s) have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. + * + * For details, see . + * SPDX-License-Identifier: CC0-1.0 + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 13) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 13 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(_MSC_VER) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(VER / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) __has_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) __has_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP \ +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + JSON_HEDLEY_HAS_FEATURE(c_static_assert) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +#if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 +#elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 +#elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 +#endif + +// disable float-equal warnings on GCC/clang +#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wdocumentation" +#endif + +// allow to disable exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow to override assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + + +namespace nlohmann +{ +namespace detail +{ +//////////////// +// exceptions // +//////////////// + +/*! +@brief general exception of the @ref basic_json class + +This class is an extension of `std::exception` objects with a member @a id for +exception ids. It is used as the base class for all exceptions thrown by the +@ref basic_json class. This class can hence be used as "wildcard" to catch +exceptions. + +Subclasses: +- @ref parse_error for exceptions indicating a parse error +- @ref invalid_iterator for exceptions indicating errors with iterators +- @ref type_error for exceptions indicating executing a member function with + a wrong type +- @ref out_of_range for exceptions indicating access out of the defined range +- @ref other_error for exceptions indicating other library errors + +@internal +@note To have nothrow-copy-constructible exceptions, we internally use + `std::runtime_error` which can cope with arbitrary-length error messages. + Intermediate strings are built with static functions and then passed to + the actual constructor. +@endinternal + +@liveexample{The following code shows how arbitrary library exceptions can be +caught.,exception} + +@since version 3.0.0 +*/ +class exception : public std::exception +{ + public: + /// returns the explanatory string + JSON_HEDLEY_RETURNS_NON_NULL + const char* what() const noexcept override + { + return m.what(); + } + + /// the id of the exception + const int id; + + protected: + JSON_HEDLEY_NON_NULL(3) + exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} + + static std::string name(const std::string& ename, int id_) + { + return "[json.exception." + ename + "." + std::to_string(id_) + "] "; + } + + private: + /// an exception object as storage for error messages + std::runtime_error m; +}; + +/*! +@brief exception indicating a parse error + +This exception is thrown by the library when a parse error occurs. Parse errors +can occur during the deserialization of JSON text, CBOR, MessagePack, as well +as when using JSON Patch. + +Member @a byte holds the byte index of the last read character in the input +file. + +Exceptions have ids 1xx. + +name / id | example message | description +------------------------------ | --------------- | ------------------------- +json.exception.parse_error.101 | parse error at 2: unexpected end of input; expected string literal | This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member @a byte indicates the error position. +json.exception.parse_error.102 | parse error at 14: missing or wrong low surrogate | JSON uses the `\uxxxx` format to describe Unicode characters. Code points above above 0xFFFF are split into two `\uxxxx` entries ("surrogate pairs"). This error indicates that the surrogate pair is incomplete or contains an invalid code point. +json.exception.parse_error.103 | parse error: code points above 0x10FFFF are invalid | Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid. +json.exception.parse_error.104 | parse error: JSON patch must be an array of objects | [RFC 6902](https://tools.ietf.org/html/rfc6902) requires a JSON Patch document to be a JSON document that represents an array of objects. +json.exception.parse_error.105 | parse error: operation must have string member 'op' | An operation of a JSON Patch document must contain exactly one "op" member, whose value indicates the operation to perform. Its value must be one of "add", "remove", "replace", "move", "copy", or "test"; other values are errors. +json.exception.parse_error.106 | parse error: array index '01' must not begin with '0' | An array index in a JSON Pointer ([RFC 6901](https://tools.ietf.org/html/rfc6901)) may be `0` or any number without a leading `0`. +json.exception.parse_error.107 | parse error: JSON pointer must be empty or begin with '/' - was: 'foo' | A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a `/` character. +json.exception.parse_error.108 | parse error: escape character '~' must be followed with '0' or '1' | In a JSON Pointer, only `~0` and `~1` are valid escape sequences. +json.exception.parse_error.109 | parse error: array index 'one' is not a number | A JSON Pointer array index must be a number. +json.exception.parse_error.110 | parse error at 1: cannot read 2 bytes from vector | When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read. +json.exception.parse_error.112 | parse error at 1: error reading CBOR; last byte: 0xF8 | Not all types of CBOR or MessagePack are supported. This exception occurs if an unsupported byte was read. +json.exception.parse_error.113 | parse error at 2: expected a CBOR string; last byte: 0x98 | While parsing a map key, a value that is not a string has been read. +json.exception.parse_error.114 | parse error: Unsupported BSON record type 0x0F | The parsing of the corresponding BSON record type is not implemented (yet). +json.exception.parse_error.115 | parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A | A UBJSON high-precision number could not be parsed. + +@note For an input with n bytes, 1 is the index of the first character and n+1 + is the index of the terminating null byte or the end of file. This also + holds true when reading a byte vector (CBOR or MessagePack). + +@liveexample{The following code shows how a `parse_error` exception can be +caught.,parse_error} + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref invalid_iterator for exceptions indicating errors with iterators +@sa - @ref type_error for exceptions indicating executing a member function with + a wrong type +@sa - @ref out_of_range for exceptions indicating access out of the defined range +@sa - @ref other_error for exceptions indicating other library errors + +@since version 3.0.0 +*/ +class parse_error : public exception +{ + public: + /*! + @brief create a parse error exception + @param[in] id_ the id of the exception + @param[in] pos the position where the error occurred (or with + chars_read_total=0 if the position cannot be + determined) + @param[in] what_arg the explanatory string + @return parse_error object + */ + static parse_error create(int id_, const position_t& pos, const std::string& what_arg) + { + std::string w = exception::name("parse_error", id_) + "parse error" + + position_string(pos) + ": " + what_arg; + return parse_error(id_, pos.chars_read_total, w.c_str()); + } + + static parse_error create(int id_, std::size_t byte_, const std::string& what_arg) + { + std::string w = exception::name("parse_error", id_) + "parse error" + + (byte_ != 0 ? (" at byte " + std::to_string(byte_)) : "") + + ": " + what_arg; + return parse_error(id_, byte_, w.c_str()); + } + + /*! + @brief byte index of the parse error + + The byte index of the last read character in the input file. + + @note For an input with n bytes, 1 is the index of the first character and + n+1 is the index of the terminating null byte or the end of file. + This also holds true when reading a byte vector (CBOR or MessagePack). + */ + const std::size_t byte; + + private: + parse_error(int id_, std::size_t byte_, const char* what_arg) + : exception(id_, what_arg), byte(byte_) {} + + static std::string position_string(const position_t& pos) + { + return " at line " + std::to_string(pos.lines_read + 1) + + ", column " + std::to_string(pos.chars_read_current_line); + } +}; + +/*! +@brief exception indicating errors with iterators + +This exception is thrown if iterators passed to a library function do not match +the expected semantics. + +Exceptions have ids 2xx. + +name / id | example message | description +----------------------------------- | --------------- | ------------------------- +json.exception.invalid_iterator.201 | iterators are not compatible | The iterators passed to constructor @ref basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (@a first, @a last) is invalid. +json.exception.invalid_iterator.202 | iterator does not fit current value | In an erase or insert function, the passed iterator @a pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion. +json.exception.invalid_iterator.203 | iterators do not fit current value | Either iterator passed to function @ref erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from. +json.exception.invalid_iterator.204 | iterators out of range | When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (@ref begin(), @ref end()), because this is the only way the single stored value is expressed. All other ranges are invalid. +json.exception.invalid_iterator.205 | iterator out of range | When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the @ref begin() iterator, because it is the only way to address the stored value. All other iterators are invalid. +json.exception.invalid_iterator.206 | cannot construct with iterators from null | The iterators passed to constructor @ref basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range. +json.exception.invalid_iterator.207 | cannot use key() for non-object iterators | The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key. +json.exception.invalid_iterator.208 | cannot use operator[] for object iterators | The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. +json.exception.invalid_iterator.209 | cannot use offsets with object iterators | The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. +json.exception.invalid_iterator.210 | iterators do not fit | The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (@a first, @a last) is invalid. +json.exception.invalid_iterator.211 | passed iterators may not belong to container | The iterator range passed to the insert function must not be a subrange of the container to insert to. +json.exception.invalid_iterator.212 | cannot compare iterators of different containers | When two iterators are compared, they must belong to the same container. +json.exception.invalid_iterator.213 | cannot compare order of object iterators | The order of object iterators cannot be compared, because JSON objects are unordered. +json.exception.invalid_iterator.214 | cannot get value | Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to @ref begin(). + +@liveexample{The following code shows how an `invalid_iterator` exception can be +caught.,invalid_iterator} + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref parse_error for exceptions indicating a parse error +@sa - @ref type_error for exceptions indicating executing a member function with + a wrong type +@sa - @ref out_of_range for exceptions indicating access out of the defined range +@sa - @ref other_error for exceptions indicating other library errors + +@since version 3.0.0 +*/ +class invalid_iterator : public exception +{ + public: + static invalid_iterator create(int id_, const std::string& what_arg) + { + std::string w = exception::name("invalid_iterator", id_) + what_arg; + return invalid_iterator(id_, w.c_str()); + } + + private: + JSON_HEDLEY_NON_NULL(3) + invalid_iterator(int id_, const char* what_arg) + : exception(id_, what_arg) {} +}; + +/*! +@brief exception indicating executing a member function with a wrong type + +This exception is thrown in case of a type error; that is, a library function is +executed on a JSON value whose type does not match the expected semantics. + +Exceptions have ids 3xx. + +name / id | example message | description +----------------------------- | --------------- | ------------------------- +json.exception.type_error.301 | cannot create object from initializer list | To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead. +json.exception.type_error.302 | type must be object, but is array | During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types. +json.exception.type_error.303 | incompatible ReferenceType for get_ref, actual type is object | To retrieve a reference to a value stored in a @ref basic_json object with @ref get_ref, the type of the reference must match the value type. For instance, for a JSON array, the @a ReferenceType must be @ref array_t &. +json.exception.type_error.304 | cannot use at() with string | The @ref at() member functions can only be executed for certain JSON types. +json.exception.type_error.305 | cannot use operator[] with string | The @ref operator[] member functions can only be executed for certain JSON types. +json.exception.type_error.306 | cannot use value() with string | The @ref value() member functions can only be executed for certain JSON types. +json.exception.type_error.307 | cannot use erase() with string | The @ref erase() member functions can only be executed for certain JSON types. +json.exception.type_error.308 | cannot use push_back() with string | The @ref push_back() and @ref operator+= member functions can only be executed for certain JSON types. +json.exception.type_error.309 | cannot use insert() with | The @ref insert() member functions can only be executed for certain JSON types. +json.exception.type_error.310 | cannot use swap() with number | The @ref swap() member functions can only be executed for certain JSON types. +json.exception.type_error.311 | cannot use emplace_back() with string | The @ref emplace_back() member function can only be executed for certain JSON types. +json.exception.type_error.312 | cannot use update() with string | The @ref update() member functions can only be executed for certain JSON types. +json.exception.type_error.313 | invalid value to unflatten | The @ref unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well defined. +json.exception.type_error.314 | only objects can be unflattened | The @ref unflatten function only works for an object whose keys are JSON Pointers. +json.exception.type_error.315 | values in object must be primitive | The @ref unflatten function only works for an object whose keys are JSON Pointers and whose values are primitive. +json.exception.type_error.316 | invalid UTF-8 byte at index 10: 0x7E | The @ref dump function only works with UTF-8 encoded strings; that is, if you assign a `std::string` to a JSON value, make sure it is UTF-8 encoded. | +json.exception.type_error.317 | JSON value cannot be serialized to requested format | The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw `true` or `null` JSON object cannot be serialized to BSON) | + +@liveexample{The following code shows how a `type_error` exception can be +caught.,type_error} + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref parse_error for exceptions indicating a parse error +@sa - @ref invalid_iterator for exceptions indicating errors with iterators +@sa - @ref out_of_range for exceptions indicating access out of the defined range +@sa - @ref other_error for exceptions indicating other library errors + +@since version 3.0.0 +*/ +class type_error : public exception +{ + public: + static type_error create(int id_, const std::string& what_arg) + { + std::string w = exception::name("type_error", id_) + what_arg; + return type_error(id_, w.c_str()); + } + + private: + JSON_HEDLEY_NON_NULL(3) + type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/*! +@brief exception indicating access out of the defined range + +This exception is thrown in case a library function is called on an input +parameter that exceeds the expected range, for instance in case of array +indices or nonexisting object keys. + +Exceptions have ids 4xx. + +name / id | example message | description +------------------------------- | --------------- | ------------------------- +json.exception.out_of_range.401 | array index 3 is out of range | The provided array index @a i is larger than @a size-1. +json.exception.out_of_range.402 | array index '-' (3) is out of range | The special array index `-` in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it. +json.exception.out_of_range.403 | key 'foo' not found | The provided key was not found in the JSON object. +json.exception.out_of_range.404 | unresolved reference token 'foo' | A reference token in a JSON Pointer could not be resolved. +json.exception.out_of_range.405 | JSON pointer has no parent | The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value. +json.exception.out_of_range.406 | number overflow parsing '10E1000' | A parsed number could not be stored as without changing it to NaN or INF. +json.exception.out_of_range.407 | number overflow serializing '9223372036854775808' | UBJSON and BSON only support integer numbers up to 9223372036854775807. (until version 3.8.0) | +json.exception.out_of_range.408 | excessive array size: 8658170730974374167 | The size (following `#`) of an UBJSON array or object exceeds the maximal capacity. | +json.exception.out_of_range.409 | BSON key cannot contain code point U+0000 (at byte 2) | Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string | + +@liveexample{The following code shows how an `out_of_range` exception can be +caught.,out_of_range} + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref parse_error for exceptions indicating a parse error +@sa - @ref invalid_iterator for exceptions indicating errors with iterators +@sa - @ref type_error for exceptions indicating executing a member function with + a wrong type +@sa - @ref other_error for exceptions indicating other library errors + +@since version 3.0.0 +*/ +class out_of_range : public exception +{ + public: + static out_of_range create(int id_, const std::string& what_arg) + { + std::string w = exception::name("out_of_range", id_) + what_arg; + return out_of_range(id_, w.c_str()); + } + + private: + JSON_HEDLEY_NON_NULL(3) + out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/*! +@brief exception indicating other library errors + +This exception is thrown in case of errors that cannot be classified with the +other exception types. + +Exceptions have ids 5xx. + +name / id | example message | description +------------------------------ | --------------- | ------------------------- +json.exception.other_error.501 | unsuccessful: {"op":"test","path":"/baz", "value":"bar"} | A JSON Patch operation 'test' failed. The unsuccessful operation is also printed. + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref parse_error for exceptions indicating a parse error +@sa - @ref invalid_iterator for exceptions indicating errors with iterators +@sa - @ref type_error for exceptions indicating executing a member function with + a wrong type +@sa - @ref out_of_range for exceptions indicating access out of the defined range + +@liveexample{The following code shows how an `other_error` exception can be +caught.,other_error} + +@since version 3.0.0 +*/ +class other_error : public exception +{ + public: + static other_error create(int id_, const std::string& what_arg) + { + std::string w = exception::name("other_error", id_) + what_arg; + return other_error(id_, w.c_str()); + } + + private: + JSON_HEDLEY_NON_NULL(3) + other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type + +namespace nlohmann +{ +namespace detail +{ +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +template +using uncvref_t = typename std::remove_cv::type>::type; + +// implementation of C++14 index_sequence and affiliates +// source: https://stackoverflow.com/a/32223343 +template +struct index_sequence +{ + using type = index_sequence; + using value_type = std::size_t; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +template +struct merge_and_renumber; + +template +struct merge_and_renumber, index_sequence> + : index_sequence < I1..., (sizeof...(I1) + I2)... > {}; + +template +struct make_index_sequence + : merge_and_renumber < typename make_index_sequence < N / 2 >::type, + typename make_index_sequence < N - N / 2 >::type > {}; + +template<> struct make_index_sequence<0> : index_sequence<> {}; +template<> struct make_index_sequence<1> : index_sequence<0> {}; + +template +using index_sequence_for = make_index_sequence; + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static constexpr T value{}; +}; + +template +constexpr T static_const::value; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval + +// #include + + +#include // random_access_iterator_tag + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; +} // namespace detail +} // namespace nlohmann + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + + +#include + +// #include + + +// https://en.cppreference.com/w/cpp/experimental/is_detected +namespace nlohmann +{ +namespace detail +{ +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; +} // namespace detail +} // namespace nlohmann + +// #include +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ +#define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + +#include // int64_t, uint64_t +#include // map +#include // allocator +#include // string +#include // vector + +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +namespace nlohmann +{ +/*! +@brief default JSONSerializer template argument + +This serializer ignores the template arguments and uses ADL +([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) +for serialization. +*/ +template +struct adl_serializer; + +template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector> +class basic_json; + +/*! +@brief JSON Pointer + +A JSON pointer defines a string syntax for identifying a specific value +within a JSON document. It can be used with functions `at` and +`operator[]`. Furthermore, JSON pointers are the base for JSON patches. + +@sa [RFC 6901](https://tools.ietf.org/html/rfc6901) + +@since version 2.0.0 +*/ +template +class json_pointer; + +/*! +@brief default JSON class + +This type is the default specialization of the @ref basic_json class which +uses the standard template types. + +@since version 1.0.0 +*/ +using json = basic_json<>; + +template +struct ordered_map; + +/*! +@brief ordered JSON class + +This type preserves the insertion order of object keys. + +@since version 3.9.0 +*/ +using ordered_json = basic_json; + +} // namespace nlohmann + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +namespace nlohmann +{ +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using iterator_t = typename T::iterator; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, + enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + + +/////////////////// +// is_ functions // +/////////////////// + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +// source: https://stackoverflow.com/a/37193089/4116453 + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + std::is_constructible::value && + std::is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (std::is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (std::is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type_impl : std::false_type {}; + +template +struct is_compatible_string_type_impl < + BasicJsonType, CompatibleStringType, + enable_if_t::value >> +{ + static constexpr auto value = + std::is_constructible::value; +}; + +template +struct is_compatible_string_type + : is_compatible_string_type_impl {}; + +template +struct is_constructible_string_type_impl : std::false_type {}; + +template +struct is_constructible_string_type_impl < + BasicJsonType, ConstructibleStringType, + enable_if_t::value >> +{ + static constexpr auto value = + std::is_constructible::value; +}; + +template +struct is_constructible_string_type + : is_constructible_string_type_impl {}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < is_detected::value&& + is_detected::value&& +// This is needed because json_reverse_iterator has a ::iterator type... +// Therefore it is detected as a CompatibleArrayType. +// The real fix would be to have an Iterable concept. + !is_iterator_traits < + iterator_traits>::value >> +{ + static constexpr bool value = + std::is_constructible::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + std::is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_detected::value&& +is_complete_type < +detected_t>::value >> +{ + static constexpr bool value = + // This is needed because json_reverse_iterator has a ::iterator type, + // furthermore, std::back_insert_iterator (and other iterators) have a + // base class `iterator`... Therefore it is detected as a + // ConstructibleArrayType. The real fix would be to have an Iterable + // concept. + !is_iterator_traits>::value && + + (std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, typename ConstructibleArrayType::value_type >::value); +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + std::is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B1 { }; +template +struct conjunction +: std::conditional, B1>::type {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +namespace nlohmann +{ +namespace detail +{ +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +} +} // namespace detail +} // namespace nlohmann + + +namespace nlohmann +{ +namespace detail +{ +template +void from_json(const BasicJsonType& j, typename std::nullptr_t& n) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_null())) + { + JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name()))); + } + n = nullptr; +} + +// overloads for basic_json template parameters +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < std::is_arithmetic::value&& + !std::is_same::value, + int > = 0 > +void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + + default: + JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()))); + } +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) + { + JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(j.type_name()))); + } + b = *j.template get_ptr(); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()))); + } + s = *j.template get_ptr(); +} + +template < + typename BasicJsonType, typename ConstructibleStringType, + enable_if_t < + is_constructible_string_type::value&& + !std::is_same::value, + int > = 0 > +void from_json(const BasicJsonType& j, ConstructibleStringType& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()))); + } + + s = *j.template get_ptr(); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) +{ + get_arithmetic_value(j, val); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) +{ + get_arithmetic_value(j, val); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) +{ + get_arithmetic_value(j, val); +} + +template::value, int> = 0> +void from_json(const BasicJsonType& j, EnumType& e) +{ + typename std::underlying_type::type val; + get_arithmetic_value(j, val); + e = static_cast(val); +} + +// forward_list doesn't have an insert method +template::value, int> = 0> +void from_json(const BasicJsonType& j, std::forward_list& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); + } + l.clear(); + std::transform(j.rbegin(), j.rend(), + std::front_inserter(l), [](const BasicJsonType & i) + { + return i.template get(); + }); +} + +// valarray doesn't have an insert method +template::value, int> = 0> +void from_json(const BasicJsonType& j, std::valarray& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); + } + l.resize(j.size()); + std::transform(j.begin(), j.end(), std::begin(l), + [](const BasicJsonType & elem) + { + return elem.template get(); + }); +} + +template +auto from_json(const BasicJsonType& j, T (&arr)[N]) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template +void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) +{ + arr = *j.template get_ptr(); +} + +template +auto from_json_array_impl(const BasicJsonType& j, std::array& arr, + priority_tag<2> /*unused*/) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template +auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) +-> decltype( + arr.reserve(std::declval()), + j.template get(), + void()) +{ + using std::end; + + ConstructibleArrayType ret; + ret.reserve(j.size()); + std::transform(j.begin(), j.end(), + std::inserter(ret, end(ret)), [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template +void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, + priority_tag<0> /*unused*/) +{ + using std::end; + + ConstructibleArrayType ret; + std::transform( + j.begin(), j.end(), std::inserter(ret, end(ret)), + [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template < typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t < + is_constructible_array_type::value&& + !is_constructible_object_type::value&& + !is_constructible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) +-> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), +j.template get(), +void()) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + + std::string(j.type_name()))); + } + + from_json_array_impl(j, arr, priority_tag<3> {}); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(j.type_name()))); + } + + bin = *j.template get_ptr(); +} + +template::value, int> = 0> +void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(302, "type must be object, but is " + std::string(j.type_name()))); + } + + ConstructibleObjectType ret; + auto inner_object = j.template get_ptr(); + using value_type = typename ConstructibleObjectType::value_type; + std::transform( + inner_object->begin(), inner_object->end(), + std::inserter(ret, ret.begin()), + [](typename BasicJsonType::object_t::value_type const & p) + { + return value_type(p.first, p.second.template get()); + }); + obj = std::move(ret); +} + +// overload for arithmetic types, not chosen for basic_json template arguments +// (BooleanType, etc..); note: Is it really necessary to provide explicit +// overloads for boolean_t etc. in case of a custom BooleanType which is not +// an arithmetic type? +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < + std::is_arithmetic::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value, + int > = 0 > +void from_json(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::boolean: + { + val = static_cast(*j.template get_ptr()); + break; + } + + default: + JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()))); + } +} + +template +void from_json(const BasicJsonType& j, std::pair& p) +{ + p = {j.at(0).template get(), j.at(1).template get()}; +} + +template +void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_sequence /*unused*/) +{ + t = std::make_tuple(j.at(Idx).template get::type>()...); +} + +template +void from_json(const BasicJsonType& j, std::tuple& t) +{ + from_json_tuple_impl(j, t, index_sequence_for {}); +} + +template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +void from_json(const BasicJsonType& j, std::map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()))); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +void from_json(const BasicJsonType& j, std::unordered_map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()))); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +struct from_json_fn +{ + template + auto operator()(const BasicJsonType& j, T& val) const + noexcept(noexcept(from_json(j, val))) + -> decltype(from_json(j, val), void()) + { + return from_json(j, val); + } +}; +} // namespace detail + +/// namespace to hold default `from_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace +{ +constexpr const auto& from_json = detail::static_const::value; +} // namespace +} // namespace nlohmann + +// #include + + +#include // copy +#include // begin, end +#include // string +#include // tuple, get +#include // is_same, is_constructible, is_floating_point, is_enum, underlying_type +#include // move, forward, declval, pair +#include // valarray +#include // vector + +// #include + + +#include // size_t +#include // input_iterator_tag +#include // string, to_string +#include // tuple_size, get, tuple_element + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +void int_to_string( string_type& target, std::size_t value ) +{ + // For ADL + using std::to_string; + target = to_string(value); +} +template class iteration_proxy_value +{ + public: + using difference_type = std::ptrdiff_t; + using value_type = iteration_proxy_value; + using pointer = value_type * ; + using reference = value_type & ; + using iterator_category = std::input_iterator_tag; + using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; + + private: + /// the iterator + IteratorType anchor; + /// an index for arrays (used to create key names) + std::size_t array_index = 0; + /// last stringified array index + mutable std::size_t array_index_last = 0; + /// a string representation of the array index + mutable string_type array_index_str = "0"; + /// an empty string (to return a reference for primitive values) + const string_type empty_str = ""; + + public: + explicit iteration_proxy_value(IteratorType it) noexcept : anchor(it) {} + + /// dereference operator (needed for range-based for) + iteration_proxy_value& operator*() + { + return *this; + } + + /// increment operator (needed for range-based for) + iteration_proxy_value& operator++() + { + ++anchor; + ++array_index; + + return *this; + } + + /// equality operator (needed for InputIterator) + bool operator==(const iteration_proxy_value& o) const + { + return anchor == o.anchor; + } + + /// inequality operator (needed for range-based for) + bool operator!=(const iteration_proxy_value& o) const + { + return anchor != o.anchor; + } + + /// return key of the iterator + const string_type& key() const + { + JSON_ASSERT(anchor.m_object != nullptr); + + switch (anchor.m_object->type()) + { + // use integer array index as key + case value_t::array: + { + if (array_index != array_index_last) + { + int_to_string( array_index_str, array_index ); + array_index_last = array_index; + } + return array_index_str; + } + + // use key from the object + case value_t::object: + return anchor.key(); + + // use an empty key for all primitive types + default: + return empty_str; + } + } + + /// return value of the iterator + typename IteratorType::reference value() const + { + return anchor.value(); + } +}; + +/// proxy class for the items() function +template class iteration_proxy +{ + private: + /// the container to iterate + typename IteratorType::reference container; + + public: + /// construct iteration proxy from a container + explicit iteration_proxy(typename IteratorType::reference cont) noexcept + : container(cont) {} + + /// return iterator begin (needed for range-based for) + iteration_proxy_value begin() noexcept + { + return iteration_proxy_value(container.begin()); + } + + /// return iterator end (needed for range-based for) + iteration_proxy_value end() noexcept + { + return iteration_proxy_value(container.end()); + } +}; +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) +{ + return i.key(); +} +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) +{ + return i.value(); +} +} // namespace detail +} // namespace nlohmann + +// The Addition to the STD Namespace is required to add +// Structured Bindings Support to the iteration_proxy_value class +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +namespace std +{ +#if defined(__clang__) + // Fix: https://github.com/nlohmann/json/issues/1401 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +template +class tuple_size<::nlohmann::detail::iteration_proxy_value> + : public std::integral_constant {}; + +template +class tuple_element> +{ + public: + using type = decltype( + get(std::declval < + ::nlohmann::detail::iteration_proxy_value> ())); +}; +#if defined(__clang__) + #pragma clang diagnostic pop +#endif +} // namespace std + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +////////////////// +// constructors // +////////////////// + +template struct external_constructor; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept + { + j.m_type = value_t::boolean; + j.m_value = b; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) + { + j.m_type = value_t::string; + j.m_value = s; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) + { + j.m_type = value_t::string; + j.m_value = std::move(s); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleStringType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleStringType& str) + { + j.m_type = value_t::string; + j.m_value.string = j.template create(str); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) + { + j.m_type = value_t::binary; + typename BasicJsonType::binary_t value{b}; + j.m_value = value; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) + { + j.m_type = value_t::binary; + typename BasicJsonType::binary_t value{std::move(b)}; + j.m_value = value; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept + { + j.m_type = value_t::number_float; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept + { + j.m_type = value_t::number_unsigned; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept + { + j.m_type = value_t::number_integer; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) + { + j.m_type = value_t::array; + j.m_value = arr; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) + { + j.m_type = value_t::array; + j.m_value = std::move(arr); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleArrayType& arr) + { + using std::begin; + using std::end; + j.m_type = value_t::array; + j.m_value.array = j.template create(begin(arr), end(arr)); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, const std::vector& arr) + { + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->reserve(arr.size()); + for (const bool x : arr) + { + j.m_value.array->push_back(x); + } + j.assert_invariant(); + } + + template::value, int> = 0> + static void construct(BasicJsonType& j, const std::valarray& arr) + { + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->resize(arr.size()); + if (arr.size() > 0) + { + std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); + } + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) + { + j.m_type = value_t::object; + j.m_value = obj; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) + { + j.m_type = value_t::object; + j.m_value = std::move(obj); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < !std::is_same::value, int > = 0 > + static void construct(BasicJsonType& j, const CompatibleObjectType& obj) + { + using std::begin; + using std::end; + + j.m_type = value_t::object; + j.m_value.object = j.template create(begin(obj), end(obj)); + j.assert_invariant(); + } +}; + +///////////// +// to_json // +///////////// + +template::value, int> = 0> +void to_json(BasicJsonType& j, T b) noexcept +{ + external_constructor::construct(j, b); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, const CompatibleString& s) +{ + external_constructor::construct(j, s); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) +{ + external_constructor::construct(j, std::move(s)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, FloatType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, EnumType e) noexcept +{ + using underlying_type = typename std::underlying_type::type; + external_constructor::construct(j, static_cast(e)); +} + +template +void to_json(BasicJsonType& j, const std::vector& e) +{ + external_constructor::construct(j, e); +} + +template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < is_compatible_array_type::value&& + !is_compatible_object_type::value&& + !is_compatible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +void to_json(BasicJsonType& j, const CompatibleArrayType& arr) +{ + external_constructor::construct(j, arr); +} + +template +void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) +{ + external_constructor::construct(j, bin); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, const std::valarray& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > +void to_json(BasicJsonType& j, const CompatibleObjectType& obj) +{ + external_constructor::construct(j, obj); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) +{ + external_constructor::construct(j, std::move(obj)); +} + +template < + typename BasicJsonType, typename T, std::size_t N, + enable_if_t < !std::is_constructible::value, + int > = 0 > +void to_json(BasicJsonType& j, const T(&arr)[N]) +{ + external_constructor::construct(j, arr); +} + +template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > +void to_json(BasicJsonType& j, const std::pair& p) +{ + j = { p.first, p.second }; +} + +// for https://github.com/nlohmann/json/pull/1134 +template>::value, int> = 0> +void to_json(BasicJsonType& j, const T& b) +{ + j = { {b.key(), b.value()} }; +} + +template +void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) +{ + j = { std::get(t)... }; +} + +template::value, int > = 0> +void to_json(BasicJsonType& j, const T& t) +{ + to_json_tuple_impl(j, t, make_index_sequence::value> {}); +} + +struct to_json_fn +{ + template + auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) + -> decltype(to_json(j, std::forward(val)), void()) + { + return to_json(j, std::forward(val)); + } +}; +} // namespace detail + +/// namespace to hold default `to_json` function +namespace +{ +constexpr const auto& to_json = detail::static_const::value; +} // namespace +} // namespace nlohmann + + +namespace nlohmann +{ + +template +struct adl_serializer +{ + /*! + @brief convert a JSON value to any value type + + This function is usually called by the `get()` function of the + @ref basic_json class (either explicit or via conversion operators). + + @param[in] j JSON value to read from + @param[in,out] val value to write to + */ + template + static auto from_json(BasicJsonType&& j, ValueType& val) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), val))) + -> decltype(::nlohmann::from_json(std::forward(j), val), void()) + { + ::nlohmann::from_json(std::forward(j), val); + } + + /*! + @brief convert any value type to a JSON value + + This function is usually called by the constructors of the @ref basic_json + class. + + @param[in,out] j JSON value to write to + @param[in] val value to read from + */ + template + static auto to_json(BasicJsonType& j, ValueType&& val) noexcept( + noexcept(::nlohmann::to_json(j, std::forward(val)))) + -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) + { + ::nlohmann::to_json(j, std::forward(val)); + } +}; + +} // namespace nlohmann + +// #include + + +#include // uint8_t +#include // tie +#include // move + +namespace nlohmann +{ + +/*! +@brief an internal type for a backed binary type + +This type extends the template parameter @a BinaryType provided to `basic_json` +with a subtype used by BSON and MessagePack. This type exists so that the user +does not have to specify a type themselves with a specific naming scheme in +order to override the binary type. + +@tparam BinaryType container to store bytes (`std::vector` by + default) + +@since version 3.8.0 +*/ +template +class byte_container_with_subtype : public BinaryType +{ + public: + /// the type of the underlying container + using container_type = BinaryType; + + byte_container_with_subtype() noexcept(noexcept(container_type())) + : container_type() + {} + + byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) + : container_type(b) + {} + + byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + {} + + byte_container_with_subtype(const container_type& b, std::uint8_t subtype) noexcept(noexcept(container_type(b))) + : container_type(b) + , m_subtype(subtype) + , m_has_subtype(true) + {} + + byte_container_with_subtype(container_type&& b, std::uint8_t subtype) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + , m_subtype(subtype) + , m_has_subtype(true) + {} + + bool operator==(const byte_container_with_subtype& rhs) const + { + return std::tie(static_cast(*this), m_subtype, m_has_subtype) == + std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); + } + + bool operator!=(const byte_container_with_subtype& rhs) const + { + return !(rhs == *this); + } + + /*! + @brief sets the binary subtype + + Sets the binary subtype of the value, also flags a binary JSON value as + having a subtype, which has implications for serialization. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa @ref subtype() -- return the binary subtype + @sa @ref clear_subtype() -- clears the binary subtype + @sa @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0 + */ + void set_subtype(std::uint8_t subtype) noexcept + { + m_subtype = subtype; + m_has_subtype = true; + } + + /*! + @brief return the binary subtype + + Returns the numerical subtype of the value if it has a subtype. If it does + not have a subtype, this function will return size_t(-1) as a sentinel + value. + + @return the numerical subtype of the binary value + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa @ref set_subtype() -- sets the binary subtype + @sa @ref clear_subtype() -- clears the binary subtype + @sa @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0 + */ + constexpr std::uint8_t subtype() const noexcept + { + return m_subtype; + } + + /*! + @brief return whether the value has a subtype + + @return whether the value has a subtype + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa @ref subtype() -- return the binary subtype + @sa @ref set_subtype() -- sets the binary subtype + @sa @ref clear_subtype() -- clears the binary subtype + + @since version 3.8.0 + */ + constexpr bool has_subtype() const noexcept + { + return m_has_subtype; + } + + /*! + @brief clears the binary subtype + + Clears the binary subtype and flags the value as not having a subtype, which + has implications for serialization; for instance MessagePack will prefer the + bin family over the ext family. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa @ref subtype() -- return the binary subtype + @sa @ref set_subtype() -- sets the binary subtype + @sa @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0 + */ + void clear_subtype() noexcept + { + m_subtype = 0; + m_has_subtype = false; + } + + private: + std::uint8_t m_subtype = 0; + bool m_has_subtype = false; +}; + +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + + +#include // size_t, uint8_t +#include // hash + +namespace nlohmann +{ +namespace detail +{ + +// boost::hash_combine +inline std::size_t combine(std::size_t seed, std::size_t h) noexcept +{ + seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); + return seed; +} + +/*! +@brief hash a JSON value + +The hash function tries to rely on std::hash where possible. Furthermore, the +type of the JSON value is taken into account to have different hash values for +null, 0, 0U, and false, etc. + +@tparam BasicJsonType basic_json specialization +@param j JSON value to hash +@return hash value of j +*/ +template +std::size_t hash(const BasicJsonType& j) +{ + using string_t = typename BasicJsonType::string_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + + const auto type = static_cast(j.type()); + switch (j.type()) + { + case BasicJsonType::value_t::null: + case BasicJsonType::value_t::discarded: + { + return combine(type, 0); + } + + case BasicJsonType::value_t::object: + { + auto seed = combine(type, j.size()); + for (const auto& element : j.items()) + { + const auto h = std::hash {}(element.key()); + seed = combine(seed, h); + seed = combine(seed, hash(element.value())); + } + return seed; + } + + case BasicJsonType::value_t::array: + { + auto seed = combine(type, j.size()); + for (const auto& element : j) + { + seed = combine(seed, hash(element)); + } + return seed; + } + + case BasicJsonType::value_t::string: + { + const auto h = std::hash {}(j.template get_ref()); + return combine(type, h); + } + + case BasicJsonType::value_t::boolean: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_integer: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case nlohmann::detail::value_t::number_unsigned: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case nlohmann::detail::value_t::number_float: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case nlohmann::detail::value_t::binary: + { + auto seed = combine(type, j.get_binary().size()); + const auto h = std::hash {}(j.get_binary().has_subtype()); + seed = combine(seed, h); + seed = combine(seed, j.get_binary().subtype()); + for (const auto byte : j.get_binary()) + { + seed = combine(seed, std::hash {}(byte)); + } + return seed; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } +} + +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // generate_n +#include // array +#include // ldexp +#include // size_t +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // snprintf +#include // memcpy +#include // back_inserter +#include // numeric_limits +#include // char_traits, string +#include // make_pair, move + +// #include + +// #include + + +#include // array +#include // size_t +#include //FILE * +#include // strlen +#include // istream +#include // begin, end, iterator_traits, random_access_iterator_tag, distance, next +#include // shared_ptr, make_shared, addressof +#include // accumulate +#include // string, char_traits +#include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer +#include // pair, declval + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/// the supported input formats +enum class input_format_t { json, cbor, msgpack, ubjson, bson }; + +//////////////////// +// input adapters // +//////////////////// + +/*! +Input adapter for stdio file access. This adapter read only 1 byte and do not use any + buffer. This adapter is a very low level adapter. +*/ +class file_input_adapter +{ + public: + using char_type = char; + + JSON_HEDLEY_NON_NULL(2) + explicit file_input_adapter(std::FILE* f) noexcept + : m_file(f) + {} + + // make class move-only + file_input_adapter(const file_input_adapter&) = delete; + file_input_adapter(file_input_adapter&&) = default; + file_input_adapter& operator=(const file_input_adapter&) = delete; + file_input_adapter& operator=(file_input_adapter&&) = delete; + + std::char_traits::int_type get_character() noexcept + { + return std::fgetc(m_file); + } + + private: + /// the file pointer to read from + std::FILE* m_file; +}; + + +/*! +Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at +beginning of input. Does not support changing the underlying std::streambuf +in mid-input. Maintains underlying std::istream and std::streambuf to support +subsequent use of standard std::istream operations to process any input +characters following those used in parsing the JSON input. Clears the +std::istream flags; any input errors (e.g., EOF) will be detected by the first +subsequent call for input from the std::istream. +*/ +class input_stream_adapter +{ + public: + using char_type = char; + + ~input_stream_adapter() + { + // clear stream flags; we use underlying streambuf I/O, do not + // maintain ifstream flags, except eof + if (is != nullptr) + { + is->clear(is->rdstate() & std::ios::eofbit); + } + } + + explicit input_stream_adapter(std::istream& i) + : is(&i), sb(i.rdbuf()) + {} + + // delete because of pointer members + input_stream_adapter(const input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete; + + input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs.is), sb(rhs.sb) + { + rhs.is = nullptr; + rhs.sb = nullptr; + } + + // std::istream/std::streambuf use std::char_traits::to_int_type, to + // ensure that std::char_traits::eof() and the character 0xFF do not + // end up as the same value, eg. 0xFFFFFFFF. + std::char_traits::int_type get_character() + { + auto res = sb->sbumpc(); + // set eof manually, as we don't use the istream interface. + if (JSON_HEDLEY_UNLIKELY(res == EOF)) + { + is->clear(is->rdstate() | std::ios::eofbit); + } + return res; + } + + private: + /// the associated input stream + std::istream* is = nullptr; + std::streambuf* sb = nullptr; +}; + +// General-purpose iterator-based adapter. It might not be as fast as +// theoretically possible for some containers, but it is extremely versatile. +template +class iterator_input_adapter +{ + public: + using char_type = typename std::iterator_traits::value_type; + + iterator_input_adapter(IteratorType first, IteratorType last) + : current(std::move(first)), end(std::move(last)) {} + + typename std::char_traits::int_type get_character() + { + if (JSON_HEDLEY_LIKELY(current != end)) + { + auto result = std::char_traits::to_int_type(*current); + std::advance(current, 1); + return result; + } + else + { + return std::char_traits::eof(); + } + } + + private: + IteratorType current; + IteratorType end; + + template + friend struct wide_string_input_helper; + + bool empty() const + { + return current == end; + } + +}; + + +template +struct wide_string_input_helper; + +template +struct wide_string_input_helper +{ + // UTF-32 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-32 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (wc <= 0xFFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else if (wc <= 0x10FFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + // unknown character + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } +}; + +template +struct wide_string_input_helper +{ + // UTF-16 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-16 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (0xD800 > wc || wc >= 0xE000) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else + { + if (JSON_HEDLEY_UNLIKELY(!input.empty())) + { + const auto wc2 = static_cast(input.get_character()); + const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); + utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } + } +}; + +// Wraps another input apdater to convert wide character types into individual bytes. +template +class wide_string_input_adapter +{ + public: + using char_type = char; + + wide_string_input_adapter(BaseInputAdapter base) + : base_adapter(base) {} + + typename std::char_traits::int_type get_character() noexcept + { + // check if buffer needs to be filled + if (utf8_bytes_index == utf8_bytes_filled) + { + fill_buffer(); + + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index == 0); + } + + // use buffer + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); + return utf8_bytes[utf8_bytes_index++]; + } + + private: + BaseInputAdapter base_adapter; + + template + void fill_buffer() + { + wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); + } + + /// a buffer for UTF-8 bytes + std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; + + /// index to the utf8_codes array for the next valid byte + std::size_t utf8_bytes_index = 0; + /// number of valid bytes in the utf8_codes array + std::size_t utf8_bytes_filled = 0; +}; + + +template +struct iterator_input_adapter_factory +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using adapter_type = iterator_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(std::move(first), std::move(last)); + } +}; + +template +struct is_iterator_of_multibyte +{ + using value_type = typename std::iterator_traits::value_type; + enum + { + value = sizeof(value_type) > 1 + }; +}; + +template +struct iterator_input_adapter_factory::value>> +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using base_adapter_type = iterator_input_adapter; + using adapter_type = wide_string_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(base_adapter_type(std::move(first), std::move(last))); + } +}; + +// General purpose iterator-based input +template +typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) +{ + using factory_type = iterator_input_adapter_factory; + return factory_type::create(first, last); +} + +// Convenience shorthand from container to iterator +template +auto input_adapter(const ContainerType& container) -> decltype(input_adapter(begin(container), end(container))) +{ + // Enable ADL + using std::begin; + using std::end; + + return input_adapter(begin(container), end(container)); +} + +// Special cases with fast paths +inline file_input_adapter input_adapter(std::FILE* file) +{ + return file_input_adapter(file); +} + +inline input_stream_adapter input_adapter(std::istream& stream) +{ + return input_stream_adapter(stream); +} + +inline input_stream_adapter input_adapter(std::istream&& stream) +{ + return input_stream_adapter(stream); +} + +using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); + +// Null-delimited strings, and the like. +template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + !std::is_array::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > +contiguous_bytes_input_adapter input_adapter(CharT b) +{ + auto length = std::strlen(reinterpret_cast(b)); + const auto* ptr = reinterpret_cast(b); + return input_adapter(ptr, ptr + length); +} + +template +auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) +{ + return input_adapter(array, array + N); +} + +// This class only handles inputs of input_buffer_adapter type. +// It's required so that expressions like {ptr, len} can be implicitely casted +// to the correct adapter. +class span_input_adapter +{ + public: + template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > + span_input_adapter(CharT b, std::size_t l) + : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} + + template::iterator_category, std::random_access_iterator_tag>::value, + int>::type = 0> + span_input_adapter(IteratorType first, IteratorType last) + : ia(input_adapter(first, last)) {} + + contiguous_bytes_input_adapter&& get() + { + return std::move(ia); + } + + private: + contiguous_bytes_input_adapter ia; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include +#include // string +#include // move +#include // vector + +// #include + +// #include + + +namespace nlohmann +{ + +/*! +@brief SAX interface + +This class describes the SAX interface used by @ref nlohmann::json::sax_parse. +Each function is called in different situations while the input is parsed. The +boolean return value informs the parser whether to continue processing the +input. +*/ +template +struct json_sax +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @brief a null value was read + @return whether parsing should proceed + */ + virtual bool null() = 0; + + /*! + @brief a boolean value was read + @param[in] val boolean value + @return whether parsing should proceed + */ + virtual bool boolean(bool val) = 0; + + /*! + @brief an integer number was read + @param[in] val integer value + @return whether parsing should proceed + */ + virtual bool number_integer(number_integer_t val) = 0; + + /*! + @brief an unsigned integer number was read + @param[in] val unsigned integer value + @return whether parsing should proceed + */ + virtual bool number_unsigned(number_unsigned_t val) = 0; + + /*! + @brief an floating-point number was read + @param[in] val floating-point value + @param[in] s raw token value + @return whether parsing should proceed + */ + virtual bool number_float(number_float_t val, const string_t& s) = 0; + + /*! + @brief a string was read + @param[in] val string value + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool string(string_t& val) = 0; + + /*! + @brief a binary string was read + @param[in] val binary value + @return whether parsing should proceed + @note It is safe to move the passed binary. + */ + virtual bool binary(binary_t& val) = 0; + + /*! + @brief the beginning of an object was read + @param[in] elements number of object elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_object(std::size_t elements) = 0; + + /*! + @brief an object key was read + @param[in] val object key + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool key(string_t& val) = 0; + + /*! + @brief the end of an object was read + @return whether parsing should proceed + */ + virtual bool end_object() = 0; + + /*! + @brief the beginning of an array was read + @param[in] elements number of array elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_array(std::size_t elements) = 0; + + /*! + @brief the end of an array was read + @return whether parsing should proceed + */ + virtual bool end_array() = 0; + + /*! + @brief a parse error occurred + @param[in] position the position in the input where the error occurs + @param[in] last_token the last read token + @param[in] ex an exception object describing the error + @return whether parsing should proceed (must return false) + */ + virtual bool parse_error(std::size_t position, + const std::string& last_token, + const detail::exception& ex) = 0; + + virtual ~json_sax() = default; +}; + + +namespace detail +{ +/*! +@brief SAX implementation to create a JSON value from SAX events + +This class implements the @ref json_sax interface and processes the SAX events +to create a JSON value which makes it basically a DOM parser. The structure or +hierarchy of the JSON value is managed by the stack `ref_stack` which contains +a pointer to the respective array or object for each recursion depth. + +After successful parsing, the value that is passed by reference to the +constructor contains the parsed value. + +@tparam BasicJsonType the JSON type +*/ +template +class json_sax_dom_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @param[in, out] r reference to a JSON value that is manipulated while + parsing + @param[in] allow_exceptions_ whether parse errors yield exceptions + */ + explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) + : root(r), allow_exceptions(allow_exceptions_) + {} + + // make class move-only + json_sax_dom_parser(const json_sax_dom_parser&) = delete; + json_sax_dom_parser(json_sax_dom_parser&&) = default; + json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; + ~json_sax_dom_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); + + if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, + "excessive object size: " + std::to_string(len))); + } + + return true; + } + + bool key(string_t& val) + { + // add null at given key and store the reference for later + object_element = &(ref_stack.back()->m_value.object->operator[](val)); + return true; + } + + bool end_object() + { + ref_stack.pop_back(); + return true; + } + + bool start_array(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); + + if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, + "excessive array size: " + std::to_string(len))); + } + + return true; + } + + bool end_array() + { + ref_stack.pop_back(); + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + */ + template + JSON_HEDLEY_RETURNS_NON_NULL + BasicJsonType* handle_value(Value&& v) + { + if (ref_stack.empty()) + { + root = BasicJsonType(std::forward(v)); + return &root; + } + + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->emplace_back(std::forward(v)); + return &(ref_stack.back()->m_value.array->back()); + } + + JSON_ASSERT(ref_stack.back()->is_object()); + JSON_ASSERT(object_element); + *object_element = BasicJsonType(std::forward(v)); + return object_element; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +template +class json_sax_dom_callback_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using parser_callback_t = typename BasicJsonType::parser_callback_t; + using parse_event_t = typename BasicJsonType::parse_event_t; + + json_sax_dom_callback_parser(BasicJsonType& r, + const parser_callback_t cb, + const bool allow_exceptions_ = true) + : root(r), callback(cb), allow_exceptions(allow_exceptions_) + { + keep_stack.push_back(true); + } + + // make class move-only + json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; + json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; + ~json_sax_dom_callback_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + // check callback for object start + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::object, true); + ref_stack.push_back(val.second); + + // check object limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len))); + } + + return true; + } + + bool key(string_t& val) + { + BasicJsonType k = BasicJsonType(val); + + // check callback for key + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); + key_keep_stack.push_back(keep); + + // add discarded value at given key and store the reference for later + if (keep && ref_stack.back()) + { + object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded); + } + + return true; + } + + bool end_object() + { + if (ref_stack.back() && !callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) + { + // discard object + *ref_stack.back() = discarded; + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) + { + // remove discarded value + for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) + { + if (it->is_discarded()) + { + ref_stack.back()->erase(it); + break; + } + } + } + + return true; + } + + bool start_array(std::size_t len) + { + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::array, true); + ref_stack.push_back(val.second); + + // check array limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len))); + } + + return true; + } + + bool end_array() + { + bool keep = true; + + if (ref_stack.back()) + { + keep = callback(static_cast(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); + if (!keep) + { + // discard array + *ref_stack.back() = discarded; + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + // remove discarded value + if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->pop_back(); + } + + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @param[in] v value to add to the JSON value we build during parsing + @param[in] skip_callback whether we should skip calling the callback + function; this is required after start_array() and + start_object() SAX events, because otherwise we would call the + callback function with an empty array or object, respectively. + + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + + @return pair of boolean (whether value should be kept) and pointer (to the + passed value in the ref_stack hierarchy; nullptr if not kept) + */ + template + std::pair handle_value(Value&& v, const bool skip_callback = false) + { + JSON_ASSERT(!keep_stack.empty()); + + // do not handle this value if we know it would be added to a discarded + // container + if (!keep_stack.back()) + { + return {false, nullptr}; + } + + // create value + auto value = BasicJsonType(std::forward(v)); + + // check callback + const bool keep = skip_callback || callback(static_cast(ref_stack.size()), parse_event_t::value, value); + + // do not handle this value if we just learnt it shall be discarded + if (!keep) + { + return {false, nullptr}; + } + + if (ref_stack.empty()) + { + root = std::move(value); + return {true, &root}; + } + + // skip this value if we already decided to skip the parent + // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) + if (!ref_stack.back()) + { + return {false, nullptr}; + } + + // we now only expect arrays and objects + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + // array + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->push_back(std::move(value)); + return {true, &(ref_stack.back()->m_value.array->back())}; + } + + // object + JSON_ASSERT(ref_stack.back()->is_object()); + // check if we should store an element for the current key + JSON_ASSERT(!key_keep_stack.empty()); + const bool store_element = key_keep_stack.back(); + key_keep_stack.pop_back(); + + if (!store_element) + { + return {false, nullptr}; + } + + JSON_ASSERT(object_element); + *object_element = std::move(value); + return {true, object_element}; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// stack to manage which values to keep + std::vector keep_stack {}; + /// stack to manage which object keys to keep + std::vector key_keep_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// callback function + const parser_callback_t callback = nullptr; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; + /// a discarded value for the callback + BasicJsonType discarded = BasicJsonType::value_t::discarded; +}; + +template +class json_sax_acceptor +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + bool null() + { + return true; + } + + bool boolean(bool /*unused*/) + { + return true; + } + + bool number_integer(number_integer_t /*unused*/) + { + return true; + } + + bool number_unsigned(number_unsigned_t /*unused*/) + { + return true; + } + + bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) + { + return true; + } + + bool string(string_t& /*unused*/) + { + return true; + } + + bool binary(binary_t& /*unused*/) + { + return true; + } + + bool start_object(std::size_t /*unused*/ = std::size_t(-1)) + { + return true; + } + + bool key(string_t& /*unused*/) + { + return true; + } + + bool end_object() + { + return true; + } + + bool start_array(std::size_t /*unused*/ = std::size_t(-1)) + { + return true; + } + + bool end_array() + { + return true; + } + + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) + { + return false; + } +}; +} // namespace detail + +} // namespace nlohmann + +// #include + + +#include // array +#include // localeconv +#include // size_t +#include // snprintf +#include // strtof, strtod, strtold, strtoll, strtoull +#include // initializer_list +#include // char_traits, string +#include // move +#include // vector + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/////////// +// lexer // +/////////// + +template +class lexer_base +{ + public: + /// token types for the parser + enum class token_type + { + uninitialized, ///< indicating the scanner is uninitialized + literal_true, ///< the `true` literal + literal_false, ///< the `false` literal + literal_null, ///< the `null` literal + value_string, ///< a string -- use get_string() for actual value + value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value + value_integer, ///< a signed integer -- use get_number_integer() for actual value + value_float, ///< an floating point number -- use get_number_float() for actual value + begin_array, ///< the character for array begin `[` + begin_object, ///< the character for object begin `{` + end_array, ///< the character for array end `]` + end_object, ///< the character for object end `}` + name_separator, ///< the name separator `:` + value_separator, ///< the value separator `,` + parse_error, ///< indicating a parse error + end_of_input, ///< indicating the end of the input buffer + literal_or_value ///< a literal or the begin of a value (only for diagnostics) + }; + + /// return name of values of type token_type (only used for errors) + JSON_HEDLEY_RETURNS_NON_NULL + JSON_HEDLEY_CONST + static const char* token_type_name(const token_type t) noexcept + { + switch (t) + { + case token_type::uninitialized: + return ""; + case token_type::literal_true: + return "true literal"; + case token_type::literal_false: + return "false literal"; + case token_type::literal_null: + return "null literal"; + case token_type::value_string: + return "string literal"; + case token_type::value_unsigned: + case token_type::value_integer: + case token_type::value_float: + return "number literal"; + case token_type::begin_array: + return "'['"; + case token_type::begin_object: + return "'{'"; + case token_type::end_array: + return "']'"; + case token_type::end_object: + return "'}'"; + case token_type::name_separator: + return "':'"; + case token_type::value_separator: + return "','"; + case token_type::parse_error: + return ""; + case token_type::end_of_input: + return "end of input"; + case token_type::literal_or_value: + return "'[', '{', or a literal"; + // LCOV_EXCL_START + default: // catch non-enum values + return "unknown token"; + // LCOV_EXCL_STOP + } + } +}; +/*! +@brief lexical analysis + +This class organizes the lexical analysis during JSON deserialization. +*/ +template +class lexer : public lexer_base +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + using token_type = typename lexer_base::token_type; + + explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) + : ia(std::move(adapter)) + , ignore_comments(ignore_comments_) + , decimal_point_char(static_cast(get_decimal_point())) + {} + + // delete because of pointer members + lexer(const lexer&) = delete; + lexer(lexer&&) = default; + lexer& operator=(lexer&) = delete; + lexer& operator=(lexer&&) = default; + ~lexer() = default; + + private: + ///////////////////// + // locales + ///////////////////// + + /// return the locale-dependent decimal point + JSON_HEDLEY_PURE + static char get_decimal_point() noexcept + { + const auto* loc = localeconv(); + JSON_ASSERT(loc != nullptr); + return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); + } + + ///////////////////// + // scan functions + ///////////////////// + + /*! + @brief get codepoint from 4 hex characters following `\u` + + For input "\u c1 c2 c3 c4" the codepoint is: + (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 + = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) + + Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' + must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The + conversion is done by subtracting the offset (0x30, 0x37, and 0x57) + between the ASCII value of the character and the desired integer value. + + @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or + non-hex character) + */ + int get_codepoint() + { + // this function only makes sense after reading `\u` + JSON_ASSERT(current == 'u'); + int codepoint = 0; + + const auto factors = { 12u, 8u, 4u, 0u }; + for (const auto factor : factors) + { + get(); + + if (current >= '0' && current <= '9') + { + codepoint += static_cast((static_cast(current) - 0x30u) << factor); + } + else if (current >= 'A' && current <= 'F') + { + codepoint += static_cast((static_cast(current) - 0x37u) << factor); + } + else if (current >= 'a' && current <= 'f') + { + codepoint += static_cast((static_cast(current) - 0x57u) << factor); + } + else + { + return -1; + } + } + + JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); + return codepoint; + } + + /*! + @brief check if the next byte(s) are inside a given range + + Adds the current byte and, for each passed range, reads a new byte and + checks if it is inside the range. If a violation was detected, set up an + error message and return false. Otherwise, return true. + + @param[in] ranges list of integers; interpreted as list of pairs of + inclusive lower and upper bound, respectively + + @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, + 1, 2, or 3 pairs. This precondition is enforced by an assertion. + + @return true if and only if no range violation was detected + */ + bool next_byte_in_range(std::initializer_list ranges) + { + JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); + add(current); + + for (auto range = ranges.begin(); range != ranges.end(); ++range) + { + get(); + if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) + { + add(current); + } + else + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return false; + } + } + + return true; + } + + /*! + @brief scan a string literal + + This function scans a string according to Sect. 7 of RFC 7159. While + scanning, bytes are escaped and copied into buffer token_buffer. Then the + function returns successfully, token_buffer is *not* null-terminated (as it + may contain \0 bytes), and token_buffer.size() is the number of bytes in the + string. + + @return token_type::value_string if string could be successfully scanned, + token_type::parse_error otherwise + + @note In case of errors, variable error_message contains a textual + description. + */ + token_type scan_string() + { + // reset token_buffer (ignore opening quote) + reset(); + + // we entered the function by reading an open quote + JSON_ASSERT(current == '\"'); + + while (true) + { + // get next character + switch (get()) + { + // end of file while parsing string + case std::char_traits::eof(): + { + error_message = "invalid string: missing closing quote"; + return token_type::parse_error; + } + + // closing quote + case '\"': + { + return token_type::value_string; + } + + // escapes + case '\\': + { + switch (get()) + { + // quotation mark + case '\"': + add('\"'); + break; + // reverse solidus + case '\\': + add('\\'); + break; + // solidus + case '/': + add('/'); + break; + // backspace + case 'b': + add('\b'); + break; + // form feed + case 'f': + add('\f'); + break; + // line feed + case 'n': + add('\n'); + break; + // carriage return + case 'r': + add('\r'); + break; + // tab + case 't': + add('\t'); + break; + + // unicode escapes + case 'u': + { + const int codepoint1 = get_codepoint(); + int codepoint = codepoint1; // start with codepoint1 + + if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if code point is a high surrogate + if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) + { + // expect next \uxxxx entry + if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) + { + const int codepoint2 = get_codepoint(); + + if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if codepoint2 is a low surrogate + if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) + { + // overwrite codepoint + codepoint = static_cast( + // high surrogate occupies the most significant 22 bits + (static_cast(codepoint1) << 10u) + // low surrogate occupies the least significant 15 bits + + static_cast(codepoint2) + // there is still the 0xD800, 0xDC00 and 0x10000 noise + // in the result so we have to subtract with: + // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 + - 0x35FDC00u); + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) + { + error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; + return token_type::parse_error; + } + } + + // result of the above calculation yields a proper codepoint + JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); + + // translate codepoint into bytes + if (codepoint < 0x80) + { + // 1-byte characters: 0xxxxxxx (ASCII) + add(static_cast(codepoint)); + } + else if (codepoint <= 0x7FF) + { + // 2-byte characters: 110xxxxx 10xxxxxx + add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else if (codepoint <= 0xFFFF) + { + // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx + add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else + { + // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + + break; + } + + // other characters after escape + default: + error_message = "invalid string: forbidden character after backslash"; + return token_type::parse_error; + } + + break; + } + + // invalid control characters + case 0x00: + { + error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; + return token_type::parse_error; + } + + case 0x01: + { + error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; + return token_type::parse_error; + } + + case 0x02: + { + error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; + return token_type::parse_error; + } + + case 0x03: + { + error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; + return token_type::parse_error; + } + + case 0x04: + { + error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; + return token_type::parse_error; + } + + case 0x05: + { + error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; + return token_type::parse_error; + } + + case 0x06: + { + error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; + return token_type::parse_error; + } + + case 0x07: + { + error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; + return token_type::parse_error; + } + + case 0x08: + { + error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; + return token_type::parse_error; + } + + case 0x09: + { + error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; + return token_type::parse_error; + } + + case 0x0A: + { + error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; + return token_type::parse_error; + } + + case 0x0B: + { + error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; + return token_type::parse_error; + } + + case 0x0C: + { + error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; + return token_type::parse_error; + } + + case 0x0D: + { + error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; + return token_type::parse_error; + } + + case 0x0E: + { + error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; + return token_type::parse_error; + } + + case 0x0F: + { + error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; + return token_type::parse_error; + } + + case 0x10: + { + error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; + return token_type::parse_error; + } + + case 0x11: + { + error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; + return token_type::parse_error; + } + + case 0x12: + { + error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; + return token_type::parse_error; + } + + case 0x13: + { + error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; + return token_type::parse_error; + } + + case 0x14: + { + error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; + return token_type::parse_error; + } + + case 0x15: + { + error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; + return token_type::parse_error; + } + + case 0x16: + { + error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; + return token_type::parse_error; + } + + case 0x17: + { + error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; + return token_type::parse_error; + } + + case 0x18: + { + error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; + return token_type::parse_error; + } + + case 0x19: + { + error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; + return token_type::parse_error; + } + + case 0x1A: + { + error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; + return token_type::parse_error; + } + + case 0x1B: + { + error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; + return token_type::parse_error; + } + + case 0x1C: + { + error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; + return token_type::parse_error; + } + + case 0x1D: + { + error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; + return token_type::parse_error; + } + + case 0x1E: + { + error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; + return token_type::parse_error; + } + + case 0x1F: + { + error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; + return token_type::parse_error; + } + + // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) + case 0x20: + case 0x21: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + { + add(current); + break; + } + + // U+0080..U+07FF: bytes C2..DF 80..BF + case 0xC2: + case 0xC3: + case 0xC4: + case 0xC5: + case 0xC6: + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD5: + case 0xD6: + case 0xD7: + case 0xD8: + case 0xD9: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: + { + if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) + { + return token_type::parse_error; + } + break; + } + + // U+0800..U+0FFF: bytes E0 A0..BF 80..BF + case 0xE0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF + // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xEE: + case 0xEF: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+D000..U+D7FF: bytes ED 80..9F 80..BF + case 0xED: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF + case 0xF0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF + case 0xF1: + case 0xF2: + case 0xF3: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF + case 0xF4: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // remaining bytes (80..C1 and F5..FF) are ill-formed + default: + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return token_type::parse_error; + } + } + } + } + + /*! + * @brief scan a comment + * @return whether comment could be scanned successfully + */ + bool scan_comment() + { + switch (get()) + { + // single-line comments skip input until a newline or EOF is read + case '/': + { + while (true) + { + switch (get()) + { + case '\n': + case '\r': + case std::char_traits::eof(): + case '\0': + return true; + + default: + break; + } + } + } + + // multi-line comments skip input until */ is read + case '*': + { + while (true) + { + switch (get()) + { + case std::char_traits::eof(): + case '\0': + { + error_message = "invalid comment; missing closing '*/'"; + return false; + } + + case '*': + { + switch (get()) + { + case '/': + return true; + + default: + { + unget(); + continue; + } + } + } + + default: + continue; + } + } + } + + // unexpected character after reading '/' + default: + { + error_message = "invalid comment; expecting '/' or '*' after '/'"; + return false; + } + } + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(float& f, const char* str, char** endptr) noexcept + { + f = std::strtof(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(double& f, const char* str, char** endptr) noexcept + { + f = std::strtod(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(long double& f, const char* str, char** endptr) noexcept + { + f = std::strtold(str, endptr); + } + + /*! + @brief scan a number literal + + This function scans a string according to Sect. 6 of RFC 7159. + + The function is realized with a deterministic finite state machine derived + from the grammar described in RFC 7159. Starting in state "init", the + input is read and used to determined the next state. Only state "done" + accepts the number. State "error" is a trap state to model errors. In the + table below, "anything" means any character but the ones listed before. + + state | 0 | 1-9 | e E | + | - | . | anything + ---------|----------|----------|----------|---------|---------|----------|----------- + init | zero | any1 | [error] | [error] | minus | [error] | [error] + minus | zero | any1 | [error] | [error] | [error] | [error] | [error] + zero | done | done | exponent | done | done | decimal1 | done + any1 | any1 | any1 | exponent | done | done | decimal1 | done + decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] + decimal2 | decimal2 | decimal2 | exponent | done | done | done | done + exponent | any2 | any2 | [error] | sign | sign | [error] | [error] + sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] + any2 | any2 | any2 | done | done | done | done | done + + The state machine is realized with one label per state (prefixed with + "scan_number_") and `goto` statements between them. The state machine + contains cycles, but any cycle can be left when EOF is read. Therefore, + the function is guaranteed to terminate. + + During scanning, the read bytes are stored in token_buffer. This string is + then converted to a signed integer, an unsigned integer, or a + floating-point number. + + @return token_type::value_unsigned, token_type::value_integer, or + token_type::value_float if number could be successfully scanned, + token_type::parse_error otherwise + + @note The scanner is independent of the current locale. Internally, the + locale's decimal point is used instead of `.` to work with the + locale-dependent converters. + */ + token_type scan_number() // lgtm [cpp/use-of-goto] + { + // reset token_buffer to store the number's bytes + reset(); + + // the type of the parsed number; initially set to unsigned; will be + // changed if minus sign, decimal point or exponent is read + token_type number_type = token_type::value_unsigned; + + // state (init): we just found out we need to scan a number + switch (current) + { + case '-': + { + add(current); + goto scan_number_minus; + } + + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + // all other characters are rejected outside scan_number() + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + +scan_number_minus: + // state: we just parsed a leading minus sign + number_type = token_type::value_integer; + switch (get()) + { + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + default: + { + error_message = "invalid number; expected digit after '-'"; + return token_type::parse_error; + } + } + +scan_number_zero: + // state: we just parse a zero (maybe with a leading minus sign) + switch (get()) + { + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_any1: + // state: we just parsed a number 0-9 (maybe with a leading minus sign) + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_decimal1: + // state: we just parsed a decimal point + number_type = token_type::value_float; + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + default: + { + error_message = "invalid number; expected digit after '.'"; + return token_type::parse_error; + } + } + +scan_number_decimal2: + // we just parsed at least one number after a decimal point + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_exponent: + // we just parsed an exponent + number_type = token_type::value_float; + switch (get()) + { + case '+': + case '-': + { + add(current); + goto scan_number_sign; + } + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = + "invalid number; expected '+', '-', or digit after exponent"; + return token_type::parse_error; + } + } + +scan_number_sign: + // we just parsed an exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = "invalid number; expected digit after exponent sign"; + return token_type::parse_error; + } + } + +scan_number_any2: + // we just parsed a number after the exponent or exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + goto scan_number_done; + } + +scan_number_done: + // unget the character after the number (we only read it to know that + // we are done scanning a number) + unget(); + + char* endptr = nullptr; + errno = 0; + + // try to parse integers first and fall back to floats + if (number_type == token_type::value_unsigned) + { + const auto x = std::strtoull(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_unsigned = static_cast(x); + if (value_unsigned == x) + { + return token_type::value_unsigned; + } + } + } + else if (number_type == token_type::value_integer) + { + const auto x = std::strtoll(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_integer = static_cast(x); + if (value_integer == x) + { + return token_type::value_integer; + } + } + } + + // this code is reached if we parse a floating-point number or if an + // integer conversion above failed + strtof(value_float, token_buffer.data(), &endptr); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + return token_type::value_float; + } + + /*! + @param[in] literal_text the literal text to expect + @param[in] length the length of the passed literal text + @param[in] return_type the token type to return on success + */ + JSON_HEDLEY_NON_NULL(2) + token_type scan_literal(const char_type* literal_text, const std::size_t length, + token_type return_type) + { + JSON_ASSERT(std::char_traits::to_char_type(current) == literal_text[0]); + for (std::size_t i = 1; i < length; ++i) + { + if (JSON_HEDLEY_UNLIKELY(std::char_traits::to_char_type(get()) != literal_text[i])) + { + error_message = "invalid literal"; + return token_type::parse_error; + } + } + return return_type; + } + + ///////////////////// + // input management + ///////////////////// + + /// reset token_buffer; current character is beginning of token + void reset() noexcept + { + token_buffer.clear(); + token_string.clear(); + token_string.push_back(std::char_traits::to_char_type(current)); + } + + /* + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a + `std::char_traits::eof()` in that case. Stores the scanned characters + for use in error messages. + + @return character read from the input + */ + char_int_type get() + { + ++position.chars_read_total; + ++position.chars_read_current_line; + + if (next_unget) + { + // just reset the next_unget variable and work with current + next_unget = false; + } + else + { + current = ia.get_character(); + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + token_string.push_back(std::char_traits::to_char_type(current)); + } + + if (current == '\n') + { + ++position.lines_read; + position.chars_read_current_line = 0; + } + + return current; + } + + /*! + @brief unget current character (read it again on next get) + + We implement unget by setting variable next_unget to true. The input is not + changed - we just simulate ungetting by modifying chars_read_total, + chars_read_current_line, and token_string. The next call to get() will + behave as if the unget character is read again. + */ + void unget() + { + next_unget = true; + + --position.chars_read_total; + + // in case we "unget" a newline, we have to also decrement the lines_read + if (position.chars_read_current_line == 0) + { + if (position.lines_read > 0) + { + --position.lines_read; + } + } + else + { + --position.chars_read_current_line; + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + JSON_ASSERT(!token_string.empty()); + token_string.pop_back(); + } + } + + /// add a character to token_buffer + void add(char_int_type c) + { + token_buffer.push_back(static_cast(c)); + } + + public: + ///////////////////// + // value getters + ///////////////////// + + /// return integer value + constexpr number_integer_t get_number_integer() const noexcept + { + return value_integer; + } + + /// return unsigned integer value + constexpr number_unsigned_t get_number_unsigned() const noexcept + { + return value_unsigned; + } + + /// return floating-point value + constexpr number_float_t get_number_float() const noexcept + { + return value_float; + } + + /// return current string value (implicitly resets the token; useful only once) + string_t& get_string() + { + return token_buffer; + } + + ///////////////////// + // diagnostics + ///////////////////// + + /// return position of last read token + constexpr position_t get_position() const noexcept + { + return position; + } + + /// return the last read token (for errors only). Will never contain EOF + /// (an arbitrary value that is not a valid char value, often -1), because + /// 255 may legitimately occur. May contain NUL, which should be escaped. + std::string get_token_string() const + { + // escape control characters + std::string result; + for (const auto c : token_string) + { + if (static_cast(c) <= '\x1F') + { + // escape control characters + std::array cs{{}}; + (std::snprintf)(cs.data(), cs.size(), "", static_cast(c)); + result += cs.data(); + } + else + { + // add character as is + result.push_back(static_cast(c)); + } + } + + return result; + } + + /// return syntax error message + JSON_HEDLEY_RETURNS_NON_NULL + constexpr const char* get_error_message() const noexcept + { + return error_message; + } + + ///////////////////// + // actual scanner + ///////////////////// + + /*! + @brief skip the UTF-8 byte order mark + @return true iff there is no BOM or the correct BOM has been skipped + */ + bool skip_bom() + { + if (get() == 0xEF) + { + // check if we completely parse the BOM + return get() == 0xBB && get() == 0xBF; + } + + // the first character is not the beginning of the BOM; unget it to + // process is later + unget(); + return true; + } + + void skip_whitespace() + { + do + { + get(); + } + while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); + } + + token_type scan() + { + // initially, skip the BOM + if (position.chars_read_total == 0 && !skip_bom()) + { + error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; + return token_type::parse_error; + } + + // read next character and ignore whitespace + skip_whitespace(); + + // ignore comments + while (ignore_comments && current == '/') + { + if (!scan_comment()) + { + return token_type::parse_error; + } + + // skip following whitespace + skip_whitespace(); + } + + switch (current) + { + // structural characters + case '[': + return token_type::begin_array; + case ']': + return token_type::end_array; + case '{': + return token_type::begin_object; + case '}': + return token_type::end_object; + case ':': + return token_type::name_separator; + case ',': + return token_type::value_separator; + + // literals + case 't': + { + std::array true_literal = {{'t', 'r', 'u', 'e'}}; + return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); + } + case 'f': + { + std::array false_literal = {{'f', 'a', 'l', 's', 'e'}}; + return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); + } + case 'n': + { + std::array null_literal = {{'n', 'u', 'l', 'l'}}; + return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); + } + + // string + case '\"': + return scan_string(); + + // number + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return scan_number(); + + // end of input (the null byte is needed when parsing from + // string literals) + case '\0': + case std::char_traits::eof(): + return token_type::end_of_input; + + // error + default: + error_message = "invalid literal"; + return token_type::parse_error; + } + } + + private: + /// input adapter + InputAdapterType ia; + + /// whether comments should be ignored (true) or signaled as errors (false) + const bool ignore_comments = false; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// whether the next get() call should just return current + bool next_unget = false; + + /// the start position of the current token + position_t position {}; + + /// raw input token string (for error messages) + std::vector token_string {}; + + /// buffer for variable-length tokens (numbers, strings) + string_t token_buffer {}; + + /// a description of occurred lexer errors + const char* error_message = ""; + + // number values + number_integer_t value_integer = 0; + number_unsigned_t value_unsigned = 0; + number_float_t value_float = 0; + + /// the decimal point + const char_int_type decimal_point_char = '.'; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // size_t +#include // declval +#include // string + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +using null_function_t = decltype(std::declval().null()); + +template +using boolean_function_t = + decltype(std::declval().boolean(std::declval())); + +template +using number_integer_function_t = + decltype(std::declval().number_integer(std::declval())); + +template +using number_unsigned_function_t = + decltype(std::declval().number_unsigned(std::declval())); + +template +using number_float_function_t = decltype(std::declval().number_float( + std::declval(), std::declval())); + +template +using string_function_t = + decltype(std::declval().string(std::declval())); + +template +using binary_function_t = + decltype(std::declval().binary(std::declval())); + +template +using start_object_function_t = + decltype(std::declval().start_object(std::declval())); + +template +using key_function_t = + decltype(std::declval().key(std::declval())); + +template +using end_object_function_t = decltype(std::declval().end_object()); + +template +using start_array_function_t = + decltype(std::declval().start_array(std::declval())); + +template +using end_array_function_t = decltype(std::declval().end_array()); + +template +using parse_error_function_t = decltype(std::declval().parse_error( + std::declval(), std::declval(), + std::declval())); + +template +struct is_sax +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static constexpr bool value = + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value; +}; + +template +struct is_sax_static_asserts +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static_assert(is_detected_exact::value, + "Missing/invalid function: bool null()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_integer(number_integer_t)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool string(string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool binary(binary_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_object(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool key(string_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_object()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_array(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_array()"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool parse_error(std::size_t, const " + "std::string&, const exception&)"); +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +/// how to treat CBOR tags +enum class cbor_tag_handler_t +{ + error, ///< throw a parse_error exception in case of a tag + ignore ///< ignore tags +}; + +/*! +@brief determine system byte order + +@return true if and only if system's byte order is little endian + +@note from https://stackoverflow.com/a/1001328/266378 +*/ +static inline bool little_endianess(int num = 1) noexcept +{ + return *reinterpret_cast(&num) == 1; +} + + +/////////////////// +// binary reader // +/////////////////// + +/*! +@brief deserialization of CBOR, MessagePack, and UBJSON values +*/ +template> +class binary_reader +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using json_sax_t = SAX; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + /*! + @brief create a binary reader + + @param[in] adapter input adapter to read from + */ + explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(adapter)) + { + (void)detail::is_sax_static_asserts {}; + } + + // make class move-only + binary_reader(const binary_reader&) = delete; + binary_reader(binary_reader&&) = default; + binary_reader& operator=(const binary_reader&) = delete; + binary_reader& operator=(binary_reader&&) = default; + ~binary_reader() = default; + + /*! + @param[in] format the binary format to parse + @param[in] sax_ a SAX event processor + @param[in] strict whether to expect the input to be consumed completed + @param[in] tag_handler how to treat CBOR tags + + @return + */ + JSON_HEDLEY_NON_NULL(3) + bool sax_parse(const input_format_t format, + json_sax_t* sax_, + const bool strict = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + sax = sax_; + bool result = false; + + switch (format) + { + case input_format_t::bson: + result = parse_bson_internal(); + break; + + case input_format_t::cbor: + result = parse_cbor_internal(true, tag_handler); + break; + + case input_format_t::msgpack: + result = parse_msgpack_internal(); + break; + + case input_format_t::ubjson: + result = parse_ubjson_internal(); + break; + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + + // strict mode: next byte must be EOF + if (result && strict) + { + if (format == input_format_t::ubjson) + { + get_ignore_noop(); + } + else + { + get(); + } + + if (JSON_HEDLEY_UNLIKELY(current != std::char_traits::eof())) + { + return sax->parse_error(chars_read, get_token_string(), + parse_error::create(110, chars_read, exception_message(format, "expected end of input; last byte: 0x" + get_token_string(), "value"))); + } + } + + return result; + } + + private: + ////////// + // BSON // + ////////// + + /*! + @brief Reads in a BSON-object and passes it to the SAX-parser. + @return whether a valid BSON-value was passed to the SAX parser + */ + bool parse_bson_internal() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) + { + return false; + } + + return sax->end_object(); + } + + /*! + @brief Parses a C-style string from the BSON input. + @param[in, out] result A reference to the string variable where the read + string is to be stored. + @return `true` if the \x00-byte indicating the end of the string was + encountered before the EOF; false` indicates an unexpected EOF. + */ + bool get_bson_cstr(string_t& result) + { + auto out = std::back_inserter(result); + while (true) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) + { + return false; + } + if (current == 0x00) + { + return true; + } + *out++ = static_cast(current); + } + } + + /*! + @brief Parses a zero-terminated string of length @a len from the BSON + input. + @param[in] len The length (including the zero-byte at the end) of the + string to be read. + @param[in, out] result A reference to the string variable where the read + string is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 1 + @return `true` if the string was successfully parsed + */ + template + bool get_bson_string(const NumberType len, string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 1)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "string length must be at least 1, is " + std::to_string(len), "string"))); + } + + return get_string(input_format_t::bson, len - static_cast(1), result) && get() != std::char_traits::eof(); + } + + /*! + @brief Parses a byte array input of length @a len from the BSON input. + @param[in] len The length of the byte array to be read. + @param[in, out] result A reference to the binary variable where the read + array is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 0 + @return `true` if the byte array was successfully parsed + */ + template + bool get_bson_binary(const NumberType len, binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 0)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "byte array length cannot be negative, is " + std::to_string(len), "binary"))); + } + + // All BSON binary values have a subtype + std::uint8_t subtype{}; + get_number(input_format_t::bson, subtype); + result.set_subtype(subtype); + + return get_binary(input_format_t::bson, len, result); + } + + /*! + @brief Read a BSON document element of the given @a element_type. + @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html + @param[in] element_type_parse_position The position in the input stream, + where the `element_type` was read. + @warning Not all BSON element types are supported yet. An unsupported + @a element_type will give rise to a parse_error.114: + Unsupported BSON record type 0x... + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_internal(const char_int_type element_type, + const std::size_t element_type_parse_position) + { + switch (element_type) + { + case 0x01: // double + { + double number{}; + return get_number(input_format_t::bson, number) && sax->number_float(static_cast(number), ""); + } + + case 0x02: // string + { + std::int32_t len{}; + string_t value; + return get_number(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); + } + + case 0x03: // object + { + return parse_bson_internal(); + } + + case 0x04: // array + { + return parse_bson_array(); + } + + case 0x05: // binary + { + std::int32_t len{}; + binary_t value; + return get_number(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); + } + + case 0x08: // boolean + { + return sax->boolean(get() != 0); + } + + case 0x0A: // null + { + return sax->null(); + } + + case 0x10: // int32 + { + std::int32_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + case 0x12: // int64 + { + std::int64_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + default: // anything else not supported (yet) + { + std::array cr{{}}; + (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type)); + return sax->parse_error(element_type_parse_position, std::string(cr.data()), parse_error::create(114, element_type_parse_position, "Unsupported BSON record type 0x" + std::string(cr.data()))); + } + } + } + + /*! + @brief Read a BSON element list (as specified in the BSON-spec) + + The same binary layout is used for objects and arrays, hence it must be + indicated with the argument @a is_array which one is expected + (true --> array, false --> object). + + @param[in] is_array Determines if the element list being read is to be + treated as an object (@a is_array == false), or as an + array (@a is_array == true). + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_list(const bool is_array) + { + string_t key; + + while (auto element_type = get()) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) + { + return false; + } + + const std::size_t element_type_parse_position = chars_read; + if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) + { + return false; + } + + if (!is_array && !sax->key(key)) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) + { + return false; + } + + // get_bson_cstr only appends + key.clear(); + } + + return true; + } + + /*! + @brief Reads an array from the BSON input and passes it to the SAX-parser. + @return whether a valid BSON-array was passed to the SAX parser + */ + bool parse_bson_array() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) + { + return false; + } + + return sax->end_array(); + } + + ////////// + // CBOR // + ////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true) or whether the last read character should + be considered instead (false) + @param[in] tag_handler how CBOR tags should be treated + + @return whether a valid CBOR value was passed to the SAX parser + */ + bool parse_cbor_internal(const bool get_char, + const cbor_tag_handler_t tag_handler) + { + switch (get_char ? get() : current) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::cbor, "value"); + + // Integer 0x00..0x17 (0..23) + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return sax->number_unsigned(static_cast(current)); + + case 0x18: // Unsigned integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x19: // Unsigned integer (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1A: // Unsigned integer (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1B: // Unsigned integer (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + // Negative integer -1-0x00..-1-0x17 (-1..-24) + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + return sax->number_integer(static_cast(0x20 - 1 - current)); + + case 0x38: // Negative integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x39: // Negative integer -1-n (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) + - static_cast(number)); + } + + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: // Binary data (one-byte uint8_t for n follows) + case 0x59: // Binary data (two-byte uint16_t for n follow) + case 0x5A: // Binary data (four-byte uint32_t for n follow) + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + case 0x5F: // Binary data (indefinite length) + { + binary_t b; + return get_cbor_binary(b) && sax->binary(b); + } + + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + case 0x7F: // UTF-8 string (indefinite length) + { + string_t s; + return get_cbor_string(s) && sax->string(s); + } + + // array (0x00..0x17 data items follow) + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + return get_cbor_array(static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0x98: // array (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x99: // array (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9A: // array (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9B: // array (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9F: // array (indefinite length) + return get_cbor_array(std::size_t(-1), tag_handler); + + // map (0x00..0x17 pairs of data items follow) + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + return get_cbor_object(static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0xB8: // map (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xB9: // map (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBA: // map (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBB: // map (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBF: // map (indefinite length) + return get_cbor_object(std::size_t(-1), tag_handler); + + case 0xC6: // tagged item + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD8: // tagged item (1 bytes follow) + case 0xD9: // tagged item (2 bytes follow) + case 0xDA: // tagged item (4 bytes follow) + case 0xDB: // tagged item (8 bytes follow) + { + switch (tag_handler) + { + case cbor_tag_handler_t::error: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"))); + } + + case cbor_tag_handler_t::ignore: + { + switch (current) + { + case 0xD8: + { + std::uint8_t len{}; + get_number(input_format_t::cbor, len); + break; + } + case 0xD9: + { + std::uint16_t len{}; + get_number(input_format_t::cbor, len); + break; + } + case 0xDA: + { + std::uint32_t len{}; + get_number(input_format_t::cbor, len); + break; + } + case 0xDB: + { + std::uint64_t len{}; + get_number(input_format_t::cbor, len); + break; + } + default: + break; + } + return parse_cbor_internal(true, tag_handler); + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + } + + case 0xF4: // false + return sax->boolean(false); + + case 0xF5: // true + return sax->boolean(true); + + case 0xF6: // null + return sax->null(); + + case 0xF9: // Half-Precision Float (two-byte IEEE 754) + { + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + + const auto byte1 = static_cast(byte1_raw); + const auto byte2 = static_cast(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast((byte1 << 8u) + byte2); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits::infinity() + : std::numeric_limits::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast(-val) + : static_cast(val), ""); + } + + case 0xFA: // Single-Precision Float (four-byte IEEE 754) + { + float number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + case 0xFB: // Double-Precision Float (eight-byte IEEE 754) + { + double number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + default: // anything else (0xFF is handled inside the other types) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"))); + } + } + } + + /*! + @brief reads a CBOR string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + Additionally, CBOR's strings with indefinite lengths are supported. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_cbor_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) + { + return false; + } + + switch (current) + { + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + { + return get_string(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7F: // UTF-8 string (indefinite length) + { + while (get() != 0xFF) + { + string_t chunk; + if (!get_cbor_string(chunk)) + { + return false; + } + result.append(chunk); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x" + last_token, "string"))); + } + } + } + + /*! + @brief reads a CBOR byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into the byte array. + Additionally, CBOR's byte arrays with indefinite lengths are supported. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_cbor_binary(binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) + { + return false; + } + + switch (current) + { + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + { + return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x58: // Binary data (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x59: // Binary data (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5A: // Binary data (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5F: // Binary data (indefinite length) + { + while (get() != 0xFF) + { + binary_t chunk; + if (!get_cbor_binary(chunk)) + { + return false; + } + result.insert(result.end(), chunk.begin(), chunk.end()); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x" + last_token, "binary"))); + } + } + } + + /*! + @param[in] len the length of the array or std::size_t(-1) for an + array of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether array creation completed + */ + bool get_cbor_array(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + if (len != std::size_t(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) + { + return false; + } + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object or std::size_t(-1) for an + object of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether object creation completed + */ + bool get_cbor_object(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + string_t key; + if (len != std::size_t(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + + return sax->end_object(); + } + + ///////////// + // MsgPack // + ///////////// + + /*! + @return whether a valid MessagePack value was passed to the SAX parser + */ + bool parse_msgpack_internal() + { + switch (get()) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::msgpack, "value"); + + // positive fixint + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + return sax->number_unsigned(static_cast(current)); + + // fixmap + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + return get_msgpack_object(static_cast(static_cast(current) & 0x0Fu)); + + // fixarray + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + return get_msgpack_array(static_cast(static_cast(current) & 0x0Fu)); + + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + case 0xD9: // str 8 + case 0xDA: // str 16 + case 0xDB: // str 32 + { + string_t s; + return get_msgpack_string(s) && sax->string(s); + } + + case 0xC0: // nil + return sax->null(); + + case 0xC2: // false + return sax->boolean(false); + + case 0xC3: // true + return sax->boolean(true); + + case 0xC4: // bin 8 + case 0xC5: // bin 16 + case 0xC6: // bin 32 + case 0xC7: // ext 8 + case 0xC8: // ext 16 + case 0xC9: // ext 32 + case 0xD4: // fixext 1 + case 0xD5: // fixext 2 + case 0xD6: // fixext 4 + case 0xD7: // fixext 8 + case 0xD8: // fixext 16 + { + binary_t b; + return get_msgpack_binary(b) && sax->binary(b); + } + + case 0xCA: // float 32 + { + float number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCB: // float 64 + { + double number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCC: // uint 8 + { + std::uint8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCD: // uint 16 + { + std::uint16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCE: // uint 32 + { + std::uint32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCF: // uint 64 + { + std::uint64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xD0: // int 8 + { + std::int8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD1: // int 16 + { + std::int16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD2: // int 32 + { + std::int32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD3: // int 64 + { + std::int64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xDC: // array 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); + } + + case 0xDD: // array 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); + } + + case 0xDE: // map 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); + } + + case 0xDF: // map 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); + } + + // negative fixint + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: + case 0xF0: + case 0xF1: + case 0xF2: + case 0xF3: + case 0xF4: + case 0xF5: + case 0xF6: + case 0xF7: + case 0xF8: + case 0xF9: + case 0xFA: + case 0xFB: + case 0xFC: + case 0xFD: + case 0xFE: + case 0xFF: + return sax->number_integer(static_cast(current)); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, "invalid byte: 0x" + last_token, "value"))); + } + } + } + + /*! + @brief reads a MessagePack string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_msgpack_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) + { + return false; + } + + switch (current) + { + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + { + return get_string(input_format_t::msgpack, static_cast(current) & 0x1Fu, result); + } + + case 0xD9: // str 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDA: // str 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDB: // str 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::msgpack, "expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x" + last_token, "string"))); + } + } + } + + /*! + @brief reads a MessagePack byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into a byte array. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_msgpack_binary(binary_t& result) + { + // helper function to set the subtype + auto assign_and_return_true = [&result](std::int8_t subtype) + { + result.set_subtype(static_cast(subtype)); + return true; + }; + + switch (current) + { + case 0xC4: // bin 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC5: // bin 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC6: // bin 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC7: // ext 8 + { + std::uint8_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC8: // ext 16 + { + std::uint16_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC9: // ext 32 + { + std::uint32_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xD4: // fixext 1 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 1, result) && + assign_and_return_true(subtype); + } + + case 0xD5: // fixext 2 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 2, result) && + assign_and_return_true(subtype); + } + + case 0xD6: // fixext 4 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 4, result) && + assign_and_return_true(subtype); + } + + case 0xD7: // fixext 8 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 8, result) && + assign_and_return_true(subtype); + } + + case 0xD8: // fixext 16 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 16, result) && + assign_and_return_true(subtype); + } + + default: // LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + /*! + @param[in] len the length of the array + @return whether array creation completed + */ + bool get_msgpack_array(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object + @return whether object creation completed + */ + bool get_msgpack_object(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + string_t key; + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + key.clear(); + } + + return sax->end_object(); + } + + //////////// + // UBJSON // + //////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether a valid UBJSON value was passed to the SAX parser + */ + bool parse_ubjson_internal(const bool get_char = true) + { + return get_ubjson_value(get_char ? get_ignore_noop() : current); + } + + /*! + @brief reads a UBJSON string + + This function is either called after reading the 'S' byte explicitly + indicating a string, or in case of an object key where the 'S' byte can be + left out. + + @param[out] result created string + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether string creation completed + */ + bool get_ubjson_string(string_t& result, const bool get_char = true) + { + if (get_char) + { + get(); // TODO(niels): may we ignore N here? + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) + { + return false; + } + + switch (current) + { + case 'U': + { + std::uint8_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'i': + { + std::int8_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'I': + { + std::int16_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'l': + { + std::int32_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'L': + { + std::int64_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + default: + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token, "string"))); + } + } + + /*! + @param[out] result determined size + @return whether size determination completed + */ + bool get_ubjson_size_value(std::size_t& result) + { + switch (get_ignore_noop()) + { + case 'U': + { + std::uint8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'i': + { + std::int8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'I': + { + std::int16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'l': + { + std::int32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'L': + { + std::int64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token, "size"))); + } + } + } + + /*! + @brief determine the type and size for a container + + In the optimized UBJSON format, a type and a size can be provided to allow + for a more compact representation. + + @param[out] result pair of the size and the type + + @return whether pair creation completed + */ + bool get_ubjson_size_type(std::pair& result) + { + result.first = string_t::npos; // size + result.second = 0; // type + + get_ignore_noop(); + + if (current == '$') + { + result.second = get(); // must not ignore 'N', because 'N' maybe the type + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "type"))) + { + return false; + } + + get_ignore_noop(); + if (JSON_HEDLEY_UNLIKELY(current != '#')) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) + { + return false; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "expected '#' after type information; last byte: 0x" + last_token, "size"))); + } + + return get_ubjson_size_value(result.first); + } + + if (current == '#') + { + return get_ubjson_size_value(result.first); + } + + return true; + } + + /*! + @param prefix the previously read or set type prefix + @return whether value creation completed + */ + bool get_ubjson_value(const char_int_type prefix) + { + switch (prefix) + { + case std::char_traits::eof(): // EOF + return unexpect_eof(input_format_t::ubjson, "value"); + + case 'T': // true + return sax->boolean(true); + case 'F': // false + return sax->boolean(false); + + case 'Z': // null + return sax->null(); + + case 'U': + { + std::uint8_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_unsigned(number); + } + + case 'i': + { + std::int8_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'I': + { + std::int16_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'l': + { + std::int32_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'L': + { + std::int64_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'd': + { + float number{}; + return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); + } + + case 'D': + { + double number{}; + return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); + } + + case 'H': + { + return get_ubjson_high_precision_number(); + } + + case 'C': // char + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "char"))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(current > 127)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "byte after 'C' must be in range 0x00..0x7F; last byte: 0x" + last_token, "char"))); + } + string_t s(1, static_cast(current)); + return sax->string(s); + } + + case 'S': // string + { + string_t s; + return get_ubjson_string(s) && sax->string(s); + } + + case '[': // array + return get_ubjson_array(); + + case '{': // object + return get_ubjson_object(); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "invalid byte: 0x" + last_token, "value"))); + } + } + } + + /*! + @return whether array creation completed + */ + bool get_ubjson_array() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + if (size_and_type.first != string_t::npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) + { + return false; + } + + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) + { + return false; + } + get_ignore_noop(); + } + } + + return sax->end_array(); + } + + /*! + @return whether object creation completed + */ + bool get_ubjson_object() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + string_t key; + if (size_and_type.first != string_t::npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + key.clear(); + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + key.clear(); + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) + { + return false; + } + + while (current != '}') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + get_ignore_noop(); + key.clear(); + } + } + + return sax->end_object(); + } + + // Note, no reader for UBJSON binary types is implemented because they do + // not exist + + bool get_ubjson_high_precision_number() + { + // get size of following number string + std::size_t size{}; + auto res = get_ubjson_size_value(size); + if (JSON_HEDLEY_UNLIKELY(!res)) + { + return res; + } + + // get number string + std::vector number_vector; + for (std::size_t i = 0; i < size; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "number"))) + { + return false; + } + number_vector.push_back(static_cast(current)); + } + + // parse number string + auto number_ia = detail::input_adapter(std::forward(number_vector)); + auto number_lexer = detail::lexer(std::move(number_ia), false); + const auto result_number = number_lexer.scan(); + const auto number_string = number_lexer.get_token_string(); + const auto result_remainder = number_lexer.scan(); + + using token_type = typename detail::lexer_base::token_type; + + if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) + { + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"))); + } + + switch (result_number) + { + case token_type::value_integer: + return sax->number_integer(number_lexer.get_number_integer()); + case token_type::value_unsigned: + return sax->number_unsigned(number_lexer.get_number_unsigned()); + case token_type::value_float: + return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); + default: + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"))); + } + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /*! + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a -'ve valued + `std::char_traits::eof()` in that case. + + @return character read from the input + */ + char_int_type get() + { + ++chars_read; + return current = ia.get_character(); + } + + /*! + @return character read from the input after ignoring all 'N' entries + */ + char_int_type get_ignore_noop() + { + do + { + get(); + } + while (current == 'N'); + + return current; + } + + /* + @brief read a number from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[out] result number of type @a NumberType + + @return whether conversion completed + + @note This function needs to respect the system's endianess, because + bytes in CBOR, MessagePack, and UBJSON are stored in network order + (big endian) and therefore need reordering on little endian systems. + */ + template + bool get_number(const input_format_t format, NumberType& result) + { + // step 1: read input into array with system's byte order + std::array vec; + for (std::size_t i = 0; i < sizeof(NumberType); ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "number"))) + { + return false; + } + + // reverse byte order prior to conversion if necessary + if (is_little_endian != InputIsLittleEndian) + { + vec[sizeof(NumberType) - i - 1] = static_cast(current); + } + else + { + vec[i] = static_cast(current); // LCOV_EXCL_LINE + } + } + + // step 2: convert array into number of type T and return + std::memcpy(&result, vec.data(), sizeof(NumberType)); + return true; + } + + /*! + @brief create a string by reading characters from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of characters to read + @param[out] result string created by reading @a len bytes + + @return whether string creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of string memory. + */ + template + bool get_string(const input_format_t format, + const NumberType len, + string_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + }; + return success; + } + + /*! + @brief create a byte array by reading bytes from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of bytes to read + @param[out] result byte array created by reading @a len bytes + + @return whether byte array creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of memory. + */ + template + bool get_binary(const input_format_t format, + const NumberType len, + binary_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @param[in] format the current format (for diagnostics) + @param[in] context further context information (for diagnostics) + @return whether the last read character is not EOF + */ + JSON_HEDLEY_NON_NULL(3) + bool unexpect_eof(const input_format_t format, const char* context) const + { + if (JSON_HEDLEY_UNLIKELY(current == std::char_traits::eof())) + { + return sax->parse_error(chars_read, "", + parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context))); + } + return true; + } + + /*! + @return a string representation of the last read byte + */ + std::string get_token_string() const + { + std::array cr{{}}; + (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(current)); + return std::string{cr.data()}; + } + + /*! + @param[in] format the current format + @param[in] detail a detailed error message + @param[in] context further context information + @return a message string to use in the parse_error exceptions + */ + std::string exception_message(const input_format_t format, + const std::string& detail, + const std::string& context) const + { + std::string error_msg = "syntax error while parsing "; + + switch (format) + { + case input_format_t::cbor: + error_msg += "CBOR"; + break; + + case input_format_t::msgpack: + error_msg += "MessagePack"; + break; + + case input_format_t::ubjson: + error_msg += "UBJSON"; + break; + + case input_format_t::bson: + error_msg += "BSON"; + break; + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + + return error_msg + " " + context + ": " + detail; + } + + private: + /// input adapter + InputAdapterType ia; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// the number of characters read + std::size_t chars_read = 0; + + /// whether we can assume little endianess + const bool is_little_endian = little_endianess(); + + /// the SAX parser + json_sax_t* sax = nullptr; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + + +#include // isfinite +#include // uint8_t +#include // function +#include // string +#include // move +#include // vector + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +//////////// +// parser // +//////////// + +enum class parse_event_t : uint8_t +{ + /// the parser read `{` and started to process a JSON object + object_start, + /// the parser read `}` and finished processing a JSON object + object_end, + /// the parser read `[` and started to process a JSON array + array_start, + /// the parser read `]` and finished processing a JSON array + array_end, + /// the parser read a key of a value in an object + key, + /// the parser finished reading a JSON value + value +}; + +template +using parser_callback_t = + std::function; + +/*! +@brief syntax analysis + +This class implements a recursive descent parser. +*/ +template +class parser +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using lexer_t = lexer; + using token_type = typename lexer_t::token_type; + + public: + /// a parser reading from an input adapter + explicit parser(InputAdapterType&& adapter, + const parser_callback_t cb = nullptr, + const bool allow_exceptions_ = true, + const bool skip_comments = false) + : callback(cb) + , m_lexer(std::move(adapter), skip_comments) + , allow_exceptions(allow_exceptions_) + { + // read first token + get_token(); + } + + /*! + @brief public parser interface + + @param[in] strict whether to expect the last token to be EOF + @param[in,out] result parsed JSON value + + @throw parse_error.101 in case of an unexpected token + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + void parse(const bool strict, BasicJsonType& result) + { + if (callback) + { + json_sax_dom_callback_parser sdp(result, callback, allow_exceptions); + sax_parse_internal(&sdp); + result.assert_invariant(); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_of_input, "value"))); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + + // set top-level value to null if it was discarded by the callback + // function + if (result.is_discarded()) + { + result = nullptr; + } + } + else + { + json_sax_dom_parser sdp(result, allow_exceptions); + sax_parse_internal(&sdp); + result.assert_invariant(); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_of_input, "value"))); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + } + } + + /*! + @brief public accept interface + + @param[in] strict whether to expect the last token to be EOF + @return whether the input is a proper JSON text + */ + bool accept(const bool strict = true) + { + json_sax_acceptor sax_acceptor; + return sax_parse(&sax_acceptor, strict); + } + + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse(SAX* sax, const bool strict = true) + { + (void)detail::is_sax_static_asserts {}; + const bool result = sax_parse_internal(sax); + + // strict mode: next byte must be EOF + if (result && strict && (get_token() != token_type::end_of_input)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_of_input, "value"))); + } + + return result; + } + + private: + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse_internal(SAX* sax) + { + // stack to remember the hierarchy of structured values we are parsing + // true = array; false = object + std::vector states; + // value to avoid a goto (see comment where set to true) + bool skip_to_state_evaluation = false; + + while (true) + { + if (!skip_to_state_evaluation) + { + // invariant: get_token() was called before each iteration + switch (last_token) + { + case token_type::begin_object: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) + { + return false; + } + + // closing } -> we are done + if (get_token() == token_type::end_object) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + break; + } + + // parse key + if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::value_string, "object key"))); + } + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::name_separator, "object separator"))); + } + + // remember we are now inside an object + states.push_back(false); + + // parse values + get_token(); + continue; + } + + case token_type::begin_array: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) + { + return false; + } + + // closing ] -> we are done + if (get_token() == token_type::end_array) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + break; + } + + // remember we are now inside an array + states.push_back(true); + + // parse values (no need to call get_token) + continue; + } + + case token_type::value_float: + { + const auto res = m_lexer.get_number_float(); + + if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + out_of_range::create(406, "number overflow parsing '" + m_lexer.get_token_string() + "'")); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) + { + return false; + } + + break; + } + + case token_type::literal_false: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) + { + return false; + } + break; + } + + case token_type::literal_null: + { + if (JSON_HEDLEY_UNLIKELY(!sax->null())) + { + return false; + } + break; + } + + case token_type::literal_true: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) + { + return false; + } + break; + } + + case token_type::value_integer: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) + { + return false; + } + break; + } + + case token_type::value_string: + { + if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) + { + return false; + } + break; + } + + case token_type::value_unsigned: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) + { + return false; + } + break; + } + + case token_type::parse_error: + { + // using "uninitialized" to avoid "expected" message + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::uninitialized, "value"))); + } + + default: // the last token was unexpected + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::literal_or_value, "value"))); + } + } + } + else + { + skip_to_state_evaluation = false; + } + + // we reached this line after we successfully parsed a value + if (states.empty()) + { + // empty stack: we reached the end of the hierarchy: done + return true; + } + + if (states.back()) // array + { + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse a new value + get_token(); + continue; + } + + // closing ] + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + + // We are done with this array. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_array, "array"))); + } + else // object + { + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse key + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::value_string, "object key"))); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::name_separator, "object separator"))); + } + + // parse values + get_token(); + continue; + } + + // closing } + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + + // We are done with this object. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_object, "object"))); + } + } + } + + /// get next token from lexer + token_type get_token() + { + return last_token = m_lexer.scan(); + } + + std::string exception_message(const token_type expected, const std::string& context) + { + std::string error_msg = "syntax error "; + + if (!context.empty()) + { + error_msg += "while parsing " + context + " "; + } + + error_msg += "- "; + + if (last_token == token_type::parse_error) + { + error_msg += std::string(m_lexer.get_error_message()) + "; last read: '" + + m_lexer.get_token_string() + "'"; + } + else + { + error_msg += "unexpected " + std::string(lexer_t::token_type_name(last_token)); + } + + if (expected != token_type::uninitialized) + { + error_msg += "; expected " + std::string(lexer_t::token_type_name(expected)); + } + + return error_msg; + } + + private: + /// callback function + const parser_callback_t callback = nullptr; + /// the type of the last read token + token_type last_token = token_type::uninitialized; + /// the lexer + lexer_t m_lexer; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +// #include + + +#include // ptrdiff_t +#include // numeric_limits + +namespace nlohmann +{ +namespace detail +{ +/* +@brief an iterator for primitive JSON types + +This class models an iterator for primitive JSON types (boolean, number, +string). It's only purpose is to allow the iterator/const_iterator classes +to "iterate" over primitive values. Internally, the iterator is modeled by +a `difference_type` variable. Value begin_value (`0`) models the begin, +end_value (`1`) models past the end. +*/ +class primitive_iterator_t +{ + private: + using difference_type = std::ptrdiff_t; + static constexpr difference_type begin_value = 0; + static constexpr difference_type end_value = begin_value + 1; + + /// iterator as signed integer type + difference_type m_it = (std::numeric_limits::min)(); + + public: + constexpr difference_type get_value() const noexcept + { + return m_it; + } + + /// set iterator to a defined beginning + void set_begin() noexcept + { + m_it = begin_value; + } + + /// set iterator to a defined past the end + void set_end() noexcept + { + m_it = end_value; + } + + /// return whether the iterator can be dereferenced + constexpr bool is_begin() const noexcept + { + return m_it == begin_value; + } + + /// return whether the iterator is at end + constexpr bool is_end() const noexcept + { + return m_it == end_value; + } + + friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it == rhs.m_it; + } + + friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it < rhs.m_it; + } + + primitive_iterator_t operator+(difference_type n) noexcept + { + auto result = *this; + result += n; + return result; + } + + friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it - rhs.m_it; + } + + primitive_iterator_t& operator++() noexcept + { + ++m_it; + return *this; + } + + primitive_iterator_t const operator++(int) noexcept + { + auto result = *this; + ++m_it; + return result; + } + + primitive_iterator_t& operator--() noexcept + { + --m_it; + return *this; + } + + primitive_iterator_t const operator--(int) noexcept + { + auto result = *this; + --m_it; + return result; + } + + primitive_iterator_t& operator+=(difference_type n) noexcept + { + m_it += n; + return *this; + } + + primitive_iterator_t& operator-=(difference_type n) noexcept + { + m_it -= n; + return *this; + } +}; +} // namespace detail +} // namespace nlohmann + + +namespace nlohmann +{ +namespace detail +{ +/*! +@brief an iterator value + +@note This structure could easily be a union, but MSVC currently does not allow +unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. +*/ +template struct internal_iterator +{ + /// iterator for JSON objects + typename BasicJsonType::object_t::iterator object_iterator {}; + /// iterator for JSON arrays + typename BasicJsonType::array_t::iterator array_iterator {}; + /// generic iterator for all other types + primitive_iterator_t primitive_iterator {}; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next +#include // conditional, is_const, remove_const + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +// forward declare, to be able to friend it later on +template class iteration_proxy; +template class iteration_proxy_value; + +/*! +@brief a template for a bidirectional iterator for the @ref basic_json class +This class implements a both iterators (iterator and const_iterator) for the +@ref basic_json class. +@note An iterator is called *initialized* when a pointer to a JSON value has + been set (e.g., by a constructor or a copy assignment). If the iterator is + default-constructed, it is *uninitialized* and most methods are undefined. + **The library uses assertions to detect calls on uninitialized iterators.** +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +@since version 1.0.0, simplified in version 2.0.9, change to bidirectional + iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) +*/ +template +class iter_impl +{ + /// allow basic_json to access private members + friend iter_impl::value, typename std::remove_const::type, const BasicJsonType>::type>; + friend BasicJsonType; + friend iteration_proxy; + friend iteration_proxy_value; + + using object_t = typename BasicJsonType::object_t; + using array_t = typename BasicJsonType::array_t; + // make sure BasicJsonType is basic_json or const basic_json + static_assert(is_basic_json::type>::value, + "iter_impl only accepts (const) basic_json"); + + public: + + /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. + /// The C++ Standard has never required user-defined iterators to derive from std::iterator. + /// A user-defined iterator should provide publicly accessible typedefs named + /// iterator_category, value_type, difference_type, pointer, and reference. + /// Note that value_type is required to be non-const, even for constant iterators. + using iterator_category = std::bidirectional_iterator_tag; + + /// the type of the values when the iterator is dereferenced + using value_type = typename BasicJsonType::value_type; + /// a type to represent differences between iterators + using difference_type = typename BasicJsonType::difference_type; + /// defines a pointer to the type iterated over (value_type) + using pointer = typename std::conditional::value, + typename BasicJsonType::const_pointer, + typename BasicJsonType::pointer>::type; + /// defines a reference to the type iterated over (value_type) + using reference = + typename std::conditional::value, + typename BasicJsonType::const_reference, + typename BasicJsonType::reference>::type; + + /// default constructor + iter_impl() = default; + + /*! + @brief constructor for a given JSON instance + @param[in] object pointer to a JSON object for this iterator + @pre object != nullptr + @post The iterator is initialized; i.e. `m_object != nullptr`. + */ + explicit iter_impl(pointer object) noexcept : m_object(object) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = typename object_t::iterator(); + break; + } + + case value_t::array: + { + m_it.array_iterator = typename array_t::iterator(); + break; + } + + default: + { + m_it.primitive_iterator = primitive_iterator_t(); + break; + } + } + } + + /*! + @note The conventional copy constructor and copy assignment are implicitly + defined. Combined with the following converting constructor and + assignment, they support: (1) copy from iterator to iterator, (2) + copy from const iterator to const iterator, and (3) conversion from + iterator to const iterator. However conversion from const iterator + to iterator is not defined. + */ + + /*! + @brief const copy constructor + @param[in] other const iterator to copy from + @note This copy constructor had to be defined explicitly to circumvent a bug + occurring on msvc v19.0 compiler (VS 2015) debug build. For more + information refer to: https://github.com/nlohmann/json/issues/1608 + */ + iter_impl(const iter_impl& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl& other) noexcept + { + m_object = other.m_object; + m_it = other.m_it; + return *this; + } + + /*! + @brief converting constructor + @param[in] other non-const iterator to copy from + @note It is not checked whether @a other is initialized. + */ + iter_impl(const iter_impl::type>& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other non-const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl::type>& other) noexcept + { + m_object = other.m_object; + m_it = other.m_it; + return *this; + } + + private: + /*! + @brief set the iterator to the first value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_begin() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_value.object->begin(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_value.array->begin(); + break; + } + + case value_t::null: + { + // set to end so begin()==end() is true: null is empty + m_it.primitive_iterator.set_end(); + break; + } + + default: + { + m_it.primitive_iterator.set_begin(); + break; + } + } + } + + /*! + @brief set the iterator past the last value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_end() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_value.object->end(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_value.array->end(); + break; + } + + default: + { + m_it.primitive_iterator.set_end(); + break; + } + } + } + + public: + /*! + @brief return a reference to the value pointed to by the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator*() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); + return m_it.object_iterator->second; + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); + return *m_it.array_iterator; + } + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value")); + + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value")); + } + } + } + + /*! + @brief dereference the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + pointer operator->() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); + return &(m_it.object_iterator->second); + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); + return &*m_it.array_iterator; + } + + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value")); + } + } + } + + /*! + @brief post-increment (it++) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl const operator++(int) + { + auto result = *this; + ++(*this); + return result; + } + + /*! + @brief pre-increment (++it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator++() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, 1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, 1); + break; + } + + default: + { + ++m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief post-decrement (it--) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl const operator--(int) + { + auto result = *this; + --(*this); + return result; + } + + /*! + @brief pre-decrement (--it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator--() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, -1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, -1); + break; + } + + default: + { + --m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief comparison: equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator==(const iter_impl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers")); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + return (m_it.object_iterator == other.m_it.object_iterator); + + case value_t::array: + return (m_it.array_iterator == other.m_it.array_iterator); + + default: + return (m_it.primitive_iterator == other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: not equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator!=(const iter_impl& other) const + { + return !operator==(other); + } + + /*! + @brief comparison: smaller + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<(const iter_impl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers")); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators")); + + case value_t::array: + return (m_it.array_iterator < other.m_it.array_iterator); + + default: + return (m_it.primitive_iterator < other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: less than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<=(const iter_impl& other) const + { + return !other.operator < (*this); + } + + /*! + @brief comparison: greater than + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>(const iter_impl& other) const + { + return !operator<=(other); + } + + /*! + @brief comparison: greater than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>=(const iter_impl& other) const + { + return !operator<(other); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator+=(difference_type i) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators")); + + case value_t::array: + { + std::advance(m_it.array_iterator, i); + break; + } + + default: + { + m_it.primitive_iterator += i; + break; + } + } + + return *this; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator-=(difference_type i) + { + return operator+=(-i); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator+(difference_type i) const + { + auto result = *this; + result += i; + return result; + } + + /*! + @brief addition of distance and iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + friend iter_impl operator+(difference_type i, const iter_impl& it) + { + auto result = it; + result += i; + return result; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator-(difference_type i) const + { + auto result = *this; + result -= i; + return result; + } + + /*! + @brief return difference + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + difference_type operator-(const iter_impl& other) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators")); + + case value_t::array: + return m_it.array_iterator - other.m_it.array_iterator; + + default: + return m_it.primitive_iterator - other.m_it.primitive_iterator; + } + } + + /*! + @brief access to successor + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator[](difference_type n) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators")); + + case value_t::array: + return *std::next(m_it.array_iterator, n); + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value")); + + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value")); + } + } + } + + /*! + @brief return the key of an object iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + const typename object_t::key_type& key() const + { + JSON_ASSERT(m_object != nullptr); + + if (JSON_HEDLEY_LIKELY(m_object->is_object())) + { + return m_it.object_iterator->first; + } + + JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators")); + } + + /*! + @brief return the value of an iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference value() const + { + return operator*(); + } + + private: + /// associated JSON instance + pointer m_object = nullptr; + /// the actual iterator of the associated instance + internal_iterator::type> m_it {}; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // ptrdiff_t +#include // reverse_iterator +#include // declval + +namespace nlohmann +{ +namespace detail +{ +////////////////////// +// reverse_iterator // +////////////////////// + +/*! +@brief a template for a reverse iterator class + +@tparam Base the base iterator type to reverse. Valid types are @ref +iterator (to create @ref reverse_iterator) and @ref const_iterator (to +create @ref const_reverse_iterator). + +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +- [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): + It is possible to write to the pointed-to element (only if @a Base is + @ref iterator). + +@since version 1.0.0 +*/ +template +class json_reverse_iterator : public std::reverse_iterator +{ + public: + using difference_type = std::ptrdiff_t; + /// shortcut to the reverse iterator adapter + using base_iterator = std::reverse_iterator; + /// the reference type for the pointed-to element + using reference = typename Base::reference; + + /// create reverse iterator from iterator + explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept + : base_iterator(it) {} + + /// create reverse iterator from base class + explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} + + /// post-increment (it++) + json_reverse_iterator const operator++(int) + { + return static_cast(base_iterator::operator++(1)); + } + + /// pre-increment (++it) + json_reverse_iterator& operator++() + { + return static_cast(base_iterator::operator++()); + } + + /// post-decrement (it--) + json_reverse_iterator const operator--(int) + { + return static_cast(base_iterator::operator--(1)); + } + + /// pre-decrement (--it) + json_reverse_iterator& operator--() + { + return static_cast(base_iterator::operator--()); + } + + /// add to iterator + json_reverse_iterator& operator+=(difference_type i) + { + return static_cast(base_iterator::operator+=(i)); + } + + /// add to iterator + json_reverse_iterator operator+(difference_type i) const + { + return static_cast(base_iterator::operator+(i)); + } + + /// subtract from iterator + json_reverse_iterator operator-(difference_type i) const + { + return static_cast(base_iterator::operator-(i)); + } + + /// return difference + difference_type operator-(const json_reverse_iterator& other) const + { + return base_iterator(*this) - base_iterator(other); + } + + /// access to successor + reference operator[](difference_type n) const + { + return *(this->operator+(n)); + } + + /// return the key of an object iterator + auto key() const -> decltype(std::declval().key()) + { + auto it = --this->base(); + return it.key(); + } + + /// return the value of an iterator + reference value() const + { + auto it = --this->base(); + return it.operator * (); + } +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // all_of +#include // isdigit +#include // max +#include // accumulate +#include // string +#include // move +#include // vector + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +template +class json_pointer +{ + // allow basic_json to access private members + NLOHMANN_BASIC_JSON_TPL_DECLARATION + friend class basic_json; + + public: + /*! + @brief create JSON pointer + + Create a JSON pointer according to the syntax described in + [Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3). + + @param[in] s string representing the JSON pointer; if omitted, the empty + string is assumed which references the whole JSON value + + @throw parse_error.107 if the given JSON pointer @a s is nonempty and does + not begin with a slash (`/`); see example below + + @throw parse_error.108 if a tilde (`~`) in the given JSON pointer @a s is + not followed by `0` (representing `~`) or `1` (representing `/`); see + example below + + @liveexample{The example shows the construction several valid JSON pointers + as well as the exceptional behavior.,json_pointer} + + @since version 2.0.0 + */ + explicit json_pointer(const std::string& s = "") + : reference_tokens(split(s)) + {} + + /*! + @brief return a string representation of the JSON pointer + + @invariant For each JSON pointer `ptr`, it holds: + @code {.cpp} + ptr == json_pointer(ptr.to_string()); + @endcode + + @return a string representation of the JSON pointer + + @liveexample{The example shows the result of `to_string`.,json_pointer__to_string} + + @since version 2.0.0 + */ + std::string to_string() const + { + return std::accumulate(reference_tokens.begin(), reference_tokens.end(), + std::string{}, + [](const std::string & a, const std::string & b) + { + return a + "/" + escape(b); + }); + } + + /// @copydoc to_string() + operator std::string() const + { + return to_string(); + } + + /*! + @brief append another JSON pointer at the end of this JSON pointer + + @param[in] ptr JSON pointer to append + @return JSON pointer with @a ptr appended + + @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} + + @complexity Linear in the length of @a ptr. + + @sa @ref operator/=(std::string) to append a reference token + @sa @ref operator/=(std::size_t) to append an array index + @sa @ref operator/(const json_pointer&, const json_pointer&) for a binary operator + + @since version 3.6.0 + */ + json_pointer& operator/=(const json_pointer& ptr) + { + reference_tokens.insert(reference_tokens.end(), + ptr.reference_tokens.begin(), + ptr.reference_tokens.end()); + return *this; + } + + /*! + @brief append an unescaped reference token at the end of this JSON pointer + + @param[in] token reference token to append + @return JSON pointer with @a token appended without escaping @a token + + @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} + + @complexity Amortized constant. + + @sa @ref operator/=(const json_pointer&) to append a JSON pointer + @sa @ref operator/=(std::size_t) to append an array index + @sa @ref operator/(const json_pointer&, std::size_t) for a binary operator + + @since version 3.6.0 + */ + json_pointer& operator/=(std::string token) + { + push_back(std::move(token)); + return *this; + } + + /*! + @brief append an array index at the end of this JSON pointer + + @param[in] array_idx array index to append + @return JSON pointer with @a array_idx appended + + @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} + + @complexity Amortized constant. + + @sa @ref operator/=(const json_pointer&) to append a JSON pointer + @sa @ref operator/=(std::string) to append a reference token + @sa @ref operator/(const json_pointer&, std::string) for a binary operator + + @since version 3.6.0 + */ + json_pointer& operator/=(std::size_t array_idx) + { + return *this /= std::to_string(array_idx); + } + + /*! + @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer + + @param[in] lhs JSON pointer + @param[in] rhs JSON pointer + @return a new JSON pointer with @a rhs appended to @a lhs + + @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} + + @complexity Linear in the length of @a lhs and @a rhs. + + @sa @ref operator/=(const json_pointer&) to append a JSON pointer + + @since version 3.6.0 + */ + friend json_pointer operator/(const json_pointer& lhs, + const json_pointer& rhs) + { + return json_pointer(lhs) /= rhs; + } + + /*! + @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer + + @param[in] ptr JSON pointer + @param[in] token reference token + @return a new JSON pointer with unescaped @a token appended to @a ptr + + @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} + + @complexity Linear in the length of @a ptr. + + @sa @ref operator/=(std::string) to append a reference token + + @since version 3.6.0 + */ + friend json_pointer operator/(const json_pointer& ptr, std::string token) + { + return json_pointer(ptr) /= std::move(token); + } + + /*! + @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer + + @param[in] ptr JSON pointer + @param[in] array_idx array index + @return a new JSON pointer with @a array_idx appended to @a ptr + + @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} + + @complexity Linear in the length of @a ptr. + + @sa @ref operator/=(std::size_t) to append an array index + + @since version 3.6.0 + */ + friend json_pointer operator/(const json_pointer& ptr, std::size_t array_idx) + { + return json_pointer(ptr) /= array_idx; + } + + /*! + @brief returns the parent of this JSON pointer + + @return parent of this JSON pointer; in case this JSON pointer is the root, + the root itself is returned + + @complexity Linear in the length of the JSON pointer. + + @liveexample{The example shows the result of `parent_pointer` for different + JSON Pointers.,json_pointer__parent_pointer} + + @since version 3.6.0 + */ + json_pointer parent_pointer() const + { + if (empty()) + { + return *this; + } + + json_pointer res = *this; + res.pop_back(); + return res; + } + + /*! + @brief remove last reference token + + @pre not `empty()` + + @liveexample{The example shows the usage of `pop_back`.,json_pointer__pop_back} + + @complexity Constant. + + @throw out_of_range.405 if JSON pointer has no parent + + @since version 3.6.0 + */ + void pop_back() + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); + } + + reference_tokens.pop_back(); + } + + /*! + @brief return last reference token + + @pre not `empty()` + @return last reference token + + @liveexample{The example shows the usage of `back`.,json_pointer__back} + + @complexity Constant. + + @throw out_of_range.405 if JSON pointer has no parent + + @since version 3.6.0 + */ + const std::string& back() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); + } + + return reference_tokens.back(); + } + + /*! + @brief append an unescaped token at the end of the reference pointer + + @param[in] token token to add + + @complexity Amortized constant. + + @liveexample{The example shows the result of `push_back` for different + JSON Pointers.,json_pointer__push_back} + + @since version 3.6.0 + */ + void push_back(const std::string& token) + { + reference_tokens.push_back(token); + } + + /// @copydoc push_back(const std::string&) + void push_back(std::string&& token) + { + reference_tokens.push_back(std::move(token)); + } + + /*! + @brief return whether pointer points to the root document + + @return true iff the JSON pointer points to the root document + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example shows the result of `empty` for different JSON + Pointers.,json_pointer__empty} + + @since version 3.6.0 + */ + bool empty() const noexcept + { + return reference_tokens.empty(); + } + + private: + /*! + @param[in] s reference token to be converted into an array index + + @return integer representation of @a s + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index begins not with a digit + @throw out_of_range.404 if string @a s could not be converted to an integer + @throw out_of_range.410 if an array index exceeds size_type + */ + static typename BasicJsonType::size_type array_index(const std::string& s) + { + using size_type = typename BasicJsonType::size_type; + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) + { + JSON_THROW(detail::parse_error::create(106, 0, + "array index '" + s + + "' must not begin with '0'")); + } + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) + { + JSON_THROW(detail::parse_error::create(109, 0, "array index '" + s + "' is not a number")); + } + + std::size_t processed_chars = 0; + unsigned long long res = 0; + JSON_TRY + { + res = std::stoull(s, &processed_chars); + } + JSON_CATCH(std::out_of_range&) + { + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'")); + } + + // check if the string was completely read + if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size())) + { + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'")); + } + + // only triggered on special platforms (like 32bit), see also + // https://github.com/nlohmann/json/pull/2203 + if (res >= static_cast((std::numeric_limits::max)())) + { + JSON_THROW(detail::out_of_range::create(410, "array index " + s + " exceeds size_type")); // LCOV_EXCL_LINE + } + + return static_cast(res); + } + + json_pointer top() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); + } + + json_pointer result = *this; + result.reference_tokens = {reference_tokens[0]}; + return result; + } + + /*! + @brief create and return a reference to the pointed to value + + @complexity Linear in the number of reference tokens. + + @throw parse_error.109 if array index is not a number + @throw type_error.313 if value cannot be unflattened + */ + BasicJsonType& get_and_create(BasicJsonType& j) const + { + auto result = &j; + + // in case no reference tokens exist, return a reference to the JSON value + // j which will be overwritten by a primitive value + for (const auto& reference_token : reference_tokens) + { + switch (result->type()) + { + case detail::value_t::null: + { + if (reference_token == "0") + { + // start a new array if reference token is 0 + result = &result->operator[](0); + } + else + { + // start a new object otherwise + result = &result->operator[](reference_token); + } + break; + } + + case detail::value_t::object: + { + // create an entry in the object + result = &result->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + // create an entry in the array + result = &result->operator[](array_index(reference_token)); + break; + } + + /* + The following code is only reached if there exists a reference + token _and_ the current value is primitive. In this case, we have + an error situation, because primitive values may only occur as + single value; that is, with an empty list of reference tokens. + */ + default: + JSON_THROW(detail::type_error::create(313, "invalid value to unflatten")); + } + } + + return *result; + } + + /*! + @brief return a reference to the pointed to value + + @note This version does not throw if a value is not present, but tries to + create nested values instead. For instance, calling this function + with pointer `"/this/that"` on a null value is equivalent to calling + `operator[]("this").operator[]("that")` on that value, effectively + changing the null value to an object. + + @param[in] ptr a JSON value + + @return reference to the JSON value pointed to by the JSON pointer + + @complexity Linear in the length of the JSON pointer. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + BasicJsonType& get_unchecked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + // convert null values to arrays or objects before continuing + if (ptr->is_null()) + { + // check if reference token is a number + const bool nums = + std::all_of(reference_token.begin(), reference_token.end(), + [](const unsigned char x) + { + return std::isdigit(x); + }); + + // change value to array for numbers or "-" or to object otherwise + *ptr = (nums || reference_token == "-") + ? detail::value_t::array + : detail::value_t::object; + } + + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (reference_token == "-") + { + // explicitly treat "-" as index beyond the end + ptr = &ptr->operator[](ptr->m_value.array->size()); + } + else + { + // convert array index to number; unchecked access + ptr = &ptr->operator[](array_index(reference_token)); + } + break; + } + + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + BasicJsonType& get_checked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, + "array index '-' (" + std::to_string(ptr->m_value.array->size()) + + ") is out of range")); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); + } + } + + return *ptr; + } + + /*! + @brief return a const reference to the pointed to value + + @param[in] ptr a JSON value + + @return const reference to the JSON value pointed to by the JSON + pointer + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" cannot be used for const access + JSON_THROW(detail::out_of_range::create(402, + "array index '-' (" + std::to_string(ptr->m_value.array->size()) + + ") is out of range")); + } + + // use unchecked array access + ptr = &ptr->operator[](array_index(reference_token)); + break; + } + + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + const BasicJsonType& get_checked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, + "array index '-' (" + std::to_string(ptr->m_value.array->size()) + + ") is out of range")); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + */ + bool contains(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + if (!ptr->contains(reference_token)) + { + // we did not find the key in the object + return false; + } + + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) + { + // invalid char + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) + { + if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) + { + // first char should be between '1' and '9' + return false; + } + for (std::size_t i = 1; i < reference_token.size(); i++) + { + if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) + { + // other char should be between '0' and '9' + return false; + } + } + } + + const auto idx = array_index(reference_token); + if (idx >= ptr->size()) + { + // index out of range + return false; + } + + ptr = &ptr->operator[](idx); + break; + } + + default: + { + // we do not expect primitive values if there is still a + // reference token to process + return false; + } + } + } + + // no reference token left means we found a primitive value + return true; + } + + /*! + @brief split the string input to reference tokens + + @note This function is only called by the json_pointer constructor. + All exceptions below are documented there. + + @throw parse_error.107 if the pointer is not empty or begins with '/' + @throw parse_error.108 if character '~' is not followed by '0' or '1' + */ + static std::vector split(const std::string& reference_string) + { + std::vector result; + + // special case: empty reference string -> no reference tokens + if (reference_string.empty()) + { + return result; + } + + // check if nonempty reference string begins with slash + if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) + { + JSON_THROW(detail::parse_error::create(107, 1, + "JSON pointer must be empty or begin with '/' - was: '" + + reference_string + "'")); + } + + // extract the reference tokens: + // - slash: position of the last read slash (or end of string) + // - start: position after the previous slash + for ( + // search for the first slash after the first character + std::size_t slash = reference_string.find_first_of('/', 1), + // set the beginning of the first reference token + start = 1; + // we can stop if start == 0 (if slash == std::string::npos) + start != 0; + // set the beginning of the next reference token + // (will eventually be 0 if slash == std::string::npos) + start = (slash == std::string::npos) ? 0 : slash + 1, + // find next slash + slash = reference_string.find_first_of('/', start)) + { + // use the text between the beginning of the reference token + // (start) and the last slash (slash). + auto reference_token = reference_string.substr(start, slash - start); + + // check reference tokens are properly escaped + for (std::size_t pos = reference_token.find_first_of('~'); + pos != std::string::npos; + pos = reference_token.find_first_of('~', pos + 1)) + { + JSON_ASSERT(reference_token[pos] == '~'); + + // ~ must be followed by 0 or 1 + if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || + (reference_token[pos + 1] != '0' && + reference_token[pos + 1] != '1'))) + { + JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'")); + } + } + + // finally, store the reference token + unescape(reference_token); + result.push_back(reference_token); + } + + return result; + } + + /*! + @brief replace all occurrences of a substring by another string + + @param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t + @param[in] f the substring to replace with @a t + @param[in] t the string to replace @a f + + @pre The search string @a f must not be empty. **This precondition is + enforced with an assertion.** + + @since version 2.0.0 + */ + static void replace_substring(std::string& s, const std::string& f, + const std::string& t) + { + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != std::string::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} + } + + /// escape "~" to "~0" and "/" to "~1" + static std::string escape(std::string s) + { + replace_substring(s, "~", "~0"); + replace_substring(s, "/", "~1"); + return s; + } + + /// unescape "~1" to tilde and "~0" to slash (order is important!) + static void unescape(std::string& s) + { + replace_substring(s, "~1", "/"); + replace_substring(s, "~0", "~"); + } + + /*! + @param[in] reference_string the reference string to the current value + @param[in] value the value to consider + @param[in,out] result the result object to insert values to + + @note Empty objects or arrays are flattened to `null`. + */ + static void flatten(const std::string& reference_string, + const BasicJsonType& value, + BasicJsonType& result) + { + switch (value.type()) + { + case detail::value_t::array: + { + if (value.m_value.array->empty()) + { + // flatten empty array as null + result[reference_string] = nullptr; + } + else + { + // iterate array and use index as reference string + for (std::size_t i = 0; i < value.m_value.array->size(); ++i) + { + flatten(reference_string + "/" + std::to_string(i), + value.m_value.array->operator[](i), result); + } + } + break; + } + + case detail::value_t::object: + { + if (value.m_value.object->empty()) + { + // flatten empty object as null + result[reference_string] = nullptr; + } + else + { + // iterate object and use keys as reference string + for (const auto& element : *value.m_value.object) + { + flatten(reference_string + "/" + escape(element.first), element.second, result); + } + } + break; + } + + default: + { + // add primitive value with its reference string + result[reference_string] = value; + break; + } + } + } + + /*! + @param[in] value flattened JSON + + @return unflattened JSON + + @throw parse_error.109 if array index is not a number + @throw type_error.314 if value is not an object + @throw type_error.315 if object values are not primitive + @throw type_error.313 if value cannot be unflattened + */ + static BasicJsonType + unflatten(const BasicJsonType& value) + { + if (JSON_HEDLEY_UNLIKELY(!value.is_object())) + { + JSON_THROW(detail::type_error::create(314, "only objects can be unflattened")); + } + + BasicJsonType result; + + // iterate the JSON object values + for (const auto& element : *value.m_value.object) + { + if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) + { + JSON_THROW(detail::type_error::create(315, "values in object must be primitive")); + } + + // assign value to reference pointed to by JSON pointer; Note that if + // the JSON pointer is "" (i.e., points to the whole value), function + // get_and_create returns a reference to result itself. An assignment + // will then create a primitive value. + json_pointer(element.first).get_and_create(result) = element.second; + } + + return result; + } + + /*! + @brief compares two JSON pointers for equality + + @param[in] lhs JSON pointer to compare + @param[in] rhs JSON pointer to compare + @return whether @a lhs is equal to @a rhs + + @complexity Linear in the length of the JSON pointer + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + */ + friend bool operator==(json_pointer const& lhs, + json_pointer const& rhs) noexcept + { + return lhs.reference_tokens == rhs.reference_tokens; + } + + /*! + @brief compares two JSON pointers for inequality + + @param[in] lhs JSON pointer to compare + @param[in] rhs JSON pointer to compare + @return whether @a lhs is not equal @a rhs + + @complexity Linear in the length of the JSON pointer + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + */ + friend bool operator!=(json_pointer const& lhs, + json_pointer const& rhs) noexcept + { + return !(lhs == rhs); + } + + /// the reference tokens + std::vector reference_tokens; +}; +} // namespace nlohmann + +// #include + + +#include +#include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +class json_ref +{ + public: + using value_type = BasicJsonType; + + json_ref(value_type&& value) + : owned_value(std::move(value)) + , value_ref(&owned_value) + , is_rvalue(true) + {} + + json_ref(const value_type& value) + : value_ref(const_cast(&value)) + , is_rvalue(false) + {} + + json_ref(std::initializer_list init) + : owned_value(init) + , value_ref(&owned_value) + , is_rvalue(true) + {} + + template < + class... Args, + enable_if_t::value, int> = 0 > + json_ref(Args && ... args) + : owned_value(std::forward(args)...) + , value_ref(&owned_value) + , is_rvalue(true) + {} + + // class should be movable only + json_ref(json_ref&&) = default; + json_ref(const json_ref&) = delete; + json_ref& operator=(const json_ref&) = delete; + json_ref& operator=(json_ref&&) = delete; + ~json_ref() = default; + + value_type moved_or_copied() const + { + if (is_rvalue) + { + return std::move(*value_ref); + } + return *value_ref; + } + + value_type const& operator*() const + { + return *static_cast(value_ref); + } + + value_type const* operator->() const + { + return static_cast(value_ref); + } + + private: + mutable value_type owned_value = nullptr; + value_type* value_ref = nullptr; + const bool is_rvalue = true; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + + +#include // reverse +#include // array +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // memcpy +#include // numeric_limits +#include // string +#include // isnan, isinf + +// #include + +// #include + +// #include + + +#include // copy +#include // size_t +#include // streamsize +#include // back_inserter +#include // shared_ptr, make_shared +#include // basic_ostream +#include // basic_string +#include // vector +// #include + + +namespace nlohmann +{ +namespace detail +{ +/// abstract output adapter interface +template struct output_adapter_protocol +{ + virtual void write_character(CharType c) = 0; + virtual void write_characters(const CharType* s, std::size_t length) = 0; + virtual ~output_adapter_protocol() = default; +}; + +/// a type to simplify interfaces +template +using output_adapter_t = std::shared_ptr>; + +/// output adapter for byte vectors +template +class output_vector_adapter : public output_adapter_protocol +{ + public: + explicit output_vector_adapter(std::vector& vec) noexcept + : v(vec) + {} + + void write_character(CharType c) override + { + v.push_back(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + std::copy(s, s + length, std::back_inserter(v)); + } + + private: + std::vector& v; +}; + +/// output adapter for output streams +template +class output_stream_adapter : public output_adapter_protocol +{ + public: + explicit output_stream_adapter(std::basic_ostream& s) noexcept + : stream(s) + {} + + void write_character(CharType c) override + { + stream.put(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + stream.write(s, static_cast(length)); + } + + private: + std::basic_ostream& stream; +}; + +/// output adapter for basic_string +template> +class output_string_adapter : public output_adapter_protocol +{ + public: + explicit output_string_adapter(StringType& s) noexcept + : str(s) + {} + + void write_character(CharType c) override + { + str.push_back(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + str.append(s, length); + } + + private: + StringType& str; +}; + +template> +class output_adapter +{ + public: + output_adapter(std::vector& vec) + : oa(std::make_shared>(vec)) {} + + output_adapter(std::basic_ostream& s) + : oa(std::make_shared>(s)) {} + + output_adapter(StringType& s) + : oa(std::make_shared>(s)) {} + + operator output_adapter_t() + { + return oa; + } + + private: + output_adapter_t oa = nullptr; +}; +} // namespace detail +} // namespace nlohmann + + +namespace nlohmann +{ +namespace detail +{ +/////////////////// +// binary writer // +/////////////////// + +/*! +@brief serialization to CBOR and MessagePack values +*/ +template +class binary_writer +{ + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using number_float_t = typename BasicJsonType::number_float_t; + + public: + /*! + @brief create a binary writer + + @param[in] adapter output adapter to write to + */ + explicit binary_writer(output_adapter_t adapter) : oa(adapter) + { + JSON_ASSERT(oa); + } + + /*! + @param[in] j JSON value to serialize + @pre j.type() == value_t::object + */ + void write_bson(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::object: + { + write_bson_object(*j.m_value.object); + break; + } + + default: + { + JSON_THROW(type_error::create(317, "to serialize to BSON, top-level type must be object, but is " + std::string(j.type_name()))); + } + } + } + + /*! + @param[in] j JSON value to serialize + */ + void write_cbor(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::null: + { + oa->write_character(to_char_type(0xF6)); + break; + } + + case value_t::boolean: + { + oa->write_character(j.m_value.boolean + ? to_char_type(0xF5) + : to_char_type(0xF4)); + break; + } + + case value_t::number_integer: + { + if (j.m_value.number_integer >= 0) + { + // CBOR does not differentiate between positive signed + // integers and unsigned integers. Therefore, we used the + // code from the value_t::number_unsigned case here. + if (j.m_value.number_integer <= 0x17) + { + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x18)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x19)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x1A)); + write_number(static_cast(j.m_value.number_integer)); + } + else + { + oa->write_character(to_char_type(0x1B)); + write_number(static_cast(j.m_value.number_integer)); + } + } + else + { + // The conversions below encode the sign in the first + // byte, and the value is converted to a positive number. + const auto positive_number = -1 - j.m_value.number_integer; + if (j.m_value.number_integer >= -24) + { + write_number(static_cast(0x20 + positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x38)); + write_number(static_cast(positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x39)); + write_number(static_cast(positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x3A)); + write_number(static_cast(positive_number)); + } + else + { + oa->write_character(to_char_type(0x3B)); + write_number(static_cast(positive_number)); + } + } + break; + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned <= 0x17) + { + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x18)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x19)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x1A)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else + { + oa->write_character(to_char_type(0x1B)); + write_number(static_cast(j.m_value.number_unsigned)); + } + break; + } + + case value_t::number_float: + { + if (std::isnan(j.m_value.number_float)) + { + // NaN is 0xf97e00 in CBOR + oa->write_character(to_char_type(0xF9)); + oa->write_character(to_char_type(0x7E)); + oa->write_character(to_char_type(0x00)); + } + else if (std::isinf(j.m_value.number_float)) + { + // Infinity is 0xf97c00, -Infinity is 0xf9fc00 + oa->write_character(to_char_type(0xf9)); + oa->write_character(j.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC)); + oa->write_character(to_char_type(0x00)); + } + else + { + write_compact_float(j.m_value.number_float, detail::input_format_t::cbor); + } + break; + } + + case value_t::string: + { + // step 1: write control byte and the string length + const auto N = j.m_value.string->size(); + if (N <= 0x17) + { + write_number(static_cast(0x60 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x78)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x79)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x7A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x7B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write the string + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + // step 1: write control byte and the array size + const auto N = j.m_value.array->size(); + if (N <= 0x17) + { + write_number(static_cast(0x80 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x98)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x99)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x9A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x9B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + for (const auto& el : *j.m_value.array) + { + write_cbor(el); + } + break; + } + + case value_t::binary: + { + if (j.m_value.binary->has_subtype()) + { + write_number(static_cast(0xd8)); + write_number(j.m_value.binary->subtype()); + } + + // step 1: write control byte and the binary array size + const auto N = j.m_value.binary->size(); + if (N <= 0x17) + { + write_number(static_cast(0x40 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x58)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x59)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x5A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x5B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + N); + + break; + } + + case value_t::object: + { + // step 1: write control byte and the object size + const auto N = j.m_value.object->size(); + if (N <= 0x17) + { + write_number(static_cast(0xA0 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xB8)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xB9)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xBA)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xBB)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + for (const auto& el : *j.m_value.object) + { + write_cbor(el.first); + write_cbor(el.second); + } + break; + } + + default: + break; + } + } + + /*! + @param[in] j JSON value to serialize + */ + void write_msgpack(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::null: // nil + { + oa->write_character(to_char_type(0xC0)); + break; + } + + case value_t::boolean: // true and false + { + oa->write_character(j.m_value.boolean + ? to_char_type(0xC3) + : to_char_type(0xC2)); + break; + } + + case value_t::number_integer: + { + if (j.m_value.number_integer >= 0) + { + // MessagePack does not differentiate between positive + // signed integers and unsigned integers. Therefore, we used + // the code from the value_t::number_unsigned case here. + if (j.m_value.number_unsigned < 128) + { + // positive fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 8 + oa->write_character(to_char_type(0xCC)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 16 + oa->write_character(to_char_type(0xCD)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 32 + oa->write_character(to_char_type(0xCE)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 64 + oa->write_character(to_char_type(0xCF)); + write_number(static_cast(j.m_value.number_integer)); + } + } + else + { + if (j.m_value.number_integer >= -32) + { + // negative fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 8 + oa->write_character(to_char_type(0xD0)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 16 + oa->write_character(to_char_type(0xD1)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 32 + oa->write_character(to_char_type(0xD2)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 64 + oa->write_character(to_char_type(0xD3)); + write_number(static_cast(j.m_value.number_integer)); + } + } + break; + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned < 128) + { + // positive fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 8 + oa->write_character(to_char_type(0xCC)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 16 + oa->write_character(to_char_type(0xCD)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 32 + oa->write_character(to_char_type(0xCE)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 64 + oa->write_character(to_char_type(0xCF)); + write_number(static_cast(j.m_value.number_integer)); + } + break; + } + + case value_t::number_float: + { + write_compact_float(j.m_value.number_float, detail::input_format_t::msgpack); + break; + } + + case value_t::string: + { + // step 1: write control byte and the string length + const auto N = j.m_value.string->size(); + if (N <= 31) + { + // fixstr + write_number(static_cast(0xA0 | N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 8 + oa->write_character(to_char_type(0xD9)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 16 + oa->write_character(to_char_type(0xDA)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 32 + oa->write_character(to_char_type(0xDB)); + write_number(static_cast(N)); + } + + // step 2: write the string + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + // step 1: write control byte and the array size + const auto N = j.m_value.array->size(); + if (N <= 15) + { + // fixarray + write_number(static_cast(0x90 | N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // array 16 + oa->write_character(to_char_type(0xDC)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // array 32 + oa->write_character(to_char_type(0xDD)); + write_number(static_cast(N)); + } + + // step 2: write each element + for (const auto& el : *j.m_value.array) + { + write_msgpack(el); + } + break; + } + + case value_t::binary: + { + // step 0: determine if the binary type has a set subtype to + // determine whether or not to use the ext or fixext types + const bool use_ext = j.m_value.binary->has_subtype(); + + // step 1: write control byte and the byte string length + const auto N = j.m_value.binary->size(); + if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type{}; + bool fixed = true; + if (use_ext) + { + switch (N) + { + case 1: + output_type = 0xD4; // fixext 1 + break; + case 2: + output_type = 0xD5; // fixext 2 + break; + case 4: + output_type = 0xD6; // fixext 4 + break; + case 8: + output_type = 0xD7; // fixext 8 + break; + case 16: + output_type = 0xD8; // fixext 16 + break; + default: + output_type = 0xC7; // ext 8 + fixed = false; + break; + } + + } + else + { + output_type = 0xC4; // bin 8 + fixed = false; + } + + oa->write_character(to_char_type(output_type)); + if (!fixed) + { + write_number(static_cast(N)); + } + } + else if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type = use_ext + ? 0xC8 // ext 16 + : 0xC5; // bin 16 + + oa->write_character(to_char_type(output_type)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type = use_ext + ? 0xC9 // ext 32 + : 0xC6; // bin 32 + + oa->write_character(to_char_type(output_type)); + write_number(static_cast(N)); + } + + // step 1.5: if this is an ext type, write the subtype + if (use_ext) + { + write_number(static_cast(j.m_value.binary->subtype())); + } + + // step 2: write the byte string + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + N); + + break; + } + + case value_t::object: + { + // step 1: write control byte and the object size + const auto N = j.m_value.object->size(); + if (N <= 15) + { + // fixmap + write_number(static_cast(0x80 | (N & 0xF))); + } + else if (N <= (std::numeric_limits::max)()) + { + // map 16 + oa->write_character(to_char_type(0xDE)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // map 32 + oa->write_character(to_char_type(0xDF)); + write_number(static_cast(N)); + } + + // step 2: write each element + for (const auto& el : *j.m_value.object) + { + write_msgpack(el.first); + write_msgpack(el.second); + } + break; + } + + default: + break; + } + } + + /*! + @param[in] j JSON value to serialize + @param[in] use_count whether to use '#' prefixes (optimized format) + @param[in] use_type whether to use '$' prefixes (optimized format) + @param[in] add_prefix whether prefixes need to be used for this value + */ + void write_ubjson(const BasicJsonType& j, const bool use_count, + const bool use_type, const bool add_prefix = true) + { + switch (j.type()) + { + case value_t::null: + { + if (add_prefix) + { + oa->write_character(to_char_type('Z')); + } + break; + } + + case value_t::boolean: + { + if (add_prefix) + { + oa->write_character(j.m_value.boolean + ? to_char_type('T') + : to_char_type('F')); + } + break; + } + + case value_t::number_integer: + { + write_number_with_ubjson_prefix(j.m_value.number_integer, add_prefix); + break; + } + + case value_t::number_unsigned: + { + write_number_with_ubjson_prefix(j.m_value.number_unsigned, add_prefix); + break; + } + + case value_t::number_float: + { + write_number_with_ubjson_prefix(j.m_value.number_float, add_prefix); + break; + } + + case value_t::string: + { + if (add_prefix) + { + oa->write_character(to_char_type('S')); + } + write_number_with_ubjson_prefix(j.m_value.string->size(), true); + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + bool prefix_required = true; + if (use_type && !j.m_value.array->empty()) + { + JSON_ASSERT(use_count); + const CharType first_prefix = ubjson_prefix(j.front()); + const bool same_prefix = std::all_of(j.begin() + 1, j.end(), + [this, first_prefix](const BasicJsonType & v) + { + return ubjson_prefix(v) == first_prefix; + }); + + if (same_prefix) + { + prefix_required = false; + oa->write_character(to_char_type('$')); + oa->write_character(first_prefix); + } + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.array->size(), true); + } + + for (const auto& el : *j.m_value.array) + { + write_ubjson(el, use_count, use_type, prefix_required); + } + + if (!use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::binary: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + if (use_type && !j.m_value.binary->empty()) + { + JSON_ASSERT(use_count); + oa->write_character(to_char_type('$')); + oa->write_character('U'); + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.binary->size(), true); + } + + if (use_type) + { + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + j.m_value.binary->size()); + } + else + { + for (size_t i = 0; i < j.m_value.binary->size(); ++i) + { + oa->write_character(to_char_type('U')); + oa->write_character(j.m_value.binary->data()[i]); + } + } + + if (!use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::object: + { + if (add_prefix) + { + oa->write_character(to_char_type('{')); + } + + bool prefix_required = true; + if (use_type && !j.m_value.object->empty()) + { + JSON_ASSERT(use_count); + const CharType first_prefix = ubjson_prefix(j.front()); + const bool same_prefix = std::all_of(j.begin(), j.end(), + [this, first_prefix](const BasicJsonType & v) + { + return ubjson_prefix(v) == first_prefix; + }); + + if (same_prefix) + { + prefix_required = false; + oa->write_character(to_char_type('$')); + oa->write_character(first_prefix); + } + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.object->size(), true); + } + + for (const auto& el : *j.m_value.object) + { + write_number_with_ubjson_prefix(el.first.size(), true); + oa->write_characters( + reinterpret_cast(el.first.c_str()), + el.first.size()); + write_ubjson(el.second, use_count, use_type, prefix_required); + } + + if (!use_count) + { + oa->write_character(to_char_type('}')); + } + + break; + } + + default: + break; + } + } + + private: + ////////// + // BSON // + ////////// + + /*! + @return The size of a BSON document entry header, including the id marker + and the entry name size (and its null-terminator). + */ + static std::size_t calc_bson_entry_header_size(const string_t& name) + { + const auto it = name.find(static_cast(0)); + if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos)) + { + JSON_THROW(out_of_range::create(409, + "BSON key cannot contain code point U+0000 (at byte " + std::to_string(it) + ")")); + } + + return /*id*/ 1ul + name.size() + /*zero-terminator*/1u; + } + + /*! + @brief Writes the given @a element_type and @a name to the output adapter + */ + void write_bson_entry_header(const string_t& name, + const std::uint8_t element_type) + { + oa->write_character(to_char_type(element_type)); // boolean + oa->write_characters( + reinterpret_cast(name.c_str()), + name.size() + 1u); + } + + /*! + @brief Writes a BSON element with key @a name and boolean value @a value + */ + void write_bson_boolean(const string_t& name, + const bool value) + { + write_bson_entry_header(name, 0x08); + oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00)); + } + + /*! + @brief Writes a BSON element with key @a name and double value @a value + */ + void write_bson_double(const string_t& name, + const double value) + { + write_bson_entry_header(name, 0x01); + write_number(value); + } + + /*! + @return The size of the BSON-encoded string in @a value + */ + static std::size_t calc_bson_string_size(const string_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + + /*! + @brief Writes a BSON element with key @a name and string value @a value + */ + void write_bson_string(const string_t& name, + const string_t& value) + { + write_bson_entry_header(name, 0x02); + + write_number(static_cast(value.size() + 1ul)); + oa->write_characters( + reinterpret_cast(value.c_str()), + value.size() + 1); + } + + /*! + @brief Writes a BSON element with key @a name and null value + */ + void write_bson_null(const string_t& name) + { + write_bson_entry_header(name, 0x0A); + } + + /*! + @return The size of the BSON-encoded integer @a value + */ + static std::size_t calc_bson_integer_size(const std::int64_t value) + { + return (std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)() + ? sizeof(std::int32_t) + : sizeof(std::int64_t); + } + + /*! + @brief Writes a BSON element with key @a name and integer @a value + */ + void write_bson_integer(const string_t& name, + const std::int64_t value) + { + if ((std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)()) + { + write_bson_entry_header(name, 0x10); // int32 + write_number(static_cast(value)); + } + else + { + write_bson_entry_header(name, 0x12); // int64 + write_number(static_cast(value)); + } + } + + /*! + @return The size of the BSON-encoded unsigned integer in @a j + */ + static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept + { + return (value <= static_cast((std::numeric_limits::max)())) + ? sizeof(std::int32_t) + : sizeof(std::int64_t); + } + + /*! + @brief Writes a BSON element with key @a name and unsigned @a value + */ + void write_bson_unsigned(const string_t& name, + const std::uint64_t value) + { + if (value <= static_cast((std::numeric_limits::max)())) + { + write_bson_entry_header(name, 0x10 /* int32 */); + write_number(static_cast(value)); + } + else if (value <= static_cast((std::numeric_limits::max)())) + { + write_bson_entry_header(name, 0x12 /* int64 */); + write_number(static_cast(value)); + } + else + { + JSON_THROW(out_of_range::create(407, "integer number " + std::to_string(value) + " cannot be represented by BSON as it does not fit int64")); + } + } + + /*! + @brief Writes a BSON element with key @a name and object @a value + */ + void write_bson_object_entry(const string_t& name, + const typename BasicJsonType::object_t& value) + { + write_bson_entry_header(name, 0x03); // object + write_bson_object(value); + } + + /*! + @return The size of the BSON-encoded array @a value + */ + static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value) + { + std::size_t array_index = 0ul; + + const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), std::size_t(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el) + { + return result + calc_bson_element_size(std::to_string(array_index++), el); + }); + + return sizeof(std::int32_t) + embedded_document_size + 1ul; + } + + /*! + @return The size of the BSON-encoded binary array @a value + */ + static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + + /*! + @brief Writes a BSON element with key @a name and array @a value + */ + void write_bson_array(const string_t& name, + const typename BasicJsonType::array_t& value) + { + write_bson_entry_header(name, 0x04); // array + write_number(static_cast(calc_bson_array_size(value))); + + std::size_t array_index = 0ul; + + for (const auto& el : value) + { + write_bson_element(std::to_string(array_index++), el); + } + + oa->write_character(to_char_type(0x00)); + } + + /*! + @brief Writes a BSON element with key @a name and binary value @a value + */ + void write_bson_binary(const string_t& name, + const binary_t& value) + { + write_bson_entry_header(name, 0x05); + + write_number(static_cast(value.size())); + write_number(value.has_subtype() ? value.subtype() : std::uint8_t(0x00)); + + oa->write_characters(reinterpret_cast(value.data()), value.size()); + } + + /*! + @brief Calculates the size necessary to serialize the JSON value @a j with its @a name + @return The calculated size for the BSON document entry for @a j with the given @a name. + */ + static std::size_t calc_bson_element_size(const string_t& name, + const BasicJsonType& j) + { + const auto header_size = calc_bson_entry_header_size(name); + switch (j.type()) + { + case value_t::object: + return header_size + calc_bson_object_size(*j.m_value.object); + + case value_t::array: + return header_size + calc_bson_array_size(*j.m_value.array); + + case value_t::binary: + return header_size + calc_bson_binary_size(*j.m_value.binary); + + case value_t::boolean: + return header_size + 1ul; + + case value_t::number_float: + return header_size + 8ul; + + case value_t::number_integer: + return header_size + calc_bson_integer_size(j.m_value.number_integer); + + case value_t::number_unsigned: + return header_size + calc_bson_unsigned_size(j.m_value.number_unsigned); + + case value_t::string: + return header_size + calc_bson_string_size(*j.m_value.string); + + case value_t::null: + return header_size + 0ul; + + // LCOV_EXCL_START + default: + JSON_ASSERT(false); + return 0ul; + // LCOV_EXCL_STOP + } + } + + /*! + @brief Serializes the JSON value @a j to BSON and associates it with the + key @a name. + @param name The name to associate with the JSON entity @a j within the + current BSON document + @return The size of the BSON entry + */ + void write_bson_element(const string_t& name, + const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::object: + return write_bson_object_entry(name, *j.m_value.object); + + case value_t::array: + return write_bson_array(name, *j.m_value.array); + + case value_t::binary: + return write_bson_binary(name, *j.m_value.binary); + + case value_t::boolean: + return write_bson_boolean(name, j.m_value.boolean); + + case value_t::number_float: + return write_bson_double(name, j.m_value.number_float); + + case value_t::number_integer: + return write_bson_integer(name, j.m_value.number_integer); + + case value_t::number_unsigned: + return write_bson_unsigned(name, j.m_value.number_unsigned); + + case value_t::string: + return write_bson_string(name, *j.m_value.string); + + case value_t::null: + return write_bson_null(name); + + // LCOV_EXCL_START + default: + JSON_ASSERT(false); + return; + // LCOV_EXCL_STOP + } + } + + /*! + @brief Calculates the size of the BSON serialization of the given + JSON-object @a j. + @param[in] j JSON value to serialize + @pre j.type() == value_t::object + */ + static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value) + { + std::size_t document_size = std::accumulate(value.begin(), value.end(), std::size_t(0), + [](size_t result, const typename BasicJsonType::object_t::value_type & el) + { + return result += calc_bson_element_size(el.first, el.second); + }); + + return sizeof(std::int32_t) + document_size + 1ul; + } + + /*! + @param[in] j JSON value to serialize + @pre j.type() == value_t::object + */ + void write_bson_object(const typename BasicJsonType::object_t& value) + { + write_number(static_cast(calc_bson_object_size(value))); + + for (const auto& el : value) + { + write_bson_element(el.first, el.second); + } + + oa->write_character(to_char_type(0x00)); + } + + ////////// + // CBOR // + ////////// + + static constexpr CharType get_cbor_float_prefix(float /*unused*/) + { + return to_char_type(0xFA); // Single-Precision Float + } + + static constexpr CharType get_cbor_float_prefix(double /*unused*/) + { + return to_char_type(0xFB); // Double-Precision Float + } + + ///////////// + // MsgPack // + ///////////// + + static constexpr CharType get_msgpack_float_prefix(float /*unused*/) + { + return to_char_type(0xCA); // float 32 + } + + static constexpr CharType get_msgpack_float_prefix(double /*unused*/) + { + return to_char_type(0xCB); // float 64 + } + + //////////// + // UBJSON // + //////////// + + // UBJSON: write number (floating point) + template::value, int>::type = 0> + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if (add_prefix) + { + oa->write_character(get_ubjson_float_prefix(n)); + } + write_number(n); + } + + // UBJSON: write number (unsigned integer) + template::value, int>::type = 0> + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('i')); // int8 + } + write_number(static_cast(n)); + } + else if (n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('U')); // uint8 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('I')); // int16 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('l')); // int32 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('L')); // int64 + } + write_number(static_cast(n)); + } + else + { + if (add_prefix) + { + oa->write_character(to_char_type('H')); // high-precision number + } + + const auto number = BasicJsonType(n).dump(); + write_number_with_ubjson_prefix(number.size(), true); + for (std::size_t i = 0; i < number.size(); ++i) + { + oa->write_character(to_char_type(static_cast(number[i]))); + } + } + } + + // UBJSON: write number (signed integer) + template < typename NumberType, typename std::enable_if < + std::is_signed::value&& + !std::is_floating_point::value, int >::type = 0 > + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('i')); // int8 + } + write_number(static_cast(n)); + } + else if (static_cast((std::numeric_limits::min)()) <= n && n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('U')); // uint8 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('I')); // int16 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('l')); // int32 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('L')); // int64 + } + write_number(static_cast(n)); + } + // LCOV_EXCL_START + else + { + if (add_prefix) + { + oa->write_character(to_char_type('H')); // high-precision number + } + + const auto number = BasicJsonType(n).dump(); + write_number_with_ubjson_prefix(number.size(), true); + for (std::size_t i = 0; i < number.size(); ++i) + { + oa->write_character(to_char_type(static_cast(number[i]))); + } + } + // LCOV_EXCL_STOP + } + + /*! + @brief determine the type prefix of container values + */ + CharType ubjson_prefix(const BasicJsonType& j) const noexcept + { + switch (j.type()) + { + case value_t::null: + return 'Z'; + + case value_t::boolean: + return j.m_value.boolean ? 'T' : 'F'; + + case value_t::number_integer: + { + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'i'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'U'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'I'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'l'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'L'; + } + // anything else is treated as high-precision number + return 'H'; // LCOV_EXCL_LINE + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'i'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'U'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'I'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'l'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'L'; + } + // anything else is treated as high-precision number + return 'H'; // LCOV_EXCL_LINE + } + + case value_t::number_float: + return get_ubjson_float_prefix(j.m_value.number_float); + + case value_t::string: + return 'S'; + + case value_t::array: // fallthrough + case value_t::binary: + return '['; + + case value_t::object: + return '{'; + + default: // discarded values + return 'N'; + } + } + + static constexpr CharType get_ubjson_float_prefix(float /*unused*/) + { + return 'd'; // float 32 + } + + static constexpr CharType get_ubjson_float_prefix(double /*unused*/) + { + return 'D'; // float 64 + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /* + @brief write a number to output input + @param[in] n number of type @a NumberType + @tparam NumberType the type of the number + @tparam OutputIsLittleEndian Set to true if output data is + required to be little endian + + @note This function needs to respect the system's endianess, because bytes + in CBOR, MessagePack, and UBJSON are stored in network order (big + endian) and therefore need reordering on little endian systems. + */ + template + void write_number(const NumberType n) + { + // step 1: write number to array of length NumberType + std::array vec; + std::memcpy(vec.data(), &n, sizeof(NumberType)); + + // step 2: write array to output (with possible reordering) + if (is_little_endian != OutputIsLittleEndian) + { + // reverse byte order prior to conversion if necessary + std::reverse(vec.begin(), vec.end()); + } + + oa->write_characters(vec.data(), sizeof(NumberType)); + } + + void write_compact_float(const number_float_t n, detail::input_format_t format) + { + if (static_cast(n) >= static_cast(std::numeric_limits::lowest()) && + static_cast(n) <= static_cast((std::numeric_limits::max)()) && + static_cast(static_cast(n)) == static_cast(n)) + { + oa->write_character(format == detail::input_format_t::cbor + ? get_cbor_float_prefix(static_cast(n)) + : get_msgpack_float_prefix(static_cast(n))); + write_number(static_cast(n)); + } + else + { + oa->write_character(format == detail::input_format_t::cbor + ? get_cbor_float_prefix(n) + : get_msgpack_float_prefix(n)); + write_number(n); + } + } + + public: + // The following to_char_type functions are implement the conversion + // between uint8_t and CharType. In case CharType is not unsigned, + // such a conversion is required to allow values greater than 128. + // See for a discussion. + template < typename C = CharType, + enable_if_t < std::is_signed::value && std::is_signed::value > * = nullptr > + static constexpr CharType to_char_type(std::uint8_t x) noexcept + { + return *reinterpret_cast(&x); + } + + template < typename C = CharType, + enable_if_t < std::is_signed::value && std::is_unsigned::value > * = nullptr > + static CharType to_char_type(std::uint8_t x) noexcept + { + static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t"); + static_assert(std::is_trivial::value, "CharType must be trivial"); + CharType result; + std::memcpy(&result, &x, sizeof(x)); + return result; + } + + template::value>* = nullptr> + static constexpr CharType to_char_type(std::uint8_t x) noexcept + { + return x; + } + + template < typename InputCharType, typename C = CharType, + enable_if_t < + std::is_signed::value && + std::is_signed::value && + std::is_same::type>::value + > * = nullptr > + static constexpr CharType to_char_type(InputCharType x) noexcept + { + return x; + } + + private: + /// whether we can assume little endianess + const bool is_little_endian = little_endianess(); + + /// the output + output_adapter_t oa = nullptr; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // reverse, remove, fill, find, none_of +#include // array +#include // localeconv, lconv +#include // labs, isfinite, isnan, signbit +#include // size_t, ptrdiff_t +#include // uint8_t +#include // snprintf +#include // numeric_limits +#include // string, char_traits +#include // is_same +#include // move + +// #include + + +#include // array +#include // signbit, isfinite +#include // intN_t, uintN_t +#include // memcpy, memmove +#include // numeric_limits +#include // conditional + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +/*! +@brief implements the Grisu2 algorithm for binary to decimal floating-point +conversion. + +This implementation is a slightly modified version of the reference +implementation which may be obtained from +http://florian.loitsch.com/publications (bench.tar.gz). + +The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. + +For a detailed description of the algorithm see: + +[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with + Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming + Language Design and Implementation, PLDI 2010 +[2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", + Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language + Design and Implementation, PLDI 1996 +*/ +namespace dtoa_impl +{ + +template +Target reinterpret_bits(const Source source) +{ + static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); + + Target target; + std::memcpy(&target, &source, sizeof(Source)); + return target; +} + +struct diyfp // f * 2^e +{ + static constexpr int kPrecision = 64; // = q + + std::uint64_t f = 0; + int e = 0; + + constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} + + /*! + @brief returns x - y + @pre x.e == y.e and x.f >= y.f + */ + static diyfp sub(const diyfp& x, const diyfp& y) noexcept + { + JSON_ASSERT(x.e == y.e); + JSON_ASSERT(x.f >= y.f); + + return {x.f - y.f, x.e}; + } + + /*! + @brief returns x * y + @note The result is rounded. (Only the upper q bits are returned.) + */ + static diyfp mul(const diyfp& x, const diyfp& y) noexcept + { + static_assert(kPrecision == 64, "internal error"); + + // Computes: + // f = round((x.f * y.f) / 2^q) + // e = x.e + y.e + q + + // Emulate the 64-bit * 64-bit multiplication: + // + // p = u * v + // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) + // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) + // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) + // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) + // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) + // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) + // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) + // + // (Since Q might be larger than 2^32 - 1) + // + // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) + // + // (Q_hi + H does not overflow a 64-bit int) + // + // = p_lo + 2^64 p_hi + + const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; + const std::uint64_t u_hi = x.f >> 32u; + const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; + const std::uint64_t v_hi = y.f >> 32u; + + const std::uint64_t p0 = u_lo * v_lo; + const std::uint64_t p1 = u_lo * v_hi; + const std::uint64_t p2 = u_hi * v_lo; + const std::uint64_t p3 = u_hi * v_hi; + + const std::uint64_t p0_hi = p0 >> 32u; + const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; + const std::uint64_t p1_hi = p1 >> 32u; + const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; + const std::uint64_t p2_hi = p2 >> 32u; + + std::uint64_t Q = p0_hi + p1_lo + p2_lo; + + // The full product might now be computed as + // + // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) + // p_lo = p0_lo + (Q << 32) + // + // But in this particular case here, the full p_lo is not required. + // Effectively we only need to add the highest bit in p_lo to p_hi (and + // Q_hi + 1 does not overflow). + + Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up + + const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); + + return {h, x.e + y.e + 64}; + } + + /*! + @brief normalize x such that the significand is >= 2^(q-1) + @pre x.f != 0 + */ + static diyfp normalize(diyfp x) noexcept + { + JSON_ASSERT(x.f != 0); + + while ((x.f >> 63u) == 0) + { + x.f <<= 1u; + x.e--; + } + + return x; + } + + /*! + @brief normalize x such that the result has the exponent E + @pre e >= x.e and the upper e - x.e bits of x.f must be zero. + */ + static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept + { + const int delta = x.e - target_exponent; + + JSON_ASSERT(delta >= 0); + JSON_ASSERT(((x.f << delta) >> delta) == x.f); + + return {x.f << delta, target_exponent}; + } +}; + +struct boundaries +{ + diyfp w; + diyfp minus; + diyfp plus; +}; + +/*! +Compute the (normalized) diyfp representing the input number 'value' and its +boundaries. + +@pre value must be finite and positive +*/ +template +boundaries compute_boundaries(FloatType value) +{ + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // Convert the IEEE representation into a diyfp. + // + // If v is denormal: + // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) + // If v is normalized: + // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) + + static_assert(std::numeric_limits::is_iec559, + "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); + + constexpr int kPrecision = std::numeric_limits::digits; // = p (includes the hidden bit) + constexpr int kBias = std::numeric_limits::max_exponent - 1 + (kPrecision - 1); + constexpr int kMinExp = 1 - kBias; + constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) + + using bits_type = typename std::conditional::type; + + const std::uint64_t bits = reinterpret_bits(value); + const std::uint64_t E = bits >> (kPrecision - 1); + const std::uint64_t F = bits & (kHiddenBit - 1); + + const bool is_denormal = E == 0; + const diyfp v = is_denormal + ? diyfp(F, kMinExp) + : diyfp(F + kHiddenBit, static_cast(E) - kBias); + + // Compute the boundaries m- and m+ of the floating-point value + // v = f * 2^e. + // + // Determine v- and v+, the floating-point predecessor and successor if v, + // respectively. + // + // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) + // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) + // + // v+ = v + 2^e + // + // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ + // between m- and m+ round to v, regardless of how the input rounding + // algorithm breaks ties. + // + // ---+-------------+-------------+-------------+-------------+--- (A) + // v- m- v m+ v+ + // + // -----------------+------+------+-------------+-------------+--- (B) + // v- m- v m+ v+ + + const bool lower_boundary_is_closer = F == 0 && E > 1; + const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1); + const diyfp m_minus = lower_boundary_is_closer + ? diyfp(4 * v.f - 1, v.e - 2) // (B) + : diyfp(2 * v.f - 1, v.e - 1); // (A) + + // Determine the normalized w+ = m+. + const diyfp w_plus = diyfp::normalize(m_plus); + + // Determine w- = m- such that e_(w-) = e_(w+). + const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); + + return {diyfp::normalize(v), w_minus, w_plus}; +} + +// Given normalized diyfp w, Grisu needs to find a (normalized) cached +// power-of-ten c, such that the exponent of the product c * w = f * 2^e lies +// within a certain range [alpha, gamma] (Definition 3.2 from [1]) +// +// alpha <= e = e_c + e_w + q <= gamma +// +// or +// +// f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q +// <= f_c * f_w * 2^gamma +// +// Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies +// +// 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma +// +// or +// +// 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) +// +// The choice of (alpha,gamma) determines the size of the table and the form of +// the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well +// in practice: +// +// The idea is to cut the number c * w = f * 2^e into two parts, which can be +// processed independently: An integral part p1, and a fractional part p2: +// +// f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e +// = (f div 2^-e) + (f mod 2^-e) * 2^e +// = p1 + p2 * 2^e +// +// The conversion of p1 into decimal form requires a series of divisions and +// modulos by (a power of) 10. These operations are faster for 32-bit than for +// 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be +// achieved by choosing +// +// -e >= 32 or e <= -32 := gamma +// +// In order to convert the fractional part +// +// p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... +// +// into decimal form, the fraction is repeatedly multiplied by 10 and the digits +// d[-i] are extracted in order: +// +// (10 * p2) div 2^-e = d[-1] +// (10 * p2) mod 2^-e = d[-2] / 10^1 + ... +// +// The multiplication by 10 must not overflow. It is sufficient to choose +// +// 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. +// +// Since p2 = f mod 2^-e < 2^-e, +// +// -e <= 60 or e >= -60 := alpha + +constexpr int kAlpha = -60; +constexpr int kGamma = -32; + +struct cached_power // c = f * 2^e ~= 10^k +{ + std::uint64_t f; + int e; + int k; +}; + +/*! +For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached +power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c +satisfies (Definition 3.2 from [1]) + + alpha <= e_c + e + q <= gamma. +*/ +inline cached_power get_cached_power_for_binary_exponent(int e) +{ + // Now + // + // alpha <= e_c + e + q <= gamma (1) + // ==> f_c * 2^alpha <= c * 2^e * 2^q + // + // and since the c's are normalized, 2^(q-1) <= f_c, + // + // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) + // ==> 2^(alpha - e - 1) <= c + // + // If c were an exact power of ten, i.e. c = 10^k, one may determine k as + // + // k = ceil( log_10( 2^(alpha - e - 1) ) ) + // = ceil( (alpha - e - 1) * log_10(2) ) + // + // From the paper: + // "In theory the result of the procedure could be wrong since c is rounded, + // and the computation itself is approximated [...]. In practice, however, + // this simple function is sufficient." + // + // For IEEE double precision floating-point numbers converted into + // normalized diyfp's w = f * 2^e, with q = 64, + // + // e >= -1022 (min IEEE exponent) + // -52 (p - 1) + // -52 (p - 1, possibly normalize denormal IEEE numbers) + // -11 (normalize the diyfp) + // = -1137 + // + // and + // + // e <= +1023 (max IEEE exponent) + // -52 (p - 1) + // -11 (normalize the diyfp) + // = 960 + // + // This binary exponent range [-1137,960] results in a decimal exponent + // range [-307,324]. One does not need to store a cached power for each + // k in this range. For each such k it suffices to find a cached power + // such that the exponent of the product lies in [alpha,gamma]. + // This implies that the difference of the decimal exponents of adjacent + // table entries must be less than or equal to + // + // floor( (gamma - alpha) * log_10(2) ) = 8. + // + // (A smaller distance gamma-alpha would require a larger table.) + + // NB: + // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. + + constexpr int kCachedPowersMinDecExp = -300; + constexpr int kCachedPowersDecStep = 8; + + static constexpr std::array kCachedPowers = + { + { + { 0xAB70FE17C79AC6CA, -1060, -300 }, + { 0xFF77B1FCBEBCDC4F, -1034, -292 }, + { 0xBE5691EF416BD60C, -1007, -284 }, + { 0x8DD01FAD907FFC3C, -980, -276 }, + { 0xD3515C2831559A83, -954, -268 }, + { 0x9D71AC8FADA6C9B5, -927, -260 }, + { 0xEA9C227723EE8BCB, -901, -252 }, + { 0xAECC49914078536D, -874, -244 }, + { 0x823C12795DB6CE57, -847, -236 }, + { 0xC21094364DFB5637, -821, -228 }, + { 0x9096EA6F3848984F, -794, -220 }, + { 0xD77485CB25823AC7, -768, -212 }, + { 0xA086CFCD97BF97F4, -741, -204 }, + { 0xEF340A98172AACE5, -715, -196 }, + { 0xB23867FB2A35B28E, -688, -188 }, + { 0x84C8D4DFD2C63F3B, -661, -180 }, + { 0xC5DD44271AD3CDBA, -635, -172 }, + { 0x936B9FCEBB25C996, -608, -164 }, + { 0xDBAC6C247D62A584, -582, -156 }, + { 0xA3AB66580D5FDAF6, -555, -148 }, + { 0xF3E2F893DEC3F126, -529, -140 }, + { 0xB5B5ADA8AAFF80B8, -502, -132 }, + { 0x87625F056C7C4A8B, -475, -124 }, + { 0xC9BCFF6034C13053, -449, -116 }, + { 0x964E858C91BA2655, -422, -108 }, + { 0xDFF9772470297EBD, -396, -100 }, + { 0xA6DFBD9FB8E5B88F, -369, -92 }, + { 0xF8A95FCF88747D94, -343, -84 }, + { 0xB94470938FA89BCF, -316, -76 }, + { 0x8A08F0F8BF0F156B, -289, -68 }, + { 0xCDB02555653131B6, -263, -60 }, + { 0x993FE2C6D07B7FAC, -236, -52 }, + { 0xE45C10C42A2B3B06, -210, -44 }, + { 0xAA242499697392D3, -183, -36 }, + { 0xFD87B5F28300CA0E, -157, -28 }, + { 0xBCE5086492111AEB, -130, -20 }, + { 0x8CBCCC096F5088CC, -103, -12 }, + { 0xD1B71758E219652C, -77, -4 }, + { 0x9C40000000000000, -50, 4 }, + { 0xE8D4A51000000000, -24, 12 }, + { 0xAD78EBC5AC620000, 3, 20 }, + { 0x813F3978F8940984, 30, 28 }, + { 0xC097CE7BC90715B3, 56, 36 }, + { 0x8F7E32CE7BEA5C70, 83, 44 }, + { 0xD5D238A4ABE98068, 109, 52 }, + { 0x9F4F2726179A2245, 136, 60 }, + { 0xED63A231D4C4FB27, 162, 68 }, + { 0xB0DE65388CC8ADA8, 189, 76 }, + { 0x83C7088E1AAB65DB, 216, 84 }, + { 0xC45D1DF942711D9A, 242, 92 }, + { 0x924D692CA61BE758, 269, 100 }, + { 0xDA01EE641A708DEA, 295, 108 }, + { 0xA26DA3999AEF774A, 322, 116 }, + { 0xF209787BB47D6B85, 348, 124 }, + { 0xB454E4A179DD1877, 375, 132 }, + { 0x865B86925B9BC5C2, 402, 140 }, + { 0xC83553C5C8965D3D, 428, 148 }, + { 0x952AB45CFA97A0B3, 455, 156 }, + { 0xDE469FBD99A05FE3, 481, 164 }, + { 0xA59BC234DB398C25, 508, 172 }, + { 0xF6C69A72A3989F5C, 534, 180 }, + { 0xB7DCBF5354E9BECE, 561, 188 }, + { 0x88FCF317F22241E2, 588, 196 }, + { 0xCC20CE9BD35C78A5, 614, 204 }, + { 0x98165AF37B2153DF, 641, 212 }, + { 0xE2A0B5DC971F303A, 667, 220 }, + { 0xA8D9D1535CE3B396, 694, 228 }, + { 0xFB9B7CD9A4A7443C, 720, 236 }, + { 0xBB764C4CA7A44410, 747, 244 }, + { 0x8BAB8EEFB6409C1A, 774, 252 }, + { 0xD01FEF10A657842C, 800, 260 }, + { 0x9B10A4E5E9913129, 827, 268 }, + { 0xE7109BFBA19C0C9D, 853, 276 }, + { 0xAC2820D9623BF429, 880, 284 }, + { 0x80444B5E7AA7CF85, 907, 292 }, + { 0xBF21E44003ACDD2D, 933, 300 }, + { 0x8E679C2F5E44FF8F, 960, 308 }, + { 0xD433179D9C8CB841, 986, 316 }, + { 0x9E19DB92B4E31BA9, 1013, 324 }, + } + }; + + // This computation gives exactly the same results for k as + // k = ceil((kAlpha - e - 1) * 0.30102999566398114) + // for |e| <= 1500, but doesn't require floating-point operations. + // NB: log_10(2) ~= 78913 / 2^18 + JSON_ASSERT(e >= -1500); + JSON_ASSERT(e <= 1500); + const int f = kAlpha - e - 1; + const int k = (f * 78913) / (1 << 18) + static_cast(f > 0); + + const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; + JSON_ASSERT(index >= 0); + JSON_ASSERT(static_cast(index) < kCachedPowers.size()); + + const cached_power cached = kCachedPowers[static_cast(index)]; + JSON_ASSERT(kAlpha <= cached.e + e + 64); + JSON_ASSERT(kGamma >= cached.e + e + 64); + + return cached; +} + +/*! +For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. +For n == 0, returns 1 and sets pow10 := 1. +*/ +inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) +{ + // LCOV_EXCL_START + if (n >= 1000000000) + { + pow10 = 1000000000; + return 10; + } + // LCOV_EXCL_STOP + else if (n >= 100000000) + { + pow10 = 100000000; + return 9; + } + else if (n >= 10000000) + { + pow10 = 10000000; + return 8; + } + else if (n >= 1000000) + { + pow10 = 1000000; + return 7; + } + else if (n >= 100000) + { + pow10 = 100000; + return 6; + } + else if (n >= 10000) + { + pow10 = 10000; + return 5; + } + else if (n >= 1000) + { + pow10 = 1000; + return 4; + } + else if (n >= 100) + { + pow10 = 100; + return 3; + } + else if (n >= 10) + { + pow10 = 10; + return 2; + } + else + { + pow10 = 1; + return 1; + } +} + +inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, + std::uint64_t rest, std::uint64_t ten_k) +{ + JSON_ASSERT(len >= 1); + JSON_ASSERT(dist <= delta); + JSON_ASSERT(rest <= delta); + JSON_ASSERT(ten_k > 0); + + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // ten_k + // <------> + // <---- rest ----> + // --------------[------------------+----+--------------]-------------- + // w V + // = buf * 10^k + // + // ten_k represents a unit-in-the-last-place in the decimal representation + // stored in buf. + // Decrement buf by ten_k while this takes buf closer to w. + + // The tests are written in this order to avoid overflow in unsigned + // integer arithmetic. + + while (rest < dist + && delta - rest >= ten_k + && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) + { + JSON_ASSERT(buf[len - 1] != '0'); + buf[len - 1]--; + rest += ten_k; + } +} + +/*! +Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. +M- and M+ must be normalized and share the same exponent -60 <= e <= -32. +*/ +inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, + diyfp M_minus, diyfp w, diyfp M_plus) +{ + static_assert(kAlpha >= -60, "internal error"); + static_assert(kGamma <= -32, "internal error"); + + // Generates the digits (and the exponent) of a decimal floating-point + // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's + // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. + // + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // Grisu2 generates the digits of M+ from left to right and stops as soon as + // V is in [M-,M+]. + + JSON_ASSERT(M_plus.e >= kAlpha); + JSON_ASSERT(M_plus.e <= kGamma); + + std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) + std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) + + // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): + // + // M+ = f * 2^e + // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e + // = ((p1 ) * 2^-e + (p2 )) * 2^e + // = p1 + p2 * 2^e + + const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); + + auto p1 = static_cast(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) + std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e + + // 1) + // + // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] + + JSON_ASSERT(p1 > 0); + + std::uint32_t pow10; + const int k = find_largest_pow10(p1, pow10); + + // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) + // + // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) + // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) + // + // M+ = p1 + p2 * 2^e + // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e + // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e + // = d[k-1] * 10^(k-1) + ( rest) * 2^e + // + // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) + // + // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] + // + // but stop as soon as + // + // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e + + int n = k; + while (n > 0) + { + // Invariants: + // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) + // pow10 = 10^(n-1) <= p1 < 10^n + // + const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) + const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) + // + // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e + // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) + // + p1 = r; + n--; + // + // M+ = buffer * 10^n + (p1 + p2 * 2^e) + // pow10 = 10^n + // + + // Now check if enough digits have been generated. + // Compute + // + // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e + // + // Note: + // Since rest and delta share the same exponent e, it suffices to + // compare the significands. + const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; + if (rest <= delta) + { + // V = buffer * 10^n, with M- <= V <= M+. + + decimal_exponent += n; + + // We may now just stop. But instead look if the buffer could be + // decremented to bring V closer to w. + // + // pow10 = 10^n is now 1 ulp in the decimal representation V. + // The rounding procedure works with diyfp's with an implicit + // exponent of e. + // + // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e + // + const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; + grisu2_round(buffer, length, dist, delta, rest, ten_n); + + return; + } + + pow10 /= 10; + // + // pow10 = 10^(n-1) <= p1 < 10^n + // Invariants restored. + } + + // 2) + // + // The digits of the integral part have been generated: + // + // M+ = d[k-1]...d[1]d[0] + p2 * 2^e + // = buffer + p2 * 2^e + // + // Now generate the digits of the fractional part p2 * 2^e. + // + // Note: + // No decimal point is generated: the exponent is adjusted instead. + // + // p2 actually represents the fraction + // + // p2 * 2^e + // = p2 / 2^-e + // = d[-1] / 10^1 + d[-2] / 10^2 + ... + // + // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) + // + // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m + // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) + // + // using + // + // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) + // = ( d) * 2^-e + ( r) + // + // or + // 10^m * p2 * 2^e = d + r * 2^e + // + // i.e. + // + // M+ = buffer + p2 * 2^e + // = buffer + 10^-m * (d + r * 2^e) + // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e + // + // and stop as soon as 10^-m * r * 2^e <= delta * 2^e + + JSON_ASSERT(p2 > delta); + + int m = 0; + for (;;) + { + // Invariant: + // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e + // = buffer * 10^-m + 10^-m * (p2 ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e + // + JSON_ASSERT(p2 <= (std::numeric_limits::max)() / 10); + p2 *= 10; + const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e + const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e + // + // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) + // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + p2 = r; + m++; + // + // M+ = buffer * 10^-m + 10^-m * p2 * 2^e + // Invariant restored. + + // Check if enough digits have been generated. + // + // 10^-m * p2 * 2^e <= delta * 2^e + // p2 * 2^e <= 10^m * delta * 2^e + // p2 <= 10^m * delta + delta *= 10; + dist *= 10; + if (p2 <= delta) + { + break; + } + } + + // V = buffer * 10^-m, with M- <= V <= M+. + + decimal_exponent -= m; + + // 1 ulp in the decimal representation is now 10^-m. + // Since delta and dist are now scaled by 10^m, we need to do the + // same with ulp in order to keep the units in sync. + // + // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e + // + const std::uint64_t ten_m = one.f; + grisu2_round(buffer, length, dist, delta, p2, ten_m); + + // By construction this algorithm generates the shortest possible decimal + // number (Loitsch, Theorem 6.2) which rounds back to w. + // For an input number of precision p, at least + // + // N = 1 + ceil(p * log_10(2)) + // + // decimal digits are sufficient to identify all binary floating-point + // numbers (Matula, "In-and-Out conversions"). + // This implies that the algorithm does not produce more than N decimal + // digits. + // + // N = 17 for p = 53 (IEEE double precision) + // N = 9 for p = 24 (IEEE single precision) +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +JSON_HEDLEY_NON_NULL(1) +inline void grisu2(char* buf, int& len, int& decimal_exponent, + diyfp m_minus, diyfp v, diyfp m_plus) +{ + JSON_ASSERT(m_plus.e == m_minus.e); + JSON_ASSERT(m_plus.e == v.e); + + // --------(-----------------------+-----------------------)-------- (A) + // m- v m+ + // + // --------------------(-----------+-----------------------)-------- (B) + // m- v m+ + // + // First scale v (and m- and m+) such that the exponent is in the range + // [alpha, gamma]. + + const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); + + const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k + + // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] + const diyfp w = diyfp::mul(v, c_minus_k); + const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); + const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); + + // ----(---+---)---------------(---+---)---------------(---+---)---- + // w- w w+ + // = c*m- = c*v = c*m+ + // + // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and + // w+ are now off by a small amount. + // In fact: + // + // w - v * 10^k < 1 ulp + // + // To account for this inaccuracy, add resp. subtract 1 ulp. + // + // --------+---[---------------(---+---)---------------]---+-------- + // w- M- w M+ w+ + // + // Now any number in [M-, M+] (bounds included) will round to w when input, + // regardless of how the input rounding algorithm breaks ties. + // + // And digit_gen generates the shortest possible such number in [M-, M+]. + // Note that this does not mean that Grisu2 always generates the shortest + // possible number in the interval (m-, m+). + const diyfp M_minus(w_minus.f + 1, w_minus.e); + const diyfp M_plus (w_plus.f - 1, w_plus.e ); + + decimal_exponent = -cached.k; // = -(-k) = k + + grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +template +JSON_HEDLEY_NON_NULL(1) +void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) +{ + static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, + "internal error: not enough precision"); + + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // If the neighbors (and boundaries) of 'value' are always computed for double-precision + // numbers, all float's can be recovered using strtod (and strtof). However, the resulting + // decimal representations are not exactly "short". + // + // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) + // says "value is converted to a string as if by std::sprintf in the default ("C") locale" + // and since sprintf promotes float's to double's, I think this is exactly what 'std::to_chars' + // does. + // On the other hand, the documentation for 'std::to_chars' requires that "parsing the + // representation using the corresponding std::from_chars function recovers value exactly". That + // indicates that single precision floating-point numbers should be recovered using + // 'std::strtof'. + // + // NB: If the neighbors are computed for single-precision numbers, there is a single float + // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision + // value is off by 1 ulp. +#if 0 + const boundaries w = compute_boundaries(static_cast(value)); +#else + const boundaries w = compute_boundaries(value); +#endif + + grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); +} + +/*! +@brief appends a decimal representation of e to buf +@return a pointer to the element following the exponent. +@pre -1000 < e < 1000 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* append_exponent(char* buf, int e) +{ + JSON_ASSERT(e > -1000); + JSON_ASSERT(e < 1000); + + if (e < 0) + { + e = -e; + *buf++ = '-'; + } + else + { + *buf++ = '+'; + } + + auto k = static_cast(e); + if (k < 10) + { + // Always print at least two digits in the exponent. + // This is for compatibility with printf("%g"). + *buf++ = '0'; + *buf++ = static_cast('0' + k); + } + else if (k < 100) + { + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + else + { + *buf++ = static_cast('0' + k / 100); + k %= 100; + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + + return buf; +} + +/*! +@brief prettify v = buf * 10^decimal_exponent + +If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point +notation. Otherwise it will be printed in exponential notation. + +@pre min_exp < 0 +@pre max_exp > 0 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* format_buffer(char* buf, int len, int decimal_exponent, + int min_exp, int max_exp) +{ + JSON_ASSERT(min_exp < 0); + JSON_ASSERT(max_exp > 0); + + const int k = len; + const int n = len + decimal_exponent; + + // v = buf * 10^(n-k) + // k is the length of the buffer (number of decimal digits) + // n is the position of the decimal point relative to the start of the buffer. + + if (k <= n && n <= max_exp) + { + // digits[000] + // len <= max_exp + 2 + + std::memset(buf + k, '0', static_cast(n) - static_cast(k)); + // Make it look like a floating-point number (#362, #378) + buf[n + 0] = '.'; + buf[n + 1] = '0'; + return buf + (static_cast(n) + 2); + } + + if (0 < n && n <= max_exp) + { + // dig.its + // len <= max_digits10 + 1 + + JSON_ASSERT(k > n); + + std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); + buf[n] = '.'; + return buf + (static_cast(k) + 1U); + } + + if (min_exp < n && n <= 0) + { + // 0.[000]digits + // len <= 2 + (-min_exp - 1) + max_digits10 + + std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); + buf[0] = '0'; + buf[1] = '.'; + std::memset(buf + 2, '0', static_cast(-n)); + return buf + (2U + static_cast(-n) + static_cast(k)); + } + + if (k == 1) + { + // dE+123 + // len <= 1 + 5 + + buf += 1; + } + else + { + // d.igitsE+123 + // len <= max_digits10 + 1 + 5 + + std::memmove(buf + 2, buf + 1, static_cast(k) - 1); + buf[1] = '.'; + buf += 1 + static_cast(k); + } + + *buf++ = 'e'; + return append_exponent(buf, n - 1); +} + +} // namespace dtoa_impl + +/*! +@brief generates a decimal representation of the floating-point number value in [first, last). + +The format of the resulting decimal representation is similar to printf's %g +format. Returns an iterator pointing past-the-end of the decimal representation. + +@note The input number must be finite, i.e. NaN's and Inf's are not supported. +@note The buffer must be large enough. +@note The result is NOT null-terminated. +*/ +template +JSON_HEDLEY_NON_NULL(1, 2) +JSON_HEDLEY_RETURNS_NON_NULL +char* to_chars(char* first, const char* last, FloatType value) +{ + static_cast(last); // maybe unused - fix warning + JSON_ASSERT(std::isfinite(value)); + + // Use signbit(value) instead of (value < 0) since signbit works for -0. + if (std::signbit(value)) + { + value = -value; + *first++ = '-'; + } + + if (value == 0) // +-0 + { + *first++ = '0'; + // Make it look like a floating-point number (#362, #378) + *first++ = '.'; + *first++ = '0'; + return first; + } + + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10); + + // Compute v = buffer * 10^decimal_exponent. + // The decimal digits are stored in the buffer, which needs to be interpreted + // as an unsigned decimal integer. + // len is the length of the buffer, i.e. the number of decimal digits. + int len = 0; + int decimal_exponent = 0; + dtoa_impl::grisu2(first, len, decimal_exponent, value); + + JSON_ASSERT(len <= std::numeric_limits::max_digits10); + + // Format the buffer like printf("%.*g", prec, value) + constexpr int kMinExp = -4; + // Use digits10 here to increase compatibility with version 2. + constexpr int kMaxExp = std::numeric_limits::digits10; + + JSON_ASSERT(last - first >= kMaxExp + 2); + JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits::max_digits10); + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10 + 6); + + return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); +} + +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/////////////////// +// serialization // +/////////////////// + +/// how to treat decoding errors +enum class error_handler_t +{ + strict, ///< throw a type_error exception in case of invalid UTF-8 + replace, ///< replace invalid UTF-8 sequences with U+FFFD + ignore ///< ignore invalid UTF-8 sequences +}; + +template +class serializer +{ + using string_t = typename BasicJsonType::string_t; + using number_float_t = typename BasicJsonType::number_float_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using binary_char_t = typename BasicJsonType::binary_t::value_type; + static constexpr std::uint8_t UTF8_ACCEPT = 0; + static constexpr std::uint8_t UTF8_REJECT = 1; + + public: + /*! + @param[in] s output stream to serialize to + @param[in] ichar indentation character to use + @param[in] error_handler_ how to react on decoding errors + */ + serializer(output_adapter_t s, const char ichar, + error_handler_t error_handler_ = error_handler_t::strict) + : o(std::move(s)) + , loc(std::localeconv()) + , thousands_sep(loc->thousands_sep == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->thousands_sep))) + , decimal_point(loc->decimal_point == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->decimal_point))) + , indent_char(ichar) + , indent_string(512, indent_char) + , error_handler(error_handler_) + {} + + // delete because of pointer members + serializer(const serializer&) = delete; + serializer& operator=(const serializer&) = delete; + serializer(serializer&&) = delete; + serializer& operator=(serializer&&) = delete; + ~serializer() = default; + + /*! + @brief internal implementation of the serialization function + + This function is called by the public member function dump and organizes + the serialization internally. The indentation level is propagated as + additional parameter. In case of arrays and objects, the function is + called recursively. + + - strings and object keys are escaped using `escape_string()` + - integer numbers are converted implicitly via `operator<<` + - floating-point numbers are converted to a string using `"%g"` format + - binary values are serialized as objects containing the subtype and the + byte array + + @param[in] val value to serialize + @param[in] pretty_print whether the output shall be pretty-printed + @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters + in the output are escaped with `\uXXXX` sequences, and the result consists + of ASCII characters only. + @param[in] indent_step the indent level + @param[in] current_indent the current indent level (only used internally) + */ + void dump(const BasicJsonType& val, + const bool pretty_print, + const bool ensure_ascii, + const unsigned int indent_step, + const unsigned int current_indent = 0) + { + switch (val.m_type) + { + case value_t::object: + { + if (val.m_value.object->empty()) + { + o->write_characters("{}", 2); + return; + } + + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + // first n-1 elements + auto i = val.m_value.object->cbegin(); + for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) + { + o->write_characters(indent_string.c_str(), new_indent); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\": ", 3); + dump(i->second, true, ensure_ascii, indent_step, new_indent); + o->write_characters(",\n", 2); + } + + // last element + JSON_ASSERT(i != val.m_value.object->cend()); + JSON_ASSERT(std::next(i) == val.m_value.object->cend()); + o->write_characters(indent_string.c_str(), new_indent); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\": ", 3); + dump(i->second, true, ensure_ascii, indent_step, new_indent); + + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_character('{'); + + // first n-1 elements + auto i = val.m_value.object->cbegin(); + for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) + { + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\":", 2); + dump(i->second, false, ensure_ascii, indent_step, current_indent); + o->write_character(','); + } + + // last element + JSON_ASSERT(i != val.m_value.object->cend()); + JSON_ASSERT(std::next(i) == val.m_value.object->cend()); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\":", 2); + dump(i->second, false, ensure_ascii, indent_step, current_indent); + + o->write_character('}'); + } + + return; + } + + case value_t::array: + { + if (val.m_value.array->empty()) + { + o->write_characters("[]", 2); + return; + } + + if (pretty_print) + { + o->write_characters("[\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + // first n-1 elements + for (auto i = val.m_value.array->cbegin(); + i != val.m_value.array->cend() - 1; ++i) + { + o->write_characters(indent_string.c_str(), new_indent); + dump(*i, true, ensure_ascii, indent_step, new_indent); + o->write_characters(",\n", 2); + } + + // last element + JSON_ASSERT(!val.m_value.array->empty()); + o->write_characters(indent_string.c_str(), new_indent); + dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent); + + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character(']'); + } + else + { + o->write_character('['); + + // first n-1 elements + for (auto i = val.m_value.array->cbegin(); + i != val.m_value.array->cend() - 1; ++i) + { + dump(*i, false, ensure_ascii, indent_step, current_indent); + o->write_character(','); + } + + // last element + JSON_ASSERT(!val.m_value.array->empty()); + dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent); + + o->write_character(']'); + } + + return; + } + + case value_t::string: + { + o->write_character('\"'); + dump_escaped(*val.m_value.string, ensure_ascii); + o->write_character('\"'); + return; + } + + case value_t::binary: + { + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"bytes\": [", 10); + + if (!val.m_value.binary->empty()) + { + for (auto i = val.m_value.binary->cbegin(); + i != val.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_characters(", ", 2); + } + dump_integer(val.m_value.binary->back()); + } + + o->write_characters("],\n", 3); + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"subtype\": ", 11); + if (val.m_value.binary->has_subtype()) + { + dump_integer(val.m_value.binary->subtype()); + } + else + { + o->write_characters("null", 4); + } + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_characters("{\"bytes\":[", 10); + + if (!val.m_value.binary->empty()) + { + for (auto i = val.m_value.binary->cbegin(); + i != val.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_character(','); + } + dump_integer(val.m_value.binary->back()); + } + + o->write_characters("],\"subtype\":", 12); + if (val.m_value.binary->has_subtype()) + { + dump_integer(val.m_value.binary->subtype()); + o->write_character('}'); + } + else + { + o->write_characters("null}", 5); + } + } + return; + } + + case value_t::boolean: + { + if (val.m_value.boolean) + { + o->write_characters("true", 4); + } + else + { + o->write_characters("false", 5); + } + return; + } + + case value_t::number_integer: + { + dump_integer(val.m_value.number_integer); + return; + } + + case value_t::number_unsigned: + { + dump_integer(val.m_value.number_unsigned); + return; + } + + case value_t::number_float: + { + dump_float(val.m_value.number_float); + return; + } + + case value_t::discarded: + { + o->write_characters("", 11); + return; + } + + case value_t::null: + { + o->write_characters("null", 4); + return; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + } + + private: + /*! + @brief dump escaped string + + Escape a string by replacing certain special characters by a sequence of an + escape character (backslash) and another character and other control + characters by a sequence of "\u" followed by a four-digit hex + representation. The escaped string is written to output stream @a o. + + @param[in] s the string to escape + @param[in] ensure_ascii whether to escape non-ASCII characters with + \uXXXX sequences + + @complexity Linear in the length of string @a s. + */ + void dump_escaped(const string_t& s, const bool ensure_ascii) + { + std::uint32_t codepoint; + std::uint8_t state = UTF8_ACCEPT; + std::size_t bytes = 0; // number of bytes written to string_buffer + + // number of bytes written at the point of the last valid byte + std::size_t bytes_after_last_accept = 0; + std::size_t undumped_chars = 0; + + for (std::size_t i = 0; i < s.size(); ++i) + { + const auto byte = static_cast(s[i]); + + switch (decode(state, codepoint, byte)) + { + case UTF8_ACCEPT: // decode found a new code point + { + switch (codepoint) + { + case 0x08: // backspace + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'b'; + break; + } + + case 0x09: // horizontal tab + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 't'; + break; + } + + case 0x0A: // newline + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'n'; + break; + } + + case 0x0C: // formfeed + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'f'; + break; + } + + case 0x0D: // carriage return + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'r'; + break; + } + + case 0x22: // quotation mark + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = '\"'; + break; + } + + case 0x5C: // reverse solidus + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = '\\'; + break; + } + + default: + { + // escape control characters (0x00..0x1F) or, if + // ensure_ascii parameter is used, non-ASCII characters + if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F))) + { + if (codepoint <= 0xFFFF) + { + (std::snprintf)(string_buffer.data() + bytes, 7, "\\u%04x", + static_cast(codepoint)); + bytes += 6; + } + else + { + (std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", + static_cast(0xD7C0u + (codepoint >> 10u)), + static_cast(0xDC00u + (codepoint & 0x3FFu))); + bytes += 12; + } + } + else + { + // copy byte to buffer (all previous bytes + // been copied have in default case above) + string_buffer[bytes++] = s[i]; + } + break; + } + } + + // write buffer and reset index; there must be 13 bytes + // left, as this is the maximal number of bytes to be + // written ("\uxxxx\uxxxx\0") for one code point + if (string_buffer.size() - bytes < 13) + { + o->write_characters(string_buffer.data(), bytes); + bytes = 0; + } + + // remember the byte position of this accept + bytes_after_last_accept = bytes; + undumped_chars = 0; + break; + } + + case UTF8_REJECT: // decode found invalid UTF-8 byte + { + switch (error_handler) + { + case error_handler_t::strict: + { + std::string sn(3, '\0'); + (std::snprintf)(&sn[0], sn.size(), "%.2X", byte); + JSON_THROW(type_error::create(316, "invalid UTF-8 byte at index " + std::to_string(i) + ": 0x" + sn)); + } + + case error_handler_t::ignore: + case error_handler_t::replace: + { + // in case we saw this character the first time, we + // would like to read it again, because the byte + // may be OK for itself, but just not OK for the + // previous sequence + if (undumped_chars > 0) + { + --i; + } + + // reset length buffer to the last accepted index; + // thus removing/ignoring the invalid characters + bytes = bytes_after_last_accept; + + if (error_handler == error_handler_t::replace) + { + // add a replacement character + if (ensure_ascii) + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'u'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'd'; + } + else + { + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xEF'); + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBF'); + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBD'); + } + + // write buffer and reset index; there must be 13 bytes + // left, as this is the maximal number of bytes to be + // written ("\uxxxx\uxxxx\0") for one code point + if (string_buffer.size() - bytes < 13) + { + o->write_characters(string_buffer.data(), bytes); + bytes = 0; + } + + bytes_after_last_accept = bytes; + } + + undumped_chars = 0; + + // continue processing the string + state = UTF8_ACCEPT; + break; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + break; + } + + default: // decode found yet incomplete multi-byte code point + { + if (!ensure_ascii) + { + // code point will not be escaped - copy byte to buffer + string_buffer[bytes++] = s[i]; + } + ++undumped_chars; + break; + } + } + } + + // we finished processing the string + if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT)) + { + // write buffer + if (bytes > 0) + { + o->write_characters(string_buffer.data(), bytes); + } + } + else + { + // we finish reading, but do not accept: string was incomplete + switch (error_handler) + { + case error_handler_t::strict: + { + std::string sn(3, '\0'); + (std::snprintf)(&sn[0], sn.size(), "%.2X", static_cast(s.back())); + JSON_THROW(type_error::create(316, "incomplete UTF-8 string; last byte: 0x" + sn)); + } + + case error_handler_t::ignore: + { + // write all accepted bytes + o->write_characters(string_buffer.data(), bytes_after_last_accept); + break; + } + + case error_handler_t::replace: + { + // write all accepted bytes + o->write_characters(string_buffer.data(), bytes_after_last_accept); + // add a replacement character + if (ensure_ascii) + { + o->write_characters("\\ufffd", 6); + } + else + { + o->write_characters("\xEF\xBF\xBD", 3); + } + break; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + } + } + + /*! + @brief count digits + + Count the number of decimal (base 10) digits for an input unsigned integer. + + @param[in] x unsigned integer number to count its digits + @return number of decimal digits + */ + inline unsigned int count_digits(number_unsigned_t x) noexcept + { + unsigned int n_digits = 1; + for (;;) + { + if (x < 10) + { + return n_digits; + } + if (x < 100) + { + return n_digits + 1; + } + if (x < 1000) + { + return n_digits + 2; + } + if (x < 10000) + { + return n_digits + 3; + } + x = x / 10000u; + n_digits += 4; + } + } + + /*! + @brief dump an integer + + Dump a given integer to output stream @a o. Works internally with + @a number_buffer. + + @param[in] x integer number (signed or unsigned) to dump + @tparam NumberType either @a number_integer_t or @a number_unsigned_t + */ + template < typename NumberType, detail::enable_if_t < + std::is_same::value || + std::is_same::value || + std::is_same::value, + int > = 0 > + void dump_integer(NumberType x) + { + static constexpr std::array, 100> digits_to_99 + { + { + {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}}, + {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}}, + {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}}, + {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}}, + {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}}, + {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}}, + {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}}, + {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}}, + {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}}, + {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}}, + } + }; + + // special case for "0" + if (x == 0) + { + o->write_character('0'); + return; + } + + // use a pointer to fill the buffer + auto buffer_ptr = number_buffer.begin(); + + const bool is_negative = std::is_same::value && !(x >= 0); // see issue #755 + number_unsigned_t abs_value; + + unsigned int n_chars; + + if (is_negative) + { + *buffer_ptr = '-'; + abs_value = remove_sign(static_cast(x)); + + // account one more byte for the minus sign + n_chars = 1 + count_digits(abs_value); + } + else + { + abs_value = static_cast(x); + n_chars = count_digits(abs_value); + } + + // spare 1 byte for '\0' + JSON_ASSERT(n_chars < number_buffer.size() - 1); + + // jump to the end to generate the string from backward + // so we later avoid reversing the result + buffer_ptr += n_chars; + + // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu + // See: https://www.youtube.com/watch?v=o4-CwDo2zpg + while (abs_value >= 100) + { + const auto digits_index = static_cast((abs_value % 100)); + abs_value /= 100; + *(--buffer_ptr) = digits_to_99[digits_index][1]; + *(--buffer_ptr) = digits_to_99[digits_index][0]; + } + + if (abs_value >= 10) + { + const auto digits_index = static_cast(abs_value); + *(--buffer_ptr) = digits_to_99[digits_index][1]; + *(--buffer_ptr) = digits_to_99[digits_index][0]; + } + else + { + *(--buffer_ptr) = static_cast('0' + abs_value); + } + + o->write_characters(number_buffer.data(), n_chars); + } + + /*! + @brief dump a floating-point number + + Dump a given floating-point number to output stream @a o. Works internally + with @a number_buffer. + + @param[in] x floating-point number to dump + */ + void dump_float(number_float_t x) + { + // NaN / inf + if (!std::isfinite(x)) + { + o->write_characters("null", 4); + return; + } + + // If number_float_t is an IEEE-754 single or double precision number, + // use the Grisu2 algorithm to produce short numbers which are + // guaranteed to round-trip, using strtof and strtod, resp. + // + // NB: The test below works if == . + static constexpr bool is_ieee_single_or_double + = (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 24 && std::numeric_limits::max_exponent == 128) || + (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 53 && std::numeric_limits::max_exponent == 1024); + + dump_float(x, std::integral_constant()); + } + + void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/) + { + char* begin = number_buffer.data(); + char* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x); + + o->write_characters(begin, static_cast(end - begin)); + } + + void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/) + { + // get number of digits for a float -> text -> float round-trip + static constexpr auto d = std::numeric_limits::max_digits10; + + // the actual conversion + std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), "%.*g", d, x); + + // negative value indicates an error + JSON_ASSERT(len > 0); + // check if buffer was large enough + JSON_ASSERT(static_cast(len) < number_buffer.size()); + + // erase thousands separator + if (thousands_sep != '\0') + { + const auto end = std::remove(number_buffer.begin(), + number_buffer.begin() + len, thousands_sep); + std::fill(end, number_buffer.end(), '\0'); + JSON_ASSERT((end - number_buffer.begin()) <= len); + len = (end - number_buffer.begin()); + } + + // convert decimal point to '.' + if (decimal_point != '\0' && decimal_point != '.') + { + const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point); + if (dec_pos != number_buffer.end()) + { + *dec_pos = '.'; + } + } + + o->write_characters(number_buffer.data(), static_cast(len)); + + // determine if need to append ".0" + const bool value_is_int_like = + std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, + [](char c) + { + return c == '.' || c == 'e'; + }); + + if (value_is_int_like) + { + o->write_characters(".0", 2); + } + } + + /*! + @brief check whether a string is UTF-8 encoded + + The function checks each byte of a string whether it is UTF-8 encoded. The + result of the check is stored in the @a state parameter. The function must + be called initially with state 0 (accept). State 1 means the string must + be rejected, because the current byte is not allowed. If the string is + completely processed, but the state is non-zero, the string ended + prematurely; that is, the last byte indicated more bytes should have + followed. + + @param[in,out] state the state of the decoding + @param[in,out] codep codepoint (valid only if resulting state is UTF8_ACCEPT) + @param[in] byte next byte to decode + @return new state + + @note The function has been edited: a std::array is used. + + @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann + @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ + */ + static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept + { + static const std::array utf8d = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF + 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF + 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF + 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF + 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2 + 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4 + 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6 + 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8 + } + }; + + const std::uint8_t type = utf8d[byte]; + + codep = (state != UTF8_ACCEPT) + ? (byte & 0x3fu) | (codep << 6u) + : (0xFFu >> type) & (byte); + + std::size_t index = 256u + static_cast(state) * 16u + static_cast(type); + JSON_ASSERT(index < 400); + state = utf8d[index]; + return state; + } + + /* + * Overload to make the compiler happy while it is instantiating + * dump_integer for number_unsigned_t. + * Must never be called. + */ + number_unsigned_t remove_sign(number_unsigned_t x) + { + JSON_ASSERT(false); // LCOV_EXCL_LINE + return x; // LCOV_EXCL_LINE + } + + /* + * Helper function for dump_integer + * + * This function takes a negative signed integer and returns its absolute + * value as unsigned integer. The plus/minus shuffling is necessary as we can + * not directly remove the sign of an arbitrary signed integer as the + * absolute values of INT_MIN and INT_MAX are usually not the same. See + * #1708 for details. + */ + inline number_unsigned_t remove_sign(number_integer_t x) noexcept + { + JSON_ASSERT(x < 0 && x < (std::numeric_limits::max)()); + return static_cast(-(x + 1)) + 1; + } + + private: + /// the output of the serializer + output_adapter_t o = nullptr; + + /// a (hopefully) large enough character buffer + std::array number_buffer{{}}; + + /// the locale + const std::lconv* loc = nullptr; + /// the locale's thousand separator character + const char thousands_sep = '\0'; + /// the locale's decimal point character + const char decimal_point = '\0'; + + /// string buffer + std::array string_buffer{{}}; + + /// the indentation character + const char indent_char; + /// the indentation string + string_t indent_string; + + /// error_handler how to react on decoding errors + const error_handler_t error_handler; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + + +#include // less +#include // allocator +#include // pair +#include // vector + +namespace nlohmann +{ + +/// ordered_map: a minimal map-like container that preserves insertion order +/// for use within nlohmann::basic_json +template , + class Allocator = std::allocator>> + struct ordered_map : std::vector, Allocator> +{ + using key_type = Key; + using mapped_type = T; + using Container = std::vector, Allocator>; + using typename Container::iterator; + using typename Container::const_iterator; + using typename Container::size_type; + using typename Container::value_type; + + // Explicit constructors instead of `using Container::Container` + // otherwise older compilers choke on it (GCC <= 5.5, xcode <= 9.4) + ordered_map(const Allocator& alloc = Allocator()) : Container{alloc} {} + template + ordered_map(It first, It last, const Allocator& alloc = Allocator()) + : Container{first, last, alloc} {} + ordered_map(std::initializer_list init, const Allocator& alloc = Allocator() ) + : Container{init, alloc} {} + + std::pair emplace(const key_type& key, T&& t) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return {it, false}; + } + } + Container::emplace_back(key, t); + return {--this->end(), true}; + } + + T& operator[](const Key& key) + { + return emplace(key, T{}).first->second; + } + + const T& operator[](const Key& key) const + { + return at(key); + } + + T& at(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it->second; + } + } + + throw std::out_of_range("key not found"); + } + + const T& at(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it->second; + } + } + + throw std::out_of_range("key not found"); + } + + size_type erase(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + // Since we cannot move const Keys, re-construct them in place + for (auto next = it; ++next != this->end(); ++it) + { + it->~value_type(); // Destroy but keep allocation + new (&*it) value_type{std::move(*next)}; + } + Container::pop_back(); + return 1; + } + } + return 0; + } + + iterator erase(iterator pos) + { + auto it = pos; + + // Since we cannot move const Keys, re-construct them in place + for (auto next = it; ++next != this->end(); ++it) + { + it->~value_type(); // Destroy but keep allocation + new (&*it) value_type{std::move(*next)}; + } + Container::pop_back(); + return pos; + } + + size_type count(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return 1; + } + } + return 0; + } + + iterator find(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it; + } + } + return Container::end(); + } + + const_iterator find(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it; + } + } + return Container::end(); + } + + std::pair insert( value_type&& value ) + { + return emplace(value.first, std::move(value.second)); + } + + std::pair insert( const value_type& value ) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == value.first) + { + return {it, false}; + } + } + Container::push_back(value); + return {--this->end(), true}; + } +}; + +} // namespace nlohmann + + +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +namespace nlohmann +{ + +/*! +@brief a class to store JSON values + +@tparam ObjectType type for JSON objects (`std::map` by default; will be used +in @ref object_t) +@tparam ArrayType type for JSON arrays (`std::vector` by default; will be used +in @ref array_t) +@tparam StringType type for JSON strings and object keys (`std::string` by +default; will be used in @ref string_t) +@tparam BooleanType type for JSON booleans (`bool` by default; will be used +in @ref boolean_t) +@tparam NumberIntegerType type for JSON integer numbers (`int64_t` by +default; will be used in @ref number_integer_t) +@tparam NumberUnsignedType type for JSON unsigned integer numbers (@c +`uint64_t` by default; will be used in @ref number_unsigned_t) +@tparam NumberFloatType type for JSON floating-point numbers (`double` by +default; will be used in @ref number_float_t) +@tparam BinaryType type for packed binary data for compatibility with binary +serialization formats (`std::vector` by default; will be used in +@ref binary_t) +@tparam AllocatorType type of the allocator to use (`std::allocator` by +default) +@tparam JSONSerializer the serializer to resolve internal calls to `to_json()` +and `from_json()` (@ref adl_serializer by default) + +@requirement The class satisfies the following concept requirements: +- Basic + - [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible): + JSON values can be default constructed. The result will be a JSON null + value. + - [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible): + A JSON value can be constructed from an rvalue argument. + - [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible): + A JSON value can be copy-constructed from an lvalue expression. + - [MoveAssignable](https://en.cppreference.com/w/cpp/named_req/MoveAssignable): + A JSON value van be assigned from an rvalue argument. + - [CopyAssignable](https://en.cppreference.com/w/cpp/named_req/CopyAssignable): + A JSON value can be copy-assigned from an lvalue expression. + - [Destructible](https://en.cppreference.com/w/cpp/named_req/Destructible): + JSON values can be destructed. +- Layout + - [StandardLayoutType](https://en.cppreference.com/w/cpp/named_req/StandardLayoutType): + JSON values have + [standard layout](https://en.cppreference.com/w/cpp/language/data_members#Standard_layout): + All non-static data members are private and standard layout types, the + class has no virtual functions or (virtual) base classes. +- Library-wide + - [EqualityComparable](https://en.cppreference.com/w/cpp/named_req/EqualityComparable): + JSON values can be compared with `==`, see @ref + operator==(const_reference,const_reference). + - [LessThanComparable](https://en.cppreference.com/w/cpp/named_req/LessThanComparable): + JSON values can be compared with `<`, see @ref + operator<(const_reference,const_reference). + - [Swappable](https://en.cppreference.com/w/cpp/named_req/Swappable): + Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of + other compatible types, using unqualified function call @ref swap(). + - [NullablePointer](https://en.cppreference.com/w/cpp/named_req/NullablePointer): + JSON values can be compared against `std::nullptr_t` objects which are used + to model the `null` value. +- Container + - [Container](https://en.cppreference.com/w/cpp/named_req/Container): + JSON values can be used like STL containers and provide iterator access. + - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer); + JSON values can be used like STL containers and provide reverse iterator + access. + +@invariant The member variables @a m_value and @a m_type have the following +relationship: +- If `m_type == value_t::object`, then `m_value.object != nullptr`. +- If `m_type == value_t::array`, then `m_value.array != nullptr`. +- If `m_type == value_t::string`, then `m_value.string != nullptr`. +The invariants are checked by member function assert_invariant(). + +@internal +@note ObjectType trick from https://stackoverflow.com/a/9860911 +@endinternal + +@see [RFC 7159: The JavaScript Object Notation (JSON) Data Interchange +Format](http://rfc7159.net/rfc7159) + +@since version 1.0.0 + +@nosubgrouping +*/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +class basic_json +{ + private: + template friend struct detail::external_constructor; + friend ::nlohmann::json_pointer; + + template + friend class ::nlohmann::detail::parser; + friend ::nlohmann::detail::serializer; + template + friend class ::nlohmann::detail::iter_impl; + template + friend class ::nlohmann::detail::binary_writer; + template + friend class ::nlohmann::detail::binary_reader; + template + friend class ::nlohmann::detail::json_sax_dom_parser; + template + friend class ::nlohmann::detail::json_sax_dom_callback_parser; + + /// workaround type for MSVC + using basic_json_t = NLOHMANN_BASIC_JSON_TPL; + + // convenience aliases for types residing in namespace detail; + using lexer = ::nlohmann::detail::lexer_base; + + template + static ::nlohmann::detail::parser parser( + InputAdapterType adapter, + detail::parser_callback_tcb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false + ) + { + return ::nlohmann::detail::parser(std::move(adapter), + std::move(cb), allow_exceptions, ignore_comments); + } + + using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t; + template + using internal_iterator = ::nlohmann::detail::internal_iterator; + template + using iter_impl = ::nlohmann::detail::iter_impl; + template + using iteration_proxy = ::nlohmann::detail::iteration_proxy; + template using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator; + + template + using output_adapter_t = ::nlohmann::detail::output_adapter_t; + + template + using binary_reader = ::nlohmann::detail::binary_reader; + template using binary_writer = ::nlohmann::detail::binary_writer; + + using serializer = ::nlohmann::detail::serializer; + + public: + using value_t = detail::value_t; + /// JSON Pointer, see @ref nlohmann::json_pointer + using json_pointer = ::nlohmann::json_pointer; + template + using json_serializer = JSONSerializer; + /// how to treat decoding errors + using error_handler_t = detail::error_handler_t; + /// how to treat CBOR tags + using cbor_tag_handler_t = detail::cbor_tag_handler_t; + /// helper type for initializer lists of basic_json values + using initializer_list_t = std::initializer_list>; + + using input_format_t = detail::input_format_t; + /// SAX interface type, see @ref nlohmann::json_sax + using json_sax_t = json_sax; + + //////////////// + // exceptions // + //////////////// + + /// @name exceptions + /// Classes to implement user-defined exceptions. + /// @{ + + /// @copydoc detail::exception + using exception = detail::exception; + /// @copydoc detail::parse_error + using parse_error = detail::parse_error; + /// @copydoc detail::invalid_iterator + using invalid_iterator = detail::invalid_iterator; + /// @copydoc detail::type_error + using type_error = detail::type_error; + /// @copydoc detail::out_of_range + using out_of_range = detail::out_of_range; + /// @copydoc detail::other_error + using other_error = detail::other_error; + + /// @} + + + ///////////////////// + // container types // + ///////////////////// + + /// @name container types + /// The canonic container types to use @ref basic_json like any other STL + /// container. + /// @{ + + /// the type of elements in a basic_json container + using value_type = basic_json; + + /// the type of an element reference + using reference = value_type&; + /// the type of an element const reference + using const_reference = const value_type&; + + /// a type to represent differences between iterators + using difference_type = std::ptrdiff_t; + /// a type to represent container sizes + using size_type = std::size_t; + + /// the allocator type + using allocator_type = AllocatorType; + + /// the type of an element pointer + using pointer = typename std::allocator_traits::pointer; + /// the type of an element const pointer + using const_pointer = typename std::allocator_traits::const_pointer; + + /// an iterator for a basic_json container + using iterator = iter_impl; + /// a const iterator for a basic_json container + using const_iterator = iter_impl; + /// a reverse iterator for a basic_json container + using reverse_iterator = json_reverse_iterator; + /// a const reverse iterator for a basic_json container + using const_reverse_iterator = json_reverse_iterator; + + /// @} + + + /*! + @brief returns the allocator associated with the container + */ + static allocator_type get_allocator() + { + return allocator_type(); + } + + /*! + @brief returns version information on the library + + This function returns a JSON object with information about the library, + including the version number and information on the platform and compiler. + + @return JSON object holding version information + key | description + ----------- | --------------- + `compiler` | Information on the used compiler. It is an object with the following keys: `c++` (the used C++ standard), `family` (the compiler family; possible values are `clang`, `icc`, `gcc`, `ilecpp`, `msvc`, `pgcpp`, `sunpro`, and `unknown`), and `version` (the compiler version). + `copyright` | The copyright line for the library as string. + `name` | The name of the library as string. + `platform` | The used platform as string. Possible values are `win32`, `linux`, `apple`, `unix`, and `unknown`. + `url` | The URL of the project as string. + `version` | The version of the library. It is an object with the following keys: `major`, `minor`, and `patch` as defined by [Semantic Versioning](http://semver.org), and `string` (the version string). + + @liveexample{The following code shows an example output of the `meta()` + function.,meta} + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @complexity Constant. + + @since 2.1.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json meta() + { + basic_json result; + + result["copyright"] = "(C) 2013-2020 Niels Lohmann"; + result["name"] = "JSON for Modern C++"; + result["url"] = "https://github.com/nlohmann/json"; + result["version"]["string"] = + std::to_string(NLOHMANN_JSON_VERSION_MAJOR) + "." + + std::to_string(NLOHMANN_JSON_VERSION_MINOR) + "." + + std::to_string(NLOHMANN_JSON_VERSION_PATCH); + result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR; + result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR; + result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH; + +#ifdef _WIN32 + result["platform"] = "win32"; +#elif defined __linux__ + result["platform"] = "linux"; +#elif defined __APPLE__ + result["platform"] = "apple"; +#elif defined __unix__ + result["platform"] = "unix"; +#else + result["platform"] = "unknown"; +#endif + +#if defined(__ICC) || defined(__INTEL_COMPILER) + result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; +#elif defined(__clang__) + result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}}; +#elif defined(__GNUC__) || defined(__GNUG__) + result["compiler"] = {{"family", "gcc"}, {"version", std::to_string(__GNUC__) + "." + std::to_string(__GNUC_MINOR__) + "." + std::to_string(__GNUC_PATCHLEVEL__)}}; +#elif defined(__HP_cc) || defined(__HP_aCC) + result["compiler"] = "hp" +#elif defined(__IBMCPP__) + result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}}; +#elif defined(_MSC_VER) + result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}}; +#elif defined(__PGI) + result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}}; +#elif defined(__SUNPRO_CC) + result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}}; +#else + result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}}; +#endif + +#ifdef __cplusplus + result["compiler"]["c++"] = std::to_string(__cplusplus); +#else + result["compiler"]["c++"] = "unknown"; +#endif + return result; + } + + + /////////////////////////// + // JSON value data types // + /////////////////////////// + + /// @name JSON value data types + /// The data types to store a JSON value. These types are derived from + /// the template arguments passed to class @ref basic_json. + /// @{ + +#if defined(JSON_HAS_CPP_14) + // Use transparent comparator if possible, combined with perfect forwarding + // on find() and count() calls prevents unnecessary string construction. + using object_comparator_t = std::less<>; +#else + using object_comparator_t = std::less; +#endif + + /*! + @brief a type for an object + + [RFC 7159](http://rfc7159.net/rfc7159) describes JSON objects as follows: + > An object is an unordered collection of zero or more name/value pairs, + > where a name is a string and a value is a string, number, boolean, null, + > object, or array. + + To store objects in C++, a type is defined by the template parameters + described below. + + @tparam ObjectType the container to store objects (e.g., `std::map` or + `std::unordered_map`) + @tparam StringType the type of the keys or names (e.g., `std::string`). + The comparison function `std::less` is used to order elements + inside the container. + @tparam AllocatorType the allocator to use for objects (e.g., + `std::allocator`) + + #### Default type + + With the default values for @a ObjectType (`std::map`), @a StringType + (`std::string`), and @a AllocatorType (`std::allocator`), the default + value for @a object_t is: + + @code {.cpp} + std::map< + std::string, // key_type + basic_json, // value_type + std::less, // key_compare + std::allocator> // allocator_type + > + @endcode + + #### Behavior + + The choice of @a object_t influences the behavior of the JSON class. With + the default type, objects have the following behavior: + + - When all names are unique, objects will be interoperable in the sense + that all software implementations receiving that object will agree on + the name-value mappings. + - When the names within an object are not unique, it is unspecified which + one of the values for a given key will be chosen. For instance, + `{"key": 2, "key": 1}` could be equal to either `{"key": 1}` or + `{"key": 2}`. + - Internally, name/value pairs are stored in lexicographical order of the + names. Objects will also be serialized (see @ref dump) in this order. + For instance, `{"b": 1, "a": 2}` and `{"a": 2, "b": 1}` will be stored + and serialized as `{"a": 2, "b": 1}`. + - When comparing objects, the order of the name/value pairs is irrelevant. + This makes objects interoperable in the sense that they will not be + affected by these differences. For instance, `{"b": 1, "a": 2}` and + `{"a": 2, "b": 1}` will be treated as equal. + + #### Limits + + [RFC 7159](http://rfc7159.net/rfc7159) specifies: + > An implementation may set limits on the maximum depth of nesting. + + In this class, the object's limit of nesting is not explicitly constrained. + However, a maximum depth of nesting may be introduced by the compiler or + runtime environment. A theoretical limit can be queried by calling the + @ref max_size function of a JSON object. + + #### Storage + + Objects are stored as pointers in a @ref basic_json type. That is, for any + access to object values, a pointer of type `object_t*` must be + dereferenced. + + @sa @ref array_t -- type for an array value + + @since version 1.0.0 + + @note The order name/value pairs are added to the object is *not* + preserved by the library. Therefore, iterating an object may return + name/value pairs in a different order than they were originally stored. In + fact, keys will be traversed in alphabetical order as `std::map` with + `std::less` is used by default. Please note this behavior conforms to [RFC + 7159](http://rfc7159.net/rfc7159), because any order implements the + specified "unordered" nature of JSON objects. + */ + using object_t = ObjectType>>; + + /*! + @brief a type for an array + + [RFC 7159](http://rfc7159.net/rfc7159) describes JSON arrays as follows: + > An array is an ordered sequence of zero or more values. + + To store objects in C++, a type is defined by the template parameters + explained below. + + @tparam ArrayType container type to store arrays (e.g., `std::vector` or + `std::list`) + @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`) + + #### Default type + + With the default values for @a ArrayType (`std::vector`) and @a + AllocatorType (`std::allocator`), the default value for @a array_t is: + + @code {.cpp} + std::vector< + basic_json, // value_type + std::allocator // allocator_type + > + @endcode + + #### Limits + + [RFC 7159](http://rfc7159.net/rfc7159) specifies: + > An implementation may set limits on the maximum depth of nesting. + + In this class, the array's limit of nesting is not explicitly constrained. + However, a maximum depth of nesting may be introduced by the compiler or + runtime environment. A theoretical limit can be queried by calling the + @ref max_size function of a JSON array. + + #### Storage + + Arrays are stored as pointers in a @ref basic_json type. That is, for any + access to array values, a pointer of type `array_t*` must be dereferenced. + + @sa @ref object_t -- type for an object value + + @since version 1.0.0 + */ + using array_t = ArrayType>; + + /*! + @brief a type for a string + + [RFC 7159](http://rfc7159.net/rfc7159) describes JSON strings as follows: + > A string is a sequence of zero or more Unicode characters. + + To store objects in C++, a type is defined by the template parameter + described below. Unicode values are split by the JSON class into + byte-sized characters during deserialization. + + @tparam StringType the container to store strings (e.g., `std::string`). + Note this container is used for keys/names in objects, see @ref object_t. + + #### Default type + + With the default values for @a StringType (`std::string`), the default + value for @a string_t is: + + @code {.cpp} + std::string + @endcode + + #### Encoding + + Strings are stored in UTF-8 encoding. Therefore, functions like + `std::string::size()` or `std::string::length()` return the number of + bytes in the string rather than the number of characters or glyphs. + + #### String comparison + + [RFC 7159](http://rfc7159.net/rfc7159) states: + > Software implementations are typically required to test names of object + > members for equality. Implementations that transform the textual + > representation into sequences of Unicode code units and then perform the + > comparison numerically, code unit by code unit, are interoperable in the + > sense that implementations will agree in all cases on equality or + > inequality of two strings. For example, implementations that compare + > strings with escaped characters unconverted may incorrectly find that + > `"a\\b"` and `"a\u005Cb"` are not equal. + + This implementation is interoperable as it does compare strings code unit + by code unit. + + #### Storage + + String values are stored as pointers in a @ref basic_json type. That is, + for any access to string values, a pointer of type `string_t*` must be + dereferenced. + + @since version 1.0.0 + */ + using string_t = StringType; + + /*! + @brief a type for a boolean + + [RFC 7159](http://rfc7159.net/rfc7159) implicitly describes a boolean as a + type which differentiates the two literals `true` and `false`. + + To store objects in C++, a type is defined by the template parameter @a + BooleanType which chooses the type to use. + + #### Default type + + With the default values for @a BooleanType (`bool`), the default value for + @a boolean_t is: + + @code {.cpp} + bool + @endcode + + #### Storage + + Boolean values are stored directly inside a @ref basic_json type. + + @since version 1.0.0 + */ + using boolean_t = BooleanType; + + /*! + @brief a type for a number (integer) + + [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: + > The representation of numbers is similar to that used in most + > programming languages. A number is represented in base 10 using decimal + > digits. It contains an integer component that may be prefixed with an + > optional minus sign, which may be followed by a fraction part and/or an + > exponent part. Leading zeros are not allowed. (...) Numeric values that + > cannot be represented in the grammar below (such as Infinity and NaN) + > are not permitted. + + This description includes both integer and floating-point numbers. + However, C++ allows more precise storage if it is known whether the number + is a signed integer, an unsigned integer or a floating-point number. + Therefore, three different types, @ref number_integer_t, @ref + number_unsigned_t and @ref number_float_t are used. + + To store integer numbers in C++, a type is defined by the template + parameter @a NumberIntegerType which chooses the type to use. + + #### Default type + + With the default values for @a NumberIntegerType (`int64_t`), the default + value for @a number_integer_t is: + + @code {.cpp} + int64_t + @endcode + + #### Default behavior + + - The restrictions about leading zeros is not enforced in C++. Instead, + leading zeros in integer literals lead to an interpretation as octal + number. Internally, the value will be stored as decimal number. For + instance, the C++ integer literal `010` will be serialized to `8`. + During deserialization, leading zeros yield an error. + - Not-a-number (NaN) values will be serialized to `null`. + + #### Limits + + [RFC 7159](http://rfc7159.net/rfc7159) specifies: + > An implementation may set limits on the range and precision of numbers. + + When the default type is used, the maximal integer number that can be + stored is `9223372036854775807` (INT64_MAX) and the minimal integer number + that can be stored is `-9223372036854775808` (INT64_MIN). Integer numbers + that are out of range will yield over/underflow when used in a + constructor. During deserialization, too large or small integer numbers + will be automatically be stored as @ref number_unsigned_t or @ref + number_float_t. + + [RFC 7159](http://rfc7159.net/rfc7159) further states: + > Note that when such software is used, numbers that are integers and are + > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense + > that implementations will agree exactly on their numeric values. + + As this range is a subrange of the exactly supported range [INT64_MIN, + INT64_MAX], this class's integer type is interoperable. + + #### Storage + + Integer number values are stored directly inside a @ref basic_json type. + + @sa @ref number_float_t -- type for number values (floating-point) + + @sa @ref number_unsigned_t -- type for number values (unsigned integer) + + @since version 1.0.0 + */ + using number_integer_t = NumberIntegerType; + + /*! + @brief a type for a number (unsigned) + + [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: + > The representation of numbers is similar to that used in most + > programming languages. A number is represented in base 10 using decimal + > digits. It contains an integer component that may be prefixed with an + > optional minus sign, which may be followed by a fraction part and/or an + > exponent part. Leading zeros are not allowed. (...) Numeric values that + > cannot be represented in the grammar below (such as Infinity and NaN) + > are not permitted. + + This description includes both integer and floating-point numbers. + However, C++ allows more precise storage if it is known whether the number + is a signed integer, an unsigned integer or a floating-point number. + Therefore, three different types, @ref number_integer_t, @ref + number_unsigned_t and @ref number_float_t are used. + + To store unsigned integer numbers in C++, a type is defined by the + template parameter @a NumberUnsignedType which chooses the type to use. + + #### Default type + + With the default values for @a NumberUnsignedType (`uint64_t`), the + default value for @a number_unsigned_t is: + + @code {.cpp} + uint64_t + @endcode + + #### Default behavior + + - The restrictions about leading zeros is not enforced in C++. Instead, + leading zeros in integer literals lead to an interpretation as octal + number. Internally, the value will be stored as decimal number. For + instance, the C++ integer literal `010` will be serialized to `8`. + During deserialization, leading zeros yield an error. + - Not-a-number (NaN) values will be serialized to `null`. + + #### Limits + + [RFC 7159](http://rfc7159.net/rfc7159) specifies: + > An implementation may set limits on the range and precision of numbers. + + When the default type is used, the maximal integer number that can be + stored is `18446744073709551615` (UINT64_MAX) and the minimal integer + number that can be stored is `0`. Integer numbers that are out of range + will yield over/underflow when used in a constructor. During + deserialization, too large or small integer numbers will be automatically + be stored as @ref number_integer_t or @ref number_float_t. + + [RFC 7159](http://rfc7159.net/rfc7159) further states: + > Note that when such software is used, numbers that are integers and are + > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense + > that implementations will agree exactly on their numeric values. + + As this range is a subrange (when considered in conjunction with the + number_integer_t type) of the exactly supported range [0, UINT64_MAX], + this class's integer type is interoperable. + + #### Storage + + Integer number values are stored directly inside a @ref basic_json type. + + @sa @ref number_float_t -- type for number values (floating-point) + @sa @ref number_integer_t -- type for number values (integer) + + @since version 2.0.0 + */ + using number_unsigned_t = NumberUnsignedType; + + /*! + @brief a type for a number (floating-point) + + [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: + > The representation of numbers is similar to that used in most + > programming languages. A number is represented in base 10 using decimal + > digits. It contains an integer component that may be prefixed with an + > optional minus sign, which may be followed by a fraction part and/or an + > exponent part. Leading zeros are not allowed. (...) Numeric values that + > cannot be represented in the grammar below (such as Infinity and NaN) + > are not permitted. + + This description includes both integer and floating-point numbers. + However, C++ allows more precise storage if it is known whether the number + is a signed integer, an unsigned integer or a floating-point number. + Therefore, three different types, @ref number_integer_t, @ref + number_unsigned_t and @ref number_float_t are used. + + To store floating-point numbers in C++, a type is defined by the template + parameter @a NumberFloatType which chooses the type to use. + + #### Default type + + With the default values for @a NumberFloatType (`double`), the default + value for @a number_float_t is: + + @code {.cpp} + double + @endcode + + #### Default behavior + + - The restrictions about leading zeros is not enforced in C++. Instead, + leading zeros in floating-point literals will be ignored. Internally, + the value will be stored as decimal number. For instance, the C++ + floating-point literal `01.2` will be serialized to `1.2`. During + deserialization, leading zeros yield an error. + - Not-a-number (NaN) values will be serialized to `null`. + + #### Limits + + [RFC 7159](http://rfc7159.net/rfc7159) states: + > This specification allows implementations to set limits on the range and + > precision of numbers accepted. Since software that implements IEEE + > 754-2008 binary64 (double precision) numbers is generally available and + > widely used, good interoperability can be achieved by implementations + > that expect no more precision or range than these provide, in the sense + > that implementations will approximate JSON numbers within the expected + > precision. + + This implementation does exactly follow this approach, as it uses double + precision floating-point numbers. Note values smaller than + `-1.79769313486232e+308` and values greater than `1.79769313486232e+308` + will be stored as NaN internally and be serialized to `null`. + + #### Storage + + Floating-point number values are stored directly inside a @ref basic_json + type. + + @sa @ref number_integer_t -- type for number values (integer) + + @sa @ref number_unsigned_t -- type for number values (unsigned integer) + + @since version 1.0.0 + */ + using number_float_t = NumberFloatType; + + /*! + @brief a type for a packed binary type + + This type is a type designed to carry binary data that appears in various + serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and + BSON's generic binary subtype. This type is NOT a part of standard JSON and + exists solely for compatibility with these binary types. As such, it is + simply defined as an ordered sequence of zero or more byte values. + + Additionally, as an implementation detail, the subtype of the binary data is + carried around as a `std::uint8_t`, which is compatible with both of the + binary data formats that use binary subtyping, (though the specific + numbering is incompatible with each other, and it is up to the user to + translate between them). + + [CBOR's RFC 7049](https://tools.ietf.org/html/rfc7049) describes this type + as: + > Major type 2: a byte string. The string's length in bytes is represented + > following the rules for positive integers (major type 0). + + [MessagePack's documentation on the bin type + family](https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family) + describes this type as: + > Bin format family stores an byte array in 2, 3, or 5 bytes of extra bytes + > in addition to the size of the byte array. + + [BSON's specifications](http://bsonspec.org/spec.html) describe several + binary types; however, this type is intended to represent the generic binary + type which has the description: + > Generic binary subtype - This is the most commonly used binary subtype and + > should be the 'default' for drivers and tools. + + None of these impose any limitations on the internal representation other + than the basic unit of storage be some type of array whose parts are + decomposable into bytes. + + The default representation of this binary format is a + `std::vector`, which is a very common way to represent a byte + array in modern C++. + + #### Default type + + The default values for @a BinaryType is `std::vector` + + #### Storage + + Binary Arrays are stored as pointers in a @ref basic_json type. That is, + for any access to array values, a pointer of the type `binary_t*` must be + dereferenced. + + #### Notes on subtypes + + - CBOR + - Binary values are represented as byte strings. No subtypes are + supported and will be ignored when CBOR is written. + - MessagePack + - If a subtype is given and the binary array contains exactly 1, 2, 4, 8, + or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) + is used. For other sizes, the ext family (ext8, ext16, ext32) is used. + The subtype is then added as singed 8-bit integer. + - If no subtype is given, the bin family (bin8, bin16, bin32) is used. + - BSON + - If a subtype is given, it is used and added as unsigned 8-bit integer. + - If no subtype is given, the generic binary subtype 0x00 is used. + + @sa @ref binary -- create a binary array + + @since version 3.8.0 + */ + using binary_t = nlohmann::byte_container_with_subtype; + /// @} + + private: + + /// helper for exception-safe object creation + template + JSON_HEDLEY_RETURNS_NON_NULL + static T* create(Args&& ... args) + { + AllocatorType alloc; + using AllocatorTraits = std::allocator_traits>; + + auto deleter = [&](T * object) + { + AllocatorTraits::deallocate(alloc, object, 1); + }; + std::unique_ptr object(AllocatorTraits::allocate(alloc, 1), deleter); + AllocatorTraits::construct(alloc, object.get(), std::forward(args)...); + JSON_ASSERT(object != nullptr); + return object.release(); + } + + //////////////////////// + // JSON value storage // + //////////////////////// + + /*! + @brief a JSON value + + The actual storage for a JSON value of the @ref basic_json class. This + union combines the different storage types for the JSON value types + defined in @ref value_t. + + JSON type | value_t type | used type + --------- | --------------- | ------------------------ + object | object | pointer to @ref object_t + array | array | pointer to @ref array_t + string | string | pointer to @ref string_t + boolean | boolean | @ref boolean_t + number | number_integer | @ref number_integer_t + number | number_unsigned | @ref number_unsigned_t + number | number_float | @ref number_float_t + binary | binary | pointer to @ref binary_t + null | null | *no value is stored* + + @note Variable-length types (objects, arrays, and strings) are stored as + pointers. The size of the union should not exceed 64 bits if the default + value types are used. + + @since version 1.0.0 + */ + union json_value + { + /// object (stored with pointer to save storage) + object_t* object; + /// array (stored with pointer to save storage) + array_t* array; + /// string (stored with pointer to save storage) + string_t* string; + /// binary (stored with pointer to save storage) + binary_t* binary; + /// boolean + boolean_t boolean; + /// number (integer) + number_integer_t number_integer; + /// number (unsigned integer) + number_unsigned_t number_unsigned; + /// number (floating-point) + number_float_t number_float; + + /// default constructor (for null values) + json_value() = default; + /// constructor for booleans + json_value(boolean_t v) noexcept : boolean(v) {} + /// constructor for numbers (integer) + json_value(number_integer_t v) noexcept : number_integer(v) {} + /// constructor for numbers (unsigned) + json_value(number_unsigned_t v) noexcept : number_unsigned(v) {} + /// constructor for numbers (floating-point) + json_value(number_float_t v) noexcept : number_float(v) {} + /// constructor for empty values of a given type + json_value(value_t t) + { + switch (t) + { + case value_t::object: + { + object = create(); + break; + } + + case value_t::array: + { + array = create(); + break; + } + + case value_t::string: + { + string = create(""); + break; + } + + case value_t::binary: + { + binary = create(); + break; + } + + case value_t::boolean: + { + boolean = boolean_t(false); + break; + } + + case value_t::number_integer: + { + number_integer = number_integer_t(0); + break; + } + + case value_t::number_unsigned: + { + number_unsigned = number_unsigned_t(0); + break; + } + + case value_t::number_float: + { + number_float = number_float_t(0.0); + break; + } + + case value_t::null: + { + object = nullptr; // silence warning, see #821 + break; + } + + default: + { + object = nullptr; // silence warning, see #821 + if (JSON_HEDLEY_UNLIKELY(t == value_t::null)) + { + JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.9.1")); // LCOV_EXCL_LINE + } + break; + } + } + } + + /// constructor for strings + json_value(const string_t& value) + { + string = create(value); + } + + /// constructor for rvalue strings + json_value(string_t&& value) + { + string = create(std::move(value)); + } + + /// constructor for objects + json_value(const object_t& value) + { + object = create(value); + } + + /// constructor for rvalue objects + json_value(object_t&& value) + { + object = create(std::move(value)); + } + + /// constructor for arrays + json_value(const array_t& value) + { + array = create(value); + } + + /// constructor for rvalue arrays + json_value(array_t&& value) + { + array = create(std::move(value)); + } + + /// constructor for binary arrays + json_value(const typename binary_t::container_type& value) + { + binary = create(value); + } + + /// constructor for rvalue binary arrays + json_value(typename binary_t::container_type&& value) + { + binary = create(std::move(value)); + } + + /// constructor for binary arrays (internal type) + json_value(const binary_t& value) + { + binary = create(value); + } + + /// constructor for rvalue binary arrays (internal type) + json_value(binary_t&& value) + { + binary = create(std::move(value)); + } + + void destroy(value_t t) noexcept + { + // flatten the current json_value to a heap-allocated stack + std::vector stack; + + // move the top-level items to stack + if (t == value_t::array) + { + stack.reserve(array->size()); + std::move(array->begin(), array->end(), std::back_inserter(stack)); + } + else if (t == value_t::object) + { + stack.reserve(object->size()); + for (auto&& it : *object) + { + stack.push_back(std::move(it.second)); + } + } + + while (!stack.empty()) + { + // move the last item to local variable to be processed + basic_json current_item(std::move(stack.back())); + stack.pop_back(); + + // if current_item is array/object, move + // its children to the stack to be processed later + if (current_item.is_array()) + { + std::move(current_item.m_value.array->begin(), current_item.m_value.array->end(), + std::back_inserter(stack)); + + current_item.m_value.array->clear(); + } + else if (current_item.is_object()) + { + for (auto&& it : *current_item.m_value.object) + { + stack.push_back(std::move(it.second)); + } + + current_item.m_value.object->clear(); + } + + // it's now safe that current_item get destructed + // since it doesn't have any children + } + + switch (t) + { + case value_t::object: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, object); + std::allocator_traits::deallocate(alloc, object, 1); + break; + } + + case value_t::array: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, array); + std::allocator_traits::deallocate(alloc, array, 1); + break; + } + + case value_t::string: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, string); + std::allocator_traits::deallocate(alloc, string, 1); + break; + } + + case value_t::binary: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, binary); + std::allocator_traits::deallocate(alloc, binary, 1); + break; + } + + default: + { + break; + } + } + } + }; + + /*! + @brief checks the class invariants + + This function asserts the class invariants. It needs to be called at the + end of every constructor to make sure that created objects respect the + invariant. Furthermore, it has to be called each time the type of a JSON + value is changed, because the invariant expresses a relationship between + @a m_type and @a m_value. + */ + void assert_invariant() const noexcept + { + JSON_ASSERT(m_type != value_t::object || m_value.object != nullptr); + JSON_ASSERT(m_type != value_t::array || m_value.array != nullptr); + JSON_ASSERT(m_type != value_t::string || m_value.string != nullptr); + JSON_ASSERT(m_type != value_t::binary || m_value.binary != nullptr); + } + + public: + ////////////////////////// + // JSON parser callback // + ////////////////////////// + + /*! + @brief parser event types + + The parser callback distinguishes the following events: + - `object_start`: the parser read `{` and started to process a JSON object + - `key`: the parser read a key of a value in an object + - `object_end`: the parser read `}` and finished processing a JSON object + - `array_start`: the parser read `[` and started to process a JSON array + - `array_end`: the parser read `]` and finished processing a JSON array + - `value`: the parser finished reading a JSON value + + @image html callback_events.png "Example when certain parse events are triggered" + + @sa @ref parser_callback_t for more information and examples + */ + using parse_event_t = detail::parse_event_t; + + /*! + @brief per-element parser callback type + + With a parser callback function, the result of parsing a JSON text can be + influenced. When passed to @ref parse, it is called on certain events + (passed as @ref parse_event_t via parameter @a event) with a set recursion + depth @a depth and context JSON value @a parsed. The return value of the + callback function is a boolean indicating whether the element that emitted + the callback shall be kept or not. + + We distinguish six scenarios (determined by the event type) in which the + callback function can be called. The following table describes the values + of the parameters @a depth, @a event, and @a parsed. + + parameter @a event | description | parameter @a depth | parameter @a parsed + ------------------ | ----------- | ------------------ | ------------------- + parse_event_t::object_start | the parser read `{` and started to process a JSON object | depth of the parent of the JSON object | a JSON value with type discarded + parse_event_t::key | the parser read a key of a value in an object | depth of the currently parsed JSON object | a JSON string containing the key + parse_event_t::object_end | the parser read `}` and finished processing a JSON object | depth of the parent of the JSON object | the parsed JSON object + parse_event_t::array_start | the parser read `[` and started to process a JSON array | depth of the parent of the JSON array | a JSON value with type discarded + parse_event_t::array_end | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array + parse_event_t::value | the parser finished reading a JSON value | depth of the value | the parsed JSON value + + @image html callback_events.png "Example when certain parse events are triggered" + + Discarding a value (i.e., returning `false`) has different effects + depending on the context in which function was called: + + - Discarded values in structured types are skipped. That is, the parser + will behave as if the discarded value was never read. + - In case a value outside a structured type is skipped, it is replaced + with `null`. This case happens if the top-level element is skipped. + + @param[in] depth the depth of the recursion during parsing + + @param[in] event an event of type parse_event_t indicating the context in + the callback function has been called + + @param[in,out] parsed the current intermediate parse result; note that + writing to this value has no effect for parse_event_t::key events + + @return Whether the JSON value which called the function during parsing + should be kept (`true`) or not (`false`). In the latter case, it is either + skipped completely or replaced by an empty discarded object. + + @sa @ref parse for examples + + @since version 1.0.0 + */ + using parser_callback_t = detail::parser_callback_t; + + ////////////////// + // constructors // + ////////////////// + + /// @name constructors and destructors + /// Constructors of class @ref basic_json, copy/move constructor, copy + /// assignment, static functions creating objects, and the destructor. + /// @{ + + /*! + @brief create an empty value with a given type + + Create an empty JSON value with a given type. The value will be default + initialized with an empty value which depends on the type: + + Value type | initial value + ----------- | ------------- + null | `null` + boolean | `false` + string | `""` + number | `0` + object | `{}` + array | `[]` + binary | empty array + + @param[in] v the type of the value to create + + @complexity Constant. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The following code shows the constructor for different @ref + value_t values,basic_json__value_t} + + @sa @ref clear() -- restores the postcondition of this constructor + + @since version 1.0.0 + */ + basic_json(const value_t v) + : m_type(v), m_value(v) + { + assert_invariant(); + } + + /*! + @brief create a null object + + Create a `null` JSON value. It either takes a null pointer as parameter + (explicitly creating `null`) or no parameter (implicitly creating `null`). + The passed null pointer itself is not read -- it is only used to choose + the right constructor. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this constructor never throws + exceptions. + + @liveexample{The following code shows the constructor with and without a + null pointer parameter.,basic_json__nullptr_t} + + @since version 1.0.0 + */ + basic_json(std::nullptr_t = nullptr) noexcept + : basic_json(value_t::null) + { + assert_invariant(); + } + + /*! + @brief create a JSON value + + This is a "catch all" constructor for all compatible JSON types; that is, + types for which a `to_json()` method exists. The constructor forwards the + parameter @a val to that method (to `json_serializer::to_json` method + with `U = uncvref_t`, to be exact). + + Template type @a CompatibleType includes, but is not limited to, the + following types: + - **arrays**: @ref array_t and all kinds of compatible containers such as + `std::vector`, `std::deque`, `std::list`, `std::forward_list`, + `std::array`, `std::valarray`, `std::set`, `std::unordered_set`, + `std::multiset`, and `std::unordered_multiset` with a `value_type` from + which a @ref basic_json value can be constructed. + - **objects**: @ref object_t and all kinds of compatible associative + containers such as `std::map`, `std::unordered_map`, `std::multimap`, + and `std::unordered_multimap` with a `key_type` compatible to + @ref string_t and a `value_type` from which a @ref basic_json value can + be constructed. + - **strings**: @ref string_t, string literals, and all compatible string + containers can be used. + - **numbers**: @ref number_integer_t, @ref number_unsigned_t, + @ref number_float_t, and all convertible number types such as `int`, + `size_t`, `int64_t`, `float` or `double` can be used. + - **boolean**: @ref boolean_t / `bool` can be used. + - **binary**: @ref binary_t / `std::vector` may be used, + unfortunately because string literals cannot be distinguished from binary + character arrays by the C++ type system, all types compatible with `const + char*` will be directed to the string constructor instead. This is both + for backwards compatibility, and due to the fact that a binary type is not + a standard JSON type. + + See the examples below. + + @tparam CompatibleType a type such that: + - @a CompatibleType is not derived from `std::istream`, + - @a CompatibleType is not @ref basic_json (to avoid hijacking copy/move + constructors), + - @a CompatibleType is not a different @ref basic_json type (i.e. with different template arguments) + - @a CompatibleType is not a @ref basic_json nested type (e.g., + @ref json_pointer, @ref iterator, etc ...) + - @ref @ref json_serializer has a + `to_json(basic_json_t&, CompatibleType&&)` method + + @tparam U = `uncvref_t` + + @param[in] val the value to be forwarded to the respective constructor + + @complexity Usually linear in the size of the passed @a val, also + depending on the implementation of the called `to_json()` + method. + + @exceptionsafety Depends on the called constructor. For types directly + supported by the library (i.e., all types for which no `to_json()` function + was provided), strong guarantee holds: if an exception is thrown, there are + no changes to any JSON value. + + @liveexample{The following code shows the constructor with several + compatible types.,basic_json__CompatibleType} + + @since version 2.1.0 + */ + template < typename CompatibleType, + typename U = detail::uncvref_t, + detail::enable_if_t < + !detail::is_basic_json::value && detail::is_compatible_type::value, int > = 0 > + basic_json(CompatibleType && val) noexcept(noexcept( + JSONSerializer::to_json(std::declval(), + std::forward(val)))) + { + JSONSerializer::to_json(*this, std::forward(val)); + assert_invariant(); + } + + /*! + @brief create a JSON value from an existing one + + This is a constructor for existing @ref basic_json types. + It does not hijack copy/move constructors, since the parameter has different + template arguments than the current ones. + + The constructor tries to convert the internal @ref m_value of the parameter. + + @tparam BasicJsonType a type such that: + - @a BasicJsonType is a @ref basic_json type. + - @a BasicJsonType has different template arguments than @ref basic_json_t. + + @param[in] val the @ref basic_json value to be converted. + + @complexity Usually linear in the size of the passed @a val, also + depending on the implementation of the called `to_json()` + method. + + @exceptionsafety Depends on the called constructor. For types directly + supported by the library (i.e., all types for which no `to_json()` function + was provided), strong guarantee holds: if an exception is thrown, there are + no changes to any JSON value. + + @since version 3.2.0 + */ + template < typename BasicJsonType, + detail::enable_if_t < + detail::is_basic_json::value&& !std::is_same::value, int > = 0 > + basic_json(const BasicJsonType& val) + { + using other_boolean_t = typename BasicJsonType::boolean_t; + using other_number_float_t = typename BasicJsonType::number_float_t; + using other_number_integer_t = typename BasicJsonType::number_integer_t; + using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using other_string_t = typename BasicJsonType::string_t; + using other_object_t = typename BasicJsonType::object_t; + using other_array_t = typename BasicJsonType::array_t; + using other_binary_t = typename BasicJsonType::binary_t; + + switch (val.type()) + { + case value_t::boolean: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_float: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_integer: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_unsigned: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::string: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::object: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::array: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::binary: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::null: + *this = nullptr; + break; + case value_t::discarded: + m_type = value_t::discarded; + break; + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + assert_invariant(); + } + + /*! + @brief create a container (array or object) from an initializer list + + Creates a JSON value of type array or object from the passed initializer + list @a init. In case @a type_deduction is `true` (default), the type of + the JSON value to be created is deducted from the initializer list @a init + according to the following rules: + + 1. If the list is empty, an empty JSON object value `{}` is created. + 2. If the list consists of pairs whose first element is a string, a JSON + object value is created where the first elements of the pairs are + treated as keys and the second elements are as values. + 3. In all other cases, an array is created. + + The rules aim to create the best fit between a C++ initializer list and + JSON values. The rationale is as follows: + + 1. The empty initializer list is written as `{}` which is exactly an empty + JSON object. + 2. C++ has no way of describing mapped types other than to list a list of + pairs. As JSON requires that keys must be of type string, rule 2 is the + weakest constraint one can pose on initializer lists to interpret them + as an object. + 3. In all other cases, the initializer list could not be interpreted as + JSON object type, so interpreting it as JSON array type is safe. + + With the rules described above, the following JSON values cannot be + expressed by an initializer list: + + - the empty array (`[]`): use @ref array(initializer_list_t) + with an empty initializer list in this case + - arrays whose elements satisfy rule 2: use @ref + array(initializer_list_t) with the same initializer list + in this case + + @note When used without parentheses around an empty initializer list, @ref + basic_json() is called instead of this function, yielding the JSON null + value. + + @param[in] init initializer list with JSON values + + @param[in] type_deduction internal parameter; when set to `true`, the type + of the JSON value is deducted from the initializer list @a init; when set + to `false`, the type provided via @a manual_type is forced. This mode is + used by the functions @ref array(initializer_list_t) and + @ref object(initializer_list_t). + + @param[in] manual_type internal parameter; when @a type_deduction is set + to `false`, the created JSON value will use the provided type (only @ref + value_t::array and @ref value_t::object are valid); when @a type_deduction + is set to `true`, this parameter has no effect + + @throw type_error.301 if @a type_deduction is `false`, @a manual_type is + `value_t::object`, but @a init contains an element which is not a pair + whose first element is a string. In this case, the constructor could not + create an object. If @a type_deduction would have be `true`, an array + would have been created. See @ref object(initializer_list_t) + for an example. + + @complexity Linear in the size of the initializer list @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The example below shows how JSON values are created from + initializer lists.,basic_json__list_init_t} + + @sa @ref array(initializer_list_t) -- create a JSON array + value from an initializer list + @sa @ref object(initializer_list_t) -- create a JSON object + value from an initializer list + + @since version 1.0.0 + */ + basic_json(initializer_list_t init, + bool type_deduction = true, + value_t manual_type = value_t::array) + { + // check if each element is an array with two elements whose first + // element is a string + bool is_an_object = std::all_of(init.begin(), init.end(), + [](const detail::json_ref& element_ref) + { + return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[0].is_string(); + }); + + // adjust type if type deduction is not wanted + if (!type_deduction) + { + // if array is wanted, do not create an object though possible + if (manual_type == value_t::array) + { + is_an_object = false; + } + + // if object is wanted but impossible, throw an exception + if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object)) + { + JSON_THROW(type_error::create(301, "cannot create object from initializer list")); + } + } + + if (is_an_object) + { + // the initializer list is a list of pairs -> create object + m_type = value_t::object; + m_value = value_t::object; + + std::for_each(init.begin(), init.end(), [this](const detail::json_ref& element_ref) + { + auto element = element_ref.moved_or_copied(); + m_value.object->emplace( + std::move(*((*element.m_value.array)[0].m_value.string)), + std::move((*element.m_value.array)[1])); + }); + } + else + { + // the initializer list describes an array -> create array + m_type = value_t::array; + m_value.array = create(init.begin(), init.end()); + } + + assert_invariant(); + } + + /*! + @brief explicitly create a binary array (without subtype) + + Creates a JSON binary array value from a given binary container. Binary + values are part of various binary formats, such as CBOR, MessagePack, and + BSON. This constructor is used to create a value for serialization to those + formats. + + @note Note, this function exists because of the difficulty in correctly + specifying the correct template overload in the standard value ctor, as both + JSON arrays and JSON binary arrays are backed with some form of a + `std::vector`. Because JSON binary arrays are a non-standard extension it + was decided that it would be best to prevent automatic initialization of a + binary array type, for backwards compatibility and so it does not happen on + accident. + + @param[in] init container containing bytes to use as binary type + + @return JSON binary array value + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @since version 3.8.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = init; + return res; + } + + /*! + @brief explicitly create a binary array (with subtype) + + Creates a JSON binary array value from a given binary container. Binary + values are part of various binary formats, such as CBOR, MessagePack, and + BSON. This constructor is used to create a value for serialization to those + formats. + + @note Note, this function exists because of the difficulty in correctly + specifying the correct template overload in the standard value ctor, as both + JSON arrays and JSON binary arrays are backed with some form of a + `std::vector`. Because JSON binary arrays are a non-standard extension it + was decided that it would be best to prevent automatic initialization of a + binary array type, for backwards compatibility and so it does not happen on + accident. + + @param[in] init container containing bytes to use as binary type + @param[in] subtype subtype to use in MessagePack and BSON + + @return JSON binary array value + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @since version 3.8.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init, std::uint8_t subtype) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = binary_t(init, subtype); + return res; + } + + /// @copydoc binary(const typename binary_t::container_type&) + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = std::move(init); + return res; + } + + /// @copydoc binary(const typename binary_t::container_type&, std::uint8_t) + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init, std::uint8_t subtype) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = binary_t(std::move(init), subtype); + return res; + } + + /*! + @brief explicitly create an array from an initializer list + + Creates a JSON array value from a given initializer list. That is, given a + list of values `a, b, c`, creates the JSON value `[a, b, c]`. If the + initializer list is empty, the empty array `[]` is created. + + @note This function is only needed to express two edge cases that cannot + be realized with the initializer list constructor (@ref + basic_json(initializer_list_t, bool, value_t)). These cases + are: + 1. creating an array whose elements are all pairs whose first element is a + string -- in this case, the initializer list constructor would create an + object, taking the first elements as keys + 2. creating an empty array -- passing the empty initializer list to the + initializer list constructor yields an empty object + + @param[in] init initializer list with JSON values to create an array from + (optional) + + @return JSON array value + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The following code shows an example for the `array` + function.,array} + + @sa @ref basic_json(initializer_list_t, bool, value_t) -- + create a JSON value from an initializer list + @sa @ref object(initializer_list_t) -- create a JSON object + value from an initializer list + + @since version 1.0.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json array(initializer_list_t init = {}) + { + return basic_json(init, false, value_t::array); + } + + /*! + @brief explicitly create an object from an initializer list + + Creates a JSON object value from a given initializer list. The initializer + lists elements must be pairs, and their first elements must be strings. If + the initializer list is empty, the empty object `{}` is created. + + @note This function is only added for symmetry reasons. In contrast to the + related function @ref array(initializer_list_t), there are + no cases which can only be expressed by this function. That is, any + initializer list @a init can also be passed to the initializer list + constructor @ref basic_json(initializer_list_t, bool, value_t). + + @param[in] init initializer list to create an object from (optional) + + @return JSON object value + + @throw type_error.301 if @a init is not a list of pairs whose first + elements are strings. In this case, no object can be created. When such a + value is passed to @ref basic_json(initializer_list_t, bool, value_t), + an array would have been created from the passed initializer list @a init. + See example below. + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The following code shows an example for the `object` + function.,object} + + @sa @ref basic_json(initializer_list_t, bool, value_t) -- + create a JSON value from an initializer list + @sa @ref array(initializer_list_t) -- create a JSON array + value from an initializer list + + @since version 1.0.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json object(initializer_list_t init = {}) + { + return basic_json(init, false, value_t::object); + } + + /*! + @brief construct an array with count copies of given value + + Constructs a JSON array value by creating @a cnt copies of a passed value. + In case @a cnt is `0`, an empty array is created. + + @param[in] cnt the number of JSON copies of @a val to create + @param[in] val the JSON value to copy + + @post `std::distance(begin(),end()) == cnt` holds. + + @complexity Linear in @a cnt. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The following code shows examples for the @ref + basic_json(size_type\, const basic_json&) + constructor.,basic_json__size_type_basic_json} + + @since version 1.0.0 + */ + basic_json(size_type cnt, const basic_json& val) + : m_type(value_t::array) + { + m_value.array = create(cnt, val); + assert_invariant(); + } + + /*! + @brief construct a JSON container given an iterator range + + Constructs the JSON value with the contents of the range `[first, last)`. + The semantics depends on the different types a JSON value can have: + - In case of a null type, invalid_iterator.206 is thrown. + - In case of other primitive types (number, boolean, or string), @a first + must be `begin()` and @a last must be `end()`. In this case, the value is + copied. Otherwise, invalid_iterator.204 is thrown. + - In case of structured types (array, object), the constructor behaves as + similar versions for `std::vector` or `std::map`; that is, a JSON array + or object is constructed from the values in the range. + + @tparam InputIT an input iterator type (@ref iterator or @ref + const_iterator) + + @param[in] first begin of the range to copy from (included) + @param[in] last end of the range to copy from (excluded) + + @pre Iterators @a first and @a last must be initialized. **This + precondition is enforced with an assertion (see warning).** If + assertions are switched off, a violation of this precondition yields + undefined behavior. + + @pre Range `[first, last)` is valid. Usually, this precondition cannot be + checked efficiently. Only certain edge cases are detected; see the + description of the exceptions below. A violation of this precondition + yields undefined behavior. + + @warning A precondition is enforced with a runtime assertion that will + result in calling `std::abort` if this precondition is not met. + Assertions can be disabled by defining `NDEBUG` at compile time. + See https://en.cppreference.com/w/cpp/error/assert for more + information. + + @throw invalid_iterator.201 if iterators @a first and @a last are not + compatible (i.e., do not belong to the same JSON value). In this case, + the range `[first, last)` is undefined. + @throw invalid_iterator.204 if iterators @a first and @a last belong to a + primitive type (number, boolean, or string), but @a first does not point + to the first element any more. In this case, the range `[first, last)` is + undefined. See example code below. + @throw invalid_iterator.206 if iterators @a first and @a last belong to a + null value. In this case, the range `[first, last)` is undefined. + + @complexity Linear in distance between @a first and @a last. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The example below shows several ways to create JSON values by + specifying a subrange with iterators.,basic_json__InputIt_InputIt} + + @since version 1.0.0 + */ + template < class InputIT, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type = 0 > + basic_json(InputIT first, InputIT last) + { + JSON_ASSERT(first.m_object != nullptr); + JSON_ASSERT(last.m_object != nullptr); + + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(201, "iterators are not compatible")); + } + + // copy type from first iterator + m_type = first.m_object->m_type; + + // check if iterator range is complete for primitive values + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + { + if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin() + || !last.m_it.primitive_iterator.is_end())) + { + JSON_THROW(invalid_iterator::create(204, "iterators out of range")); + } + break; + } + + default: + break; + } + + switch (m_type) + { + case value_t::number_integer: + { + m_value.number_integer = first.m_object->m_value.number_integer; + break; + } + + case value_t::number_unsigned: + { + m_value.number_unsigned = first.m_object->m_value.number_unsigned; + break; + } + + case value_t::number_float: + { + m_value.number_float = first.m_object->m_value.number_float; + break; + } + + case value_t::boolean: + { + m_value.boolean = first.m_object->m_value.boolean; + break; + } + + case value_t::string: + { + m_value = *first.m_object->m_value.string; + break; + } + + case value_t::object: + { + m_value.object = create(first.m_it.object_iterator, + last.m_it.object_iterator); + break; + } + + case value_t::array: + { + m_value.array = create(first.m_it.array_iterator, + last.m_it.array_iterator); + break; + } + + case value_t::binary: + { + m_value = *first.m_object->m_value.binary; + break; + } + + default: + JSON_THROW(invalid_iterator::create(206, "cannot construct with iterators from " + + std::string(first.m_object->type_name()))); + } + + assert_invariant(); + } + + + /////////////////////////////////////// + // other constructors and destructor // + /////////////////////////////////////// + + template, + std::is_same>::value, int> = 0 > + basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {} + + /*! + @brief copy constructor + + Creates a copy of a given JSON value. + + @param[in] other the JSON value to copy + + @post `*this == other` + + @complexity Linear in the size of @a other. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is linear. + - As postcondition, it holds: `other == basic_json(other)`. + + @liveexample{The following code shows an example for the copy + constructor.,basic_json__basic_json} + + @since version 1.0.0 + */ + basic_json(const basic_json& other) + : m_type(other.m_type) + { + // check of passed value is valid + other.assert_invariant(); + + switch (m_type) + { + case value_t::object: + { + m_value = *other.m_value.object; + break; + } + + case value_t::array: + { + m_value = *other.m_value.array; + break; + } + + case value_t::string: + { + m_value = *other.m_value.string; + break; + } + + case value_t::boolean: + { + m_value = other.m_value.boolean; + break; + } + + case value_t::number_integer: + { + m_value = other.m_value.number_integer; + break; + } + + case value_t::number_unsigned: + { + m_value = other.m_value.number_unsigned; + break; + } + + case value_t::number_float: + { + m_value = other.m_value.number_float; + break; + } + + case value_t::binary: + { + m_value = *other.m_value.binary; + break; + } + + default: + break; + } + + assert_invariant(); + } + + /*! + @brief move constructor + + Move constructor. Constructs a JSON value with the contents of the given + value @a other using move semantics. It "steals" the resources from @a + other and leaves it as JSON null value. + + @param[in,out] other value to move to this object + + @post `*this` has the same value as @a other before the call. + @post @a other is a JSON null value. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this constructor never throws + exceptions. + + @requirement This function helps `basic_json` satisfying the + [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible) + requirements. + + @liveexample{The code below shows the move constructor explicitly called + via std::move.,basic_json__moveconstructor} + + @since version 1.0.0 + */ + basic_json(basic_json&& other) noexcept + : m_type(std::move(other.m_type)), + m_value(std::move(other.m_value)) + { + // check that passed value is valid + other.assert_invariant(); + + // invalidate payload + other.m_type = value_t::null; + other.m_value = {}; + + assert_invariant(); + } + + /*! + @brief copy assignment + + Copy assignment operator. Copies a JSON value via the "copy and swap" + strategy: It is expressed in terms of the copy constructor, destructor, + and the `swap()` member function. + + @param[in] other value to copy from + + @complexity Linear. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is linear. + + @liveexample{The code below shows and example for the copy assignment. It + creates a copy of value `a` which is then swapped with `b`. Finally\, the + copy of `a` (which is the null value after the swap) is + destroyed.,basic_json__copyassignment} + + @since version 1.0.0 + */ + basic_json& operator=(basic_json other) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + // check that passed value is valid + other.assert_invariant(); + + using std::swap; + swap(m_type, other.m_type); + swap(m_value, other.m_value); + + assert_invariant(); + return *this; + } + + /*! + @brief destructor + + Destroys the JSON value and frees all allocated memory. + + @complexity Linear. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is linear. + - All stored elements are destroyed and all memory is freed. + + @since version 1.0.0 + */ + ~basic_json() noexcept + { + assert_invariant(); + m_value.destroy(m_type); + } + + /// @} + + public: + /////////////////////// + // object inspection // + /////////////////////// + + /// @name object inspection + /// Functions to inspect the type of a JSON value. + /// @{ + + /*! + @brief serialization + + Serialization function for JSON values. The function tries to mimic + Python's `json.dumps()` function, and currently supports its @a indent + and @a ensure_ascii parameters. + + @param[in] indent If indent is nonnegative, then array elements and object + members will be pretty-printed with that indent level. An indent level of + `0` will only insert newlines. `-1` (the default) selects the most compact + representation. + @param[in] indent_char The character to use for indentation if @a indent is + greater than `0`. The default is ` ` (space). + @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters + in the output are escaped with `\uXXXX` sequences, and the result consists + of ASCII characters only. + @param[in] error_handler how to react on decoding errors; there are three + possible values: `strict` (throws and exception in case a decoding error + occurs; default), `replace` (replace invalid UTF-8 sequences with U+FFFD), + and `ignore` (ignore invalid UTF-8 sequences during serialization; all + bytes are copied to the output unchanged). + + @return string containing the serialization of the JSON value + + @throw type_error.316 if a string stored inside the JSON value is not + UTF-8 encoded and @a error_handler is set to strict + + @note Binary values are serialized as object containing two keys: + - "bytes": an array of bytes as integers + - "subtype": the subtype as integer or "null" if the binary has no subtype + + @complexity Linear. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @liveexample{The following example shows the effect of different @a indent\, + @a indent_char\, and @a ensure_ascii parameters to the result of the + serialization.,dump} + + @see https://docs.python.org/2/library/json.html#json.dump + + @since version 1.0.0; indentation character @a indent_char, option + @a ensure_ascii and exceptions added in version 3.0.0; error + handlers added in version 3.4.0; serialization of binary values added + in version 3.8.0. + */ + string_t dump(const int indent = -1, + const char indent_char = ' ', + const bool ensure_ascii = false, + const error_handler_t error_handler = error_handler_t::strict) const + { + string_t result; + serializer s(detail::output_adapter(result), indent_char, error_handler); + + if (indent >= 0) + { + s.dump(*this, true, ensure_ascii, static_cast(indent)); + } + else + { + s.dump(*this, false, ensure_ascii, 0); + } + + return result; + } + + /*! + @brief return the type of the JSON value (explicit) + + Return the type of the JSON value as a value from the @ref value_t + enumeration. + + @return the type of the JSON value + Value type | return value + ------------------------- | ------------------------- + null | value_t::null + boolean | value_t::boolean + string | value_t::string + number (integer) | value_t::number_integer + number (unsigned integer) | value_t::number_unsigned + number (floating-point) | value_t::number_float + object | value_t::object + array | value_t::array + binary | value_t::binary + discarded | value_t::discarded + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `type()` for all JSON + types.,type} + + @sa @ref operator value_t() -- return the type of the JSON value (implicit) + @sa @ref type_name() -- return the type as string + + @since version 1.0.0 + */ + constexpr value_t type() const noexcept + { + return m_type; + } + + /*! + @brief return whether type is primitive + + This function returns true if and only if the JSON type is primitive + (string, number, boolean, or null). + + @return `true` if type is primitive (string, number, boolean, or null), + `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_primitive()` for all JSON + types.,is_primitive} + + @sa @ref is_structured() -- returns whether JSON value is structured + @sa @ref is_null() -- returns whether JSON value is `null` + @sa @ref is_string() -- returns whether JSON value is a string + @sa @ref is_boolean() -- returns whether JSON value is a boolean + @sa @ref is_number() -- returns whether JSON value is a number + @sa @ref is_binary() -- returns whether JSON value is a binary array + + @since version 1.0.0 + */ + constexpr bool is_primitive() const noexcept + { + return is_null() || is_string() || is_boolean() || is_number() || is_binary(); + } + + /*! + @brief return whether type is structured + + This function returns true if and only if the JSON type is structured + (array or object). + + @return `true` if type is structured (array or object), `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_structured()` for all JSON + types.,is_structured} + + @sa @ref is_primitive() -- returns whether value is primitive + @sa @ref is_array() -- returns whether value is an array + @sa @ref is_object() -- returns whether value is an object + + @since version 1.0.0 + */ + constexpr bool is_structured() const noexcept + { + return is_array() || is_object(); + } + + /*! + @brief return whether value is null + + This function returns true if and only if the JSON value is null. + + @return `true` if type is null, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_null()` for all JSON + types.,is_null} + + @since version 1.0.0 + */ + constexpr bool is_null() const noexcept + { + return m_type == value_t::null; + } + + /*! + @brief return whether value is a boolean + + This function returns true if and only if the JSON value is a boolean. + + @return `true` if type is boolean, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_boolean()` for all JSON + types.,is_boolean} + + @since version 1.0.0 + */ + constexpr bool is_boolean() const noexcept + { + return m_type == value_t::boolean; + } + + /*! + @brief return whether value is a number + + This function returns true if and only if the JSON value is a number. This + includes both integer (signed and unsigned) and floating-point values. + + @return `true` if type is number (regardless whether integer, unsigned + integer or floating-type), `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_number()` for all JSON + types.,is_number} + + @sa @ref is_number_integer() -- check if value is an integer or unsigned + integer number + @sa @ref is_number_unsigned() -- check if value is an unsigned integer + number + @sa @ref is_number_float() -- check if value is a floating-point number + + @since version 1.0.0 + */ + constexpr bool is_number() const noexcept + { + return is_number_integer() || is_number_float(); + } + + /*! + @brief return whether value is an integer number + + This function returns true if and only if the JSON value is a signed or + unsigned integer number. This excludes floating-point values. + + @return `true` if type is an integer or unsigned integer number, `false` + otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_number_integer()` for all + JSON types.,is_number_integer} + + @sa @ref is_number() -- check if value is a number + @sa @ref is_number_unsigned() -- check if value is an unsigned integer + number + @sa @ref is_number_float() -- check if value is a floating-point number + + @since version 1.0.0 + */ + constexpr bool is_number_integer() const noexcept + { + return m_type == value_t::number_integer || m_type == value_t::number_unsigned; + } + + /*! + @brief return whether value is an unsigned integer number + + This function returns true if and only if the JSON value is an unsigned + integer number. This excludes floating-point and signed integer values. + + @return `true` if type is an unsigned integer number, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_number_unsigned()` for all + JSON types.,is_number_unsigned} + + @sa @ref is_number() -- check if value is a number + @sa @ref is_number_integer() -- check if value is an integer or unsigned + integer number + @sa @ref is_number_float() -- check if value is a floating-point number + + @since version 2.0.0 + */ + constexpr bool is_number_unsigned() const noexcept + { + return m_type == value_t::number_unsigned; + } + + /*! + @brief return whether value is a floating-point number + + This function returns true if and only if the JSON value is a + floating-point number. This excludes signed and unsigned integer values. + + @return `true` if type is a floating-point number, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_number_float()` for all + JSON types.,is_number_float} + + @sa @ref is_number() -- check if value is number + @sa @ref is_number_integer() -- check if value is an integer number + @sa @ref is_number_unsigned() -- check if value is an unsigned integer + number + + @since version 1.0.0 + */ + constexpr bool is_number_float() const noexcept + { + return m_type == value_t::number_float; + } + + /*! + @brief return whether value is an object + + This function returns true if and only if the JSON value is an object. + + @return `true` if type is object, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_object()` for all JSON + types.,is_object} + + @since version 1.0.0 + */ + constexpr bool is_object() const noexcept + { + return m_type == value_t::object; + } + + /*! + @brief return whether value is an array + + This function returns true if and only if the JSON value is an array. + + @return `true` if type is array, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_array()` for all JSON + types.,is_array} + + @since version 1.0.0 + */ + constexpr bool is_array() const noexcept + { + return m_type == value_t::array; + } + + /*! + @brief return whether value is a string + + This function returns true if and only if the JSON value is a string. + + @return `true` if type is string, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_string()` for all JSON + types.,is_string} + + @since version 1.0.0 + */ + constexpr bool is_string() const noexcept + { + return m_type == value_t::string; + } + + /*! + @brief return whether value is a binary array + + This function returns true if and only if the JSON value is a binary array. + + @return `true` if type is binary array, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_binary()` for all JSON + types.,is_binary} + + @since version 3.8.0 + */ + constexpr bool is_binary() const noexcept + { + return m_type == value_t::binary; + } + + /*! + @brief return whether value is discarded + + This function returns true if and only if the JSON value was discarded + during parsing with a callback function (see @ref parser_callback_t). + + @note This function will always be `false` for JSON values after parsing. + That is, discarded values can only occur during parsing, but will be + removed when inside a structured value or replaced by null in other cases. + + @return `true` if type is discarded, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_discarded()` for all JSON + types.,is_discarded} + + @since version 1.0.0 + */ + constexpr bool is_discarded() const noexcept + { + return m_type == value_t::discarded; + } + + /*! + @brief return the type of the JSON value (implicit) + + Implicitly return the type of the JSON value as a value from the @ref + value_t enumeration. + + @return the type of the JSON value + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies the @ref value_t operator for + all JSON types.,operator__value_t} + + @sa @ref type() -- return the type of the JSON value (explicit) + @sa @ref type_name() -- return the type as string + + @since version 1.0.0 + */ + constexpr operator value_t() const noexcept + { + return m_type; + } + + /// @} + + private: + ////////////////// + // value access // + ////////////////// + + /// get a boolean (explicit) + boolean_t get_impl(boolean_t* /*unused*/) const + { + if (JSON_HEDLEY_LIKELY(is_boolean())) + { + return m_value.boolean; + } + + JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(type_name()))); + } + + /// get a pointer to the value (object) + object_t* get_impl_ptr(object_t* /*unused*/) noexcept + { + return is_object() ? m_value.object : nullptr; + } + + /// get a pointer to the value (object) + constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept + { + return is_object() ? m_value.object : nullptr; + } + + /// get a pointer to the value (array) + array_t* get_impl_ptr(array_t* /*unused*/) noexcept + { + return is_array() ? m_value.array : nullptr; + } + + /// get a pointer to the value (array) + constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept + { + return is_array() ? m_value.array : nullptr; + } + + /// get a pointer to the value (string) + string_t* get_impl_ptr(string_t* /*unused*/) noexcept + { + return is_string() ? m_value.string : nullptr; + } + + /// get a pointer to the value (string) + constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept + { + return is_string() ? m_value.string : nullptr; + } + + /// get a pointer to the value (boolean) + boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept + { + return is_boolean() ? &m_value.boolean : nullptr; + } + + /// get a pointer to the value (boolean) + constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept + { + return is_boolean() ? &m_value.boolean : nullptr; + } + + /// get a pointer to the value (integer number) + number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept + { + return is_number_integer() ? &m_value.number_integer : nullptr; + } + + /// get a pointer to the value (integer number) + constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept + { + return is_number_integer() ? &m_value.number_integer : nullptr; + } + + /// get a pointer to the value (unsigned number) + number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept + { + return is_number_unsigned() ? &m_value.number_unsigned : nullptr; + } + + /// get a pointer to the value (unsigned number) + constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept + { + return is_number_unsigned() ? &m_value.number_unsigned : nullptr; + } + + /// get a pointer to the value (floating-point number) + number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept + { + return is_number_float() ? &m_value.number_float : nullptr; + } + + /// get a pointer to the value (floating-point number) + constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept + { + return is_number_float() ? &m_value.number_float : nullptr; + } + + /// get a pointer to the value (binary) + binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept + { + return is_binary() ? m_value.binary : nullptr; + } + + /// get a pointer to the value (binary) + constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept + { + return is_binary() ? m_value.binary : nullptr; + } + + /*! + @brief helper function to implement get_ref() + + This function helps to implement get_ref() without code duplication for + const and non-const overloads + + @tparam ThisType will be deduced as `basic_json` or `const basic_json` + + @throw type_error.303 if ReferenceType does not match underlying value + type of the current JSON + */ + template + static ReferenceType get_ref_impl(ThisType& obj) + { + // delegate the call to get_ptr<>() + auto ptr = obj.template get_ptr::type>(); + + if (JSON_HEDLEY_LIKELY(ptr != nullptr)) + { + return *ptr; + } + + JSON_THROW(type_error::create(303, "incompatible ReferenceType for get_ref, actual type is " + std::string(obj.type_name()))); + } + + public: + /// @name value access + /// Direct access to the stored value of a JSON value. + /// @{ + + /*! + @brief get special-case overload + + This overloads avoids a lot of template boilerplate, it can be seen as the + identity method + + @tparam BasicJsonType == @ref basic_json + + @return a copy of *this + + @complexity Constant. + + @since version 2.1.0 + */ + template::type, basic_json_t>::value, + int> = 0> + basic_json get() const + { + return *this; + } + + /*! + @brief get special-case overload + + This overloads converts the current @ref basic_json in a different + @ref basic_json type + + @tparam BasicJsonType == @ref basic_json + + @return a copy of *this, converted into @tparam BasicJsonType + + @complexity Depending on the implementation of the called `from_json()` + method. + + @since version 3.2.0 + */ + template < typename BasicJsonType, detail::enable_if_t < + !std::is_same::value&& + detail::is_basic_json::value, int > = 0 > + BasicJsonType get() const + { + return *this; + } + + /*! + @brief get a value (explicit) + + Explicit type conversion between the JSON value and a compatible value + which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + The value is converted by calling the @ref json_serializer + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + ValueType ret; + JSONSerializer::from_json(*this, ret); + return ret; + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json, + - @ref json_serializer has a `from_json()` method of the form + `void from_json(const basic_json&, ValueType&)`, and + - @ref json_serializer does not have a `from_json()` method of + the form `ValueType from_json(const basic_json&)` + + @tparam ValueTypeCV the provided value type + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @a ValueType + + @throw what @ref json_serializer `from_json()` method throws + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map`.,get__ValueType_const} + + @since version 2.1.0 + */ + template < typename ValueTypeCV, typename ValueType = detail::uncvref_t, + detail::enable_if_t < + !detail::is_basic_json::value && + detail::has_from_json::value && + !detail::has_non_default_from_json::value, + int > = 0 > + ValueType get() const noexcept(noexcept( + JSONSerializer::from_json(std::declval(), std::declval()))) + { + // we cannot static_assert on ValueTypeCV being non-const, because + // there is support for get(), which is why we + // still need the uncvref + static_assert(!std::is_reference::value, + "get() cannot be used with reference types, you might want to use get_ref()"); + static_assert(std::is_default_constructible::value, + "types must be DefaultConstructible when used with get()"); + + ValueType ret; + JSONSerializer::from_json(*this, ret); + return ret; + } + + /*! + @brief get a value (explicit); special case + + Explicit type conversion between the JSON value and a compatible value + which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + The value is converted by calling the @ref json_serializer + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + return JSONSerializer::from_json(*this); + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json and + - @ref json_serializer has a `from_json()` method of the form + `ValueType from_json(const basic_json&)` + + @note If @ref json_serializer has both overloads of + `from_json()`, this one is chosen. + + @tparam ValueTypeCV the provided value type + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @a ValueType + + @throw what @ref json_serializer `from_json()` method throws + + @since version 2.1.0 + */ + template < typename ValueTypeCV, typename ValueType = detail::uncvref_t, + detail::enable_if_t < !std::is_same::value && + detail::has_non_default_from_json::value, + int > = 0 > + ValueType get() const noexcept(noexcept( + JSONSerializer::from_json(std::declval()))) + { + static_assert(!std::is_reference::value, + "get() cannot be used with reference types, you might want to use get_ref()"); + return JSONSerializer::from_json(*this); + } + + /*! + @brief get a value (explicit) + + Explicit type conversion between the JSON value and a compatible value. + The value is filled into the input parameter by calling the @ref json_serializer + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + ValueType v; + JSONSerializer::from_json(*this, v); + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json, + - @ref json_serializer has a `from_json()` method of the form + `void from_json(const basic_json&, ValueType&)`, and + + @tparam ValueType the input parameter type. + + @return the input parameter, allowing chaining calls. + + @throw what @ref json_serializer `from_json()` method throws + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map`.,get_to} + + @since version 3.3.0 + */ + template < typename ValueType, + detail::enable_if_t < + !detail::is_basic_json::value&& + detail::has_from_json::value, + int > = 0 > + ValueType & get_to(ValueType& v) const noexcept(noexcept( + JSONSerializer::from_json(std::declval(), v))) + { + JSONSerializer::from_json(*this, v); + return v; + } + + // specialization to allow to call get_to with a basic_json value + // see https://github.com/nlohmann/json/issues/2175 + template::value, + int> = 0> + ValueType & get_to(ValueType& v) const + { + v = *this; + return v; + } + + template < + typename T, std::size_t N, + typename Array = T (&)[N], + detail::enable_if_t < + detail::has_from_json::value, int > = 0 > + Array get_to(T (&v)[N]) const + noexcept(noexcept(JSONSerializer::from_json( + std::declval(), v))) + { + JSONSerializer::from_json(*this, v); + return v; + } + + + /*! + @brief get a pointer value (implicit) + + Implicit pointer access to the internally stored JSON value. No copies are + made. + + @warning Writing data to the pointee of the result yields an undefined + state. + + @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref + object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, + @ref number_unsigned_t, or @ref number_float_t. Enforced by a static + assertion. + + @return pointer to the internally stored JSON value if the requested + pointer type @a PointerType fits to the JSON value; `nullptr` otherwise + + @complexity Constant. + + @liveexample{The example below shows how pointers to internal values of a + JSON value can be requested. Note that no type conversions are made and a + `nullptr` is returned if the value and the requested pointer type does not + match.,get_ptr} + + @since version 1.0.0 + */ + template::value, int>::type = 0> + auto get_ptr() noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) + { + // delegate the call to get_impl_ptr<>() + return get_impl_ptr(static_cast(nullptr)); + } + + /*! + @brief get a pointer value (implicit) + @copydoc get_ptr() + */ + template < typename PointerType, typename std::enable_if < + std::is_pointer::value&& + std::is_const::type>::value, int >::type = 0 > + constexpr auto get_ptr() const noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) + { + // delegate the call to get_impl_ptr<>() const + return get_impl_ptr(static_cast(nullptr)); + } + + /*! + @brief get a pointer value (explicit) + + Explicit pointer access to the internally stored JSON value. No copies are + made. + + @warning The pointer becomes invalid if the underlying JSON object + changes. + + @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref + object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, + @ref number_unsigned_t, or @ref number_float_t. + + @return pointer to the internally stored JSON value if the requested + pointer type @a PointerType fits to the JSON value; `nullptr` otherwise + + @complexity Constant. + + @liveexample{The example below shows how pointers to internal values of a + JSON value can be requested. Note that no type conversions are made and a + `nullptr` is returned if the value and the requested pointer type does not + match.,get__PointerType} + + @sa @ref get_ptr() for explicit pointer-member access + + @since version 1.0.0 + */ + template::value, int>::type = 0> + auto get() noexcept -> decltype(std::declval().template get_ptr()) + { + // delegate the call to get_ptr + return get_ptr(); + } + + /*! + @brief get a pointer value (explicit) + @copydoc get() + */ + template::value, int>::type = 0> + constexpr auto get() const noexcept -> decltype(std::declval().template get_ptr()) + { + // delegate the call to get_ptr + return get_ptr(); + } + + /*! + @brief get a reference value (implicit) + + Implicit reference access to the internally stored JSON value. No copies + are made. + + @warning Writing data to the referee of the result yields an undefined + state. + + @tparam ReferenceType reference type; must be a reference to @ref array_t, + @ref object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, or + @ref number_float_t. Enforced by static assertion. + + @return reference to the internally stored JSON value if the requested + reference type @a ReferenceType fits to the JSON value; throws + type_error.303 otherwise + + @throw type_error.303 in case passed type @a ReferenceType is incompatible + with the stored JSON value; see example below + + @complexity Constant. + + @liveexample{The example shows several calls to `get_ref()`.,get_ref} + + @since version 1.1.0 + */ + template::value, int>::type = 0> + ReferenceType get_ref() + { + // delegate call to get_ref_impl + return get_ref_impl(*this); + } + + /*! + @brief get a reference value (implicit) + @copydoc get_ref() + */ + template < typename ReferenceType, typename std::enable_if < + std::is_reference::value&& + std::is_const::type>::value, int >::type = 0 > + ReferenceType get_ref() const + { + // delegate call to get_ref_impl + return get_ref_impl(*this); + } + + /*! + @brief get a value (implicit) + + Implicit type conversion between the JSON value and a compatible value. + The call is realized by calling @ref get() const. + + @tparam ValueType non-pointer type compatible to the JSON value, for + instance `int` for JSON integer numbers, `bool` for JSON booleans, or + `std::vector` types for JSON arrays. The character type of @ref string_t + as well as an initializer list of this type is excluded to avoid + ambiguities as these types implicitly convert to `std::string`. + + @return copy of the JSON value, converted to type @a ValueType + + @throw type_error.302 in case passed type @a ValueType is incompatible + to the JSON value type (e.g., the JSON value is of type boolean, but a + string is requested); see example below + + @complexity Linear in the size of the JSON value. + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map`.,operator__ValueType} + + @since version 1.0.0 + */ + template < typename ValueType, typename std::enable_if < + !std::is_pointer::value&& + !std::is_same>::value&& + !std::is_same::value&& + !detail::is_basic_json::value + && !std::is_same>::value +#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914)) + && !std::is_same::value +#endif + && detail::is_detected::value + , int >::type = 0 > + JSON_EXPLICIT operator ValueType() const + { + // delegate the call to get<>() const + return get(); + } + + /*! + @return reference to the binary value + + @throw type_error.302 if the value is not binary + + @sa @ref is_binary() to check if the value is binary + + @since version 3.8.0 + */ + binary_t& get_binary() + { + if (!is_binary()) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()))); + } + + return *get_ptr(); + } + + /// @copydoc get_binary() + const binary_t& get_binary() const + { + if (!is_binary()) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()))); + } + + return *get_ptr(); + } + + /// @} + + + //////////////////// + // element access // + //////////////////// + + /// @name element access + /// Access to the JSON value. + /// @{ + + /*! + @brief access specified array element with bounds checking + + Returns a reference to the element at specified location @a idx, with + bounds checking. + + @param[in] idx index of the element to access + + @return reference to the element at index @a idx + + @throw type_error.304 if the JSON value is not an array; in this case, + calling `at` with an index makes no sense. See example below. + @throw out_of_range.401 if the index @a idx is out of range of the array; + that is, `idx >= size()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 1.0.0 + + @liveexample{The example below shows how array elements can be read and + written using `at()`. It also demonstrates the different exceptions that + can be thrown.,at__size_type} + */ + reference at(size_type idx) + { + // at only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + JSON_TRY + { + return m_value.array->at(idx); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); + } + } + + /*! + @brief access specified array element with bounds checking + + Returns a const reference to the element at specified location @a idx, + with bounds checking. + + @param[in] idx index of the element to access + + @return const reference to the element at index @a idx + + @throw type_error.304 if the JSON value is not an array; in this case, + calling `at` with an index makes no sense. See example below. + @throw out_of_range.401 if the index @a idx is out of range of the array; + that is, `idx >= size()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 1.0.0 + + @liveexample{The example below shows how array elements can be read using + `at()`. It also demonstrates the different exceptions that can be thrown., + at__size_type_const} + */ + const_reference at(size_type idx) const + { + // at only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + JSON_TRY + { + return m_value.array->at(idx); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); + } + } + + /*! + @brief access specified object element with bounds checking + + Returns a reference to the element at with specified key @a key, with + bounds checking. + + @param[in] key key of the element to access + + @return reference to the element at key @a key + + @throw type_error.304 if the JSON value is not an object; in this case, + calling `at` with a key makes no sense. See example below. + @throw out_of_range.403 if the key @a key is is not stored in the object; + that is, `find(key) == end()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Logarithmic in the size of the container. + + @sa @ref operator[](const typename object_t::key_type&) for unchecked + access by reference + @sa @ref value() for access by value with a default value + + @since version 1.0.0 + + @liveexample{The example below shows how object elements can be read and + written using `at()`. It also demonstrates the different exceptions that + can be thrown.,at__object_t_key_type} + */ + reference at(const typename object_t::key_type& key) + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_TRY + { + return m_value.object->at(key); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(403, "key '" + key + "' not found")); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); + } + } + + /*! + @brief access specified object element with bounds checking + + Returns a const reference to the element at with specified key @a key, + with bounds checking. + + @param[in] key key of the element to access + + @return const reference to the element at key @a key + + @throw type_error.304 if the JSON value is not an object; in this case, + calling `at` with a key makes no sense. See example below. + @throw out_of_range.403 if the key @a key is is not stored in the object; + that is, `find(key) == end()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Logarithmic in the size of the container. + + @sa @ref operator[](const typename object_t::key_type&) for unchecked + access by reference + @sa @ref value() for access by value with a default value + + @since version 1.0.0 + + @liveexample{The example below shows how object elements can be read using + `at()`. It also demonstrates the different exceptions that can be thrown., + at__object_t_key_type_const} + */ + const_reference at(const typename object_t::key_type& key) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_TRY + { + return m_value.object->at(key); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(403, "key '" + key + "' not found")); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); + } + } + + /*! + @brief access specified array element + + Returns a reference to the element at specified location @a idx. + + @note If @a idx is beyond the range of the array (i.e., `idx >= size()`), + then the array is silently filled up with `null` values to make `idx` a + valid reference to the last stored element. + + @param[in] idx index of the element to access + + @return reference to the element at index @a idx + + @throw type_error.305 if the JSON value is not an array or null; in that + cases, using the [] operator with an index makes no sense. + + @complexity Constant if @a idx is in the range of the array. Otherwise + linear in `idx - size()`. + + @liveexample{The example below shows how array elements can be read and + written using `[]` operator. Note the addition of `null` + values.,operatorarray__size_type} + + @since version 1.0.0 + */ + reference operator[](size_type idx) + { + // implicitly convert null value to an empty array + if (is_null()) + { + m_type = value_t::array; + m_value.array = create(); + assert_invariant(); + } + + // operator[] only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // fill up array with null values if given idx is outside range + if (idx >= m_value.array->size()) + { + m_value.array->insert(m_value.array->end(), + idx - m_value.array->size() + 1, + basic_json()); + } + + return m_value.array->operator[](idx); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()))); + } + + /*! + @brief access specified array element + + Returns a const reference to the element at specified location @a idx. + + @param[in] idx index of the element to access + + @return const reference to the element at index @a idx + + @throw type_error.305 if the JSON value is not an array; in that case, + using the [] operator with an index makes no sense. + + @complexity Constant. + + @liveexample{The example below shows how array elements can be read using + the `[]` operator.,operatorarray__size_type_const} + + @since version 1.0.0 + */ + const_reference operator[](size_type idx) const + { + // const operator[] only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + return m_value.array->operator[](idx); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()))); + } + + /*! + @brief access specified object element + + Returns a reference to the element at with specified key @a key. + + @note If @a key is not found in the object, then it is silently added to + the object and filled with a `null` value to make `key` a valid reference. + In case the value was `null` before, it is converted to an object. + + @param[in] key key of the element to access + + @return reference to the element at key @a key + + @throw type_error.305 if the JSON value is not an object or null; in that + cases, using the [] operator with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be read and + written using the `[]` operator.,operatorarray__key_type} + + @sa @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa @ref value() for access by value with a default value + + @since version 1.0.0 + */ + reference operator[](const typename object_t::key_type& key) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_type = value_t::object; + m_value.object = create(); + assert_invariant(); + } + + // operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return m_value.object->operator[](key); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); + } + + /*! + @brief read-only access specified object element + + Returns a const reference to the element at with specified key @a key. No + bounds checking is performed. + + @warning If the element with key @a key does not exist, the behavior is + undefined. + + @param[in] key key of the element to access + + @return const reference to the element at key @a key + + @pre The element with key @a key must exist. **This precondition is + enforced with an assertion.** + + @throw type_error.305 if the JSON value is not an object; in that case, + using the [] operator with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be read using + the `[]` operator.,operatorarray__key_type_const} + + @sa @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa @ref value() for access by value with a default value + + @since version 1.0.0 + */ + const_reference operator[](const typename object_t::key_type& key) const + { + // const operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); + } + + /*! + @brief access specified object element + + Returns a reference to the element at with specified key @a key. + + @note If @a key is not found in the object, then it is silently added to + the object and filled with a `null` value to make `key` a valid reference. + In case the value was `null` before, it is converted to an object. + + @param[in] key key of the element to access + + @return reference to the element at key @a key + + @throw type_error.305 if the JSON value is not an object or null; in that + cases, using the [] operator with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be read and + written using the `[]` operator.,operatorarray__key_type} + + @sa @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa @ref value() for access by value with a default value + + @since version 1.1.0 + */ + template + JSON_HEDLEY_NON_NULL(2) + reference operator[](T* key) + { + // implicitly convert null to object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return m_value.object->operator[](key); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); + } + + /*! + @brief read-only access specified object element + + Returns a const reference to the element at with specified key @a key. No + bounds checking is performed. + + @warning If the element with key @a key does not exist, the behavior is + undefined. + + @param[in] key key of the element to access + + @return const reference to the element at key @a key + + @pre The element with key @a key must exist. **This precondition is + enforced with an assertion.** + + @throw type_error.305 if the JSON value is not an object; in that case, + using the [] operator with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be read using + the `[]` operator.,operatorarray__key_type_const} + + @sa @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa @ref value() for access by value with a default value + + @since version 1.1.0 + */ + template + JSON_HEDLEY_NON_NULL(2) + const_reference operator[](T* key) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); + } + + /*! + @brief access specified object element with default value + + Returns either a copy of an object's element at the specified key @a key + or a given default value if no element with key @a key exists. + + The function is basically equivalent to executing + @code {.cpp} + try { + return at(key); + } catch(out_of_range) { + return default_value; + } + @endcode + + @note Unlike @ref at(const typename object_t::key_type&), this function + does not throw if the given key @a key was not found. + + @note Unlike @ref operator[](const typename object_t::key_type& key), this + function does not implicitly add an element to the position defined by @a + key. This function is furthermore also applicable to const objects. + + @param[in] key key of the element to access + @param[in] default_value the value to return if @a key is not found + + @tparam ValueType type compatible to JSON values, for instance `int` for + JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for + JSON arrays. Note the type of the expected value at @a key and the default + value @a default_value must be compatible. + + @return copy of the element at key @a key or @a default_value if @a key + is not found + + @throw type_error.302 if @a default_value does not match the type of the + value at @a key + @throw type_error.306 if the JSON value is not an object; in that case, + using `value()` with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be queried + with a default value.,basic_json__value} + + @sa @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa @ref operator[](const typename object_t::key_type&) for unchecked + access by reference + + @since version 1.0.0 + */ + // using std::is_convertible in a std::enable_if will fail when using explicit conversions + template < class ValueType, typename std::enable_if < + detail::is_getable::value + && !std::is_same::value, int >::type = 0 > + ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if key is found, return value and given default value otherwise + const auto it = find(key); + if (it != end()) + { + return it->template get(); + } + + return default_value; + } + + JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()))); + } + + /*! + @brief overload for a default value of type const char* + @copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const + */ + string_t value(const typename object_t::key_type& key, const char* default_value) const + { + return value(key, string_t(default_value)); + } + + /*! + @brief access specified object element via JSON Pointer with default value + + Returns either a copy of an object's element at the specified key @a key + or a given default value if no element with key @a key exists. + + The function is basically equivalent to executing + @code {.cpp} + try { + return at(ptr); + } catch(out_of_range) { + return default_value; + } + @endcode + + @note Unlike @ref at(const json_pointer&), this function does not throw + if the given key @a key was not found. + + @param[in] ptr a JSON pointer to the element to access + @param[in] default_value the value to return if @a ptr found no value + + @tparam ValueType type compatible to JSON values, for instance `int` for + JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for + JSON arrays. Note the type of the expected value at @a key and the default + value @a default_value must be compatible. + + @return copy of the element at key @a key or @a default_value if @a key + is not found + + @throw type_error.302 if @a default_value does not match the type of the + value at @a ptr + @throw type_error.306 if the JSON value is not an object; in that case, + using `value()` with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be queried + with a default value.,basic_json__value_ptr} + + @sa @ref operator[](const json_pointer&) for unchecked access by reference + + @since version 2.0.2 + */ + template::value, int>::type = 0> + ValueType value(const json_pointer& ptr, const ValueType& default_value) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if pointer resolves a value, return it or use default value + JSON_TRY + { + return ptr.get_checked(this).template get(); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + return default_value; + } + } + + JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()))); + } + + /*! + @brief overload for a default value of type const char* + @copydoc basic_json::value(const json_pointer&, ValueType) const + */ + JSON_HEDLEY_NON_NULL(3) + string_t value(const json_pointer& ptr, const char* default_value) const + { + return value(ptr, string_t(default_value)); + } + + /*! + @brief access the first element + + Returns a reference to the first element in the container. For a JSON + container `c`, the expression `c.front()` is equivalent to `*c.begin()`. + + @return In case of a structured type (array or object), a reference to the + first element is returned. In case of number, string, boolean, or binary + values, a reference to the value is returned. + + @complexity Constant. + + @pre The JSON value must not be `null` (would throw `std::out_of_range`) + or an empty array or object (undefined behavior, **guarded by + assertions**). + @post The JSON value remains unchanged. + + @throw invalid_iterator.214 when called on `null` value + + @liveexample{The following code shows an example for `front()`.,front} + + @sa @ref back() -- access the last element + + @since version 1.0.0 + */ + reference front() + { + return *begin(); + } + + /*! + @copydoc basic_json::front() + */ + const_reference front() const + { + return *cbegin(); + } + + /*! + @brief access the last element + + Returns a reference to the last element in the container. For a JSON + container `c`, the expression `c.back()` is equivalent to + @code {.cpp} + auto tmp = c.end(); + --tmp; + return *tmp; + @endcode + + @return In case of a structured type (array or object), a reference to the + last element is returned. In case of number, string, boolean, or binary + values, a reference to the value is returned. + + @complexity Constant. + + @pre The JSON value must not be `null` (would throw `std::out_of_range`) + or an empty array or object (undefined behavior, **guarded by + assertions**). + @post The JSON value remains unchanged. + + @throw invalid_iterator.214 when called on a `null` value. See example + below. + + @liveexample{The following code shows an example for `back()`.,back} + + @sa @ref front() -- access the first element + + @since version 1.0.0 + */ + reference back() + { + auto tmp = end(); + --tmp; + return *tmp; + } + + /*! + @copydoc basic_json::back() + */ + const_reference back() const + { + auto tmp = cend(); + --tmp; + return *tmp; + } + + /*! + @brief remove element given an iterator + + Removes the element specified by iterator @a pos. The iterator @a pos must + be valid and dereferenceable. Thus the `end()` iterator (which is valid, + but is not dereferenceable) cannot be used as a value for @a pos. + + If called on a primitive type other than `null`, the resulting JSON value + will be `null`. + + @param[in] pos iterator to the element to remove + @return Iterator following the last removed element. If the iterator @a + pos refers to the last element, the `end()` iterator is returned. + + @tparam IteratorType an @ref iterator or @ref const_iterator + + @post Invalidates iterators and references at or after the point of the + erase, including the `end()` iterator. + + @throw type_error.307 if called on a `null` value; example: `"cannot use + erase() with null"` + @throw invalid_iterator.202 if called on an iterator which does not belong + to the current JSON value; example: `"iterator does not fit current + value"` + @throw invalid_iterator.205 if called on a primitive type with invalid + iterator (i.e., any iterator which is not `begin()`); example: `"iterator + out of range"` + + @complexity The complexity depends on the type: + - objects: amortized constant + - arrays: linear in distance between @a pos and the end of the container + - strings and binary: linear in the length of the member + - other types: constant + + @liveexample{The example shows the result of `erase()` for different JSON + types.,erase__IteratorType} + + @sa @ref erase(IteratorType, IteratorType) -- removes the elements in + the given range + @sa @ref erase(const typename object_t::key_type&) -- removes the element + from an object at the given key + @sa @ref erase(const size_type) -- removes the element from an array at + the given index + + @since version 1.0.0 + */ + template < class IteratorType, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type + = 0 > + IteratorType erase(IteratorType pos) + { + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(this != pos.m_object)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); + } + + IteratorType result = end(); + + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + case value_t::binary: + { + if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin())) + { + JSON_THROW(invalid_iterator::create(205, "iterator out of range")); + } + + if (is_string()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.string); + std::allocator_traits::deallocate(alloc, m_value.string, 1); + m_value.string = nullptr; + } + else if (is_binary()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.binary); + std::allocator_traits::deallocate(alloc, m_value.binary, 1); + m_value.binary = nullptr; + } + + m_type = value_t::null; + assert_invariant(); + break; + } + + case value_t::object: + { + result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); + break; + } + + case value_t::array: + { + result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); + break; + } + + default: + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); + } + + return result; + } + + /*! + @brief remove elements given an iterator range + + Removes the element specified by the range `[first; last)`. The iterator + @a first does not need to be dereferenceable if `first == last`: erasing + an empty range is a no-op. + + If called on a primitive type other than `null`, the resulting JSON value + will be `null`. + + @param[in] first iterator to the beginning of the range to remove + @param[in] last iterator past the end of the range to remove + @return Iterator following the last removed element. If the iterator @a + second refers to the last element, the `end()` iterator is returned. + + @tparam IteratorType an @ref iterator or @ref const_iterator + + @post Invalidates iterators and references at or after the point of the + erase, including the `end()` iterator. + + @throw type_error.307 if called on a `null` value; example: `"cannot use + erase() with null"` + @throw invalid_iterator.203 if called on iterators which does not belong + to the current JSON value; example: `"iterators do not fit current value"` + @throw invalid_iterator.204 if called on a primitive type with invalid + iterators (i.e., if `first != begin()` and `last != end()`); example: + `"iterators out of range"` + + @complexity The complexity depends on the type: + - objects: `log(size()) + std::distance(first, last)` + - arrays: linear in the distance between @a first and @a last, plus linear + in the distance between @a last and end of the container + - strings and binary: linear in the length of the member + - other types: constant + + @liveexample{The example shows the result of `erase()` for different JSON + types.,erase__IteratorType_IteratorType} + + @sa @ref erase(IteratorType) -- removes the element at a given position + @sa @ref erase(const typename object_t::key_type&) -- removes the element + from an object at the given key + @sa @ref erase(const size_type) -- removes the element from an array at + the given index + + @since version 1.0.0 + */ + template < class IteratorType, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type + = 0 > + IteratorType erase(IteratorType first, IteratorType last) + { + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object)) + { + JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value")); + } + + IteratorType result = end(); + + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + case value_t::binary: + { + if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin() + || !last.m_it.primitive_iterator.is_end())) + { + JSON_THROW(invalid_iterator::create(204, "iterators out of range")); + } + + if (is_string()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.string); + std::allocator_traits::deallocate(alloc, m_value.string, 1); + m_value.string = nullptr; + } + else if (is_binary()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.binary); + std::allocator_traits::deallocate(alloc, m_value.binary, 1); + m_value.binary = nullptr; + } + + m_type = value_t::null; + assert_invariant(); + break; + } + + case value_t::object: + { + result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, + last.m_it.object_iterator); + break; + } + + case value_t::array: + { + result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, + last.m_it.array_iterator); + break; + } + + default: + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); + } + + return result; + } + + /*! + @brief remove element from a JSON object given a key + + Removes elements from a JSON object with the key value @a key. + + @param[in] key value of the elements to remove + + @return Number of elements removed. If @a ObjectType is the default + `std::map` type, the return value will always be `0` (@a key was not + found) or `1` (@a key was found). + + @post References and iterators to the erased elements are invalidated. + Other references and iterators are not affected. + + @throw type_error.307 when called on a type other than JSON object; + example: `"cannot use erase() with null"` + + @complexity `log(size()) + count(key)` + + @liveexample{The example shows the effect of `erase()`.,erase__key_type} + + @sa @ref erase(IteratorType) -- removes the element at a given position + @sa @ref erase(IteratorType, IteratorType) -- removes the elements in + the given range + @sa @ref erase(const size_type) -- removes the element from an array at + the given index + + @since version 1.0.0 + */ + size_type erase(const typename object_t::key_type& key) + { + // this erase only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return m_value.object->erase(key); + } + + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); + } + + /*! + @brief remove element from a JSON array given an index + + Removes element from a JSON array at the index @a idx. + + @param[in] idx index of the element to remove + + @throw type_error.307 when called on a type other than JSON object; + example: `"cannot use erase() with null"` + @throw out_of_range.401 when `idx >= size()`; example: `"array index 17 + is out of range"` + + @complexity Linear in distance between @a idx and the end of the container. + + @liveexample{The example shows the effect of `erase()`.,erase__size_type} + + @sa @ref erase(IteratorType) -- removes the element at a given position + @sa @ref erase(IteratorType, IteratorType) -- removes the elements in + the given range + @sa @ref erase(const typename object_t::key_type&) -- removes the element + from an object at the given key + + @since version 1.0.0 + */ + void erase(const size_type idx) + { + // this erase only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + if (JSON_HEDLEY_UNLIKELY(idx >= size())) + { + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); + } + + m_value.array->erase(m_value.array->begin() + static_cast(idx)); + } + else + { + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); + } + } + + /// @} + + + //////////// + // lookup // + //////////// + + /// @name lookup + /// @{ + + /*! + @brief find an element in a JSON object + + Finds an element in a JSON object with key equivalent to @a key. If the + element is not found or the JSON value is not an object, end() is + returned. + + @note This method always returns @ref end() when executed on a JSON type + that is not an object. + + @param[in] key key value of the element to search for. + + @return Iterator to an element with key equivalent to @a key. If no such + element is found or the JSON value is not an object, past-the-end (see + @ref end()) iterator is returned. + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The example shows how `find()` is used.,find__key_type} + + @sa @ref contains(KeyT&&) const -- checks whether a key exists + + @since version 1.0.0 + */ + template + iterator find(KeyT&& key) + { + auto result = end(); + + if (is_object()) + { + result.m_it.object_iterator = m_value.object->find(std::forward(key)); + } + + return result; + } + + /*! + @brief find an element in a JSON object + @copydoc find(KeyT&&) + */ + template + const_iterator find(KeyT&& key) const + { + auto result = cend(); + + if (is_object()) + { + result.m_it.object_iterator = m_value.object->find(std::forward(key)); + } + + return result; + } + + /*! + @brief returns the number of occurrences of a key in a JSON object + + Returns the number of elements with key @a key. If ObjectType is the + default `std::map` type, the return value will always be `0` (@a key was + not found) or `1` (@a key was found). + + @note This method always returns `0` when executed on a JSON type that is + not an object. + + @param[in] key key value of the element to count + + @return Number of elements with key @a key. If the JSON value is not an + object, the return value will be `0`. + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The example shows how `count()` is used.,count} + + @since version 1.0.0 + */ + template + size_type count(KeyT&& key) const + { + // return 0 for all nonobject types + return is_object() ? m_value.object->count(std::forward(key)) : 0; + } + + /*! + @brief check the existence of an element in a JSON object + + Check whether an element exists in a JSON object with key equivalent to + @a key. If the element is not found or the JSON value is not an object, + false is returned. + + @note This method always returns false when executed on a JSON type + that is not an object. + + @param[in] key key value to check its existence. + + @return true if an element with specified @a key exists. If no such + element with such key is found or the JSON value is not an object, + false is returned. + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The following code shows an example for `contains()`.,contains} + + @sa @ref find(KeyT&&) -- returns an iterator to an object element + @sa @ref contains(const json_pointer&) const -- checks the existence for a JSON pointer + + @since version 3.6.0 + */ + template < typename KeyT, typename std::enable_if < + !std::is_same::type, json_pointer>::value, int >::type = 0 > + bool contains(KeyT && key) const + { + return is_object() && m_value.object->find(std::forward(key)) != m_value.object->end(); + } + + /*! + @brief check the existence of an element in a JSON object given a JSON pointer + + Check whether the given JSON pointer @a ptr can be resolved in the current + JSON value. + + @note This method can be executed on any JSON value type. + + @param[in] ptr JSON pointer to check its existence. + + @return true if the JSON pointer can be resolved to a stored value, false + otherwise. + + @post If `j.contains(ptr)` returns true, it is safe to call `j[ptr]`. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The following code shows an example for `contains()`.,contains_json_pointer} + + @sa @ref contains(KeyT &&) const -- checks the existence of a key + + @since version 3.7.0 + */ + bool contains(const json_pointer& ptr) const + { + return ptr.contains(this); + } + + /// @} + + + /////////////// + // iterators // + /////////////// + + /// @name iterators + /// @{ + + /*! + @brief returns an iterator to the first element + + Returns an iterator to the first element. + + @image html range-begin-end.svg "Illustration from cppreference.com" + + @return iterator to the first element + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + + @liveexample{The following code shows an example for `begin()`.,begin} + + @sa @ref cbegin() -- returns a const iterator to the beginning + @sa @ref end() -- returns an iterator to the end + @sa @ref cend() -- returns a const iterator to the end + + @since version 1.0.0 + */ + iterator begin() noexcept + { + iterator result(this); + result.set_begin(); + return result; + } + + /*! + @copydoc basic_json::cbegin() + */ + const_iterator begin() const noexcept + { + return cbegin(); + } + + /*! + @brief returns a const iterator to the first element + + Returns a const iterator to the first element. + + @image html range-begin-end.svg "Illustration from cppreference.com" + + @return const iterator to the first element + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of `const_cast(*this).begin()`. + + @liveexample{The following code shows an example for `cbegin()`.,cbegin} + + @sa @ref begin() -- returns an iterator to the beginning + @sa @ref end() -- returns an iterator to the end + @sa @ref cend() -- returns a const iterator to the end + + @since version 1.0.0 + */ + const_iterator cbegin() const noexcept + { + const_iterator result(this); + result.set_begin(); + return result; + } + + /*! + @brief returns an iterator to one past the last element + + Returns an iterator to one past the last element. + + @image html range-begin-end.svg "Illustration from cppreference.com" + + @return iterator one past the last element + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + + @liveexample{The following code shows an example for `end()`.,end} + + @sa @ref cend() -- returns a const iterator to the end + @sa @ref begin() -- returns an iterator to the beginning + @sa @ref cbegin() -- returns a const iterator to the beginning + + @since version 1.0.0 + */ + iterator end() noexcept + { + iterator result(this); + result.set_end(); + return result; + } + + /*! + @copydoc basic_json::cend() + */ + const_iterator end() const noexcept + { + return cend(); + } + + /*! + @brief returns a const iterator to one past the last element + + Returns a const iterator to one past the last element. + + @image html range-begin-end.svg "Illustration from cppreference.com" + + @return const iterator one past the last element + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of `const_cast(*this).end()`. + + @liveexample{The following code shows an example for `cend()`.,cend} + + @sa @ref end() -- returns an iterator to the end + @sa @ref begin() -- returns an iterator to the beginning + @sa @ref cbegin() -- returns a const iterator to the beginning + + @since version 1.0.0 + */ + const_iterator cend() const noexcept + { + const_iterator result(this); + result.set_end(); + return result; + } + + /*! + @brief returns an iterator to the reverse-beginning + + Returns an iterator to the reverse-beginning; that is, the last element. + + @image html range-rbegin-rend.svg "Illustration from cppreference.com" + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) + requirements: + - The complexity is constant. + - Has the semantics of `reverse_iterator(end())`. + + @liveexample{The following code shows an example for `rbegin()`.,rbegin} + + @sa @ref crbegin() -- returns a const reverse iterator to the beginning + @sa @ref rend() -- returns a reverse iterator to the end + @sa @ref crend() -- returns a const reverse iterator to the end + + @since version 1.0.0 + */ + reverse_iterator rbegin() noexcept + { + return reverse_iterator(end()); + } + + /*! + @copydoc basic_json::crbegin() + */ + const_reverse_iterator rbegin() const noexcept + { + return crbegin(); + } + + /*! + @brief returns an iterator to the reverse-end + + Returns an iterator to the reverse-end; that is, one before the first + element. + + @image html range-rbegin-rend.svg "Illustration from cppreference.com" + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) + requirements: + - The complexity is constant. + - Has the semantics of `reverse_iterator(begin())`. + + @liveexample{The following code shows an example for `rend()`.,rend} + + @sa @ref crend() -- returns a const reverse iterator to the end + @sa @ref rbegin() -- returns a reverse iterator to the beginning + @sa @ref crbegin() -- returns a const reverse iterator to the beginning + + @since version 1.0.0 + */ + reverse_iterator rend() noexcept + { + return reverse_iterator(begin()); + } + + /*! + @copydoc basic_json::crend() + */ + const_reverse_iterator rend() const noexcept + { + return crend(); + } + + /*! + @brief returns a const reverse iterator to the last element + + Returns a const iterator to the reverse-beginning; that is, the last + element. + + @image html range-rbegin-rend.svg "Illustration from cppreference.com" + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) + requirements: + - The complexity is constant. + - Has the semantics of `const_cast(*this).rbegin()`. + + @liveexample{The following code shows an example for `crbegin()`.,crbegin} + + @sa @ref rbegin() -- returns a reverse iterator to the beginning + @sa @ref rend() -- returns a reverse iterator to the end + @sa @ref crend() -- returns a const reverse iterator to the end + + @since version 1.0.0 + */ + const_reverse_iterator crbegin() const noexcept + { + return const_reverse_iterator(cend()); + } + + /*! + @brief returns a const reverse iterator to one before the first + + Returns a const reverse iterator to the reverse-end; that is, one before + the first element. + + @image html range-rbegin-rend.svg "Illustration from cppreference.com" + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) + requirements: + - The complexity is constant. + - Has the semantics of `const_cast(*this).rend()`. + + @liveexample{The following code shows an example for `crend()`.,crend} + + @sa @ref rend() -- returns a reverse iterator to the end + @sa @ref rbegin() -- returns a reverse iterator to the beginning + @sa @ref crbegin() -- returns a const reverse iterator to the beginning + + @since version 1.0.0 + */ + const_reverse_iterator crend() const noexcept + { + return const_reverse_iterator(cbegin()); + } + + public: + /*! + @brief wrapper to access iterator member functions in range-based for + + This function allows to access @ref iterator::key() and @ref + iterator::value() during range-based for loops. In these loops, a + reference to the JSON values is returned, so there is no access to the + underlying iterator. + + For loop without iterator_wrapper: + + @code{cpp} + for (auto it = j_object.begin(); it != j_object.end(); ++it) + { + std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; + } + @endcode + + Range-based for loop without iterator proxy: + + @code{cpp} + for (auto it : j_object) + { + // "it" is of type json::reference and has no key() member + std::cout << "value: " << it << '\n'; + } + @endcode + + Range-based for loop with iterator proxy: + + @code{cpp} + for (auto it : json::iterator_wrapper(j_object)) + { + std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; + } + @endcode + + @note When iterating over an array, `key()` will return the index of the + element as string (see example). + + @param[in] ref reference to a JSON value + @return iteration proxy object wrapping @a ref with an interface to use in + range-based for loops + + @liveexample{The following code shows how the wrapper is used,iterator_wrapper} + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @note The name of this function is not yet final and may change in the + future. + + @deprecated This stream operator is deprecated and will be removed in + future 4.0.0 of the library. Please use @ref items() instead; + that is, replace `json::iterator_wrapper(j)` with `j.items()`. + */ + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) + static iteration_proxy iterator_wrapper(reference ref) noexcept + { + return ref.items(); + } + + /*! + @copydoc iterator_wrapper(reference) + */ + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) + static iteration_proxy iterator_wrapper(const_reference ref) noexcept + { + return ref.items(); + } + + /*! + @brief helper to access iterator member functions in range-based for + + This function allows to access @ref iterator::key() and @ref + iterator::value() during range-based for loops. In these loops, a + reference to the JSON values is returned, so there is no access to the + underlying iterator. + + For loop without `items()` function: + + @code{cpp} + for (auto it = j_object.begin(); it != j_object.end(); ++it) + { + std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; + } + @endcode + + Range-based for loop without `items()` function: + + @code{cpp} + for (auto it : j_object) + { + // "it" is of type json::reference and has no key() member + std::cout << "value: " << it << '\n'; + } + @endcode + + Range-based for loop with `items()` function: + + @code{cpp} + for (auto& el : j_object.items()) + { + std::cout << "key: " << el.key() << ", value:" << el.value() << '\n'; + } + @endcode + + The `items()` function also allows to use + [structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding) + (C++17): + + @code{cpp} + for (auto& [key, val] : j_object.items()) + { + std::cout << "key: " << key << ", value:" << val << '\n'; + } + @endcode + + @note When iterating over an array, `key()` will return the index of the + element as string (see example). For primitive types (e.g., numbers), + `key()` returns an empty string. + + @warning Using `items()` on temporary objects is dangerous. Make sure the + object's lifetime exeeds the iteration. See + for more + information. + + @return iteration proxy object wrapping @a ref with an interface to use in + range-based for loops + + @liveexample{The following code shows how the function is used.,items} + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 3.1.0, structured bindings support since 3.5.0. + */ + iteration_proxy items() noexcept + { + return iteration_proxy(*this); + } + + /*! + @copydoc items() + */ + iteration_proxy items() const noexcept + { + return iteration_proxy(*this); + } + + /// @} + + + ////////////// + // capacity // + ////////////// + + /// @name capacity + /// @{ + + /*! + @brief checks whether the container is empty. + + Checks if a JSON value has no elements (i.e. whether its @ref size is `0`). + + @return The return value depends on the different types and is + defined as follows: + Value type | return value + ----------- | ------------- + null | `true` + boolean | `false` + string | `false` + number | `false` + binary | `false` + object | result of function `object_t::empty()` + array | result of function `array_t::empty()` + + @liveexample{The following code uses `empty()` to check if a JSON + object contains any elements.,empty} + + @complexity Constant, as long as @ref array_t and @ref object_t satisfy + the Container concept; that is, their `empty()` functions have constant + complexity. + + @iterators No changes. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @note This function does not return whether a string stored as JSON value + is empty - it returns whether the JSON container itself is empty which is + false in the case of a string. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of `begin() == end()`. + + @sa @ref size() -- returns the number of elements + + @since version 1.0.0 + */ + bool empty() const noexcept + { + switch (m_type) + { + case value_t::null: + { + // null values are empty + return true; + } + + case value_t::array: + { + // delegate call to array_t::empty() + return m_value.array->empty(); + } + + case value_t::object: + { + // delegate call to object_t::empty() + return m_value.object->empty(); + } + + default: + { + // all other types are nonempty + return false; + } + } + } + + /*! + @brief returns the number of elements + + Returns the number of elements in a JSON value. + + @return The return value depends on the different types and is + defined as follows: + Value type | return value + ----------- | ------------- + null | `0` + boolean | `1` + string | `1` + number | `1` + binary | `1` + object | result of function object_t::size() + array | result of function array_t::size() + + @liveexample{The following code calls `size()` on the different value + types.,size} + + @complexity Constant, as long as @ref array_t and @ref object_t satisfy + the Container concept; that is, their size() functions have constant + complexity. + + @iterators No changes. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @note This function does not return the length of a string stored as JSON + value - it returns the number of elements in the JSON value which is 1 in + the case of a string. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of `std::distance(begin(), end())`. + + @sa @ref empty() -- checks whether the container is empty + @sa @ref max_size() -- returns the maximal number of elements + + @since version 1.0.0 + */ + size_type size() const noexcept + { + switch (m_type) + { + case value_t::null: + { + // null values are empty + return 0; + } + + case value_t::array: + { + // delegate call to array_t::size() + return m_value.array->size(); + } + + case value_t::object: + { + // delegate call to object_t::size() + return m_value.object->size(); + } + + default: + { + // all other types have size 1 + return 1; + } + } + } + + /*! + @brief returns the maximum possible number of elements + + Returns the maximum number of elements a JSON value is able to hold due to + system or library implementation limitations, i.e. `std::distance(begin(), + end())` for the JSON value. + + @return The return value depends on the different types and is + defined as follows: + Value type | return value + ----------- | ------------- + null | `0` (same as `size()`) + boolean | `1` (same as `size()`) + string | `1` (same as `size()`) + number | `1` (same as `size()`) + binary | `1` (same as `size()`) + object | result of function `object_t::max_size()` + array | result of function `array_t::max_size()` + + @liveexample{The following code calls `max_size()` on the different value + types. Note the output is implementation specific.,max_size} + + @complexity Constant, as long as @ref array_t and @ref object_t satisfy + the Container concept; that is, their `max_size()` functions have constant + complexity. + + @iterators No changes. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of returning `b.size()` where `b` is the largest + possible JSON value. + + @sa @ref size() -- returns the number of elements + + @since version 1.0.0 + */ + size_type max_size() const noexcept + { + switch (m_type) + { + case value_t::array: + { + // delegate call to array_t::max_size() + return m_value.array->max_size(); + } + + case value_t::object: + { + // delegate call to object_t::max_size() + return m_value.object->max_size(); + } + + default: + { + // all other types have max_size() == size() + return size(); + } + } + } + + /// @} + + + /////////////// + // modifiers // + /////////////// + + /// @name modifiers + /// @{ + + /*! + @brief clears the contents + + Clears the content of a JSON value and resets it to the default value as + if @ref basic_json(value_t) would have been called with the current value + type from @ref type(): + + Value type | initial value + ----------- | ------------- + null | `null` + boolean | `false` + string | `""` + number | `0` + binary | An empty byte vector + object | `{}` + array | `[]` + + @post Has the same effect as calling + @code {.cpp} + *this = basic_json(type()); + @endcode + + @liveexample{The example below shows the effect of `clear()` to different + JSON types.,clear} + + @complexity Linear in the size of the JSON value. + + @iterators All iterators, pointers and references related to this container + are invalidated. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @sa @ref basic_json(value_t) -- constructor that creates an object with the + same value than calling `clear()` + + @since version 1.0.0 + */ + void clear() noexcept + { + switch (m_type) + { + case value_t::number_integer: + { + m_value.number_integer = 0; + break; + } + + case value_t::number_unsigned: + { + m_value.number_unsigned = 0; + break; + } + + case value_t::number_float: + { + m_value.number_float = 0.0; + break; + } + + case value_t::boolean: + { + m_value.boolean = false; + break; + } + + case value_t::string: + { + m_value.string->clear(); + break; + } + + case value_t::binary: + { + m_value.binary->clear(); + break; + } + + case value_t::array: + { + m_value.array->clear(); + break; + } + + case value_t::object: + { + m_value.object->clear(); + break; + } + + default: + break; + } + } + + /*! + @brief add an object to an array + + Appends the given element @a val to the end of the JSON value. If the + function is called on a JSON null value, an empty array is created before + appending @a val. + + @param[in] val the value to add to the JSON array + + @throw type_error.308 when called on a type other than JSON array or + null; example: `"cannot use push_back() with number"` + + @complexity Amortized constant. + + @liveexample{The example shows how `push_back()` and `+=` can be used to + add elements to a JSON array. Note how the `null` value was silently + converted to a JSON array.,push_back} + + @since version 1.0.0 + */ + void push_back(basic_json&& val) + { + // push_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array (move semantics) + m_value.array->push_back(std::move(val)); + // if val is moved from, basic_json move constructor marks it null so we do not call the destructor + } + + /*! + @brief add an object to an array + @copydoc push_back(basic_json&&) + */ + reference operator+=(basic_json&& val) + { + push_back(std::move(val)); + return *this; + } + + /*! + @brief add an object to an array + @copydoc push_back(basic_json&&) + */ + void push_back(const basic_json& val) + { + // push_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array + m_value.array->push_back(val); + } + + /*! + @brief add an object to an array + @copydoc push_back(basic_json&&) + */ + reference operator+=(const basic_json& val) + { + push_back(val); + return *this; + } + + /*! + @brief add an object to an object + + Inserts the given element @a val to the JSON object. If the function is + called on a JSON null value, an empty object is created before inserting + @a val. + + @param[in] val the value to add to the JSON object + + @throw type_error.308 when called on a type other than JSON object or + null; example: `"cannot use push_back() with number"` + + @complexity Logarithmic in the size of the container, O(log(`size()`)). + + @liveexample{The example shows how `push_back()` and `+=` can be used to + add elements to a JSON object. Note how the `null` value was silently + converted to a JSON object.,push_back__object_t__value} + + @since version 1.0.0 + */ + void push_back(const typename object_t::value_type& val) + { + // push_back only works for null objects or objects + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); + } + + // transform null object into an object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // add element to array + m_value.object->insert(val); + } + + /*! + @brief add an object to an object + @copydoc push_back(const typename object_t::value_type&) + */ + reference operator+=(const typename object_t::value_type& val) + { + push_back(val); + return *this; + } + + /*! + @brief add an object to an object + + This function allows to use `push_back` with an initializer list. In case + + 1. the current value is an object, + 2. the initializer list @a init contains only two elements, and + 3. the first element of @a init is a string, + + @a init is converted into an object element and added using + @ref push_back(const typename object_t::value_type&). Otherwise, @a init + is converted to a JSON value and added using @ref push_back(basic_json&&). + + @param[in] init an initializer list + + @complexity Linear in the size of the initializer list @a init. + + @note This function is required to resolve an ambiguous overload error, + because pairs like `{"key", "value"}` can be both interpreted as + `object_t::value_type` or `std::initializer_list`, see + https://github.com/nlohmann/json/issues/235 for more information. + + @liveexample{The example shows how initializer lists are treated as + objects when possible.,push_back__initializer_list} + */ + void push_back(initializer_list_t init) + { + if (is_object() && init.size() == 2 && (*init.begin())->is_string()) + { + basic_json&& key = init.begin()->moved_or_copied(); + push_back(typename object_t::value_type( + std::move(key.get_ref()), (init.begin() + 1)->moved_or_copied())); + } + else + { + push_back(basic_json(init)); + } + } + + /*! + @brief add an object to an object + @copydoc push_back(initializer_list_t) + */ + reference operator+=(initializer_list_t init) + { + push_back(init); + return *this; + } + + /*! + @brief add an object to an array + + Creates a JSON value from the passed parameters @a args to the end of the + JSON value. If the function is called on a JSON null value, an empty array + is created before appending the value created from @a args. + + @param[in] args arguments to forward to a constructor of @ref basic_json + @tparam Args compatible types to create a @ref basic_json object + + @return reference to the inserted element + + @throw type_error.311 when called on a type other than JSON array or + null; example: `"cannot use emplace_back() with number"` + + @complexity Amortized constant. + + @liveexample{The example shows how `push_back()` can be used to add + elements to a JSON array. Note how the `null` value was silently converted + to a JSON array.,emplace_back} + + @since version 2.0.8, returns reference since 3.7.0 + */ + template + reference emplace_back(Args&& ... args) + { + // emplace_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(311, "cannot use emplace_back() with " + std::string(type_name()))); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array (perfect forwarding) +#ifdef JSON_HAS_CPP_17 + return m_value.array->emplace_back(std::forward(args)...); +#else + m_value.array->emplace_back(std::forward(args)...); + return m_value.array->back(); +#endif + } + + /*! + @brief add an object to an object if key does not exist + + Inserts a new element into a JSON object constructed in-place with the + given @a args if there is no element with the key in the container. If the + function is called on a JSON null value, an empty object is created before + appending the value created from @a args. + + @param[in] args arguments to forward to a constructor of @ref basic_json + @tparam Args compatible types to create a @ref basic_json object + + @return a pair consisting of an iterator to the inserted element, or the + already-existing element if no insertion happened, and a bool + denoting whether the insertion took place. + + @throw type_error.311 when called on a type other than JSON object or + null; example: `"cannot use emplace() with number"` + + @complexity Logarithmic in the size of the container, O(log(`size()`)). + + @liveexample{The example shows how `emplace()` can be used to add elements + to a JSON object. Note how the `null` value was silently converted to a + JSON object. Further note how no value is added if there was already one + value stored with the same key.,emplace} + + @since version 2.0.8 + */ + template + std::pair emplace(Args&& ... args) + { + // emplace only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) + { + JSON_THROW(type_error::create(311, "cannot use emplace() with " + std::string(type_name()))); + } + + // transform null object into an object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // add element to array (perfect forwarding) + auto res = m_value.object->emplace(std::forward(args)...); + // create result iterator and set iterator to the result of emplace + auto it = begin(); + it.m_it.object_iterator = res.first; + + // return pair of iterator and boolean + return {it, res.second}; + } + + /// Helper for insertion of an iterator + /// @note: This uses std::distance to support GCC 4.8, + /// see https://github.com/nlohmann/json/pull/1257 + template + iterator insert_iterator(const_iterator pos, Args&& ... args) + { + iterator result(this); + JSON_ASSERT(m_value.array != nullptr); + + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, std::forward(args)...); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + + // This could have been written as: + // result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); + // but the return value of insert is missing in GCC 4.8, so it is written this way instead. + + return result; + } + + /*! + @brief inserts element + + Inserts element @a val before iterator @a pos. + + @param[in] pos iterator before which the content will be inserted; may be + the end() iterator + @param[in] val element to insert + @return iterator pointing to the inserted @a val. + + @throw type_error.309 if called on JSON values other than arrays; + example: `"cannot use insert() with string"` + @throw invalid_iterator.202 if @a pos is not an iterator of *this; + example: `"iterator does not fit current value"` + + @complexity Constant plus linear in the distance between @a pos and end of + the container. + + @liveexample{The example shows how `insert()` is used.,insert} + + @since version 1.0.0 + */ + iterator insert(const_iterator pos, const basic_json& val) + { + // insert only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); + } + + // insert to array and return iterator + return insert_iterator(pos, val); + } + + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); + } + + /*! + @brief inserts element + @copydoc insert(const_iterator, const basic_json&) + */ + iterator insert(const_iterator pos, basic_json&& val) + { + return insert(pos, val); + } + + /*! + @brief inserts elements + + Inserts @a cnt copies of @a val before iterator @a pos. + + @param[in] pos iterator before which the content will be inserted; may be + the end() iterator + @param[in] cnt number of copies of @a val to insert + @param[in] val element to insert + @return iterator pointing to the first element inserted, or @a pos if + `cnt==0` + + @throw type_error.309 if called on JSON values other than arrays; example: + `"cannot use insert() with string"` + @throw invalid_iterator.202 if @a pos is not an iterator of *this; + example: `"iterator does not fit current value"` + + @complexity Linear in @a cnt plus linear in the distance between @a pos + and end of the container. + + @liveexample{The example shows how `insert()` is used.,insert__count} + + @since version 1.0.0 + */ + iterator insert(const_iterator pos, size_type cnt, const basic_json& val) + { + // insert only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); + } + + // insert to array and return iterator + return insert_iterator(pos, cnt, val); + } + + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); + } + + /*! + @brief inserts elements + + Inserts elements from range `[first, last)` before iterator @a pos. + + @param[in] pos iterator before which the content will be inserted; may be + the end() iterator + @param[in] first begin of the range of elements to insert + @param[in] last end of the range of elements to insert + + @throw type_error.309 if called on JSON values other than arrays; example: + `"cannot use insert() with string"` + @throw invalid_iterator.202 if @a pos is not an iterator of *this; + example: `"iterator does not fit current value"` + @throw invalid_iterator.210 if @a first and @a last do not belong to the + same JSON value; example: `"iterators do not fit"` + @throw invalid_iterator.211 if @a first or @a last are iterators into + container for which insert is called; example: `"passed iterators may not + belong to container"` + + @return iterator pointing to the first element inserted, or @a pos if + `first==last` + + @complexity Linear in `std::distance(first, last)` plus linear in the + distance between @a pos and end of the container. + + @liveexample{The example shows how `insert()` is used.,insert__range} + + @since version 1.0.0 + */ + iterator insert(const_iterator pos, const_iterator first, const_iterator last) + { + // insert only works for arrays + if (JSON_HEDLEY_UNLIKELY(!is_array())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); + } + + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); + } + + if (JSON_HEDLEY_UNLIKELY(first.m_object == this)) + { + JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container")); + } + + // insert to array and return iterator + return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator); + } + + /*! + @brief inserts elements + + Inserts elements from initializer list @a ilist before iterator @a pos. + + @param[in] pos iterator before which the content will be inserted; may be + the end() iterator + @param[in] ilist initializer list to insert the values from + + @throw type_error.309 if called on JSON values other than arrays; example: + `"cannot use insert() with string"` + @throw invalid_iterator.202 if @a pos is not an iterator of *this; + example: `"iterator does not fit current value"` + + @return iterator pointing to the first element inserted, or @a pos if + `ilist` is empty + + @complexity Linear in `ilist.size()` plus linear in the distance between + @a pos and end of the container. + + @liveexample{The example shows how `insert()` is used.,insert__ilist} + + @since version 1.0.0 + */ + iterator insert(const_iterator pos, initializer_list_t ilist) + { + // insert only works for arrays + if (JSON_HEDLEY_UNLIKELY(!is_array())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); + } + + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); + } + + // insert to array and return iterator + return insert_iterator(pos, ilist.begin(), ilist.end()); + } + + /*! + @brief inserts elements + + Inserts elements from range `[first, last)`. + + @param[in] first begin of the range of elements to insert + @param[in] last end of the range of elements to insert + + @throw type_error.309 if called on JSON values other than objects; example: + `"cannot use insert() with string"` + @throw invalid_iterator.202 if iterator @a first or @a last does does not + point to an object; example: `"iterators first and last must point to + objects"` + @throw invalid_iterator.210 if @a first and @a last do not belong to the + same JSON value; example: `"iterators do not fit"` + + @complexity Logarithmic: `O(N*log(size() + N))`, where `N` is the number + of elements to insert. + + @liveexample{The example shows how `insert()` is used.,insert__range_object} + + @since version 3.0.0 + */ + void insert(const_iterator first, const_iterator last) + { + // insert only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); + } + + // passed iterators must belong to objects + if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object())) + { + JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects")); + } + + m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator); + } + + /*! + @brief updates a JSON object from another object, overwriting existing keys + + Inserts all values from JSON object @a j and overwrites existing keys. + + @param[in] j JSON object to read values from + + @throw type_error.312 if called on JSON values other than objects; example: + `"cannot use update() with string"` + + @complexity O(N*log(size() + N)), where N is the number of elements to + insert. + + @liveexample{The example shows how `update()` is used.,update} + + @sa https://docs.python.org/3.6/library/stdtypes.html#dict.update + + @since version 3.0.0 + */ + void update(const_reference j) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_type = value_t::object; + m_value.object = create(); + assert_invariant(); + } + + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()))); + } + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(j.type_name()))); + } + + for (auto it = j.cbegin(); it != j.cend(); ++it) + { + m_value.object->operator[](it.key()) = it.value(); + } + } + + /*! + @brief updates a JSON object from another object, overwriting existing keys + + Inserts all values from from range `[first, last)` and overwrites existing + keys. + + @param[in] first begin of the range of elements to insert + @param[in] last end of the range of elements to insert + + @throw type_error.312 if called on JSON values other than objects; example: + `"cannot use update() with string"` + @throw invalid_iterator.202 if iterator @a first or @a last does does not + point to an object; example: `"iterators first and last must point to + objects"` + @throw invalid_iterator.210 if @a first and @a last do not belong to the + same JSON value; example: `"iterators do not fit"` + + @complexity O(N*log(size() + N)), where N is the number of elements to + insert. + + @liveexample{The example shows how `update()` is used__range.,update} + + @sa https://docs.python.org/3.6/library/stdtypes.html#dict.update + + @since version 3.0.0 + */ + void update(const_iterator first, const_iterator last) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_type = value_t::object; + m_value.object = create(); + assert_invariant(); + } + + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()))); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); + } + + // passed iterators must belong to objects + if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object() + || !last.m_object->is_object())) + { + JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects")); + } + + for (auto it = first; it != last; ++it) + { + m_value.object->operator[](it.key()) = it.value(); + } + } + + /*! + @brief exchanges the values + + Exchanges the contents of the JSON value with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other JSON value to exchange the contents with + + @complexity Constant. + + @liveexample{The example below shows how JSON values can be swapped with + `swap()`.,swap__reference} + + @since version 1.0.0 + */ + void swap(reference other) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + std::swap(m_type, other.m_type); + std::swap(m_value, other.m_value); + assert_invariant(); + } + + /*! + @brief exchanges the values + + Exchanges the contents of the JSON value from @a left with those of @a right. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. implemented as a friend function callable via ADL. + + @param[in,out] left JSON value to exchange the contents with + @param[in,out] right JSON value to exchange the contents with + + @complexity Constant. + + @liveexample{The example below shows how JSON values can be swapped with + `swap()`.,swap__reference} + + @since version 1.0.0 + */ + friend void swap(reference left, reference right) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + left.swap(right); + } + + /*! + @brief exchanges the values + + Exchanges the contents of a JSON array with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other array to exchange the contents with + + @throw type_error.310 when JSON value is not an array; example: `"cannot + use swap() with string"` + + @complexity Constant. + + @liveexample{The example below shows how arrays can be swapped with + `swap()`.,swap__array_t} + + @since version 1.0.0 + */ + void swap(array_t& other) + { + // swap only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + std::swap(*(m_value.array), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); + } + } + + /*! + @brief exchanges the values + + Exchanges the contents of a JSON object with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other object to exchange the contents with + + @throw type_error.310 when JSON value is not an object; example: + `"cannot use swap() with string"` + + @complexity Constant. + + @liveexample{The example below shows how objects can be swapped with + `swap()`.,swap__object_t} + + @since version 1.0.0 + */ + void swap(object_t& other) + { + // swap only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + std::swap(*(m_value.object), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); + } + } + + /*! + @brief exchanges the values + + Exchanges the contents of a JSON string with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other string to exchange the contents with + + @throw type_error.310 when JSON value is not a string; example: `"cannot + use swap() with boolean"` + + @complexity Constant. + + @liveexample{The example below shows how strings can be swapped with + `swap()`.,swap__string_t} + + @since version 1.0.0 + */ + void swap(string_t& other) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_string())) + { + std::swap(*(m_value.string), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); + } + } + + /*! + @brief exchanges the values + + Exchanges the contents of a JSON string with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other binary to exchange the contents with + + @throw type_error.310 when JSON value is not a string; example: `"cannot + use swap() with boolean"` + + @complexity Constant. + + @liveexample{The example below shows how strings can be swapped with + `swap()`.,swap__binary_t} + + @since version 3.8.0 + */ + void swap(binary_t& other) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + std::swap(*(m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); + } + } + + /// @copydoc swap(binary_t) + void swap(typename binary_t::container_type& other) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + std::swap(*(m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); + } + } + + /// @} + + public: + ////////////////////////////////////////// + // lexicographical comparison operators // + ////////////////////////////////////////// + + /// @name lexicographical comparison operators + /// @{ + + /*! + @brief comparison: equal + + Compares two JSON values for equality according to the following rules: + - Two JSON values are equal if (1) they are from the same type and (2) + their stored values are the same according to their respective + `operator==`. + - Integer and floating-point numbers are automatically converted before + comparison. Note that two NaN values are always treated as unequal. + - Two JSON null values are equal. + + @note Floating-point inside JSON values numbers are compared with + `json::number_float_t::operator==` which is `double::operator==` by + default. To compare floating-point while respecting an epsilon, an alternative + [comparison function](https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39) + could be used, for instance + @code {.cpp} + template::value, T>::type> + inline bool is_same(T a, T b, T epsilon = std::numeric_limits::epsilon()) noexcept + { + return std::abs(a - b) <= epsilon; + } + @endcode + Or you can self-defined operator equal function like this: + @code {.cpp} + bool my_equal(const_reference lhs, const_reference rhs) { + const auto lhs_type lhs.type(); + const auto rhs_type rhs.type(); + if (lhs_type == rhs_type) { + switch(lhs_type) + // self_defined case + case value_t::number_float: + return std::abs(lhs - rhs) <= std::numeric_limits::epsilon(); + // other cases remain the same with the original + ... + } + ... + } + @endcode + + @note NaN values never compare equal to themselves or to other NaN values. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether the values @a lhs and @a rhs are equal + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @complexity Linear. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__equal} + + @since version 1.0.0 + */ + friend bool operator==(const_reference lhs, const_reference rhs) noexcept + { + const auto lhs_type = lhs.type(); + const auto rhs_type = rhs.type(); + + if (lhs_type == rhs_type) + { + switch (lhs_type) + { + case value_t::array: + return *lhs.m_value.array == *rhs.m_value.array; + + case value_t::object: + return *lhs.m_value.object == *rhs.m_value.object; + + case value_t::null: + return true; + + case value_t::string: + return *lhs.m_value.string == *rhs.m_value.string; + + case value_t::boolean: + return lhs.m_value.boolean == rhs.m_value.boolean; + + case value_t::number_integer: + return lhs.m_value.number_integer == rhs.m_value.number_integer; + + case value_t::number_unsigned: + return lhs.m_value.number_unsigned == rhs.m_value.number_unsigned; + + case value_t::number_float: + return lhs.m_value.number_float == rhs.m_value.number_float; + + case value_t::binary: + return *lhs.m_value.binary == *rhs.m_value.binary; + + default: + return false; + } + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_integer) == rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) + { + return lhs.m_value.number_float == static_cast(rhs.m_value.number_integer); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_float == static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) + { + return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_integer; + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_integer == static_cast(rhs.m_value.number_unsigned); + } + + return false; + } + + /*! + @brief comparison: equal + @copydoc operator==(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator==(const_reference lhs, const ScalarType rhs) noexcept + { + return lhs == basic_json(rhs); + } + + /*! + @brief comparison: equal + @copydoc operator==(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator==(const ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) == rhs; + } + + /*! + @brief comparison: not equal + + Compares two JSON values for inequality by calculating `not (lhs == rhs)`. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether the values @a lhs and @a rhs are not equal + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__notequal} + + @since version 1.0.0 + */ + friend bool operator!=(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs == rhs); + } + + /*! + @brief comparison: not equal + @copydoc operator!=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator!=(const_reference lhs, const ScalarType rhs) noexcept + { + return lhs != basic_json(rhs); + } + + /*! + @brief comparison: not equal + @copydoc operator!=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator!=(const ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) != rhs; + } + + /*! + @brief comparison: less than + + Compares whether one JSON value @a lhs is less than another JSON value @a + rhs according to the following rules: + - If @a lhs and @a rhs have the same type, the values are compared using + the default `<` operator. + - Integer and floating-point numbers are automatically converted before + comparison + - In case @a lhs and @a rhs have different types, the values are ignored + and the order of the types is considered, see + @ref operator<(const value_t, const value_t). + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether @a lhs is less than @a rhs + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__less} + + @since version 1.0.0 + */ + friend bool operator<(const_reference lhs, const_reference rhs) noexcept + { + const auto lhs_type = lhs.type(); + const auto rhs_type = rhs.type(); + + if (lhs_type == rhs_type) + { + switch (lhs_type) + { + case value_t::array: + // note parentheses are necessary, see + // https://github.com/nlohmann/json/issues/1530 + return (*lhs.m_value.array) < (*rhs.m_value.array); + + case value_t::object: + return (*lhs.m_value.object) < (*rhs.m_value.object); + + case value_t::null: + return false; + + case value_t::string: + return (*lhs.m_value.string) < (*rhs.m_value.string); + + case value_t::boolean: + return (lhs.m_value.boolean) < (rhs.m_value.boolean); + + case value_t::number_integer: + return (lhs.m_value.number_integer) < (rhs.m_value.number_integer); + + case value_t::number_unsigned: + return (lhs.m_value.number_unsigned) < (rhs.m_value.number_unsigned); + + case value_t::number_float: + return (lhs.m_value.number_float) < (rhs.m_value.number_float); + + case value_t::binary: + return (*lhs.m_value.binary) < (*rhs.m_value.binary); + + default: + return false; + } + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_integer) < rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) + { + return lhs.m_value.number_float < static_cast(rhs.m_value.number_integer); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_float < static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_integer < static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) + { + return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_integer; + } + + // We only reach this line if we cannot compare values. In that case, + // we compare types. Note we have to call the operator explicitly, + // because MSVC has problems otherwise. + return operator<(lhs_type, rhs_type); + } + + /*! + @brief comparison: less than + @copydoc operator<(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator<(const_reference lhs, const ScalarType rhs) noexcept + { + return lhs < basic_json(rhs); + } + + /*! + @brief comparison: less than + @copydoc operator<(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator<(const ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) < rhs; + } + + /*! + @brief comparison: less than or equal + + Compares whether one JSON value @a lhs is less than or equal to another + JSON value by calculating `not (rhs < lhs)`. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether @a lhs is less than or equal to @a rhs + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__greater} + + @since version 1.0.0 + */ + friend bool operator<=(const_reference lhs, const_reference rhs) noexcept + { + return !(rhs < lhs); + } + + /*! + @brief comparison: less than or equal + @copydoc operator<=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator<=(const_reference lhs, const ScalarType rhs) noexcept + { + return lhs <= basic_json(rhs); + } + + /*! + @brief comparison: less than or equal + @copydoc operator<=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator<=(const ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) <= rhs; + } + + /*! + @brief comparison: greater than + + Compares whether one JSON value @a lhs is greater than another + JSON value by calculating `not (lhs <= rhs)`. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether @a lhs is greater than to @a rhs + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__lessequal} + + @since version 1.0.0 + */ + friend bool operator>(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs <= rhs); + } + + /*! + @brief comparison: greater than + @copydoc operator>(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator>(const_reference lhs, const ScalarType rhs) noexcept + { + return lhs > basic_json(rhs); + } + + /*! + @brief comparison: greater than + @copydoc operator>(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator>(const ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) > rhs; + } + + /*! + @brief comparison: greater than or equal + + Compares whether one JSON value @a lhs is greater than or equal to another + JSON value by calculating `not (lhs < rhs)`. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether @a lhs is greater than or equal to @a rhs + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__greaterequal} + + @since version 1.0.0 + */ + friend bool operator>=(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs < rhs); + } + + /*! + @brief comparison: greater than or equal + @copydoc operator>=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator>=(const_reference lhs, const ScalarType rhs) noexcept + { + return lhs >= basic_json(rhs); + } + + /*! + @brief comparison: greater than or equal + @copydoc operator>=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator>=(const ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) >= rhs; + } + + /// @} + + /////////////////// + // serialization // + /////////////////// + + /// @name serialization + /// @{ + + /*! + @brief serialize to stream + + Serialize the given JSON value @a j to the output stream @a o. The JSON + value will be serialized using the @ref dump member function. + + - The indentation of the output can be controlled with the member variable + `width` of the output stream @a o. For instance, using the manipulator + `std::setw(4)` on @a o sets the indentation level to `4` and the + serialization result is the same as calling `dump(4)`. + + - The indentation character can be controlled with the member variable + `fill` of the output stream @a o. For instance, the manipulator + `std::setfill('\\t')` sets indentation to use a tab character rather than + the default space character. + + @param[in,out] o stream to serialize to + @param[in] j JSON value to serialize + + @return the stream @a o + + @throw type_error.316 if a string stored inside the JSON value is not + UTF-8 encoded + + @complexity Linear. + + @liveexample{The example below shows the serialization with different + parameters to `width` to adjust the indentation level.,operator_serialize} + + @since version 1.0.0; indentation character added in version 3.0.0 + */ + friend std::ostream& operator<<(std::ostream& o, const basic_json& j) + { + // read width member and use it as indentation parameter if nonzero + const bool pretty_print = o.width() > 0; + const auto indentation = pretty_print ? o.width() : 0; + + // reset width to 0 for subsequent calls to this stream + o.width(0); + + // do the actual serialization + serializer s(detail::output_adapter(o), o.fill()); + s.dump(j, pretty_print, false, static_cast(indentation)); + return o; + } + + /*! + @brief serialize to stream + @deprecated This stream operator is deprecated and will be removed in + future 4.0.0 of the library. Please use + @ref operator<<(std::ostream&, const basic_json&) + instead; that is, replace calls like `j >> o;` with `o << j;`. + @since version 1.0.0; deprecated since version 3.0.0 + */ + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&)) + friend std::ostream& operator>>(const basic_json& j, std::ostream& o) + { + return o << j; + } + + /// @} + + + ///////////////////// + // deserialization // + ///////////////////// + + /// @name deserialization + /// @{ + + /*! + @brief deserialize from a compatible input + + @tparam InputType A compatible input, for instance + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. + + @param[in] i input to read from + @param[in] cb a parser callback function of type @ref parser_callback_t + which is used to control the deserialization by filtering unwanted values + (optional) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + @param[in] ignore_comments whether comments should be ignored and treated + like whitespace (true) or yield a parse error (true); (optional, false by + default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.101 if a parse error occurs; example: `""unexpected end + of input; expected string literal""` + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. The complexity can be higher if the parser callback function + @a cb or reading from the input @a i has a super-linear complexity. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below demonstrates the `parse()` function reading + from an array.,parse__array__parser_callback_t} + + @liveexample{The example below demonstrates the `parse()` function with + and without callback function.,parse__string__parser_callback_t} + + @liveexample{The example below demonstrates the `parse()` function with + and without callback function.,parse__istream__parser_callback_t} + + @liveexample{The example below demonstrates the `parse()` function reading + from a contiguous container.,parse__contiguouscontainer__parser_callback_t} + + @since version 2.0.3 (contiguous containers); version 3.9.0 allowed to + ignore comments. + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(InputType&& i, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(detail::input_adapter(std::forward(i)), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + /*! + @brief deserialize from a pair of character iterators + + The value_type of the iterator must be a integral type with size of 1, 2 or + 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32. + + @param[in] first iterator to start of character range + @param[in] last iterator to end of character range + @param[in] cb a parser callback function of type @ref parser_callback_t + which is used to control the deserialization by filtering unwanted values + (optional) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + @param[in] ignore_comments whether comments should be ignored and treated + like whitespace (true) or yield a parse error (true); (optional, false by + default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.101 if a parse error occurs; example: `""unexpected end + of input; expected string literal""` + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(IteratorType first, + IteratorType last, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len)) + static basic_json parse(detail::span_input_adapter&& i, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + /*! + @brief check if the input is valid JSON + + Unlike the @ref parse(InputType&&, const parser_callback_t,const bool) + function, this function neither throws an exception in case of invalid JSON + input (i.e., a parse error) nor creates diagnostic information. + + @tparam InputType A compatible input, for instance + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. + + @param[in] i input to read from + @param[in] ignore_comments whether comments should be ignored and treated + like whitespace (true) or yield a parse error (true); (optional, false by + default) + + @return Whether the input read from @a i is valid JSON. + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below demonstrates the `accept()` function reading + from a string.,accept__string} + */ + template + static bool accept(InputType&& i, + const bool ignore_comments = false) + { + return parser(detail::input_adapter(std::forward(i)), nullptr, false, ignore_comments).accept(true); + } + + template + static bool accept(IteratorType first, IteratorType last, + const bool ignore_comments = false) + { + return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len)) + static bool accept(detail::span_input_adapter&& i, + const bool ignore_comments = false) + { + return parser(i.get(), nullptr, false, ignore_comments).accept(true); + } + + /*! + @brief generate SAX events + + The SAX event lister must follow the interface of @ref json_sax. + + This function reads from a compatible input. Examples are: + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. + + @param[in] i input to read from + @param[in,out] sax SAX event listener + @param[in] format the format to parse (JSON, CBOR, MessagePack, or UBJSON) + @param[in] strict whether the input has to be consumed completely + @param[in] ignore_comments whether comments should be ignored and treated + like whitespace (true) or yield a parse error (true); (optional, false by + default); only applies to the JSON file format. + + @return return value of the last processed SAX event + + @throw parse_error.101 if a parse error occurs; example: `""unexpected end + of input; expected string literal""` + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. The complexity can be higher if the SAX consumer @a sax has + a super-linear complexity. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below demonstrates the `sax_parse()` function + reading from string and processing the events with a user-defined SAX + event consumer.,sax_parse} + + @since version 3.2.0 + */ + template + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(InputType&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = detail::input_adapter(std::forward(i)); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } + + template + JSON_HEDLEY_NON_NULL(3) + static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = detail::input_adapter(std::move(first), std::move(last)); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } + + template + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...)) + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = i.get(); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } + + /*! + @brief deserialize from stream + @deprecated This stream operator is deprecated and will be removed in + version 4.0.0 of the library. Please use + @ref operator>>(std::istream&, basic_json&) + instead; that is, replace calls like `j << i;` with `i >> j;`. + @since version 1.0.0; deprecated since version 3.0.0 + */ + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&)) + friend std::istream& operator<<(basic_json& j, std::istream& i) + { + return operator>>(i, j); + } + + /*! + @brief deserialize from stream + + Deserializes an input stream to a JSON value. + + @param[in,out] i input stream to read a serialized JSON value from + @param[in,out] j JSON value to write the deserialized input to + + @throw parse_error.101 in case of an unexpected token + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below shows how a JSON value is constructed by + reading a serialization from a stream.,operator_deserialize} + + @sa parse(std::istream&, const parser_callback_t) for a variant with a + parser callback function to filter values while parsing + + @since version 1.0.0 + */ + friend std::istream& operator>>(std::istream& i, basic_json& j) + { + parser(detail::input_adapter(i)).parse(false, j); + return i; + } + + /// @} + + /////////////////////////// + // convenience functions // + /////////////////////////// + + /*! + @brief return the type as string + + Returns the type name as string to be used in error messages - usually to + indicate that a function was called on a wrong JSON type. + + @return a string representation of a the @a m_type member: + Value type | return value + ----------- | ------------- + null | `"null"` + boolean | `"boolean"` + string | `"string"` + number | `"number"` (for all number types) + object | `"object"` + array | `"array"` + binary | `"binary"` + discarded | `"discarded"` + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @complexity Constant. + + @liveexample{The following code exemplifies `type_name()` for all JSON + types.,type_name} + + @sa @ref type() -- return the type of the JSON value + @sa @ref operator value_t() -- return the type of the JSON value (implicit) + + @since version 1.0.0, public since 2.1.0, `const char*` and `noexcept` + since 3.0.0 + */ + JSON_HEDLEY_RETURNS_NON_NULL + const char* type_name() const noexcept + { + { + switch (m_type) + { + case value_t::null: + return "null"; + case value_t::object: + return "object"; + case value_t::array: + return "array"; + case value_t::string: + return "string"; + case value_t::boolean: + return "boolean"; + case value_t::binary: + return "binary"; + case value_t::discarded: + return "discarded"; + default: + return "number"; + } + } + } + + + private: + ////////////////////// + // member variables // + ////////////////////// + + /// the type of the current element + value_t m_type = value_t::null; + + /// the value of the current element + json_value m_value = {}; + + ////////////////////////////////////////// + // binary serialization/deserialization // + ////////////////////////////////////////// + + /// @name binary serialization/deserialization support + /// @{ + + public: + /*! + @brief create a CBOR serialization of a given JSON value + + Serializes a given JSON value @a j to a byte vector using the CBOR (Concise + Binary Object Representation) serialization format. CBOR is a binary + serialization format which aims to be more compact than JSON itself, yet + more efficient to parse. + + The library uses the following mapping from JSON values types to + CBOR types according to the CBOR specification (RFC 7049): + + JSON value type | value/range | CBOR type | first byte + --------------- | ------------------------------------------ | ---------------------------------- | --------------- + null | `null` | Null | 0xF6 + boolean | `true` | True | 0xF5 + boolean | `false` | False | 0xF4 + number_integer | -9223372036854775808..-2147483649 | Negative integer (8 bytes follow) | 0x3B + number_integer | -2147483648..-32769 | Negative integer (4 bytes follow) | 0x3A + number_integer | -32768..-129 | Negative integer (2 bytes follow) | 0x39 + number_integer | -128..-25 | Negative integer (1 byte follow) | 0x38 + number_integer | -24..-1 | Negative integer | 0x20..0x37 + number_integer | 0..23 | Integer | 0x00..0x17 + number_integer | 24..255 | Unsigned integer (1 byte follow) | 0x18 + number_integer | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 + number_integer | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A + number_integer | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B + number_unsigned | 0..23 | Integer | 0x00..0x17 + number_unsigned | 24..255 | Unsigned integer (1 byte follow) | 0x18 + number_unsigned | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 + number_unsigned | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A + number_unsigned | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B + number_float | *any value representable by a float* | Single-Precision Float | 0xFA + number_float | *any value NOT representable by a float* | Double-Precision Float | 0xFB + string | *length*: 0..23 | UTF-8 string | 0x60..0x77 + string | *length*: 23..255 | UTF-8 string (1 byte follow) | 0x78 + string | *length*: 256..65535 | UTF-8 string (2 bytes follow) | 0x79 + string | *length*: 65536..4294967295 | UTF-8 string (4 bytes follow) | 0x7A + string | *length*: 4294967296..18446744073709551615 | UTF-8 string (8 bytes follow) | 0x7B + array | *size*: 0..23 | array | 0x80..0x97 + array | *size*: 23..255 | array (1 byte follow) | 0x98 + array | *size*: 256..65535 | array (2 bytes follow) | 0x99 + array | *size*: 65536..4294967295 | array (4 bytes follow) | 0x9A + array | *size*: 4294967296..18446744073709551615 | array (8 bytes follow) | 0x9B + object | *size*: 0..23 | map | 0xA0..0xB7 + object | *size*: 23..255 | map (1 byte follow) | 0xB8 + object | *size*: 256..65535 | map (2 bytes follow) | 0xB9 + object | *size*: 65536..4294967295 | map (4 bytes follow) | 0xBA + object | *size*: 4294967296..18446744073709551615 | map (8 bytes follow) | 0xBB + binary | *size*: 0..23 | byte string | 0x40..0x57 + binary | *size*: 23..255 | byte string (1 byte follow) | 0x58 + binary | *size*: 256..65535 | byte string (2 bytes follow) | 0x59 + binary | *size*: 65536..4294967295 | byte string (4 bytes follow) | 0x5A + binary | *size*: 4294967296..18446744073709551615 | byte string (8 bytes follow) | 0x5B + + @note The mapping is **complete** in the sense that any JSON value type + can be converted to a CBOR value. + + @note If NaN or Infinity are stored inside a JSON number, they are + serialized properly. This behavior differs from the @ref dump() + function which serializes NaN or Infinity to `null`. + + @note The following CBOR types are not used in the conversion: + - UTF-8 strings terminated by "break" (0x7F) + - arrays terminated by "break" (0x9F) + - maps terminated by "break" (0xBF) + - byte strings terminated by "break" (0x5F) + - date/time (0xC0..0xC1) + - bignum (0xC2..0xC3) + - decimal fraction (0xC4) + - bigfloat (0xC5) + - expected conversions (0xD5..0xD7) + - simple values (0xE0..0xF3, 0xF8) + - undefined (0xF7) + - half-precision floats (0xF9) + - break (0xFF) + + @param[in] j JSON value to serialize + @return CBOR serialization as byte vector + + @complexity Linear in the size of the JSON value @a j. + + @liveexample{The example shows the serialization of a JSON value to a byte + vector in CBOR format.,to_cbor} + + @sa http://cbor.io + @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the + analogous deserialization + @sa @ref to_msgpack(const basic_json&) for the related MessagePack format + @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the + related UBJSON format + + @since version 2.0.9; compact representation of floating-point numbers + since version 3.8.0 + */ + static std::vector to_cbor(const basic_json& j) + { + std::vector result; + to_cbor(j, result); + return result; + } + + static void to_cbor(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_cbor(j); + } + + static void to_cbor(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_cbor(j); + } + + /*! + @brief create a MessagePack serialization of a given JSON value + + Serializes a given JSON value @a j to a byte vector using the MessagePack + serialization format. MessagePack is a binary serialization format which + aims to be more compact than JSON itself, yet more efficient to parse. + + The library uses the following mapping from JSON values types to + MessagePack types according to the MessagePack specification: + + JSON value type | value/range | MessagePack type | first byte + --------------- | --------------------------------- | ---------------- | ---------- + null | `null` | nil | 0xC0 + boolean | `true` | true | 0xC3 + boolean | `false` | false | 0xC2 + number_integer | -9223372036854775808..-2147483649 | int64 | 0xD3 + number_integer | -2147483648..-32769 | int32 | 0xD2 + number_integer | -32768..-129 | int16 | 0xD1 + number_integer | -128..-33 | int8 | 0xD0 + number_integer | -32..-1 | negative fixint | 0xE0..0xFF + number_integer | 0..127 | positive fixint | 0x00..0x7F + number_integer | 128..255 | uint 8 | 0xCC + number_integer | 256..65535 | uint 16 | 0xCD + number_integer | 65536..4294967295 | uint 32 | 0xCE + number_integer | 4294967296..18446744073709551615 | uint 64 | 0xCF + number_unsigned | 0..127 | positive fixint | 0x00..0x7F + number_unsigned | 128..255 | uint 8 | 0xCC + number_unsigned | 256..65535 | uint 16 | 0xCD + number_unsigned | 65536..4294967295 | uint 32 | 0xCE + number_unsigned | 4294967296..18446744073709551615 | uint 64 | 0xCF + number_float | *any value representable by a float* | float 32 | 0xCA + number_float | *any value NOT representable by a float* | float 64 | 0xCB + string | *length*: 0..31 | fixstr | 0xA0..0xBF + string | *length*: 32..255 | str 8 | 0xD9 + string | *length*: 256..65535 | str 16 | 0xDA + string | *length*: 65536..4294967295 | str 32 | 0xDB + array | *size*: 0..15 | fixarray | 0x90..0x9F + array | *size*: 16..65535 | array 16 | 0xDC + array | *size*: 65536..4294967295 | array 32 | 0xDD + object | *size*: 0..15 | fix map | 0x80..0x8F + object | *size*: 16..65535 | map 16 | 0xDE + object | *size*: 65536..4294967295 | map 32 | 0xDF + binary | *size*: 0..255 | bin 8 | 0xC4 + binary | *size*: 256..65535 | bin 16 | 0xC5 + binary | *size*: 65536..4294967295 | bin 32 | 0xC6 + + @note The mapping is **complete** in the sense that any JSON value type + can be converted to a MessagePack value. + + @note The following values can **not** be converted to a MessagePack value: + - strings with more than 4294967295 bytes + - byte strings with more than 4294967295 bytes + - arrays with more than 4294967295 elements + - objects with more than 4294967295 elements + + @note Any MessagePack output created @ref to_msgpack can be successfully + parsed by @ref from_msgpack. + + @note If NaN or Infinity are stored inside a JSON number, they are + serialized properly. This behavior differs from the @ref dump() + function which serializes NaN or Infinity to `null`. + + @param[in] j JSON value to serialize + @return MessagePack serialization as byte vector + + @complexity Linear in the size of the JSON value @a j. + + @liveexample{The example shows the serialization of a JSON value to a byte + vector in MessagePack format.,to_msgpack} + + @sa http://msgpack.org + @sa @ref from_msgpack for the analogous deserialization + @sa @ref to_cbor(const basic_json& for the related CBOR format + @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the + related UBJSON format + + @since version 2.0.9 + */ + static std::vector to_msgpack(const basic_json& j) + { + std::vector result; + to_msgpack(j, result); + return result; + } + + static void to_msgpack(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_msgpack(j); + } + + static void to_msgpack(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_msgpack(j); + } + + /*! + @brief create a UBJSON serialization of a given JSON value + + Serializes a given JSON value @a j to a byte vector using the UBJSON + (Universal Binary JSON) serialization format. UBJSON aims to be more compact + than JSON itself, yet more efficient to parse. + + The library uses the following mapping from JSON values types to + UBJSON types according to the UBJSON specification: + + JSON value type | value/range | UBJSON type | marker + --------------- | --------------------------------- | ----------- | ------ + null | `null` | null | `Z` + boolean | `true` | true | `T` + boolean | `false` | false | `F` + number_integer | -9223372036854775808..-2147483649 | int64 | `L` + number_integer | -2147483648..-32769 | int32 | `l` + number_integer | -32768..-129 | int16 | `I` + number_integer | -128..127 | int8 | `i` + number_integer | 128..255 | uint8 | `U` + number_integer | 256..32767 | int16 | `I` + number_integer | 32768..2147483647 | int32 | `l` + number_integer | 2147483648..9223372036854775807 | int64 | `L` + number_unsigned | 0..127 | int8 | `i` + number_unsigned | 128..255 | uint8 | `U` + number_unsigned | 256..32767 | int16 | `I` + number_unsigned | 32768..2147483647 | int32 | `l` + number_unsigned | 2147483648..9223372036854775807 | int64 | `L` + number_unsigned | 2147483649..18446744073709551615 | high-precision | `H` + number_float | *any value* | float64 | `D` + string | *with shortest length indicator* | string | `S` + array | *see notes on optimized format* | array | `[` + object | *see notes on optimized format* | map | `{` + + @note The mapping is **complete** in the sense that any JSON value type + can be converted to a UBJSON value. + + @note The following values can **not** be converted to a UBJSON value: + - strings with more than 9223372036854775807 bytes (theoretical) + + @note The following markers are not used in the conversion: + - `Z`: no-op values are not created. + - `C`: single-byte strings are serialized with `S` markers. + + @note Any UBJSON output created @ref to_ubjson can be successfully parsed + by @ref from_ubjson. + + @note If NaN or Infinity are stored inside a JSON number, they are + serialized properly. This behavior differs from the @ref dump() + function which serializes NaN or Infinity to `null`. + + @note The optimized formats for containers are supported: Parameter + @a use_size adds size information to the beginning of a container and + removes the closing marker. Parameter @a use_type further checks + whether all elements of a container have the same type and adds the + type marker to the beginning of the container. The @a use_type + parameter must only be used together with @a use_size = true. Note + that @a use_size = true alone may result in larger representations - + the benefit of this parameter is that the receiving side is + immediately informed on the number of elements of the container. + + @note If the JSON data contains the binary type, the value stored is a list + of integers, as suggested by the UBJSON documentation. In particular, + this means that serialization and the deserialization of a JSON + containing binary values into UBJSON and back will result in a + different JSON object. + + @param[in] j JSON value to serialize + @param[in] use_size whether to add size annotations to container types + @param[in] use_type whether to add type annotations to container types + (must be combined with @a use_size = true) + @return UBJSON serialization as byte vector + + @complexity Linear in the size of the JSON value @a j. + + @liveexample{The example shows the serialization of a JSON value to a byte + vector in UBJSON format.,to_ubjson} + + @sa http://ubjson.org + @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the + analogous deserialization + @sa @ref to_cbor(const basic_json& for the related CBOR format + @sa @ref to_msgpack(const basic_json&) for the related MessagePack format + + @since version 3.1.0 + */ + static std::vector to_ubjson(const basic_json& j, + const bool use_size = false, + const bool use_type = false) + { + std::vector result; + to_ubjson(j, result, use_size, use_type); + return result; + } + + static void to_ubjson(const basic_json& j, detail::output_adapter o, + const bool use_size = false, const bool use_type = false) + { + binary_writer(o).write_ubjson(j, use_size, use_type); + } + + static void to_ubjson(const basic_json& j, detail::output_adapter o, + const bool use_size = false, const bool use_type = false) + { + binary_writer(o).write_ubjson(j, use_size, use_type); + } + + + /*! + @brief Serializes the given JSON object `j` to BSON and returns a vector + containing the corresponding BSON-representation. + + BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are + stored as a single entity (a so-called document). + + The library uses the following mapping from JSON values types to BSON types: + + JSON value type | value/range | BSON type | marker + --------------- | --------------------------------- | ----------- | ------ + null | `null` | null | 0x0A + boolean | `true`, `false` | boolean | 0x08 + number_integer | -9223372036854775808..-2147483649 | int64 | 0x12 + number_integer | -2147483648..2147483647 | int32 | 0x10 + number_integer | 2147483648..9223372036854775807 | int64 | 0x12 + number_unsigned | 0..2147483647 | int32 | 0x10 + number_unsigned | 2147483648..9223372036854775807 | int64 | 0x12 + number_unsigned | 9223372036854775808..18446744073709551615| -- | -- + number_float | *any value* | double | 0x01 + string | *any value* | string | 0x02 + array | *any value* | document | 0x04 + object | *any value* | document | 0x03 + binary | *any value* | binary | 0x05 + + @warning The mapping is **incomplete**, since only JSON-objects (and things + contained therein) can be serialized to BSON. + Also, integers larger than 9223372036854775807 cannot be serialized to BSON, + and the keys may not contain U+0000, since they are serialized a + zero-terminated c-strings. + + @throw out_of_range.407 if `j.is_number_unsigned() && j.get() > 9223372036854775807` + @throw out_of_range.409 if a key in `j` contains a NULL (U+0000) + @throw type_error.317 if `!j.is_object()` + + @pre The input `j` is required to be an object: `j.is_object() == true`. + + @note Any BSON output created via @ref to_bson can be successfully parsed + by @ref from_bson. + + @param[in] j JSON value to serialize + @return BSON serialization as byte vector + + @complexity Linear in the size of the JSON value @a j. + + @liveexample{The example shows the serialization of a JSON value to a byte + vector in BSON format.,to_bson} + + @sa http://bsonspec.org/spec.html + @sa @ref from_bson(detail::input_adapter&&, const bool strict) for the + analogous deserialization + @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the + related UBJSON format + @sa @ref to_cbor(const basic_json&) for the related CBOR format + @sa @ref to_msgpack(const basic_json&) for the related MessagePack format + */ + static std::vector to_bson(const basic_json& j) + { + std::vector result; + to_bson(j, result); + return result; + } + + /*! + @brief Serializes the given JSON object `j` to BSON and forwards the + corresponding BSON-representation to the given output_adapter `o`. + @param j The JSON object to convert to BSON. + @param o The output adapter that receives the binary BSON representation. + @pre The input `j` shall be an object: `j.is_object() == true` + @sa @ref to_bson(const basic_json&) + */ + static void to_bson(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_bson(j); + } + + /*! + @copydoc to_bson(const basic_json&, detail::output_adapter) + */ + static void to_bson(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_bson(j); + } + + + /*! + @brief create a JSON value from an input in CBOR format + + Deserializes a given input @a i to a JSON value using the CBOR (Concise + Binary Object Representation) serialization format. + + The library maps CBOR types to JSON value types as follows: + + CBOR type | JSON value type | first byte + ---------------------- | --------------- | ---------- + Integer | number_unsigned | 0x00..0x17 + Unsigned integer | number_unsigned | 0x18 + Unsigned integer | number_unsigned | 0x19 + Unsigned integer | number_unsigned | 0x1A + Unsigned integer | number_unsigned | 0x1B + Negative integer | number_integer | 0x20..0x37 + Negative integer | number_integer | 0x38 + Negative integer | number_integer | 0x39 + Negative integer | number_integer | 0x3A + Negative integer | number_integer | 0x3B + Byte string | binary | 0x40..0x57 + Byte string | binary | 0x58 + Byte string | binary | 0x59 + Byte string | binary | 0x5A + Byte string | binary | 0x5B + UTF-8 string | string | 0x60..0x77 + UTF-8 string | string | 0x78 + UTF-8 string | string | 0x79 + UTF-8 string | string | 0x7A + UTF-8 string | string | 0x7B + UTF-8 string | string | 0x7F + array | array | 0x80..0x97 + array | array | 0x98 + array | array | 0x99 + array | array | 0x9A + array | array | 0x9B + array | array | 0x9F + map | object | 0xA0..0xB7 + map | object | 0xB8 + map | object | 0xB9 + map | object | 0xBA + map | object | 0xBB + map | object | 0xBF + False | `false` | 0xF4 + True | `true` | 0xF5 + Null | `null` | 0xF6 + Half-Precision Float | number_float | 0xF9 + Single-Precision Float | number_float | 0xFA + Double-Precision Float | number_float | 0xFB + + @warning The mapping is **incomplete** in the sense that not all CBOR + types can be converted to a JSON value. The following CBOR types + are not supported and will yield parse errors (parse_error.112): + - date/time (0xC0..0xC1) + - bignum (0xC2..0xC3) + - decimal fraction (0xC4) + - bigfloat (0xC5) + - expected conversions (0xD5..0xD7) + - simple values (0xE0..0xF3, 0xF8) + - undefined (0xF7) + + @warning CBOR allows map keys of any type, whereas JSON only allows + strings as keys in object values. Therefore, CBOR maps with keys + other than UTF-8 strings are rejected (parse_error.113). + + @note Any CBOR output created @ref to_cbor can be successfully parsed by + @ref from_cbor. + + @param[in] i an input in CBOR format convertible to an input adapter + @param[in] strict whether to expect the input to be consumed until EOF + (true by default) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + @param[in] tag_handler how to treat CBOR tags (optional, error by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.110 if the given input ends prematurely or the end of + file was not reached when @a strict was set to true + @throw parse_error.112 if unsupported features from CBOR were + used in the given input @a v or if the input is not valid CBOR + @throw parse_error.113 if a string was expected as map key, but not found + + @complexity Linear in the size of the input @a i. + + @liveexample{The example shows the deserialization of a byte vector in CBOR + format to a JSON value.,from_cbor} + + @sa http://cbor.io + @sa @ref to_cbor(const basic_json&) for the analogous serialization + @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for the + related MessagePack format + @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the + related UBJSON format + + @since version 2.0.9; parameter @a start_index since 2.1.1; changed to + consume input adapters, removed start_index parameter, and added + @a strict parameter since 3.0.0; added @a allow_exceptions parameter + since 3.2.0; added @a tag_handler parameter since 3.9.0. + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @copydoc from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler); + } + + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @brief create a JSON value from an input in MessagePack format + + Deserializes a given input @a i to a JSON value using the MessagePack + serialization format. + + The library maps MessagePack types to JSON value types as follows: + + MessagePack type | JSON value type | first byte + ---------------- | --------------- | ---------- + positive fixint | number_unsigned | 0x00..0x7F + fixmap | object | 0x80..0x8F + fixarray | array | 0x90..0x9F + fixstr | string | 0xA0..0xBF + nil | `null` | 0xC0 + false | `false` | 0xC2 + true | `true` | 0xC3 + float 32 | number_float | 0xCA + float 64 | number_float | 0xCB + uint 8 | number_unsigned | 0xCC + uint 16 | number_unsigned | 0xCD + uint 32 | number_unsigned | 0xCE + uint 64 | number_unsigned | 0xCF + int 8 | number_integer | 0xD0 + int 16 | number_integer | 0xD1 + int 32 | number_integer | 0xD2 + int 64 | number_integer | 0xD3 + str 8 | string | 0xD9 + str 16 | string | 0xDA + str 32 | string | 0xDB + array 16 | array | 0xDC + array 32 | array | 0xDD + map 16 | object | 0xDE + map 32 | object | 0xDF + bin 8 | binary | 0xC4 + bin 16 | binary | 0xC5 + bin 32 | binary | 0xC6 + ext 8 | binary | 0xC7 + ext 16 | binary | 0xC8 + ext 32 | binary | 0xC9 + fixext 1 | binary | 0xD4 + fixext 2 | binary | 0xD5 + fixext 4 | binary | 0xD6 + fixext 8 | binary | 0xD7 + fixext 16 | binary | 0xD8 + negative fixint | number_integer | 0xE0-0xFF + + @note Any MessagePack output created @ref to_msgpack can be successfully + parsed by @ref from_msgpack. + + @param[in] i an input in MessagePack format convertible to an input + adapter + @param[in] strict whether to expect the input to be consumed until EOF + (true by default) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.110 if the given input ends prematurely or the end of + file was not reached when @a strict was set to true + @throw parse_error.112 if unsupported features from MessagePack were + used in the given input @a i or if the input is not valid MessagePack + @throw parse_error.113 if a string was expected as map key, but not found + + @complexity Linear in the size of the input @a i. + + @liveexample{The example shows the deserialization of a byte vector in + MessagePack format to a JSON value.,from_msgpack} + + @sa http://msgpack.org + @sa @ref to_msgpack(const basic_json&) for the analogous serialization + @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the + related CBOR format + @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for + the related UBJSON format + @sa @ref from_bson(detail::input_adapter&&, const bool, const bool) for + the related BSON format + + @since version 2.0.9; parameter @a start_index since 2.1.1; changed to + consume input adapters, removed start_index parameter, and added + @a strict parameter since 3.0.0; added @a allow_exceptions parameter + since 3.2.0 + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @copydoc from_msgpack(detail::input_adapter&&, const bool, const bool) + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_msgpack(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + + /*! + @brief create a JSON value from an input in UBJSON format + + Deserializes a given input @a i to a JSON value using the UBJSON (Universal + Binary JSON) serialization format. + + The library maps UBJSON types to JSON value types as follows: + + UBJSON type | JSON value type | marker + ----------- | --------------------------------------- | ------ + no-op | *no value, next value is read* | `N` + null | `null` | `Z` + false | `false` | `F` + true | `true` | `T` + float32 | number_float | `d` + float64 | number_float | `D` + uint8 | number_unsigned | `U` + int8 | number_integer | `i` + int16 | number_integer | `I` + int32 | number_integer | `l` + int64 | number_integer | `L` + high-precision number | number_integer, number_unsigned, or number_float - depends on number string | 'H' + string | string | `S` + char | string | `C` + array | array (optimized values are supported) | `[` + object | object (optimized values are supported) | `{` + + @note The mapping is **complete** in the sense that any UBJSON value can + be converted to a JSON value. + + @param[in] i an input in UBJSON format convertible to an input adapter + @param[in] strict whether to expect the input to be consumed until EOF + (true by default) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.110 if the given input ends prematurely or the end of + file was not reached when @a strict was set to true + @throw parse_error.112 if a parse error occurs + @throw parse_error.113 if a string could not be parsed successfully + + @complexity Linear in the size of the input @a i. + + @liveexample{The example shows the deserialization of a byte vector in + UBJSON format to a JSON value.,from_ubjson} + + @sa http://ubjson.org + @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the + analogous serialization + @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the + related CBOR format + @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for + the related MessagePack format + @sa @ref from_bson(detail::input_adapter&&, const bool, const bool) for + the related BSON format + + @since version 3.1.0; added @a allow_exceptions parameter since 3.2.0 + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @copydoc from_ubjson(detail::input_adapter&&, const bool, const bool) + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_ubjson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + + /*! + @brief Create a JSON value from an input in BSON format + + Deserializes a given input @a i to a JSON value using the BSON (Binary JSON) + serialization format. + + The library maps BSON record types to JSON value types as follows: + + BSON type | BSON marker byte | JSON value type + --------------- | ---------------- | --------------------------- + double | 0x01 | number_float + string | 0x02 | string + document | 0x03 | object + array | 0x04 | array + binary | 0x05 | still unsupported + undefined | 0x06 | still unsupported + ObjectId | 0x07 | still unsupported + boolean | 0x08 | boolean + UTC Date-Time | 0x09 | still unsupported + null | 0x0A | null + Regular Expr. | 0x0B | still unsupported + DB Pointer | 0x0C | still unsupported + JavaScript Code | 0x0D | still unsupported + Symbol | 0x0E | still unsupported + JavaScript Code | 0x0F | still unsupported + int32 | 0x10 | number_integer + Timestamp | 0x11 | still unsupported + 128-bit decimal float | 0x13 | still unsupported + Max Key | 0x7F | still unsupported + Min Key | 0xFF | still unsupported + + @warning The mapping is **incomplete**. The unsupported mappings + are indicated in the table above. + + @param[in] i an input in BSON format convertible to an input adapter + @param[in] strict whether to expect the input to be consumed until EOF + (true by default) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.114 if an unsupported BSON record type is encountered + + @complexity Linear in the size of the input @a i. + + @liveexample{The example shows the deserialization of a byte vector in + BSON format to a JSON value.,from_bson} + + @sa http://bsonspec.org/spec.html + @sa @ref to_bson(const basic_json&) for the analogous serialization + @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the + related CBOR format + @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for + the related MessagePack format + @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the + related UBJSON format + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @copydoc from_bson(detail::input_adapter&&, const bool, const bool) + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_bson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + /// @} + + ////////////////////////// + // JSON Pointer support // + ////////////////////////// + + /// @name JSON Pointer functions + /// @{ + + /*! + @brief access specified element via JSON Pointer + + Uses a JSON pointer to retrieve a reference to the respective JSON value. + No bound checking is performed. Similar to @ref operator[](const typename + object_t::key_type&), `null` values are created in arrays and objects if + necessary. + + In particular: + - If the JSON pointer points to an object key that does not exist, it + is created an filled with a `null` value before a reference to it + is returned. + - If the JSON pointer points to an array index that does not exist, it + is created an filled with a `null` value before a reference to it + is returned. All indices between the current maximum and the given + index are also filled with `null`. + - The special value `-` is treated as a synonym for the index past the + end. + + @param[in] ptr a JSON pointer + + @return reference to the element pointed to by @a ptr + + @complexity Constant. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.404 if the JSON pointer can not be resolved + + @liveexample{The behavior is shown in the example.,operatorjson_pointer} + + @since version 2.0.0 + */ + reference operator[](const json_pointer& ptr) + { + return ptr.get_unchecked(this); + } + + /*! + @brief access specified element via JSON Pointer + + Uses a JSON pointer to retrieve a reference to the respective JSON value. + No bound checking is performed. The function does not change the JSON + value; no `null` values are created. In particular, the special value + `-` yields an exception. + + @param[in] ptr JSON pointer to the desired element + + @return const reference to the element pointed to by @a ptr + + @complexity Constant. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + + @liveexample{The behavior is shown in the example.,operatorjson_pointer_const} + + @since version 2.0.0 + */ + const_reference operator[](const json_pointer& ptr) const + { + return ptr.get_unchecked(this); + } + + /*! + @brief access specified element via JSON Pointer + + Returns a reference to the element at with specified JSON pointer @a ptr, + with bounds checking. + + @param[in] ptr JSON pointer to the desired element + + @return reference to the element pointed to by @a ptr + + @throw parse_error.106 if an array index in the passed JSON pointer @a ptr + begins with '0'. See example below. + + @throw parse_error.109 if an array index in the passed JSON pointer @a ptr + is not a number. See example below. + + @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr + is out of range. See example below. + + @throw out_of_range.402 if the array index '-' is used in the passed JSON + pointer @a ptr. As `at` provides checked access (and no elements are + implicitly inserted), the index '-' is always invalid. See example below. + + @throw out_of_range.403 if the JSON pointer describes a key of an object + which cannot be found. See example below. + + @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. + See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 2.0.0 + + @liveexample{The behavior is shown in the example.,at_json_pointer} + */ + reference at(const json_pointer& ptr) + { + return ptr.get_checked(this); + } + + /*! + @brief access specified element via JSON Pointer + + Returns a const reference to the element at with specified JSON pointer @a + ptr, with bounds checking. + + @param[in] ptr JSON pointer to the desired element + + @return reference to the element pointed to by @a ptr + + @throw parse_error.106 if an array index in the passed JSON pointer @a ptr + begins with '0'. See example below. + + @throw parse_error.109 if an array index in the passed JSON pointer @a ptr + is not a number. See example below. + + @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr + is out of range. See example below. + + @throw out_of_range.402 if the array index '-' is used in the passed JSON + pointer @a ptr. As `at` provides checked access (and no elements are + implicitly inserted), the index '-' is always invalid. See example below. + + @throw out_of_range.403 if the JSON pointer describes a key of an object + which cannot be found. See example below. + + @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. + See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 2.0.0 + + @liveexample{The behavior is shown in the example.,at_json_pointer_const} + */ + const_reference at(const json_pointer& ptr) const + { + return ptr.get_checked(this); + } + + /*! + @brief return flattened JSON value + + The function creates a JSON object whose keys are JSON pointers (see [RFC + 6901](https://tools.ietf.org/html/rfc6901)) and whose values are all + primitive. The original JSON value can be restored using the @ref + unflatten() function. + + @return an object that maps JSON pointers to primitive values + + @note Empty objects and arrays are flattened to `null` and will not be + reconstructed correctly by the @ref unflatten() function. + + @complexity Linear in the size the JSON value. + + @liveexample{The following code shows how a JSON object is flattened to an + object whose keys consist of JSON pointers.,flatten} + + @sa @ref unflatten() for the reverse function + + @since version 2.0.0 + */ + basic_json flatten() const + { + basic_json result(value_t::object); + json_pointer::flatten("", *this, result); + return result; + } + + /*! + @brief unflatten a previously flattened JSON value + + The function restores the arbitrary nesting of a JSON value that has been + flattened before using the @ref flatten() function. The JSON value must + meet certain constraints: + 1. The value must be an object. + 2. The keys must be JSON pointers (see + [RFC 6901](https://tools.ietf.org/html/rfc6901)) + 3. The mapped values must be primitive JSON types. + + @return the original JSON from a flattened version + + @note Empty objects and arrays are flattened by @ref flatten() to `null` + values and can not unflattened to their original type. Apart from + this example, for a JSON value `j`, the following is always true: + `j == j.flatten().unflatten()`. + + @complexity Linear in the size the JSON value. + + @throw type_error.314 if value is not an object + @throw type_error.315 if object values are not primitive + + @liveexample{The following code shows how a flattened JSON object is + unflattened into the original nested JSON object.,unflatten} + + @sa @ref flatten() for the reverse function + + @since version 2.0.0 + */ + basic_json unflatten() const + { + return json_pointer::unflatten(*this); + } + + /// @} + + ////////////////////////// + // JSON Patch functions // + ////////////////////////// + + /// @name JSON Patch functions + /// @{ + + /*! + @brief applies a JSON patch + + [JSON Patch](http://jsonpatch.com) defines a JSON document structure for + expressing a sequence of operations to apply to a JSON) document. With + this function, a JSON Patch is applied to the current JSON value by + executing all operations from the patch. + + @param[in] json_patch JSON patch document + @return patched document + + @note The application of a patch is atomic: Either all operations succeed + and the patched document is returned or an exception is thrown. In + any case, the original value is not changed: the patch is applied + to a copy of the value. + + @throw parse_error.104 if the JSON patch does not consist of an array of + objects + + @throw parse_error.105 if the JSON patch is malformed (e.g., mandatory + attributes are missing); example: `"operation add must have member path"` + + @throw out_of_range.401 if an array index is out of range. + + @throw out_of_range.403 if a JSON pointer inside the patch could not be + resolved successfully in the current JSON value; example: `"key baz not + found"` + + @throw out_of_range.405 if JSON pointer has no parent ("add", "remove", + "move") + + @throw other_error.501 if "test" operation was unsuccessful + + @complexity Linear in the size of the JSON value and the length of the + JSON patch. As usually only a fraction of the JSON value is affected by + the patch, the complexity can usually be neglected. + + @liveexample{The following code shows how a JSON patch is applied to a + value.,patch} + + @sa @ref diff -- create a JSON patch by comparing two JSON values + + @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) + @sa [RFC 6901 (JSON Pointer)](https://tools.ietf.org/html/rfc6901) + + @since version 2.0.0 + */ + basic_json patch(const basic_json& json_patch) const + { + // make a working copy to apply the patch to + basic_json result = *this; + + // the valid JSON Patch operations + enum class patch_operations {add, remove, replace, move, copy, test, invalid}; + + const auto get_op = [](const std::string & op) + { + if (op == "add") + { + return patch_operations::add; + } + if (op == "remove") + { + return patch_operations::remove; + } + if (op == "replace") + { + return patch_operations::replace; + } + if (op == "move") + { + return patch_operations::move; + } + if (op == "copy") + { + return patch_operations::copy; + } + if (op == "test") + { + return patch_operations::test; + } + + return patch_operations::invalid; + }; + + // wrapper for "add" operation; add value at ptr + const auto operation_add = [&result](json_pointer & ptr, basic_json val) + { + // adding to the root of the target document means replacing it + if (ptr.empty()) + { + result = val; + return; + } + + // make sure the top element of the pointer exists + json_pointer top_pointer = ptr.top(); + if (top_pointer != ptr) + { + result.at(top_pointer); + } + + // get reference to parent of JSON pointer ptr + const auto last_path = ptr.back(); + ptr.pop_back(); + basic_json& parent = result[ptr]; + + switch (parent.m_type) + { + case value_t::null: + case value_t::object: + { + // use operator[] to add value + parent[last_path] = val; + break; + } + + case value_t::array: + { + if (last_path == "-") + { + // special case: append to back + parent.push_back(val); + } + else + { + const auto idx = json_pointer::array_index(last_path); + if (JSON_HEDLEY_UNLIKELY(idx > parent.size())) + { + // avoid undefined behavior + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); + } + + // default case: insert add offset + parent.insert(parent.begin() + static_cast(idx), val); + } + break; + } + + // if there exists a parent it cannot be primitive + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // LCOV_EXCL_LINE + } + }; + + // wrapper for "remove" operation; remove value at ptr + const auto operation_remove = [&result](json_pointer & ptr) + { + // get reference to parent of JSON pointer ptr + const auto last_path = ptr.back(); + ptr.pop_back(); + basic_json& parent = result.at(ptr); + + // remove child + if (parent.is_object()) + { + // perform range check + auto it = parent.find(last_path); + if (JSON_HEDLEY_LIKELY(it != parent.end())) + { + parent.erase(it); + } + else + { + JSON_THROW(out_of_range::create(403, "key '" + last_path + "' not found")); + } + } + else if (parent.is_array()) + { + // note erase performs range check + parent.erase(json_pointer::array_index(last_path)); + } + }; + + // type check: top level value must be an array + if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array())) + { + JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects")); + } + + // iterate and apply the operations + for (const auto& val : json_patch) + { + // wrapper to get a value for an operation + const auto get_value = [&val](const std::string & op, + const std::string & member, + bool string_type) -> basic_json & + { + // find value + auto it = val.m_value.object->find(member); + + // context-sensitive error message + const auto error_msg = (op == "op") ? "operation" : "operation '" + op + "'"; + + // check if desired value is present + if (JSON_HEDLEY_UNLIKELY(it == val.m_value.object->end())) + { + JSON_THROW(parse_error::create(105, 0, error_msg + " must have member '" + member + "'")); + } + + // check if result is of type string + if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string())) + { + JSON_THROW(parse_error::create(105, 0, error_msg + " must have string member '" + member + "'")); + } + + // no error: return value + return it->second; + }; + + // type check: every element of the array must be an object + if (JSON_HEDLEY_UNLIKELY(!val.is_object())) + { + JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects")); + } + + // collect mandatory members + const auto op = get_value("op", "op", true).template get(); + const auto path = get_value(op, "path", true).template get(); + json_pointer ptr(path); + + switch (get_op(op)) + { + case patch_operations::add: + { + operation_add(ptr, get_value("add", "value", false)); + break; + } + + case patch_operations::remove: + { + operation_remove(ptr); + break; + } + + case patch_operations::replace: + { + // the "path" location must exist - use at() + result.at(ptr) = get_value("replace", "value", false); + break; + } + + case patch_operations::move: + { + const auto from_path = get_value("move", "from", true).template get(); + json_pointer from_ptr(from_path); + + // the "from" location must exist - use at() + basic_json v = result.at(from_ptr); + + // The move operation is functionally identical to a + // "remove" operation on the "from" location, followed + // immediately by an "add" operation at the target + // location with the value that was just removed. + operation_remove(from_ptr); + operation_add(ptr, v); + break; + } + + case patch_operations::copy: + { + const auto from_path = get_value("copy", "from", true).template get(); + const json_pointer from_ptr(from_path); + + // the "from" location must exist - use at() + basic_json v = result.at(from_ptr); + + // The copy is functionally identical to an "add" + // operation at the target location using the value + // specified in the "from" member. + operation_add(ptr, v); + break; + } + + case patch_operations::test: + { + bool success = false; + JSON_TRY + { + // check if "value" matches the one at "path" + // the "path" location must exist - use at() + success = (result.at(ptr) == get_value("test", "value", false)); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + // ignore out of range errors: success remains false + } + + // throw an exception if test fails + if (JSON_HEDLEY_UNLIKELY(!success)) + { + JSON_THROW(other_error::create(501, "unsuccessful: " + val.dump())); + } + + break; + } + + default: + { + // op must be "add", "remove", "replace", "move", "copy", or + // "test" + JSON_THROW(parse_error::create(105, 0, "operation value '" + op + "' is invalid")); + } + } + } + + return result; + } + + /*! + @brief creates a diff as a JSON patch + + Creates a [JSON Patch](http://jsonpatch.com) so that value @a source can + be changed into the value @a target by calling @ref patch function. + + @invariant For two JSON values @a source and @a target, the following code + yields always `true`: + @code {.cpp} + source.patch(diff(source, target)) == target; + @endcode + + @note Currently, only `remove`, `add`, and `replace` operations are + generated. + + @param[in] source JSON value to compare from + @param[in] target JSON value to compare against + @param[in] path helper value to create JSON pointers + + @return a JSON patch to convert the @a source to @a target + + @complexity Linear in the lengths of @a source and @a target. + + @liveexample{The following code shows how a JSON patch is created as a + diff for two JSON values.,diff} + + @sa @ref patch -- apply a JSON patch + @sa @ref merge_patch -- apply a JSON Merge Patch + + @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) + + @since version 2.0.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json diff(const basic_json& source, const basic_json& target, + const std::string& path = "") + { + // the patch + basic_json result(value_t::array); + + // if the values are the same, return empty patch + if (source == target) + { + return result; + } + + if (source.type() != target.type()) + { + // different types: replace value + result.push_back( + { + {"op", "replace"}, {"path", path}, {"value", target} + }); + return result; + } + + switch (source.type()) + { + case value_t::array: + { + // first pass: traverse common elements + std::size_t i = 0; + while (i < source.size() && i < target.size()) + { + // recursive call to compare array values at index i + auto temp_diff = diff(source[i], target[i], path + "/" + std::to_string(i)); + result.insert(result.end(), temp_diff.begin(), temp_diff.end()); + ++i; + } + + // i now reached the end of at least one array + // in a second pass, traverse the remaining elements + + // remove my remaining elements + const auto end_index = static_cast(result.size()); + while (i < source.size()) + { + // add operations in reverse order to avoid invalid + // indices + result.insert(result.begin() + end_index, object( + { + {"op", "remove"}, + {"path", path + "/" + std::to_string(i)} + })); + ++i; + } + + // add other remaining elements + while (i < target.size()) + { + result.push_back( + { + {"op", "add"}, + {"path", path + "/-"}, + {"value", target[i]} + }); + ++i; + } + + break; + } + + case value_t::object: + { + // first pass: traverse this object's elements + for (auto it = source.cbegin(); it != source.cend(); ++it) + { + // escape the key name to be used in a JSON patch + const auto key = json_pointer::escape(it.key()); + + if (target.find(it.key()) != target.end()) + { + // recursive call to compare object values at key it + auto temp_diff = diff(it.value(), target[it.key()], path + "/" + key); + result.insert(result.end(), temp_diff.begin(), temp_diff.end()); + } + else + { + // found a key that is not in o -> remove it + result.push_back(object( + { + {"op", "remove"}, {"path", path + "/" + key} + })); + } + } + + // second pass: traverse other object's elements + for (auto it = target.cbegin(); it != target.cend(); ++it) + { + if (source.find(it.key()) == source.end()) + { + // found a key that is not in this -> add it + const auto key = json_pointer::escape(it.key()); + result.push_back( + { + {"op", "add"}, {"path", path + "/" + key}, + {"value", it.value()} + }); + } + } + + break; + } + + default: + { + // both primitive type: replace value + result.push_back( + { + {"op", "replace"}, {"path", path}, {"value", target} + }); + break; + } + } + + return result; + } + + /// @} + + //////////////////////////////// + // JSON Merge Patch functions // + //////////////////////////////// + + /// @name JSON Merge Patch functions + /// @{ + + /*! + @brief applies a JSON Merge Patch + + The merge patch format is primarily intended for use with the HTTP PATCH + method as a means of describing a set of modifications to a target + resource's content. This function applies a merge patch to the current + JSON value. + + The function implements the following algorithm from Section 2 of + [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396): + + ``` + define MergePatch(Target, Patch): + if Patch is an Object: + if Target is not an Object: + Target = {} // Ignore the contents and set it to an empty Object + for each Name/Value pair in Patch: + if Value is null: + if Name exists in Target: + remove the Name/Value pair from Target + else: + Target[Name] = MergePatch(Target[Name], Value) + return Target + else: + return Patch + ``` + + Thereby, `Target` is the current object; that is, the patch is applied to + the current value. + + @param[in] apply_patch the patch to apply + + @complexity Linear in the lengths of @a patch. + + @liveexample{The following code shows how a JSON Merge Patch is applied to + a JSON document.,merge_patch} + + @sa @ref patch -- apply a JSON patch + @sa [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396) + + @since version 3.0.0 + */ + void merge_patch(const basic_json& apply_patch) + { + if (apply_patch.is_object()) + { + if (!is_object()) + { + *this = object(); + } + for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it) + { + if (it.value().is_null()) + { + erase(it.key()); + } + else + { + operator[](it.key()).merge_patch(it.value()); + } + } + } + else + { + *this = apply_patch; + } + } + + /// @} +}; + +/*! +@brief user-defined to_string function for JSON values + +This function implements a user-defined to_string for JSON objects. + +@param[in] j a JSON object +@return a std::string object +*/ + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j) +{ + return j.dump(); +} +} // namespace nlohmann + +/////////////////////// +// nonmember support // +/////////////////////// + +// specialization of std::swap, and std::hash +namespace std +{ + +/// hash value for JSON objects +template<> +struct hash +{ + /*! + @brief return a hash value for a JSON object + + @since version 1.0.0 + */ + std::size_t operator()(const nlohmann::json& j) const + { + return nlohmann::detail::hash(j); + } +}; + +/// specialization for std::less +/// @note: do not remove the space after '<', +/// see https://github.com/nlohmann/json/pull/679 +template<> +struct less<::nlohmann::detail::value_t> +{ + /*! + @brief compare two value_t enum values + @since version 3.0.0 + */ + bool operator()(nlohmann::detail::value_t lhs, + nlohmann::detail::value_t rhs) const noexcept + { + return nlohmann::detail::operator<(lhs, rhs); + } +}; + +// C++20 prohibit function specialization in the std namespace. +#ifndef JSON_HAS_CPP_20 + +/*! +@brief exchanges the values of two JSON objects + +@since version 1.0.0 +*/ +template<> +inline void swap(nlohmann::json& j1, nlohmann::json& j2) noexcept( + is_nothrow_move_constructible::value&& + is_nothrow_move_assignable::value + ) +{ + j1.swap(j2); +} + +#endif + +} // namespace std + +/*! +@brief user-defined string literal for JSON values + +This operator implements a user-defined string literal for JSON objects. It +can be used by adding `"_json"` to a string literal and returns a JSON object +if no parse error occurred. + +@param[in] s a string representation of a JSON object +@param[in] n the length of string @a s +@return a JSON object + +@since version 1.0.0 +*/ +JSON_HEDLEY_NON_NULL(1) +inline nlohmann::json operator "" _json(const char* s, std::size_t n) +{ + return nlohmann::json::parse(s, s + n); +} + +/*! +@brief user-defined string literal for JSON pointer + +This operator implements a user-defined string literal for JSON Pointers. It +can be used by adding `"_json_pointer"` to a string literal and returns a JSON pointer +object if no parse error occurred. + +@param[in] s a string representation of a JSON Pointer +@param[in] n the length of string @a s +@return a JSON pointer object + +@since version 2.0.0 +*/ +JSON_HEDLEY_NON_NULL(1) +inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n) +{ + return nlohmann::json::json_pointer(std::string(s, n)); +} + +// #include + + +// restore GCC/clang diagnostic settings +#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) + #pragma GCC diagnostic pop +#endif +#if defined(__clang__) + #pragma GCC diagnostic pop +#endif + +// clean up +#undef JSON_ASSERT +#undef JSON_INTERNAL_CATCH +#undef JSON_CATCH +#undef JSON_THROW +#undef JSON_TRY +#undef JSON_HAS_CPP_14 +#undef JSON_HAS_CPP_17 +#undef NLOHMANN_BASIC_JSON_TPL_DECLARATION +#undef NLOHMANN_BASIC_JSON_TPL +#undef JSON_EXPLICIT + +// #include +#undef JSON_HEDLEY_ALWAYS_INLINE +#undef JSON_HEDLEY_ARM_VERSION +#undef JSON_HEDLEY_ARM_VERSION_CHECK +#undef JSON_HEDLEY_ARRAY_PARAM +#undef JSON_HEDLEY_ASSUME +#undef JSON_HEDLEY_BEGIN_C_DECLS +#undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#undef JSON_HEDLEY_CLANG_HAS_FEATURE +#undef JSON_HEDLEY_CLANG_HAS_WARNING +#undef JSON_HEDLEY_COMPCERT_VERSION +#undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#undef JSON_HEDLEY_CONCAT +#undef JSON_HEDLEY_CONCAT3 +#undef JSON_HEDLEY_CONCAT3_EX +#undef JSON_HEDLEY_CONCAT_EX +#undef JSON_HEDLEY_CONST +#undef JSON_HEDLEY_CONSTEXPR +#undef JSON_HEDLEY_CONST_CAST +#undef JSON_HEDLEY_CPP_CAST +#undef JSON_HEDLEY_CRAY_VERSION +#undef JSON_HEDLEY_CRAY_VERSION_CHECK +#undef JSON_HEDLEY_C_DECL +#undef JSON_HEDLEY_DEPRECATED +#undef JSON_HEDLEY_DEPRECATED_FOR +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#undef JSON_HEDLEY_DIAGNOSTIC_POP +#undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#undef JSON_HEDLEY_DMC_VERSION +#undef JSON_HEDLEY_DMC_VERSION_CHECK +#undef JSON_HEDLEY_EMPTY_BASES +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#undef JSON_HEDLEY_END_C_DECLS +#undef JSON_HEDLEY_FLAGS +#undef JSON_HEDLEY_FLAGS_CAST +#undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_BUILTIN +#undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_EXTENSION +#undef JSON_HEDLEY_GCC_HAS_FEATURE +#undef JSON_HEDLEY_GCC_HAS_WARNING +#undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#undef JSON_HEDLEY_GCC_VERSION +#undef JSON_HEDLEY_GCC_VERSION_CHECK +#undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#undef JSON_HEDLEY_GNUC_HAS_FEATURE +#undef JSON_HEDLEY_GNUC_HAS_WARNING +#undef JSON_HEDLEY_GNUC_VERSION +#undef JSON_HEDLEY_GNUC_VERSION_CHECK +#undef JSON_HEDLEY_HAS_ATTRIBUTE +#undef JSON_HEDLEY_HAS_BUILTIN +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_HAS_EXTENSION +#undef JSON_HEDLEY_HAS_FEATURE +#undef JSON_HEDLEY_HAS_WARNING +#undef JSON_HEDLEY_IAR_VERSION +#undef JSON_HEDLEY_IAR_VERSION_CHECK +#undef JSON_HEDLEY_IBM_VERSION +#undef JSON_HEDLEY_IBM_VERSION_CHECK +#undef JSON_HEDLEY_IMPORT +#undef JSON_HEDLEY_INLINE +#undef JSON_HEDLEY_INTEL_VERSION +#undef JSON_HEDLEY_INTEL_VERSION_CHECK +#undef JSON_HEDLEY_IS_CONSTANT +#undef JSON_HEDLEY_IS_CONSTEXPR_ +#undef JSON_HEDLEY_LIKELY +#undef JSON_HEDLEY_MALLOC +#undef JSON_HEDLEY_MESSAGE +#undef JSON_HEDLEY_MSVC_VERSION +#undef JSON_HEDLEY_MSVC_VERSION_CHECK +#undef JSON_HEDLEY_NEVER_INLINE +#undef JSON_HEDLEY_NON_NULL +#undef JSON_HEDLEY_NO_ESCAPE +#undef JSON_HEDLEY_NO_RETURN +#undef JSON_HEDLEY_NO_THROW +#undef JSON_HEDLEY_NULL +#undef JSON_HEDLEY_PELLES_VERSION +#undef JSON_HEDLEY_PELLES_VERSION_CHECK +#undef JSON_HEDLEY_PGI_VERSION +#undef JSON_HEDLEY_PGI_VERSION_CHECK +#undef JSON_HEDLEY_PREDICT +#undef JSON_HEDLEY_PRINTF_FORMAT +#undef JSON_HEDLEY_PRIVATE +#undef JSON_HEDLEY_PUBLIC +#undef JSON_HEDLEY_PURE +#undef JSON_HEDLEY_REINTERPRET_CAST +#undef JSON_HEDLEY_REQUIRE +#undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#undef JSON_HEDLEY_REQUIRE_MSG +#undef JSON_HEDLEY_RESTRICT +#undef JSON_HEDLEY_RETURNS_NON_NULL +#undef JSON_HEDLEY_SENTINEL +#undef JSON_HEDLEY_STATIC_ASSERT +#undef JSON_HEDLEY_STATIC_CAST +#undef JSON_HEDLEY_STRINGIFY +#undef JSON_HEDLEY_STRINGIFY_EX +#undef JSON_HEDLEY_SUNPRO_VERSION +#undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#undef JSON_HEDLEY_TINYC_VERSION +#undef JSON_HEDLEY_TINYC_VERSION_CHECK +#undef JSON_HEDLEY_TI_ARMCL_VERSION +#undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL2000_VERSION +#undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL430_VERSION +#undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL6X_VERSION +#undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL7X_VERSION +#undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CLPRU_VERSION +#undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#undef JSON_HEDLEY_TI_VERSION +#undef JSON_HEDLEY_TI_VERSION_CHECK +#undef JSON_HEDLEY_UNAVAILABLE +#undef JSON_HEDLEY_UNLIKELY +#undef JSON_HEDLEY_UNPREDICTABLE +#undef JSON_HEDLEY_UNREACHABLE +#undef JSON_HEDLEY_UNREACHABLE_RETURN +#undef JSON_HEDLEY_VERSION +#undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#undef JSON_HEDLEY_VERSION_DECODE_MINOR +#undef JSON_HEDLEY_VERSION_DECODE_REVISION +#undef JSON_HEDLEY_VERSION_ENCODE +#undef JSON_HEDLEY_WARNING +#undef JSON_HEDLEY_WARN_UNUSED_RESULT +#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#undef JSON_HEDLEY_FALL_THROUGH + + + +#endif // INCLUDE_NLOHMANN_JSON_HPP_ From d8595f0350a3bcb7a34b4ac99dfd016f76a614b7 Mon Sep 17 00:00:00 2001 From: Chip Barnaby Date: Fri, 21 Aug 2020 14:52:20 -0400 Subject: [PATCH 02/25] Further json.hpp experiments --- src/a205face.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/a205face.cpp b/src/a205face.cpp index 1fdd581c3..577647f5e 100644 --- a/src/a205face.cpp +++ b/src/a205face.cpp @@ -28,7 +28,18 @@ RC TestCBOR( isCBOR ? json::from_cbor( fileStream) : json::parse(fileStream); - std::string rs_id = x.value("RS_ID", "?"); +#if 0 + MYLOADER L( x, otherstuff) + + std::string rs_id = L.get("RS_ID", "?"); + + fluidType = L.getEnum("Fluid", enumTable) + + timeStamp = L.getTimeStamp() + + string z = x.value("name") +#endif + for (auto it = x.begin(); it != x.end(); ++it) { From cc210dabe148aef381f4cf14d1463c726cbd8804 Mon Sep 17 00:00:00 2001 From: Charles Barnaby Date: Mon, 17 May 2021 14:14:19 -0400 Subject: [PATCH 03/25] Initial ASHRAE 205 interface --- src/a205face.h | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/a205face.h diff --git a/src/a205face.h b/src/a205face.h new file mode 100644 index 000000000..c4d28d839 --- /dev/null +++ b/src/a205face.h @@ -0,0 +1,10 @@ +// Copyright (c) 1997-2021 The CSE Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license +// that can be found in the LICENSE file. + +// a205face.h -- defn and decls for interface to ASHRAE Std205 +// equipment data representations + + + +// end a205face.h From 1dc3c0d9335f56c0c882ead8970b351995eb908d Mon Sep 17 00:00:00 2001 From: Charles Barnaby Date: Mon, 17 May 2021 14:33:06 -0400 Subject: [PATCH 04/25] Add new files --- src/CMakeLists.txt | 1 + src/CNLOADS.CPP | 3 ++- src/a205face.cpp | 12 ++++++++++-- src/a205face.h | 1 - 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 16ac1ee3c..a3efd59af 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -198,6 +198,7 @@ set(headers XIOPAK.H XMODULE.h YACAM.H + A205FACE.H ) diff --git a/src/CNLOADS.CPP b/src/CNLOADS.CPP index ac3042c8f..be8973298 100644 --- a/src/CNLOADS.CPP +++ b/src/CNLOADS.CPP @@ -1937,7 +1937,8 @@ RC RSYS::rs_TopRSys1() // check RSYS, initial set up for run } } -#if 1 +#if 0 +// CBOR test code, 9-2020? extern RC TestCBOR(const char* filePath); TestCBOR diff --git a/src/a205face.cpp b/src/a205face.cpp index 577647f5e..3efaba2f5 100644 --- a/src/a205face.cpp +++ b/src/a205face.cpp @@ -1,10 +1,17 @@ -// Copyright (c) 1997-2020 The CSE Authors. All rights reserved. +// Copyright (c) 1997-2021 The CSE Authors. All rights reserved. // Use of this source code is governed by a BSD-style license // that can be found in the LICENSE file. -// a205face.cpp: Interface to ASHRAE205 equipment data representations +// a205face.cpp: Interface to ASHRAE Std 205 equipment data representations #include "cnglob.h" + +#include "a205face.h" + + + +#if 0 +// experimental code 9/2020 ? #include #include #include @@ -48,5 +55,6 @@ RC TestCBOR( return rc; } +#endif // a205face.cpp end \ No newline at end of file diff --git a/src/a205face.h b/src/a205face.h index c4d28d839..68a405061 100644 --- a/src/a205face.h +++ b/src/a205face.h @@ -6,5 +6,4 @@ // equipment data representations - // end a205face.h From 983c1522b03e5ee6b9ed012e8770741c0592bcd8 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 11:57:57 -0600 Subject: [PATCH 05/25] Link to libtk205. --- .github/workflows/build-and-test.yml | 18 ++++++++++++++++++ .github/workflows/release.yml | 18 ++++++++++++++++++ .gitmodules | 3 +++ cmake/BuildFlags.cmake | 1 + src/CMakeLists.txt | 11 ++++++----- src/a205face.h | 4 ++++ vendor/CMakeLists.txt | 2 ++ vendor/toolkit-205 | 1 + 8 files changed, 53 insertions(+), 5 deletions(-) create mode 160000 vendor/toolkit-205 diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 6bbe5454e..a541f07c0 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -9,6 +9,24 @@ jobs: steps: - name: Checkout uses: actions/checkout@v1 + - name: Setup python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install Poetry + uses: snok/install-poetry@v1.1.1 + with: + virtualenvs-create: true + virtualenvs-in-project: true + - name: Load cached venv if cache exists + id: cached-poetry-dependencies + uses: actions/cache@v2 + with: + path: .venv + key: poetry-cache-v1-${{ hashFiles('**/poetry.lock') }} + - name: Install dependencies if cache does not exist + run: poetry install + if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build shell: cmd run: build.bat no-pause diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index de4a2bf65..4dbe1e4dc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,6 +12,24 @@ jobs: steps: - name: Checkout uses: actions/checkout@v1 + - name: Setup python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install Poetry + uses: snok/install-poetry@v1.1.1 + with: + virtualenvs-create: true + virtualenvs-in-project: true + - name: Load cached venv if cache exists + id: cached-poetry-dependencies + uses: actions/cache@v2 + with: + path: .venv + key: poetry-cache-v1-${{ hashFiles('**/poetry.lock') }} + - name: Install dependencies if cache does not exist + run: poetry install + if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build shell: cmd run: build.bat no-pause diff --git a/.gitmodules b/.gitmodules index 8228adfc7..2a36900ff 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "vendor/kiva"] path = vendor/kiva url = https://github.com/bigladder/kiva.git +[submodule "vendor/toolkit-205"] + path = vendor/toolkit-205 + url = https://github.com/open205/toolkit-205 diff --git a/cmake/BuildFlags.cmake b/cmake/BuildFlags.cmake index af690ff12..0099fa406 100644 --- a/cmake/BuildFlags.cmake +++ b/cmake/BuildFlags.cmake @@ -21,6 +21,7 @@ if (MSVC AND NOT ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")) /fp:precise #+Specifies floating-point behavior. /fp:except- # Specifies floating-point behavior. /arch:IA32 # Specifies the architecture for code generation (no special instructions). + /std:c++14 #+Enable supported C and C++ language features from the specified version of the C or C++ language standard. ) string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CompileCommon}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a3efd59af..ff472acf8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -201,11 +201,6 @@ set(headers A205FACE.H ) - -include_directories( -) - - include_directories( "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/vendor" @@ -216,6 +211,11 @@ include_directories( "${kiva_SOURCE_DIR}/vendor/eigen-da9b4e14c255/" "${kiva_SOURCE_DIR}/src" "${kiva_BINARY_DIR}/src/libkiva" + "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/schema-205/build/include" + "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/libtk205/vendor/json/single_include" + "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/libtk205/include" + "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/schema-205/schema205/src" + "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/libtk205/vendor/btwxt/src" ) # Precompiled Headers @@ -249,6 +249,7 @@ set(libs tess2 libHPWHsim libkiva + libtk205 ) source_group("Source Files" FILES ${source}) diff --git a/src/a205face.h b/src/a205face.h index 68a405061..8c7ae3384 100644 --- a/src/a205face.h +++ b/src/a205face.h @@ -4,6 +4,10 @@ // a205face.h -- defn and decls for interface to ASHRAE Std205 // equipment data representations +#ifndef A205FACE_H // endif at end file +#define A205FACE_H +#include "libtk205.h" +#endif // ifndef A205FACE_H at start file // end a205face.h diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index 2fc96b37a..9f99e56a0 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -50,3 +50,5 @@ add_subdirectory(HPWHsim) set_target_properties(libHPWHsim PROPERTIES FOLDER Dependencies/HPWHsim) set_target_properties(testTool PROPERTIES FOLDER Dependencies/HPWHsim) +# Toolkit 205 +add_subdirectory(toolkit-205) \ No newline at end of file diff --git a/vendor/toolkit-205 b/vendor/toolkit-205 new file mode 160000 index 000000000..263b5d516 --- /dev/null +++ b/vendor/toolkit-205 @@ -0,0 +1 @@ +Subproject commit 263b5d516a96987c9fbbf6349234d02cbc29f8b3 From 1f8835f7e3a8493ca9446241e6c426ce59c55814 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 12:14:23 -0600 Subject: [PATCH 06/25] Fix CI poetry install step. --- .github/workflows/build-and-test.yml | 5 +++-- .github/workflows/release.yml | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index a541f07c0..5c3c28353 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -22,10 +22,11 @@ jobs: id: cached-poetry-dependencies uses: actions/cache@v2 with: - path: .venv + path: vendor/toolkit-205/.venv key: poetry-cache-v1-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies if cache does not exist - run: poetry install + shell: bash + run: cd vendor/toolkit-205 && poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build shell: cmd diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4dbe1e4dc..e69cdc2ee 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,10 +25,11 @@ jobs: id: cached-poetry-dependencies uses: actions/cache@v2 with: - path: .venv + path: vendor/toolkit-205/.venv key: poetry-cache-v1-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies if cache does not exist - run: poetry install + shell: bash + run: cd vendor/toolkit-205 && poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build shell: cmd From 222c7e7baa9ad9c50fdedfd194b4a8448f340985 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 12:22:36 -0600 Subject: [PATCH 07/25] User recursive submodule checkouts on CI. --- .github/workflows/build-and-test.yml | 6 ++++++ .github/workflows/release.yml | 2 ++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 5c3c28353..ec366bfac 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -9,6 +9,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v1 + with: + submodules: recursive - name: Setup python 3.8 uses: actions/setup-python@v2 with: @@ -43,6 +45,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v1 + with: + submodules: recursive - name: Configure CMake run: cmake -P cmake/configure.cmake - name: Build wcmp @@ -63,6 +67,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v1 + with: + submodules: recursive - name: Configure CMake run: cmake -P cmake/configure.cmake - name: Download executable artifact diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e69cdc2ee..e8bfcd465 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,6 +12,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v1 + with: + submodules: recursive - name: Setup python 3.8 uses: actions/setup-python@v2 with: From e4dbcff33add656ab84eea8691cc3ebc53f8795a Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 12:36:04 -0600 Subject: [PATCH 08/25] Use bash for CI build. --- .github/workflows/build-and-test.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 66dc91394..511534438 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -31,8 +31,8 @@ jobs: run: cd vendor/toolkit-205 && poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build - shell: cmd - run: build.bat no-pause + shell: bash + run: ./build.bat no-pause - name: Upload executable artifiact uses: actions/upload-artifact@v2 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 68fbc21b2..191fba8ea 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,8 +34,8 @@ jobs: run: cd vendor/toolkit-205 && poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build - shell: cmd - run: build.bat no-pause + shell: bash + run: ./build.bat no-pause - name: Upload executable to release assets uses: AButler/upload-release-assets@v2.0 with: From bf078ebee4174ecb076af1a78efcfa771bd2a547 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 13:02:28 -0600 Subject: [PATCH 09/25] Test code generation separately. --- .github/workflows/build-and-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 511534438..bf175aa24 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -28,7 +28,7 @@ jobs: key: poetry-cache-v1-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies if cache does not exist shell: bash - run: cd vendor/toolkit-205 && poetry install + run: cd vendor/toolkit-205 && poetry install && poetry run doit headers cpp if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build shell: bash From be1a588c3193a6a2007a21621b0519e105a6b2e4 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 13:12:54 -0600 Subject: [PATCH 10/25] Don't use Build.bat on CI. --- .github/workflows/build-and-test.yml | 7 +++++-- .github/workflows/release.yml | 2 +- cmake/build.cmake | 2 +- cmake/configure.cmake | 3 +-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index bf175aa24..a97f7b638 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -28,11 +28,14 @@ jobs: key: poetry-cache-v1-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies if cache does not exist shell: bash - run: cd vendor/toolkit-205 && poetry install && poetry run doit headers cpp + run: cd vendor/toolkit-205 && poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + - name: Test tk205 build + shell: bash + run: cd vendor/toolkit-205 && poetry run doit headers cpp - name: Build shell: bash - run: ./build.bat no-pause + run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake - name: Upload executable artifiact uses: actions/upload-artifact@v2 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 191fba8ea..21ad1a518 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,7 +35,7 @@ jobs: if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build shell: bash - run: ./build.bat no-pause + run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake - name: Upload executable to release assets uses: AButler/upload-release-assets@v2.0 with: diff --git a/cmake/build.cmake b/cmake/build.cmake index 6aac3dd91..60814275c 100644 --- a/cmake/build.cmake +++ b/cmake/build.cmake @@ -8,5 +8,5 @@ execute_process(COMMAND ${CMAKE_COMMAND} if (${success} MATCHES "0") message("Build Successful!") else() - message("Build failed.") + message(FATAL_ERROR "Build failed.") endif() diff --git a/cmake/configure.cmake b/cmake/configure.cmake index fa540e747..89857f2f9 100644 --- a/cmake/configure.cmake +++ b/cmake/configure.cmake @@ -7,6 +7,5 @@ execute_process(COMMAND ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR} -T v142 -A RESULT_VARIABLE success ) if (NOT ${success} MATCHES "0") - message("Generation step failed.") - return() + message(FATAL_ERROR "Generation step failed.") endif() \ No newline at end of file From e686c105ab9e624a86a3cc5bbbf1e8edd1e6d94c Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 13:18:45 -0600 Subject: [PATCH 11/25] Update CI cache. --- .github/workflows/build-and-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index a97f7b638..76142ef30 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -25,7 +25,7 @@ jobs: uses: actions/cache@v2 with: path: vendor/toolkit-205/.venv - key: poetry-cache-v1-${{ hashFiles('**/poetry.lock') }} + key: poetry-cache-v2-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies if cache does not exist shell: bash run: cd vendor/toolkit-205 && poetry install From 6bc87bb5a033916aa1f0f26fece6c4c3d2d8ac90 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 13:25:11 -0600 Subject: [PATCH 12/25] Fix code generation path in CI test. --- .github/workflows/build-and-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 76142ef30..d2ef7c744 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -32,7 +32,7 @@ jobs: if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Test tk205 build shell: bash - run: cd vendor/toolkit-205 && poetry run doit headers cpp + run: cd vendor/toolkit-205/schema-205 && poetry run doit headers cpp - name: Build shell: bash run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake From 67eea575ebb08c0467eed18dfef3dfc7249fab9a Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 15:31:52 -0600 Subject: [PATCH 13/25] Install python dependencies in all relevant submodules. --- .github/workflows/build-and-test.yml | 17 ++++++++++++----- .github/workflows/release.yml | 16 +++++++++++++--- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index d2ef7c744..1ef73b77a 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -20,19 +20,26 @@ jobs: with: virtualenvs-create: true virtualenvs-in-project: true - - name: Load cached venv if cache exists + - name: Load cached toolkit-205 venv if cache exists id: cached-poetry-dependencies uses: actions/cache@v2 with: path: vendor/toolkit-205/.venv - key: poetry-cache-v2-${{ hashFiles('**/poetry.lock') }} - - name: Install dependencies if cache does not exist + key: poetry-tk205-cache-v1-${{ hashFiles('**/poetry.lock') }} + - name: Install toolkit-205 dependencies if cache does not exist shell: bash run: cd vendor/toolkit-205 && poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - - name: Test tk205 build + - name: Load cached schema205 venv if cache exists + id: cached-poetry-dependencies + uses: actions/cache@v2 + with: + path: vendor/toolkit-205/schema-205/.venv + key: poetry-schema205-cache-v1-${{ hashFiles('**/poetry.lock') }} + - name: Install schema205 dependencies if cache does not exist shell: bash - run: cd vendor/toolkit-205/schema-205 && poetry run doit headers cpp + run: cd vendor/toolkit-205/schema-205 && poetry install + if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build shell: bash run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 21ad1a518..9d43d332b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,16 +23,26 @@ jobs: with: virtualenvs-create: true virtualenvs-in-project: true - - name: Load cached venv if cache exists + - name: Load cached toolkit-205 venv if cache exists id: cached-poetry-dependencies uses: actions/cache@v2 with: path: vendor/toolkit-205/.venv - key: poetry-cache-v1-${{ hashFiles('**/poetry.lock') }} - - name: Install dependencies if cache does not exist + key: poetry-tk205-cache-v1-${{ hashFiles('**/poetry.lock') }} + - name: Install toolkit-205 dependencies if cache does not exist shell: bash run: cd vendor/toolkit-205 && poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + - name: Load cached schema205 venv if cache exists + id: cached-poetry-dependencies + uses: actions/cache@v2 + with: + path: vendor/toolkit-205/schema-205/.venv + key: poetry-schema205-cache-v1-${{ hashFiles('**/poetry.lock') }} + - name: Install schema205 dependencies if cache does not exist + shell: bash + run: cd vendor/toolkit-205/schema-205 && poetry install + if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Build shell: bash run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake From e92d13745c1421a9a0f42fb468a54c85a9d2267a Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 15:32:43 -0600 Subject: [PATCH 14/25] Update toolkit-205 submodule. --- vendor/toolkit-205 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/toolkit-205 b/vendor/toolkit-205 index 263b5d516..35bba22fc 160000 --- a/vendor/toolkit-205 +++ b/vendor/toolkit-205 @@ -1 +1 @@ -Subproject commit 263b5d516a96987c9fbbf6349234d02cbc29f8b3 +Subproject commit 35bba22fc9c9e7027117d85dbebaf6c78f3e8642 From f47a610d66fa60408c5a6f441c1cebbfd7a82256 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 15:34:48 -0600 Subject: [PATCH 15/25] Use separate CI cache ids. --- .github/workflows/build-and-test.yml | 8 ++++---- .github/workflows/release.yml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 1ef73b77a..caf66237f 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -21,7 +21,7 @@ jobs: virtualenvs-create: true virtualenvs-in-project: true - name: Load cached toolkit-205 venv if cache exists - id: cached-poetry-dependencies + id: cached-toolkit-205-dependencies uses: actions/cache@v2 with: path: vendor/toolkit-205/.venv @@ -29,9 +29,9 @@ jobs: - name: Install toolkit-205 dependencies if cache does not exist shell: bash run: cd vendor/toolkit-205 && poetry install - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + if: steps.cached-toolkit-205-dependencies.outputs.cache-hit != 'true' - name: Load cached schema205 venv if cache exists - id: cached-poetry-dependencies + id: cached-schema205-dependencies uses: actions/cache@v2 with: path: vendor/toolkit-205/schema-205/.venv @@ -39,7 +39,7 @@ jobs: - name: Install schema205 dependencies if cache does not exist shell: bash run: cd vendor/toolkit-205/schema-205 && poetry install - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + if: steps.cached-schema205-dependencies.outputs.cache-hit != 'true' - name: Build shell: bash run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9d43d332b..1ff6bda99 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: virtualenvs-create: true virtualenvs-in-project: true - name: Load cached toolkit-205 venv if cache exists - id: cached-poetry-dependencies + id: cached-toolkit-205-dependencies uses: actions/cache@v2 with: path: vendor/toolkit-205/.venv @@ -32,9 +32,9 @@ jobs: - name: Install toolkit-205 dependencies if cache does not exist shell: bash run: cd vendor/toolkit-205 && poetry install - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + if: steps.cached-toolkit-205-dependencies.outputs.cache-hit != 'true' - name: Load cached schema205 venv if cache exists - id: cached-poetry-dependencies + id: cached-schema205-dependencies uses: actions/cache@v2 with: path: vendor/toolkit-205/schema-205/.venv @@ -42,7 +42,7 @@ jobs: - name: Install schema205 dependencies if cache does not exist shell: bash run: cd vendor/toolkit-205/schema-205 && poetry install - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + if: steps.cached-schema205-dependencies.outputs.cache-hit != 'true' - name: Build shell: bash run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake From c0c60f392eb06c8e879ed2d4450e296927390092 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 15:57:53 -0600 Subject: [PATCH 16/25] Use bash as default CI shell. --- .github/workflows/build-and-test.yml | 7 +++---- .github/workflows/release.yml | 5 +---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index caf66237f..0a83a7f42 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -6,6 +6,9 @@ jobs: build-cse: name: Build CSE executable runs-on: windows-latest + defaults: + run: + shell: bash steps: - name: Checkout uses: actions/checkout@v1 @@ -27,7 +30,6 @@ jobs: path: vendor/toolkit-205/.venv key: poetry-tk205-cache-v1-${{ hashFiles('**/poetry.lock') }} - name: Install toolkit-205 dependencies if cache does not exist - shell: bash run: cd vendor/toolkit-205 && poetry install if: steps.cached-toolkit-205-dependencies.outputs.cache-hit != 'true' - name: Load cached schema205 venv if cache exists @@ -37,11 +39,9 @@ jobs: path: vendor/toolkit-205/schema-205/.venv key: poetry-schema205-cache-v1-${{ hashFiles('**/poetry.lock') }} - name: Install schema205 dependencies if cache does not exist - shell: bash run: cd vendor/toolkit-205/schema-205 && poetry install if: steps.cached-schema205-dependencies.outputs.cache-hit != 'true' - name: Build - shell: bash run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake - name: Upload executable artifiact uses: actions/upload-artifact@v2 @@ -88,7 +88,6 @@ jobs: path: msvc - name: Install pandoc run: 'cinst -y pandoc --version=1.17.2 --ia=ALLUSERS=1' - shell: bash - name: Add pandoc to path run: echo "C:\Program Files (x86)\Pandoc" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Add MSVC developer commands to PATH diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1ff6bda99..dc24c5b93 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,7 +30,6 @@ jobs: path: vendor/toolkit-205/.venv key: poetry-tk205-cache-v1-${{ hashFiles('**/poetry.lock') }} - name: Install toolkit-205 dependencies if cache does not exist - shell: bash run: cd vendor/toolkit-205 && poetry install if: steps.cached-toolkit-205-dependencies.outputs.cache-hit != 'true' - name: Load cached schema205 venv if cache exists @@ -40,11 +39,9 @@ jobs: path: vendor/toolkit-205/schema-205/.venv key: poetry-schema205-cache-v1-${{ hashFiles('**/poetry.lock') }} - name: Install schema205 dependencies if cache does not exist - shell: bash run: cd vendor/toolkit-205/schema-205 && poetry install if: steps.cached-schema205-dependencies.outputs.cache-hit != 'true' - name: Build - shell: bash run: cmake -P cmake/configure.cmake && cmake -P cmake/build.cmake - name: Upload executable to release assets uses: AButler/upload-release-assets@v2.0 @@ -53,8 +50,8 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install pandoc run: 'cinst -y pandoc --version=1.17.2 --ia=ALLUSERS=1' - shell: bash - name: Add pandoc to path + shell: cmd run: echo "C:\Program Files (x86)\Pandoc" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Add MSVC developer commands to PATH uses: ilammy/msvc-dev-cmd@v1 From ca35d0405a5e63486f8025a4d1f8b270c3a4393b Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 25 May 2021 16:11:18 -0600 Subject: [PATCH 17/25] Add poetry to CI path. --- .github/workflows/build-and-test.yml | 3 +++ .github/workflows/release.yml | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 0a83a7f42..9c07c24ee 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -23,6 +23,9 @@ jobs: with: virtualenvs-create: true virtualenvs-in-project: true + - name: Add Poetry to path + shell: pwsh + run: echo "$env:USERPROFILE\.poetry\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Load cached toolkit-205 venv if cache exists id: cached-toolkit-205-dependencies uses: actions/cache@v2 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dc24c5b93..108cfd3be 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,6 +23,9 @@ jobs: with: virtualenvs-create: true virtualenvs-in-project: true + - name: Add Poetry to path + shell: pwsh + run: echo "$env:USERPROFILE\.poetry\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Load cached toolkit-205 venv if cache exists id: cached-toolkit-205-dependencies uses: actions/cache@v2 @@ -51,7 +54,7 @@ jobs: - name: Install pandoc run: 'cinst -y pandoc --version=1.17.2 --ia=ALLUSERS=1' - name: Add pandoc to path - shell: cmd + shell: pwsh run: echo "C:\Program Files (x86)\Pandoc" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Add MSVC developer commands to PATH uses: ilammy/msvc-dev-cmd@v1 From de45bb93e76d97da9a665f8ad6b6a720dcaf1303 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Thu, 14 Oct 2021 16:57:19 -0600 Subject: [PATCH 18/25] Start basic input structure. --- src/CMakeLists.txt | 1 - src/CNCULT.CPP | 18 + src/CNLOADS.CPP | 11 +- src/CNRECS.DEF | 14 + src/a205face.cpp | 46 - src/json.hpp | 25447 ----------------- test/205Test.cse | 1545 + test/CMakeLists.txt | 1 + test/DX-Constant-Efficiency.RS0004.a205.cbor | Bin 0 -> 2930 bytes 9 files changed, 1580 insertions(+), 25503 deletions(-) delete mode 100644 src/json.hpp create mode 100644 test/205Test.cse create mode 100644 test/DX-Constant-Efficiency.RS0004.a205.cbor diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f17f40714..8b3f82ed5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -216,7 +216,6 @@ include_directories( "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/libtk205/vendor/json/single_include" "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/libtk205/include" "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/schema-205/schema205/src" - "${CMAKE_SOURCE_DIR}/vendor/toolkit-205/libtk205/vendor/btwxt/src" "${btwxt_SOURCE_DIR}/src" ) diff --git a/src/CNCULT.CPP b/src/CNCULT.CPP index 690961c54..f2c3c619c 100644 --- a/src/CNCULT.CPP +++ b/src/CNCULT.CPP @@ -74,6 +74,7 @@ makAncMTR(MtriB); // Meters input records basAnc makAncAFMTR(AfMtriB); // Airflow meters input records basAnc // simple HVAC and DHW (for CSE T24 residential compliance) +makAncEQUIPDATA(EDiB); // residential HVAC system makAncRSYS( RSiB); // residential HVAC system makAncDHWMTR( WMtriB); // DHW meters makAncDHWSYS( WSiB); // DHW system @@ -144,6 +145,7 @@ void FC iRatsFree() // free record storage for all input basAncs. AfMtriB.free(); GniB.free(); MtriB.free(); + EDiB.free(); RSiB.free(); WMtriB.free(); WSiB.free(); @@ -1575,6 +1577,20 @@ CULT() }; // izxT #undef ZFAN +//========== EQUIPDATA command (ASHRAE 205 equipment data) ============== + +static CULT edT[] = //-------------- EQUIPDATA cmd table, used from cnTopCult +{ + // id cs fn f uc evf ty b dfls p2 ckf + //"*", STAR, 0, 0, 0, 0, 0, 0, N, 0.f, N, edStarCkf), + CULT("edFilePath", DAT, EQUIPDATA_FILEPATH, RQD, 0, VEOI, TYSTR, 0, N, 0.f, N, N), + CULT("edExpectedRS", DAT, EQUIPDATA_EXPECTEDRS, RQD, 0, VEOI, TYSTR, 0, N, 0.f, N, N), + CULT("edDoValidation", DAT, EQUIPDATA_DOVALIDATION, RQD, 0, VEOI, TYCH, 0, N, 0.f, N, N), + CULT("endEquipmentData", ENDER, 0, 0, 0, 0, 0, 0, N, 0.f, N, N), + CULT() +}; // edT + + //=================== DUCTSEG command ( duct segment) =================== RC DUCTSEG::ds_Ckf() @@ -1678,6 +1694,7 @@ CULT( "*", STAR, 0, 0, 0, 0, 0, 0, CULT( "rsType", DAT, RSYS_TYPE, 0, 0, VEOI, TYCH, 0, C_RSYSTYCH_ACFURN, N, N), CULT( "rsDesc", DAT, RSYS_DESC, 0, 0, VEOI, TYSTR, 0, 0, N, N), CULT( "rsPerfMap", DAT, RSYS_PERFMAP, 0, 0, VEOI, TYCH, 0, C_NOYESCH_NO, N, N), +CULT( "rsRep205", DAT, RSYS_REP205, 0, 0, VEOI, TYREF, &EDiB, N, N, N), CULT( "rsFanTy", DAT, RSFAN( FANTY), 0, 0, VEOI, TYCH, 0, C_FANTYCH_BLOWTHRU, N, N ), CULT( "rsFanMotTy", DAT, RSFAN( MOTTY), 0, 0, VEOI, TYCH, 0, C_MOTTYCH_PSC, N, N ), CULT( "rsAdjForFanHt", DAT, RSYS_ADJFORFANHT,0, 0, VEOI, TYCH, 0, C_NOYESCH_YES, N, N), @@ -2856,6 +2873,7 @@ CULT cnTopCult[] = // Top level table, points to all other tables, used in cal CULT( "zone", RATE, 0, NM_RQD/*|RQD*/, 0, 0, 0, &ZiB, N, 0.f, znT, N), CULT( "izXfer", RATE, 0, 0, 0, 0, 0, &IzxiB, N, 0.f, izxT, N), CULT("afmeter", RATE, 0, NM_RQD, 0, 0, 0, &AfMtriB,N, 0.f, afMeterT, N), + CULT( "equipdata", RATE, 0, NM_RQD, 0, 0, 0, &EDiB, N, 0.f, edT, N), CULT( "rsys", RATE, 0, NM_RQD, 0, 0, 0, &RSiB, N, 0.f, rsysT, N), CULT( "dhwdayuse", RATE, 0, NM_RQD, 0, 0, 0, &WDUiB, N, 0.f, dhwDayUseT, N), CULT( "dhwmeter", RATE, 0, NM_RQD, 0, 0, 0, &WMtriB, N, 0.f, dhwMeterT, N), diff --git a/src/CNLOADS.CPP b/src/CNLOADS.CPP index 13b06134c..89afa28ad 100644 --- a/src/CNLOADS.CPP +++ b/src/CNLOADS.CPP @@ -2062,17 +2062,10 @@ RC RSYS::rs_TopRSys1() // check RSYS, initial set up for run rs_zonesServed++; } -#if 0 -// CBOR test code, 9-2020? extern RC TestCBOR(const char* filePath); - TestCBOR -#if 1 - ("Unitary-Constant-Efficiency.RS0002.a205.json"); -#else - ("Unitary-Constant-Efficiency.RS0002.a205.cbor"); -#endif -#endif + + // Load ASHRAE 205 files return rc; diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index fe6d720ad..c53ba5c4b 100644 --- a/src/CNRECS.DEF +++ b/src/CNRECS.DEF @@ -2930,6 +2930,18 @@ RECORD AIRNET "AirNet" *SUBSTRUCT *hideall // AirNet calculation storage / code *END // AIRNET //============================================================================= +RECORD EQUIPDATA "EquipData" *RAT // holds ASHRAE 205 equipment data +*prefix ed_ + +// *declare "class libtk205::rs_instance_base_class ed_data;" + +// in base class: .name, .ownTi, more. +*r CHP ed_filePath // File path +*r CHP ed_expectedRS // Expected Representation Specification identifier (e.g., RS0004) +*r NOYESCH ed_doValidation // Validate file against schema + +*END // EQUIPDATA +//============================================================================= #if 0 // not needed, save for possible use, 4-12 x RECORD DUCTMODE "DuctMode" *SUBSTRUCT *hideall x *prefix dsm_ @@ -3217,6 +3229,8 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system // included in perf map, *i NOYESCH rs_perfMap // if YES, make performance map (development aid) // writes file .csv + +*r TI rs_rep205 // ASHRAE 205 equipment data reference *r DBL rs_areaServed // total zone floor area served by this RSYS, ft2 *r INT rs_zonesServed // # of zones served by this RSYS diff --git a/src/a205face.cpp b/src/a205face.cpp index 3efaba2f5..5a25c1b4e 100644 --- a/src/a205face.cpp +++ b/src/a205face.cpp @@ -10,51 +10,5 @@ -#if 0 -// experimental code 9/2020 ? -#include -#include -#include -#include - -#include "json.hpp" - -using json = nlohmann::json; - -RC TestCBOR( - const char* filePath) -{ - RC rc = RCOK; - - std::ifstream fileStream(filePath); - - const char* ext = strpathparts(filePath, STRPPEXT); - bool isCBOR = stricmp(ext, ".cbor") == 0; - - json x = - isCBOR ? json::from_cbor( fileStream) - : json::parse(fileStream); - -#if 0 - MYLOADER L( x, otherstuff) - - std::string rs_id = L.get("RS_ID", "?"); - - fluidType = L.getEnum("Fluid", enumTable) - - timeStamp = L.getTimeStamp() - - string z = x.value("name") -#endif - - - for (auto it = x.begin(); it != x.end(); ++it) - { - std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; - } - - return rc; -} -#endif // a205face.cpp end \ No newline at end of file diff --git a/src/json.hpp b/src/json.hpp deleted file mode 100644 index a70aaf8cb..000000000 --- a/src/json.hpp +++ /dev/null @@ -1,25447 +0,0 @@ -/* - __ _____ _____ _____ - __| | __| | | | JSON for Modern C++ -| | |__ | | | | | | version 3.9.1 -|_____|_____|_____|_|___| https://github.com/nlohmann/json - -Licensed under the MIT License . -SPDX-License-Identifier: MIT -Copyright (c) 2013-2019 Niels Lohmann . - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#ifndef INCLUDE_NLOHMANN_JSON_HPP_ -#define INCLUDE_NLOHMANN_JSON_HPP_ - -#define NLOHMANN_JSON_VERSION_MAJOR 3 -#define NLOHMANN_JSON_VERSION_MINOR 9 -#define NLOHMANN_JSON_VERSION_PATCH 1 - -#include // all_of, find, for_each -#include // nullptr_t, ptrdiff_t, size_t -#include // hash, less -#include // initializer_list -#include // istream, ostream -#include // random_access_iterator_tag -#include // unique_ptr -#include // accumulate -#include // string, stoi, to_string -#include // declval, forward, move, pair, swap -#include // vector - -// #include - - -#include - -// #include - - -#include // transform -#include // array -#include // forward_list -#include // inserter, front_inserter, end -#include // map -#include // string -#include // tuple, make_tuple -#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible -#include // unordered_map -#include // pair, declval -#include // valarray - -// #include - - -#include // exception -#include // runtime_error -#include // to_string - -// #include - - -#include // size_t - -namespace nlohmann -{ -namespace detail -{ -/// struct to capture the start position of the current token -struct position_t -{ - /// the total number of characters read - std::size_t chars_read_total = 0; - /// the number of characters read in the current line - std::size_t chars_read_current_line = 0; - /// the number of lines read - std::size_t lines_read = 0; - - /// conversion to size_t to preserve SAX interface - constexpr operator size_t() const - { - return chars_read_total; - } -}; - -} // namespace detail -} // namespace nlohmann - -// #include - - -#include // pair -// #include -/* Hedley - https://nemequ.github.io/hedley - * Created by Evan Nemerson - * - * To the extent possible under law, the author(s) have dedicated all - * copyright and related and neighboring rights to this software to - * the public domain worldwide. This software is distributed without - * any warranty. - * - * For details, see . - * SPDX-License-Identifier: CC0-1.0 - */ - -#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 13) -#if defined(JSON_HEDLEY_VERSION) - #undef JSON_HEDLEY_VERSION -#endif -#define JSON_HEDLEY_VERSION 13 - -#if defined(JSON_HEDLEY_STRINGIFY_EX) - #undef JSON_HEDLEY_STRINGIFY_EX -#endif -#define JSON_HEDLEY_STRINGIFY_EX(x) #x - -#if defined(JSON_HEDLEY_STRINGIFY) - #undef JSON_HEDLEY_STRINGIFY -#endif -#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) - -#if defined(JSON_HEDLEY_CONCAT_EX) - #undef JSON_HEDLEY_CONCAT_EX -#endif -#define JSON_HEDLEY_CONCAT_EX(a,b) a##b - -#if defined(JSON_HEDLEY_CONCAT) - #undef JSON_HEDLEY_CONCAT -#endif -#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) - -#if defined(JSON_HEDLEY_CONCAT3_EX) - #undef JSON_HEDLEY_CONCAT3_EX -#endif -#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c - -#if defined(JSON_HEDLEY_CONCAT3) - #undef JSON_HEDLEY_CONCAT3 -#endif -#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) - -#if defined(JSON_HEDLEY_VERSION_ENCODE) - #undef JSON_HEDLEY_VERSION_ENCODE -#endif -#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) - -#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) - #undef JSON_HEDLEY_VERSION_DECODE_MAJOR -#endif -#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) - -#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) - #undef JSON_HEDLEY_VERSION_DECODE_MINOR -#endif -#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) - -#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) - #undef JSON_HEDLEY_VERSION_DECODE_REVISION -#endif -#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) - -#if defined(JSON_HEDLEY_GNUC_VERSION) - #undef JSON_HEDLEY_GNUC_VERSION -#endif -#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) - #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) -#elif defined(__GNUC__) - #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) -#endif - -#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) - #undef JSON_HEDLEY_GNUC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_GNUC_VERSION) - #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_MSVC_VERSION) - #undef JSON_HEDLEY_MSVC_VERSION -#endif -#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) -#elif defined(_MSC_FULL_VER) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) -#elif defined(_MSC_VER) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) -#endif - -#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) - #undef JSON_HEDLEY_MSVC_VERSION_CHECK -#endif -#if !defined(_MSC_VER) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) -#elif defined(_MSC_VER) && (_MSC_VER >= 1200) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) -#else - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) -#endif - -#if defined(JSON_HEDLEY_INTEL_VERSION) - #undef JSON_HEDLEY_INTEL_VERSION -#endif -#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) - #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) -#elif defined(__INTEL_COMPILER) - #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) -#endif - -#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) - #undef JSON_HEDLEY_INTEL_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_INTEL_VERSION) - #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_PGI_VERSION) - #undef JSON_HEDLEY_PGI_VERSION -#endif -#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) - #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) -#endif - -#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) - #undef JSON_HEDLEY_PGI_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_PGI_VERSION) - #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_SUNPRO_VERSION) - #undef JSON_HEDLEY_SUNPRO_VERSION -#endif -#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) -#elif defined(__SUNPRO_C) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) -#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) -#elif defined(__SUNPRO_CC) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) -#endif - -#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) - #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_SUNPRO_VERSION) - #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) - #undef JSON_HEDLEY_EMSCRIPTEN_VERSION -#endif -#if defined(__EMSCRIPTEN__) - #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) -#endif - -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) - #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) - #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_ARM_VERSION) - #undef JSON_HEDLEY_ARM_VERSION -#endif -#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) - #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) -#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) - #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) -#endif - -#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) - #undef JSON_HEDLEY_ARM_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_ARM_VERSION) - #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_IBM_VERSION) - #undef JSON_HEDLEY_IBM_VERSION -#endif -#if defined(__ibmxl__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) -#elif defined(__xlC__) && defined(__xlC_ver__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) -#elif defined(__xlC__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) -#endif - -#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) - #undef JSON_HEDLEY_IBM_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_IBM_VERSION) - #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_VERSION) - #undef JSON_HEDLEY_TI_VERSION -#endif -#if \ - defined(__TI_COMPILER_VERSION__) && \ - ( \ - defined(__TMS470__) || defined(__TI_ARM__) || \ - defined(__MSP430__) || \ - defined(__TMS320C2000__) \ - ) -#if (__TI_COMPILER_VERSION__ >= 16000000) - #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif -#endif - -#if defined(JSON_HEDLEY_TI_VERSION_CHECK) - #undef JSON_HEDLEY_TI_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_VERSION) - #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL2000_VERSION) - #undef JSON_HEDLEY_TI_CL2000_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) - #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL2000_VERSION) - #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL430_VERSION) - #undef JSON_HEDLEY_TI_CL430_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) - #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL430_VERSION) - #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) - #undef JSON_HEDLEY_TI_ARMCL_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) - #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) - #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) - #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL6X_VERSION) - #undef JSON_HEDLEY_TI_CL6X_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) - #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL6X_VERSION) - #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL7X_VERSION) - #undef JSON_HEDLEY_TI_CL7X_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) - #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL7X_VERSION) - #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) - #undef JSON_HEDLEY_TI_CLPRU_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) - #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) - #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_CRAY_VERSION) - #undef JSON_HEDLEY_CRAY_VERSION -#endif -#if defined(_CRAYC) - #if defined(_RELEASE_PATCHLEVEL) - #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) - #else - #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) - #endif -#endif - -#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) - #undef JSON_HEDLEY_CRAY_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_CRAY_VERSION) - #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_IAR_VERSION) - #undef JSON_HEDLEY_IAR_VERSION -#endif -#if defined(__IAR_SYSTEMS_ICC__) - #if __VER__ > 1000 - #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) - #else - #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(VER / 100, __VER__ % 100, 0) - #endif -#endif - -#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) - #undef JSON_HEDLEY_IAR_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_IAR_VERSION) - #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TINYC_VERSION) - #undef JSON_HEDLEY_TINYC_VERSION -#endif -#if defined(__TINYC__) - #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) -#endif - -#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) - #undef JSON_HEDLEY_TINYC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TINYC_VERSION) - #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_DMC_VERSION) - #undef JSON_HEDLEY_DMC_VERSION -#endif -#if defined(__DMC__) - #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) -#endif - -#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) - #undef JSON_HEDLEY_DMC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_DMC_VERSION) - #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_COMPCERT_VERSION) - #undef JSON_HEDLEY_COMPCERT_VERSION -#endif -#if defined(__COMPCERT_VERSION__) - #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) -#endif - -#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) - #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_COMPCERT_VERSION) - #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_PELLES_VERSION) - #undef JSON_HEDLEY_PELLES_VERSION -#endif -#if defined(__POCC__) - #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) -#endif - -#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) - #undef JSON_HEDLEY_PELLES_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_PELLES_VERSION) - #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_GCC_VERSION) - #undef JSON_HEDLEY_GCC_VERSION -#endif -#if \ - defined(JSON_HEDLEY_GNUC_VERSION) && \ - !defined(__clang__) && \ - !defined(JSON_HEDLEY_INTEL_VERSION) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_ARM_VERSION) && \ - !defined(JSON_HEDLEY_TI_VERSION) && \ - !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ - !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ - !defined(__COMPCERT__) - #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION -#endif - -#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) - #undef JSON_HEDLEY_GCC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_GCC_VERSION) - #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_ATTRIBUTE -#endif -#if defined(__has_attribute) - #define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) -#else - #define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE -#endif -#if defined(__has_attribute) - #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) __has_attribute(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE -#endif -#if defined(__has_attribute) - #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) __has_attribute(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE -#endif -#if \ - defined(__has_cpp_attribute) && \ - defined(__cplusplus) && \ - (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) - #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS -#endif -#if !defined(__cplusplus) || !defined(__has_cpp_attribute) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) -#elif \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_IAR_VERSION) && \ - (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ - (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) -#else - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE -#endif -#if defined(__has_cpp_attribute) && defined(__cplusplus) - #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE -#endif -#if defined(__has_cpp_attribute) && defined(__cplusplus) - #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_BUILTIN) - #undef JSON_HEDLEY_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) -#else - #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) - #undef JSON_HEDLEY_GNUC_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) -#else - #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) - #undef JSON_HEDLEY_GCC_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) -#else - #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_FEATURE) - #undef JSON_HEDLEY_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) -#else - #define JSON_HEDLEY_HAS_FEATURE(feature) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) - #undef JSON_HEDLEY_GNUC_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) -#else - #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) - #undef JSON_HEDLEY_GCC_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) -#else - #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_EXTENSION) - #undef JSON_HEDLEY_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) -#else - #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) - #undef JSON_HEDLEY_GNUC_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) -#else - #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) - #undef JSON_HEDLEY_GCC_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) -#else - #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_WARNING) - #undef JSON_HEDLEY_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) -#else - #define JSON_HEDLEY_HAS_WARNING(warning) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) - #undef JSON_HEDLEY_GNUC_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) -#else - #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_WARNING) - #undef JSON_HEDLEY_GCC_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) -#else - #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for - HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ -#endif -#if defined(__cplusplus) -# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") -# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") -# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ - _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ - xpr \ - JSON_HEDLEY_DIAGNOSTIC_POP -# else -# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ - xpr \ - JSON_HEDLEY_DIAGNOSTIC_POP -# endif -# endif -#endif -#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x -#endif - -#if defined(JSON_HEDLEY_CONST_CAST) - #undef JSON_HEDLEY_CONST_CAST -#endif -#if defined(__cplusplus) -# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) -#elif \ - JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ - ((T) (expr)); \ - JSON_HEDLEY_DIAGNOSTIC_POP \ - })) -#else -# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_REINTERPRET_CAST) - #undef JSON_HEDLEY_REINTERPRET_CAST -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) -#else - #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_STATIC_CAST) - #undef JSON_HEDLEY_STATIC_CAST -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) -#else - #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_CPP_CAST) - #undef JSON_HEDLEY_CPP_CAST -#endif -#if defined(__cplusplus) -# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") -# define JSON_HEDLEY_CPP_CAST(T, expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ - ((T) (expr)) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) -# define JSON_HEDLEY_CPP_CAST(T, expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("diag_suppress=Pe137") \ - JSON_HEDLEY_DIAGNOSTIC_POP \ -# else -# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) -# endif -#else -# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) -#endif - -#if \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ - defined(__clang__) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ - (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) - #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_PRAGMA(value) __pragma(value) -#else - #define JSON_HEDLEY_PRAGMA(value) -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) - #undef JSON_HEDLEY_DIAGNOSTIC_PUSH -#endif -#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) - #undef JSON_HEDLEY_DIAGNOSTIC_POP -#endif -#if defined(__clang__) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) - #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) -#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") -#else - #define JSON_HEDLEY_DIAGNOSTIC_PUSH - #define JSON_HEDLEY_DIAGNOSTIC_POP -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL -#endif - -#if defined(JSON_HEDLEY_DEPRECATED) - #undef JSON_HEDLEY_DEPRECATED -#endif -#if defined(JSON_HEDLEY_DEPRECATED_FOR) - #undef JSON_HEDLEY_DEPRECATED_FOR -#endif -#if JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) - #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) -#elif defined(__cplusplus) && (__cplusplus >= 201402L) - #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) -#elif \ - JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) - #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) - #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") -#else - #define JSON_HEDLEY_DEPRECATED(since) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) -#endif - -#if defined(JSON_HEDLEY_UNAVAILABLE) - #undef JSON_HEDLEY_UNAVAILABLE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) -#else - #define JSON_HEDLEY_UNAVAILABLE(available_since) -#endif - -#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) - #undef JSON_HEDLEY_WARN_UNUSED_RESULT -#endif -#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) - #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG -#endif -#if (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) - #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) - #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) -#elif defined(_Check_return_) /* SAL */ - #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ -#else - #define JSON_HEDLEY_WARN_UNUSED_RESULT - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) -#endif - -#if defined(JSON_HEDLEY_SENTINEL) - #undef JSON_HEDLEY_SENTINEL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) - #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) -#else - #define JSON_HEDLEY_SENTINEL(position) -#endif - -#if defined(JSON_HEDLEY_NO_RETURN) - #undef JSON_HEDLEY_NO_RETURN -#endif -#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_NO_RETURN __noreturn -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) -#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L - #define JSON_HEDLEY_NO_RETURN _Noreturn -#elif defined(__cplusplus) && (__cplusplus >= 201103L) - #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) - #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) - #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") -#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) - #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) - #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) -#else - #define JSON_HEDLEY_NO_RETURN -#endif - -#if defined(JSON_HEDLEY_NO_ESCAPE) - #undef JSON_HEDLEY_NO_ESCAPE -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) - #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) -#else - #define JSON_HEDLEY_NO_ESCAPE -#endif - -#if defined(JSON_HEDLEY_UNREACHABLE) - #undef JSON_HEDLEY_UNREACHABLE -#endif -#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) - #undef JSON_HEDLEY_UNREACHABLE_RETURN -#endif -#if defined(JSON_HEDLEY_ASSUME) - #undef JSON_HEDLEY_ASSUME -#endif -#if \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_ASSUME(expr) __assume(expr) -#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) - #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) -#elif \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) - #if defined(__cplusplus) - #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) - #else - #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) - #endif -#endif -#if \ - (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) - #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() -#elif defined(JSON_HEDLEY_ASSUME) - #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) -#endif -#if !defined(JSON_HEDLEY_ASSUME) - #if defined(JSON_HEDLEY_UNREACHABLE) - #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) - #else - #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) - #endif -#endif -#if defined(JSON_HEDLEY_UNREACHABLE) - #if \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) - #else - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() - #endif -#else - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) -#endif -#if !defined(JSON_HEDLEY_UNREACHABLE) - #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) -#endif - -JSON_HEDLEY_DIAGNOSTIC_PUSH -#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") - #pragma clang diagnostic ignored "-Wpedantic" -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) - #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" -#endif -#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) - #if defined(__clang__) - #pragma clang diagnostic ignored "-Wvariadic-macros" - #elif defined(JSON_HEDLEY_GCC_VERSION) - #pragma GCC diagnostic ignored "-Wvariadic-macros" - #endif -#endif -#if defined(JSON_HEDLEY_NON_NULL) - #undef JSON_HEDLEY_NON_NULL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) - #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) -#else - #define JSON_HEDLEY_NON_NULL(...) -#endif -JSON_HEDLEY_DIAGNOSTIC_POP - -#if defined(JSON_HEDLEY_PRINTF_FORMAT) - #undef JSON_HEDLEY_PRINTF_FORMAT -#endif -#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) -#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) -#else - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) -#endif - -#if defined(JSON_HEDLEY_CONSTEXPR) - #undef JSON_HEDLEY_CONSTEXPR -#endif -#if defined(__cplusplus) - #if __cplusplus >= 201103L - #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) - #endif -#endif -#if !defined(JSON_HEDLEY_CONSTEXPR) - #define JSON_HEDLEY_CONSTEXPR -#endif - -#if defined(JSON_HEDLEY_PREDICT) - #undef JSON_HEDLEY_PREDICT -#endif -#if defined(JSON_HEDLEY_LIKELY) - #undef JSON_HEDLEY_LIKELY -#endif -#if defined(JSON_HEDLEY_UNLIKELY) - #undef JSON_HEDLEY_UNLIKELY -#endif -#if defined(JSON_HEDLEY_UNPREDICTABLE) - #undef JSON_HEDLEY_UNPREDICTABLE -#endif -#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) - #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) -#endif -#if \ - JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) -# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) -# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) -# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) -#elif \ - JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) -# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ - (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ - (__extension__ ({ \ - double hedley_probability_ = (probability); \ - ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ - })) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ - (__extension__ ({ \ - double hedley_probability_ = (probability); \ - ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ - })) -# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) -# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) -#else -# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) -# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) -# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) -#endif -#if !defined(JSON_HEDLEY_UNPREDICTABLE) - #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) -#endif - -#if defined(JSON_HEDLEY_MALLOC) - #undef JSON_HEDLEY_MALLOC -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) - #define JSON_HEDLEY_MALLOC __declspec(restrict) -#else - #define JSON_HEDLEY_MALLOC -#endif - -#if defined(JSON_HEDLEY_PURE) - #undef JSON_HEDLEY_PURE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) -# define JSON_HEDLEY_PURE __attribute__((__pure__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) -# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") -#elif defined(__cplusplus) && \ - ( \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ - ) -# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") -#else -# define JSON_HEDLEY_PURE -#endif - -#if defined(JSON_HEDLEY_CONST) - #undef JSON_HEDLEY_CONST -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_CONST __attribute__((__const__)) -#elif \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_CONST _Pragma("no_side_effect") -#else - #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE -#endif - -#if defined(JSON_HEDLEY_RESTRICT) - #undef JSON_HEDLEY_RESTRICT -#endif -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) - #define JSON_HEDLEY_RESTRICT restrict -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ - defined(__clang__) - #define JSON_HEDLEY_RESTRICT __restrict -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) - #define JSON_HEDLEY_RESTRICT _Restrict -#else - #define JSON_HEDLEY_RESTRICT -#endif - -#if defined(JSON_HEDLEY_INLINE) - #undef JSON_HEDLEY_INLINE -#endif -#if \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ - (defined(__cplusplus) && (__cplusplus >= 199711L)) - #define JSON_HEDLEY_INLINE inline -#elif \ - defined(JSON_HEDLEY_GCC_VERSION) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) - #define JSON_HEDLEY_INLINE __inline__ -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_INLINE __inline -#else - #define JSON_HEDLEY_INLINE -#endif - -#if defined(JSON_HEDLEY_ALWAYS_INLINE) - #undef JSON_HEDLEY_ALWAYS_INLINE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) -# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) -# define JSON_HEDLEY_ALWAYS_INLINE __forceinline -#elif defined(__cplusplus) && \ - ( \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ - ) -# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) -# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") -#else -# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE -#endif - -#if defined(JSON_HEDLEY_NEVER_INLINE) - #undef JSON_HEDLEY_NEVER_INLINE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) - #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") -#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) - #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) - #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) -#else - #define JSON_HEDLEY_NEVER_INLINE -#endif - -#if defined(JSON_HEDLEY_PRIVATE) - #undef JSON_HEDLEY_PRIVATE -#endif -#if defined(JSON_HEDLEY_PUBLIC) - #undef JSON_HEDLEY_PUBLIC -#endif -#if defined(JSON_HEDLEY_IMPORT) - #undef JSON_HEDLEY_IMPORT -#endif -#if defined(_WIN32) || defined(__CYGWIN__) -# define JSON_HEDLEY_PRIVATE -# define JSON_HEDLEY_PUBLIC __declspec(dllexport) -# define JSON_HEDLEY_IMPORT __declspec(dllimport) -#else -# if \ - JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - ( \ - defined(__TI_EABI__) && \ - ( \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ - ) \ - ) -# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) -# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) -# else -# define JSON_HEDLEY_PRIVATE -# define JSON_HEDLEY_PUBLIC -# endif -# define JSON_HEDLEY_IMPORT extern -#endif - -#if defined(JSON_HEDLEY_NO_THROW) - #undef JSON_HEDLEY_NO_THROW -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) - #define JSON_HEDLEY_NO_THROW __declspec(nothrow) -#else - #define JSON_HEDLEY_NO_THROW -#endif - -#if defined(JSON_HEDLEY_FALL_THROUGH) - #undef JSON_HEDLEY_FALL_THROUGH -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) - #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) - #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) - #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) -#elif defined(__fallthrough) /* SAL */ - #define JSON_HEDLEY_FALL_THROUGH __fallthrough -#else - #define JSON_HEDLEY_FALL_THROUGH -#endif - -#if defined(JSON_HEDLEY_RETURNS_NON_NULL) - #undef JSON_HEDLEY_RETURNS_NON_NULL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) - #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) -#elif defined(_Ret_notnull_) /* SAL */ - #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ -#else - #define JSON_HEDLEY_RETURNS_NON_NULL -#endif - -#if defined(JSON_HEDLEY_ARRAY_PARAM) - #undef JSON_HEDLEY_ARRAY_PARAM -#endif -#if \ - defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ - !defined(__STDC_NO_VLA__) && \ - !defined(__cplusplus) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_TINYC_VERSION) - #define JSON_HEDLEY_ARRAY_PARAM(name) (name) -#else - #define JSON_HEDLEY_ARRAY_PARAM(name) -#endif - -#if defined(JSON_HEDLEY_IS_CONSTANT) - #undef JSON_HEDLEY_IS_CONSTANT -#endif -#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) - #undef JSON_HEDLEY_REQUIRE_CONSTEXPR -#endif -/* JSON_HEDLEY_IS_CONSTEXPR_ is for - HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ -#if defined(JSON_HEDLEY_IS_CONSTEXPR_) - #undef JSON_HEDLEY_IS_CONSTEXPR_ -#endif -#if \ - JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) - #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) -#endif -#if !defined(__cplusplus) -# if \ - JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) -#if defined(__INTPTR_TYPE__) - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) -#else - #include - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) -#endif -# elif \ - ( \ - defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ - !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_IAR_VERSION)) || \ - JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) -#if defined(__INTPTR_TYPE__) - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) -#else - #include - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) -#endif -# elif \ - defined(JSON_HEDLEY_GCC_VERSION) || \ - defined(JSON_HEDLEY_INTEL_VERSION) || \ - defined(JSON_HEDLEY_TINYC_VERSION) || \ - defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ - defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ - defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ - defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ - defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ - defined(__clang__) -# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ - sizeof(void) != \ - sizeof(*( \ - 1 ? \ - ((void*) ((expr) * 0L) ) : \ -((struct { char v[sizeof(void) * 2]; } *) 1) \ - ) \ - ) \ - ) -# endif -#endif -#if defined(JSON_HEDLEY_IS_CONSTEXPR_) - #if !defined(JSON_HEDLEY_IS_CONSTANT) - #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) - #endif - #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) -#else - #if !defined(JSON_HEDLEY_IS_CONSTANT) - #define JSON_HEDLEY_IS_CONSTANT(expr) (0) - #endif - #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) -#endif - -#if defined(JSON_HEDLEY_BEGIN_C_DECLS) - #undef JSON_HEDLEY_BEGIN_C_DECLS -#endif -#if defined(JSON_HEDLEY_END_C_DECLS) - #undef JSON_HEDLEY_END_C_DECLS -#endif -#if defined(JSON_HEDLEY_C_DECL) - #undef JSON_HEDLEY_C_DECL -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { - #define JSON_HEDLEY_END_C_DECLS } - #define JSON_HEDLEY_C_DECL extern "C" -#else - #define JSON_HEDLEY_BEGIN_C_DECLS - #define JSON_HEDLEY_END_C_DECLS - #define JSON_HEDLEY_C_DECL -#endif - -#if defined(JSON_HEDLEY_STATIC_ASSERT) - #undef JSON_HEDLEY_STATIC_ASSERT -#endif -#if \ - !defined(__cplusplus) && ( \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ - JSON_HEDLEY_HAS_FEATURE(c_static_assert) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - defined(_Static_assert) \ - ) -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) -#elif \ - (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ - JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) -#else -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) -#endif - -#if defined(JSON_HEDLEY_NULL) - #undef JSON_HEDLEY_NULL -#endif -#if defined(__cplusplus) - #if __cplusplus >= 201103L - #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) - #elif defined(NULL) - #define JSON_HEDLEY_NULL NULL - #else - #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) - #endif -#elif defined(NULL) - #define JSON_HEDLEY_NULL NULL -#else - #define JSON_HEDLEY_NULL ((void*) 0) -#endif - -#if defined(JSON_HEDLEY_MESSAGE) - #undef JSON_HEDLEY_MESSAGE -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") -# define JSON_HEDLEY_MESSAGE(msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ - JSON_HEDLEY_PRAGMA(message msg) \ - JSON_HEDLEY_DIAGNOSTIC_POP -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) -#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#else -# define JSON_HEDLEY_MESSAGE(msg) -#endif - -#if defined(JSON_HEDLEY_WARNING) - #undef JSON_HEDLEY_WARNING -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") -# define JSON_HEDLEY_WARNING(msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ - JSON_HEDLEY_PRAGMA(clang warning msg) \ - JSON_HEDLEY_DIAGNOSTIC_POP -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#else -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) -#endif - -#if defined(JSON_HEDLEY_REQUIRE) - #undef JSON_HEDLEY_REQUIRE -#endif -#if defined(JSON_HEDLEY_REQUIRE_MSG) - #undef JSON_HEDLEY_REQUIRE_MSG -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) -# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") -# define JSON_HEDLEY_REQUIRE(expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ - __attribute__((diagnose_if(!(expr), #expr, "error"))) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ - __attribute__((diagnose_if(!(expr), msg, "error"))) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# else -# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) -# endif -#else -# define JSON_HEDLEY_REQUIRE(expr) -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) -#endif - -#if defined(JSON_HEDLEY_FLAGS) - #undef JSON_HEDLEY_FLAGS -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) - #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) -#endif - -#if defined(JSON_HEDLEY_FLAGS_CAST) - #undef JSON_HEDLEY_FLAGS_CAST -#endif -#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) -# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("warning(disable:188)") \ - ((T) (expr)); \ - JSON_HEDLEY_DIAGNOSTIC_POP \ - })) -#else -# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) -#endif - -#if defined(JSON_HEDLEY_EMPTY_BASES) - #undef JSON_HEDLEY_EMPTY_BASES -#endif -#if JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0) - #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) -#else - #define JSON_HEDLEY_EMPTY_BASES -#endif - -/* Remaining macros are deprecated. */ - -#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) - #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK -#endif -#if defined(__clang__) - #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) -#else - #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) - #undef JSON_HEDLEY_CLANG_HAS_BUILTIN -#endif -#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) - -#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) - #undef JSON_HEDLEY_CLANG_HAS_FEATURE -#endif -#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) - -#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) - #undef JSON_HEDLEY_CLANG_HAS_EXTENSION -#endif -#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) - -#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) - #undef JSON_HEDLEY_CLANG_HAS_WARNING -#endif -#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) - -#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ - - -// This file contains all internal macro definitions -// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them - -// exclude unsupported compilers -#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) - #if defined(__clang__) - #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 - #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) - #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 - #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #endif -#endif - -// C++ language standard detection -#if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) - #define JSON_HAS_CPP_20 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 -#elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 -#elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) - #define JSON_HAS_CPP_14 -#endif - -// disable float-equal warnings on GCC/clang -#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wfloat-equal" -#endif - -// disable documentation warnings on clang -#if defined(__clang__) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdocumentation" -#endif - -// allow to disable exceptions -#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) - #define JSON_THROW(exception) throw exception - #define JSON_TRY try - #define JSON_CATCH(exception) catch(exception) - #define JSON_INTERNAL_CATCH(exception) catch(exception) -#else - #include - #define JSON_THROW(exception) std::abort() - #define JSON_TRY if(true) - #define JSON_CATCH(exception) if(false) - #define JSON_INTERNAL_CATCH(exception) if(false) -#endif - -// override exception macros -#if defined(JSON_THROW_USER) - #undef JSON_THROW - #define JSON_THROW JSON_THROW_USER -#endif -#if defined(JSON_TRY_USER) - #undef JSON_TRY - #define JSON_TRY JSON_TRY_USER -#endif -#if defined(JSON_CATCH_USER) - #undef JSON_CATCH - #define JSON_CATCH JSON_CATCH_USER - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_CATCH_USER -#endif -#if defined(JSON_INTERNAL_CATCH_USER) - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER -#endif - -// allow to override assert -#if !defined(JSON_ASSERT) - #include // assert - #define JSON_ASSERT(x) assert(x) -#endif - -/*! -@brief macro to briefly define a mapping between an enum and JSON -@def NLOHMANN_JSON_SERIALIZE_ENUM -@since version 3.4.0 -*/ -#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ - template \ - inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ - { \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [e](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.first == e; \ - }); \ - j = ((it != std::end(m)) ? it : std::begin(m))->second; \ - } \ - template \ - inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ - { \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [&j](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.second == j; \ - }); \ - e = ((it != std::end(m)) ? it : std::begin(m))->first; \ - } - -// Ugly macros to avoid uglier copy-paste when specializing basic_json. They -// may be removed in the future once the class is split. - -#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ - template class ObjectType, \ - template class ArrayType, \ - class StringType, class BooleanType, class NumberIntegerType, \ - class NumberUnsignedType, class NumberFloatType, \ - template class AllocatorType, \ - template class JSONSerializer, \ - class BinaryType> - -#define NLOHMANN_BASIC_JSON_TPL \ - basic_json - -// Macros to simplify conversion from/to types - -#define NLOHMANN_JSON_EXPAND( x ) x -#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME -#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ - NLOHMANN_JSON_PASTE64, \ - NLOHMANN_JSON_PASTE63, \ - NLOHMANN_JSON_PASTE62, \ - NLOHMANN_JSON_PASTE61, \ - NLOHMANN_JSON_PASTE60, \ - NLOHMANN_JSON_PASTE59, \ - NLOHMANN_JSON_PASTE58, \ - NLOHMANN_JSON_PASTE57, \ - NLOHMANN_JSON_PASTE56, \ - NLOHMANN_JSON_PASTE55, \ - NLOHMANN_JSON_PASTE54, \ - NLOHMANN_JSON_PASTE53, \ - NLOHMANN_JSON_PASTE52, \ - NLOHMANN_JSON_PASTE51, \ - NLOHMANN_JSON_PASTE50, \ - NLOHMANN_JSON_PASTE49, \ - NLOHMANN_JSON_PASTE48, \ - NLOHMANN_JSON_PASTE47, \ - NLOHMANN_JSON_PASTE46, \ - NLOHMANN_JSON_PASTE45, \ - NLOHMANN_JSON_PASTE44, \ - NLOHMANN_JSON_PASTE43, \ - NLOHMANN_JSON_PASTE42, \ - NLOHMANN_JSON_PASTE41, \ - NLOHMANN_JSON_PASTE40, \ - NLOHMANN_JSON_PASTE39, \ - NLOHMANN_JSON_PASTE38, \ - NLOHMANN_JSON_PASTE37, \ - NLOHMANN_JSON_PASTE36, \ - NLOHMANN_JSON_PASTE35, \ - NLOHMANN_JSON_PASTE34, \ - NLOHMANN_JSON_PASTE33, \ - NLOHMANN_JSON_PASTE32, \ - NLOHMANN_JSON_PASTE31, \ - NLOHMANN_JSON_PASTE30, \ - NLOHMANN_JSON_PASTE29, \ - NLOHMANN_JSON_PASTE28, \ - NLOHMANN_JSON_PASTE27, \ - NLOHMANN_JSON_PASTE26, \ - NLOHMANN_JSON_PASTE25, \ - NLOHMANN_JSON_PASTE24, \ - NLOHMANN_JSON_PASTE23, \ - NLOHMANN_JSON_PASTE22, \ - NLOHMANN_JSON_PASTE21, \ - NLOHMANN_JSON_PASTE20, \ - NLOHMANN_JSON_PASTE19, \ - NLOHMANN_JSON_PASTE18, \ - NLOHMANN_JSON_PASTE17, \ - NLOHMANN_JSON_PASTE16, \ - NLOHMANN_JSON_PASTE15, \ - NLOHMANN_JSON_PASTE14, \ - NLOHMANN_JSON_PASTE13, \ - NLOHMANN_JSON_PASTE12, \ - NLOHMANN_JSON_PASTE11, \ - NLOHMANN_JSON_PASTE10, \ - NLOHMANN_JSON_PASTE9, \ - NLOHMANN_JSON_PASTE8, \ - NLOHMANN_JSON_PASTE7, \ - NLOHMANN_JSON_PASTE6, \ - NLOHMANN_JSON_PASTE5, \ - NLOHMANN_JSON_PASTE4, \ - NLOHMANN_JSON_PASTE3, \ - NLOHMANN_JSON_PASTE2, \ - NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) -#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) -#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) -#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) -#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) -#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) -#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) -#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) -#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) -#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) -#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) -#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) -#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) -#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) -#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) -#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) -#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) -#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) -#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) -#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) -#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) -#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) -#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) -#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) -#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) -#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) -#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) -#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) -#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) -#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) -#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) -#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) -#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) -#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) -#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) -#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) -#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) -#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) -#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) -#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) -#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) -#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) -#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) -#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) -#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) -#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) -#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) -#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) -#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) -#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) -#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) -#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) -#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) -#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) -#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) -#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) -#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) -#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) -#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) -#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) -#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) -#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) -#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) -#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) - -#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; -#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE -@since version 3.9.0 -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ - friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE -@since version 3.9.0 -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ - inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -#ifndef JSON_USE_IMPLICIT_CONVERSIONS - #define JSON_USE_IMPLICIT_CONVERSIONS 1 -#endif - -#if JSON_USE_IMPLICIT_CONVERSIONS - #define JSON_EXPLICIT -#else - #define JSON_EXPLICIT explicit -#endif - - -namespace nlohmann -{ -namespace detail -{ -//////////////// -// exceptions // -//////////////// - -/*! -@brief general exception of the @ref basic_json class - -This class is an extension of `std::exception` objects with a member @a id for -exception ids. It is used as the base class for all exceptions thrown by the -@ref basic_json class. This class can hence be used as "wildcard" to catch -exceptions. - -Subclasses: -- @ref parse_error for exceptions indicating a parse error -- @ref invalid_iterator for exceptions indicating errors with iterators -- @ref type_error for exceptions indicating executing a member function with - a wrong type -- @ref out_of_range for exceptions indicating access out of the defined range -- @ref other_error for exceptions indicating other library errors - -@internal -@note To have nothrow-copy-constructible exceptions, we internally use - `std::runtime_error` which can cope with arbitrary-length error messages. - Intermediate strings are built with static functions and then passed to - the actual constructor. -@endinternal - -@liveexample{The following code shows how arbitrary library exceptions can be -caught.,exception} - -@since version 3.0.0 -*/ -class exception : public std::exception -{ - public: - /// returns the explanatory string - JSON_HEDLEY_RETURNS_NON_NULL - const char* what() const noexcept override - { - return m.what(); - } - - /// the id of the exception - const int id; - - protected: - JSON_HEDLEY_NON_NULL(3) - exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} - - static std::string name(const std::string& ename, int id_) - { - return "[json.exception." + ename + "." + std::to_string(id_) + "] "; - } - - private: - /// an exception object as storage for error messages - std::runtime_error m; -}; - -/*! -@brief exception indicating a parse error - -This exception is thrown by the library when a parse error occurs. Parse errors -can occur during the deserialization of JSON text, CBOR, MessagePack, as well -as when using JSON Patch. - -Member @a byte holds the byte index of the last read character in the input -file. - -Exceptions have ids 1xx. - -name / id | example message | description ------------------------------- | --------------- | ------------------------- -json.exception.parse_error.101 | parse error at 2: unexpected end of input; expected string literal | This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member @a byte indicates the error position. -json.exception.parse_error.102 | parse error at 14: missing or wrong low surrogate | JSON uses the `\uxxxx` format to describe Unicode characters. Code points above above 0xFFFF are split into two `\uxxxx` entries ("surrogate pairs"). This error indicates that the surrogate pair is incomplete or contains an invalid code point. -json.exception.parse_error.103 | parse error: code points above 0x10FFFF are invalid | Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid. -json.exception.parse_error.104 | parse error: JSON patch must be an array of objects | [RFC 6902](https://tools.ietf.org/html/rfc6902) requires a JSON Patch document to be a JSON document that represents an array of objects. -json.exception.parse_error.105 | parse error: operation must have string member 'op' | An operation of a JSON Patch document must contain exactly one "op" member, whose value indicates the operation to perform. Its value must be one of "add", "remove", "replace", "move", "copy", or "test"; other values are errors. -json.exception.parse_error.106 | parse error: array index '01' must not begin with '0' | An array index in a JSON Pointer ([RFC 6901](https://tools.ietf.org/html/rfc6901)) may be `0` or any number without a leading `0`. -json.exception.parse_error.107 | parse error: JSON pointer must be empty or begin with '/' - was: 'foo' | A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a `/` character. -json.exception.parse_error.108 | parse error: escape character '~' must be followed with '0' or '1' | In a JSON Pointer, only `~0` and `~1` are valid escape sequences. -json.exception.parse_error.109 | parse error: array index 'one' is not a number | A JSON Pointer array index must be a number. -json.exception.parse_error.110 | parse error at 1: cannot read 2 bytes from vector | When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read. -json.exception.parse_error.112 | parse error at 1: error reading CBOR; last byte: 0xF8 | Not all types of CBOR or MessagePack are supported. This exception occurs if an unsupported byte was read. -json.exception.parse_error.113 | parse error at 2: expected a CBOR string; last byte: 0x98 | While parsing a map key, a value that is not a string has been read. -json.exception.parse_error.114 | parse error: Unsupported BSON record type 0x0F | The parsing of the corresponding BSON record type is not implemented (yet). -json.exception.parse_error.115 | parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A | A UBJSON high-precision number could not be parsed. - -@note For an input with n bytes, 1 is the index of the first character and n+1 - is the index of the terminating null byte or the end of file. This also - holds true when reading a byte vector (CBOR or MessagePack). - -@liveexample{The following code shows how a `parse_error` exception can be -caught.,parse_error} - -@sa - @ref exception for the base class of the library exceptions -@sa - @ref invalid_iterator for exceptions indicating errors with iterators -@sa - @ref type_error for exceptions indicating executing a member function with - a wrong type -@sa - @ref out_of_range for exceptions indicating access out of the defined range -@sa - @ref other_error for exceptions indicating other library errors - -@since version 3.0.0 -*/ -class parse_error : public exception -{ - public: - /*! - @brief create a parse error exception - @param[in] id_ the id of the exception - @param[in] pos the position where the error occurred (or with - chars_read_total=0 if the position cannot be - determined) - @param[in] what_arg the explanatory string - @return parse_error object - */ - static parse_error create(int id_, const position_t& pos, const std::string& what_arg) - { - std::string w = exception::name("parse_error", id_) + "parse error" + - position_string(pos) + ": " + what_arg; - return parse_error(id_, pos.chars_read_total, w.c_str()); - } - - static parse_error create(int id_, std::size_t byte_, const std::string& what_arg) - { - std::string w = exception::name("parse_error", id_) + "parse error" + - (byte_ != 0 ? (" at byte " + std::to_string(byte_)) : "") + - ": " + what_arg; - return parse_error(id_, byte_, w.c_str()); - } - - /*! - @brief byte index of the parse error - - The byte index of the last read character in the input file. - - @note For an input with n bytes, 1 is the index of the first character and - n+1 is the index of the terminating null byte or the end of file. - This also holds true when reading a byte vector (CBOR or MessagePack). - */ - const std::size_t byte; - - private: - parse_error(int id_, std::size_t byte_, const char* what_arg) - : exception(id_, what_arg), byte(byte_) {} - - static std::string position_string(const position_t& pos) - { - return " at line " + std::to_string(pos.lines_read + 1) + - ", column " + std::to_string(pos.chars_read_current_line); - } -}; - -/*! -@brief exception indicating errors with iterators - -This exception is thrown if iterators passed to a library function do not match -the expected semantics. - -Exceptions have ids 2xx. - -name / id | example message | description ------------------------------------ | --------------- | ------------------------- -json.exception.invalid_iterator.201 | iterators are not compatible | The iterators passed to constructor @ref basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (@a first, @a last) is invalid. -json.exception.invalid_iterator.202 | iterator does not fit current value | In an erase or insert function, the passed iterator @a pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion. -json.exception.invalid_iterator.203 | iterators do not fit current value | Either iterator passed to function @ref erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from. -json.exception.invalid_iterator.204 | iterators out of range | When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (@ref begin(), @ref end()), because this is the only way the single stored value is expressed. All other ranges are invalid. -json.exception.invalid_iterator.205 | iterator out of range | When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the @ref begin() iterator, because it is the only way to address the stored value. All other iterators are invalid. -json.exception.invalid_iterator.206 | cannot construct with iterators from null | The iterators passed to constructor @ref basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range. -json.exception.invalid_iterator.207 | cannot use key() for non-object iterators | The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key. -json.exception.invalid_iterator.208 | cannot use operator[] for object iterators | The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. -json.exception.invalid_iterator.209 | cannot use offsets with object iterators | The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. -json.exception.invalid_iterator.210 | iterators do not fit | The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (@a first, @a last) is invalid. -json.exception.invalid_iterator.211 | passed iterators may not belong to container | The iterator range passed to the insert function must not be a subrange of the container to insert to. -json.exception.invalid_iterator.212 | cannot compare iterators of different containers | When two iterators are compared, they must belong to the same container. -json.exception.invalid_iterator.213 | cannot compare order of object iterators | The order of object iterators cannot be compared, because JSON objects are unordered. -json.exception.invalid_iterator.214 | cannot get value | Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to @ref begin(). - -@liveexample{The following code shows how an `invalid_iterator` exception can be -caught.,invalid_iterator} - -@sa - @ref exception for the base class of the library exceptions -@sa - @ref parse_error for exceptions indicating a parse error -@sa - @ref type_error for exceptions indicating executing a member function with - a wrong type -@sa - @ref out_of_range for exceptions indicating access out of the defined range -@sa - @ref other_error for exceptions indicating other library errors - -@since version 3.0.0 -*/ -class invalid_iterator : public exception -{ - public: - static invalid_iterator create(int id_, const std::string& what_arg) - { - std::string w = exception::name("invalid_iterator", id_) + what_arg; - return invalid_iterator(id_, w.c_str()); - } - - private: - JSON_HEDLEY_NON_NULL(3) - invalid_iterator(int id_, const char* what_arg) - : exception(id_, what_arg) {} -}; - -/*! -@brief exception indicating executing a member function with a wrong type - -This exception is thrown in case of a type error; that is, a library function is -executed on a JSON value whose type does not match the expected semantics. - -Exceptions have ids 3xx. - -name / id | example message | description ------------------------------ | --------------- | ------------------------- -json.exception.type_error.301 | cannot create object from initializer list | To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead. -json.exception.type_error.302 | type must be object, but is array | During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types. -json.exception.type_error.303 | incompatible ReferenceType for get_ref, actual type is object | To retrieve a reference to a value stored in a @ref basic_json object with @ref get_ref, the type of the reference must match the value type. For instance, for a JSON array, the @a ReferenceType must be @ref array_t &. -json.exception.type_error.304 | cannot use at() with string | The @ref at() member functions can only be executed for certain JSON types. -json.exception.type_error.305 | cannot use operator[] with string | The @ref operator[] member functions can only be executed for certain JSON types. -json.exception.type_error.306 | cannot use value() with string | The @ref value() member functions can only be executed for certain JSON types. -json.exception.type_error.307 | cannot use erase() with string | The @ref erase() member functions can only be executed for certain JSON types. -json.exception.type_error.308 | cannot use push_back() with string | The @ref push_back() and @ref operator+= member functions can only be executed for certain JSON types. -json.exception.type_error.309 | cannot use insert() with | The @ref insert() member functions can only be executed for certain JSON types. -json.exception.type_error.310 | cannot use swap() with number | The @ref swap() member functions can only be executed for certain JSON types. -json.exception.type_error.311 | cannot use emplace_back() with string | The @ref emplace_back() member function can only be executed for certain JSON types. -json.exception.type_error.312 | cannot use update() with string | The @ref update() member functions can only be executed for certain JSON types. -json.exception.type_error.313 | invalid value to unflatten | The @ref unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well defined. -json.exception.type_error.314 | only objects can be unflattened | The @ref unflatten function only works for an object whose keys are JSON Pointers. -json.exception.type_error.315 | values in object must be primitive | The @ref unflatten function only works for an object whose keys are JSON Pointers and whose values are primitive. -json.exception.type_error.316 | invalid UTF-8 byte at index 10: 0x7E | The @ref dump function only works with UTF-8 encoded strings; that is, if you assign a `std::string` to a JSON value, make sure it is UTF-8 encoded. | -json.exception.type_error.317 | JSON value cannot be serialized to requested format | The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw `true` or `null` JSON object cannot be serialized to BSON) | - -@liveexample{The following code shows how a `type_error` exception can be -caught.,type_error} - -@sa - @ref exception for the base class of the library exceptions -@sa - @ref parse_error for exceptions indicating a parse error -@sa - @ref invalid_iterator for exceptions indicating errors with iterators -@sa - @ref out_of_range for exceptions indicating access out of the defined range -@sa - @ref other_error for exceptions indicating other library errors - -@since version 3.0.0 -*/ -class type_error : public exception -{ - public: - static type_error create(int id_, const std::string& what_arg) - { - std::string w = exception::name("type_error", id_) + what_arg; - return type_error(id_, w.c_str()); - } - - private: - JSON_HEDLEY_NON_NULL(3) - type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} -}; - -/*! -@brief exception indicating access out of the defined range - -This exception is thrown in case a library function is called on an input -parameter that exceeds the expected range, for instance in case of array -indices or nonexisting object keys. - -Exceptions have ids 4xx. - -name / id | example message | description -------------------------------- | --------------- | ------------------------- -json.exception.out_of_range.401 | array index 3 is out of range | The provided array index @a i is larger than @a size-1. -json.exception.out_of_range.402 | array index '-' (3) is out of range | The special array index `-` in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it. -json.exception.out_of_range.403 | key 'foo' not found | The provided key was not found in the JSON object. -json.exception.out_of_range.404 | unresolved reference token 'foo' | A reference token in a JSON Pointer could not be resolved. -json.exception.out_of_range.405 | JSON pointer has no parent | The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value. -json.exception.out_of_range.406 | number overflow parsing '10E1000' | A parsed number could not be stored as without changing it to NaN or INF. -json.exception.out_of_range.407 | number overflow serializing '9223372036854775808' | UBJSON and BSON only support integer numbers up to 9223372036854775807. (until version 3.8.0) | -json.exception.out_of_range.408 | excessive array size: 8658170730974374167 | The size (following `#`) of an UBJSON array or object exceeds the maximal capacity. | -json.exception.out_of_range.409 | BSON key cannot contain code point U+0000 (at byte 2) | Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string | - -@liveexample{The following code shows how an `out_of_range` exception can be -caught.,out_of_range} - -@sa - @ref exception for the base class of the library exceptions -@sa - @ref parse_error for exceptions indicating a parse error -@sa - @ref invalid_iterator for exceptions indicating errors with iterators -@sa - @ref type_error for exceptions indicating executing a member function with - a wrong type -@sa - @ref other_error for exceptions indicating other library errors - -@since version 3.0.0 -*/ -class out_of_range : public exception -{ - public: - static out_of_range create(int id_, const std::string& what_arg) - { - std::string w = exception::name("out_of_range", id_) + what_arg; - return out_of_range(id_, w.c_str()); - } - - private: - JSON_HEDLEY_NON_NULL(3) - out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} -}; - -/*! -@brief exception indicating other library errors - -This exception is thrown in case of errors that cannot be classified with the -other exception types. - -Exceptions have ids 5xx. - -name / id | example message | description ------------------------------- | --------------- | ------------------------- -json.exception.other_error.501 | unsuccessful: {"op":"test","path":"/baz", "value":"bar"} | A JSON Patch operation 'test' failed. The unsuccessful operation is also printed. - -@sa - @ref exception for the base class of the library exceptions -@sa - @ref parse_error for exceptions indicating a parse error -@sa - @ref invalid_iterator for exceptions indicating errors with iterators -@sa - @ref type_error for exceptions indicating executing a member function with - a wrong type -@sa - @ref out_of_range for exceptions indicating access out of the defined range - -@liveexample{The following code shows how an `other_error` exception can be -caught.,other_error} - -@since version 3.0.0 -*/ -class other_error : public exception -{ - public: - static other_error create(int id_, const std::string& what_arg) - { - std::string w = exception::name("other_error", id_) + what_arg; - return other_error(id_, w.c_str()); - } - - private: - JSON_HEDLEY_NON_NULL(3) - other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - - -#include // size_t -#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type - -namespace nlohmann -{ -namespace detail -{ -// alias templates to reduce boilerplate -template -using enable_if_t = typename std::enable_if::type; - -template -using uncvref_t = typename std::remove_cv::type>::type; - -// implementation of C++14 index_sequence and affiliates -// source: https://stackoverflow.com/a/32223343 -template -struct index_sequence -{ - using type = index_sequence; - using value_type = std::size_t; - static constexpr std::size_t size() noexcept - { - return sizeof...(Ints); - } -}; - -template -struct merge_and_renumber; - -template -struct merge_and_renumber, index_sequence> - : index_sequence < I1..., (sizeof...(I1) + I2)... > {}; - -template -struct make_index_sequence - : merge_and_renumber < typename make_index_sequence < N / 2 >::type, - typename make_index_sequence < N - N / 2 >::type > {}; - -template<> struct make_index_sequence<0> : index_sequence<> {}; -template<> struct make_index_sequence<1> : index_sequence<0> {}; - -template -using index_sequence_for = make_index_sequence; - -// dispatch utility (taken from ranges-v3) -template struct priority_tag : priority_tag < N - 1 > {}; -template<> struct priority_tag<0> {}; - -// taken from ranges-v3 -template -struct static_const -{ - static constexpr T value{}; -}; - -template -constexpr T static_const::value; -} // namespace detail -} // namespace nlohmann - -// #include - - -#include // numeric_limits -#include // false_type, is_constructible, is_integral, is_same, true_type -#include // declval - -// #include - - -#include // random_access_iterator_tag - -// #include - - -namespace nlohmann -{ -namespace detail -{ -template struct make_void -{ - using type = void; -}; -template using void_t = typename make_void::type; -} // namespace detail -} // namespace nlohmann - -// #include - - -namespace nlohmann -{ -namespace detail -{ -template -struct iterator_types {}; - -template -struct iterator_types < - It, - void_t> -{ - using difference_type = typename It::difference_type; - using value_type = typename It::value_type; - using pointer = typename It::pointer; - using reference = typename It::reference; - using iterator_category = typename It::iterator_category; -}; - -// This is required as some compilers implement std::iterator_traits in a way that -// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. -template -struct iterator_traits -{ -}; - -template -struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> - : iterator_types -{ -}; - -template -struct iterator_traits::value>> -{ - using iterator_category = std::random_access_iterator_tag; - using value_type = T; - using difference_type = ptrdiff_t; - using pointer = T*; - using reference = T&; -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - -// #include - - -#include - -// #include - - -// https://en.cppreference.com/w/cpp/experimental/is_detected -namespace nlohmann -{ -namespace detail -{ -struct nonesuch -{ - nonesuch() = delete; - ~nonesuch() = delete; - nonesuch(nonesuch const&) = delete; - nonesuch(nonesuch const&&) = delete; - void operator=(nonesuch const&) = delete; - void operator=(nonesuch&&) = delete; -}; - -template class Op, - class... Args> -struct detector -{ - using value_t = std::false_type; - using type = Default; -}; - -template class Op, class... Args> -struct detector>, Op, Args...> -{ - using value_t = std::true_type; - using type = Op; -}; - -template class Op, class... Args> -using is_detected = typename detector::value_t; - -template class Op, class... Args> -using detected_t = typename detector::type; - -template class Op, class... Args> -using detected_or = detector; - -template class Op, class... Args> -using detected_or_t = typename detected_or::type; - -template class Op, class... Args> -using is_detected_exact = std::is_same>; - -template class Op, class... Args> -using is_detected_convertible = - std::is_convertible, To>; -} // namespace detail -} // namespace nlohmann - -// #include -#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ -#define INCLUDE_NLOHMANN_JSON_FWD_HPP_ - -#include // int64_t, uint64_t -#include // map -#include // allocator -#include // string -#include // vector - -/*! -@brief namespace for Niels Lohmann -@see https://github.com/nlohmann -@since version 1.0.0 -*/ -namespace nlohmann -{ -/*! -@brief default JSONSerializer template argument - -This serializer ignores the template arguments and uses ADL -([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) -for serialization. -*/ -template -struct adl_serializer; - -template class ObjectType = - std::map, - template class ArrayType = std::vector, - class StringType = std::string, class BooleanType = bool, - class NumberIntegerType = std::int64_t, - class NumberUnsignedType = std::uint64_t, - class NumberFloatType = double, - template class AllocatorType = std::allocator, - template class JSONSerializer = - adl_serializer, - class BinaryType = std::vector> -class basic_json; - -/*! -@brief JSON Pointer - -A JSON pointer defines a string syntax for identifying a specific value -within a JSON document. It can be used with functions `at` and -`operator[]`. Furthermore, JSON pointers are the base for JSON patches. - -@sa [RFC 6901](https://tools.ietf.org/html/rfc6901) - -@since version 2.0.0 -*/ -template -class json_pointer; - -/*! -@brief default JSON class - -This type is the default specialization of the @ref basic_json class which -uses the standard template types. - -@since version 1.0.0 -*/ -using json = basic_json<>; - -template -struct ordered_map; - -/*! -@brief ordered JSON class - -This type preserves the insertion order of object keys. - -@since version 3.9.0 -*/ -using ordered_json = basic_json; - -} // namespace nlohmann - -#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ - - -namespace nlohmann -{ -/*! -@brief detail namespace with internal helper functions - -This namespace collects functions that should not be exposed, -implementations of some @ref basic_json methods, and meta-programming helpers. - -@since version 2.1.0 -*/ -namespace detail -{ -///////////// -// helpers // -///////////// - -// Note to maintainers: -// -// Every trait in this file expects a non CV-qualified type. -// The only exceptions are in the 'aliases for detected' section -// (i.e. those of the form: decltype(T::member_function(std::declval()))) -// -// In this case, T has to be properly CV-qualified to constraint the function arguments -// (e.g. to_json(BasicJsonType&, const T&)) - -template struct is_basic_json : std::false_type {}; - -NLOHMANN_BASIC_JSON_TPL_DECLARATION -struct is_basic_json : std::true_type {}; - -////////////////////// -// json_ref helpers // -////////////////////// - -template -class json_ref; - -template -struct is_json_ref : std::false_type {}; - -template -struct is_json_ref> : std::true_type {}; - -////////////////////////// -// aliases for detected // -////////////////////////// - -template -using mapped_type_t = typename T::mapped_type; - -template -using key_type_t = typename T::key_type; - -template -using value_type_t = typename T::value_type; - -template -using difference_type_t = typename T::difference_type; - -template -using pointer_t = typename T::pointer; - -template -using reference_t = typename T::reference; - -template -using iterator_category_t = typename T::iterator_category; - -template -using iterator_t = typename T::iterator; - -template -using to_json_function = decltype(T::to_json(std::declval()...)); - -template -using from_json_function = decltype(T::from_json(std::declval()...)); - -template -using get_template_function = decltype(std::declval().template get()); - -// trait checking if JSONSerializer::from_json(json const&, udt&) exists -template -struct has_from_json : std::false_type {}; - -// trait checking if j.get is valid -// use this trait instead of std::is_constructible or std::is_convertible, -// both rely on, or make use of implicit conversions, and thus fail when T -// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) -template -struct is_getable -{ - static constexpr bool value = is_detected::value; -}; - -template -struct has_from_json < BasicJsonType, T, - enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - -// This trait checks if JSONSerializer::from_json(json const&) exists -// this overload is used for non-default-constructible user-defined-types -template -struct has_non_default_from_json : std::false_type {}; - -template -struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - -// This trait checks if BasicJsonType::json_serializer::to_json exists -// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. -template -struct has_to_json : std::false_type {}; - -template -struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - - -/////////////////// -// is_ functions // -/////////////////// - -template -struct is_iterator_traits : std::false_type {}; - -template -struct is_iterator_traits> -{ - private: - using traits = iterator_traits; - - public: - static constexpr auto value = - is_detected::value && - is_detected::value && - is_detected::value && - is_detected::value && - is_detected::value; -}; - -// source: https://stackoverflow.com/a/37193089/4116453 - -template -struct is_complete_type : std::false_type {}; - -template -struct is_complete_type : std::true_type {}; - -template -struct is_compatible_object_type_impl : std::false_type {}; - -template -struct is_compatible_object_type_impl < - BasicJsonType, CompatibleObjectType, - enable_if_t < is_detected::value&& - is_detected::value >> -{ - - using object_t = typename BasicJsonType::object_t; - - // macOS's is_constructible does not play well with nonesuch... - static constexpr bool value = - std::is_constructible::value && - std::is_constructible::value; -}; - -template -struct is_compatible_object_type - : is_compatible_object_type_impl {}; - -template -struct is_constructible_object_type_impl : std::false_type {}; - -template -struct is_constructible_object_type_impl < - BasicJsonType, ConstructibleObjectType, - enable_if_t < is_detected::value&& - is_detected::value >> -{ - using object_t = typename BasicJsonType::object_t; - - static constexpr bool value = - (std::is_default_constructible::value && - (std::is_move_assignable::value || - std::is_copy_assignable::value) && - (std::is_constructible::value && - std::is_same < - typename object_t::mapped_type, - typename ConstructibleObjectType::mapped_type >::value)) || - (has_from_json::value || - has_non_default_from_json < - BasicJsonType, - typename ConstructibleObjectType::mapped_type >::value); -}; - -template -struct is_constructible_object_type - : is_constructible_object_type_impl {}; - -template -struct is_compatible_string_type_impl : std::false_type {}; - -template -struct is_compatible_string_type_impl < - BasicJsonType, CompatibleStringType, - enable_if_t::value >> -{ - static constexpr auto value = - std::is_constructible::value; -}; - -template -struct is_compatible_string_type - : is_compatible_string_type_impl {}; - -template -struct is_constructible_string_type_impl : std::false_type {}; - -template -struct is_constructible_string_type_impl < - BasicJsonType, ConstructibleStringType, - enable_if_t::value >> -{ - static constexpr auto value = - std::is_constructible::value; -}; - -template -struct is_constructible_string_type - : is_constructible_string_type_impl {}; - -template -struct is_compatible_array_type_impl : std::false_type {}; - -template -struct is_compatible_array_type_impl < - BasicJsonType, CompatibleArrayType, - enable_if_t < is_detected::value&& - is_detected::value&& -// This is needed because json_reverse_iterator has a ::iterator type... -// Therefore it is detected as a CompatibleArrayType. -// The real fix would be to have an Iterable concept. - !is_iterator_traits < - iterator_traits>::value >> -{ - static constexpr bool value = - std::is_constructible::value; -}; - -template -struct is_compatible_array_type - : is_compatible_array_type_impl {}; - -template -struct is_constructible_array_type_impl : std::false_type {}; - -template -struct is_constructible_array_type_impl < - BasicJsonType, ConstructibleArrayType, - enable_if_t::value >> - : std::true_type {}; - -template -struct is_constructible_array_type_impl < - BasicJsonType, ConstructibleArrayType, - enable_if_t < !std::is_same::value&& - std::is_default_constructible::value&& -(std::is_move_assignable::value || - std::is_copy_assignable::value)&& -is_detected::value&& -is_detected::value&& -is_complete_type < -detected_t>::value >> -{ - static constexpr bool value = - // This is needed because json_reverse_iterator has a ::iterator type, - // furthermore, std::back_insert_iterator (and other iterators) have a - // base class `iterator`... Therefore it is detected as a - // ConstructibleArrayType. The real fix would be to have an Iterable - // concept. - !is_iterator_traits>::value && - - (std::is_same::value || - has_from_json::value || - has_non_default_from_json < - BasicJsonType, typename ConstructibleArrayType::value_type >::value); -}; - -template -struct is_constructible_array_type - : is_constructible_array_type_impl {}; - -template -struct is_compatible_integer_type_impl : std::false_type {}; - -template -struct is_compatible_integer_type_impl < - RealIntegerType, CompatibleNumberIntegerType, - enable_if_t < std::is_integral::value&& - std::is_integral::value&& - !std::is_same::value >> -{ - // is there an assert somewhere on overflows? - using RealLimits = std::numeric_limits; - using CompatibleLimits = std::numeric_limits; - - static constexpr auto value = - std::is_constructible::value && - CompatibleLimits::is_integer && - RealLimits::is_signed == CompatibleLimits::is_signed; -}; - -template -struct is_compatible_integer_type - : is_compatible_integer_type_impl {}; - -template -struct is_compatible_type_impl: std::false_type {}; - -template -struct is_compatible_type_impl < - BasicJsonType, CompatibleType, - enable_if_t::value >> -{ - static constexpr bool value = - has_to_json::value; -}; - -template -struct is_compatible_type - : is_compatible_type_impl {}; - -// https://en.cppreference.com/w/cpp/types/conjunction -template struct conjunction : std::true_type { }; -template struct conjunction : B1 { }; -template -struct conjunction -: std::conditional, B1>::type {}; - -template -struct is_constructible_tuple : std::false_type {}; - -template -struct is_constructible_tuple> : conjunction...> {}; -} // namespace detail -} // namespace nlohmann - -// #include - - -#include // array -#include // size_t -#include // uint8_t -#include // string - -namespace nlohmann -{ -namespace detail -{ -/////////////////////////// -// JSON type enumeration // -/////////////////////////// - -/*! -@brief the JSON type enumeration - -This enumeration collects the different JSON types. It is internally used to -distinguish the stored values, and the functions @ref basic_json::is_null(), -@ref basic_json::is_object(), @ref basic_json::is_array(), -@ref basic_json::is_string(), @ref basic_json::is_boolean(), -@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), -@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), -@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and -@ref basic_json::is_structured() rely on it. - -@note There are three enumeration entries (number_integer, number_unsigned, and -number_float), because the library distinguishes these three types for numbers: -@ref basic_json::number_unsigned_t is used for unsigned integers, -@ref basic_json::number_integer_t is used for signed integers, and -@ref basic_json::number_float_t is used for floating-point numbers or to -approximate integers which do not fit in the limits of their respective type. - -@sa @ref basic_json::basic_json(const value_t value_type) -- create a JSON -value with the default value for a given type - -@since version 1.0.0 -*/ -enum class value_t : std::uint8_t -{ - null, ///< null value - object, ///< object (unordered set of name/value pairs) - array, ///< array (ordered collection of values) - string, ///< string value - boolean, ///< boolean value - number_integer, ///< number value (signed integer) - number_unsigned, ///< number value (unsigned integer) - number_float, ///< number value (floating-point) - binary, ///< binary array (ordered collection of bytes) - discarded ///< discarded by the parser callback function -}; - -/*! -@brief comparison operator for JSON types - -Returns an ordering that is similar to Python: -- order: null < boolean < number < object < array < string < binary -- furthermore, each type is not smaller than itself -- discarded values are not comparable -- binary is represented as a b"" string in python and directly comparable to a - string; however, making a binary array directly comparable with a string would - be surprising behavior in a JSON file. - -@since version 1.0.0 -*/ -inline bool operator<(const value_t lhs, const value_t rhs) noexcept -{ - static constexpr std::array order = {{ - 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, - 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, - 6 /* binary */ - } - }; - - const auto l_index = static_cast(lhs); - const auto r_index = static_cast(rhs); - return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; -} -} // namespace detail -} // namespace nlohmann - - -namespace nlohmann -{ -namespace detail -{ -template -void from_json(const BasicJsonType& j, typename std::nullptr_t& n) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_null())) - { - JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name()))); - } - n = nullptr; -} - -// overloads for basic_json template parameters -template < typename BasicJsonType, typename ArithmeticType, - enable_if_t < std::is_arithmetic::value&& - !std::is_same::value, - int > = 0 > -void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) -{ - switch (static_cast(j)) - { - case value_t::number_unsigned: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::number_integer: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::number_float: - { - val = static_cast(*j.template get_ptr()); - break; - } - - default: - JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()))); - } -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) - { - JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(j.type_name()))); - } - b = *j.template get_ptr(); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_string())) - { - JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()))); - } - s = *j.template get_ptr(); -} - -template < - typename BasicJsonType, typename ConstructibleStringType, - enable_if_t < - is_constructible_string_type::value&& - !std::is_same::value, - int > = 0 > -void from_json(const BasicJsonType& j, ConstructibleStringType& s) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_string())) - { - JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()))); - } - - s = *j.template get_ptr(); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) -{ - get_arithmetic_value(j, val); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) -{ - get_arithmetic_value(j, val); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) -{ - get_arithmetic_value(j, val); -} - -template::value, int> = 0> -void from_json(const BasicJsonType& j, EnumType& e) -{ - typename std::underlying_type::type val; - get_arithmetic_value(j, val); - e = static_cast(val); -} - -// forward_list doesn't have an insert method -template::value, int> = 0> -void from_json(const BasicJsonType& j, std::forward_list& l) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); - } - l.clear(); - std::transform(j.rbegin(), j.rend(), - std::front_inserter(l), [](const BasicJsonType & i) - { - return i.template get(); - }); -} - -// valarray doesn't have an insert method -template::value, int> = 0> -void from_json(const BasicJsonType& j, std::valarray& l) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); - } - l.resize(j.size()); - std::transform(j.begin(), j.end(), std::begin(l), - [](const BasicJsonType & elem) - { - return elem.template get(); - }); -} - -template -auto from_json(const BasicJsonType& j, T (&arr)[N]) --> decltype(j.template get(), void()) -{ - for (std::size_t i = 0; i < N; ++i) - { - arr[i] = j.at(i).template get(); - } -} - -template -void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) -{ - arr = *j.template get_ptr(); -} - -template -auto from_json_array_impl(const BasicJsonType& j, std::array& arr, - priority_tag<2> /*unused*/) --> decltype(j.template get(), void()) -{ - for (std::size_t i = 0; i < N; ++i) - { - arr[i] = j.at(i).template get(); - } -} - -template -auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) --> decltype( - arr.reserve(std::declval()), - j.template get(), - void()) -{ - using std::end; - - ConstructibleArrayType ret; - ret.reserve(j.size()); - std::transform(j.begin(), j.end(), - std::inserter(ret, end(ret)), [](const BasicJsonType & i) - { - // get() returns *this, this won't call a from_json - // method when value_type is BasicJsonType - return i.template get(); - }); - arr = std::move(ret); -} - -template -void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, - priority_tag<0> /*unused*/) -{ - using std::end; - - ConstructibleArrayType ret; - std::transform( - j.begin(), j.end(), std::inserter(ret, end(ret)), - [](const BasicJsonType & i) - { - // get() returns *this, this won't call a from_json - // method when value_type is BasicJsonType - return i.template get(); - }); - arr = std::move(ret); -} - -template < typename BasicJsonType, typename ConstructibleArrayType, - enable_if_t < - is_constructible_array_type::value&& - !is_constructible_object_type::value&& - !is_constructible_string_type::value&& - !std::is_same::value&& - !is_basic_json::value, - int > = 0 > -auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) --> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), -j.template get(), -void()) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + - std::string(j.type_name()))); - } - - from_json_array_impl(j, arr, priority_tag<3> {}); -} - -template -void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) - { - JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(j.type_name()))); - } - - bin = *j.template get_ptr(); -} - -template::value, int> = 0> -void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_object())) - { - JSON_THROW(type_error::create(302, "type must be object, but is " + std::string(j.type_name()))); - } - - ConstructibleObjectType ret; - auto inner_object = j.template get_ptr(); - using value_type = typename ConstructibleObjectType::value_type; - std::transform( - inner_object->begin(), inner_object->end(), - std::inserter(ret, ret.begin()), - [](typename BasicJsonType::object_t::value_type const & p) - { - return value_type(p.first, p.second.template get()); - }); - obj = std::move(ret); -} - -// overload for arithmetic types, not chosen for basic_json template arguments -// (BooleanType, etc..); note: Is it really necessary to provide explicit -// overloads for boolean_t etc. in case of a custom BooleanType which is not -// an arithmetic type? -template < typename BasicJsonType, typename ArithmeticType, - enable_if_t < - std::is_arithmetic::value&& - !std::is_same::value&& - !std::is_same::value&& - !std::is_same::value&& - !std::is_same::value, - int > = 0 > -void from_json(const BasicJsonType& j, ArithmeticType& val) -{ - switch (static_cast(j)) - { - case value_t::number_unsigned: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::number_integer: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::number_float: - { - val = static_cast(*j.template get_ptr()); - break; - } - case value_t::boolean: - { - val = static_cast(*j.template get_ptr()); - break; - } - - default: - JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()))); - } -} - -template -void from_json(const BasicJsonType& j, std::pair& p) -{ - p = {j.at(0).template get(), j.at(1).template get()}; -} - -template -void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_sequence /*unused*/) -{ - t = std::make_tuple(j.at(Idx).template get::type>()...); -} - -template -void from_json(const BasicJsonType& j, std::tuple& t) -{ - from_json_tuple_impl(j, t, index_sequence_for {}); -} - -template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, - typename = enable_if_t < !std::is_constructible < - typename BasicJsonType::string_t, Key >::value >> -void from_json(const BasicJsonType& j, std::map& m) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); - } - m.clear(); - for (const auto& p : j) - { - if (JSON_HEDLEY_UNLIKELY(!p.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()))); - } - m.emplace(p.at(0).template get(), p.at(1).template get()); - } -} - -template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, - typename = enable_if_t < !std::is_constructible < - typename BasicJsonType::string_t, Key >::value >> -void from_json(const BasicJsonType& j, std::unordered_map& m) -{ - if (JSON_HEDLEY_UNLIKELY(!j.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); - } - m.clear(); - for (const auto& p : j) - { - if (JSON_HEDLEY_UNLIKELY(!p.is_array())) - { - JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()))); - } - m.emplace(p.at(0).template get(), p.at(1).template get()); - } -} - -struct from_json_fn -{ - template - auto operator()(const BasicJsonType& j, T& val) const - noexcept(noexcept(from_json(j, val))) - -> decltype(from_json(j, val), void()) - { - return from_json(j, val); - } -}; -} // namespace detail - -/// namespace to hold default `from_json` function -/// to see why this is required: -/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html -namespace -{ -constexpr const auto& from_json = detail::static_const::value; -} // namespace -} // namespace nlohmann - -// #include - - -#include // copy -#include // begin, end -#include // string -#include // tuple, get -#include // is_same, is_constructible, is_floating_point, is_enum, underlying_type -#include // move, forward, declval, pair -#include // valarray -#include // vector - -// #include - - -#include // size_t -#include // input_iterator_tag -#include // string, to_string -#include // tuple_size, get, tuple_element - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -template -void int_to_string( string_type& target, std::size_t value ) -{ - // For ADL - using std::to_string; - target = to_string(value); -} -template class iteration_proxy_value -{ - public: - using difference_type = std::ptrdiff_t; - using value_type = iteration_proxy_value; - using pointer = value_type * ; - using reference = value_type & ; - using iterator_category = std::input_iterator_tag; - using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; - - private: - /// the iterator - IteratorType anchor; - /// an index for arrays (used to create key names) - std::size_t array_index = 0; - /// last stringified array index - mutable std::size_t array_index_last = 0; - /// a string representation of the array index - mutable string_type array_index_str = "0"; - /// an empty string (to return a reference for primitive values) - const string_type empty_str = ""; - - public: - explicit iteration_proxy_value(IteratorType it) noexcept : anchor(it) {} - - /// dereference operator (needed for range-based for) - iteration_proxy_value& operator*() - { - return *this; - } - - /// increment operator (needed for range-based for) - iteration_proxy_value& operator++() - { - ++anchor; - ++array_index; - - return *this; - } - - /// equality operator (needed for InputIterator) - bool operator==(const iteration_proxy_value& o) const - { - return anchor == o.anchor; - } - - /// inequality operator (needed for range-based for) - bool operator!=(const iteration_proxy_value& o) const - { - return anchor != o.anchor; - } - - /// return key of the iterator - const string_type& key() const - { - JSON_ASSERT(anchor.m_object != nullptr); - - switch (anchor.m_object->type()) - { - // use integer array index as key - case value_t::array: - { - if (array_index != array_index_last) - { - int_to_string( array_index_str, array_index ); - array_index_last = array_index; - } - return array_index_str; - } - - // use key from the object - case value_t::object: - return anchor.key(); - - // use an empty key for all primitive types - default: - return empty_str; - } - } - - /// return value of the iterator - typename IteratorType::reference value() const - { - return anchor.value(); - } -}; - -/// proxy class for the items() function -template class iteration_proxy -{ - private: - /// the container to iterate - typename IteratorType::reference container; - - public: - /// construct iteration proxy from a container - explicit iteration_proxy(typename IteratorType::reference cont) noexcept - : container(cont) {} - - /// return iterator begin (needed for range-based for) - iteration_proxy_value begin() noexcept - { - return iteration_proxy_value(container.begin()); - } - - /// return iterator end (needed for range-based for) - iteration_proxy_value end() noexcept - { - return iteration_proxy_value(container.end()); - } -}; -// Structured Bindings Support -// For further reference see https://blog.tartanllama.xyz/structured-bindings/ -// And see https://github.com/nlohmann/json/pull/1391 -template = 0> -auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) -{ - return i.key(); -} -// Structured Bindings Support -// For further reference see https://blog.tartanllama.xyz/structured-bindings/ -// And see https://github.com/nlohmann/json/pull/1391 -template = 0> -auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) -{ - return i.value(); -} -} // namespace detail -} // namespace nlohmann - -// The Addition to the STD Namespace is required to add -// Structured Bindings Support to the iteration_proxy_value class -// For further reference see https://blog.tartanllama.xyz/structured-bindings/ -// And see https://github.com/nlohmann/json/pull/1391 -namespace std -{ -#if defined(__clang__) - // Fix: https://github.com/nlohmann/json/issues/1401 - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmismatched-tags" -#endif -template -class tuple_size<::nlohmann::detail::iteration_proxy_value> - : public std::integral_constant {}; - -template -class tuple_element> -{ - public: - using type = decltype( - get(std::declval < - ::nlohmann::detail::iteration_proxy_value> ())); -}; -#if defined(__clang__) - #pragma clang diagnostic pop -#endif -} // namespace std - -// #include - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -////////////////// -// constructors // -////////////////// - -template struct external_constructor; - -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept - { - j.m_type = value_t::boolean; - j.m_value = b; - j.assert_invariant(); - } -}; - -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) - { - j.m_type = value_t::string; - j.m_value = s; - j.assert_invariant(); - } - - template - static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) - { - j.m_type = value_t::string; - j.m_value = std::move(s); - j.assert_invariant(); - } - - template < typename BasicJsonType, typename CompatibleStringType, - enable_if_t < !std::is_same::value, - int > = 0 > - static void construct(BasicJsonType& j, const CompatibleStringType& str) - { - j.m_type = value_t::string; - j.m_value.string = j.template create(str); - j.assert_invariant(); - } -}; - -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) - { - j.m_type = value_t::binary; - typename BasicJsonType::binary_t value{b}; - j.m_value = value; - j.assert_invariant(); - } - - template - static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) - { - j.m_type = value_t::binary; - typename BasicJsonType::binary_t value{std::move(b)}; - j.m_value = value; - j.assert_invariant(); - } -}; - -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept - { - j.m_type = value_t::number_float; - j.m_value = val; - j.assert_invariant(); - } -}; - -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept - { - j.m_type = value_t::number_unsigned; - j.m_value = val; - j.assert_invariant(); - } -}; - -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept - { - j.m_type = value_t::number_integer; - j.m_value = val; - j.assert_invariant(); - } -}; - -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) - { - j.m_type = value_t::array; - j.m_value = arr; - j.assert_invariant(); - } - - template - static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) - { - j.m_type = value_t::array; - j.m_value = std::move(arr); - j.assert_invariant(); - } - - template < typename BasicJsonType, typename CompatibleArrayType, - enable_if_t < !std::is_same::value, - int > = 0 > - static void construct(BasicJsonType& j, const CompatibleArrayType& arr) - { - using std::begin; - using std::end; - j.m_type = value_t::array; - j.m_value.array = j.template create(begin(arr), end(arr)); - j.assert_invariant(); - } - - template - static void construct(BasicJsonType& j, const std::vector& arr) - { - j.m_type = value_t::array; - j.m_value = value_t::array; - j.m_value.array->reserve(arr.size()); - for (const bool x : arr) - { - j.m_value.array->push_back(x); - } - j.assert_invariant(); - } - - template::value, int> = 0> - static void construct(BasicJsonType& j, const std::valarray& arr) - { - j.m_type = value_t::array; - j.m_value = value_t::array; - j.m_value.array->resize(arr.size()); - if (arr.size() > 0) - { - std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); - } - j.assert_invariant(); - } -}; - -template<> -struct external_constructor -{ - template - static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) - { - j.m_type = value_t::object; - j.m_value = obj; - j.assert_invariant(); - } - - template - static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) - { - j.m_type = value_t::object; - j.m_value = std::move(obj); - j.assert_invariant(); - } - - template < typename BasicJsonType, typename CompatibleObjectType, - enable_if_t < !std::is_same::value, int > = 0 > - static void construct(BasicJsonType& j, const CompatibleObjectType& obj) - { - using std::begin; - using std::end; - - j.m_type = value_t::object; - j.m_value.object = j.template create(begin(obj), end(obj)); - j.assert_invariant(); - } -}; - -///////////// -// to_json // -///////////// - -template::value, int> = 0> -void to_json(BasicJsonType& j, T b) noexcept -{ - external_constructor::construct(j, b); -} - -template::value, int> = 0> -void to_json(BasicJsonType& j, const CompatibleString& s) -{ - external_constructor::construct(j, s); -} - -template -void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) -{ - external_constructor::construct(j, std::move(s)); -} - -template::value, int> = 0> -void to_json(BasicJsonType& j, FloatType val) noexcept -{ - external_constructor::construct(j, static_cast(val)); -} - -template::value, int> = 0> -void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept -{ - external_constructor::construct(j, static_cast(val)); -} - -template::value, int> = 0> -void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept -{ - external_constructor::construct(j, static_cast(val)); -} - -template::value, int> = 0> -void to_json(BasicJsonType& j, EnumType e) noexcept -{ - using underlying_type = typename std::underlying_type::type; - external_constructor::construct(j, static_cast(e)); -} - -template -void to_json(BasicJsonType& j, const std::vector& e) -{ - external_constructor::construct(j, e); -} - -template < typename BasicJsonType, typename CompatibleArrayType, - enable_if_t < is_compatible_array_type::value&& - !is_compatible_object_type::value&& - !is_compatible_string_type::value&& - !std::is_same::value&& - !is_basic_json::value, - int > = 0 > -void to_json(BasicJsonType& j, const CompatibleArrayType& arr) -{ - external_constructor::construct(j, arr); -} - -template -void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) -{ - external_constructor::construct(j, bin); -} - -template::value, int> = 0> -void to_json(BasicJsonType& j, const std::valarray& arr) -{ - external_constructor::construct(j, std::move(arr)); -} - -template -void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) -{ - external_constructor::construct(j, std::move(arr)); -} - -template < typename BasicJsonType, typename CompatibleObjectType, - enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > -void to_json(BasicJsonType& j, const CompatibleObjectType& obj) -{ - external_constructor::construct(j, obj); -} - -template -void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) -{ - external_constructor::construct(j, std::move(obj)); -} - -template < - typename BasicJsonType, typename T, std::size_t N, - enable_if_t < !std::is_constructible::value, - int > = 0 > -void to_json(BasicJsonType& j, const T(&arr)[N]) -{ - external_constructor::construct(j, arr); -} - -template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > -void to_json(BasicJsonType& j, const std::pair& p) -{ - j = { p.first, p.second }; -} - -// for https://github.com/nlohmann/json/pull/1134 -template>::value, int> = 0> -void to_json(BasicJsonType& j, const T& b) -{ - j = { {b.key(), b.value()} }; -} - -template -void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) -{ - j = { std::get(t)... }; -} - -template::value, int > = 0> -void to_json(BasicJsonType& j, const T& t) -{ - to_json_tuple_impl(j, t, make_index_sequence::value> {}); -} - -struct to_json_fn -{ - template - auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) - -> decltype(to_json(j, std::forward(val)), void()) - { - return to_json(j, std::forward(val)); - } -}; -} // namespace detail - -/// namespace to hold default `to_json` function -namespace -{ -constexpr const auto& to_json = detail::static_const::value; -} // namespace -} // namespace nlohmann - - -namespace nlohmann -{ - -template -struct adl_serializer -{ - /*! - @brief convert a JSON value to any value type - - This function is usually called by the `get()` function of the - @ref basic_json class (either explicit or via conversion operators). - - @param[in] j JSON value to read from - @param[in,out] val value to write to - */ - template - static auto from_json(BasicJsonType&& j, ValueType& val) noexcept( - noexcept(::nlohmann::from_json(std::forward(j), val))) - -> decltype(::nlohmann::from_json(std::forward(j), val), void()) - { - ::nlohmann::from_json(std::forward(j), val); - } - - /*! - @brief convert any value type to a JSON value - - This function is usually called by the constructors of the @ref basic_json - class. - - @param[in,out] j JSON value to write to - @param[in] val value to read from - */ - template - static auto to_json(BasicJsonType& j, ValueType&& val) noexcept( - noexcept(::nlohmann::to_json(j, std::forward(val)))) - -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) - { - ::nlohmann::to_json(j, std::forward(val)); - } -}; - -} // namespace nlohmann - -// #include - - -#include // uint8_t -#include // tie -#include // move - -namespace nlohmann -{ - -/*! -@brief an internal type for a backed binary type - -This type extends the template parameter @a BinaryType provided to `basic_json` -with a subtype used by BSON and MessagePack. This type exists so that the user -does not have to specify a type themselves with a specific naming scheme in -order to override the binary type. - -@tparam BinaryType container to store bytes (`std::vector` by - default) - -@since version 3.8.0 -*/ -template -class byte_container_with_subtype : public BinaryType -{ - public: - /// the type of the underlying container - using container_type = BinaryType; - - byte_container_with_subtype() noexcept(noexcept(container_type())) - : container_type() - {} - - byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) - : container_type(b) - {} - - byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) - : container_type(std::move(b)) - {} - - byte_container_with_subtype(const container_type& b, std::uint8_t subtype) noexcept(noexcept(container_type(b))) - : container_type(b) - , m_subtype(subtype) - , m_has_subtype(true) - {} - - byte_container_with_subtype(container_type&& b, std::uint8_t subtype) noexcept(noexcept(container_type(std::move(b)))) - : container_type(std::move(b)) - , m_subtype(subtype) - , m_has_subtype(true) - {} - - bool operator==(const byte_container_with_subtype& rhs) const - { - return std::tie(static_cast(*this), m_subtype, m_has_subtype) == - std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); - } - - bool operator!=(const byte_container_with_subtype& rhs) const - { - return !(rhs == *this); - } - - /*! - @brief sets the binary subtype - - Sets the binary subtype of the value, also flags a binary JSON value as - having a subtype, which has implications for serialization. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @sa @ref subtype() -- return the binary subtype - @sa @ref clear_subtype() -- clears the binary subtype - @sa @ref has_subtype() -- returns whether or not the binary value has a - subtype - - @since version 3.8.0 - */ - void set_subtype(std::uint8_t subtype) noexcept - { - m_subtype = subtype; - m_has_subtype = true; - } - - /*! - @brief return the binary subtype - - Returns the numerical subtype of the value if it has a subtype. If it does - not have a subtype, this function will return size_t(-1) as a sentinel - value. - - @return the numerical subtype of the binary value - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @sa @ref set_subtype() -- sets the binary subtype - @sa @ref clear_subtype() -- clears the binary subtype - @sa @ref has_subtype() -- returns whether or not the binary value has a - subtype - - @since version 3.8.0 - */ - constexpr std::uint8_t subtype() const noexcept - { - return m_subtype; - } - - /*! - @brief return whether the value has a subtype - - @return whether the value has a subtype - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @sa @ref subtype() -- return the binary subtype - @sa @ref set_subtype() -- sets the binary subtype - @sa @ref clear_subtype() -- clears the binary subtype - - @since version 3.8.0 - */ - constexpr bool has_subtype() const noexcept - { - return m_has_subtype; - } - - /*! - @brief clears the binary subtype - - Clears the binary subtype and flags the value as not having a subtype, which - has implications for serialization; for instance MessagePack will prefer the - bin family over the ext family. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @sa @ref subtype() -- return the binary subtype - @sa @ref set_subtype() -- sets the binary subtype - @sa @ref has_subtype() -- returns whether or not the binary value has a - subtype - - @since version 3.8.0 - */ - void clear_subtype() noexcept - { - m_subtype = 0; - m_has_subtype = false; - } - - private: - std::uint8_t m_subtype = 0; - bool m_has_subtype = false; -}; - -} // namespace nlohmann - -// #include - -// #include - -// #include - -// #include - - -#include // size_t, uint8_t -#include // hash - -namespace nlohmann -{ -namespace detail -{ - -// boost::hash_combine -inline std::size_t combine(std::size_t seed, std::size_t h) noexcept -{ - seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); - return seed; -} - -/*! -@brief hash a JSON value - -The hash function tries to rely on std::hash where possible. Furthermore, the -type of the JSON value is taken into account to have different hash values for -null, 0, 0U, and false, etc. - -@tparam BasicJsonType basic_json specialization -@param j JSON value to hash -@return hash value of j -*/ -template -std::size_t hash(const BasicJsonType& j) -{ - using string_t = typename BasicJsonType::string_t; - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - - const auto type = static_cast(j.type()); - switch (j.type()) - { - case BasicJsonType::value_t::null: - case BasicJsonType::value_t::discarded: - { - return combine(type, 0); - } - - case BasicJsonType::value_t::object: - { - auto seed = combine(type, j.size()); - for (const auto& element : j.items()) - { - const auto h = std::hash {}(element.key()); - seed = combine(seed, h); - seed = combine(seed, hash(element.value())); - } - return seed; - } - - case BasicJsonType::value_t::array: - { - auto seed = combine(type, j.size()); - for (const auto& element : j) - { - seed = combine(seed, hash(element)); - } - return seed; - } - - case BasicJsonType::value_t::string: - { - const auto h = std::hash {}(j.template get_ref()); - return combine(type, h); - } - - case BasicJsonType::value_t::boolean: - { - const auto h = std::hash {}(j.template get()); - return combine(type, h); - } - - case BasicJsonType::value_t::number_integer: - { - const auto h = std::hash {}(j.template get()); - return combine(type, h); - } - - case nlohmann::detail::value_t::number_unsigned: - { - const auto h = std::hash {}(j.template get()); - return combine(type, h); - } - - case nlohmann::detail::value_t::number_float: - { - const auto h = std::hash {}(j.template get()); - return combine(type, h); - } - - case nlohmann::detail::value_t::binary: - { - auto seed = combine(type, j.get_binary().size()); - const auto h = std::hash {}(j.get_binary().has_subtype()); - seed = combine(seed, h); - seed = combine(seed, j.get_binary().subtype()); - for (const auto byte : j.get_binary()) - { - seed = combine(seed, std::hash {}(byte)); - } - return seed; - } - - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } -} - -} // namespace detail -} // namespace nlohmann - -// #include - - -#include // generate_n -#include // array -#include // ldexp -#include // size_t -#include // uint8_t, uint16_t, uint32_t, uint64_t -#include // snprintf -#include // memcpy -#include // back_inserter -#include // numeric_limits -#include // char_traits, string -#include // make_pair, move - -// #include - -// #include - - -#include // array -#include // size_t -#include //FILE * -#include // strlen -#include // istream -#include // begin, end, iterator_traits, random_access_iterator_tag, distance, next -#include // shared_ptr, make_shared, addressof -#include // accumulate -#include // string, char_traits -#include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer -#include // pair, declval - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -/// the supported input formats -enum class input_format_t { json, cbor, msgpack, ubjson, bson }; - -//////////////////// -// input adapters // -//////////////////// - -/*! -Input adapter for stdio file access. This adapter read only 1 byte and do not use any - buffer. This adapter is a very low level adapter. -*/ -class file_input_adapter -{ - public: - using char_type = char; - - JSON_HEDLEY_NON_NULL(2) - explicit file_input_adapter(std::FILE* f) noexcept - : m_file(f) - {} - - // make class move-only - file_input_adapter(const file_input_adapter&) = delete; - file_input_adapter(file_input_adapter&&) = default; - file_input_adapter& operator=(const file_input_adapter&) = delete; - file_input_adapter& operator=(file_input_adapter&&) = delete; - - std::char_traits::int_type get_character() noexcept - { - return std::fgetc(m_file); - } - - private: - /// the file pointer to read from - std::FILE* m_file; -}; - - -/*! -Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at -beginning of input. Does not support changing the underlying std::streambuf -in mid-input. Maintains underlying std::istream and std::streambuf to support -subsequent use of standard std::istream operations to process any input -characters following those used in parsing the JSON input. Clears the -std::istream flags; any input errors (e.g., EOF) will be detected by the first -subsequent call for input from the std::istream. -*/ -class input_stream_adapter -{ - public: - using char_type = char; - - ~input_stream_adapter() - { - // clear stream flags; we use underlying streambuf I/O, do not - // maintain ifstream flags, except eof - if (is != nullptr) - { - is->clear(is->rdstate() & std::ios::eofbit); - } - } - - explicit input_stream_adapter(std::istream& i) - : is(&i), sb(i.rdbuf()) - {} - - // delete because of pointer members - input_stream_adapter(const input_stream_adapter&) = delete; - input_stream_adapter& operator=(input_stream_adapter&) = delete; - input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete; - - input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs.is), sb(rhs.sb) - { - rhs.is = nullptr; - rhs.sb = nullptr; - } - - // std::istream/std::streambuf use std::char_traits::to_int_type, to - // ensure that std::char_traits::eof() and the character 0xFF do not - // end up as the same value, eg. 0xFFFFFFFF. - std::char_traits::int_type get_character() - { - auto res = sb->sbumpc(); - // set eof manually, as we don't use the istream interface. - if (JSON_HEDLEY_UNLIKELY(res == EOF)) - { - is->clear(is->rdstate() | std::ios::eofbit); - } - return res; - } - - private: - /// the associated input stream - std::istream* is = nullptr; - std::streambuf* sb = nullptr; -}; - -// General-purpose iterator-based adapter. It might not be as fast as -// theoretically possible for some containers, but it is extremely versatile. -template -class iterator_input_adapter -{ - public: - using char_type = typename std::iterator_traits::value_type; - - iterator_input_adapter(IteratorType first, IteratorType last) - : current(std::move(first)), end(std::move(last)) {} - - typename std::char_traits::int_type get_character() - { - if (JSON_HEDLEY_LIKELY(current != end)) - { - auto result = std::char_traits::to_int_type(*current); - std::advance(current, 1); - return result; - } - else - { - return std::char_traits::eof(); - } - } - - private: - IteratorType current; - IteratorType end; - - template - friend struct wide_string_input_helper; - - bool empty() const - { - return current == end; - } - -}; - - -template -struct wide_string_input_helper; - -template -struct wide_string_input_helper -{ - // UTF-32 - static void fill_buffer(BaseInputAdapter& input, - std::array::int_type, 4>& utf8_bytes, - size_t& utf8_bytes_index, - size_t& utf8_bytes_filled) - { - utf8_bytes_index = 0; - - if (JSON_HEDLEY_UNLIKELY(input.empty())) - { - utf8_bytes[0] = std::char_traits::eof(); - utf8_bytes_filled = 1; - } - else - { - // get the current character - const auto wc = input.get_character(); - - // UTF-32 to UTF-8 encoding - if (wc < 0x80) - { - utf8_bytes[0] = static_cast::int_type>(wc); - utf8_bytes_filled = 1; - } - else if (wc <= 0x7FF) - { - utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); - utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 2; - } - else if (wc <= 0xFFFF) - { - utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 3; - } - else if (wc <= 0x10FFFF) - { - utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); - utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 4; - } - else - { - // unknown character - utf8_bytes[0] = static_cast::int_type>(wc); - utf8_bytes_filled = 1; - } - } - } -}; - -template -struct wide_string_input_helper -{ - // UTF-16 - static void fill_buffer(BaseInputAdapter& input, - std::array::int_type, 4>& utf8_bytes, - size_t& utf8_bytes_index, - size_t& utf8_bytes_filled) - { - utf8_bytes_index = 0; - - if (JSON_HEDLEY_UNLIKELY(input.empty())) - { - utf8_bytes[0] = std::char_traits::eof(); - utf8_bytes_filled = 1; - } - else - { - // get the current character - const auto wc = input.get_character(); - - // UTF-16 to UTF-8 encoding - if (wc < 0x80) - { - utf8_bytes[0] = static_cast::int_type>(wc); - utf8_bytes_filled = 1; - } - else if (wc <= 0x7FF) - { - utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); - utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 2; - } - else if (0xD800 > wc || wc >= 0xE000) - { - utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); - utf8_bytes_filled = 3; - } - else - { - if (JSON_HEDLEY_UNLIKELY(!input.empty())) - { - const auto wc2 = static_cast(input.get_character()); - const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); - utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); - utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); - utf8_bytes_filled = 4; - } - else - { - utf8_bytes[0] = static_cast::int_type>(wc); - utf8_bytes_filled = 1; - } - } - } - } -}; - -// Wraps another input apdater to convert wide character types into individual bytes. -template -class wide_string_input_adapter -{ - public: - using char_type = char; - - wide_string_input_adapter(BaseInputAdapter base) - : base_adapter(base) {} - - typename std::char_traits::int_type get_character() noexcept - { - // check if buffer needs to be filled - if (utf8_bytes_index == utf8_bytes_filled) - { - fill_buffer(); - - JSON_ASSERT(utf8_bytes_filled > 0); - JSON_ASSERT(utf8_bytes_index == 0); - } - - // use buffer - JSON_ASSERT(utf8_bytes_filled > 0); - JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); - return utf8_bytes[utf8_bytes_index++]; - } - - private: - BaseInputAdapter base_adapter; - - template - void fill_buffer() - { - wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); - } - - /// a buffer for UTF-8 bytes - std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; - - /// index to the utf8_codes array for the next valid byte - std::size_t utf8_bytes_index = 0; - /// number of valid bytes in the utf8_codes array - std::size_t utf8_bytes_filled = 0; -}; - - -template -struct iterator_input_adapter_factory -{ - using iterator_type = IteratorType; - using char_type = typename std::iterator_traits::value_type; - using adapter_type = iterator_input_adapter; - - static adapter_type create(IteratorType first, IteratorType last) - { - return adapter_type(std::move(first), std::move(last)); - } -}; - -template -struct is_iterator_of_multibyte -{ - using value_type = typename std::iterator_traits::value_type; - enum - { - value = sizeof(value_type) > 1 - }; -}; - -template -struct iterator_input_adapter_factory::value>> -{ - using iterator_type = IteratorType; - using char_type = typename std::iterator_traits::value_type; - using base_adapter_type = iterator_input_adapter; - using adapter_type = wide_string_input_adapter; - - static adapter_type create(IteratorType first, IteratorType last) - { - return adapter_type(base_adapter_type(std::move(first), std::move(last))); - } -}; - -// General purpose iterator-based input -template -typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) -{ - using factory_type = iterator_input_adapter_factory; - return factory_type::create(first, last); -} - -// Convenience shorthand from container to iterator -template -auto input_adapter(const ContainerType& container) -> decltype(input_adapter(begin(container), end(container))) -{ - // Enable ADL - using std::begin; - using std::end; - - return input_adapter(begin(container), end(container)); -} - -// Special cases with fast paths -inline file_input_adapter input_adapter(std::FILE* file) -{ - return file_input_adapter(file); -} - -inline input_stream_adapter input_adapter(std::istream& stream) -{ - return input_stream_adapter(stream); -} - -inline input_stream_adapter input_adapter(std::istream&& stream) -{ - return input_stream_adapter(stream); -} - -using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); - -// Null-delimited strings, and the like. -template < typename CharT, - typename std::enable_if < - std::is_pointer::value&& - !std::is_array::value&& - std::is_integral::type>::value&& - sizeof(typename std::remove_pointer::type) == 1, - int >::type = 0 > -contiguous_bytes_input_adapter input_adapter(CharT b) -{ - auto length = std::strlen(reinterpret_cast(b)); - const auto* ptr = reinterpret_cast(b); - return input_adapter(ptr, ptr + length); -} - -template -auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) -{ - return input_adapter(array, array + N); -} - -// This class only handles inputs of input_buffer_adapter type. -// It's required so that expressions like {ptr, len} can be implicitely casted -// to the correct adapter. -class span_input_adapter -{ - public: - template < typename CharT, - typename std::enable_if < - std::is_pointer::value&& - std::is_integral::type>::value&& - sizeof(typename std::remove_pointer::type) == 1, - int >::type = 0 > - span_input_adapter(CharT b, std::size_t l) - : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} - - template::iterator_category, std::random_access_iterator_tag>::value, - int>::type = 0> - span_input_adapter(IteratorType first, IteratorType last) - : ia(input_adapter(first, last)) {} - - contiguous_bytes_input_adapter&& get() - { - return std::move(ia); - } - - private: - contiguous_bytes_input_adapter ia; -}; -} // namespace detail -} // namespace nlohmann - -// #include - - -#include -#include // string -#include // move -#include // vector - -// #include - -// #include - - -namespace nlohmann -{ - -/*! -@brief SAX interface - -This class describes the SAX interface used by @ref nlohmann::json::sax_parse. -Each function is called in different situations while the input is parsed. The -boolean return value informs the parser whether to continue processing the -input. -*/ -template -struct json_sax -{ - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - - /*! - @brief a null value was read - @return whether parsing should proceed - */ - virtual bool null() = 0; - - /*! - @brief a boolean value was read - @param[in] val boolean value - @return whether parsing should proceed - */ - virtual bool boolean(bool val) = 0; - - /*! - @brief an integer number was read - @param[in] val integer value - @return whether parsing should proceed - */ - virtual bool number_integer(number_integer_t val) = 0; - - /*! - @brief an unsigned integer number was read - @param[in] val unsigned integer value - @return whether parsing should proceed - */ - virtual bool number_unsigned(number_unsigned_t val) = 0; - - /*! - @brief an floating-point number was read - @param[in] val floating-point value - @param[in] s raw token value - @return whether parsing should proceed - */ - virtual bool number_float(number_float_t val, const string_t& s) = 0; - - /*! - @brief a string was read - @param[in] val string value - @return whether parsing should proceed - @note It is safe to move the passed string. - */ - virtual bool string(string_t& val) = 0; - - /*! - @brief a binary string was read - @param[in] val binary value - @return whether parsing should proceed - @note It is safe to move the passed binary. - */ - virtual bool binary(binary_t& val) = 0; - - /*! - @brief the beginning of an object was read - @param[in] elements number of object elements or -1 if unknown - @return whether parsing should proceed - @note binary formats may report the number of elements - */ - virtual bool start_object(std::size_t elements) = 0; - - /*! - @brief an object key was read - @param[in] val object key - @return whether parsing should proceed - @note It is safe to move the passed string. - */ - virtual bool key(string_t& val) = 0; - - /*! - @brief the end of an object was read - @return whether parsing should proceed - */ - virtual bool end_object() = 0; - - /*! - @brief the beginning of an array was read - @param[in] elements number of array elements or -1 if unknown - @return whether parsing should proceed - @note binary formats may report the number of elements - */ - virtual bool start_array(std::size_t elements) = 0; - - /*! - @brief the end of an array was read - @return whether parsing should proceed - */ - virtual bool end_array() = 0; - - /*! - @brief a parse error occurred - @param[in] position the position in the input where the error occurs - @param[in] last_token the last read token - @param[in] ex an exception object describing the error - @return whether parsing should proceed (must return false) - */ - virtual bool parse_error(std::size_t position, - const std::string& last_token, - const detail::exception& ex) = 0; - - virtual ~json_sax() = default; -}; - - -namespace detail -{ -/*! -@brief SAX implementation to create a JSON value from SAX events - -This class implements the @ref json_sax interface and processes the SAX events -to create a JSON value which makes it basically a DOM parser. The structure or -hierarchy of the JSON value is managed by the stack `ref_stack` which contains -a pointer to the respective array or object for each recursion depth. - -After successful parsing, the value that is passed by reference to the -constructor contains the parsed value. - -@tparam BasicJsonType the JSON type -*/ -template -class json_sax_dom_parser -{ - public: - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - - /*! - @param[in, out] r reference to a JSON value that is manipulated while - parsing - @param[in] allow_exceptions_ whether parse errors yield exceptions - */ - explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) - : root(r), allow_exceptions(allow_exceptions_) - {} - - // make class move-only - json_sax_dom_parser(const json_sax_dom_parser&) = delete; - json_sax_dom_parser(json_sax_dom_parser&&) = default; - json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; - json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; - ~json_sax_dom_parser() = default; - - bool null() - { - handle_value(nullptr); - return true; - } - - bool boolean(bool val) - { - handle_value(val); - return true; - } - - bool number_integer(number_integer_t val) - { - handle_value(val); - return true; - } - - bool number_unsigned(number_unsigned_t val) - { - handle_value(val); - return true; - } - - bool number_float(number_float_t val, const string_t& /*unused*/) - { - handle_value(val); - return true; - } - - bool string(string_t& val) - { - handle_value(val); - return true; - } - - bool binary(binary_t& val) - { - handle_value(std::move(val)); - return true; - } - - bool start_object(std::size_t len) - { - ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); - - if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) - { - JSON_THROW(out_of_range::create(408, - "excessive object size: " + std::to_string(len))); - } - - return true; - } - - bool key(string_t& val) - { - // add null at given key and store the reference for later - object_element = &(ref_stack.back()->m_value.object->operator[](val)); - return true; - } - - bool end_object() - { - ref_stack.pop_back(); - return true; - } - - bool start_array(std::size_t len) - { - ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); - - if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) - { - JSON_THROW(out_of_range::create(408, - "excessive array size: " + std::to_string(len))); - } - - return true; - } - - bool end_array() - { - ref_stack.pop_back(); - return true; - } - - template - bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, - const Exception& ex) - { - errored = true; - static_cast(ex); - if (allow_exceptions) - { - JSON_THROW(ex); - } - return false; - } - - constexpr bool is_errored() const - { - return errored; - } - - private: - /*! - @invariant If the ref stack is empty, then the passed value will be the new - root. - @invariant If the ref stack contains a value, then it is an array or an - object to which we can add elements - */ - template - JSON_HEDLEY_RETURNS_NON_NULL - BasicJsonType* handle_value(Value&& v) - { - if (ref_stack.empty()) - { - root = BasicJsonType(std::forward(v)); - return &root; - } - - JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); - - if (ref_stack.back()->is_array()) - { - ref_stack.back()->m_value.array->emplace_back(std::forward(v)); - return &(ref_stack.back()->m_value.array->back()); - } - - JSON_ASSERT(ref_stack.back()->is_object()); - JSON_ASSERT(object_element); - *object_element = BasicJsonType(std::forward(v)); - return object_element; - } - - /// the parsed JSON value - BasicJsonType& root; - /// stack to model hierarchy of values - std::vector ref_stack {}; - /// helper to hold the reference for the next object element - BasicJsonType* object_element = nullptr; - /// whether a syntax error occurred - bool errored = false; - /// whether to throw exceptions in case of errors - const bool allow_exceptions = true; -}; - -template -class json_sax_dom_callback_parser -{ - public: - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - using parser_callback_t = typename BasicJsonType::parser_callback_t; - using parse_event_t = typename BasicJsonType::parse_event_t; - - json_sax_dom_callback_parser(BasicJsonType& r, - const parser_callback_t cb, - const bool allow_exceptions_ = true) - : root(r), callback(cb), allow_exceptions(allow_exceptions_) - { - keep_stack.push_back(true); - } - - // make class move-only - json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; - json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; - json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; - json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; - ~json_sax_dom_callback_parser() = default; - - bool null() - { - handle_value(nullptr); - return true; - } - - bool boolean(bool val) - { - handle_value(val); - return true; - } - - bool number_integer(number_integer_t val) - { - handle_value(val); - return true; - } - - bool number_unsigned(number_unsigned_t val) - { - handle_value(val); - return true; - } - - bool number_float(number_float_t val, const string_t& /*unused*/) - { - handle_value(val); - return true; - } - - bool string(string_t& val) - { - handle_value(val); - return true; - } - - bool binary(binary_t& val) - { - handle_value(std::move(val)); - return true; - } - - bool start_object(std::size_t len) - { - // check callback for object start - const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); - keep_stack.push_back(keep); - - auto val = handle_value(BasicJsonType::value_t::object, true); - ref_stack.push_back(val.second); - - // check object limit - if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) - { - JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len))); - } - - return true; - } - - bool key(string_t& val) - { - BasicJsonType k = BasicJsonType(val); - - // check callback for key - const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); - key_keep_stack.push_back(keep); - - // add discarded value at given key and store the reference for later - if (keep && ref_stack.back()) - { - object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded); - } - - return true; - } - - bool end_object() - { - if (ref_stack.back() && !callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) - { - // discard object - *ref_stack.back() = discarded; - } - - JSON_ASSERT(!ref_stack.empty()); - JSON_ASSERT(!keep_stack.empty()); - ref_stack.pop_back(); - keep_stack.pop_back(); - - if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) - { - // remove discarded value - for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) - { - if (it->is_discarded()) - { - ref_stack.back()->erase(it); - break; - } - } - } - - return true; - } - - bool start_array(std::size_t len) - { - const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); - keep_stack.push_back(keep); - - auto val = handle_value(BasicJsonType::value_t::array, true); - ref_stack.push_back(val.second); - - // check array limit - if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) - { - JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len))); - } - - return true; - } - - bool end_array() - { - bool keep = true; - - if (ref_stack.back()) - { - keep = callback(static_cast(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); - if (!keep) - { - // discard array - *ref_stack.back() = discarded; - } - } - - JSON_ASSERT(!ref_stack.empty()); - JSON_ASSERT(!keep_stack.empty()); - ref_stack.pop_back(); - keep_stack.pop_back(); - - // remove discarded value - if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) - { - ref_stack.back()->m_value.array->pop_back(); - } - - return true; - } - - template - bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, - const Exception& ex) - { - errored = true; - static_cast(ex); - if (allow_exceptions) - { - JSON_THROW(ex); - } - return false; - } - - constexpr bool is_errored() const - { - return errored; - } - - private: - /*! - @param[in] v value to add to the JSON value we build during parsing - @param[in] skip_callback whether we should skip calling the callback - function; this is required after start_array() and - start_object() SAX events, because otherwise we would call the - callback function with an empty array or object, respectively. - - @invariant If the ref stack is empty, then the passed value will be the new - root. - @invariant If the ref stack contains a value, then it is an array or an - object to which we can add elements - - @return pair of boolean (whether value should be kept) and pointer (to the - passed value in the ref_stack hierarchy; nullptr if not kept) - */ - template - std::pair handle_value(Value&& v, const bool skip_callback = false) - { - JSON_ASSERT(!keep_stack.empty()); - - // do not handle this value if we know it would be added to a discarded - // container - if (!keep_stack.back()) - { - return {false, nullptr}; - } - - // create value - auto value = BasicJsonType(std::forward(v)); - - // check callback - const bool keep = skip_callback || callback(static_cast(ref_stack.size()), parse_event_t::value, value); - - // do not handle this value if we just learnt it shall be discarded - if (!keep) - { - return {false, nullptr}; - } - - if (ref_stack.empty()) - { - root = std::move(value); - return {true, &root}; - } - - // skip this value if we already decided to skip the parent - // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) - if (!ref_stack.back()) - { - return {false, nullptr}; - } - - // we now only expect arrays and objects - JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); - - // array - if (ref_stack.back()->is_array()) - { - ref_stack.back()->m_value.array->push_back(std::move(value)); - return {true, &(ref_stack.back()->m_value.array->back())}; - } - - // object - JSON_ASSERT(ref_stack.back()->is_object()); - // check if we should store an element for the current key - JSON_ASSERT(!key_keep_stack.empty()); - const bool store_element = key_keep_stack.back(); - key_keep_stack.pop_back(); - - if (!store_element) - { - return {false, nullptr}; - } - - JSON_ASSERT(object_element); - *object_element = std::move(value); - return {true, object_element}; - } - - /// the parsed JSON value - BasicJsonType& root; - /// stack to model hierarchy of values - std::vector ref_stack {}; - /// stack to manage which values to keep - std::vector keep_stack {}; - /// stack to manage which object keys to keep - std::vector key_keep_stack {}; - /// helper to hold the reference for the next object element - BasicJsonType* object_element = nullptr; - /// whether a syntax error occurred - bool errored = false; - /// callback function - const parser_callback_t callback = nullptr; - /// whether to throw exceptions in case of errors - const bool allow_exceptions = true; - /// a discarded value for the callback - BasicJsonType discarded = BasicJsonType::value_t::discarded; -}; - -template -class json_sax_acceptor -{ - public: - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - - bool null() - { - return true; - } - - bool boolean(bool /*unused*/) - { - return true; - } - - bool number_integer(number_integer_t /*unused*/) - { - return true; - } - - bool number_unsigned(number_unsigned_t /*unused*/) - { - return true; - } - - bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) - { - return true; - } - - bool string(string_t& /*unused*/) - { - return true; - } - - bool binary(binary_t& /*unused*/) - { - return true; - } - - bool start_object(std::size_t /*unused*/ = std::size_t(-1)) - { - return true; - } - - bool key(string_t& /*unused*/) - { - return true; - } - - bool end_object() - { - return true; - } - - bool start_array(std::size_t /*unused*/ = std::size_t(-1)) - { - return true; - } - - bool end_array() - { - return true; - } - - bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) - { - return false; - } -}; -} // namespace detail - -} // namespace nlohmann - -// #include - - -#include // array -#include // localeconv -#include // size_t -#include // snprintf -#include // strtof, strtod, strtold, strtoll, strtoull -#include // initializer_list -#include // char_traits, string -#include // move -#include // vector - -// #include - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -/////////// -// lexer // -/////////// - -template -class lexer_base -{ - public: - /// token types for the parser - enum class token_type - { - uninitialized, ///< indicating the scanner is uninitialized - literal_true, ///< the `true` literal - literal_false, ///< the `false` literal - literal_null, ///< the `null` literal - value_string, ///< a string -- use get_string() for actual value - value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value - value_integer, ///< a signed integer -- use get_number_integer() for actual value - value_float, ///< an floating point number -- use get_number_float() for actual value - begin_array, ///< the character for array begin `[` - begin_object, ///< the character for object begin `{` - end_array, ///< the character for array end `]` - end_object, ///< the character for object end `}` - name_separator, ///< the name separator `:` - value_separator, ///< the value separator `,` - parse_error, ///< indicating a parse error - end_of_input, ///< indicating the end of the input buffer - literal_or_value ///< a literal or the begin of a value (only for diagnostics) - }; - - /// return name of values of type token_type (only used for errors) - JSON_HEDLEY_RETURNS_NON_NULL - JSON_HEDLEY_CONST - static const char* token_type_name(const token_type t) noexcept - { - switch (t) - { - case token_type::uninitialized: - return ""; - case token_type::literal_true: - return "true literal"; - case token_type::literal_false: - return "false literal"; - case token_type::literal_null: - return "null literal"; - case token_type::value_string: - return "string literal"; - case token_type::value_unsigned: - case token_type::value_integer: - case token_type::value_float: - return "number literal"; - case token_type::begin_array: - return "'['"; - case token_type::begin_object: - return "'{'"; - case token_type::end_array: - return "']'"; - case token_type::end_object: - return "'}'"; - case token_type::name_separator: - return "':'"; - case token_type::value_separator: - return "','"; - case token_type::parse_error: - return ""; - case token_type::end_of_input: - return "end of input"; - case token_type::literal_or_value: - return "'[', '{', or a literal"; - // LCOV_EXCL_START - default: // catch non-enum values - return "unknown token"; - // LCOV_EXCL_STOP - } - } -}; -/*! -@brief lexical analysis - -This class organizes the lexical analysis during JSON deserialization. -*/ -template -class lexer : public lexer_base -{ - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using char_type = typename InputAdapterType::char_type; - using char_int_type = typename std::char_traits::int_type; - - public: - using token_type = typename lexer_base::token_type; - - explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) - : ia(std::move(adapter)) - , ignore_comments(ignore_comments_) - , decimal_point_char(static_cast(get_decimal_point())) - {} - - // delete because of pointer members - lexer(const lexer&) = delete; - lexer(lexer&&) = default; - lexer& operator=(lexer&) = delete; - lexer& operator=(lexer&&) = default; - ~lexer() = default; - - private: - ///////////////////// - // locales - ///////////////////// - - /// return the locale-dependent decimal point - JSON_HEDLEY_PURE - static char get_decimal_point() noexcept - { - const auto* loc = localeconv(); - JSON_ASSERT(loc != nullptr); - return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); - } - - ///////////////////// - // scan functions - ///////////////////// - - /*! - @brief get codepoint from 4 hex characters following `\u` - - For input "\u c1 c2 c3 c4" the codepoint is: - (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 - = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) - - Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' - must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The - conversion is done by subtracting the offset (0x30, 0x37, and 0x57) - between the ASCII value of the character and the desired integer value. - - @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or - non-hex character) - */ - int get_codepoint() - { - // this function only makes sense after reading `\u` - JSON_ASSERT(current == 'u'); - int codepoint = 0; - - const auto factors = { 12u, 8u, 4u, 0u }; - for (const auto factor : factors) - { - get(); - - if (current >= '0' && current <= '9') - { - codepoint += static_cast((static_cast(current) - 0x30u) << factor); - } - else if (current >= 'A' && current <= 'F') - { - codepoint += static_cast((static_cast(current) - 0x37u) << factor); - } - else if (current >= 'a' && current <= 'f') - { - codepoint += static_cast((static_cast(current) - 0x57u) << factor); - } - else - { - return -1; - } - } - - JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); - return codepoint; - } - - /*! - @brief check if the next byte(s) are inside a given range - - Adds the current byte and, for each passed range, reads a new byte and - checks if it is inside the range. If a violation was detected, set up an - error message and return false. Otherwise, return true. - - @param[in] ranges list of integers; interpreted as list of pairs of - inclusive lower and upper bound, respectively - - @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, - 1, 2, or 3 pairs. This precondition is enforced by an assertion. - - @return true if and only if no range violation was detected - */ - bool next_byte_in_range(std::initializer_list ranges) - { - JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); - add(current); - - for (auto range = ranges.begin(); range != ranges.end(); ++range) - { - get(); - if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) - { - add(current); - } - else - { - error_message = "invalid string: ill-formed UTF-8 byte"; - return false; - } - } - - return true; - } - - /*! - @brief scan a string literal - - This function scans a string according to Sect. 7 of RFC 7159. While - scanning, bytes are escaped and copied into buffer token_buffer. Then the - function returns successfully, token_buffer is *not* null-terminated (as it - may contain \0 bytes), and token_buffer.size() is the number of bytes in the - string. - - @return token_type::value_string if string could be successfully scanned, - token_type::parse_error otherwise - - @note In case of errors, variable error_message contains a textual - description. - */ - token_type scan_string() - { - // reset token_buffer (ignore opening quote) - reset(); - - // we entered the function by reading an open quote - JSON_ASSERT(current == '\"'); - - while (true) - { - // get next character - switch (get()) - { - // end of file while parsing string - case std::char_traits::eof(): - { - error_message = "invalid string: missing closing quote"; - return token_type::parse_error; - } - - // closing quote - case '\"': - { - return token_type::value_string; - } - - // escapes - case '\\': - { - switch (get()) - { - // quotation mark - case '\"': - add('\"'); - break; - // reverse solidus - case '\\': - add('\\'); - break; - // solidus - case '/': - add('/'); - break; - // backspace - case 'b': - add('\b'); - break; - // form feed - case 'f': - add('\f'); - break; - // line feed - case 'n': - add('\n'); - break; - // carriage return - case 'r': - add('\r'); - break; - // tab - case 't': - add('\t'); - break; - - // unicode escapes - case 'u': - { - const int codepoint1 = get_codepoint(); - int codepoint = codepoint1; // start with codepoint1 - - if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) - { - error_message = "invalid string: '\\u' must be followed by 4 hex digits"; - return token_type::parse_error; - } - - // check if code point is a high surrogate - if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) - { - // expect next \uxxxx entry - if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) - { - const int codepoint2 = get_codepoint(); - - if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) - { - error_message = "invalid string: '\\u' must be followed by 4 hex digits"; - return token_type::parse_error; - } - - // check if codepoint2 is a low surrogate - if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) - { - // overwrite codepoint - codepoint = static_cast( - // high surrogate occupies the most significant 22 bits - (static_cast(codepoint1) << 10u) - // low surrogate occupies the least significant 15 bits - + static_cast(codepoint2) - // there is still the 0xD800, 0xDC00 and 0x10000 noise - // in the result so we have to subtract with: - // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 - - 0x35FDC00u); - } - else - { - error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; - return token_type::parse_error; - } - } - else - { - error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; - return token_type::parse_error; - } - } - else - { - if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) - { - error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; - return token_type::parse_error; - } - } - - // result of the above calculation yields a proper codepoint - JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); - - // translate codepoint into bytes - if (codepoint < 0x80) - { - // 1-byte characters: 0xxxxxxx (ASCII) - add(static_cast(codepoint)); - } - else if (codepoint <= 0x7FF) - { - // 2-byte characters: 110xxxxx 10xxxxxx - add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); - add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); - } - else if (codepoint <= 0xFFFF) - { - // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx - add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); - add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); - add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); - } - else - { - // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); - add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); - add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); - add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); - } - - break; - } - - // other characters after escape - default: - error_message = "invalid string: forbidden character after backslash"; - return token_type::parse_error; - } - - break; - } - - // invalid control characters - case 0x00: - { - error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; - return token_type::parse_error; - } - - case 0x01: - { - error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; - return token_type::parse_error; - } - - case 0x02: - { - error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; - return token_type::parse_error; - } - - case 0x03: - { - error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; - return token_type::parse_error; - } - - case 0x04: - { - error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; - return token_type::parse_error; - } - - case 0x05: - { - error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; - return token_type::parse_error; - } - - case 0x06: - { - error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; - return token_type::parse_error; - } - - case 0x07: - { - error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; - return token_type::parse_error; - } - - case 0x08: - { - error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; - return token_type::parse_error; - } - - case 0x09: - { - error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; - return token_type::parse_error; - } - - case 0x0A: - { - error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; - return token_type::parse_error; - } - - case 0x0B: - { - error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; - return token_type::parse_error; - } - - case 0x0C: - { - error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; - return token_type::parse_error; - } - - case 0x0D: - { - error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; - return token_type::parse_error; - } - - case 0x0E: - { - error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; - return token_type::parse_error; - } - - case 0x0F: - { - error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; - return token_type::parse_error; - } - - case 0x10: - { - error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; - return token_type::parse_error; - } - - case 0x11: - { - error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; - return token_type::parse_error; - } - - case 0x12: - { - error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; - return token_type::parse_error; - } - - case 0x13: - { - error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; - return token_type::parse_error; - } - - case 0x14: - { - error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; - return token_type::parse_error; - } - - case 0x15: - { - error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; - return token_type::parse_error; - } - - case 0x16: - { - error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; - return token_type::parse_error; - } - - case 0x17: - { - error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; - return token_type::parse_error; - } - - case 0x18: - { - error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; - return token_type::parse_error; - } - - case 0x19: - { - error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; - return token_type::parse_error; - } - - case 0x1A: - { - error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; - return token_type::parse_error; - } - - case 0x1B: - { - error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; - return token_type::parse_error; - } - - case 0x1C: - { - error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; - return token_type::parse_error; - } - - case 0x1D: - { - error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; - return token_type::parse_error; - } - - case 0x1E: - { - error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; - return token_type::parse_error; - } - - case 0x1F: - { - error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; - return token_type::parse_error; - } - - // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) - case 0x20: - case 0x21: - case 0x23: - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - case 0x29: - case 0x2A: - case 0x2B: - case 0x2C: - case 0x2D: - case 0x2E: - case 0x2F: - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x3A: - case 0x3B: - case 0x3C: - case 0x3D: - case 0x3E: - case 0x3F: - case 0x40: - case 0x41: - case 0x42: - case 0x43: - case 0x44: - case 0x45: - case 0x46: - case 0x47: - case 0x48: - case 0x49: - case 0x4A: - case 0x4B: - case 0x4C: - case 0x4D: - case 0x4E: - case 0x4F: - case 0x50: - case 0x51: - case 0x52: - case 0x53: - case 0x54: - case 0x55: - case 0x56: - case 0x57: - case 0x58: - case 0x59: - case 0x5A: - case 0x5B: - case 0x5D: - case 0x5E: - case 0x5F: - case 0x60: - case 0x61: - case 0x62: - case 0x63: - case 0x64: - case 0x65: - case 0x66: - case 0x67: - case 0x68: - case 0x69: - case 0x6A: - case 0x6B: - case 0x6C: - case 0x6D: - case 0x6E: - case 0x6F: - case 0x70: - case 0x71: - case 0x72: - case 0x73: - case 0x74: - case 0x75: - case 0x76: - case 0x77: - case 0x78: - case 0x79: - case 0x7A: - case 0x7B: - case 0x7C: - case 0x7D: - case 0x7E: - case 0x7F: - { - add(current); - break; - } - - // U+0080..U+07FF: bytes C2..DF 80..BF - case 0xC2: - case 0xC3: - case 0xC4: - case 0xC5: - case 0xC6: - case 0xC7: - case 0xC8: - case 0xC9: - case 0xCA: - case 0xCB: - case 0xCC: - case 0xCD: - case 0xCE: - case 0xCF: - case 0xD0: - case 0xD1: - case 0xD2: - case 0xD3: - case 0xD4: - case 0xD5: - case 0xD6: - case 0xD7: - case 0xD8: - case 0xD9: - case 0xDA: - case 0xDB: - case 0xDC: - case 0xDD: - case 0xDE: - case 0xDF: - { - if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) - { - return token_type::parse_error; - } - break; - } - - // U+0800..U+0FFF: bytes E0 A0..BF 80..BF - case 0xE0: - { - if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) - { - return token_type::parse_error; - } - break; - } - - // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF - // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF - case 0xE1: - case 0xE2: - case 0xE3: - case 0xE4: - case 0xE5: - case 0xE6: - case 0xE7: - case 0xE8: - case 0xE9: - case 0xEA: - case 0xEB: - case 0xEC: - case 0xEE: - case 0xEF: - { - if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) - { - return token_type::parse_error; - } - break; - } - - // U+D000..U+D7FF: bytes ED 80..9F 80..BF - case 0xED: - { - if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) - { - return token_type::parse_error; - } - break; - } - - // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF - case 0xF0: - { - if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) - { - return token_type::parse_error; - } - break; - } - - // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF - case 0xF1: - case 0xF2: - case 0xF3: - { - if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) - { - return token_type::parse_error; - } - break; - } - - // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF - case 0xF4: - { - if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) - { - return token_type::parse_error; - } - break; - } - - // remaining bytes (80..C1 and F5..FF) are ill-formed - default: - { - error_message = "invalid string: ill-formed UTF-8 byte"; - return token_type::parse_error; - } - } - } - } - - /*! - * @brief scan a comment - * @return whether comment could be scanned successfully - */ - bool scan_comment() - { - switch (get()) - { - // single-line comments skip input until a newline or EOF is read - case '/': - { - while (true) - { - switch (get()) - { - case '\n': - case '\r': - case std::char_traits::eof(): - case '\0': - return true; - - default: - break; - } - } - } - - // multi-line comments skip input until */ is read - case '*': - { - while (true) - { - switch (get()) - { - case std::char_traits::eof(): - case '\0': - { - error_message = "invalid comment; missing closing '*/'"; - return false; - } - - case '*': - { - switch (get()) - { - case '/': - return true; - - default: - { - unget(); - continue; - } - } - } - - default: - continue; - } - } - } - - // unexpected character after reading '/' - default: - { - error_message = "invalid comment; expecting '/' or '*' after '/'"; - return false; - } - } - } - - JSON_HEDLEY_NON_NULL(2) - static void strtof(float& f, const char* str, char** endptr) noexcept - { - f = std::strtof(str, endptr); - } - - JSON_HEDLEY_NON_NULL(2) - static void strtof(double& f, const char* str, char** endptr) noexcept - { - f = std::strtod(str, endptr); - } - - JSON_HEDLEY_NON_NULL(2) - static void strtof(long double& f, const char* str, char** endptr) noexcept - { - f = std::strtold(str, endptr); - } - - /*! - @brief scan a number literal - - This function scans a string according to Sect. 6 of RFC 7159. - - The function is realized with a deterministic finite state machine derived - from the grammar described in RFC 7159. Starting in state "init", the - input is read and used to determined the next state. Only state "done" - accepts the number. State "error" is a trap state to model errors. In the - table below, "anything" means any character but the ones listed before. - - state | 0 | 1-9 | e E | + | - | . | anything - ---------|----------|----------|----------|---------|---------|----------|----------- - init | zero | any1 | [error] | [error] | minus | [error] | [error] - minus | zero | any1 | [error] | [error] | [error] | [error] | [error] - zero | done | done | exponent | done | done | decimal1 | done - any1 | any1 | any1 | exponent | done | done | decimal1 | done - decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] - decimal2 | decimal2 | decimal2 | exponent | done | done | done | done - exponent | any2 | any2 | [error] | sign | sign | [error] | [error] - sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] - any2 | any2 | any2 | done | done | done | done | done - - The state machine is realized with one label per state (prefixed with - "scan_number_") and `goto` statements between them. The state machine - contains cycles, but any cycle can be left when EOF is read. Therefore, - the function is guaranteed to terminate. - - During scanning, the read bytes are stored in token_buffer. This string is - then converted to a signed integer, an unsigned integer, or a - floating-point number. - - @return token_type::value_unsigned, token_type::value_integer, or - token_type::value_float if number could be successfully scanned, - token_type::parse_error otherwise - - @note The scanner is independent of the current locale. Internally, the - locale's decimal point is used instead of `.` to work with the - locale-dependent converters. - */ - token_type scan_number() // lgtm [cpp/use-of-goto] - { - // reset token_buffer to store the number's bytes - reset(); - - // the type of the parsed number; initially set to unsigned; will be - // changed if minus sign, decimal point or exponent is read - token_type number_type = token_type::value_unsigned; - - // state (init): we just found out we need to scan a number - switch (current) - { - case '-': - { - add(current); - goto scan_number_minus; - } - - case '0': - { - add(current); - goto scan_number_zero; - } - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - add(current); - goto scan_number_any1; - } - - // all other characters are rejected outside scan_number() - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - -scan_number_minus: - // state: we just parsed a leading minus sign - number_type = token_type::value_integer; - switch (get()) - { - case '0': - { - add(current); - goto scan_number_zero; - } - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - add(current); - goto scan_number_any1; - } - - default: - { - error_message = "invalid number; expected digit after '-'"; - return token_type::parse_error; - } - } - -scan_number_zero: - // state: we just parse a zero (maybe with a leading minus sign) - switch (get()) - { - case '.': - { - add(decimal_point_char); - goto scan_number_decimal1; - } - - case 'e': - case 'E': - { - add(current); - goto scan_number_exponent; - } - - default: - goto scan_number_done; - } - -scan_number_any1: - // state: we just parsed a number 0-9 (maybe with a leading minus sign) - switch (get()) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - add(current); - goto scan_number_any1; - } - - case '.': - { - add(decimal_point_char); - goto scan_number_decimal1; - } - - case 'e': - case 'E': - { - add(current); - goto scan_number_exponent; - } - - default: - goto scan_number_done; - } - -scan_number_decimal1: - // state: we just parsed a decimal point - number_type = token_type::value_float; - switch (get()) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - add(current); - goto scan_number_decimal2; - } - - default: - { - error_message = "invalid number; expected digit after '.'"; - return token_type::parse_error; - } - } - -scan_number_decimal2: - // we just parsed at least one number after a decimal point - switch (get()) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - add(current); - goto scan_number_decimal2; - } - - case 'e': - case 'E': - { - add(current); - goto scan_number_exponent; - } - - default: - goto scan_number_done; - } - -scan_number_exponent: - // we just parsed an exponent - number_type = token_type::value_float; - switch (get()) - { - case '+': - case '-': - { - add(current); - goto scan_number_sign; - } - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - add(current); - goto scan_number_any2; - } - - default: - { - error_message = - "invalid number; expected '+', '-', or digit after exponent"; - return token_type::parse_error; - } - } - -scan_number_sign: - // we just parsed an exponent sign - switch (get()) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - add(current); - goto scan_number_any2; - } - - default: - { - error_message = "invalid number; expected digit after exponent sign"; - return token_type::parse_error; - } - } - -scan_number_any2: - // we just parsed a number after the exponent or exponent sign - switch (get()) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - add(current); - goto scan_number_any2; - } - - default: - goto scan_number_done; - } - -scan_number_done: - // unget the character after the number (we only read it to know that - // we are done scanning a number) - unget(); - - char* endptr = nullptr; - errno = 0; - - // try to parse integers first and fall back to floats - if (number_type == token_type::value_unsigned) - { - const auto x = std::strtoull(token_buffer.data(), &endptr, 10); - - // we checked the number format before - JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); - - if (errno == 0) - { - value_unsigned = static_cast(x); - if (value_unsigned == x) - { - return token_type::value_unsigned; - } - } - } - else if (number_type == token_type::value_integer) - { - const auto x = std::strtoll(token_buffer.data(), &endptr, 10); - - // we checked the number format before - JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); - - if (errno == 0) - { - value_integer = static_cast(x); - if (value_integer == x) - { - return token_type::value_integer; - } - } - } - - // this code is reached if we parse a floating-point number or if an - // integer conversion above failed - strtof(value_float, token_buffer.data(), &endptr); - - // we checked the number format before - JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); - - return token_type::value_float; - } - - /*! - @param[in] literal_text the literal text to expect - @param[in] length the length of the passed literal text - @param[in] return_type the token type to return on success - */ - JSON_HEDLEY_NON_NULL(2) - token_type scan_literal(const char_type* literal_text, const std::size_t length, - token_type return_type) - { - JSON_ASSERT(std::char_traits::to_char_type(current) == literal_text[0]); - for (std::size_t i = 1; i < length; ++i) - { - if (JSON_HEDLEY_UNLIKELY(std::char_traits::to_char_type(get()) != literal_text[i])) - { - error_message = "invalid literal"; - return token_type::parse_error; - } - } - return return_type; - } - - ///////////////////// - // input management - ///////////////////// - - /// reset token_buffer; current character is beginning of token - void reset() noexcept - { - token_buffer.clear(); - token_string.clear(); - token_string.push_back(std::char_traits::to_char_type(current)); - } - - /* - @brief get next character from the input - - This function provides the interface to the used input adapter. It does - not throw in case the input reached EOF, but returns a - `std::char_traits::eof()` in that case. Stores the scanned characters - for use in error messages. - - @return character read from the input - */ - char_int_type get() - { - ++position.chars_read_total; - ++position.chars_read_current_line; - - if (next_unget) - { - // just reset the next_unget variable and work with current - next_unget = false; - } - else - { - current = ia.get_character(); - } - - if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) - { - token_string.push_back(std::char_traits::to_char_type(current)); - } - - if (current == '\n') - { - ++position.lines_read; - position.chars_read_current_line = 0; - } - - return current; - } - - /*! - @brief unget current character (read it again on next get) - - We implement unget by setting variable next_unget to true. The input is not - changed - we just simulate ungetting by modifying chars_read_total, - chars_read_current_line, and token_string. The next call to get() will - behave as if the unget character is read again. - */ - void unget() - { - next_unget = true; - - --position.chars_read_total; - - // in case we "unget" a newline, we have to also decrement the lines_read - if (position.chars_read_current_line == 0) - { - if (position.lines_read > 0) - { - --position.lines_read; - } - } - else - { - --position.chars_read_current_line; - } - - if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) - { - JSON_ASSERT(!token_string.empty()); - token_string.pop_back(); - } - } - - /// add a character to token_buffer - void add(char_int_type c) - { - token_buffer.push_back(static_cast(c)); - } - - public: - ///////////////////// - // value getters - ///////////////////// - - /// return integer value - constexpr number_integer_t get_number_integer() const noexcept - { - return value_integer; - } - - /// return unsigned integer value - constexpr number_unsigned_t get_number_unsigned() const noexcept - { - return value_unsigned; - } - - /// return floating-point value - constexpr number_float_t get_number_float() const noexcept - { - return value_float; - } - - /// return current string value (implicitly resets the token; useful only once) - string_t& get_string() - { - return token_buffer; - } - - ///////////////////// - // diagnostics - ///////////////////// - - /// return position of last read token - constexpr position_t get_position() const noexcept - { - return position; - } - - /// return the last read token (for errors only). Will never contain EOF - /// (an arbitrary value that is not a valid char value, often -1), because - /// 255 may legitimately occur. May contain NUL, which should be escaped. - std::string get_token_string() const - { - // escape control characters - std::string result; - for (const auto c : token_string) - { - if (static_cast(c) <= '\x1F') - { - // escape control characters - std::array cs{{}}; - (std::snprintf)(cs.data(), cs.size(), "", static_cast(c)); - result += cs.data(); - } - else - { - // add character as is - result.push_back(static_cast(c)); - } - } - - return result; - } - - /// return syntax error message - JSON_HEDLEY_RETURNS_NON_NULL - constexpr const char* get_error_message() const noexcept - { - return error_message; - } - - ///////////////////// - // actual scanner - ///////////////////// - - /*! - @brief skip the UTF-8 byte order mark - @return true iff there is no BOM or the correct BOM has been skipped - */ - bool skip_bom() - { - if (get() == 0xEF) - { - // check if we completely parse the BOM - return get() == 0xBB && get() == 0xBF; - } - - // the first character is not the beginning of the BOM; unget it to - // process is later - unget(); - return true; - } - - void skip_whitespace() - { - do - { - get(); - } - while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); - } - - token_type scan() - { - // initially, skip the BOM - if (position.chars_read_total == 0 && !skip_bom()) - { - error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; - return token_type::parse_error; - } - - // read next character and ignore whitespace - skip_whitespace(); - - // ignore comments - while (ignore_comments && current == '/') - { - if (!scan_comment()) - { - return token_type::parse_error; - } - - // skip following whitespace - skip_whitespace(); - } - - switch (current) - { - // structural characters - case '[': - return token_type::begin_array; - case ']': - return token_type::end_array; - case '{': - return token_type::begin_object; - case '}': - return token_type::end_object; - case ':': - return token_type::name_separator; - case ',': - return token_type::value_separator; - - // literals - case 't': - { - std::array true_literal = {{'t', 'r', 'u', 'e'}}; - return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); - } - case 'f': - { - std::array false_literal = {{'f', 'a', 'l', 's', 'e'}}; - return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); - } - case 'n': - { - std::array null_literal = {{'n', 'u', 'l', 'l'}}; - return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); - } - - // string - case '\"': - return scan_string(); - - // number - case '-': - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - return scan_number(); - - // end of input (the null byte is needed when parsing from - // string literals) - case '\0': - case std::char_traits::eof(): - return token_type::end_of_input; - - // error - default: - error_message = "invalid literal"; - return token_type::parse_error; - } - } - - private: - /// input adapter - InputAdapterType ia; - - /// whether comments should be ignored (true) or signaled as errors (false) - const bool ignore_comments = false; - - /// the current character - char_int_type current = std::char_traits::eof(); - - /// whether the next get() call should just return current - bool next_unget = false; - - /// the start position of the current token - position_t position {}; - - /// raw input token string (for error messages) - std::vector token_string {}; - - /// buffer for variable-length tokens (numbers, strings) - string_t token_buffer {}; - - /// a description of occurred lexer errors - const char* error_message = ""; - - // number values - number_integer_t value_integer = 0; - number_unsigned_t value_unsigned = 0; - number_float_t value_float = 0; - - /// the decimal point - const char_int_type decimal_point_char = '.'; -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - - -#include // size_t -#include // declval -#include // string - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -template -using null_function_t = decltype(std::declval().null()); - -template -using boolean_function_t = - decltype(std::declval().boolean(std::declval())); - -template -using number_integer_function_t = - decltype(std::declval().number_integer(std::declval())); - -template -using number_unsigned_function_t = - decltype(std::declval().number_unsigned(std::declval())); - -template -using number_float_function_t = decltype(std::declval().number_float( - std::declval(), std::declval())); - -template -using string_function_t = - decltype(std::declval().string(std::declval())); - -template -using binary_function_t = - decltype(std::declval().binary(std::declval())); - -template -using start_object_function_t = - decltype(std::declval().start_object(std::declval())); - -template -using key_function_t = - decltype(std::declval().key(std::declval())); - -template -using end_object_function_t = decltype(std::declval().end_object()); - -template -using start_array_function_t = - decltype(std::declval().start_array(std::declval())); - -template -using end_array_function_t = decltype(std::declval().end_array()); - -template -using parse_error_function_t = decltype(std::declval().parse_error( - std::declval(), std::declval(), - std::declval())); - -template -struct is_sax -{ - private: - static_assert(is_basic_json::value, - "BasicJsonType must be of type basic_json<...>"); - - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - using exception_t = typename BasicJsonType::exception; - - public: - static constexpr bool value = - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value && - is_detected_exact::value; -}; - -template -struct is_sax_static_asserts -{ - private: - static_assert(is_basic_json::value, - "BasicJsonType must be of type basic_json<...>"); - - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - using exception_t = typename BasicJsonType::exception; - - public: - static_assert(is_detected_exact::value, - "Missing/invalid function: bool null()"); - static_assert(is_detected_exact::value, - "Missing/invalid function: bool boolean(bool)"); - static_assert(is_detected_exact::value, - "Missing/invalid function: bool boolean(bool)"); - static_assert( - is_detected_exact::value, - "Missing/invalid function: bool number_integer(number_integer_t)"); - static_assert( - is_detected_exact::value, - "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); - static_assert(is_detected_exact::value, - "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); - static_assert( - is_detected_exact::value, - "Missing/invalid function: bool string(string_t&)"); - static_assert( - is_detected_exact::value, - "Missing/invalid function: bool binary(binary_t&)"); - static_assert(is_detected_exact::value, - "Missing/invalid function: bool start_object(std::size_t)"); - static_assert(is_detected_exact::value, - "Missing/invalid function: bool key(string_t&)"); - static_assert(is_detected_exact::value, - "Missing/invalid function: bool end_object()"); - static_assert(is_detected_exact::value, - "Missing/invalid function: bool start_array(std::size_t)"); - static_assert(is_detected_exact::value, - "Missing/invalid function: bool end_array()"); - static_assert( - is_detected_exact::value, - "Missing/invalid function: bool parse_error(std::size_t, const " - "std::string&, const exception&)"); -}; -} // namespace detail -} // namespace nlohmann - -// #include - - -namespace nlohmann -{ -namespace detail -{ - -/// how to treat CBOR tags -enum class cbor_tag_handler_t -{ - error, ///< throw a parse_error exception in case of a tag - ignore ///< ignore tags -}; - -/*! -@brief determine system byte order - -@return true if and only if system's byte order is little endian - -@note from https://stackoverflow.com/a/1001328/266378 -*/ -static inline bool little_endianess(int num = 1) noexcept -{ - return *reinterpret_cast(&num) == 1; -} - - -/////////////////// -// binary reader // -/////////////////// - -/*! -@brief deserialization of CBOR, MessagePack, and UBJSON values -*/ -template> -class binary_reader -{ - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - using json_sax_t = SAX; - using char_type = typename InputAdapterType::char_type; - using char_int_type = typename std::char_traits::int_type; - - public: - /*! - @brief create a binary reader - - @param[in] adapter input adapter to read from - */ - explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(adapter)) - { - (void)detail::is_sax_static_asserts {}; - } - - // make class move-only - binary_reader(const binary_reader&) = delete; - binary_reader(binary_reader&&) = default; - binary_reader& operator=(const binary_reader&) = delete; - binary_reader& operator=(binary_reader&&) = default; - ~binary_reader() = default; - - /*! - @param[in] format the binary format to parse - @param[in] sax_ a SAX event processor - @param[in] strict whether to expect the input to be consumed completed - @param[in] tag_handler how to treat CBOR tags - - @return - */ - JSON_HEDLEY_NON_NULL(3) - bool sax_parse(const input_format_t format, - json_sax_t* sax_, - const bool strict = true, - const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) - { - sax = sax_; - bool result = false; - - switch (format) - { - case input_format_t::bson: - result = parse_bson_internal(); - break; - - case input_format_t::cbor: - result = parse_cbor_internal(true, tag_handler); - break; - - case input_format_t::msgpack: - result = parse_msgpack_internal(); - break; - - case input_format_t::ubjson: - result = parse_ubjson_internal(); - break; - - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - - // strict mode: next byte must be EOF - if (result && strict) - { - if (format == input_format_t::ubjson) - { - get_ignore_noop(); - } - else - { - get(); - } - - if (JSON_HEDLEY_UNLIKELY(current != std::char_traits::eof())) - { - return sax->parse_error(chars_read, get_token_string(), - parse_error::create(110, chars_read, exception_message(format, "expected end of input; last byte: 0x" + get_token_string(), "value"))); - } - } - - return result; - } - - private: - ////////// - // BSON // - ////////// - - /*! - @brief Reads in a BSON-object and passes it to the SAX-parser. - @return whether a valid BSON-value was passed to the SAX parser - */ - bool parse_bson_internal() - { - std::int32_t document_size{}; - get_number(input_format_t::bson, document_size); - - if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) - { - return false; - } - - if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) - { - return false; - } - - return sax->end_object(); - } - - /*! - @brief Parses a C-style string from the BSON input. - @param[in, out] result A reference to the string variable where the read - string is to be stored. - @return `true` if the \x00-byte indicating the end of the string was - encountered before the EOF; false` indicates an unexpected EOF. - */ - bool get_bson_cstr(string_t& result) - { - auto out = std::back_inserter(result); - while (true) - { - get(); - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) - { - return false; - } - if (current == 0x00) - { - return true; - } - *out++ = static_cast(current); - } - } - - /*! - @brief Parses a zero-terminated string of length @a len from the BSON - input. - @param[in] len The length (including the zero-byte at the end) of the - string to be read. - @param[in, out] result A reference to the string variable where the read - string is to be stored. - @tparam NumberType The type of the length @a len - @pre len >= 1 - @return `true` if the string was successfully parsed - */ - template - bool get_bson_string(const NumberType len, string_t& result) - { - if (JSON_HEDLEY_UNLIKELY(len < 1)) - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "string length must be at least 1, is " + std::to_string(len), "string"))); - } - - return get_string(input_format_t::bson, len - static_cast(1), result) && get() != std::char_traits::eof(); - } - - /*! - @brief Parses a byte array input of length @a len from the BSON input. - @param[in] len The length of the byte array to be read. - @param[in, out] result A reference to the binary variable where the read - array is to be stored. - @tparam NumberType The type of the length @a len - @pre len >= 0 - @return `true` if the byte array was successfully parsed - */ - template - bool get_bson_binary(const NumberType len, binary_t& result) - { - if (JSON_HEDLEY_UNLIKELY(len < 0)) - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "byte array length cannot be negative, is " + std::to_string(len), "binary"))); - } - - // All BSON binary values have a subtype - std::uint8_t subtype{}; - get_number(input_format_t::bson, subtype); - result.set_subtype(subtype); - - return get_binary(input_format_t::bson, len, result); - } - - /*! - @brief Read a BSON document element of the given @a element_type. - @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html - @param[in] element_type_parse_position The position in the input stream, - where the `element_type` was read. - @warning Not all BSON element types are supported yet. An unsupported - @a element_type will give rise to a parse_error.114: - Unsupported BSON record type 0x... - @return whether a valid BSON-object/array was passed to the SAX parser - */ - bool parse_bson_element_internal(const char_int_type element_type, - const std::size_t element_type_parse_position) - { - switch (element_type) - { - case 0x01: // double - { - double number{}; - return get_number(input_format_t::bson, number) && sax->number_float(static_cast(number), ""); - } - - case 0x02: // string - { - std::int32_t len{}; - string_t value; - return get_number(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); - } - - case 0x03: // object - { - return parse_bson_internal(); - } - - case 0x04: // array - { - return parse_bson_array(); - } - - case 0x05: // binary - { - std::int32_t len{}; - binary_t value; - return get_number(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); - } - - case 0x08: // boolean - { - return sax->boolean(get() != 0); - } - - case 0x0A: // null - { - return sax->null(); - } - - case 0x10: // int32 - { - std::int32_t value{}; - return get_number(input_format_t::bson, value) && sax->number_integer(value); - } - - case 0x12: // int64 - { - std::int64_t value{}; - return get_number(input_format_t::bson, value) && sax->number_integer(value); - } - - default: // anything else not supported (yet) - { - std::array cr{{}}; - (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type)); - return sax->parse_error(element_type_parse_position, std::string(cr.data()), parse_error::create(114, element_type_parse_position, "Unsupported BSON record type 0x" + std::string(cr.data()))); - } - } - } - - /*! - @brief Read a BSON element list (as specified in the BSON-spec) - - The same binary layout is used for objects and arrays, hence it must be - indicated with the argument @a is_array which one is expected - (true --> array, false --> object). - - @param[in] is_array Determines if the element list being read is to be - treated as an object (@a is_array == false), or as an - array (@a is_array == true). - @return whether a valid BSON-object/array was passed to the SAX parser - */ - bool parse_bson_element_list(const bool is_array) - { - string_t key; - - while (auto element_type = get()) - { - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) - { - return false; - } - - const std::size_t element_type_parse_position = chars_read; - if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) - { - return false; - } - - if (!is_array && !sax->key(key)) - { - return false; - } - - if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) - { - return false; - } - - // get_bson_cstr only appends - key.clear(); - } - - return true; - } - - /*! - @brief Reads an array from the BSON input and passes it to the SAX-parser. - @return whether a valid BSON-array was passed to the SAX parser - */ - bool parse_bson_array() - { - std::int32_t document_size{}; - get_number(input_format_t::bson, document_size); - - if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) - { - return false; - } - - if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) - { - return false; - } - - return sax->end_array(); - } - - ////////// - // CBOR // - ////////// - - /*! - @param[in] get_char whether a new character should be retrieved from the - input (true) or whether the last read character should - be considered instead (false) - @param[in] tag_handler how CBOR tags should be treated - - @return whether a valid CBOR value was passed to the SAX parser - */ - bool parse_cbor_internal(const bool get_char, - const cbor_tag_handler_t tag_handler) - { - switch (get_char ? get() : current) - { - // EOF - case std::char_traits::eof(): - return unexpect_eof(input_format_t::cbor, "value"); - - // Integer 0x00..0x17 (0..23) - case 0x00: - case 0x01: - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - case 0x07: - case 0x08: - case 0x09: - case 0x0A: - case 0x0B: - case 0x0C: - case 0x0D: - case 0x0E: - case 0x0F: - case 0x10: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: - return sax->number_unsigned(static_cast(current)); - - case 0x18: // Unsigned integer (one-byte uint8_t follows) - { - std::uint8_t number{}; - return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); - } - - case 0x19: // Unsigned integer (two-byte uint16_t follows) - { - std::uint16_t number{}; - return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); - } - - case 0x1A: // Unsigned integer (four-byte uint32_t follows) - { - std::uint32_t number{}; - return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); - } - - case 0x1B: // Unsigned integer (eight-byte uint64_t follows) - { - std::uint64_t number{}; - return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); - } - - // Negative integer -1-0x00..-1-0x17 (-1..-24) - case 0x20: - case 0x21: - case 0x22: - case 0x23: - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - case 0x29: - case 0x2A: - case 0x2B: - case 0x2C: - case 0x2D: - case 0x2E: - case 0x2F: - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - return sax->number_integer(static_cast(0x20 - 1 - current)); - - case 0x38: // Negative integer (one-byte uint8_t follows) - { - std::uint8_t number{}; - return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); - } - - case 0x39: // Negative integer -1-n (two-byte uint16_t follows) - { - std::uint16_t number{}; - return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); - } - - case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) - { - std::uint32_t number{}; - return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); - } - - case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) - { - std::uint64_t number{}; - return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - - static_cast(number)); - } - - // Binary data (0x00..0x17 bytes follow) - case 0x40: - case 0x41: - case 0x42: - case 0x43: - case 0x44: - case 0x45: - case 0x46: - case 0x47: - case 0x48: - case 0x49: - case 0x4A: - case 0x4B: - case 0x4C: - case 0x4D: - case 0x4E: - case 0x4F: - case 0x50: - case 0x51: - case 0x52: - case 0x53: - case 0x54: - case 0x55: - case 0x56: - case 0x57: - case 0x58: // Binary data (one-byte uint8_t for n follows) - case 0x59: // Binary data (two-byte uint16_t for n follow) - case 0x5A: // Binary data (four-byte uint32_t for n follow) - case 0x5B: // Binary data (eight-byte uint64_t for n follow) - case 0x5F: // Binary data (indefinite length) - { - binary_t b; - return get_cbor_binary(b) && sax->binary(b); - } - - // UTF-8 string (0x00..0x17 bytes follow) - case 0x60: - case 0x61: - case 0x62: - case 0x63: - case 0x64: - case 0x65: - case 0x66: - case 0x67: - case 0x68: - case 0x69: - case 0x6A: - case 0x6B: - case 0x6C: - case 0x6D: - case 0x6E: - case 0x6F: - case 0x70: - case 0x71: - case 0x72: - case 0x73: - case 0x74: - case 0x75: - case 0x76: - case 0x77: - case 0x78: // UTF-8 string (one-byte uint8_t for n follows) - case 0x79: // UTF-8 string (two-byte uint16_t for n follow) - case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) - case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) - case 0x7F: // UTF-8 string (indefinite length) - { - string_t s; - return get_cbor_string(s) && sax->string(s); - } - - // array (0x00..0x17 data items follow) - case 0x80: - case 0x81: - case 0x82: - case 0x83: - case 0x84: - case 0x85: - case 0x86: - case 0x87: - case 0x88: - case 0x89: - case 0x8A: - case 0x8B: - case 0x8C: - case 0x8D: - case 0x8E: - case 0x8F: - case 0x90: - case 0x91: - case 0x92: - case 0x93: - case 0x94: - case 0x95: - case 0x96: - case 0x97: - return get_cbor_array(static_cast(static_cast(current) & 0x1Fu), tag_handler); - - case 0x98: // array (one-byte uint8_t for n follows) - { - std::uint8_t len{}; - return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); - } - - case 0x99: // array (two-byte uint16_t for n follow) - { - std::uint16_t len{}; - return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); - } - - case 0x9A: // array (four-byte uint32_t for n follow) - { - std::uint32_t len{}; - return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); - } - - case 0x9B: // array (eight-byte uint64_t for n follow) - { - std::uint64_t len{}; - return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); - } - - case 0x9F: // array (indefinite length) - return get_cbor_array(std::size_t(-1), tag_handler); - - // map (0x00..0x17 pairs of data items follow) - case 0xA0: - case 0xA1: - case 0xA2: - case 0xA3: - case 0xA4: - case 0xA5: - case 0xA6: - case 0xA7: - case 0xA8: - case 0xA9: - case 0xAA: - case 0xAB: - case 0xAC: - case 0xAD: - case 0xAE: - case 0xAF: - case 0xB0: - case 0xB1: - case 0xB2: - case 0xB3: - case 0xB4: - case 0xB5: - case 0xB6: - case 0xB7: - return get_cbor_object(static_cast(static_cast(current) & 0x1Fu), tag_handler); - - case 0xB8: // map (one-byte uint8_t for n follows) - { - std::uint8_t len{}; - return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); - } - - case 0xB9: // map (two-byte uint16_t for n follow) - { - std::uint16_t len{}; - return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); - } - - case 0xBA: // map (four-byte uint32_t for n follow) - { - std::uint32_t len{}; - return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); - } - - case 0xBB: // map (eight-byte uint64_t for n follow) - { - std::uint64_t len{}; - return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); - } - - case 0xBF: // map (indefinite length) - return get_cbor_object(std::size_t(-1), tag_handler); - - case 0xC6: // tagged item - case 0xC7: - case 0xC8: - case 0xC9: - case 0xCA: - case 0xCB: - case 0xCC: - case 0xCD: - case 0xCE: - case 0xCF: - case 0xD0: - case 0xD1: - case 0xD2: - case 0xD3: - case 0xD4: - case 0xD8: // tagged item (1 bytes follow) - case 0xD9: // tagged item (2 bytes follow) - case 0xDA: // tagged item (4 bytes follow) - case 0xDB: // tagged item (8 bytes follow) - { - switch (tag_handler) - { - case cbor_tag_handler_t::error: - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"))); - } - - case cbor_tag_handler_t::ignore: - { - switch (current) - { - case 0xD8: - { - std::uint8_t len{}; - get_number(input_format_t::cbor, len); - break; - } - case 0xD9: - { - std::uint16_t len{}; - get_number(input_format_t::cbor, len); - break; - } - case 0xDA: - { - std::uint32_t len{}; - get_number(input_format_t::cbor, len); - break; - } - case 0xDB: - { - std::uint64_t len{}; - get_number(input_format_t::cbor, len); - break; - } - default: - break; - } - return parse_cbor_internal(true, tag_handler); - } - - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - } - - case 0xF4: // false - return sax->boolean(false); - - case 0xF5: // true - return sax->boolean(true); - - case 0xF6: // null - return sax->null(); - - case 0xF9: // Half-Precision Float (two-byte IEEE 754) - { - const auto byte1_raw = get(); - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) - { - return false; - } - const auto byte2_raw = get(); - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) - { - return false; - } - - const auto byte1 = static_cast(byte1_raw); - const auto byte2 = static_cast(byte2_raw); - - // code from RFC 7049, Appendix D, Figure 3: - // As half-precision floating-point numbers were only added - // to IEEE 754 in 2008, today's programming platforms often - // still only have limited support for them. It is very - // easy to include at least decoding support for them even - // without such support. An example of a small decoder for - // half-precision floating-point numbers in the C language - // is shown in Fig. 3. - const auto half = static_cast((byte1 << 8u) + byte2); - const double val = [&half] - { - const int exp = (half >> 10u) & 0x1Fu; - const unsigned int mant = half & 0x3FFu; - JSON_ASSERT(0 <= exp&& exp <= 32); - JSON_ASSERT(mant <= 1024); - switch (exp) - { - case 0: - return std::ldexp(mant, -24); - case 31: - return (mant == 0) - ? std::numeric_limits::infinity() - : std::numeric_limits::quiet_NaN(); - default: - return std::ldexp(mant + 1024, exp - 25); - } - }(); - return sax->number_float((half & 0x8000u) != 0 - ? static_cast(-val) - : static_cast(val), ""); - } - - case 0xFA: // Single-Precision Float (four-byte IEEE 754) - { - float number{}; - return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); - } - - case 0xFB: // Double-Precision Float (eight-byte IEEE 754) - { - double number{}; - return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); - } - - default: // anything else (0xFF is handled inside the other types) - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"))); - } - } - } - - /*! - @brief reads a CBOR string - - This function first reads starting bytes to determine the expected - string length and then copies this number of bytes into a string. - Additionally, CBOR's strings with indefinite lengths are supported. - - @param[out] result created string - - @return whether string creation completed - */ - bool get_cbor_string(string_t& result) - { - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) - { - return false; - } - - switch (current) - { - // UTF-8 string (0x00..0x17 bytes follow) - case 0x60: - case 0x61: - case 0x62: - case 0x63: - case 0x64: - case 0x65: - case 0x66: - case 0x67: - case 0x68: - case 0x69: - case 0x6A: - case 0x6B: - case 0x6C: - case 0x6D: - case 0x6E: - case 0x6F: - case 0x70: - case 0x71: - case 0x72: - case 0x73: - case 0x74: - case 0x75: - case 0x76: - case 0x77: - { - return get_string(input_format_t::cbor, static_cast(current) & 0x1Fu, result); - } - - case 0x78: // UTF-8 string (one-byte uint8_t for n follows) - { - std::uint8_t len{}; - return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); - } - - case 0x79: // UTF-8 string (two-byte uint16_t for n follow) - { - std::uint16_t len{}; - return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); - } - - case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) - { - std::uint32_t len{}; - return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); - } - - case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) - { - std::uint64_t len{}; - return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); - } - - case 0x7F: // UTF-8 string (indefinite length) - { - while (get() != 0xFF) - { - string_t chunk; - if (!get_cbor_string(chunk)) - { - return false; - } - result.append(chunk); - } - return true; - } - - default: - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x" + last_token, "string"))); - } - } - } - - /*! - @brief reads a CBOR byte array - - This function first reads starting bytes to determine the expected - byte array length and then copies this number of bytes into the byte array. - Additionally, CBOR's byte arrays with indefinite lengths are supported. - - @param[out] result created byte array - - @return whether byte array creation completed - */ - bool get_cbor_binary(binary_t& result) - { - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) - { - return false; - } - - switch (current) - { - // Binary data (0x00..0x17 bytes follow) - case 0x40: - case 0x41: - case 0x42: - case 0x43: - case 0x44: - case 0x45: - case 0x46: - case 0x47: - case 0x48: - case 0x49: - case 0x4A: - case 0x4B: - case 0x4C: - case 0x4D: - case 0x4E: - case 0x4F: - case 0x50: - case 0x51: - case 0x52: - case 0x53: - case 0x54: - case 0x55: - case 0x56: - case 0x57: - { - return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); - } - - case 0x58: // Binary data (one-byte uint8_t for n follows) - { - std::uint8_t len{}; - return get_number(input_format_t::cbor, len) && - get_binary(input_format_t::cbor, len, result); - } - - case 0x59: // Binary data (two-byte uint16_t for n follow) - { - std::uint16_t len{}; - return get_number(input_format_t::cbor, len) && - get_binary(input_format_t::cbor, len, result); - } - - case 0x5A: // Binary data (four-byte uint32_t for n follow) - { - std::uint32_t len{}; - return get_number(input_format_t::cbor, len) && - get_binary(input_format_t::cbor, len, result); - } - - case 0x5B: // Binary data (eight-byte uint64_t for n follow) - { - std::uint64_t len{}; - return get_number(input_format_t::cbor, len) && - get_binary(input_format_t::cbor, len, result); - } - - case 0x5F: // Binary data (indefinite length) - { - while (get() != 0xFF) - { - binary_t chunk; - if (!get_cbor_binary(chunk)) - { - return false; - } - result.insert(result.end(), chunk.begin(), chunk.end()); - } - return true; - } - - default: - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x" + last_token, "binary"))); - } - } - } - - /*! - @param[in] len the length of the array or std::size_t(-1) for an - array of indefinite size - @param[in] tag_handler how CBOR tags should be treated - @return whether array creation completed - */ - bool get_cbor_array(const std::size_t len, - const cbor_tag_handler_t tag_handler) - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) - { - return false; - } - - if (len != std::size_t(-1)) - { - for (std::size_t i = 0; i < len; ++i) - { - if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) - { - return false; - } - } - } - else - { - while (get() != 0xFF) - { - if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) - { - return false; - } - } - } - - return sax->end_array(); - } - - /*! - @param[in] len the length of the object or std::size_t(-1) for an - object of indefinite size - @param[in] tag_handler how CBOR tags should be treated - @return whether object creation completed - */ - bool get_cbor_object(const std::size_t len, - const cbor_tag_handler_t tag_handler) - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) - { - return false; - } - - string_t key; - if (len != std::size_t(-1)) - { - for (std::size_t i = 0; i < len; ++i) - { - get(); - if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) - { - return false; - } - - if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) - { - return false; - } - key.clear(); - } - } - else - { - while (get() != 0xFF) - { - if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) - { - return false; - } - - if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) - { - return false; - } - key.clear(); - } - } - - return sax->end_object(); - } - - ///////////// - // MsgPack // - ///////////// - - /*! - @return whether a valid MessagePack value was passed to the SAX parser - */ - bool parse_msgpack_internal() - { - switch (get()) - { - // EOF - case std::char_traits::eof(): - return unexpect_eof(input_format_t::msgpack, "value"); - - // positive fixint - case 0x00: - case 0x01: - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - case 0x07: - case 0x08: - case 0x09: - case 0x0A: - case 0x0B: - case 0x0C: - case 0x0D: - case 0x0E: - case 0x0F: - case 0x10: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: - case 0x1A: - case 0x1B: - case 0x1C: - case 0x1D: - case 0x1E: - case 0x1F: - case 0x20: - case 0x21: - case 0x22: - case 0x23: - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - case 0x29: - case 0x2A: - case 0x2B: - case 0x2C: - case 0x2D: - case 0x2E: - case 0x2F: - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x3A: - case 0x3B: - case 0x3C: - case 0x3D: - case 0x3E: - case 0x3F: - case 0x40: - case 0x41: - case 0x42: - case 0x43: - case 0x44: - case 0x45: - case 0x46: - case 0x47: - case 0x48: - case 0x49: - case 0x4A: - case 0x4B: - case 0x4C: - case 0x4D: - case 0x4E: - case 0x4F: - case 0x50: - case 0x51: - case 0x52: - case 0x53: - case 0x54: - case 0x55: - case 0x56: - case 0x57: - case 0x58: - case 0x59: - case 0x5A: - case 0x5B: - case 0x5C: - case 0x5D: - case 0x5E: - case 0x5F: - case 0x60: - case 0x61: - case 0x62: - case 0x63: - case 0x64: - case 0x65: - case 0x66: - case 0x67: - case 0x68: - case 0x69: - case 0x6A: - case 0x6B: - case 0x6C: - case 0x6D: - case 0x6E: - case 0x6F: - case 0x70: - case 0x71: - case 0x72: - case 0x73: - case 0x74: - case 0x75: - case 0x76: - case 0x77: - case 0x78: - case 0x79: - case 0x7A: - case 0x7B: - case 0x7C: - case 0x7D: - case 0x7E: - case 0x7F: - return sax->number_unsigned(static_cast(current)); - - // fixmap - case 0x80: - case 0x81: - case 0x82: - case 0x83: - case 0x84: - case 0x85: - case 0x86: - case 0x87: - case 0x88: - case 0x89: - case 0x8A: - case 0x8B: - case 0x8C: - case 0x8D: - case 0x8E: - case 0x8F: - return get_msgpack_object(static_cast(static_cast(current) & 0x0Fu)); - - // fixarray - case 0x90: - case 0x91: - case 0x92: - case 0x93: - case 0x94: - case 0x95: - case 0x96: - case 0x97: - case 0x98: - case 0x99: - case 0x9A: - case 0x9B: - case 0x9C: - case 0x9D: - case 0x9E: - case 0x9F: - return get_msgpack_array(static_cast(static_cast(current) & 0x0Fu)); - - // fixstr - case 0xA0: - case 0xA1: - case 0xA2: - case 0xA3: - case 0xA4: - case 0xA5: - case 0xA6: - case 0xA7: - case 0xA8: - case 0xA9: - case 0xAA: - case 0xAB: - case 0xAC: - case 0xAD: - case 0xAE: - case 0xAF: - case 0xB0: - case 0xB1: - case 0xB2: - case 0xB3: - case 0xB4: - case 0xB5: - case 0xB6: - case 0xB7: - case 0xB8: - case 0xB9: - case 0xBA: - case 0xBB: - case 0xBC: - case 0xBD: - case 0xBE: - case 0xBF: - case 0xD9: // str 8 - case 0xDA: // str 16 - case 0xDB: // str 32 - { - string_t s; - return get_msgpack_string(s) && sax->string(s); - } - - case 0xC0: // nil - return sax->null(); - - case 0xC2: // false - return sax->boolean(false); - - case 0xC3: // true - return sax->boolean(true); - - case 0xC4: // bin 8 - case 0xC5: // bin 16 - case 0xC6: // bin 32 - case 0xC7: // ext 8 - case 0xC8: // ext 16 - case 0xC9: // ext 32 - case 0xD4: // fixext 1 - case 0xD5: // fixext 2 - case 0xD6: // fixext 4 - case 0xD7: // fixext 8 - case 0xD8: // fixext 16 - { - binary_t b; - return get_msgpack_binary(b) && sax->binary(b); - } - - case 0xCA: // float 32 - { - float number{}; - return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); - } - - case 0xCB: // float 64 - { - double number{}; - return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); - } - - case 0xCC: // uint 8 - { - std::uint8_t number{}; - return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); - } - - case 0xCD: // uint 16 - { - std::uint16_t number{}; - return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); - } - - case 0xCE: // uint 32 - { - std::uint32_t number{}; - return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); - } - - case 0xCF: // uint 64 - { - std::uint64_t number{}; - return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); - } - - case 0xD0: // int 8 - { - std::int8_t number{}; - return get_number(input_format_t::msgpack, number) && sax->number_integer(number); - } - - case 0xD1: // int 16 - { - std::int16_t number{}; - return get_number(input_format_t::msgpack, number) && sax->number_integer(number); - } - - case 0xD2: // int 32 - { - std::int32_t number{}; - return get_number(input_format_t::msgpack, number) && sax->number_integer(number); - } - - case 0xD3: // int 64 - { - std::int64_t number{}; - return get_number(input_format_t::msgpack, number) && sax->number_integer(number); - } - - case 0xDC: // array 16 - { - std::uint16_t len{}; - return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); - } - - case 0xDD: // array 32 - { - std::uint32_t len{}; - return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); - } - - case 0xDE: // map 16 - { - std::uint16_t len{}; - return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); - } - - case 0xDF: // map 32 - { - std::uint32_t len{}; - return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); - } - - // negative fixint - case 0xE0: - case 0xE1: - case 0xE2: - case 0xE3: - case 0xE4: - case 0xE5: - case 0xE6: - case 0xE7: - case 0xE8: - case 0xE9: - case 0xEA: - case 0xEB: - case 0xEC: - case 0xED: - case 0xEE: - case 0xEF: - case 0xF0: - case 0xF1: - case 0xF2: - case 0xF3: - case 0xF4: - case 0xF5: - case 0xF6: - case 0xF7: - case 0xF8: - case 0xF9: - case 0xFA: - case 0xFB: - case 0xFC: - case 0xFD: - case 0xFE: - case 0xFF: - return sax->number_integer(static_cast(current)); - - default: // anything else - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, "invalid byte: 0x" + last_token, "value"))); - } - } - } - - /*! - @brief reads a MessagePack string - - This function first reads starting bytes to determine the expected - string length and then copies this number of bytes into a string. - - @param[out] result created string - - @return whether string creation completed - */ - bool get_msgpack_string(string_t& result) - { - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) - { - return false; - } - - switch (current) - { - // fixstr - case 0xA0: - case 0xA1: - case 0xA2: - case 0xA3: - case 0xA4: - case 0xA5: - case 0xA6: - case 0xA7: - case 0xA8: - case 0xA9: - case 0xAA: - case 0xAB: - case 0xAC: - case 0xAD: - case 0xAE: - case 0xAF: - case 0xB0: - case 0xB1: - case 0xB2: - case 0xB3: - case 0xB4: - case 0xB5: - case 0xB6: - case 0xB7: - case 0xB8: - case 0xB9: - case 0xBA: - case 0xBB: - case 0xBC: - case 0xBD: - case 0xBE: - case 0xBF: - { - return get_string(input_format_t::msgpack, static_cast(current) & 0x1Fu, result); - } - - case 0xD9: // str 8 - { - std::uint8_t len{}; - return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); - } - - case 0xDA: // str 16 - { - std::uint16_t len{}; - return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); - } - - case 0xDB: // str 32 - { - std::uint32_t len{}; - return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); - } - - default: - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::msgpack, "expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x" + last_token, "string"))); - } - } - } - - /*! - @brief reads a MessagePack byte array - - This function first reads starting bytes to determine the expected - byte array length and then copies this number of bytes into a byte array. - - @param[out] result created byte array - - @return whether byte array creation completed - */ - bool get_msgpack_binary(binary_t& result) - { - // helper function to set the subtype - auto assign_and_return_true = [&result](std::int8_t subtype) - { - result.set_subtype(static_cast(subtype)); - return true; - }; - - switch (current) - { - case 0xC4: // bin 8 - { - std::uint8_t len{}; - return get_number(input_format_t::msgpack, len) && - get_binary(input_format_t::msgpack, len, result); - } - - case 0xC5: // bin 16 - { - std::uint16_t len{}; - return get_number(input_format_t::msgpack, len) && - get_binary(input_format_t::msgpack, len, result); - } - - case 0xC6: // bin 32 - { - std::uint32_t len{}; - return get_number(input_format_t::msgpack, len) && - get_binary(input_format_t::msgpack, len, result); - } - - case 0xC7: // ext 8 - { - std::uint8_t len{}; - std::int8_t subtype{}; - return get_number(input_format_t::msgpack, len) && - get_number(input_format_t::msgpack, subtype) && - get_binary(input_format_t::msgpack, len, result) && - assign_and_return_true(subtype); - } - - case 0xC8: // ext 16 - { - std::uint16_t len{}; - std::int8_t subtype{}; - return get_number(input_format_t::msgpack, len) && - get_number(input_format_t::msgpack, subtype) && - get_binary(input_format_t::msgpack, len, result) && - assign_and_return_true(subtype); - } - - case 0xC9: // ext 32 - { - std::uint32_t len{}; - std::int8_t subtype{}; - return get_number(input_format_t::msgpack, len) && - get_number(input_format_t::msgpack, subtype) && - get_binary(input_format_t::msgpack, len, result) && - assign_and_return_true(subtype); - } - - case 0xD4: // fixext 1 - { - std::int8_t subtype{}; - return get_number(input_format_t::msgpack, subtype) && - get_binary(input_format_t::msgpack, 1, result) && - assign_and_return_true(subtype); - } - - case 0xD5: // fixext 2 - { - std::int8_t subtype{}; - return get_number(input_format_t::msgpack, subtype) && - get_binary(input_format_t::msgpack, 2, result) && - assign_and_return_true(subtype); - } - - case 0xD6: // fixext 4 - { - std::int8_t subtype{}; - return get_number(input_format_t::msgpack, subtype) && - get_binary(input_format_t::msgpack, 4, result) && - assign_and_return_true(subtype); - } - - case 0xD7: // fixext 8 - { - std::int8_t subtype{}; - return get_number(input_format_t::msgpack, subtype) && - get_binary(input_format_t::msgpack, 8, result) && - assign_and_return_true(subtype); - } - - case 0xD8: // fixext 16 - { - std::int8_t subtype{}; - return get_number(input_format_t::msgpack, subtype) && - get_binary(input_format_t::msgpack, 16, result) && - assign_and_return_true(subtype); - } - - default: // LCOV_EXCL_LINE - return false; // LCOV_EXCL_LINE - } - } - - /*! - @param[in] len the length of the array - @return whether array creation completed - */ - bool get_msgpack_array(const std::size_t len) - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) - { - return false; - } - - for (std::size_t i = 0; i < len; ++i) - { - if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) - { - return false; - } - } - - return sax->end_array(); - } - - /*! - @param[in] len the length of the object - @return whether object creation completed - */ - bool get_msgpack_object(const std::size_t len) - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) - { - return false; - } - - string_t key; - for (std::size_t i = 0; i < len; ++i) - { - get(); - if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) - { - return false; - } - - if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) - { - return false; - } - key.clear(); - } - - return sax->end_object(); - } - - //////////// - // UBJSON // - //////////// - - /*! - @param[in] get_char whether a new character should be retrieved from the - input (true, default) or whether the last read - character should be considered instead - - @return whether a valid UBJSON value was passed to the SAX parser - */ - bool parse_ubjson_internal(const bool get_char = true) - { - return get_ubjson_value(get_char ? get_ignore_noop() : current); - } - - /*! - @brief reads a UBJSON string - - This function is either called after reading the 'S' byte explicitly - indicating a string, or in case of an object key where the 'S' byte can be - left out. - - @param[out] result created string - @param[in] get_char whether a new character should be retrieved from the - input (true, default) or whether the last read - character should be considered instead - - @return whether string creation completed - */ - bool get_ubjson_string(string_t& result, const bool get_char = true) - { - if (get_char) - { - get(); // TODO(niels): may we ignore N here? - } - - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) - { - return false; - } - - switch (current) - { - case 'U': - { - std::uint8_t len{}; - return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); - } - - case 'i': - { - std::int8_t len{}; - return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); - } - - case 'I': - { - std::int16_t len{}; - return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); - } - - case 'l': - { - std::int32_t len{}; - return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); - } - - case 'L': - { - std::int64_t len{}; - return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); - } - - default: - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token, "string"))); - } - } - - /*! - @param[out] result determined size - @return whether size determination completed - */ - bool get_ubjson_size_value(std::size_t& result) - { - switch (get_ignore_noop()) - { - case 'U': - { - std::uint8_t number{}; - if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) - { - return false; - } - result = static_cast(number); - return true; - } - - case 'i': - { - std::int8_t number{}; - if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) - { - return false; - } - result = static_cast(number); - return true; - } - - case 'I': - { - std::int16_t number{}; - if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) - { - return false; - } - result = static_cast(number); - return true; - } - - case 'l': - { - std::int32_t number{}; - if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) - { - return false; - } - result = static_cast(number); - return true; - } - - case 'L': - { - std::int64_t number{}; - if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) - { - return false; - } - result = static_cast(number); - return true; - } - - default: - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token, "size"))); - } - } - } - - /*! - @brief determine the type and size for a container - - In the optimized UBJSON format, a type and a size can be provided to allow - for a more compact representation. - - @param[out] result pair of the size and the type - - @return whether pair creation completed - */ - bool get_ubjson_size_type(std::pair& result) - { - result.first = string_t::npos; // size - result.second = 0; // type - - get_ignore_noop(); - - if (current == '$') - { - result.second = get(); // must not ignore 'N', because 'N' maybe the type - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "type"))) - { - return false; - } - - get_ignore_noop(); - if (JSON_HEDLEY_UNLIKELY(current != '#')) - { - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) - { - return false; - } - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "expected '#' after type information; last byte: 0x" + last_token, "size"))); - } - - return get_ubjson_size_value(result.first); - } - - if (current == '#') - { - return get_ubjson_size_value(result.first); - } - - return true; - } - - /*! - @param prefix the previously read or set type prefix - @return whether value creation completed - */ - bool get_ubjson_value(const char_int_type prefix) - { - switch (prefix) - { - case std::char_traits::eof(): // EOF - return unexpect_eof(input_format_t::ubjson, "value"); - - case 'T': // true - return sax->boolean(true); - case 'F': // false - return sax->boolean(false); - - case 'Z': // null - return sax->null(); - - case 'U': - { - std::uint8_t number{}; - return get_number(input_format_t::ubjson, number) && sax->number_unsigned(number); - } - - case 'i': - { - std::int8_t number{}; - return get_number(input_format_t::ubjson, number) && sax->number_integer(number); - } - - case 'I': - { - std::int16_t number{}; - return get_number(input_format_t::ubjson, number) && sax->number_integer(number); - } - - case 'l': - { - std::int32_t number{}; - return get_number(input_format_t::ubjson, number) && sax->number_integer(number); - } - - case 'L': - { - std::int64_t number{}; - return get_number(input_format_t::ubjson, number) && sax->number_integer(number); - } - - case 'd': - { - float number{}; - return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); - } - - case 'D': - { - double number{}; - return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); - } - - case 'H': - { - return get_ubjson_high_precision_number(); - } - - case 'C': // char - { - get(); - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "char"))) - { - return false; - } - if (JSON_HEDLEY_UNLIKELY(current > 127)) - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "byte after 'C' must be in range 0x00..0x7F; last byte: 0x" + last_token, "char"))); - } - string_t s(1, static_cast(current)); - return sax->string(s); - } - - case 'S': // string - { - string_t s; - return get_ubjson_string(s) && sax->string(s); - } - - case '[': // array - return get_ubjson_array(); - - case '{': // object - return get_ubjson_object(); - - default: // anything else - { - auto last_token = get_token_string(); - return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "invalid byte: 0x" + last_token, "value"))); - } - } - } - - /*! - @return whether array creation completed - */ - bool get_ubjson_array() - { - std::pair size_and_type; - if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) - { - return false; - } - - if (size_and_type.first != string_t::npos) - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) - { - return false; - } - - if (size_and_type.second != 0) - { - if (size_and_type.second != 'N') - { - for (std::size_t i = 0; i < size_and_type.first; ++i) - { - if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) - { - return false; - } - } - } - } - else - { - for (std::size_t i = 0; i < size_and_type.first; ++i) - { - if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) - { - return false; - } - } - } - } - else - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) - { - return false; - } - - while (current != ']') - { - if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) - { - return false; - } - get_ignore_noop(); - } - } - - return sax->end_array(); - } - - /*! - @return whether object creation completed - */ - bool get_ubjson_object() - { - std::pair size_and_type; - if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) - { - return false; - } - - string_t key; - if (size_and_type.first != string_t::npos) - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) - { - return false; - } - - if (size_and_type.second != 0) - { - for (std::size_t i = 0; i < size_and_type.first; ++i) - { - if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) - { - return false; - } - if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) - { - return false; - } - key.clear(); - } - } - else - { - for (std::size_t i = 0; i < size_and_type.first; ++i) - { - if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) - { - return false; - } - if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) - { - return false; - } - key.clear(); - } - } - } - else - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) - { - return false; - } - - while (current != '}') - { - if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) - { - return false; - } - if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) - { - return false; - } - get_ignore_noop(); - key.clear(); - } - } - - return sax->end_object(); - } - - // Note, no reader for UBJSON binary types is implemented because they do - // not exist - - bool get_ubjson_high_precision_number() - { - // get size of following number string - std::size_t size{}; - auto res = get_ubjson_size_value(size); - if (JSON_HEDLEY_UNLIKELY(!res)) - { - return res; - } - - // get number string - std::vector number_vector; - for (std::size_t i = 0; i < size; ++i) - { - get(); - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "number"))) - { - return false; - } - number_vector.push_back(static_cast(current)); - } - - // parse number string - auto number_ia = detail::input_adapter(std::forward(number_vector)); - auto number_lexer = detail::lexer(std::move(number_ia), false); - const auto result_number = number_lexer.scan(); - const auto number_string = number_lexer.get_token_string(); - const auto result_remainder = number_lexer.scan(); - - using token_type = typename detail::lexer_base::token_type; - - if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) - { - return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"))); - } - - switch (result_number) - { - case token_type::value_integer: - return sax->number_integer(number_lexer.get_number_integer()); - case token_type::value_unsigned: - return sax->number_unsigned(number_lexer.get_number_unsigned()); - case token_type::value_float: - return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); - default: - return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"))); - } - } - - /////////////////////// - // Utility functions // - /////////////////////// - - /*! - @brief get next character from the input - - This function provides the interface to the used input adapter. It does - not throw in case the input reached EOF, but returns a -'ve valued - `std::char_traits::eof()` in that case. - - @return character read from the input - */ - char_int_type get() - { - ++chars_read; - return current = ia.get_character(); - } - - /*! - @return character read from the input after ignoring all 'N' entries - */ - char_int_type get_ignore_noop() - { - do - { - get(); - } - while (current == 'N'); - - return current; - } - - /* - @brief read a number from the input - - @tparam NumberType the type of the number - @param[in] format the current format (for diagnostics) - @param[out] result number of type @a NumberType - - @return whether conversion completed - - @note This function needs to respect the system's endianess, because - bytes in CBOR, MessagePack, and UBJSON are stored in network order - (big endian) and therefore need reordering on little endian systems. - */ - template - bool get_number(const input_format_t format, NumberType& result) - { - // step 1: read input into array with system's byte order - std::array vec; - for (std::size_t i = 0; i < sizeof(NumberType); ++i) - { - get(); - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "number"))) - { - return false; - } - - // reverse byte order prior to conversion if necessary - if (is_little_endian != InputIsLittleEndian) - { - vec[sizeof(NumberType) - i - 1] = static_cast(current); - } - else - { - vec[i] = static_cast(current); // LCOV_EXCL_LINE - } - } - - // step 2: convert array into number of type T and return - std::memcpy(&result, vec.data(), sizeof(NumberType)); - return true; - } - - /*! - @brief create a string by reading characters from the input - - @tparam NumberType the type of the number - @param[in] format the current format (for diagnostics) - @param[in] len number of characters to read - @param[out] result string created by reading @a len bytes - - @return whether string creation completed - - @note We can not reserve @a len bytes for the result, because @a len - may be too large. Usually, @ref unexpect_eof() detects the end of - the input before we run out of string memory. - */ - template - bool get_string(const input_format_t format, - const NumberType len, - string_t& result) - { - bool success = true; - for (NumberType i = 0; i < len; i++) - { - get(); - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) - { - success = false; - break; - } - result.push_back(static_cast(current)); - }; - return success; - } - - /*! - @brief create a byte array by reading bytes from the input - - @tparam NumberType the type of the number - @param[in] format the current format (for diagnostics) - @param[in] len number of bytes to read - @param[out] result byte array created by reading @a len bytes - - @return whether byte array creation completed - - @note We can not reserve @a len bytes for the result, because @a len - may be too large. Usually, @ref unexpect_eof() detects the end of - the input before we run out of memory. - */ - template - bool get_binary(const input_format_t format, - const NumberType len, - binary_t& result) - { - bool success = true; - for (NumberType i = 0; i < len; i++) - { - get(); - if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) - { - success = false; - break; - } - result.push_back(static_cast(current)); - } - return success; - } - - /*! - @param[in] format the current format (for diagnostics) - @param[in] context further context information (for diagnostics) - @return whether the last read character is not EOF - */ - JSON_HEDLEY_NON_NULL(3) - bool unexpect_eof(const input_format_t format, const char* context) const - { - if (JSON_HEDLEY_UNLIKELY(current == std::char_traits::eof())) - { - return sax->parse_error(chars_read, "", - parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context))); - } - return true; - } - - /*! - @return a string representation of the last read byte - */ - std::string get_token_string() const - { - std::array cr{{}}; - (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(current)); - return std::string{cr.data()}; - } - - /*! - @param[in] format the current format - @param[in] detail a detailed error message - @param[in] context further context information - @return a message string to use in the parse_error exceptions - */ - std::string exception_message(const input_format_t format, - const std::string& detail, - const std::string& context) const - { - std::string error_msg = "syntax error while parsing "; - - switch (format) - { - case input_format_t::cbor: - error_msg += "CBOR"; - break; - - case input_format_t::msgpack: - error_msg += "MessagePack"; - break; - - case input_format_t::ubjson: - error_msg += "UBJSON"; - break; - - case input_format_t::bson: - error_msg += "BSON"; - break; - - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - - return error_msg + " " + context + ": " + detail; - } - - private: - /// input adapter - InputAdapterType ia; - - /// the current character - char_int_type current = std::char_traits::eof(); - - /// the number of characters read - std::size_t chars_read = 0; - - /// whether we can assume little endianess - const bool is_little_endian = little_endianess(); - - /// the SAX parser - json_sax_t* sax = nullptr; -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - -// #include - - -#include // isfinite -#include // uint8_t -#include // function -#include // string -#include // move -#include // vector - -// #include - -// #include - -// #include - -// #include - -// #include - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -//////////// -// parser // -//////////// - -enum class parse_event_t : uint8_t -{ - /// the parser read `{` and started to process a JSON object - object_start, - /// the parser read `}` and finished processing a JSON object - object_end, - /// the parser read `[` and started to process a JSON array - array_start, - /// the parser read `]` and finished processing a JSON array - array_end, - /// the parser read a key of a value in an object - key, - /// the parser finished reading a JSON value - value -}; - -template -using parser_callback_t = - std::function; - -/*! -@brief syntax analysis - -This class implements a recursive descent parser. -*/ -template -class parser -{ - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - using lexer_t = lexer; - using token_type = typename lexer_t::token_type; - - public: - /// a parser reading from an input adapter - explicit parser(InputAdapterType&& adapter, - const parser_callback_t cb = nullptr, - const bool allow_exceptions_ = true, - const bool skip_comments = false) - : callback(cb) - , m_lexer(std::move(adapter), skip_comments) - , allow_exceptions(allow_exceptions_) - { - // read first token - get_token(); - } - - /*! - @brief public parser interface - - @param[in] strict whether to expect the last token to be EOF - @param[in,out] result parsed JSON value - - @throw parse_error.101 in case of an unexpected token - @throw parse_error.102 if to_unicode fails or surrogate error - @throw parse_error.103 if to_unicode fails - */ - void parse(const bool strict, BasicJsonType& result) - { - if (callback) - { - json_sax_dom_callback_parser sdp(result, callback, allow_exceptions); - sax_parse_internal(&sdp); - result.assert_invariant(); - - // in strict mode, input must be completely read - if (strict && (get_token() != token_type::end_of_input)) - { - sdp.parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::end_of_input, "value"))); - } - - // in case of an error, return discarded value - if (sdp.is_errored()) - { - result = value_t::discarded; - return; - } - - // set top-level value to null if it was discarded by the callback - // function - if (result.is_discarded()) - { - result = nullptr; - } - } - else - { - json_sax_dom_parser sdp(result, allow_exceptions); - sax_parse_internal(&sdp); - result.assert_invariant(); - - // in strict mode, input must be completely read - if (strict && (get_token() != token_type::end_of_input)) - { - sdp.parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::end_of_input, "value"))); - } - - // in case of an error, return discarded value - if (sdp.is_errored()) - { - result = value_t::discarded; - return; - } - } - } - - /*! - @brief public accept interface - - @param[in] strict whether to expect the last token to be EOF - @return whether the input is a proper JSON text - */ - bool accept(const bool strict = true) - { - json_sax_acceptor sax_acceptor; - return sax_parse(&sax_acceptor, strict); - } - - template - JSON_HEDLEY_NON_NULL(2) - bool sax_parse(SAX* sax, const bool strict = true) - { - (void)detail::is_sax_static_asserts {}; - const bool result = sax_parse_internal(sax); - - // strict mode: next byte must be EOF - if (result && strict && (get_token() != token_type::end_of_input)) - { - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::end_of_input, "value"))); - } - - return result; - } - - private: - template - JSON_HEDLEY_NON_NULL(2) - bool sax_parse_internal(SAX* sax) - { - // stack to remember the hierarchy of structured values we are parsing - // true = array; false = object - std::vector states; - // value to avoid a goto (see comment where set to true) - bool skip_to_state_evaluation = false; - - while (true) - { - if (!skip_to_state_evaluation) - { - // invariant: get_token() was called before each iteration - switch (last_token) - { - case token_type::begin_object: - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) - { - return false; - } - - // closing } -> we are done - if (get_token() == token_type::end_object) - { - if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) - { - return false; - } - break; - } - - // parse key - if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) - { - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::value_string, "object key"))); - } - if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) - { - return false; - } - - // parse separator (:) - if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) - { - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::name_separator, "object separator"))); - } - - // remember we are now inside an object - states.push_back(false); - - // parse values - get_token(); - continue; - } - - case token_type::begin_array: - { - if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) - { - return false; - } - - // closing ] -> we are done - if (get_token() == token_type::end_array) - { - if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) - { - return false; - } - break; - } - - // remember we are now inside an array - states.push_back(true); - - // parse values (no need to call get_token) - continue; - } - - case token_type::value_float: - { - const auto res = m_lexer.get_number_float(); - - if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) - { - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - out_of_range::create(406, "number overflow parsing '" + m_lexer.get_token_string() + "'")); - } - - if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) - { - return false; - } - - break; - } - - case token_type::literal_false: - { - if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) - { - return false; - } - break; - } - - case token_type::literal_null: - { - if (JSON_HEDLEY_UNLIKELY(!sax->null())) - { - return false; - } - break; - } - - case token_type::literal_true: - { - if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) - { - return false; - } - break; - } - - case token_type::value_integer: - { - if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) - { - return false; - } - break; - } - - case token_type::value_string: - { - if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) - { - return false; - } - break; - } - - case token_type::value_unsigned: - { - if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) - { - return false; - } - break; - } - - case token_type::parse_error: - { - // using "uninitialized" to avoid "expected" message - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::uninitialized, "value"))); - } - - default: // the last token was unexpected - { - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::literal_or_value, "value"))); - } - } - } - else - { - skip_to_state_evaluation = false; - } - - // we reached this line after we successfully parsed a value - if (states.empty()) - { - // empty stack: we reached the end of the hierarchy: done - return true; - } - - if (states.back()) // array - { - // comma -> next value - if (get_token() == token_type::value_separator) - { - // parse a new value - get_token(); - continue; - } - - // closing ] - if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) - { - if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) - { - return false; - } - - // We are done with this array. Before we can parse a - // new value, we need to evaluate the new state first. - // By setting skip_to_state_evaluation to false, we - // are effectively jumping to the beginning of this if. - JSON_ASSERT(!states.empty()); - states.pop_back(); - skip_to_state_evaluation = true; - continue; - } - - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::end_array, "array"))); - } - else // object - { - // comma -> next value - if (get_token() == token_type::value_separator) - { - // parse key - if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) - { - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::value_string, "object key"))); - } - - if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) - { - return false; - } - - // parse separator (:) - if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) - { - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::name_separator, "object separator"))); - } - - // parse values - get_token(); - continue; - } - - // closing } - if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) - { - if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) - { - return false; - } - - // We are done with this object. Before we can parse a - // new value, we need to evaluate the new state first. - // By setting skip_to_state_evaluation to false, we - // are effectively jumping to the beginning of this if. - JSON_ASSERT(!states.empty()); - states.pop_back(); - skip_to_state_evaluation = true; - continue; - } - - return sax->parse_error(m_lexer.get_position(), - m_lexer.get_token_string(), - parse_error::create(101, m_lexer.get_position(), - exception_message(token_type::end_object, "object"))); - } - } - } - - /// get next token from lexer - token_type get_token() - { - return last_token = m_lexer.scan(); - } - - std::string exception_message(const token_type expected, const std::string& context) - { - std::string error_msg = "syntax error "; - - if (!context.empty()) - { - error_msg += "while parsing " + context + " "; - } - - error_msg += "- "; - - if (last_token == token_type::parse_error) - { - error_msg += std::string(m_lexer.get_error_message()) + "; last read: '" + - m_lexer.get_token_string() + "'"; - } - else - { - error_msg += "unexpected " + std::string(lexer_t::token_type_name(last_token)); - } - - if (expected != token_type::uninitialized) - { - error_msg += "; expected " + std::string(lexer_t::token_type_name(expected)); - } - - return error_msg; - } - - private: - /// callback function - const parser_callback_t callback = nullptr; - /// the type of the last read token - token_type last_token = token_type::uninitialized; - /// the lexer - lexer_t m_lexer; - /// whether to throw exceptions in case of errors - const bool allow_exceptions = true; -}; -} // namespace detail -} // namespace nlohmann - -// #include - - -// #include - - -#include // ptrdiff_t -#include // numeric_limits - -namespace nlohmann -{ -namespace detail -{ -/* -@brief an iterator for primitive JSON types - -This class models an iterator for primitive JSON types (boolean, number, -string). It's only purpose is to allow the iterator/const_iterator classes -to "iterate" over primitive values. Internally, the iterator is modeled by -a `difference_type` variable. Value begin_value (`0`) models the begin, -end_value (`1`) models past the end. -*/ -class primitive_iterator_t -{ - private: - using difference_type = std::ptrdiff_t; - static constexpr difference_type begin_value = 0; - static constexpr difference_type end_value = begin_value + 1; - - /// iterator as signed integer type - difference_type m_it = (std::numeric_limits::min)(); - - public: - constexpr difference_type get_value() const noexcept - { - return m_it; - } - - /// set iterator to a defined beginning - void set_begin() noexcept - { - m_it = begin_value; - } - - /// set iterator to a defined past the end - void set_end() noexcept - { - m_it = end_value; - } - - /// return whether the iterator can be dereferenced - constexpr bool is_begin() const noexcept - { - return m_it == begin_value; - } - - /// return whether the iterator is at end - constexpr bool is_end() const noexcept - { - return m_it == end_value; - } - - friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept - { - return lhs.m_it == rhs.m_it; - } - - friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept - { - return lhs.m_it < rhs.m_it; - } - - primitive_iterator_t operator+(difference_type n) noexcept - { - auto result = *this; - result += n; - return result; - } - - friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept - { - return lhs.m_it - rhs.m_it; - } - - primitive_iterator_t& operator++() noexcept - { - ++m_it; - return *this; - } - - primitive_iterator_t const operator++(int) noexcept - { - auto result = *this; - ++m_it; - return result; - } - - primitive_iterator_t& operator--() noexcept - { - --m_it; - return *this; - } - - primitive_iterator_t const operator--(int) noexcept - { - auto result = *this; - --m_it; - return result; - } - - primitive_iterator_t& operator+=(difference_type n) noexcept - { - m_it += n; - return *this; - } - - primitive_iterator_t& operator-=(difference_type n) noexcept - { - m_it -= n; - return *this; - } -}; -} // namespace detail -} // namespace nlohmann - - -namespace nlohmann -{ -namespace detail -{ -/*! -@brief an iterator value - -@note This structure could easily be a union, but MSVC currently does not allow -unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. -*/ -template struct internal_iterator -{ - /// iterator for JSON objects - typename BasicJsonType::object_t::iterator object_iterator {}; - /// iterator for JSON arrays - typename BasicJsonType::array_t::iterator array_iterator {}; - /// generic iterator for all other types - primitive_iterator_t primitive_iterator {}; -}; -} // namespace detail -} // namespace nlohmann - -// #include - - -#include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next -#include // conditional, is_const, remove_const - -// #include - -// #include - -// #include - -// #include - -// #include - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -// forward declare, to be able to friend it later on -template class iteration_proxy; -template class iteration_proxy_value; - -/*! -@brief a template for a bidirectional iterator for the @ref basic_json class -This class implements a both iterators (iterator and const_iterator) for the -@ref basic_json class. -@note An iterator is called *initialized* when a pointer to a JSON value has - been set (e.g., by a constructor or a copy assignment). If the iterator is - default-constructed, it is *uninitialized* and most methods are undefined. - **The library uses assertions to detect calls on uninitialized iterators.** -@requirement The class satisfies the following concept requirements: -- -[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): - The iterator that can be moved can be moved in both directions (i.e. - incremented and decremented). -@since version 1.0.0, simplified in version 2.0.9, change to bidirectional - iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) -*/ -template -class iter_impl -{ - /// allow basic_json to access private members - friend iter_impl::value, typename std::remove_const::type, const BasicJsonType>::type>; - friend BasicJsonType; - friend iteration_proxy; - friend iteration_proxy_value; - - using object_t = typename BasicJsonType::object_t; - using array_t = typename BasicJsonType::array_t; - // make sure BasicJsonType is basic_json or const basic_json - static_assert(is_basic_json::type>::value, - "iter_impl only accepts (const) basic_json"); - - public: - - /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. - /// The C++ Standard has never required user-defined iterators to derive from std::iterator. - /// A user-defined iterator should provide publicly accessible typedefs named - /// iterator_category, value_type, difference_type, pointer, and reference. - /// Note that value_type is required to be non-const, even for constant iterators. - using iterator_category = std::bidirectional_iterator_tag; - - /// the type of the values when the iterator is dereferenced - using value_type = typename BasicJsonType::value_type; - /// a type to represent differences between iterators - using difference_type = typename BasicJsonType::difference_type; - /// defines a pointer to the type iterated over (value_type) - using pointer = typename std::conditional::value, - typename BasicJsonType::const_pointer, - typename BasicJsonType::pointer>::type; - /// defines a reference to the type iterated over (value_type) - using reference = - typename std::conditional::value, - typename BasicJsonType::const_reference, - typename BasicJsonType::reference>::type; - - /// default constructor - iter_impl() = default; - - /*! - @brief constructor for a given JSON instance - @param[in] object pointer to a JSON object for this iterator - @pre object != nullptr - @post The iterator is initialized; i.e. `m_object != nullptr`. - */ - explicit iter_impl(pointer object) noexcept : m_object(object) - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - { - m_it.object_iterator = typename object_t::iterator(); - break; - } - - case value_t::array: - { - m_it.array_iterator = typename array_t::iterator(); - break; - } - - default: - { - m_it.primitive_iterator = primitive_iterator_t(); - break; - } - } - } - - /*! - @note The conventional copy constructor and copy assignment are implicitly - defined. Combined with the following converting constructor and - assignment, they support: (1) copy from iterator to iterator, (2) - copy from const iterator to const iterator, and (3) conversion from - iterator to const iterator. However conversion from const iterator - to iterator is not defined. - */ - - /*! - @brief const copy constructor - @param[in] other const iterator to copy from - @note This copy constructor had to be defined explicitly to circumvent a bug - occurring on msvc v19.0 compiler (VS 2015) debug build. For more - information refer to: https://github.com/nlohmann/json/issues/1608 - */ - iter_impl(const iter_impl& other) noexcept - : m_object(other.m_object), m_it(other.m_it) - {} - - /*! - @brief converting assignment - @param[in] other const iterator to copy from - @return const/non-const iterator - @note It is not checked whether @a other is initialized. - */ - iter_impl& operator=(const iter_impl& other) noexcept - { - m_object = other.m_object; - m_it = other.m_it; - return *this; - } - - /*! - @brief converting constructor - @param[in] other non-const iterator to copy from - @note It is not checked whether @a other is initialized. - */ - iter_impl(const iter_impl::type>& other) noexcept - : m_object(other.m_object), m_it(other.m_it) - {} - - /*! - @brief converting assignment - @param[in] other non-const iterator to copy from - @return const/non-const iterator - @note It is not checked whether @a other is initialized. - */ - iter_impl& operator=(const iter_impl::type>& other) noexcept - { - m_object = other.m_object; - m_it = other.m_it; - return *this; - } - - private: - /*! - @brief set the iterator to the first value - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - void set_begin() noexcept - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - { - m_it.object_iterator = m_object->m_value.object->begin(); - break; - } - - case value_t::array: - { - m_it.array_iterator = m_object->m_value.array->begin(); - break; - } - - case value_t::null: - { - // set to end so begin()==end() is true: null is empty - m_it.primitive_iterator.set_end(); - break; - } - - default: - { - m_it.primitive_iterator.set_begin(); - break; - } - } - } - - /*! - @brief set the iterator past the last value - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - void set_end() noexcept - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - { - m_it.object_iterator = m_object->m_value.object->end(); - break; - } - - case value_t::array: - { - m_it.array_iterator = m_object->m_value.array->end(); - break; - } - - default: - { - m_it.primitive_iterator.set_end(); - break; - } - } - } - - public: - /*! - @brief return a reference to the value pointed to by the iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - reference operator*() const - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - { - JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); - return m_it.object_iterator->second; - } - - case value_t::array: - { - JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); - return *m_it.array_iterator; - } - - case value_t::null: - JSON_THROW(invalid_iterator::create(214, "cannot get value")); - - default: - { - if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) - { - return *m_object; - } - - JSON_THROW(invalid_iterator::create(214, "cannot get value")); - } - } - } - - /*! - @brief dereference the iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - pointer operator->() const - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - { - JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); - return &(m_it.object_iterator->second); - } - - case value_t::array: - { - JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); - return &*m_it.array_iterator; - } - - default: - { - if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) - { - return m_object; - } - - JSON_THROW(invalid_iterator::create(214, "cannot get value")); - } - } - } - - /*! - @brief post-increment (it++) - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - iter_impl const operator++(int) - { - auto result = *this; - ++(*this); - return result; - } - - /*! - @brief pre-increment (++it) - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - iter_impl& operator++() - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - { - std::advance(m_it.object_iterator, 1); - break; - } - - case value_t::array: - { - std::advance(m_it.array_iterator, 1); - break; - } - - default: - { - ++m_it.primitive_iterator; - break; - } - } - - return *this; - } - - /*! - @brief post-decrement (it--) - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - iter_impl const operator--(int) - { - auto result = *this; - --(*this); - return result; - } - - /*! - @brief pre-decrement (--it) - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - iter_impl& operator--() - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - { - std::advance(m_it.object_iterator, -1); - break; - } - - case value_t::array: - { - std::advance(m_it.array_iterator, -1); - break; - } - - default: - { - --m_it.primitive_iterator; - break; - } - } - - return *this; - } - - /*! - @brief comparison: equal - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - bool operator==(const iter_impl& other) const - { - // if objects are not the same, the comparison is undefined - if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) - { - JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers")); - } - - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - return (m_it.object_iterator == other.m_it.object_iterator); - - case value_t::array: - return (m_it.array_iterator == other.m_it.array_iterator); - - default: - return (m_it.primitive_iterator == other.m_it.primitive_iterator); - } - } - - /*! - @brief comparison: not equal - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - bool operator!=(const iter_impl& other) const - { - return !operator==(other); - } - - /*! - @brief comparison: smaller - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - bool operator<(const iter_impl& other) const - { - // if objects are not the same, the comparison is undefined - if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) - { - JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers")); - } - - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators")); - - case value_t::array: - return (m_it.array_iterator < other.m_it.array_iterator); - - default: - return (m_it.primitive_iterator < other.m_it.primitive_iterator); - } - } - - /*! - @brief comparison: less than or equal - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - bool operator<=(const iter_impl& other) const - { - return !other.operator < (*this); - } - - /*! - @brief comparison: greater than - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - bool operator>(const iter_impl& other) const - { - return !operator<=(other); - } - - /*! - @brief comparison: greater than or equal - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - bool operator>=(const iter_impl& other) const - { - return !operator<(other); - } - - /*! - @brief add to iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - iter_impl& operator+=(difference_type i) - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators")); - - case value_t::array: - { - std::advance(m_it.array_iterator, i); - break; - } - - default: - { - m_it.primitive_iterator += i; - break; - } - } - - return *this; - } - - /*! - @brief subtract from iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - iter_impl& operator-=(difference_type i) - { - return operator+=(-i); - } - - /*! - @brief add to iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - iter_impl operator+(difference_type i) const - { - auto result = *this; - result += i; - return result; - } - - /*! - @brief addition of distance and iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - friend iter_impl operator+(difference_type i, const iter_impl& it) - { - auto result = it; - result += i; - return result; - } - - /*! - @brief subtract from iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - iter_impl operator-(difference_type i) const - { - auto result = *this; - result -= i; - return result; - } - - /*! - @brief return difference - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - difference_type operator-(const iter_impl& other) const - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators")); - - case value_t::array: - return m_it.array_iterator - other.m_it.array_iterator; - - default: - return m_it.primitive_iterator - other.m_it.primitive_iterator; - } - } - - /*! - @brief access to successor - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - reference operator[](difference_type n) const - { - JSON_ASSERT(m_object != nullptr); - - switch (m_object->m_type) - { - case value_t::object: - JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators")); - - case value_t::array: - return *std::next(m_it.array_iterator, n); - - case value_t::null: - JSON_THROW(invalid_iterator::create(214, "cannot get value")); - - default: - { - if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) - { - return *m_object; - } - - JSON_THROW(invalid_iterator::create(214, "cannot get value")); - } - } - } - - /*! - @brief return the key of an object iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - const typename object_t::key_type& key() const - { - JSON_ASSERT(m_object != nullptr); - - if (JSON_HEDLEY_LIKELY(m_object->is_object())) - { - return m_it.object_iterator->first; - } - - JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators")); - } - - /*! - @brief return the value of an iterator - @pre The iterator is initialized; i.e. `m_object != nullptr`. - */ - reference value() const - { - return operator*(); - } - - private: - /// associated JSON instance - pointer m_object = nullptr; - /// the actual iterator of the associated instance - internal_iterator::type> m_it {}; -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - - -#include // ptrdiff_t -#include // reverse_iterator -#include // declval - -namespace nlohmann -{ -namespace detail -{ -////////////////////// -// reverse_iterator // -////////////////////// - -/*! -@brief a template for a reverse iterator class - -@tparam Base the base iterator type to reverse. Valid types are @ref -iterator (to create @ref reverse_iterator) and @ref const_iterator (to -create @ref const_reverse_iterator). - -@requirement The class satisfies the following concept requirements: -- -[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): - The iterator that can be moved can be moved in both directions (i.e. - incremented and decremented). -- [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): - It is possible to write to the pointed-to element (only if @a Base is - @ref iterator). - -@since version 1.0.0 -*/ -template -class json_reverse_iterator : public std::reverse_iterator -{ - public: - using difference_type = std::ptrdiff_t; - /// shortcut to the reverse iterator adapter - using base_iterator = std::reverse_iterator; - /// the reference type for the pointed-to element - using reference = typename Base::reference; - - /// create reverse iterator from iterator - explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept - : base_iterator(it) {} - - /// create reverse iterator from base class - explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} - - /// post-increment (it++) - json_reverse_iterator const operator++(int) - { - return static_cast(base_iterator::operator++(1)); - } - - /// pre-increment (++it) - json_reverse_iterator& operator++() - { - return static_cast(base_iterator::operator++()); - } - - /// post-decrement (it--) - json_reverse_iterator const operator--(int) - { - return static_cast(base_iterator::operator--(1)); - } - - /// pre-decrement (--it) - json_reverse_iterator& operator--() - { - return static_cast(base_iterator::operator--()); - } - - /// add to iterator - json_reverse_iterator& operator+=(difference_type i) - { - return static_cast(base_iterator::operator+=(i)); - } - - /// add to iterator - json_reverse_iterator operator+(difference_type i) const - { - return static_cast(base_iterator::operator+(i)); - } - - /// subtract from iterator - json_reverse_iterator operator-(difference_type i) const - { - return static_cast(base_iterator::operator-(i)); - } - - /// return difference - difference_type operator-(const json_reverse_iterator& other) const - { - return base_iterator(*this) - base_iterator(other); - } - - /// access to successor - reference operator[](difference_type n) const - { - return *(this->operator+(n)); - } - - /// return the key of an object iterator - auto key() const -> decltype(std::declval().key()) - { - auto it = --this->base(); - return it.key(); - } - - /// return the value of an iterator - reference value() const - { - auto it = --this->base(); - return it.operator * (); - } -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - - -#include // all_of -#include // isdigit -#include // max -#include // accumulate -#include // string -#include // move -#include // vector - -// #include - -// #include - -// #include - - -namespace nlohmann -{ -template -class json_pointer -{ - // allow basic_json to access private members - NLOHMANN_BASIC_JSON_TPL_DECLARATION - friend class basic_json; - - public: - /*! - @brief create JSON pointer - - Create a JSON pointer according to the syntax described in - [Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3). - - @param[in] s string representing the JSON pointer; if omitted, the empty - string is assumed which references the whole JSON value - - @throw parse_error.107 if the given JSON pointer @a s is nonempty and does - not begin with a slash (`/`); see example below - - @throw parse_error.108 if a tilde (`~`) in the given JSON pointer @a s is - not followed by `0` (representing `~`) or `1` (representing `/`); see - example below - - @liveexample{The example shows the construction several valid JSON pointers - as well as the exceptional behavior.,json_pointer} - - @since version 2.0.0 - */ - explicit json_pointer(const std::string& s = "") - : reference_tokens(split(s)) - {} - - /*! - @brief return a string representation of the JSON pointer - - @invariant For each JSON pointer `ptr`, it holds: - @code {.cpp} - ptr == json_pointer(ptr.to_string()); - @endcode - - @return a string representation of the JSON pointer - - @liveexample{The example shows the result of `to_string`.,json_pointer__to_string} - - @since version 2.0.0 - */ - std::string to_string() const - { - return std::accumulate(reference_tokens.begin(), reference_tokens.end(), - std::string{}, - [](const std::string & a, const std::string & b) - { - return a + "/" + escape(b); - }); - } - - /// @copydoc to_string() - operator std::string() const - { - return to_string(); - } - - /*! - @brief append another JSON pointer at the end of this JSON pointer - - @param[in] ptr JSON pointer to append - @return JSON pointer with @a ptr appended - - @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} - - @complexity Linear in the length of @a ptr. - - @sa @ref operator/=(std::string) to append a reference token - @sa @ref operator/=(std::size_t) to append an array index - @sa @ref operator/(const json_pointer&, const json_pointer&) for a binary operator - - @since version 3.6.0 - */ - json_pointer& operator/=(const json_pointer& ptr) - { - reference_tokens.insert(reference_tokens.end(), - ptr.reference_tokens.begin(), - ptr.reference_tokens.end()); - return *this; - } - - /*! - @brief append an unescaped reference token at the end of this JSON pointer - - @param[in] token reference token to append - @return JSON pointer with @a token appended without escaping @a token - - @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} - - @complexity Amortized constant. - - @sa @ref operator/=(const json_pointer&) to append a JSON pointer - @sa @ref operator/=(std::size_t) to append an array index - @sa @ref operator/(const json_pointer&, std::size_t) for a binary operator - - @since version 3.6.0 - */ - json_pointer& operator/=(std::string token) - { - push_back(std::move(token)); - return *this; - } - - /*! - @brief append an array index at the end of this JSON pointer - - @param[in] array_idx array index to append - @return JSON pointer with @a array_idx appended - - @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} - - @complexity Amortized constant. - - @sa @ref operator/=(const json_pointer&) to append a JSON pointer - @sa @ref operator/=(std::string) to append a reference token - @sa @ref operator/(const json_pointer&, std::string) for a binary operator - - @since version 3.6.0 - */ - json_pointer& operator/=(std::size_t array_idx) - { - return *this /= std::to_string(array_idx); - } - - /*! - @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer - - @param[in] lhs JSON pointer - @param[in] rhs JSON pointer - @return a new JSON pointer with @a rhs appended to @a lhs - - @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} - - @complexity Linear in the length of @a lhs and @a rhs. - - @sa @ref operator/=(const json_pointer&) to append a JSON pointer - - @since version 3.6.0 - */ - friend json_pointer operator/(const json_pointer& lhs, - const json_pointer& rhs) - { - return json_pointer(lhs) /= rhs; - } - - /*! - @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer - - @param[in] ptr JSON pointer - @param[in] token reference token - @return a new JSON pointer with unescaped @a token appended to @a ptr - - @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} - - @complexity Linear in the length of @a ptr. - - @sa @ref operator/=(std::string) to append a reference token - - @since version 3.6.0 - */ - friend json_pointer operator/(const json_pointer& ptr, std::string token) - { - return json_pointer(ptr) /= std::move(token); - } - - /*! - @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer - - @param[in] ptr JSON pointer - @param[in] array_idx array index - @return a new JSON pointer with @a array_idx appended to @a ptr - - @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} - - @complexity Linear in the length of @a ptr. - - @sa @ref operator/=(std::size_t) to append an array index - - @since version 3.6.0 - */ - friend json_pointer operator/(const json_pointer& ptr, std::size_t array_idx) - { - return json_pointer(ptr) /= array_idx; - } - - /*! - @brief returns the parent of this JSON pointer - - @return parent of this JSON pointer; in case this JSON pointer is the root, - the root itself is returned - - @complexity Linear in the length of the JSON pointer. - - @liveexample{The example shows the result of `parent_pointer` for different - JSON Pointers.,json_pointer__parent_pointer} - - @since version 3.6.0 - */ - json_pointer parent_pointer() const - { - if (empty()) - { - return *this; - } - - json_pointer res = *this; - res.pop_back(); - return res; - } - - /*! - @brief remove last reference token - - @pre not `empty()` - - @liveexample{The example shows the usage of `pop_back`.,json_pointer__pop_back} - - @complexity Constant. - - @throw out_of_range.405 if JSON pointer has no parent - - @since version 3.6.0 - */ - void pop_back() - { - if (JSON_HEDLEY_UNLIKELY(empty())) - { - JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); - } - - reference_tokens.pop_back(); - } - - /*! - @brief return last reference token - - @pre not `empty()` - @return last reference token - - @liveexample{The example shows the usage of `back`.,json_pointer__back} - - @complexity Constant. - - @throw out_of_range.405 if JSON pointer has no parent - - @since version 3.6.0 - */ - const std::string& back() const - { - if (JSON_HEDLEY_UNLIKELY(empty())) - { - JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); - } - - return reference_tokens.back(); - } - - /*! - @brief append an unescaped token at the end of the reference pointer - - @param[in] token token to add - - @complexity Amortized constant. - - @liveexample{The example shows the result of `push_back` for different - JSON Pointers.,json_pointer__push_back} - - @since version 3.6.0 - */ - void push_back(const std::string& token) - { - reference_tokens.push_back(token); - } - - /// @copydoc push_back(const std::string&) - void push_back(std::string&& token) - { - reference_tokens.push_back(std::move(token)); - } - - /*! - @brief return whether pointer points to the root document - - @return true iff the JSON pointer points to the root document - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @liveexample{The example shows the result of `empty` for different JSON - Pointers.,json_pointer__empty} - - @since version 3.6.0 - */ - bool empty() const noexcept - { - return reference_tokens.empty(); - } - - private: - /*! - @param[in] s reference token to be converted into an array index - - @return integer representation of @a s - - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index begins not with a digit - @throw out_of_range.404 if string @a s could not be converted to an integer - @throw out_of_range.410 if an array index exceeds size_type - */ - static typename BasicJsonType::size_type array_index(const std::string& s) - { - using size_type = typename BasicJsonType::size_type; - - // error condition (cf. RFC 6901, Sect. 4) - if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) - { - JSON_THROW(detail::parse_error::create(106, 0, - "array index '" + s + - "' must not begin with '0'")); - } - - // error condition (cf. RFC 6901, Sect. 4) - if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) - { - JSON_THROW(detail::parse_error::create(109, 0, "array index '" + s + "' is not a number")); - } - - std::size_t processed_chars = 0; - unsigned long long res = 0; - JSON_TRY - { - res = std::stoull(s, &processed_chars); - } - JSON_CATCH(std::out_of_range&) - { - JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'")); - } - - // check if the string was completely read - if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size())) - { - JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'")); - } - - // only triggered on special platforms (like 32bit), see also - // https://github.com/nlohmann/json/pull/2203 - if (res >= static_cast((std::numeric_limits::max)())) - { - JSON_THROW(detail::out_of_range::create(410, "array index " + s + " exceeds size_type")); // LCOV_EXCL_LINE - } - - return static_cast(res); - } - - json_pointer top() const - { - if (JSON_HEDLEY_UNLIKELY(empty())) - { - JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); - } - - json_pointer result = *this; - result.reference_tokens = {reference_tokens[0]}; - return result; - } - - /*! - @brief create and return a reference to the pointed to value - - @complexity Linear in the number of reference tokens. - - @throw parse_error.109 if array index is not a number - @throw type_error.313 if value cannot be unflattened - */ - BasicJsonType& get_and_create(BasicJsonType& j) const - { - auto result = &j; - - // in case no reference tokens exist, return a reference to the JSON value - // j which will be overwritten by a primitive value - for (const auto& reference_token : reference_tokens) - { - switch (result->type()) - { - case detail::value_t::null: - { - if (reference_token == "0") - { - // start a new array if reference token is 0 - result = &result->operator[](0); - } - else - { - // start a new object otherwise - result = &result->operator[](reference_token); - } - break; - } - - case detail::value_t::object: - { - // create an entry in the object - result = &result->operator[](reference_token); - break; - } - - case detail::value_t::array: - { - // create an entry in the array - result = &result->operator[](array_index(reference_token)); - break; - } - - /* - The following code is only reached if there exists a reference - token _and_ the current value is primitive. In this case, we have - an error situation, because primitive values may only occur as - single value; that is, with an empty list of reference tokens. - */ - default: - JSON_THROW(detail::type_error::create(313, "invalid value to unflatten")); - } - } - - return *result; - } - - /*! - @brief return a reference to the pointed to value - - @note This version does not throw if a value is not present, but tries to - create nested values instead. For instance, calling this function - with pointer `"/this/that"` on a null value is equivalent to calling - `operator[]("this").operator[]("that")` on that value, effectively - changing the null value to an object. - - @param[in] ptr a JSON value - - @return reference to the JSON value pointed to by the JSON pointer - - @complexity Linear in the length of the JSON pointer. - - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index was not a number - @throw out_of_range.404 if the JSON pointer can not be resolved - */ - BasicJsonType& get_unchecked(BasicJsonType* ptr) const - { - for (const auto& reference_token : reference_tokens) - { - // convert null values to arrays or objects before continuing - if (ptr->is_null()) - { - // check if reference token is a number - const bool nums = - std::all_of(reference_token.begin(), reference_token.end(), - [](const unsigned char x) - { - return std::isdigit(x); - }); - - // change value to array for numbers or "-" or to object otherwise - *ptr = (nums || reference_token == "-") - ? detail::value_t::array - : detail::value_t::object; - } - - switch (ptr->type()) - { - case detail::value_t::object: - { - // use unchecked object access - ptr = &ptr->operator[](reference_token); - break; - } - - case detail::value_t::array: - { - if (reference_token == "-") - { - // explicitly treat "-" as index beyond the end - ptr = &ptr->operator[](ptr->m_value.array->size()); - } - else - { - // convert array index to number; unchecked access - ptr = &ptr->operator[](array_index(reference_token)); - } - break; - } - - default: - JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); - } - } - - return *ptr; - } - - /*! - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index was not a number - @throw out_of_range.402 if the array index '-' is used - @throw out_of_range.404 if the JSON pointer can not be resolved - */ - BasicJsonType& get_checked(BasicJsonType* ptr) const - { - for (const auto& reference_token : reference_tokens) - { - switch (ptr->type()) - { - case detail::value_t::object: - { - // note: at performs range check - ptr = &ptr->at(reference_token); - break; - } - - case detail::value_t::array: - { - if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) - { - // "-" always fails the range check - JSON_THROW(detail::out_of_range::create(402, - "array index '-' (" + std::to_string(ptr->m_value.array->size()) + - ") is out of range")); - } - - // note: at performs range check - ptr = &ptr->at(array_index(reference_token)); - break; - } - - default: - JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); - } - } - - return *ptr; - } - - /*! - @brief return a const reference to the pointed to value - - @param[in] ptr a JSON value - - @return const reference to the JSON value pointed to by the JSON - pointer - - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index was not a number - @throw out_of_range.402 if the array index '-' is used - @throw out_of_range.404 if the JSON pointer can not be resolved - */ - const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const - { - for (const auto& reference_token : reference_tokens) - { - switch (ptr->type()) - { - case detail::value_t::object: - { - // use unchecked object access - ptr = &ptr->operator[](reference_token); - break; - } - - case detail::value_t::array: - { - if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) - { - // "-" cannot be used for const access - JSON_THROW(detail::out_of_range::create(402, - "array index '-' (" + std::to_string(ptr->m_value.array->size()) + - ") is out of range")); - } - - // use unchecked array access - ptr = &ptr->operator[](array_index(reference_token)); - break; - } - - default: - JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); - } - } - - return *ptr; - } - - /*! - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index was not a number - @throw out_of_range.402 if the array index '-' is used - @throw out_of_range.404 if the JSON pointer can not be resolved - */ - const BasicJsonType& get_checked(const BasicJsonType* ptr) const - { - for (const auto& reference_token : reference_tokens) - { - switch (ptr->type()) - { - case detail::value_t::object: - { - // note: at performs range check - ptr = &ptr->at(reference_token); - break; - } - - case detail::value_t::array: - { - if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) - { - // "-" always fails the range check - JSON_THROW(detail::out_of_range::create(402, - "array index '-' (" + std::to_string(ptr->m_value.array->size()) + - ") is out of range")); - } - - // note: at performs range check - ptr = &ptr->at(array_index(reference_token)); - break; - } - - default: - JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); - } - } - - return *ptr; - } - - /*! - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index was not a number - */ - bool contains(const BasicJsonType* ptr) const - { - for (const auto& reference_token : reference_tokens) - { - switch (ptr->type()) - { - case detail::value_t::object: - { - if (!ptr->contains(reference_token)) - { - // we did not find the key in the object - return false; - } - - ptr = &ptr->operator[](reference_token); - break; - } - - case detail::value_t::array: - { - if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) - { - // "-" always fails the range check - return false; - } - if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) - { - // invalid char - return false; - } - if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) - { - if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) - { - // first char should be between '1' and '9' - return false; - } - for (std::size_t i = 1; i < reference_token.size(); i++) - { - if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) - { - // other char should be between '0' and '9' - return false; - } - } - } - - const auto idx = array_index(reference_token); - if (idx >= ptr->size()) - { - // index out of range - return false; - } - - ptr = &ptr->operator[](idx); - break; - } - - default: - { - // we do not expect primitive values if there is still a - // reference token to process - return false; - } - } - } - - // no reference token left means we found a primitive value - return true; - } - - /*! - @brief split the string input to reference tokens - - @note This function is only called by the json_pointer constructor. - All exceptions below are documented there. - - @throw parse_error.107 if the pointer is not empty or begins with '/' - @throw parse_error.108 if character '~' is not followed by '0' or '1' - */ - static std::vector split(const std::string& reference_string) - { - std::vector result; - - // special case: empty reference string -> no reference tokens - if (reference_string.empty()) - { - return result; - } - - // check if nonempty reference string begins with slash - if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) - { - JSON_THROW(detail::parse_error::create(107, 1, - "JSON pointer must be empty or begin with '/' - was: '" + - reference_string + "'")); - } - - // extract the reference tokens: - // - slash: position of the last read slash (or end of string) - // - start: position after the previous slash - for ( - // search for the first slash after the first character - std::size_t slash = reference_string.find_first_of('/', 1), - // set the beginning of the first reference token - start = 1; - // we can stop if start == 0 (if slash == std::string::npos) - start != 0; - // set the beginning of the next reference token - // (will eventually be 0 if slash == std::string::npos) - start = (slash == std::string::npos) ? 0 : slash + 1, - // find next slash - slash = reference_string.find_first_of('/', start)) - { - // use the text between the beginning of the reference token - // (start) and the last slash (slash). - auto reference_token = reference_string.substr(start, slash - start); - - // check reference tokens are properly escaped - for (std::size_t pos = reference_token.find_first_of('~'); - pos != std::string::npos; - pos = reference_token.find_first_of('~', pos + 1)) - { - JSON_ASSERT(reference_token[pos] == '~'); - - // ~ must be followed by 0 or 1 - if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || - (reference_token[pos + 1] != '0' && - reference_token[pos + 1] != '1'))) - { - JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'")); - } - } - - // finally, store the reference token - unescape(reference_token); - result.push_back(reference_token); - } - - return result; - } - - /*! - @brief replace all occurrences of a substring by another string - - @param[in,out] s the string to manipulate; changed so that all - occurrences of @a f are replaced with @a t - @param[in] f the substring to replace with @a t - @param[in] t the string to replace @a f - - @pre The search string @a f must not be empty. **This precondition is - enforced with an assertion.** - - @since version 2.0.0 - */ - static void replace_substring(std::string& s, const std::string& f, - const std::string& t) - { - JSON_ASSERT(!f.empty()); - for (auto pos = s.find(f); // find first occurrence of f - pos != std::string::npos; // make sure f was found - s.replace(pos, f.size(), t), // replace with t, and - pos = s.find(f, pos + t.size())) // find next occurrence of f - {} - } - - /// escape "~" to "~0" and "/" to "~1" - static std::string escape(std::string s) - { - replace_substring(s, "~", "~0"); - replace_substring(s, "/", "~1"); - return s; - } - - /// unescape "~1" to tilde and "~0" to slash (order is important!) - static void unescape(std::string& s) - { - replace_substring(s, "~1", "/"); - replace_substring(s, "~0", "~"); - } - - /*! - @param[in] reference_string the reference string to the current value - @param[in] value the value to consider - @param[in,out] result the result object to insert values to - - @note Empty objects or arrays are flattened to `null`. - */ - static void flatten(const std::string& reference_string, - const BasicJsonType& value, - BasicJsonType& result) - { - switch (value.type()) - { - case detail::value_t::array: - { - if (value.m_value.array->empty()) - { - // flatten empty array as null - result[reference_string] = nullptr; - } - else - { - // iterate array and use index as reference string - for (std::size_t i = 0; i < value.m_value.array->size(); ++i) - { - flatten(reference_string + "/" + std::to_string(i), - value.m_value.array->operator[](i), result); - } - } - break; - } - - case detail::value_t::object: - { - if (value.m_value.object->empty()) - { - // flatten empty object as null - result[reference_string] = nullptr; - } - else - { - // iterate object and use keys as reference string - for (const auto& element : *value.m_value.object) - { - flatten(reference_string + "/" + escape(element.first), element.second, result); - } - } - break; - } - - default: - { - // add primitive value with its reference string - result[reference_string] = value; - break; - } - } - } - - /*! - @param[in] value flattened JSON - - @return unflattened JSON - - @throw parse_error.109 if array index is not a number - @throw type_error.314 if value is not an object - @throw type_error.315 if object values are not primitive - @throw type_error.313 if value cannot be unflattened - */ - static BasicJsonType - unflatten(const BasicJsonType& value) - { - if (JSON_HEDLEY_UNLIKELY(!value.is_object())) - { - JSON_THROW(detail::type_error::create(314, "only objects can be unflattened")); - } - - BasicJsonType result; - - // iterate the JSON object values - for (const auto& element : *value.m_value.object) - { - if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) - { - JSON_THROW(detail::type_error::create(315, "values in object must be primitive")); - } - - // assign value to reference pointed to by JSON pointer; Note that if - // the JSON pointer is "" (i.e., points to the whole value), function - // get_and_create returns a reference to result itself. An assignment - // will then create a primitive value. - json_pointer(element.first).get_and_create(result) = element.second; - } - - return result; - } - - /*! - @brief compares two JSON pointers for equality - - @param[in] lhs JSON pointer to compare - @param[in] rhs JSON pointer to compare - @return whether @a lhs is equal to @a rhs - - @complexity Linear in the length of the JSON pointer - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - */ - friend bool operator==(json_pointer const& lhs, - json_pointer const& rhs) noexcept - { - return lhs.reference_tokens == rhs.reference_tokens; - } - - /*! - @brief compares two JSON pointers for inequality - - @param[in] lhs JSON pointer to compare - @param[in] rhs JSON pointer to compare - @return whether @a lhs is not equal @a rhs - - @complexity Linear in the length of the JSON pointer - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - */ - friend bool operator!=(json_pointer const& lhs, - json_pointer const& rhs) noexcept - { - return !(lhs == rhs); - } - - /// the reference tokens - std::vector reference_tokens; -}; -} // namespace nlohmann - -// #include - - -#include -#include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -template -class json_ref -{ - public: - using value_type = BasicJsonType; - - json_ref(value_type&& value) - : owned_value(std::move(value)) - , value_ref(&owned_value) - , is_rvalue(true) - {} - - json_ref(const value_type& value) - : value_ref(const_cast(&value)) - , is_rvalue(false) - {} - - json_ref(std::initializer_list init) - : owned_value(init) - , value_ref(&owned_value) - , is_rvalue(true) - {} - - template < - class... Args, - enable_if_t::value, int> = 0 > - json_ref(Args && ... args) - : owned_value(std::forward(args)...) - , value_ref(&owned_value) - , is_rvalue(true) - {} - - // class should be movable only - json_ref(json_ref&&) = default; - json_ref(const json_ref&) = delete; - json_ref& operator=(const json_ref&) = delete; - json_ref& operator=(json_ref&&) = delete; - ~json_ref() = default; - - value_type moved_or_copied() const - { - if (is_rvalue) - { - return std::move(*value_ref); - } - return *value_ref; - } - - value_type const& operator*() const - { - return *static_cast(value_ref); - } - - value_type const* operator->() const - { - return static_cast(value_ref); - } - - private: - mutable value_type owned_value = nullptr; - value_type* value_ref = nullptr; - const bool is_rvalue = true; -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - -// #include - -// #include - - -#include // reverse -#include // array -#include // uint8_t, uint16_t, uint32_t, uint64_t -#include // memcpy -#include // numeric_limits -#include // string -#include // isnan, isinf - -// #include - -// #include - -// #include - - -#include // copy -#include // size_t -#include // streamsize -#include // back_inserter -#include // shared_ptr, make_shared -#include // basic_ostream -#include // basic_string -#include // vector -// #include - - -namespace nlohmann -{ -namespace detail -{ -/// abstract output adapter interface -template struct output_adapter_protocol -{ - virtual void write_character(CharType c) = 0; - virtual void write_characters(const CharType* s, std::size_t length) = 0; - virtual ~output_adapter_protocol() = default; -}; - -/// a type to simplify interfaces -template -using output_adapter_t = std::shared_ptr>; - -/// output adapter for byte vectors -template -class output_vector_adapter : public output_adapter_protocol -{ - public: - explicit output_vector_adapter(std::vector& vec) noexcept - : v(vec) - {} - - void write_character(CharType c) override - { - v.push_back(c); - } - - JSON_HEDLEY_NON_NULL(2) - void write_characters(const CharType* s, std::size_t length) override - { - std::copy(s, s + length, std::back_inserter(v)); - } - - private: - std::vector& v; -}; - -/// output adapter for output streams -template -class output_stream_adapter : public output_adapter_protocol -{ - public: - explicit output_stream_adapter(std::basic_ostream& s) noexcept - : stream(s) - {} - - void write_character(CharType c) override - { - stream.put(c); - } - - JSON_HEDLEY_NON_NULL(2) - void write_characters(const CharType* s, std::size_t length) override - { - stream.write(s, static_cast(length)); - } - - private: - std::basic_ostream& stream; -}; - -/// output adapter for basic_string -template> -class output_string_adapter : public output_adapter_protocol -{ - public: - explicit output_string_adapter(StringType& s) noexcept - : str(s) - {} - - void write_character(CharType c) override - { - str.push_back(c); - } - - JSON_HEDLEY_NON_NULL(2) - void write_characters(const CharType* s, std::size_t length) override - { - str.append(s, length); - } - - private: - StringType& str; -}; - -template> -class output_adapter -{ - public: - output_adapter(std::vector& vec) - : oa(std::make_shared>(vec)) {} - - output_adapter(std::basic_ostream& s) - : oa(std::make_shared>(s)) {} - - output_adapter(StringType& s) - : oa(std::make_shared>(s)) {} - - operator output_adapter_t() - { - return oa; - } - - private: - output_adapter_t oa = nullptr; -}; -} // namespace detail -} // namespace nlohmann - - -namespace nlohmann -{ -namespace detail -{ -/////////////////// -// binary writer // -/////////////////// - -/*! -@brief serialization to CBOR and MessagePack values -*/ -template -class binary_writer -{ - using string_t = typename BasicJsonType::string_t; - using binary_t = typename BasicJsonType::binary_t; - using number_float_t = typename BasicJsonType::number_float_t; - - public: - /*! - @brief create a binary writer - - @param[in] adapter output adapter to write to - */ - explicit binary_writer(output_adapter_t adapter) : oa(adapter) - { - JSON_ASSERT(oa); - } - - /*! - @param[in] j JSON value to serialize - @pre j.type() == value_t::object - */ - void write_bson(const BasicJsonType& j) - { - switch (j.type()) - { - case value_t::object: - { - write_bson_object(*j.m_value.object); - break; - } - - default: - { - JSON_THROW(type_error::create(317, "to serialize to BSON, top-level type must be object, but is " + std::string(j.type_name()))); - } - } - } - - /*! - @param[in] j JSON value to serialize - */ - void write_cbor(const BasicJsonType& j) - { - switch (j.type()) - { - case value_t::null: - { - oa->write_character(to_char_type(0xF6)); - break; - } - - case value_t::boolean: - { - oa->write_character(j.m_value.boolean - ? to_char_type(0xF5) - : to_char_type(0xF4)); - break; - } - - case value_t::number_integer: - { - if (j.m_value.number_integer >= 0) - { - // CBOR does not differentiate between positive signed - // integers and unsigned integers. Therefore, we used the - // code from the value_t::number_unsigned case here. - if (j.m_value.number_integer <= 0x17) - { - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_integer <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x18)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_integer <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x19)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_integer <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x1A)); - write_number(static_cast(j.m_value.number_integer)); - } - else - { - oa->write_character(to_char_type(0x1B)); - write_number(static_cast(j.m_value.number_integer)); - } - } - else - { - // The conversions below encode the sign in the first - // byte, and the value is converted to a positive number. - const auto positive_number = -1 - j.m_value.number_integer; - if (j.m_value.number_integer >= -24) - { - write_number(static_cast(0x20 + positive_number)); - } - else if (positive_number <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x38)); - write_number(static_cast(positive_number)); - } - else if (positive_number <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x39)); - write_number(static_cast(positive_number)); - } - else if (positive_number <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x3A)); - write_number(static_cast(positive_number)); - } - else - { - oa->write_character(to_char_type(0x3B)); - write_number(static_cast(positive_number)); - } - } - break; - } - - case value_t::number_unsigned: - { - if (j.m_value.number_unsigned <= 0x17) - { - write_number(static_cast(j.m_value.number_unsigned)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x18)); - write_number(static_cast(j.m_value.number_unsigned)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x19)); - write_number(static_cast(j.m_value.number_unsigned)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x1A)); - write_number(static_cast(j.m_value.number_unsigned)); - } - else - { - oa->write_character(to_char_type(0x1B)); - write_number(static_cast(j.m_value.number_unsigned)); - } - break; - } - - case value_t::number_float: - { - if (std::isnan(j.m_value.number_float)) - { - // NaN is 0xf97e00 in CBOR - oa->write_character(to_char_type(0xF9)); - oa->write_character(to_char_type(0x7E)); - oa->write_character(to_char_type(0x00)); - } - else if (std::isinf(j.m_value.number_float)) - { - // Infinity is 0xf97c00, -Infinity is 0xf9fc00 - oa->write_character(to_char_type(0xf9)); - oa->write_character(j.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC)); - oa->write_character(to_char_type(0x00)); - } - else - { - write_compact_float(j.m_value.number_float, detail::input_format_t::cbor); - } - break; - } - - case value_t::string: - { - // step 1: write control byte and the string length - const auto N = j.m_value.string->size(); - if (N <= 0x17) - { - write_number(static_cast(0x60 + N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x78)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x79)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x7A)); - write_number(static_cast(N)); - } - // LCOV_EXCL_START - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x7B)); - write_number(static_cast(N)); - } - // LCOV_EXCL_STOP - - // step 2: write the string - oa->write_characters( - reinterpret_cast(j.m_value.string->c_str()), - j.m_value.string->size()); - break; - } - - case value_t::array: - { - // step 1: write control byte and the array size - const auto N = j.m_value.array->size(); - if (N <= 0x17) - { - write_number(static_cast(0x80 + N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x98)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x99)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x9A)); - write_number(static_cast(N)); - } - // LCOV_EXCL_START - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x9B)); - write_number(static_cast(N)); - } - // LCOV_EXCL_STOP - - // step 2: write each element - for (const auto& el : *j.m_value.array) - { - write_cbor(el); - } - break; - } - - case value_t::binary: - { - if (j.m_value.binary->has_subtype()) - { - write_number(static_cast(0xd8)); - write_number(j.m_value.binary->subtype()); - } - - // step 1: write control byte and the binary array size - const auto N = j.m_value.binary->size(); - if (N <= 0x17) - { - write_number(static_cast(0x40 + N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x58)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x59)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x5A)); - write_number(static_cast(N)); - } - // LCOV_EXCL_START - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0x5B)); - write_number(static_cast(N)); - } - // LCOV_EXCL_STOP - - // step 2: write each element - oa->write_characters( - reinterpret_cast(j.m_value.binary->data()), - N); - - break; - } - - case value_t::object: - { - // step 1: write control byte and the object size - const auto N = j.m_value.object->size(); - if (N <= 0x17) - { - write_number(static_cast(0xA0 + N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0xB8)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0xB9)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0xBA)); - write_number(static_cast(N)); - } - // LCOV_EXCL_START - else if (N <= (std::numeric_limits::max)()) - { - oa->write_character(to_char_type(0xBB)); - write_number(static_cast(N)); - } - // LCOV_EXCL_STOP - - // step 2: write each element - for (const auto& el : *j.m_value.object) - { - write_cbor(el.first); - write_cbor(el.second); - } - break; - } - - default: - break; - } - } - - /*! - @param[in] j JSON value to serialize - */ - void write_msgpack(const BasicJsonType& j) - { - switch (j.type()) - { - case value_t::null: // nil - { - oa->write_character(to_char_type(0xC0)); - break; - } - - case value_t::boolean: // true and false - { - oa->write_character(j.m_value.boolean - ? to_char_type(0xC3) - : to_char_type(0xC2)); - break; - } - - case value_t::number_integer: - { - if (j.m_value.number_integer >= 0) - { - // MessagePack does not differentiate between positive - // signed integers and unsigned integers. Therefore, we used - // the code from the value_t::number_unsigned case here. - if (j.m_value.number_unsigned < 128) - { - // positive fixnum - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - // uint 8 - oa->write_character(to_char_type(0xCC)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - // uint 16 - oa->write_character(to_char_type(0xCD)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - // uint 32 - oa->write_character(to_char_type(0xCE)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - // uint 64 - oa->write_character(to_char_type(0xCF)); - write_number(static_cast(j.m_value.number_integer)); - } - } - else - { - if (j.m_value.number_integer >= -32) - { - // negative fixnum - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_integer >= (std::numeric_limits::min)() && - j.m_value.number_integer <= (std::numeric_limits::max)()) - { - // int 8 - oa->write_character(to_char_type(0xD0)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_integer >= (std::numeric_limits::min)() && - j.m_value.number_integer <= (std::numeric_limits::max)()) - { - // int 16 - oa->write_character(to_char_type(0xD1)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_integer >= (std::numeric_limits::min)() && - j.m_value.number_integer <= (std::numeric_limits::max)()) - { - // int 32 - oa->write_character(to_char_type(0xD2)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_integer >= (std::numeric_limits::min)() && - j.m_value.number_integer <= (std::numeric_limits::max)()) - { - // int 64 - oa->write_character(to_char_type(0xD3)); - write_number(static_cast(j.m_value.number_integer)); - } - } - break; - } - - case value_t::number_unsigned: - { - if (j.m_value.number_unsigned < 128) - { - // positive fixnum - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - // uint 8 - oa->write_character(to_char_type(0xCC)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - // uint 16 - oa->write_character(to_char_type(0xCD)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - // uint 32 - oa->write_character(to_char_type(0xCE)); - write_number(static_cast(j.m_value.number_integer)); - } - else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) - { - // uint 64 - oa->write_character(to_char_type(0xCF)); - write_number(static_cast(j.m_value.number_integer)); - } - break; - } - - case value_t::number_float: - { - write_compact_float(j.m_value.number_float, detail::input_format_t::msgpack); - break; - } - - case value_t::string: - { - // step 1: write control byte and the string length - const auto N = j.m_value.string->size(); - if (N <= 31) - { - // fixstr - write_number(static_cast(0xA0 | N)); - } - else if (N <= (std::numeric_limits::max)()) - { - // str 8 - oa->write_character(to_char_type(0xD9)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - // str 16 - oa->write_character(to_char_type(0xDA)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - // str 32 - oa->write_character(to_char_type(0xDB)); - write_number(static_cast(N)); - } - - // step 2: write the string - oa->write_characters( - reinterpret_cast(j.m_value.string->c_str()), - j.m_value.string->size()); - break; - } - - case value_t::array: - { - // step 1: write control byte and the array size - const auto N = j.m_value.array->size(); - if (N <= 15) - { - // fixarray - write_number(static_cast(0x90 | N)); - } - else if (N <= (std::numeric_limits::max)()) - { - // array 16 - oa->write_character(to_char_type(0xDC)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - // array 32 - oa->write_character(to_char_type(0xDD)); - write_number(static_cast(N)); - } - - // step 2: write each element - for (const auto& el : *j.m_value.array) - { - write_msgpack(el); - } - break; - } - - case value_t::binary: - { - // step 0: determine if the binary type has a set subtype to - // determine whether or not to use the ext or fixext types - const bool use_ext = j.m_value.binary->has_subtype(); - - // step 1: write control byte and the byte string length - const auto N = j.m_value.binary->size(); - if (N <= (std::numeric_limits::max)()) - { - std::uint8_t output_type{}; - bool fixed = true; - if (use_ext) - { - switch (N) - { - case 1: - output_type = 0xD4; // fixext 1 - break; - case 2: - output_type = 0xD5; // fixext 2 - break; - case 4: - output_type = 0xD6; // fixext 4 - break; - case 8: - output_type = 0xD7; // fixext 8 - break; - case 16: - output_type = 0xD8; // fixext 16 - break; - default: - output_type = 0xC7; // ext 8 - fixed = false; - break; - } - - } - else - { - output_type = 0xC4; // bin 8 - fixed = false; - } - - oa->write_character(to_char_type(output_type)); - if (!fixed) - { - write_number(static_cast(N)); - } - } - else if (N <= (std::numeric_limits::max)()) - { - std::uint8_t output_type = use_ext - ? 0xC8 // ext 16 - : 0xC5; // bin 16 - - oa->write_character(to_char_type(output_type)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - std::uint8_t output_type = use_ext - ? 0xC9 // ext 32 - : 0xC6; // bin 32 - - oa->write_character(to_char_type(output_type)); - write_number(static_cast(N)); - } - - // step 1.5: if this is an ext type, write the subtype - if (use_ext) - { - write_number(static_cast(j.m_value.binary->subtype())); - } - - // step 2: write the byte string - oa->write_characters( - reinterpret_cast(j.m_value.binary->data()), - N); - - break; - } - - case value_t::object: - { - // step 1: write control byte and the object size - const auto N = j.m_value.object->size(); - if (N <= 15) - { - // fixmap - write_number(static_cast(0x80 | (N & 0xF))); - } - else if (N <= (std::numeric_limits::max)()) - { - // map 16 - oa->write_character(to_char_type(0xDE)); - write_number(static_cast(N)); - } - else if (N <= (std::numeric_limits::max)()) - { - // map 32 - oa->write_character(to_char_type(0xDF)); - write_number(static_cast(N)); - } - - // step 2: write each element - for (const auto& el : *j.m_value.object) - { - write_msgpack(el.first); - write_msgpack(el.second); - } - break; - } - - default: - break; - } - } - - /*! - @param[in] j JSON value to serialize - @param[in] use_count whether to use '#' prefixes (optimized format) - @param[in] use_type whether to use '$' prefixes (optimized format) - @param[in] add_prefix whether prefixes need to be used for this value - */ - void write_ubjson(const BasicJsonType& j, const bool use_count, - const bool use_type, const bool add_prefix = true) - { - switch (j.type()) - { - case value_t::null: - { - if (add_prefix) - { - oa->write_character(to_char_type('Z')); - } - break; - } - - case value_t::boolean: - { - if (add_prefix) - { - oa->write_character(j.m_value.boolean - ? to_char_type('T') - : to_char_type('F')); - } - break; - } - - case value_t::number_integer: - { - write_number_with_ubjson_prefix(j.m_value.number_integer, add_prefix); - break; - } - - case value_t::number_unsigned: - { - write_number_with_ubjson_prefix(j.m_value.number_unsigned, add_prefix); - break; - } - - case value_t::number_float: - { - write_number_with_ubjson_prefix(j.m_value.number_float, add_prefix); - break; - } - - case value_t::string: - { - if (add_prefix) - { - oa->write_character(to_char_type('S')); - } - write_number_with_ubjson_prefix(j.m_value.string->size(), true); - oa->write_characters( - reinterpret_cast(j.m_value.string->c_str()), - j.m_value.string->size()); - break; - } - - case value_t::array: - { - if (add_prefix) - { - oa->write_character(to_char_type('[')); - } - - bool prefix_required = true; - if (use_type && !j.m_value.array->empty()) - { - JSON_ASSERT(use_count); - const CharType first_prefix = ubjson_prefix(j.front()); - const bool same_prefix = std::all_of(j.begin() + 1, j.end(), - [this, first_prefix](const BasicJsonType & v) - { - return ubjson_prefix(v) == first_prefix; - }); - - if (same_prefix) - { - prefix_required = false; - oa->write_character(to_char_type('$')); - oa->write_character(first_prefix); - } - } - - if (use_count) - { - oa->write_character(to_char_type('#')); - write_number_with_ubjson_prefix(j.m_value.array->size(), true); - } - - for (const auto& el : *j.m_value.array) - { - write_ubjson(el, use_count, use_type, prefix_required); - } - - if (!use_count) - { - oa->write_character(to_char_type(']')); - } - - break; - } - - case value_t::binary: - { - if (add_prefix) - { - oa->write_character(to_char_type('[')); - } - - if (use_type && !j.m_value.binary->empty()) - { - JSON_ASSERT(use_count); - oa->write_character(to_char_type('$')); - oa->write_character('U'); - } - - if (use_count) - { - oa->write_character(to_char_type('#')); - write_number_with_ubjson_prefix(j.m_value.binary->size(), true); - } - - if (use_type) - { - oa->write_characters( - reinterpret_cast(j.m_value.binary->data()), - j.m_value.binary->size()); - } - else - { - for (size_t i = 0; i < j.m_value.binary->size(); ++i) - { - oa->write_character(to_char_type('U')); - oa->write_character(j.m_value.binary->data()[i]); - } - } - - if (!use_count) - { - oa->write_character(to_char_type(']')); - } - - break; - } - - case value_t::object: - { - if (add_prefix) - { - oa->write_character(to_char_type('{')); - } - - bool prefix_required = true; - if (use_type && !j.m_value.object->empty()) - { - JSON_ASSERT(use_count); - const CharType first_prefix = ubjson_prefix(j.front()); - const bool same_prefix = std::all_of(j.begin(), j.end(), - [this, first_prefix](const BasicJsonType & v) - { - return ubjson_prefix(v) == first_prefix; - }); - - if (same_prefix) - { - prefix_required = false; - oa->write_character(to_char_type('$')); - oa->write_character(first_prefix); - } - } - - if (use_count) - { - oa->write_character(to_char_type('#')); - write_number_with_ubjson_prefix(j.m_value.object->size(), true); - } - - for (const auto& el : *j.m_value.object) - { - write_number_with_ubjson_prefix(el.first.size(), true); - oa->write_characters( - reinterpret_cast(el.first.c_str()), - el.first.size()); - write_ubjson(el.second, use_count, use_type, prefix_required); - } - - if (!use_count) - { - oa->write_character(to_char_type('}')); - } - - break; - } - - default: - break; - } - } - - private: - ////////// - // BSON // - ////////// - - /*! - @return The size of a BSON document entry header, including the id marker - and the entry name size (and its null-terminator). - */ - static std::size_t calc_bson_entry_header_size(const string_t& name) - { - const auto it = name.find(static_cast(0)); - if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos)) - { - JSON_THROW(out_of_range::create(409, - "BSON key cannot contain code point U+0000 (at byte " + std::to_string(it) + ")")); - } - - return /*id*/ 1ul + name.size() + /*zero-terminator*/1u; - } - - /*! - @brief Writes the given @a element_type and @a name to the output adapter - */ - void write_bson_entry_header(const string_t& name, - const std::uint8_t element_type) - { - oa->write_character(to_char_type(element_type)); // boolean - oa->write_characters( - reinterpret_cast(name.c_str()), - name.size() + 1u); - } - - /*! - @brief Writes a BSON element with key @a name and boolean value @a value - */ - void write_bson_boolean(const string_t& name, - const bool value) - { - write_bson_entry_header(name, 0x08); - oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00)); - } - - /*! - @brief Writes a BSON element with key @a name and double value @a value - */ - void write_bson_double(const string_t& name, - const double value) - { - write_bson_entry_header(name, 0x01); - write_number(value); - } - - /*! - @return The size of the BSON-encoded string in @a value - */ - static std::size_t calc_bson_string_size(const string_t& value) - { - return sizeof(std::int32_t) + value.size() + 1ul; - } - - /*! - @brief Writes a BSON element with key @a name and string value @a value - */ - void write_bson_string(const string_t& name, - const string_t& value) - { - write_bson_entry_header(name, 0x02); - - write_number(static_cast(value.size() + 1ul)); - oa->write_characters( - reinterpret_cast(value.c_str()), - value.size() + 1); - } - - /*! - @brief Writes a BSON element with key @a name and null value - */ - void write_bson_null(const string_t& name) - { - write_bson_entry_header(name, 0x0A); - } - - /*! - @return The size of the BSON-encoded integer @a value - */ - static std::size_t calc_bson_integer_size(const std::int64_t value) - { - return (std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)() - ? sizeof(std::int32_t) - : sizeof(std::int64_t); - } - - /*! - @brief Writes a BSON element with key @a name and integer @a value - */ - void write_bson_integer(const string_t& name, - const std::int64_t value) - { - if ((std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)()) - { - write_bson_entry_header(name, 0x10); // int32 - write_number(static_cast(value)); - } - else - { - write_bson_entry_header(name, 0x12); // int64 - write_number(static_cast(value)); - } - } - - /*! - @return The size of the BSON-encoded unsigned integer in @a j - */ - static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept - { - return (value <= static_cast((std::numeric_limits::max)())) - ? sizeof(std::int32_t) - : sizeof(std::int64_t); - } - - /*! - @brief Writes a BSON element with key @a name and unsigned @a value - */ - void write_bson_unsigned(const string_t& name, - const std::uint64_t value) - { - if (value <= static_cast((std::numeric_limits::max)())) - { - write_bson_entry_header(name, 0x10 /* int32 */); - write_number(static_cast(value)); - } - else if (value <= static_cast((std::numeric_limits::max)())) - { - write_bson_entry_header(name, 0x12 /* int64 */); - write_number(static_cast(value)); - } - else - { - JSON_THROW(out_of_range::create(407, "integer number " + std::to_string(value) + " cannot be represented by BSON as it does not fit int64")); - } - } - - /*! - @brief Writes a BSON element with key @a name and object @a value - */ - void write_bson_object_entry(const string_t& name, - const typename BasicJsonType::object_t& value) - { - write_bson_entry_header(name, 0x03); // object - write_bson_object(value); - } - - /*! - @return The size of the BSON-encoded array @a value - */ - static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value) - { - std::size_t array_index = 0ul; - - const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), std::size_t(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el) - { - return result + calc_bson_element_size(std::to_string(array_index++), el); - }); - - return sizeof(std::int32_t) + embedded_document_size + 1ul; - } - - /*! - @return The size of the BSON-encoded binary array @a value - */ - static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value) - { - return sizeof(std::int32_t) + value.size() + 1ul; - } - - /*! - @brief Writes a BSON element with key @a name and array @a value - */ - void write_bson_array(const string_t& name, - const typename BasicJsonType::array_t& value) - { - write_bson_entry_header(name, 0x04); // array - write_number(static_cast(calc_bson_array_size(value))); - - std::size_t array_index = 0ul; - - for (const auto& el : value) - { - write_bson_element(std::to_string(array_index++), el); - } - - oa->write_character(to_char_type(0x00)); - } - - /*! - @brief Writes a BSON element with key @a name and binary value @a value - */ - void write_bson_binary(const string_t& name, - const binary_t& value) - { - write_bson_entry_header(name, 0x05); - - write_number(static_cast(value.size())); - write_number(value.has_subtype() ? value.subtype() : std::uint8_t(0x00)); - - oa->write_characters(reinterpret_cast(value.data()), value.size()); - } - - /*! - @brief Calculates the size necessary to serialize the JSON value @a j with its @a name - @return The calculated size for the BSON document entry for @a j with the given @a name. - */ - static std::size_t calc_bson_element_size(const string_t& name, - const BasicJsonType& j) - { - const auto header_size = calc_bson_entry_header_size(name); - switch (j.type()) - { - case value_t::object: - return header_size + calc_bson_object_size(*j.m_value.object); - - case value_t::array: - return header_size + calc_bson_array_size(*j.m_value.array); - - case value_t::binary: - return header_size + calc_bson_binary_size(*j.m_value.binary); - - case value_t::boolean: - return header_size + 1ul; - - case value_t::number_float: - return header_size + 8ul; - - case value_t::number_integer: - return header_size + calc_bson_integer_size(j.m_value.number_integer); - - case value_t::number_unsigned: - return header_size + calc_bson_unsigned_size(j.m_value.number_unsigned); - - case value_t::string: - return header_size + calc_bson_string_size(*j.m_value.string); - - case value_t::null: - return header_size + 0ul; - - // LCOV_EXCL_START - default: - JSON_ASSERT(false); - return 0ul; - // LCOV_EXCL_STOP - } - } - - /*! - @brief Serializes the JSON value @a j to BSON and associates it with the - key @a name. - @param name The name to associate with the JSON entity @a j within the - current BSON document - @return The size of the BSON entry - */ - void write_bson_element(const string_t& name, - const BasicJsonType& j) - { - switch (j.type()) - { - case value_t::object: - return write_bson_object_entry(name, *j.m_value.object); - - case value_t::array: - return write_bson_array(name, *j.m_value.array); - - case value_t::binary: - return write_bson_binary(name, *j.m_value.binary); - - case value_t::boolean: - return write_bson_boolean(name, j.m_value.boolean); - - case value_t::number_float: - return write_bson_double(name, j.m_value.number_float); - - case value_t::number_integer: - return write_bson_integer(name, j.m_value.number_integer); - - case value_t::number_unsigned: - return write_bson_unsigned(name, j.m_value.number_unsigned); - - case value_t::string: - return write_bson_string(name, *j.m_value.string); - - case value_t::null: - return write_bson_null(name); - - // LCOV_EXCL_START - default: - JSON_ASSERT(false); - return; - // LCOV_EXCL_STOP - } - } - - /*! - @brief Calculates the size of the BSON serialization of the given - JSON-object @a j. - @param[in] j JSON value to serialize - @pre j.type() == value_t::object - */ - static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value) - { - std::size_t document_size = std::accumulate(value.begin(), value.end(), std::size_t(0), - [](size_t result, const typename BasicJsonType::object_t::value_type & el) - { - return result += calc_bson_element_size(el.first, el.second); - }); - - return sizeof(std::int32_t) + document_size + 1ul; - } - - /*! - @param[in] j JSON value to serialize - @pre j.type() == value_t::object - */ - void write_bson_object(const typename BasicJsonType::object_t& value) - { - write_number(static_cast(calc_bson_object_size(value))); - - for (const auto& el : value) - { - write_bson_element(el.first, el.second); - } - - oa->write_character(to_char_type(0x00)); - } - - ////////// - // CBOR // - ////////// - - static constexpr CharType get_cbor_float_prefix(float /*unused*/) - { - return to_char_type(0xFA); // Single-Precision Float - } - - static constexpr CharType get_cbor_float_prefix(double /*unused*/) - { - return to_char_type(0xFB); // Double-Precision Float - } - - ///////////// - // MsgPack // - ///////////// - - static constexpr CharType get_msgpack_float_prefix(float /*unused*/) - { - return to_char_type(0xCA); // float 32 - } - - static constexpr CharType get_msgpack_float_prefix(double /*unused*/) - { - return to_char_type(0xCB); // float 64 - } - - //////////// - // UBJSON // - //////////// - - // UBJSON: write number (floating point) - template::value, int>::type = 0> - void write_number_with_ubjson_prefix(const NumberType n, - const bool add_prefix) - { - if (add_prefix) - { - oa->write_character(get_ubjson_float_prefix(n)); - } - write_number(n); - } - - // UBJSON: write number (unsigned integer) - template::value, int>::type = 0> - void write_number_with_ubjson_prefix(const NumberType n, - const bool add_prefix) - { - if (n <= static_cast((std::numeric_limits::max)())) - { - if (add_prefix) - { - oa->write_character(to_char_type('i')); // int8 - } - write_number(static_cast(n)); - } - else if (n <= (std::numeric_limits::max)()) - { - if (add_prefix) - { - oa->write_character(to_char_type('U')); // uint8 - } - write_number(static_cast(n)); - } - else if (n <= static_cast((std::numeric_limits::max)())) - { - if (add_prefix) - { - oa->write_character(to_char_type('I')); // int16 - } - write_number(static_cast(n)); - } - else if (n <= static_cast((std::numeric_limits::max)())) - { - if (add_prefix) - { - oa->write_character(to_char_type('l')); // int32 - } - write_number(static_cast(n)); - } - else if (n <= static_cast((std::numeric_limits::max)())) - { - if (add_prefix) - { - oa->write_character(to_char_type('L')); // int64 - } - write_number(static_cast(n)); - } - else - { - if (add_prefix) - { - oa->write_character(to_char_type('H')); // high-precision number - } - - const auto number = BasicJsonType(n).dump(); - write_number_with_ubjson_prefix(number.size(), true); - for (std::size_t i = 0; i < number.size(); ++i) - { - oa->write_character(to_char_type(static_cast(number[i]))); - } - } - } - - // UBJSON: write number (signed integer) - template < typename NumberType, typename std::enable_if < - std::is_signed::value&& - !std::is_floating_point::value, int >::type = 0 > - void write_number_with_ubjson_prefix(const NumberType n, - const bool add_prefix) - { - if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) - { - if (add_prefix) - { - oa->write_character(to_char_type('i')); // int8 - } - write_number(static_cast(n)); - } - else if (static_cast((std::numeric_limits::min)()) <= n && n <= static_cast((std::numeric_limits::max)())) - { - if (add_prefix) - { - oa->write_character(to_char_type('U')); // uint8 - } - write_number(static_cast(n)); - } - else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) - { - if (add_prefix) - { - oa->write_character(to_char_type('I')); // int16 - } - write_number(static_cast(n)); - } - else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) - { - if (add_prefix) - { - oa->write_character(to_char_type('l')); // int32 - } - write_number(static_cast(n)); - } - else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) - { - if (add_prefix) - { - oa->write_character(to_char_type('L')); // int64 - } - write_number(static_cast(n)); - } - // LCOV_EXCL_START - else - { - if (add_prefix) - { - oa->write_character(to_char_type('H')); // high-precision number - } - - const auto number = BasicJsonType(n).dump(); - write_number_with_ubjson_prefix(number.size(), true); - for (std::size_t i = 0; i < number.size(); ++i) - { - oa->write_character(to_char_type(static_cast(number[i]))); - } - } - // LCOV_EXCL_STOP - } - - /*! - @brief determine the type prefix of container values - */ - CharType ubjson_prefix(const BasicJsonType& j) const noexcept - { - switch (j.type()) - { - case value_t::null: - return 'Z'; - - case value_t::boolean: - return j.m_value.boolean ? 'T' : 'F'; - - case value_t::number_integer: - { - if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) - { - return 'i'; - } - if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) - { - return 'U'; - } - if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) - { - return 'I'; - } - if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) - { - return 'l'; - } - if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) - { - return 'L'; - } - // anything else is treated as high-precision number - return 'H'; // LCOV_EXCL_LINE - } - - case value_t::number_unsigned: - { - if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) - { - return 'i'; - } - if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) - { - return 'U'; - } - if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) - { - return 'I'; - } - if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) - { - return 'l'; - } - if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) - { - return 'L'; - } - // anything else is treated as high-precision number - return 'H'; // LCOV_EXCL_LINE - } - - case value_t::number_float: - return get_ubjson_float_prefix(j.m_value.number_float); - - case value_t::string: - return 'S'; - - case value_t::array: // fallthrough - case value_t::binary: - return '['; - - case value_t::object: - return '{'; - - default: // discarded values - return 'N'; - } - } - - static constexpr CharType get_ubjson_float_prefix(float /*unused*/) - { - return 'd'; // float 32 - } - - static constexpr CharType get_ubjson_float_prefix(double /*unused*/) - { - return 'D'; // float 64 - } - - /////////////////////// - // Utility functions // - /////////////////////// - - /* - @brief write a number to output input - @param[in] n number of type @a NumberType - @tparam NumberType the type of the number - @tparam OutputIsLittleEndian Set to true if output data is - required to be little endian - - @note This function needs to respect the system's endianess, because bytes - in CBOR, MessagePack, and UBJSON are stored in network order (big - endian) and therefore need reordering on little endian systems. - */ - template - void write_number(const NumberType n) - { - // step 1: write number to array of length NumberType - std::array vec; - std::memcpy(vec.data(), &n, sizeof(NumberType)); - - // step 2: write array to output (with possible reordering) - if (is_little_endian != OutputIsLittleEndian) - { - // reverse byte order prior to conversion if necessary - std::reverse(vec.begin(), vec.end()); - } - - oa->write_characters(vec.data(), sizeof(NumberType)); - } - - void write_compact_float(const number_float_t n, detail::input_format_t format) - { - if (static_cast(n) >= static_cast(std::numeric_limits::lowest()) && - static_cast(n) <= static_cast((std::numeric_limits::max)()) && - static_cast(static_cast(n)) == static_cast(n)) - { - oa->write_character(format == detail::input_format_t::cbor - ? get_cbor_float_prefix(static_cast(n)) - : get_msgpack_float_prefix(static_cast(n))); - write_number(static_cast(n)); - } - else - { - oa->write_character(format == detail::input_format_t::cbor - ? get_cbor_float_prefix(n) - : get_msgpack_float_prefix(n)); - write_number(n); - } - } - - public: - // The following to_char_type functions are implement the conversion - // between uint8_t and CharType. In case CharType is not unsigned, - // such a conversion is required to allow values greater than 128. - // See for a discussion. - template < typename C = CharType, - enable_if_t < std::is_signed::value && std::is_signed::value > * = nullptr > - static constexpr CharType to_char_type(std::uint8_t x) noexcept - { - return *reinterpret_cast(&x); - } - - template < typename C = CharType, - enable_if_t < std::is_signed::value && std::is_unsigned::value > * = nullptr > - static CharType to_char_type(std::uint8_t x) noexcept - { - static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t"); - static_assert(std::is_trivial::value, "CharType must be trivial"); - CharType result; - std::memcpy(&result, &x, sizeof(x)); - return result; - } - - template::value>* = nullptr> - static constexpr CharType to_char_type(std::uint8_t x) noexcept - { - return x; - } - - template < typename InputCharType, typename C = CharType, - enable_if_t < - std::is_signed::value && - std::is_signed::value && - std::is_same::type>::value - > * = nullptr > - static constexpr CharType to_char_type(InputCharType x) noexcept - { - return x; - } - - private: - /// whether we can assume little endianess - const bool is_little_endian = little_endianess(); - - /// the output - output_adapter_t oa = nullptr; -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - - -#include // reverse, remove, fill, find, none_of -#include // array -#include // localeconv, lconv -#include // labs, isfinite, isnan, signbit -#include // size_t, ptrdiff_t -#include // uint8_t -#include // snprintf -#include // numeric_limits -#include // string, char_traits -#include // is_same -#include // move - -// #include - - -#include // array -#include // signbit, isfinite -#include // intN_t, uintN_t -#include // memcpy, memmove -#include // numeric_limits -#include // conditional - -// #include - - -namespace nlohmann -{ -namespace detail -{ - -/*! -@brief implements the Grisu2 algorithm for binary to decimal floating-point -conversion. - -This implementation is a slightly modified version of the reference -implementation which may be obtained from -http://florian.loitsch.com/publications (bench.tar.gz). - -The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. - -For a detailed description of the algorithm see: - -[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with - Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming - Language Design and Implementation, PLDI 2010 -[2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", - Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language - Design and Implementation, PLDI 1996 -*/ -namespace dtoa_impl -{ - -template -Target reinterpret_bits(const Source source) -{ - static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); - - Target target; - std::memcpy(&target, &source, sizeof(Source)); - return target; -} - -struct diyfp // f * 2^e -{ - static constexpr int kPrecision = 64; // = q - - std::uint64_t f = 0; - int e = 0; - - constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} - - /*! - @brief returns x - y - @pre x.e == y.e and x.f >= y.f - */ - static diyfp sub(const diyfp& x, const diyfp& y) noexcept - { - JSON_ASSERT(x.e == y.e); - JSON_ASSERT(x.f >= y.f); - - return {x.f - y.f, x.e}; - } - - /*! - @brief returns x * y - @note The result is rounded. (Only the upper q bits are returned.) - */ - static diyfp mul(const diyfp& x, const diyfp& y) noexcept - { - static_assert(kPrecision == 64, "internal error"); - - // Computes: - // f = round((x.f * y.f) / 2^q) - // e = x.e + y.e + q - - // Emulate the 64-bit * 64-bit multiplication: - // - // p = u * v - // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) - // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) - // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) - // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) - // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) - // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) - // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) - // - // (Since Q might be larger than 2^32 - 1) - // - // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) - // - // (Q_hi + H does not overflow a 64-bit int) - // - // = p_lo + 2^64 p_hi - - const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; - const std::uint64_t u_hi = x.f >> 32u; - const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; - const std::uint64_t v_hi = y.f >> 32u; - - const std::uint64_t p0 = u_lo * v_lo; - const std::uint64_t p1 = u_lo * v_hi; - const std::uint64_t p2 = u_hi * v_lo; - const std::uint64_t p3 = u_hi * v_hi; - - const std::uint64_t p0_hi = p0 >> 32u; - const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; - const std::uint64_t p1_hi = p1 >> 32u; - const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; - const std::uint64_t p2_hi = p2 >> 32u; - - std::uint64_t Q = p0_hi + p1_lo + p2_lo; - - // The full product might now be computed as - // - // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) - // p_lo = p0_lo + (Q << 32) - // - // But in this particular case here, the full p_lo is not required. - // Effectively we only need to add the highest bit in p_lo to p_hi (and - // Q_hi + 1 does not overflow). - - Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up - - const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); - - return {h, x.e + y.e + 64}; - } - - /*! - @brief normalize x such that the significand is >= 2^(q-1) - @pre x.f != 0 - */ - static diyfp normalize(diyfp x) noexcept - { - JSON_ASSERT(x.f != 0); - - while ((x.f >> 63u) == 0) - { - x.f <<= 1u; - x.e--; - } - - return x; - } - - /*! - @brief normalize x such that the result has the exponent E - @pre e >= x.e and the upper e - x.e bits of x.f must be zero. - */ - static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept - { - const int delta = x.e - target_exponent; - - JSON_ASSERT(delta >= 0); - JSON_ASSERT(((x.f << delta) >> delta) == x.f); - - return {x.f << delta, target_exponent}; - } -}; - -struct boundaries -{ - diyfp w; - diyfp minus; - diyfp plus; -}; - -/*! -Compute the (normalized) diyfp representing the input number 'value' and its -boundaries. - -@pre value must be finite and positive -*/ -template -boundaries compute_boundaries(FloatType value) -{ - JSON_ASSERT(std::isfinite(value)); - JSON_ASSERT(value > 0); - - // Convert the IEEE representation into a diyfp. - // - // If v is denormal: - // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) - // If v is normalized: - // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) - - static_assert(std::numeric_limits::is_iec559, - "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); - - constexpr int kPrecision = std::numeric_limits::digits; // = p (includes the hidden bit) - constexpr int kBias = std::numeric_limits::max_exponent - 1 + (kPrecision - 1); - constexpr int kMinExp = 1 - kBias; - constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) - - using bits_type = typename std::conditional::type; - - const std::uint64_t bits = reinterpret_bits(value); - const std::uint64_t E = bits >> (kPrecision - 1); - const std::uint64_t F = bits & (kHiddenBit - 1); - - const bool is_denormal = E == 0; - const diyfp v = is_denormal - ? diyfp(F, kMinExp) - : diyfp(F + kHiddenBit, static_cast(E) - kBias); - - // Compute the boundaries m- and m+ of the floating-point value - // v = f * 2^e. - // - // Determine v- and v+, the floating-point predecessor and successor if v, - // respectively. - // - // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) - // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) - // - // v+ = v + 2^e - // - // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ - // between m- and m+ round to v, regardless of how the input rounding - // algorithm breaks ties. - // - // ---+-------------+-------------+-------------+-------------+--- (A) - // v- m- v m+ v+ - // - // -----------------+------+------+-------------+-------------+--- (B) - // v- m- v m+ v+ - - const bool lower_boundary_is_closer = F == 0 && E > 1; - const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1); - const diyfp m_minus = lower_boundary_is_closer - ? diyfp(4 * v.f - 1, v.e - 2) // (B) - : diyfp(2 * v.f - 1, v.e - 1); // (A) - - // Determine the normalized w+ = m+. - const diyfp w_plus = diyfp::normalize(m_plus); - - // Determine w- = m- such that e_(w-) = e_(w+). - const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); - - return {diyfp::normalize(v), w_minus, w_plus}; -} - -// Given normalized diyfp w, Grisu needs to find a (normalized) cached -// power-of-ten c, such that the exponent of the product c * w = f * 2^e lies -// within a certain range [alpha, gamma] (Definition 3.2 from [1]) -// -// alpha <= e = e_c + e_w + q <= gamma -// -// or -// -// f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q -// <= f_c * f_w * 2^gamma -// -// Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies -// -// 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma -// -// or -// -// 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) -// -// The choice of (alpha,gamma) determines the size of the table and the form of -// the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well -// in practice: -// -// The idea is to cut the number c * w = f * 2^e into two parts, which can be -// processed independently: An integral part p1, and a fractional part p2: -// -// f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e -// = (f div 2^-e) + (f mod 2^-e) * 2^e -// = p1 + p2 * 2^e -// -// The conversion of p1 into decimal form requires a series of divisions and -// modulos by (a power of) 10. These operations are faster for 32-bit than for -// 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be -// achieved by choosing -// -// -e >= 32 or e <= -32 := gamma -// -// In order to convert the fractional part -// -// p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... -// -// into decimal form, the fraction is repeatedly multiplied by 10 and the digits -// d[-i] are extracted in order: -// -// (10 * p2) div 2^-e = d[-1] -// (10 * p2) mod 2^-e = d[-2] / 10^1 + ... -// -// The multiplication by 10 must not overflow. It is sufficient to choose -// -// 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. -// -// Since p2 = f mod 2^-e < 2^-e, -// -// -e <= 60 or e >= -60 := alpha - -constexpr int kAlpha = -60; -constexpr int kGamma = -32; - -struct cached_power // c = f * 2^e ~= 10^k -{ - std::uint64_t f; - int e; - int k; -}; - -/*! -For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached -power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c -satisfies (Definition 3.2 from [1]) - - alpha <= e_c + e + q <= gamma. -*/ -inline cached_power get_cached_power_for_binary_exponent(int e) -{ - // Now - // - // alpha <= e_c + e + q <= gamma (1) - // ==> f_c * 2^alpha <= c * 2^e * 2^q - // - // and since the c's are normalized, 2^(q-1) <= f_c, - // - // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) - // ==> 2^(alpha - e - 1) <= c - // - // If c were an exact power of ten, i.e. c = 10^k, one may determine k as - // - // k = ceil( log_10( 2^(alpha - e - 1) ) ) - // = ceil( (alpha - e - 1) * log_10(2) ) - // - // From the paper: - // "In theory the result of the procedure could be wrong since c is rounded, - // and the computation itself is approximated [...]. In practice, however, - // this simple function is sufficient." - // - // For IEEE double precision floating-point numbers converted into - // normalized diyfp's w = f * 2^e, with q = 64, - // - // e >= -1022 (min IEEE exponent) - // -52 (p - 1) - // -52 (p - 1, possibly normalize denormal IEEE numbers) - // -11 (normalize the diyfp) - // = -1137 - // - // and - // - // e <= +1023 (max IEEE exponent) - // -52 (p - 1) - // -11 (normalize the diyfp) - // = 960 - // - // This binary exponent range [-1137,960] results in a decimal exponent - // range [-307,324]. One does not need to store a cached power for each - // k in this range. For each such k it suffices to find a cached power - // such that the exponent of the product lies in [alpha,gamma]. - // This implies that the difference of the decimal exponents of adjacent - // table entries must be less than or equal to - // - // floor( (gamma - alpha) * log_10(2) ) = 8. - // - // (A smaller distance gamma-alpha would require a larger table.) - - // NB: - // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. - - constexpr int kCachedPowersMinDecExp = -300; - constexpr int kCachedPowersDecStep = 8; - - static constexpr std::array kCachedPowers = - { - { - { 0xAB70FE17C79AC6CA, -1060, -300 }, - { 0xFF77B1FCBEBCDC4F, -1034, -292 }, - { 0xBE5691EF416BD60C, -1007, -284 }, - { 0x8DD01FAD907FFC3C, -980, -276 }, - { 0xD3515C2831559A83, -954, -268 }, - { 0x9D71AC8FADA6C9B5, -927, -260 }, - { 0xEA9C227723EE8BCB, -901, -252 }, - { 0xAECC49914078536D, -874, -244 }, - { 0x823C12795DB6CE57, -847, -236 }, - { 0xC21094364DFB5637, -821, -228 }, - { 0x9096EA6F3848984F, -794, -220 }, - { 0xD77485CB25823AC7, -768, -212 }, - { 0xA086CFCD97BF97F4, -741, -204 }, - { 0xEF340A98172AACE5, -715, -196 }, - { 0xB23867FB2A35B28E, -688, -188 }, - { 0x84C8D4DFD2C63F3B, -661, -180 }, - { 0xC5DD44271AD3CDBA, -635, -172 }, - { 0x936B9FCEBB25C996, -608, -164 }, - { 0xDBAC6C247D62A584, -582, -156 }, - { 0xA3AB66580D5FDAF6, -555, -148 }, - { 0xF3E2F893DEC3F126, -529, -140 }, - { 0xB5B5ADA8AAFF80B8, -502, -132 }, - { 0x87625F056C7C4A8B, -475, -124 }, - { 0xC9BCFF6034C13053, -449, -116 }, - { 0x964E858C91BA2655, -422, -108 }, - { 0xDFF9772470297EBD, -396, -100 }, - { 0xA6DFBD9FB8E5B88F, -369, -92 }, - { 0xF8A95FCF88747D94, -343, -84 }, - { 0xB94470938FA89BCF, -316, -76 }, - { 0x8A08F0F8BF0F156B, -289, -68 }, - { 0xCDB02555653131B6, -263, -60 }, - { 0x993FE2C6D07B7FAC, -236, -52 }, - { 0xE45C10C42A2B3B06, -210, -44 }, - { 0xAA242499697392D3, -183, -36 }, - { 0xFD87B5F28300CA0E, -157, -28 }, - { 0xBCE5086492111AEB, -130, -20 }, - { 0x8CBCCC096F5088CC, -103, -12 }, - { 0xD1B71758E219652C, -77, -4 }, - { 0x9C40000000000000, -50, 4 }, - { 0xE8D4A51000000000, -24, 12 }, - { 0xAD78EBC5AC620000, 3, 20 }, - { 0x813F3978F8940984, 30, 28 }, - { 0xC097CE7BC90715B3, 56, 36 }, - { 0x8F7E32CE7BEA5C70, 83, 44 }, - { 0xD5D238A4ABE98068, 109, 52 }, - { 0x9F4F2726179A2245, 136, 60 }, - { 0xED63A231D4C4FB27, 162, 68 }, - { 0xB0DE65388CC8ADA8, 189, 76 }, - { 0x83C7088E1AAB65DB, 216, 84 }, - { 0xC45D1DF942711D9A, 242, 92 }, - { 0x924D692CA61BE758, 269, 100 }, - { 0xDA01EE641A708DEA, 295, 108 }, - { 0xA26DA3999AEF774A, 322, 116 }, - { 0xF209787BB47D6B85, 348, 124 }, - { 0xB454E4A179DD1877, 375, 132 }, - { 0x865B86925B9BC5C2, 402, 140 }, - { 0xC83553C5C8965D3D, 428, 148 }, - { 0x952AB45CFA97A0B3, 455, 156 }, - { 0xDE469FBD99A05FE3, 481, 164 }, - { 0xA59BC234DB398C25, 508, 172 }, - { 0xF6C69A72A3989F5C, 534, 180 }, - { 0xB7DCBF5354E9BECE, 561, 188 }, - { 0x88FCF317F22241E2, 588, 196 }, - { 0xCC20CE9BD35C78A5, 614, 204 }, - { 0x98165AF37B2153DF, 641, 212 }, - { 0xE2A0B5DC971F303A, 667, 220 }, - { 0xA8D9D1535CE3B396, 694, 228 }, - { 0xFB9B7CD9A4A7443C, 720, 236 }, - { 0xBB764C4CA7A44410, 747, 244 }, - { 0x8BAB8EEFB6409C1A, 774, 252 }, - { 0xD01FEF10A657842C, 800, 260 }, - { 0x9B10A4E5E9913129, 827, 268 }, - { 0xE7109BFBA19C0C9D, 853, 276 }, - { 0xAC2820D9623BF429, 880, 284 }, - { 0x80444B5E7AA7CF85, 907, 292 }, - { 0xBF21E44003ACDD2D, 933, 300 }, - { 0x8E679C2F5E44FF8F, 960, 308 }, - { 0xD433179D9C8CB841, 986, 316 }, - { 0x9E19DB92B4E31BA9, 1013, 324 }, - } - }; - - // This computation gives exactly the same results for k as - // k = ceil((kAlpha - e - 1) * 0.30102999566398114) - // for |e| <= 1500, but doesn't require floating-point operations. - // NB: log_10(2) ~= 78913 / 2^18 - JSON_ASSERT(e >= -1500); - JSON_ASSERT(e <= 1500); - const int f = kAlpha - e - 1; - const int k = (f * 78913) / (1 << 18) + static_cast(f > 0); - - const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; - JSON_ASSERT(index >= 0); - JSON_ASSERT(static_cast(index) < kCachedPowers.size()); - - const cached_power cached = kCachedPowers[static_cast(index)]; - JSON_ASSERT(kAlpha <= cached.e + e + 64); - JSON_ASSERT(kGamma >= cached.e + e + 64); - - return cached; -} - -/*! -For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. -For n == 0, returns 1 and sets pow10 := 1. -*/ -inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) -{ - // LCOV_EXCL_START - if (n >= 1000000000) - { - pow10 = 1000000000; - return 10; - } - // LCOV_EXCL_STOP - else if (n >= 100000000) - { - pow10 = 100000000; - return 9; - } - else if (n >= 10000000) - { - pow10 = 10000000; - return 8; - } - else if (n >= 1000000) - { - pow10 = 1000000; - return 7; - } - else if (n >= 100000) - { - pow10 = 100000; - return 6; - } - else if (n >= 10000) - { - pow10 = 10000; - return 5; - } - else if (n >= 1000) - { - pow10 = 1000; - return 4; - } - else if (n >= 100) - { - pow10 = 100; - return 3; - } - else if (n >= 10) - { - pow10 = 10; - return 2; - } - else - { - pow10 = 1; - return 1; - } -} - -inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, - std::uint64_t rest, std::uint64_t ten_k) -{ - JSON_ASSERT(len >= 1); - JSON_ASSERT(dist <= delta); - JSON_ASSERT(rest <= delta); - JSON_ASSERT(ten_k > 0); - - // <--------------------------- delta ----> - // <---- dist ---------> - // --------------[------------------+-------------------]-------------- - // M- w M+ - // - // ten_k - // <------> - // <---- rest ----> - // --------------[------------------+----+--------------]-------------- - // w V - // = buf * 10^k - // - // ten_k represents a unit-in-the-last-place in the decimal representation - // stored in buf. - // Decrement buf by ten_k while this takes buf closer to w. - - // The tests are written in this order to avoid overflow in unsigned - // integer arithmetic. - - while (rest < dist - && delta - rest >= ten_k - && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) - { - JSON_ASSERT(buf[len - 1] != '0'); - buf[len - 1]--; - rest += ten_k; - } -} - -/*! -Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. -M- and M+ must be normalized and share the same exponent -60 <= e <= -32. -*/ -inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, - diyfp M_minus, diyfp w, diyfp M_plus) -{ - static_assert(kAlpha >= -60, "internal error"); - static_assert(kGamma <= -32, "internal error"); - - // Generates the digits (and the exponent) of a decimal floating-point - // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's - // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. - // - // <--------------------------- delta ----> - // <---- dist ---------> - // --------------[------------------+-------------------]-------------- - // M- w M+ - // - // Grisu2 generates the digits of M+ from left to right and stops as soon as - // V is in [M-,M+]. - - JSON_ASSERT(M_plus.e >= kAlpha); - JSON_ASSERT(M_plus.e <= kGamma); - - std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) - std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) - - // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): - // - // M+ = f * 2^e - // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e - // = ((p1 ) * 2^-e + (p2 )) * 2^e - // = p1 + p2 * 2^e - - const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); - - auto p1 = static_cast(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) - std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e - - // 1) - // - // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] - - JSON_ASSERT(p1 > 0); - - std::uint32_t pow10; - const int k = find_largest_pow10(p1, pow10); - - // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) - // - // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) - // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) - // - // M+ = p1 + p2 * 2^e - // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e - // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e - // = d[k-1] * 10^(k-1) + ( rest) * 2^e - // - // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) - // - // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] - // - // but stop as soon as - // - // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e - - int n = k; - while (n > 0) - { - // Invariants: - // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) - // pow10 = 10^(n-1) <= p1 < 10^n - // - const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) - const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) - // - // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e - // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) - // - JSON_ASSERT(d <= 9); - buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d - // - // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) - // - p1 = r; - n--; - // - // M+ = buffer * 10^n + (p1 + p2 * 2^e) - // pow10 = 10^n - // - - // Now check if enough digits have been generated. - // Compute - // - // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e - // - // Note: - // Since rest and delta share the same exponent e, it suffices to - // compare the significands. - const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; - if (rest <= delta) - { - // V = buffer * 10^n, with M- <= V <= M+. - - decimal_exponent += n; - - // We may now just stop. But instead look if the buffer could be - // decremented to bring V closer to w. - // - // pow10 = 10^n is now 1 ulp in the decimal representation V. - // The rounding procedure works with diyfp's with an implicit - // exponent of e. - // - // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e - // - const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; - grisu2_round(buffer, length, dist, delta, rest, ten_n); - - return; - } - - pow10 /= 10; - // - // pow10 = 10^(n-1) <= p1 < 10^n - // Invariants restored. - } - - // 2) - // - // The digits of the integral part have been generated: - // - // M+ = d[k-1]...d[1]d[0] + p2 * 2^e - // = buffer + p2 * 2^e - // - // Now generate the digits of the fractional part p2 * 2^e. - // - // Note: - // No decimal point is generated: the exponent is adjusted instead. - // - // p2 actually represents the fraction - // - // p2 * 2^e - // = p2 / 2^-e - // = d[-1] / 10^1 + d[-2] / 10^2 + ... - // - // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) - // - // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m - // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) - // - // using - // - // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) - // = ( d) * 2^-e + ( r) - // - // or - // 10^m * p2 * 2^e = d + r * 2^e - // - // i.e. - // - // M+ = buffer + p2 * 2^e - // = buffer + 10^-m * (d + r * 2^e) - // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e - // - // and stop as soon as 10^-m * r * 2^e <= delta * 2^e - - JSON_ASSERT(p2 > delta); - - int m = 0; - for (;;) - { - // Invariant: - // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e - // = buffer * 10^-m + 10^-m * (p2 ) * 2^e - // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e - // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e - // - JSON_ASSERT(p2 <= (std::numeric_limits::max)() / 10); - p2 *= 10; - const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e - const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e - // - // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e - // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) - // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e - // - JSON_ASSERT(d <= 9); - buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d - // - // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e - // - p2 = r; - m++; - // - // M+ = buffer * 10^-m + 10^-m * p2 * 2^e - // Invariant restored. - - // Check if enough digits have been generated. - // - // 10^-m * p2 * 2^e <= delta * 2^e - // p2 * 2^e <= 10^m * delta * 2^e - // p2 <= 10^m * delta - delta *= 10; - dist *= 10; - if (p2 <= delta) - { - break; - } - } - - // V = buffer * 10^-m, with M- <= V <= M+. - - decimal_exponent -= m; - - // 1 ulp in the decimal representation is now 10^-m. - // Since delta and dist are now scaled by 10^m, we need to do the - // same with ulp in order to keep the units in sync. - // - // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e - // - const std::uint64_t ten_m = one.f; - grisu2_round(buffer, length, dist, delta, p2, ten_m); - - // By construction this algorithm generates the shortest possible decimal - // number (Loitsch, Theorem 6.2) which rounds back to w. - // For an input number of precision p, at least - // - // N = 1 + ceil(p * log_10(2)) - // - // decimal digits are sufficient to identify all binary floating-point - // numbers (Matula, "In-and-Out conversions"). - // This implies that the algorithm does not produce more than N decimal - // digits. - // - // N = 17 for p = 53 (IEEE double precision) - // N = 9 for p = 24 (IEEE single precision) -} - -/*! -v = buf * 10^decimal_exponent -len is the length of the buffer (number of decimal digits) -The buffer must be large enough, i.e. >= max_digits10. -*/ -JSON_HEDLEY_NON_NULL(1) -inline void grisu2(char* buf, int& len, int& decimal_exponent, - diyfp m_minus, diyfp v, diyfp m_plus) -{ - JSON_ASSERT(m_plus.e == m_minus.e); - JSON_ASSERT(m_plus.e == v.e); - - // --------(-----------------------+-----------------------)-------- (A) - // m- v m+ - // - // --------------------(-----------+-----------------------)-------- (B) - // m- v m+ - // - // First scale v (and m- and m+) such that the exponent is in the range - // [alpha, gamma]. - - const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); - - const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k - - // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] - const diyfp w = diyfp::mul(v, c_minus_k); - const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); - const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); - - // ----(---+---)---------------(---+---)---------------(---+---)---- - // w- w w+ - // = c*m- = c*v = c*m+ - // - // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and - // w+ are now off by a small amount. - // In fact: - // - // w - v * 10^k < 1 ulp - // - // To account for this inaccuracy, add resp. subtract 1 ulp. - // - // --------+---[---------------(---+---)---------------]---+-------- - // w- M- w M+ w+ - // - // Now any number in [M-, M+] (bounds included) will round to w when input, - // regardless of how the input rounding algorithm breaks ties. - // - // And digit_gen generates the shortest possible such number in [M-, M+]. - // Note that this does not mean that Grisu2 always generates the shortest - // possible number in the interval (m-, m+). - const diyfp M_minus(w_minus.f + 1, w_minus.e); - const diyfp M_plus (w_plus.f - 1, w_plus.e ); - - decimal_exponent = -cached.k; // = -(-k) = k - - grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); -} - -/*! -v = buf * 10^decimal_exponent -len is the length of the buffer (number of decimal digits) -The buffer must be large enough, i.e. >= max_digits10. -*/ -template -JSON_HEDLEY_NON_NULL(1) -void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) -{ - static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, - "internal error: not enough precision"); - - JSON_ASSERT(std::isfinite(value)); - JSON_ASSERT(value > 0); - - // If the neighbors (and boundaries) of 'value' are always computed for double-precision - // numbers, all float's can be recovered using strtod (and strtof). However, the resulting - // decimal representations are not exactly "short". - // - // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) - // says "value is converted to a string as if by std::sprintf in the default ("C") locale" - // and since sprintf promotes float's to double's, I think this is exactly what 'std::to_chars' - // does. - // On the other hand, the documentation for 'std::to_chars' requires that "parsing the - // representation using the corresponding std::from_chars function recovers value exactly". That - // indicates that single precision floating-point numbers should be recovered using - // 'std::strtof'. - // - // NB: If the neighbors are computed for single-precision numbers, there is a single float - // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision - // value is off by 1 ulp. -#if 0 - const boundaries w = compute_boundaries(static_cast(value)); -#else - const boundaries w = compute_boundaries(value); -#endif - - grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); -} - -/*! -@brief appends a decimal representation of e to buf -@return a pointer to the element following the exponent. -@pre -1000 < e < 1000 -*/ -JSON_HEDLEY_NON_NULL(1) -JSON_HEDLEY_RETURNS_NON_NULL -inline char* append_exponent(char* buf, int e) -{ - JSON_ASSERT(e > -1000); - JSON_ASSERT(e < 1000); - - if (e < 0) - { - e = -e; - *buf++ = '-'; - } - else - { - *buf++ = '+'; - } - - auto k = static_cast(e); - if (k < 10) - { - // Always print at least two digits in the exponent. - // This is for compatibility with printf("%g"). - *buf++ = '0'; - *buf++ = static_cast('0' + k); - } - else if (k < 100) - { - *buf++ = static_cast('0' + k / 10); - k %= 10; - *buf++ = static_cast('0' + k); - } - else - { - *buf++ = static_cast('0' + k / 100); - k %= 100; - *buf++ = static_cast('0' + k / 10); - k %= 10; - *buf++ = static_cast('0' + k); - } - - return buf; -} - -/*! -@brief prettify v = buf * 10^decimal_exponent - -If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point -notation. Otherwise it will be printed in exponential notation. - -@pre min_exp < 0 -@pre max_exp > 0 -*/ -JSON_HEDLEY_NON_NULL(1) -JSON_HEDLEY_RETURNS_NON_NULL -inline char* format_buffer(char* buf, int len, int decimal_exponent, - int min_exp, int max_exp) -{ - JSON_ASSERT(min_exp < 0); - JSON_ASSERT(max_exp > 0); - - const int k = len; - const int n = len + decimal_exponent; - - // v = buf * 10^(n-k) - // k is the length of the buffer (number of decimal digits) - // n is the position of the decimal point relative to the start of the buffer. - - if (k <= n && n <= max_exp) - { - // digits[000] - // len <= max_exp + 2 - - std::memset(buf + k, '0', static_cast(n) - static_cast(k)); - // Make it look like a floating-point number (#362, #378) - buf[n + 0] = '.'; - buf[n + 1] = '0'; - return buf + (static_cast(n) + 2); - } - - if (0 < n && n <= max_exp) - { - // dig.its - // len <= max_digits10 + 1 - - JSON_ASSERT(k > n); - - std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); - buf[n] = '.'; - return buf + (static_cast(k) + 1U); - } - - if (min_exp < n && n <= 0) - { - // 0.[000]digits - // len <= 2 + (-min_exp - 1) + max_digits10 - - std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); - buf[0] = '0'; - buf[1] = '.'; - std::memset(buf + 2, '0', static_cast(-n)); - return buf + (2U + static_cast(-n) + static_cast(k)); - } - - if (k == 1) - { - // dE+123 - // len <= 1 + 5 - - buf += 1; - } - else - { - // d.igitsE+123 - // len <= max_digits10 + 1 + 5 - - std::memmove(buf + 2, buf + 1, static_cast(k) - 1); - buf[1] = '.'; - buf += 1 + static_cast(k); - } - - *buf++ = 'e'; - return append_exponent(buf, n - 1); -} - -} // namespace dtoa_impl - -/*! -@brief generates a decimal representation of the floating-point number value in [first, last). - -The format of the resulting decimal representation is similar to printf's %g -format. Returns an iterator pointing past-the-end of the decimal representation. - -@note The input number must be finite, i.e. NaN's and Inf's are not supported. -@note The buffer must be large enough. -@note The result is NOT null-terminated. -*/ -template -JSON_HEDLEY_NON_NULL(1, 2) -JSON_HEDLEY_RETURNS_NON_NULL -char* to_chars(char* first, const char* last, FloatType value) -{ - static_cast(last); // maybe unused - fix warning - JSON_ASSERT(std::isfinite(value)); - - // Use signbit(value) instead of (value < 0) since signbit works for -0. - if (std::signbit(value)) - { - value = -value; - *first++ = '-'; - } - - if (value == 0) // +-0 - { - *first++ = '0'; - // Make it look like a floating-point number (#362, #378) - *first++ = '.'; - *first++ = '0'; - return first; - } - - JSON_ASSERT(last - first >= std::numeric_limits::max_digits10); - - // Compute v = buffer * 10^decimal_exponent. - // The decimal digits are stored in the buffer, which needs to be interpreted - // as an unsigned decimal integer. - // len is the length of the buffer, i.e. the number of decimal digits. - int len = 0; - int decimal_exponent = 0; - dtoa_impl::grisu2(first, len, decimal_exponent, value); - - JSON_ASSERT(len <= std::numeric_limits::max_digits10); - - // Format the buffer like printf("%.*g", prec, value) - constexpr int kMinExp = -4; - // Use digits10 here to increase compatibility with version 2. - constexpr int kMaxExp = std::numeric_limits::digits10; - - JSON_ASSERT(last - first >= kMaxExp + 2); - JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits::max_digits10); - JSON_ASSERT(last - first >= std::numeric_limits::max_digits10 + 6); - - return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); -} - -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - -// #include - -// #include - -// #include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -/////////////////// -// serialization // -/////////////////// - -/// how to treat decoding errors -enum class error_handler_t -{ - strict, ///< throw a type_error exception in case of invalid UTF-8 - replace, ///< replace invalid UTF-8 sequences with U+FFFD - ignore ///< ignore invalid UTF-8 sequences -}; - -template -class serializer -{ - using string_t = typename BasicJsonType::string_t; - using number_float_t = typename BasicJsonType::number_float_t; - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using binary_char_t = typename BasicJsonType::binary_t::value_type; - static constexpr std::uint8_t UTF8_ACCEPT = 0; - static constexpr std::uint8_t UTF8_REJECT = 1; - - public: - /*! - @param[in] s output stream to serialize to - @param[in] ichar indentation character to use - @param[in] error_handler_ how to react on decoding errors - */ - serializer(output_adapter_t s, const char ichar, - error_handler_t error_handler_ = error_handler_t::strict) - : o(std::move(s)) - , loc(std::localeconv()) - , thousands_sep(loc->thousands_sep == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->thousands_sep))) - , decimal_point(loc->decimal_point == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->decimal_point))) - , indent_char(ichar) - , indent_string(512, indent_char) - , error_handler(error_handler_) - {} - - // delete because of pointer members - serializer(const serializer&) = delete; - serializer& operator=(const serializer&) = delete; - serializer(serializer&&) = delete; - serializer& operator=(serializer&&) = delete; - ~serializer() = default; - - /*! - @brief internal implementation of the serialization function - - This function is called by the public member function dump and organizes - the serialization internally. The indentation level is propagated as - additional parameter. In case of arrays and objects, the function is - called recursively. - - - strings and object keys are escaped using `escape_string()` - - integer numbers are converted implicitly via `operator<<` - - floating-point numbers are converted to a string using `"%g"` format - - binary values are serialized as objects containing the subtype and the - byte array - - @param[in] val value to serialize - @param[in] pretty_print whether the output shall be pretty-printed - @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters - in the output are escaped with `\uXXXX` sequences, and the result consists - of ASCII characters only. - @param[in] indent_step the indent level - @param[in] current_indent the current indent level (only used internally) - */ - void dump(const BasicJsonType& val, - const bool pretty_print, - const bool ensure_ascii, - const unsigned int indent_step, - const unsigned int current_indent = 0) - { - switch (val.m_type) - { - case value_t::object: - { - if (val.m_value.object->empty()) - { - o->write_characters("{}", 2); - return; - } - - if (pretty_print) - { - o->write_characters("{\n", 2); - - // variable to hold indentation for recursive calls - const auto new_indent = current_indent + indent_step; - if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) - { - indent_string.resize(indent_string.size() * 2, ' '); - } - - // first n-1 elements - auto i = val.m_value.object->cbegin(); - for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) - { - o->write_characters(indent_string.c_str(), new_indent); - o->write_character('\"'); - dump_escaped(i->first, ensure_ascii); - o->write_characters("\": ", 3); - dump(i->second, true, ensure_ascii, indent_step, new_indent); - o->write_characters(",\n", 2); - } - - // last element - JSON_ASSERT(i != val.m_value.object->cend()); - JSON_ASSERT(std::next(i) == val.m_value.object->cend()); - o->write_characters(indent_string.c_str(), new_indent); - o->write_character('\"'); - dump_escaped(i->first, ensure_ascii); - o->write_characters("\": ", 3); - dump(i->second, true, ensure_ascii, indent_step, new_indent); - - o->write_character('\n'); - o->write_characters(indent_string.c_str(), current_indent); - o->write_character('}'); - } - else - { - o->write_character('{'); - - // first n-1 elements - auto i = val.m_value.object->cbegin(); - for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) - { - o->write_character('\"'); - dump_escaped(i->first, ensure_ascii); - o->write_characters("\":", 2); - dump(i->second, false, ensure_ascii, indent_step, current_indent); - o->write_character(','); - } - - // last element - JSON_ASSERT(i != val.m_value.object->cend()); - JSON_ASSERT(std::next(i) == val.m_value.object->cend()); - o->write_character('\"'); - dump_escaped(i->first, ensure_ascii); - o->write_characters("\":", 2); - dump(i->second, false, ensure_ascii, indent_step, current_indent); - - o->write_character('}'); - } - - return; - } - - case value_t::array: - { - if (val.m_value.array->empty()) - { - o->write_characters("[]", 2); - return; - } - - if (pretty_print) - { - o->write_characters("[\n", 2); - - // variable to hold indentation for recursive calls - const auto new_indent = current_indent + indent_step; - if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) - { - indent_string.resize(indent_string.size() * 2, ' '); - } - - // first n-1 elements - for (auto i = val.m_value.array->cbegin(); - i != val.m_value.array->cend() - 1; ++i) - { - o->write_characters(indent_string.c_str(), new_indent); - dump(*i, true, ensure_ascii, indent_step, new_indent); - o->write_characters(",\n", 2); - } - - // last element - JSON_ASSERT(!val.m_value.array->empty()); - o->write_characters(indent_string.c_str(), new_indent); - dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent); - - o->write_character('\n'); - o->write_characters(indent_string.c_str(), current_indent); - o->write_character(']'); - } - else - { - o->write_character('['); - - // first n-1 elements - for (auto i = val.m_value.array->cbegin(); - i != val.m_value.array->cend() - 1; ++i) - { - dump(*i, false, ensure_ascii, indent_step, current_indent); - o->write_character(','); - } - - // last element - JSON_ASSERT(!val.m_value.array->empty()); - dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent); - - o->write_character(']'); - } - - return; - } - - case value_t::string: - { - o->write_character('\"'); - dump_escaped(*val.m_value.string, ensure_ascii); - o->write_character('\"'); - return; - } - - case value_t::binary: - { - if (pretty_print) - { - o->write_characters("{\n", 2); - - // variable to hold indentation for recursive calls - const auto new_indent = current_indent + indent_step; - if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) - { - indent_string.resize(indent_string.size() * 2, ' '); - } - - o->write_characters(indent_string.c_str(), new_indent); - - o->write_characters("\"bytes\": [", 10); - - if (!val.m_value.binary->empty()) - { - for (auto i = val.m_value.binary->cbegin(); - i != val.m_value.binary->cend() - 1; ++i) - { - dump_integer(*i); - o->write_characters(", ", 2); - } - dump_integer(val.m_value.binary->back()); - } - - o->write_characters("],\n", 3); - o->write_characters(indent_string.c_str(), new_indent); - - o->write_characters("\"subtype\": ", 11); - if (val.m_value.binary->has_subtype()) - { - dump_integer(val.m_value.binary->subtype()); - } - else - { - o->write_characters("null", 4); - } - o->write_character('\n'); - o->write_characters(indent_string.c_str(), current_indent); - o->write_character('}'); - } - else - { - o->write_characters("{\"bytes\":[", 10); - - if (!val.m_value.binary->empty()) - { - for (auto i = val.m_value.binary->cbegin(); - i != val.m_value.binary->cend() - 1; ++i) - { - dump_integer(*i); - o->write_character(','); - } - dump_integer(val.m_value.binary->back()); - } - - o->write_characters("],\"subtype\":", 12); - if (val.m_value.binary->has_subtype()) - { - dump_integer(val.m_value.binary->subtype()); - o->write_character('}'); - } - else - { - o->write_characters("null}", 5); - } - } - return; - } - - case value_t::boolean: - { - if (val.m_value.boolean) - { - o->write_characters("true", 4); - } - else - { - o->write_characters("false", 5); - } - return; - } - - case value_t::number_integer: - { - dump_integer(val.m_value.number_integer); - return; - } - - case value_t::number_unsigned: - { - dump_integer(val.m_value.number_unsigned); - return; - } - - case value_t::number_float: - { - dump_float(val.m_value.number_float); - return; - } - - case value_t::discarded: - { - o->write_characters("", 11); - return; - } - - case value_t::null: - { - o->write_characters("null", 4); - return; - } - - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - } - - private: - /*! - @brief dump escaped string - - Escape a string by replacing certain special characters by a sequence of an - escape character (backslash) and another character and other control - characters by a sequence of "\u" followed by a four-digit hex - representation. The escaped string is written to output stream @a o. - - @param[in] s the string to escape - @param[in] ensure_ascii whether to escape non-ASCII characters with - \uXXXX sequences - - @complexity Linear in the length of string @a s. - */ - void dump_escaped(const string_t& s, const bool ensure_ascii) - { - std::uint32_t codepoint; - std::uint8_t state = UTF8_ACCEPT; - std::size_t bytes = 0; // number of bytes written to string_buffer - - // number of bytes written at the point of the last valid byte - std::size_t bytes_after_last_accept = 0; - std::size_t undumped_chars = 0; - - for (std::size_t i = 0; i < s.size(); ++i) - { - const auto byte = static_cast(s[i]); - - switch (decode(state, codepoint, byte)) - { - case UTF8_ACCEPT: // decode found a new code point - { - switch (codepoint) - { - case 0x08: // backspace - { - string_buffer[bytes++] = '\\'; - string_buffer[bytes++] = 'b'; - break; - } - - case 0x09: // horizontal tab - { - string_buffer[bytes++] = '\\'; - string_buffer[bytes++] = 't'; - break; - } - - case 0x0A: // newline - { - string_buffer[bytes++] = '\\'; - string_buffer[bytes++] = 'n'; - break; - } - - case 0x0C: // formfeed - { - string_buffer[bytes++] = '\\'; - string_buffer[bytes++] = 'f'; - break; - } - - case 0x0D: // carriage return - { - string_buffer[bytes++] = '\\'; - string_buffer[bytes++] = 'r'; - break; - } - - case 0x22: // quotation mark - { - string_buffer[bytes++] = '\\'; - string_buffer[bytes++] = '\"'; - break; - } - - case 0x5C: // reverse solidus - { - string_buffer[bytes++] = '\\'; - string_buffer[bytes++] = '\\'; - break; - } - - default: - { - // escape control characters (0x00..0x1F) or, if - // ensure_ascii parameter is used, non-ASCII characters - if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F))) - { - if (codepoint <= 0xFFFF) - { - (std::snprintf)(string_buffer.data() + bytes, 7, "\\u%04x", - static_cast(codepoint)); - bytes += 6; - } - else - { - (std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", - static_cast(0xD7C0u + (codepoint >> 10u)), - static_cast(0xDC00u + (codepoint & 0x3FFu))); - bytes += 12; - } - } - else - { - // copy byte to buffer (all previous bytes - // been copied have in default case above) - string_buffer[bytes++] = s[i]; - } - break; - } - } - - // write buffer and reset index; there must be 13 bytes - // left, as this is the maximal number of bytes to be - // written ("\uxxxx\uxxxx\0") for one code point - if (string_buffer.size() - bytes < 13) - { - o->write_characters(string_buffer.data(), bytes); - bytes = 0; - } - - // remember the byte position of this accept - bytes_after_last_accept = bytes; - undumped_chars = 0; - break; - } - - case UTF8_REJECT: // decode found invalid UTF-8 byte - { - switch (error_handler) - { - case error_handler_t::strict: - { - std::string sn(3, '\0'); - (std::snprintf)(&sn[0], sn.size(), "%.2X", byte); - JSON_THROW(type_error::create(316, "invalid UTF-8 byte at index " + std::to_string(i) + ": 0x" + sn)); - } - - case error_handler_t::ignore: - case error_handler_t::replace: - { - // in case we saw this character the first time, we - // would like to read it again, because the byte - // may be OK for itself, but just not OK for the - // previous sequence - if (undumped_chars > 0) - { - --i; - } - - // reset length buffer to the last accepted index; - // thus removing/ignoring the invalid characters - bytes = bytes_after_last_accept; - - if (error_handler == error_handler_t::replace) - { - // add a replacement character - if (ensure_ascii) - { - string_buffer[bytes++] = '\\'; - string_buffer[bytes++] = 'u'; - string_buffer[bytes++] = 'f'; - string_buffer[bytes++] = 'f'; - string_buffer[bytes++] = 'f'; - string_buffer[bytes++] = 'd'; - } - else - { - string_buffer[bytes++] = detail::binary_writer::to_char_type('\xEF'); - string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBF'); - string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBD'); - } - - // write buffer and reset index; there must be 13 bytes - // left, as this is the maximal number of bytes to be - // written ("\uxxxx\uxxxx\0") for one code point - if (string_buffer.size() - bytes < 13) - { - o->write_characters(string_buffer.data(), bytes); - bytes = 0; - } - - bytes_after_last_accept = bytes; - } - - undumped_chars = 0; - - // continue processing the string - state = UTF8_ACCEPT; - break; - } - - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - break; - } - - default: // decode found yet incomplete multi-byte code point - { - if (!ensure_ascii) - { - // code point will not be escaped - copy byte to buffer - string_buffer[bytes++] = s[i]; - } - ++undumped_chars; - break; - } - } - } - - // we finished processing the string - if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT)) - { - // write buffer - if (bytes > 0) - { - o->write_characters(string_buffer.data(), bytes); - } - } - else - { - // we finish reading, but do not accept: string was incomplete - switch (error_handler) - { - case error_handler_t::strict: - { - std::string sn(3, '\0'); - (std::snprintf)(&sn[0], sn.size(), "%.2X", static_cast(s.back())); - JSON_THROW(type_error::create(316, "incomplete UTF-8 string; last byte: 0x" + sn)); - } - - case error_handler_t::ignore: - { - // write all accepted bytes - o->write_characters(string_buffer.data(), bytes_after_last_accept); - break; - } - - case error_handler_t::replace: - { - // write all accepted bytes - o->write_characters(string_buffer.data(), bytes_after_last_accept); - // add a replacement character - if (ensure_ascii) - { - o->write_characters("\\ufffd", 6); - } - else - { - o->write_characters("\xEF\xBF\xBD", 3); - } - break; - } - - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - } - } - - /*! - @brief count digits - - Count the number of decimal (base 10) digits for an input unsigned integer. - - @param[in] x unsigned integer number to count its digits - @return number of decimal digits - */ - inline unsigned int count_digits(number_unsigned_t x) noexcept - { - unsigned int n_digits = 1; - for (;;) - { - if (x < 10) - { - return n_digits; - } - if (x < 100) - { - return n_digits + 1; - } - if (x < 1000) - { - return n_digits + 2; - } - if (x < 10000) - { - return n_digits + 3; - } - x = x / 10000u; - n_digits += 4; - } - } - - /*! - @brief dump an integer - - Dump a given integer to output stream @a o. Works internally with - @a number_buffer. - - @param[in] x integer number (signed or unsigned) to dump - @tparam NumberType either @a number_integer_t or @a number_unsigned_t - */ - template < typename NumberType, detail::enable_if_t < - std::is_same::value || - std::is_same::value || - std::is_same::value, - int > = 0 > - void dump_integer(NumberType x) - { - static constexpr std::array, 100> digits_to_99 - { - { - {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}}, - {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}}, - {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}}, - {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}}, - {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}}, - {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}}, - {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}}, - {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}}, - {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}}, - {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}}, - } - }; - - // special case for "0" - if (x == 0) - { - o->write_character('0'); - return; - } - - // use a pointer to fill the buffer - auto buffer_ptr = number_buffer.begin(); - - const bool is_negative = std::is_same::value && !(x >= 0); // see issue #755 - number_unsigned_t abs_value; - - unsigned int n_chars; - - if (is_negative) - { - *buffer_ptr = '-'; - abs_value = remove_sign(static_cast(x)); - - // account one more byte for the minus sign - n_chars = 1 + count_digits(abs_value); - } - else - { - abs_value = static_cast(x); - n_chars = count_digits(abs_value); - } - - // spare 1 byte for '\0' - JSON_ASSERT(n_chars < number_buffer.size() - 1); - - // jump to the end to generate the string from backward - // so we later avoid reversing the result - buffer_ptr += n_chars; - - // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu - // See: https://www.youtube.com/watch?v=o4-CwDo2zpg - while (abs_value >= 100) - { - const auto digits_index = static_cast((abs_value % 100)); - abs_value /= 100; - *(--buffer_ptr) = digits_to_99[digits_index][1]; - *(--buffer_ptr) = digits_to_99[digits_index][0]; - } - - if (abs_value >= 10) - { - const auto digits_index = static_cast(abs_value); - *(--buffer_ptr) = digits_to_99[digits_index][1]; - *(--buffer_ptr) = digits_to_99[digits_index][0]; - } - else - { - *(--buffer_ptr) = static_cast('0' + abs_value); - } - - o->write_characters(number_buffer.data(), n_chars); - } - - /*! - @brief dump a floating-point number - - Dump a given floating-point number to output stream @a o. Works internally - with @a number_buffer. - - @param[in] x floating-point number to dump - */ - void dump_float(number_float_t x) - { - // NaN / inf - if (!std::isfinite(x)) - { - o->write_characters("null", 4); - return; - } - - // If number_float_t is an IEEE-754 single or double precision number, - // use the Grisu2 algorithm to produce short numbers which are - // guaranteed to round-trip, using strtof and strtod, resp. - // - // NB: The test below works if == . - static constexpr bool is_ieee_single_or_double - = (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 24 && std::numeric_limits::max_exponent == 128) || - (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 53 && std::numeric_limits::max_exponent == 1024); - - dump_float(x, std::integral_constant()); - } - - void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/) - { - char* begin = number_buffer.data(); - char* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x); - - o->write_characters(begin, static_cast(end - begin)); - } - - void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/) - { - // get number of digits for a float -> text -> float round-trip - static constexpr auto d = std::numeric_limits::max_digits10; - - // the actual conversion - std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), "%.*g", d, x); - - // negative value indicates an error - JSON_ASSERT(len > 0); - // check if buffer was large enough - JSON_ASSERT(static_cast(len) < number_buffer.size()); - - // erase thousands separator - if (thousands_sep != '\0') - { - const auto end = std::remove(number_buffer.begin(), - number_buffer.begin() + len, thousands_sep); - std::fill(end, number_buffer.end(), '\0'); - JSON_ASSERT((end - number_buffer.begin()) <= len); - len = (end - number_buffer.begin()); - } - - // convert decimal point to '.' - if (decimal_point != '\0' && decimal_point != '.') - { - const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point); - if (dec_pos != number_buffer.end()) - { - *dec_pos = '.'; - } - } - - o->write_characters(number_buffer.data(), static_cast(len)); - - // determine if need to append ".0" - const bool value_is_int_like = - std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, - [](char c) - { - return c == '.' || c == 'e'; - }); - - if (value_is_int_like) - { - o->write_characters(".0", 2); - } - } - - /*! - @brief check whether a string is UTF-8 encoded - - The function checks each byte of a string whether it is UTF-8 encoded. The - result of the check is stored in the @a state parameter. The function must - be called initially with state 0 (accept). State 1 means the string must - be rejected, because the current byte is not allowed. If the string is - completely processed, but the state is non-zero, the string ended - prematurely; that is, the last byte indicated more bytes should have - followed. - - @param[in,out] state the state of the decoding - @param[in,out] codep codepoint (valid only if resulting state is UTF8_ACCEPT) - @param[in] byte next byte to decode - @return new state - - @note The function has been edited: a std::array is used. - - @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann - @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ - */ - static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept - { - static const std::array utf8d = - { - { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF - 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF - 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF - 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF - 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2 - 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4 - 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6 - 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8 - } - }; - - const std::uint8_t type = utf8d[byte]; - - codep = (state != UTF8_ACCEPT) - ? (byte & 0x3fu) | (codep << 6u) - : (0xFFu >> type) & (byte); - - std::size_t index = 256u + static_cast(state) * 16u + static_cast(type); - JSON_ASSERT(index < 400); - state = utf8d[index]; - return state; - } - - /* - * Overload to make the compiler happy while it is instantiating - * dump_integer for number_unsigned_t. - * Must never be called. - */ - number_unsigned_t remove_sign(number_unsigned_t x) - { - JSON_ASSERT(false); // LCOV_EXCL_LINE - return x; // LCOV_EXCL_LINE - } - - /* - * Helper function for dump_integer - * - * This function takes a negative signed integer and returns its absolute - * value as unsigned integer. The plus/minus shuffling is necessary as we can - * not directly remove the sign of an arbitrary signed integer as the - * absolute values of INT_MIN and INT_MAX are usually not the same. See - * #1708 for details. - */ - inline number_unsigned_t remove_sign(number_integer_t x) noexcept - { - JSON_ASSERT(x < 0 && x < (std::numeric_limits::max)()); - return static_cast(-(x + 1)) + 1; - } - - private: - /// the output of the serializer - output_adapter_t o = nullptr; - - /// a (hopefully) large enough character buffer - std::array number_buffer{{}}; - - /// the locale - const std::lconv* loc = nullptr; - /// the locale's thousand separator character - const char thousands_sep = '\0'; - /// the locale's decimal point character - const char decimal_point = '\0'; - - /// string buffer - std::array string_buffer{{}}; - - /// the indentation character - const char indent_char; - /// the indentation string - string_t indent_string; - - /// error_handler how to react on decoding errors - const error_handler_t error_handler; -}; -} // namespace detail -} // namespace nlohmann - -// #include - -// #include - -// #include - - -#include // less -#include // allocator -#include // pair -#include // vector - -namespace nlohmann -{ - -/// ordered_map: a minimal map-like container that preserves insertion order -/// for use within nlohmann::basic_json -template , - class Allocator = std::allocator>> - struct ordered_map : std::vector, Allocator> -{ - using key_type = Key; - using mapped_type = T; - using Container = std::vector, Allocator>; - using typename Container::iterator; - using typename Container::const_iterator; - using typename Container::size_type; - using typename Container::value_type; - - // Explicit constructors instead of `using Container::Container` - // otherwise older compilers choke on it (GCC <= 5.5, xcode <= 9.4) - ordered_map(const Allocator& alloc = Allocator()) : Container{alloc} {} - template - ordered_map(It first, It last, const Allocator& alloc = Allocator()) - : Container{first, last, alloc} {} - ordered_map(std::initializer_list init, const Allocator& alloc = Allocator() ) - : Container{init, alloc} {} - - std::pair emplace(const key_type& key, T&& t) - { - for (auto it = this->begin(); it != this->end(); ++it) - { - if (it->first == key) - { - return {it, false}; - } - } - Container::emplace_back(key, t); - return {--this->end(), true}; - } - - T& operator[](const Key& key) - { - return emplace(key, T{}).first->second; - } - - const T& operator[](const Key& key) const - { - return at(key); - } - - T& at(const Key& key) - { - for (auto it = this->begin(); it != this->end(); ++it) - { - if (it->first == key) - { - return it->second; - } - } - - throw std::out_of_range("key not found"); - } - - const T& at(const Key& key) const - { - for (auto it = this->begin(); it != this->end(); ++it) - { - if (it->first == key) - { - return it->second; - } - } - - throw std::out_of_range("key not found"); - } - - size_type erase(const Key& key) - { - for (auto it = this->begin(); it != this->end(); ++it) - { - if (it->first == key) - { - // Since we cannot move const Keys, re-construct them in place - for (auto next = it; ++next != this->end(); ++it) - { - it->~value_type(); // Destroy but keep allocation - new (&*it) value_type{std::move(*next)}; - } - Container::pop_back(); - return 1; - } - } - return 0; - } - - iterator erase(iterator pos) - { - auto it = pos; - - // Since we cannot move const Keys, re-construct them in place - for (auto next = it; ++next != this->end(); ++it) - { - it->~value_type(); // Destroy but keep allocation - new (&*it) value_type{std::move(*next)}; - } - Container::pop_back(); - return pos; - } - - size_type count(const Key& key) const - { - for (auto it = this->begin(); it != this->end(); ++it) - { - if (it->first == key) - { - return 1; - } - } - return 0; - } - - iterator find(const Key& key) - { - for (auto it = this->begin(); it != this->end(); ++it) - { - if (it->first == key) - { - return it; - } - } - return Container::end(); - } - - const_iterator find(const Key& key) const - { - for (auto it = this->begin(); it != this->end(); ++it) - { - if (it->first == key) - { - return it; - } - } - return Container::end(); - } - - std::pair insert( value_type&& value ) - { - return emplace(value.first, std::move(value.second)); - } - - std::pair insert( const value_type& value ) - { - for (auto it = this->begin(); it != this->end(); ++it) - { - if (it->first == value.first) - { - return {it, false}; - } - } - Container::push_back(value); - return {--this->end(), true}; - } -}; - -} // namespace nlohmann - - -/*! -@brief namespace for Niels Lohmann -@see https://github.com/nlohmann -@since version 1.0.0 -*/ -namespace nlohmann -{ - -/*! -@brief a class to store JSON values - -@tparam ObjectType type for JSON objects (`std::map` by default; will be used -in @ref object_t) -@tparam ArrayType type for JSON arrays (`std::vector` by default; will be used -in @ref array_t) -@tparam StringType type for JSON strings and object keys (`std::string` by -default; will be used in @ref string_t) -@tparam BooleanType type for JSON booleans (`bool` by default; will be used -in @ref boolean_t) -@tparam NumberIntegerType type for JSON integer numbers (`int64_t` by -default; will be used in @ref number_integer_t) -@tparam NumberUnsignedType type for JSON unsigned integer numbers (@c -`uint64_t` by default; will be used in @ref number_unsigned_t) -@tparam NumberFloatType type for JSON floating-point numbers (`double` by -default; will be used in @ref number_float_t) -@tparam BinaryType type for packed binary data for compatibility with binary -serialization formats (`std::vector` by default; will be used in -@ref binary_t) -@tparam AllocatorType type of the allocator to use (`std::allocator` by -default) -@tparam JSONSerializer the serializer to resolve internal calls to `to_json()` -and `from_json()` (@ref adl_serializer by default) - -@requirement The class satisfies the following concept requirements: -- Basic - - [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible): - JSON values can be default constructed. The result will be a JSON null - value. - - [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible): - A JSON value can be constructed from an rvalue argument. - - [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible): - A JSON value can be copy-constructed from an lvalue expression. - - [MoveAssignable](https://en.cppreference.com/w/cpp/named_req/MoveAssignable): - A JSON value van be assigned from an rvalue argument. - - [CopyAssignable](https://en.cppreference.com/w/cpp/named_req/CopyAssignable): - A JSON value can be copy-assigned from an lvalue expression. - - [Destructible](https://en.cppreference.com/w/cpp/named_req/Destructible): - JSON values can be destructed. -- Layout - - [StandardLayoutType](https://en.cppreference.com/w/cpp/named_req/StandardLayoutType): - JSON values have - [standard layout](https://en.cppreference.com/w/cpp/language/data_members#Standard_layout): - All non-static data members are private and standard layout types, the - class has no virtual functions or (virtual) base classes. -- Library-wide - - [EqualityComparable](https://en.cppreference.com/w/cpp/named_req/EqualityComparable): - JSON values can be compared with `==`, see @ref - operator==(const_reference,const_reference). - - [LessThanComparable](https://en.cppreference.com/w/cpp/named_req/LessThanComparable): - JSON values can be compared with `<`, see @ref - operator<(const_reference,const_reference). - - [Swappable](https://en.cppreference.com/w/cpp/named_req/Swappable): - Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of - other compatible types, using unqualified function call @ref swap(). - - [NullablePointer](https://en.cppreference.com/w/cpp/named_req/NullablePointer): - JSON values can be compared against `std::nullptr_t` objects which are used - to model the `null` value. -- Container - - [Container](https://en.cppreference.com/w/cpp/named_req/Container): - JSON values can be used like STL containers and provide iterator access. - - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer); - JSON values can be used like STL containers and provide reverse iterator - access. - -@invariant The member variables @a m_value and @a m_type have the following -relationship: -- If `m_type == value_t::object`, then `m_value.object != nullptr`. -- If `m_type == value_t::array`, then `m_value.array != nullptr`. -- If `m_type == value_t::string`, then `m_value.string != nullptr`. -The invariants are checked by member function assert_invariant(). - -@internal -@note ObjectType trick from https://stackoverflow.com/a/9860911 -@endinternal - -@see [RFC 7159: The JavaScript Object Notation (JSON) Data Interchange -Format](http://rfc7159.net/rfc7159) - -@since version 1.0.0 - -@nosubgrouping -*/ -NLOHMANN_BASIC_JSON_TPL_DECLARATION -class basic_json -{ - private: - template friend struct detail::external_constructor; - friend ::nlohmann::json_pointer; - - template - friend class ::nlohmann::detail::parser; - friend ::nlohmann::detail::serializer; - template - friend class ::nlohmann::detail::iter_impl; - template - friend class ::nlohmann::detail::binary_writer; - template - friend class ::nlohmann::detail::binary_reader; - template - friend class ::nlohmann::detail::json_sax_dom_parser; - template - friend class ::nlohmann::detail::json_sax_dom_callback_parser; - - /// workaround type for MSVC - using basic_json_t = NLOHMANN_BASIC_JSON_TPL; - - // convenience aliases for types residing in namespace detail; - using lexer = ::nlohmann::detail::lexer_base; - - template - static ::nlohmann::detail::parser parser( - InputAdapterType adapter, - detail::parser_callback_tcb = nullptr, - const bool allow_exceptions = true, - const bool ignore_comments = false - ) - { - return ::nlohmann::detail::parser(std::move(adapter), - std::move(cb), allow_exceptions, ignore_comments); - } - - using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t; - template - using internal_iterator = ::nlohmann::detail::internal_iterator; - template - using iter_impl = ::nlohmann::detail::iter_impl; - template - using iteration_proxy = ::nlohmann::detail::iteration_proxy; - template using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator; - - template - using output_adapter_t = ::nlohmann::detail::output_adapter_t; - - template - using binary_reader = ::nlohmann::detail::binary_reader; - template using binary_writer = ::nlohmann::detail::binary_writer; - - using serializer = ::nlohmann::detail::serializer; - - public: - using value_t = detail::value_t; - /// JSON Pointer, see @ref nlohmann::json_pointer - using json_pointer = ::nlohmann::json_pointer; - template - using json_serializer = JSONSerializer; - /// how to treat decoding errors - using error_handler_t = detail::error_handler_t; - /// how to treat CBOR tags - using cbor_tag_handler_t = detail::cbor_tag_handler_t; - /// helper type for initializer lists of basic_json values - using initializer_list_t = std::initializer_list>; - - using input_format_t = detail::input_format_t; - /// SAX interface type, see @ref nlohmann::json_sax - using json_sax_t = json_sax; - - //////////////// - // exceptions // - //////////////// - - /// @name exceptions - /// Classes to implement user-defined exceptions. - /// @{ - - /// @copydoc detail::exception - using exception = detail::exception; - /// @copydoc detail::parse_error - using parse_error = detail::parse_error; - /// @copydoc detail::invalid_iterator - using invalid_iterator = detail::invalid_iterator; - /// @copydoc detail::type_error - using type_error = detail::type_error; - /// @copydoc detail::out_of_range - using out_of_range = detail::out_of_range; - /// @copydoc detail::other_error - using other_error = detail::other_error; - - /// @} - - - ///////////////////// - // container types // - ///////////////////// - - /// @name container types - /// The canonic container types to use @ref basic_json like any other STL - /// container. - /// @{ - - /// the type of elements in a basic_json container - using value_type = basic_json; - - /// the type of an element reference - using reference = value_type&; - /// the type of an element const reference - using const_reference = const value_type&; - - /// a type to represent differences between iterators - using difference_type = std::ptrdiff_t; - /// a type to represent container sizes - using size_type = std::size_t; - - /// the allocator type - using allocator_type = AllocatorType; - - /// the type of an element pointer - using pointer = typename std::allocator_traits::pointer; - /// the type of an element const pointer - using const_pointer = typename std::allocator_traits::const_pointer; - - /// an iterator for a basic_json container - using iterator = iter_impl; - /// a const iterator for a basic_json container - using const_iterator = iter_impl; - /// a reverse iterator for a basic_json container - using reverse_iterator = json_reverse_iterator; - /// a const reverse iterator for a basic_json container - using const_reverse_iterator = json_reverse_iterator; - - /// @} - - - /*! - @brief returns the allocator associated with the container - */ - static allocator_type get_allocator() - { - return allocator_type(); - } - - /*! - @brief returns version information on the library - - This function returns a JSON object with information about the library, - including the version number and information on the platform and compiler. - - @return JSON object holding version information - key | description - ----------- | --------------- - `compiler` | Information on the used compiler. It is an object with the following keys: `c++` (the used C++ standard), `family` (the compiler family; possible values are `clang`, `icc`, `gcc`, `ilecpp`, `msvc`, `pgcpp`, `sunpro`, and `unknown`), and `version` (the compiler version). - `copyright` | The copyright line for the library as string. - `name` | The name of the library as string. - `platform` | The used platform as string. Possible values are `win32`, `linux`, `apple`, `unix`, and `unknown`. - `url` | The URL of the project as string. - `version` | The version of the library. It is an object with the following keys: `major`, `minor`, and `patch` as defined by [Semantic Versioning](http://semver.org), and `string` (the version string). - - @liveexample{The following code shows an example output of the `meta()` - function.,meta} - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @complexity Constant. - - @since 2.1.0 - */ - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json meta() - { - basic_json result; - - result["copyright"] = "(C) 2013-2020 Niels Lohmann"; - result["name"] = "JSON for Modern C++"; - result["url"] = "https://github.com/nlohmann/json"; - result["version"]["string"] = - std::to_string(NLOHMANN_JSON_VERSION_MAJOR) + "." + - std::to_string(NLOHMANN_JSON_VERSION_MINOR) + "." + - std::to_string(NLOHMANN_JSON_VERSION_PATCH); - result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR; - result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR; - result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH; - -#ifdef _WIN32 - result["platform"] = "win32"; -#elif defined __linux__ - result["platform"] = "linux"; -#elif defined __APPLE__ - result["platform"] = "apple"; -#elif defined __unix__ - result["platform"] = "unix"; -#else - result["platform"] = "unknown"; -#endif - -#if defined(__ICC) || defined(__INTEL_COMPILER) - result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; -#elif defined(__clang__) - result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}}; -#elif defined(__GNUC__) || defined(__GNUG__) - result["compiler"] = {{"family", "gcc"}, {"version", std::to_string(__GNUC__) + "." + std::to_string(__GNUC_MINOR__) + "." + std::to_string(__GNUC_PATCHLEVEL__)}}; -#elif defined(__HP_cc) || defined(__HP_aCC) - result["compiler"] = "hp" -#elif defined(__IBMCPP__) - result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}}; -#elif defined(_MSC_VER) - result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}}; -#elif defined(__PGI) - result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}}; -#elif defined(__SUNPRO_CC) - result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}}; -#else - result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}}; -#endif - -#ifdef __cplusplus - result["compiler"]["c++"] = std::to_string(__cplusplus); -#else - result["compiler"]["c++"] = "unknown"; -#endif - return result; - } - - - /////////////////////////// - // JSON value data types // - /////////////////////////// - - /// @name JSON value data types - /// The data types to store a JSON value. These types are derived from - /// the template arguments passed to class @ref basic_json. - /// @{ - -#if defined(JSON_HAS_CPP_14) - // Use transparent comparator if possible, combined with perfect forwarding - // on find() and count() calls prevents unnecessary string construction. - using object_comparator_t = std::less<>; -#else - using object_comparator_t = std::less; -#endif - - /*! - @brief a type for an object - - [RFC 7159](http://rfc7159.net/rfc7159) describes JSON objects as follows: - > An object is an unordered collection of zero or more name/value pairs, - > where a name is a string and a value is a string, number, boolean, null, - > object, or array. - - To store objects in C++, a type is defined by the template parameters - described below. - - @tparam ObjectType the container to store objects (e.g., `std::map` or - `std::unordered_map`) - @tparam StringType the type of the keys or names (e.g., `std::string`). - The comparison function `std::less` is used to order elements - inside the container. - @tparam AllocatorType the allocator to use for objects (e.g., - `std::allocator`) - - #### Default type - - With the default values for @a ObjectType (`std::map`), @a StringType - (`std::string`), and @a AllocatorType (`std::allocator`), the default - value for @a object_t is: - - @code {.cpp} - std::map< - std::string, // key_type - basic_json, // value_type - std::less, // key_compare - std::allocator> // allocator_type - > - @endcode - - #### Behavior - - The choice of @a object_t influences the behavior of the JSON class. With - the default type, objects have the following behavior: - - - When all names are unique, objects will be interoperable in the sense - that all software implementations receiving that object will agree on - the name-value mappings. - - When the names within an object are not unique, it is unspecified which - one of the values for a given key will be chosen. For instance, - `{"key": 2, "key": 1}` could be equal to either `{"key": 1}` or - `{"key": 2}`. - - Internally, name/value pairs are stored in lexicographical order of the - names. Objects will also be serialized (see @ref dump) in this order. - For instance, `{"b": 1, "a": 2}` and `{"a": 2, "b": 1}` will be stored - and serialized as `{"a": 2, "b": 1}`. - - When comparing objects, the order of the name/value pairs is irrelevant. - This makes objects interoperable in the sense that they will not be - affected by these differences. For instance, `{"b": 1, "a": 2}` and - `{"a": 2, "b": 1}` will be treated as equal. - - #### Limits - - [RFC 7159](http://rfc7159.net/rfc7159) specifies: - > An implementation may set limits on the maximum depth of nesting. - - In this class, the object's limit of nesting is not explicitly constrained. - However, a maximum depth of nesting may be introduced by the compiler or - runtime environment. A theoretical limit can be queried by calling the - @ref max_size function of a JSON object. - - #### Storage - - Objects are stored as pointers in a @ref basic_json type. That is, for any - access to object values, a pointer of type `object_t*` must be - dereferenced. - - @sa @ref array_t -- type for an array value - - @since version 1.0.0 - - @note The order name/value pairs are added to the object is *not* - preserved by the library. Therefore, iterating an object may return - name/value pairs in a different order than they were originally stored. In - fact, keys will be traversed in alphabetical order as `std::map` with - `std::less` is used by default. Please note this behavior conforms to [RFC - 7159](http://rfc7159.net/rfc7159), because any order implements the - specified "unordered" nature of JSON objects. - */ - using object_t = ObjectType>>; - - /*! - @brief a type for an array - - [RFC 7159](http://rfc7159.net/rfc7159) describes JSON arrays as follows: - > An array is an ordered sequence of zero or more values. - - To store objects in C++, a type is defined by the template parameters - explained below. - - @tparam ArrayType container type to store arrays (e.g., `std::vector` or - `std::list`) - @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`) - - #### Default type - - With the default values for @a ArrayType (`std::vector`) and @a - AllocatorType (`std::allocator`), the default value for @a array_t is: - - @code {.cpp} - std::vector< - basic_json, // value_type - std::allocator // allocator_type - > - @endcode - - #### Limits - - [RFC 7159](http://rfc7159.net/rfc7159) specifies: - > An implementation may set limits on the maximum depth of nesting. - - In this class, the array's limit of nesting is not explicitly constrained. - However, a maximum depth of nesting may be introduced by the compiler or - runtime environment. A theoretical limit can be queried by calling the - @ref max_size function of a JSON array. - - #### Storage - - Arrays are stored as pointers in a @ref basic_json type. That is, for any - access to array values, a pointer of type `array_t*` must be dereferenced. - - @sa @ref object_t -- type for an object value - - @since version 1.0.0 - */ - using array_t = ArrayType>; - - /*! - @brief a type for a string - - [RFC 7159](http://rfc7159.net/rfc7159) describes JSON strings as follows: - > A string is a sequence of zero or more Unicode characters. - - To store objects in C++, a type is defined by the template parameter - described below. Unicode values are split by the JSON class into - byte-sized characters during deserialization. - - @tparam StringType the container to store strings (e.g., `std::string`). - Note this container is used for keys/names in objects, see @ref object_t. - - #### Default type - - With the default values for @a StringType (`std::string`), the default - value for @a string_t is: - - @code {.cpp} - std::string - @endcode - - #### Encoding - - Strings are stored in UTF-8 encoding. Therefore, functions like - `std::string::size()` or `std::string::length()` return the number of - bytes in the string rather than the number of characters or glyphs. - - #### String comparison - - [RFC 7159](http://rfc7159.net/rfc7159) states: - > Software implementations are typically required to test names of object - > members for equality. Implementations that transform the textual - > representation into sequences of Unicode code units and then perform the - > comparison numerically, code unit by code unit, are interoperable in the - > sense that implementations will agree in all cases on equality or - > inequality of two strings. For example, implementations that compare - > strings with escaped characters unconverted may incorrectly find that - > `"a\\b"` and `"a\u005Cb"` are not equal. - - This implementation is interoperable as it does compare strings code unit - by code unit. - - #### Storage - - String values are stored as pointers in a @ref basic_json type. That is, - for any access to string values, a pointer of type `string_t*` must be - dereferenced. - - @since version 1.0.0 - */ - using string_t = StringType; - - /*! - @brief a type for a boolean - - [RFC 7159](http://rfc7159.net/rfc7159) implicitly describes a boolean as a - type which differentiates the two literals `true` and `false`. - - To store objects in C++, a type is defined by the template parameter @a - BooleanType which chooses the type to use. - - #### Default type - - With the default values for @a BooleanType (`bool`), the default value for - @a boolean_t is: - - @code {.cpp} - bool - @endcode - - #### Storage - - Boolean values are stored directly inside a @ref basic_json type. - - @since version 1.0.0 - */ - using boolean_t = BooleanType; - - /*! - @brief a type for a number (integer) - - [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: - > The representation of numbers is similar to that used in most - > programming languages. A number is represented in base 10 using decimal - > digits. It contains an integer component that may be prefixed with an - > optional minus sign, which may be followed by a fraction part and/or an - > exponent part. Leading zeros are not allowed. (...) Numeric values that - > cannot be represented in the grammar below (such as Infinity and NaN) - > are not permitted. - - This description includes both integer and floating-point numbers. - However, C++ allows more precise storage if it is known whether the number - is a signed integer, an unsigned integer or a floating-point number. - Therefore, three different types, @ref number_integer_t, @ref - number_unsigned_t and @ref number_float_t are used. - - To store integer numbers in C++, a type is defined by the template - parameter @a NumberIntegerType which chooses the type to use. - - #### Default type - - With the default values for @a NumberIntegerType (`int64_t`), the default - value for @a number_integer_t is: - - @code {.cpp} - int64_t - @endcode - - #### Default behavior - - - The restrictions about leading zeros is not enforced in C++. Instead, - leading zeros in integer literals lead to an interpretation as octal - number. Internally, the value will be stored as decimal number. For - instance, the C++ integer literal `010` will be serialized to `8`. - During deserialization, leading zeros yield an error. - - Not-a-number (NaN) values will be serialized to `null`. - - #### Limits - - [RFC 7159](http://rfc7159.net/rfc7159) specifies: - > An implementation may set limits on the range and precision of numbers. - - When the default type is used, the maximal integer number that can be - stored is `9223372036854775807` (INT64_MAX) and the minimal integer number - that can be stored is `-9223372036854775808` (INT64_MIN). Integer numbers - that are out of range will yield over/underflow when used in a - constructor. During deserialization, too large or small integer numbers - will be automatically be stored as @ref number_unsigned_t or @ref - number_float_t. - - [RFC 7159](http://rfc7159.net/rfc7159) further states: - > Note that when such software is used, numbers that are integers and are - > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense - > that implementations will agree exactly on their numeric values. - - As this range is a subrange of the exactly supported range [INT64_MIN, - INT64_MAX], this class's integer type is interoperable. - - #### Storage - - Integer number values are stored directly inside a @ref basic_json type. - - @sa @ref number_float_t -- type for number values (floating-point) - - @sa @ref number_unsigned_t -- type for number values (unsigned integer) - - @since version 1.0.0 - */ - using number_integer_t = NumberIntegerType; - - /*! - @brief a type for a number (unsigned) - - [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: - > The representation of numbers is similar to that used in most - > programming languages. A number is represented in base 10 using decimal - > digits. It contains an integer component that may be prefixed with an - > optional minus sign, which may be followed by a fraction part and/or an - > exponent part. Leading zeros are not allowed. (...) Numeric values that - > cannot be represented in the grammar below (such as Infinity and NaN) - > are not permitted. - - This description includes both integer and floating-point numbers. - However, C++ allows more precise storage if it is known whether the number - is a signed integer, an unsigned integer or a floating-point number. - Therefore, three different types, @ref number_integer_t, @ref - number_unsigned_t and @ref number_float_t are used. - - To store unsigned integer numbers in C++, a type is defined by the - template parameter @a NumberUnsignedType which chooses the type to use. - - #### Default type - - With the default values for @a NumberUnsignedType (`uint64_t`), the - default value for @a number_unsigned_t is: - - @code {.cpp} - uint64_t - @endcode - - #### Default behavior - - - The restrictions about leading zeros is not enforced in C++. Instead, - leading zeros in integer literals lead to an interpretation as octal - number. Internally, the value will be stored as decimal number. For - instance, the C++ integer literal `010` will be serialized to `8`. - During deserialization, leading zeros yield an error. - - Not-a-number (NaN) values will be serialized to `null`. - - #### Limits - - [RFC 7159](http://rfc7159.net/rfc7159) specifies: - > An implementation may set limits on the range and precision of numbers. - - When the default type is used, the maximal integer number that can be - stored is `18446744073709551615` (UINT64_MAX) and the minimal integer - number that can be stored is `0`. Integer numbers that are out of range - will yield over/underflow when used in a constructor. During - deserialization, too large or small integer numbers will be automatically - be stored as @ref number_integer_t or @ref number_float_t. - - [RFC 7159](http://rfc7159.net/rfc7159) further states: - > Note that when such software is used, numbers that are integers and are - > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense - > that implementations will agree exactly on their numeric values. - - As this range is a subrange (when considered in conjunction with the - number_integer_t type) of the exactly supported range [0, UINT64_MAX], - this class's integer type is interoperable. - - #### Storage - - Integer number values are stored directly inside a @ref basic_json type. - - @sa @ref number_float_t -- type for number values (floating-point) - @sa @ref number_integer_t -- type for number values (integer) - - @since version 2.0.0 - */ - using number_unsigned_t = NumberUnsignedType; - - /*! - @brief a type for a number (floating-point) - - [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: - > The representation of numbers is similar to that used in most - > programming languages. A number is represented in base 10 using decimal - > digits. It contains an integer component that may be prefixed with an - > optional minus sign, which may be followed by a fraction part and/or an - > exponent part. Leading zeros are not allowed. (...) Numeric values that - > cannot be represented in the grammar below (such as Infinity and NaN) - > are not permitted. - - This description includes both integer and floating-point numbers. - However, C++ allows more precise storage if it is known whether the number - is a signed integer, an unsigned integer or a floating-point number. - Therefore, three different types, @ref number_integer_t, @ref - number_unsigned_t and @ref number_float_t are used. - - To store floating-point numbers in C++, a type is defined by the template - parameter @a NumberFloatType which chooses the type to use. - - #### Default type - - With the default values for @a NumberFloatType (`double`), the default - value for @a number_float_t is: - - @code {.cpp} - double - @endcode - - #### Default behavior - - - The restrictions about leading zeros is not enforced in C++. Instead, - leading zeros in floating-point literals will be ignored. Internally, - the value will be stored as decimal number. For instance, the C++ - floating-point literal `01.2` will be serialized to `1.2`. During - deserialization, leading zeros yield an error. - - Not-a-number (NaN) values will be serialized to `null`. - - #### Limits - - [RFC 7159](http://rfc7159.net/rfc7159) states: - > This specification allows implementations to set limits on the range and - > precision of numbers accepted. Since software that implements IEEE - > 754-2008 binary64 (double precision) numbers is generally available and - > widely used, good interoperability can be achieved by implementations - > that expect no more precision or range than these provide, in the sense - > that implementations will approximate JSON numbers within the expected - > precision. - - This implementation does exactly follow this approach, as it uses double - precision floating-point numbers. Note values smaller than - `-1.79769313486232e+308` and values greater than `1.79769313486232e+308` - will be stored as NaN internally and be serialized to `null`. - - #### Storage - - Floating-point number values are stored directly inside a @ref basic_json - type. - - @sa @ref number_integer_t -- type for number values (integer) - - @sa @ref number_unsigned_t -- type for number values (unsigned integer) - - @since version 1.0.0 - */ - using number_float_t = NumberFloatType; - - /*! - @brief a type for a packed binary type - - This type is a type designed to carry binary data that appears in various - serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and - BSON's generic binary subtype. This type is NOT a part of standard JSON and - exists solely for compatibility with these binary types. As such, it is - simply defined as an ordered sequence of zero or more byte values. - - Additionally, as an implementation detail, the subtype of the binary data is - carried around as a `std::uint8_t`, which is compatible with both of the - binary data formats that use binary subtyping, (though the specific - numbering is incompatible with each other, and it is up to the user to - translate between them). - - [CBOR's RFC 7049](https://tools.ietf.org/html/rfc7049) describes this type - as: - > Major type 2: a byte string. The string's length in bytes is represented - > following the rules for positive integers (major type 0). - - [MessagePack's documentation on the bin type - family](https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family) - describes this type as: - > Bin format family stores an byte array in 2, 3, or 5 bytes of extra bytes - > in addition to the size of the byte array. - - [BSON's specifications](http://bsonspec.org/spec.html) describe several - binary types; however, this type is intended to represent the generic binary - type which has the description: - > Generic binary subtype - This is the most commonly used binary subtype and - > should be the 'default' for drivers and tools. - - None of these impose any limitations on the internal representation other - than the basic unit of storage be some type of array whose parts are - decomposable into bytes. - - The default representation of this binary format is a - `std::vector`, which is a very common way to represent a byte - array in modern C++. - - #### Default type - - The default values for @a BinaryType is `std::vector` - - #### Storage - - Binary Arrays are stored as pointers in a @ref basic_json type. That is, - for any access to array values, a pointer of the type `binary_t*` must be - dereferenced. - - #### Notes on subtypes - - - CBOR - - Binary values are represented as byte strings. No subtypes are - supported and will be ignored when CBOR is written. - - MessagePack - - If a subtype is given and the binary array contains exactly 1, 2, 4, 8, - or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) - is used. For other sizes, the ext family (ext8, ext16, ext32) is used. - The subtype is then added as singed 8-bit integer. - - If no subtype is given, the bin family (bin8, bin16, bin32) is used. - - BSON - - If a subtype is given, it is used and added as unsigned 8-bit integer. - - If no subtype is given, the generic binary subtype 0x00 is used. - - @sa @ref binary -- create a binary array - - @since version 3.8.0 - */ - using binary_t = nlohmann::byte_container_with_subtype; - /// @} - - private: - - /// helper for exception-safe object creation - template - JSON_HEDLEY_RETURNS_NON_NULL - static T* create(Args&& ... args) - { - AllocatorType alloc; - using AllocatorTraits = std::allocator_traits>; - - auto deleter = [&](T * object) - { - AllocatorTraits::deallocate(alloc, object, 1); - }; - std::unique_ptr object(AllocatorTraits::allocate(alloc, 1), deleter); - AllocatorTraits::construct(alloc, object.get(), std::forward(args)...); - JSON_ASSERT(object != nullptr); - return object.release(); - } - - //////////////////////// - // JSON value storage // - //////////////////////// - - /*! - @brief a JSON value - - The actual storage for a JSON value of the @ref basic_json class. This - union combines the different storage types for the JSON value types - defined in @ref value_t. - - JSON type | value_t type | used type - --------- | --------------- | ------------------------ - object | object | pointer to @ref object_t - array | array | pointer to @ref array_t - string | string | pointer to @ref string_t - boolean | boolean | @ref boolean_t - number | number_integer | @ref number_integer_t - number | number_unsigned | @ref number_unsigned_t - number | number_float | @ref number_float_t - binary | binary | pointer to @ref binary_t - null | null | *no value is stored* - - @note Variable-length types (objects, arrays, and strings) are stored as - pointers. The size of the union should not exceed 64 bits if the default - value types are used. - - @since version 1.0.0 - */ - union json_value - { - /// object (stored with pointer to save storage) - object_t* object; - /// array (stored with pointer to save storage) - array_t* array; - /// string (stored with pointer to save storage) - string_t* string; - /// binary (stored with pointer to save storage) - binary_t* binary; - /// boolean - boolean_t boolean; - /// number (integer) - number_integer_t number_integer; - /// number (unsigned integer) - number_unsigned_t number_unsigned; - /// number (floating-point) - number_float_t number_float; - - /// default constructor (for null values) - json_value() = default; - /// constructor for booleans - json_value(boolean_t v) noexcept : boolean(v) {} - /// constructor for numbers (integer) - json_value(number_integer_t v) noexcept : number_integer(v) {} - /// constructor for numbers (unsigned) - json_value(number_unsigned_t v) noexcept : number_unsigned(v) {} - /// constructor for numbers (floating-point) - json_value(number_float_t v) noexcept : number_float(v) {} - /// constructor for empty values of a given type - json_value(value_t t) - { - switch (t) - { - case value_t::object: - { - object = create(); - break; - } - - case value_t::array: - { - array = create(); - break; - } - - case value_t::string: - { - string = create(""); - break; - } - - case value_t::binary: - { - binary = create(); - break; - } - - case value_t::boolean: - { - boolean = boolean_t(false); - break; - } - - case value_t::number_integer: - { - number_integer = number_integer_t(0); - break; - } - - case value_t::number_unsigned: - { - number_unsigned = number_unsigned_t(0); - break; - } - - case value_t::number_float: - { - number_float = number_float_t(0.0); - break; - } - - case value_t::null: - { - object = nullptr; // silence warning, see #821 - break; - } - - default: - { - object = nullptr; // silence warning, see #821 - if (JSON_HEDLEY_UNLIKELY(t == value_t::null)) - { - JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.9.1")); // LCOV_EXCL_LINE - } - break; - } - } - } - - /// constructor for strings - json_value(const string_t& value) - { - string = create(value); - } - - /// constructor for rvalue strings - json_value(string_t&& value) - { - string = create(std::move(value)); - } - - /// constructor for objects - json_value(const object_t& value) - { - object = create(value); - } - - /// constructor for rvalue objects - json_value(object_t&& value) - { - object = create(std::move(value)); - } - - /// constructor for arrays - json_value(const array_t& value) - { - array = create(value); - } - - /// constructor for rvalue arrays - json_value(array_t&& value) - { - array = create(std::move(value)); - } - - /// constructor for binary arrays - json_value(const typename binary_t::container_type& value) - { - binary = create(value); - } - - /// constructor for rvalue binary arrays - json_value(typename binary_t::container_type&& value) - { - binary = create(std::move(value)); - } - - /// constructor for binary arrays (internal type) - json_value(const binary_t& value) - { - binary = create(value); - } - - /// constructor for rvalue binary arrays (internal type) - json_value(binary_t&& value) - { - binary = create(std::move(value)); - } - - void destroy(value_t t) noexcept - { - // flatten the current json_value to a heap-allocated stack - std::vector stack; - - // move the top-level items to stack - if (t == value_t::array) - { - stack.reserve(array->size()); - std::move(array->begin(), array->end(), std::back_inserter(stack)); - } - else if (t == value_t::object) - { - stack.reserve(object->size()); - for (auto&& it : *object) - { - stack.push_back(std::move(it.second)); - } - } - - while (!stack.empty()) - { - // move the last item to local variable to be processed - basic_json current_item(std::move(stack.back())); - stack.pop_back(); - - // if current_item is array/object, move - // its children to the stack to be processed later - if (current_item.is_array()) - { - std::move(current_item.m_value.array->begin(), current_item.m_value.array->end(), - std::back_inserter(stack)); - - current_item.m_value.array->clear(); - } - else if (current_item.is_object()) - { - for (auto&& it : *current_item.m_value.object) - { - stack.push_back(std::move(it.second)); - } - - current_item.m_value.object->clear(); - } - - // it's now safe that current_item get destructed - // since it doesn't have any children - } - - switch (t) - { - case value_t::object: - { - AllocatorType alloc; - std::allocator_traits::destroy(alloc, object); - std::allocator_traits::deallocate(alloc, object, 1); - break; - } - - case value_t::array: - { - AllocatorType alloc; - std::allocator_traits::destroy(alloc, array); - std::allocator_traits::deallocate(alloc, array, 1); - break; - } - - case value_t::string: - { - AllocatorType alloc; - std::allocator_traits::destroy(alloc, string); - std::allocator_traits::deallocate(alloc, string, 1); - break; - } - - case value_t::binary: - { - AllocatorType alloc; - std::allocator_traits::destroy(alloc, binary); - std::allocator_traits::deallocate(alloc, binary, 1); - break; - } - - default: - { - break; - } - } - } - }; - - /*! - @brief checks the class invariants - - This function asserts the class invariants. It needs to be called at the - end of every constructor to make sure that created objects respect the - invariant. Furthermore, it has to be called each time the type of a JSON - value is changed, because the invariant expresses a relationship between - @a m_type and @a m_value. - */ - void assert_invariant() const noexcept - { - JSON_ASSERT(m_type != value_t::object || m_value.object != nullptr); - JSON_ASSERT(m_type != value_t::array || m_value.array != nullptr); - JSON_ASSERT(m_type != value_t::string || m_value.string != nullptr); - JSON_ASSERT(m_type != value_t::binary || m_value.binary != nullptr); - } - - public: - ////////////////////////// - // JSON parser callback // - ////////////////////////// - - /*! - @brief parser event types - - The parser callback distinguishes the following events: - - `object_start`: the parser read `{` and started to process a JSON object - - `key`: the parser read a key of a value in an object - - `object_end`: the parser read `}` and finished processing a JSON object - - `array_start`: the parser read `[` and started to process a JSON array - - `array_end`: the parser read `]` and finished processing a JSON array - - `value`: the parser finished reading a JSON value - - @image html callback_events.png "Example when certain parse events are triggered" - - @sa @ref parser_callback_t for more information and examples - */ - using parse_event_t = detail::parse_event_t; - - /*! - @brief per-element parser callback type - - With a parser callback function, the result of parsing a JSON text can be - influenced. When passed to @ref parse, it is called on certain events - (passed as @ref parse_event_t via parameter @a event) with a set recursion - depth @a depth and context JSON value @a parsed. The return value of the - callback function is a boolean indicating whether the element that emitted - the callback shall be kept or not. - - We distinguish six scenarios (determined by the event type) in which the - callback function can be called. The following table describes the values - of the parameters @a depth, @a event, and @a parsed. - - parameter @a event | description | parameter @a depth | parameter @a parsed - ------------------ | ----------- | ------------------ | ------------------- - parse_event_t::object_start | the parser read `{` and started to process a JSON object | depth of the parent of the JSON object | a JSON value with type discarded - parse_event_t::key | the parser read a key of a value in an object | depth of the currently parsed JSON object | a JSON string containing the key - parse_event_t::object_end | the parser read `}` and finished processing a JSON object | depth of the parent of the JSON object | the parsed JSON object - parse_event_t::array_start | the parser read `[` and started to process a JSON array | depth of the parent of the JSON array | a JSON value with type discarded - parse_event_t::array_end | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array - parse_event_t::value | the parser finished reading a JSON value | depth of the value | the parsed JSON value - - @image html callback_events.png "Example when certain parse events are triggered" - - Discarding a value (i.e., returning `false`) has different effects - depending on the context in which function was called: - - - Discarded values in structured types are skipped. That is, the parser - will behave as if the discarded value was never read. - - In case a value outside a structured type is skipped, it is replaced - with `null`. This case happens if the top-level element is skipped. - - @param[in] depth the depth of the recursion during parsing - - @param[in] event an event of type parse_event_t indicating the context in - the callback function has been called - - @param[in,out] parsed the current intermediate parse result; note that - writing to this value has no effect for parse_event_t::key events - - @return Whether the JSON value which called the function during parsing - should be kept (`true`) or not (`false`). In the latter case, it is either - skipped completely or replaced by an empty discarded object. - - @sa @ref parse for examples - - @since version 1.0.0 - */ - using parser_callback_t = detail::parser_callback_t; - - ////////////////// - // constructors // - ////////////////// - - /// @name constructors and destructors - /// Constructors of class @ref basic_json, copy/move constructor, copy - /// assignment, static functions creating objects, and the destructor. - /// @{ - - /*! - @brief create an empty value with a given type - - Create an empty JSON value with a given type. The value will be default - initialized with an empty value which depends on the type: - - Value type | initial value - ----------- | ------------- - null | `null` - boolean | `false` - string | `""` - number | `0` - object | `{}` - array | `[]` - binary | empty array - - @param[in] v the type of the value to create - - @complexity Constant. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @liveexample{The following code shows the constructor for different @ref - value_t values,basic_json__value_t} - - @sa @ref clear() -- restores the postcondition of this constructor - - @since version 1.0.0 - */ - basic_json(const value_t v) - : m_type(v), m_value(v) - { - assert_invariant(); - } - - /*! - @brief create a null object - - Create a `null` JSON value. It either takes a null pointer as parameter - (explicitly creating `null`) or no parameter (implicitly creating `null`). - The passed null pointer itself is not read -- it is only used to choose - the right constructor. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this constructor never throws - exceptions. - - @liveexample{The following code shows the constructor with and without a - null pointer parameter.,basic_json__nullptr_t} - - @since version 1.0.0 - */ - basic_json(std::nullptr_t = nullptr) noexcept - : basic_json(value_t::null) - { - assert_invariant(); - } - - /*! - @brief create a JSON value - - This is a "catch all" constructor for all compatible JSON types; that is, - types for which a `to_json()` method exists. The constructor forwards the - parameter @a val to that method (to `json_serializer::to_json` method - with `U = uncvref_t`, to be exact). - - Template type @a CompatibleType includes, but is not limited to, the - following types: - - **arrays**: @ref array_t and all kinds of compatible containers such as - `std::vector`, `std::deque`, `std::list`, `std::forward_list`, - `std::array`, `std::valarray`, `std::set`, `std::unordered_set`, - `std::multiset`, and `std::unordered_multiset` with a `value_type` from - which a @ref basic_json value can be constructed. - - **objects**: @ref object_t and all kinds of compatible associative - containers such as `std::map`, `std::unordered_map`, `std::multimap`, - and `std::unordered_multimap` with a `key_type` compatible to - @ref string_t and a `value_type` from which a @ref basic_json value can - be constructed. - - **strings**: @ref string_t, string literals, and all compatible string - containers can be used. - - **numbers**: @ref number_integer_t, @ref number_unsigned_t, - @ref number_float_t, and all convertible number types such as `int`, - `size_t`, `int64_t`, `float` or `double` can be used. - - **boolean**: @ref boolean_t / `bool` can be used. - - **binary**: @ref binary_t / `std::vector` may be used, - unfortunately because string literals cannot be distinguished from binary - character arrays by the C++ type system, all types compatible with `const - char*` will be directed to the string constructor instead. This is both - for backwards compatibility, and due to the fact that a binary type is not - a standard JSON type. - - See the examples below. - - @tparam CompatibleType a type such that: - - @a CompatibleType is not derived from `std::istream`, - - @a CompatibleType is not @ref basic_json (to avoid hijacking copy/move - constructors), - - @a CompatibleType is not a different @ref basic_json type (i.e. with different template arguments) - - @a CompatibleType is not a @ref basic_json nested type (e.g., - @ref json_pointer, @ref iterator, etc ...) - - @ref @ref json_serializer has a - `to_json(basic_json_t&, CompatibleType&&)` method - - @tparam U = `uncvref_t` - - @param[in] val the value to be forwarded to the respective constructor - - @complexity Usually linear in the size of the passed @a val, also - depending on the implementation of the called `to_json()` - method. - - @exceptionsafety Depends on the called constructor. For types directly - supported by the library (i.e., all types for which no `to_json()` function - was provided), strong guarantee holds: if an exception is thrown, there are - no changes to any JSON value. - - @liveexample{The following code shows the constructor with several - compatible types.,basic_json__CompatibleType} - - @since version 2.1.0 - */ - template < typename CompatibleType, - typename U = detail::uncvref_t, - detail::enable_if_t < - !detail::is_basic_json::value && detail::is_compatible_type::value, int > = 0 > - basic_json(CompatibleType && val) noexcept(noexcept( - JSONSerializer::to_json(std::declval(), - std::forward(val)))) - { - JSONSerializer::to_json(*this, std::forward(val)); - assert_invariant(); - } - - /*! - @brief create a JSON value from an existing one - - This is a constructor for existing @ref basic_json types. - It does not hijack copy/move constructors, since the parameter has different - template arguments than the current ones. - - The constructor tries to convert the internal @ref m_value of the parameter. - - @tparam BasicJsonType a type such that: - - @a BasicJsonType is a @ref basic_json type. - - @a BasicJsonType has different template arguments than @ref basic_json_t. - - @param[in] val the @ref basic_json value to be converted. - - @complexity Usually linear in the size of the passed @a val, also - depending on the implementation of the called `to_json()` - method. - - @exceptionsafety Depends on the called constructor. For types directly - supported by the library (i.e., all types for which no `to_json()` function - was provided), strong guarantee holds: if an exception is thrown, there are - no changes to any JSON value. - - @since version 3.2.0 - */ - template < typename BasicJsonType, - detail::enable_if_t < - detail::is_basic_json::value&& !std::is_same::value, int > = 0 > - basic_json(const BasicJsonType& val) - { - using other_boolean_t = typename BasicJsonType::boolean_t; - using other_number_float_t = typename BasicJsonType::number_float_t; - using other_number_integer_t = typename BasicJsonType::number_integer_t; - using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using other_string_t = typename BasicJsonType::string_t; - using other_object_t = typename BasicJsonType::object_t; - using other_array_t = typename BasicJsonType::array_t; - using other_binary_t = typename BasicJsonType::binary_t; - - switch (val.type()) - { - case value_t::boolean: - JSONSerializer::to_json(*this, val.template get()); - break; - case value_t::number_float: - JSONSerializer::to_json(*this, val.template get()); - break; - case value_t::number_integer: - JSONSerializer::to_json(*this, val.template get()); - break; - case value_t::number_unsigned: - JSONSerializer::to_json(*this, val.template get()); - break; - case value_t::string: - JSONSerializer::to_json(*this, val.template get_ref()); - break; - case value_t::object: - JSONSerializer::to_json(*this, val.template get_ref()); - break; - case value_t::array: - JSONSerializer::to_json(*this, val.template get_ref()); - break; - case value_t::binary: - JSONSerializer::to_json(*this, val.template get_ref()); - break; - case value_t::null: - *this = nullptr; - break; - case value_t::discarded: - m_type = value_t::discarded; - break; - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - assert_invariant(); - } - - /*! - @brief create a container (array or object) from an initializer list - - Creates a JSON value of type array or object from the passed initializer - list @a init. In case @a type_deduction is `true` (default), the type of - the JSON value to be created is deducted from the initializer list @a init - according to the following rules: - - 1. If the list is empty, an empty JSON object value `{}` is created. - 2. If the list consists of pairs whose first element is a string, a JSON - object value is created where the first elements of the pairs are - treated as keys and the second elements are as values. - 3. In all other cases, an array is created. - - The rules aim to create the best fit between a C++ initializer list and - JSON values. The rationale is as follows: - - 1. The empty initializer list is written as `{}` which is exactly an empty - JSON object. - 2. C++ has no way of describing mapped types other than to list a list of - pairs. As JSON requires that keys must be of type string, rule 2 is the - weakest constraint one can pose on initializer lists to interpret them - as an object. - 3. In all other cases, the initializer list could not be interpreted as - JSON object type, so interpreting it as JSON array type is safe. - - With the rules described above, the following JSON values cannot be - expressed by an initializer list: - - - the empty array (`[]`): use @ref array(initializer_list_t) - with an empty initializer list in this case - - arrays whose elements satisfy rule 2: use @ref - array(initializer_list_t) with the same initializer list - in this case - - @note When used without parentheses around an empty initializer list, @ref - basic_json() is called instead of this function, yielding the JSON null - value. - - @param[in] init initializer list with JSON values - - @param[in] type_deduction internal parameter; when set to `true`, the type - of the JSON value is deducted from the initializer list @a init; when set - to `false`, the type provided via @a manual_type is forced. This mode is - used by the functions @ref array(initializer_list_t) and - @ref object(initializer_list_t). - - @param[in] manual_type internal parameter; when @a type_deduction is set - to `false`, the created JSON value will use the provided type (only @ref - value_t::array and @ref value_t::object are valid); when @a type_deduction - is set to `true`, this parameter has no effect - - @throw type_error.301 if @a type_deduction is `false`, @a manual_type is - `value_t::object`, but @a init contains an element which is not a pair - whose first element is a string. In this case, the constructor could not - create an object. If @a type_deduction would have be `true`, an array - would have been created. See @ref object(initializer_list_t) - for an example. - - @complexity Linear in the size of the initializer list @a init. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @liveexample{The example below shows how JSON values are created from - initializer lists.,basic_json__list_init_t} - - @sa @ref array(initializer_list_t) -- create a JSON array - value from an initializer list - @sa @ref object(initializer_list_t) -- create a JSON object - value from an initializer list - - @since version 1.0.0 - */ - basic_json(initializer_list_t init, - bool type_deduction = true, - value_t manual_type = value_t::array) - { - // check if each element is an array with two elements whose first - // element is a string - bool is_an_object = std::all_of(init.begin(), init.end(), - [](const detail::json_ref& element_ref) - { - return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[0].is_string(); - }); - - // adjust type if type deduction is not wanted - if (!type_deduction) - { - // if array is wanted, do not create an object though possible - if (manual_type == value_t::array) - { - is_an_object = false; - } - - // if object is wanted but impossible, throw an exception - if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object)) - { - JSON_THROW(type_error::create(301, "cannot create object from initializer list")); - } - } - - if (is_an_object) - { - // the initializer list is a list of pairs -> create object - m_type = value_t::object; - m_value = value_t::object; - - std::for_each(init.begin(), init.end(), [this](const detail::json_ref& element_ref) - { - auto element = element_ref.moved_or_copied(); - m_value.object->emplace( - std::move(*((*element.m_value.array)[0].m_value.string)), - std::move((*element.m_value.array)[1])); - }); - } - else - { - // the initializer list describes an array -> create array - m_type = value_t::array; - m_value.array = create(init.begin(), init.end()); - } - - assert_invariant(); - } - - /*! - @brief explicitly create a binary array (without subtype) - - Creates a JSON binary array value from a given binary container. Binary - values are part of various binary formats, such as CBOR, MessagePack, and - BSON. This constructor is used to create a value for serialization to those - formats. - - @note Note, this function exists because of the difficulty in correctly - specifying the correct template overload in the standard value ctor, as both - JSON arrays and JSON binary arrays are backed with some form of a - `std::vector`. Because JSON binary arrays are a non-standard extension it - was decided that it would be best to prevent automatic initialization of a - binary array type, for backwards compatibility and so it does not happen on - accident. - - @param[in] init container containing bytes to use as binary type - - @return JSON binary array value - - @complexity Linear in the size of @a init. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @since version 3.8.0 - */ - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json binary(const typename binary_t::container_type& init) - { - auto res = basic_json(); - res.m_type = value_t::binary; - res.m_value = init; - return res; - } - - /*! - @brief explicitly create a binary array (with subtype) - - Creates a JSON binary array value from a given binary container. Binary - values are part of various binary formats, such as CBOR, MessagePack, and - BSON. This constructor is used to create a value for serialization to those - formats. - - @note Note, this function exists because of the difficulty in correctly - specifying the correct template overload in the standard value ctor, as both - JSON arrays and JSON binary arrays are backed with some form of a - `std::vector`. Because JSON binary arrays are a non-standard extension it - was decided that it would be best to prevent automatic initialization of a - binary array type, for backwards compatibility and so it does not happen on - accident. - - @param[in] init container containing bytes to use as binary type - @param[in] subtype subtype to use in MessagePack and BSON - - @return JSON binary array value - - @complexity Linear in the size of @a init. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @since version 3.8.0 - */ - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json binary(const typename binary_t::container_type& init, std::uint8_t subtype) - { - auto res = basic_json(); - res.m_type = value_t::binary; - res.m_value = binary_t(init, subtype); - return res; - } - - /// @copydoc binary(const typename binary_t::container_type&) - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json binary(typename binary_t::container_type&& init) - { - auto res = basic_json(); - res.m_type = value_t::binary; - res.m_value = std::move(init); - return res; - } - - /// @copydoc binary(const typename binary_t::container_type&, std::uint8_t) - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json binary(typename binary_t::container_type&& init, std::uint8_t subtype) - { - auto res = basic_json(); - res.m_type = value_t::binary; - res.m_value = binary_t(std::move(init), subtype); - return res; - } - - /*! - @brief explicitly create an array from an initializer list - - Creates a JSON array value from a given initializer list. That is, given a - list of values `a, b, c`, creates the JSON value `[a, b, c]`. If the - initializer list is empty, the empty array `[]` is created. - - @note This function is only needed to express two edge cases that cannot - be realized with the initializer list constructor (@ref - basic_json(initializer_list_t, bool, value_t)). These cases - are: - 1. creating an array whose elements are all pairs whose first element is a - string -- in this case, the initializer list constructor would create an - object, taking the first elements as keys - 2. creating an empty array -- passing the empty initializer list to the - initializer list constructor yields an empty object - - @param[in] init initializer list with JSON values to create an array from - (optional) - - @return JSON array value - - @complexity Linear in the size of @a init. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @liveexample{The following code shows an example for the `array` - function.,array} - - @sa @ref basic_json(initializer_list_t, bool, value_t) -- - create a JSON value from an initializer list - @sa @ref object(initializer_list_t) -- create a JSON object - value from an initializer list - - @since version 1.0.0 - */ - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json array(initializer_list_t init = {}) - { - return basic_json(init, false, value_t::array); - } - - /*! - @brief explicitly create an object from an initializer list - - Creates a JSON object value from a given initializer list. The initializer - lists elements must be pairs, and their first elements must be strings. If - the initializer list is empty, the empty object `{}` is created. - - @note This function is only added for symmetry reasons. In contrast to the - related function @ref array(initializer_list_t), there are - no cases which can only be expressed by this function. That is, any - initializer list @a init can also be passed to the initializer list - constructor @ref basic_json(initializer_list_t, bool, value_t). - - @param[in] init initializer list to create an object from (optional) - - @return JSON object value - - @throw type_error.301 if @a init is not a list of pairs whose first - elements are strings. In this case, no object can be created. When such a - value is passed to @ref basic_json(initializer_list_t, bool, value_t), - an array would have been created from the passed initializer list @a init. - See example below. - - @complexity Linear in the size of @a init. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @liveexample{The following code shows an example for the `object` - function.,object} - - @sa @ref basic_json(initializer_list_t, bool, value_t) -- - create a JSON value from an initializer list - @sa @ref array(initializer_list_t) -- create a JSON array - value from an initializer list - - @since version 1.0.0 - */ - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json object(initializer_list_t init = {}) - { - return basic_json(init, false, value_t::object); - } - - /*! - @brief construct an array with count copies of given value - - Constructs a JSON array value by creating @a cnt copies of a passed value. - In case @a cnt is `0`, an empty array is created. - - @param[in] cnt the number of JSON copies of @a val to create - @param[in] val the JSON value to copy - - @post `std::distance(begin(),end()) == cnt` holds. - - @complexity Linear in @a cnt. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @liveexample{The following code shows examples for the @ref - basic_json(size_type\, const basic_json&) - constructor.,basic_json__size_type_basic_json} - - @since version 1.0.0 - */ - basic_json(size_type cnt, const basic_json& val) - : m_type(value_t::array) - { - m_value.array = create(cnt, val); - assert_invariant(); - } - - /*! - @brief construct a JSON container given an iterator range - - Constructs the JSON value with the contents of the range `[first, last)`. - The semantics depends on the different types a JSON value can have: - - In case of a null type, invalid_iterator.206 is thrown. - - In case of other primitive types (number, boolean, or string), @a first - must be `begin()` and @a last must be `end()`. In this case, the value is - copied. Otherwise, invalid_iterator.204 is thrown. - - In case of structured types (array, object), the constructor behaves as - similar versions for `std::vector` or `std::map`; that is, a JSON array - or object is constructed from the values in the range. - - @tparam InputIT an input iterator type (@ref iterator or @ref - const_iterator) - - @param[in] first begin of the range to copy from (included) - @param[in] last end of the range to copy from (excluded) - - @pre Iterators @a first and @a last must be initialized. **This - precondition is enforced with an assertion (see warning).** If - assertions are switched off, a violation of this precondition yields - undefined behavior. - - @pre Range `[first, last)` is valid. Usually, this precondition cannot be - checked efficiently. Only certain edge cases are detected; see the - description of the exceptions below. A violation of this precondition - yields undefined behavior. - - @warning A precondition is enforced with a runtime assertion that will - result in calling `std::abort` if this precondition is not met. - Assertions can be disabled by defining `NDEBUG` at compile time. - See https://en.cppreference.com/w/cpp/error/assert for more - information. - - @throw invalid_iterator.201 if iterators @a first and @a last are not - compatible (i.e., do not belong to the same JSON value). In this case, - the range `[first, last)` is undefined. - @throw invalid_iterator.204 if iterators @a first and @a last belong to a - primitive type (number, boolean, or string), but @a first does not point - to the first element any more. In this case, the range `[first, last)` is - undefined. See example code below. - @throw invalid_iterator.206 if iterators @a first and @a last belong to a - null value. In this case, the range `[first, last)` is undefined. - - @complexity Linear in distance between @a first and @a last. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @liveexample{The example below shows several ways to create JSON values by - specifying a subrange with iterators.,basic_json__InputIt_InputIt} - - @since version 1.0.0 - */ - template < class InputIT, typename std::enable_if < - std::is_same::value || - std::is_same::value, int >::type = 0 > - basic_json(InputIT first, InputIT last) - { - JSON_ASSERT(first.m_object != nullptr); - JSON_ASSERT(last.m_object != nullptr); - - // make sure iterator fits the current value - if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) - { - JSON_THROW(invalid_iterator::create(201, "iterators are not compatible")); - } - - // copy type from first iterator - m_type = first.m_object->m_type; - - // check if iterator range is complete for primitive values - switch (m_type) - { - case value_t::boolean: - case value_t::number_float: - case value_t::number_integer: - case value_t::number_unsigned: - case value_t::string: - { - if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin() - || !last.m_it.primitive_iterator.is_end())) - { - JSON_THROW(invalid_iterator::create(204, "iterators out of range")); - } - break; - } - - default: - break; - } - - switch (m_type) - { - case value_t::number_integer: - { - m_value.number_integer = first.m_object->m_value.number_integer; - break; - } - - case value_t::number_unsigned: - { - m_value.number_unsigned = first.m_object->m_value.number_unsigned; - break; - } - - case value_t::number_float: - { - m_value.number_float = first.m_object->m_value.number_float; - break; - } - - case value_t::boolean: - { - m_value.boolean = first.m_object->m_value.boolean; - break; - } - - case value_t::string: - { - m_value = *first.m_object->m_value.string; - break; - } - - case value_t::object: - { - m_value.object = create(first.m_it.object_iterator, - last.m_it.object_iterator); - break; - } - - case value_t::array: - { - m_value.array = create(first.m_it.array_iterator, - last.m_it.array_iterator); - break; - } - - case value_t::binary: - { - m_value = *first.m_object->m_value.binary; - break; - } - - default: - JSON_THROW(invalid_iterator::create(206, "cannot construct with iterators from " + - std::string(first.m_object->type_name()))); - } - - assert_invariant(); - } - - - /////////////////////////////////////// - // other constructors and destructor // - /////////////////////////////////////// - - template, - std::is_same>::value, int> = 0 > - basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {} - - /*! - @brief copy constructor - - Creates a copy of a given JSON value. - - @param[in] other the JSON value to copy - - @post `*this == other` - - @complexity Linear in the size of @a other. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes to any JSON value. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is linear. - - As postcondition, it holds: `other == basic_json(other)`. - - @liveexample{The following code shows an example for the copy - constructor.,basic_json__basic_json} - - @since version 1.0.0 - */ - basic_json(const basic_json& other) - : m_type(other.m_type) - { - // check of passed value is valid - other.assert_invariant(); - - switch (m_type) - { - case value_t::object: - { - m_value = *other.m_value.object; - break; - } - - case value_t::array: - { - m_value = *other.m_value.array; - break; - } - - case value_t::string: - { - m_value = *other.m_value.string; - break; - } - - case value_t::boolean: - { - m_value = other.m_value.boolean; - break; - } - - case value_t::number_integer: - { - m_value = other.m_value.number_integer; - break; - } - - case value_t::number_unsigned: - { - m_value = other.m_value.number_unsigned; - break; - } - - case value_t::number_float: - { - m_value = other.m_value.number_float; - break; - } - - case value_t::binary: - { - m_value = *other.m_value.binary; - break; - } - - default: - break; - } - - assert_invariant(); - } - - /*! - @brief move constructor - - Move constructor. Constructs a JSON value with the contents of the given - value @a other using move semantics. It "steals" the resources from @a - other and leaves it as JSON null value. - - @param[in,out] other value to move to this object - - @post `*this` has the same value as @a other before the call. - @post @a other is a JSON null value. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this constructor never throws - exceptions. - - @requirement This function helps `basic_json` satisfying the - [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible) - requirements. - - @liveexample{The code below shows the move constructor explicitly called - via std::move.,basic_json__moveconstructor} - - @since version 1.0.0 - */ - basic_json(basic_json&& other) noexcept - : m_type(std::move(other.m_type)), - m_value(std::move(other.m_value)) - { - // check that passed value is valid - other.assert_invariant(); - - // invalidate payload - other.m_type = value_t::null; - other.m_value = {}; - - assert_invariant(); - } - - /*! - @brief copy assignment - - Copy assignment operator. Copies a JSON value via the "copy and swap" - strategy: It is expressed in terms of the copy constructor, destructor, - and the `swap()` member function. - - @param[in] other value to copy from - - @complexity Linear. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is linear. - - @liveexample{The code below shows and example for the copy assignment. It - creates a copy of value `a` which is then swapped with `b`. Finally\, the - copy of `a` (which is the null value after the swap) is - destroyed.,basic_json__copyassignment} - - @since version 1.0.0 - */ - basic_json& operator=(basic_json other) noexcept ( - std::is_nothrow_move_constructible::value&& - std::is_nothrow_move_assignable::value&& - std::is_nothrow_move_constructible::value&& - std::is_nothrow_move_assignable::value - ) - { - // check that passed value is valid - other.assert_invariant(); - - using std::swap; - swap(m_type, other.m_type); - swap(m_value, other.m_value); - - assert_invariant(); - return *this; - } - - /*! - @brief destructor - - Destroys the JSON value and frees all allocated memory. - - @complexity Linear. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is linear. - - All stored elements are destroyed and all memory is freed. - - @since version 1.0.0 - */ - ~basic_json() noexcept - { - assert_invariant(); - m_value.destroy(m_type); - } - - /// @} - - public: - /////////////////////// - // object inspection // - /////////////////////// - - /// @name object inspection - /// Functions to inspect the type of a JSON value. - /// @{ - - /*! - @brief serialization - - Serialization function for JSON values. The function tries to mimic - Python's `json.dumps()` function, and currently supports its @a indent - and @a ensure_ascii parameters. - - @param[in] indent If indent is nonnegative, then array elements and object - members will be pretty-printed with that indent level. An indent level of - `0` will only insert newlines. `-1` (the default) selects the most compact - representation. - @param[in] indent_char The character to use for indentation if @a indent is - greater than `0`. The default is ` ` (space). - @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters - in the output are escaped with `\uXXXX` sequences, and the result consists - of ASCII characters only. - @param[in] error_handler how to react on decoding errors; there are three - possible values: `strict` (throws and exception in case a decoding error - occurs; default), `replace` (replace invalid UTF-8 sequences with U+FFFD), - and `ignore` (ignore invalid UTF-8 sequences during serialization; all - bytes are copied to the output unchanged). - - @return string containing the serialization of the JSON value - - @throw type_error.316 if a string stored inside the JSON value is not - UTF-8 encoded and @a error_handler is set to strict - - @note Binary values are serialized as object containing two keys: - - "bytes": an array of bytes as integers - - "subtype": the subtype as integer or "null" if the binary has no subtype - - @complexity Linear. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @liveexample{The following example shows the effect of different @a indent\, - @a indent_char\, and @a ensure_ascii parameters to the result of the - serialization.,dump} - - @see https://docs.python.org/2/library/json.html#json.dump - - @since version 1.0.0; indentation character @a indent_char, option - @a ensure_ascii and exceptions added in version 3.0.0; error - handlers added in version 3.4.0; serialization of binary values added - in version 3.8.0. - */ - string_t dump(const int indent = -1, - const char indent_char = ' ', - const bool ensure_ascii = false, - const error_handler_t error_handler = error_handler_t::strict) const - { - string_t result; - serializer s(detail::output_adapter(result), indent_char, error_handler); - - if (indent >= 0) - { - s.dump(*this, true, ensure_ascii, static_cast(indent)); - } - else - { - s.dump(*this, false, ensure_ascii, 0); - } - - return result; - } - - /*! - @brief return the type of the JSON value (explicit) - - Return the type of the JSON value as a value from the @ref value_t - enumeration. - - @return the type of the JSON value - Value type | return value - ------------------------- | ------------------------- - null | value_t::null - boolean | value_t::boolean - string | value_t::string - number (integer) | value_t::number_integer - number (unsigned integer) | value_t::number_unsigned - number (floating-point) | value_t::number_float - object | value_t::object - array | value_t::array - binary | value_t::binary - discarded | value_t::discarded - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `type()` for all JSON - types.,type} - - @sa @ref operator value_t() -- return the type of the JSON value (implicit) - @sa @ref type_name() -- return the type as string - - @since version 1.0.0 - */ - constexpr value_t type() const noexcept - { - return m_type; - } - - /*! - @brief return whether type is primitive - - This function returns true if and only if the JSON type is primitive - (string, number, boolean, or null). - - @return `true` if type is primitive (string, number, boolean, or null), - `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_primitive()` for all JSON - types.,is_primitive} - - @sa @ref is_structured() -- returns whether JSON value is structured - @sa @ref is_null() -- returns whether JSON value is `null` - @sa @ref is_string() -- returns whether JSON value is a string - @sa @ref is_boolean() -- returns whether JSON value is a boolean - @sa @ref is_number() -- returns whether JSON value is a number - @sa @ref is_binary() -- returns whether JSON value is a binary array - - @since version 1.0.0 - */ - constexpr bool is_primitive() const noexcept - { - return is_null() || is_string() || is_boolean() || is_number() || is_binary(); - } - - /*! - @brief return whether type is structured - - This function returns true if and only if the JSON type is structured - (array or object). - - @return `true` if type is structured (array or object), `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_structured()` for all JSON - types.,is_structured} - - @sa @ref is_primitive() -- returns whether value is primitive - @sa @ref is_array() -- returns whether value is an array - @sa @ref is_object() -- returns whether value is an object - - @since version 1.0.0 - */ - constexpr bool is_structured() const noexcept - { - return is_array() || is_object(); - } - - /*! - @brief return whether value is null - - This function returns true if and only if the JSON value is null. - - @return `true` if type is null, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_null()` for all JSON - types.,is_null} - - @since version 1.0.0 - */ - constexpr bool is_null() const noexcept - { - return m_type == value_t::null; - } - - /*! - @brief return whether value is a boolean - - This function returns true if and only if the JSON value is a boolean. - - @return `true` if type is boolean, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_boolean()` for all JSON - types.,is_boolean} - - @since version 1.0.0 - */ - constexpr bool is_boolean() const noexcept - { - return m_type == value_t::boolean; - } - - /*! - @brief return whether value is a number - - This function returns true if and only if the JSON value is a number. This - includes both integer (signed and unsigned) and floating-point values. - - @return `true` if type is number (regardless whether integer, unsigned - integer or floating-type), `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_number()` for all JSON - types.,is_number} - - @sa @ref is_number_integer() -- check if value is an integer or unsigned - integer number - @sa @ref is_number_unsigned() -- check if value is an unsigned integer - number - @sa @ref is_number_float() -- check if value is a floating-point number - - @since version 1.0.0 - */ - constexpr bool is_number() const noexcept - { - return is_number_integer() || is_number_float(); - } - - /*! - @brief return whether value is an integer number - - This function returns true if and only if the JSON value is a signed or - unsigned integer number. This excludes floating-point values. - - @return `true` if type is an integer or unsigned integer number, `false` - otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_number_integer()` for all - JSON types.,is_number_integer} - - @sa @ref is_number() -- check if value is a number - @sa @ref is_number_unsigned() -- check if value is an unsigned integer - number - @sa @ref is_number_float() -- check if value is a floating-point number - - @since version 1.0.0 - */ - constexpr bool is_number_integer() const noexcept - { - return m_type == value_t::number_integer || m_type == value_t::number_unsigned; - } - - /*! - @brief return whether value is an unsigned integer number - - This function returns true if and only if the JSON value is an unsigned - integer number. This excludes floating-point and signed integer values. - - @return `true` if type is an unsigned integer number, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_number_unsigned()` for all - JSON types.,is_number_unsigned} - - @sa @ref is_number() -- check if value is a number - @sa @ref is_number_integer() -- check if value is an integer or unsigned - integer number - @sa @ref is_number_float() -- check if value is a floating-point number - - @since version 2.0.0 - */ - constexpr bool is_number_unsigned() const noexcept - { - return m_type == value_t::number_unsigned; - } - - /*! - @brief return whether value is a floating-point number - - This function returns true if and only if the JSON value is a - floating-point number. This excludes signed and unsigned integer values. - - @return `true` if type is a floating-point number, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_number_float()` for all - JSON types.,is_number_float} - - @sa @ref is_number() -- check if value is number - @sa @ref is_number_integer() -- check if value is an integer number - @sa @ref is_number_unsigned() -- check if value is an unsigned integer - number - - @since version 1.0.0 - */ - constexpr bool is_number_float() const noexcept - { - return m_type == value_t::number_float; - } - - /*! - @brief return whether value is an object - - This function returns true if and only if the JSON value is an object. - - @return `true` if type is object, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_object()` for all JSON - types.,is_object} - - @since version 1.0.0 - */ - constexpr bool is_object() const noexcept - { - return m_type == value_t::object; - } - - /*! - @brief return whether value is an array - - This function returns true if and only if the JSON value is an array. - - @return `true` if type is array, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_array()` for all JSON - types.,is_array} - - @since version 1.0.0 - */ - constexpr bool is_array() const noexcept - { - return m_type == value_t::array; - } - - /*! - @brief return whether value is a string - - This function returns true if and only if the JSON value is a string. - - @return `true` if type is string, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_string()` for all JSON - types.,is_string} - - @since version 1.0.0 - */ - constexpr bool is_string() const noexcept - { - return m_type == value_t::string; - } - - /*! - @brief return whether value is a binary array - - This function returns true if and only if the JSON value is a binary array. - - @return `true` if type is binary array, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_binary()` for all JSON - types.,is_binary} - - @since version 3.8.0 - */ - constexpr bool is_binary() const noexcept - { - return m_type == value_t::binary; - } - - /*! - @brief return whether value is discarded - - This function returns true if and only if the JSON value was discarded - during parsing with a callback function (see @ref parser_callback_t). - - @note This function will always be `false` for JSON values after parsing. - That is, discarded values can only occur during parsing, but will be - removed when inside a structured value or replaced by null in other cases. - - @return `true` if type is discarded, `false` otherwise. - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies `is_discarded()` for all JSON - types.,is_discarded} - - @since version 1.0.0 - */ - constexpr bool is_discarded() const noexcept - { - return m_type == value_t::discarded; - } - - /*! - @brief return the type of the JSON value (implicit) - - Implicitly return the type of the JSON value as a value from the @ref - value_t enumeration. - - @return the type of the JSON value - - @complexity Constant. - - @exceptionsafety No-throw guarantee: this member function never throws - exceptions. - - @liveexample{The following code exemplifies the @ref value_t operator for - all JSON types.,operator__value_t} - - @sa @ref type() -- return the type of the JSON value (explicit) - @sa @ref type_name() -- return the type as string - - @since version 1.0.0 - */ - constexpr operator value_t() const noexcept - { - return m_type; - } - - /// @} - - private: - ////////////////// - // value access // - ////////////////// - - /// get a boolean (explicit) - boolean_t get_impl(boolean_t* /*unused*/) const - { - if (JSON_HEDLEY_LIKELY(is_boolean())) - { - return m_value.boolean; - } - - JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(type_name()))); - } - - /// get a pointer to the value (object) - object_t* get_impl_ptr(object_t* /*unused*/) noexcept - { - return is_object() ? m_value.object : nullptr; - } - - /// get a pointer to the value (object) - constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept - { - return is_object() ? m_value.object : nullptr; - } - - /// get a pointer to the value (array) - array_t* get_impl_ptr(array_t* /*unused*/) noexcept - { - return is_array() ? m_value.array : nullptr; - } - - /// get a pointer to the value (array) - constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept - { - return is_array() ? m_value.array : nullptr; - } - - /// get a pointer to the value (string) - string_t* get_impl_ptr(string_t* /*unused*/) noexcept - { - return is_string() ? m_value.string : nullptr; - } - - /// get a pointer to the value (string) - constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept - { - return is_string() ? m_value.string : nullptr; - } - - /// get a pointer to the value (boolean) - boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept - { - return is_boolean() ? &m_value.boolean : nullptr; - } - - /// get a pointer to the value (boolean) - constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept - { - return is_boolean() ? &m_value.boolean : nullptr; - } - - /// get a pointer to the value (integer number) - number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept - { - return is_number_integer() ? &m_value.number_integer : nullptr; - } - - /// get a pointer to the value (integer number) - constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept - { - return is_number_integer() ? &m_value.number_integer : nullptr; - } - - /// get a pointer to the value (unsigned number) - number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept - { - return is_number_unsigned() ? &m_value.number_unsigned : nullptr; - } - - /// get a pointer to the value (unsigned number) - constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept - { - return is_number_unsigned() ? &m_value.number_unsigned : nullptr; - } - - /// get a pointer to the value (floating-point number) - number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept - { - return is_number_float() ? &m_value.number_float : nullptr; - } - - /// get a pointer to the value (floating-point number) - constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept - { - return is_number_float() ? &m_value.number_float : nullptr; - } - - /// get a pointer to the value (binary) - binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept - { - return is_binary() ? m_value.binary : nullptr; - } - - /// get a pointer to the value (binary) - constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept - { - return is_binary() ? m_value.binary : nullptr; - } - - /*! - @brief helper function to implement get_ref() - - This function helps to implement get_ref() without code duplication for - const and non-const overloads - - @tparam ThisType will be deduced as `basic_json` or `const basic_json` - - @throw type_error.303 if ReferenceType does not match underlying value - type of the current JSON - */ - template - static ReferenceType get_ref_impl(ThisType& obj) - { - // delegate the call to get_ptr<>() - auto ptr = obj.template get_ptr::type>(); - - if (JSON_HEDLEY_LIKELY(ptr != nullptr)) - { - return *ptr; - } - - JSON_THROW(type_error::create(303, "incompatible ReferenceType for get_ref, actual type is " + std::string(obj.type_name()))); - } - - public: - /// @name value access - /// Direct access to the stored value of a JSON value. - /// @{ - - /*! - @brief get special-case overload - - This overloads avoids a lot of template boilerplate, it can be seen as the - identity method - - @tparam BasicJsonType == @ref basic_json - - @return a copy of *this - - @complexity Constant. - - @since version 2.1.0 - */ - template::type, basic_json_t>::value, - int> = 0> - basic_json get() const - { - return *this; - } - - /*! - @brief get special-case overload - - This overloads converts the current @ref basic_json in a different - @ref basic_json type - - @tparam BasicJsonType == @ref basic_json - - @return a copy of *this, converted into @tparam BasicJsonType - - @complexity Depending on the implementation of the called `from_json()` - method. - - @since version 3.2.0 - */ - template < typename BasicJsonType, detail::enable_if_t < - !std::is_same::value&& - detail::is_basic_json::value, int > = 0 > - BasicJsonType get() const - { - return *this; - } - - /*! - @brief get a value (explicit) - - Explicit type conversion between the JSON value and a compatible value - which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) - and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). - The value is converted by calling the @ref json_serializer - `from_json()` method. - - The function is equivalent to executing - @code {.cpp} - ValueType ret; - JSONSerializer::from_json(*this, ret); - return ret; - @endcode - - This overloads is chosen if: - - @a ValueType is not @ref basic_json, - - @ref json_serializer has a `from_json()` method of the form - `void from_json(const basic_json&, ValueType&)`, and - - @ref json_serializer does not have a `from_json()` method of - the form `ValueType from_json(const basic_json&)` - - @tparam ValueTypeCV the provided value type - @tparam ValueType the returned value type - - @return copy of the JSON value, converted to @a ValueType - - @throw what @ref json_serializer `from_json()` method throws - - @liveexample{The example below shows several conversions from JSON values - to other types. There a few things to note: (1) Floating-point numbers can - be converted to integers\, (2) A JSON array can be converted to a standard - `std::vector`\, (3) A JSON object can be converted to C++ - associative containers such as `std::unordered_map`.,get__ValueType_const} - - @since version 2.1.0 - */ - template < typename ValueTypeCV, typename ValueType = detail::uncvref_t, - detail::enable_if_t < - !detail::is_basic_json::value && - detail::has_from_json::value && - !detail::has_non_default_from_json::value, - int > = 0 > - ValueType get() const noexcept(noexcept( - JSONSerializer::from_json(std::declval(), std::declval()))) - { - // we cannot static_assert on ValueTypeCV being non-const, because - // there is support for get(), which is why we - // still need the uncvref - static_assert(!std::is_reference::value, - "get() cannot be used with reference types, you might want to use get_ref()"); - static_assert(std::is_default_constructible::value, - "types must be DefaultConstructible when used with get()"); - - ValueType ret; - JSONSerializer::from_json(*this, ret); - return ret; - } - - /*! - @brief get a value (explicit); special case - - Explicit type conversion between the JSON value and a compatible value - which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) - and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). - The value is converted by calling the @ref json_serializer - `from_json()` method. - - The function is equivalent to executing - @code {.cpp} - return JSONSerializer::from_json(*this); - @endcode - - This overloads is chosen if: - - @a ValueType is not @ref basic_json and - - @ref json_serializer has a `from_json()` method of the form - `ValueType from_json(const basic_json&)` - - @note If @ref json_serializer has both overloads of - `from_json()`, this one is chosen. - - @tparam ValueTypeCV the provided value type - @tparam ValueType the returned value type - - @return copy of the JSON value, converted to @a ValueType - - @throw what @ref json_serializer `from_json()` method throws - - @since version 2.1.0 - */ - template < typename ValueTypeCV, typename ValueType = detail::uncvref_t, - detail::enable_if_t < !std::is_same::value && - detail::has_non_default_from_json::value, - int > = 0 > - ValueType get() const noexcept(noexcept( - JSONSerializer::from_json(std::declval()))) - { - static_assert(!std::is_reference::value, - "get() cannot be used with reference types, you might want to use get_ref()"); - return JSONSerializer::from_json(*this); - } - - /*! - @brief get a value (explicit) - - Explicit type conversion between the JSON value and a compatible value. - The value is filled into the input parameter by calling the @ref json_serializer - `from_json()` method. - - The function is equivalent to executing - @code {.cpp} - ValueType v; - JSONSerializer::from_json(*this, v); - @endcode - - This overloads is chosen if: - - @a ValueType is not @ref basic_json, - - @ref json_serializer has a `from_json()` method of the form - `void from_json(const basic_json&, ValueType&)`, and - - @tparam ValueType the input parameter type. - - @return the input parameter, allowing chaining calls. - - @throw what @ref json_serializer `from_json()` method throws - - @liveexample{The example below shows several conversions from JSON values - to other types. There a few things to note: (1) Floating-point numbers can - be converted to integers\, (2) A JSON array can be converted to a standard - `std::vector`\, (3) A JSON object can be converted to C++ - associative containers such as `std::unordered_map`.,get_to} - - @since version 3.3.0 - */ - template < typename ValueType, - detail::enable_if_t < - !detail::is_basic_json::value&& - detail::has_from_json::value, - int > = 0 > - ValueType & get_to(ValueType& v) const noexcept(noexcept( - JSONSerializer::from_json(std::declval(), v))) - { - JSONSerializer::from_json(*this, v); - return v; - } - - // specialization to allow to call get_to with a basic_json value - // see https://github.com/nlohmann/json/issues/2175 - template::value, - int> = 0> - ValueType & get_to(ValueType& v) const - { - v = *this; - return v; - } - - template < - typename T, std::size_t N, - typename Array = T (&)[N], - detail::enable_if_t < - detail::has_from_json::value, int > = 0 > - Array get_to(T (&v)[N]) const - noexcept(noexcept(JSONSerializer::from_json( - std::declval(), v))) - { - JSONSerializer::from_json(*this, v); - return v; - } - - - /*! - @brief get a pointer value (implicit) - - Implicit pointer access to the internally stored JSON value. No copies are - made. - - @warning Writing data to the pointee of the result yields an undefined - state. - - @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref - object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, - @ref number_unsigned_t, or @ref number_float_t. Enforced by a static - assertion. - - @return pointer to the internally stored JSON value if the requested - pointer type @a PointerType fits to the JSON value; `nullptr` otherwise - - @complexity Constant. - - @liveexample{The example below shows how pointers to internal values of a - JSON value can be requested. Note that no type conversions are made and a - `nullptr` is returned if the value and the requested pointer type does not - match.,get_ptr} - - @since version 1.0.0 - */ - template::value, int>::type = 0> - auto get_ptr() noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) - { - // delegate the call to get_impl_ptr<>() - return get_impl_ptr(static_cast(nullptr)); - } - - /*! - @brief get a pointer value (implicit) - @copydoc get_ptr() - */ - template < typename PointerType, typename std::enable_if < - std::is_pointer::value&& - std::is_const::type>::value, int >::type = 0 > - constexpr auto get_ptr() const noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) - { - // delegate the call to get_impl_ptr<>() const - return get_impl_ptr(static_cast(nullptr)); - } - - /*! - @brief get a pointer value (explicit) - - Explicit pointer access to the internally stored JSON value. No copies are - made. - - @warning The pointer becomes invalid if the underlying JSON object - changes. - - @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref - object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, - @ref number_unsigned_t, or @ref number_float_t. - - @return pointer to the internally stored JSON value if the requested - pointer type @a PointerType fits to the JSON value; `nullptr` otherwise - - @complexity Constant. - - @liveexample{The example below shows how pointers to internal values of a - JSON value can be requested. Note that no type conversions are made and a - `nullptr` is returned if the value and the requested pointer type does not - match.,get__PointerType} - - @sa @ref get_ptr() for explicit pointer-member access - - @since version 1.0.0 - */ - template::value, int>::type = 0> - auto get() noexcept -> decltype(std::declval().template get_ptr()) - { - // delegate the call to get_ptr - return get_ptr(); - } - - /*! - @brief get a pointer value (explicit) - @copydoc get() - */ - template::value, int>::type = 0> - constexpr auto get() const noexcept -> decltype(std::declval().template get_ptr()) - { - // delegate the call to get_ptr - return get_ptr(); - } - - /*! - @brief get a reference value (implicit) - - Implicit reference access to the internally stored JSON value. No copies - are made. - - @warning Writing data to the referee of the result yields an undefined - state. - - @tparam ReferenceType reference type; must be a reference to @ref array_t, - @ref object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, or - @ref number_float_t. Enforced by static assertion. - - @return reference to the internally stored JSON value if the requested - reference type @a ReferenceType fits to the JSON value; throws - type_error.303 otherwise - - @throw type_error.303 in case passed type @a ReferenceType is incompatible - with the stored JSON value; see example below - - @complexity Constant. - - @liveexample{The example shows several calls to `get_ref()`.,get_ref} - - @since version 1.1.0 - */ - template::value, int>::type = 0> - ReferenceType get_ref() - { - // delegate call to get_ref_impl - return get_ref_impl(*this); - } - - /*! - @brief get a reference value (implicit) - @copydoc get_ref() - */ - template < typename ReferenceType, typename std::enable_if < - std::is_reference::value&& - std::is_const::type>::value, int >::type = 0 > - ReferenceType get_ref() const - { - // delegate call to get_ref_impl - return get_ref_impl(*this); - } - - /*! - @brief get a value (implicit) - - Implicit type conversion between the JSON value and a compatible value. - The call is realized by calling @ref get() const. - - @tparam ValueType non-pointer type compatible to the JSON value, for - instance `int` for JSON integer numbers, `bool` for JSON booleans, or - `std::vector` types for JSON arrays. The character type of @ref string_t - as well as an initializer list of this type is excluded to avoid - ambiguities as these types implicitly convert to `std::string`. - - @return copy of the JSON value, converted to type @a ValueType - - @throw type_error.302 in case passed type @a ValueType is incompatible - to the JSON value type (e.g., the JSON value is of type boolean, but a - string is requested); see example below - - @complexity Linear in the size of the JSON value. - - @liveexample{The example below shows several conversions from JSON values - to other types. There a few things to note: (1) Floating-point numbers can - be converted to integers\, (2) A JSON array can be converted to a standard - `std::vector`\, (3) A JSON object can be converted to C++ - associative containers such as `std::unordered_map`.,operator__ValueType} - - @since version 1.0.0 - */ - template < typename ValueType, typename std::enable_if < - !std::is_pointer::value&& - !std::is_same>::value&& - !std::is_same::value&& - !detail::is_basic_json::value - && !std::is_same>::value -#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914)) - && !std::is_same::value -#endif - && detail::is_detected::value - , int >::type = 0 > - JSON_EXPLICIT operator ValueType() const - { - // delegate the call to get<>() const - return get(); - } - - /*! - @return reference to the binary value - - @throw type_error.302 if the value is not binary - - @sa @ref is_binary() to check if the value is binary - - @since version 3.8.0 - */ - binary_t& get_binary() - { - if (!is_binary()) - { - JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()))); - } - - return *get_ptr(); - } - - /// @copydoc get_binary() - const binary_t& get_binary() const - { - if (!is_binary()) - { - JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()))); - } - - return *get_ptr(); - } - - /// @} - - - //////////////////// - // element access // - //////////////////// - - /// @name element access - /// Access to the JSON value. - /// @{ - - /*! - @brief access specified array element with bounds checking - - Returns a reference to the element at specified location @a idx, with - bounds checking. - - @param[in] idx index of the element to access - - @return reference to the element at index @a idx - - @throw type_error.304 if the JSON value is not an array; in this case, - calling `at` with an index makes no sense. See example below. - @throw out_of_range.401 if the index @a idx is out of range of the array; - that is, `idx >= size()`. See example below. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @complexity Constant. - - @since version 1.0.0 - - @liveexample{The example below shows how array elements can be read and - written using `at()`. It also demonstrates the different exceptions that - can be thrown.,at__size_type} - */ - reference at(size_type idx) - { - // at only works for arrays - if (JSON_HEDLEY_LIKELY(is_array())) - { - JSON_TRY - { - return m_value.array->at(idx); - } - JSON_CATCH (std::out_of_range&) - { - // create better exception explanation - JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); - } - } - else - { - JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); - } - } - - /*! - @brief access specified array element with bounds checking - - Returns a const reference to the element at specified location @a idx, - with bounds checking. - - @param[in] idx index of the element to access - - @return const reference to the element at index @a idx - - @throw type_error.304 if the JSON value is not an array; in this case, - calling `at` with an index makes no sense. See example below. - @throw out_of_range.401 if the index @a idx is out of range of the array; - that is, `idx >= size()`. See example below. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @complexity Constant. - - @since version 1.0.0 - - @liveexample{The example below shows how array elements can be read using - `at()`. It also demonstrates the different exceptions that can be thrown., - at__size_type_const} - */ - const_reference at(size_type idx) const - { - // at only works for arrays - if (JSON_HEDLEY_LIKELY(is_array())) - { - JSON_TRY - { - return m_value.array->at(idx); - } - JSON_CATCH (std::out_of_range&) - { - // create better exception explanation - JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); - } - } - else - { - JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); - } - } - - /*! - @brief access specified object element with bounds checking - - Returns a reference to the element at with specified key @a key, with - bounds checking. - - @param[in] key key of the element to access - - @return reference to the element at key @a key - - @throw type_error.304 if the JSON value is not an object; in this case, - calling `at` with a key makes no sense. See example below. - @throw out_of_range.403 if the key @a key is is not stored in the object; - that is, `find(key) == end()`. See example below. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @complexity Logarithmic in the size of the container. - - @sa @ref operator[](const typename object_t::key_type&) for unchecked - access by reference - @sa @ref value() for access by value with a default value - - @since version 1.0.0 - - @liveexample{The example below shows how object elements can be read and - written using `at()`. It also demonstrates the different exceptions that - can be thrown.,at__object_t_key_type} - */ - reference at(const typename object_t::key_type& key) - { - // at only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - JSON_TRY - { - return m_value.object->at(key); - } - JSON_CATCH (std::out_of_range&) - { - // create better exception explanation - JSON_THROW(out_of_range::create(403, "key '" + key + "' not found")); - } - } - else - { - JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); - } - } - - /*! - @brief access specified object element with bounds checking - - Returns a const reference to the element at with specified key @a key, - with bounds checking. - - @param[in] key key of the element to access - - @return const reference to the element at key @a key - - @throw type_error.304 if the JSON value is not an object; in this case, - calling `at` with a key makes no sense. See example below. - @throw out_of_range.403 if the key @a key is is not stored in the object; - that is, `find(key) == end()`. See example below. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @complexity Logarithmic in the size of the container. - - @sa @ref operator[](const typename object_t::key_type&) for unchecked - access by reference - @sa @ref value() for access by value with a default value - - @since version 1.0.0 - - @liveexample{The example below shows how object elements can be read using - `at()`. It also demonstrates the different exceptions that can be thrown., - at__object_t_key_type_const} - */ - const_reference at(const typename object_t::key_type& key) const - { - // at only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - JSON_TRY - { - return m_value.object->at(key); - } - JSON_CATCH (std::out_of_range&) - { - // create better exception explanation - JSON_THROW(out_of_range::create(403, "key '" + key + "' not found")); - } - } - else - { - JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); - } - } - - /*! - @brief access specified array element - - Returns a reference to the element at specified location @a idx. - - @note If @a idx is beyond the range of the array (i.e., `idx >= size()`), - then the array is silently filled up with `null` values to make `idx` a - valid reference to the last stored element. - - @param[in] idx index of the element to access - - @return reference to the element at index @a idx - - @throw type_error.305 if the JSON value is not an array or null; in that - cases, using the [] operator with an index makes no sense. - - @complexity Constant if @a idx is in the range of the array. Otherwise - linear in `idx - size()`. - - @liveexample{The example below shows how array elements can be read and - written using `[]` operator. Note the addition of `null` - values.,operatorarray__size_type} - - @since version 1.0.0 - */ - reference operator[](size_type idx) - { - // implicitly convert null value to an empty array - if (is_null()) - { - m_type = value_t::array; - m_value.array = create(); - assert_invariant(); - } - - // operator[] only works for arrays - if (JSON_HEDLEY_LIKELY(is_array())) - { - // fill up array with null values if given idx is outside range - if (idx >= m_value.array->size()) - { - m_value.array->insert(m_value.array->end(), - idx - m_value.array->size() + 1, - basic_json()); - } - - return m_value.array->operator[](idx); - } - - JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()))); - } - - /*! - @brief access specified array element - - Returns a const reference to the element at specified location @a idx. - - @param[in] idx index of the element to access - - @return const reference to the element at index @a idx - - @throw type_error.305 if the JSON value is not an array; in that case, - using the [] operator with an index makes no sense. - - @complexity Constant. - - @liveexample{The example below shows how array elements can be read using - the `[]` operator.,operatorarray__size_type_const} - - @since version 1.0.0 - */ - const_reference operator[](size_type idx) const - { - // const operator[] only works for arrays - if (JSON_HEDLEY_LIKELY(is_array())) - { - return m_value.array->operator[](idx); - } - - JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()))); - } - - /*! - @brief access specified object element - - Returns a reference to the element at with specified key @a key. - - @note If @a key is not found in the object, then it is silently added to - the object and filled with a `null` value to make `key` a valid reference. - In case the value was `null` before, it is converted to an object. - - @param[in] key key of the element to access - - @return reference to the element at key @a key - - @throw type_error.305 if the JSON value is not an object or null; in that - cases, using the [] operator with a key makes no sense. - - @complexity Logarithmic in the size of the container. - - @liveexample{The example below shows how object elements can be read and - written using the `[]` operator.,operatorarray__key_type} - - @sa @ref at(const typename object_t::key_type&) for access by reference - with range checking - @sa @ref value() for access by value with a default value - - @since version 1.0.0 - */ - reference operator[](const typename object_t::key_type& key) - { - // implicitly convert null value to an empty object - if (is_null()) - { - m_type = value_t::object; - m_value.object = create(); - assert_invariant(); - } - - // operator[] only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - return m_value.object->operator[](key); - } - - JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); - } - - /*! - @brief read-only access specified object element - - Returns a const reference to the element at with specified key @a key. No - bounds checking is performed. - - @warning If the element with key @a key does not exist, the behavior is - undefined. - - @param[in] key key of the element to access - - @return const reference to the element at key @a key - - @pre The element with key @a key must exist. **This precondition is - enforced with an assertion.** - - @throw type_error.305 if the JSON value is not an object; in that case, - using the [] operator with a key makes no sense. - - @complexity Logarithmic in the size of the container. - - @liveexample{The example below shows how object elements can be read using - the `[]` operator.,operatorarray__key_type_const} - - @sa @ref at(const typename object_t::key_type&) for access by reference - with range checking - @sa @ref value() for access by value with a default value - - @since version 1.0.0 - */ - const_reference operator[](const typename object_t::key_type& key) const - { - // const operator[] only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); - return m_value.object->find(key)->second; - } - - JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); - } - - /*! - @brief access specified object element - - Returns a reference to the element at with specified key @a key. - - @note If @a key is not found in the object, then it is silently added to - the object and filled with a `null` value to make `key` a valid reference. - In case the value was `null` before, it is converted to an object. - - @param[in] key key of the element to access - - @return reference to the element at key @a key - - @throw type_error.305 if the JSON value is not an object or null; in that - cases, using the [] operator with a key makes no sense. - - @complexity Logarithmic in the size of the container. - - @liveexample{The example below shows how object elements can be read and - written using the `[]` operator.,operatorarray__key_type} - - @sa @ref at(const typename object_t::key_type&) for access by reference - with range checking - @sa @ref value() for access by value with a default value - - @since version 1.1.0 - */ - template - JSON_HEDLEY_NON_NULL(2) - reference operator[](T* key) - { - // implicitly convert null to object - if (is_null()) - { - m_type = value_t::object; - m_value = value_t::object; - assert_invariant(); - } - - // at only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - return m_value.object->operator[](key); - } - - JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); - } - - /*! - @brief read-only access specified object element - - Returns a const reference to the element at with specified key @a key. No - bounds checking is performed. - - @warning If the element with key @a key does not exist, the behavior is - undefined. - - @param[in] key key of the element to access - - @return const reference to the element at key @a key - - @pre The element with key @a key must exist. **This precondition is - enforced with an assertion.** - - @throw type_error.305 if the JSON value is not an object; in that case, - using the [] operator with a key makes no sense. - - @complexity Logarithmic in the size of the container. - - @liveexample{The example below shows how object elements can be read using - the `[]` operator.,operatorarray__key_type_const} - - @sa @ref at(const typename object_t::key_type&) for access by reference - with range checking - @sa @ref value() for access by value with a default value - - @since version 1.1.0 - */ - template - JSON_HEDLEY_NON_NULL(2) - const_reference operator[](T* key) const - { - // at only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); - return m_value.object->find(key)->second; - } - - JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); - } - - /*! - @brief access specified object element with default value - - Returns either a copy of an object's element at the specified key @a key - or a given default value if no element with key @a key exists. - - The function is basically equivalent to executing - @code {.cpp} - try { - return at(key); - } catch(out_of_range) { - return default_value; - } - @endcode - - @note Unlike @ref at(const typename object_t::key_type&), this function - does not throw if the given key @a key was not found. - - @note Unlike @ref operator[](const typename object_t::key_type& key), this - function does not implicitly add an element to the position defined by @a - key. This function is furthermore also applicable to const objects. - - @param[in] key key of the element to access - @param[in] default_value the value to return if @a key is not found - - @tparam ValueType type compatible to JSON values, for instance `int` for - JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for - JSON arrays. Note the type of the expected value at @a key and the default - value @a default_value must be compatible. - - @return copy of the element at key @a key or @a default_value if @a key - is not found - - @throw type_error.302 if @a default_value does not match the type of the - value at @a key - @throw type_error.306 if the JSON value is not an object; in that case, - using `value()` with a key makes no sense. - - @complexity Logarithmic in the size of the container. - - @liveexample{The example below shows how object elements can be queried - with a default value.,basic_json__value} - - @sa @ref at(const typename object_t::key_type&) for access by reference - with range checking - @sa @ref operator[](const typename object_t::key_type&) for unchecked - access by reference - - @since version 1.0.0 - */ - // using std::is_convertible in a std::enable_if will fail when using explicit conversions - template < class ValueType, typename std::enable_if < - detail::is_getable::value - && !std::is_same::value, int >::type = 0 > - ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const - { - // at only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - // if key is found, return value and given default value otherwise - const auto it = find(key); - if (it != end()) - { - return it->template get(); - } - - return default_value; - } - - JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()))); - } - - /*! - @brief overload for a default value of type const char* - @copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const - */ - string_t value(const typename object_t::key_type& key, const char* default_value) const - { - return value(key, string_t(default_value)); - } - - /*! - @brief access specified object element via JSON Pointer with default value - - Returns either a copy of an object's element at the specified key @a key - or a given default value if no element with key @a key exists. - - The function is basically equivalent to executing - @code {.cpp} - try { - return at(ptr); - } catch(out_of_range) { - return default_value; - } - @endcode - - @note Unlike @ref at(const json_pointer&), this function does not throw - if the given key @a key was not found. - - @param[in] ptr a JSON pointer to the element to access - @param[in] default_value the value to return if @a ptr found no value - - @tparam ValueType type compatible to JSON values, for instance `int` for - JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for - JSON arrays. Note the type of the expected value at @a key and the default - value @a default_value must be compatible. - - @return copy of the element at key @a key or @a default_value if @a key - is not found - - @throw type_error.302 if @a default_value does not match the type of the - value at @a ptr - @throw type_error.306 if the JSON value is not an object; in that case, - using `value()` with a key makes no sense. - - @complexity Logarithmic in the size of the container. - - @liveexample{The example below shows how object elements can be queried - with a default value.,basic_json__value_ptr} - - @sa @ref operator[](const json_pointer&) for unchecked access by reference - - @since version 2.0.2 - */ - template::value, int>::type = 0> - ValueType value(const json_pointer& ptr, const ValueType& default_value) const - { - // at only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - // if pointer resolves a value, return it or use default value - JSON_TRY - { - return ptr.get_checked(this).template get(); - } - JSON_INTERNAL_CATCH (out_of_range&) - { - return default_value; - } - } - - JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()))); - } - - /*! - @brief overload for a default value of type const char* - @copydoc basic_json::value(const json_pointer&, ValueType) const - */ - JSON_HEDLEY_NON_NULL(3) - string_t value(const json_pointer& ptr, const char* default_value) const - { - return value(ptr, string_t(default_value)); - } - - /*! - @brief access the first element - - Returns a reference to the first element in the container. For a JSON - container `c`, the expression `c.front()` is equivalent to `*c.begin()`. - - @return In case of a structured type (array or object), a reference to the - first element is returned. In case of number, string, boolean, or binary - values, a reference to the value is returned. - - @complexity Constant. - - @pre The JSON value must not be `null` (would throw `std::out_of_range`) - or an empty array or object (undefined behavior, **guarded by - assertions**). - @post The JSON value remains unchanged. - - @throw invalid_iterator.214 when called on `null` value - - @liveexample{The following code shows an example for `front()`.,front} - - @sa @ref back() -- access the last element - - @since version 1.0.0 - */ - reference front() - { - return *begin(); - } - - /*! - @copydoc basic_json::front() - */ - const_reference front() const - { - return *cbegin(); - } - - /*! - @brief access the last element - - Returns a reference to the last element in the container. For a JSON - container `c`, the expression `c.back()` is equivalent to - @code {.cpp} - auto tmp = c.end(); - --tmp; - return *tmp; - @endcode - - @return In case of a structured type (array or object), a reference to the - last element is returned. In case of number, string, boolean, or binary - values, a reference to the value is returned. - - @complexity Constant. - - @pre The JSON value must not be `null` (would throw `std::out_of_range`) - or an empty array or object (undefined behavior, **guarded by - assertions**). - @post The JSON value remains unchanged. - - @throw invalid_iterator.214 when called on a `null` value. See example - below. - - @liveexample{The following code shows an example for `back()`.,back} - - @sa @ref front() -- access the first element - - @since version 1.0.0 - */ - reference back() - { - auto tmp = end(); - --tmp; - return *tmp; - } - - /*! - @copydoc basic_json::back() - */ - const_reference back() const - { - auto tmp = cend(); - --tmp; - return *tmp; - } - - /*! - @brief remove element given an iterator - - Removes the element specified by iterator @a pos. The iterator @a pos must - be valid and dereferenceable. Thus the `end()` iterator (which is valid, - but is not dereferenceable) cannot be used as a value for @a pos. - - If called on a primitive type other than `null`, the resulting JSON value - will be `null`. - - @param[in] pos iterator to the element to remove - @return Iterator following the last removed element. If the iterator @a - pos refers to the last element, the `end()` iterator is returned. - - @tparam IteratorType an @ref iterator or @ref const_iterator - - @post Invalidates iterators and references at or after the point of the - erase, including the `end()` iterator. - - @throw type_error.307 if called on a `null` value; example: `"cannot use - erase() with null"` - @throw invalid_iterator.202 if called on an iterator which does not belong - to the current JSON value; example: `"iterator does not fit current - value"` - @throw invalid_iterator.205 if called on a primitive type with invalid - iterator (i.e., any iterator which is not `begin()`); example: `"iterator - out of range"` - - @complexity The complexity depends on the type: - - objects: amortized constant - - arrays: linear in distance between @a pos and the end of the container - - strings and binary: linear in the length of the member - - other types: constant - - @liveexample{The example shows the result of `erase()` for different JSON - types.,erase__IteratorType} - - @sa @ref erase(IteratorType, IteratorType) -- removes the elements in - the given range - @sa @ref erase(const typename object_t::key_type&) -- removes the element - from an object at the given key - @sa @ref erase(const size_type) -- removes the element from an array at - the given index - - @since version 1.0.0 - */ - template < class IteratorType, typename std::enable_if < - std::is_same::value || - std::is_same::value, int >::type - = 0 > - IteratorType erase(IteratorType pos) - { - // make sure iterator fits the current value - if (JSON_HEDLEY_UNLIKELY(this != pos.m_object)) - { - JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); - } - - IteratorType result = end(); - - switch (m_type) - { - case value_t::boolean: - case value_t::number_float: - case value_t::number_integer: - case value_t::number_unsigned: - case value_t::string: - case value_t::binary: - { - if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin())) - { - JSON_THROW(invalid_iterator::create(205, "iterator out of range")); - } - - if (is_string()) - { - AllocatorType alloc; - std::allocator_traits::destroy(alloc, m_value.string); - std::allocator_traits::deallocate(alloc, m_value.string, 1); - m_value.string = nullptr; - } - else if (is_binary()) - { - AllocatorType alloc; - std::allocator_traits::destroy(alloc, m_value.binary); - std::allocator_traits::deallocate(alloc, m_value.binary, 1); - m_value.binary = nullptr; - } - - m_type = value_t::null; - assert_invariant(); - break; - } - - case value_t::object: - { - result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); - break; - } - - case value_t::array: - { - result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); - break; - } - - default: - JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); - } - - return result; - } - - /*! - @brief remove elements given an iterator range - - Removes the element specified by the range `[first; last)`. The iterator - @a first does not need to be dereferenceable if `first == last`: erasing - an empty range is a no-op. - - If called on a primitive type other than `null`, the resulting JSON value - will be `null`. - - @param[in] first iterator to the beginning of the range to remove - @param[in] last iterator past the end of the range to remove - @return Iterator following the last removed element. If the iterator @a - second refers to the last element, the `end()` iterator is returned. - - @tparam IteratorType an @ref iterator or @ref const_iterator - - @post Invalidates iterators and references at or after the point of the - erase, including the `end()` iterator. - - @throw type_error.307 if called on a `null` value; example: `"cannot use - erase() with null"` - @throw invalid_iterator.203 if called on iterators which does not belong - to the current JSON value; example: `"iterators do not fit current value"` - @throw invalid_iterator.204 if called on a primitive type with invalid - iterators (i.e., if `first != begin()` and `last != end()`); example: - `"iterators out of range"` - - @complexity The complexity depends on the type: - - objects: `log(size()) + std::distance(first, last)` - - arrays: linear in the distance between @a first and @a last, plus linear - in the distance between @a last and end of the container - - strings and binary: linear in the length of the member - - other types: constant - - @liveexample{The example shows the result of `erase()` for different JSON - types.,erase__IteratorType_IteratorType} - - @sa @ref erase(IteratorType) -- removes the element at a given position - @sa @ref erase(const typename object_t::key_type&) -- removes the element - from an object at the given key - @sa @ref erase(const size_type) -- removes the element from an array at - the given index - - @since version 1.0.0 - */ - template < class IteratorType, typename std::enable_if < - std::is_same::value || - std::is_same::value, int >::type - = 0 > - IteratorType erase(IteratorType first, IteratorType last) - { - // make sure iterator fits the current value - if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object)) - { - JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value")); - } - - IteratorType result = end(); - - switch (m_type) - { - case value_t::boolean: - case value_t::number_float: - case value_t::number_integer: - case value_t::number_unsigned: - case value_t::string: - case value_t::binary: - { - if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin() - || !last.m_it.primitive_iterator.is_end())) - { - JSON_THROW(invalid_iterator::create(204, "iterators out of range")); - } - - if (is_string()) - { - AllocatorType alloc; - std::allocator_traits::destroy(alloc, m_value.string); - std::allocator_traits::deallocate(alloc, m_value.string, 1); - m_value.string = nullptr; - } - else if (is_binary()) - { - AllocatorType alloc; - std::allocator_traits::destroy(alloc, m_value.binary); - std::allocator_traits::deallocate(alloc, m_value.binary, 1); - m_value.binary = nullptr; - } - - m_type = value_t::null; - assert_invariant(); - break; - } - - case value_t::object: - { - result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, - last.m_it.object_iterator); - break; - } - - case value_t::array: - { - result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, - last.m_it.array_iterator); - break; - } - - default: - JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); - } - - return result; - } - - /*! - @brief remove element from a JSON object given a key - - Removes elements from a JSON object with the key value @a key. - - @param[in] key value of the elements to remove - - @return Number of elements removed. If @a ObjectType is the default - `std::map` type, the return value will always be `0` (@a key was not - found) or `1` (@a key was found). - - @post References and iterators to the erased elements are invalidated. - Other references and iterators are not affected. - - @throw type_error.307 when called on a type other than JSON object; - example: `"cannot use erase() with null"` - - @complexity `log(size()) + count(key)` - - @liveexample{The example shows the effect of `erase()`.,erase__key_type} - - @sa @ref erase(IteratorType) -- removes the element at a given position - @sa @ref erase(IteratorType, IteratorType) -- removes the elements in - the given range - @sa @ref erase(const size_type) -- removes the element from an array at - the given index - - @since version 1.0.0 - */ - size_type erase(const typename object_t::key_type& key) - { - // this erase only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - return m_value.object->erase(key); - } - - JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); - } - - /*! - @brief remove element from a JSON array given an index - - Removes element from a JSON array at the index @a idx. - - @param[in] idx index of the element to remove - - @throw type_error.307 when called on a type other than JSON object; - example: `"cannot use erase() with null"` - @throw out_of_range.401 when `idx >= size()`; example: `"array index 17 - is out of range"` - - @complexity Linear in distance between @a idx and the end of the container. - - @liveexample{The example shows the effect of `erase()`.,erase__size_type} - - @sa @ref erase(IteratorType) -- removes the element at a given position - @sa @ref erase(IteratorType, IteratorType) -- removes the elements in - the given range - @sa @ref erase(const typename object_t::key_type&) -- removes the element - from an object at the given key - - @since version 1.0.0 - */ - void erase(const size_type idx) - { - // this erase only works for arrays - if (JSON_HEDLEY_LIKELY(is_array())) - { - if (JSON_HEDLEY_UNLIKELY(idx >= size())) - { - JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); - } - - m_value.array->erase(m_value.array->begin() + static_cast(idx)); - } - else - { - JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); - } - } - - /// @} - - - //////////// - // lookup // - //////////// - - /// @name lookup - /// @{ - - /*! - @brief find an element in a JSON object - - Finds an element in a JSON object with key equivalent to @a key. If the - element is not found or the JSON value is not an object, end() is - returned. - - @note This method always returns @ref end() when executed on a JSON type - that is not an object. - - @param[in] key key value of the element to search for. - - @return Iterator to an element with key equivalent to @a key. If no such - element is found or the JSON value is not an object, past-the-end (see - @ref end()) iterator is returned. - - @complexity Logarithmic in the size of the JSON object. - - @liveexample{The example shows how `find()` is used.,find__key_type} - - @sa @ref contains(KeyT&&) const -- checks whether a key exists - - @since version 1.0.0 - */ - template - iterator find(KeyT&& key) - { - auto result = end(); - - if (is_object()) - { - result.m_it.object_iterator = m_value.object->find(std::forward(key)); - } - - return result; - } - - /*! - @brief find an element in a JSON object - @copydoc find(KeyT&&) - */ - template - const_iterator find(KeyT&& key) const - { - auto result = cend(); - - if (is_object()) - { - result.m_it.object_iterator = m_value.object->find(std::forward(key)); - } - - return result; - } - - /*! - @brief returns the number of occurrences of a key in a JSON object - - Returns the number of elements with key @a key. If ObjectType is the - default `std::map` type, the return value will always be `0` (@a key was - not found) or `1` (@a key was found). - - @note This method always returns `0` when executed on a JSON type that is - not an object. - - @param[in] key key value of the element to count - - @return Number of elements with key @a key. If the JSON value is not an - object, the return value will be `0`. - - @complexity Logarithmic in the size of the JSON object. - - @liveexample{The example shows how `count()` is used.,count} - - @since version 1.0.0 - */ - template - size_type count(KeyT&& key) const - { - // return 0 for all nonobject types - return is_object() ? m_value.object->count(std::forward(key)) : 0; - } - - /*! - @brief check the existence of an element in a JSON object - - Check whether an element exists in a JSON object with key equivalent to - @a key. If the element is not found or the JSON value is not an object, - false is returned. - - @note This method always returns false when executed on a JSON type - that is not an object. - - @param[in] key key value to check its existence. - - @return true if an element with specified @a key exists. If no such - element with such key is found or the JSON value is not an object, - false is returned. - - @complexity Logarithmic in the size of the JSON object. - - @liveexample{The following code shows an example for `contains()`.,contains} - - @sa @ref find(KeyT&&) -- returns an iterator to an object element - @sa @ref contains(const json_pointer&) const -- checks the existence for a JSON pointer - - @since version 3.6.0 - */ - template < typename KeyT, typename std::enable_if < - !std::is_same::type, json_pointer>::value, int >::type = 0 > - bool contains(KeyT && key) const - { - return is_object() && m_value.object->find(std::forward(key)) != m_value.object->end(); - } - - /*! - @brief check the existence of an element in a JSON object given a JSON pointer - - Check whether the given JSON pointer @a ptr can be resolved in the current - JSON value. - - @note This method can be executed on any JSON value type. - - @param[in] ptr JSON pointer to check its existence. - - @return true if the JSON pointer can be resolved to a stored value, false - otherwise. - - @post If `j.contains(ptr)` returns true, it is safe to call `j[ptr]`. - - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index was not a number - - @complexity Logarithmic in the size of the JSON object. - - @liveexample{The following code shows an example for `contains()`.,contains_json_pointer} - - @sa @ref contains(KeyT &&) const -- checks the existence of a key - - @since version 3.7.0 - */ - bool contains(const json_pointer& ptr) const - { - return ptr.contains(this); - } - - /// @} - - - /////////////// - // iterators // - /////////////// - - /// @name iterators - /// @{ - - /*! - @brief returns an iterator to the first element - - Returns an iterator to the first element. - - @image html range-begin-end.svg "Illustration from cppreference.com" - - @return iterator to the first element - - @complexity Constant. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is constant. - - @liveexample{The following code shows an example for `begin()`.,begin} - - @sa @ref cbegin() -- returns a const iterator to the beginning - @sa @ref end() -- returns an iterator to the end - @sa @ref cend() -- returns a const iterator to the end - - @since version 1.0.0 - */ - iterator begin() noexcept - { - iterator result(this); - result.set_begin(); - return result; - } - - /*! - @copydoc basic_json::cbegin() - */ - const_iterator begin() const noexcept - { - return cbegin(); - } - - /*! - @brief returns a const iterator to the first element - - Returns a const iterator to the first element. - - @image html range-begin-end.svg "Illustration from cppreference.com" - - @return const iterator to the first element - - @complexity Constant. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is constant. - - Has the semantics of `const_cast(*this).begin()`. - - @liveexample{The following code shows an example for `cbegin()`.,cbegin} - - @sa @ref begin() -- returns an iterator to the beginning - @sa @ref end() -- returns an iterator to the end - @sa @ref cend() -- returns a const iterator to the end - - @since version 1.0.0 - */ - const_iterator cbegin() const noexcept - { - const_iterator result(this); - result.set_begin(); - return result; - } - - /*! - @brief returns an iterator to one past the last element - - Returns an iterator to one past the last element. - - @image html range-begin-end.svg "Illustration from cppreference.com" - - @return iterator one past the last element - - @complexity Constant. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is constant. - - @liveexample{The following code shows an example for `end()`.,end} - - @sa @ref cend() -- returns a const iterator to the end - @sa @ref begin() -- returns an iterator to the beginning - @sa @ref cbegin() -- returns a const iterator to the beginning - - @since version 1.0.0 - */ - iterator end() noexcept - { - iterator result(this); - result.set_end(); - return result; - } - - /*! - @copydoc basic_json::cend() - */ - const_iterator end() const noexcept - { - return cend(); - } - - /*! - @brief returns a const iterator to one past the last element - - Returns a const iterator to one past the last element. - - @image html range-begin-end.svg "Illustration from cppreference.com" - - @return const iterator one past the last element - - @complexity Constant. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is constant. - - Has the semantics of `const_cast(*this).end()`. - - @liveexample{The following code shows an example for `cend()`.,cend} - - @sa @ref end() -- returns an iterator to the end - @sa @ref begin() -- returns an iterator to the beginning - @sa @ref cbegin() -- returns a const iterator to the beginning - - @since version 1.0.0 - */ - const_iterator cend() const noexcept - { - const_iterator result(this); - result.set_end(); - return result; - } - - /*! - @brief returns an iterator to the reverse-beginning - - Returns an iterator to the reverse-beginning; that is, the last element. - - @image html range-rbegin-rend.svg "Illustration from cppreference.com" - - @complexity Constant. - - @requirement This function helps `basic_json` satisfying the - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) - requirements: - - The complexity is constant. - - Has the semantics of `reverse_iterator(end())`. - - @liveexample{The following code shows an example for `rbegin()`.,rbegin} - - @sa @ref crbegin() -- returns a const reverse iterator to the beginning - @sa @ref rend() -- returns a reverse iterator to the end - @sa @ref crend() -- returns a const reverse iterator to the end - - @since version 1.0.0 - */ - reverse_iterator rbegin() noexcept - { - return reverse_iterator(end()); - } - - /*! - @copydoc basic_json::crbegin() - */ - const_reverse_iterator rbegin() const noexcept - { - return crbegin(); - } - - /*! - @brief returns an iterator to the reverse-end - - Returns an iterator to the reverse-end; that is, one before the first - element. - - @image html range-rbegin-rend.svg "Illustration from cppreference.com" - - @complexity Constant. - - @requirement This function helps `basic_json` satisfying the - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) - requirements: - - The complexity is constant. - - Has the semantics of `reverse_iterator(begin())`. - - @liveexample{The following code shows an example for `rend()`.,rend} - - @sa @ref crend() -- returns a const reverse iterator to the end - @sa @ref rbegin() -- returns a reverse iterator to the beginning - @sa @ref crbegin() -- returns a const reverse iterator to the beginning - - @since version 1.0.0 - */ - reverse_iterator rend() noexcept - { - return reverse_iterator(begin()); - } - - /*! - @copydoc basic_json::crend() - */ - const_reverse_iterator rend() const noexcept - { - return crend(); - } - - /*! - @brief returns a const reverse iterator to the last element - - Returns a const iterator to the reverse-beginning; that is, the last - element. - - @image html range-rbegin-rend.svg "Illustration from cppreference.com" - - @complexity Constant. - - @requirement This function helps `basic_json` satisfying the - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) - requirements: - - The complexity is constant. - - Has the semantics of `const_cast(*this).rbegin()`. - - @liveexample{The following code shows an example for `crbegin()`.,crbegin} - - @sa @ref rbegin() -- returns a reverse iterator to the beginning - @sa @ref rend() -- returns a reverse iterator to the end - @sa @ref crend() -- returns a const reverse iterator to the end - - @since version 1.0.0 - */ - const_reverse_iterator crbegin() const noexcept - { - return const_reverse_iterator(cend()); - } - - /*! - @brief returns a const reverse iterator to one before the first - - Returns a const reverse iterator to the reverse-end; that is, one before - the first element. - - @image html range-rbegin-rend.svg "Illustration from cppreference.com" - - @complexity Constant. - - @requirement This function helps `basic_json` satisfying the - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) - requirements: - - The complexity is constant. - - Has the semantics of `const_cast(*this).rend()`. - - @liveexample{The following code shows an example for `crend()`.,crend} - - @sa @ref rend() -- returns a reverse iterator to the end - @sa @ref rbegin() -- returns a reverse iterator to the beginning - @sa @ref crbegin() -- returns a const reverse iterator to the beginning - - @since version 1.0.0 - */ - const_reverse_iterator crend() const noexcept - { - return const_reverse_iterator(cbegin()); - } - - public: - /*! - @brief wrapper to access iterator member functions in range-based for - - This function allows to access @ref iterator::key() and @ref - iterator::value() during range-based for loops. In these loops, a - reference to the JSON values is returned, so there is no access to the - underlying iterator. - - For loop without iterator_wrapper: - - @code{cpp} - for (auto it = j_object.begin(); it != j_object.end(); ++it) - { - std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; - } - @endcode - - Range-based for loop without iterator proxy: - - @code{cpp} - for (auto it : j_object) - { - // "it" is of type json::reference and has no key() member - std::cout << "value: " << it << '\n'; - } - @endcode - - Range-based for loop with iterator proxy: - - @code{cpp} - for (auto it : json::iterator_wrapper(j_object)) - { - std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; - } - @endcode - - @note When iterating over an array, `key()` will return the index of the - element as string (see example). - - @param[in] ref reference to a JSON value - @return iteration proxy object wrapping @a ref with an interface to use in - range-based for loops - - @liveexample{The following code shows how the wrapper is used,iterator_wrapper} - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @complexity Constant. - - @note The name of this function is not yet final and may change in the - future. - - @deprecated This stream operator is deprecated and will be removed in - future 4.0.0 of the library. Please use @ref items() instead; - that is, replace `json::iterator_wrapper(j)` with `j.items()`. - */ - JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) - static iteration_proxy iterator_wrapper(reference ref) noexcept - { - return ref.items(); - } - - /*! - @copydoc iterator_wrapper(reference) - */ - JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) - static iteration_proxy iterator_wrapper(const_reference ref) noexcept - { - return ref.items(); - } - - /*! - @brief helper to access iterator member functions in range-based for - - This function allows to access @ref iterator::key() and @ref - iterator::value() during range-based for loops. In these loops, a - reference to the JSON values is returned, so there is no access to the - underlying iterator. - - For loop without `items()` function: - - @code{cpp} - for (auto it = j_object.begin(); it != j_object.end(); ++it) - { - std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; - } - @endcode - - Range-based for loop without `items()` function: - - @code{cpp} - for (auto it : j_object) - { - // "it" is of type json::reference and has no key() member - std::cout << "value: " << it << '\n'; - } - @endcode - - Range-based for loop with `items()` function: - - @code{cpp} - for (auto& el : j_object.items()) - { - std::cout << "key: " << el.key() << ", value:" << el.value() << '\n'; - } - @endcode - - The `items()` function also allows to use - [structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding) - (C++17): - - @code{cpp} - for (auto& [key, val] : j_object.items()) - { - std::cout << "key: " << key << ", value:" << val << '\n'; - } - @endcode - - @note When iterating over an array, `key()` will return the index of the - element as string (see example). For primitive types (e.g., numbers), - `key()` returns an empty string. - - @warning Using `items()` on temporary objects is dangerous. Make sure the - object's lifetime exeeds the iteration. See - for more - information. - - @return iteration proxy object wrapping @a ref with an interface to use in - range-based for loops - - @liveexample{The following code shows how the function is used.,items} - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @complexity Constant. - - @since version 3.1.0, structured bindings support since 3.5.0. - */ - iteration_proxy items() noexcept - { - return iteration_proxy(*this); - } - - /*! - @copydoc items() - */ - iteration_proxy items() const noexcept - { - return iteration_proxy(*this); - } - - /// @} - - - ////////////// - // capacity // - ////////////// - - /// @name capacity - /// @{ - - /*! - @brief checks whether the container is empty. - - Checks if a JSON value has no elements (i.e. whether its @ref size is `0`). - - @return The return value depends on the different types and is - defined as follows: - Value type | return value - ----------- | ------------- - null | `true` - boolean | `false` - string | `false` - number | `false` - binary | `false` - object | result of function `object_t::empty()` - array | result of function `array_t::empty()` - - @liveexample{The following code uses `empty()` to check if a JSON - object contains any elements.,empty} - - @complexity Constant, as long as @ref array_t and @ref object_t satisfy - the Container concept; that is, their `empty()` functions have constant - complexity. - - @iterators No changes. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @note This function does not return whether a string stored as JSON value - is empty - it returns whether the JSON container itself is empty which is - false in the case of a string. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is constant. - - Has the semantics of `begin() == end()`. - - @sa @ref size() -- returns the number of elements - - @since version 1.0.0 - */ - bool empty() const noexcept - { - switch (m_type) - { - case value_t::null: - { - // null values are empty - return true; - } - - case value_t::array: - { - // delegate call to array_t::empty() - return m_value.array->empty(); - } - - case value_t::object: - { - // delegate call to object_t::empty() - return m_value.object->empty(); - } - - default: - { - // all other types are nonempty - return false; - } - } - } - - /*! - @brief returns the number of elements - - Returns the number of elements in a JSON value. - - @return The return value depends on the different types and is - defined as follows: - Value type | return value - ----------- | ------------- - null | `0` - boolean | `1` - string | `1` - number | `1` - binary | `1` - object | result of function object_t::size() - array | result of function array_t::size() - - @liveexample{The following code calls `size()` on the different value - types.,size} - - @complexity Constant, as long as @ref array_t and @ref object_t satisfy - the Container concept; that is, their size() functions have constant - complexity. - - @iterators No changes. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @note This function does not return the length of a string stored as JSON - value - it returns the number of elements in the JSON value which is 1 in - the case of a string. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is constant. - - Has the semantics of `std::distance(begin(), end())`. - - @sa @ref empty() -- checks whether the container is empty - @sa @ref max_size() -- returns the maximal number of elements - - @since version 1.0.0 - */ - size_type size() const noexcept - { - switch (m_type) - { - case value_t::null: - { - // null values are empty - return 0; - } - - case value_t::array: - { - // delegate call to array_t::size() - return m_value.array->size(); - } - - case value_t::object: - { - // delegate call to object_t::size() - return m_value.object->size(); - } - - default: - { - // all other types have size 1 - return 1; - } - } - } - - /*! - @brief returns the maximum possible number of elements - - Returns the maximum number of elements a JSON value is able to hold due to - system or library implementation limitations, i.e. `std::distance(begin(), - end())` for the JSON value. - - @return The return value depends on the different types and is - defined as follows: - Value type | return value - ----------- | ------------- - null | `0` (same as `size()`) - boolean | `1` (same as `size()`) - string | `1` (same as `size()`) - number | `1` (same as `size()`) - binary | `1` (same as `size()`) - object | result of function `object_t::max_size()` - array | result of function `array_t::max_size()` - - @liveexample{The following code calls `max_size()` on the different value - types. Note the output is implementation specific.,max_size} - - @complexity Constant, as long as @ref array_t and @ref object_t satisfy - the Container concept; that is, their `max_size()` functions have constant - complexity. - - @iterators No changes. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @requirement This function helps `basic_json` satisfying the - [Container](https://en.cppreference.com/w/cpp/named_req/Container) - requirements: - - The complexity is constant. - - Has the semantics of returning `b.size()` where `b` is the largest - possible JSON value. - - @sa @ref size() -- returns the number of elements - - @since version 1.0.0 - */ - size_type max_size() const noexcept - { - switch (m_type) - { - case value_t::array: - { - // delegate call to array_t::max_size() - return m_value.array->max_size(); - } - - case value_t::object: - { - // delegate call to object_t::max_size() - return m_value.object->max_size(); - } - - default: - { - // all other types have max_size() == size() - return size(); - } - } - } - - /// @} - - - /////////////// - // modifiers // - /////////////// - - /// @name modifiers - /// @{ - - /*! - @brief clears the contents - - Clears the content of a JSON value and resets it to the default value as - if @ref basic_json(value_t) would have been called with the current value - type from @ref type(): - - Value type | initial value - ----------- | ------------- - null | `null` - boolean | `false` - string | `""` - number | `0` - binary | An empty byte vector - object | `{}` - array | `[]` - - @post Has the same effect as calling - @code {.cpp} - *this = basic_json(type()); - @endcode - - @liveexample{The example below shows the effect of `clear()` to different - JSON types.,clear} - - @complexity Linear in the size of the JSON value. - - @iterators All iterators, pointers and references related to this container - are invalidated. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @sa @ref basic_json(value_t) -- constructor that creates an object with the - same value than calling `clear()` - - @since version 1.0.0 - */ - void clear() noexcept - { - switch (m_type) - { - case value_t::number_integer: - { - m_value.number_integer = 0; - break; - } - - case value_t::number_unsigned: - { - m_value.number_unsigned = 0; - break; - } - - case value_t::number_float: - { - m_value.number_float = 0.0; - break; - } - - case value_t::boolean: - { - m_value.boolean = false; - break; - } - - case value_t::string: - { - m_value.string->clear(); - break; - } - - case value_t::binary: - { - m_value.binary->clear(); - break; - } - - case value_t::array: - { - m_value.array->clear(); - break; - } - - case value_t::object: - { - m_value.object->clear(); - break; - } - - default: - break; - } - } - - /*! - @brief add an object to an array - - Appends the given element @a val to the end of the JSON value. If the - function is called on a JSON null value, an empty array is created before - appending @a val. - - @param[in] val the value to add to the JSON array - - @throw type_error.308 when called on a type other than JSON array or - null; example: `"cannot use push_back() with number"` - - @complexity Amortized constant. - - @liveexample{The example shows how `push_back()` and `+=` can be used to - add elements to a JSON array. Note how the `null` value was silently - converted to a JSON array.,push_back} - - @since version 1.0.0 - */ - void push_back(basic_json&& val) - { - // push_back only works for null objects or arrays - if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) - { - JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); - } - - // transform null object into an array - if (is_null()) - { - m_type = value_t::array; - m_value = value_t::array; - assert_invariant(); - } - - // add element to array (move semantics) - m_value.array->push_back(std::move(val)); - // if val is moved from, basic_json move constructor marks it null so we do not call the destructor - } - - /*! - @brief add an object to an array - @copydoc push_back(basic_json&&) - */ - reference operator+=(basic_json&& val) - { - push_back(std::move(val)); - return *this; - } - - /*! - @brief add an object to an array - @copydoc push_back(basic_json&&) - */ - void push_back(const basic_json& val) - { - // push_back only works for null objects or arrays - if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) - { - JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); - } - - // transform null object into an array - if (is_null()) - { - m_type = value_t::array; - m_value = value_t::array; - assert_invariant(); - } - - // add element to array - m_value.array->push_back(val); - } - - /*! - @brief add an object to an array - @copydoc push_back(basic_json&&) - */ - reference operator+=(const basic_json& val) - { - push_back(val); - return *this; - } - - /*! - @brief add an object to an object - - Inserts the given element @a val to the JSON object. If the function is - called on a JSON null value, an empty object is created before inserting - @a val. - - @param[in] val the value to add to the JSON object - - @throw type_error.308 when called on a type other than JSON object or - null; example: `"cannot use push_back() with number"` - - @complexity Logarithmic in the size of the container, O(log(`size()`)). - - @liveexample{The example shows how `push_back()` and `+=` can be used to - add elements to a JSON object. Note how the `null` value was silently - converted to a JSON object.,push_back__object_t__value} - - @since version 1.0.0 - */ - void push_back(const typename object_t::value_type& val) - { - // push_back only works for null objects or objects - if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) - { - JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); - } - - // transform null object into an object - if (is_null()) - { - m_type = value_t::object; - m_value = value_t::object; - assert_invariant(); - } - - // add element to array - m_value.object->insert(val); - } - - /*! - @brief add an object to an object - @copydoc push_back(const typename object_t::value_type&) - */ - reference operator+=(const typename object_t::value_type& val) - { - push_back(val); - return *this; - } - - /*! - @brief add an object to an object - - This function allows to use `push_back` with an initializer list. In case - - 1. the current value is an object, - 2. the initializer list @a init contains only two elements, and - 3. the first element of @a init is a string, - - @a init is converted into an object element and added using - @ref push_back(const typename object_t::value_type&). Otherwise, @a init - is converted to a JSON value and added using @ref push_back(basic_json&&). - - @param[in] init an initializer list - - @complexity Linear in the size of the initializer list @a init. - - @note This function is required to resolve an ambiguous overload error, - because pairs like `{"key", "value"}` can be both interpreted as - `object_t::value_type` or `std::initializer_list`, see - https://github.com/nlohmann/json/issues/235 for more information. - - @liveexample{The example shows how initializer lists are treated as - objects when possible.,push_back__initializer_list} - */ - void push_back(initializer_list_t init) - { - if (is_object() && init.size() == 2 && (*init.begin())->is_string()) - { - basic_json&& key = init.begin()->moved_or_copied(); - push_back(typename object_t::value_type( - std::move(key.get_ref()), (init.begin() + 1)->moved_or_copied())); - } - else - { - push_back(basic_json(init)); - } - } - - /*! - @brief add an object to an object - @copydoc push_back(initializer_list_t) - */ - reference operator+=(initializer_list_t init) - { - push_back(init); - return *this; - } - - /*! - @brief add an object to an array - - Creates a JSON value from the passed parameters @a args to the end of the - JSON value. If the function is called on a JSON null value, an empty array - is created before appending the value created from @a args. - - @param[in] args arguments to forward to a constructor of @ref basic_json - @tparam Args compatible types to create a @ref basic_json object - - @return reference to the inserted element - - @throw type_error.311 when called on a type other than JSON array or - null; example: `"cannot use emplace_back() with number"` - - @complexity Amortized constant. - - @liveexample{The example shows how `push_back()` can be used to add - elements to a JSON array. Note how the `null` value was silently converted - to a JSON array.,emplace_back} - - @since version 2.0.8, returns reference since 3.7.0 - */ - template - reference emplace_back(Args&& ... args) - { - // emplace_back only works for null objects or arrays - if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) - { - JSON_THROW(type_error::create(311, "cannot use emplace_back() with " + std::string(type_name()))); - } - - // transform null object into an array - if (is_null()) - { - m_type = value_t::array; - m_value = value_t::array; - assert_invariant(); - } - - // add element to array (perfect forwarding) -#ifdef JSON_HAS_CPP_17 - return m_value.array->emplace_back(std::forward(args)...); -#else - m_value.array->emplace_back(std::forward(args)...); - return m_value.array->back(); -#endif - } - - /*! - @brief add an object to an object if key does not exist - - Inserts a new element into a JSON object constructed in-place with the - given @a args if there is no element with the key in the container. If the - function is called on a JSON null value, an empty object is created before - appending the value created from @a args. - - @param[in] args arguments to forward to a constructor of @ref basic_json - @tparam Args compatible types to create a @ref basic_json object - - @return a pair consisting of an iterator to the inserted element, or the - already-existing element if no insertion happened, and a bool - denoting whether the insertion took place. - - @throw type_error.311 when called on a type other than JSON object or - null; example: `"cannot use emplace() with number"` - - @complexity Logarithmic in the size of the container, O(log(`size()`)). - - @liveexample{The example shows how `emplace()` can be used to add elements - to a JSON object. Note how the `null` value was silently converted to a - JSON object. Further note how no value is added if there was already one - value stored with the same key.,emplace} - - @since version 2.0.8 - */ - template - std::pair emplace(Args&& ... args) - { - // emplace only works for null objects or arrays - if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) - { - JSON_THROW(type_error::create(311, "cannot use emplace() with " + std::string(type_name()))); - } - - // transform null object into an object - if (is_null()) - { - m_type = value_t::object; - m_value = value_t::object; - assert_invariant(); - } - - // add element to array (perfect forwarding) - auto res = m_value.object->emplace(std::forward(args)...); - // create result iterator and set iterator to the result of emplace - auto it = begin(); - it.m_it.object_iterator = res.first; - - // return pair of iterator and boolean - return {it, res.second}; - } - - /// Helper for insertion of an iterator - /// @note: This uses std::distance to support GCC 4.8, - /// see https://github.com/nlohmann/json/pull/1257 - template - iterator insert_iterator(const_iterator pos, Args&& ... args) - { - iterator result(this); - JSON_ASSERT(m_value.array != nullptr); - - auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); - m_value.array->insert(pos.m_it.array_iterator, std::forward(args)...); - result.m_it.array_iterator = m_value.array->begin() + insert_pos; - - // This could have been written as: - // result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); - // but the return value of insert is missing in GCC 4.8, so it is written this way instead. - - return result; - } - - /*! - @brief inserts element - - Inserts element @a val before iterator @a pos. - - @param[in] pos iterator before which the content will be inserted; may be - the end() iterator - @param[in] val element to insert - @return iterator pointing to the inserted @a val. - - @throw type_error.309 if called on JSON values other than arrays; - example: `"cannot use insert() with string"` - @throw invalid_iterator.202 if @a pos is not an iterator of *this; - example: `"iterator does not fit current value"` - - @complexity Constant plus linear in the distance between @a pos and end of - the container. - - @liveexample{The example shows how `insert()` is used.,insert} - - @since version 1.0.0 - */ - iterator insert(const_iterator pos, const basic_json& val) - { - // insert only works for arrays - if (JSON_HEDLEY_LIKELY(is_array())) - { - // check if iterator pos fits to this JSON value - if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) - { - JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); - } - - // insert to array and return iterator - return insert_iterator(pos, val); - } - - JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); - } - - /*! - @brief inserts element - @copydoc insert(const_iterator, const basic_json&) - */ - iterator insert(const_iterator pos, basic_json&& val) - { - return insert(pos, val); - } - - /*! - @brief inserts elements - - Inserts @a cnt copies of @a val before iterator @a pos. - - @param[in] pos iterator before which the content will be inserted; may be - the end() iterator - @param[in] cnt number of copies of @a val to insert - @param[in] val element to insert - @return iterator pointing to the first element inserted, or @a pos if - `cnt==0` - - @throw type_error.309 if called on JSON values other than arrays; example: - `"cannot use insert() with string"` - @throw invalid_iterator.202 if @a pos is not an iterator of *this; - example: `"iterator does not fit current value"` - - @complexity Linear in @a cnt plus linear in the distance between @a pos - and end of the container. - - @liveexample{The example shows how `insert()` is used.,insert__count} - - @since version 1.0.0 - */ - iterator insert(const_iterator pos, size_type cnt, const basic_json& val) - { - // insert only works for arrays - if (JSON_HEDLEY_LIKELY(is_array())) - { - // check if iterator pos fits to this JSON value - if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) - { - JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); - } - - // insert to array and return iterator - return insert_iterator(pos, cnt, val); - } - - JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); - } - - /*! - @brief inserts elements - - Inserts elements from range `[first, last)` before iterator @a pos. - - @param[in] pos iterator before which the content will be inserted; may be - the end() iterator - @param[in] first begin of the range of elements to insert - @param[in] last end of the range of elements to insert - - @throw type_error.309 if called on JSON values other than arrays; example: - `"cannot use insert() with string"` - @throw invalid_iterator.202 if @a pos is not an iterator of *this; - example: `"iterator does not fit current value"` - @throw invalid_iterator.210 if @a first and @a last do not belong to the - same JSON value; example: `"iterators do not fit"` - @throw invalid_iterator.211 if @a first or @a last are iterators into - container for which insert is called; example: `"passed iterators may not - belong to container"` - - @return iterator pointing to the first element inserted, or @a pos if - `first==last` - - @complexity Linear in `std::distance(first, last)` plus linear in the - distance between @a pos and end of the container. - - @liveexample{The example shows how `insert()` is used.,insert__range} - - @since version 1.0.0 - */ - iterator insert(const_iterator pos, const_iterator first, const_iterator last) - { - // insert only works for arrays - if (JSON_HEDLEY_UNLIKELY(!is_array())) - { - JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); - } - - // check if iterator pos fits to this JSON value - if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) - { - JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); - } - - // check if range iterators belong to the same JSON object - if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) - { - JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); - } - - if (JSON_HEDLEY_UNLIKELY(first.m_object == this)) - { - JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container")); - } - - // insert to array and return iterator - return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator); - } - - /*! - @brief inserts elements - - Inserts elements from initializer list @a ilist before iterator @a pos. - - @param[in] pos iterator before which the content will be inserted; may be - the end() iterator - @param[in] ilist initializer list to insert the values from - - @throw type_error.309 if called on JSON values other than arrays; example: - `"cannot use insert() with string"` - @throw invalid_iterator.202 if @a pos is not an iterator of *this; - example: `"iterator does not fit current value"` - - @return iterator pointing to the first element inserted, or @a pos if - `ilist` is empty - - @complexity Linear in `ilist.size()` plus linear in the distance between - @a pos and end of the container. - - @liveexample{The example shows how `insert()` is used.,insert__ilist} - - @since version 1.0.0 - */ - iterator insert(const_iterator pos, initializer_list_t ilist) - { - // insert only works for arrays - if (JSON_HEDLEY_UNLIKELY(!is_array())) - { - JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); - } - - // check if iterator pos fits to this JSON value - if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) - { - JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); - } - - // insert to array and return iterator - return insert_iterator(pos, ilist.begin(), ilist.end()); - } - - /*! - @brief inserts elements - - Inserts elements from range `[first, last)`. - - @param[in] first begin of the range of elements to insert - @param[in] last end of the range of elements to insert - - @throw type_error.309 if called on JSON values other than objects; example: - `"cannot use insert() with string"` - @throw invalid_iterator.202 if iterator @a first or @a last does does not - point to an object; example: `"iterators first and last must point to - objects"` - @throw invalid_iterator.210 if @a first and @a last do not belong to the - same JSON value; example: `"iterators do not fit"` - - @complexity Logarithmic: `O(N*log(size() + N))`, where `N` is the number - of elements to insert. - - @liveexample{The example shows how `insert()` is used.,insert__range_object} - - @since version 3.0.0 - */ - void insert(const_iterator first, const_iterator last) - { - // insert only works for objects - if (JSON_HEDLEY_UNLIKELY(!is_object())) - { - JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); - } - - // check if range iterators belong to the same JSON object - if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) - { - JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); - } - - // passed iterators must belong to objects - if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object())) - { - JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects")); - } - - m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator); - } - - /*! - @brief updates a JSON object from another object, overwriting existing keys - - Inserts all values from JSON object @a j and overwrites existing keys. - - @param[in] j JSON object to read values from - - @throw type_error.312 if called on JSON values other than objects; example: - `"cannot use update() with string"` - - @complexity O(N*log(size() + N)), where N is the number of elements to - insert. - - @liveexample{The example shows how `update()` is used.,update} - - @sa https://docs.python.org/3.6/library/stdtypes.html#dict.update - - @since version 3.0.0 - */ - void update(const_reference j) - { - // implicitly convert null value to an empty object - if (is_null()) - { - m_type = value_t::object; - m_value.object = create(); - assert_invariant(); - } - - if (JSON_HEDLEY_UNLIKELY(!is_object())) - { - JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()))); - } - if (JSON_HEDLEY_UNLIKELY(!j.is_object())) - { - JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(j.type_name()))); - } - - for (auto it = j.cbegin(); it != j.cend(); ++it) - { - m_value.object->operator[](it.key()) = it.value(); - } - } - - /*! - @brief updates a JSON object from another object, overwriting existing keys - - Inserts all values from from range `[first, last)` and overwrites existing - keys. - - @param[in] first begin of the range of elements to insert - @param[in] last end of the range of elements to insert - - @throw type_error.312 if called on JSON values other than objects; example: - `"cannot use update() with string"` - @throw invalid_iterator.202 if iterator @a first or @a last does does not - point to an object; example: `"iterators first and last must point to - objects"` - @throw invalid_iterator.210 if @a first and @a last do not belong to the - same JSON value; example: `"iterators do not fit"` - - @complexity O(N*log(size() + N)), where N is the number of elements to - insert. - - @liveexample{The example shows how `update()` is used__range.,update} - - @sa https://docs.python.org/3.6/library/stdtypes.html#dict.update - - @since version 3.0.0 - */ - void update(const_iterator first, const_iterator last) - { - // implicitly convert null value to an empty object - if (is_null()) - { - m_type = value_t::object; - m_value.object = create(); - assert_invariant(); - } - - if (JSON_HEDLEY_UNLIKELY(!is_object())) - { - JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()))); - } - - // check if range iterators belong to the same JSON object - if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) - { - JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); - } - - // passed iterators must belong to objects - if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object() - || !last.m_object->is_object())) - { - JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects")); - } - - for (auto it = first; it != last; ++it) - { - m_value.object->operator[](it.key()) = it.value(); - } - } - - /*! - @brief exchanges the values - - Exchanges the contents of the JSON value with those of @a other. Does not - invoke any move, copy, or swap operations on individual elements. All - iterators and references remain valid. The past-the-end iterator is - invalidated. - - @param[in,out] other JSON value to exchange the contents with - - @complexity Constant. - - @liveexample{The example below shows how JSON values can be swapped with - `swap()`.,swap__reference} - - @since version 1.0.0 - */ - void swap(reference other) noexcept ( - std::is_nothrow_move_constructible::value&& - std::is_nothrow_move_assignable::value&& - std::is_nothrow_move_constructible::value&& - std::is_nothrow_move_assignable::value - ) - { - std::swap(m_type, other.m_type); - std::swap(m_value, other.m_value); - assert_invariant(); - } - - /*! - @brief exchanges the values - - Exchanges the contents of the JSON value from @a left with those of @a right. Does not - invoke any move, copy, or swap operations on individual elements. All - iterators and references remain valid. The past-the-end iterator is - invalidated. implemented as a friend function callable via ADL. - - @param[in,out] left JSON value to exchange the contents with - @param[in,out] right JSON value to exchange the contents with - - @complexity Constant. - - @liveexample{The example below shows how JSON values can be swapped with - `swap()`.,swap__reference} - - @since version 1.0.0 - */ - friend void swap(reference left, reference right) noexcept ( - std::is_nothrow_move_constructible::value&& - std::is_nothrow_move_assignable::value&& - std::is_nothrow_move_constructible::value&& - std::is_nothrow_move_assignable::value - ) - { - left.swap(right); - } - - /*! - @brief exchanges the values - - Exchanges the contents of a JSON array with those of @a other. Does not - invoke any move, copy, or swap operations on individual elements. All - iterators and references remain valid. The past-the-end iterator is - invalidated. - - @param[in,out] other array to exchange the contents with - - @throw type_error.310 when JSON value is not an array; example: `"cannot - use swap() with string"` - - @complexity Constant. - - @liveexample{The example below shows how arrays can be swapped with - `swap()`.,swap__array_t} - - @since version 1.0.0 - */ - void swap(array_t& other) - { - // swap only works for arrays - if (JSON_HEDLEY_LIKELY(is_array())) - { - std::swap(*(m_value.array), other); - } - else - { - JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); - } - } - - /*! - @brief exchanges the values - - Exchanges the contents of a JSON object with those of @a other. Does not - invoke any move, copy, or swap operations on individual elements. All - iterators and references remain valid. The past-the-end iterator is - invalidated. - - @param[in,out] other object to exchange the contents with - - @throw type_error.310 when JSON value is not an object; example: - `"cannot use swap() with string"` - - @complexity Constant. - - @liveexample{The example below shows how objects can be swapped with - `swap()`.,swap__object_t} - - @since version 1.0.0 - */ - void swap(object_t& other) - { - // swap only works for objects - if (JSON_HEDLEY_LIKELY(is_object())) - { - std::swap(*(m_value.object), other); - } - else - { - JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); - } - } - - /*! - @brief exchanges the values - - Exchanges the contents of a JSON string with those of @a other. Does not - invoke any move, copy, or swap operations on individual elements. All - iterators and references remain valid. The past-the-end iterator is - invalidated. - - @param[in,out] other string to exchange the contents with - - @throw type_error.310 when JSON value is not a string; example: `"cannot - use swap() with boolean"` - - @complexity Constant. - - @liveexample{The example below shows how strings can be swapped with - `swap()`.,swap__string_t} - - @since version 1.0.0 - */ - void swap(string_t& other) - { - // swap only works for strings - if (JSON_HEDLEY_LIKELY(is_string())) - { - std::swap(*(m_value.string), other); - } - else - { - JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); - } - } - - /*! - @brief exchanges the values - - Exchanges the contents of a JSON string with those of @a other. Does not - invoke any move, copy, or swap operations on individual elements. All - iterators and references remain valid. The past-the-end iterator is - invalidated. - - @param[in,out] other binary to exchange the contents with - - @throw type_error.310 when JSON value is not a string; example: `"cannot - use swap() with boolean"` - - @complexity Constant. - - @liveexample{The example below shows how strings can be swapped with - `swap()`.,swap__binary_t} - - @since version 3.8.0 - */ - void swap(binary_t& other) - { - // swap only works for strings - if (JSON_HEDLEY_LIKELY(is_binary())) - { - std::swap(*(m_value.binary), other); - } - else - { - JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); - } - } - - /// @copydoc swap(binary_t) - void swap(typename binary_t::container_type& other) - { - // swap only works for strings - if (JSON_HEDLEY_LIKELY(is_binary())) - { - std::swap(*(m_value.binary), other); - } - else - { - JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); - } - } - - /// @} - - public: - ////////////////////////////////////////// - // lexicographical comparison operators // - ////////////////////////////////////////// - - /// @name lexicographical comparison operators - /// @{ - - /*! - @brief comparison: equal - - Compares two JSON values for equality according to the following rules: - - Two JSON values are equal if (1) they are from the same type and (2) - their stored values are the same according to their respective - `operator==`. - - Integer and floating-point numbers are automatically converted before - comparison. Note that two NaN values are always treated as unequal. - - Two JSON null values are equal. - - @note Floating-point inside JSON values numbers are compared with - `json::number_float_t::operator==` which is `double::operator==` by - default. To compare floating-point while respecting an epsilon, an alternative - [comparison function](https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39) - could be used, for instance - @code {.cpp} - template::value, T>::type> - inline bool is_same(T a, T b, T epsilon = std::numeric_limits::epsilon()) noexcept - { - return std::abs(a - b) <= epsilon; - } - @endcode - Or you can self-defined operator equal function like this: - @code {.cpp} - bool my_equal(const_reference lhs, const_reference rhs) { - const auto lhs_type lhs.type(); - const auto rhs_type rhs.type(); - if (lhs_type == rhs_type) { - switch(lhs_type) - // self_defined case - case value_t::number_float: - return std::abs(lhs - rhs) <= std::numeric_limits::epsilon(); - // other cases remain the same with the original - ... - } - ... - } - @endcode - - @note NaN values never compare equal to themselves or to other NaN values. - - @param[in] lhs first JSON value to consider - @param[in] rhs second JSON value to consider - @return whether the values @a lhs and @a rhs are equal - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @complexity Linear. - - @liveexample{The example demonstrates comparing several JSON - types.,operator__equal} - - @since version 1.0.0 - */ - friend bool operator==(const_reference lhs, const_reference rhs) noexcept - { - const auto lhs_type = lhs.type(); - const auto rhs_type = rhs.type(); - - if (lhs_type == rhs_type) - { - switch (lhs_type) - { - case value_t::array: - return *lhs.m_value.array == *rhs.m_value.array; - - case value_t::object: - return *lhs.m_value.object == *rhs.m_value.object; - - case value_t::null: - return true; - - case value_t::string: - return *lhs.m_value.string == *rhs.m_value.string; - - case value_t::boolean: - return lhs.m_value.boolean == rhs.m_value.boolean; - - case value_t::number_integer: - return lhs.m_value.number_integer == rhs.m_value.number_integer; - - case value_t::number_unsigned: - return lhs.m_value.number_unsigned == rhs.m_value.number_unsigned; - - case value_t::number_float: - return lhs.m_value.number_float == rhs.m_value.number_float; - - case value_t::binary: - return *lhs.m_value.binary == *rhs.m_value.binary; - - default: - return false; - } - } - else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) - { - return static_cast(lhs.m_value.number_integer) == rhs.m_value.number_float; - } - else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) - { - return lhs.m_value.number_float == static_cast(rhs.m_value.number_integer); - } - else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) - { - return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_float; - } - else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) - { - return lhs.m_value.number_float == static_cast(rhs.m_value.number_unsigned); - } - else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) - { - return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_integer; - } - else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) - { - return lhs.m_value.number_integer == static_cast(rhs.m_value.number_unsigned); - } - - return false; - } - - /*! - @brief comparison: equal - @copydoc operator==(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator==(const_reference lhs, const ScalarType rhs) noexcept - { - return lhs == basic_json(rhs); - } - - /*! - @brief comparison: equal - @copydoc operator==(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator==(const ScalarType lhs, const_reference rhs) noexcept - { - return basic_json(lhs) == rhs; - } - - /*! - @brief comparison: not equal - - Compares two JSON values for inequality by calculating `not (lhs == rhs)`. - - @param[in] lhs first JSON value to consider - @param[in] rhs second JSON value to consider - @return whether the values @a lhs and @a rhs are not equal - - @complexity Linear. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @liveexample{The example demonstrates comparing several JSON - types.,operator__notequal} - - @since version 1.0.0 - */ - friend bool operator!=(const_reference lhs, const_reference rhs) noexcept - { - return !(lhs == rhs); - } - - /*! - @brief comparison: not equal - @copydoc operator!=(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator!=(const_reference lhs, const ScalarType rhs) noexcept - { - return lhs != basic_json(rhs); - } - - /*! - @brief comparison: not equal - @copydoc operator!=(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator!=(const ScalarType lhs, const_reference rhs) noexcept - { - return basic_json(lhs) != rhs; - } - - /*! - @brief comparison: less than - - Compares whether one JSON value @a lhs is less than another JSON value @a - rhs according to the following rules: - - If @a lhs and @a rhs have the same type, the values are compared using - the default `<` operator. - - Integer and floating-point numbers are automatically converted before - comparison - - In case @a lhs and @a rhs have different types, the values are ignored - and the order of the types is considered, see - @ref operator<(const value_t, const value_t). - - @param[in] lhs first JSON value to consider - @param[in] rhs second JSON value to consider - @return whether @a lhs is less than @a rhs - - @complexity Linear. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @liveexample{The example demonstrates comparing several JSON - types.,operator__less} - - @since version 1.0.0 - */ - friend bool operator<(const_reference lhs, const_reference rhs) noexcept - { - const auto lhs_type = lhs.type(); - const auto rhs_type = rhs.type(); - - if (lhs_type == rhs_type) - { - switch (lhs_type) - { - case value_t::array: - // note parentheses are necessary, see - // https://github.com/nlohmann/json/issues/1530 - return (*lhs.m_value.array) < (*rhs.m_value.array); - - case value_t::object: - return (*lhs.m_value.object) < (*rhs.m_value.object); - - case value_t::null: - return false; - - case value_t::string: - return (*lhs.m_value.string) < (*rhs.m_value.string); - - case value_t::boolean: - return (lhs.m_value.boolean) < (rhs.m_value.boolean); - - case value_t::number_integer: - return (lhs.m_value.number_integer) < (rhs.m_value.number_integer); - - case value_t::number_unsigned: - return (lhs.m_value.number_unsigned) < (rhs.m_value.number_unsigned); - - case value_t::number_float: - return (lhs.m_value.number_float) < (rhs.m_value.number_float); - - case value_t::binary: - return (*lhs.m_value.binary) < (*rhs.m_value.binary); - - default: - return false; - } - } - else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) - { - return static_cast(lhs.m_value.number_integer) < rhs.m_value.number_float; - } - else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) - { - return lhs.m_value.number_float < static_cast(rhs.m_value.number_integer); - } - else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) - { - return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_float; - } - else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) - { - return lhs.m_value.number_float < static_cast(rhs.m_value.number_unsigned); - } - else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) - { - return lhs.m_value.number_integer < static_cast(rhs.m_value.number_unsigned); - } - else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) - { - return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_integer; - } - - // We only reach this line if we cannot compare values. In that case, - // we compare types. Note we have to call the operator explicitly, - // because MSVC has problems otherwise. - return operator<(lhs_type, rhs_type); - } - - /*! - @brief comparison: less than - @copydoc operator<(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator<(const_reference lhs, const ScalarType rhs) noexcept - { - return lhs < basic_json(rhs); - } - - /*! - @brief comparison: less than - @copydoc operator<(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator<(const ScalarType lhs, const_reference rhs) noexcept - { - return basic_json(lhs) < rhs; - } - - /*! - @brief comparison: less than or equal - - Compares whether one JSON value @a lhs is less than or equal to another - JSON value by calculating `not (rhs < lhs)`. - - @param[in] lhs first JSON value to consider - @param[in] rhs second JSON value to consider - @return whether @a lhs is less than or equal to @a rhs - - @complexity Linear. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @liveexample{The example demonstrates comparing several JSON - types.,operator__greater} - - @since version 1.0.0 - */ - friend bool operator<=(const_reference lhs, const_reference rhs) noexcept - { - return !(rhs < lhs); - } - - /*! - @brief comparison: less than or equal - @copydoc operator<=(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator<=(const_reference lhs, const ScalarType rhs) noexcept - { - return lhs <= basic_json(rhs); - } - - /*! - @brief comparison: less than or equal - @copydoc operator<=(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator<=(const ScalarType lhs, const_reference rhs) noexcept - { - return basic_json(lhs) <= rhs; - } - - /*! - @brief comparison: greater than - - Compares whether one JSON value @a lhs is greater than another - JSON value by calculating `not (lhs <= rhs)`. - - @param[in] lhs first JSON value to consider - @param[in] rhs second JSON value to consider - @return whether @a lhs is greater than to @a rhs - - @complexity Linear. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @liveexample{The example demonstrates comparing several JSON - types.,operator__lessequal} - - @since version 1.0.0 - */ - friend bool operator>(const_reference lhs, const_reference rhs) noexcept - { - return !(lhs <= rhs); - } - - /*! - @brief comparison: greater than - @copydoc operator>(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator>(const_reference lhs, const ScalarType rhs) noexcept - { - return lhs > basic_json(rhs); - } - - /*! - @brief comparison: greater than - @copydoc operator>(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator>(const ScalarType lhs, const_reference rhs) noexcept - { - return basic_json(lhs) > rhs; - } - - /*! - @brief comparison: greater than or equal - - Compares whether one JSON value @a lhs is greater than or equal to another - JSON value by calculating `not (lhs < rhs)`. - - @param[in] lhs first JSON value to consider - @param[in] rhs second JSON value to consider - @return whether @a lhs is greater than or equal to @a rhs - - @complexity Linear. - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @liveexample{The example demonstrates comparing several JSON - types.,operator__greaterequal} - - @since version 1.0.0 - */ - friend bool operator>=(const_reference lhs, const_reference rhs) noexcept - { - return !(lhs < rhs); - } - - /*! - @brief comparison: greater than or equal - @copydoc operator>=(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator>=(const_reference lhs, const ScalarType rhs) noexcept - { - return lhs >= basic_json(rhs); - } - - /*! - @brief comparison: greater than or equal - @copydoc operator>=(const_reference, const_reference) - */ - template::value, int>::type = 0> - friend bool operator>=(const ScalarType lhs, const_reference rhs) noexcept - { - return basic_json(lhs) >= rhs; - } - - /// @} - - /////////////////// - // serialization // - /////////////////// - - /// @name serialization - /// @{ - - /*! - @brief serialize to stream - - Serialize the given JSON value @a j to the output stream @a o. The JSON - value will be serialized using the @ref dump member function. - - - The indentation of the output can be controlled with the member variable - `width` of the output stream @a o. For instance, using the manipulator - `std::setw(4)` on @a o sets the indentation level to `4` and the - serialization result is the same as calling `dump(4)`. - - - The indentation character can be controlled with the member variable - `fill` of the output stream @a o. For instance, the manipulator - `std::setfill('\\t')` sets indentation to use a tab character rather than - the default space character. - - @param[in,out] o stream to serialize to - @param[in] j JSON value to serialize - - @return the stream @a o - - @throw type_error.316 if a string stored inside the JSON value is not - UTF-8 encoded - - @complexity Linear. - - @liveexample{The example below shows the serialization with different - parameters to `width` to adjust the indentation level.,operator_serialize} - - @since version 1.0.0; indentation character added in version 3.0.0 - */ - friend std::ostream& operator<<(std::ostream& o, const basic_json& j) - { - // read width member and use it as indentation parameter if nonzero - const bool pretty_print = o.width() > 0; - const auto indentation = pretty_print ? o.width() : 0; - - // reset width to 0 for subsequent calls to this stream - o.width(0); - - // do the actual serialization - serializer s(detail::output_adapter(o), o.fill()); - s.dump(j, pretty_print, false, static_cast(indentation)); - return o; - } - - /*! - @brief serialize to stream - @deprecated This stream operator is deprecated and will be removed in - future 4.0.0 of the library. Please use - @ref operator<<(std::ostream&, const basic_json&) - instead; that is, replace calls like `j >> o;` with `o << j;`. - @since version 1.0.0; deprecated since version 3.0.0 - */ - JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&)) - friend std::ostream& operator>>(const basic_json& j, std::ostream& o) - { - return o << j; - } - - /// @} - - - ///////////////////// - // deserialization // - ///////////////////// - - /// @name deserialization - /// @{ - - /*! - @brief deserialize from a compatible input - - @tparam InputType A compatible input, for instance - - an std::istream object - - a FILE pointer - - a C-style array of characters - - a pointer to a null-terminated string of single byte characters - - an object obj for which begin(obj) and end(obj) produces a valid pair of - iterators. - - @param[in] i input to read from - @param[in] cb a parser callback function of type @ref parser_callback_t - which is used to control the deserialization by filtering unwanted values - (optional) - @param[in] allow_exceptions whether to throw exceptions in case of a - parse error (optional, true by default) - @param[in] ignore_comments whether comments should be ignored and treated - like whitespace (true) or yield a parse error (true); (optional, false by - default) - - @return deserialized JSON value; in case of a parse error and - @a allow_exceptions set to `false`, the return value will be - value_t::discarded. - - @throw parse_error.101 if a parse error occurs; example: `""unexpected end - of input; expected string literal""` - @throw parse_error.102 if to_unicode fails or surrogate error - @throw parse_error.103 if to_unicode fails - - @complexity Linear in the length of the input. The parser is a predictive - LL(1) parser. The complexity can be higher if the parser callback function - @a cb or reading from the input @a i has a super-linear complexity. - - @note A UTF-8 byte order mark is silently ignored. - - @liveexample{The example below demonstrates the `parse()` function reading - from an array.,parse__array__parser_callback_t} - - @liveexample{The example below demonstrates the `parse()` function with - and without callback function.,parse__string__parser_callback_t} - - @liveexample{The example below demonstrates the `parse()` function with - and without callback function.,parse__istream__parser_callback_t} - - @liveexample{The example below demonstrates the `parse()` function reading - from a contiguous container.,parse__contiguouscontainer__parser_callback_t} - - @since version 2.0.3 (contiguous containers); version 3.9.0 allowed to - ignore comments. - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json parse(InputType&& i, - const parser_callback_t cb = nullptr, - const bool allow_exceptions = true, - const bool ignore_comments = false) - { - basic_json result; - parser(detail::input_adapter(std::forward(i)), cb, allow_exceptions, ignore_comments).parse(true, result); - return result; - } - - /*! - @brief deserialize from a pair of character iterators - - The value_type of the iterator must be a integral type with size of 1, 2 or - 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32. - - @param[in] first iterator to start of character range - @param[in] last iterator to end of character range - @param[in] cb a parser callback function of type @ref parser_callback_t - which is used to control the deserialization by filtering unwanted values - (optional) - @param[in] allow_exceptions whether to throw exceptions in case of a - parse error (optional, true by default) - @param[in] ignore_comments whether comments should be ignored and treated - like whitespace (true) or yield a parse error (true); (optional, false by - default) - - @return deserialized JSON value; in case of a parse error and - @a allow_exceptions set to `false`, the return value will be - value_t::discarded. - - @throw parse_error.101 if a parse error occurs; example: `""unexpected end - of input; expected string literal""` - @throw parse_error.102 if to_unicode fails or surrogate error - @throw parse_error.103 if to_unicode fails - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json parse(IteratorType first, - IteratorType last, - const parser_callback_t cb = nullptr, - const bool allow_exceptions = true, - const bool ignore_comments = false) - { - basic_json result; - parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result); - return result; - } - - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len)) - static basic_json parse(detail::span_input_adapter&& i, - const parser_callback_t cb = nullptr, - const bool allow_exceptions = true, - const bool ignore_comments = false) - { - basic_json result; - parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result); - return result; - } - - /*! - @brief check if the input is valid JSON - - Unlike the @ref parse(InputType&&, const parser_callback_t,const bool) - function, this function neither throws an exception in case of invalid JSON - input (i.e., a parse error) nor creates diagnostic information. - - @tparam InputType A compatible input, for instance - - an std::istream object - - a FILE pointer - - a C-style array of characters - - a pointer to a null-terminated string of single byte characters - - an object obj for which begin(obj) and end(obj) produces a valid pair of - iterators. - - @param[in] i input to read from - @param[in] ignore_comments whether comments should be ignored and treated - like whitespace (true) or yield a parse error (true); (optional, false by - default) - - @return Whether the input read from @a i is valid JSON. - - @complexity Linear in the length of the input. The parser is a predictive - LL(1) parser. - - @note A UTF-8 byte order mark is silently ignored. - - @liveexample{The example below demonstrates the `accept()` function reading - from a string.,accept__string} - */ - template - static bool accept(InputType&& i, - const bool ignore_comments = false) - { - return parser(detail::input_adapter(std::forward(i)), nullptr, false, ignore_comments).accept(true); - } - - template - static bool accept(IteratorType first, IteratorType last, - const bool ignore_comments = false) - { - return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true); - } - - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len)) - static bool accept(detail::span_input_adapter&& i, - const bool ignore_comments = false) - { - return parser(i.get(), nullptr, false, ignore_comments).accept(true); - } - - /*! - @brief generate SAX events - - The SAX event lister must follow the interface of @ref json_sax. - - This function reads from a compatible input. Examples are: - - an std::istream object - - a FILE pointer - - a C-style array of characters - - a pointer to a null-terminated string of single byte characters - - an object obj for which begin(obj) and end(obj) produces a valid pair of - iterators. - - @param[in] i input to read from - @param[in,out] sax SAX event listener - @param[in] format the format to parse (JSON, CBOR, MessagePack, or UBJSON) - @param[in] strict whether the input has to be consumed completely - @param[in] ignore_comments whether comments should be ignored and treated - like whitespace (true) or yield a parse error (true); (optional, false by - default); only applies to the JSON file format. - - @return return value of the last processed SAX event - - @throw parse_error.101 if a parse error occurs; example: `""unexpected end - of input; expected string literal""` - @throw parse_error.102 if to_unicode fails or surrogate error - @throw parse_error.103 if to_unicode fails - - @complexity Linear in the length of the input. The parser is a predictive - LL(1) parser. The complexity can be higher if the SAX consumer @a sax has - a super-linear complexity. - - @note A UTF-8 byte order mark is silently ignored. - - @liveexample{The example below demonstrates the `sax_parse()` function - reading from string and processing the events with a user-defined SAX - event consumer.,sax_parse} - - @since version 3.2.0 - */ - template - JSON_HEDLEY_NON_NULL(2) - static bool sax_parse(InputType&& i, SAX* sax, - input_format_t format = input_format_t::json, - const bool strict = true, - const bool ignore_comments = false) - { - auto ia = detail::input_adapter(std::forward(i)); - return format == input_format_t::json - ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) - : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); - } - - template - JSON_HEDLEY_NON_NULL(3) - static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, - input_format_t format = input_format_t::json, - const bool strict = true, - const bool ignore_comments = false) - { - auto ia = detail::input_adapter(std::move(first), std::move(last)); - return format == input_format_t::json - ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) - : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); - } - - template - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...)) - JSON_HEDLEY_NON_NULL(2) - static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, - input_format_t format = input_format_t::json, - const bool strict = true, - const bool ignore_comments = false) - { - auto ia = i.get(); - return format == input_format_t::json - ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) - : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); - } - - /*! - @brief deserialize from stream - @deprecated This stream operator is deprecated and will be removed in - version 4.0.0 of the library. Please use - @ref operator>>(std::istream&, basic_json&) - instead; that is, replace calls like `j << i;` with `i >> j;`. - @since version 1.0.0; deprecated since version 3.0.0 - */ - JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&)) - friend std::istream& operator<<(basic_json& j, std::istream& i) - { - return operator>>(i, j); - } - - /*! - @brief deserialize from stream - - Deserializes an input stream to a JSON value. - - @param[in,out] i input stream to read a serialized JSON value from - @param[in,out] j JSON value to write the deserialized input to - - @throw parse_error.101 in case of an unexpected token - @throw parse_error.102 if to_unicode fails or surrogate error - @throw parse_error.103 if to_unicode fails - - @complexity Linear in the length of the input. The parser is a predictive - LL(1) parser. - - @note A UTF-8 byte order mark is silently ignored. - - @liveexample{The example below shows how a JSON value is constructed by - reading a serialization from a stream.,operator_deserialize} - - @sa parse(std::istream&, const parser_callback_t) for a variant with a - parser callback function to filter values while parsing - - @since version 1.0.0 - */ - friend std::istream& operator>>(std::istream& i, basic_json& j) - { - parser(detail::input_adapter(i)).parse(false, j); - return i; - } - - /// @} - - /////////////////////////// - // convenience functions // - /////////////////////////// - - /*! - @brief return the type as string - - Returns the type name as string to be used in error messages - usually to - indicate that a function was called on a wrong JSON type. - - @return a string representation of a the @a m_type member: - Value type | return value - ----------- | ------------- - null | `"null"` - boolean | `"boolean"` - string | `"string"` - number | `"number"` (for all number types) - object | `"object"` - array | `"array"` - binary | `"binary"` - discarded | `"discarded"` - - @exceptionsafety No-throw guarantee: this function never throws exceptions. - - @complexity Constant. - - @liveexample{The following code exemplifies `type_name()` for all JSON - types.,type_name} - - @sa @ref type() -- return the type of the JSON value - @sa @ref operator value_t() -- return the type of the JSON value (implicit) - - @since version 1.0.0, public since 2.1.0, `const char*` and `noexcept` - since 3.0.0 - */ - JSON_HEDLEY_RETURNS_NON_NULL - const char* type_name() const noexcept - { - { - switch (m_type) - { - case value_t::null: - return "null"; - case value_t::object: - return "object"; - case value_t::array: - return "array"; - case value_t::string: - return "string"; - case value_t::boolean: - return "boolean"; - case value_t::binary: - return "binary"; - case value_t::discarded: - return "discarded"; - default: - return "number"; - } - } - } - - - private: - ////////////////////// - // member variables // - ////////////////////// - - /// the type of the current element - value_t m_type = value_t::null; - - /// the value of the current element - json_value m_value = {}; - - ////////////////////////////////////////// - // binary serialization/deserialization // - ////////////////////////////////////////// - - /// @name binary serialization/deserialization support - /// @{ - - public: - /*! - @brief create a CBOR serialization of a given JSON value - - Serializes a given JSON value @a j to a byte vector using the CBOR (Concise - Binary Object Representation) serialization format. CBOR is a binary - serialization format which aims to be more compact than JSON itself, yet - more efficient to parse. - - The library uses the following mapping from JSON values types to - CBOR types according to the CBOR specification (RFC 7049): - - JSON value type | value/range | CBOR type | first byte - --------------- | ------------------------------------------ | ---------------------------------- | --------------- - null | `null` | Null | 0xF6 - boolean | `true` | True | 0xF5 - boolean | `false` | False | 0xF4 - number_integer | -9223372036854775808..-2147483649 | Negative integer (8 bytes follow) | 0x3B - number_integer | -2147483648..-32769 | Negative integer (4 bytes follow) | 0x3A - number_integer | -32768..-129 | Negative integer (2 bytes follow) | 0x39 - number_integer | -128..-25 | Negative integer (1 byte follow) | 0x38 - number_integer | -24..-1 | Negative integer | 0x20..0x37 - number_integer | 0..23 | Integer | 0x00..0x17 - number_integer | 24..255 | Unsigned integer (1 byte follow) | 0x18 - number_integer | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 - number_integer | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A - number_integer | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B - number_unsigned | 0..23 | Integer | 0x00..0x17 - number_unsigned | 24..255 | Unsigned integer (1 byte follow) | 0x18 - number_unsigned | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 - number_unsigned | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A - number_unsigned | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B - number_float | *any value representable by a float* | Single-Precision Float | 0xFA - number_float | *any value NOT representable by a float* | Double-Precision Float | 0xFB - string | *length*: 0..23 | UTF-8 string | 0x60..0x77 - string | *length*: 23..255 | UTF-8 string (1 byte follow) | 0x78 - string | *length*: 256..65535 | UTF-8 string (2 bytes follow) | 0x79 - string | *length*: 65536..4294967295 | UTF-8 string (4 bytes follow) | 0x7A - string | *length*: 4294967296..18446744073709551615 | UTF-8 string (8 bytes follow) | 0x7B - array | *size*: 0..23 | array | 0x80..0x97 - array | *size*: 23..255 | array (1 byte follow) | 0x98 - array | *size*: 256..65535 | array (2 bytes follow) | 0x99 - array | *size*: 65536..4294967295 | array (4 bytes follow) | 0x9A - array | *size*: 4294967296..18446744073709551615 | array (8 bytes follow) | 0x9B - object | *size*: 0..23 | map | 0xA0..0xB7 - object | *size*: 23..255 | map (1 byte follow) | 0xB8 - object | *size*: 256..65535 | map (2 bytes follow) | 0xB9 - object | *size*: 65536..4294967295 | map (4 bytes follow) | 0xBA - object | *size*: 4294967296..18446744073709551615 | map (8 bytes follow) | 0xBB - binary | *size*: 0..23 | byte string | 0x40..0x57 - binary | *size*: 23..255 | byte string (1 byte follow) | 0x58 - binary | *size*: 256..65535 | byte string (2 bytes follow) | 0x59 - binary | *size*: 65536..4294967295 | byte string (4 bytes follow) | 0x5A - binary | *size*: 4294967296..18446744073709551615 | byte string (8 bytes follow) | 0x5B - - @note The mapping is **complete** in the sense that any JSON value type - can be converted to a CBOR value. - - @note If NaN or Infinity are stored inside a JSON number, they are - serialized properly. This behavior differs from the @ref dump() - function which serializes NaN or Infinity to `null`. - - @note The following CBOR types are not used in the conversion: - - UTF-8 strings terminated by "break" (0x7F) - - arrays terminated by "break" (0x9F) - - maps terminated by "break" (0xBF) - - byte strings terminated by "break" (0x5F) - - date/time (0xC0..0xC1) - - bignum (0xC2..0xC3) - - decimal fraction (0xC4) - - bigfloat (0xC5) - - expected conversions (0xD5..0xD7) - - simple values (0xE0..0xF3, 0xF8) - - undefined (0xF7) - - half-precision floats (0xF9) - - break (0xFF) - - @param[in] j JSON value to serialize - @return CBOR serialization as byte vector - - @complexity Linear in the size of the JSON value @a j. - - @liveexample{The example shows the serialization of a JSON value to a byte - vector in CBOR format.,to_cbor} - - @sa http://cbor.io - @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the - analogous deserialization - @sa @ref to_msgpack(const basic_json&) for the related MessagePack format - @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the - related UBJSON format - - @since version 2.0.9; compact representation of floating-point numbers - since version 3.8.0 - */ - static std::vector to_cbor(const basic_json& j) - { - std::vector result; - to_cbor(j, result); - return result; - } - - static void to_cbor(const basic_json& j, detail::output_adapter o) - { - binary_writer(o).write_cbor(j); - } - - static void to_cbor(const basic_json& j, detail::output_adapter o) - { - binary_writer(o).write_cbor(j); - } - - /*! - @brief create a MessagePack serialization of a given JSON value - - Serializes a given JSON value @a j to a byte vector using the MessagePack - serialization format. MessagePack is a binary serialization format which - aims to be more compact than JSON itself, yet more efficient to parse. - - The library uses the following mapping from JSON values types to - MessagePack types according to the MessagePack specification: - - JSON value type | value/range | MessagePack type | first byte - --------------- | --------------------------------- | ---------------- | ---------- - null | `null` | nil | 0xC0 - boolean | `true` | true | 0xC3 - boolean | `false` | false | 0xC2 - number_integer | -9223372036854775808..-2147483649 | int64 | 0xD3 - number_integer | -2147483648..-32769 | int32 | 0xD2 - number_integer | -32768..-129 | int16 | 0xD1 - number_integer | -128..-33 | int8 | 0xD0 - number_integer | -32..-1 | negative fixint | 0xE0..0xFF - number_integer | 0..127 | positive fixint | 0x00..0x7F - number_integer | 128..255 | uint 8 | 0xCC - number_integer | 256..65535 | uint 16 | 0xCD - number_integer | 65536..4294967295 | uint 32 | 0xCE - number_integer | 4294967296..18446744073709551615 | uint 64 | 0xCF - number_unsigned | 0..127 | positive fixint | 0x00..0x7F - number_unsigned | 128..255 | uint 8 | 0xCC - number_unsigned | 256..65535 | uint 16 | 0xCD - number_unsigned | 65536..4294967295 | uint 32 | 0xCE - number_unsigned | 4294967296..18446744073709551615 | uint 64 | 0xCF - number_float | *any value representable by a float* | float 32 | 0xCA - number_float | *any value NOT representable by a float* | float 64 | 0xCB - string | *length*: 0..31 | fixstr | 0xA0..0xBF - string | *length*: 32..255 | str 8 | 0xD9 - string | *length*: 256..65535 | str 16 | 0xDA - string | *length*: 65536..4294967295 | str 32 | 0xDB - array | *size*: 0..15 | fixarray | 0x90..0x9F - array | *size*: 16..65535 | array 16 | 0xDC - array | *size*: 65536..4294967295 | array 32 | 0xDD - object | *size*: 0..15 | fix map | 0x80..0x8F - object | *size*: 16..65535 | map 16 | 0xDE - object | *size*: 65536..4294967295 | map 32 | 0xDF - binary | *size*: 0..255 | bin 8 | 0xC4 - binary | *size*: 256..65535 | bin 16 | 0xC5 - binary | *size*: 65536..4294967295 | bin 32 | 0xC6 - - @note The mapping is **complete** in the sense that any JSON value type - can be converted to a MessagePack value. - - @note The following values can **not** be converted to a MessagePack value: - - strings with more than 4294967295 bytes - - byte strings with more than 4294967295 bytes - - arrays with more than 4294967295 elements - - objects with more than 4294967295 elements - - @note Any MessagePack output created @ref to_msgpack can be successfully - parsed by @ref from_msgpack. - - @note If NaN or Infinity are stored inside a JSON number, they are - serialized properly. This behavior differs from the @ref dump() - function which serializes NaN or Infinity to `null`. - - @param[in] j JSON value to serialize - @return MessagePack serialization as byte vector - - @complexity Linear in the size of the JSON value @a j. - - @liveexample{The example shows the serialization of a JSON value to a byte - vector in MessagePack format.,to_msgpack} - - @sa http://msgpack.org - @sa @ref from_msgpack for the analogous deserialization - @sa @ref to_cbor(const basic_json& for the related CBOR format - @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the - related UBJSON format - - @since version 2.0.9 - */ - static std::vector to_msgpack(const basic_json& j) - { - std::vector result; - to_msgpack(j, result); - return result; - } - - static void to_msgpack(const basic_json& j, detail::output_adapter o) - { - binary_writer(o).write_msgpack(j); - } - - static void to_msgpack(const basic_json& j, detail::output_adapter o) - { - binary_writer(o).write_msgpack(j); - } - - /*! - @brief create a UBJSON serialization of a given JSON value - - Serializes a given JSON value @a j to a byte vector using the UBJSON - (Universal Binary JSON) serialization format. UBJSON aims to be more compact - than JSON itself, yet more efficient to parse. - - The library uses the following mapping from JSON values types to - UBJSON types according to the UBJSON specification: - - JSON value type | value/range | UBJSON type | marker - --------------- | --------------------------------- | ----------- | ------ - null | `null` | null | `Z` - boolean | `true` | true | `T` - boolean | `false` | false | `F` - number_integer | -9223372036854775808..-2147483649 | int64 | `L` - number_integer | -2147483648..-32769 | int32 | `l` - number_integer | -32768..-129 | int16 | `I` - number_integer | -128..127 | int8 | `i` - number_integer | 128..255 | uint8 | `U` - number_integer | 256..32767 | int16 | `I` - number_integer | 32768..2147483647 | int32 | `l` - number_integer | 2147483648..9223372036854775807 | int64 | `L` - number_unsigned | 0..127 | int8 | `i` - number_unsigned | 128..255 | uint8 | `U` - number_unsigned | 256..32767 | int16 | `I` - number_unsigned | 32768..2147483647 | int32 | `l` - number_unsigned | 2147483648..9223372036854775807 | int64 | `L` - number_unsigned | 2147483649..18446744073709551615 | high-precision | `H` - number_float | *any value* | float64 | `D` - string | *with shortest length indicator* | string | `S` - array | *see notes on optimized format* | array | `[` - object | *see notes on optimized format* | map | `{` - - @note The mapping is **complete** in the sense that any JSON value type - can be converted to a UBJSON value. - - @note The following values can **not** be converted to a UBJSON value: - - strings with more than 9223372036854775807 bytes (theoretical) - - @note The following markers are not used in the conversion: - - `Z`: no-op values are not created. - - `C`: single-byte strings are serialized with `S` markers. - - @note Any UBJSON output created @ref to_ubjson can be successfully parsed - by @ref from_ubjson. - - @note If NaN or Infinity are stored inside a JSON number, they are - serialized properly. This behavior differs from the @ref dump() - function which serializes NaN or Infinity to `null`. - - @note The optimized formats for containers are supported: Parameter - @a use_size adds size information to the beginning of a container and - removes the closing marker. Parameter @a use_type further checks - whether all elements of a container have the same type and adds the - type marker to the beginning of the container. The @a use_type - parameter must only be used together with @a use_size = true. Note - that @a use_size = true alone may result in larger representations - - the benefit of this parameter is that the receiving side is - immediately informed on the number of elements of the container. - - @note If the JSON data contains the binary type, the value stored is a list - of integers, as suggested by the UBJSON documentation. In particular, - this means that serialization and the deserialization of a JSON - containing binary values into UBJSON and back will result in a - different JSON object. - - @param[in] j JSON value to serialize - @param[in] use_size whether to add size annotations to container types - @param[in] use_type whether to add type annotations to container types - (must be combined with @a use_size = true) - @return UBJSON serialization as byte vector - - @complexity Linear in the size of the JSON value @a j. - - @liveexample{The example shows the serialization of a JSON value to a byte - vector in UBJSON format.,to_ubjson} - - @sa http://ubjson.org - @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the - analogous deserialization - @sa @ref to_cbor(const basic_json& for the related CBOR format - @sa @ref to_msgpack(const basic_json&) for the related MessagePack format - - @since version 3.1.0 - */ - static std::vector to_ubjson(const basic_json& j, - const bool use_size = false, - const bool use_type = false) - { - std::vector result; - to_ubjson(j, result, use_size, use_type); - return result; - } - - static void to_ubjson(const basic_json& j, detail::output_adapter o, - const bool use_size = false, const bool use_type = false) - { - binary_writer(o).write_ubjson(j, use_size, use_type); - } - - static void to_ubjson(const basic_json& j, detail::output_adapter o, - const bool use_size = false, const bool use_type = false) - { - binary_writer(o).write_ubjson(j, use_size, use_type); - } - - - /*! - @brief Serializes the given JSON object `j` to BSON and returns a vector - containing the corresponding BSON-representation. - - BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are - stored as a single entity (a so-called document). - - The library uses the following mapping from JSON values types to BSON types: - - JSON value type | value/range | BSON type | marker - --------------- | --------------------------------- | ----------- | ------ - null | `null` | null | 0x0A - boolean | `true`, `false` | boolean | 0x08 - number_integer | -9223372036854775808..-2147483649 | int64 | 0x12 - number_integer | -2147483648..2147483647 | int32 | 0x10 - number_integer | 2147483648..9223372036854775807 | int64 | 0x12 - number_unsigned | 0..2147483647 | int32 | 0x10 - number_unsigned | 2147483648..9223372036854775807 | int64 | 0x12 - number_unsigned | 9223372036854775808..18446744073709551615| -- | -- - number_float | *any value* | double | 0x01 - string | *any value* | string | 0x02 - array | *any value* | document | 0x04 - object | *any value* | document | 0x03 - binary | *any value* | binary | 0x05 - - @warning The mapping is **incomplete**, since only JSON-objects (and things - contained therein) can be serialized to BSON. - Also, integers larger than 9223372036854775807 cannot be serialized to BSON, - and the keys may not contain U+0000, since they are serialized a - zero-terminated c-strings. - - @throw out_of_range.407 if `j.is_number_unsigned() && j.get() > 9223372036854775807` - @throw out_of_range.409 if a key in `j` contains a NULL (U+0000) - @throw type_error.317 if `!j.is_object()` - - @pre The input `j` is required to be an object: `j.is_object() == true`. - - @note Any BSON output created via @ref to_bson can be successfully parsed - by @ref from_bson. - - @param[in] j JSON value to serialize - @return BSON serialization as byte vector - - @complexity Linear in the size of the JSON value @a j. - - @liveexample{The example shows the serialization of a JSON value to a byte - vector in BSON format.,to_bson} - - @sa http://bsonspec.org/spec.html - @sa @ref from_bson(detail::input_adapter&&, const bool strict) for the - analogous deserialization - @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the - related UBJSON format - @sa @ref to_cbor(const basic_json&) for the related CBOR format - @sa @ref to_msgpack(const basic_json&) for the related MessagePack format - */ - static std::vector to_bson(const basic_json& j) - { - std::vector result; - to_bson(j, result); - return result; - } - - /*! - @brief Serializes the given JSON object `j` to BSON and forwards the - corresponding BSON-representation to the given output_adapter `o`. - @param j The JSON object to convert to BSON. - @param o The output adapter that receives the binary BSON representation. - @pre The input `j` shall be an object: `j.is_object() == true` - @sa @ref to_bson(const basic_json&) - */ - static void to_bson(const basic_json& j, detail::output_adapter o) - { - binary_writer(o).write_bson(j); - } - - /*! - @copydoc to_bson(const basic_json&, detail::output_adapter) - */ - static void to_bson(const basic_json& j, detail::output_adapter o) - { - binary_writer(o).write_bson(j); - } - - - /*! - @brief create a JSON value from an input in CBOR format - - Deserializes a given input @a i to a JSON value using the CBOR (Concise - Binary Object Representation) serialization format. - - The library maps CBOR types to JSON value types as follows: - - CBOR type | JSON value type | first byte - ---------------------- | --------------- | ---------- - Integer | number_unsigned | 0x00..0x17 - Unsigned integer | number_unsigned | 0x18 - Unsigned integer | number_unsigned | 0x19 - Unsigned integer | number_unsigned | 0x1A - Unsigned integer | number_unsigned | 0x1B - Negative integer | number_integer | 0x20..0x37 - Negative integer | number_integer | 0x38 - Negative integer | number_integer | 0x39 - Negative integer | number_integer | 0x3A - Negative integer | number_integer | 0x3B - Byte string | binary | 0x40..0x57 - Byte string | binary | 0x58 - Byte string | binary | 0x59 - Byte string | binary | 0x5A - Byte string | binary | 0x5B - UTF-8 string | string | 0x60..0x77 - UTF-8 string | string | 0x78 - UTF-8 string | string | 0x79 - UTF-8 string | string | 0x7A - UTF-8 string | string | 0x7B - UTF-8 string | string | 0x7F - array | array | 0x80..0x97 - array | array | 0x98 - array | array | 0x99 - array | array | 0x9A - array | array | 0x9B - array | array | 0x9F - map | object | 0xA0..0xB7 - map | object | 0xB8 - map | object | 0xB9 - map | object | 0xBA - map | object | 0xBB - map | object | 0xBF - False | `false` | 0xF4 - True | `true` | 0xF5 - Null | `null` | 0xF6 - Half-Precision Float | number_float | 0xF9 - Single-Precision Float | number_float | 0xFA - Double-Precision Float | number_float | 0xFB - - @warning The mapping is **incomplete** in the sense that not all CBOR - types can be converted to a JSON value. The following CBOR types - are not supported and will yield parse errors (parse_error.112): - - date/time (0xC0..0xC1) - - bignum (0xC2..0xC3) - - decimal fraction (0xC4) - - bigfloat (0xC5) - - expected conversions (0xD5..0xD7) - - simple values (0xE0..0xF3, 0xF8) - - undefined (0xF7) - - @warning CBOR allows map keys of any type, whereas JSON only allows - strings as keys in object values. Therefore, CBOR maps with keys - other than UTF-8 strings are rejected (parse_error.113). - - @note Any CBOR output created @ref to_cbor can be successfully parsed by - @ref from_cbor. - - @param[in] i an input in CBOR format convertible to an input adapter - @param[in] strict whether to expect the input to be consumed until EOF - (true by default) - @param[in] allow_exceptions whether to throw exceptions in case of a - parse error (optional, true by default) - @param[in] tag_handler how to treat CBOR tags (optional, error by default) - - @return deserialized JSON value; in case of a parse error and - @a allow_exceptions set to `false`, the return value will be - value_t::discarded. - - @throw parse_error.110 if the given input ends prematurely or the end of - file was not reached when @a strict was set to true - @throw parse_error.112 if unsupported features from CBOR were - used in the given input @a v or if the input is not valid CBOR - @throw parse_error.113 if a string was expected as map key, but not found - - @complexity Linear in the size of the input @a i. - - @liveexample{The example shows the deserialization of a byte vector in CBOR - format to a JSON value.,from_cbor} - - @sa http://cbor.io - @sa @ref to_cbor(const basic_json&) for the analogous serialization - @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for the - related MessagePack format - @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the - related UBJSON format - - @since version 2.0.9; parameter @a start_index since 2.1.1; changed to - consume input adapters, removed start_index parameter, and added - @a strict parameter since 3.0.0; added @a allow_exceptions parameter - since 3.2.0; added @a tag_handler parameter since 3.9.0. - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json from_cbor(InputType&& i, - const bool strict = true, - const bool allow_exceptions = true, - const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = detail::input_adapter(std::forward(i)); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); - return res ? result : basic_json(value_t::discarded); - } - - /*! - @copydoc from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json from_cbor(IteratorType first, IteratorType last, - const bool strict = true, - const bool allow_exceptions = true, - const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = detail::input_adapter(std::move(first), std::move(last)); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); - return res ? result : basic_json(value_t::discarded); - } - - template - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) - static basic_json from_cbor(const T* ptr, std::size_t len, - const bool strict = true, - const bool allow_exceptions = true, - const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) - { - return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler); - } - - - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) - static basic_json from_cbor(detail::span_input_adapter&& i, - const bool strict = true, - const bool allow_exceptions = true, - const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = i.get(); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); - return res ? result : basic_json(value_t::discarded); - } - - /*! - @brief create a JSON value from an input in MessagePack format - - Deserializes a given input @a i to a JSON value using the MessagePack - serialization format. - - The library maps MessagePack types to JSON value types as follows: - - MessagePack type | JSON value type | first byte - ---------------- | --------------- | ---------- - positive fixint | number_unsigned | 0x00..0x7F - fixmap | object | 0x80..0x8F - fixarray | array | 0x90..0x9F - fixstr | string | 0xA0..0xBF - nil | `null` | 0xC0 - false | `false` | 0xC2 - true | `true` | 0xC3 - float 32 | number_float | 0xCA - float 64 | number_float | 0xCB - uint 8 | number_unsigned | 0xCC - uint 16 | number_unsigned | 0xCD - uint 32 | number_unsigned | 0xCE - uint 64 | number_unsigned | 0xCF - int 8 | number_integer | 0xD0 - int 16 | number_integer | 0xD1 - int 32 | number_integer | 0xD2 - int 64 | number_integer | 0xD3 - str 8 | string | 0xD9 - str 16 | string | 0xDA - str 32 | string | 0xDB - array 16 | array | 0xDC - array 32 | array | 0xDD - map 16 | object | 0xDE - map 32 | object | 0xDF - bin 8 | binary | 0xC4 - bin 16 | binary | 0xC5 - bin 32 | binary | 0xC6 - ext 8 | binary | 0xC7 - ext 16 | binary | 0xC8 - ext 32 | binary | 0xC9 - fixext 1 | binary | 0xD4 - fixext 2 | binary | 0xD5 - fixext 4 | binary | 0xD6 - fixext 8 | binary | 0xD7 - fixext 16 | binary | 0xD8 - negative fixint | number_integer | 0xE0-0xFF - - @note Any MessagePack output created @ref to_msgpack can be successfully - parsed by @ref from_msgpack. - - @param[in] i an input in MessagePack format convertible to an input - adapter - @param[in] strict whether to expect the input to be consumed until EOF - (true by default) - @param[in] allow_exceptions whether to throw exceptions in case of a - parse error (optional, true by default) - - @return deserialized JSON value; in case of a parse error and - @a allow_exceptions set to `false`, the return value will be - value_t::discarded. - - @throw parse_error.110 if the given input ends prematurely or the end of - file was not reached when @a strict was set to true - @throw parse_error.112 if unsupported features from MessagePack were - used in the given input @a i or if the input is not valid MessagePack - @throw parse_error.113 if a string was expected as map key, but not found - - @complexity Linear in the size of the input @a i. - - @liveexample{The example shows the deserialization of a byte vector in - MessagePack format to a JSON value.,from_msgpack} - - @sa http://msgpack.org - @sa @ref to_msgpack(const basic_json&) for the analogous serialization - @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the - related CBOR format - @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for - the related UBJSON format - @sa @ref from_bson(detail::input_adapter&&, const bool, const bool) for - the related BSON format - - @since version 2.0.9; parameter @a start_index since 2.1.1; changed to - consume input adapters, removed start_index parameter, and added - @a strict parameter since 3.0.0; added @a allow_exceptions parameter - since 3.2.0 - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json from_msgpack(InputType&& i, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = detail::input_adapter(std::forward(i)); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - - /*! - @copydoc from_msgpack(detail::input_adapter&&, const bool, const bool) - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json from_msgpack(IteratorType first, IteratorType last, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = detail::input_adapter(std::move(first), std::move(last)); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - - - template - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) - static basic_json from_msgpack(const T* ptr, std::size_t len, - const bool strict = true, - const bool allow_exceptions = true) - { - return from_msgpack(ptr, ptr + len, strict, allow_exceptions); - } - - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) - static basic_json from_msgpack(detail::span_input_adapter&& i, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = i.get(); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - - - /*! - @brief create a JSON value from an input in UBJSON format - - Deserializes a given input @a i to a JSON value using the UBJSON (Universal - Binary JSON) serialization format. - - The library maps UBJSON types to JSON value types as follows: - - UBJSON type | JSON value type | marker - ----------- | --------------------------------------- | ------ - no-op | *no value, next value is read* | `N` - null | `null` | `Z` - false | `false` | `F` - true | `true` | `T` - float32 | number_float | `d` - float64 | number_float | `D` - uint8 | number_unsigned | `U` - int8 | number_integer | `i` - int16 | number_integer | `I` - int32 | number_integer | `l` - int64 | number_integer | `L` - high-precision number | number_integer, number_unsigned, or number_float - depends on number string | 'H' - string | string | `S` - char | string | `C` - array | array (optimized values are supported) | `[` - object | object (optimized values are supported) | `{` - - @note The mapping is **complete** in the sense that any UBJSON value can - be converted to a JSON value. - - @param[in] i an input in UBJSON format convertible to an input adapter - @param[in] strict whether to expect the input to be consumed until EOF - (true by default) - @param[in] allow_exceptions whether to throw exceptions in case of a - parse error (optional, true by default) - - @return deserialized JSON value; in case of a parse error and - @a allow_exceptions set to `false`, the return value will be - value_t::discarded. - - @throw parse_error.110 if the given input ends prematurely or the end of - file was not reached when @a strict was set to true - @throw parse_error.112 if a parse error occurs - @throw parse_error.113 if a string could not be parsed successfully - - @complexity Linear in the size of the input @a i. - - @liveexample{The example shows the deserialization of a byte vector in - UBJSON format to a JSON value.,from_ubjson} - - @sa http://ubjson.org - @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the - analogous serialization - @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the - related CBOR format - @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for - the related MessagePack format - @sa @ref from_bson(detail::input_adapter&&, const bool, const bool) for - the related BSON format - - @since version 3.1.0; added @a allow_exceptions parameter since 3.2.0 - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json from_ubjson(InputType&& i, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = detail::input_adapter(std::forward(i)); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - - /*! - @copydoc from_ubjson(detail::input_adapter&&, const bool, const bool) - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json from_ubjson(IteratorType first, IteratorType last, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = detail::input_adapter(std::move(first), std::move(last)); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - - template - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) - static basic_json from_ubjson(const T* ptr, std::size_t len, - const bool strict = true, - const bool allow_exceptions = true) - { - return from_ubjson(ptr, ptr + len, strict, allow_exceptions); - } - - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) - static basic_json from_ubjson(detail::span_input_adapter&& i, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = i.get(); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - - - /*! - @brief Create a JSON value from an input in BSON format - - Deserializes a given input @a i to a JSON value using the BSON (Binary JSON) - serialization format. - - The library maps BSON record types to JSON value types as follows: - - BSON type | BSON marker byte | JSON value type - --------------- | ---------------- | --------------------------- - double | 0x01 | number_float - string | 0x02 | string - document | 0x03 | object - array | 0x04 | array - binary | 0x05 | still unsupported - undefined | 0x06 | still unsupported - ObjectId | 0x07 | still unsupported - boolean | 0x08 | boolean - UTC Date-Time | 0x09 | still unsupported - null | 0x0A | null - Regular Expr. | 0x0B | still unsupported - DB Pointer | 0x0C | still unsupported - JavaScript Code | 0x0D | still unsupported - Symbol | 0x0E | still unsupported - JavaScript Code | 0x0F | still unsupported - int32 | 0x10 | number_integer - Timestamp | 0x11 | still unsupported - 128-bit decimal float | 0x13 | still unsupported - Max Key | 0x7F | still unsupported - Min Key | 0xFF | still unsupported - - @warning The mapping is **incomplete**. The unsupported mappings - are indicated in the table above. - - @param[in] i an input in BSON format convertible to an input adapter - @param[in] strict whether to expect the input to be consumed until EOF - (true by default) - @param[in] allow_exceptions whether to throw exceptions in case of a - parse error (optional, true by default) - - @return deserialized JSON value; in case of a parse error and - @a allow_exceptions set to `false`, the return value will be - value_t::discarded. - - @throw parse_error.114 if an unsupported BSON record type is encountered - - @complexity Linear in the size of the input @a i. - - @liveexample{The example shows the deserialization of a byte vector in - BSON format to a JSON value.,from_bson} - - @sa http://bsonspec.org/spec.html - @sa @ref to_bson(const basic_json&) for the analogous serialization - @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the - related CBOR format - @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for - the related MessagePack format - @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the - related UBJSON format - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json from_bson(InputType&& i, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = detail::input_adapter(std::forward(i)); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - - /*! - @copydoc from_bson(detail::input_adapter&&, const bool, const bool) - */ - template - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json from_bson(IteratorType first, IteratorType last, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = detail::input_adapter(std::move(first), std::move(last)); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - - template - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) - static basic_json from_bson(const T* ptr, std::size_t len, - const bool strict = true, - const bool allow_exceptions = true) - { - return from_bson(ptr, ptr + len, strict, allow_exceptions); - } - - JSON_HEDLEY_WARN_UNUSED_RESULT - JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) - static basic_json from_bson(detail::span_input_adapter&& i, - const bool strict = true, - const bool allow_exceptions = true) - { - basic_json result; - detail::json_sax_dom_parser sdp(result, allow_exceptions); - auto ia = i.get(); - const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); - return res ? result : basic_json(value_t::discarded); - } - /// @} - - ////////////////////////// - // JSON Pointer support // - ////////////////////////// - - /// @name JSON Pointer functions - /// @{ - - /*! - @brief access specified element via JSON Pointer - - Uses a JSON pointer to retrieve a reference to the respective JSON value. - No bound checking is performed. Similar to @ref operator[](const typename - object_t::key_type&), `null` values are created in arrays and objects if - necessary. - - In particular: - - If the JSON pointer points to an object key that does not exist, it - is created an filled with a `null` value before a reference to it - is returned. - - If the JSON pointer points to an array index that does not exist, it - is created an filled with a `null` value before a reference to it - is returned. All indices between the current maximum and the given - index are also filled with `null`. - - The special value `-` is treated as a synonym for the index past the - end. - - @param[in] ptr a JSON pointer - - @return reference to the element pointed to by @a ptr - - @complexity Constant. - - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index was not a number - @throw out_of_range.404 if the JSON pointer can not be resolved - - @liveexample{The behavior is shown in the example.,operatorjson_pointer} - - @since version 2.0.0 - */ - reference operator[](const json_pointer& ptr) - { - return ptr.get_unchecked(this); - } - - /*! - @brief access specified element via JSON Pointer - - Uses a JSON pointer to retrieve a reference to the respective JSON value. - No bound checking is performed. The function does not change the JSON - value; no `null` values are created. In particular, the special value - `-` yields an exception. - - @param[in] ptr JSON pointer to the desired element - - @return const reference to the element pointed to by @a ptr - - @complexity Constant. - - @throw parse_error.106 if an array index begins with '0' - @throw parse_error.109 if an array index was not a number - @throw out_of_range.402 if the array index '-' is used - @throw out_of_range.404 if the JSON pointer can not be resolved - - @liveexample{The behavior is shown in the example.,operatorjson_pointer_const} - - @since version 2.0.0 - */ - const_reference operator[](const json_pointer& ptr) const - { - return ptr.get_unchecked(this); - } - - /*! - @brief access specified element via JSON Pointer - - Returns a reference to the element at with specified JSON pointer @a ptr, - with bounds checking. - - @param[in] ptr JSON pointer to the desired element - - @return reference to the element pointed to by @a ptr - - @throw parse_error.106 if an array index in the passed JSON pointer @a ptr - begins with '0'. See example below. - - @throw parse_error.109 if an array index in the passed JSON pointer @a ptr - is not a number. See example below. - - @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr - is out of range. See example below. - - @throw out_of_range.402 if the array index '-' is used in the passed JSON - pointer @a ptr. As `at` provides checked access (and no elements are - implicitly inserted), the index '-' is always invalid. See example below. - - @throw out_of_range.403 if the JSON pointer describes a key of an object - which cannot be found. See example below. - - @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. - See example below. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @complexity Constant. - - @since version 2.0.0 - - @liveexample{The behavior is shown in the example.,at_json_pointer} - */ - reference at(const json_pointer& ptr) - { - return ptr.get_checked(this); - } - - /*! - @brief access specified element via JSON Pointer - - Returns a const reference to the element at with specified JSON pointer @a - ptr, with bounds checking. - - @param[in] ptr JSON pointer to the desired element - - @return reference to the element pointed to by @a ptr - - @throw parse_error.106 if an array index in the passed JSON pointer @a ptr - begins with '0'. See example below. - - @throw parse_error.109 if an array index in the passed JSON pointer @a ptr - is not a number. See example below. - - @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr - is out of range. See example below. - - @throw out_of_range.402 if the array index '-' is used in the passed JSON - pointer @a ptr. As `at` provides checked access (and no elements are - implicitly inserted), the index '-' is always invalid. See example below. - - @throw out_of_range.403 if the JSON pointer describes a key of an object - which cannot be found. See example below. - - @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. - See example below. - - @exceptionsafety Strong guarantee: if an exception is thrown, there are no - changes in the JSON value. - - @complexity Constant. - - @since version 2.0.0 - - @liveexample{The behavior is shown in the example.,at_json_pointer_const} - */ - const_reference at(const json_pointer& ptr) const - { - return ptr.get_checked(this); - } - - /*! - @brief return flattened JSON value - - The function creates a JSON object whose keys are JSON pointers (see [RFC - 6901](https://tools.ietf.org/html/rfc6901)) and whose values are all - primitive. The original JSON value can be restored using the @ref - unflatten() function. - - @return an object that maps JSON pointers to primitive values - - @note Empty objects and arrays are flattened to `null` and will not be - reconstructed correctly by the @ref unflatten() function. - - @complexity Linear in the size the JSON value. - - @liveexample{The following code shows how a JSON object is flattened to an - object whose keys consist of JSON pointers.,flatten} - - @sa @ref unflatten() for the reverse function - - @since version 2.0.0 - */ - basic_json flatten() const - { - basic_json result(value_t::object); - json_pointer::flatten("", *this, result); - return result; - } - - /*! - @brief unflatten a previously flattened JSON value - - The function restores the arbitrary nesting of a JSON value that has been - flattened before using the @ref flatten() function. The JSON value must - meet certain constraints: - 1. The value must be an object. - 2. The keys must be JSON pointers (see - [RFC 6901](https://tools.ietf.org/html/rfc6901)) - 3. The mapped values must be primitive JSON types. - - @return the original JSON from a flattened version - - @note Empty objects and arrays are flattened by @ref flatten() to `null` - values and can not unflattened to their original type. Apart from - this example, for a JSON value `j`, the following is always true: - `j == j.flatten().unflatten()`. - - @complexity Linear in the size the JSON value. - - @throw type_error.314 if value is not an object - @throw type_error.315 if object values are not primitive - - @liveexample{The following code shows how a flattened JSON object is - unflattened into the original nested JSON object.,unflatten} - - @sa @ref flatten() for the reverse function - - @since version 2.0.0 - */ - basic_json unflatten() const - { - return json_pointer::unflatten(*this); - } - - /// @} - - ////////////////////////// - // JSON Patch functions // - ////////////////////////// - - /// @name JSON Patch functions - /// @{ - - /*! - @brief applies a JSON patch - - [JSON Patch](http://jsonpatch.com) defines a JSON document structure for - expressing a sequence of operations to apply to a JSON) document. With - this function, a JSON Patch is applied to the current JSON value by - executing all operations from the patch. - - @param[in] json_patch JSON patch document - @return patched document - - @note The application of a patch is atomic: Either all operations succeed - and the patched document is returned or an exception is thrown. In - any case, the original value is not changed: the patch is applied - to a copy of the value. - - @throw parse_error.104 if the JSON patch does not consist of an array of - objects - - @throw parse_error.105 if the JSON patch is malformed (e.g., mandatory - attributes are missing); example: `"operation add must have member path"` - - @throw out_of_range.401 if an array index is out of range. - - @throw out_of_range.403 if a JSON pointer inside the patch could not be - resolved successfully in the current JSON value; example: `"key baz not - found"` - - @throw out_of_range.405 if JSON pointer has no parent ("add", "remove", - "move") - - @throw other_error.501 if "test" operation was unsuccessful - - @complexity Linear in the size of the JSON value and the length of the - JSON patch. As usually only a fraction of the JSON value is affected by - the patch, the complexity can usually be neglected. - - @liveexample{The following code shows how a JSON patch is applied to a - value.,patch} - - @sa @ref diff -- create a JSON patch by comparing two JSON values - - @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) - @sa [RFC 6901 (JSON Pointer)](https://tools.ietf.org/html/rfc6901) - - @since version 2.0.0 - */ - basic_json patch(const basic_json& json_patch) const - { - // make a working copy to apply the patch to - basic_json result = *this; - - // the valid JSON Patch operations - enum class patch_operations {add, remove, replace, move, copy, test, invalid}; - - const auto get_op = [](const std::string & op) - { - if (op == "add") - { - return patch_operations::add; - } - if (op == "remove") - { - return patch_operations::remove; - } - if (op == "replace") - { - return patch_operations::replace; - } - if (op == "move") - { - return patch_operations::move; - } - if (op == "copy") - { - return patch_operations::copy; - } - if (op == "test") - { - return patch_operations::test; - } - - return patch_operations::invalid; - }; - - // wrapper for "add" operation; add value at ptr - const auto operation_add = [&result](json_pointer & ptr, basic_json val) - { - // adding to the root of the target document means replacing it - if (ptr.empty()) - { - result = val; - return; - } - - // make sure the top element of the pointer exists - json_pointer top_pointer = ptr.top(); - if (top_pointer != ptr) - { - result.at(top_pointer); - } - - // get reference to parent of JSON pointer ptr - const auto last_path = ptr.back(); - ptr.pop_back(); - basic_json& parent = result[ptr]; - - switch (parent.m_type) - { - case value_t::null: - case value_t::object: - { - // use operator[] to add value - parent[last_path] = val; - break; - } - - case value_t::array: - { - if (last_path == "-") - { - // special case: append to back - parent.push_back(val); - } - else - { - const auto idx = json_pointer::array_index(last_path); - if (JSON_HEDLEY_UNLIKELY(idx > parent.size())) - { - // avoid undefined behavior - JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); - } - - // default case: insert add offset - parent.insert(parent.begin() + static_cast(idx), val); - } - break; - } - - // if there exists a parent it cannot be primitive - default: // LCOV_EXCL_LINE - JSON_ASSERT(false); // LCOV_EXCL_LINE - } - }; - - // wrapper for "remove" operation; remove value at ptr - const auto operation_remove = [&result](json_pointer & ptr) - { - // get reference to parent of JSON pointer ptr - const auto last_path = ptr.back(); - ptr.pop_back(); - basic_json& parent = result.at(ptr); - - // remove child - if (parent.is_object()) - { - // perform range check - auto it = parent.find(last_path); - if (JSON_HEDLEY_LIKELY(it != parent.end())) - { - parent.erase(it); - } - else - { - JSON_THROW(out_of_range::create(403, "key '" + last_path + "' not found")); - } - } - else if (parent.is_array()) - { - // note erase performs range check - parent.erase(json_pointer::array_index(last_path)); - } - }; - - // type check: top level value must be an array - if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array())) - { - JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects")); - } - - // iterate and apply the operations - for (const auto& val : json_patch) - { - // wrapper to get a value for an operation - const auto get_value = [&val](const std::string & op, - const std::string & member, - bool string_type) -> basic_json & - { - // find value - auto it = val.m_value.object->find(member); - - // context-sensitive error message - const auto error_msg = (op == "op") ? "operation" : "operation '" + op + "'"; - - // check if desired value is present - if (JSON_HEDLEY_UNLIKELY(it == val.m_value.object->end())) - { - JSON_THROW(parse_error::create(105, 0, error_msg + " must have member '" + member + "'")); - } - - // check if result is of type string - if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string())) - { - JSON_THROW(parse_error::create(105, 0, error_msg + " must have string member '" + member + "'")); - } - - // no error: return value - return it->second; - }; - - // type check: every element of the array must be an object - if (JSON_HEDLEY_UNLIKELY(!val.is_object())) - { - JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects")); - } - - // collect mandatory members - const auto op = get_value("op", "op", true).template get(); - const auto path = get_value(op, "path", true).template get(); - json_pointer ptr(path); - - switch (get_op(op)) - { - case patch_operations::add: - { - operation_add(ptr, get_value("add", "value", false)); - break; - } - - case patch_operations::remove: - { - operation_remove(ptr); - break; - } - - case patch_operations::replace: - { - // the "path" location must exist - use at() - result.at(ptr) = get_value("replace", "value", false); - break; - } - - case patch_operations::move: - { - const auto from_path = get_value("move", "from", true).template get(); - json_pointer from_ptr(from_path); - - // the "from" location must exist - use at() - basic_json v = result.at(from_ptr); - - // The move operation is functionally identical to a - // "remove" operation on the "from" location, followed - // immediately by an "add" operation at the target - // location with the value that was just removed. - operation_remove(from_ptr); - operation_add(ptr, v); - break; - } - - case patch_operations::copy: - { - const auto from_path = get_value("copy", "from", true).template get(); - const json_pointer from_ptr(from_path); - - // the "from" location must exist - use at() - basic_json v = result.at(from_ptr); - - // The copy is functionally identical to an "add" - // operation at the target location using the value - // specified in the "from" member. - operation_add(ptr, v); - break; - } - - case patch_operations::test: - { - bool success = false; - JSON_TRY - { - // check if "value" matches the one at "path" - // the "path" location must exist - use at() - success = (result.at(ptr) == get_value("test", "value", false)); - } - JSON_INTERNAL_CATCH (out_of_range&) - { - // ignore out of range errors: success remains false - } - - // throw an exception if test fails - if (JSON_HEDLEY_UNLIKELY(!success)) - { - JSON_THROW(other_error::create(501, "unsuccessful: " + val.dump())); - } - - break; - } - - default: - { - // op must be "add", "remove", "replace", "move", "copy", or - // "test" - JSON_THROW(parse_error::create(105, 0, "operation value '" + op + "' is invalid")); - } - } - } - - return result; - } - - /*! - @brief creates a diff as a JSON patch - - Creates a [JSON Patch](http://jsonpatch.com) so that value @a source can - be changed into the value @a target by calling @ref patch function. - - @invariant For two JSON values @a source and @a target, the following code - yields always `true`: - @code {.cpp} - source.patch(diff(source, target)) == target; - @endcode - - @note Currently, only `remove`, `add`, and `replace` operations are - generated. - - @param[in] source JSON value to compare from - @param[in] target JSON value to compare against - @param[in] path helper value to create JSON pointers - - @return a JSON patch to convert the @a source to @a target - - @complexity Linear in the lengths of @a source and @a target. - - @liveexample{The following code shows how a JSON patch is created as a - diff for two JSON values.,diff} - - @sa @ref patch -- apply a JSON patch - @sa @ref merge_patch -- apply a JSON Merge Patch - - @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) - - @since version 2.0.0 - */ - JSON_HEDLEY_WARN_UNUSED_RESULT - static basic_json diff(const basic_json& source, const basic_json& target, - const std::string& path = "") - { - // the patch - basic_json result(value_t::array); - - // if the values are the same, return empty patch - if (source == target) - { - return result; - } - - if (source.type() != target.type()) - { - // different types: replace value - result.push_back( - { - {"op", "replace"}, {"path", path}, {"value", target} - }); - return result; - } - - switch (source.type()) - { - case value_t::array: - { - // first pass: traverse common elements - std::size_t i = 0; - while (i < source.size() && i < target.size()) - { - // recursive call to compare array values at index i - auto temp_diff = diff(source[i], target[i], path + "/" + std::to_string(i)); - result.insert(result.end(), temp_diff.begin(), temp_diff.end()); - ++i; - } - - // i now reached the end of at least one array - // in a second pass, traverse the remaining elements - - // remove my remaining elements - const auto end_index = static_cast(result.size()); - while (i < source.size()) - { - // add operations in reverse order to avoid invalid - // indices - result.insert(result.begin() + end_index, object( - { - {"op", "remove"}, - {"path", path + "/" + std::to_string(i)} - })); - ++i; - } - - // add other remaining elements - while (i < target.size()) - { - result.push_back( - { - {"op", "add"}, - {"path", path + "/-"}, - {"value", target[i]} - }); - ++i; - } - - break; - } - - case value_t::object: - { - // first pass: traverse this object's elements - for (auto it = source.cbegin(); it != source.cend(); ++it) - { - // escape the key name to be used in a JSON patch - const auto key = json_pointer::escape(it.key()); - - if (target.find(it.key()) != target.end()) - { - // recursive call to compare object values at key it - auto temp_diff = diff(it.value(), target[it.key()], path + "/" + key); - result.insert(result.end(), temp_diff.begin(), temp_diff.end()); - } - else - { - // found a key that is not in o -> remove it - result.push_back(object( - { - {"op", "remove"}, {"path", path + "/" + key} - })); - } - } - - // second pass: traverse other object's elements - for (auto it = target.cbegin(); it != target.cend(); ++it) - { - if (source.find(it.key()) == source.end()) - { - // found a key that is not in this -> add it - const auto key = json_pointer::escape(it.key()); - result.push_back( - { - {"op", "add"}, {"path", path + "/" + key}, - {"value", it.value()} - }); - } - } - - break; - } - - default: - { - // both primitive type: replace value - result.push_back( - { - {"op", "replace"}, {"path", path}, {"value", target} - }); - break; - } - } - - return result; - } - - /// @} - - //////////////////////////////// - // JSON Merge Patch functions // - //////////////////////////////// - - /// @name JSON Merge Patch functions - /// @{ - - /*! - @brief applies a JSON Merge Patch - - The merge patch format is primarily intended for use with the HTTP PATCH - method as a means of describing a set of modifications to a target - resource's content. This function applies a merge patch to the current - JSON value. - - The function implements the following algorithm from Section 2 of - [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396): - - ``` - define MergePatch(Target, Patch): - if Patch is an Object: - if Target is not an Object: - Target = {} // Ignore the contents and set it to an empty Object - for each Name/Value pair in Patch: - if Value is null: - if Name exists in Target: - remove the Name/Value pair from Target - else: - Target[Name] = MergePatch(Target[Name], Value) - return Target - else: - return Patch - ``` - - Thereby, `Target` is the current object; that is, the patch is applied to - the current value. - - @param[in] apply_patch the patch to apply - - @complexity Linear in the lengths of @a patch. - - @liveexample{The following code shows how a JSON Merge Patch is applied to - a JSON document.,merge_patch} - - @sa @ref patch -- apply a JSON patch - @sa [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396) - - @since version 3.0.0 - */ - void merge_patch(const basic_json& apply_patch) - { - if (apply_patch.is_object()) - { - if (!is_object()) - { - *this = object(); - } - for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it) - { - if (it.value().is_null()) - { - erase(it.key()); - } - else - { - operator[](it.key()).merge_patch(it.value()); - } - } - } - else - { - *this = apply_patch; - } - } - - /// @} -}; - -/*! -@brief user-defined to_string function for JSON values - -This function implements a user-defined to_string for JSON objects. - -@param[in] j a JSON object -@return a std::string object -*/ - -NLOHMANN_BASIC_JSON_TPL_DECLARATION -std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j) -{ - return j.dump(); -} -} // namespace nlohmann - -/////////////////////// -// nonmember support // -/////////////////////// - -// specialization of std::swap, and std::hash -namespace std -{ - -/// hash value for JSON objects -template<> -struct hash -{ - /*! - @brief return a hash value for a JSON object - - @since version 1.0.0 - */ - std::size_t operator()(const nlohmann::json& j) const - { - return nlohmann::detail::hash(j); - } -}; - -/// specialization for std::less -/// @note: do not remove the space after '<', -/// see https://github.com/nlohmann/json/pull/679 -template<> -struct less<::nlohmann::detail::value_t> -{ - /*! - @brief compare two value_t enum values - @since version 3.0.0 - */ - bool operator()(nlohmann::detail::value_t lhs, - nlohmann::detail::value_t rhs) const noexcept - { - return nlohmann::detail::operator<(lhs, rhs); - } -}; - -// C++20 prohibit function specialization in the std namespace. -#ifndef JSON_HAS_CPP_20 - -/*! -@brief exchanges the values of two JSON objects - -@since version 1.0.0 -*/ -template<> -inline void swap(nlohmann::json& j1, nlohmann::json& j2) noexcept( - is_nothrow_move_constructible::value&& - is_nothrow_move_assignable::value - ) -{ - j1.swap(j2); -} - -#endif - -} // namespace std - -/*! -@brief user-defined string literal for JSON values - -This operator implements a user-defined string literal for JSON objects. It -can be used by adding `"_json"` to a string literal and returns a JSON object -if no parse error occurred. - -@param[in] s a string representation of a JSON object -@param[in] n the length of string @a s -@return a JSON object - -@since version 1.0.0 -*/ -JSON_HEDLEY_NON_NULL(1) -inline nlohmann::json operator "" _json(const char* s, std::size_t n) -{ - return nlohmann::json::parse(s, s + n); -} - -/*! -@brief user-defined string literal for JSON pointer - -This operator implements a user-defined string literal for JSON Pointers. It -can be used by adding `"_json_pointer"` to a string literal and returns a JSON pointer -object if no parse error occurred. - -@param[in] s a string representation of a JSON Pointer -@param[in] n the length of string @a s -@return a JSON pointer object - -@since version 2.0.0 -*/ -JSON_HEDLEY_NON_NULL(1) -inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n) -{ - return nlohmann::json::json_pointer(std::string(s, n)); -} - -// #include - - -// restore GCC/clang diagnostic settings -#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) - #pragma GCC diagnostic pop -#endif -#if defined(__clang__) - #pragma GCC diagnostic pop -#endif - -// clean up -#undef JSON_ASSERT -#undef JSON_INTERNAL_CATCH -#undef JSON_CATCH -#undef JSON_THROW -#undef JSON_TRY -#undef JSON_HAS_CPP_14 -#undef JSON_HAS_CPP_17 -#undef NLOHMANN_BASIC_JSON_TPL_DECLARATION -#undef NLOHMANN_BASIC_JSON_TPL -#undef JSON_EXPLICIT - -// #include -#undef JSON_HEDLEY_ALWAYS_INLINE -#undef JSON_HEDLEY_ARM_VERSION -#undef JSON_HEDLEY_ARM_VERSION_CHECK -#undef JSON_HEDLEY_ARRAY_PARAM -#undef JSON_HEDLEY_ASSUME -#undef JSON_HEDLEY_BEGIN_C_DECLS -#undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE -#undef JSON_HEDLEY_CLANG_HAS_BUILTIN -#undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE -#undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE -#undef JSON_HEDLEY_CLANG_HAS_EXTENSION -#undef JSON_HEDLEY_CLANG_HAS_FEATURE -#undef JSON_HEDLEY_CLANG_HAS_WARNING -#undef JSON_HEDLEY_COMPCERT_VERSION -#undef JSON_HEDLEY_COMPCERT_VERSION_CHECK -#undef JSON_HEDLEY_CONCAT -#undef JSON_HEDLEY_CONCAT3 -#undef JSON_HEDLEY_CONCAT3_EX -#undef JSON_HEDLEY_CONCAT_EX -#undef JSON_HEDLEY_CONST -#undef JSON_HEDLEY_CONSTEXPR -#undef JSON_HEDLEY_CONST_CAST -#undef JSON_HEDLEY_CPP_CAST -#undef JSON_HEDLEY_CRAY_VERSION -#undef JSON_HEDLEY_CRAY_VERSION_CHECK -#undef JSON_HEDLEY_C_DECL -#undef JSON_HEDLEY_DEPRECATED -#undef JSON_HEDLEY_DEPRECATED_FOR -#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL -#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ -#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED -#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES -#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS -#undef JSON_HEDLEY_DIAGNOSTIC_POP -#undef JSON_HEDLEY_DIAGNOSTIC_PUSH -#undef JSON_HEDLEY_DMC_VERSION -#undef JSON_HEDLEY_DMC_VERSION_CHECK -#undef JSON_HEDLEY_EMPTY_BASES -#undef JSON_HEDLEY_EMSCRIPTEN_VERSION -#undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK -#undef JSON_HEDLEY_END_C_DECLS -#undef JSON_HEDLEY_FLAGS -#undef JSON_HEDLEY_FLAGS_CAST -#undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE -#undef JSON_HEDLEY_GCC_HAS_BUILTIN -#undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE -#undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE -#undef JSON_HEDLEY_GCC_HAS_EXTENSION -#undef JSON_HEDLEY_GCC_HAS_FEATURE -#undef JSON_HEDLEY_GCC_HAS_WARNING -#undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK -#undef JSON_HEDLEY_GCC_VERSION -#undef JSON_HEDLEY_GCC_VERSION_CHECK -#undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE -#undef JSON_HEDLEY_GNUC_HAS_BUILTIN -#undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE -#undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE -#undef JSON_HEDLEY_GNUC_HAS_EXTENSION -#undef JSON_HEDLEY_GNUC_HAS_FEATURE -#undef JSON_HEDLEY_GNUC_HAS_WARNING -#undef JSON_HEDLEY_GNUC_VERSION -#undef JSON_HEDLEY_GNUC_VERSION_CHECK -#undef JSON_HEDLEY_HAS_ATTRIBUTE -#undef JSON_HEDLEY_HAS_BUILTIN -#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE -#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS -#undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE -#undef JSON_HEDLEY_HAS_EXTENSION -#undef JSON_HEDLEY_HAS_FEATURE -#undef JSON_HEDLEY_HAS_WARNING -#undef JSON_HEDLEY_IAR_VERSION -#undef JSON_HEDLEY_IAR_VERSION_CHECK -#undef JSON_HEDLEY_IBM_VERSION -#undef JSON_HEDLEY_IBM_VERSION_CHECK -#undef JSON_HEDLEY_IMPORT -#undef JSON_HEDLEY_INLINE -#undef JSON_HEDLEY_INTEL_VERSION -#undef JSON_HEDLEY_INTEL_VERSION_CHECK -#undef JSON_HEDLEY_IS_CONSTANT -#undef JSON_HEDLEY_IS_CONSTEXPR_ -#undef JSON_HEDLEY_LIKELY -#undef JSON_HEDLEY_MALLOC -#undef JSON_HEDLEY_MESSAGE -#undef JSON_HEDLEY_MSVC_VERSION -#undef JSON_HEDLEY_MSVC_VERSION_CHECK -#undef JSON_HEDLEY_NEVER_INLINE -#undef JSON_HEDLEY_NON_NULL -#undef JSON_HEDLEY_NO_ESCAPE -#undef JSON_HEDLEY_NO_RETURN -#undef JSON_HEDLEY_NO_THROW -#undef JSON_HEDLEY_NULL -#undef JSON_HEDLEY_PELLES_VERSION -#undef JSON_HEDLEY_PELLES_VERSION_CHECK -#undef JSON_HEDLEY_PGI_VERSION -#undef JSON_HEDLEY_PGI_VERSION_CHECK -#undef JSON_HEDLEY_PREDICT -#undef JSON_HEDLEY_PRINTF_FORMAT -#undef JSON_HEDLEY_PRIVATE -#undef JSON_HEDLEY_PUBLIC -#undef JSON_HEDLEY_PURE -#undef JSON_HEDLEY_REINTERPRET_CAST -#undef JSON_HEDLEY_REQUIRE -#undef JSON_HEDLEY_REQUIRE_CONSTEXPR -#undef JSON_HEDLEY_REQUIRE_MSG -#undef JSON_HEDLEY_RESTRICT -#undef JSON_HEDLEY_RETURNS_NON_NULL -#undef JSON_HEDLEY_SENTINEL -#undef JSON_HEDLEY_STATIC_ASSERT -#undef JSON_HEDLEY_STATIC_CAST -#undef JSON_HEDLEY_STRINGIFY -#undef JSON_HEDLEY_STRINGIFY_EX -#undef JSON_HEDLEY_SUNPRO_VERSION -#undef JSON_HEDLEY_SUNPRO_VERSION_CHECK -#undef JSON_HEDLEY_TINYC_VERSION -#undef JSON_HEDLEY_TINYC_VERSION_CHECK -#undef JSON_HEDLEY_TI_ARMCL_VERSION -#undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK -#undef JSON_HEDLEY_TI_CL2000_VERSION -#undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK -#undef JSON_HEDLEY_TI_CL430_VERSION -#undef JSON_HEDLEY_TI_CL430_VERSION_CHECK -#undef JSON_HEDLEY_TI_CL6X_VERSION -#undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK -#undef JSON_HEDLEY_TI_CL7X_VERSION -#undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK -#undef JSON_HEDLEY_TI_CLPRU_VERSION -#undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK -#undef JSON_HEDLEY_TI_VERSION -#undef JSON_HEDLEY_TI_VERSION_CHECK -#undef JSON_HEDLEY_UNAVAILABLE -#undef JSON_HEDLEY_UNLIKELY -#undef JSON_HEDLEY_UNPREDICTABLE -#undef JSON_HEDLEY_UNREACHABLE -#undef JSON_HEDLEY_UNREACHABLE_RETURN -#undef JSON_HEDLEY_VERSION -#undef JSON_HEDLEY_VERSION_DECODE_MAJOR -#undef JSON_HEDLEY_VERSION_DECODE_MINOR -#undef JSON_HEDLEY_VERSION_DECODE_REVISION -#undef JSON_HEDLEY_VERSION_ENCODE -#undef JSON_HEDLEY_WARNING -#undef JSON_HEDLEY_WARN_UNUSED_RESULT -#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG -#undef JSON_HEDLEY_FALL_THROUGH - - - -#endif // INCLUDE_NLOHMANN_JSON_HPP_ diff --git a/test/205Test.cse b/test/205Test.cse new file mode 100644 index 000000000..4dea8eeee --- /dev/null +++ b/test/205Test.cse @@ -0,0 +1,1545 @@ +//CBECCr generated input for the 2100 ft2 prototype with tile roof and prescriptive features for CTZ12 (Sacramento) + + + #define DD1 Jun 30 + #define CD1 Jul 10 + #define HD1 Dec 03 + repHdrL = "12 P21 G20 TILE" + wfname = "USA_CA_Sacramento.Exec.AP.724830_CTZ2010.epw" + ebTolHour = 0.001 + ebTolDay = 0.001 + ebTolMon = 0.001 + ebTolSubHr = 0.001 + jan1DOW = "THU" + wuDays = 30 + nSubSteps = 30 + skyModel = "anisotropic" + dt = "YES" + heatDsTDbO = 37 + coolDsDay = DD1 + +MATERIAL "mat-Gypsum Board" + matDens = 40 + matSpHt = 0.27 + matCond = 0.09167 + +MATERIAL "mat-3 Coat Stucco" + matDens = 116 + matSpHt = 0.2 + matCond = 0.4167 + +MATERIAL "mat-SoftWood" + matDens = 35 + matSpHt = 0.39 + matCond = 0.08167 + +MATERIAL "mat-Wood layer" + matDens = 41 + matSpHt = 0.45 + matCond = 0.06127 + +MATERIAL "mat-R2 Sheathing" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.04167 + +MATERIAL "mat-Light Roof" + matDens = 120 + matSpHt = 0.2 + matCond = 1 + +MATERIAL "mat-Carpet" + matDens = 12.3 + matSpHt = 0.34 + matCond = 0.02 + +MATERIAL "mat-R4 Sheathing" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.02083 + +MATERIAL "mat-R4 Synth Stucco" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.02083 + +MATERIAL "mat-R4 Synth Stucco (Copy)" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.02083 + matCondCT = 0.00418 + +MATERIAL "mat-R2 Sheathing (Copy)" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.04167 + matCondCT = 0.00418 + +MATERIAL "mat-10 PSF Roof" + matDens = 120 + matSpHt = 0.2 + matCond = 1 + +MATERIAL "mat-Exterior Wall Cons-R15-InsMat-2" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.027778 + matCondCT = 0.00418 + +MATERIAL "mat-Cathedral Ceiling Cons-R19-InsMat-1" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.02193 + matCondCT = 0.00418 + +MATERIAL "mat-Floor Above Crawl Cons-R15-InsMat-3" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.027778 + matCondCT = 0.00418 + +MATERIAL "mat-Ceiling below attic Cons-R9.1-InsMat-2" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.038703 + matCondCT = 0.00418 + +MATERIAL "mat-Ext Floor Cons-R19-InsMat-3" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.02193 + matCondCT = 0.00418 + +MATERIAL "mat-Ceiling below attic Cons-AtcEdgWA-R14.0292-InsMat-2" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.038703 + matCondCT = 0.00418 + +MATERIAL "mat-Ceiling below attic Cons-AtcEdgWB-R9.1-InsMat-2" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.038703 + matCondCT = 0.00418 + +MATERIAL "mat-Ceiling below attic Cons-AtcEdgWB-R18.9583-InsMat-4" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.038703 + matCondCT = 0.00418 + +MATERIAL "mat-SNEICCarpet" + matDens = 12.3 + matSpHt = 0.34 + matCond = 0.02 + +MATERIAL "mat-SNEICConcrete" + matDens = 144 + matSpHt = 0.2 + matCond = 1 + +MATERIAL "mat-SNEICEarth" + matDens = 115 + matSpHt = 0.2 + matCond = 1 + +MATERIAL "mat-AtticTruss" + matDens = 32 + matSpHt = 0.33 + matCond = 0.0667 + +MATERIAL "IntMassMat-SoftWood" + matDens = 35 + matSpHt = 0.39 + matCond = 0.08167 + +MATERIAL "IntMassMat-Gypsum" + matDens = 40 + matSpHt = 0.27 + matCond = 0.09167 + +CONSTRUCTION "ccn-Exterior Wall Cons" + +LAYER "cl1-Exterior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "cl2-Exterior Wall Cons" + lrMat = "mat-Exterior Wall Cons-R15-InsMat-2" + lrThk = 0.291667 + +LAYER "cl3-Exterior Wall Cons" + lrMat = "mat-R4 Synth Stucco (Copy)" + lrThk = 0.083333 + +CONSTRUCTION "fcn-Exterior Wall Cons" + +LAYER "fl1-Exterior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "fl2-Exterior Wall Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + +LAYER "fl3-Exterior Wall Cons" + lrMat = "mat-R4 Synth Stucco (Copy)" + lrThk = 0.083333 + +CONSTRUCTION "ccn-Cathedral Ceiling Cons" + +LAYER "cl1-Cathedral Ceiling Cons" + lrMat = "mat-Cathedral Ceiling Cons-R19-InsMat-1" + lrThk = 0.291667 + +LAYER "cl2-Cathedral Ceiling Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "cl3-Cathedral Ceiling Cons" + lrMat = "mat-R2 Sheathing (Copy)" + lrThk = 0.083333 + +LAYER "cl4-Cathedral Ceiling Cons" + lrMat = "mat-Light Roof" + lrThk = 0.016667 + +CONSTRUCTION "fcn-Cathedral Ceiling Cons" + +LAYER "fl1-Cathedral Ceiling Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + +LAYER "fl2-Cathedral Ceiling Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "fl3-Cathedral Ceiling Cons" + lrMat = "mat-R2 Sheathing (Copy)" + lrThk = 0.083333 + +LAYER "fl4-Cathedral Ceiling Cons" + lrMat = "mat-Light Roof" + lrThk = 0.016667 + +CONSTRUCTION "ccn-Floor Above Crawl Cons" + +LAYER "cl1-Floor Above Crawl Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + +LAYER "cl2-Floor Above Crawl Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "cl3-Floor Above Crawl Cons" + lrMat = "mat-Floor Above Crawl Cons-R15-InsMat-3" + lrThk = 0.291667 + +LAYER "cl4-Floor Above Crawl Cons" + lrMat = "mat-3 Coat Stucco" + lrThk = 0.072917 + +CONSTRUCTION "fcn-Floor Above Crawl Cons" + +LAYER "fl1-Floor Above Crawl Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + +LAYER "fl2-Floor Above Crawl Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "fl3-Floor Above Crawl Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + +LAYER "fl4-Floor Above Crawl Cons" + lrMat = "mat-3 Coat Stucco" + lrThk = 0.072917 + +CONSTRUCTION "ccn-Ceiling below attic Cons" + +LAYER "cl1-Ceiling below attic Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "cl2-Ceiling below attic Cons" + lrMat = "mat-Ceiling below attic Cons-R9.1-InsMat-2" + lrThk = 0.291667 + +LAYER "cl3-Ceiling below attic Cons" + lrMat = "mat-Ceiling below attic Cons-R9.1-InsMat-2" + lrThk = 0.926282 + +CONSTRUCTION "fcn-Ceiling below attic Cons" + +LAYER "fl1-Ceiling below attic Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "fl2-Ceiling below attic Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + +LAYER "fl3-Ceiling below attic Cons" + lrMat = "mat-Ceiling below attic Cons-R9.1-InsMat-2" + lrThk = 0.926282 + +CONSTRUCTION "ccn-Interior Floor Cons" + +LAYER "cl1-Interior Floor Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + +LAYER "cl2-Interior Floor Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "cl4-Interior Floor Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +CONSTRUCTION "fcn-Interior Floor Cons" + +LAYER "fl1-Interior Floor Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + +LAYER "fl2-Interior Floor Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "fl3-Interior Floor Cons" + lrMat = "mat-SoftWood" + lrThk = 0.9375 + +LAYER "fl4-Interior Floor Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +CONSTRUCTION "ccn-Attic Roof Cons" + +LAYER "cl2-Attic Roof Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "cl3-Attic Roof Cons" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + +CONSTRUCTION "fcn-Attic Roof Cons" + +LAYER "fl1-Attic Roof Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + +LAYER "fl2-Attic Roof Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "fl3-Attic Roof Cons" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + +CONSTRUCTION "ccn-Interior Wall Cons" + +LAYER "cl1-Interior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "cl3-Interior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +CONSTRUCTION "fcn-Interior Wall Cons" + +LAYER "fl1-Interior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "fl2-Interior Wall Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + +LAYER "fl3-Interior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +CONSTRUCTION "ccn-Ext Floor Cons" + +LAYER "cl1-Ext Floor Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + +LAYER "cl2-Ext Floor Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "cl3-Ext Floor Cons" + lrMat = "mat-Ext Floor Cons-R19-InsMat-3" + lrThk = 0.291667 + +CONSTRUCTION "fcn-Ext Floor Cons" + +LAYER "fl1-Ext Floor Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + +LAYER "fl2-Ext Floor Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "fl3-Ext Floor Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + +CONSTRUCTION "ccn-Ceiling below attic Cons-AtcEdgWA" + +LAYER "cl1-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "cl2-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWA-R14.0292-InsMat-2" + lrThk = 0.449653 + +LAYER "cl3-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "cl4-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + +CONSTRUCTION "fcn-Ceiling below attic Cons-AtcEdgWA" + +LAYER "fl1-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "fl2-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-SoftWood" + lrThk = 0.449653 + +LAYER "fl3-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "fl4-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + +CONSTRUCTION "ccn-Ceiling below attic Cons-AtcEdgWB" + +LAYER "cl1-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "cl2-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWB-R9.1-InsMat-2" + lrThk = 0.291667 + +LAYER "cl3-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWB-R9.1-InsMat-2" + lrThk = 0.305155 + +LAYER "cl4-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWB-R18.9583-InsMat-4" + lrThk = 0.607639 + +LAYER "cl5-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "cl6-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + +CONSTRUCTION "fcn-Ceiling below attic Cons-AtcEdgWB" + +LAYER "fl1-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + +LAYER "fl2-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + +LAYER "fl3-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWB-R9.1-InsMat-2" + lrThk = 0.305155 + +LAYER "fl4-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-SoftWood" + lrThk = 0.607639 + +LAYER "fl5-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + +LAYER "fl6-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + +CONSTRUCTION "scn-SlabConsNoEdgeInsulCpt" + +LAYER "cl1-SNEICCCarpet" + lrMat = "mat-SNEICCarpet" + lrThk = 0.041667 + +LAYER "cl2-SNEICCConcrete" + lrMat = "mat-SNEICConcrete" + lrThk = 0.291667 + +LAYER "cl3-SNEICCEarth" + lrMat = "mat-SNEICEarth" + lrThk = 2 + +CONSTRUCTION "scn-SlabConsNoEdgeInsulExp" + +LAYER "cl1-SNEIXCConcrete" + lrMat = "mat-SNEICConcrete" + lrThk = 0.291667 + +LAYER "cl2-SNEIXCEarth" + lrMat = "mat-SNEICEarth" + lrThk = 2 + +CONSTRUCTION "con-AtticTruss" + +LAYER "lyr-AtticTruss" + lrMat = "mat-AtticTruss" + lrThk = 0.0625 + +CONSTRUCTION "con-FurnIMass" + +LAYER "cl1-FurnIMass" + lrMat = "IntMassMat-SoftWood" + lrThk = 0.208333 + +CONSTRUCTION "con-WallFrmIMass" + +LAYER "cl1-WallFrmIMass" + lrMat = "IntMassMat-Gypsum" + lrThk = 0.041667 + +LAYER "cl2-WallFrmIMass" + lrMat = "IntMassMat-SoftWood" + lrThk = 0.291667 + +LAYER "cl3-WallFrmIMass" + lrMat = "IntMassMat-Gypsum" + lrThk = 0.041667 + +CONSTRUCTION "con-WallCavIMass" + +LAYER "cl1-WallCavIMass" + lrMat = "IntMassMat-Gypsum" + lrThk = 0.041667 + +LAYER "cl2-WallCavIMass" + lrMat = "IntMassMat-Gypsum" + lrThk = 0.041667 + +METER "MtrElec" + +METER "MtrNatGas" + +IZXFER "Conditioned-BypassxA" + izNVType = "NONE" + izZn1 = "Conditioned-zn" + izZn2 = "Attic-atc" + izHConst = 0.015 * 2100 * select(@znRes["Conditioned-zn"].prior.H.tAir - @znRes["Attic-atc"].prior.H.tAir > 0., 1., default 0.) + +IZXFER "Conditioned-WlLU" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.047578 + izHD = 2.25 + izNVEff = 1 + izCpr = 0.6 + izExp = 0.65 + +IZXFER "Conditioned-WlLS" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.095156 + izHD = 2.25 + izNVEff = 1 + izCpr = -0.65 + izExp = 0.65 + +IZXFER "Conditioned-WlLD" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.047578 + izHD = 2.25 + izNVEff = 1 + izCpr = -0.3 + izExp = 0.65 + +IZXFER "Conditioned-WlHU" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.047578 + izHD = 6.75 + izNVEff = 1 + izCpr = 0.6 + izExp = 0.65 + +IZXFER "Conditioned-WlHS" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.095156 + izHD = 6.75 + izNVEff = 1 + izCpr = -0.65 + izExp = 0.65 + +IZXFER "Conditioned-WlHD" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.047578 + izHD = 6.75 + izNVEff = 1 + izCpr = -0.3 + izExp = 0.65 + +IZXFER "Conditioned-WnLU" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 2.625 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 2.67 + izNVEff = 0.5 + izCpr = 0.6 + +IZXFER "Conditioned-WnLS" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 5.250 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 2.67 + izNVEff = 0.5 + izCpr = -0.65 + +IZXFER "Conditioned-WnLD" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 2.625 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 2.67 + izNVEff = 0.5 + izCpr = -0.3 + +IZXFER "Conditioned-WnHU" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 2.625 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 6.67 + izNVEff = 0.5 + izCpr = 0.6 + +IZXFER "Conditioned-WnHS" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 5.250 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 6.67 + izNVEff = 0.5 + izCpr = -0.65 + +IZXFER "Conditioned-WnHD" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 2.625 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 6.67 + izNVEff = 0.5 + izCpr = -0.3 + +IZXFER "Conditioned-xAttic" + izNVType = "AIRNETIZ" + izZn1 = "Conditioned-zn" + izZn2 = "Attic-atc" + izALo = 0.540125 + izHD = 9 + izNVEff = 1 + izExp = 0.65 + +IZXFER "Conditioned-IAQFanE" + izNVType = "AIRNETEXTFAN" + izZn1 = "Conditioned-zn" + izVFmin = -51 + izVFmax = -51 + izFanVfDs = 51 + izFanElecPwr = 0.25 + izFanMtr = "MtrElec" + izFanEndUse = "FANV" + +IZXFER "Conditioned-WHF" + izNVType = "AIRNETIZFAN" + izZn1 = "Conditioned-zn" + izZn2 = "Attic-atc" + izVFmin = 0 + izVFmax = -262.5 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izFanVfDs = 262.5 + izFanElecPwr = 0.1 + izFanMtr = "MtrElec" + izFanEndUse = "FANC" + +IZXFER "Attic-SU" + izNVType = "AIRNETEXT" + izZn1 = "Attic-atc" + izALo = 0.875 + izHD = 9 + izNVEff = 0.6 + izCpr = 0.6 + izExp = 0.65 + +IZXFER "Attic-SS" + izNVType = "AIRNETEXT" + izZn1 = "Attic-atc" + izALo = 1.75 + izHD = 9 + izNVEff = 0.6 + izCpr = -0.65 + izExp = 0.65 + +IZXFER "Attic-SD" + izNVType = "AIRNETEXT" + izZn1 = "Attic-atc" + izALo = 0.875 + izHD = 9 + izNVEff = 0.6 + izCpr = -0.3 + izExp = 0.65 + +ZONE "Conditioned-zn" + znModel = "CZM" + znArea = 2100 + znVol = 18900 + znEaveZ = 9 + znCeilingHt = 9 + znCAir = 4200 + znSC = select( $radDiff >1., 0.5, default 0.8 ) + znTH = select( $dsDay==1, 70, $dsDay==2, 60, @weather.taDbAvg07 >60., 60, default hourval(65,65,65,65,65,65,65,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,65)) + znTC = select( $dsDay==1, 83, $dsDay==2, 78, default hourval(78,78,78,78,78,78,78,83,83,83,83,83,83,82,81,80,79,78,78,78,78,78,78,78)) + znTD = select( $dsDay==1, 77, $dsDay==2, 99, @weather.taDbAvg07 >60., 68, default 77 ) + infAC = 0 + infELA = 0 + infShld = 4 + znRSys = "rsys-Central HVAC" + +GAIN "Conditioned-znLtg" + gnMeter = "MtrElec" + gnEndUse = "Lit" + gnPower = 4.65014 * 2100 * + select( $dsDay==1, 0., default hourval(0.023,0.019,0.015,0.017,0.021,0.031,0.042,0.041,0.034,0.029,0.027,0.025,0.021,0.021,0.021,0.026,0.031,0.044,0.084,0.118,0.113,0.096,0.063,0.038) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0.4 + +GAIN "Conditioned-znPpl" + gnPower = 9.56121 * 2100 * + select( $dsDay==1, 0., default hourval(0.035,0.035,0.035,0.035,0.035,0.059,0.082,0.055,0.027,0.014,0.014,0.014,0.014,0.014,0.019,0.027,0.041,0.055,0.068,0.082,0.082,0.07,0.053,0.035) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0.3 + gnFrLat = 0.427 + +GAIN "Conditioned-znMsc" + gnMeter = "MtrElec" + gnEndUse = "Rcp" + gnPower = 9.82089 * 2100 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0.3 + gnFrLat = 0.03 + +GAIN "Conditioned-znRefrig" + gnMeter = "MtrElec" + gnEndUse = "Refr" + gnPower = 260.65033 + gnFrRad = 0 + +GAIN "Conditioned-znDishwasher" + gnMeter = "MtrElec" + gnEndUse = "Dish" + gnPower = 1178.19 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0 + gnFrLat = 0.25 + +GAIN "Conditioned-znCook" + gnMeter = "MtrNatGas" + gnEndUse = "Cook" + gnPower = 5068.11 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrZn = 0.9 + gnFrRad = 0 + gnFrLat = 0.67 + +GAIN "Conditioned-znWasher" + gnMeter = "MtrElec" + gnEndUse = "Wash" + gnPower = 1522.29 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0 + +GAIN "Conditioned-znDryer" + gnMeter = "MtrNatGas" + gnEndUse = "Dry" + gnPower = 9315.07 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrZn = 0.3 + gnFrRad = 0 + gnFrLat = 0.5 + +GAIN "Conditioned-znExtLtg" + gnMeter = "MtrElec" + gnEndUse = "Ext" + gnPower = 1091.39 * + hourval(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.25,0.25,0.25,0.25) + gnFrZn = 0 + +SURFACE "Ceiling (below attic) 1-Frm" + sfType = "Ceiling" + sfCon = "fcn-Ceiling below attic Cons" + sfArea = 127.032661 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Attic-atc" + +SURFACE "Ceiling (below attic) 1-Cav" + sfType = "Ceiling" + sfCon = "ccn-Ceiling below attic Cons" + sfArea = 1687.719604 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Attic-atc" + +SURFACE "Ceiling (below attic) 1-WAFrm" + sfType = "Ceiling" + sfCon = "fcn-Ceiling below attic Cons-AtcEdgWA" + sfArea = 6.811235 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.9 + sfModel = "Forward_Difference" + +SURFACE "Ceiling (below attic) 1-WACav" + sfType = "Ceiling" + sfCon = "ccn-Ceiling below attic Cons-AtcEdgWA" + sfArea = 90.492126 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.9 + sfModel = "Forward_Difference" + +SURFACE "Ceiling (below attic) 1-WBFrm" + sfType = "Ceiling" + sfCon = "fcn-Ceiling below attic Cons-AtcEdgWB" + sfArea = 13.156106 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.9 + sfModel = "Forward_Difference" + +SURFACE "Ceiling (below attic) 1-WBCav" + sfType = "Ceiling" + sfCon = "ccn-Ceiling below attic Cons-AtcEdgWB" + sfArea = 174.788254 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.9 + sfModel = "Forward_Difference" + +SURFACE "Front-Frm" + sfType = "Wall" + sfCon = "fcn-Exterior Wall Cons" + sfArea = 74.25 + sfTilt = 90 + sfAzm = 0 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + +SURFACE "Left-Frm" + sfType = "Wall" + sfCon = "fcn-Exterior Wall Cons" + sfArea = 84.25 + sfTilt = 90 + sfAzm = 90 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + +SURFACE "Back-Frm" + sfType = "Wall" + sfCon = "fcn-Exterior Wall Cons" + sfArea = 84.25 + sfTilt = 90 + sfAzm = 180 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + +SURFACE "Right-Frm" + sfType = "Wall" + sfCon = "fcn-Exterior Wall Cons" + sfArea = 84.25 + sfTilt = 90 + sfAzm = 270 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + +SURFACE "Front-Cav" + sfType = "Wall" + sfCon = "ccn-Exterior Wall Cons" + sfArea = 367.75 + sfTilt = 90 + sfAzm = 0 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + +WINDOW "Win F1-NoScrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "None" + wnInShd = "DrapeMed" + +WINDOW "Win F1-Scrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "Inscrn" + wnInShd = "DrapeMed" + +DOOR "Door 1-Sim" + drArea = 40 + drU = 0.5 + +SURFACE "Left-Cav" + sfType = "Wall" + sfCon = "ccn-Exterior Wall Cons" + sfArea = 357.75 + sfTilt = 90 + sfAzm = 90 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + +WINDOW "Win L1-NoScrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "None" + wnInShd = "DrapeMed" + +WINDOW "Win L1-Scrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "Inscrn" + wnInShd = "DrapeMed" + +SURFACE "Back-Cav" + sfType = "Wall" + sfCon = "ccn-Exterior Wall Cons" + sfArea = 357.75 + sfTilt = 90 + sfAzm = 180 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + +WINDOW "Win B1-NoScrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "None" + wnInShd = "DrapeMed" + +WINDOW "Win B1-Scrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "Inscrn" + wnInShd = "DrapeMed" + +SURFACE "Right-Cav" + sfType = "Wall" + sfCon = "ccn-Exterior Wall Cons" + sfArea = 357.75 + sfTilt = 90 + sfAzm = 270 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + +WINDOW "Win R1-NoScrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "None" + wnInShd = "DrapeMed" + +WINDOW "Win R1-Scrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "Inscrn" + wnInShd = "DrapeMed" + +SURFACE "Slab On Grade 1-Prm" + sfType = "Floor" + sfCon = "scn-SlabConsNoEdgeInsulCpt" + sfArea = 307.200012 + sfTilt = 180 + sfModel = "Forward_Difference" + sfExCnd = "Ground" + sfExCTGrnd = 0.0551 + sfExCTaDbAvgYr = 0.0028 + sfExCTaDbAvg14 = 0.0852 + sfExRConGrnd = 5.267 + sfInHcModel = "Unified" + +SURFACE "Slab On Grade 1-Int" + sfType = "Floor" + sfCon = "scn-SlabConsNoEdgeInsulCpt" + sfArea = 1372.800049 + sfTilt = 180 + sfModel = "Forward_Difference" + sfExCnd = "Ground" + sfExCTGrnd = 0.0446 + sfExCTaDbAvgYr = 0.0238 + sfExRConGrnd = 5.267 + sfInHcModel = "Unified" + +SURFACE "Slab On Grade 1-Prm 17" + sfType = "Floor" + sfCon = "scn-SlabConsNoEdgeInsulExp" + sfArea = 76.799995 + sfTilt = 180 + sfModel = "Forward_Difference" + sfExCnd = "Ground" + sfExCTGrnd = 0.0737 + sfExCTaDbAvgYr = 0.0014 + sfExCTaDbAvg14 = 0.1692 + sfExRConGrnd = 3.187 + sfInHcModel = "Unified" + +SURFACE "Slab On Grade 1-Int 18" + sfType = "Floor" + sfCon = "scn-SlabConsNoEdgeInsulExp" + sfArea = 343.199982 + sfTilt = 180 + sfModel = "Forward_Difference" + sfExCnd = "Ground" + sfExCTGrnd = 0.0521 + sfExCTaDbAvgYr = 0.0251 + sfExRConGrnd = 3.187 + sfInHcModel = "Unified" + +SURFACE "Furniture-imass" + sfType = "Wall" + sfCon = "con-FurnIMass" + sfArea = 4200 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Conditioned-zn" + +SURFACE "WallFrm-imass" + sfType = "Wall" + sfCon = "con-WallFrmIMass" + sfArea = 525 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Conditioned-zn" + +SURFACE "WallCav-imass" + sfType = "Wall" + sfCon = "con-WallCavIMass" + sfArea = 1575 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Conditioned-zn" + +ZONE "Attic-atc" + znModel = "UZX" + znArea = 1814.752197 + znVol = 5775.166016 + znCAir = 0.01 + infAC = 0 + infELA = 0 + infShld = 4 + +SURFACE "Attic-atc-rfNF" + sfType = "Ceiling" + sfCon = "fcn-Attic Roof Cons" + sfArea = 34.404678 + sfTilt = 22.619864 + sfAzm = 0 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + +SURFACE "Attic-atc-rfNC" + sfType = "Ceiling" + sfCon = "ccn-Attic Roof Cons" + sfArea = 457.090729 + sfTilt = 22.619864 + sfAzm = 0 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + +SURFACE "Attic-atc-rfEF" + sfType = "Ceiling" + sfCon = "fcn-Attic Roof Cons" + sfArea = 34.404678 + sfTilt = 22.619864 + sfAzm = 90 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + +SURFACE "Attic-atc-rfEC" + sfType = "Ceiling" + sfCon = "ccn-Attic Roof Cons" + sfArea = 457.090729 + sfTilt = 22.619864 + sfAzm = 90 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + +SURFACE "Attic-atc-rfSF" + sfType = "Ceiling" + sfCon = "fcn-Attic Roof Cons" + sfArea = 34.404678 + sfTilt = 22.619864 + sfAzm = 180 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + +SURFACE "Attic-atc-rfSC" + sfType = "Ceiling" + sfCon = "ccn-Attic Roof Cons" + sfArea = 457.090729 + sfTilt = 22.619864 + sfAzm = 180 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + +SURFACE "Attic-atc-rfWF" + sfType = "Ceiling" + sfCon = "fcn-Attic Roof Cons" + sfArea = 34.404678 + sfTilt = 22.619864 + sfAzm = 270 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + +SURFACE "Attic-atc-rfWC" + sfType = "Ceiling" + sfCon = "ccn-Attic Roof Cons" + sfArea = 457.090729 + sfTilt = 22.619864 + sfAzm = 270 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + +SURFACE "Attic-atc-rfT1" + sfType = "Wall" + sfCon = "con-AtticTruss" + sfArea = 1209.834839 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "Adiabatic" + +SURFACE "Attic-atc-rfT2" + sfType = "Wall" + sfCon = "con-AtticTruss" + sfArea = 1209.834839 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "Adiabatic" + +SURFACE "Attic-atc-rfT3" + sfType = "Wall" + sfCon = "con-AtticTruss" + sfArea = 1209.834839 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "Adiabatic" + +EQUIPDATA "Constant-Eff-AC" + edFilePath = "DX-Constant-Efficiency.RS0004.a205.cbor" + edExpectedRS = "RS0004" + edDoValidation = YES + +RSYS "rsys-Central HVAC" + rsType = ASHP + rsRep205 = "Constant-Eff-AC" + AUTOSIZE rsCapC + rsFxCapC = 1.1 + rsSEER = 14 + rsEER = 12.2 + rsVfPerTon = 350 + rsFanPwrH = 0.58 + rsFanPwrC = 0.58 + + rsCap47 = 20000 rsCap17 = 18000 rsHSPF = 8.7 + rsCapAuxH = 25000 + + rsFxCapH = 1.5 + rsElecMtr = "MtrElec" + rsFuelMtr = "MtrNatGas" + +DUCTSEG "SupplyDuct-rsys-Central HVAC" + dsTy = "SUPPLY" + dsInArea = 567 + dsDiameter = 0.666667 + dsAdjZn = "Attic-atc" + dsInsulR = 5.65 + dsLeakF = 0.0468 + +DUCTSEG "ReturnDuct-rsys-Central HVAC" + dsTy = "RETURN" + dsInArea = 105 + dsDiameter = 1.333333 + dsAdjZn = "Attic-atc" + dsInsulR = 5.65 + dsLeakF = 0.0332 + +EXPORT "ExportElec" + exType = "MTR" + exFreq = "HOUR" + exMeter = "MtrElec" + exBtuSf = 1000 + exDayBeg = Jan 1 + exDayEnd = Dec 31 + +EXPORT "ExportNatGas" + exType = "MTR" + exFreq = "HOUR" + exMeter = "MtrNatGas" + exBtuSf = 1000 + exDayBeg = Jan 1 + exDayEnd = Dec 31 + + DELETE Report "eb" + +//Rev 5 for CSE707 Autosizing 130103 BAW + +ALTER REPORTFILE Primary rfPageFmt = NO // comment out to get page formatting with headers and footers. +#Define CSEBtuSF 1000 //reports in kBtu + +//AC +Report rpType=UDT rpFreq=Year rpTitle="System Characteristics" rpCpl=112 + Reportcol colVal=@Rsys["rsys-Central HVAC"].CapH colHead="CapH" colDec=0 colWid=6 + + Reportcol colVal=@Rsys["rsys-Central HVAC"].Cap47 colHead="Cap47" colDec=0 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].Cap17 colHead="Cap17" colDec=0 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].HSPF colHead="HSPF" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].COP47 colHead="COP47" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].COP17 colHead="COP17" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].CapAuxH colHead="AuxH" colDec=0 colWid=6 + + Reportcol colVal=@Rsys["rsys-Central HVAC"].Cap95 colHead="Cap95" colDec=0 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].SEER colHead="SEER" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].EER95 colHead="EER95" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].SEERnfX colHead="SEERnfX" colDec=2 colWid=7 + Reportcol colVal=@Rsys["rsys-Central HVAC"].EERnfX colHead="EERnfX" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].vfPerTon colHead="vfPerTon" colDec=0 colWid=8 + Reportcol colVal=@Rsys["rsys-Central HVAC"].fanPwrC colHead="fanPwrC" colDec=3 colWid=7 + Reportcol colVal=@Rsys["rsys-Central HVAC"].fanHeatC colHead="fanElecC" colDec=2 colWid=8 + + + +// CSE Format Conditioned Zone sensible Energy Balance. Modified by BW 110812 +//Monthly +Report rpBtuSf=1000 rpType=UDT rpFreq=Month rpCPL=132 +rpTitle="Monthly Energy (kBtu + into the zone, except E = Energy Consumed)" +Reportcol colVal=$month colHead="mo" colWid=2 +Reportcol colVal=@znRes["Attic-atc"].M.tAir colHead="Tatt" colWid=4 colDec=1 +Reportcol colVal=@znRes["Conditioned-zn"].M.tAir colHead="Tin" colWid=4 colDec=1 +Reportcol colVal=@znRes["Conditioned-zn"].M.tRad colHead="Trad" colWid=4 colDec=1 +Reportcol colVal=@znRes["Conditioned-zn"].M.qSlr/CSEBtuSF colHead="Slr" colDec=0//colWid=7 colDec=0 +Reportcol colVal=@znRes["Conditioned-zn"].M.qsIg/CSEBtuSF colHead="IntGs" colDec=0 +Reportcol colVal=@znRes["Conditioned-zn"].M.qlIg/CSEBtuSF colHead="IntGl" colDec=0 +Reportcol colVal=@znRes["Conditioned-zn"].M.qCond/CSEBtuSF colHead="Cond" colDec=0//colWid=7 colDec=0 +Reportcol colVal=@znRes["Conditioned-zn"].M.qMass/CSEBtuSF colHead="Surf" colDec=0//colWid=8 colDec=0 +Reportcol colVal=@znRes["Conditioned-zn"].M.eqfVentHr colHead = "VntHr" colDec=0 colWid=5 +Reportcol colVal=@znRes["Conditioned-zn"].M.qsIz/CSEBtuSF colHead="sInfVnt" colDec=0 colWid=7 +Reportcol colVal=@znRes["Conditioned-zn"].M.qhMech/CSEBtuSF colHead="Hload" colDec=0//colWid=6 +Reportcol colVal=@znRes["Conditioned-zn"].M.qcMech/CSEBtuSF colHead="Cload" colDec=0//colWid=6 +Reportcol colVal=(@Meter[MtrElec].M.fanc+@Meter[MtrElec].m.fanh)/CSEBtuSF colHead="FfanE" colDec=0 colWid=6 +Reportcol colVal=@Meter[MtrElec].M.clg/CSEBtuSF colHead="ClgE" colDec=0 colWid=6 +Reportcol colVal=@Meter[MtrNatGas].m.htg/CSEBtuSF colHead="HtgE" colDec=0 colWid=8 + +Report rpBtuSf=1000 rpType=UDT rpFreq=Year rpCPL=132 rpHeader=No //Annual Summary +Reportcol colVal="Yr" colWid=2 +Reportcol colVal=@znRes["Attic-atc"].Y.tAir colHead="Tatt" colWid=4 colDec=1 +Reportcol colVal=@znRes["Conditioned-zn"].Y.tAir colHead="Tin" colWid=4 colDec=1 +Reportcol colVal=@znRes["Conditioned-zn"].Y.tRad colHead="Trad" colWid=4 colDec=1 +Reportcol colVal=@znRes["Conditioned-zn"].Y.qSlr/CSEBtuSF colHead="Slr" colDec=0//colWid=7 colDec=0 +Reportcol colVal=@znRes["Conditioned-zn"].Y.qsIg/CSEBtuSF colHead="IntGs" colDec=0 +Reportcol colVal=@znRes["Conditioned-zn"].Y.qlIg/CSEBtuSF colHead="IntGl" colDec=0 +Reportcol colVal=@znRes["Conditioned-zn"].Y.qCond/CSEBtuSF colHead="Cond" colDec=0//colWid=7 +Reportcol colVal=@znRes["Conditioned-zn"].Y.qMass/CSEBtuSF colHead="Surf" colDec=0//colWid=8 +Reportcol colVal=@znRes["Conditioned-zn"].Y.eqfVentHr colHead = "VntHr" colDec=0 colWid=5 +Reportcol colVal=@znRes["Conditioned-zn"].Y.qsIz/CSEBtuSF colHead="sInfVnt" colDec=0 colWid=7 +Reportcol colVal=@znRes["Conditioned-zn"].Y.qhMech/CSEBtuSF colHead="Hload" colDec=0//colWid=6 +Reportcol colVal=@znRes["Conditioned-zn"].Y.qcMech/CSEBtuSF colHead="Cload" colDec=0//colWid=6 +Reportcol colVal=(@Meter[MtrElec].Y.fanc+@Meter[MtrElec].Y.fanh)/CSEBtuSF colHead="FfanE" colDec=0 colWid=6 +Reportcol colVal=@Meter[MtrElec].Y.clg/CSEBtuSF colHead="ClgE" colDec=0 colWid=6 +Reportcol colVal=@Meter[MtrNatGas].Y.htg/CSEBtuSF colHead="HtgE" colDec=0 colWid=8 + +Report rpType=MTR rpMeter=MtrElec rpFreq=MONTH rpBtuSf=1000 +Report rpType=MTR rpMeter=MtrNatGas rpFreq=MONTH rpBtuSf=1000 + +//Coldest Day + Report rpType=UDT rpFreq=HOUR rpDayBeg= HD1; rpDayEnd=HD1 rpCPL=134 + rpTitle="Energy (kBtu + into the zone, except E = Energy Consumed)" + Reportcol colVal=$hour colHead="Hr" colWid=2 colDec=0 + Reportcol colVal=$tDbO colHead="Tout" colWid=4 colDec=1 + Reportcol colVal=$tWbO colHead="WBo" colWid=4 colDec=1 + Reportcol colVal=$wO colHead="Wo" colWid=5 colDec=4 + Reportcol colVal=@znRes["Attic-atc"].h.tAir colHead="Tatt" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].H.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=@zone["Conditioned-zn"].wz colHead="Win" colWid=5 colDec=4 + Reportcol colVal=@zone["Conditioned-zn"].relHum*100 colHead="RHin" colWid=3 colDec=0 + Reportcol colVal=@zone["Conditioned-zn"].twb colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].H.qCond/CSEBtuSF colHead="Cond" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qMass/CSEBtuSF colHead="Surf" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlIg)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsIz/CSEBtuSF colHead="sInfVnt" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsMech/CSEBtuSF colHead="Htgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qlMech/CSEBtuSF colHead="Htgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qhMech/CSEBtuSF colHead="Htgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].H.fanh/CSEBtuSF colHead="FfanE" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrNatGas].H.htg/CSEBtuSF colHead="HtgE" colDec=1 colWid=6 + + //Coldest totals + Report rpType=UDT rpFreq=Day rpCPL=134 rpHeader=No rpDayBeg= HD1; rpDayEnd=HD1 //Day Summary + Reportcol colVal="Dy" colWid=2 + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=5 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=@znRes["Attic-atc"].D.tAir colHead="Tatt" colWid=4 colDec=1 // x + Reportcol colVal=@znRes["Conditioned-zn"].D.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=" " colHead="wz" colWid=5 colDec=4 + Reportcol colVal=" " colHead="RHin" colWid=3 colDec=2 + Reportcol colVal=" " colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].D.qCond/CSEBtuSF colHead="Cond" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qMass/CSEBtuSF colHead="Surf" colDec=1 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qLig)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsIz/CSEBtuSF colHead="sInfVnt" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsMech/CSEBtuSF colHead="Htgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qlMech/CSEBtuSF colHead="Htgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qhMech/CSEBtuSF colHead="Htgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].D.fanh/CSEBtuSF colHead="FfanE" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrNatGas].D.htg/CSEBtuSF colHead="HtgE" colDec=1 colWid=6 + + +//Cooling Design Day + Report rpType=UDT rpFreq=HOUR rpDayBeg= DD1; rpDayEnd=DD1 rpCPL=134 + rpTitle="Energy Balance (F, kBtu, + into the zone)" + Reportcol colVal=$hour colHead="Hr" colWid=2 colDec=0 + Reportcol colVal=$tDbO colHead="Tout" colWid=4 colDec=1 + Reportcol colVal=$tWbO colHead="WBo" colWid=4 colDec=1 + Reportcol colVal=$wO colHead="Wo" colWid=5 colDec=4 + Reportcol colVal=@znRes["Attic-atc"].h.tAir colHead="Tatt" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].H.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=@zone["Conditioned-zn"].wz colHead="Win" colWid=5 colDec=4 + Reportcol colVal=@zone["Conditioned-zn"].relHum*100 colHead="RHin" colWid=3 colDec=0 + Reportcol colVal=@zone["Conditioned-zn"].twb colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].H.qCond/CSEBtuSF colHead="Cond" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qMass/CSEBtuSF colHead="Surf" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlIg)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsIz/CSEBtuSF colHead="sInfVnt" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsMech/CSEBtuSF colHead="Clgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qlMech/CSEBtuSF colHead="Clgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qcMech/CSEBtuSF colHead="Clgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].H.fanc/CSEBtuSF colHead="FfanE" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrElec].H.clg/CSEBtuSF colHead="ClgkE" colDec=1 colWid=6 + + + //Cooling Design Day Totals + Report rpType=UDT rpFreq=Day rpCPL=134 rpHeader=No rpDayBeg= DD1; rpDayEnd=DD1 //Day Summary + Reportcol colVal="Dy" colWid=2 + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=5 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=@znRes["Attic-atc"].D.tAir colHead="Tatt" colWid=4 colDec=1 // x + Reportcol colVal=@znRes["Conditioned-zn"].D.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=" " colHead="wz" colWid=5 colDec=4 + Reportcol colVal=" " colHead="RHin" colWid=3 colDec=2 + Reportcol colVal=" " colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].D.qCond/CSEBtuSF colHead="Cond" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qMass/CSEBtuSF colHead="Surf" colDec=1 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qLig)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsIz/CSEBtuSF colHead="sInfVnt" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsMech/CSEBtuSF colHead="Clgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qlMech/CSEBtuSF colHead="Clgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qcMech/CSEBtuSF colHead="Clgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].d.fanc/CSEBtuSF colHead="fan" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrElec].d.clg/CSEBtuSF colHead="Clg" colDec=1 colWid=6 + + //Hottest Day + Report rpType=UDT rpFreq=HOUR rpDayBeg= CD1; rpDayEnd=CD1 rpCPL=134 + rpTitle="Energy Balance (F, kBtu, + into the zone)" + Reportcol colVal=$hour colHead="Hr" colWid=2 colDec=0 + Reportcol colVal=$tDbO colHead="Tout" colWid=4 colDec=1 + Reportcol colVal=$tWbO colHead="WBo" colWid=4 colDec=1 + Reportcol colVal=$wO colHead="Wo" colWid=5 colDec=4 + Reportcol colVal=@znRes["Attic-atc"].h.tAir colHead="Tatt" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].H.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=@zone["Conditioned-zn"].wz colHead="Win" colWid=5 colDec=4 + Reportcol colVal=@zone["Conditioned-zn"].relHum*100 colHead="RHin" colWid=3 colDec=0 + Reportcol colVal=@zone["Conditioned-zn"].twb colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].H.qCond/CSEBtuSF colHead="Cond" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qMass/CSEBtuSF colHead="Surf" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlIg)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsIz/CSEBtuSF colHead="sInfVnt" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsMech/CSEBtuSF colHead="Clgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qlMech/CSEBtuSF colHead="Clgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qcMech/CSEBtuSF colHead="Clgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].H.fanc/CSEBtuSF colHead="FfanE" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrElec].H.clg/CSEBtuSF colHead="ClgkE" colDec=1 colWid=6 + + + //Hottest Day Totals + Report rpType=UDT rpFreq=Day rpCPL=134 rpHeader=No rpDayBeg= CD1; rpDayEnd=CD1 //Day Summary + Reportcol colVal="Dy" colWid=2 + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=5 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=@znRes["Attic-atc"].D.tAir colHead="Tatt" colWid=4 colDec=1 // x + Reportcol colVal=@znRes["Conditioned-zn"].D.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=" " colHead="wz" colWid=5 colDec=4 + Reportcol colVal=" " colHead="RHin" colWid=3 colDec=2 + Reportcol colVal=" " colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].D.qCond/CSEBtuSF colHead="Cond" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qMass/CSEBtuSF colHead="Surf" colDec=1 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qLig)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsIz/CSEBtuSF colHead="sInfVnt" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsMech/CSEBtuSF colHead="Clgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qlMech/CSEBtuSF colHead="Clgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qcMech/CSEBtuSF colHead="Clgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].d.fanc/CSEBtuSF colHead="fan" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrElec].d.clg/CSEBtuSF colHead="Clg" colDec=1 colWid=6 + + + + RUN + $EOF diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 02a466628..15c062de6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -40,6 +40,7 @@ set(files 1ZKiva 2zattic actest1bL + 205test ashptest2 ashpPkgRoom ashp_dfng diff --git a/test/DX-Constant-Efficiency.RS0004.a205.cbor b/test/DX-Constant-Efficiency.RS0004.a205.cbor new file mode 100644 index 0000000000000000000000000000000000000000..0d7526fe513c95238f4f6f1460272398bf57fc8a GIT binary patch literal 2930 zcmds(UuYaf9LF0eMG6&*D6zD5(Hd&y!rtYQG(mAMf1pC4%^xHdb(!0py_;lrXEQsS z>^%q?D2Pv5DHwe*O(_OML`33C`yfJXZLzhr3au9FAGBCR1u09!*}coxOIpZ#_vv%D zzt3-Ge*2rTfB4pgBdV8T=A5U+Y9=EAGUK-gmTpBbBdZ$wl zb%sZDT`x}9G_(W@q_X0N2gbCKS}3WfO*2{5`nexU;!ADNahS!ZZ`I1oj(6k>9kkfl z)t#fed&;?d!S2Wr^*dKAbamy6`R=01>}P{Z=24Zx3nmMCLC@)(IlX&S*L!vSfSUz0 zCfqV^v(R#h3K#LN!B`nC)zS#f=TehgD^o2BsjWF&Xd&|=m!wms>MjlACrZ9X81PUx-_ozgCu&A-72~A*dr* zg$ngtoZ(zCua~&Ry>!i?nxL!&)EVg?-nVz}L_kHh2H&Db<84hrVL+*Es!~Y7-At(t zJgua`(ZP7TRkK{?S4^8$MA}@c$|{sLIzT2*eYq~Xrkm2Mk_0MIt`Jt0ui6ILa#BGhLt+WMAJ79{M z)yQKuleL+3E%9Tw4Yk)8C_Gdj=%HqtFriizhNk24X;aNEo!kAh>Gf7(^nQ_EXW}i* zRi%@W+9I^^)Mr}minkH3thS9bNjctrxUu-_>s9eVVgPP# zf37|t;7-kRZcmR{bl<8opEuJt@${|E5Lz~#lE>jx790384w0384w z0384w0384w0384w0386m0n_!iQt!!-sa?9Fv%Xn8e*TrSs*eCy7fycEGj?xc0DkcQ ze0B0WmKcB=j~LC z-=0}&={+=;7=TNg=PU2rRJ#*!?cl|Qrd2 KJkz?fb?1M&lA;;_ literal 0 HcmV?d00001 From d81b23400ea55e75d31c3cc32ee72ac105e66af8 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Mon, 18 Oct 2021 11:18:51 -0600 Subject: [PATCH 19/25] Add code to load 205 instance. --- src/CNCULT2.CPP | 1 + src/CNGLOB.H | 1 + src/CNGUTS.CPP | 1 + src/CNGUTS.H | 1 + src/CNLOADS.CPP | 21 +- src/CNRECS.DEF | 6 +- src/IRATS.H | 1 + src/RUNDATA.CPP | 1 + test/ref/205TEST.REP | 1756 ++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 1786 insertions(+), 3 deletions(-) create mode 100644 test/ref/205TEST.REP diff --git a/src/CNCULT2.CPP b/src/CNCULT2.CPP index f438f63b7..123ca2b05 100644 --- a/src/CNCULT2.CPP +++ b/src/CNCULT2.CPP @@ -1455,6 +1455,7 @@ LOCAL RC topMtr() // check/dup all types of meters (energy, dhw, airflow) LOCAL RC topRSys1() // check RSYS / copy to run rat { RC rc = RCOK; + E(EdR.RunDup(EDiB)); // TODO: Move to its own function? E( RsR.al( RSiB.n, WRN) ) // delete old records, alloc to needed size now for min fragmentation if (rc == RCOK) { RSYS* pRSi; diff --git a/src/CNGLOB.H b/src/CNGLOB.H index 9c3ca7940..483d929b2 100644 --- a/src/CNGLOB.H +++ b/src/CNGLOB.H @@ -494,6 +494,7 @@ struct RXPORTINFO; namespace Pumbra { class Penumbra; } namespace Kiva { class Instance; class Aggregator; class Foundation; } namespace Btwxt { class RegularGridInterpolator; } +namespace ASHRAE205_NS { namespace RS0004_NS { class RS0004; } } diff --git a/src/CNGUTS.CPP b/src/CNGUTS.CPP index f16a58b81..b182afe4d 100644 --- a/src/CNGUTS.CPP +++ b/src/CNGUTS.CPP @@ -202,6 +202,7 @@ void FC runFazDataFree() ZrB.free(); // Zones runtime info ZnresB.free(); // zone simulation results + EdR.free(); // EQUIPDATA RsResR.free(); // RSYS results DsResR.free(); // DUCTSEG results WsResR.free(); // DHWSYS results diff --git a/src/CNGUTS.H b/src/CNGUTS.H index d90e1b478..4c889e7d9 100644 --- a/src/CNGUTS.H +++ b/src/CNGUTS.H @@ -116,6 +116,7 @@ extern anc DcR; // design conditions extern anc ZrB; // zones runtime info extern anc ZnresB; // Zones simulation results info extern anc IzxR; // interzone transfers +extern anc EdR; // ASHRAE 205 equipment data extern anc RsR; // residential system extern anc RsResR; // residential system results extern anc DsR; // duct segments diff --git a/src/CNLOADS.CPP b/src/CNLOADS.CPP index 89afa28ad..7d9d444bb 100644 --- a/src/CNLOADS.CPP +++ b/src/CNLOADS.CPP @@ -26,6 +26,8 @@ #include "array" #include "btwxt.h" +#include "libtk205.h" + #ifdef COMFORT_MODEL #include "comfort/comfort.h" #endif @@ -1683,6 +1685,12 @@ RC ZNR::zn_ComfortCR() // calculate comfort conditions, conv/radiant model return rc; } // ZNR::zn_ComfortCR +//============================================================================= +/*virtual*/ EQUIPDATA::~EQUIPDATA() +{ + delete ed_data; + ed_data = nullptr; +} // EQUIPDATA::~EQUIPDATA //============================================================================= /*virtual*/ RSYS::~RSYS() { @@ -1991,6 +1999,18 @@ RC RSYS::rs_TopRSys1() // check RSYS, initial set up for run { RC rc = RCOK; + // Load ASHRAE 205 files + if (IsSet(RSYS_REP205)) + { + rs_pRep205 = EdR.GetAtSafe(rs_rep205); // Get pointer to equipment data + if (!rs_pRep205->ed_data) + { + rs_pRep205->ed_data = new ASHRAE205_NS::RS0004_NS::RS0004; + libtk205_NS::A205_SDK _sdk; + *(rs_pRep205->ed_data) = _sdk.Load_RS0004(rs_pRep205->ed_filePath); + } + } + if (!IsSet(RSYS_TDDESH)) rs_tdDesH = rs_IsASHP() ? 30.f : 50.f; // lower default temp rise for ASHP @@ -2065,7 +2085,6 @@ RC RSYS::rs_TopRSys1() // check RSYS, initial set up for run extern RC TestCBOR(const char* filePath); - // Load ASHRAE 205 files return rc; diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index c53ba5c4b..b27e4c0df 100644 --- a/src/CNRECS.DEF +++ b/src/CNRECS.DEF @@ -2932,8 +2932,8 @@ RECORD AIRNET "AirNet" *SUBSTRUCT *hideall // AirNet calculation storage / code //============================================================================= RECORD EQUIPDATA "EquipData" *RAT // holds ASHRAE 205 equipment data *prefix ed_ - -// *declare "class libtk205::rs_instance_base_class ed_data;" +*exdes // explicit destructor +*declare "class ASHRAE205_NS::RS0004_NS::RS0004* ed_data;" // in base class: .name, .ownTi, more. *r CHP ed_filePath // File path @@ -3231,6 +3231,8 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system // writes file .csv *r TI rs_rep205 // ASHRAE 205 equipment data reference +*declare "EQUIPDATA* rs_pRep205;" // runtime pointer to equipment data + *r DBL rs_areaServed // total zone floor area served by this RSYS, ft2 *r INT rs_zonesServed // # of zones served by this RSYS diff --git a/src/IRATS.H b/src/IRATS.H index 15a501fb9..1ea087245 100644 --- a/src/IRATS.H +++ b/src/IRATS.H @@ -50,6 +50,7 @@ extern anc TpiB; // TOWERPLANT input info extern anc MtriB; // meters input records extern anc GniB; // (zone) gains input records +extern anc EDiB; // ASHRAE 205 equipment data records extern anc RSiB; // residential HVAC system extern anc DsiB; // duct segment input records diff --git a/src/RUNDATA.CPP b/src/RUNDATA.CPP index 541781f60..6f7680354 100644 --- a/src/RUNDATA.CPP +++ b/src/RUNDATA.CPP @@ -77,6 +77,7 @@ makAncMTR( MtrB); // meters (energy use) run records basAnc makAncAFMTR(AfMtrR); // air flow meters run basAnc // hvac: residential system model +makAncEQUIPDATA(EdR); // ASHRAE 205 equipment data makAncRSYS( RsR); // compliance-oriented simple residential system model makAncRSYSRES( RsResR); // RSYS results makAncDUCTSEG( DsR); // duct segments diff --git a/test/ref/205TEST.REP b/test/ref/205TEST.REP new file mode 100644 index 000000000..069b6e549 --- /dev/null +++ b/test/ref/205TEST.REP @@ -0,0 +1,1756 @@ + + +Error Messages for Run 001: + +--------------- +Warning: Zone 'Conditioned-zn': Unmet heating loads during 16 hours of run. +--------------- +Warning: Zone 'Conditioned-zn': Unmet cooling loads during 39 hours of run. +--------------- +Warning: Zone 'Attic-atc': Condensation occurred in 5764 subhours of run. + Total condensation heat = 34.7272 kBtu. +--------------- + + + +System Characteristics + + CapH Cap47 Cap17 HSPF COP47 COP17 AuxH Cap95 SEER EER95 SEERnfX EERnfX vfPerTon fanPwrC fanElecC + ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------- ------ -------- ------- -------- + 0 20000 18000 8.70 3.72 2.40 25000 32370 14.00 12.20 17.24 14.93 350 0.580 1868.46 + + + +Monthly Energy (kBtu + into the zone, except E = Energy Consumed) + + mo Tatt Tin Trad Slr IntGs IntGl Cond Surf VntHr sInfVnt Hload Cload FfanE ClgE HtgE + -- ---- ---- ---- ---------- ---------- ---------- ---------- ---------- ----- ------- ---------- ---------- ------ ------ -------- + 1 53.3 67.3 66.9 858 1912 514 -2028 -3601 0 -1173 3994 0 278 0 0 + 2 56.9 67.4 67.0 1408 1623 433 -1710 -2938 0 -838 2433 0 158 0 0 + 3 64.1 68.3 68.0 1759 1665 440 -1484 -2754 13 -605 1404 0 95 0 0 + 4 68.5 68.9 68.6 1955 1487 389 -1477 -2216 57 -662 904 0 64 0 0 + 5 79.0 71.3 71.2 2006 1407 363 -900 -1572 289 -961 69 -70 25 25 0 + 6 85.9 74.8 74.8 2093 1306 335 -666 -875 420 -1527 0 -407 56 144 0 + 7 88.4 76.7 76.7 2127 1378 354 -571 -561 393 -1279 0 -1295 135 464 0 + 8 85.9 76.3 76.4 2092 1465 380 -699 -488 427 -1486 0 -1046 113 367 0 + 9 81.8 76.0 76.0 1993 1557 410 -798 -493 432 -1481 0 -875 96 300 0 + 10 69.5 70.5 70.5 1842 1739 462 -1135 -628 471 -1864 44 0 26 0 0 + 11 56.0 67.7 67.5 1193 1811 486 -1730 -2168 0 -908 1783 0 123 0 0 + 12 52.5 67.4 66.9 926 1941 523 -2082 -3364 0 -1234 3777 0 264 0 0 + + Yr 70.1 71.1 70.9 20252 19292 5090 -15280 -21658 2502 -14017 14409 -3693 1433 1301 0 + + + +Monthly Energy Use, meter "MtrElec" + +Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV +--- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ +Jan 3875.7 0 1120.6 996.52 0 0 0 0 277.80 32.376 0 0 0 360.24 760.81 33.833 193.92 43.463 0 56.157 0 0 0 0 0 +Feb 2865.3 0 631.57 812.08 0 0 0 0 158.24 29.243 0 0 0 303.51 640.99 30.559 175.16 36.618 0 47.313 0 0 0 0 0 +Mar 2131.4 0 370.55 360.78 0 0 0 0.574 94.346 32.332 0 0 0 308.63 651.41 33.833 193.66 37.214 0 48.082 0 0 0 0 0 +Apr 1761.8 0 244.73 278.50 0 0 0 3.048 60.545 31.331 0 0 0 272.45 575.41 32.742 187.67 32.871 0 42.472 0 0 0 0 0 +May 1211.9 24.742 17.665 22.949 0 0 0 20.312 4.444 32.376 0 0 0 254.29 537.05 33.833 193.92 30.680 0 39.640 0 0 0 0 0 +Jun 1245.7 144.09 0 0 0 0 0 55.752 0 31.331 0 0 0 234.37 494.97 32.742 187.67 28.277 0 36.535 0 0 0 0 0 +Jul 1701.1 464.40 0 0 0 0 0 135.40 0 32.376 0 0 0 248.23 524.26 33.833 193.92 29.950 0 38.697 0 0 0 0 0 +Aug 1643.0 367.36 0 0 0 0 0 112.82 0 32.376 0 0 0 266.40 562.62 33.833 193.92 32.141 0 41.528 0 0 0 0 0 +Sep 1620.8 300.07 0 0 0 0 0 96.123 0 31.331 0 0 0 287.10 606.34 32.742 187.67 34.639 0 44.755 0 0 0 0 0 +Oct 1411.3 0 13.207 13.928 0 0 0 23.179 3.272 32.376 0 0 0 323.91 684.09 33.833 193.92 39.081 0 50.494 0 0 0 0 0 +Nov 2524.3 0 493.08 503.78 0 0 0 0 122.82 31.375 0 0 0 340.00 718.52 32.742 187.93 41.047 0 53.036 0 0 0 0 0 +Dec 3944.0 0 1090.0 1088.4 0 0 0 0 264.29 32.376 0 0 0 366.30 773.60 33.833 193.92 44.194 0 57.101 0 0 0 0 0 + +Yr 25936 1300.7 3981.4 4077.0 0 0 0 447.21 985.75 381.20 0 0 0 3565.4 7530.1 398.36 2283.3 430.17 0 555.81 0 0 0 0 0 + + + +Monthly Energy Use, meter "MtrNatGas" + +Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV +--- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ +Jan 530.60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343.63 0 186.96 0 0 0 0 +Feb 447.03 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 289.51 0 157.52 0 0 0 0 +Mar 454.30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 294.22 0 160.08 0 0 0 0 +Apr 401.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 259.89 0 141.40 0 0 0 0 +May 374.54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242.56 0 131.97 0 0 0 0 +Jun 345.20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 223.56 0 121.63 0 0 0 0 +Jul 365.62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 236.79 0 128.83 0 0 0 0 +Aug 392.37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 254.12 0 138.26 0 0 0 0 +Sep 422.87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 273.86 0 149.00 0 0 0 0 +Oct 477.09 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 308.98 0 168.11 0 0 0 0 +Nov 501.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 324.53 0 176.57 0 0 0 0 +Dec 539.51 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 349.41 0 190.10 0 0 0 0 + +Yr 5251.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3401.1 0 1850.4 0 0 0 0 + + + +Energy (kBtu + into the zone, except E = Energy Consumed) for Thu 03-Dec + + Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Htgs Htgl Htgt RunF FfanE HtgE + -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ + 1 41.7 36.1 .0032 46.5 66.8 66.7 .0065 47 54.7 0 -3.64 3.52 2.15 0.60 0.18 -2.03 0.16 0 0 0 0 0 0 + 2 38.8 34.8 .0033 44.7 66.3 66.3 .0063 47 54.3 0 -3.72 3.79 2.04 0.59 0.17 -2.12 0.16 0 0 0 0 0 0 + 3 36.5 33.3 .0033 42.9 65.8 66.0 .0062 46 53.9 0 -3.96 4.32 1.97 0.58 0.16 -2.32 0.17 0 0 0 0 0 0 + 4 32.9 30.9 .0032 40.9 65.4 65.6 .0061 46 53.5 0 -4.24 4.85 1.99 0.58 0.19 -2.61 0.17 0 0 0 0 0 0 + 5 30.9 29.4 .0030 38.8 65.0 65.2 .0059 45 53.1 0 -4.54 3.27 1.98 0.57 0.27 -2.91 0.18 2.2 -0.04 2.2 0.30 0.2 0 + 6 30.0 28.8 .0030 37.0 65.0 64.9 .0059 45 53.1 0 -4.75 0.79 2.55 0.85 0.041 -3.12 0.19 4.5 -0.07 4.5 0.43 0.4 0 + 7 28.2 27.5 .0029 35.3 65.0 64.8 .0060 46 53.3 0 -4.94 -0.82 3.18 1.12 -0.17 -3.32 0.19 5.9 -0.08 5.8 0.55 0.6 0 + 8 28.4 27.7 .0029 36.5 66.8 65.5 .0059 41 54.2 1.75 -5.34 -28.4 2.86 0.86 0.20 -3.63 0.20 32.7 -0.1 32.6 1.00 1.2 0 + 9 30.2 29.2 .0031 37.8 68.0 66.6 .0056 39 53.8 5.46 -5.43 -20.6 2.17 0.52 0.40 -3.64 0.20 22.1 -0.09 22.0 1.00 1.2 0 + 10 38.3 35.6 .0038 40.8 68.0 67.0 .0054 37 53.5 7.06 -4.86 -14.8 1.78 0.35 0.27 -3.04 0.19 13.9 -0.05 13.8 0.81 1.2 0 + 11 41.5 37.4 .0038 45.6 68.0 67.2 .0054 37 53.4 6.77 -4.15 -10.8 1.79 0.36 0.070 -2.41 0.18 8.8 -0.02 8.7 0.51 0.8 0 + 12 46.2 40.0 .0038 50.5 68.0 67.4 .0054 37 53.4 6.47 -3.61 -8.59 1.76 0.36 0.036 -1.94 0.17 5.9 -0.02 5.9 0.32 0.5 0 + 13 48.4 40.8 .0037 55.3 68.0 67.5 .0053 37 53.3 6.63 -3.22 -7.27 1.68 0.35 0.029 -1.52 0.17 3.7 -0.02 3.7 0.19 0.3 0 + 14 51.3 42.5 .0038 59.6 68.0 67.6 .0053 37 53.3 6.93 -2.94 -6.28 1.71 0.36 -.001 -1.17 0.17 1.8 -.008 1.7 .075 0.1 0 + 15 53.2 43.1 .0036 61.8 68.0 67.7 .0054 37 53.4 6.76 -2.66 -5.48 1.85 0.42 -.061 -0.94 0.16 0.5 -.003 0.5 .031 0.04 0 + 16 54.9 43.8 .0035 62.4 68.0 67.7 .0055 38 53.5 4.60 -2.47 -4.12 2.08 0.52 -0.11 -0.82 0.16 0.7 -.005 0.7 .088 0.05 0 + 17 54.1 43.5 .0036 61.2 68.0 67.6 .0056 39 53.8 0.92 -2.48 -2.67 2.55 0.71 -0.25 -0.86 0.16 2.6 -0.02 2.5 0.21 0.2 0 + 18 51.4 42.3 .0036 58.8 68.0 67.5 .0059 40 54.3 0 -2.64 -3.31 3.17 0.91 -0.38 -1.07 0.17 3.8 -0.04 3.8 0.28 0.3 0 + 19 49.1 41.2 .0037 56.4 68.0 67.5 .0062 43 54.9 0 -2.94 -3.93 3.98 1.08 -0.47 -1.30 0.17 4.2 -0.05 4.2 0.30 0.3 0 + 20 42.8 38.2 .0038 53.8 68.0 67.5 .0066 45 55.5 0 -3.43 -4.43 4.63 1.24 -0.53 -1.66 0.17 4.9 -0.06 4.8 0.39 0.4 0 + 21 41.9 38.0 .0040 51.2 68.0 67.4 .0069 47 56.1 0 -3.79 -4.89 4.64 1.25 -0.46 -1.98 0.17 6.0 -0.09 5.9 0.44 0.5 0 + 22 40.1 37.1 .0040 49.1 68.0 67.4 .0070 48 56.3 0 -3.94 -5.19 4.21 1.12 -0.26 -2.16 0.17 7.1 -0.1 7.0 0.53 0.6 0 + 23 42.1 38.5 .0041 47.6 68.0 67.4 .0070 48 56.3 0 -3.92 -5.40 3.34 0.89 .0034 -2.23 0.18 8.2 -0.1 8.1 0.59 0.7 0 + 24 41.9 38.3 .0041 45.6 67.4 67.1 .0070 50 55.9 0 -3.61 3.12 2.58 0.66 0.045 -2.09 0.16 0 0 0 0 0 0 + + Dy 48.3 67.2 66.8 53.35 -91.2 -113 62.62 16.87 -0.63 -50.9 0.17 139.4 -1.0 138.4 0 9.6 0 + + + +Energy Balance (F, kBtu, + into the zone) for Tue 30-Jun + + Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Clgs Clgl Clgt RunF FfanE ClgkE + -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ + 1 70.9 63.9 .0111 84.5 77.8 77.6 .0116 57 66.7 0 -1.21 -0.28 1.51 0.40 -0.32 -.020 0.16 0 0 0 0 0.000 0 + 2 68.9 63.1 .0110 81.2 77.6 77.4 .0118 58 66.9 0 -1.44 0.17 1.44 0.39 -0.26 -0.17 0.16 0 0 0 0 0.000 0 + 3 66.7 61.8 .0107 78.1 77.4 77.2 .0119 59 67.0 0 -1.66 0.58 1.39 0.39 -0.18 -0.31 0.16 0 0 0 0 0.000 0 + 4 64.9 61.2 .0107 75.2 77.1 77.0 .0120 60 67.0 0 -1.88 0.91 1.40 0.39 -0.12 -0.44 0.16 0 0 0 0 0.000 0 + 5 64.8 61.1 .0107 72.6 76.9 76.8 .0120 61 67.0 0 -1.98 1.23 1.39 0.38 -.091 -0.64 0.16 0 0 0 0 0.000 0 + 6 63.0 60.5 .0107 70.2 76.6 76.5 .0122 62 67.2 0 -2.07 1.08 1.77 0.56 -0.24 -0.78 0.16 0 0 0 0 0.000 0 + 7 63.1 60.5 .0107 68.9 75.9 76.2 .0111 58 65.3 2.96 -2.10 6.80 2.19 0.74 1.63 -9.85 2.31 0 0 0 0 0.09 0 + 8 65.3 61.3 .0107 69.8 75.4 75.9 .0109 58 65.1 5.18 -1.89 2.84 1.98 0.57 0.22 -8.11 2.18 0 0 0 0 0.09 0 + 9 68.5 62.5 .0108 73.9 75.5 75.8 .0109 57 65.1 5.93 -1.62 -0.44 1.52 0.34 0.050 -5.40 1.98 0 0 0 0 0.09 0 + 10 73.9 65.4 .0115 81.0 75.8 75.9 .0112 58 65.7 5.91 -1.14 -4.23 1.26 0.23 -0.47 -1.81 1.62 0 0 0 0 0.09 0 + 11 80.6 67.7 .0116 89.3 76.3 76.2 .0115 58 66.2 5.56 -0.38 -6.84 1.27 0.24 -0.36 0.40 0.59 0 0 0 0 0.03 0 + 12 85.6 69.6 .0119 97.6 76.8 76.5 .0116 58 66.5 4.65 0.31 -7.09 1.25 0.24 -0.23 0.89 0.17 0 0 0 0 0 0 + 13 91.2 70.7 .0115 105 77.2 76.9 .0118 58 66.9 4.07 0.94 -7.60 1.20 0.23 -0.21 1.40 0.18 0 0 0 0 0 0 + 14 92.1 71.0 .0115 112 77.6 77.3 .0119 58 67.2 4.26 1.30 -8.56 1.22 0.24 -0.16 1.78 0.19 0 0 0 0 0 0 + 15 93.4 71.3 .0114 117 78.1 77.8 .0120 57 67.5 4.89 1.37 -9.57 1.31 0.28 -0.16 2.01 0.19 0 0 0 0 0 0 + 16 96.3 71.4 .0108 120 78.7 78.3 .0121 57 67.8 5.64 1.59 -10.9 1.46 0.34 -0.14 2.19 0.19 0 0 0 0 0 0 + 17 97.2 69.2 .0090 120 79.0 78.8 .0106 50 65.8 6.08 1.74 -8.36 1.77 0.47 2.17 2.35 0.20 -3.6 -2.4 -6.0 0.36 0.5 2.1 + 18 97.9 69.5 .0090 118 78.5 78.8 .0079 38 61.5 6.50 1.95 1.79 2.18 0.60 3.88 2.60 0.23 -15.0 -4.6 -19.7 1.00 1.9 7.6 + 19 98.1 69.8 .0092 114 78.0 78.6 .0073 36 60.6 6.10 2.14 2.26 2.72 0.72 0.88 2.48 0.23 -15.7 -2.0 -17.7 0.83 1.8 7.2 + 20 97.9 69.3 .0088 111 78.0 78.6 .0073 36 60.5 4.28 2.06 1.43 3.15 0.82 0.071 2.22 0.22 -13.2 -1.3 -14.5 0.65 1.4 5.7 + 21 96.1 68.8 .0089 107 78.0 78.4 .0074 36 60.7 0.39 1.58 1.87 3.15 0.83 -0.20 1.91 0.21 -8.9 -0.9 -9.9 0.42 0.9 3.7 + 22 89.1 70.0 .0114 103 78.0 78.3 .0076 37 61.0 0 1.05 0.93 2.87 0.74 -0.30 1.47 0.20 -6.3 -0.8 -7.2 0.28 0.6 2.4 + 23 82.4 66.9 .0106 98.2 78.0 78.2 .0079 39 61.5 0 0.35 0.47 2.29 0.59 -0.45 0.99 0.18 -4.1 -0.7 -4.8 0.16 0.4 1.4 + 24 77.5 64.9 .0103 93.8 78.0 78.1 .0082 40 62.0 0 -0.33 0.18 1.79 0.43 -0.46 0.58 0.17 -2.2 -0.5 -2.7 .075 0.2 0.7 + + Dy 94.2 77.3 77.4 72.40 -1.3 -41.3 43.52 11.15 4.54 -4.3 0.51 -69.0 -13.3 -82.3 .075 8.1 31.0 + + + +Energy Balance (F, kBtu, + into the zone) for Fri 10-Jul + + Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Clgs Clgl Clgt RunF FfanE ClgkE + -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ + 1 74.5 62.4 .0093 92.6 78.0 78.1 .0080 39 61.7 0 -0.72 0.97 1.54 0.41 -0.35 0.46 0.17 -2.2 -0.5 -2.7 .066 0.2 0.7 + 2 70.9 61.4 .0095 88.3 78.0 78.0 .0084 41 62.2 0 -1.32 0.49 1.47 0.40 -0.51 0.11 0.16 -0.7 -0.2 -0.9 .009 0.06 0.2 + 3 68.7 60.4 .0093 84.2 78.0 77.9 .0088 43 62.8 0 -1.60 0.32 1.42 0.40 -0.58 -0.12 0.16 -0.01 -.003 -0.02 0 0.001 0.003 + 4 65.8 59.6 .0095 80.4 77.9 77.7 .0091 45 63.3 0 -1.87 0.75 1.43 0.40 -0.50 -0.31 0.16 0 0 0 0 0.000 0 + 5 64.8 58.8 .0093 76.8 77.7 77.6 .0094 47 63.6 0 -2.10 1.14 1.42 0.39 -0.41 -0.46 0.16 0 0 0 0 0.000 0 + 6 63.9 58.6 .0093 73.5 77.5 77.4 .0098 49 64.1 0 -2.20 1.06 1.81 0.57 -0.51 -0.68 0.16 0 0 0 0 0.000 0 + 7 62.6 58.6 .0096 71.0 76.6 77.0 .0098 50 63.7 2.50 -2.27 8.11 2.24 0.76 0.012 -10.6 2.39 0 0 0 0 0.09 0 + 8 67.8 61.4 .0102 70.8 76.2 76.7 .0101 52 64.3 5.11 -1.91 2.75 2.02 0.58 -0.57 -7.97 2.19 0 0 0 0 0.09 0 + 9 75.7 63.3 .0096 74.8 76.6 76.8 .0101 51 64.4 5.98 -1.22 -3.79 1.56 0.35 0.089 -2.52 1.55 0 0 0 0 0.09 0 + 10 81.7 65.6 .0099 82.2 77.2 77.1 .0102 50 64.7 6.01 -0.47 -7.16 1.29 0.24 -0.11 0.32 0.33 0 0 0 0 0.02 0 + 11 87.6 67.4 .0098 90.9 77.7 77.5 .0103 50 65.0 5.66 0.25 -7.82 1.29 0.24 -0.18 0.61 0.16 0 0 0 0 0 0 + 12 92.8 71.3 .0116 100 78.2 77.9 .0104 50 65.3 4.86 0.95 -8.25 1.28 0.24 -0.21 1.15 0.18 0 0 0 0 0 0 + 13 99.3 73.2 .0117 109 78.6 78.3 .0106 50 65.8 4.04 1.68 -8.70 1.23 0.24 -0.32 1.75 0.19 0 0 0 0 0 0 + 14 103 71.8 .0098 117 79.2 78.8 .0108 50 66.3 4.11 2.26 -9.93 1.25 0.24 -0.27 2.32 0.20 0 0 0 0 0 0 + 15 106 74.5 .0112 125 79.8 79.4 .0110 50 66.7 4.93 2.62 -11.7 1.33 0.29 -0.20 2.81 0.21 0 0 0 0 0 0 + 16 107 72.6 .0093 129 80.0 79.9 .0094 43 64.4 5.86 2.89 -6.84 1.49 0.35 2.28 3.35 0.23 -6.7 -2.7 -9.5 0.58 1.0 4.3 + 17 109 73.8 .0099 129 79.8 80.1 .0081 37 62.3 6.31 3.14 -1.56 1.81 0.48 1.91 3.71 0.25 -13.4 -2.8 -16.2 1.00 1.9 8.4 + 18 109 73.8 .0100 128 79.8 80.2 .0078 36 61.9 6.44 3.33 -1.65 2.23 0.62 0.45 3.67 0.25 -14.0 -1.6 -15.6 1.00 1.9 8.4 + 19 108 74.1 .0104 124 79.8 80.3 .0077 36 61.8 5.84 3.37 -0.70 2.78 0.73 0.073 3.36 0.25 -14.7 -1.3 -16.0 1.00 1.9 8.3 + 20 107 74.5 .0110 119 79.8 80.3 .0078 36 61.8 3.74 3.25 2.13 3.22 0.84 -.056 3.01 0.25 -15.4 -1.4 -16.8 1.00 1.9 8.2 + 21 102 72.4 .0104 113 79.4 80.0 .0077 36 61.5 0.19 2.68 7.61 3.23 0.85 0.15 2.58 0.24 -16.3 -1.7 -18.0 1.00 1.9 8.0 + 22 94.1 70.4 .0106 107 78.8 79.5 .0073 35 60.8 0 1.83 10.97 2.94 0.76 0.46 2.02 0.23 -17.8 -1.9 -19.7 1.00 1.9 7.5 + 23 87.4 66.9 .0095 102 78.1 78.9 .0071 35 60.2 0 0.92 11.36 2.34 0.60 0.35 1.46 0.21 -16.1 -1.6 -17.7 0.55 1.6 5.9 + 24 83.5 65.3 .0093 97.1 78.0 78.6 .0071 35 60.3 0 0.25 5.44 1.83 0.44 -.064 0.97 0.19 -8.5 -0.9 -9.4 0.33 0.8 2.8 + + Dy 99.4 78.4 78.5 71.59 13.8 -15.0 44.45 11.43 0.94 11.0 0.44 -126 -16.6 -142 0.33 15.1 62.9 + + + +! Log for Run 001: + +! CSE 0.899.0+ashrae205.de45bb9.23 for Win32 console + + + +Input for Run 001: + + //CBECCr generated input for the 2100 ft2 prototype with tile roof and prescriptive features for CTZ12 (Sacramento) + + +# #define DD1 Jun 30 +# #define CD1 Jul 10 +# #define HD1 Dec 03 + repHdrL = "12 P21 G20 TILE" + wfname = "USA_CA_Sacramento.Exec.AP.724830_CTZ2010.epw" + ebTolHour = 0.001 + ebTolDay = 0.001 + ebTolMon = 0.001 + ebTolSubHr = 0.001 + jan1DOW = "THU" + wuDays = 30 + nSubSteps = 30 + skyModel = "anisotropic" + dt = "YES" + heatDsTDbO = 37 + coolDsDay = DD1 + + MATERIAL "mat-Gypsum Board" + matDens = 40 + matSpHt = 0.27 + matCond = 0.09167 + + MATERIAL "mat-3 Coat Stucco" + matDens = 116 + matSpHt = 0.2 + matCond = 0.4167 + + MATERIAL "mat-SoftWood" + matDens = 35 + matSpHt = 0.39 + matCond = 0.08167 + + MATERIAL "mat-Wood layer" + matDens = 41 + matSpHt = 0.45 + matCond = 0.06127 + + MATERIAL "mat-R2 Sheathing" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.04167 + + MATERIAL "mat-Light Roof" + matDens = 120 + matSpHt = 0.2 + matCond = 1 + + MATERIAL "mat-Carpet" + matDens = 12.3 + matSpHt = 0.34 + matCond = 0.02 + + MATERIAL "mat-R4 Sheathing" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.02083 + + MATERIAL "mat-R4 Synth Stucco" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.02083 + + MATERIAL "mat-R4 Synth Stucco (Copy)" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.02083 + matCondCT = 0.00418 + + MATERIAL "mat-R2 Sheathing (Copy)" + matDens = 1.5 + matSpHt = 0.35 + matCond = 0.04167 + matCondCT = 0.00418 + + MATERIAL "mat-10 PSF Roof" + matDens = 120 + matSpHt = 0.2 + matCond = 1 + + MATERIAL "mat-Exterior Wall Cons-R15-InsMat-2" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.027778 + matCondCT = 0.00418 + + MATERIAL "mat-Cathedral Ceiling Cons-R19-InsMat-1" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.02193 + matCondCT = 0.00418 + + MATERIAL "mat-Floor Above Crawl Cons-R15-InsMat-3" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.027778 + matCondCT = 0.00418 + + MATERIAL "mat-Ceiling below attic Cons-R9.1-InsMat-2" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.038703 + matCondCT = 0.00418 + + MATERIAL "mat-Ext Floor Cons-R19-InsMat-3" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.02193 + matCondCT = 0.00418 + + MATERIAL "mat-Ceiling below attic Cons-AtcEdgWA-R14.0292-InsMat-2" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.038703 + matCondCT = 0.00418 + + MATERIAL "mat-Ceiling below attic Cons-AtcEdgWB-R9.1-InsMat-2" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.038703 + matCondCT = 0.00418 + + MATERIAL "mat-Ceiling below attic Cons-AtcEdgWB-R18.9583-InsMat-4" + matDens = 1.5 + matSpHt = 0.2 + matCond = 0.038703 + matCondCT = 0.00418 + + MATERIAL "mat-SNEICCarpet" + matDens = 12.3 + matSpHt = 0.34 + matCond = 0.02 + + MATERIAL "mat-SNEICConcrete" + matDens = 144 + matSpHt = 0.2 + matCond = 1 + + MATERIAL "mat-SNEICEarth" + matDens = 115 + matSpHt = 0.2 + matCond = 1 + + MATERIAL "mat-AtticTruss" + matDens = 32 + matSpHt = 0.33 + matCond = 0.0667 + + MATERIAL "IntMassMat-SoftWood" + matDens = 35 + matSpHt = 0.39 + matCond = 0.08167 + + MATERIAL "IntMassMat-Gypsum" + matDens = 40 + matSpHt = 0.27 + matCond = 0.09167 + + CONSTRUCTION "ccn-Exterior Wall Cons" + + LAYER "cl1-Exterior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "cl2-Exterior Wall Cons" + lrMat = "mat-Exterior Wall Cons-R15-InsMat-2" + lrThk = 0.291667 + + LAYER "cl3-Exterior Wall Cons" + lrMat = "mat-R4 Synth Stucco (Copy)" + lrThk = 0.083333 + + CONSTRUCTION "fcn-Exterior Wall Cons" + + LAYER "fl1-Exterior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "fl2-Exterior Wall Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + + LAYER "fl3-Exterior Wall Cons" + lrMat = "mat-R4 Synth Stucco (Copy)" + lrThk = 0.083333 + + CONSTRUCTION "ccn-Cathedral Ceiling Cons" + + LAYER "cl1-Cathedral Ceiling Cons" + lrMat = "mat-Cathedral Ceiling Cons-R19-InsMat-1" + lrThk = 0.291667 + + LAYER "cl2-Cathedral Ceiling Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "cl3-Cathedral Ceiling Cons" + lrMat = "mat-R2 Sheathing (Copy)" + lrThk = 0.083333 + + LAYER "cl4-Cathedral Ceiling Cons" + lrMat = "mat-Light Roof" + lrThk = 0.016667 + + CONSTRUCTION "fcn-Cathedral Ceiling Cons" + + LAYER "fl1-Cathedral Ceiling Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + + LAYER "fl2-Cathedral Ceiling Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "fl3-Cathedral Ceiling Cons" + lrMat = "mat-R2 Sheathing (Copy)" + lrThk = 0.083333 + + LAYER "fl4-Cathedral Ceiling Cons" + lrMat = "mat-Light Roof" + lrThk = 0.016667 + + CONSTRUCTION "ccn-Floor Above Crawl Cons" + + LAYER "cl1-Floor Above Crawl Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + + LAYER "cl2-Floor Above Crawl Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "cl3-Floor Above Crawl Cons" + lrMat = "mat-Floor Above Crawl Cons-R15-InsMat-3" + lrThk = 0.291667 + + LAYER "cl4-Floor Above Crawl Cons" + lrMat = "mat-3 Coat Stucco" + lrThk = 0.072917 + + CONSTRUCTION "fcn-Floor Above Crawl Cons" + + LAYER "fl1-Floor Above Crawl Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + + LAYER "fl2-Floor Above Crawl Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "fl3-Floor Above Crawl Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + + LAYER "fl4-Floor Above Crawl Cons" + lrMat = "mat-3 Coat Stucco" + lrThk = 0.072917 + + CONSTRUCTION "ccn-Ceiling below attic Cons" + + LAYER "cl1-Ceiling below attic Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "cl2-Ceiling below attic Cons" + lrMat = "mat-Ceiling below attic Cons-R9.1-InsMat-2" + lrThk = 0.291667 + + LAYER "cl3-Ceiling below attic Cons" + lrMat = "mat-Ceiling below attic Cons-R9.1-InsMat-2" + lrThk = 0.926282 + + CONSTRUCTION "fcn-Ceiling below attic Cons" + + LAYER "fl1-Ceiling below attic Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "fl2-Ceiling below attic Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + + LAYER "fl3-Ceiling below attic Cons" + lrMat = "mat-Ceiling below attic Cons-R9.1-InsMat-2" + lrThk = 0.926282 + + CONSTRUCTION "ccn-Interior Floor Cons" + + LAYER "cl1-Interior Floor Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + + LAYER "cl2-Interior Floor Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "cl4-Interior Floor Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + CONSTRUCTION "fcn-Interior Floor Cons" + + LAYER "fl1-Interior Floor Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + + LAYER "fl2-Interior Floor Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "fl3-Interior Floor Cons" + lrMat = "mat-SoftWood" + lrThk = 0.9375 + + LAYER "fl4-Interior Floor Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + CONSTRUCTION "ccn-Attic Roof Cons" + + LAYER "cl2-Attic Roof Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "cl3-Attic Roof Cons" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + + CONSTRUCTION "fcn-Attic Roof Cons" + + LAYER "fl1-Attic Roof Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + + LAYER "fl2-Attic Roof Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "fl3-Attic Roof Cons" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + + CONSTRUCTION "ccn-Interior Wall Cons" + + LAYER "cl1-Interior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "cl3-Interior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + CONSTRUCTION "fcn-Interior Wall Cons" + + LAYER "fl1-Interior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "fl2-Interior Wall Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + + LAYER "fl3-Interior Wall Cons" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + CONSTRUCTION "ccn-Ext Floor Cons" + + LAYER "cl1-Ext Floor Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + + LAYER "cl2-Ext Floor Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "cl3-Ext Floor Cons" + lrMat = "mat-Ext Floor Cons-R19-InsMat-3" + lrThk = 0.291667 + + CONSTRUCTION "fcn-Ext Floor Cons" + + LAYER "fl1-Ext Floor Cons" + lrMat = "mat-Carpet" + lrThk = 0.041667 + + LAYER "fl2-Ext Floor Cons" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "fl3-Ext Floor Cons" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + + CONSTRUCTION "ccn-Ceiling below attic Cons-AtcEdgWA" + + LAYER "cl1-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "cl2-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWA-R14.0292-InsMat-2" + lrThk = 0.449653 + + LAYER "cl3-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "cl4-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + + CONSTRUCTION "fcn-Ceiling below attic Cons-AtcEdgWA" + + LAYER "fl1-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "fl2-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-SoftWood" + lrThk = 0.449653 + + LAYER "fl3-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "fl4-Ceiling below attic Cons-AtcEdgWA" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + + CONSTRUCTION "ccn-Ceiling below attic Cons-AtcEdgWB" + + LAYER "cl1-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "cl2-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWB-R9.1-InsMat-2" + lrThk = 0.291667 + + LAYER "cl3-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWB-R9.1-InsMat-2" + lrThk = 0.305155 + + LAYER "cl4-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWB-R18.9583-InsMat-4" + lrThk = 0.607639 + + LAYER "cl5-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "cl6-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + + CONSTRUCTION "fcn-Ceiling below attic Cons-AtcEdgWB" + + LAYER "fl1-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Gypsum Board" + lrThk = 0.041667 + + LAYER "fl2-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-SoftWood" + lrThk = 0.291667 + + LAYER "fl3-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Ceiling below attic Cons-AtcEdgWB-R9.1-InsMat-2" + lrThk = 0.305155 + + LAYER "fl4-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-SoftWood" + lrThk = 0.607639 + + LAYER "fl5-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-Wood layer" + lrThk = 0.041667 + + LAYER "fl6-Ceiling below attic Cons-AtcEdgWB" + lrMat = "mat-10 PSF Roof" + lrThk = 0.083333 + + CONSTRUCTION "scn-SlabConsNoEdgeInsulCpt" + + LAYER "cl1-SNEICCCarpet" + lrMat = "mat-SNEICCarpet" + lrThk = 0.041667 + + LAYER "cl2-SNEICCConcrete" + lrMat = "mat-SNEICConcrete" + lrThk = 0.291667 + + LAYER "cl3-SNEICCEarth" + lrMat = "mat-SNEICEarth" + lrThk = 2 + + CONSTRUCTION "scn-SlabConsNoEdgeInsulExp" + + LAYER "cl1-SNEIXCConcrete" + lrMat = "mat-SNEICConcrete" + lrThk = 0.291667 + + LAYER "cl2-SNEIXCEarth" + lrMat = "mat-SNEICEarth" + lrThk = 2 + + CONSTRUCTION "con-AtticTruss" + + LAYER "lyr-AtticTruss" + lrMat = "mat-AtticTruss" + lrThk = 0.0625 + + CONSTRUCTION "con-FurnIMass" + + LAYER "cl1-FurnIMass" + lrMat = "IntMassMat-SoftWood" + lrThk = 0.208333 + + CONSTRUCTION "con-WallFrmIMass" + + LAYER "cl1-WallFrmIMass" + lrMat = "IntMassMat-Gypsum" + lrThk = 0.041667 + + LAYER "cl2-WallFrmIMass" + lrMat = "IntMassMat-SoftWood" + lrThk = 0.291667 + + LAYER "cl3-WallFrmIMass" + lrMat = "IntMassMat-Gypsum" + lrThk = 0.041667 + + CONSTRUCTION "con-WallCavIMass" + + LAYER "cl1-WallCavIMass" + lrMat = "IntMassMat-Gypsum" + lrThk = 0.041667 + + LAYER "cl2-WallCavIMass" + lrMat = "IntMassMat-Gypsum" + lrThk = 0.041667 + + METER "MtrElec" + + METER "MtrNatGas" + + IZXFER "Conditioned-BypassxA" + izNVType = "NONE" + izZn1 = "Conditioned-zn" + izZn2 = "Attic-atc" + izHConst = 0.015 * 2100 * select(@znRes["Conditioned-zn"].prior.H.tAir - @znRes["Attic-atc"].prior.H.tAir > 0., 1., default 0.) + + IZXFER "Conditioned-WlLU" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.047578 + izHD = 2.25 + izNVEff = 1 + izCpr = 0.6 + izExp = 0.65 + + IZXFER "Conditioned-WlLS" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.095156 + izHD = 2.25 + izNVEff = 1 + izCpr = -0.65 + izExp = 0.65 + + IZXFER "Conditioned-WlLD" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.047578 + izHD = 2.25 + izNVEff = 1 + izCpr = -0.3 + izExp = 0.65 + + IZXFER "Conditioned-WlHU" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.047578 + izHD = 6.75 + izNVEff = 1 + izCpr = 0.6 + izExp = 0.65 + + IZXFER "Conditioned-WlHS" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.095156 + izHD = 6.75 + izNVEff = 1 + izCpr = -0.65 + izExp = 0.65 + + IZXFER "Conditioned-WlHD" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.047578 + izHD = 6.75 + izNVEff = 1 + izCpr = -0.3 + izExp = 0.65 + + IZXFER "Conditioned-WnLU" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 2.625 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 2.67 + izNVEff = 0.5 + izCpr = 0.6 + + IZXFER "Conditioned-WnLS" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 5.250 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 2.67 + izNVEff = 0.5 + izCpr = -0.65 + + IZXFER "Conditioned-WnLD" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 2.625 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 2.67 + izNVEff = 0.5 + izCpr = -0.3 + + IZXFER "Conditioned-WnHU" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 2.625 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 6.67 + izNVEff = 0.5 + izCpr = 0.6 + + IZXFER "Conditioned-WnHS" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 5.250 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 6.67 + izNVEff = 0.5 + izCpr = -0.65 + + IZXFER "Conditioned-WnHD" + izNVType = "AIRNETEXT" + izZn1 = "Conditioned-zn" + izALo = 0.00001 + izAHi = 2.625 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izHD = 6.67 + izNVEff = 0.5 + izCpr = -0.3 + + IZXFER "Conditioned-xAttic" + izNVType = "AIRNETIZ" + izZn1 = "Conditioned-zn" + izZn2 = "Attic-atc" + izALo = 0.540125 + izHD = 9 + izNVEff = 1 + izExp = 0.65 + + IZXFER "Conditioned-IAQFanE" + izNVType = "AIRNETEXTFAN" + izZn1 = "Conditioned-zn" + izVFmin = -51 + izVFmax = -51 + izFanVfDs = 51 + izFanElecPwr = 0.25 + izFanMtr = "MtrElec" + izFanEndUse = "FANV" + + IZXFER "Conditioned-WHF" + izNVType = "AIRNETIZFAN" + izZn1 = "Conditioned-zn" + izZn2 = "Attic-atc" + izVFmin = 0 + izVFmax = -262.5 * select( $hour < 24, select($radDiff <1., select($hour>12,1.0, default .00001 ), default 1.0 ), default .00001 ) + izFanVfDs = 262.5 + izFanElecPwr = 0.1 + izFanMtr = "MtrElec" + izFanEndUse = "FANC" + + IZXFER "Attic-SU" + izNVType = "AIRNETEXT" + izZn1 = "Attic-atc" + izALo = 0.875 + izHD = 9 + izNVEff = 0.6 + izCpr = 0.6 + izExp = 0.65 + + IZXFER "Attic-SS" + izNVType = "AIRNETEXT" + izZn1 = "Attic-atc" + izALo = 1.75 + izHD = 9 + izNVEff = 0.6 + izCpr = -0.65 + izExp = 0.65 + + IZXFER "Attic-SD" + izNVType = "AIRNETEXT" + izZn1 = "Attic-atc" + izALo = 0.875 + izHD = 9 + izNVEff = 0.6 + izCpr = -0.3 + izExp = 0.65 + + ZONE "Conditioned-zn" + znModel = "CZM" + znArea = 2100 + znVol = 18900 + znEaveZ = 9 + znCeilingHt = 9 + znCAir = 4200 + znSC = select( $radDiff >1., 0.5, default 0.8 ) + znTH = select( $dsDay==1, 70, $dsDay==2, 60, @weather.taDbAvg07 >60., 60, default hourval(65,65,65,65,65,65,65,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,65)) + znTC = select( $dsDay==1, 83, $dsDay==2, 78, default hourval(78,78,78,78,78,78,78,83,83,83,83,83,83,82,81,80,79,78,78,78,78,78,78,78)) + znTD = select( $dsDay==1, 77, $dsDay==2, 99, @weather.taDbAvg07 >60., 68, default 77 ) + infAC = 0 + infELA = 0 + infShld = 4 + znRSys = "rsys-Central HVAC" + + GAIN "Conditioned-znLtg" + gnMeter = "MtrElec" + gnEndUse = "Lit" + gnPower = 4.65014 * 2100 * + select( $dsDay==1, 0., default hourval(0.023,0.019,0.015,0.017,0.021,0.031,0.042,0.041,0.034,0.029,0.027,0.025,0.021,0.021,0.021,0.026,0.031,0.044,0.084,0.118,0.113,0.096,0.063,0.038) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0.4 + + GAIN "Conditioned-znPpl" + gnPower = 9.56121 * 2100 * + select( $dsDay==1, 0., default hourval(0.035,0.035,0.035,0.035,0.035,0.059,0.082,0.055,0.027,0.014,0.014,0.014,0.014,0.014,0.019,0.027,0.041,0.055,0.068,0.082,0.082,0.07,0.053,0.035) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0.3 + gnFrLat = 0.427 + + GAIN "Conditioned-znMsc" + gnMeter = "MtrElec" + gnEndUse = "Rcp" + gnPower = 9.82089 * 2100 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0.3 + gnFrLat = 0.03 + + GAIN "Conditioned-znRefrig" + gnMeter = "MtrElec" + gnEndUse = "Refr" + gnPower = 260.65033 + gnFrRad = 0 + + GAIN "Conditioned-znDishwasher" + gnMeter = "MtrElec" + gnEndUse = "Dish" + gnPower = 1178.19 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0 + gnFrLat = 0.25 + + GAIN "Conditioned-znCook" + gnMeter = "MtrNatGas" + gnEndUse = "Cook" + gnPower = 5068.11 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrZn = 0.9 + gnFrRad = 0 + gnFrLat = 0.67 + + GAIN "Conditioned-znWasher" + gnMeter = "MtrElec" + gnEndUse = "Wash" + gnPower = 1522.29 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrRad = 0 + + GAIN "Conditioned-znDryer" + gnMeter = "MtrNatGas" + gnEndUse = "Dry" + gnPower = 9315.07 * + select( $dsDay==1, 0., default hourval(0.037,0.035,0.034,0.034,0.032,0.036,0.042,0.044,0.037,0.032,0.033,0.033,0.032,0.033,0.035,0.037,0.044,0.053,0.058,0.06,0.062,0.06,0.052,0.045) * + choose1($month, 1.19,1.11,1.02,0.93,0.84,0.8,0.82,0.88,0.98,1.07,1.16,1.21)) + gnFrZn = 0.3 + gnFrRad = 0 + gnFrLat = 0.5 + + GAIN "Conditioned-znExtLtg" + gnMeter = "MtrElec" + gnEndUse = "Ext" + gnPower = 1091.39 * + hourval(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.25,0.25,0.25,0.25) + gnFrZn = 0 + + SURFACE "Ceiling (below attic) 1-Frm" + sfType = "Ceiling" + sfCon = "fcn-Ceiling below attic Cons" + sfArea = 127.032661 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Attic-atc" + + SURFACE "Ceiling (below attic) 1-Cav" + sfType = "Ceiling" + sfCon = "ccn-Ceiling below attic Cons" + sfArea = 1687.719604 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Attic-atc" + + SURFACE "Ceiling (below attic) 1-WAFrm" + sfType = "Ceiling" + sfCon = "fcn-Ceiling below attic Cons-AtcEdgWA" + sfArea = 6.811235 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.9 + sfModel = "Forward_Difference" + + SURFACE "Ceiling (below attic) 1-WACav" + sfType = "Ceiling" + sfCon = "ccn-Ceiling below attic Cons-AtcEdgWA" + sfArea = 90.492126 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.9 + sfModel = "Forward_Difference" + + SURFACE "Ceiling (below attic) 1-WBFrm" + sfType = "Ceiling" + sfCon = "fcn-Ceiling below attic Cons-AtcEdgWB" + sfArea = 13.156106 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.9 + sfModel = "Forward_Difference" + + SURFACE "Ceiling (below attic) 1-WBCav" + sfType = "Ceiling" + sfCon = "ccn-Ceiling below attic Cons-AtcEdgWB" + sfArea = 174.788254 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.9 + sfModel = "Forward_Difference" + + SURFACE "Front-Frm" + sfType = "Wall" + sfCon = "fcn-Exterior Wall Cons" + sfArea = 74.25 + sfTilt = 90 + sfAzm = 0 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + + SURFACE "Left-Frm" + sfType = "Wall" + sfCon = "fcn-Exterior Wall Cons" + sfArea = 84.25 + sfTilt = 90 + sfAzm = 90 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + + SURFACE "Back-Frm" + sfType = "Wall" + sfCon = "fcn-Exterior Wall Cons" + sfArea = 84.25 + sfTilt = 90 + sfAzm = 180 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + + SURFACE "Right-Frm" + sfType = "Wall" + sfCon = "fcn-Exterior Wall Cons" + sfArea = 84.25 + sfTilt = 90 + sfAzm = 270 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + + SURFACE "Front-Cav" + sfType = "Wall" + sfCon = "ccn-Exterior Wall Cons" + sfArea = 367.75 + sfTilt = 90 + sfAzm = 0 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + + WINDOW "Win F1-NoScrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "None" + wnInShd = "DrapeMed" + + WINDOW "Win F1-Scrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "Inscrn" + wnInShd = "DrapeMed" + + DOOR "Door 1-Sim" + drArea = 40 + drU = 0.5 + + SURFACE "Left-Cav" + sfType = "Wall" + sfCon = "ccn-Exterior Wall Cons" + sfArea = 357.75 + sfTilt = 90 + sfAzm = 90 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + + WINDOW "Win L1-NoScrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "None" + wnInShd = "DrapeMed" + + WINDOW "Win L1-Scrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "Inscrn" + wnInShd = "DrapeMed" + + SURFACE "Back-Cav" + sfType = "Wall" + sfCon = "ccn-Exterior Wall Cons" + sfArea = 357.75 + sfTilt = 90 + sfAzm = 180 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + + WINDOW "Win B1-NoScrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "None" + wnInShd = "DrapeMed" + + WINDOW "Win B1-Scrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "Inscrn" + wnInShd = "DrapeMed" + + SURFACE "Right-Cav" + sfType = "Wall" + sfCon = "ccn-Exterior Wall Cons" + sfArea = 357.75 + sfTilt = 90 + sfAzm = 270 + sfExAbs = 0.5 + sfModel = "Forward_Difference" + + WINDOW "Win R1-NoScrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "None" + wnInShd = "DrapeMed" + + WINDOW "Win R1-Scrn" + wnArea = 52.5 + wnHeight = 5 + wnWidth = 3 + wnMult = 1 + wnModel = "ASHWAT" + wnFMult = 0.85 + wnNGlz = 2 + wnUnfrc = 0.32 + wnSHGC = 0.25 + wnDirtLoss = 0.1 + wnExShd = "Inscrn" + wnInShd = "DrapeMed" + + SURFACE "Slab On Grade 1-Prm" + sfType = "Floor" + sfCon = "scn-SlabConsNoEdgeInsulCpt" + sfArea = 307.200012 + sfTilt = 180 + sfModel = "Forward_Difference" + sfExCnd = "Ground" + sfExCTGrnd = 0.0551 + sfExCTaDbAvgYr = 0.0028 + sfExCTaDbAvg14 = 0.0852 + sfExRConGrnd = 5.267 + sfInHcModel = "Unified" + + SURFACE "Slab On Grade 1-Int" + sfType = "Floor" + sfCon = "scn-SlabConsNoEdgeInsulCpt" + sfArea = 1372.800049 + sfTilt = 180 + sfModel = "Forward_Difference" + sfExCnd = "Ground" + sfExCTGrnd = 0.0446 + sfExCTaDbAvgYr = 0.0238 + sfExRConGrnd = 5.267 + sfInHcModel = "Unified" + + SURFACE "Slab On Grade 1-Prm 17" + sfType = "Floor" + sfCon = "scn-SlabConsNoEdgeInsulExp" + sfArea = 76.799995 + sfTilt = 180 + sfModel = "Forward_Difference" + sfExCnd = "Ground" + sfExCTGrnd = 0.0737 + sfExCTaDbAvgYr = 0.0014 + sfExCTaDbAvg14 = 0.1692 + sfExRConGrnd = 3.187 + sfInHcModel = "Unified" + + SURFACE "Slab On Grade 1-Int 18" + sfType = "Floor" + sfCon = "scn-SlabConsNoEdgeInsulExp" + sfArea = 343.199982 + sfTilt = 180 + sfModel = "Forward_Difference" + sfExCnd = "Ground" + sfExCTGrnd = 0.0521 + sfExCTaDbAvgYr = 0.0251 + sfExRConGrnd = 3.187 + sfInHcModel = "Unified" + + SURFACE "Furniture-imass" + sfType = "Wall" + sfCon = "con-FurnIMass" + sfArea = 4200 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Conditioned-zn" + + SURFACE "WallFrm-imass" + sfType = "Wall" + sfCon = "con-WallFrmIMass" + sfArea = 525 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Conditioned-zn" + + SURFACE "WallCav-imass" + sfType = "Wall" + sfCon = "con-WallCavIMass" + sfArea = 1575 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "AdjZn" + sfAdjZn = "Conditioned-zn" + + ZONE "Attic-atc" + znModel = "UZX" + znArea = 1814.752197 + znVol = 5775.166016 + znCAir = 0.01 + infAC = 0 + infELA = 0 + infShld = 4 + + SURFACE "Attic-atc-rfNF" + sfType = "Ceiling" + sfCon = "fcn-Attic Roof Cons" + sfArea = 34.404678 + sfTilt = 22.619864 + sfAzm = 0 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + + SURFACE "Attic-atc-rfNC" + sfType = "Ceiling" + sfCon = "ccn-Attic Roof Cons" + sfArea = 457.090729 + sfTilt = 22.619864 + sfAzm = 0 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + + SURFACE "Attic-atc-rfEF" + sfType = "Ceiling" + sfCon = "fcn-Attic Roof Cons" + sfArea = 34.404678 + sfTilt = 22.619864 + sfAzm = 90 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + + SURFACE "Attic-atc-rfEC" + sfType = "Ceiling" + sfCon = "ccn-Attic Roof Cons" + sfArea = 457.090729 + sfTilt = 22.619864 + sfAzm = 90 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + + SURFACE "Attic-atc-rfSF" + sfType = "Ceiling" + sfCon = "fcn-Attic Roof Cons" + sfArea = 34.404678 + sfTilt = 22.619864 + sfAzm = 180 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + + SURFACE "Attic-atc-rfSC" + sfType = "Ceiling" + sfCon = "ccn-Attic Roof Cons" + sfArea = 457.090729 + sfTilt = 22.619864 + sfAzm = 180 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + + SURFACE "Attic-atc-rfWF" + sfType = "Ceiling" + sfCon = "fcn-Attic Roof Cons" + sfArea = 34.404678 + sfTilt = 22.619864 + sfAzm = 270 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + + SURFACE "Attic-atc-rfWC" + sfType = "Ceiling" + sfCon = "ccn-Attic Roof Cons" + sfArea = 457.090729 + sfTilt = 22.619864 + sfAzm = 270 + sfExAbs = 0.8 + sfExEpsLW = 0.85 + sfInEpsLW = 0.05 + sfModel = "Forward_Difference" + + SURFACE "Attic-atc-rfT1" + sfType = "Wall" + sfCon = "con-AtticTruss" + sfArea = 1209.834839 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "Adiabatic" + + SURFACE "Attic-atc-rfT2" + sfType = "Wall" + sfCon = "con-AtticTruss" + sfArea = 1209.834839 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "Adiabatic" + + SURFACE "Attic-atc-rfT3" + sfType = "Wall" + sfCon = "con-AtticTruss" + sfArea = 1209.834839 + sfAzm = 0 + sfModel = "Forward_Difference" + sfExCnd = "Adiabatic" + + EQUIPDATA "Constant-Eff-AC" + edFilePath = "DX-Constant-Efficiency.RS0004.a205.cbor" + edExpectedRS = "RS0004" + edDoValidation = YES + + RSYS "rsys-Central HVAC" + rsType = ASHP + rsRep205 = "Constant-Eff-AC" + AUTOSIZE rsCapC + rsFxCapC = 1.1 + rsSEER = 14 + rsEER = 12.2 + rsVfPerTon = 350 + rsFanPwrH = 0.58 + rsFanPwrC = 0.58 + + rsCap47 = 20000 rsCap17 = 18000 rsHSPF = 8.7 + rsCapAuxH = 25000 + + rsFxCapH = 1.5 + rsElecMtr = "MtrElec" + rsFuelMtr = "MtrNatGas" + + DUCTSEG "SupplyDuct-rsys-Central HVAC" + dsTy = "SUPPLY" + dsInArea = 567 + dsDiameter = 0.666667 + dsAdjZn = "Attic-atc" + dsInsulR = 5.65 + dsLeakF = 0.0468 + + DUCTSEG "ReturnDuct-rsys-Central HVAC" + dsTy = "RETURN" + dsInArea = 105 + dsDiameter = 1.333333 + dsAdjZn = "Attic-atc" + dsInsulR = 5.65 + dsLeakF = 0.0332 + + EXPORT "ExportElec" + exType = "MTR" + exFreq = "HOUR" + exMeter = "MtrElec" + exBtuSf = 1000 + exDayBeg = Jan 1 + exDayEnd = Dec 31 + + EXPORT "ExportNatGas" + exType = "MTR" + exFreq = "HOUR" + exMeter = "MtrNatGas" + exBtuSf = 1000 + exDayBeg = Jan 1 + exDayEnd = Dec 31 + + DELETE Report "eb" + + //Rev 5 for CSE707 Autosizing 130103 BAW + + ALTER REPORTFILE Primary rfPageFmt = NO // comment out to get page formatting with headers and footers. +# #Define CSEBtuSF 1000 //reports in kBtu + + //AC + Report rpType=UDT rpFreq=Year rpTitle="System Characteristics" rpCpl=112 + Reportcol colVal=@Rsys["rsys-Central HVAC"].CapH colHead="CapH" colDec=0 colWid=6 + + Reportcol colVal=@Rsys["rsys-Central HVAC"].Cap47 colHead="Cap47" colDec=0 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].Cap17 colHead="Cap17" colDec=0 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].HSPF colHead="HSPF" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].COP47 colHead="COP47" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].COP17 colHead="COP17" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].CapAuxH colHead="AuxH" colDec=0 colWid=6 + + Reportcol colVal=@Rsys["rsys-Central HVAC"].Cap95 colHead="Cap95" colDec=0 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].SEER colHead="SEER" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].EER95 colHead="EER95" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].SEERnfX colHead="SEERnfX" colDec=2 colWid=7 + Reportcol colVal=@Rsys["rsys-Central HVAC"].EERnfX colHead="EERnfX" colDec=2 colWid=6 + Reportcol colVal=@Rsys["rsys-Central HVAC"].vfPerTon colHead="vfPerTon" colDec=0 colWid=8 + Reportcol colVal=@Rsys["rsys-Central HVAC"].fanPwrC colHead="fanPwrC" colDec=3 colWid=7 + Reportcol colVal=@Rsys["rsys-Central HVAC"].fanHeatC colHead="fanElecC" colDec=2 colWid=8 + + + + // CSE Format Conditioned Zone sensible Energy Balance. Modified by BW 110812 + //Monthly + Report rpBtuSf=1000 rpType=UDT rpFreq=Month rpCPL=132 + rpTitle="Monthly Energy (kBtu + into the zone, except E = Energy Consumed)" + Reportcol colVal=$month colHead="mo" colWid=2 + Reportcol colVal=@znRes["Attic-atc"].M.tAir colHead="Tatt" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].M.tAir colHead="Tin" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].M.tRad colHead="Trad" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].M.qSlr/CSEBtuSF colHead="Slr" colDec=0//colWid=7 colDec=0 + Reportcol colVal=@znRes["Conditioned-zn"].M.qsIg/CSEBtuSF colHead="IntGs" colDec=0 + Reportcol colVal=@znRes["Conditioned-zn"].M.qlIg/CSEBtuSF colHead="IntGl" colDec=0 + Reportcol colVal=@znRes["Conditioned-zn"].M.qCond/CSEBtuSF colHead="Cond" colDec=0//colWid=7 colDec=0 + Reportcol colVal=@znRes["Conditioned-zn"].M.qMass/CSEBtuSF colHead="Surf" colDec=0//colWid=8 colDec=0 + Reportcol colVal=@znRes["Conditioned-zn"].M.eqfVentHr colHead = "VntHr" colDec=0 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].M.qsIz/CSEBtuSF colHead="sInfVnt" colDec=0 colWid=7 + Reportcol colVal=@znRes["Conditioned-zn"].M.qhMech/CSEBtuSF colHead="Hload" colDec=0//colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].M.qcMech/CSEBtuSF colHead="Cload" colDec=0//colWid=6 + Reportcol colVal=(@Meter[MtrElec].M.fanc+@Meter[MtrElec].m.fanh)/CSEBtuSF colHead="FfanE" colDec=0 colWid=6 + Reportcol colVal=@Meter[MtrElec].M.clg/CSEBtuSF colHead="ClgE" colDec=0 colWid=6 + Reportcol colVal=@Meter[MtrNatGas].m.htg/CSEBtuSF colHead="HtgE" colDec=0 colWid=8 + + Report rpBtuSf=1000 rpType=UDT rpFreq=Year rpCPL=132 rpHeader=No //Annual Summary + Reportcol colVal="Yr" colWid=2 + Reportcol colVal=@znRes["Attic-atc"].Y.tAir colHead="Tatt" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].Y.tAir colHead="Tin" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].Y.tRad colHead="Trad" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].Y.qSlr/CSEBtuSF colHead="Slr" colDec=0//colWid=7 colDec=0 + Reportcol colVal=@znRes["Conditioned-zn"].Y.qsIg/CSEBtuSF colHead="IntGs" colDec=0 + Reportcol colVal=@znRes["Conditioned-zn"].Y.qlIg/CSEBtuSF colHead="IntGl" colDec=0 + Reportcol colVal=@znRes["Conditioned-zn"].Y.qCond/CSEBtuSF colHead="Cond" colDec=0//colWid=7 + Reportcol colVal=@znRes["Conditioned-zn"].Y.qMass/CSEBtuSF colHead="Surf" colDec=0//colWid=8 + Reportcol colVal=@znRes["Conditioned-zn"].Y.eqfVentHr colHead = "VntHr" colDec=0 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].Y.qsIz/CSEBtuSF colHead="sInfVnt" colDec=0 colWid=7 + Reportcol colVal=@znRes["Conditioned-zn"].Y.qhMech/CSEBtuSF colHead="Hload" colDec=0//colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].Y.qcMech/CSEBtuSF colHead="Cload" colDec=0//colWid=6 + Reportcol colVal=(@Meter[MtrElec].Y.fanc+@Meter[MtrElec].Y.fanh)/CSEBtuSF colHead="FfanE" colDec=0 colWid=6 + Reportcol colVal=@Meter[MtrElec].Y.clg/CSEBtuSF colHead="ClgE" colDec=0 colWid=6 + Reportcol colVal=@Meter[MtrNatGas].Y.htg/CSEBtuSF colHead="HtgE" colDec=0 colWid=8 + + Report rpType=MTR rpMeter=MtrElec rpFreq=MONTH rpBtuSf=1000 + Report rpType=MTR rpMeter=MtrNatGas rpFreq=MONTH rpBtuSf=1000 + + //Coldest Day + Report rpType=UDT rpFreq=HOUR rpDayBeg= HD1; rpDayEnd=HD1 rpCPL=134 + rpTitle="Energy (kBtu + into the zone, except E = Energy Consumed)" + Reportcol colVal=$hour colHead="Hr" colWid=2 colDec=0 + Reportcol colVal=$tDbO colHead="Tout" colWid=4 colDec=1 + Reportcol colVal=$tWbO colHead="WBo" colWid=4 colDec=1 + Reportcol colVal=$wO colHead="Wo" colWid=5 colDec=4 + Reportcol colVal=@znRes["Attic-atc"].h.tAir colHead="Tatt" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].H.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=@zone["Conditioned-zn"].wz colHead="Win" colWid=5 colDec=4 + Reportcol colVal=@zone["Conditioned-zn"].relHum*100 colHead="RHin" colWid=3 colDec=0 + Reportcol colVal=@zone["Conditioned-zn"].twb colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].H.qCond/CSEBtuSF colHead="Cond" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qMass/CSEBtuSF colHead="Surf" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlIg)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsIz/CSEBtuSF colHead="sInfVnt" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsMech/CSEBtuSF colHead="Htgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qlMech/CSEBtuSF colHead="Htgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qhMech/CSEBtuSF colHead="Htgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].H.fanh/CSEBtuSF colHead="FfanE" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrNatGas].H.htg/CSEBtuSF colHead="HtgE" colDec=1 colWid=6 + + //Coldest totals + Report rpType=UDT rpFreq=Day rpCPL=134 rpHeader=No rpDayBeg= HD1; rpDayEnd=HD1 //Day Summary + Reportcol colVal="Dy" colWid=2 + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=5 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=@znRes["Attic-atc"].D.tAir colHead="Tatt" colWid=4 colDec=1 // x + Reportcol colVal=@znRes["Conditioned-zn"].D.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=" " colHead="wz" colWid=5 colDec=4 + Reportcol colVal=" " colHead="RHin" colWid=3 colDec=2 + Reportcol colVal=" " colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].D.qCond/CSEBtuSF colHead="Cond" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qMass/CSEBtuSF colHead="Surf" colDec=1 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qLig)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsIz/CSEBtuSF colHead="sInfVnt" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsMech/CSEBtuSF colHead="Htgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qlMech/CSEBtuSF colHead="Htgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qhMech/CSEBtuSF colHead="Htgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].D.fanh/CSEBtuSF colHead="FfanE" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrNatGas].D.htg/CSEBtuSF colHead="HtgE" colDec=1 colWid=6 + + + //Cooling Design Day + Report rpType=UDT rpFreq=HOUR rpDayBeg= DD1; rpDayEnd=DD1 rpCPL=134 + rpTitle="Energy Balance (F, kBtu, + into the zone)" + Reportcol colVal=$hour colHead="Hr" colWid=2 colDec=0 + Reportcol colVal=$tDbO colHead="Tout" colWid=4 colDec=1 + Reportcol colVal=$tWbO colHead="WBo" colWid=4 colDec=1 + Reportcol colVal=$wO colHead="Wo" colWid=5 colDec=4 + Reportcol colVal=@znRes["Attic-atc"].h.tAir colHead="Tatt" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].H.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=@zone["Conditioned-zn"].wz colHead="Win" colWid=5 colDec=4 + Reportcol colVal=@zone["Conditioned-zn"].relHum*100 colHead="RHin" colWid=3 colDec=0 + Reportcol colVal=@zone["Conditioned-zn"].twb colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].H.qCond/CSEBtuSF colHead="Cond" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qMass/CSEBtuSF colHead="Surf" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlIg)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsIz/CSEBtuSF colHead="sInfVnt" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsMech/CSEBtuSF colHead="Clgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qlMech/CSEBtuSF colHead="Clgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qcMech/CSEBtuSF colHead="Clgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].H.fanc/CSEBtuSF colHead="FfanE" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrElec].H.clg/CSEBtuSF colHead="ClgkE" colDec=1 colWid=6 + + + //Cooling Design Day Totals + Report rpType=UDT rpFreq=Day rpCPL=134 rpHeader=No rpDayBeg= DD1; rpDayEnd=DD1 //Day Summary + Reportcol colVal="Dy" colWid=2 + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=5 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=@znRes["Attic-atc"].D.tAir colHead="Tatt" colWid=4 colDec=1 // x + Reportcol colVal=@znRes["Conditioned-zn"].D.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=" " colHead="wz" colWid=5 colDec=4 + Reportcol colVal=" " colHead="RHin" colWid=3 colDec=2 + Reportcol colVal=" " colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].D.qCond/CSEBtuSF colHead="Cond" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qMass/CSEBtuSF colHead="Surf" colDec=1 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qLig)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsIz/CSEBtuSF colHead="sInfVnt" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsMech/CSEBtuSF colHead="Clgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qlMech/CSEBtuSF colHead="Clgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qcMech/CSEBtuSF colHead="Clgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].d.fanc/CSEBtuSF colHead="fan" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrElec].d.clg/CSEBtuSF colHead="Clg" colDec=1 colWid=6 + + //Hottest Day + Report rpType=UDT rpFreq=HOUR rpDayBeg= CD1; rpDayEnd=CD1 rpCPL=134 + rpTitle="Energy Balance (F, kBtu, + into the zone)" + Reportcol colVal=$hour colHead="Hr" colWid=2 colDec=0 + Reportcol colVal=$tDbO colHead="Tout" colWid=4 colDec=1 + Reportcol colVal=$tWbO colHead="WBo" colWid=4 colDec=1 + Reportcol colVal=$wO colHead="Wo" colWid=5 colDec=4 + Reportcol colVal=@znRes["Attic-atc"].h.tAir colHead="Tatt" colWid=4 colDec=1 + Reportcol colVal=@znRes["Conditioned-zn"].H.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=@zone["Conditioned-zn"].wz colHead="Win" colWid=5 colDec=4 + Reportcol colVal=@zone["Conditioned-zn"].relHum*100 colHead="RHin" colWid=3 colDec=0 + Reportcol colVal=@zone["Conditioned-zn"].twb colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].H.qCond/CSEBtuSF colHead="Cond" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qMass/CSEBtuSF colHead="Surf" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlIg)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].H.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsIz/CSEBtuSF colHead="sInfVnt" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].H.qsMech/CSEBtuSF colHead="Clgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qlMech/CSEBtuSF colHead="Clgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].H.qcMech/CSEBtuSF colHead="Clgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].H.fanc/CSEBtuSF colHead="FfanE" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrElec].H.clg/CSEBtuSF colHead="ClgkE" colDec=1 colWid=6 + + + //Hottest Day Totals + Report rpType=UDT rpFreq=Day rpCPL=134 rpHeader=No rpDayBeg= CD1; rpDayEnd=CD1 //Day Summary + Reportcol colVal="Dy" colWid=2 + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=4 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=" " colWid=5 colDec=1 // No daily average outdoor temperature available. + Reportcol colVal=@znRes["Attic-atc"].D.tAir colHead="Tatt" colWid=4 colDec=1 // x + Reportcol colVal=@znRes["Conditioned-zn"].D.tAir colHead="Tin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.tRad colHead="Trad" colWid=4 colDec=2 + Reportcol colVal=" " colHead="wz" colWid=5 colDec=4 + Reportcol colVal=" " colHead="RHin" colWid=3 colDec=2 + Reportcol colVal=" " colHead="WBin" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qSlr/CSEBtuSF colHead="Slr" colDec=2 colWid=6 + Reportcol colVal=@znRes["Conditioned-zn"].D.qCond/CSEBtuSF colHead="Cond" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qMass/CSEBtuSF colHead="Surf" colDec=1 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qsIg)/CSEBtuSF colHead="ItgS" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qLig)/CSEBtuSF colHead="ItgL" colDec=2 colWid=5 + Reportcol colVal=(@znRes["Conditioned-zn"].D.qlAir)/CSEBtuSF colHead="AirL" colDec=2 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsIz/CSEBtuSF colHead="sInfVnt" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.ivAirX colHead="ACH" colWid=4 colDec=2 + Reportcol colVal=@znRes["Conditioned-zn"].D.qsMech/CSEBtuSF colHead="Clgs" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qlMech/CSEBtuSF colHead="Clgl" colDec=1 colWid=5 + Reportcol colVal=@znRes["Conditioned-zn"].D.qcMech/CSEBtuSF colHead="Clgt" colDec=1 colWid=5 + Reportcol colVal=@Rsys[1].runf colHead="RunF" colDec=2 colWid=4 + Reportcol colVal=@Meter[MtrElec].d.fanc/CSEBtuSF colHead="fan" colDec=1 colWid=6 + Reportcol colVal=@Meter[MtrElec].d.clg/CSEBtuSF colHead="Clg" colDec=1 colWid=6 + + + + RUN + $EOF + + + +! CSE 0.899.0+ashrae205.de45bb9.23 for Win32 console run(s) done: Mon 18-Oct-21 11:03:42 am + +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 18-Oct-21 10:59 am (VS 14.29 3364864 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 205test +! Input file: C:\Users\nkruis\projects\cse\test\205test.cse +! Report file: C:\Users\nkruis\projects\cse\test\205test.rep + +! Timing info -- + +! Input: Time = 0.20 Calls = 2 T/C = 0.0990 +! AutoSizing: Time = 2.99 Calls = 1 T/C = 2.9890 +! Simulation: Time = 19.13 Calls = 1 T/C = 19.1250 +! Reports: Time = 0.09 Calls = 1 T/C = 0.0850 +! Total: Time = 22.40 Calls = 1 T/C = 22.3990 From 9d2cd3153afa0f58ad05904fb798c2629b80ba09 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 26 Oct 2021 15:17:40 -0600 Subject: [PATCH 20/25] Refresh CI caches, fix branch name. --- .github/workflows/build-and-test.yml | 6 ++++-- .github/workflows/release.yml | 2 ++ cmake/CSEVersion.cmake | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 9c07c24ee..9fcb9cfb2 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -2,6 +2,8 @@ name: Build and Test on: push +env: + CI_GIT_BRANCH: ${GITHUB_REF#refs/heads/} jobs: build-cse: name: Build CSE executable @@ -31,7 +33,7 @@ jobs: uses: actions/cache@v2 with: path: vendor/toolkit-205/.venv - key: poetry-tk205-cache-v1-${{ hashFiles('**/poetry.lock') }} + key: poetry-tk205-cache-v2-${{ hashFiles('**/poetry.lock') }} - name: Install toolkit-205 dependencies if cache does not exist run: cd vendor/toolkit-205 && poetry install if: steps.cached-toolkit-205-dependencies.outputs.cache-hit != 'true' @@ -40,7 +42,7 @@ jobs: uses: actions/cache@v2 with: path: vendor/toolkit-205/schema-205/.venv - key: poetry-schema205-cache-v1-${{ hashFiles('**/poetry.lock') }} + key: poetry-schema205-cache-v2-${{ hashFiles('**/poetry.lock') }} - name: Install schema205 dependencies if cache does not exist run: cd vendor/toolkit-205/schema-205 && poetry install if: steps.cached-schema205-dependencies.outputs.cache-hit != 'true' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 108cfd3be..49cff9a38 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,8 @@ on: types: - created +env: + CI_GIT_BRANCH: ${GITHUB_REF#refs/heads/} jobs: release-cse: name: Deploy CSE release diff --git a/cmake/CSEVersion.cmake b/cmake/CSEVersion.cmake index 97feccace..9bfd7a32e 100644 --- a/cmake/CSEVersion.cmake +++ b/cmake/CSEVersion.cmake @@ -1,7 +1,7 @@ # Generate CSE Version header -if(DEFINED ENV{APPVEYOR_REPO_BRANCH}) - set(GIT_BRANCH "$ENV{APPVEYOR_REPO_BRANCH}") +if(DEFINED ENV{CI_GIT_BRANCH}) + set(GIT_BRANCH "$ENV{CI_GIT_BRANCH}") else() execute_process( COMMAND git rev-parse --abbrev-ref HEAD From f4384289a603b4e01fd7259cabb38ec883f48c6a Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Wed, 27 Oct 2021 12:25:20 -0600 Subject: [PATCH 21/25] Add standby energy and clean up type conversion warnings. --- src/CNCULT.CPP | 2 +- src/CNDTYPES.DEF | 6 + src/CNFIELDS.DEF | 1 + src/CNGLOB.H | 7 +- src/CNLOADS.CPP | 565 ++-- src/CNRECS.DEF | 6 +- src/RCDEF/dtypes.h | 861 ++--- test/205Test.cse | 13 +- ...tary-Constant-Efficiency.RS0002.a205.cbor} | Bin 2930 -> 3440 bytes test/ref/1ZATTIC.REP | 1008 +++--- test/ref/1ZKIVA.REP | 906 +++--- test/ref/205TEST.REP | 249 +- test/ref/2ZATTIC.REP | 1042 +++--- test/ref/ASHP_DFNG.REP | 2220 ++++++------- test/ref/DHWDU.rep | 2856 ++++++++--------- test/ref/DHW_ZONE.REP | 302 +- test/ref/bgtest.rep | 26 +- test/ref/oavtest2.rep | 24 +- 18 files changed, 5136 insertions(+), 4958 deletions(-) rename test/{DX-Constant-Efficiency.RS0004.a205.cbor => Unitary-Constant-Efficiency.RS0002.a205.cbor} (54%) diff --git a/src/CNCULT.CPP b/src/CNCULT.CPP index f2c3c619c..26f5fe36f 100644 --- a/src/CNCULT.CPP +++ b/src/CNCULT.CPP @@ -1584,7 +1584,7 @@ static CULT edT[] = //-------------- EQUIPDATA cmd table, used from cnTopCult // id cs fn f uc evf ty b dfls p2 ckf //"*", STAR, 0, 0, 0, 0, 0, 0, N, 0.f, N, edStarCkf), CULT("edFilePath", DAT, EQUIPDATA_FILEPATH, RQD, 0, VEOI, TYSTR, 0, N, 0.f, N, N), - CULT("edExpectedRS", DAT, EQUIPDATA_EXPECTEDRS, RQD, 0, VEOI, TYSTR, 0, N, 0.f, N, N), + CULT("edExpectedRS", DAT, EQUIPDATA_EXPECTEDRS, RQD, 0, VEOI, TYCH, 0, N, 0.f, N, N), CULT("edDoValidation", DAT, EQUIPDATA_DOVALIDATION, RQD, 0, VEOI, TYCH, 0, N, 0.f, N, N), CULT("endEquipmentData", ENDER, 0, 0, 0, 0, 0, 0, N, 0.f, N, N), CULT() diff --git a/src/CNDTYPES.DEF b/src/CNDTYPES.DEF index c80fb85f7..d90bc1209 100644 --- a/src/CNDTYPES.DEF +++ b/src/CNDTYPES.DEF @@ -329,6 +329,12 @@ PIPESEGP -- "class PIPESEG*" 4 none DOE2 "DOE2" UNIFIED "Unified" } +*choicb EDRSCH { + RS0002 "RS0002" + RS0003 "RS0003" + RS0004 "RS0004" + RS0005 "RS0005" + } *choicb RSYSMODECTRLCH { OFF "Off" HEAT "Heat" diff --git a/src/CNFIELDS.DEF b/src/CNFIELDS.DEF index d0e5ff2c8..11934e029 100644 --- a/src/CNFIELDS.DEF +++ b/src/CNFIELDS.DEF @@ -166,6 +166,7 @@ GROUNDMODELCH GROUNDMODELCH LMNONE UNNONE FBXREFCH FBXREFCH LMNONE UNNONE FBZREFCH FBZREFCH LMNONE UNNONE CONVMODELCH CONVMODELCH LMNONE UNNONE +EDRSCH EDRSCH LMNONE UNNONE RSYSMODECTRLCH RSYSMODECTRLCH LMNONE UNNONE RSYSTYCH RSYSTYCH LMNONE UNNONE RSYSOAVTYCH RSYSOAVTYCH LMNONE UNNONE diff --git a/src/CNGLOB.H b/src/CNGLOB.H index 483d929b2..72f8216ca 100644 --- a/src/CNGLOB.H +++ b/src/CNGLOB.H @@ -494,7 +494,7 @@ struct RXPORTINFO; namespace Pumbra { class Penumbra; } namespace Kiva { class Instance; class Aggregator; class Foundation; } namespace Btwxt { class RegularGridInterpolator; } -namespace ASHRAE205_NS { namespace RS0004_NS { class RS0004; } } +namespace ASHRAE205_NS { namespace RS0002_NS { class RS0002; } } @@ -655,6 +655,11 @@ const double cfV = 1./2.23694; // m/s / mph template< typename T> inline T VIPtoSI(T mph) { return T( mph*cfV); } template< typename T> inline T VSItoIP(T ms) { return T( ms/cfV); } +// pressure inHg <-> Pa +const double cfP = 3386.39; +template< typename T> inline T inHGtoPa(T inHG) { return T(inHG * cfP); } +template< typename T> inline T PatoinHG(T Pa) { return T(Pa / cfP); } + // air mass flow <--> air volume flow // amf in lbm/hr // cfm in ft3/min std air diff --git a/src/CNLOADS.CPP b/src/CNLOADS.CPP index 7d9d444bb..4f08d190d 100644 --- a/src/CNLOADS.CPP +++ b/src/CNLOADS.CPP @@ -1715,204 +1715,220 @@ RC RSYS::rs_CkF() // with cnrecs.def enum int rc = RCOK; const char* when; - rs_capAuxHInp = 0.f; // insurance, see ASHP below - if (rs_CanCool()) - { when = strtprintf( "when rsType=%s", - getChoiTx( RSYS_TYPE)); - - if (rs_IsPkgRoom()) - { rc |= requireN(when, RSYS_EER95, 0); - rc |= disallowN(when, RSYS_SEER, RSYS_COP95, 0); - if (!IsSet(RSYS_FANPWRC)) - rs_fanPwrC = 0.f; // fan power included in primary by default - } - else - rc |= requireN(when, RSYS_SEER, 0); + if (IsSet(RSYS_REP205)) + { + rc |= ignoreN("when rsRep205 is specified", + RSYS_SEER, RSYS_EER95, RSYS_COP95, RSYS_CAP115, RSYS_COP115, + RSYS_CAP82, RSYS_COP82, RSYS_CAPRAT11595, RSYS_CAPRAT8295, + RSYS_LOADFMIN115, RSYS_LOADFMIN95, RSYS_LOADFMIN82, + RSYS_COPMIN115, RSYS_COPMIN95, RSYS_COPMIN82, RSYS_CDC, + RSYS_PARELEC, 0); + } + else + { + rs_capAuxHInp = 0.f; // insurance, see ASHP below + if (rs_CanCool()) + { + when = strtprintf("when rsType=%s", + getChoiTx(RSYS_TYPE)); - // cooling model air flow correlations have limited validity range - // verify air flow 150 - 550 cfm/ton (per Proctor Engineering) - rc |= limitCheck( RSYS_VFPERTON, 150., 550.); + if (rs_IsPkgRoom()) + { + rc |= requireN(when, RSYS_EER95, 0); + rc |= disallowN(when, RSYS_SEER, RSYS_COP95, 0); + if (!IsSet(RSYS_FANPWRC)) + rs_fanPwrC = 0.f; // fan power included in primary by default + } + else + rc |= requireN(when, RSYS_SEER, 0); - // rsFanPwrC (W/cfm): error if >5, warn if >2 - rc |= limitCheck( RSYS_FANPWRC, 0., 5., 0., 2.); + // cooling model air flow correlations have limited validity range + // verify air flow 150 - 550 cfm/ton (per Proctor Engineering) + rc |= limitCheck(RSYS_VFPERTON, 150., 550.); - rc |= rs_CkFCd(rsmCOOL); + // rsFanPwrC (W/cfm): error if >5, warn if >2 + rc |= limitCheck(RSYS_FANPWRC, 0., 5., 0., 2.); - if (!IsAusz(RSYS_CAP95)) - { // rs_cap95 not AUTOSIZEd (altho may be expression), use as rs_capNomC default - FldCopyIf(RSYS_CAP95, RSYS_CAPNOMC); + rc |= rs_CkFCd(rsmCOOL); - if (IsSet(RSYS_CAP82)) - rc |= disallowN("when rsCap82 is given", RSYS_CAPRAT8295, 0); - if (IsSet(RSYS_CAP115)) - rc |= disallowN("when rsCap115 is given", RSYS_CAPRAT11595, 0); - } - else - { // rsCap95 is autosize + if (!IsAusz(RSYS_CAP95)) + { // rs_cap95 not AUTOSIZEd (altho may be expression), use as rs_capNomC default + FldCopyIf(RSYS_CAP95, RSYS_CAPNOMC); + + if (IsSet(RSYS_CAP82)) + rc |= disallowN("when rsCap82 is given", RSYS_CAPRAT8295, 0); + if (IsSet(RSYS_CAP115)) + rc |= disallowN("when rsCap115 is given", RSYS_CAPRAT11595, 0); + } + else + { // rsCap95 is autosize - rc |= disallowN("when rsCap95 is AUTOSIZE", + rc |= disallowN("when rsCap95 is AUTOSIZE", RSYS_CAP82, RSYS_CAP115, 0); - } + } + + if (!rs_IsASHPVC()) + { + rc |= ignoreN("when rsType is not ASHPVC (VCHP2)", + RSYS_COPMIN05, RSYS_COPMIN17, RSYS_COPMIN35, RSYS_COPMIN47, + RSYS_LOADFMIN05, RSYS_LOADFMIN17, RSYS_LOADFMIN47, 0); + rs_loadFMin05 = rs_loadFMin17 = rs_loadFMin47 = 1.f; + } + else + { + if (!IsSet(RSYS_LOADFMIN82)) + rs_loadFMin82 = rs_loadFMin95; + if (!IsSet(RSYS_LOADFMIN115)) + rs_loadFMin115 = rs_loadFMin95; + } - if (!rs_IsASHPVC()) - { - rc |= ignoreN("when rsType is not ASHPVC (VCHP2)", - RSYS_COPMIN05, RSYS_COPMIN17, RSYS_COPMIN35, RSYS_COPMIN47, - RSYS_LOADFMIN05, RSYS_LOADFMIN17, RSYS_LOADFMIN47, 0); - rs_loadFMin05 = rs_loadFMin17 = rs_loadFMin47 = 1.f; } else - { - if (!IsSet(RSYS_LOADFMIN82)) - rs_loadFMin82 = rs_loadFMin95; - if (!IsSet(RSYS_LOADFMIN115)) - rs_loadFMin115 = rs_loadFMin95; - } - - } - else - { // no cooling capability - when = strtprintf( "when rsType=%s (cooling not available)", - getChoiTx( RSYS_TYPE)); - rc |= disallowN( when, RSYS_SEER, RSYS_EER95, + { // no cooling capability + when = strtprintf("when rsType=%s (cooling not available)", + getChoiTx(RSYS_TYPE)); + rc |= disallowN(when, RSYS_SEER, RSYS_EER95, RSYS_CAP95, RSYS_COP95, RSYS_LOADFMIN95, RSYS_COPMIN95, RSYS_CAP82, RSYS_COP82, RSYS_CAPRAT8295, RSYS_LOADFMIN82, RSYS_COPMIN82, RSYS_CAP115, RSYS_COP115, RSYS_CAPRAT11595, RSYS_LOADFMIN115, RSYS_COPMIN115, RSYS_FCHG, RSYS_FSIZE, RSYS_VFPERTON, RSYS_FANPWRC, RSYS_CDC, - RSYS_CAPNOMC, 0); - FldSet( RSYS_CAPNOMC, 0.f); // insurance - } + RSYS_CAPNOMC, 0); + FldSet(RSYS_CAPNOMC, 0.f); // insurance + } - rc |= rs_CkFAuxHeat(); // check aux heat inputs - - if (!rs_CanHeat()) - { when = strtprintf( "when rsType=%s (heating not available)", - getChoiTx( RSYS_TYPE)); - rc |= disallowN( when, RSYS_CAPH, RSYS_AFUE, + rc |= rs_CkFAuxHeat(); // check aux heat inputs + + if (!rs_CanHeat()) + { + when = strtprintf("when rsType=%s (heating not available)", + getChoiTx(RSYS_TYPE)); + rc |= disallowN(when, RSYS_CAPH, RSYS_AFUE, RSYS_HSPF, RSYS_CAP47, RSYS_COP47, RSYS_CAP35, RSYS_COP35, RSYS_CAP17, RSYS_COP17, RSYS_ASHPLOCKOUTT, RSYS_FANPWRH, RSYS_CDH, RSYS_LOADFMIN47, RSYS_CAPRAT1747, 0); - FldSet( RSYS_CAPNOMH, 0.f); // insurance - } - else - { // general heating checks - // rsFanPwrH (W/cfm): error if >5, warn if >2 - rc |= limitCheck( RSYS_FANPWRH, 0., 5., 0., 2.); - - - } - - if (rs_IsASHP()) - { - when = strtprintf("when rsType=%s", getChoiTx(RSYS_TYPE)); - - rs_AFUE = 0.f; // drop possibly confusing default - - rc |= rs_CkFCd( rsmHEAT); // heating Cd - - if (rs_IsASHPHydronic()) - { // ASHPHydronic: air-to-water heat pump - // approximated with air-to-air model - when = "when rsType=ASHPHydronic"; - rc |= requireN(when, RSYS_COP47, RSYS_COP17, 0); - rc |= disallowN(when, RSYS_HSPF, RSYS_CAPH, RSYS_AFUE, RSYS_DEFROSTMODEL, 0); - if (!IsSet(RSYS_CAP47) && !IsSet(RSYS_CAP95)) - rc |= oer("at least one of rsCap47 and rsCapC must be specified %s", when); - if (!IsSet(RSYS_FANPWRH)) - rs_fanPwrH = 0.f; // hydronic: no fan power - if (!IsAusz(RSYS_CAP47)) - // rs_cap47 not AUTOSIZEd (altho may be expression), use it as rs_capNomH default - FldCopyIf(RSYS_CAP47, RSYS_CAPNOMH); + FldSet(RSYS_CAPNOMH, 0.f); // insurance } else - { // ASHP other than ASHPHydronic + { // general heating checks + // rsFanPwrH (W/cfm): error if >5, warn if >2 + rc |= limitCheck(RSYS_FANPWRH, 0., 5., 0., 2.); - rc |= disallowN(when, RSYS_CAPH, RSYS_AFUE, 0); - if (!IsSet(RSYS_CAP47) && !IsSet(RSYS_CAP95)) - rc |= oer("at least one of rsCap47 and rsCapC must be specified %s", when); -#if 0 - // save input value of rs_capAuxH - // estimated rs_capAuxH used during autosize - rs_capAuxHInp = rs_capAuxH; - if (IsAusz(RSYS_CAPAUXH)) - rs_capAuxH = 0.f; // overwrite NANDLE -#endif + } - if (!IsAusz(RSYS_CAP47)) - // rs_cap47 not AUTOSIZEd (altho may be expression), use it as rs_capNomH default - // see DefaultCapNomsIf() - FldCopyIf(RSYS_CAP47, RSYS_CAPNOMH); + if (rs_IsASHP()) + { + when = strtprintf("when rsType=%s", getChoiTx(RSYS_TYPE)); - if (rs_IsPkgRoom()) - { - rc |= disallowN(when, RSYS_HSPF, RSYS_CAP05, RSYS_COP05, - RSYS_CAP17, RSYS_COP17, RSYS_CAP35, RSYS_COP35, 0); - rc |= requireN(when, RSYS_COP47, 0); + rs_AFUE = 0.f; // drop possibly confusing default - if (!IsSet(RSYS_FANPWRH)) - rs_fanPwrH = 0.f; // fan power included in primary by default + rc |= rs_CkFCd(rsmHEAT); // heating Cd - // other defaults derived in rs_TopRSys1() + if (rs_IsASHPHydronic()) + { // ASHPHydronic: air-to-water heat pump + // approximated with air-to-air model + when = "when rsType=ASHPHydronic"; + rc |= requireN(when, RSYS_COP47, RSYS_COP17, 0); + rc |= disallowN(when, RSYS_HSPF, RSYS_CAPH, RSYS_AFUE, RSYS_DEFROSTMODEL, 0); + if (!IsSet(RSYS_CAP47) && !IsSet(RSYS_CAP95)) + rc |= oer("at least one of rsCap47 and rsCapC must be specified %s", when); + if (!IsSet(RSYS_FANPWRH)) + rs_fanPwrH = 0.f; // hydronic: no fan power + if (!IsAusz(RSYS_CAP47)) + // rs_cap47 not AUTOSIZEd (altho may be expression), use it as rs_capNomH default + FldCopyIf(RSYS_CAP47, RSYS_CAPNOMH); } else - { // ASHP (non-hydronic, non-pkgroom): only HSPF required - // capacities defaulted from cooling cap95 - // COPs defaulted from HSPF - // if both COP47 and COP17 are specified, HSPF is not used + { // ASHP other than ASHPHydronic - rc |= requireN(when, RSYS_HSPF, 0); + rc |= disallowN(when, RSYS_CAPH, RSYS_AFUE, 0); + if (!IsSet(RSYS_CAP47) && !IsSet(RSYS_CAP95)) + rc |= oer("at least one of rsCap47 and rsCapC must be specified %s", when); - if (IsAusz(RSYS_CAP47)) - rc |= disallowN("when rsCap47 is AUTOSIZE", - RSYS_CAP05, RSYS_CAP17, RSYS_CAP35, 0); - else - { if (IsSet(RSYS_CAP17)) - rc |= disallowN("when rsCap17 is given", RSYS_CAPRAT1747, 0); - if (IsSet(RSYS_CAP05)) - rc |= disallowN("when rsCap05 is given", RSYS_CAPRAT0547, 0); - } +#if 0 + // save input value of rs_capAuxH + // estimated rs_capAuxH used during autosize + rs_capAuxHInp = rs_capAuxH; + if (IsAusz(RSYS_CAPAUXH)) + rs_capAuxH = 0.f; // overwrite NANDLE +#endif - if (!rs_IsASHPVC()) + if (!IsAusz(RSYS_CAP47)) + // rs_cap47 not AUTOSIZEd (altho may be expression), use it as rs_capNomH default + // see DefaultCapNomsIf() + FldCopyIf(RSYS_CAP47, RSYS_CAPNOMH); + + if (rs_IsPkgRoom()) { - rc |= ignoreN("when rsType is not ASHPVC (VCHP2)", - RSYS_COPMIN05, RSYS_COPMIN17, RSYS_COPMIN35, RSYS_COPMIN47, - RSYS_LOADFMIN05, RSYS_LOADFMIN17, RSYS_LOADFMIN47, 0); - rs_loadFMin05 = rs_loadFMin17 = rs_loadFMin47 = 1.f; + rc |= disallowN(when, RSYS_HSPF, RSYS_CAP05, RSYS_COP05, + RSYS_CAP17, RSYS_COP17, RSYS_CAP35, RSYS_COP35, 0); + rc |= requireN(when, RSYS_COP47, 0); + + if (!IsSet(RSYS_FANPWRH)) + rs_fanPwrH = 0.f; // fan power included in primary by default + + // other defaults derived in rs_TopRSys1() } else - { - if (!IsSet(RSYS_LOADFMIN17)) - rs_loadFMin17 = rs_loadFMin47; - if (!IsSet(RSYS_LOADFMIN05)) - rs_loadFMin05 = rs_loadFMin47; + { // ASHP (non-hydronic, non-pkgroom): only HSPF required + // capacities defaulted from cooling cap95 + // COPs defaulted from HSPF + // if both COP47 and COP17 are specified, HSPF is not used + + rc |= requireN(when, RSYS_HSPF, 0); + + if (IsAusz(RSYS_CAP47)) + rc |= disallowN("when rsCap47 is AUTOSIZE", + RSYS_CAP05, RSYS_CAP17, RSYS_CAP35, 0); + else + { + if (IsSet(RSYS_CAP17)) + rc |= disallowN("when rsCap17 is given", RSYS_CAPRAT1747, 0); + if (IsSet(RSYS_CAP05)) + rc |= disallowN("when rsCap05 is given", RSYS_CAPRAT0547, 0); + } + + if (!rs_IsASHPVC()) + { + rc |= ignoreN("when rsType is not ASHPVC (VCHP2)", + RSYS_COPMIN05, RSYS_COPMIN17, RSYS_COPMIN35, RSYS_COPMIN47, + RSYS_LOADFMIN05, RSYS_LOADFMIN17, RSYS_LOADFMIN47, 0); + rs_loadFMin05 = rs_loadFMin17 = rs_loadFMin47 = 1.f; + } + else + { + if (!IsSet(RSYS_LOADFMIN17)) + rs_loadFMin17 = rs_loadFMin47; + if (!IsSet(RSYS_LOADFMIN05)) + rs_loadFMin05 = rs_loadFMin47; + } } } } - } - else - { // not ASHP of any type - rc |= disallowN( "when rsType is not ASHP, ASHPHydronic, ASHPPkgRoom, or ASHPVC", + else + { // not ASHP of any type + rc |= disallowN("when rsType is not ASHP, ASHPHydronic, ASHPPkgRoom, or ASHPVC", RSYS_HSPF, RSYS_CAP47, RSYS_COP47, RSYS_CAP35, RSYS_COP35, RSYS_CAP17, RSYS_COP17, - RSYS_CAP05, RSYS_COP05, + RSYS_CAP05, RSYS_COP05, RSYS_COPMIN17, RSYS_COPMIN35, RSYS_COPMIN47, RSYS_ASHPLOCKOUTT, RSYS_DEFROSTMODEL, RSYS_CDH, 0); - if (!IsSet( RSYS_AFUE)) - rs_AFUE = rs_IsElecHeat() ? 1.f : 0.9; - if (!IsAusz( RSYS_CAPH)) - // rs_cap47 not AUTOSIZEd (altho may be expression), use it as rs_capNomH default - FldCopyIf( RSYS_CAPH, RSYS_CAPNOMH); - } + if (!IsSet(RSYS_AFUE)) + rs_AFUE = rs_IsElecHeat() ? 1.f : 0.9; + if (!IsAusz(RSYS_CAPH)) + // rs_cap47 not AUTOSIZEd (altho may be expression), use it as rs_capNomH default + FldCopyIf(RSYS_CAPH, RSYS_CAPNOMH); + } - // parasitics -- issue info message if no associated meter - if (IsSet( RSYS_PARELEC) && !IsSet( RSYS_ELECMTRI)) - oInfo( "rsElecMtr not specified -- rsParElec has no effect"); - if (IsSet( RSYS_PARFUEL) && !IsSet( RSYS_FUELMTRI)) - oInfo( "rsFuelMtr not specified -- rsParFuel has no effect"); + // parasitics -- issue info message if no associated meter + if (IsSet(RSYS_PARELEC) && !IsSet(RSYS_ELECMTRI)) + oInfo("rsElecMtr not specified -- rsParElec has no effect"); + if (IsSet(RSYS_PARFUEL) && !IsSet(RSYS_FUELMTRI)) + oInfo("rsFuelMtr not specified -- rsParFuel has no effect"); + } // OAV if (rs_OAVType == C_RSYSOAVTYCH_NONE) @@ -2005,51 +2021,90 @@ RC RSYS::rs_TopRSys1() // check RSYS, initial set up for run rs_pRep205 = EdR.GetAtSafe(rs_rep205); // Get pointer to equipment data if (!rs_pRep205->ed_data) { - rs_pRep205->ed_data = new ASHRAE205_NS::RS0004_NS::RS0004; libtk205_NS::A205_SDK _sdk; - *(rs_pRep205->ed_data) = _sdk.Load_RS0004(rs_pRep205->ed_filePath); - } - } - if (!IsSet(RSYS_TDDESH)) - rs_tdDesH = rs_IsASHP() ? 30.f : 50.f; // lower default temp rise for ASHP + // Validate + if (rs_pRep205->ed_doValidation) { + // Nothing yet + } - if (rs_IsASHPPkgRoom()) - { if (!IsSet(rs_ASHPLockOutT)) - rs_ASHPLockOutT = 45.f; // pkg room ASHP: use resistance at lower temps - rc |= rs_SetupASHP(); - } + rs_pRep205->ed_data = new ASHRAE205_NS::RS0002_NS::RS0002; + *(rs_pRep205->ed_data) = _sdk.Load_RS0002(rs_pRep205->ed_filePath); - if (rs_CanCool()) - { // default/harmonize 95 F COP - // inter-default rs_COP95 <-> rs_EER95 - // if both input, values can be different - // rs_COP95 used for VCHP2, rs_EER95 used for single speed - // EER can default from SEER - if (rs_IsPkgRoom()) - { // pkg: derive SEER from EER - // abram conant fit, 6-20 - rs_SEER = 1.07f * rs_EER95; - // rs_COP95 not allowed + static const std::unordered_map RSMAP = + { + {ASHRAE205_NS::SchemaType::RS0002, C_EDRSCH_RS0002}, + {ASHRAE205_NS::SchemaType::RS0003, C_EDRSCH_RS0003}, + {ASHRAE205_NS::SchemaType::RS0004, C_EDRSCH_RS0004}, + {ASHRAE205_NS::SchemaType::RS0005, C_EDRSCH_RS0005} + }; + + // TODO move to EQUIPDATA Function + auto& repDesc = rs_pRep205->ed_data->metadata; + if (RSMAP.at(repDesc.schema) != rs_pRep205->ed_expectedRS) + { + rc |= rs_pRep205->oer("Unexpected EQUIPDATA RS '%d'. Expected '%s'.", repDesc.schema, rs_pRep205->getChoiTx(EQUIPDATA_EXPECTEDRS, 1)); + } + + // Populate members for reporting (not used for calculations) + // TODO: Check if rating exists + bool hasRating = false; + if (hasRating) + { + rs_SEER = rs_pRep205->ed_data->description.rating_ahri_210_240.seer; + rs_EER95 = rs_pRep205->ed_data->description.rating_ahri_210_240.eer_a_full; + rs_COP95 = rs_EER95 / 3.412f; + } + + + // TODO: Check for fan representation to convert gross to net } - else if (IsSet(RSYS_EER95)) - { if (!IsSet(RSYS_COP95)) - rs_COP95 = rs_EER95 / BtuperWh; + } + else + { + if (!IsSet(RSYS_TDDESH)) + rs_tdDesH = rs_IsASHP() ? 30.f : 50.f; // lower default temp rise for ASHP + + if (rs_IsASHPPkgRoom()) + { + if (!IsSet(rs_ASHPLockOutT)) + rs_ASHPLockOutT = 45.f; // pkg room ASHP: use resistance at lower temps + rc |= rs_SetupASHP(); } - else - { if (IsSet(RSYS_COP95)) - rs_EER95 = rs_COP95 * BtuperWh; + + if (rs_CanCool()) + { // default/harmonize 95 F COP + // inter-default rs_COP95 <-> rs_EER95 + // if both input, values can be different + // rs_COP95 used for VCHP2, rs_EER95 used for single speed + // EER can default from SEER + if (rs_IsPkgRoom()) + { // pkg: derive SEER from EER + // abram conant fit, 6-20 + rs_SEER = 1.07f * rs_EER95; + // rs_COP95 not allowed + } + else if (IsSet(RSYS_EER95)) + { + if (!IsSet(RSYS_COP95)) + rs_COP95 = rs_EER95 / BtuperWh; + } else - { // estimate missing EER from SEER - // California ACM method - rs_EER95 = rs_SEER < 13.f ? 10.f + 0.84f * (rs_SEER - 11.5) - : rs_SEER < 16.f ? 11.3f + 0.57f * (rs_SEER - 13) - : 13.f; - rs_COP95 = rs_EER95 / BtuperWh; + { + if (IsSet(RSYS_COP95)) + rs_EER95 = rs_COP95 * BtuperWh; + else + { // estimate missing EER from SEER + // California ACM method + rs_EER95 = rs_SEER < 13.f ? 10.f + 0.84f * (rs_SEER - 11.5) + : rs_SEER < 16.f ? 11.3f + 0.57f * (rs_SEER - 13) + : 13.f; + rs_COP95 = rs_EER95 / BtuperWh; + } } + if (rs_SEER <= rs_EER95) + rc |= oer("rsSEER (%g) must be > rsEER (%g)", rs_SEER, rs_EER95); } - if (rs_SEER <= rs_EER95) - rc |= oer("rsSEER (%g) must be > rsEER (%g)", rs_SEER, rs_EER95); } if (IsAusz( RSYS_CAP95)) @@ -2082,11 +2137,6 @@ RC RSYS::rs_TopRSys1() // check RSYS, initial set up for run rs_zonesServed++; } - extern RC TestCBOR(const char* filePath); - - - - return rc; } // RSYS::rs_TopRSys1 //----------------------------------------------------------------------------- @@ -2791,25 +2841,47 @@ RC RSYS::rs_SetupCapC( // derive constants that depend on capacity float fanHRtdRat = rs_fanHRtdC / cap95nf; // rated fan heat ratio, (Btuh fan)/(Btuh coil) rs_capAdjF = rs_fChg * rs_fSize * (1.f - fanHRtdRat); + + if (rs_pRep205) + { + auto& dxRepPerf = rs_pRep205->ed_data->performance.dx_system_representation.performance; + int maxSpeed = dxRepPerf.performance_map_cooling.grid_variables.compressor_sequence_number.back(); + double maxFlow = dxRepPerf.performance_map_cooling.grid_variables.indoor_coil_air_mass_flow_rate.back(); + auto performance = dxRepPerf.performance_map_cooling.Calculate_performance( + { + DegFtoK(95.f), // outdoor_coil_entering_dry_bulb_temperature + 0.4, // indoor_coil_entering_relative_humidity; + DegFtoK(80.f), // indoor_coil_entering_dry_bulb_temperature; + maxFlow, // indoor_coil_air_mass_flow_rate; + double(maxSpeed), // compressor_sequence_number; + 101325 // ambient_absolute_air_pressure; + }); + auto capTot_205 = performance[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_total_capacity_index]*BtuperWh; + rs_205flowScaleF = MFRIPtoSI(rs_amfC) / maxFlow; + rs_205outScaleF = abs(rs_capnfX) / capTot_205; + rs_CdC = dxRepPerf.cycling_degradation_coefficient; + } } else { rs_capnfX = 0.f; rs_capAdjF = rs_fChg * rs_fSize; } - // base value for SEERnf calculation - float inpX = 1.09f * rs_cap95 / rs_SEER - rs_fanHRtdC/3.413f; - rs_SEERnfX = inpX > 0.f ? rs_fChg * rs_fSize * (1.09f * rs_cap95 + rs_fanHRtdC) / inpX - : rs_SEER; + if (!rs_pRep205) + { + // base value for SEERnf calculation + float inpX = 1.09f * rs_cap95 / rs_SEER - rs_fanHRtdC / 3.413f; + rs_SEERnfX = inpX > 0.f ? rs_fChg * rs_fSize * (1.09f * rs_cap95 + rs_fanHRtdC) / inpX + : rs_SEER; - inpX = rs_cap95 / rs_EER95 - rs_fanHRtdC / 3.413f; - rs_EERnfX = inpX > 0.f ? -rs_capnfX / inpX : rs_EER95; + inpX = rs_cap95 / rs_EER95 - rs_fanHRtdC / 3.413f; + rs_EERnfX = inpX > 0.f ? -rs_capnfX / inpX : rs_EER95; - if (!IsSet(RSYS_CAP82)) - rs_cap82 = rs_capRat8295 * rs_cap95; + if (!IsSet(RSYS_CAP82)) + rs_cap82 = rs_capRat8295 * rs_cap95; - if (!IsSet(RSYS_CAP115)) - rs_cap115 = rs_capRat11595 * rs_cap95; + if (!IsSet(RSYS_CAP115)) + rs_cap115 = rs_capRat11595 * rs_cap95; #if 0 #if 0 @@ -2824,7 +2896,9 @@ RC RSYS::rs_SetupCapC( // derive constants that depend on capacity } #endif - rc |= rs_SetupBtwxtClg(); + rc |= rs_SetupBtwxtClg(); + + } rs_DefaultCapNomsIf(); @@ -3122,8 +3196,61 @@ x printf("\nhit"); rs_twbCoilIn = rs_twbIn; // use known value rs_tdbCoilIn = rs_asOut.as_tdb; + if (rs_pRep205) + { + auto& dxRepPerf = rs_pRep205->ed_data->performance.dx_system_representation.performance; + int maxSpeed = dxRepPerf.performance_map_cooling.grid_variables.compressor_sequence_number.back(); + double tdbOutK = DegFtoK(rs_tdbOut); + double rhIn = rs_asOut.as_RelHum(); + double tdbInK = DegFtoK(rs_tdbCoilIn); + double pAtm = inHGtoPa(Top.tp_presAtm); + auto& minSpeedPerf = dxRepPerf.performance_map_cooling.Calculate_performance( + { + tdbOutK, + rhIn, + tdbInK, + MFRIPtoSI(rs_amfC / (maxSpeed * rs_205flowScaleF)), + 1.0, + pAtm + } + ); + double capTotCmin = minSpeedPerf[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_total_capacity_index] * BtuperWh * rs_205outScaleF; + double capSensCmin = min(minSpeedPerf[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_sensible_capacity_index] * BtuperWh * rs_205outScaleF, capTotCmin); + auto& maxSpeedPerf = dxRepPerf.performance_map_cooling.Calculate_performance( + { + tdbOutK, + rhIn, + tdbInK, + MFRIPtoSI(rs_amfC / rs_205flowScaleF), + double(maxSpeed), + pAtm + } + ); + double capTotCmax = maxSpeedPerf[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_total_capacity_index] * BtuperWh * rs_205outScaleF; + double capSensCmax = min(maxSpeedPerf[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_sensible_capacity_index] * BtuperWh * rs_205outScaleF, capTotCmax); + rs_speedFMin = capSensCmin / capSensCmax; + auto& performance = dxRepPerf.performance_map_cooling.Calculate_performance( + { + tdbOutK, + rhIn, + tdbInK, + MFRIPtoSI(rs_amf/ rs_205flowScaleF), + 1.0 + (double(rs_speedF) - rs_speedFMin)/(1.0 - rs_speedFMin)*(double(maxSpeed) - 1.0), + pAtm + } + ); + rs_capTotCt = -performance[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_total_capacity_index]*BtuperWh* rs_205outScaleF; + rs_capSenCt = max(-performance[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_sensible_capacity_index]*BtuperWh* rs_205outScaleF,rs_capTotCt); + double inpX = performance[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_power_index]*BtuperWh* rs_205outScaleF; + rs_SHR = rs_capSenCt / rs_capTotCt; + rs_effCt = abs(rs_capSenCt) / inpX; + rs_fCondCap = rs_capTotCt/ rs_capnfX; + } + else + { + rs_CoolingSHR(); + } - rs_CoolingSHR(); rs_wetCoil = rs_SHR < 1.f; // no fan (coil-only) capacities at current conditions (fan heat elsewhere) @@ -3132,19 +3259,22 @@ x printf("\nhit"); { // autosizing warmup: assume coil can produce design delta-T // (ignore sign of rs_tdDesC) // why: produces (more) stable supply air state - rs_CoolingCapF1Spd(); // use 1 spd model for both 1 spd and VC + if (!rs_pRep205) + { + rs_CoolingCapF1Spd(); // use 1 spd model for both 1 spd and VC + } float coilDT = // temp diff across coil (< 0) - -fabs(rs_tdDesC) * rs_fCondCap - rs_fanDeltaTC; + -fabs(rs_tdDesC) * rs_fCondCap - rs_fanDeltaTC; rs_capSenCt = coilDT * rs_amf * Top.tp_airSH; rs_capTotCt = rs_capSenCt / rs_SHR; // total, Btuh (note rs_SHR>0 always) } - else if (!rs_IsVCClg()) + else if (!rs_IsVCClg() && !rs_pRep205) { // 1 spd, not autosizing warmup, use full model rs_CoolingCapF1Spd(); // use 1 spd model for both 1 spd rs_capTotCt = rs_capnfX * rs_fCondCap; // total capacity at current conditions, Btuh rs_capSenCt = rs_SHR * rs_capTotCt; // sensible capacity at current conditions, Btuh } - else + else if (!rs_pRep205) { // total capacities and input, Btuh // include rated fan power // cap values are net Btuh, <0 @@ -3220,7 +3350,7 @@ x rs_asOut = asSav; rs_asOut.as_Set( 50., .001); #endif - if (!rs_IsVCClg()) + if (!rs_IsVCClg() && !rs_pRep205) { rs_CoolingEff1Spd(); // derive rs_EERt @@ -5163,7 +5293,7 @@ RC RSYS::rs_FinalizeSh() runFFan = rs_loadF; rs_outSenTot = rs_outSen + rs_outFan; // net cooling output, Btuh (generally < 0) - if (!rs_IsVCClg() || rs_speedF == 1.f) + if ((!rs_IsVCClg() && !rs_pRep205) || rs_speedF == 1.f) { rs_runF = rs_loadF; rs_PLF = 1.f - rs_CdC * (1.f - rs_runF); rs_inPrimary = fabs(rs_outSen / max(.01f, rs_effCt * rs_PLF)); // compressor power, Btuh @@ -5315,7 +5445,16 @@ x rs_inPrimary = rs_outSen / (rs_effHt * rs_PLF); if (rs_pMtrElec) rs_pMtrElec->H.fanC += rs_inFan * Top.tp_subhrDur; } - // else if (rs_Mode == rsmOFF) + else if (rs_mode == rsmOFF) + { + if (rs_pRep205) + { + auto& dxStandbyPerf = rs_pRep205->ed_data->performance.dx_system_representation.performance.performance_map_standby; + rs_parElec = dxStandbyPerf.Calculate_performance( + { DegFtoK(rs_tdbOut) } + )[ASHRAE205_NS::RS0004_NS::LookupVariablesStandby::gross_power_index]; + } + } // parasitic consumption if (rs_pMtrElec) diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index b27e4c0df..010151fa6 100644 --- a/src/CNRECS.DEF +++ b/src/CNRECS.DEF @@ -2933,11 +2933,11 @@ RECORD AIRNET "AirNet" *SUBSTRUCT *hideall // AirNet calculation storage / code RECORD EQUIPDATA "EquipData" *RAT // holds ASHRAE 205 equipment data *prefix ed_ *exdes // explicit destructor -*declare "class ASHRAE205_NS::RS0004_NS::RS0004* ed_data;" +*declare "class ASHRAE205_NS::RS0002_NS::RS0002* ed_data;" // in base class: .name, .ownTi, more. *r CHP ed_filePath // File path -*r CHP ed_expectedRS // Expected Representation Specification identifier (e.g., RS0004) +*r EDRSCH ed_expectedRS // Expected Representation Specification identifier (e.g., RS0004) *r NOYESCH ed_doValidation // Validate file against schema *END // EQUIPDATA @@ -3471,6 +3471,8 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system *f FLOAT rs_fanHRtdC // fan heat included in rated rs_cap95, Btuh *f FLOAT rs_capnfX; // constant for rs_capCt calc *f FLOAT rs_capAdjF; +*f FLOAT rs_205outScaleF; +*f FLOAT rs_205flowScaleF; *f *e FLOAT rs_SEERnfX; // constant for rs_SEERnf calc *f *e FLOAT rs_EERnfX; // constant for rs_EERnfCalc diff --git a/src/RCDEF/dtypes.h b/src/RCDEF/dtypes.h index a9cb665a7..d6d44e26c 100644 --- a/src/RCDEF/dtypes.h +++ b/src/RCDEF/dtypes.h @@ -3,31 +3,31 @@ /* this file is #included in cnglob.h. */ /* do not edit this file -- it is written over any time rcdef is run -- - instead change the input, dtypes.def (also records.def), + instead change the input, dtypes.def (also records.def), and re-run rcdef. */ - /* see also CHOICB.H, for choice data type stuff */ + /* see also CHOICB.H, for choice data type stuff */ - /* text of these automatically generated comments written 10-88 - -- likely to be obsolete! */ + /* text of these automatically generated comments written 10-88 + -- likely to be obsolete! */ -/* Typedefs for data types + /* Typedefs for data types - For record fields, and general use. - Type names are as specified in CNDTYPES.DEF. - - For *choicb data types, the declaration is for a short int to hold a - "choicb index" to represent the current selection - (see C_xxx defines in CHOICB.H). + For record fields, and general use. + Type names are as specified in CNDTYPES.DEF. - For *choicn data types, the declaration is for a float to hold a - numerical value or a NAN representing "unset" or the current selection. - (see C_xxx defines in CHOICB.H, and cnblog.h NCHOICE and CHN macros). + For *choicb data types, the declaration is for a short int to hold a + "choicb index" to represent the current selection + (see C_xxx defines in CHOICB.H). - (Structures for records (as specified in records.def) are not here, - but in several RCxxxx.H files whose names are given in records.def). */ + For *choicn data types, the declaration is for a float to hold a + numerical value or a NAN representing "unset" or the current selection. + (see C_xxx defines in CHOICB.H, and cnblog.h NCHOICE and CHN macros). + + (Structures for records (as specified in records.def) are not here, + but in several RCxxxx.H files whose names are given in records.def). */ typedef int INT; typedef int* INTP; @@ -37,54 +37,56 @@ typedef unsigned short USI; typedef long LI; typedef unsigned long ULI; typedef float FLOAT; -typedef float * FLOATP; -typedef void * VOIDP; +typedef float* FLOATP; +typedef void* VOIDP; typedef short DOW; typedef short MONTH; typedef char CH; -typedef char * CHP; +typedef char* CHP; typedef unsigned char UCH; typedef SI TI; typedef char ANAME[64]; -typedef struct {SI year;SI month;SI mday;SI wday;} IDATE; -typedef struct {SI hour;SI min;SI sec;} ITIME; +typedef struct { SI year; SI month; SI mday; SI wday; } IDATE; +typedef struct { SI hour; SI min; SI sec; } ITIME; typedef short DOY; typedef unsigned SHOY; -typedef struct {SI year;SI month;SI mday;SI wday;SI hour;SI min;SI sec;} IDATETIME; +typedef struct { SI year; SI month; SI mday; SI wday; SI hour; SI min; SI sec; } IDATETIME; typedef time_t LDATETIME; typedef double DBL; typedef double* DBLP; -typedef struct SGTARG * SGTARGP; -typedef struct MASSLAYER * MASSLAYERP; -typedef class MASSMODEL * MASSMODELP; -typedef class IZXRAT * IZXRATP; -typedef struct { void *val; USI ty; } VALNDT; -typedef enum { cmNONE=0,cmSo=1,cmStH=2,cmStC=4,cmStBOTH=6 } TCCM; -typedef enum { So=1,StH=2,StC=4,St=6,Lh=8,LhSo=9,LhStH=10,Ar=16,ArSo=17,ArStH=18,ArStC=20,ArStBOTH=22,nv=32 } ZHXTY; -typedef enum { uNONE=0, uSo=1, uStH=2, uStC=4, /*uSt=6,*/ uMn=8, uMxH=16, uMxC=32/*,uPegged=56*/} TCUSE; +typedef struct SGTARG* SGTARGP; +typedef struct MASSLAYER* MASSLAYERP; +typedef class MASSMODEL* MASSMODELP; +typedef class IZXRAT* IZXRATP; +typedef struct { void* val; USI ty; } VALNDT; +typedef enum { cmNONE = 0, cmSo = 1, cmStH = 2, cmStC = 4, cmStBOTH = 6 } TCCM; +typedef enum { So = 1, StH = 2, StC = 4, St = 6, Lh = 8, LhSo = 9, LhStH = 10, Ar = 16, ArSo = 17, ArStH = 18, ArStC = 20, ArStBOTH = 22, nv = 32 } ZHXTY; +typedef enum { uNONE = 0, uSo = 1, uStH = 2, uStC = 4, /*uSt=6,*/ uMn = 8, uMxH = 16, uMxC = 32/*,uPegged=56*/ } TCUSE; typedef enum { cuNONE, cuHEAT, cuCOOL } COILUSED; -typedef enum { ahOFF=0,ahFAN=1,ahHEATBIT=2,ahHEATING=3,ahCOOLBIT=4,ahCOOLING=5,ahON=7 } AHMODE; +typedef enum { ahOFF = 0, ahFAN = 1, ahHEATBIT = 2, ahHEATING = 3, ahCOOLBIT = 4, ahCOOLING = 5, ahON = 7 } AHMODE; typedef enum { tldMIN, tldSP, tldMAX } TOWLOADCASE; -typedef XFILE * XFILEP; +typedef XFILE* XFILEP; typedef char WFLOC[32]; typedef char WFLID[18]; -typedef enum WFileFormat { UNK=-1,BSGS=1,BSGSdemo,ET1,ET2,CSW,T24DLL,EPW } WFILEFORMAT; +typedef enum WFileFormat { UNK = -1, BSGS = 1, BSGSdemo, ET1, ET2, CSW, T24DLL, EPW } WFILEFORMAT; typedef char WFLOC2[22]; -typedef class YACAM * YACAMP; -typedef class WDYEAR * WDYEARP; -typedef enum { nul,znTot,znTotO,znTotIz,znCAir,massI,massO } RIGTARGTY; +typedef class YACAM* YACAMP; +typedef class WDYEAR* WDYEARP; +typedef enum { nul, znTot, znTotO, znTotIz, znCAir, massI, massO } RIGTARGTY; typedef float RIGTARG; -typedef struct { RIGTARGTY targTy; TI targTi; float targFr; RIGTARG * targP; } RIGDIST; -typedef RIGDIST * RIGDISTP; -typedef class ZNR * ZNRP; -typedef struct XSURF * XSURFP; +typedef struct { RIGTARGTY targTy; TI targTi; float targFr; RIGTARG* targP; } RIGDIST; +typedef RIGDIST* RIGDISTP; +typedef class ZNR* ZNRP; +typedef struct XSURF* XSURFP; typedef class DUCTSEG* DUCTSEGP; +typedef class PIPESEG* PIPESEGP; typedef SI NOYESCH; typedef SI DGCH; typedef SI TSCH; typedef SI SKYMODCH; typedef SI SKYMODLWCH; typedef SI EXSHMODELCH; +typedef SI SLRINTERPMETH; typedef SI DOWCH; typedef SI MONCH; typedef SI OSTYCH; @@ -96,19 +98,24 @@ typedef SI GROUNDMODELCH; typedef SI FBXREFCH; typedef SI FBZREFCH; typedef SI CONVMODELCH; +typedef SI EDRSCH; typedef SI RSYSMODECTRLCH; typedef SI RSYSTYCH; typedef SI RSYSOAVTYCH; typedef SI RSYSDEFROSTMODELCH; +typedef SI AUXHEATTY; +typedef SI AUXHEATCTRL; typedef SI WSCALCMODECH; typedef SI WHHEATSRCCH; typedef SI WHTYPECH; typedef SI WHASHPTYCH; +typedef SI WHRESTYCH; typedef SI DHWEUCH; typedef SI DHWEUXCH; -typedef SI DHWMODELCH; +typedef SI DHWBRANCHMODELCH; typedef SI DHWLSEGTYCH; typedef SI DWHRTYCH; +typedef SI DHWDRMETH; typedef SI PVMODCH; typedef SI PVARRCH; typedef SI MOUNTCH; @@ -120,6 +127,7 @@ typedef SI RPTYCH; typedef SI RPTHDCH; typedef SI JUSTCH; typedef SI ENDUSECH; +typedef SI AFCAT; typedef SI HDAYCASECH; typedef SI FANAPPCH; typedef SI FANTYCH; @@ -147,6 +155,7 @@ typedef float NOYESVC; typedef float OFFAVAILONVC; typedef float VENTAVAILVC; typedef float BATCTRLALGVC; +typedef float DHWDRSIG; typedef float TSCMNC; typedef float RANC; @@ -168,29 +177,29 @@ typedef float RANC; -/* Data type defines names are DT + /* Data type defines names are DT + + Values stored in the field information in a record descriptor (also for + general use) consisting of Dttab offset plus bits (rcpak.h) as follows: - Values stored in the field information in a record descriptor (also for - general use) consisting of Dttab offset plus bits (rcpak.h) as follows: + DTBCHOICB (0x2000) Multiple-choice, "improved and simplified" CN style + (see srd.h): takes one of several values given + in dtypes.def; values are stored as ints 1, 2, 3 ... ; + Symbols for values are defined in CHOICB.H. 1-91. - DTBCHOICB (0x2000) Multiple-choice, "improved and simplified" CN style - (see srd.h): takes one of several values given - in dtypes.def; values are stored as ints 1, 2, 3 ... ; - Symbols for values are defined in CHOICB.H. 1-91. + DTBCHOICN (0x4000) Number OR Multiple-choice value stored in a float. + Choice values are stored in the float as NANs: + hi word is 0x7f81, 0x7f82, 0x7f83 .... + Symbols for values are defined in CHOICB.H. 2-92. - DTBCHOICN (0x4000) Number OR Multiple-choice value stored in a float. - Choice values are stored in the float as NANs: - hi word is 0x7f81, 0x7f82, 0x7f83 .... - Symbols for values are defined in CHOICB.H. 2-92. + LOWORD(Dttab[ dtype & DTBMASK]) contains, for all data types, + the SIZE in bytes of the data type. - LOWORD(Dttab[ dtype & DTBMASK]) contains, for all data types, - the SIZE in bytes of the data type. + For a choice types, the number of choices and the + text pointers of each choice follow per rcpak.h struct CHOICB. - For a choice types, the number of choices and the - text pointers of each choice follow per rcpak.h struct CHOICB. - - The position in Dttab comes from the "type handle" specified in dtypes.h; - changing these invalidates compiled code. */ + The position in Dttab comes from the "type handle" specified in dtypes.h; + changing these invalidates compiled code. */ #define DTNONE 0x0000 // supplied by rcdef (rob 12-1-91) #define DTUNDEF 0xc000 // supplied by rcdef @@ -245,102 +254,111 @@ typedef float RANC; #define DTZNRP 0x30 #define DTXSURFP 0x31 #define DTDUCTSEGP 0x32 -#define DTNOYESCH 0x2033 -#define DTDGCH 0x2036 -#define DTTSCH 0x2039 -#define DTSKYMODCH 0x203c -#define DTSKYMODLWCH 0x203f -#define DTEXSHMODELCH 0x2044 -#define DTDOWCH 0x2047 -#define DTMONCH 0x204f -#define DTOSTYCH 0x205c -#define DTZNMODELCH 0x2063 -#define DTIZNVTYCH 0x2067 -#define DTEXCNDCH 0x2076 -#define DTSFMODELCH 0x207c -#define DTGROUNDMODELCH 0x2084 -#define DTFBXREFCH 0x2087 -#define DTFBZREFCH 0x208d -#define DTCONVMODELCH 0x2094 -#define DTRSYSMODECTRLCH 0x209e -#define DTRSYSTYCH 0x20a3 -#define DTRSYSOAVTYCH 0x20ab -#define DTRSYSDEFROSTMODELCH 0x20af -#define DTWSCALCMODECH 0x20b2 -#define DTWHHEATSRCCH 0x20b5 -#define DTWHTYPECH 0x20bb -#define DTWHASHPTYCH 0x20c1 -#define DTDHWEUCH 0x20e4 -#define DTDHWEUXCH 0x20eb -#define DTDHWMODELCH 0x20f3 -#define DTDHWLSEGTYCH 0x20f6 -#define DTDWHRTYCH 0x20f9 -#define DTPVMODCH 0x20fd -#define DTPVARRCH 0x2102 -#define DTMOUNTCH 0x2107 -#define DTFENMODELCH 0x210a -#define DTSIDECH 0x210d -#define DTFILESTATCH 0x2110 -#define DTIVLCH 0x2114 -#define DTRPTYCH 0x211b -#define DTRPTHDCH 0x212b -#define DTJUSTCH 0x2131 -#define DTENDUSECH 0x2134 -#define DTHDAYCASECH 0x214d -#define DTFANAPPCH 0x2153 -#define DTFANTYCH 0x2159 -#define DTMOTTYCH 0x2162 -#define DTMOTPOSCH 0x2165 -#define DTFANPLCH 0x2169 -#define DTCOILAPPCH 0x2171 -#define DTCOILTYCH 0x2175 -#define DTECOTYCH 0x217e -#define DTDUCTTYCH 0x2183 -#define DTOAMNCH 0x2186 -#define DTEXSHDCH 0x2189 -#define DTINSHDCH 0x218c -#define DTHUMTHCH 0x218f -#define DTOFFONCH 0x2192 -#define DTTPSTGCH 0x2195 -#define DTCTTYCH 0x2198 -#define DTCCHCM 0x219c -#define DTDIFFSAMECH 0x21a3 -#define DTAHSCHVC 0x41a6 -#define DTOFFAVAILVC 0x41a9 -#define DTTFANSCHVC 0x41ac -#define DTOFFONVC 0x41b1 -#define DTNOYESVC 0x41b4 -#define DTOFFAVAILONVC 0x41b7 -#define DTVENTAVAILVC 0x41bb -#define DTBATCTRLALGVC 0x41bf -#define DTTSCMNC 0x41c2 -#define DTRANC 0x41c8 - - - -/* Data type MAX defines names are DTMAX - - Maximum absolute value for some types, for general use, optionally - specifyable in dtypes.def. */ +#define DTPIPESEGP 0x33 +#define DTNOYESCH 0x2034 +#define DTDGCH 0x2037 +#define DTTSCH 0x203a +#define DTSKYMODCH 0x203d +#define DTSKYMODLWCH 0x2040 +#define DTEXSHMODELCH 0x2045 +#define DTSLRINTERPMETH 0x2048 +#define DTDOWCH 0x204b +#define DTMONCH 0x2053 +#define DTOSTYCH 0x2060 +#define DTZNMODELCH 0x2067 +#define DTIZNVTYCH 0x206b +#define DTEXCNDCH 0x207a +#define DTSFMODELCH 0x2080 +#define DTGROUNDMODELCH 0x2088 +#define DTFBXREFCH 0x208b +#define DTFBZREFCH 0x2091 +#define DTCONVMODELCH 0x2098 +#define DTEDRSCH 0x20a2 +#define DTRSYSMODECTRLCH 0x20a7 +#define DTRSYSTYCH 0x20ac +#define DTRSYSOAVTYCH 0x20b9 +#define DTRSYSDEFROSTMODELCH 0x20bd +#define DTAUXHEATTY 0x20c1 +#define DTAUXHEATCTRL 0x20c5 +#define DTWSCALCMODECH 0x20c9 +#define DTWHHEATSRCCH 0x20cc +#define DTWHTYPECH 0x20d2 +#define DTWHASHPTYCH 0x20d9 +#define DTWHRESTYCH 0x212a +#define DTDHWEUCH 0x212d +#define DTDHWEUXCH 0x2134 +#define DTDHWBRANCHMODELCH 0x213d +#define DTDHWLSEGTYCH 0x2141 +#define DTDWHRTYCH 0x2144 +#define DTDHWDRMETH 0x2148 +#define DTPVMODCH 0x214b +#define DTPVARRCH 0x2150 +#define DTMOUNTCH 0x2155 +#define DTFENMODELCH 0x2158 +#define DTSIDECH 0x215b +#define DTFILESTATCH 0x215e +#define DTIVLCH 0x2162 +#define DTRPTYCH 0x2169 +#define DTRPTHDCH 0x217a +#define DTJUSTCH 0x2180 +#define DTENDUSECH 0x2183 +#define DTAFCAT 0x219c +#define DTHDAYCASECH 0x21aa +#define DTFANAPPCH 0x21b0 +#define DTFANTYCH 0x21b6 +#define DTMOTTYCH 0x21bf +#define DTMOTPOSCH 0x21c2 +#define DTFANPLCH 0x21c6 +#define DTCOILAPPCH 0x21ce +#define DTCOILTYCH 0x21d2 +#define DTECOTYCH 0x21db +#define DTDUCTTYCH 0x21e0 +#define DTOAMNCH 0x21e3 +#define DTEXSHDCH 0x21e6 +#define DTINSHDCH 0x21e9 +#define DTHUMTHCH 0x21ec +#define DTOFFONCH 0x21ef +#define DTTPSTGCH 0x21f2 +#define DTCTTYCH 0x21f5 +#define DTCCHCM 0x21f9 +#define DTDIFFSAMECH 0x2200 +#define DTAHSCHVC 0x4203 +#define DTOFFAVAILVC 0x4206 +#define DTTFANSCHVC 0x4209 +#define DTOFFONVC 0x420e +#define DTNOYESVC 0x4211 +#define DTOFFAVAILONVC 0x4214 +#define DTVENTAVAILVC 0x4218 +#define DTBATCTRLALGVC 0x421d +#define DTDHWDRSIG 0x4220 +#define DTTSCMNC 0x422c +#define DTRANC 0x4232 + + + + /* Data type MAX defines names are DTMAX + + Maximum absolute value for some types, for general use, optionally + specifyable in dtypes.def. */ #define DTSIMAX 32767 #define DTUSIMAX 65535 #define DTANAMEMAX 63 -/* Choice data type CHOICE INDEX defines + /* Choice data type CHOICE INDEX defines - These are values stored in fields and variables of choice - (choicb, see srd.h) data types; the C_ defines are used in code to set - and test choice data. + These are values stored in fields and variables of choice + (choicb, see srd.h) data types; the C_ defines are used in code to set + and test choice data. - The value is the sequence number of the choice in dtypes.def. If changed, - grep and recompile all pertinent code. + The value is the sequence number of the choice in dtypes.def. If changed, + grep and recompile all pertinent code. - The value is used in accessing the choice's text pointer at - Dttab + (dt & DTBMASK) + masked value + The value is used in accessing the choice's text pointer at + Dttab + (dt & DTBMASK) + masked value - The names in these defines are C__ */ + The names in these defines are C__ */ #define C_NOYESCH_NO 1 #define C_NOYESCH_YES 2 @@ -356,6 +374,8 @@ typedef float RANC; #define C_SKYMODLWCH_BLAST 4 #define C_EXSHMODELCH_NONE 1 #define C_EXSHMODELCH_PENUMBRA 2 +#define C_SLRINTERPMETH_CSE 1 +#define C_SLRINTERPMETH_TRNSYS 2 #define C_DOWCH_SUN 1 #define C_DOWCH_MON 2 #define C_DOWCH_TUE 3 @@ -432,22 +452,38 @@ typedef float RANC; #define C_CONVMODELCH_TARP 7 #define C_CONVMODELCH_DOE2 8 #define C_CONVMODELCH_UNIFIED 9 +#define C_EDRSCH_RS0002 1 +#define C_EDRSCH_RS0003 2 +#define C_EDRSCH_RS0004 3 +#define C_EDRSCH_RS0005 4 #define C_RSYSMODECTRLCH_OFF 1 #define C_RSYSMODECTRLCH_HEAT 2 #define C_RSYSMODECTRLCH_COOL 3 #define C_RSYSMODECTRLCH_AUTO 4 #define C_RSYSTYCH_ACFURN 1 #define C_RSYSTYCH_ACRES 2 -#define C_RSYSTYCH_ASHP 3 -#define C_RSYSTYCH_ASHPHYD 4 -#define C_RSYSTYCH_AC 5 -#define C_RSYSTYCH_FURN 6 -#define C_RSYSTYCH_RES 7 +#define C_RSYSTYCH_ACPKGRM 3 +#define C_RSYSTYCH_ACPKGRMFURN 4 +#define C_RSYSTYCH_ACPKGRMRES 5 +#define C_RSYSTYCH_ASHP 6 +#define C_RSYSTYCH_ASHPHYD 7 +#define C_RSYSTYCH_ASHPPKGRM 8 +#define C_RSYSTYCH_ASHPVC 9 +#define C_RSYSTYCH_AC 10 +#define C_RSYSTYCH_FURN 11 +#define C_RSYSTYCH_RES 12 #define C_RSYSOAVTYCH_NONE 1 #define C_RSYSOAVTYCH_FIXEDFLOW 2 #define C_RSYSOAVTYCH_VARFLOW 3 -#define C_RSYSDEFROSTMODELCH_REVCYCLE 1 -#define C_RSYSDEFROSTMODELCH_REVCYCLEAUX 2 +#define C_RSYSDEFROSTMODELCH_NONE 1 +#define C_RSYSDEFROSTMODELCH_REVCYCLE 2 +#define C_RSYSDEFROSTMODELCH_REVCYCLEAUX 3 +#define C_AUXHEATTY_NONE 1 +#define C_AUXHEATTY_RES 2 +#define C_AUXHEATTY_FURN 3 +#define C_AUXHEATCTRL_LO 1 +#define C_AUXHEATCTRL_CYCLE 2 +#define C_AUXHEATCTRL_ALT 3 #define C_WSCALCMODECH_PRERUN 1 #define C_WSCALCMODECH_SIM 2 #define C_WHHEATSRCCH_ELRES 1 @@ -460,6 +496,7 @@ typedef float RANC; #define C_WHTYPECH_INSTSML 3 #define C_WHTYPECH_INSTLRG 4 #define C_WHTYPECH_INSTUEF 5 +#define C_WHTYPECH_BUILTUP 6 #define C_WHASHPTYCH_RESTANKNOUA 1 #define C_WHASHPTYCH_RESTANK 2 #define C_WHASHPTYCH_BASICINT 3 @@ -469,31 +506,79 @@ typedef float RANC; #define C_WHASHPTYCH_AOSMITHHPTU66 7 #define C_WHASHPTYCH_AOSMITHHPTU80 8 #define C_WHASHPTYCH_AOSMITHHPTU80DR 9 -#define C_WHASHPTYCH_SANDEN40 10 -#define C_WHASHPTYCH_SANDEN80 11 -#define C_WHASHPTYCH_GE2012 12 -#define C_WHASHPTYCH_GE2014 13 -#define C_WHASHPTYCH_GE2014_80 14 -#define C_WHASHPTYCH_GE2014_80DR 15 -#define C_WHASHPTYCH_GE2014STDMODE 16 -#define C_WHASHPTYCH_GE2014STDMODE_80 17 -#define C_WHASHPTYCH_RHEEMHB50 18 -#define C_WHASHPTYCH_RHEEMHBDR2250 19 -#define C_WHASHPTYCH_RHEEMHBDR4550 20 -#define C_WHASHPTYCH_RHEEMHBDR2265 21 -#define C_WHASHPTYCH_RHEEMHBDR4565 22 -#define C_WHASHPTYCH_RHEEMHBDR2280 23 -#define C_WHASHPTYCH_RHEEMHBDR4580 24 -#define C_WHASHPTYCH_STIEBEL220E 25 -#define C_WHASHPTYCH_GENERIC1 26 -#define C_WHASHPTYCH_GENERIC2 27 -#define C_WHASHPTYCH_GENERIC3 28 -#define C_WHASHPTYCH_GENERIC 29 -#define C_WHASHPTYCH_UEF2GENERIC 30 -#define C_WHASHPTYCH_WORSTCASEMEDIUM 31 -#define C_WHASHPTYCH_AOSMITHSHPT50 32 -#define C_WHASHPTYCH_AOSMITHSHPT66 33 -#define C_WHASHPTYCH_AOSMITHSHPT80 34 +#define C_WHASHPTYCH_AOSMITHCAHP120 10 +#define C_WHASHPTYCH_SANDEN40 11 +#define C_WHASHPTYCH_SANDEN80 12 +#define C_WHASHPTYCH_SANDEN120 13 +#define C_WHASHPTYCH_SANDENGS3 14 +#define C_WHASHPTYCH_GE2012 15 +#define C_WHASHPTYCH_GE2014 16 +#define C_WHASHPTYCH_GE2014_80 17 +#define C_WHASHPTYCH_GE2014_80DR 18 +#define C_WHASHPTYCH_GE2014STDMODE 19 +#define C_WHASHPTYCH_GE2014STDMODE_80 20 +#define C_WHASHPTYCH_BWC202065 21 +#define C_WHASHPTYCH_RHEEMHB50 22 +#define C_WHASHPTYCH_RHEEMHBDR2250 23 +#define C_WHASHPTYCH_RHEEMHBDR4550 24 +#define C_WHASHPTYCH_RHEEMHBDR2265 25 +#define C_WHASHPTYCH_RHEEMHBDR4565 26 +#define C_WHASHPTYCH_RHEEMHBDR2280 27 +#define C_WHASHPTYCH_RHEEMHBDR4580 28 +#define C_WHASHPTYCH_RHEEM2020PREM40 29 +#define C_WHASHPTYCH_RHEEM2020PREM50 30 +#define C_WHASHPTYCH_RHEEM2020PREM65 31 +#define C_WHASHPTYCH_RHEEM2020PREM80 32 +#define C_WHASHPTYCH_RHEEM2020BUILD40 33 +#define C_WHASHPTYCH_RHEEM2020BUILD50 34 +#define C_WHASHPTYCH_RHEEM2020BUILD65 35 +#define C_WHASHPTYCH_RHEEMHBDRBUILD80 36 +#define C_WHASHPTYCH_STIEBEL220E 37 +#define C_WHASHPTYCH_AOSMITHSHPT50 38 +#define C_WHASHPTYCH_AOSMITHSHPT66 39 +#define C_WHASHPTYCH_AOSMITHSHPT80 40 +#define C_WHASHPTYCH_GENERIC1 41 +#define C_WHASHPTYCH_GENERIC2 42 +#define C_WHASHPTYCH_GENERIC3 43 +#define C_WHASHPTYCH_GENERIC 44 +#define C_WHASHPTYCH_UEF2GENERIC 45 +#define C_WHASHPTYCH_WORSTCASEMEDIUM 46 +#define C_WHASHPTYCH_AWHSTIER3GENERIC40 47 +#define C_WHASHPTYCH_AWHSTIER3GENERIC50 48 +#define C_WHASHPTYCH_AWHSTIER3GENERIC65 49 +#define C_WHASHPTYCH_AWHSTIER3GENERIC80 50 +#define C_WHASHPTYCH_COLMACCXV5_SP 51 +#define C_WHASHPTYCH_COLMACCXA10_SP 52 +#define C_WHASHPTYCH_COLMACCXA15_SP 53 +#define C_WHASHPTYCH_COLMACCXA20_SP 54 +#define C_WHASHPTYCH_COLMACCXA25_SP 55 +#define C_WHASHPTYCH_COLMACCXA30_SP 56 +#define C_WHASHPTYCH_COLMACCXV5_MP 57 +#define C_WHASHPTYCH_COLMACCXA10_MP 58 +#define C_WHASHPTYCH_COLMACCXA15_MP 59 +#define C_WHASHPTYCH_COLMACCXA20_MP 60 +#define C_WHASHPTYCH_COLMACCXA25_MP 61 +#define C_WHASHPTYCH_COLMACCXA30_MP 62 +#define C_WHASHPTYCH_NYLEC25A_SP 63 +#define C_WHASHPTYCH_NYLEC60A_SP 64 +#define C_WHASHPTYCH_NYLEC90A_SP 65 +#define C_WHASHPTYCH_NYLEC125A_SP 66 +#define C_WHASHPTYCH_NYLEC185A_SP 67 +#define C_WHASHPTYCH_NYLEC250A_SP 68 +#define C_WHASHPTYCH_NYLEC25A_MP 69 +#define C_WHASHPTYCH_NYLEC60A_MP 70 +#define C_WHASHPTYCH_NYLEC90A_MP 71 +#define C_WHASHPTYCH_NYLEC125A_MP 72 +#define C_WHASHPTYCH_NYLEC185A_MP 73 +#define C_WHASHPTYCH_NYLEC250A_MP 74 +#define C_WHASHPTYCH_NYLEC60AC_SP 75 +#define C_WHASHPTYCH_NYLEC90AC_SP 76 +#define C_WHASHPTYCH_NYLEC125AC_SP 77 +#define C_WHASHPTYCH_NYLEC185AC_SP 78 +#define C_WHASHPTYCH_NYLEC250AC_SP 79 +#define C_WHASHPTYCH_SCALABLE_SP 80 +#define C_WHRESTYCH_TYPICAL 1 +#define C_WHRESTYCH_SWINGTANK 2 #define C_DHWEUCH_FAUCET 1 #define C_DHWEUCH_SHOWER 2 #define C_DHWEUCH_BATH 3 @@ -508,13 +593,16 @@ typedef float RANC; #define C_DHWEUXCH_CWASHR 6 #define C_DHWEUXCH_DWASHR 7 #define C_DHWEUXCH_COUNT 8 -#define C_DHWMODELCH_T24DHW 1 -#define C_DHWMODELCH_2013 2 +#define C_DHWBRANCHMODELCH_T24DHW 1 +#define C_DHWBRANCHMODELCH_DRAWWASTE 2 +#define C_DHWBRANCHMODELCH_DAYWASTE 3 #define C_DHWLSEGTYCH_RET 1 #define C_DHWLSEGTYCH_SUP 2 #define C_DWHRTYCH_HORIZ 1 #define C_DWHRTYCH_VERT 2 #define C_DWHRTYCH_SETEF 3 +#define C_DHWDRMETH_NONE 1 +#define C_DHWDRMETH_SCHED 2 #define C_PVMODCH_STD 1 #define C_PVMODCH_PRM 2 #define C_PVMODCH_THF 3 @@ -536,8 +624,8 @@ typedef float RANC; #define C_IVLCH_M 2 #define C_IVLCH_D 3 #define C_IVLCH_H 4 -#define C_IVLCH_HS 5 -#define C_IVLCH_S 6 +#define C_IVLCH_S 5 +#define C_IVLCH_HS 6 #define C_RPTYCH_ERR 1 #define C_RPTYCH_LOG 2 #define C_RPTYCH_INP 3 @@ -553,6 +641,7 @@ typedef float RANC; #define C_RPTYCH_TUSIZE 13 #define C_RPTYCH_TULOAD 14 #define C_RPTYCH_DHWMTR 15 +#define C_RPTYCH_AFMTR 16 #define C_RPTHDCH_NO 1 #define C_RPTHDCH_YES 2 #define C_RPTHDCH_YESIF 3 @@ -584,6 +673,19 @@ typedef float RANC; #define C_ENDUSECH_USR2 22 #define C_ENDUSECH_BT 23 #define C_ENDUSECH_PV 24 +#define C_AFCAT_INFEX 1 +#define C_AFCAT_VNTEX 2 +#define C_AFCAT_FANEX 3 +#define C_AFCAT_INFUZ 4 +#define C_AFCAT_VNTUZ 5 +#define C_AFCAT_FANUZ 6 +#define C_AFCAT_INFCZ 7 +#define C_AFCAT_VNTCZ 8 +#define C_AFCAT_FANCZ 9 +#define C_AFCAT_DUCTLK 10 +#define C_AFCAT_HVAC 11 +#define C_AFCAT_NONE 12 +#define C_AFCAT_COUNT 13 #define C_HDAYCASECH_FIRST 1 #define C_HDAYCASECH_SECOND 2 #define C_HDAYCASECH_THIRD 3 @@ -656,15 +758,15 @@ typedef float RANC; #define C_DIFFSAMECH_SAME 2 -/* Number-Choice data type CHOICE VALUES + /* Number-Choice data type CHOICE VALUES - These are used with "choicn" data types that can hold a (float) number - or a choice. They differ from choicb indeces in that hi bits have - been added so as to form a NAN when stored in the hi word of a float. - See cnglob.h for a macro (CHN(n)) to fetch the appropriate part of - a float and cast it for comparison to these constants. + These are used with "choicn" data types that can hold a (float) number + or a choice. They differ from choicb indeces in that hi bits have + been added so as to form a NAN when stored in the hi word of a float. + See cnglob.h for a macro (CHN(n)) to fetch the appropriate part of + a float and cast it for comparison to these constants. - The names in these defines are C__ */ + The names in these defines are C__ */ #define C_AHSCHVC_OFF 0x7f81 #define C_AHSCHVC_ON 0x7f82 @@ -683,9 +785,21 @@ typedef float RANC; #define C_OFFAVAILONVC_ON 0x7f83 #define C_VENTAVAILVC_NONE 0x7f81 #define C_VENTAVAILVC_WHOLEBLDG 0x7f82 -#define C_VENTAVAILVC_RSYSOAV 0x7f83 +#define C_VENTAVAILVC_ZONAL 0x7f83 +#define C_VENTAVAILVC_RSYSOAV 0x7f84 #define C_BATCTRLALGVC_DEFAULT 0x7f81 #define C_BATCTRLALGVC_TDVPEAKSAVE 0x7f82 +#define C_DHWDRSIG_ON 0x7f81 +#define C_DHWDRSIG_TOO 0x7f82 +#define C_DHWDRSIG_TOOLOR 0x7f83 +#define C_DHWDRSIG_TOOLOC 0x7f84 +#define C_DHWDRSIG_TOT 0x7f85 +#define C_DHWDRSIG_TOTLOR 0x7f86 +#define C_DHWDRSIG_TOTLOC 0x7f87 +#define C_DHWDRSIG_LOC 0x7f88 +#define C_DHWDRSIG_LOR 0x7f89 +#define C_DHWDRSIG_LOCLOR 0x7f8a +#define C_DHWDRSIG_COUNT 0x7f8b #define C_TSCMNC_RA 0x7f81 #define C_TSCMNC_WZ 0x7f82 #define C_TSCMNC_CZ 0x7f83 @@ -693,13 +807,13 @@ typedef float RANC; #define C_TSCMNC_ZN2 0x7f85 #define C_RANC_RA 0x7f81 -// end of choice definitions + // end of choice definitions -/* units definitions automatically generated by rcdef.exe. */ + /* units definitions automatically generated by rcdef.exe. */ -/* Unit systems */ + /* Unit systems */ #define UNSYSIP 0 #define UNSYSSI 1 @@ -708,7 +822,7 @@ typedef float RANC; These are for .untype for fields (srd.h) as well as general use. They are subscripts into Untab (untab.cpp); also generated by rcdef. - Untab is of type UNIT (srd.h) and contains a text and a conversion + Untab is of type UNIT (srd.h) and contains a text and a conversion factor for each of the 2 unit systems. */ #define UNNONE 0 @@ -718,76 +832,79 @@ typedef float RANC; #define UNENERGY 4 #define UNENERGY1 5 #define UNENERGY2 6 -#define UNENERGYDEN 7 -#define UNELPWR1 8 -#define UNELPWR2 9 -#define UNPOWER 10 -#define UNPOWER1 11 -#define UNPOWER2 12 -#define UNPOWER3 13 -#define UNPOWER4 14 -#define UNPOWER5 15 -#define UNBHP 16 -#define UNLENGTH 17 -#define UNLENGTH2 18 -#define UNLENGTH3 19 -#define UNAREA 20 -#define UNAREA2 21 -#define UNVOLUME 22 -#define UNANGLE 23 -#define UNPOWERDEN 24 -#define UNWATTDEN 25 -#define UNPOWERDEN2 26 -#define UNDENPOWER 27 -#define UNELECDEN 28 -#define UNANNUSE 29 -#define UNDENSITY 30 -#define UNDENSITY2 31 -#define UNSPECHEAT 32 -#define UNHEATCAP 33 -#define UNHEATCAP_AREA 34 -#define UNHEATCAP_VOL 35 -#define UNENTH 36 -#define UNUVAL 37 -#define UNCNDVY 38 -#define UNUA 39 -#define UNRVAL 40 -#define UNRESVY 41 -#define UNF2 42 -#define UNAIRCHANGE 43 -#define UNELA 44 -#define UNAIRFLOW 45 -#define UNMFLOW 46 -#define UNPRESAIR 47 -#define UNPRESH2O 48 -#define UNH2OFLOW 49 -#define UNVELOCITY 50 -#define UNHOURS 51 -#define UNLATITUDE 52 -#define UNLONGITUDE 53 -#define UNPITCH 54 -#define UNWINDVEL 55 -#define UNLVOLUME 56 -#define UNTON 57 -#define UNCFMXPOW 58 -#define UNGPMXPOW 59 -#define UNCFMPSF 60 -#define UNGPMPSF 61 -#define UNCOST 62 -#define UNCOSTF 63 -#define UNCOSTSF 64 -#define UNWXFLOW 65 -#define UNEER 66 -#define UNTIME 67 -#define UNTIME2 68 -#define UNTIME3 69 - -// end of units definitions - - -// Limit definitions -// These specify the type of limit checking, e.g. for cvpak.cpp functions. -// There is no limits table. +#define UNENERGY3 7 +#define UNENERGY4 8 +#define UNENERGYDEN 9 +#define UNELPWR1 10 +#define UNELPWR2 11 +#define UNPOWER 12 +#define UNPOWER1 13 +#define UNPOWER2 14 +#define UNPOWER3 15 +#define UNPOWER4 16 +#define UNPOWER5 17 +#define UNBHP 18 +#define UNLENGTH 19 +#define UNLENGTH2 20 +#define UNLENGTH3 21 +#define UNAREA 22 +#define UNAREA2 23 +#define UNVOLUME 24 +#define UNANGLE 25 +#define UNPOWERDEN 26 +#define UNWATTDEN 27 +#define UNPOWERDEN2 28 +#define UNDENPOWER 29 +#define UNELECDEN 30 +#define UNANNUSE 31 +#define UNDENSITY 32 +#define UNDENSITY2 33 +#define UNSPECHEAT 34 +#define UNHEATCAP 35 +#define UNHEATCAP_AREA 36 +#define UNHEATCAP_VOL 37 +#define UNENTH 38 +#define UNUVAL 39 +#define UNCNDVY 40 +#define UNUA 41 +#define UNRVAL 42 +#define UNRESVY 43 +#define UNF2 44 +#define UNAIRCHANGE 45 +#define UNELA 46 +#define UNAIRFLOW 47 +#define UNMFLOW 48 +#define UNPRESAIR 49 +#define UNPRESH2O 50 +#define UNH2OFLOW 51 +#define UNVELOCITY 52 +#define UNHOURS 53 +#define UNLATITUDE 54 +#define UNLONGITUDE 55 +#define UNPITCH 56 +#define UNWINDVEL 57 +#define UNLVOLUME 58 +#define UNLVOLUME2 59 +#define UNTON 60 +#define UNCFMXPOW 61 +#define UNGPMXPOW 62 +#define UNCFMPSF 63 +#define UNGPMPSF 64 +#define UNCOST 65 +#define UNCOSTF 66 +#define UNCOSTSF 67 +#define UNWXFLOW 68 +#define UNEER 69 +#define UNTIME 70 +#define UNTIME2 71 +#define UNTIME3 72 + + // end of units definitions + + + // Limit definitions + // These specify the type of limit checking, e.g. for cvpak.cpp functions. + // There is no limits table. #define LMNONE 0 #define LMFR 1 @@ -810,20 +927,20 @@ typedef float RANC; COMMENTS OBSOLETE FOR CSE: rcdef revisions required. The record type allows access to the record descriptor in Rcdtab. - The rctype is stored in the first word of every record and is extensively + The rctype is stored in the first word of every record and is extensively used by routines in rcpak.cpp and via macros defined in rcpak.h. - + Each name consists of "RT" and the given in records.def. Each record type value consists of an Rcdtab offset plus hi bits (rcpak.h): (no bits left in CN, 21-1-91) - The low order bits (mask RCTMASK) are an offset into the pointer table - at the start of Rcdtab (cpdbinit.cpp); the accessed pointer points to an + The low order bits (mask RCTMASK) are an offset into the pointer table + at the start of Rcdtab (cpdbinit.cpp); the accessed pointer points to an RCD (rcpak.h) containing record and field information. - The offset is determined by the record handle specified in - records.def; these should not be changed as existing saved files + The offset is determined by the record handle specified in + records.def; these should not be changed as existing saved files (as well as compiled code) would be invalidated. */ #define RTNONE 0000 @@ -833,108 +950,67 @@ typedef float RANC; #define RTPYCUBIC2 0x8004 #define RTPYBIQUAD 0x8005 #define RTPY4 0x8006 -#define RTWFILE 0x2007 -#define RTWDHR 0x8008 -#define RTWFDATA 0x2009 -#define RTDESCOND 0x200a -#define RTSURFGEOM 0x800b -#define RTSHADEX 0x200c -#define RTSGDIST 0x800d -#define RTHCI 0x800e -#define RTSGTARG 0x800f -#define RTSBCBASE 0xc010 -#define RTSBC 0x8011 -#define RTXSURF 0x8012 -#define RTPRI 0x2013 -#define RTSFI 0x2014 -#define RTXSRAT 0x2015 -#define RTWSHADRAT 0x2016 -#define RTMASSBC 0x8017 -#define RTMSRAT 0x2018 -#define RTKIVA 0x2019 -#define RTSGI 0x201a -#define RTSGRAT 0x601b -#define RTGT 0x201c -#define RTCON 0x201d -#define RTLR 0x201e -#define RTMAT 0x201f -#define RTFOUNDATION 0x2020 -#define RTFNDBLOCK 0x2021 -#define RTRFI 0x2022 -#define RTRI 0x2023 -#define RTCOL 0x2024 -#define RTDVRI 0x6025 -#define RTIMPF 0x2026 -#define RTIFFNM 0x2027 -#define RTAUSZ 0x8028 -#define RTCONVERGER 0x8029 -#define RTAIRSTATE 0x802a -#define RTAIRFLOW 0x802b -#define RTFAN 0x802c -#define RTZNISUB 0x802d -#define RTZNI 0x202e -#define RTZNR 0x202f -#define RTZNRES_IVL_SUB 0x8030 -#define RTZNRES_SUB 0x8031 -#define RTZNRES 0x2032 -#define RTANDAT 0x8033 -#define RTIZXRAT 0x2034 -#define RTAIRNET 0xc035 -#define RTDBC 0x8036 -#define RTDUCTSEG 0x2037 -#define RTRSYS 0x2038 -#define RTRSYSRES_IVL_SUB 0x8039 -#define RTRSYSRES_SUB 0x803a -#define RTRSYSRES 0x203b -#define RTDHWMTR_IVL 0x803c -#define RTDHWMTR 0x203d -#define RTDHWSYS 0x203e -#define RTDHWHEATER 0x203f -#define RTDHWHEATREC 0x2040 -#define RTDHWTANK 0x2041 -#define RTDHWPUMP 0x2042 -#define RTDHWLOOP 0x2043 -#define RTPIPESEG 0x2044 -#define RTDHWLOOPSEG 0x2045 -#define RTDHWLOOPBRANCH 0x2046 -#define RTDHWLOOPPUMP 0x2047 -#define RTDHWDAYUSE 0x2048 -#define RTDHWUSE 0x2049 -#define RTPVARRAY 0x204a -#define RTBATTERY 0x204b -#define RTGAIN 0x204c -#define RTMTR_IVL_SUB 0x804d -#define RTMTR 0x204e -#define RTHDAY 0x204f -#define RTCOIL 0x8050 -#define RTCOOLCOIL 0x8051 -#define RTHEATCOIL 0x8052 -#define RTAHHEATCOIL 0x8053 -#define RTCCH 0x8054 -#define RTAH 0x2055 -#define RTAHRES_IVL_SUB 0x8056 -#define RTAHRES 0x2057 -#define RTTU 0x2058 -#define RTZHX 0x2059 -#define RTPUMP 0x805a -#define RTHEATPLANT 0x205b -#define RTBOILER 0x205c -#define RTCOOLPLANT 0x205d -#define RTCHILLER 0x205e -#define RTTOWERPLANT 0x205f - -// end of record type definitions - - - -/* Record class and substruct typedefs - - These are here to put the typedefs in all compilations (dtypes.h is - included in cnglob.h) so function prototypes and external variable - declarations using the types will always compile. - - (Note: this section of dtypes.h is generated from information in - records.def, not dtypes.def.) */ +#define RTINVERSE 0x2007 +#define RTWFILE 0x2008 +#define RTWDHR 0x8009 +#define RTWFDATA 0x200a +#define RTDESCOND 0x200b +#define RTSURFGEOM 0x800c +#define RTSHADEX 0x200d +#define RTSGDIST 0x800e +#define RTHCI 0x800f +#define RTSGTARG 0x8010 +#define RTSBCBASE 0xc011 +#define RTSBC 0x8012 +#define RTXSURF 0x8013 +#define RTPRI 0x2014 +#define RTSFI 0x2015 +#define RTXSRAT 0x2016 +#define RTWSHADRAT 0x2017 +#define RTMASSBC 0x8018 +#define RTMSRAT 0x2019 +#define RTKIVA 0x201a +#define RTSGI 0x201b +#define RTSGRAT 0x601c +#define RTGT 0x201d +#define RTCON 0x201e +#define RTLR 0x201f +#define RTMAT 0x2020 +#define RTFOUNDATION 0x2021 +#define RTFNDBLOCK 0x2022 +#define RTRFI 0x2023 +#define RTRI 0x2024 +#define RTCOL 0x2025 +#define RTDVRI 0x6026 +#define RTIMPF 0x2027 +#define RTIFFNM 0x2028 +#define RTAUSZ 0x8029 +#define RTCONVERGER 0x802a +#define RTAIRSTATE 0x802b +#define RTAIRFLOW 0x802c +#define RTFAN 0x802d +#define RTZNISUB 0x802e +#define RTZNI 0x202f +#define RTZNR 0x2030 +#define RTZNRES_IVL_SUB 0x8031 +#define RTZNRES_SUB 0x8032 +#define RTZNRES 0x2033 +#define RTANDAT 0x8034 +#define RTIZXRAT 0x2035 +#define RTAIRNET 0xc036 + + // end of record type definitions + + + + /* Record class and substruct typedefs + + These are here to put the typedefs in all compilations (dtypes.h is + included in cnglob.h) so function prototypes and external variable + declarations using the types will always compile. + + (Note: this section of dtypes.h is generated from information in + records.def, not dtypes.def.) */ class TOPRAT; struct PYLINEAR; @@ -942,6 +1018,7 @@ struct PYCUBIC; struct PYCUBIC2; struct PYBIQUAD; struct PY4; +class INVERSE; class WFILE; struct WDHR; class WFDATA; @@ -989,47 +1066,5 @@ class ZNRES; struct ANDAT; class IZXRAT; struct AIRNET; -struct DBC; -class DUCTSEG; -class RSYS; -struct RSYSRES_IVL_SUB; -struct RSYSRES_SUB; -class RSYSRES; -struct DHWMTR_IVL; -class DHWMTR; -class DHWSYS; -class DHWHEATER; -class DHWHEATREC; -class DHWTANK; -class DHWPUMP; -class DHWLOOP; -class PIPESEG; -class DHWLOOPSEG; -class DHWLOOPBRANCH; -class DHWLOOPPUMP; -class DHWDAYUSE; -class DHWUSE; -class PVARRAY; -class BATTERY; -class GAIN; -struct MTR_IVL_SUB; -class MTR; -class HDAY; -struct COIL; -struct COOLCOIL; -struct HEATCOIL; -struct AHHEATCOIL; -struct CCH; -class AH; -struct AHRES_IVL_SUB; -class AHRES; -class TU; -class ZHX; -struct PUMP; -class HEATPLANT; -class BOILER; -class COOLPLANT; -class CHILLER; -class TOWERPLANT; // end of dtypes.h diff --git a/test/205Test.cse b/test/205Test.cse index 4dea8eeee..0fb542585 100644 --- a/test/205Test.cse +++ b/test/205Test.cse @@ -1246,25 +1246,20 @@ SURFACE "Attic-atc-rfT3" sfExCnd = "Adiabatic" EQUIPDATA "Constant-Eff-AC" - edFilePath = "DX-Constant-Efficiency.RS0004.a205.cbor" - edExpectedRS = "RS0004" + edFilePath = "Unitary-Constant-Efficiency.RS0002.a205.cbor" + edExpectedRS = RS0002 edDoValidation = YES RSYS "rsys-Central HVAC" - rsType = ASHP + rsType = ACFURNACE rsRep205 = "Constant-Eff-AC" AUTOSIZE rsCapC + AUTOSIZE rsCapH rsFxCapC = 1.1 - rsSEER = 14 - rsEER = 12.2 rsVfPerTon = 350 rsFanPwrH = 0.58 rsFanPwrC = 0.58 - rsCap47 = 20000 rsCap17 = 18000 rsHSPF = 8.7 - rsCapAuxH = 25000 - - rsFxCapH = 1.5 rsElecMtr = "MtrElec" rsFuelMtr = "MtrNatGas" diff --git a/test/DX-Constant-Efficiency.RS0004.a205.cbor b/test/Unitary-Constant-Efficiency.RS0002.a205.cbor similarity index 54% rename from test/DX-Constant-Efficiency.RS0004.a205.cbor rename to test/Unitary-Constant-Efficiency.RS0002.a205.cbor index 0d7526fe513c95238f4f6f1460272398bf57fc8a..27455170e60b3f64bb01283d39676bee291c6c9b 100644 GIT binary patch delta 307 zcmXYtu};G<7=(qyM0bRkA|b?pQaNr)6SgD+9gr%a1|$~Caek{-VmsIlG!xH|y%XKo zcn=;1@dP9l+ug5Eclz)5^yhrC-$-z@q>g^}-o-UmmTf>%@(RWZtpH8&6jdcyW<=wL z%l0Z)!co)p>q}8E9u?6%_HPz+=7*Sve#E2F4`IHbJYbAttj2KSgaqrTY+f)5VjsnR zFk2&Zi_mj@0R9V)s)Mt-H4H?ir4-Hq^xwPpk6KdIa>`t5z-*E<^OlcER!dz%O;jrj zFg*8?G{99eNNon5!Cnr%sw_Iv=r=GYHK%HjR*c`&>HX@7td|d~{BF5DE4RdU)`27j Q8Uq%Tqa!x1^mVKzfBr0Ss{jB1 delta 9 Qcmew$^+{~=KgJ?%02tH+LI3~& diff --git a/test/ref/1ZATTIC.REP b/test/ref/1ZATTIC.REP index f0ed5b91e..21b5f182e 100644 --- a/test/ref/1ZATTIC.REP +++ b/test/ref/1ZATTIC.REP @@ -60,7 +60,7 @@ Monthly Energy Balance, zone "Z1" ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 1 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 1 @@ -123,7 +123,7 @@ Hourly Energy Balance, zone "Z1", Fri 04-Jan ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 2 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 2 @@ -186,7 +186,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 2q 68.00 59.56 -0.000 0 0 0 .00005 -.0001 1 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 3 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 3 @@ -249,7 +249,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 4i 66.63 58.57 -0.000 0 0 0 .00004 -0.000 1 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 4 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 4 @@ -312,7 +312,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 6a 65.03 57.91 -0.000 0 0 0 .00002 -0.000 1 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 5 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 5 @@ -375,7 +375,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 7x 64.74 57.81 -0.000 0 .0001 0 -0.000 -0.000 1 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 6 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 6 @@ -438,7 +438,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 9p 66.13 59.45 -0.000 0 .0001 0 -.0001 -0.000 1 0 0 0 0 .00001 -0.000 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 7 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 7 @@ -501,7 +501,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 11h 68.59 61.71 0 0 0 0 -.0001 .00001 1 0 0 0 0 .00001 -0.000 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 8 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 8 @@ -564,7 +564,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 12 71.16 63.43 0 0 .0013 .0004 -.0029 .00128 0 0 0 0 .00008 -.0001 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 9 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 9 @@ -627,7 +627,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 14w 74.58 63.40 .00001 0 0 0 .00005 .00011 1 -.0002 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 10 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 10 @@ -690,7 +690,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 16o 74.67 63.26 .00001 0 .0001 0 .00008 .00015 1 -.0003 0 0 0 .00001 -0.000 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 11 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 11 @@ -753,7 +753,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 18g 74.75 63.93 .00001 0 .0001 0 .00009 .00014 1 -.0003 0 0 0 -0.000 .00001 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 12 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 12 @@ -816,7 +816,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 19ad 74.79 61.77 .00001 0 0 0 .00008 .00011 1 -.0002 0 0 0 -0.000 .00001 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 13 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 13 @@ -879,7 +879,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 21v 74.88 62.32 0 0 0 0 .00003 .00002 1 -.0001 0 0 0 .00001 -0.000 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 14 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 14 @@ -942,7 +942,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul 23n 74.63 63.55 -0.000 0 0 0 .00003 -0.000 1 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 15 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 15 @@ -1005,7 +1005,7 @@ Hourly and Subhourly Energy Balance, zone "Z1", Fri 26-Jul ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 16 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 16 @@ -1068,7 +1068,7 @@ Yr 3.504 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 17 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 17 @@ -1131,7 +1131,7 @@ Subhourly User-defined Report, Mon 10-Jun 1 69.152 3.523 73.355 73.102 1.000 2.155 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 18 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 18 @@ -1194,7 +1194,7 @@ Subhourly User-defined Report, Mon 10-Jun 3 65.408 3.523 71.864 71.77 1.000 2.926 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 19 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 19 @@ -1257,7 +1257,7 @@ Subhourly User-defined Report, Mon 10-Jun 5 62.672 3.099 69.962 70.135 1.000 3.742 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 20 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 20 @@ -1320,7 +1320,7 @@ Subhourly User-defined Report, Mon 10-Jun 6 63.5 3.3 69.63 70.526 1.000 2.935 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 21 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 21 @@ -1383,7 +1383,7 @@ Subhourly User-defined Report, Mon 10-Jun 8 71.708 4.629 71.791 72.354 1.000 7.103 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 22 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 22 @@ -1446,7 +1446,7 @@ Subhourly User-defined Report, Mon 10-Jun 10 78.116 3.982 74.458 74.928 0 3.705 -2.31k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 23 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 23 @@ -1509,7 +1509,7 @@ Subhourly User-defined Report, Mon 10-Jun 12 83.48 3.87 74.542 75.566 0 4.229 -5.41k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 24 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 24 @@ -1572,7 +1572,7 @@ Subhourly User-defined Report, Mon 10-Jun 14 87.116 3.39 74.625 75.992 0 4.246 -7.29k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 25 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 25 @@ -1635,7 +1635,7 @@ Subhourly User-defined Report, Mon 10-Jun 15 87.98 3.915 74.667 76.384 0 4.561 -8.87k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 26 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 26 @@ -1698,7 +1698,7 @@ Subhourly User-defined Report, Mon 10-Jun 17 87.044 3.322 74.75 76.4 0 4.017 -7.88k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 27 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 27 @@ -1761,7 +1761,7 @@ Subhourly User-defined Report, Mon 10-Jun 19 84.632 3.109 74.833 75.448 0 3.477 -3.98k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 28 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 28 @@ -1824,7 +1824,7 @@ Subhourly User-defined Report, Mon 10-Jun 21 79.16 2.27 74.917 75.09 0 2.310 -1.35k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 29 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 29 @@ -1887,7 +1887,7 @@ Subhourly User-defined Report, Mon 10-Jun 23 74.948 2.27 74.998 74.825 1.000 2.754 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 30 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 30 @@ -1950,7 +1950,7 @@ Subhourly User-defined Report, Tue 11-Jun 0 69.62 0.436 73.918 73.895 1.000 3.358 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 31 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 31 @@ -2013,7 +2013,7 @@ Subhourly User-defined Report, Tue 11-Jun 2 65.804 1.096 72.278 72.349 1.000 4.298 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 32 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 32 @@ -2076,7 +2076,7 @@ Subhourly User-defined Report, Tue 11-Jun 4 61.592 1.007 69.493 69.801 1.000 4.969 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 33 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 33 @@ -2139,7 +2139,7 @@ Subhourly User-defined Report, Tue 11-Jun 6 62.78 1.062 68.105 68.834 1.000 3.767 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 34 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 34 @@ -2202,7 +2202,7 @@ Subhourly User-defined Report, Tue 11-Jun 7 69.62 0.125 70.088 71.118 1.000 0.834 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 35 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 35 @@ -2265,7 +2265,7 @@ Subhourly User-defined Report, Tue 11-Jun 9 78.548 1.242 73.366 74.064 0 2.419 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 36 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 36 @@ -2328,7 +2328,7 @@ Subhourly User-defined Report, Tue 11-Jun 11 86.108 1.89 74.5 75.63 0 3.430 -5.73k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 37 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 37 @@ -2391,7 +2391,7 @@ Subhourly User-defined Report, Tue 11-Jun 13 90.032 1.599 74.583 76.013 0 3.723 -7.67k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 38 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 38 @@ -2454,7 +2454,7 @@ Subhourly User-defined Report, Tue 11-Jun 15 92.3 1.88 74.667 76.514 0 3.925 -9.63k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 39 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 39 @@ -2517,7 +2517,7 @@ Subhourly User-defined Report, Tue 11-Jun 16 92.84 1.732 74.708 76.677 0 3.754 -9.79k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 40 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 40 @@ -2580,7 +2580,7 @@ Subhourly User-defined Report, Tue 11-Jun 18 92.876 1.554 74.792 76.21 0 3.411 -7.75k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 41 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 41 @@ -2643,7 +2643,7 @@ Subhourly User-defined Report, Tue 11-Jun 20 83.84 1.522 74.875 75.375 0 2.564 -2.9k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 42 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 42 @@ -2706,7 +2706,7 @@ Subhourly User-defined Report, Tue 11-Jun 22 68.648 2.428 74.638 74.682 1.000 3.572 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 43 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 43 @@ -2769,7 +2769,7 @@ Subhourly User-defined Report, Wed 12-Jun ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 44 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 44 @@ -2832,7 +2832,7 @@ Subhourly User-defined Report, Wed 12-Jun 1 58.892 1.399 68.091 68.615 1.000 5.454 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 45 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 45 @@ -2895,7 +2895,7 @@ Subhourly User-defined Report, Wed 12-Jun 3 55.22 1.643 66.522 66.544 0 2.082 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 46 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 46 @@ -2958,7 +2958,7 @@ Subhourly User-defined Report, Wed 12-Jun 5 53.564 1.589 64.75 64.812 0 2.054 1010.42 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 47 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 47 @@ -3021,7 +3021,7 @@ Subhourly User-defined Report, Wed 12-Jun 7 56.372 1.554 64.925 65.857 0 1.722 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 48 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 48 @@ -3084,7 +3084,7 @@ Subhourly User-defined Report, Wed 12-Jun 8 64.58 1.79 66.886 67.887 0 1.732 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 49 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 49 @@ -3147,7 +3147,7 @@ Subhourly User-defined Report, Wed 12-Jun 10 72.428 2.059 69.554 70.171 0 2.602 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 50 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 50 @@ -3210,7 +3210,7 @@ Subhourly User-defined Report, Wed 12-Jun 12 77.504 2.417 72.962 73.435 0 3.083 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 51 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 51 @@ -3273,7 +3273,7 @@ Subhourly User-defined Report, Wed 12-Jun 14 81.932 2.651 74.625 75.741 0 3.495 -4.85k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 52 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 52 @@ -3336,7 +3336,7 @@ Subhourly User-defined Report, Wed 12-Jun 16 83.696 3.054 74.708 76.347 0 3.786 -6.91k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 53 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 53 @@ -3399,7 +3399,7 @@ Subhourly User-defined Report, Wed 12-Jun 17 81.32 2.965 74.75 76.183 0 3.381 -5.53k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 54 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 54 @@ -3462,7 +3462,7 @@ Subhourly User-defined Report, Wed 12-Jun 19 76.064 2.204 74.833 75.199 0 2.067 -1.33k ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 55 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 55 @@ -3525,7 +3525,7 @@ Subhourly User-defined Report, Wed 12-Jun 21 66.164 2.572 73.964 74.134 1.000 4.365 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 56 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 56 @@ -3588,7 +3588,7 @@ Subhourly User-defined Report, Wed 12-Jun 23 60.548 2.013 70.575 71.098 1.000 5.591 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 57 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 57 @@ -3651,7 +3651,7 @@ Subhourly User-defined Report, Wed 12-Jun ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 58 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 58 @@ -3714,7 +3714,7 @@ Hourly User-defined Report, Wed 06-Mar 3 53.96 53.96 52.838 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 59 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 59 @@ -3777,7 +3777,7 @@ Hourly User-defined Report, Fri 08-Mar 3 52.34 52.34 52.848 58.856 92.993 0 0 0 0 0 1999.32 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 60 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 60 @@ -3840,7 +3840,7 @@ Hourly User-defined Report, Fri 08-Mar ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 61 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 61 @@ -3903,7 +3903,7 @@ Mass CbJ Area: 465.012 UNom: 0.02888 tc: 0.60 subhrly: ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 62 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 62 @@ -3966,7 +3966,7 @@ IzXfer SxA Zn1: Z1 Zn2: Attic UAconst: 0 NVctrl: AirNetIZ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 63 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 63 @@ -4029,7 +4029,7 @@ Mass RDw Area: 130.139 UNom: 0.6162 tc: 1.10 subhrly: Outside: Ambient RSrfNom: 0.17 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 64 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 64 @@ -4092,7 +4092,7 @@ IzXfer AX2 Zn1: Attic Zn2: (ambient) UAconst: 0 NVctrl: AirN ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 65 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 65 @@ -4104,7 +4104,7 @@ IzXfer AX2 Zn1: Attic Zn2: (ambient) UAconst: 0 NVctrl: AirN ! Log for Run 001: ################ -! CSE 0.893.0 for Win32 console Tue 22-Jun-21 11:09:34 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console Wed 27-Oct-21 9:50:19 am ================ @@ -4155,7 +4155,7 @@ tilt theta ta<=ts ta>ts theta ta<=ts ta>ts 20 -70 0.112 0.160 70 0.160 0.112 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 66 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 66 @@ -4218,7 +4218,7 @@ Surface 'RDTe': tilt=23 wf=1.000 uf=1.467 rf=1.000 lf=0.631 vf=0.181 fcWind=0.100 fcWind2=8.501 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 67 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 67 @@ -4281,7 +4281,7 @@ Z1 CZ: anMCp/T[ 0]=54.48/4050.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2326545.31 Dair=31015.09 Nrad=108064.24 Drad=1439.13 CX=553.74 airX=5.703 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 68 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 68 @@ -4344,7 +4344,7 @@ Z1 CZ: anMCp/T[ 0]=52.61/3893.5 anMCp/T[ 1]=53.95/3992.3 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.170 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 69 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 69 @@ -4407,7 +4407,7 @@ Attic UZ: anMCp/T[ 0]=142.07/10483.6 anMCp/T[ 1]=142.76/10534.6 ventUt=0 Nair=86372.41 Dair=1075.88 Nrad=82309.00 Drad=917.44 CX=616.50 airX=12.116 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 70 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 70 @@ -4470,7 +4470,7 @@ Attic UZ: anMCp/T[ 0]=140.53/10337.7 anMCp/T[ 1]=140.98/10371.3 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 71 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 71 @@ -4533,7 +4533,7 @@ Wed 10-Jul hr=0 subhr=13 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 72 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 72 @@ -4561,7 +4561,7 @@ Wed 10-Jul hr=0 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.544 mwDuctLk=0.000 mwSys=0.000 tdb=74.04 airX=0.856 dryAirMass=247.87 XLGain=0.00 W=0.012345 twb=62.76 rh=0.5621 Z1 CZ: anMCp/T[ 0]=51.68/3756.2 anMCp/T[ 1]=102.54/7452.5 ventUt=1 - Nair=2300255.71 Dair=31057.37 Nrad=106112.54 Drad=1424.73 CX=564.20 airX=5.656 + Nair=2300255.72 Dair=31057.37 Nrad=106112.53 Drad=1424.73 CX=564.20 airX=5.656 TH=64.96 TD=68.00 TC=74.04 qhCap=20000 qcCap=-34000 ta=74.04 tr=74.35 qIzSh=-70 fvent=0.000 pz0=-0.0014 qsHvac=-893 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.869 mwDuctLk=0.000 mwSys=0.000 @@ -4596,7 +4596,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.534 mwDuctLk=0.000 mwSys=0.000 tdb=74.04 airX=0.853 dryAirMass=247.88 XLGain=0.00 W=0.012325 twb=62.73 rh=0.5613 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 73 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 73 @@ -4659,7 +4659,7 @@ Z1 CZ: anMCp/T[ 0]=50.86/3666.3 anMCp/T[ 1]=127.09/9160.6 ventUt=1 TH=64.96 TD=68.00 TC=74.04 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 74 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 74 @@ -4722,7 +4722,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.670 mwDuctLk=0.000 mwSys=0.000 tdb=79.85 airX=11.379 dryAirMass=48.40 XLGain=0.00 W=0.012114 twb=64.22 rh=0.4560 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 75 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 75 @@ -4785,7 +4785,7 @@ Attic UZ: anMCp/T[ 0]=132.76/9608.2 anMCp/T[ 1]=133.05/9630.0 ventUt=0 ta=79.35 tr=83.30 qIzSh=-926 fvent=0.000 pz0=-0.0104 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 76 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 76 @@ -4848,7 +4848,7 @@ Attic UZ: anMCp/T[ 0]=131.47/9485.8 anMCp/T[ 1]=131.82/9511.5 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 77 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 77 @@ -4911,7 +4911,7 @@ Wed 10-Jul hr=1 subhr=2 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 78 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 78 @@ -4974,7 +4974,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.940 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=61.26/4315.8 anMCp/T[ 1]=181.85/12810.8 ventUt=1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 79 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 79 @@ -5037,7 +5037,7 @@ Z1 CZ: anMCp/T[ 0]=63.03/4427.0 anMCp/T[ 1]=187.16/13144.4 ventUt=1 ta=73.96 tr=73.95 qIzSh=-697 fvent=1.000 pz0=-0.0032 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 80 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 80 @@ -5075,7 +5075,7 @@ Wed 10-Jul hr=1 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.330 mwDuctLk=0.000 mwSys=0.000 tdb=73.93 airX=3.153 dryAirMass=248.04 XLGain=0.00 W=0.012039 twb=62.32 rh=0.5505 Z1 CZ: anMCp/T[ 0]=64.14/4495.5 anMCp/T[ 1]=190.47/13349.7 ventUt=1 - Nair=2274330.73 Dair=30756.29 Nrad=109956.09 Drad=1487.63 CX=474.66 airX=3.153 + Nair=2274330.74 Dair=30756.29 Nrad=109956.09 Drad=1487.63 CX=474.66 airX=3.153 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=73.93 tr=73.92 qIzSh=-732 fvent=1.000 pz0=-0.0032 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.117 mwDuctLk=0.000 mwSys=0.000 @@ -5100,7 +5100,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.088 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=123.50/8838.9 anMCp/T[ 1]=123.90/8868.6 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 81 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 81 @@ -5163,7 +5163,7 @@ Attic UZ: anMCp/T[ 0]=122.20/8731.8 anMCp/T[ 1]=122.61/8762.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 82 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 82 @@ -5201,7 +5201,7 @@ Z1 CZ: anMCp/T[ 0]=67.14/4677.0 anMCp/T[ 1]=199.44/13892.1 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.965 mwDuctLk=0.000 mwSys=0.000 tdb=76.12 airX=10.264 dryAirMass=48.75 XLGain=0.00 W=0.011939 twb=62.86 rh=0.5084 Attic UZ: anMCp/T[ 0]=121.46/8669.8 anMCp/T[ 1]=121.87/8700.5 ventUt=0 - Nair=75679.10 Dair=1021.80 Nrad=73424.37 Drad=894.53 CX=580.61 airX=10.264 + Nair=75679.10 Dair=1021.80 Nrad=73424.36 Drad=894.53 CX=580.61 airX=10.264 ta=76.12 tr=79.73 qIzSh=-576 fvent=1.000 pz0=-0.0084 qsHvac=0 @@ -5226,7 +5226,7 @@ Attic UZ: anMCp/T[ 0]=121.13/8641.6 anMCp/T[ 1]=121.54/8672.5 ventUt=0 Wed 10-Jul hr=1 subhr=18 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 83 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 83 @@ -5289,7 +5289,7 @@ Wed 10-Jul hr=1 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.006 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 84 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 84 @@ -5352,7 +5352,7 @@ Z1 CZ: anMCp/T[ 0]=70.56/4874.0 anMCp/T[ 1]=209.44/14468.3 ventUt=1 Nair=2270344.69 Dair=30808.81 Nrad=108734.53 Drad=1476.42 CX=486.30 airX=3.464 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 85 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 85 @@ -5415,7 +5415,7 @@ Z1 CZ: anMCp/T[ 0]=71.66/4934.6 anMCp/T[ 1]=212.69/14646.7 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.801 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 86 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 86 @@ -5458,7 +5458,7 @@ Z1 CZ: anMCp/T[ 0]=72.34/4971.3 anMCp/T[ 1]=214.72/14755.6 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.785 mwDuctLk=0.000 mwSys=0.000 tdb=74.31 airX=10.018 dryAirMass=48.92 XLGain=0.00 W=0.011821 twb=62.15 rh=0.5340 Attic UZ: anMCp/T[ 0]=118.92/8439.4 anMCp/T[ 1]=119.38/8474.4 ventUt=0 - Nair=73383.66 Dair=1013.83 Nrad=70955.30 Drad=887.94 CX=572.52 airX=10.018 + Nair=73383.67 Dair=1013.83 Nrad=70955.30 Drad=887.94 CX=572.52 airX=10.018 ta=74.31 tr=77.71 qIzSh=-397 fvent=1.000 pz0=-0.0073 qsHvac=0 @@ -5478,7 +5478,7 @@ Attic UZ: anMCp/T[ 0]=117.88/8356.4 anMCp/T[ 1]=118.34/8390.8 ventUt=0 Nair=73088.75 Dair=1011.63 Nrad=70704.09 Drad=886.55 CX=571.00 airX=9.928 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 87 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 87 @@ -5512,7 +5512,7 @@ Wed 10-Jul hr=2 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.742 mwDuctLk=0.000 mwSys=0.000 tdb=73.48 airX=3.673 dryAirMass=248.34 XLGain=0.00 W=0.011816 twb=61.89 rh=0.5489 Z1 CZ: anMCp/T[ 0]=74.75/5115.2 anMCp/T[ 1]=222.18/15204.4 ventUt=1 - Nair=2266427.51 Dair=30835.51 Nrad=108047.82 Drad=1470.49 CX=488.28 airX=3.673 + Nair=2266427.52 Dair=30835.51 Nrad=108047.82 Drad=1470.49 CX=488.28 airX=3.673 TH=64.88 TD=68.00 TC=74.13 qhCap=20000 qcCap=-34000 ta=73.48 tr=73.48 qIzSh=-1121 fvent=1.000 pz0=-0.0034 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.630 mwDuctLk=0.000 mwSys=0.000 @@ -5541,7 +5541,7 @@ Attic UZ: anMCp/T[ 0]=114.86/8115.3 anMCp/T[ 1]=115.29/8147.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 88 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 88 @@ -5604,7 +5604,7 @@ Wed 10-Jul hr=2 subhr=7 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 89 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 89 @@ -5667,7 +5667,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.647 mwDuctLk=0.000 mwSys=0.000 tdb=73.24 airX=3.972 dryAirMass=248.46 XLGain=0.00 W=0.011801 twb=61.79 rh=0.5527 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 90 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 90 @@ -5730,7 +5730,7 @@ Z1 CZ: anMCp/T[ 0]=82.42/5553.2 anMCp/T[ 1]=246.56/16612.3 ventUt=1 TH=64.88 TD=68.00 TC=74.13 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 91 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 91 @@ -5793,7 +5793,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.087 mwDuctLk=0.000 mwSys=0.000 tdb=72.11 airX=8.760 dryAirMass=49.13 XLGain=0.00 W=0.011812 twb=61.46 rh=0.5756 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 92 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 92 @@ -5856,7 +5856,7 @@ Attic UZ: anMCp/T[ 0]=102.89/7133.6 anMCp/T[ 1]=102.86/7131.1 ventUt=0 ta=71.73 tr=74.87 qIzSh=-247 fvent=1.000 pz0=-0.0066 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 93 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 93 @@ -5895,7 +5895,7 @@ Z1 CZ: anMCp/T[ 0]=87.04/5797.3 anMCp/T[ 1]=261.50/17417.7 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.941 mwDuctLk=0.000 mwSys=0.000 tdb=71.48 airX=8.485 dryAirMass=49.19 XLGain=0.00 W=0.011830 twb=61.29 rh=0.5885 Attic UZ: anMCp/T[ 0]=101.75/7038.3 anMCp/T[ 1]=101.65/7030.5 ventUt=0 - Nair=67262.74 Dair=964.95 Nrad=67301.30 Drad=879.35 CX=548.65 airX=8.485 + Nair=67262.74 Dair=964.95 Nrad=67301.31 Drad=879.35 CX=548.65 airX=8.485 ta=71.48 tr=74.59 qIzSh=-235 fvent=1.000 pz0=-0.0065 qsHvac=0 @@ -5912,14 +5912,14 @@ Z1 CZ: anMCp/T[ 0]=87.57/5824.3 anMCp/T[ 1]=263.22/17507.3 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.915 mwDuctLk=0.000 mwSys=0.000 tdb=71.35 airX=8.435 dryAirMass=49.20 XLGain=0.00 W=0.011834 twb=61.26 rh=0.5911 Attic UZ: anMCp/T[ 0]=101.22/6993.1 anMCp/T[ 1]=101.08/6982.7 ventUt=0 - Nair=67025.80 Dair=963.21 Nrad=67146.80 Drad=879.01 CX=547.72 airX=8.435 + Nair=67025.79 Dair=963.21 Nrad=67146.80 Drad=879.01 CX=547.72 airX=8.435 ta=71.35 tr=74.46 qIzSh=-229 fvent=1.000 pz0=-0.0065 qsHvac=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 94 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 94 @@ -5966,7 +5966,7 @@ Wed 10-Jul hr=2 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.072 mwDuctLk=0.000 mwSys=0.000 tdb=72.68 airX=4.428 dryAirMass=248.70 XLGain=0.00 W=0.011845 twb=61.68 rh=0.5655 Z1 CZ: anMCp/T[ 0]=89.11/5901.4 anMCp/T[ 1]=268.21/17762.0 ventUt=1 - Nair=2250758.22 Dair=30951.01 Nrad=105210.50 Drad=1444.48 CX=514.29 airX=4.428 + Nair=2250758.21 Dair=30951.00 Nrad=105210.50 Drad=1444.48 CX=514.29 airX=4.428 TH=64.88 TD=68.00 TC=74.13 qhCap=20000 qcCap=-34000 ta=72.68 tr=72.80 qIzSh=-1733 fvent=1.000 pz0=-0.0058 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.844 mwDuctLk=0.000 mwSys=0.000 @@ -5982,7 +5982,7 @@ Wed 10-Jul hr=2 subhr=26 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 95 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 95 @@ -6045,7 +6045,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.398 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=91.06/5995.3 anMCp/T[ 1]=274.46/18070.4 ventUt=1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 96 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 96 @@ -6069,7 +6069,7 @@ Wed 10-Jul hr=3 subhr=0 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.384 mwDuctLk=0.000 mwSys=0.000 tdb=72.47 airX=4.528 dryAirMass=248.79 XLGain=0.00 W=0.011866 twb=61.64 rh=0.5707 Z1 CZ: anMCp/T[ 0]=91.02/5989.5 anMCp/T[ 1]=274.42/18057.6 ventUt=1 - Nair=2245621.38 Dair=30969.46 Nrad=104613.29 Drad=1439.73 CX=518.87 airX=4.528 + Nair=2245621.39 Dair=30969.46 Nrad=104613.29 Drad=1439.73 CX=518.87 airX=4.528 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=72.47 tr=72.61 qIzSh=-1830 fvent=1.000 pz0=-0.0060 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.712 mwDuctLk=0.000 mwSys=0.000 @@ -6108,7 +6108,7 @@ Z1 CZ: anMCp/T[ 0]=90.94/5977.8 anMCp/T[ 1]=274.32/18031.4 ventUt=1 ta=72.39 tr=72.54 qIzSh=-1826 fvent=1.000 pz0=-0.0060 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 97 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 97 @@ -6171,7 +6171,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.458 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=92.22/6302.3 anMCp/T[ 1]=91.72/6265.5 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 98 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 98 @@ -6206,7 +6206,7 @@ Wed 10-Jul hr=3 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.280 mwDuctLk=0.000 mwSys=0.000 tdb=72.18 airX=4.519 dryAirMass=248.93 XLGain=0.00 W=0.011842 twb=61.52 rh=0.5754 Z1 CZ: anMCp/T[ 0]=90.72/5946.9 anMCp/T[ 1]=273.99/17960.6 ventUt=1 - Nair=2236988.99 Dair=30974.38 Nrad=104029.45 Drad=1436.84 CX=519.62 airX=4.519 + Nair=2236989.00 Dair=30974.38 Nrad=104029.45 Drad=1436.84 CX=519.62 airX=4.519 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=72.18 tr=72.34 qIzSh=-1817 fvent=1.000 pz0=-0.0060 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.357 mwDuctLk=0.000 mwSys=0.000 @@ -6234,7 +6234,7 @@ Attic UZ: anMCp/T[ 0]=89.36/6098.3 anMCp/T[ 1]=88.79/6056.4 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 99 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 99 @@ -6297,7 +6297,7 @@ Attic UZ: anMCp/T[ 0]=86.50/5895.1 anMCp/T[ 1]=85.86/5847.9 ventUt=0 Wed 10-Jul hr=3 subhr=12 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 100 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 100 @@ -6360,7 +6360,7 @@ Wed 10-Jul hr=3 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.157 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 101 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 101 @@ -6423,7 +6423,7 @@ Z1 CZ: anMCp/T[ 0]=90.21/5877.5 anMCp/T[ 1]=273.21/17801.5 ventUt=1 Nair=2223385.35 Dair=30974.61 Nrad=103211.37 Drad=1433.90 CX=518.64 airX=4.502 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 102 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 102 @@ -6486,7 +6486,7 @@ Z1 CZ: anMCp/T[ 0]=90.07/5858.9 anMCp/T[ 1]=273.02/17759.4 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.655 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 103 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 103 @@ -6549,7 +6549,7 @@ Attic UZ: anMCp/T[ 0]=74.30/5034.1 anMCp/T[ 1]=73.30/4961.1 ventUt=0 Nair=58151.07 Dair=878.46 Nrad=62742.25 Drad=870.55 CX=510.60 airX=6.074 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 104 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 104 @@ -6612,7 +6612,7 @@ Attic UZ: anMCp/T[ 0]=71.53/4840.0 anMCp/T[ 1]=70.43/4760.5 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 105 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 105 @@ -6675,7 +6675,7 @@ Wed 10-Jul hr=4 subhr=1 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 106 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 106 @@ -6738,7 +6738,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.890 mwDuctLk=0.000 mwSys=0.000 tdb=71.12 airX=4.461 dryAirMass=249.52 XLGain=0.00 W=0.011602 twb=60.88 rh=0.5841 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 107 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 107 @@ -6801,7 +6801,7 @@ Z1 CZ: anMCp/T[ 0]=88.81/5730.3 anMCp/T[ 1]=270.41/17446.6 ventUt=1 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 108 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 108 @@ -6812,7 +6812,7 @@ Z1 CZ: anMCp/T[ 0]=88.81/5730.3 anMCp/T[ 1]=270.41/17446.6 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.857 mwDuctLk=0.000 mwSys=0.000 tdb=66.54 airX=4.963 dryAirMass=49.66 XLGain=0.00 W=0.011603 twb=59.43 rh=0.6832 Attic UZ: anMCp/T[ 0]=61.49/4146.3 anMCp/T[ 1]=60.04/4042.1 ventUt=0 - Nair=54199.22 Dair=833.25 Nrad=61252.25 Drad=868.54 CX=490.58 airX=4.963 + Nair=54199.21 Dair=833.25 Nrad=61252.25 Drad=868.54 CX=490.58 airX=4.963 ta=66.54 tr=69.08 qIzSh=47 fvent=1.000 pz0=-0.0028 qsHvac=0 @@ -6864,7 +6864,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.709 mwDuctLk=0.000 mwSys=0.000 tdb=66.27 airX=4.703 dryAirMass=49.69 XLGain=0.00 W=0.011598 twb=59.33 rh=0.6892 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 109 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 109 @@ -6927,7 +6927,7 @@ Attic UZ: anMCp/T[ 0]=55.51/3737.3 anMCp/T[ 1]=53.83/3616.5 ventUt=0 ta=66.01 tr=68.48 qIzSh=63 fvent=1.000 pz0=-0.0024 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 110 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 110 @@ -6943,7 +6943,7 @@ Wed 10-Jul hr=4 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.802 mwDuctLk=0.000 mwSys=0.000 tdb=70.75 airX=4.422 dryAirMass=249.71 XLGain=0.00 W=0.011592 twb=60.75 rh=0.5909 Z1 CZ: anMCp/T[ 0]=88.15/5669.2 anMCp/T[ 1]=268.94/17295.7 ventUt=1 - Nair=2191925.44 Dair=30967.45 Nrad=101392.13 Drad=1428.50 CX=512.12 airX=4.422 + Nair=2191925.45 Dair=30967.45 Nrad=101392.13 Drad=1428.50 CX=512.12 airX=4.422 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ta=70.75 tr=70.92 qIzSh=-1731 fvent=1.000 pz0=-0.0058 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.513 mwDuctLk=0.000 mwSys=0.000 @@ -6990,7 +6990,7 @@ Attic UZ: anMCp/T[ 0]=52.57/3536.6 anMCp/T[ 1]=50.76/3407.3 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 111 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 111 @@ -7053,7 +7053,7 @@ Wed 10-Jul hr=4 subhr=20 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 112 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 112 @@ -7063,7 +7063,7 @@ Wed 10-Jul hr=4 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.758 mwDuctLk=0.000 mwSys=0.000 tdb=70.52 airX=4.402 dryAirMass=249.81 XLGain=0.00 W=0.011597 twb=60.69 rh=0.5955 Z1 CZ: anMCp/T[ 0]=87.64/5620.1 anMCp/T[ 1]=267.83/17175.6 ventUt=1 - Nair=2184850.98 Dair=30964.96 Nrad=100992.52 Drad=1427.46 CX=510.95 airX=4.402 + Nair=2184850.98 Dair=30964.96 Nrad=100992.51 Drad=1427.46 CX=510.95 airX=4.402 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ta=70.52 tr=70.69 qIzSh=-1713 fvent=1.000 pz0=-0.0058 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.215 mwDuctLk=0.000 mwSys=0.000 @@ -7080,7 +7080,7 @@ Wed 10-Jul hr=4 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.751 mwDuctLk=0.000 mwSys=0.000 tdb=70.49 airX=4.398 dryAirMass=249.83 XLGain=0.00 W=0.011598 twb=60.68 rh=0.5963 Z1 CZ: anMCp/T[ 0]=87.55/5612.2 anMCp/T[ 1]=267.65/17156.2 ventUt=1 - Nair=2183679.41 Dair=30964.56 Nrad=100926.16 Drad=1427.28 CX=510.75 airX=4.398 + Nair=2183679.42 Dair=30964.56 Nrad=100926.16 Drad=1427.28 CX=510.75 airX=4.398 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ta=70.49 tr=70.65 qIzSh=-1710 fvent=1.000 pz0=-0.0058 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.167 mwDuctLk=0.000 mwSys=0.000 @@ -7097,7 +7097,7 @@ Wed 10-Jul hr=4 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.744 mwDuctLk=0.000 mwSys=0.000 tdb=70.45 airX=4.395 dryAirMass=249.84 XLGain=0.00 W=0.011599 twb=60.67 rh=0.5971 Z1 CZ: anMCp/T[ 0]=87.46/5603.9 anMCp/T[ 1]=267.47/17136.9 ventUt=1 - Nair=2182509.41 Dair=30964.15 Nrad=100859.88 Drad=1427.11 CX=510.56 airX=4.395 + Nair=2182509.42 Dair=30964.15 Nrad=100859.88 Drad=1427.11 CX=510.56 airX=4.395 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ta=70.45 tr=70.62 qIzSh=-1707 fvent=1.000 pz0=-0.0058 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.119 mwDuctLk=0.000 mwSys=0.000 @@ -7116,7 +7116,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.737 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=87.39/5596.3 anMCp/T[ 1]=267.30/17117.7 ventUt=1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 113 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 113 @@ -7179,7 +7179,7 @@ Z1 CZ: anMCp/T[ 0]=87.14/5572.5 anMCp/T[ 1]=266.78/17060.9 ventUt=1 ta=70.30 tr=70.47 qIzSh=-1695 fvent=1.000 pz0=-0.0057 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 114 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 114 @@ -7242,7 +7242,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.781 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=39.88/2678.9 anMCp/T[ 1]=37.36/2499.8 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 115 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 115 @@ -7305,7 +7305,7 @@ Attic UZ: anMCp/T[ 0]=38.12/2558.7 anMCp/T[ 1]=35.49/2372.3 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 116 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 116 @@ -7337,7 +7337,7 @@ Wed 10-Jul hr=5 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.798 mwDuctLk=0.000 mwSys=0.000 tdb=70.03 airX=4.387 dryAirMass=250.03 XLGain=0.00 W=0.011630 twb=60.58 rh=0.6073 Z1 CZ: anMCp/T[ 0]=87.11/5544.7 anMCp/T[ 1]=267.18/17006.0 ventUt=1 - Nair=2169479.90 Dair=30965.78 Nrad=100183.04 Drad=1424.16 CX=510.03 airX=4.387 + Nair=2169479.91 Dair=30965.78 Nrad=100183.04 Drad=1424.16 CX=510.03 airX=4.387 TH=64.75 TD=68.00 TC=74.25 qhCap=20000 qcCap=-34000 ta=70.03 tr=70.26 qIzSh=-1704 fvent=1.000 pz0=-0.0058 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.683 mwDuctLk=0.000 mwSys=0.000 @@ -7368,7 +7368,7 @@ Attic UZ: anMCp/T[ 0]=37.94/2543.3 anMCp/T[ 1]=35.26/2353.4 ventUt=0 Wed 10-Jul hr=5 subhr=6 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 117 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 117 @@ -7431,7 +7431,7 @@ Wed 10-Jul hr=5 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.925 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 118 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 118 @@ -7494,7 +7494,7 @@ Z1 CZ: anMCp/T[ 0]=88.01/5572.1 anMCp/T[ 1]=269.75/17078.7 ventUt=1 Nair=2161937.48 Dair=30964.67 Nrad=99964.64 Drad=1423.18 CX=509.67 airX=4.428 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 119 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 119 @@ -7557,7 +7557,7 @@ Z1 CZ: anMCp/T[ 0]=88.46/5589.7 anMCp/T[ 1]=271.03/17126.0 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.880 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 120 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 120 @@ -7620,7 +7620,7 @@ Attic UZ: anMCp/T[ 0]=43.43/2883.6 anMCp/T[ 1]=41.01/2713.0 ventUt=0 Nair=46860.30 Dair=741.45 Nrad=57672.98 Drad=864.81 CX=445.20 airX=3.375 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 121 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 121 @@ -7654,7 +7654,7 @@ Wed 10-Jul hr=5 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.290 mwDuctLk=0.000 mwSys=0.000 tdb=69.59 airX=4.489 dryAirMass=250.19 XLGain=0.00 W=0.011775 twb=60.64 rh=0.6241 Z1 CZ: anMCp/T[ 0]=89.37/5628.1 anMCp/T[ 1]=273.56/17228.3 ventUt=1 - Nair=2157039.28 Dair=30983.02 Nrad=99635.88 Drad=1419.29 CX=513.52 airX=4.489 + Nair=2157039.27 Dair=30983.02 Nrad=99635.89 Drad=1419.29 CX=513.52 airX=4.489 TH=64.75 TD=68.00 TC=74.25 qhCap=20000 qcCap=-34000 ta=69.59 tr=70.04 qIzSh=-1808 fvent=1.000 pz0=-0.0060 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.064 mwDuctLk=0.000 mwSys=0.000 @@ -7683,7 +7683,7 @@ Attic UZ: anMCp/T[ 0]=45.76/3031.4 anMCp/T[ 1]=43.45/2868.5 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 122 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 122 @@ -7746,7 +7746,7 @@ Wed 10-Jul hr=5 subhr=25 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 123 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 123 @@ -7757,13 +7757,13 @@ Wed 10-Jul hr=5 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.494 mwDuctLk=0.000 mwSys=0.000 tdb=69.49 airX=4.538 dryAirMass=250.21 XLGain=0.00 W=0.011827 twb=60.68 rh=0.6290 Z1 CZ: anMCp/T[ 0]=90.45/5677.1 anMCp/T[ 1]=276.55/17358.4 ventUt=1 - Nair=2154769.63 Dair=30996.23 Nrad=99449.59 Drad=1416.68 CX=516.38 airX=4.538 + Nair=2154769.63 Dair=30996.23 Nrad=99449.58 Drad=1416.68 CX=516.38 airX=4.538 TH=64.75 TD=68.00 TC=74.25 qhCap=20000 qcCap=-34000 ta=69.49 tr=70.01 qIzSh=-1858 fvent=1.000 pz0=-0.0061 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.301 mwDuctLk=0.000 mwSys=0.000 tdb=64.20 airX=3.892 dryAirMass=49.87 XLGain=0.00 W=0.011780 twb=58.90 rh=0.7533 Attic UZ: anMCp/T[ 0]=49.43/3263.9 anMCp/T[ 1]=47.28/3112.4 ventUt=0 - Nair=47976.43 Dair=756.83 Nrad=57191.14 Drad=862.38 CX=451.60 airX=3.892 + Nair=47976.42 Dair=756.83 Nrad=57191.14 Drad=862.38 CX=451.60 airX=3.892 ta=64.20 tr=65.59 qIzSh=77 fvent=1.000 pz0=-0.0019 qsHvac=0 @@ -7809,7 +7809,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.627 mwDuctLk=0.000 mwSys=0.000 tdb=69.43 airX=4.570 dryAirMass=250.23 XLGain=0.00 W=0.011858 twb=60.70 rh=0.6318 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 124 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 124 @@ -7872,7 +7872,7 @@ Z1 CZ: anMCp/T[ 0]=87.89/5532.4 anMCp/T[ 1]=268.73/16915.9 ventUt=1 TH=64.71 TD=68.00 TC=74.29 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 125 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 125 @@ -7935,7 +7935,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.953 mwDuctLk=0.000 mwSys=0.000 tdb=64.71 airX=3.268 dryAirMass=49.82 XLGain=0.00 W=0.011888 twb=59.23 rh=0.7462 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 126 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 126 @@ -7998,7 +7998,7 @@ Attic UZ: anMCp/T[ 0]=38.70/2581.3 anMCp/T[ 1]=36.68/2440.0 ventUt=0 ta=65.13 tr=65.71 qIzSh=51 fvent=1.000 pz0=-0.0013 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 127 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 127 @@ -8020,7 +8020,7 @@ Z1 CZ: anMCp/T[ 0]=76.52/4910.1 anMCp/T[ 1]=233.92/15009.6 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.779 mwDuctLk=0.000 mwSys=0.000 tdb=65.28 airX=2.958 dryAirMass=49.76 XLGain=0.00 W=0.011946 twb=59.50 rh=0.7344 Attic UZ: anMCp/T[ 0]=37.86/2528.9 anMCp/T[ 1]=35.85/2388.4 ventUt=0 - Nair=46350.69 Dair=713.05 Nrad=57213.00 Drad=866.76 CX=431.33 airX=2.958 + Nair=46350.68 Dair=713.05 Nrad=57213.00 Drad=866.76 CX=431.33 airX=2.958 ta=65.28 tr=65.77 qIzSh=48 fvent=1.000 pz0=-0.0012 qsHvac=0 @@ -8061,7 +8061,7 @@ Attic UZ: anMCp/T[ 0]=36.23/2426.9 anMCp/T[ 1]=34.35/2295.3 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 128 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 128 @@ -8124,7 +8124,7 @@ Wed 10-Jul hr=6 subhr=14 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 129 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 129 @@ -8187,7 +8187,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.707 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=62.56/4112.2 anMCp/T[ 1]=190.55/12525.0 ventUt=1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 130 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 130 @@ -8250,7 +8250,7 @@ Z1 CZ: anMCp/T[ 0]=57.80/3829.7 anMCp/T[ 1]=175.97/11658.5 ventUt=1 ta=69.73 tr=70.52 qIzSh=-612 fvent=1.000 pz0=-0.0030 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 131 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 131 @@ -8313,7 +8313,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.751 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=34.96/2382.7 anMCp/T[ 1]=34.18/2327.9 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 132 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 132 @@ -8348,7 +8348,7 @@ Wed 10-Jul hr=6 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.858 mwDuctLk=0.000 mwSys=0.000 tdb=69.92 airX=2.485 dryAirMass=249.79 XLGain=0.00 W=0.012400 twb=61.57 rh=0.6492 Z1 CZ: anMCp/T[ 0]=49.85/3346.2 anMCp/T[ 1]=151.17/10147.2 ventUt=1 - Nair=2149545.10 Dair=30745.43 Nrad=103957.92 Drad=1464.21 CX=465.23 airX=2.485 + Nair=2149545.09 Dair=30745.43 Nrad=103957.92 Drad=1464.21 CX=465.23 airX=2.485 TH=64.71 TD=68.00 TC=74.29 qhCap=20000 qcCap=-34000 ta=69.92 tr=70.74 qIzSh=-422 fvent=1.000 pz0=-0.0024 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.807 mwDuctLk=0.000 mwSys=0.000 @@ -8376,7 +8376,7 @@ Attic UZ: anMCp/T[ 0]=36.18/2476.4 anMCp/T[ 1]=35.62/2437.7 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 133 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 133 @@ -8439,7 +8439,7 @@ Attic UZ: anMCp/T[ 0]=37.67/2591.1 anMCp/T[ 1]=37.38/2570.4 ventUt=0 Wed 10-Jul hr=7 subhr=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 134 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 134 @@ -8502,7 +8502,7 @@ Wed 10-Jul hr=7 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.930 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 135 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 135 @@ -8511,7 +8511,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.930 mwDuctLk=0.000 mwSys=0.000 tdb=70.27 airX=1.552 dryAirMass=249.56 XLGain=0.00 W=0.012549 twb=61.88 rh=0.6489 Z1 CZ: anMCp/T[ 0]=31.43/2164.7 anMCp/T[ 1]=94.33/6497.1 ventUt=1 - Nair=2151341.06 Dair=30618.33 Nrad=106337.01 Drad=1489.19 CX=443.53 airX=1.552 + Nair=2151341.07 Dair=30618.33 Nrad=106337.01 Drad=1489.19 CX=443.53 airX=1.552 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=70.27 tr=71.15 qIzSh=-132 fvent=1.000 pz0=-0.0012 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.828 mwDuctLk=0.000 mwSys=0.000 @@ -8565,7 +8565,7 @@ Z1 CZ: anMCp/T[ 0]=20.58/1433.7 anMCp/T[ 1]=61.32/4272.2 ventUt=1 Nair=2149788.77 Dair=30533.59 Nrad=107755.23 Drad=1505.51 CX=424.31 airX=1.009 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 136 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 136 @@ -8628,7 +8628,7 @@ Z1 CZ: anMCp/T[ 0]=17.04/1200.6 anMCp/T[ 1]=17.66/1244.5 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.257 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 137 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 137 @@ -8691,7 +8691,7 @@ Attic UZ: anMCp/T[ 0]=49.08/3486.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=56952.53 Dair=756.55 Nrad=60600.95 Drad=881.48 CX=439.55 airX=4.117 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 138 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 138 @@ -8708,7 +8708,7 @@ Wed 10-Jul hr=7 subhr=13 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.031 mwDuctLk=0.000 mwSys=0.000 tdb=70.75 airX=0.647 dryAirMass=249.32 XLGain=0.00 W=0.012573 twb=62.05 rh=0.6399 Z1 CZ: anMCp/T[ 0]=39.32/2811.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2147751.12 Dair=30363.61 Nrad=111436.69 Drad=1547.36 CX=374.91 airX=0.647 + Nair=2147751.13 Dair=30363.61 Nrad=111436.69 Drad=1547.36 CX=374.91 airX=0.647 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=70.75 tr=71.77 qIzSh=30 fvent=0.000 pz0=0.0006 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.636 mwDuctLk=0.000 mwSys=0.000 @@ -8754,7 +8754,7 @@ Attic UZ: anMCp/T[ 0]=54.83/3925.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 139 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 139 @@ -8817,7 +8817,7 @@ Wed 10-Jul hr=7 subhr=19 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 140 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 140 @@ -8880,7 +8880,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.432 mwDuctLk=0.000 mwSys=0.000 tdb=71.24 airX=1.107 dryAirMass=249.10 XLGain=0.00 W=0.012556 twb=62.18 rh=0.6287 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 141 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 141 @@ -8939,11 +8939,11 @@ Wed 10-Jul hr=7 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.773 mwDuctLk=0.000 mwSys=0.000 tdb=71.43 airX=1.221 dryAirMass=249.01 XLGain=0.00 W=0.012541 twb=62.22 rh=0.6241 Z1 CZ: anMCp/T[ 0]=74.05/5530.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2181401.96 Dair=30546.02 Nrad=110864.56 Drad=1522.67 CX=414.64 airX=1.221 + Nair=2181401.97 Dair=30546.02 Nrad=110864.56 Drad=1522.67 CX=414.64 airX=1.221 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 142 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 142 @@ -9006,7 +9006,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.739 mwDuctLk=0.000 mwSys=0.000 tdb=79.54 airX=6.222 dryAirMass=48.40 XLGain=0.00 W=0.012463 twb=64.55 rh=0.4733 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 143 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 143 @@ -9031,7 +9031,7 @@ Z1 CZ: anMCp/T[ 0]=82.20/6226.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.785 mwDuctLk=0.000 mwSys=0.000 tdb=79.90 airX=6.307 dryAirMass=48.37 XLGain=0.00 W=0.012451 twb=64.64 rh=0.4677 Attic UZ: anMCp/T[ 0]=74.31/5530.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=71609.94 Dair=865.63 Nrad=64030.53 Drad=886.29 CX=499.46 airX=6.307 + Nair=71609.93 Dair=865.63 Nrad=64030.53 Drad=886.29 CX=499.46 airX=6.307 ta=79.90 tr=75.00 qIzSh=-407 fvent=0.000 pz0=-0.0049 qsHvac=0 @@ -9069,7 +9069,7 @@ Attic UZ: anMCp/T[ 0]=77.70/5807.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=80.64 tr=75.59 qIzSh=-458 fvent=0.000 pz0=-0.0053 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 144 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 144 @@ -9132,7 +9132,7 @@ Attic UZ: anMCp/T[ 0]=86.75/6523.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 145 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 145 @@ -9195,7 +9195,7 @@ Wed 10-Jul hr=8 subhr=8 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 146 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 146 @@ -9258,7 +9258,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=5.512 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=107.18/8372.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 147 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 147 @@ -9321,7 +9321,7 @@ Z1 CZ: anMCp/T[ 0]=113.11/8902.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=72.79 tr=73.71 qIzSh=670 fvent=0.000 pz0=0.0046 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 148 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 148 @@ -9342,7 +9342,7 @@ Wed 10-Jul hr=8 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=5.948 mwDuctLk=0.000 mwSys=0.000 tdb=72.86 airX=1.901 dryAirMass=248.36 XLGain=0.00 W=0.012505 twb=62.61 rh=0.5927 Z1 CZ: anMCp/T[ 0]=114.98/9072.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2237077.62 Dair=30707.91 Nrad=111587.49 Drad=1506.90 CX=448.60 airX=1.901 + Nair=2237077.61 Dair=30707.91 Nrad=111587.49 Drad=1506.90 CX=448.60 airX=1.901 TH=64.63 TD=68.00 TC=74.38 qhCap=20000 qcCap=-34000 ta=72.86 tr=73.78 qIzSh=695 fvent=0.000 pz0=0.0047 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.463 mwDuctLk=0.000 mwSys=0.000 @@ -9384,7 +9384,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.766 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=130.83/10098.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 149 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 149 @@ -9408,7 +9408,7 @@ Z1 CZ: anMCp/T[ 0]=120.33/9566.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.909 mwDuctLk=0.000 mwSys=0.000 tdb=89.31 airX=11.526 dryAirMass=47.53 XLGain=0.00 W=0.012587 twb=67.45 rh=0.3490 Attic UZ: anMCp/T[ 0]=133.44/10320.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=96554.38 Dair=1036.03 Nrad=69961.57 Drad=897.62 CX=583.45 airX=11.526 + Nair=96554.39 Dair=1036.03 Nrad=69961.57 Drad=897.62 CX=583.45 airX=11.526 ta=89.31 tr=82.42 qIzSh=-1597 fvent=0.000 pz0=-0.0115 qsHvac=0 @@ -9447,7 +9447,7 @@ Attic UZ: anMCp/T[ 0]=138.33/10741.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 150 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 150 @@ -9510,7 +9510,7 @@ Attic UZ: anMCp/T[ 0]=144.96/11323.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=8 subhr=24 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 151 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 151 @@ -9573,7 +9573,7 @@ Wed 10-Jul hr=8 subhr=27 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.080 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 152 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 152 @@ -9636,7 +9636,7 @@ Z1 CZ: anMCp/T[ 0]=138.34/11327.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2282902.36 Dair=30807.24 Nrad=112433.91 Drad=1498.31 CX=474.05 airX=2.293 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 153 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 153 @@ -9665,7 +9665,7 @@ Z1 CZ: anMCp/T[ 0]=139.34/11436.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.354 mwDuctLk=0.000 mwSys=0.000 tdb=94.79 airX=13.867 dryAirMass=47.05 XLGain=0.00 W=0.012794 twb=69.13 rh=0.2991 Attic UZ: anMCp/T[ 0]=158.90/12610.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=110007.04 Dair=1112.81 Nrad=75320.49 Drad=911.87 CX=624.74 airX=13.867 + Nair=110007.03 Dair=1112.81 Nrad=75320.49 Drad=911.87 CX=624.74 airX=13.867 ta=94.79 tr=87.56 qIzSh=-2452 fvent=0.000 pz0=-0.0147 qsHvac=0 @@ -9699,7 +9699,7 @@ Z1 CZ: anMCp/T[ 0]=141.70/11686.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.566 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 154 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 154 @@ -9725,7 +9725,7 @@ Z1 CZ: anMCp/T[ 0]=142.93/11816.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.684 mwDuctLk=0.000 mwSys=0.000 tdb=96.27 airX=14.436 dryAirMass=46.92 XLGain=0.00 W=0.012815 twb=69.53 rh=0.2866 Attic UZ: anMCp/T[ 0]=164.97/13174.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=113132.43 Dair=1126.55 Nrad=76659.03 Drad=915.34 CX=632.20 airX=14.436 + Nair=113132.42 Dair=1126.55 Nrad=76659.03 Drad=915.34 CX=632.20 airX=14.436 ta=96.27 tr=88.86 qIzSh=-2708 fvent=0.000 pz0=-0.0157 qsHvac=0 @@ -9762,7 +9762,7 @@ Attic UZ: anMCp/T[ 0]=169.35/13573.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=115457.27 Dair=1137.27 Nrad=77579.60 Drad=917.71 CX=637.96 airX=14.847 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 155 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 155 @@ -9802,7 +9802,7 @@ Z1 CZ: anMCp/T[ 0]=149.62/12487.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.154 mwDuctLk=0.000 mwSys=0.000 tdb=98.32 airX=15.252 dryAirMass=46.74 XLGain=0.00 W=0.012835 twb=70.08 rh=0.2693 Attic UZ: anMCp/T[ 0]=173.66/13967.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=117852.98 Dair=1148.57 Nrad=78511.58 Drad=920.05 CX=644.12 airX=15.252 + Nair=117852.97 Dair=1148.57 Nrad=78511.58 Drad=920.05 CX=644.12 airX=15.252 ta=98.32 tr=90.68 qIzSh=-3107 fvent=0.000 pz0=-0.0171 qsHvac=0 @@ -9825,7 +9825,7 @@ Attic UZ: anMCp/T[ 0]=175.73/14159.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 156 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 156 @@ -9839,7 +9839,7 @@ Wed 10-Jul hr=9 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.090 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.538 dryAirMass=247.53 XLGain=0.00 W=0.012793 twb=63.47 rh=0.5749 Z1 CZ: anMCp/T[ 0]=152.99/12829.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2338459.00 Dair=31378.29 Nrad=104718.08 Drad=1385.35 CX=624.84 airX=7.338 + Nair=2338459.01 Dair=31378.29 Nrad=104718.08 Drad=1385.35 CX=624.84 airX=7.338 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=75.23 qIzSh=1444 fvent=0.000 pz0=0.0073 qsHvac=-3896 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.376 mwDuctLk=0.000 mwSys=0.000 @@ -9888,7 +9888,7 @@ Wed 10-Jul hr=9 subhr=13 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 157 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 157 @@ -9939,7 +9939,7 @@ Z1 CZ: anMCp/T[ 0]=160.92/13653.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.860 mwDuctLk=0.000 mwSys=0.000 tdb=101.70 airX=16.495 dryAirMass=46.46 XLGain=0.00 W=0.012862 twb=70.97 rh=0.2438 Attic UZ: anMCp/T[ 0]=186.67/15199.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=125532.57 Dair=1182.89 Nrad=81891.90 Drad=928.51 CX=664.33 airX=16.495 + Nair=125532.58 Dair=1182.89 Nrad=81891.90 Drad=928.51 CX=664.33 airX=16.495 ta=101.70 tr=93.83 qIzSh=-3786 fvent=0.000 pz0=-0.0193 qsHvac=0 @@ -9951,7 +9951,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.594 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.694 dryAirMass=247.51 XLGain=0.00 W=0.012832 twb=63.52 rh=0.5766 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 158 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 158 @@ -9965,7 +9965,7 @@ Z1 CZ: anMCp/T[ 0]=162.43/13813.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.945 mwDuctLk=0.000 mwSys=0.000 tdb=102.15 airX=16.648 dryAirMass=46.42 XLGain=0.00 W=0.012865 twb=71.09 rh=0.2406 Attic UZ: anMCp/T[ 0]=188.24/15353.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=126508.48 Dair=1186.91 Nrad=82387.95 Drad=929.77 CX=666.92 airX=16.648 + Nair=126508.49 Dair=1186.91 Nrad=82387.95 Drad=929.77 CX=666.92 airX=16.648 ta=102.15 tr=94.27 qIzSh=-3876 fvent=0.000 pz0=-0.0196 qsHvac=0 @@ -9993,7 +9993,7 @@ Wed 10-Jul hr=9 subhr=18 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.751 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.743 dryAirMass=247.51 XLGain=0.00 W=0.012842 twb=63.54 rh=0.5771 Z1 CZ: anMCp/T[ 0]=165.36/14128.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2341528.79 Dair=31409.25 Nrad=104923.07 Drad=1382.85 CX=630.28 airX=7.543 + Nair=2341528.79 Dair=31409.25 Nrad=104923.06 Drad=1382.85 CX=630.28 airX=7.543 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=75.42 qIzSh=1823 fvent=0.000 pz0=0.0084 qsHvac=-4788 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.105 mwDuctLk=0.000 mwSys=0.000 @@ -10010,11 +10010,11 @@ Wed 10-Jul hr=9 subhr=19 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.828 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.767 dryAirMass=247.51 XLGain=0.00 W=0.012847 twb=63.54 rh=0.5773 Z1 CZ: anMCp/T[ 0]=166.78/14283.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2341970.01 Dair=31413.94 Nrad=104923.95 Drad=1382.30 CX=631.23 airX=7.567 + Nair=2341970.02 Dair=31413.94 Nrad=104923.94 Drad=1382.30 CX=631.23 airX=7.567 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 159 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 159 @@ -10036,7 +10036,7 @@ Wed 10-Jul hr=9 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.903 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.790 dryAirMass=247.50 XLGain=0.00 W=0.012851 twb=63.55 rh=0.5775 Z1 CZ: anMCp/T[ 0]=168.19/14436.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2342407.33 Dair=31418.59 Nrad=104923.70 Drad=1381.75 CX=632.17 airX=7.590 + Nair=2342407.34 Dair=31418.59 Nrad=104923.70 Drad=1381.75 CX=632.17 airX=7.590 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=75.46 qIzSh=1921 fvent=0.000 pz0=0.0086 qsHvac=-4999 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.251 mwDuctLk=0.000 mwSys=0.000 @@ -10053,7 +10053,7 @@ Wed 10-Jul hr=9 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.978 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.813 dryAirMass=247.50 XLGain=0.00 W=0.012855 twb=63.55 rh=0.5777 Z1 CZ: anMCp/T[ 0]=169.57/14589.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2342846.12 Dair=31423.27 Nrad=104921.45 Drad=1381.19 CX=633.11 airX=7.613 + Nair=2342846.13 Dair=31423.27 Nrad=104921.45 Drad=1381.19 CX=633.11 airX=7.613 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=75.48 qIzSh=1970 fvent=0.000 pz0=0.0088 qsHvac=-5103 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.319 mwDuctLk=0.000 mwSys=0.000 @@ -10070,14 +10070,14 @@ Wed 10-Jul hr=9 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.051 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.835 dryAirMass=247.50 XLGain=0.00 W=0.012859 twb=63.56 rh=0.5778 Z1 CZ: anMCp/T[ 0]=170.93/14739.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2343295.24 Dair=31428.09 Nrad=104915.67 Drad=1380.60 CX=634.08 airX=7.635 + Nair=2343295.25 Dair=31428.09 Nrad=104915.67 Drad=1380.60 CX=634.08 airX=7.635 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=75.50 qIzSh=2020 fvent=0.000 pz0=0.0089 qsHvac=-5206 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.385 mwDuctLk=0.000 mwSys=0.000 tdb=104.72 airX=17.443 dryAirMass=46.21 XLGain=0.00 W=0.012882 twb=71.77 rh=0.2233 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 160 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 160 @@ -10140,7 +10140,7 @@ Attic UZ: anMCp/T[ 0]=199.63/16540.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=105.92 tr=98.08 qIzSh=-4604 fvent=0.000 pz0=-0.0217 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 161 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 161 @@ -10203,7 +10203,7 @@ Attic UZ: anMCp/T[ 0]=202.54/16868.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 162 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 162 @@ -10239,7 +10239,7 @@ Z1 CZ: anMCp/T[ 0]=181.34/15920.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.869 mwDuctLk=0.000 mwSys=0.000 tdb=107.77 airX=18.267 dryAirMass=45.96 XLGain=0.00 W=0.012927 twb=72.55 rh=0.2050 Attic UZ: anMCp/T[ 0]=204.49/17084.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=137870.99 Dair=1229.35 Nrad=89693.83 Drad=950.00 CX=699.35 airX=18.267 + Nair=137871.00 Dair=1229.35 Nrad=89693.83 Drad=950.00 CX=699.35 airX=18.267 ta=107.77 tr=100.08 qIzSh=-4954 fvent=0.000 pz0=-0.0227 qsHvac=0 @@ -10266,7 +10266,7 @@ Wed 10-Jul hr=10 subhr=2 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 163 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 163 @@ -10293,7 +10293,7 @@ Wed 10-Jul hr=10 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.037 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.078 dryAirMass=247.45 XLGain=0.00 W=0.012953 twb=63.70 rh=0.5812 Z1 CZ: anMCp/T[ 0]=185.49/16381.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2348532.05 Dair=31471.03 Nrad=104732.11 Drad=1375.57 CX=643.97 airX=7.878 + Nair=2348532.04 Dair=31471.03 Nrad=104732.11 Drad=1375.57 CX=643.97 airX=7.878 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=75.60 qIzSh=2570 fvent=0.000 pz0=0.0105 qsHvac=-5988 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.201 mwDuctLk=0.000 mwSys=0.000 @@ -10329,7 +10329,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.316 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=188.53/16715.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 164 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 164 @@ -10342,7 +10342,7 @@ Z1 CZ: anMCp/T[ 0]=188.53/16715.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.477 mwDuctLk=0.000 mwSys=0.000 tdb=109.95 airX=18.970 dryAirMass=45.77 XLGain=0.00 W=0.013183 twb=73.32 rh=0.1959 Attic UZ: anMCp/T[ 0]=211.48/17793.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=142155.25 Dair=1243.02 Nrad=92310.03 Drad=956.56 CX=709.34 airX=18.970 + Nair=142155.24 Dair=1243.02 Nrad=92310.03 Drad=956.56 CX=709.34 airX=18.970 ta=109.95 tr=102.23 qIzSh=-5460 fvent=0.000 pz0=-0.0238 qsHvac=0 @@ -10353,7 +10353,7 @@ Wed 10-Jul hr=10 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.460 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.154 dryAirMass=247.42 XLGain=0.00 W=0.013061 twb=63.84 rh=0.5859 Z1 CZ: anMCp/T[ 0]=190.04/16883.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2349598.38 Dair=31482.29 Nrad=104700.62 Drad=1374.41 CX=645.77 airX=7.954 + Nair=2349598.37 Dair=31482.29 Nrad=104700.62 Drad=1374.41 CX=645.77 airX=7.954 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=75.63 qIzSh=2733 fvent=0.000 pz0=0.0109 qsHvac=-6235 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.623 mwDuctLk=0.000 mwSys=0.000 @@ -10370,7 +10370,7 @@ Wed 10-Jul hr=10 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.605 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.179 dryAirMass=247.40 XLGain=0.00 W=0.013106 twb=63.90 rh=0.5879 Z1 CZ: anMCp/T[ 0]=191.55/17050.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2349993.10 Dair=31486.55 Nrad=104681.11 Drad=1373.91 CX=646.52 airX=7.979 + Nair=2349993.11 Dair=31486.55 Nrad=104681.10 Drad=1373.91 CX=646.52 airX=7.979 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=75.64 qIzSh=2788 fvent=0.000 pz0=0.0111 qsHvac=-6319 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.771 mwDuctLk=0.000 mwSys=0.000 @@ -10392,7 +10392,7 @@ Z1 CZ: anMCp/T[ 0]=193.04/17216.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.46 tr=75.65 qIzSh=2843 fvent=0.000 pz0=0.0112 qsHvac=-6404 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 165 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 165 @@ -10436,7 +10436,7 @@ Z1 CZ: anMCp/T[ 0]=195.96/17544.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.216 mwDuctLk=0.000 mwSys=0.000 tdb=112.17 airX=19.777 dryAirMass=45.57 XLGain=0.00 W=0.013520 twb=74.18 rh=0.1886 Attic UZ: anMCp/T[ 0]=219.50/18592.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=147043.12 Dair=1261.00 Nrad=94974.66 Drad=963.08 CX=721.56 airX=19.777 + Nair=147043.11 Dair=1261.00 Nrad=94974.66 Drad=963.08 CX=721.56 airX=19.777 ta=112.17 tr=104.42 qIzSh=-6029 fvent=0.000 pz0=-0.0252 qsHvac=0 @@ -10447,7 +10447,7 @@ Wed 10-Jul hr=10 subhr=11 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.183 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.277 dryAirMass=247.32 XLGain=0.00 W=0.013321 twb=64.17 rh=0.5973 Z1 CZ: anMCp/T[ 0]=197.39/17707.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2351550.85 Dair=31503.27 Nrad=104602.72 Drad=1371.90 CX=649.50 airX=8.077 + Nair=2351550.86 Dair=31503.27 Nrad=104602.71 Drad=1371.90 CX=649.50 airX=8.077 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=75.67 qIzSh=3010 fvent=0.000 pz0=0.0117 qsHvac=-6658 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.364 mwDuctLk=0.000 mwSys=0.000 @@ -10455,7 +10455,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.364 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=221.00/18744.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 166 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 166 @@ -10518,7 +10518,7 @@ Attic UZ: anMCp/T[ 0]=225.20/19177.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 167 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 167 @@ -10581,7 +10581,7 @@ Attic UZ: anMCp/T[ 0]=229.00/19577.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=10 subhr=18 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 168 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 168 @@ -10644,7 +10644,7 @@ Wed 10-Jul hr=10 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.621 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 169 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 169 @@ -10693,7 +10693,7 @@ Z1 CZ: anMCp/T[ 0]=213.29/19578.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.053 mwDuctLk=0.000 mwSys=0.000 tdb=117.19 airX=21.444 dryAirMass=45.10 XLGain=0.00 W=0.014499 twb=76.31 rh=0.1750 Attic UZ: anMCp/T[ 0]=235.58/20295.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=157565.68 Dair=1296.88 Nrad=101948.39 Drad=979.77 CX=749.33 airX=21.444 + Nair=157565.68 Dair=1296.88 Nrad=101948.40 Drad=979.77 CX=749.33 airX=21.444 ta=117.19 tr=109.75 qIzSh=-7312 fvent=0.000 pz0=-0.0279 qsHvac=0 @@ -10707,7 +10707,7 @@ Z1 CZ: anMCp/T[ 0]=214.53/19730.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2356192.19 Dair=31551.86 Nrad=104379.04 Drad=1366.09 CX=658.15 airX=8.366 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 170 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 170 @@ -10770,7 +10770,7 @@ Z1 CZ: anMCp/T[ 0]=218.20/20181.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.585 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 171 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 171 @@ -10833,7 +10833,7 @@ Attic UZ: anMCp/T[ 0]=241.46/20999.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=162371.41 Dair=1312.88 Nrad=105861.97 Drad=990.52 CX=779.77 airX=22.086 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 172 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 172 @@ -10873,7 +10873,7 @@ Z1 CZ: anMCp/T[ 0]=222.97/20844.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.993 mwDuctLk=0.000 mwSys=0.000 tdb=120.23 airX=22.172 dryAirMass=44.82 XLGain=0.00 W=0.015077 twb=77.49 rh=0.1671 Attic UZ: anMCp/T[ 0]=242.06/21132.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=163565.36 Dair=1314.69 Nrad=106937.24 Drad=993.15 CX=782.91 airX=22.172 + Nair=163565.37 Dair=1314.69 Nrad=106937.24 Drad=993.15 CX=782.91 airX=22.172 ta=120.23 tr=113.21 qIzSh=-7971 fvent=0.000 pz0=-0.0291 qsHvac=0 @@ -10890,13 +10890,13 @@ Z1 CZ: anMCp/T[ 0]=223.88/20978.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.051 mwDuctLk=0.000 mwSys=0.000 tdb=120.62 airX=22.238 dryAirMass=44.79 XLGain=0.00 W=0.015102 twb=77.59 rh=0.1656 Attic UZ: anMCp/T[ 0]=242.61/21219.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=164185.33 Dair=1315.64 Nrad=107481.32 Drad=994.49 CX=784.45 airX=22.238 + Nair=164185.33 Dair=1315.64 Nrad=107481.31 Drad=994.49 CX=784.45 airX=22.238 ta=120.62 tr=113.61 qIzSh=-8043 fvent=0.000 pz0=-0.0293 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 173 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 173 @@ -10959,7 +10959,7 @@ Wed 10-Jul hr=11 subhr=7 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 174 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 174 @@ -11022,7 +11022,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.469 mwDuctLk=0.000 mwSys=0.000 tdb=74.50 airX=3.836 dryAirMass=246.59 XLGain=0.00 W=0.015124 twb=66.36 rh=0.6754 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 175 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 175 @@ -11085,7 +11085,7 @@ Z1 CZ: anMCp/T[ 0]=233.15/22350.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 176 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 176 @@ -11148,7 +11148,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.683 mwDuctLk=0.000 mwSys=0.000 tdb=125.50 airX=23.045 dryAirMass=44.40 XLGain=0.00 W=0.015322 twb=78.83 rh=0.1468 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 177 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 177 @@ -11211,7 +11211,7 @@ Attic UZ: anMCp/T[ 0]=250.21/22544.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=126.54 tr=119.80 qIzSh=-9116 fvent=0.000 pz0=-0.0316 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 178 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 178 @@ -11261,7 +11261,7 @@ Wed 10-Jul hr=11 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.279 mwDuctLk=0.000 mwSys=0.000 tdb=74.50 airX=4.013 dryAirMass=246.50 XLGain=0.00 W=0.015347 twb=66.63 rh=0.6851 Z1 CZ: anMCp/T[ 0]=240.92/23563.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2365238.90 Dair=31624.78 Nrad=104122.33 Drad=1357.67 CX=687.59 airX=8.813 + Nair=2365238.89 Dair=31624.78 Nrad=104122.33 Drad=1357.67 CX=687.59 airX=8.813 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=74.50 tr=75.96 qIzSh=5615 fvent=0.000 pz0=0.0175 qsHvac=-10194 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.880 mwDuctLk=0.000 mwSys=0.000 @@ -11274,7 +11274,7 @@ Attic UZ: anMCp/T[ 0]=250.97/22740.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 179 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 179 @@ -11337,7 +11337,7 @@ Wed 10-Jul hr=11 subhr=26 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 180 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 180 @@ -11400,7 +11400,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.721 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=246.48/24480.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 181 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 181 @@ -11463,7 +11463,7 @@ Z1 CZ: anMCp/T[ 0]=247.43/24654.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.54 tr=76.04 qIzSh=6211 fvent=0.000 pz0=0.0185 qsHvac=-10974 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 182 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 182 @@ -11526,7 +11526,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.967 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=256.02/23644.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 183 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 183 @@ -11589,7 +11589,7 @@ Attic UZ: anMCp/T[ 0]=257.71/23872.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 184 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 184 @@ -11652,7 +11652,7 @@ Attic UZ: anMCp/T[ 0]=259.19/24081.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=12 subhr=12 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 185 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 185 @@ -11715,7 +11715,7 @@ Wed 10-Jul hr=12 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.940 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 186 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 186 @@ -11778,7 +11778,7 @@ Z1 CZ: anMCp/T[ 0]=253.62/25710.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2370924.61 Dair=31662.19 Nrad=104187.65 Drad=1353.72 CX=701.68 airX=9.020 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 187 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 187 @@ -11841,7 +11841,7 @@ Z1 CZ: anMCp/T[ 0]=254.73/25904.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.253 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 188 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 188 @@ -11867,7 +11867,7 @@ Z1 CZ: anMCp/T[ 0]=255.09/25968.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.194 mwDuctLk=0.000 mwSys=0.000 tdb=135.47 airX=24.709 dryAirMass=43.74 XLGain=0.00 W=0.014075 twb=79.80 rh=0.1036 Attic UZ: anMCp/T[ 0]=263.22/24727.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=188045.04 Dair=1355.19 Nrad=132961.16 Drad=1054.89 CX=859.60 airX=24.709 + Nair=188045.05 Dair=1355.19 Nrad=132961.16 Drad=1054.89 CX=859.60 airX=24.709 ta=135.47 tr=130.27 qIzSh=-10930 fvent=0.000 pz0=-0.0357 qsHvac=0 @@ -11904,7 +11904,7 @@ Attic UZ: anMCp/T[ 0]=263.76/24827.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=188658.56 Dair=1356.02 Nrad=133846.88 Drad=1056.81 CX=861.60 airX=24.771 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 189 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 189 @@ -11927,7 +11927,7 @@ Z1 CZ: anMCp/T[ 0]=256.15/26160.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.012 mwDuctLk=0.000 mwSys=0.000 tdb=136.10 airX=24.801 dryAirMass=43.70 XLGain=0.00 W=0.013865 twb=79.74 rh=0.1005 Attic UZ: anMCp/T[ 0]=264.01/24876.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=188955.19 Dair=1356.39 Nrad=134284.73 Drad=1057.76 CX=862.57 airX=24.801 + Nair=188955.20 Dair=1356.39 Nrad=134284.72 Drad=1057.76 CX=862.57 airX=24.801 ta=136.10 tr=131.06 qIzSh=-11056 fvent=0.000 pz0=-0.0360 qsHvac=0 @@ -11938,7 +11938,7 @@ Wed 10-Jul hr=12 subhr=26 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.368 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=4.265 dryAirMass=246.95 XLGain=0.00 W=0.014059 twb=65.09 rh=0.6280 Z1 CZ: anMCp/T[ 0]=256.51/26224.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2371932.47 Dair=31670.29 Nrad=104211.42 Drad=1352.90 CX=703.18 airX=9.065 + Nair=2371932.48 Dair=31670.29 Nrad=104211.42 Drad=1352.90 CX=703.18 airX=9.065 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.18 qIzSh=7104 fvent=0.000 pz0=0.0196 qsHvac=-12327 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.951 mwDuctLk=0.000 mwSys=0.000 @@ -11967,7 +11967,7 @@ Attic UZ: anMCp/T[ 0]=264.46/24968.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 190 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 190 @@ -11987,7 +11987,7 @@ Z1 CZ: anMCp/T[ 0]=257.20/26351.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.830 mwDuctLk=0.000 mwSys=0.000 tdb=136.72 airX=24.881 dryAirMass=43.67 XLGain=0.00 W=0.013661 twb=79.68 rh=0.0974 Attic UZ: anMCp/T[ 0]=264.67/25014.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=189805.56 Dair=1357.34 Nrad=135578.38 Drad=1060.56 CX=865.38 airX=24.881 + Nair=189805.56 Dair=1357.34 Nrad=135578.37 Drad=1060.56 CX=865.38 airX=24.881 ta=136.72 tr=131.83 qIzSh=-11171 fvent=0.000 pz0=-0.0362 qsHvac=0 @@ -11998,7 +11998,7 @@ Wed 10-Jul hr=12 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.217 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=4.280 dryAirMass=247.03 XLGain=0.00 W=0.013854 twb=64.84 rh=0.6190 Z1 CZ: anMCp/T[ 0]=257.55/26414.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372298.42 Dair=31673.19 Nrad=104220.10 Drad=1352.61 CX=703.72 airX=9.080 + Nair=2372298.42 Dair=31673.19 Nrad=104220.09 Drad=1352.61 CX=703.72 airX=9.080 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.19 qIzSh=7216 fvent=0.000 pz0=0.0197 qsHvac=-12488 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.768 mwDuctLk=0.000 mwSys=0.000 @@ -12030,7 +12030,7 @@ Wed 10-Jul hr=13 subhr=1 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 191 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 191 @@ -12058,7 +12058,7 @@ Wed 10-Jul hr=13 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.503 mwDuctLk=0.000 mwSys=0.000 tdb=74.58 airX=4.313 dryAirMass=247.07 XLGain=0.00 W=0.013745 twb=64.72 rh=0.6134 Z1 CZ: anMCp/T[ 0]=259.52/26710.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2373998.05 Dair=31676.69 Nrad=104243.93 Drad=1352.49 CX=690.17 airX=9.113 + Nair=2373998.06 Dair=31676.69 Nrad=104243.93 Drad=1352.49 CX=690.17 airX=9.113 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ta=74.58 tr=76.23 qIzSh=7354 fvent=0.000 pz0=0.0200 qsHvac=-12584 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.833 mwDuctLk=0.000 mwSys=0.000 @@ -12093,7 +12093,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.683 mwDuctLk=0.000 mwSys=0.000 tdb=74.58 airX=4.328 dryAirMass=247.08 XLGain=0.00 W=0.013734 twb=64.70 rh=0.6129 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 192 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 192 @@ -12107,7 +12107,7 @@ Z1 CZ: anMCp/T[ 0]=260.44/26867.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.914 mwDuctLk=0.000 mwSys=0.000 tdb=137.80 airX=24.911 dryAirMass=43.60 XLGain=0.00 W=0.013724 twb=79.97 rh=0.0951 Attic UZ: anMCp/T[ 0]=264.53/25164.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=191222.03 Dair=1359.10 Nrad=138229.90 Drad=1067.31 CX=859.57 airX=24.911 + Nair=191222.03 Dair=1359.10 Nrad=138229.89 Drad=1067.31 CX=859.57 airX=24.911 ta=137.80 tr=133.21 qIzSh=-11287 fvent=0.000 pz0=-0.0365 qsHvac=0 @@ -12118,7 +12118,7 @@ Wed 10-Jul hr=13 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.744 mwDuctLk=0.000 mwSys=0.000 tdb=74.58 airX=4.327 dryAirMass=247.08 XLGain=0.00 W=0.013742 twb=64.71 rh=0.6133 Z1 CZ: anMCp/T[ 0]=260.39/26893.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2374408.07 Dair=31679.79 Nrad=104269.46 Drad=1352.18 CX=690.82 airX=9.127 + Nair=2374408.08 Dair=31679.79 Nrad=104269.46 Drad=1352.18 CX=690.82 airX=9.127 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ta=74.58 tr=76.26 qIzSh=7472 fvent=0.000 pz0=0.0203 qsHvac=-12780 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.972 mwDuctLk=0.000 mwSys=0.000 @@ -12135,7 +12135,7 @@ Wed 10-Jul hr=13 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.860 mwDuctLk=0.000 mwSys=0.000 tdb=74.58 airX=4.342 dryAirMass=247.08 XLGain=0.00 W=0.013758 twb=64.73 rh=0.6140 Z1 CZ: anMCp/T[ 0]=261.29/27017.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2374622.72 Dair=31681.60 Nrad=104276.55 Drad=1352.05 CX=691.08 airX=9.142 + Nair=2374622.73 Dair=31681.60 Nrad=104276.55 Drad=1352.05 CX=691.08 airX=9.142 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ta=74.58 tr=76.27 qIzSh=7530 fvent=0.000 pz0=0.0203 qsHvac=-12865 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.001 mwDuctLk=0.000 mwSys=0.000 @@ -12156,7 +12156,7 @@ Z1 CZ: anMCp/T[ 0]=261.83/27104.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 193 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 193 @@ -12201,7 +12201,7 @@ Z1 CZ: anMCp/T[ 0]=262.50/27237.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.147 mwDuctLk=0.000 mwSys=0.000 tdb=138.54 airX=24.909 dryAirMass=43.53 XLGain=0.00 W=0.013960 twb=80.31 rh=0.0948 Attic UZ: anMCp/T[ 0]=264.09/25252.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=191785.76 Dair=1357.62 Nrad=140150.25 Drad=1071.41 CX=862.43 airX=24.909 + Nair=191785.76 Dair=1357.62 Nrad=140150.24 Drad=1071.41 CX=862.43 airX=24.909 ta=138.54 tr=134.26 qIzSh=-11335 fvent=0.000 pz0=-0.0365 qsHvac=0 @@ -12219,7 +12219,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.191 mwDuctLk=0.000 mwSys=0.000 tdb=138.70 airX=24.897 dryAirMass=43.51 XLGain=0.00 W=0.014012 twb=80.38 rh=0.0948 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 194 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 194 @@ -12227,7 +12227,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.191 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Attic UZ: anMCp/T[ 0]=263.87/25259.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=191874.38 Dair=1357.10 Nrad=140523.63 Drad=1072.21 CX=862.93 airX=24.897 + Nair=191874.38 Dair=1357.10 Nrad=140523.62 Drad=1072.21 CX=862.93 airX=24.897 ta=138.70 tr=134.46 qIzSh=-11338 fvent=0.000 pz0=-0.0365 qsHvac=0 @@ -12244,7 +12244,7 @@ Z1 CZ: anMCp/T[ 0]=263.43/27396.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.244 mwDuctLk=0.000 mwSys=0.000 tdb=138.84 airX=24.896 dryAirMass=43.50 XLGain=0.00 W=0.014065 twb=80.46 rh=0.0948 Attic UZ: anMCp/T[ 0]=263.78/25276.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=191982.61 Dair=1356.74 Nrad=140893.70 Drad=1073.01 CX=863.46 airX=24.896 + Nair=191982.61 Dair=1356.74 Nrad=140893.69 Drad=1073.01 CX=863.46 airX=24.896 ta=138.84 tr=134.67 qIzSh=-11347 fvent=0.000 pz0=-0.0366 qsHvac=0 @@ -12278,11 +12278,11 @@ Z1 CZ: anMCp/T[ 0]=264.20/27539.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.354 mwDuctLk=0.000 mwSys=0.000 tdb=139.14 airX=24.897 dryAirMass=43.47 XLGain=0.00 W=0.014175 twb=80.61 rh=0.0948 Attic UZ: anMCp/T[ 0]=263.61/25312.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=192201.20 Dair=1356.03 Nrad=141622.46 Drad=1074.58 CX=864.47 airX=24.897 + Nair=192201.19 Dair=1356.03 Nrad=141622.45 Drad=1074.58 CX=864.47 airX=24.897 ta=139.14 tr=135.07 qIzSh=-11366 fvent=0.000 pz0=-0.0366 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 195 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 195 @@ -12321,7 +12321,7 @@ Z1 CZ: anMCp/T[ 0]=264.95/27681.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.467 mwDuctLk=0.000 mwSys=0.000 tdb=139.44 airX=24.897 dryAirMass=43.44 XLGain=0.00 W=0.014288 twb=80.76 rh=0.0948 Attic UZ: anMCp/T[ 0]=263.44/25348.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=192440.91 Dair=1355.40 Nrad=142336.16 Drad=1076.12 CX=865.52 airX=24.897 + Nair=192440.90 Dair=1355.40 Nrad=142336.16 Drad=1076.12 CX=865.52 airX=24.897 ta=139.44 tr=135.47 qIzSh=-11386 fvent=0.000 pz0=-0.0366 qsHvac=0 @@ -12338,14 +12338,14 @@ Z1 CZ: anMCp/T[ 0]=265.32/27752.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.524 mwDuctLk=0.000 mwSys=0.000 tdb=139.59 airX=24.898 dryAirMass=43.43 XLGain=0.00 W=0.014346 twb=80.84 rh=0.0949 Attic UZ: anMCp/T[ 0]=263.35/25366.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=192566.60 Dair=1355.12 Nrad=142688.09 Drad=1076.87 CX=866.06 airX=24.898 + Nair=192566.60 Dair=1355.12 Nrad=142688.08 Drad=1076.87 CX=866.06 airX=24.898 ta=139.59 tr=135.66 qIzSh=-11396 fvent=0.000 pz0=-0.0366 qsHvac=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 196 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 196 @@ -12381,7 +12381,7 @@ Z1 CZ: anMCp/T[ 0]=266.06/27893.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.641 mwDuctLk=0.000 mwSys=0.000 tdb=139.89 airX=24.900 dryAirMass=43.40 XLGain=0.00 W=0.014462 twb=80.99 rh=0.0949 Attic UZ: anMCp/T[ 0]=263.20/25404.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=192822.95 Dair=1354.57 Nrad=143382.92 Drad=1078.37 CX=867.13 airX=24.900 + Nair=192822.95 Dair=1354.57 Nrad=143382.91 Drad=1078.37 CX=867.13 airX=24.900 ta=139.89 tr=136.05 qIzSh=-11416 fvent=0.000 pz0=-0.0367 qsHvac=0 @@ -12408,7 +12408,7 @@ Wed 10-Jul hr=13 subhr=20 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 197 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 197 @@ -12471,7 +12471,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.360 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=267.87/28244.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 198 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 198 @@ -12534,7 +12534,7 @@ Z1 CZ: anMCp/T[ 0]=268.93/28453.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.58 tr=76.40 qIzSh=8395 fvent=0.000 pz0=0.0220 qsHvac=-14210 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 199 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 199 @@ -12561,7 +12561,7 @@ Z1 CZ: anMCp/T[ 0]=269.28/28522.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.176 mwDuctLk=0.000 mwSys=0.000 tdb=141.22 airX=24.909 dryAirMass=43.26 XLGain=0.00 W=0.014998 twb=81.70 rh=0.0950 Attic UZ: anMCp/T[ 0]=262.49/25570.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194009.99 Dair=1352.25 Nrad=146368.97 Drad=1084.80 CX=871.87 airX=24.909 + Nair=194009.99 Dair=1352.25 Nrad=146368.96 Drad=1084.80 CX=871.87 airX=24.909 ta=141.22 tr=137.73 qIzSh=-11499 fvent=0.000 pz0=-0.0368 qsHvac=0 @@ -12578,7 +12578,7 @@ Z1 CZ: anMCp/T[ 0]=269.63/28592.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.236 mwDuctLk=0.000 mwSys=0.000 tdb=141.37 airX=24.909 dryAirMass=43.25 XLGain=0.00 W=0.015058 twb=81.78 rh=0.0950 Attic UZ: anMCp/T[ 0]=262.40/25588.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194140.77 Dair=1351.99 Nrad=146687.71 Drad=1085.49 CX=872.38 airX=24.909 + Nair=194140.77 Dair=1351.99 Nrad=146687.70 Drad=1085.49 CX=872.38 airX=24.909 ta=141.37 tr=137.91 qIzSh=-11507 fvent=0.000 pz0=-0.0368 qsHvac=0 @@ -12597,7 +12597,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.295 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=262.31/25605.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 200 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 200 @@ -12621,7 +12621,7 @@ Z1 CZ: anMCp/T[ 0]=269.60/28630.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.320 mwDuctLk=0.000 mwSys=0.000 tdb=141.59 airX=25.013 dryAirMass=43.23 XLGain=0.00 W=0.015098 twb=81.86 rh=0.0947 Attic UZ: anMCp/T[ 0]=263.35/25706.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194675.43 Dair=1354.06 Nrad=147449.49 Drad=1087.86 CX=888.95 airX=25.013 + Nair=194675.42 Dair=1354.06 Nrad=147449.48 Drad=1087.86 CX=888.95 airX=25.013 ta=141.59 tr=138.26 qIzSh=-11581 fvent=0.000 pz0=-0.0369 qsHvac=0 @@ -12632,7 +12632,7 @@ Wed 10-Jul hr=14 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.690 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.484 dryAirMass=246.60 XLGain=0.00 W=0.014963 twb=66.20 rh=0.6656 Z1 CZ: anMCp/T[ 0]=269.33/28611.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2379534.47 Dair=31709.43 Nrad=104564.02 Drad=1349.40 CX=706.37 airX=9.284 + Nair=2379534.46 Dair=31709.43 Nrad=104564.02 Drad=1349.40 CX=706.37 airX=9.284 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.50 qIzSh=8513 fvent=0.000 pz0=0.0222 qsHvac=-14546 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.280 mwDuctLk=0.000 mwSys=0.000 @@ -12649,18 +12649,18 @@ Wed 10-Jul hr=14 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.623 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.488 dryAirMass=246.59 XLGain=0.00 W=0.014971 twb=66.21 rh=0.6659 Z1 CZ: anMCp/T[ 0]=269.55/28644.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2379649.76 Dair=31710.34 Nrad=104589.92 Drad=1349.38 CX=706.64 airX=9.288 + Nair=2379649.75 Dair=31710.34 Nrad=104589.92 Drad=1349.38 CX=706.64 airX=9.288 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.52 qIzSh=8529 fvent=0.000 pz0=0.0222 qsHvac=-14604 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.237 mwDuctLk=0.000 mwSys=0.000 tdb=141.74 airX=25.036 dryAirMass=43.22 XLGain=0.00 W=0.015014 twb=81.81 rh=0.0938 Attic UZ: anMCp/T[ 0]=263.56/25742.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194837.73 Dair=1354.57 Nrad=148029.56 Drad=1089.03 CX=890.10 airX=25.036 + Nair=194837.73 Dair=1354.57 Nrad=148029.55 Drad=1089.03 CX=890.10 airX=25.036 ta=141.74 tr=138.54 qIzSh=-11613 fvent=0.000 pz0=-0.0370 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 201 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 201 @@ -12698,7 +12698,7 @@ Z1 CZ: anMCp/T[ 0]=269.75/28685.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.149 mwDuctLk=0.000 mwSys=0.000 tdb=141.81 airX=25.074 dryAirMass=43.22 XLGain=0.00 W=0.014912 twb=81.74 rh=0.0930 Attic UZ: anMCp/T[ 0]=263.96/25795.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194920.99 Dair=1355.44 Nrad=148555.94 Drad=1089.98 CX=891.12 airX=25.074 + Nair=194920.99 Dair=1355.44 Nrad=148555.93 Drad=1089.98 CX=891.12 airX=25.074 ta=141.81 tr=138.77 qIzSh=-11637 fvent=0.000 pz0=-0.0371 qsHvac=0 @@ -12709,13 +12709,13 @@ Wed 10-Jul hr=14 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.413 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.496 dryAirMass=246.59 XLGain=0.00 W=0.014932 twb=66.16 rh=0.6642 Z1 CZ: anMCp/T[ 0]=270.03/28725.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2379969.16 Dair=31712.92 Nrad=104641.60 Drad=1349.13 CX=707.37 airX=9.296 + Nair=2379969.17 Dair=31712.92 Nrad=104641.60 Drad=1349.13 CX=707.37 airX=9.296 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.55 qIzSh=8574 fvent=0.000 pz0=0.0222 qsHvac=-14756 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.080 mwDuctLk=0.000 mwSys=0.000 tdb=141.84 airX=25.061 dryAirMass=43.22 XLGain=0.00 W=0.014856 twb=81.70 rh=0.0926 Attic UZ: anMCp/T[ 0]=263.83/25792.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194874.98 Dair=1355.30 Nrad=148808.16 Drad=1090.43 CX=891.43 airX=25.061 + Nair=194874.98 Dair=1355.30 Nrad=148808.15 Drad=1090.43 CX=891.43 airX=25.061 ta=141.84 tr=138.88 qIzSh=-11630 fvent=0.000 pz0=-0.0371 qsHvac=0 @@ -12723,7 +12723,7 @@ Attic UZ: anMCp/T[ 0]=263.83/25792.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=14 subhr=6 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 202 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 202 @@ -12769,13 +12769,13 @@ Wed 10-Jul hr=14 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.200 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.503 dryAirMass=246.63 XLGain=0.00 W=0.014824 twb=66.03 rh=0.6595 Z1 CZ: anMCp/T[ 0]=270.50/28804.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2380251.29 Dair=31715.16 Nrad=104687.49 Drad=1348.94 CX=707.93 airX=9.303 + Nair=2380251.29 Dair=31715.16 Nrad=104687.48 Drad=1348.94 CX=707.93 airX=9.303 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.58 qIzSh=8618 fvent=0.000 pz0=0.0222 qsHvac=-14892 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.896 mwDuctLk=0.000 mwSys=0.000 tdb=141.90 airX=25.078 dryAirMass=43.23 XLGain=0.00 W=0.014675 twb=81.56 rh=0.0913 Attic UZ: anMCp/T[ 0]=264.05/25837.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194720.96 Dair=1355.10 Nrad=149529.17 Drad=1091.74 CX=892.04 airX=25.078 + Nair=194720.90 Dair=1355.10 Nrad=149529.16 Drad=1091.74 CX=892.04 airX=25.078 ta=141.90 tr=139.19 qIzSh=-11632 fvent=0.000 pz0=-0.0371 qsHvac=0 @@ -12786,7 +12786,7 @@ Wed 10-Jul hr=14 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.104 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 203 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 203 @@ -12801,7 +12801,7 @@ Z1 CZ: anMCp/T[ 0]=270.23/28784.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.816 mwDuctLk=0.000 mwSys=0.000 tdb=141.93 airX=25.059 dryAirMass=43.23 XLGain=0.00 W=0.014611 twb=81.51 rh=0.0909 Attic UZ: anMCp/T[ 0]=263.87/25825.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194639.72 Dair=1354.74 Nrad=149756.22 Drad=1092.15 CX=892.19 airX=25.059 + Nair=194639.68 Dair=1354.74 Nrad=149756.22 Drad=1092.15 CX=892.19 airX=25.059 ta=141.93 tr=139.28 qIzSh=-11625 fvent=0.000 pz0=-0.0371 qsHvac=0 @@ -12817,8 +12817,8 @@ Z1 CZ: anMCp/T[ 0]=270.70/28844.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.63 tr=76.60 qIzSh=8644 fvent=0.000 pz0=0.0222 qsHvac=-14971 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.743 mwDuctLk=0.000 mwSys=0.000 tdb=141.95 airX=25.055 dryAirMass=43.23 XLGain=0.00 W=0.014546 twb=81.46 rh=0.0904 -Attic UZ: anMCp/T[ 0]=263.84/25833.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194580.99 Dair=1354.53 Nrad=149979.06 Drad=1092.56 CX=892.34 airX=25.055 +Attic UZ: anMCp/T[ 0]=263.84/25833.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 + Nair=194581.00 Dair=1354.53 Nrad=149979.07 Drad=1092.56 CX=892.34 airX=25.055 ta=141.95 tr=139.38 qIzSh=-11620 fvent=0.000 pz0=-0.0371 qsHvac=0 @@ -12829,7 +12829,7 @@ Wed 10-Jul hr=14 subhr=11 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.954 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.500 dryAirMass=246.68 XLGain=0.00 W=0.014674 twb=65.85 rh=0.6530 Z1 CZ: anMCp/T[ 0]=270.40/28822.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2380424.28 Dair=31716.34 Nrad=104730.82 Drad=1348.84 CX=708.33 airX=9.300 + Nair=2380424.26 Dair=31716.33 Nrad=104730.83 Drad=1348.84 CX=708.33 airX=9.300 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.61 qIzSh=8644 fvent=0.000 pz0=0.0223 qsHvac=-14995 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.661 mwDuctLk=0.000 mwSys=0.000 @@ -12849,7 +12849,7 @@ Z1 CZ: anMCp/T[ 0]=270.39/28831.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2380476.38 Dair=31716.67 Nrad=104744.51 Drad=1348.82 CX=708.44 airX=9.300 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 204 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 204 @@ -12861,7 +12861,7 @@ Z1 CZ: anMCp/T[ 0]=270.39/28831.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.582 mwDuctLk=0.000 mwSys=0.000 tdb=142.01 airX=25.026 dryAirMass=43.24 XLGain=0.00 W=0.014413 twb=81.36 rh=0.0895 Attic UZ: anMCp/T[ 0]=263.56/25818.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194437.69 Dair=1353.83 Nrad=150411.58 Drad=1093.36 CX=892.62 airX=25.026 + Nair=194437.67 Dair=1353.83 Nrad=150411.57 Drad=1093.36 CX=892.62 airX=25.026 ta=142.01 tr=139.56 qIzSh=-11609 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -12878,7 +12878,7 @@ Z1 CZ: anMCp/T[ 0]=270.92/28897.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.504 mwDuctLk=0.000 mwSys=0.000 tdb=142.04 airX=25.017 dryAirMass=43.24 XLGain=0.00 W=0.014345 twb=81.31 rh=0.0890 Attic UZ: anMCp/T[ 0]=263.49/25823.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194366.94 Dair=1353.44 Nrad=150623.16 Drad=1093.77 CX=892.69 airX=25.017 + Nair=194366.88 Dair=1353.43 Nrad=150623.16 Drad=1093.77 CX=892.69 airX=25.017 ta=142.04 tr=139.66 qIzSh=-11602 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -12889,13 +12889,13 @@ Wed 10-Jul hr=14 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.728 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.504 dryAirMass=246.74 XLGain=0.00 W=0.014498 twb=65.64 rh=0.6454 Z1 CZ: anMCp/T[ 0]=270.66/28879.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2380603.18 Dair=31717.55 Nrad=104770.10 Drad=1348.78 CX=708.65 airX=9.304 + Nair=2380603.19 Dair=31717.55 Nrad=104770.10 Drad=1348.78 CX=708.65 airX=9.304 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.63 qIzSh=8681 fvent=0.000 pz0=0.0223 qsHvac=-15099 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.424 mwDuctLk=0.000 mwSys=0.000 tdb=142.07 airX=25.007 dryAirMass=43.24 XLGain=0.00 W=0.014277 twb=81.26 rh=0.0885 Attic UZ: anMCp/T[ 0]=263.40/25819.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194297.20 Dair=1353.06 Nrad=150829.91 Drad=1094.16 CX=892.78 airX=25.007 + Nair=194297.18 Dair=1353.06 Nrad=150829.91 Drad=1094.16 CX=892.78 airX=25.007 ta=142.07 tr=139.74 qIzSh=-11600 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -12912,7 +12912,7 @@ Z1 CZ: anMCp/T[ 0]=270.67/28889.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.345 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 205 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 205 @@ -12921,7 +12921,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.345 mwDuctLk=0.000 mwSys=0.000 tdb=142.10 airX=24.998 dryAirMass=43.25 XLGain=0.00 W=0.014208 twb=81.21 rh=0.0881 Attic UZ: anMCp/T[ 0]=263.32/25819.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194232.95 Dair=1352.68 Nrad=151032.61 Drad=1094.56 CX=892.85 airX=24.998 + Nair=194232.93 Dair=1352.68 Nrad=151032.62 Drad=1094.56 CX=892.85 airX=24.998 ta=142.10 tr=139.83 qIzSh=-11598 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -12937,8 +12937,8 @@ Z1 CZ: anMCp/T[ 0]=271.23/28959.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.63 tr=76.64 qIzSh=8719 fvent=0.000 pz0=0.0224 qsHvac=-15174 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.263 mwDuctLk=0.000 mwSys=0.000 tdb=142.13 airX=24.986 dryAirMass=43.25 XLGain=0.00 W=0.014138 twb=81.15 rh=0.0876 -Attic UZ: anMCp/T[ 0]=263.20/25819.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194177.50 Dair=1352.30 Nrad=151230.65 Drad=1094.94 CX=892.94 airX=24.986 +Attic UZ: anMCp/T[ 0]=263.20/25819.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 + Nair=194177.55 Dair=1352.30 Nrad=151230.66 Drad=1094.94 CX=892.94 airX=24.986 ta=142.13 tr=139.92 qIzSh=-11589 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -12949,13 +12949,13 @@ Wed 10-Jul hr=14 subhr=17 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.505 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.507 dryAirMass=246.82 XLGain=0.00 W=0.014306 twb=65.41 rh=0.6370 Z1 CZ: anMCp/T[ 0]=270.96/28940.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2380772.88 Dair=31718.74 Nrad=104802.10 Drad=1348.72 CX=708.93 airX=9.307 + Nair=2380772.87 Dair=31718.74 Nrad=104802.10 Drad=1348.72 CX=708.93 airX=9.307 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.64 qIzSh=8720 fvent=0.000 pz0=0.0224 qsHvac=-15193 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.185 mwDuctLk=0.000 mwSys=0.000 tdb=142.16 airX=24.980 dryAirMass=43.25 XLGain=0.00 W=0.014069 twb=81.10 rh=0.0871 Attic UZ: anMCp/T[ 0]=263.16/25820.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194125.70 Dair=1351.99 Nrad=151425.48 Drad=1095.31 CX=893.04 airX=24.980 + Nair=194125.71 Dair=1351.99 Nrad=151425.48 Drad=1095.31 CX=893.04 airX=24.980 ta=142.16 tr=140.01 qIzSh=-11591 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -12972,10 +12972,10 @@ Z1 CZ: anMCp/T[ 0]=270.97/28951.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.106 mwDuctLk=0.000 mwSys=0.000 tdb=142.19 airX=24.974 dryAirMass=43.25 XLGain=0.00 W=0.013998 twb=81.05 rh=0.0866 Attic UZ: anMCp/T[ 0]=263.11/25822.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194080.51 Dair=1351.69 Nrad=151616.02 Drad=1095.68 CX=893.14 airX=24.974 + Nair=194080.53 Dair=1351.69 Nrad=151616.01 Drad=1095.68 CX=893.14 airX=24.974 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 206 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 206 @@ -12998,7 +12998,7 @@ Z1 CZ: anMCp/T[ 0]=271.04/28969.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.026 mwDuctLk=0.000 mwSys=0.000 tdb=142.23 airX=24.967 dryAirMass=43.26 XLGain=0.00 W=0.013928 twb=81.00 rh=0.0861 Attic UZ: anMCp/T[ 0]=263.05/25824.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194039.03 Dair=1351.39 Nrad=151802.27 Drad=1096.04 CX=893.24 airX=24.967 + Nair=194039.06 Dair=1351.39 Nrad=151802.27 Drad=1096.04 CX=893.24 airX=24.967 ta=142.23 tr=140.17 qIzSh=-11588 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -13015,7 +13015,7 @@ Z1 CZ: anMCp/T[ 0]=271.14/28989.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.946 mwDuctLk=0.000 mwSys=0.000 tdb=142.26 airX=24.959 dryAirMass=43.26 XLGain=0.00 W=0.013857 twb=80.94 rh=0.0856 Attic UZ: anMCp/T[ 0]=262.98/25825.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194000.92 Dair=1351.09 Nrad=151985.08 Drad=1096.40 CX=893.35 airX=24.959 + Nair=194000.94 Dair=1351.09 Nrad=151985.08 Drad=1096.40 CX=893.35 airX=24.959 ta=142.26 tr=140.26 qIzSh=-11586 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -13026,19 +13026,19 @@ Wed 10-Jul hr=14 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.200 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.510 dryAirMass=246.92 XLGain=0.00 W=0.014036 twb=65.08 rh=0.6253 Z1 CZ: anMCp/T[ 0]=271.24/29010.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2380942.50 Dair=31719.75 Nrad=104841.45 Drad=1348.70 CX=709.18 airX=9.310 + Nair=2380942.49 Dair=31719.75 Nrad=104841.45 Drad=1348.70 CX=709.18 airX=9.310 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.66 qIzSh=8769 fvent=0.000 pz0=0.0225 qsHvac=-15302 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.866 mwDuctLk=0.000 mwSys=0.000 tdb=142.30 airX=24.953 dryAirMass=43.26 XLGain=0.00 W=0.013786 twb=80.89 rh=0.0851 Attic UZ: anMCp/T[ 0]=262.92/25828.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=193968.33 Dair=1350.82 Nrad=152164.22 Drad=1096.75 CX=893.46 airX=24.953 + Nair=193968.32 Dair=1350.82 Nrad=152164.22 Drad=1096.75 CX=893.46 airX=24.953 ta=142.30 tr=140.34 qIzSh=-11585 fvent=0.000 pz0=-0.0370 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 207 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 207 @@ -13058,7 +13058,7 @@ Z1 CZ: anMCp/T[ 0]=271.35/29031.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.786 mwDuctLk=0.000 mwSys=0.000 tdb=142.33 airX=24.946 dryAirMass=43.26 XLGain=0.00 W=0.013715 twb=80.84 rh=0.0846 Attic UZ: anMCp/T[ 0]=262.87/25830.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=193937.46 Dair=1350.56 Nrad=152340.02 Drad=1097.09 CX=893.57 airX=24.946 + Nair=193937.45 Dair=1350.56 Nrad=152340.02 Drad=1097.09 CX=893.57 airX=24.946 ta=142.33 tr=140.42 qIzSh=-11584 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -13069,13 +13069,13 @@ Wed 10-Jul hr=14 subhr=23 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.051 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.513 dryAirMass=246.97 XLGain=0.00 W=0.013898 twb=64.91 rh=0.6192 Z1 CZ: anMCp/T[ 0]=271.46/29052.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2381036.52 Dair=31720.39 Nrad=104856.29 Drad=1348.66 CX=709.32 airX=9.313 + Nair=2381036.51 Dair=31720.39 Nrad=104856.29 Drad=1348.66 CX=709.32 airX=9.313 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.67 qIzSh=8795 fvent=0.000 pz0=0.0226 qsHvac=-15354 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.706 mwDuctLk=0.000 mwSys=0.000 tdb=142.37 airX=24.940 dryAirMass=43.27 XLGain=0.00 W=0.013644 twb=80.78 rh=0.0841 Attic UZ: anMCp/T[ 0]=262.81/25833.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=193908.28 Dair=1350.29 Nrad=152512.57 Drad=1097.43 CX=893.68 airX=24.940 + Nair=193908.28 Dair=1350.29 Nrad=152512.56 Drad=1097.43 CX=893.68 airX=24.940 ta=142.37 tr=140.50 qIzSh=-11583 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -13101,7 +13101,7 @@ Wed 10-Jul hr=14 subhr=25 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 208 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 208 @@ -13112,7 +13112,7 @@ Wed 10-Jul hr=14 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.902 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.515 dryAirMass=247.03 XLGain=0.00 W=0.013757 twb=64.74 rh=0.6131 Z1 CZ: anMCp/T[ 0]=271.67/29094.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2381130.91 Dair=31721.06 Nrad=104868.48 Drad=1348.62 CX=709.46 airX=9.315 + Nair=2381130.92 Dair=31721.06 Nrad=104868.48 Drad=1348.62 CX=709.46 airX=9.315 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.68 qIzSh=8821 fvent=0.000 pz0=0.0226 qsHvac=-15404 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.546 mwDuctLk=0.000 mwSys=0.000 @@ -13129,7 +13129,7 @@ Wed 10-Jul hr=14 subhr=26 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.827 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.516 dryAirMass=247.05 XLGain=0.00 W=0.013687 twb=64.66 rh=0.6100 Z1 CZ: anMCp/T[ 0]=271.78/29115.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2381176.84 Dair=31721.39 Nrad=104873.95 Drad=1348.59 CX=709.53 airX=9.316 + Nair=2381176.85 Dair=31721.39 Nrad=104873.95 Drad=1348.59 CX=709.53 airX=9.316 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.68 qIzSh=8835 fvent=0.000 pz0=0.0226 qsHvac=-15428 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.466 mwDuctLk=0.000 mwSys=0.000 @@ -13164,7 +13164,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.678 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.519 dryAirMass=247.11 XLGain=0.00 W=0.013545 twb=64.49 rh=0.6038 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 209 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 209 @@ -13227,7 +13227,7 @@ Z1 CZ: anMCp/T[ 0]=272.50/29255.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 210 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 210 @@ -13238,7 +13238,7 @@ Z1 CZ: anMCp/T[ 0]=272.50/29255.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.206 mwDuctLk=0.000 mwSys=0.000 tdb=142.61 airX=24.865 dryAirMass=43.28 XLGain=0.00 W=0.013200 twb=80.45 rh=0.0809 Attic UZ: anMCp/T[ 0]=262.13/25843.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=193712.78 Dair=1348.76 Nrad=153837.40 Drad=1100.40 CX=879.32 airX=24.865 + Nair=193712.77 Dair=1348.76 Nrad=153837.40 Drad=1100.40 CX=879.32 airX=24.865 ta=142.61 tr=141.05 qIzSh=-11538 fvent=0.000 pz0=-0.0369 qsHvac=0 @@ -13255,7 +13255,7 @@ Z1 CZ: anMCp/T[ 0]=272.40/29260.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.176 mwDuctLk=0.000 mwSys=0.000 tdb=142.57 airX=24.799 dryAirMass=43.29 XLGain=0.00 W=0.013205 twb=80.45 rh=0.0810 Attic UZ: anMCp/T[ 0]=261.46/25790.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=193468.53 Dair=1347.84 Nrad=153965.53 Drad=1100.65 CX=879.28 airX=24.799 + Nair=193468.53 Dair=1347.84 Nrad=153965.52 Drad=1100.65 CX=879.28 airX=24.799 ta=142.57 tr=141.08 qIzSh=-11485 fvent=0.000 pz0=-0.0368 qsHvac=0 @@ -13272,7 +13272,7 @@ Z1 CZ: anMCp/T[ 0]=272.52/29290.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.153 mwDuctLk=0.000 mwSys=0.000 tdb=142.51 airX=24.740 dryAirMass=43.29 XLGain=0.00 W=0.013213 twb=80.45 rh=0.0812 Attic UZ: anMCp/T[ 0]=260.85/25745.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=193171.23 Dair=1346.82 Nrad=154082.75 Drad=1100.86 CX=879.04 airX=24.740 + Nair=193171.22 Dair=1346.82 Nrad=154082.74 Drad=1100.86 CX=879.04 airX=24.740 ta=142.51 tr=141.09 qIzSh=-11428 fvent=0.000 pz0=-0.0367 qsHvac=0 @@ -13290,7 +13290,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.126 mwDuctLk=0.000 mwSys=0.000 tdb=142.44 airX=24.670 dryAirMass=43.29 XLGain=0.00 W=0.013223 twb=80.44 rh=0.0814 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 211 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 211 @@ -13315,7 +13315,7 @@ Z1 CZ: anMCp/T[ 0]=272.67/29339.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.100 mwDuctLk=0.000 mwSys=0.000 tdb=142.36 airX=24.597 dryAirMass=43.30 XLGain=0.00 W=0.013236 twb=80.44 rh=0.0816 Attic UZ: anMCp/T[ 0]=259.41/25631.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=192432.86 Dair=1344.01 Nrad=154293.01 Drad=1101.25 CX=878.06 airX=24.597 + Nair=192432.87 Dair=1344.01 Nrad=154293.01 Drad=1101.25 CX=878.06 airX=24.597 ta=142.36 tr=141.11 qIzSh=-11298 fvent=0.000 pz0=-0.0364 qsHvac=0 @@ -13326,13 +13326,13 @@ Wed 10-Jul hr=15 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.827 mwDuctLk=0.000 mwSys=0.000 tdb=74.67 airX=4.529 dryAirMass=247.22 XLGain=0.00 W=0.013277 twb=64.17 rh=0.5913 Z1 CZ: anMCp/T[ 0]=272.72/29361.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2383495.61 Dair=31727.95 Nrad=105232.34 Drad=1348.47 CX=698.81 airX=9.329 + Nair=2383495.62 Dair=31727.95 Nrad=105232.34 Drad=1348.47 CX=698.81 airX=9.329 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=74.67 tr=76.89 qIzSh=8998 fvent=0.000 pz0=0.0231 qsHvac=-16027 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.074 mwDuctLk=0.000 mwSys=0.000 tdb=142.28 airX=24.523 dryAirMass=43.30 XLGain=0.00 W=0.013250 twb=80.43 rh=0.0819 Attic UZ: anMCp/T[ 0]=258.65/25570.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=192018.44 Dair=1342.31 Nrad=154389.85 Drad=1101.43 CX=877.39 airX=24.523 + Nair=192018.44 Dair=1342.31 Nrad=154389.84 Drad=1101.43 CX=877.39 airX=24.523 ta=142.28 tr=141.11 qIzSh=-11231 fvent=0.000 pz0=-0.0363 qsHvac=0 @@ -13343,7 +13343,7 @@ Wed 10-Jul hr=15 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.857 mwDuctLk=0.000 mwSys=0.000 tdb=74.67 airX=4.530 dryAirMass=247.22 XLGain=0.00 W=0.013275 twb=64.17 rh=0.5913 Z1 CZ: anMCp/T[ 0]=272.77/29382.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2383569.29 Dair=31728.42 Nrad=105247.96 Drad=1348.43 CX=698.95 airX=9.330 + Nair=2383569.30 Dair=31728.42 Nrad=105247.96 Drad=1348.43 CX=698.95 airX=9.330 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=74.67 tr=76.90 qIzSh=9016 fvent=0.000 pz0=0.0232 qsHvac=-16072 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.049 mwDuctLk=0.000 mwSys=0.000 @@ -13353,7 +13353,7 @@ Attic UZ: anMCp/T[ 0]=257.88/25509.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=142.21 tr=141.11 qIzSh=-11163 fvent=0.000 pz0=-0.0361 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 212 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 212 @@ -13369,7 +13369,7 @@ Wed 10-Jul hr=15 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.887 mwDuctLk=0.000 mwSys=0.000 tdb=74.67 airX=4.531 dryAirMass=247.22 XLGain=0.00 W=0.013278 twb=64.17 rh=0.5914 Z1 CZ: anMCp/T[ 0]=272.81/29403.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2383636.65 Dair=31728.82 Nrad=105262.96 Drad=1348.41 CX=699.08 airX=9.331 + Nair=2383636.66 Dair=31728.82 Nrad=105262.96 Drad=1348.41 CX=699.08 airX=9.331 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=74.67 tr=76.90 qIzSh=9034 fvent=0.000 pz0=0.0232 qsHvac=-16116 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.027 mwDuctLk=0.000 mwSys=0.000 @@ -13392,7 +13392,7 @@ Z1 CZ: anMCp/T[ 0]=272.85/29424.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.006 mwDuctLk=0.000 mwSys=0.000 tdb=142.07 airX=24.302 dryAirMass=43.32 XLGain=0.00 W=0.013301 twb=80.44 rh=0.0826 Attic UZ: anMCp/T[ 0]=256.39/25390.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=190789.52 Dair=1337.03 Nrad=154648.17 Drad=1101.96 CX=875.25 airX=24.302 + Nair=190789.51 Dair=1337.03 Nrad=154648.16 Drad=1101.96 CX=875.25 airX=24.302 ta=142.07 tr=141.10 qIzSh=-11034 fvent=0.000 pz0=-0.0358 qsHvac=0 @@ -13403,20 +13403,20 @@ Wed 10-Jul hr=15 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.946 mwDuctLk=0.000 mwSys=0.000 tdb=74.67 airX=4.532 dryAirMass=247.22 XLGain=0.00 W=0.013292 twb=64.19 rh=0.5920 Z1 CZ: anMCp/T[ 0]=272.89/29445.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2383759.85 Dair=31729.52 Nrad=105290.92 Drad=1348.37 CX=699.29 airX=9.332 + Nair=2383759.86 Dair=31729.52 Nrad=105290.92 Drad=1348.37 CX=699.29 airX=9.332 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=74.67 tr=76.92 qIzSh=9069 fvent=0.000 pz0=0.0233 qsHvac=-16197 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.987 mwDuctLk=0.000 mwSys=0.000 tdb=142.00 airX=24.232 dryAirMass=43.32 XLGain=0.00 W=0.013320 twb=80.44 rh=0.0829 Attic UZ: anMCp/T[ 0]=255.67/25333.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=190400.38 Dair=1335.29 Nrad=154725.58 Drad=1102.12 CX=874.53 airX=24.232 + Nair=190400.38 Dair=1335.29 Nrad=154725.57 Drad=1102.12 CX=874.53 airX=24.232 ta=142.00 tr=141.10 qIzSh=-10973 fvent=0.000 pz0=-0.0357 qsHvac=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 213 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 213 @@ -13435,7 +13435,7 @@ Z1 CZ: anMCp/T[ 0]=272.94/29466.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.970 mwDuctLk=0.000 mwSys=0.000 tdb=141.94 airX=24.164 dryAirMass=43.32 XLGain=0.00 W=0.013340 twb=80.44 rh=0.0831 Attic UZ: anMCp/T[ 0]=254.98/25278.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=190026.92 Dair=1333.58 Nrad=154799.12 Drad=1102.28 CX=873.84 airX=24.164 + Nair=190026.92 Dair=1333.58 Nrad=154799.11 Drad=1102.28 CX=873.84 airX=24.164 ta=141.94 tr=141.10 qIzSh=-10914 fvent=0.000 pz0=-0.0356 qsHvac=0 @@ -13479,7 +13479,7 @@ Wed 10-Jul hr=15 subhr=14 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 214 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 214 @@ -13542,14 +13542,14 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.158 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=273.28/29601.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 215 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 215 1Z Test ------------------------------------------------------------------------------ - Nair=2384144.43 Dair=31731.65 Nrad=105367.51 Drad=1348.26 CX=699.90 airX=9.339 + Nair=2384144.44 Dair=31731.65 Nrad=105367.51 Drad=1348.26 CX=699.90 airX=9.339 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=74.67 tr=76.96 qIzSh=9197 fvent=0.000 pz0=0.0237 qsHvac=-16453 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.903 mwDuctLk=0.000 mwSys=0.000 @@ -13572,7 +13572,7 @@ Z1 CZ: anMCp/T[ 0]=273.35/29625.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.897 mwDuctLk=0.000 mwSys=0.000 tdb=141.65 airX=23.756 dryAirMass=43.33 XLGain=0.00 W=0.013493 twb=80.52 rh=0.0847 Attic UZ: anMCp/T[ 0]=250.74/24953.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=187874.19 Dair=1323.07 Nrad=155227.20 Drad=1103.30 CX=869.69 airX=23.756 + Nair=187874.18 Dair=1323.07 Nrad=155227.19 Drad=1103.30 CX=869.69 airX=23.756 ta=141.65 tr=141.11 qIzSh=-10563 fvent=0.000 pz0=-0.0348 qsHvac=0 @@ -13605,7 +13605,7 @@ Z1 CZ: anMCp/T[ 0]=273.49/29673.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.67 tr=76.97 qIzSh=9253 fvent=0.000 pz0=0.0239 qsHvac=-16552 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 216 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 216 @@ -13668,7 +13668,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.875 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=248.18/24765.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 217 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 217 @@ -13726,12 +13726,12 @@ Z1 CZ: anMCp/T[ 0]=273.96/29822.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.867 mwDuctLk=0.000 mwSys=0.000 tdb=141.46 airX=23.377 dryAirMass=43.33 XLGain=0.00 W=0.013682 twb=80.64 rh=0.0863 Attic UZ: anMCp/T[ 0]=246.74/24661.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=186079.41 Dair=1313.41 Nrad=155579.55 Drad=1104.26 CX=866.13 airX=23.377 + Nair=186079.40 Dair=1313.41 Nrad=155579.54 Drad=1104.26 CX=866.13 airX=23.377 ta=141.46 tr=141.14 qIzSh=-10243 fvent=0.000 pz0=-0.0341 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 218 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 218 @@ -13786,7 +13786,7 @@ Z1 CZ: anMCp/T[ 0]=274.20/29899.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.862 mwDuctLk=0.000 mwSys=0.000 tdb=141.42 airX=23.246 dryAirMass=43.33 XLGain=0.00 W=0.013754 twb=80.69 rh=0.0868 Attic UZ: anMCp/T[ 0]=245.35/24562.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=185502.39 Dair=1310.13 Nrad=155684.37 Drad=1104.58 CX=864.96 airX=23.246 + Nair=185502.40 Dair=1310.13 Nrad=155684.37 Drad=1104.58 CX=864.96 airX=23.246 ta=141.42 tr=141.15 qIzSh=-10134 fvent=0.000 pz0=-0.0339 qsHvac=0 @@ -13794,7 +13794,7 @@ Attic UZ: anMCp/T[ 0]=245.35/24562.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=16 subhr=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 219 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 219 @@ -13823,7 +13823,7 @@ Wed 10-Jul hr=16 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.543 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.557 dryAirMass=247.04 XLGain=0.00 W=0.013708 twb=64.71 rh=0.6093 Z1 CZ: anMCp/T[ 0]=274.20/29895.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386162.13 Dair=31735.67 Nrad=105579.13 Drad=1348.22 CX=702.95 airX=9.357 + Nair=2386162.14 Dair=31735.67 Nrad=105579.12 Drad=1348.22 CX=702.95 airX=9.357 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.08 qIzSh=9410 fvent=0.000 pz0=0.0243 qsHvac=-16907 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.899 mwDuctLk=0.000 mwSys=0.000 @@ -13840,7 +13840,7 @@ Wed 10-Jul hr=16 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.546 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.557 dryAirMass=247.03 XLGain=0.00 W=0.013723 twb=64.73 rh=0.6099 Z1 CZ: anMCp/T[ 0]=274.22/29895.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386212.17 Dair=31736.06 Nrad=105599.81 Drad=1348.24 CX=703.11 airX=9.357 + Nair=2386212.18 Dair=31736.06 Nrad=105599.81 Drad=1348.24 CX=703.11 airX=9.357 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.08 qIzSh=9409 fvent=0.000 pz0=0.0243 qsHvac=-16935 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.872 mwDuctLk=0.000 mwSys=0.000 @@ -13857,7 +13857,7 @@ Wed 10-Jul hr=16 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.547 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 220 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 220 @@ -13872,7 +13872,7 @@ Z1 CZ: anMCp/T[ 0]=274.18/29890.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.852 mwDuctLk=0.000 mwSys=0.000 tdb=140.99 airX=23.170 dryAirMass=43.36 XLGain=0.00 W=0.013786 twb=80.64 rh=0.0880 Attic UZ: anMCp/T[ 0]=244.70/24478.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=184423.32 Dair=1307.96 Nrad=155709.75 Drad=1104.63 CX=866.97 airX=23.170 + Nair=184423.33 Dair=1307.96 Nrad=155709.75 Drad=1104.63 CX=866.97 airX=23.170 ta=140.99 tr=140.97 qIzSh=-10022 fvent=0.000 pz0=-0.0336 qsHvac=0 @@ -13883,7 +13883,7 @@ Wed 10-Jul hr=16 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.546 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.556 dryAirMass=247.02 XLGain=0.00 W=0.013748 twb=64.76 rh=0.6110 Z1 CZ: anMCp/T[ 0]=274.11/29881.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386295.87 Dair=31736.79 Nrad=105623.44 Drad=1348.15 CX=703.42 airX=9.356 + Nair=2386295.88 Dair=31736.79 Nrad=105623.44 Drad=1348.15 CX=703.42 airX=9.356 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.10 qIzSh=9403 fvent=0.000 pz0=0.0243 qsHvac=-16975 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.824 mwDuctLk=0.000 mwSys=0.000 @@ -13920,7 +13920,7 @@ Z1 CZ: anMCp/T[ 0]=273.94/29859.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2386330.51 Dair=31737.00 Nrad=105648.00 Drad=1348.15 CX=703.56 airX=9.353 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 221 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 221 @@ -13983,7 +13983,7 @@ Z1 CZ: anMCp/T[ 0]=273.68/29826.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.648 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 222 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 222 @@ -14003,7 +14003,7 @@ Wed 10-Jul hr=16 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.533 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.548 dryAirMass=247.00 XLGain=0.00 W=0.013795 twb=64.81 rh=0.6131 Z1 CZ: anMCp/T[ 0]=273.61/29816.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386340.14 Dair=31736.84 Nrad=105690.60 Drad=1348.23 CX=703.66 airX=9.348 + Nair=2386340.13 Dair=31736.84 Nrad=105690.60 Drad=1348.23 CX=703.66 airX=9.348 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.13 qIzSh=9375 fvent=0.000 pz0=0.0245 qsHvac=-17037 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.612 mwDuctLk=0.000 mwSys=0.000 @@ -14020,7 +14020,7 @@ Wed 10-Jul hr=16 subhr=11 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.532 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.547 dryAirMass=247.00 XLGain=0.00 W=0.013800 twb=64.82 rh=0.6133 Z1 CZ: anMCp/T[ 0]=273.54/29806.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386338.01 Dair=31736.77 Nrad=105699.37 Drad=1348.26 CX=703.67 airX=9.347 + Nair=2386338.01 Dair=31736.77 Nrad=105699.38 Drad=1348.26 CX=703.67 airX=9.347 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.13 qIzSh=9371 fvent=0.000 pz0=0.0245 qsHvac=-17042 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.578 mwDuctLk=0.000 mwSys=0.000 @@ -14043,10 +14043,10 @@ Z1 CZ: anMCp/T[ 0]=273.47/29798.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.544 mwDuctLk=0.000 mwSys=0.000 tdb=139.47 airX=22.541 dryAirMass=43.47 XLGain=0.00 W=0.013823 twb=80.37 rh=0.0918 Attic UZ: anMCp/T[ 0]=238.64/23839.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=179678.36 Dair=1292.46 Nrad=155225.61 Drad=1103.42 CX=857.39 airX=22.541 + Nair=179678.36 Dair=1292.46 Nrad=155225.60 Drad=1103.42 CX=857.39 airX=22.541 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 223 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 223 @@ -14109,7 +14109,7 @@ Attic UZ: anMCp/T[ 0]=236.85/23647.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 224 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 224 @@ -14123,13 +14123,13 @@ Wed 10-Jul hr=16 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.531 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.543 dryAirMass=246.99 XLGain=0.00 W=0.013821 twb=64.84 rh=0.6142 Z1 CZ: anMCp/T[ 0]=273.29/29771.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386321.23 Dair=31736.46 Nrad=105728.67 Drad=1348.35 CX=703.69 airX=9.343 + Nair=2386321.24 Dair=31736.46 Nrad=105728.67 Drad=1348.35 CX=703.69 airX=9.343 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.14 qIzSh=9355 fvent=0.000 pz0=0.0247 qsHvac=-17056 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.422 mwDuctLk=0.000 mwSys=0.000 tdb=138.89 airX=22.297 dryAirMass=43.51 XLGain=0.00 W=0.013835 twb=80.27 rh=0.0932 Attic UZ: anMCp/T[ 0]=236.29/23587.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=177805.60 Dair=1285.67 Nrad=154906.85 Drad=1102.83 CX=852.76 airX=22.297 + Nair=177805.60 Dair=1285.67 Nrad=154906.84 Drad=1102.83 CX=852.76 airX=22.297 ta=138.89 tr=139.78 qIzSh=-9231 fvent=0.000 pz0=-0.0316 qsHvac=0 @@ -14157,7 +14157,7 @@ Wed 10-Jul hr=16 subhr=18 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.533 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.542 dryAirMass=246.99 XLGain=0.00 W=0.013828 twb=64.85 rh=0.6145 Z1 CZ: anMCp/T[ 0]=273.23/29761.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386309.64 Dair=31736.37 Nrad=105731.56 Drad=1348.37 CX=703.68 airX=9.342 + Nair=2386309.65 Dair=31736.37 Nrad=105731.56 Drad=1348.37 CX=703.68 airX=9.342 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.14 qIzSh=9349 fvent=0.000 pz0=0.0247 qsHvac=-17052 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.367 mwDuctLk=0.000 mwSys=0.000 @@ -14172,7 +14172,7 @@ Wed 10-Jul hr=16 subhr=19 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 225 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 225 @@ -14189,7 +14189,7 @@ Z1 CZ: anMCp/T[ 0]=273.21/29757.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.340 mwDuctLk=0.000 mwSys=0.000 tdb=138.48 airX=22.133 dryAirMass=43.54 XLGain=0.00 W=0.013843 twb=80.20 rh=0.0942 Attic UZ: anMCp/T[ 0]=234.71/23416.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=176886.32 Dair=1283.57 Nrad=154608.51 Drad=1102.14 CX=850.25 airX=22.133 + Nair=176886.31 Dair=1283.57 Nrad=154608.51 Drad=1102.14 CX=850.25 airX=22.133 ta=138.48 tr=139.50 qIzSh=-9087 fvent=0.000 pz0=-0.0313 qsHvac=0 @@ -14206,7 +14206,7 @@ Z1 CZ: anMCp/T[ 0]=273.19/29753.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.314 mwDuctLk=0.000 mwSys=0.000 tdb=138.35 airX=22.081 dryAirMass=43.55 XLGain=0.00 W=0.013845 twb=80.18 rh=0.0945 Attic UZ: anMCp/T[ 0]=234.20/23361.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=176593.50 Dair=1282.91 Nrad=154480.24 Drad=1101.73 CX=850.60 airX=22.081 + Nair=176593.50 Dair=1282.91 Nrad=154480.23 Drad=1101.73 CX=850.60 airX=22.081 ta=138.35 tr=139.40 qIzSh=-9041 fvent=0.000 pz0=-0.0311 qsHvac=0 @@ -14235,7 +14235,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.540 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.541 dryAirMass=246.98 XLGain=0.00 W=0.013840 twb=64.87 rh=0.6150 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 226 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 226 @@ -14249,7 +14249,7 @@ Z1 CZ: anMCp/T[ 0]=273.16/29747.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.262 mwDuctLk=0.000 mwSys=0.000 tdb=138.09 airX=21.978 dryAirMass=43.57 XLGain=0.00 W=0.013850 twb=80.13 rh=0.0952 Attic UZ: anMCp/T[ 0]=233.21/23252.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=176028.65 Dair=1281.70 Nrad=154194.36 Drad=1100.72 CX=852.43 airX=21.978 + Nair=176028.65 Dair=1281.70 Nrad=154194.35 Drad=1100.72 CX=852.43 airX=21.978 ta=138.09 tr=139.21 qIzSh=-8951 fvent=0.000 pz0=-0.0309 qsHvac=0 @@ -14298,7 +14298,7 @@ Z1 CZ: anMCp/T[ 0]=273.13/29739.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 227 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 227 @@ -14309,7 +14309,7 @@ Z1 CZ: anMCp/T[ 0]=273.13/29739.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.187 mwDuctLk=0.000 mwSys=0.000 tdb=137.70 airX=21.827 dryAirMass=43.59 XLGain=0.00 W=0.013858 twb=80.06 rh=0.0962 Attic UZ: anMCp/T[ 0]=231.76/23093.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=175114.59 Dair=1279.24 Nrad=153806.83 Drad=1099.62 CX=852.45 airX=21.827 + Nair=175114.58 Dair=1279.24 Nrad=153806.83 Drad=1099.62 CX=852.45 airX=21.827 ta=137.70 tr=138.93 qIzSh=-8821 fvent=0.000 pz0=-0.0305 qsHvac=0 @@ -14343,7 +14343,7 @@ Z1 CZ: anMCp/T[ 0]=273.12/29735.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.137 mwDuctLk=0.000 mwSys=0.000 tdb=137.45 airX=21.729 dryAirMass=43.61 XLGain=0.00 W=0.013863 twb=80.02 rh=0.0969 Attic UZ: anMCp/T[ 0]=230.81/22989.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=174495.00 Dair=1277.44 Nrad=153550.24 Drad=1098.97 CX=851.88 airX=21.729 + Nair=174495.00 Dair=1277.44 Nrad=153550.23 Drad=1098.97 CX=851.88 airX=21.729 ta=137.45 tr=138.73 qIzSh=-8736 fvent=0.000 pz0=-0.0303 qsHvac=0 @@ -14361,7 +14361,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.113 mwDuctLk=0.000 mwSys=0.000 tdb=137.32 airX=21.680 dryAirMass=43.62 XLGain=0.00 W=0.013865 twb=80.00 rh=0.0972 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 228 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 228 @@ -14369,7 +14369,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.113 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Attic UZ: anMCp/T[ 0]=230.34/22937.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=174184.57 Dair=1276.52 Nrad=153420.62 Drad=1098.65 CX=851.52 airX=21.680 + Nair=174184.56 Dair=1276.52 Nrad=153420.62 Drad=1098.65 CX=851.52 airX=21.680 ta=137.32 tr=138.63 qIzSh=-8694 fvent=0.000 pz0=-0.0302 qsHvac=0 @@ -14386,7 +14386,7 @@ Z1 CZ: anMCp/T[ 0]=273.12/29731.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.088 mwDuctLk=0.000 mwSys=0.000 tdb=137.20 airX=21.631 dryAirMass=43.63 XLGain=0.00 W=0.013867 twb=79.97 rh=0.0976 Attic UZ: anMCp/T[ 0]=229.87/22885.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=173873.93 Dair=1275.59 Nrad=153289.90 Drad=1098.33 CX=851.13 airX=21.631 + Nair=173873.93 Dair=1275.59 Nrad=153289.89 Drad=1098.33 CX=851.13 airX=21.631 ta=137.20 tr=138.53 qIzSh=-8653 fvent=0.000 pz0=-0.0300 qsHvac=0 @@ -14420,11 +14420,11 @@ Z1 CZ: anMCp/T[ 0]=273.27/29731.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.093 mwDuctLk=0.000 mwSys=0.000 tdb=136.87 airX=21.586 dryAirMass=43.65 XLGain=0.00 W=0.013891 twb=79.92 rh=0.0986 Attic UZ: anMCp/T[ 0]=229.51/22819.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=173125.70 Dair=1273.78 Nrad=152957.35 Drad=1097.25 CX=848.19 airX=21.586 + Nair=173125.70 Dair=1273.78 Nrad=152957.34 Drad=1097.25 CX=848.19 airX=21.586 ta=136.87 tr=138.30 qIzSh=-8592 fvent=0.000 pz0=-0.0298 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 229 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 229 @@ -14440,13 +14440,13 @@ Wed 10-Jul hr=17 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.627 mwDuctLk=0.000 mwSys=0.000 tdb=74.75 airX=4.544 dryAirMass=246.95 XLGain=0.00 W=0.013879 twb=64.93 rh=0.6159 Z1 CZ: anMCp/T[ 0]=273.34/29731.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2387327.21 Dair=31735.11 Nrad=105658.71 Drad=1348.53 CX=705.04 airX=9.344 + Nair=2387327.20 Dair=31735.11 Nrad=105658.71 Drad=1348.53 CX=705.04 airX=9.344 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=77.11 qIzSh=9299 fvent=0.000 pz0=0.0251 qsHvac=-16795 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.077 mwDuctLk=0.000 mwSys=0.000 tdb=136.64 airX=21.528 dryAirMass=43.67 XLGain=0.00 W=0.013904 twb=79.89 rh=0.0993 Attic UZ: anMCp/T[ 0]=228.98/22752.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=172668.98 Dair=1273.00 Nrad=152789.82 Drad=1096.79 CX=848.02 airX=21.528 + Nair=172668.97 Dair=1273.00 Nrad=152789.82 Drad=1096.79 CX=848.02 airX=21.528 ta=136.64 tr=138.14 qIzSh=-8536 fvent=0.000 pz0=-0.0297 qsHvac=0 @@ -14487,7 +14487,7 @@ Attic UZ: anMCp/T[ 0]=227.52/22577.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 230 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 230 @@ -14500,13 +14500,13 @@ Wed 10-Jul hr=17 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.688 mwDuctLk=0.000 mwSys=0.000 tdb=74.75 airX=4.545 dryAirMass=246.94 XLGain=0.00 W=0.013911 twb=64.96 rh=0.6173 Z1 CZ: anMCp/T[ 0]=273.37/29710.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2387244.88 Dair=31734.54 Nrad=105654.06 Drad=1348.64 CX=704.83 airX=9.345 + Nair=2387244.87 Dair=31734.54 Nrad=105654.06 Drad=1348.64 CX=704.83 airX=9.345 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=77.11 qIzSh=9276 fvent=0.000 pz0=0.0252 qsHvac=-16751 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.988 mwDuctLk=0.000 mwSys=0.000 tdb=135.88 airX=21.285 dryAirMass=43.72 XLGain=0.00 W=0.013949 twb=79.77 rh=0.1017 Attic UZ: anMCp/T[ 0]=226.67/22479.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=171043.83 Dair=1269.76 Nrad=152187.87 Drad=1094.98 CX=847.70 airX=21.285 + Nair=171043.82 Dair=1269.76 Nrad=152187.87 Drad=1094.98 CX=847.70 airX=21.285 ta=135.88 tr=137.63 qIzSh=-8320 fvent=0.000 pz0=-0.0290 qsHvac=0 @@ -14550,7 +14550,7 @@ Wed 10-Jul hr=17 subhr=8 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 231 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 231 @@ -14600,7 +14600,7 @@ Z1 CZ: anMCp/T[ 0]=273.36/29668.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.812 mwDuctLk=0.000 mwSys=0.000 tdb=134.57 airX=20.833 dryAirMass=43.81 XLGain=0.00 W=0.014029 twb=79.56 rh=0.1057 Attic UZ: anMCp/T[ 0]=222.31/21972.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=167898.25 Dair=1261.07 Nrad=151093.68 Drad=1092.04 CX=844.20 airX=20.833 + Nair=167898.25 Dair=1261.07 Nrad=151093.67 Drad=1092.04 CX=844.20 airX=20.833 ta=134.57 tr=136.71 qIzSh=-7944 fvent=0.000 pz0=-0.0278 qsHvac=0 @@ -14613,14 +14613,14 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.806 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=273.38/29662.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 232 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 232 1Z Test ------------------------------------------------------------------------------ - Nair=2387148.06 Dair=31734.26 Nrad=105630.16 Drad=1348.66 CX=704.68 airX=9.346 + Nair=2387148.05 Dair=31734.26 Nrad=105630.16 Drad=1348.66 CX=704.68 airX=9.346 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=77.10 qIzSh=9227 fvent=0.000 pz0=0.0255 qsHvac=-16665 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.779 mwDuctLk=0.000 mwSys=0.000 @@ -14637,13 +14637,13 @@ Wed 10-Jul hr=17 subhr=12 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.827 mwDuctLk=0.000 mwSys=0.000 tdb=74.75 airX=4.546 dryAirMass=246.90 XLGain=0.00 W=0.014012 twb=65.09 rh=0.6217 Z1 CZ: anMCp/T[ 0]=273.41/29656.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2387133.05 Dair=31734.25 Nrad=105624.29 Drad=1348.66 CX=704.66 airX=9.346 + Nair=2387133.04 Dair=31734.25 Nrad=105624.30 Drad=1348.66 CX=704.66 airX=9.346 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=77.09 qIzSh=9219 fvent=0.000 pz0=0.0256 qsHvac=-16650 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.748 mwDuctLk=0.000 mwSys=0.000 tdb=134.07 airX=20.664 dryAirMass=43.85 XLGain=0.00 W=0.014062 twb=79.49 rh=0.1073 Attic UZ: anMCp/T[ 0]=220.68/21779.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=166676.05 Dair=1257.38 Nrad=150640.42 Drad=1090.94 CX=842.18 airX=20.664 + Nair=166676.05 Dair=1257.38 Nrad=150640.41 Drad=1090.94 CX=842.18 airX=20.664 ta=134.07 tr=136.34 qIzSh=-7808 fvent=0.000 pz0=-0.0274 qsHvac=0 @@ -14676,7 +14676,7 @@ Z1 CZ: anMCp/T[ 0]=273.49/29649.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.75 tr=77.09 qIzSh=9206 fvent=0.000 pz0=0.0257 qsHvac=-16617 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 233 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 233 @@ -14739,7 +14739,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.611 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=217.01/21336.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 234 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 234 @@ -14802,7 +14802,7 @@ Attic UZ: anMCp/T[ 0]=215.01/21089.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 235 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 235 @@ -14865,7 +14865,7 @@ Attic UZ: anMCp/T[ 0]=213.07/20846.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=17 subhr=24 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 236 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 236 @@ -14928,7 +14928,7 @@ Wed 10-Jul hr=17 subhr=27 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.198 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 237 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 237 @@ -14937,7 +14937,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.198 mwDuctLk=0.000 mwSys=0.000 tdb=74.75 airX=4.570 dryAirMass=246.81 XLGain=0.00 W=0.014265 twb=65.39 rh=0.6326 Z1 CZ: anMCp/T[ 0]=274.71/29674.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386828.68 Dair=31734.52 Nrad=105378.11 Drad=1348.34 CX=704.02 airX=9.370 + Nair=2386828.67 Dair=31734.52 Nrad=105378.11 Drad=1348.34 CX=704.02 airX=9.370 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=76.99 qIzSh=9140 fvent=0.000 pz0=0.0264 qsHvac=-16248 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.381 mwDuctLk=0.000 mwSys=0.000 @@ -14960,7 +14960,7 @@ Z1 CZ: anMCp/T[ 0]=274.83/29679.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.358 mwDuctLk=0.000 mwSys=0.000 tdb=130.45 airX=19.540 dryAirMass=44.10 XLGain=0.00 W=0.014334 twb=78.97 rh=0.1203 Attic UZ: anMCp/T[ 0]=209.87/20444.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=158288.05 Dair=1231.70 Nrad=146683.45 Drad=1082.01 CX=825.75 airX=19.540 + Nair=158288.04 Dair=1231.70 Nrad=146683.45 Drad=1082.01 CX=825.75 airX=19.540 ta=130.45 tr=133.35 qIzSh=-6934 fvent=0.000 pz0=-0.0241 qsHvac=0 @@ -14991,7 +14991,7 @@ Z1 CZ: anMCp/T[ 0]=274.98/29673.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2386677.40 Dair=31734.41 Nrad=105257.85 Drad=1348.25 CX=707.86 airX=9.375 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 238 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 238 @@ -15054,7 +15054,7 @@ Z1 CZ: anMCp/T[ 0]=274.80/29614.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.241 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 239 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 239 @@ -15117,7 +15117,7 @@ Attic UZ: anMCp/T[ 0]=203.63/19687.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=153372.29 Dair=1215.56 Nrad=144294.95 Drad=1075.99 CX=816.39 airX=18.897 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 240 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 240 @@ -15151,7 +15151,7 @@ Wed 10-Jul hr=18 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.448 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.569 dryAirMass=246.71 XLGain=0.00 W=0.014476 twb=65.66 rh=0.6409 Z1 CZ: anMCp/T[ 0]=274.55/29522.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2387224.72 Dair=31729.50 Nrad=105103.14 Drad=1348.63 CX=706.36 airX=9.369 + Nair=2387224.71 Dair=31729.50 Nrad=105103.14 Drad=1348.63 CX=706.36 airX=9.369 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=76.85 qIzSh=8988 fvent=0.000 pz0=0.0268 qsHvac=-15579 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.046 mwDuctLk=0.000 mwSys=0.000 @@ -15180,7 +15180,7 @@ Attic UZ: anMCp/T[ 0]=200.77/19351.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 241 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 241 @@ -15200,7 +15200,7 @@ Z1 CZ: anMCp/T[ 0]=274.47/29487.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.969 mwDuctLk=0.000 mwSys=0.000 tdb=127.25 airX=18.512 dryAirMass=44.32 XLGain=0.00 W=0.014575 twb=78.52 rh=0.1334 Attic UZ: anMCp/T[ 0]=199.84/19241.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=150434.18 Dair=1204.11 Nrad=143078.31 Drad=1073.36 CX=810.81 airX=18.512 + Nair=150434.19 Dair=1204.11 Nrad=143078.31 Drad=1073.36 CX=810.81 airX=18.512 ta=127.25 tr=130.70 qIzSh=-6188 fvent=0.000 pz0=-0.0215 qsHvac=0 @@ -15217,7 +15217,7 @@ Z1 CZ: anMCp/T[ 0]=274.44/29471.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.931 mwDuctLk=0.000 mwSys=0.000 tdb=126.98 airX=18.419 dryAirMass=44.34 XLGain=0.00 W=0.014596 twb=78.48 rh=0.1345 Attic UZ: anMCp/T[ 0]=198.92/19133.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=149761.86 Dair=1201.60 Nrad=142769.09 Drad=1072.70 CX=809.39 airX=18.419 + Nair=149761.87 Dair=1201.60 Nrad=142769.09 Drad=1072.70 CX=809.39 airX=18.419 ta=126.98 tr=130.47 qIzSh=-6126 fvent=0.000 pz0=-0.0212 qsHvac=0 @@ -15243,7 +15243,7 @@ Wed 10-Jul hr=18 subhr=13 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 242 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 242 @@ -15260,7 +15260,7 @@ Z1 CZ: anMCp/T[ 0]=274.40/29440.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.858 mwDuctLk=0.000 mwSys=0.000 tdb=126.45 airX=18.238 dryAirMass=44.38 XLGain=0.00 W=0.014638 twb=78.40 rh=0.1368 Attic UZ: anMCp/T[ 0]=197.13/18921.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=148575.27 Dair=1197.65 Nrad=142143.23 Drad=1071.35 CX=806.59 airX=18.238 + Nair=148575.28 Dair=1197.65 Nrad=142143.23 Drad=1071.35 CX=806.59 airX=18.238 ta=126.45 tr=130.00 qIzSh=-6006 fvent=0.000 pz0=-0.0208 qsHvac=0 @@ -15306,7 +15306,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.633 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.567 dryAirMass=246.64 XLGain=0.00 W=0.014646 twb=65.87 rh=0.6482 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 243 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 243 @@ -15314,7 +15314,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.633 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Z1 CZ: anMCp/T[ 0]=274.39/29398.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386633.82 Dair=31726.09 Nrad=104917.87 Drad=1348.79 CX=705.20 airX=9.367 + Nair=2386633.81 Dair=31726.09 Nrad=104917.87 Drad=1348.79 CX=705.20 airX=9.367 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=76.76 qIzSh=8877 fvent=0.000 pz0=0.0271 qsHvac=-15174 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.754 mwDuctLk=0.000 mwSys=0.000 @@ -15337,7 +15337,7 @@ Z1 CZ: anMCp/T[ 0]=274.39/29386.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.721 mwDuctLk=0.000 mwSys=0.000 tdb=125.41 airX=17.893 dryAirMass=44.45 XLGain=0.00 W=0.014722 twb=78.26 rh=0.1415 Attic UZ: anMCp/T[ 0]=193.73/18513.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=146422.00 Dair=1190.96 Nrad=140875.23 Drad=1068.61 CX=801.11 airX=17.893 + Nair=146421.99 Dair=1190.96 Nrad=140875.23 Drad=1068.61 CX=801.11 airX=17.893 ta=125.41 tr=129.08 qIzSh=-5782 fvent=0.000 pz0=-0.0199 qsHvac=0 @@ -15365,11 +15365,11 @@ Wed 10-Jul hr=18 subhr=19 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.707 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.568 dryAirMass=246.62 XLGain=0.00 W=0.014710 twb=65.94 rh=0.6510 Z1 CZ: anMCp/T[ 0]=274.41/29361.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2386395.68 Dair=31724.79 Nrad=104829.83 Drad=1348.82 CX=704.71 airX=9.368 + Nair=2386395.67 Dair=31724.79 Nrad=104829.84 Drad=1348.82 CX=704.71 airX=9.368 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 244 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 244 @@ -15432,7 +15432,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.546 mwDuctLk=0.000 mwSys=0.000 tdb=124.11 airX=17.464 dryAirMass=44.54 XLGain=0.00 W=0.014827 twb=78.08 rh=0.1478 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 245 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 245 @@ -15457,7 +15457,7 @@ Z1 CZ: anMCp/T[ 0]=274.45/29313.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.508 mwDuctLk=0.000 mwSys=0.000 tdb=123.84 airX=17.375 dryAirMass=44.56 XLGain=0.00 W=0.014848 twb=78.04 rh=0.1491 Attic UZ: anMCp/T[ 0]=188.58/17897.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=142956.96 Dair=1178.83 Nrad=138935.83 Drad=1064.48 CX=792.96 airX=17.375 + Nair=142956.95 Dair=1178.83 Nrad=138935.83 Drad=1064.48 CX=792.96 airX=17.375 ta=123.84 tr=127.67 qIzSh=-5457 fvent=0.000 pz0=-0.0185 qsHvac=0 @@ -15495,7 +15495,7 @@ Attic UZ: anMCp/T[ 0]=186.75/17680.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=123.31 tr=127.19 qIzSh=-5347 fvent=0.000 pz0=-0.0181 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 246 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 246 @@ -15558,7 +15558,7 @@ Attic UZ: anMCp/T[ 0]=183.88/17343.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 247 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 247 @@ -15571,13 +15571,13 @@ Wed 10-Jul hr=18 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.957 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.571 dryAirMass=246.53 XLGain=0.00 W=0.014926 twb=66.20 rh=0.6604 Z1 CZ: anMCp/T[ 0]=274.50/29239.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2385466.09 Dair=31719.32 Nrad=104499.15 Drad=1349.04 CX=702.69 airX=9.371 + Nair=2385466.10 Dair=31719.32 Nrad=104499.15 Drad=1349.04 CX=702.69 airX=9.371 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=76.55 qIzSh=8709 fvent=0.000 pz0=0.0277 qsHvac=-14359 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.256 mwDuctLk=0.000 mwSys=0.000 tdb=122.20 airX=16.806 dryAirMass=44.68 XLGain=0.00 W=0.014975 twb=77.81 rh=0.1571 Attic UZ: anMCp/T[ 0]=182.89/17227.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=139209.70 Dair=1164.80 Nrad=136934.73 Drad=1060.24 CX=784.33 airX=16.806 + Nair=139209.71 Dair=1164.80 Nrad=136934.73 Drad=1060.24 CX=784.33 airX=16.806 ta=122.20 tr=126.20 qIzSh=-5122 fvent=0.000 pz0=-0.0171 qsHvac=0 @@ -15621,7 +15621,7 @@ Wed 10-Jul hr=19 subhr=2 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 248 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 248 @@ -15684,7 +15684,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.290 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=267.07/28208.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 249 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 249 @@ -15697,7 +15697,7 @@ Z1 CZ: anMCp/T[ 0]=267.07/28208.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.716 mwDuctLk=0.000 mwSys=0.000 tdb=120.25 airX=16.057 dryAirMass=44.83 XLGain=0.00 W=0.014904 twb=77.33 rh=0.1652 Attic UZ: anMCp/T[ 0]=175.33/16458.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=134331.43 Dair=1144.82 Nrad=134637.17 Drad=1054.35 CX=775.22 airX=16.057 + Nair=134331.44 Dair=1144.82 Nrad=134637.17 Drad=1054.35 CX=775.22 airX=16.057 ta=120.25 tr=124.54 qIzSh=-4624 fvent=0.000 pz0=-0.0162 qsHvac=0 @@ -15714,7 +15714,7 @@ Z1 CZ: anMCp/T[ 0]=265.81/28034.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.603 mwDuctLk=0.000 mwSys=0.000 tdb=119.90 airX=15.903 dryAirMass=44.86 XLGain=0.00 W=0.014882 twb=77.24 rh=0.1666 Attic UZ: anMCp/T[ 0]=173.76/16300.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=133480.79 Dair=1141.37 Nrad=134262.05 Drad=1053.54 CX=773.28 airX=15.903 + Nair=133480.80 Dair=1141.37 Nrad=134262.05 Drad=1053.54 CX=773.28 airX=15.903 ta=119.90 tr=124.25 qIzSh=-4532 fvent=0.000 pz0=-0.0160 qsHvac=0 @@ -15725,13 +15725,13 @@ Wed 10-Jul hr=19 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.067 mwDuctLk=0.000 mwSys=0.000 tdb=74.83 airX=4.406 dryAirMass=246.51 XLGain=0.00 W=0.014892 twb=66.17 rh=0.6580 Z1 CZ: anMCp/T[ 0]=264.54/27861.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2383332.39 Dair=31689.72 Nrad=104271.94 Drad=1351.99 CX=702.31 airX=9.206 + Nair=2383332.38 Dair=31689.72 Nrad=104271.94 Drad=1351.99 CX=702.31 airX=9.206 TH=64.17 TD=68.00 TC=74.83 qhCap=20000 qcCap=-34000 ta=74.83 tr=76.34 qIzSh=8065 fvent=0.000 pz0=0.0263 qsHvac=-12944 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.488 mwDuctLk=0.000 mwSys=0.000 tdb=119.55 airX=15.748 dryAirMass=44.89 XLGain=0.00 W=0.014858 twb=77.14 rh=0.1679 Attic UZ: anMCp/T[ 0]=172.18/16141.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=132660.34 Dair=1138.11 Nrad=133885.23 Drad=1052.74 CX=771.26 airX=15.748 + Nair=132660.35 Dair=1138.11 Nrad=133885.23 Drad=1052.74 CX=771.26 airX=15.748 ta=119.55 tr=123.95 qIzSh=-4441 fvent=0.000 pz0=-0.0159 qsHvac=0 @@ -15747,7 +15747,7 @@ Z1 CZ: anMCp/T[ 0]=263.28/27689.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.83 tr=76.32 qIzSh=7987 fvent=0.000 pz0=0.0261 qsHvac=-12796 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 250 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 250 @@ -15810,7 +15810,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.034 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=165.94/15518.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 251 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 251 @@ -15873,7 +15873,7 @@ Attic UZ: anMCp/T[ 0]=161.50/15075.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 252 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 252 @@ -15894,7 +15894,7 @@ Z1 CZ: anMCp/T[ 0]=254.56/26505.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.601 mwDuctLk=0.000 mwSys=0.000 tdb=116.91 airX=14.569 dryAirMass=45.11 XLGain=0.00 W=0.014641 twb=76.38 rh=0.1781 Attic UZ: anMCp/T[ 0]=160.06/14932.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=126311.22 Dair=1110.81 Nrad=130853.40 Drad=1046.60 CX=754.27 airX=14.569 + Nair=126311.23 Dair=1110.81 Nrad=130853.40 Drad=1046.60 CX=754.27 airX=14.569 ta=116.91 tr=121.63 qIzSh=-3781 fvent=0.000 pz0=-0.0144 qsHvac=0 @@ -15936,7 +15936,7 @@ Attic UZ: anMCp/T[ 0]=157.24/14652.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=19 subhr=18 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 253 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 253 @@ -15988,7 +15988,7 @@ Z1 CZ: anMCp/T[ 0]=248.47/25684.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.093 mwDuctLk=0.000 mwSys=0.000 tdb=115.41 airX=13.903 dryAirMass=45.24 XLGain=0.00 W=0.014493 twb=75.92 rh=0.1840 Attic UZ: anMCp/T[ 0]=153.19/14249.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=123160.53 Dair=1098.24 Nrad=128937.37 Drad=1042.69 CX=744.19 airX=13.903 + Nair=123160.54 Dair=1098.24 Nrad=128937.37 Drad=1042.69 CX=744.19 airX=13.903 ta=115.41 tr=120.22 qIzSh=-3429 fvent=0.000 pz0=-0.0137 qsHvac=0 @@ -15999,7 +15999,7 @@ Wed 10-Jul hr=19 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.569 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 254 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 254 @@ -16062,7 +16062,7 @@ Z1 CZ: anMCp/T[ 0]=243.67/25042.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2376427.68 Dair=31624.29 Nrad=104236.50 Drad=1359.39 CX=689.62 airX=8.856 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 255 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 255 @@ -16074,7 +16074,7 @@ Z1 CZ: anMCp/T[ 0]=243.67/25042.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.716 mwDuctLk=0.000 mwSys=0.000 tdb=114.27 airX=13.413 dryAirMass=45.33 XLGain=0.00 W=0.014372 twb=75.53 rh=0.1884 Attic UZ: anMCp/T[ 0]=148.11/13745.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=120647.74 Dair=1087.05 Nrad=127423.17 Drad=1039.66 CX=736.38 airX=13.413 + Nair=120647.75 Dair=1087.05 Nrad=127423.17 Drad=1039.66 CX=736.38 airX=13.413 ta=114.27 tr=119.13 qIzSh=-3179 fvent=0.000 pz0=-0.0132 qsHvac=0 @@ -16085,7 +16085,7 @@ Wed 10-Jul hr=19 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.161 mwDuctLk=0.000 mwSys=0.000 tdb=74.83 airX=4.036 dryAirMass=246.69 XLGain=0.00 W=0.014416 twb=65.60 rh=0.6374 Z1 CZ: anMCp/T[ 0]=242.49/24883.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2376054.83 Dair=31620.66 Nrad=104242.83 Drad=1359.82 CX=688.94 airX=8.836 + Nair=2376054.82 Dair=31620.66 Nrad=104242.84 Drad=1359.82 CX=688.94 airX=8.836 TH=64.17 TD=68.00 TC=74.83 qhCap=20000 qcCap=-34000 ta=74.83 tr=76.05 qIzSh=6738 fvent=0.000 pz0=0.0234 qsHvac=-10610 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.626 mwDuctLk=0.000 mwSys=0.000 @@ -16125,7 +16125,7 @@ Z1 CZ: anMCp/T[ 0]=240.12/24569.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.449 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 256 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 256 @@ -16162,7 +16162,7 @@ Wed 10-Jul hr=19 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.763 mwDuctLk=0.000 mwSys=0.000 tdb=74.83 airX=3.956 dryAirMass=246.74 XLGain=0.00 W=0.014296 twb=65.45 rh=0.6323 Z1 CZ: anMCp/T[ 0]=237.77/24257.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2374594.99 Dair=31606.42 Nrad=104274.36 Drad=1361.50 CX=686.26 airX=8.756 + Nair=2374595.00 Dair=31606.42 Nrad=104274.36 Drad=1361.50 CX=686.26 airX=8.756 TH=64.17 TD=68.00 TC=74.83 qhCap=20000 qcCap=-34000 ta=74.83 tr=76.00 qIzSh=6464 fvent=0.000 pz0=0.0228 qsHvac=-10182 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.279 mwDuctLk=0.000 mwSys=0.000 @@ -16188,7 +16188,7 @@ Attic UZ: anMCp/T[ 0]=142.18/13137.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=117012.97 Dair=1070.11 Nrad=125008.17 Drad=1033.61 CX=716.88 airX=12.836 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 257 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 257 @@ -16251,7 +16251,7 @@ Attic UZ: anMCp/T[ 0]=141.65/13022.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 258 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 258 @@ -16314,7 +16314,7 @@ Wed 10-Jul hr=20 subhr=7 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 259 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 259 @@ -16325,7 +16325,7 @@ Wed 10-Jul hr=20 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.152 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.790 dryAirMass=246.78 XLGain=0.00 W=0.014145 twb=65.28 rh=0.6249 Z1 CZ: anMCp/T[ 0]=227.80/22759.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372623.26 Dair=31576.16 Nrad=104405.42 Drad=1365.32 CX=675.10 airX=8.590 + Nair=2372623.25 Dair=31576.16 Nrad=104405.42 Drad=1365.32 CX=675.10 airX=8.590 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ta=74.88 tr=75.94 qIzSh=5703 fvent=0.000 pz0=0.0210 qsHvac=-9078 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.169 mwDuctLk=0.000 mwSys=0.000 @@ -16342,7 +16342,7 @@ Wed 10-Jul hr=20 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.080 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.769 dryAirMass=246.79 XLGain=0.00 W=0.014135 twb=65.27 rh=0.6244 Z1 CZ: anMCp/T[ 0]=226.56/22575.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372242.34 Dair=31572.61 Nrad=104418.48 Drad=1365.74 CX=674.45 airX=8.569 + Nair=2372242.33 Dair=31572.61 Nrad=104418.48 Drad=1365.74 CX=674.45 airX=8.569 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ta=74.88 tr=75.93 qIzSh=5612 fvent=0.000 pz0=0.0207 qsHvac=-8957 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.161 mwDuctLk=0.000 mwSys=0.000 @@ -16359,7 +16359,7 @@ Wed 10-Jul hr=20 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.008 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.748 dryAirMass=246.79 XLGain=0.00 W=0.014126 twb=65.26 rh=0.6241 Z1 CZ: anMCp/T[ 0]=225.32/22392.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2371861.38 Dair=31569.05 Nrad=104431.65 Drad=1366.17 CX=673.81 airX=8.548 + Nair=2371861.37 Dair=31569.05 Nrad=104431.65 Drad=1366.17 CX=673.81 airX=8.548 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ta=74.88 tr=75.92 qIzSh=5522 fvent=0.000 pz0=0.0205 qsHvac=-8836 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.155 mwDuctLk=0.000 mwSys=0.000 @@ -16377,7 +16377,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.936 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.728 dryAirMass=246.80 XLGain=0.00 W=0.014118 twb=65.25 rh=0.6237 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 260 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 260 @@ -16440,7 +16440,7 @@ Z1 CZ: anMCp/T[ 0]=220.33/21663.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 261 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 261 @@ -16451,7 +16451,7 @@ Z1 CZ: anMCp/T[ 0]=220.33/21663.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.138 mwDuctLk=0.000 mwSys=0.000 tdb=109.03 airX=12.631 dryAirMass=45.77 XLGain=0.00 W=0.014079 twb=74.01 rh=0.2147 Attic UZ: anMCp/T[ 0]=140.83/12719.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=112831.53 Dair=1067.05 Nrad=119960.71 Drad=1021.36 CX=704.60 airX=12.631 + Nair=112831.54 Dair=1067.05 Nrad=119960.71 Drad=1021.36 CX=704.60 airX=12.631 ta=109.03 tr=114.01 qIzSh=-2635 fvent=0.000 pz0=-0.0125 qsHvac=0 @@ -16503,7 +16503,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.135 mwDuctLk=0.000 mwSys=0.000 tdb=108.23 airX=12.613 dryAirMass=45.84 XLGain=0.00 W=0.014073 twb=73.81 rh=0.2198 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 262 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 262 @@ -16566,7 +16566,7 @@ Attic UZ: anMCp/T[ 0]=140.92/12587.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=107.43 tr=112.41 qIzSh=-2551 fvent=0.000 pz0=-0.0125 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 263 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 263 @@ -16629,7 +16629,7 @@ Attic UZ: anMCp/T[ 0]=141.10/12532.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 264 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 264 @@ -16642,7 +16642,7 @@ Wed 10-Jul hr=20 subhr=23 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.985 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.454 dryAirMass=246.82 XLGain=0.00 W=0.014070 twb=65.19 rh=0.6216 Z1 CZ: anMCp/T[ 0]=207.67/19870.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2366519.91 Dair=31518.16 Nrad=104627.31 Drad=1372.24 CX=664.56 airX=8.254 + Nair=2366519.92 Dair=31518.16 Nrad=104627.31 Drad=1372.24 CX=664.56 airX=8.254 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ta=74.88 tr=75.80 qIzSh=4321 fvent=0.000 pz0=0.0173 qsHvac=-7211 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.150 mwDuctLk=0.000 mwSys=0.000 @@ -16692,7 +16692,7 @@ Wed 10-Jul hr=20 subhr=26 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 265 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 265 @@ -16755,7 +16755,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.536 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=199.91/18811.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 266 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 266 @@ -16818,7 +16818,7 @@ Z1 CZ: anMCp/T[ 0]=197.65/18467.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.92 tr=75.74 qIzSh=3660 fvent=0.000 pz0=0.0155 qsHvac=-6222 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 267 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 267 @@ -16845,7 +16845,7 @@ Z1 CZ: anMCp/T[ 0]=196.95/18358.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.177 mwDuctLk=0.000 mwSys=0.000 tdb=103.76 airX=12.723 dryAirMass=46.21 XLGain=0.00 W=0.013955 twb=72.65 rh=0.2486 Attic UZ: anMCp/T[ 0]=143.21/12434.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=107911.88 Dair=1073.09 Nrad=112212.52 Drad=1000.39 CX=688.27 airX=12.723 + Nair=107911.87 Dair=1073.09 Nrad=112212.52 Drad=1000.39 CX=688.27 airX=12.723 ta=103.76 tr=108.74 qIzSh=-2424 fvent=0.000 pz0=-0.0126 qsHvac=0 @@ -16862,7 +16862,7 @@ Z1 CZ: anMCp/T[ 0]=196.25/18249.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.170 mwDuctLk=0.000 mwSys=0.000 tdb=103.50 airX=12.743 dryAirMass=46.23 XLGain=0.00 W=0.013918 twb=72.55 rh=0.2498 Attic UZ: anMCp/T[ 0]=143.50/12432.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=107734.68 Dair=1074.06 Nrad=111837.37 Drad=999.37 CX=687.86 airX=12.743 + Nair=107734.68 Dair=1074.06 Nrad=111837.38 Drad=999.37 CX=687.86 airX=12.743 ta=103.50 tr=108.48 qIzSh=-2420 fvent=0.000 pz0=-0.0125 qsHvac=0 @@ -16881,7 +16881,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.162 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=143.79/12429.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 268 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 268 @@ -16944,7 +16944,7 @@ Attic UZ: anMCp/T[ 0]=144.66/12421.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 269 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 269 @@ -17007,7 +17007,7 @@ Attic UZ: anMCp/T[ 0]=145.54/12415.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=21 subhr=12 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 270 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 270 @@ -17070,7 +17070,7 @@ Wed 10-Jul hr=21 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.220 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 271 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 271 @@ -17133,7 +17133,7 @@ Z1 CZ: anMCp/T[ 0]=186.19/16734.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2360415.85 Dair=31447.00 Nrad=104887.75 Drad=1381.31 CX=648.64 airX=7.895 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 272 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 272 @@ -17196,7 +17196,7 @@ Z1 CZ: anMCp/T[ 0]=183.95/16411.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.987 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 273 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 273 @@ -17259,7 +17259,7 @@ Attic UZ: anMCp/T[ 0]=149.59/12417.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=104088.62 Dair=1091.60 Nrad=104566.82 Drad=979.61 CX=678.44 airX=13.145 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 274 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 274 @@ -17322,7 +17322,7 @@ Attic UZ: anMCp/T[ 0]=150.60/12426.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 275 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 275 @@ -17336,7 +17336,7 @@ Wed 10-Jul hr=21 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.241 mwDuctLk=0.000 mwSys=0.000 tdb=74.92 airX=2.965 dryAirMass=247.19 XLGain=0.00 W=0.013002 twb=63.90 rh=0.5747 Z1 CZ: anMCp/T[ 0]=178.55/15652.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2357827.63 Dair=31421.73 Nrad=104954.26 Drad=1384.43 CX=643.69 airX=7.765 + Nair=2357827.64 Dair=31421.73 Nrad=104954.26 Drad=1384.43 CX=643.69 airX=7.765 TH=64.08 TD=68.00 TC=74.92 qhCap=20000 qcCap=-34000 ta=74.92 tr=75.53 qIzSh=2276 fvent=0.000 pz0=0.0122 qsHvac=-4209 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.926 mwDuctLk=0.000 mwSys=0.000 @@ -17353,7 +17353,7 @@ Wed 10-Jul hr=21 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.168 mwDuctLk=0.000 mwSys=0.000 tdb=74.92 airX=2.952 dryAirMass=247.21 XLGain=0.00 W=0.012959 twb=63.84 rh=0.5728 Z1 CZ: anMCp/T[ 0]=177.75/15542.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2357561.65 Dair=31419.09 Nrad=104962.10 Drad=1384.76 CX=643.17 airX=7.752 + Nair=2357561.66 Dair=31419.09 Nrad=104962.10 Drad=1384.76 CX=643.17 airX=7.752 TH=64.08 TD=68.00 TC=74.92 qhCap=20000 qcCap=-34000 ta=74.92 tr=75.52 qIzSh=2226 fvent=0.000 pz0=0.0120 qsHvac=-4135 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.918 mwDuctLk=0.000 mwSys=0.000 @@ -17385,7 +17385,7 @@ Wed 10-Jul hr=22 subhr=1 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 276 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 276 @@ -17419,7 +17419,7 @@ Z1 CZ: anMCp/T[ 0]=175.52/15278.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.772 mwDuctLk=0.000 mwSys=0.000 tdb=96.48 airX=13.071 dryAirMass=46.91 XLGain=0.00 W=0.012710 twb=69.47 rh=0.2824 Attic UZ: anMCp/T[ 0]=149.33/12230.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=102214.21 Dair=1093.18 Nrad=101662.29 Drad=970.74 CX=665.44 airX=13.071 + Nair=102214.21 Dair=1093.18 Nrad=101662.30 Drad=970.74 CX=665.44 airX=13.071 ta=96.48 tr=101.37 qIzSh=-2177 fvent=0.000 pz0=-0.0114 qsHvac=0 @@ -17448,7 +17448,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.939 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.893 dryAirMass=247.27 XLGain=0.00 W=0.012784 twb=63.62 rh=0.5644 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 277 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 277 @@ -17473,7 +17473,7 @@ Wed 10-Jul hr=22 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.896 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.882 dryAirMass=247.28 XLGain=0.00 W=0.012755 twb=63.59 rh=0.5632 Z1 CZ: anMCp/T[ 0]=173.55/15037.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2357222.13 Dair=31401.59 Nrad=105077.24 Drad=1387.36 CX=629.06 airX=7.682 + Nair=2357222.13 Dair=31401.59 Nrad=105077.25 Drad=1387.36 CX=629.06 airX=7.682 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.50 qIzSh=2029 fvent=0.000 pz0=0.0116 qsHvac=-3749 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.655 mwDuctLk=0.000 mwSys=0.000 @@ -17507,11 +17507,11 @@ Wed 10-Jul hr=22 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.810 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.859 dryAirMass=247.30 XLGain=0.00 W=0.012702 twb=63.52 rh=0.5609 Z1 CZ: anMCp/T[ 0]=172.23/14877.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2356798.32 Dair=31397.13 Nrad=105093.01 Drad=1387.92 CX=628.19 airX=7.659 + Nair=2356798.31 Dair=31397.13 Nrad=105093.01 Drad=1387.92 CX=628.19 airX=7.659 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 278 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 278 @@ -17533,13 +17533,13 @@ Wed 10-Jul hr=22 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.767 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.848 dryAirMass=247.31 XLGain=0.00 W=0.012678 twb=63.48 rh=0.5598 Z1 CZ: anMCp/T[ 0]=171.56/14797.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2356584.40 Dair=31394.86 Nrad=105101.34 Drad=1388.21 CX=627.74 airX=7.648 + Nair=2356584.39 Dair=31394.86 Nrad=105101.35 Drad=1388.21 CX=627.74 airX=7.648 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.48 qIzSh=1938 fvent=0.000 pz0=0.0114 qsHvac=-3603 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.549 mwDuctLk=0.000 mwSys=0.000 tdb=95.17 airX=12.782 dryAirMass=47.03 XLGain=0.00 W=0.012583 twb=68.99 rh=0.2910 Attic UZ: anMCp/T[ 0]=146.41/11905.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=100176.31 Dair=1085.85 Nrad=99747.45 Drad=966.20 CX=658.95 airX=12.782 + Nair=100176.32 Dair=1085.85 Nrad=99747.45 Drad=966.20 CX=658.95 airX=12.782 ta=95.17 tr=99.96 qIzSh=-2028 fvent=0.000 pz0=-0.0108 qsHvac=0 @@ -17574,7 +17574,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.483 mwDuctLk=0.000 mwSys=0.000 tdb=94.74 airX=12.695 dryAirMass=47.07 XLGain=0.00 W=0.012548 twb=68.84 rh=0.2939 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 279 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 279 @@ -17610,7 +17610,7 @@ Wed 10-Jul hr=22 subhr=12 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.593 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.803 dryAirMass=247.34 XLGain=0.00 W=0.012591 twb=63.37 rh=0.5561 Z1 CZ: anMCp/T[ 0]=168.87/14475.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2355721.14 Dair=31385.67 Nrad=105137.31 Drad=1389.38 CX=625.94 airX=7.603 + Nair=2355721.15 Dair=31385.67 Nrad=105137.31 Drad=1389.38 CX=625.94 airX=7.603 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.45 qIzSh=1818 fvent=0.000 pz0=0.0111 qsHvac=-3412 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.421 mwDuctLk=0.000 mwSys=0.000 @@ -17637,7 +17637,7 @@ Attic UZ: anMCp/T[ 0]=144.29/11664.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=94.11 tr=98.82 qIzSh=-1915 fvent=0.000 pz0=-0.0103 qsHvac=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 280 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 280 @@ -17687,7 +17687,7 @@ Wed 10-Jul hr=22 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.419 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.757 dryAirMass=247.37 XLGain=0.00 W=0.012517 twb=63.27 rh=0.5529 Z1 CZ: anMCp/T[ 0]=166.14/14154.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2354851.07 Dair=31376.32 Nrad=105176.75 Drad=1390.59 CX=624.10 airX=7.557 + Nair=2354851.06 Dair=31376.32 Nrad=105176.75 Drad=1390.59 CX=624.10 airX=7.557 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.43 qIzSh=1701 fvent=0.000 pz0=0.0108 qsHvac=-3225 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.305 mwDuctLk=0.000 mwSys=0.000 @@ -17700,7 +17700,7 @@ Attic UZ: anMCp/T[ 0]=143.14/11531.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 281 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 281 @@ -17713,7 +17713,7 @@ Wed 10-Jul hr=22 subhr=17 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.376 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.746 dryAirMass=247.38 XLGain=0.00 W=0.012500 twb=63.25 rh=0.5521 Z1 CZ: anMCp/T[ 0]=165.45/14073.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2354632.66 Dair=31373.97 Nrad=105187.11 Drad=1390.89 CX=623.63 airX=7.546 + Nair=2354632.65 Dair=31373.97 Nrad=105187.11 Drad=1390.89 CX=623.63 airX=7.546 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.42 qIzSh=1672 fvent=0.000 pz0=0.0107 qsHvac=-3180 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.278 mwDuctLk=0.000 mwSys=0.000 @@ -17763,7 +17763,7 @@ Wed 10-Jul hr=22 subhr=20 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 282 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 282 @@ -17826,7 +17826,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.113 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=161.28/13591.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 283 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 283 @@ -17889,7 +17889,7 @@ Z1 CZ: anMCp/T[ 0]=159.15/13349.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.96 tr=75.36 qIzSh=1419 fvent=0.000 pz0=0.0100 qsHvac=-2779 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 284 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 284 @@ -17944,7 +17944,7 @@ Wed 10-Jul hr=22 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.849 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.605 dryAirMass=247.45 XLGain=0.00 W=0.012321 twb=63.01 rh=0.5444 Z1 CZ: anMCp/T[ 0]=157.01/13106.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2351973.23 Dair=31344.92 Nrad=105326.70 Drad=1394.70 CX=617.87 airX=7.405 + Nair=2351973.23 Dair=31344.92 Nrad=105326.69 Drad=1394.70 CX=617.87 airX=7.405 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.35 qIzSh=1338 fvent=0.000 pz0=0.0098 qsHvac=-2650 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.995 mwDuctLk=0.000 mwSys=0.000 @@ -17952,7 +17952,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.995 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=139.05/11039.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 285 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 285 @@ -18015,7 +18015,7 @@ Attic UZ: anMCp/T[ 0]=135.93/10774.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 286 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 286 @@ -18078,7 +18078,7 @@ Attic UZ: anMCp/T[ 0]=133.09/10530.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=23 subhr=6 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 287 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 287 @@ -18124,7 +18124,7 @@ Wed 10-Jul hr=23 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.123 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.375 dryAirMass=247.47 XLGain=0.00 W=0.012224 twb=62.90 rh=0.5395 Z1 CZ: anMCp/T[ 0]=143.14/11794.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2349697.83 Dair=31302.76 Nrad=105669.43 Drad=1400.40 CX=603.68 airX=7.175 + Nair=2349697.84 Dair=31302.76 Nrad=105669.43 Drad=1400.40 CX=603.68 airX=7.175 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.32 qIzSh=1059 fvent=0.000 pz0=0.0082 qsHvac=-2184 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.515 mwDuctLk=0.000 mwSys=0.000 @@ -18141,7 +18141,7 @@ Wed 10-Jul hr=23 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.044 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 288 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 288 @@ -18167,7 +18167,7 @@ Wed 10-Jul hr=23 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.965 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.325 dryAirMass=247.48 XLGain=0.00 W=0.012207 twb=62.87 rh=0.5387 Z1 CZ: anMCp/T[ 0]=140.12/11512.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2348937.06 Dair=31293.64 Nrad=105740.23 Drad=1401.60 CX=601.99 airX=7.125 + Nair=2348937.07 Dair=31293.64 Nrad=105740.23 Drad=1401.60 CX=601.99 airX=7.125 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.31 qIzSh=1003 fvent=0.000 pz0=0.0079 qsHvac=-2101 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.419 mwDuctLk=0.000 mwSys=0.000 @@ -18204,7 +18204,7 @@ Z1 CZ: anMCp/T[ 0]=137.09/11230.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2348170.01 Dair=31284.41 Nrad=105812.30 Drad=1402.83 CX=600.26 airX=7.074 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 289 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 289 @@ -18244,7 +18244,7 @@ Wed 10-Jul hr=23 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.650 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.224 dryAirMass=247.49 XLGain=0.00 W=0.012176 twb=62.83 rh=0.5374 Z1 CZ: anMCp/T[ 0]=134.07/10950.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2347396.63 Dair=31275.08 Nrad=105885.81 Drad=1404.08 CX=598.48 airX=7.024 + Nair=2347396.64 Dair=31275.08 Nrad=105885.81 Drad=1404.08 CX=598.48 airX=7.024 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.29 qIzSh=896 fvent=0.000 pz0=0.0073 qsHvac=-1939 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.234 mwDuctLk=0.000 mwSys=0.000 @@ -18267,7 +18267,7 @@ Z1 CZ: anMCp/T[ 0]=132.55/10810.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.189 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 290 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 290 @@ -18330,7 +18330,7 @@ Attic UZ: anMCp/T[ 0]=121.95/9568.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=87180.92 Dair=1022.54 Nrad=88622.21 Drad=939.57 CX=612.40 airX=10.495 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 291 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 291 @@ -18364,7 +18364,7 @@ Wed 10-Jul hr=23 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.179 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.073 dryAirMass=247.51 XLGain=0.00 W=0.012134 twb=62.78 rh=0.5356 Z1 CZ: anMCp/T[ 0]=124.95/10116.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2345033.77 Dair=31246.41 Nrad=106117.56 Drad=1408.01 CX=592.85 airX=6.873 + Nair=2345033.78 Dair=31246.41 Nrad=106117.56 Drad=1408.01 CX=592.85 airX=6.873 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.26 qIzSh=745 fvent=0.000 pz0=0.0063 qsHvac=-1706 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.974 mwDuctLk=0.000 mwSys=0.000 @@ -18381,7 +18381,7 @@ Wed 10-Jul hr=23 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.100 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.047 dryAirMass=247.51 XLGain=0.00 W=0.012128 twb=62.77 rh=0.5353 Z1 CZ: anMCp/T[ 0]=123.43/9978.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2344639.70 Dair=31241.61 Nrad=106153.98 Drad=1408.63 CX=592.00 airX=6.847 + Nair=2344639.71 Dair=31241.61 Nrad=106153.98 Drad=1408.63 CX=592.00 airX=6.847 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.25 qIzSh=721 fvent=0.000 pz0=0.0062 qsHvac=-1669 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.933 mwDuctLk=0.000 mwSys=0.000 @@ -18393,7 +18393,7 @@ Attic UZ: anMCp/T[ 0]=119.63/9366.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 292 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 292 @@ -18456,7 +18456,7 @@ Wed 10-Jul hr=23 subhr=25 ---------------- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 293 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 293 @@ -18519,7 +18519,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=5.551 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=1.870 dryAirMass=247.53 XLGain=0.00 W=0.012084 twb=62.71 rh=0.5334 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 294 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 294 @@ -18544,7 +18544,7 @@ Wed 10-Jul hr=23 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=5.472 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=1.844 dryAirMass=247.53 XLGain=0.00 W=0.012078 twb=62.70 rh=0.5331 Z1 CZ: anMCp/T[ 0]=111.18/8881.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2341430.97 Dair=31202.30 Nrad=106449.16 Drad=1413.72 CX=585.29 airX=6.644 + Nair=2341430.96 Dair=31202.30 Nrad=106449.16 Drad=1413.72 CX=585.29 airX=6.644 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.21 qIzSh=543 fvent=0.000 pz0=0.0050 qsHvac=-1381 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.623 mwDuctLk=0.000 mwSys=0.000 @@ -18552,7 +18552,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.623 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=113.86/8862.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=83605.65 Dair=999.72 Nrad=86132.46 Drad=934.25 CX=599.48 airX=9.766 ta=85.92 tr=89.74 qIzSh=-921 fvent=0.000 pz0=-0.0076 qsHvac=0 -! CSE 0.893.0 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -18582,7 +18582,7 @@ Attic UZ: anMCp/T[ 0]=113.86/8862.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 295 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 295 @@ -18645,7 +18645,7 @@ Input for Run 001: DELETE HOLIDAY "Columbus Day" ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 296 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 296 @@ -18708,7 +18708,7 @@ Input for Run 001: // ----- CONSTRUCTION section for heavyweight case ----- ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 297 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 297 @@ -18771,7 +18771,7 @@ Input for Run 001: # #define ACEIL 516.68 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 298 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 298 @@ -18834,7 +18834,7 @@ Input for Run 001: sfCon=WALLCON ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 299 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 299 @@ -18897,7 +18897,7 @@ Input for Run 001: sfInHcModel = Unified //wall inside film coefficient ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 300 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 300 @@ -18960,7 +18960,7 @@ Input for Run 001: ohDistUp=1.64 //dance from top of window ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 301 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 301 @@ -19023,7 +19023,7 @@ Input for Run 001: znCAIR = .01 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 302 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 302 @@ -19086,7 +19086,7 @@ Input for Run 001: sfExHcModel=Unified sfInHcModel=Unified ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 303 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 303 @@ -19149,7 +19149,7 @@ Input for Run 001: reportcol colVal=0 ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 304 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 304 @@ -19212,7 +19212,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 305 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 305 @@ -19221,21 +19221,21 @@ Input for Run 001: -! CSE 0.893.0 for Win32 console run(s) done: Tue 22-Jun-21 11:09:37 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 9:50:26 am -! Executable: d:\cse\msvc\cse.exe -! 22-Jun-21 10:50 am (VS 14.29 2640384 bytes) (HPWH 1.14.0+master.7e0a1c1.4) -! Command line: -x! -t1 1zattic -! Input file: D:\cse\test\1zattic.cse -! Report file: D:\cse\test\1zattic.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 27-Oct-21 9:48 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 1zattic +! Input file: C:\Users\nkruis\projects\cse\test\1zattic.cse +! Report file: C:\Users\nkruis\projects\cse\test\1zattic.rep ! Timing info -- -! Input: Time = 0.05 Calls = 1 T/C = 0.0470 +! Input: Time = 0.09 Calls = 1 T/C = 0.0930 ! AutoSizing: Time = 0.00 Calls = 0 T/C = 0.0000 -! Simulation: Time = 2.72 Calls = 1 T/C = 2.7230 -! Reports: Time = 0.06 Calls = 1 T/C = 0.0610 -! Total: Time = 2.83 Calls = 1 T/C = 2.8350 +! Simulation: Time = 6.77 Calls = 1 T/C = 6.7720 +! Reports: Time = 0.04 Calls = 1 T/C = 0.0430 +! Total: Time = 6.91 Calls = 1 T/C = 6.9090 @@ -19275,5 +19275,5 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 1zattic 001 Tue 22-Jun-21 11:09:34 am Page 306 +! 1zattic 001 Wed 27-Oct-21 9:50:19 am Page 306 \ No newline at end of file diff --git a/test/ref/1ZKIVA.REP b/test/ref/1ZKIVA.REP index 93e04ead3..c4fd616dd 100644 --- a/test/ref/1ZKIVA.REP +++ b/test/ref/1ZKIVA.REP @@ -60,7 +60,7 @@ Monthly Energy Balance, zone "Z1" ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 1 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 1 @@ -123,7 +123,7 @@ Hourly Energy Balance, zone "Z1", Fri 04-Jan ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 2 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 2 @@ -186,7 +186,7 @@ Hourly Energy Balance, zone "Z1", Fri 26-Jul ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 3 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 3 @@ -249,7 +249,7 @@ Yr 3.504 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 4 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 4 @@ -312,7 +312,7 @@ Subhourly User-defined Report, Mon 10-Jun 1 69.152 3.523 73.531 73.417 1.000 2.169 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 5 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 5 @@ -375,7 +375,7 @@ Subhourly User-defined Report, Mon 10-Jun 3 65.408 3.523 72.085 72.141 1.000 3.049 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 6 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 6 @@ -438,7 +438,7 @@ Subhourly User-defined Report, Mon 10-Jun 5 62.672 3.099 70.189 70.463 1.000 3.854 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 7 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 7 @@ -501,7 +501,7 @@ Subhourly User-defined Report, Mon 10-Jun 6 63.5 3.3 70.376 71.84 1.000 3.335 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 8 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 8 @@ -564,7 +564,7 @@ Subhourly User-defined Report, Mon 10-Jun 8 71.708 4.629 74.375 76.284 0 3.374 -3530 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 9 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 9 @@ -627,7 +627,7 @@ Subhourly User-defined Report, Mon 10-Jun 10 78.116 3.982 74.458 76.911 0 3.708 -6254 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 10 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 10 @@ -690,7 +690,7 @@ Subhourly User-defined Report, Mon 10-Jun 12 83.48 3.87 74.542 76.658 0 4.230 -7371 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 11 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 11 @@ -753,7 +753,7 @@ Subhourly User-defined Report, Mon 10-Jun 14 87.116 3.39 74.625 76.924 0 4.247 -8920 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 12 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 12 @@ -816,7 +816,7 @@ Subhourly User-defined Report, Mon 10-Jun 15 87.98 3.915 74.667 77.539 0 4.561 -10910 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 13 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 13 @@ -879,7 +879,7 @@ Subhourly User-defined Report, Mon 10-Jun 17 87.044 3.322 74.75 78.05 0 4.017 -10893 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 14 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 14 @@ -942,7 +942,7 @@ Subhourly User-defined Report, Mon 10-Jun 19 84.632 3.109 74.833 76.101 0 3.477 -5029 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 15 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 15 @@ -1005,7 +1005,7 @@ Subhourly User-defined Report, Mon 10-Jun 21 79.16 2.27 74.917 75.222 0 2.311 -1552 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 16 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 16 @@ -1068,7 +1068,7 @@ Subhourly User-defined Report, Mon 10-Jun 23 74.948 2.27 75 74.93 0 1.507 -258 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 17 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 17 @@ -1131,7 +1131,7 @@ Subhourly User-defined Report, Tue 11-Jun 0 69.62 0.436 73.972 74.203 1.000 3.383 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 18 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 18 @@ -1194,7 +1194,7 @@ Subhourly User-defined Report, Tue 11-Jun 2 65.804 1.096 72.39 72.632 1.000 4.348 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 19 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 19 @@ -1257,7 +1257,7 @@ Subhourly User-defined Report, Tue 11-Jun 4 61.592 1.007 69.551 70.026 1.000 4.994 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 20 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 20 @@ -1320,7 +1320,7 @@ Subhourly User-defined Report, Tue 11-Jun 6 62.78 1.062 68.329 69.726 1.000 3.864 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 21 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 21 @@ -1383,7 +1383,7 @@ Subhourly User-defined Report, Tue 11-Jun 7 69.62 0.125 71.907 73.531 1.000 2.201 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 22 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 22 @@ -1446,7 +1446,7 @@ Subhourly User-defined Report, Tue 11-Jun 9 78.548 1.242 74.417 77.292 0 2.281 -6670 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 23 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 23 @@ -1509,7 +1509,7 @@ Subhourly User-defined Report, Tue 11-Jun 11 86.108 1.89 74.5 76.854 0 3.431 -8008 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 24 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 24 @@ -1572,7 +1572,7 @@ Subhourly User-defined Report, Tue 11-Jun 13 90.032 1.599 74.583 77.011 0 3.724 -9417 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 25 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 25 @@ -1635,7 +1635,7 @@ Subhourly User-defined Report, Tue 11-Jun 15 92.3 1.88 74.667 77.618 0 3.925 -11565 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 26 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 26 @@ -1698,7 +1698,7 @@ Subhourly User-defined Report, Tue 11-Jun 16 92.84 1.732 74.708 78.152 0 3.755 -12399 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 27 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 27 @@ -1761,7 +1761,7 @@ Subhourly User-defined Report, Tue 11-Jun 18 92.876 1.554 74.792 77.424 0 3.412 -9802 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 28 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 28 @@ -1824,7 +1824,7 @@ Subhourly User-defined Report, Tue 11-Jun 20 83.84 1.522 74.875 75.576 0 2.565 -3180 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 29 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 29 @@ -1887,7 +1887,7 @@ Subhourly User-defined Report, Tue 11-Jun 22 68.648 2.428 74.679 74.808 1.000 3.591 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 30 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 30 @@ -1950,7 +1950,7 @@ Subhourly User-defined Report, Wed 12-Jun ---------- ---------- ---------- ---------- ---------- ---------- ---------- ------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 31 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 31 @@ -2013,7 +2013,7 @@ Subhourly User-defined Report, Wed 12-Jun 1 58.892 1.399 68.049 68.937 1.000 5.435 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 32 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 32 @@ -2076,7 +2076,7 @@ Subhourly User-defined Report, Wed 12-Jun 3 55.22 1.643 66.614 66.817 0 2.093 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 33 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 33 @@ -2139,7 +2139,7 @@ Subhourly User-defined Report, Wed 12-Jun 5 53.564 1.589 64.75 65.067 0 2.057 190 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 34 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 34 @@ -2202,7 +2202,7 @@ Subhourly User-defined Report, Wed 12-Jun 7 56.372 1.554 65.821 67.936 0 1.837 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 35 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 35 @@ -2265,7 +2265,7 @@ Subhourly User-defined Report, Wed 12-Jun 8 64.58 1.79 69.818 71.707 1.000 3.452 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 36 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 36 @@ -2328,7 +2328,7 @@ Subhourly User-defined Report, Wed 12-Jun 10 72.428 2.059 74.364 75.784 1.000 2.261 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 37 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 37 @@ -2391,7 +2391,7 @@ Subhourly User-defined Report, Wed 12-Jun 12 77.504 2.417 74.542 76.51 0 2.871 -5064 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 38 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 38 @@ -2454,7 +2454,7 @@ Subhourly User-defined Report, Wed 12-Jun 14 81.932 2.651 74.625 76.809 0 3.492 -6918 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 39 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 39 @@ -2517,7 +2517,7 @@ Subhourly User-defined Report, Wed 12-Jun 16 83.696 3.054 74.708 77.87 0 3.788 -9707 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 40 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 40 @@ -2580,7 +2580,7 @@ Subhourly User-defined Report, Wed 12-Jun 17 81.32 2.965 74.75 77.785 0 3.382 -8482 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 41 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 41 @@ -2643,7 +2643,7 @@ Subhourly User-defined Report, Wed 12-Jun 19 76.064 2.204 74.833 75.933 0 2.068 -2524 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 42 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 42 @@ -2706,7 +2706,7 @@ Subhourly User-defined Report, Wed 12-Jun 21 66.164 2.572 74.141 74.505 1.000 4.442 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 43 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 43 @@ -2769,7 +2769,7 @@ Subhourly User-defined Report, Wed 12-Jun 23 60.548 2.013 70.693 71.399 1.000 5.639 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 44 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 44 @@ -2832,7 +2832,7 @@ Subhourly User-defined Report, Wed 12-Jun ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 45 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 45 @@ -2895,7 +2895,7 @@ Hourly User-defined Report, Wed 06-Mar 3 53.96 53.96 52.84 0 0 0 0 0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 46 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 46 @@ -2958,7 +2958,7 @@ Hourly User-defined Report, Fri 08-Mar 3 52.34 52.34 52.85 58.86 92.99 0 0 1999.32 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 47 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 47 @@ -3021,7 +3021,7 @@ Hourly User-defined Report, Fri 08-Mar ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 48 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 48 @@ -3084,7 +3084,7 @@ Mass CbJ Area: 465.012 UNom: 0.02888 tc: 0.60 subhrly: ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 49 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 49 @@ -3147,7 +3147,7 @@ IzXfer SxA Zn1: Z1 Zn2: Attic UAconst: 0 NVctrl: AirNetIZ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 50 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 50 @@ -3210,7 +3210,7 @@ Mass RDw Area: 130.139 UNom: 0.6162 tc: 1.10 subhrly: Outside: Ambient RSrfNom: 0.17 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 51 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 51 @@ -3273,7 +3273,7 @@ IzXfer AX2 Zn1: Attic Zn2: (ambient) UAconst: 0 NVctrl: AirN ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 52 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 52 @@ -3285,7 +3285,7 @@ IzXfer AX2 Zn1: Attic Zn2: (ambient) UAconst: 0 NVctrl: AirN ! Log for Run 001: ################ -! CSE 0.893.0 for Win32 console Tue 22-Jun-21 11:09:45 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console Wed 27-Oct-21 9:50:27 am ================ @@ -3336,7 +3336,7 @@ tilt theta ta<=ts ta>ts theta ta<=ts ta>ts 20 -70 0.112 0.160 70 0.160 0.112 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 53 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 53 @@ -3399,7 +3399,7 @@ Surface 'RDs': tilt=23 wf=1.000 uf=1.467 rf=1.000 lf=0.631 vf=0.181 fcWind=0.100 fcWind2=8.501 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 54 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 54 @@ -3462,7 +3462,7 @@ Z1 CZ: anMCp/T[ 0]=54.50/4052.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2312069.47 Dair=30821.87 Nrad=112100.58 Drad=1492.10 CX=529.73 airX=5.703 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 55 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 55 @@ -3508,7 +3508,7 @@ Z1 CZ: anMCp/T[ 0]=52.94/3923.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.202 mwDuctLk=0.000 mwSys=0.000 tdb=83.45 airX=12.316 dryAirMass=48.07 XLGain=0.00 W=0.012176 twb=65.30 rh=0.4075 Attic UZ: anMCp/T[ 0]=144.21/10684.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=87707.45 Dair=1082.71 Nrad=83302.00 Drad=919.80 CX=621.10 airX=12.316 + Nair=87707.44 Dair=1082.71 Nrad=83302.00 Drad=919.80 CX=621.10 airX=12.316 ta=83.45 tr=87.70 qIzSh=-1349 fvent=0.000 pz0=-0.0120 qsHvac=0 @@ -3525,7 +3525,7 @@ Z1 CZ: anMCp/T[ 0]=52.64/3895.4 anMCp/T[ 1]=53.97/3994.1 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.174 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 56 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 56 @@ -3588,7 +3588,7 @@ Attic UZ: anMCp/T[ 0]=142.15/10488.9 anMCp/T[ 1]=142.83/10539.9 ventUt=0 Nair=86395.01 Dair=1076.08 Nrad=82321.20 Drad=917.46 CX=616.58 airX=12.122 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 57 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 57 @@ -3651,7 +3651,7 @@ Attic UZ: anMCp/T[ 0]=140.60/10342.8 anMCp/T[ 1]=141.05/10376.5 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 58 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 58 @@ -3714,7 +3714,7 @@ Wed 10-Jul hr=0 subhr=13 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 59 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 59 @@ -3777,7 +3777,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.536 mwDuctLk=0.000 mwSys=0.000 tdb=74.04 airX=0.853 dryAirMass=247.88 XLGain=0.00 W=0.012325 twb=62.73 rh=0.5612 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 60 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 60 @@ -3785,7 +3785,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.536 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Z1 CZ: anMCp/T[ 0]=51.50/3730.5 anMCp/T[ 1]=112.68/8162.6 ventUt=1 - Nair=2283121.99 Dair=30827.35 Nrad=110942.69 Drad=1486.01 CX=524.76 airX=5.653 + Nair=2283121.98 Dair=30827.35 Nrad=110942.69 Drad=1486.01 CX=524.76 airX=5.653 TH=64.96 TD=68.00 TC=74.04 qhCap=20000 qcCap=-34000 ta=74.04 tr=74.50 qIzSh=-82 fvent=0.000 pz0=-0.0016 qsHvac=-853 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.821 mwDuctLk=0.000 mwSys=0.000 @@ -3840,7 +3840,7 @@ Z1 CZ: anMCp/T[ 0]=50.89/3668.3 anMCp/T[ 1]=127.09/9160.6 ventUt=1 TH=64.96 TD=68.00 TC=74.04 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 61 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 61 @@ -3903,7 +3903,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.674 mwDuctLk=0.000 mwSys=0.000 tdb=79.86 airX=11.385 dryAirMass=48.40 XLGain=0.00 W=0.012114 twb=64.22 rh=0.4559 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 62 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 62 @@ -3911,7 +3911,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.674 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Attic UZ: anMCp/T[ 0]=134.21/9742.8 anMCp/T[ 1]=134.43/9759.8 ventUt=0 - Nair=81942.31 Dair=1056.24 Nrad=78544.81 Drad=907.96 CX=602.15 airX=11.385 + Nair=81942.32 Dair=1056.24 Nrad=78544.81 Drad=907.96 CX=602.15 airX=11.385 ta=79.86 tr=83.86 qIzSh=-975 fvent=0.000 pz0=-0.0105 qsHvac=0 @@ -3966,7 +3966,7 @@ Attic UZ: anMCp/T[ 0]=132.83/9613.1 anMCp/T[ 1]=133.12/9634.8 ventUt=0 ta=79.35 tr=83.31 qIzSh=-927 fvent=0.000 pz0=-0.0104 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 63 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 63 @@ -4029,7 +4029,7 @@ Attic UZ: anMCp/T[ 0]=131.54/9490.5 anMCp/T[ 1]=131.89/9516.3 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 64 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 64 @@ -4092,7 +4092,7 @@ Wed 10-Jul hr=1 subhr=2 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 65 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 65 @@ -4155,7 +4155,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.971 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=61.47/4330.5 anMCp/T[ 1]=182.47/12854.8 ventUt=1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 66 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 66 @@ -4202,7 +4202,7 @@ Z1 CZ: anMCp/T[ 0]=62.69/4407.5 anMCp/T[ 1]=186.13/13085.7 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.218 mwDuctLk=0.000 mwSys=0.000 tdb=77.45 airX=10.645 dryAirMass=48.62 XLGain=0.00 W=0.012034 twb=63.39 rh=0.4895 Attic UZ: anMCp/T[ 0]=125.67/9015.6 anMCp/T[ 1]=126.06/9044.7 ventUt=0 - Nair=77865.40 Dair=1033.97 Nrad=75227.25 Drad=898.93 CX=588.53 airX=10.645 + Nair=77865.39 Dair=1033.97 Nrad=75227.25 Drad=898.93 CX=588.53 airX=10.645 ta=77.45 tr=81.22 qIzSh=-719 fvent=1.000 pz0=-0.0093 qsHvac=0 @@ -4218,7 +4218,7 @@ Z1 CZ: anMCp/T[ 0]=63.28/4444.2 anMCp/T[ 1]=187.89/13195.9 ventUt=1 ta=73.98 tr=74.05 qIzSh=-704 fvent=1.000 pz0=-0.0032 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 67 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 67 @@ -4281,7 +4281,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.095 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=123.59/8846.7 anMCp/T[ 1]=123.99/8876.5 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 68 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 68 @@ -4344,7 +4344,7 @@ Attic UZ: anMCp/T[ 0]=122.30/8739.9 anMCp/T[ 1]=122.70/8770.2 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 69 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 69 @@ -4382,7 +4382,7 @@ Z1 CZ: anMCp/T[ 0]=67.50/4701.7 anMCp/T[ 1]=200.50/13966.1 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.970 mwDuctLk=0.000 mwSys=0.000 tdb=76.13 airX=10.272 dryAirMass=48.75 XLGain=0.00 W=0.011941 twb=62.86 rh=0.5084 Attic UZ: anMCp/T[ 0]=121.56/8678.1 anMCp/T[ 1]=121.97/8708.9 ventUt=0 - Nair=75706.33 Dair=1022.07 Nrad=73433.40 Drad=894.54 CX=580.72 airX=10.272 + Nair=75706.33 Dair=1022.07 Nrad=73433.41 Drad=894.54 CX=580.72 airX=10.272 ta=76.13 tr=79.74 qIzSh=-576 fvent=1.000 pz0=-0.0085 qsHvac=0 @@ -4407,7 +4407,7 @@ Attic UZ: anMCp/T[ 0]=121.22/8650.0 anMCp/T[ 1]=121.64/8681.0 ventUt=0 Wed 10-Jul hr=1 subhr=18 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 70 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 70 @@ -4470,7 +4470,7 @@ Wed 10-Jul hr=1 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.070 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 71 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 71 @@ -4533,7 +4533,7 @@ Z1 CZ: anMCp/T[ 0]=71.03/4906.9 anMCp/T[ 1]=210.91/14569.7 ventUt=1 Nair=2261684.64 Dair=30670.75 Nrad=112014.41 Drad=1516.46 CX=479.59 airX=3.489 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 72 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 72 @@ -4596,7 +4596,7 @@ Z1 CZ: anMCp/T[ 0]=72.19/4971.5 anMCp/T[ 1]=214.33/14759.9 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.806 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 73 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 73 @@ -4650,7 +4650,7 @@ Wed 10-Jul hr=2 subhr=0 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.585 mwDuctLk=0.000 mwSys=0.000 tdb=73.59 airX=3.623 dryAirMass=248.28 XLGain=0.00 W=0.011829 twb=61.94 rh=0.5473 Z1 CZ: anMCp/T[ 0]=73.77/5062.1 anMCp/T[ 1]=219.07/15033.4 ventUt=1 - Nair=2258856.48 Dair=30685.31 Nrad=111388.48 Drad=1512.57 CX=479.11 airX=3.623 + Nair=2258856.49 Dair=30685.31 Nrad=111388.48 Drad=1512.57 CX=479.11 airX=3.623 TH=64.88 TD=68.00 TC=74.13 qhCap=20000 qcCap=-34000 ta=73.59 tr=73.63 qIzSh=-1088 fvent=1.000 pz0=-0.0032 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.739 mwDuctLk=0.000 mwSys=0.000 @@ -4659,7 +4659,7 @@ Attic UZ: anMCp/T[ 0]=117.99/8367.5 anMCp/T[ 1]=118.45/8402.1 ventUt=0 Nair=73120.85 Dair=1011.95 Nrad=70713.07 Drad=886.56 CX=571.12 airX=9.937 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 74 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 74 @@ -4693,7 +4693,7 @@ Wed 10-Jul hr=2 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.828 mwDuctLk=0.000 mwSys=0.000 tdb=73.54 airX=3.703 dryAirMass=248.31 XLGain=0.00 W=0.011816 twb=61.90 rh=0.5478 Z1 CZ: anMCp/T[ 0]=75.34/5155.7 anMCp/T[ 1]=223.97/15326.7 ventUt=1 - Nair=2257809.17 Dair=30692.65 Nrad=111228.55 Drad=1511.12 CX=480.89 airX=3.703 + Nair=2257809.18 Dair=30692.65 Nrad=111228.55 Drad=1511.12 CX=480.89 airX=3.703 TH=64.88 TD=68.00 TC=74.13 qhCap=20000 qcCap=-34000 ta=73.54 tr=73.59 qIzSh=-1144 fvent=1.000 pz0=-0.0035 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.636 mwDuctLk=0.000 mwSys=0.000 @@ -4722,7 +4722,7 @@ Attic UZ: anMCp/T[ 0]=114.98/8126.6 anMCp/T[ 1]=115.40/8158.3 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 75 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 75 @@ -4785,7 +4785,7 @@ Wed 10-Jul hr=2 subhr=7 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 76 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 76 @@ -4848,7 +4848,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.730 mwDuctLk=0.000 mwSys=0.000 tdb=73.30 airX=4.000 dryAirMass=248.43 XLGain=0.00 W=0.011801 twb=61.81 rh=0.5515 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 77 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 77 @@ -4856,7 +4856,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.730 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Z1 CZ: anMCp/T[ 0]=81.05/5484.3 anMCp/T[ 1]=242.06/16379.0 ventUt=1 - Nair=2253001.60 Dair=30725.25 Nrad=110561.30 Drad=1504.95 CX=487.21 airX=4.000 + Nair=2253001.61 Dair=30725.25 Nrad=110561.30 Drad=1504.95 CX=487.21 airX=4.000 TH=64.88 TD=68.00 TC=74.13 qhCap=20000 qcCap=-34000 ta=73.30 tr=73.42 qIzSh=-1364 fvent=1.000 pz0=-0.0045 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.301 mwDuctLk=0.000 mwSys=0.000 @@ -4911,7 +4911,7 @@ Z1 CZ: anMCp/T[ 0]=82.98/5590.6 anMCp/T[ 1]=248.26/16726.6 ventUt=1 TH=64.88 TD=68.00 TC=74.13 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 78 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 78 @@ -4974,7 +4974,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.093 mwDuctLk=0.000 mwSys=0.000 tdb=72.12 airX=8.771 dryAirMass=49.13 XLGain=0.00 W=0.011812 twb=61.46 rh=0.5754 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 79 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 79 @@ -5033,11 +5033,11 @@ Z1 CZ: anMCp/T[ 0]=86.52/5779.2 anMCp/T[ 1]=259.72/17349.0 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.002 mwDuctLk=0.000 mwSys=0.000 tdb=71.74 airX=8.601 dryAirMass=49.16 XLGain=0.00 W=0.011822 twb=61.36 rh=0.5832 Attic UZ: anMCp/T[ 0]=103.03/7146.2 anMCp/T[ 1]=102.98/7142.9 ventUt=0 - Nair=67787.17 Dair=969.01 Nrad=67620.47 Drad=880.05 CX=550.71 airX=8.601 + Nair=67787.16 Dair=969.01 Nrad=67620.48 Drad=880.05 CX=550.71 airX=8.601 ta=71.74 tr=74.87 qIzSh=-245 fvent=1.000 pz0=-0.0066 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 80 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 80 @@ -5100,7 +5100,7 @@ Attic UZ: anMCp/T[ 0]=101.36/7006.1 anMCp/T[ 1]=101.21/6994.8 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 81 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 81 @@ -5163,7 +5163,7 @@ Wed 10-Jul hr=2 subhr=26 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 82 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 82 @@ -5226,7 +5226,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.500 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=91.73/6039.7 anMCp/T[ 1]=276.54/18207.3 ventUt=1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 83 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 83 @@ -5289,7 +5289,7 @@ Z1 CZ: anMCp/T[ 0]=91.59/6020.1 anMCp/T[ 1]=276.31/18162.1 ventUt=1 ta=72.46 tr=72.65 qIzSh=-1860 fvent=1.000 pz0=-0.0061 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 84 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 84 @@ -5352,7 +5352,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.465 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=92.38/6316.2 anMCp/T[ 1]=91.86/6278.2 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 85 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 85 @@ -5370,7 +5370,7 @@ Wed 10-Jul hr=3 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.380 mwDuctLk=0.000 mwSys=0.000 tdb=72.29 airX=4.550 dryAirMass=248.88 XLGain=0.00 W=0.011848 twb=61.56 rh=0.5736 Z1 CZ: anMCp/T[ 0]=91.33/5990.1 anMCp/T[ 1]=275.80/18089.2 ventUt=1 - Nair=2227094.17 Dair=30792.27 Nrad=108075.38 Drad=1488.59 CX=503.38 airX=4.550 + Nair=2227094.18 Dair=30792.27 Nrad=108075.38 Drad=1488.59 CX=503.38 airX=4.550 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=72.29 tr=72.52 qIzSh=-1848 fvent=1.000 pz0=-0.0061 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.415 mwDuctLk=0.000 mwSys=0.000 @@ -5404,7 +5404,7 @@ Wed 10-Jul hr=3 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.344 mwDuctLk=0.000 mwSys=0.000 tdb=72.21 airX=4.545 dryAirMass=248.93 XLGain=0.00 W=0.011835 twb=61.52 rh=0.5746 Z1 CZ: anMCp/T[ 0]=91.21/5975.4 anMCp/T[ 1]=275.56/18053.7 ventUt=1 - Nair=2224414.28 Dair=30791.47 Nrad=107971.93 Drad=1488.33 CX=502.89 airX=4.545 + Nair=2224414.29 Dair=30791.47 Nrad=107971.93 Drad=1488.33 CX=502.89 airX=4.545 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=72.21 tr=72.46 qIzSh=-1843 fvent=1.000 pz0=-0.0061 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.314 mwDuctLk=0.000 mwSys=0.000 @@ -5415,7 +5415,7 @@ Attic UZ: anMCp/T[ 0]=89.52/6111.8 anMCp/T[ 1]=88.94/6068.8 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 86 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 86 @@ -5453,7 +5453,7 @@ Z1 CZ: anMCp/T[ 0]=91.09/5961.0 anMCp/T[ 1]=275.34/18019.2 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.212 mwDuctLk=0.000 mwSys=0.000 tdb=69.24 airX=7.230 dryAirMass=49.39 XLGain=0.00 W=0.011820 twb=60.59 rh=0.6341 Attic UZ: anMCp/T[ 0]=87.62/5976.0 anMCp/T[ 1]=86.98/5929.5 ventUt=0 - Nair=62322.02 Dair=922.22 Nrad=64496.86 Drad=872.95 CX=529.79 airX=7.230 + Nair=62322.03 Dair=922.22 Nrad=64496.86 Drad=872.95 CX=529.79 airX=7.230 ta=69.24 tr=72.13 qIzSh=-93 fvent=1.000 pz0=-0.0052 qsHvac=0 @@ -5478,7 +5478,7 @@ Attic UZ: anMCp/T[ 0]=86.66/5908.3 anMCp/T[ 1]=86.01/5860.0 ventUt=0 Wed 10-Jul hr=3 subhr=12 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 87 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 87 @@ -5541,7 +5541,7 @@ Wed 10-Jul hr=3 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.228 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 88 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 88 @@ -5567,13 +5567,13 @@ Wed 10-Jul hr=3 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.213 mwDuctLk=0.000 mwSys=0.000 tdb=71.88 airX=4.529 dryAirMass=249.10 XLGain=0.00 W=0.011765 twb=61.33 rh=0.5777 Z1 CZ: anMCp/T[ 0]=90.77/5920.9 anMCp/T[ 1]=274.82/17925.6 ventUt=1 - Nair=2214221.32 Dair=30789.48 Nrad=107579.25 Drad=1487.37 CX=501.84 airX=4.529 + Nair=2214221.31 Dair=30789.48 Nrad=107579.25 Drad=1487.37 CX=501.84 airX=4.529 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=71.88 tr=72.22 qIzSh=-1828 fvent=1.000 pz0=-0.0060 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.910 mwDuctLk=0.000 mwSys=0.000 tdb=68.60 airX=6.736 dryAirMass=49.46 XLGain=0.00 W=0.011768 twb=60.32 rh=0.6458 Attic UZ: anMCp/T[ 0]=81.94/5573.2 anMCp/T[ 1]=81.15/5515.5 ventUt=0 - Nair=60540.66 Dair=903.93 Nrad=63725.30 Drad=871.82 CX=521.76 airX=6.736 + Nair=60540.67 Dair=903.93 Nrad=63725.30 Drad=871.82 CX=521.76 airX=6.736 ta=68.60 tr=71.41 qIzSh=-51 fvent=1.000 pz0=-0.0046 qsHvac=0 @@ -5604,7 +5604,7 @@ Z1 CZ: anMCp/T[ 0]=90.69/5908.7 anMCp/T[ 1]=274.70/17898.1 ventUt=1 Nair=2211775.30 Dair=30788.97 Nrad=107486.07 Drad=1487.14 CX=501.57 airX=4.527 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 89 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 89 @@ -5667,7 +5667,7 @@ Z1 CZ: anMCp/T[ 0]=90.57/5891.6 anMCp/T[ 1]=274.57/17860.3 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.662 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 90 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 90 @@ -5710,7 +5710,7 @@ Z1 CZ: anMCp/T[ 0]=90.51/5880.9 anMCp/T[ 1]=274.52/17837.5 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.564 mwDuctLk=0.000 mwSys=0.000 tdb=67.88 airX=6.168 dryAirMass=49.53 XLGain=0.00 W=0.011702 twb=60.02 rh=0.6589 Attic UZ: anMCp/T[ 0]=75.41/5113.3 anMCp/T[ 1]=74.41/5041.2 ventUt=0 - Nair=58487.92 Dair=882.18 Nrad=62869.20 Drad=870.69 CX=512.20 airX=6.168 + Nair=58487.91 Dair=882.18 Nrad=62869.20 Drad=870.69 CX=512.20 airX=6.168 ta=67.88 tr=70.60 qIzSh=-10 fvent=1.000 pz0=-0.0040 qsHvac=0 @@ -5730,7 +5730,7 @@ Attic UZ: anMCp/T[ 0]=74.48/5048.5 anMCp/T[ 1]=73.46/4974.2 ventUt=0 Nair=58196.69 Dair=879.03 Nrad=62750.67 Drad=870.54 CX=510.81 airX=6.088 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 91 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 91 @@ -5793,7 +5793,7 @@ Attic UZ: anMCp/T[ 0]=71.72/4855.4 anMCp/T[ 1]=70.60/4774.2 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 92 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 92 @@ -5856,7 +5856,7 @@ Wed 10-Jul hr=4 subhr=1 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 93 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 93 @@ -5919,7 +5919,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.975 mwDuctLk=0.000 mwSys=0.000 tdb=71.19 airX=4.491 dryAirMass=249.49 XLGain=0.00 W=0.011602 twb=60.90 rh=0.5828 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 94 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 94 @@ -5982,7 +5982,7 @@ Z1 CZ: anMCp/T[ 0]=89.34/5764.0 anMCp/T[ 1]=272.02/17550.7 ventUt=1 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 95 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 95 @@ -6045,7 +6045,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.717 mwDuctLk=0.000 mwSys=0.000 tdb=66.28 airX=4.718 dryAirMass=49.69 XLGain=0.00 W=0.011597 twb=59.33 rh=0.6890 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 96 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 96 @@ -6108,7 +6108,7 @@ Attic UZ: anMCp/T[ 0]=55.71/3752.1 anMCp/T[ 1]=54.01/3629.9 ventUt=0 ta=66.02 tr=68.49 qIzSh=64 fvent=1.000 pz0=-0.0024 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 97 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 97 @@ -6171,7 +6171,7 @@ Attic UZ: anMCp/T[ 0]=52.77/3551.6 anMCp/T[ 1]=50.95/3420.9 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 98 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 98 @@ -6218,7 +6218,7 @@ Wed 10-Jul hr=4 subhr=19 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.838 mwDuctLk=0.000 mwSys=0.000 tdb=70.62 airX=4.430 dryAirMass=249.77 XLGain=0.00 W=0.011596 twb=60.72 rh=0.5935 Z1 CZ: anMCp/T[ 0]=88.21/5659.8 anMCp/T[ 1]=269.53/17292.9 ventUt=1 - Nair=2175246.87 Dair=30787.98 Nrad=105245.82 Drad=1479.95 CX=500.33 airX=4.430 + Nair=2175246.88 Dair=30787.98 Nrad=105245.82 Drad=1479.95 CX=500.33 airX=4.430 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ta=70.62 tr=70.99 qIzSh=-1741 fvent=1.000 pz0=-0.0058 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.273 mwDuctLk=0.000 mwSys=0.000 @@ -6234,7 +6234,7 @@ Wed 10-Jul hr=4 subhr=20 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 99 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 99 @@ -6297,7 +6297,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.819 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=87.94/5631.7 anMCp/T[ 1]=269.01/17227.1 ventUt=1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 100 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 100 @@ -6360,7 +6360,7 @@ Z1 CZ: anMCp/T[ 0]=87.76/5612.1 anMCp/T[ 1]=268.70/17183.3 ventUt=1 ta=70.38 tr=70.81 qIzSh=-1728 fvent=1.000 pz0=-0.0058 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 101 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 101 @@ -6423,7 +6423,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.792 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=40.14/2698.1 anMCp/T[ 1]=37.59/2517.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 102 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 102 @@ -6486,7 +6486,7 @@ Attic UZ: anMCp/T[ 0]=38.37/2577.5 anMCp/T[ 1]=35.71/2388.7 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 103 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 103 @@ -6549,7 +6549,7 @@ Attic UZ: anMCp/T[ 0]=38.17/2560.7 anMCp/T[ 1]=35.48/2369.7 ventUt=0 Wed 10-Jul hr=5 subhr=6 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 104 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 104 @@ -6612,7 +6612,7 @@ Wed 10-Jul hr=5 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.007 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 105 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 105 @@ -6675,7 +6675,7 @@ Z1 CZ: anMCp/T[ 0]=88.54/5606.0 anMCp/T[ 1]=271.40/17183.4 ventUt=1 Nair=2152288.73 Dair=30799.51 Nrad=103822.84 Drad=1473.11 CX=503.50 airX=4.455 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 106 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 106 @@ -6738,7 +6738,7 @@ Z1 CZ: anMCp/T[ 0]=89.00/5623.7 anMCp/T[ 1]=272.70/17231.1 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.890 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 107 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 107 @@ -6801,7 +6801,7 @@ Attic UZ: anMCp/T[ 0]=43.67/2901.5 anMCp/T[ 1]=41.23/2729.2 ventUt=0 Nair=46928.25 Dair=742.42 Nrad=57678.59 Drad=864.76 CX=445.62 airX=3.394 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 108 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 108 @@ -6835,7 +6835,7 @@ Wed 10-Jul hr=5 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.378 mwDuctLk=0.000 mwSys=0.000 tdb=69.66 airX=4.519 dryAirMass=250.15 XLGain=0.00 W=0.011776 twb=60.66 rh=0.6226 Z1 CZ: anMCp/T[ 0]=89.95/5664.9 anMCp/T[ 1]=275.37/17342.2 ventUt=1 - Nair=2147460.63 Dair=30815.02 Nrad=103685.86 Drad=1470.48 CX=506.35 airX=4.519 + Nair=2147460.62 Dair=30815.02 Nrad=103685.86 Drad=1470.48 CX=506.34 airX=4.519 TH=64.75 TD=68.00 TC=74.25 qhCap=20000 qcCap=-34000 ta=69.66 tr=70.29 qIzSh=-1840 fvent=1.000 pz0=-0.0060 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.075 mwDuctLk=0.000 mwSys=0.000 @@ -6858,13 +6858,13 @@ Z1 CZ: anMCp/T[ 0]=90.17/5674.8 anMCp/T[ 1]=275.98/17368.8 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.118 mwDuctLk=0.000 mwSys=0.000 tdb=64.18 airX=3.595 dryAirMass=49.88 XLGain=0.00 W=0.011738 twb=58.84 rh=0.7512 Attic UZ: anMCp/T[ 0]=46.02/3049.9 anMCp/T[ 1]=43.68/2885.1 ventUt=0 - Nair=47370.29 Dair=748.61 Nrad=57464.99 Drad=863.76 CX=448.00 airX=3.595 + Nair=47370.28 Dair=748.61 Nrad=57464.99 Drad=863.76 CX=448.00 airX=3.595 ta=64.18 tr=65.73 qIzSh=82 fvent=1.000 pz0=-0.0016 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 109 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 109 @@ -6927,7 +6927,7 @@ Wed 10-Jul hr=5 subhr=25 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 110 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 110 @@ -6990,7 +6990,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.739 mwDuctLk=0.000 mwSys=0.000 tdb=69.52 airX=4.609 dryAirMass=250.18 XLGain=0.00 W=0.011859 twb=60.73 rh=0.6298 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 111 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 111 @@ -7053,7 +7053,7 @@ Z1 CZ: anMCp/T[ 0]=88.83/5591.4 anMCp/T[ 1]=271.63/17098.5 ventUt=1 TH=64.71 TD=68.00 TC=74.29 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 112 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 112 @@ -7116,7 +7116,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.971 mwDuctLk=0.000 mwSys=0.000 tdb=64.72 airX=3.298 dryAirMass=49.82 XLGain=0.00 W=0.011889 twb=59.23 rh=0.7459 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 113 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 113 @@ -7179,7 +7179,7 @@ Attic UZ: anMCp/T[ 0]=39.33/2628.2 anMCp/T[ 1]=37.13/2474.1 ventUt=0 ta=65.15 tr=65.72 qIzSh=55 fvent=1.000 pz0=-0.0013 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 114 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 114 @@ -7242,7 +7242,7 @@ Attic UZ: anMCp/T[ 0]=36.89/2476.2 anMCp/T[ 1]=34.89/2335.8 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 115 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 115 @@ -7278,7 +7278,7 @@ Z1 CZ: anMCp/T[ 0]=73.09/4740.8 anMCp/T[ 1]=223.43/14491.8 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.690 mwDuctLk=0.000 mwSys=0.000 tdb=65.93 airX=2.792 dryAirMass=49.69 XLGain=0.00 W=0.012013 twb=59.82 rh=0.7217 Attic UZ: anMCp/T[ 0]=35.66/2400.8 anMCp/T[ 1]=33.79/2269.7 ventUt=0 - Nair=46100.96 Dair=699.75 Nrad=57521.78 Drad=870.34 CX=417.73 airX=2.792 + Nair=46100.97 Dair=699.75 Nrad=57521.78 Drad=870.34 CX=417.73 airX=2.792 ta=65.93 tr=66.04 qIzSh=42 fvent=1.000 pz0=-0.0011 qsHvac=0 @@ -7305,7 +7305,7 @@ Wed 10-Jul hr=6 subhr=14 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 116 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 116 @@ -7368,7 +7368,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.316 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=66.38/4363.0 anMCp/T[ 1]=202.52/13311.7 ventUt=1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 117 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 117 @@ -7431,7 +7431,7 @@ Z1 CZ: anMCp/T[ 0]=62.39/4133.9 anMCp/T[ 1]=190.04/12591.0 ventUt=1 ta=70.17 tr=71.44 qIzSh=-745 fvent=1.000 pz0=-0.0034 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 118 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 118 @@ -7494,7 +7494,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.802 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=36.04/2465.1 anMCp/T[ 1]=35.15/2401.8 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 119 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 119 @@ -7557,7 +7557,7 @@ Attic UZ: anMCp/T[ 0]=37.42/2571.5 anMCp/T[ 1]=36.69/2519.3 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 120 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 120 @@ -7620,7 +7620,7 @@ Attic UZ: anMCp/T[ 0]=38.96/2689.6 anMCp/T[ 1]=38.51/2657.7 ventUt=0 Wed 10-Jul hr=7 subhr=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 121 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 121 @@ -7666,7 +7666,7 @@ Wed 10-Jul hr=7 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.909 mwDuctLk=0.000 mwSys=0.000 tdb=70.94 airX=2.175 dryAirMass=249.24 XLGain=0.00 W=0.012567 twb=62.10 rh=0.6355 Z1 CZ: anMCp/T[ 0]=43.70/2998.0 anMCp/T[ 1]=132.06/9060.7 ventUt=1 - Nair=2173260.05 Dair=30646.90 Nrad=112098.72 Drad=1524.37 CX=511.56 airX=2.175 + Nair=2173260.04 Dair=30646.90 Nrad=112098.72 Drad=1524.37 CX=511.56 airX=2.175 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=70.94 tr=72.88 qIzSh=-307 fvent=1.000 pz0=-0.0019 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=1.882 mwDuctLk=0.000 mwSys=0.000 @@ -7683,7 +7683,7 @@ Wed 10-Jul hr=7 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.560 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 122 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 122 @@ -7746,7 +7746,7 @@ Z1 CZ: anMCp/T[ 0]=34.86/2428.6 anMCp/T[ 1]=104.67/7292.1 ventUt=1 Nair=2181680.18 Dair=30605.41 Nrad=113207.60 Drad=1533.03 CX=504.16 airX=1.725 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 123 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 123 @@ -7786,7 +7786,7 @@ Wed 10-Jul hr=7 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.643 mwDuctLk=0.000 mwSys=0.000 tdb=71.50 airX=1.474 dryAirMass=248.96 XLGain=0.00 W=0.012605 twb=62.33 rh=0.6259 Z1 CZ: anMCp/T[ 0]=29.90/2099.0 anMCp/T[ 1]=89.36/6272.8 ventUt=1 - Nair=2185188.59 Dair=30574.93 Nrad=113860.55 Drad=1538.75 CX=497.71 airX=1.474 + Nair=2185188.60 Dair=30574.93 Nrad=113860.55 Drad=1538.75 CX=497.71 airX=1.474 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=71.50 tr=73.39 qIzSh=-116 fvent=1.000 pz0=-0.0011 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.231 mwDuctLk=0.000 mwSys=0.000 @@ -7809,7 +7809,7 @@ Z1 CZ: anMCp/T[ 0]=27.18/1915.1 anMCp/T[ 1]=81.11/5715.0 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=2.340 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 124 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 124 @@ -7872,7 +7872,7 @@ Attic UZ: anMCp/T[ 0]=51.94/3711.5 anMCp/T[ 1]=52.00/3716.0 ventUt=0 Nair=57693.42 Dair=765.52 Nrad=60579.39 Drad=880.81 CX=443.52 airX=4.363 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 125 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 125 @@ -7935,7 +7935,7 @@ Attic UZ: anMCp/T[ 0]=58.69/4228.5 anMCp/T[ 1]=59.05/4254.1 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 126 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 126 @@ -7998,7 +7998,7 @@ Wed 10-Jul hr=7 subhr=19 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 127 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 127 @@ -8061,7 +8061,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.607 mwDuctLk=0.000 mwSys=0.000 tdb=72.73 airX=0.843 dryAirMass=248.39 XLGain=0.00 W=0.012589 twb=62.68 rh=0.5993 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 128 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 128 @@ -8086,7 +8086,7 @@ Wed 10-Jul hr=7 subhr=23 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.743 mwDuctLk=0.000 mwSys=0.000 tdb=72.82 airX=0.888 dryAirMass=248.35 XLGain=0.00 W=0.012584 twb=62.70 rh=0.5973 Z1 CZ: anMCp/T[ 0]=53.72/3984.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2219014.73 Dair=30484.33 Nrad=117897.81 Drad=1568.71 CX=470.99 airX=0.888 + Nair=2219014.72 Dair=30484.33 Nrad=117897.81 Drad=1568.71 CX=470.99 airX=0.888 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=72.82 tr=74.62 qIzSh=72 fvent=0.000 pz0=0.0010 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.675 mwDuctLk=0.000 mwSys=0.000 @@ -8124,7 +8124,7 @@ Z1 CZ: anMCp/T[ 0]=58.79/4390.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 129 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 129 @@ -8187,7 +8187,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.953 mwDuctLk=0.000 mwSys=0.000 tdb=79.67 airX=6.571 dryAirMass=48.39 XLGain=0.00 W=0.012475 twb=64.60 rh=0.4719 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 130 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 130 @@ -8240,7 +8240,7 @@ Wed 10-Jul hr=8 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.598 mwDuctLk=0.000 mwSys=0.000 tdb=73.62 airX=1.172 dryAirMass=247.99 XLGain=0.00 W=0.012533 twb=62.88 rh=0.5787 Z1 CZ: anMCp/T[ 0]=70.81/5391.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2248863.42 Dair=30563.68 Nrad=121159.24 Drad=1575.20 CX=494.25 airX=1.172 + Nair=2248863.41 Dair=30563.68 Nrad=121159.24 Drad=1575.20 CX=494.25 airX=1.172 TH=64.63 TD=68.00 TC=74.38 qhCap=20000 qcCap=-34000 ta=73.62 tr=76.13 qIzSh=178 fvent=0.000 pz0=0.0020 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.180 mwDuctLk=0.000 mwSys=0.000 @@ -8250,7 +8250,7 @@ Attic UZ: anMCp/T[ 0]=81.88/6159.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=80.77 tr=75.71 qIzSh=-454 fvent=0.000 pz0=-0.0054 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 131 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 131 @@ -8306,14 +8306,14 @@ Z1 CZ: anMCp/T[ 0]=76.01/5832.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.656 mwDuctLk=0.000 mwSys=0.000 tdb=82.22 airX=7.762 dryAirMass=48.16 XLGain=0.00 W=0.012449 twb=65.29 rh=0.4329 Attic UZ: anMCp/T[ 0]=91.06/6897.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=77813.32 Dair=911.98 Nrad=65481.60 Drad=889.68 CX=519.45 airX=7.762 + Nair=77813.33 Dair=911.98 Nrad=65481.60 Drad=889.68 CX=519.45 airX=7.762 ta=82.22 tr=76.78 qIzSh=-590 fvent=0.000 pz0=-0.0063 qsHvac=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 132 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 132 @@ -8376,7 +8376,7 @@ Wed 10-Jul hr=8 subhr=8 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 133 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 133 @@ -8439,7 +8439,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.769 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=92.73/7243.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 134 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 134 @@ -8502,7 +8502,7 @@ Z1 CZ: anMCp/T[ 0]=100.94/7944.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.38 tr=76.82 qIzSh=438 fvent=0.000 pz0=0.0033 qsHvac=-5744 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 135 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 135 @@ -8523,7 +8523,7 @@ Wed 10-Jul hr=8 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=5.356 mwDuctLk=0.000 mwSys=0.000 tdb=74.38 airX=1.716 dryAirMass=247.65 XLGain=0.00 W=0.012521 twb=63.10 rh=0.5637 Z1 CZ: anMCp/T[ 0]=103.53/8169.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2317842.47 Dair=31106.61 Nrad=115317.03 Drad=1480.74 CX=626.51 airX=6.516 + Nair=2317842.47 Dair=31106.61 Nrad=115317.04 Drad=1480.74 CX=626.51 airX=6.516 TH=64.63 TD=68.00 TC=74.38 qhCap=20000 qcCap=-34000 ta=74.38 tr=76.84 qIzSh=469 fvent=0.000 pz0=0.0035 qsHvac=-5831 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.632 mwDuctLk=0.000 mwSys=0.000 @@ -8565,7 +8565,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.918 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=133.72/10378.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 136 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 136 @@ -8628,7 +8628,7 @@ Attic UZ: anMCp/T[ 0]=140.76/10979.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 137 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 137 @@ -8691,7 +8691,7 @@ Attic UZ: anMCp/T[ 0]=146.97/11520.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=8 subhr=24 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 138 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 138 @@ -8726,7 +8726,7 @@ Z1 CZ: anMCp/T[ 0]=126.59/10239.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.874 mwDuctLk=0.000 mwSys=0.000 tdb=92.47 airX=13.096 dryAirMass=47.25 XLGain=0.00 W=0.012703 twb=68.43 rh=0.3193 Attic UZ: anMCp/T[ 0]=150.72/11854.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=104777.50 Dair=1086.02 Nrad=72776.10 Drad=903.81 CX=609.11 airX=13.096 + Nair=104777.49 Dair=1086.02 Nrad=72776.10 Drad=903.81 CX=609.11 airX=13.096 ta=92.47 tr=85.33 qIzSh=-2084 fvent=0.000 pz0=-0.0135 qsHvac=0 @@ -8754,7 +8754,7 @@ Wed 10-Jul hr=8 subhr=27 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.883 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 139 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 139 @@ -8780,7 +8780,7 @@ Wed 10-Jul hr=8 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.000 mwDuctLk=0.000 mwSys=0.000 tdb=74.38 airX=2.201 dryAirMass=247.60 XLGain=0.00 W=0.012659 twb=63.28 rh=0.5698 Z1 CZ: anMCp/T[ 0]=132.73/10815.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2324341.07 Dair=31181.61 Nrad=115106.47 Drad=1472.74 CX=638.90 airX=7.001 + Nair=2324341.06 Dair=31181.61 Nrad=115106.47 Drad=1472.74 CX=638.90 airX=7.001 TH=64.63 TD=68.00 TC=74.38 qhCap=20000 qcCap=-34000 ta=74.38 tr=77.01 qIzSh=943 fvent=0.000 pz0=0.0057 qsHvac=-6894 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.175 mwDuctLk=0.000 mwSys=0.000 @@ -8803,7 +8803,7 @@ Z1 CZ: anMCp/T[ 0]=134.72/11004.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.269 mwDuctLk=0.000 mwSys=0.000 tdb=94.06 airX=13.721 dryAirMass=47.11 XLGain=0.00 W=0.012772 twb=68.92 rh=0.3053 Attic UZ: anMCp/T[ 0]=157.45/12463.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=108431.42 Dair=1105.39 Nrad=74411.94 Drad=907.82 CX=619.61 airX=13.721 + Nair=108431.41 Dair=1105.39 Nrad=74411.94 Drad=907.82 CX=619.61 airX=13.721 ta=94.06 tr=86.87 qIzSh=-2346 fvent=0.000 pz0=-0.0144 qsHvac=0 @@ -8817,7 +8817,7 @@ Z1 CZ: anMCp/T[ 0]=136.33/11162.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2326194.46 Dair=31201.67 Nrad=116226.49 Drad=1476.98 CX=647.80 airX=7.061 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 140 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 140 @@ -8880,7 +8880,7 @@ Z1 CZ: anMCp/T[ 0]=141.03/11630.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.607 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 141 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 141 @@ -8900,7 +8900,7 @@ Wed 10-Jul hr=9 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.544 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.368 dryAirMass=247.55 XLGain=0.00 W=0.012738 twb=63.40 rh=0.5725 Z1 CZ: anMCp/T[ 0]=142.78/11803.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2329146.38 Dair=31221.00 Nrad=116238.47 Drad=1476.21 CX=652.85 airX=7.168 + Nair=2329146.37 Dair=31221.00 Nrad=116238.47 Drad=1476.21 CX=652.85 airX=7.168 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=77.41 qIzSh=1178 fvent=0.000 pz0=0.0065 qsHvac=-7741 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.718 mwDuctLk=0.000 mwSys=0.000 @@ -8917,7 +8917,7 @@ Wed 10-Jul hr=9 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.638 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.397 dryAirMass=247.55 XLGain=0.00 W=0.012749 twb=63.41 rh=0.5730 Z1 CZ: anMCp/T[ 0]=144.53/11977.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2329624.71 Dair=31226.45 Nrad=116223.63 Drad=1475.78 CX=654.13 airX=7.197 + Nair=2329624.70 Dair=31226.45 Nrad=116223.63 Drad=1475.78 CX=654.13 airX=7.197 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=77.42 qIzSh=1221 fvent=0.000 pz0=0.0067 qsHvac=-7822 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.833 mwDuctLk=0.000 mwSys=0.000 @@ -8943,7 +8943,7 @@ Attic UZ: anMCp/T[ 0]=169.89/13617.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=115679.02 Dair=1138.86 Nrad=77702.84 Drad=917.99 CX=638.73 airX=14.896 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 142 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 142 @@ -9006,7 +9006,7 @@ Attic UZ: anMCp/T[ 0]=176.23/14199.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 143 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 143 @@ -9037,7 +9037,7 @@ Wed 10-Jul hr=9 subhr=11 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.184 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.567 dryAirMass=247.52 XLGain=0.00 W=0.012801 twb=63.48 rh=0.5753 Z1 CZ: anMCp/T[ 0]=154.76/13008.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2331875.27 Dair=31251.16 Nrad=116148.85 Drad=1473.32 CX=658.07 airX=7.367 + Nair=2331875.28 Dair=31251.16 Nrad=116148.85 Drad=1473.32 CX=658.07 airX=7.367 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=77.47 qIzSh=1492 fvent=0.000 pz0=0.0075 qsHvac=-8278 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.506 mwDuctLk=0.000 mwSys=0.000 @@ -9069,7 +9069,7 @@ Wed 10-Jul hr=9 subhr=13 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 144 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 144 @@ -9080,7 +9080,7 @@ Wed 10-Jul hr=9 subhr=13 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.355 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.620 dryAirMass=247.52 XLGain=0.00 W=0.012815 twb=63.50 rh=0.5759 Z1 CZ: anMCp/T[ 0]=157.96/13339.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2332579.48 Dair=31258.73 Nrad=116126.97 Drad=1472.55 CX=659.20 airX=7.420 + Nair=2332579.49 Dair=31258.73 Nrad=116126.97 Drad=1472.55 CX=659.20 airX=7.420 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=77.49 qIzSh=1585 fvent=0.000 pz0=0.0077 qsHvac=-8433 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.703 mwDuctLk=0.000 mwSys=0.000 @@ -9132,7 +9132,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.601 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.696 dryAirMass=247.51 XLGain=0.00 W=0.012832 twb=63.52 rh=0.5767 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 145 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 145 @@ -9191,11 +9191,11 @@ Wed 10-Jul hr=9 subhr=19 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.834 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.769 dryAirMass=247.51 XLGain=0.00 W=0.012847 twb=63.54 rh=0.5773 Z1 CZ: anMCp/T[ 0]=166.90/14293.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2334577.75 Dair=31279.85 Nrad=116070.04 Drad=1470.43 CX=662.38 airX=7.569 + Nair=2334577.74 Dair=31279.85 Nrad=116070.04 Drad=1470.43 CX=662.38 airX=7.569 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 146 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 146 @@ -9258,7 +9258,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.408 mwDuctLk=0.000 mwSys=0.000 tdb=104.78 airX=17.484 dryAirMass=46.21 XLGain=0.00 W=0.012882 twb=71.78 rh=0.2229 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 147 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 147 @@ -9311,17 +9311,17 @@ Wed 10-Jul hr=9 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.269 mwDuctLk=0.000 mwSys=0.000 tdb=74.42 airX=2.903 dryAirMass=247.50 XLGain=0.00 W=0.012870 twb=63.57 rh=0.5783 Z1 CZ: anMCp/T[ 0]=175.00/15194.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2336414.26 Dair=31298.74 Nrad=116023.72 Drad=1468.56 CX=665.20 airX=7.703 + Nair=2336414.26 Dair=31298.74 Nrad=116023.73 Drad=1468.56 CX=665.20 airX=7.703 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=74.42 tr=77.57 qIzSh=2172 fvent=0.000 pz0=0.0093 qsHvac=-9367 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.588 mwDuctLk=0.000 mwSys=0.000 tdb=105.98 airX=17.814 dryAirMass=46.11 XLGain=0.00 W=0.012889 twb=72.09 rh=0.2152 Attic UZ: anMCp/T[ 0]=200.06/16575.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=134260.93 Dair=1216.11 Nrad=87049.83 Drad=941.58 CX=687.67 airX=17.814 + Nair=134260.92 Dair=1216.11 Nrad=87049.83 Drad=941.58 CX=687.67 airX=17.814 ta=105.98 tr=98.16 qIzSh=-4627 fvent=0.000 pz0=-0.0218 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 148 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 148 @@ -9384,7 +9384,7 @@ Attic UZ: anMCp/T[ 0]=202.95/16903.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 149 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 149 @@ -9447,7 +9447,7 @@ Wed 10-Jul hr=10 subhr=2 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 150 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 150 @@ -9457,7 +9457,7 @@ Wed 10-Jul hr=10 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.910 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.054 dryAirMass=247.46 XLGain=0.00 W=0.012928 twb=63.66 rh=0.5801 Z1 CZ: anMCp/T[ 0]=184.08/16225.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2339736.00 Dair=31324.55 Nrad=115245.73 Drad=1465.45 CX=673.06 airX=7.854 + Nair=2339736.00 Dair=31324.55 Nrad=115245.72 Drad=1465.45 CX=673.06 airX=7.854 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=77.33 qIzSh=2519 fvent=0.000 pz0=0.0103 qsHvac=-9292 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.097 mwDuctLk=0.000 mwSys=0.000 @@ -9474,7 +9474,7 @@ Wed 10-Jul hr=10 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.043 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.079 dryAirMass=247.45 XLGain=0.00 W=0.012954 twb=63.70 rh=0.5812 Z1 CZ: anMCp/T[ 0]=185.59/16390.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2340081.97 Dair=31328.51 Nrad=115216.81 Drad=1465.24 CX=674.10 airX=7.879 + Nair=2340081.97 Dair=31328.51 Nrad=115216.80 Drad=1465.24 CX=674.10 airX=7.879 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=77.32 qIzSh=2572 fvent=0.000 pz0=0.0105 qsHvac=-9341 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.223 mwDuctLk=0.000 mwSys=0.000 @@ -9497,7 +9497,7 @@ Z1 CZ: anMCp/T[ 0]=187.10/16556.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.356 mwDuctLk=0.000 mwSys=0.000 tdb=109.56 airX=18.846 dryAirMass=45.80 XLGain=0.00 W=0.013123 twb=73.16 rh=0.1973 Attic UZ: anMCp/T[ 0]=210.26/17665.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=141370.38 Dair=1240.64 Nrad=91898.81 Drad=955.52 CX=707.54 airX=18.846 + Nair=141370.39 Dair=1240.64 Nrad=91898.81 Drad=955.52 CX=707.54 airX=18.846 ta=109.56 tr=101.87 qIzSh=-5371 fvent=0.000 pz0=-0.0236 qsHvac=0 @@ -9510,7 +9510,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.322 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=188.62/16724.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 151 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 151 @@ -9573,7 +9573,7 @@ Z1 CZ: anMCp/T[ 0]=193.13/17224.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.46 tr=77.30 qIzSh=2844 fvent=0.000 pz0=0.0112 qsHvac=-9580 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 152 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 152 @@ -9617,7 +9617,7 @@ Z1 CZ: anMCp/T[ 0]=196.05/17553.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.237 mwDuctLk=0.000 mwSys=0.000 tdb=112.23 airX=19.812 dryAirMass=45.56 XLGain=0.00 W=0.013520 twb=74.19 rh=0.1883 Attic UZ: anMCp/T[ 0]=219.87/18623.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=147200.69 Dair=1261.84 Nrad=95091.48 Drad=963.37 CX=722.01 airX=19.812 + Nair=147200.70 Dair=1261.84 Nrad=95091.48 Drad=963.37 CX=722.01 airX=19.812 ta=112.23 tr=104.50 qIzSh=-6052 fvent=0.000 pz0=-0.0252 qsHvac=0 @@ -9636,7 +9636,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.384 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=221.36/18774.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 153 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 153 @@ -9694,12 +9694,12 @@ Z1 CZ: anMCp/T[ 0]=201.65/18195.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.821 mwDuctLk=0.000 mwSys=0.000 tdb=113.89 airX=20.391 dryAirMass=45.41 XLGain=0.00 W=0.013810 twb=74.87 rh=0.1832 Attic UZ: anMCp/T[ 0]=225.54/19206.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=150806.65 Dair=1274.79 Nrad=97238.15 Drad=968.54 CX=731.35 airX=20.391 + Nair=150806.64 Dair=1274.79 Nrad=97238.15 Drad=968.54 CX=731.35 airX=20.391 ta=113.89 tr=106.20 qIzSh=-6481 fvent=0.000 pz0=-0.0262 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 154 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 154 @@ -9748,7 +9748,7 @@ Wed 10-Jul hr=10 subhr=17 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.050 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.416 dryAirMass=247.17 XLGain=0.00 W=0.013719 twb=64.65 rh=0.6148 Z1 CZ: anMCp/T[ 0]=205.68/18665.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2343890.00 Dair=31368.64 Nrad=114871.65 Drad=1460.91 CX=678.81 airX=8.216 + Nair=2343890.00 Dair=31368.64 Nrad=114871.66 Drad=1460.91 CX=678.81 airX=8.216 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=77.31 qIzSh=3351 fvent=0.000 pz0=0.0126 qsHvac=-10167 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.247 mwDuctLk=0.000 mwSys=0.000 @@ -9762,7 +9762,7 @@ Attic UZ: anMCp/T[ 0]=229.33/19605.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=10 subhr=18 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 155 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 155 @@ -9797,7 +9797,7 @@ Z1 CZ: anMCp/T[ 0]=208.29/18975.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.526 mwDuctLk=0.000 mwSys=0.000 tdb=115.81 airX=21.026 dryAirMass=45.23 XLGain=0.00 W=0.014189 twb=75.70 rh=0.1783 Attic UZ: anMCp/T[ 0]=231.66/19855.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=154825.89 Dair=1288.41 Nrad=99923.49 Drad=974.97 CX=741.97 airX=21.026 + Nair=154825.89 Dair=1288.41 Nrad=99923.48 Drad=974.97 CX=741.97 airX=21.026 ta=115.81 tr=108.25 qIzSh=-6972 fvent=0.000 pz0=-0.0272 qsHvac=0 @@ -9825,7 +9825,7 @@ Wed 10-Jul hr=10 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.625 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 156 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 156 @@ -9868,7 +9868,7 @@ Wed 10-Jul hr=10 subhr=23 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.914 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.546 dryAirMass=247.00 XLGain=0.00 W=0.014168 twb=65.19 rh=0.6345 Z1 CZ: anMCp/T[ 0]=213.36/19585.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2345564.19 Dair=31385.47 Nrad=114780.73 Drad=1459.21 CX=681.15 airX=8.346 + Nair=2345564.18 Dair=31385.47 Nrad=114780.73 Drad=1459.21 CX=681.15 airX=8.346 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=77.32 qIzSh=3699 fvent=0.000 pz0=0.0136 qsHvac=-10605 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.072 mwDuctLk=0.000 mwSys=0.000 @@ -9888,7 +9888,7 @@ Z1 CZ: anMCp/T[ 0]=214.60/19736.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2345839.62 Dair=31388.20 Nrad=114767.61 Drad=1458.93 CX=681.53 airX=8.367 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 157 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 157 @@ -9911,7 +9911,7 @@ Wed 10-Jul hr=10 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.203 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.588 dryAirMass=246.94 XLGain=0.00 W=0.014324 twb=65.38 rh=0.6413 Z1 CZ: anMCp/T[ 0]=215.83/19887.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2346114.18 Dair=31390.91 Nrad=114754.95 Drad=1458.66 CX=681.91 airX=8.388 + Nair=2346114.17 Dair=31390.91 Nrad=114754.95 Drad=1458.66 CX=681.91 airX=8.388 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=77.33 qIzSh=3817 fvent=0.000 pz0=0.0139 qsHvac=-10757 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.339 mwDuctLk=0.000 mwSys=0.000 @@ -9928,7 +9928,7 @@ Wed 10-Jul hr=10 subhr=26 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.348 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.609 dryAirMass=246.91 XLGain=0.00 W=0.014403 twb=65.48 rh=0.6447 Z1 CZ: anMCp/T[ 0]=217.06/20038.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2346387.84 Dair=31393.60 Nrad=114742.70 Drad=1458.40 CX=682.28 airX=8.409 + Nair=2346387.83 Dair=31393.60 Nrad=114742.70 Drad=1458.40 CX=682.28 airX=8.409 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=77.33 qIzSh=3877 fvent=0.000 pz0=0.0140 qsHvac=-10834 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.472 mwDuctLk=0.000 mwSys=0.000 @@ -9945,13 +9945,13 @@ Wed 10-Jul hr=10 subhr=27 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.493 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.630 dryAirMass=246.88 XLGain=0.00 W=0.014482 twb=65.57 rh=0.6482 Z1 CZ: anMCp/T[ 0]=218.27/20188.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2346660.65 Dair=31396.27 Nrad=114730.85 Drad=1458.13 CX=682.66 airX=8.430 + Nair=2346660.64 Dair=31396.27 Nrad=114730.85 Drad=1458.13 CX=682.66 airX=8.430 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=77.34 qIzSh=3936 fvent=0.000 pz0=0.0142 qsHvac=-10911 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.603 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 158 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 158 @@ -9988,7 +9988,7 @@ Wed 10-Jul hr=10 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.785 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=3.671 dryAirMass=246.82 XLGain=0.00 W=0.014641 twb=65.77 rh=0.6552 Z1 CZ: anMCp/T[ 0]=220.67/20487.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2347204.03 Dair=31401.57 Nrad=114708.19 Drad=1457.61 CX=683.40 airX=8.471 + Nair=2347204.03 Dair=31401.57 Nrad=114708.20 Drad=1457.61 CX=683.40 airX=8.471 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=77.34 qIzSh=4056 fvent=0.000 pz0=0.0145 qsHvac=-11067 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.864 mwDuctLk=0.000 mwSys=0.000 @@ -10014,7 +10014,7 @@ Attic UZ: anMCp/T[ 0]=241.74/21023.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=162501.63 Dair=1313.50 Nrad=105968.97 Drad=990.77 CX=780.15 airX=22.113 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 159 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 159 @@ -10077,7 +10077,7 @@ Attic UZ: anMCp/T[ 0]=242.89/21243.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 160 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 160 @@ -10114,7 +10114,7 @@ Z1 CZ: anMCp/T[ 0]=225.81/21257.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.183 mwDuctLk=0.000 mwSys=0.000 tdb=121.44 airX=22.404 dryAirMass=44.72 XLGain=0.00 W=0.015145 twb=77.81 rh=0.1622 Attic UZ: anMCp/T[ 0]=244.06/21425.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=165566.75 Dair=1318.12 Nrad=108682.42 Drad=997.46 CX=787.90 airX=22.404 + Nair=165566.76 Dair=1318.12 Nrad=108682.42 Drad=997.46 CX=787.90 airX=22.404 ta=121.44 tr=114.47 qIzSh=-8213 fvent=0.000 pz0=-0.0296 qsHvac=0 @@ -10140,7 +10140,7 @@ Wed 10-Jul hr=11 subhr=7 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 161 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 161 @@ -10174,7 +10174,7 @@ Z1 CZ: anMCp/T[ 0]=228.62/21669.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.343 mwDuctLk=0.000 mwSys=0.000 tdb=122.60 airX=22.612 dryAirMass=44.63 XLGain=0.00 W=0.015198 twb=78.10 rh=0.1576 Attic UZ: anMCp/T[ 0]=245.81/21699.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=167530.62 Dair=1321.56 Nrad=110325.88 Drad=1001.49 CX=792.88 airX=22.612 + Nair=167530.63 Dair=1321.56 Nrad=110325.88 Drad=1001.49 CX=792.88 airX=22.612 ta=122.60 tr=115.66 qIzSh=-8437 fvent=0.000 pz0=-0.0301 qsHvac=0 @@ -10203,7 +10203,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.473 mwDuctLk=0.000 mwSys=0.000 tdb=74.50 airX=3.837 dryAirMass=246.59 XLGain=0.00 W=0.015124 twb=66.36 rh=0.6754 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 162 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 162 @@ -10266,7 +10266,7 @@ Z1 CZ: anMCp/T[ 0]=233.21/22356.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 163 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 163 @@ -10288,13 +10288,13 @@ Wed 10-Jul hr=11 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.749 mwDuctLk=0.000 mwSys=0.000 tdb=74.50 airX=3.898 dryAirMass=246.56 XLGain=0.00 W=0.015211 twb=66.47 rh=0.6791 Z1 CZ: anMCp/T[ 0]=234.11/22493.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2350930.15 Dair=31425.37 Nrad=113476.61 Drad=1451.58 CX=701.17 airX=8.698 + Nair=2350930.14 Dair=31425.37 Nrad=113476.61 Drad=1451.58 CX=701.17 airX=8.698 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=74.50 tr=76.98 qIzSh=5052 fvent=0.000 pz0=0.0164 qsHvac=-11478 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.619 mwDuctLk=0.000 mwSys=0.000 tdb=124.83 airX=22.969 dryAirMass=44.45 XLGain=0.00 W=0.015292 twb=78.66 rh=0.1492 -Attic UZ: anMCp/T[ 0]=248.70/22201.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=171200.49 Dair=1327.48 Nrad=113616.09 Drad=1009.48 CX=802.54 airX=22.969 +Attic UZ: anMCp/T[ 0]=248.70/22201.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 + Nair=171200.47 Dair=1327.48 Nrad=113616.09 Drad=1009.48 CX=802.54 airX=22.969 ta=124.83 tr=117.99 qIzSh=-8844 fvent=0.000 pz0=-0.0310 qsHvac=0 @@ -10311,7 +10311,7 @@ Z1 CZ: anMCp/T[ 0]=235.00/22629.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.659 mwDuctLk=0.000 mwSys=0.000 tdb=125.19 airX=23.020 dryAirMass=44.43 XLGain=0.00 W=0.015307 twb=78.75 rh=0.1479 Attic UZ: anMCp/T[ 0]=249.10/22278.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=171766.99 Dair=1328.27 Nrad=114163.54 Drad=1010.80 CX=804.06 airX=23.020 + Nair=171766.98 Dair=1328.27 Nrad=114163.55 Drad=1010.80 CX=804.06 airX=23.020 ta=125.19 tr=118.37 qIzSh=-8906 fvent=0.000 pz0=-0.0311 qsHvac=0 @@ -10329,7 +10329,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.698 mwDuctLk=0.000 mwSys=0.000 tdb=125.54 airX=23.069 dryAirMass=44.40 XLGain=0.00 W=0.015322 twb=78.84 rh=0.1466 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 164 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 164 @@ -10337,7 +10337,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.698 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Attic UZ: anMCp/T[ 0]=249.47/22352.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=172321.07 Dair=1329.00 Nrad=114710.39 Drad=1012.11 CX=805.56 airX=23.069 + Nair=172321.06 Dair=1329.00 Nrad=114710.39 Drad=1012.11 CX=805.56 airX=23.069 ta=125.54 tr=118.75 qIzSh=-8966 fvent=0.000 pz0=-0.0313 qsHvac=0 @@ -10354,7 +10354,7 @@ Z1 CZ: anMCp/T[ 0]=236.75/22900.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.735 mwDuctLk=0.000 mwSys=0.000 tdb=125.89 airX=23.115 dryAirMass=44.37 XLGain=0.00 W=0.015337 twb=78.93 rh=0.1453 Attic UZ: anMCp/T[ 0]=249.82/22425.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=172862.06 Dair=1329.69 Nrad=115256.49 Drad=1013.43 CX=807.03 airX=23.115 + Nair=172862.05 Dair=1329.69 Nrad=115256.49 Drad=1013.43 CX=807.03 airX=23.115 ta=125.89 tr=119.12 qIzSh=-9024 fvent=0.000 pz0=-0.0314 qsHvac=0 @@ -10371,7 +10371,7 @@ Z1 CZ: anMCp/T[ 0]=237.61/23034.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.770 mwDuctLk=0.000 mwSys=0.000 tdb=126.24 airX=23.160 dryAirMass=44.34 XLGain=0.00 W=0.015351 twb=79.02 rh=0.1441 Attic UZ: anMCp/T[ 0]=250.14/22496.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=173389.77 Dair=1330.32 Nrad=115801.63 Drad=1014.73 CX=808.48 airX=23.160 + Nair=173389.76 Dair=1330.32 Nrad=115801.63 Drad=1014.73 CX=808.48 airX=23.160 ta=126.24 tr=119.49 qIzSh=-9081 fvent=0.000 pz0=-0.0315 qsHvac=0 @@ -10392,7 +10392,7 @@ Attic UZ: anMCp/T[ 0]=250.44/22565.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=126.58 tr=119.86 qIzSh=-9135 fvent=0.000 pz0=-0.0316 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 165 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 165 @@ -10425,7 +10425,7 @@ Wed 10-Jul hr=11 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.217 mwDuctLk=0.000 mwSys=0.000 tdb=74.50 airX=4.000 dryAirMass=246.51 XLGain=0.00 W=0.015332 twb=66.61 rh=0.6844 Z1 CZ: anMCp/T[ 0]=240.14/23436.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2352461.64 Dair=31438.32 Nrad=113421.93 Drad=1450.31 CX=702.96 airX=8.800 + Nair=2352461.65 Dair=31438.32 Nrad=113421.93 Drad=1450.31 CX=702.96 airX=8.800 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=74.50 tr=77.00 qIzSh=5545 fvent=0.000 pz0=0.0173 qsHvac=-12061 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.865 mwDuctLk=0.000 mwSys=0.000 @@ -10455,7 +10455,7 @@ Attic UZ: anMCp/T[ 0]=251.19/22760.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 166 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 166 @@ -10502,7 +10502,7 @@ Wed 10-Jul hr=11 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.474 mwDuctLk=0.000 mwSys=0.000 tdb=74.50 airX=4.054 dryAirMass=246.49 XLGain=0.00 W=0.015392 twb=66.68 rh=0.6870 Z1 CZ: anMCp/T[ 0]=243.40/23964.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2353335.24 Dair=31445.48 Nrad=113405.57 Drad=1449.63 CX=703.97 airX=8.854 + Nair=2353335.25 Dair=31445.48 Nrad=113405.57 Drad=1449.63 CX=703.97 airX=8.854 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=74.50 tr=77.01 qIzSh=5831 fvent=0.000 pz0=0.0179 qsHvac=-12415 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.971 mwDuctLk=0.000 mwSys=0.000 @@ -10518,7 +10518,7 @@ Wed 10-Jul hr=11 subhr=26 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 167 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 167 @@ -10562,7 +10562,7 @@ Wed 10-Jul hr=11 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.662 mwDuctLk=0.000 mwSys=0.000 tdb=74.50 airX=4.094 dryAirMass=246.47 XLGain=0.00 W=0.015434 twb=66.74 rh=0.6889 Z1 CZ: anMCp/T[ 0]=245.76/24355.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2353986.13 Dair=31450.72 Nrad=113398.42 Drad=1449.14 CX=704.73 airX=8.894 + Nair=2353986.14 Dair=31450.72 Nrad=113398.42 Drad=1449.14 CX=704.73 airX=8.894 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=74.50 tr=77.02 qIzSh=6047 fvent=0.000 pz0=0.0183 qsHvac=-12687 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.036 mwDuctLk=0.000 mwSys=0.000 @@ -10581,7 +10581,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.724 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=246.53/24485.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 168 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 168 @@ -10594,7 +10594,7 @@ Z1 CZ: anMCp/T[ 0]=246.53/24485.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.055 mwDuctLk=0.000 mwSys=0.000 tdb=129.79 airX=23.499 dryAirMass=44.07 XLGain=0.00 W=0.015501 twb=79.91 rh=0.1322 Attic UZ: anMCp/T[ 0]=252.21/23152.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=178371.74 Dair=1333.92 Nrad=121706.32 Drad=1028.75 CX=822.73 airX=23.499 + Nair=178371.73 Dair=1333.92 Nrad=121706.32 Drad=1028.75 CX=822.73 airX=23.499 ta=129.79 tr=123.41 qIzSh=-9581 fvent=0.000 pz0=-0.0325 qsHvac=0 @@ -10605,7 +10605,7 @@ Wed 10-Jul hr=12 subhr=0 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.679 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=4.114 dryAirMass=246.44 XLGain=0.00 W=0.015450 twb=66.77 rh=0.6886 Z1 CZ: anMCp/T[ 0]=246.94/24552.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2354023.91 Dair=31450.67 Nrad=113083.62 Drad=1447.74 CX=710.47 airX=8.914 + Nair=2354023.91 Dair=31450.67 Nrad=113083.62 Drad=1447.74 CX=710.46 airX=8.914 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.94 qIzSh=6145 fvent=0.000 pz0=0.0184 qsHvac=-11339 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.067 mwDuctLk=0.000 mwSys=0.000 @@ -10644,7 +10644,7 @@ Z1 CZ: anMCp/T[ 0]=247.48/24659.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.54 tr=76.94 qIzSh=6212 fvent=0.000 pz0=0.0185 qsHvac=-12677 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 169 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 169 @@ -10699,7 +10699,7 @@ Wed 10-Jul hr=12 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.428 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=4.142 dryAirMass=246.47 XLGain=0.00 W=0.015337 twb=66.63 rh=0.6837 Z1 CZ: anMCp/T[ 0]=248.64/24856.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2355664.48 Dair=31452.92 Nrad=113080.78 Drad=1447.18 CX=710.17 airX=8.942 + Nair=2355664.47 Dair=31452.92 Nrad=113080.78 Drad=1447.18 CX=710.17 airX=8.942 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.95 qIzSh=6322 fvent=0.000 pz0=0.0186 qsHvac=-12825 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.979 mwDuctLk=0.000 mwSys=0.000 @@ -10707,14 +10707,14 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.979 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=256.21/23662.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 170 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 170 1Z Test ------------------------------------------------------------------------------ - Nair=181518.88 Dair=1342.76 Nrad=124995.31 Drad=1037.52 CX=839.47 airX=23.928 + Nair=181518.87 Dair=1342.76 Nrad=124995.30 Drad=1037.52 CX=839.47 airX=23.928 ta=131.41 tr=125.36 qIzSh=-10005 fvent=0.000 pz0=-0.0335 qsHvac=0 @@ -10731,7 +10731,7 @@ Z1 CZ: anMCp/T[ 0]=249.04/24922.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.953 mwDuctLk=0.000 mwSys=0.000 tdb=131.67 airX=23.991 dryAirMass=43.94 XLGain=0.00 W=0.015146 twb=79.98 rh=0.1230 Attic UZ: anMCp/T[ 0]=256.79/23739.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=181993.19 Dair=1343.88 Nrad=125493.00 Drad=1038.61 CX=840.87 airX=23.991 + Nair=181993.19 Dair=1343.88 Nrad=125492.99 Drad=1038.61 CX=840.87 airX=23.991 ta=131.67 tr=125.68 qIzSh=-10073 fvent=0.000 pz0=-0.0337 qsHvac=0 @@ -10742,7 +10742,7 @@ Wed 10-Jul hr=12 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.333 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=4.154 dryAirMass=246.50 XLGain=0.00 W=0.015251 twb=66.53 rh=0.6800 Z1 CZ: anMCp/T[ 0]=249.43/24989.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2355867.82 Dair=31454.40 Nrad=113084.23 Drad=1447.03 CX=710.28 airX=8.954 + Nair=2355867.83 Dair=31454.40 Nrad=113084.23 Drad=1447.03 CX=710.28 airX=8.954 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.96 qIzSh=6396 fvent=0.000 pz0=0.0187 qsHvac=-12923 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.922 mwDuctLk=0.000 mwSys=0.000 @@ -10759,7 +10759,7 @@ Wed 10-Jul hr=12 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.286 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=4.161 dryAirMass=246.52 XLGain=0.00 W=0.015203 twb=66.47 rh=0.6779 Z1 CZ: anMCp/T[ 0]=249.83/25055.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2355999.27 Dair=31455.52 Nrad=113085.84 Drad=1446.95 CX=710.54 airX=8.961 + Nair=2355999.28 Dair=31455.52 Nrad=113085.84 Drad=1446.95 CX=710.54 airX=8.961 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.96 qIzSh=6433 fvent=0.000 pz0=0.0187 qsHvac=-12974 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.889 mwDuctLk=0.000 mwSys=0.000 @@ -10770,7 +10770,7 @@ Attic UZ: anMCp/T[ 0]=257.89/23889.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 171 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 171 @@ -10791,7 +10791,7 @@ Z1 CZ: anMCp/T[ 0]=250.22/25122.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.853 mwDuctLk=0.000 mwSys=0.000 tdb=132.45 airX=24.167 dryAirMass=43.90 XLGain=0.00 W=0.014958 twb=79.97 rh=0.1190 Attic UZ: anMCp/T[ 0]=258.41/23961.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=183343.28 Dair=1346.92 Nrad=126968.94 Drad=1041.85 CX=844.91 airX=24.167 + Nair=183343.28 Dair=1346.92 Nrad=126968.93 Drad=1041.85 CX=844.91 airX=24.167 ta=132.45 tr=126.61 qIzSh=-10267 fvent=0.000 pz0=-0.0341 qsHvac=0 @@ -10825,7 +10825,7 @@ Z1 CZ: anMCp/T[ 0]=251.00/25254.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.773 mwDuctLk=0.000 mwSys=0.000 tdb=132.96 airX=24.273 dryAirMass=43.87 XLGain=0.00 W=0.014827 twb=79.96 rh=0.1164 Attic UZ: anMCp/T[ 0]=259.37/24098.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=184184.97 Dair=1348.69 Nrad=127937.95 Drad=1043.97 CX=847.46 airX=24.273 + Nair=184184.98 Dair=1348.69 Nrad=127937.95 Drad=1043.97 CX=847.46 airX=24.273 ta=132.96 tr=127.21 qIzSh=-10387 fvent=0.000 pz0=-0.0344 qsHvac=0 @@ -10833,7 +10833,7 @@ Attic UZ: anMCp/T[ 0]=259.37/24098.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=12 subhr=12 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 172 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 172 @@ -10851,7 +10851,7 @@ Z1 CZ: anMCp/T[ 0]=251.39/25320.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.730 mwDuctLk=0.000 mwSys=0.000 tdb=133.20 airX=24.323 dryAirMass=43.86 XLGain=0.00 W=0.014761 twb=79.95 rh=0.1152 Attic UZ: anMCp/T[ 0]=259.82/24164.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=184589.36 Dair=1349.50 Nrad=128417.85 Drad=1045.01 CX=848.70 airX=24.323 + Nair=184589.37 Dair=1349.50 Nrad=128417.85 Drad=1045.01 CX=848.70 airX=24.323 ta=133.20 tr=127.51 qIzSh=-10445 fvent=0.000 pz0=-0.0346 qsHvac=0 @@ -10896,7 +10896,7 @@ Wed 10-Jul hr=12 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.942 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 173 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 173 @@ -10928,7 +10928,7 @@ Z1 CZ: anMCp/T[ 0]=252.92/25583.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.537 mwDuctLk=0.000 mwSys=0.000 tdb=134.16 airX=24.503 dryAirMass=43.81 XLGain=0.00 W=0.014490 twb=79.90 rh=0.1103 Attic UZ: anMCp/T[ 0]=261.44/24412.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=186108.39 Dair=1352.34 Nrad=130305.83 Drad=1049.13 CX=853.41 airX=24.503 + Nair=186108.39 Dair=1352.34 Nrad=130305.82 Drad=1049.13 CX=853.41 airX=24.503 ta=134.16 tr=128.67 qIzSh=-10661 fvent=0.000 pz0=-0.0351 qsHvac=0 @@ -10959,7 +10959,7 @@ Z1 CZ: anMCp/T[ 0]=253.66/25714.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2357093.40 Dair=31463.87 Nrad=113106.19 Drad=1446.23 CX=711.71 airX=9.021 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 174 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 174 @@ -10971,7 +10971,7 @@ Z1 CZ: anMCp/T[ 0]=253.66/25714.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.431 mwDuctLk=0.000 mwSys=0.000 tdb=134.61 airX=24.583 dryAirMass=43.78 XLGain=0.00 W=0.014352 twb=79.87 rh=0.1079 Attic UZ: anMCp/T[ 0]=262.15/24528.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=186813.84 Dair=1353.54 Nrad=131230.45 Drad=1051.14 CX=855.64 airX=24.583 + Nair=186813.83 Dair=1353.54 Nrad=131230.44 Drad=1051.14 CX=855.64 airX=24.583 ta=134.61 tr=129.23 qIzSh=-10761 fvent=0.000 pz0=-0.0353 qsHvac=0 @@ -10988,7 +10988,7 @@ Z1 CZ: anMCp/T[ 0]=254.03/25779.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.376 mwDuctLk=0.000 mwSys=0.000 tdb=134.84 airX=24.621 dryAirMass=43.77 XLGain=0.00 W=0.014283 twb=79.86 rh=0.1068 Attic UZ: anMCp/T[ 0]=262.48/24583.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=187153.94 Dair=1354.09 Nrad=131687.79 Drad=1052.13 CX=856.72 airX=24.621 + Nair=187153.93 Dair=1354.09 Nrad=131687.79 Drad=1052.13 CX=856.72 airX=24.621 ta=134.84 tr=129.51 qIzSh=-10809 fvent=0.000 pz0=-0.0354 qsHvac=0 @@ -11022,7 +11022,7 @@ Z1 CZ: anMCp/T[ 0]=254.76/25908.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.262 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 175 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 175 @@ -11065,7 +11065,7 @@ Z1 CZ: anMCp/T[ 0]=255.48/26036.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.144 mwDuctLk=0.000 mwSys=0.000 tdb=135.71 airX=24.757 dryAirMass=43.72 XLGain=0.00 W=0.014005 twb=79.78 rh=0.1025 Attic UZ: anMCp/T[ 0]=263.66/24793.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=188436.57 Dair=1355.96 Nrad=133483.82 Drad=1056.03 CX=860.85 airX=24.757 + Nair=188436.56 Dair=1355.96 Nrad=133483.82 Drad=1056.03 CX=860.85 airX=24.757 ta=135.71 tr=130.58 qIzSh=-10988 fvent=0.000 pz0=-0.0358 qsHvac=0 @@ -11076,16 +11076,16 @@ Wed 10-Jul hr=12 subhr=24 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.475 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=4.254 dryAirMass=246.90 XLGain=0.00 W=0.014197 twb=65.25 rh=0.6340 Z1 CZ: anMCp/T[ 0]=255.84/26100.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2357733.90 Dair=31468.65 Nrad=113121.71 Drad=1445.84 CX=712.41 airX=9.054 + Nair=2357733.91 Dair=31468.65 Nrad=113121.71 Drad=1445.84 CX=712.41 airX=9.054 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=77.02 qIzSh=7030 fvent=0.000 pz0=0.0195 qsHvac=-13773 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.083 mwDuctLk=0.000 mwSys=0.000 tdb=135.92 airX=24.787 dryAirMass=43.71 XLGain=0.00 W=0.013935 twb=79.76 rh=0.1014 Attic UZ: anMCp/T[ 0]=263.91/24842.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=188739.08 Dair=1356.36 Nrad=133924.46 Drad=1056.98 CX=861.83 airX=24.787 + Nair=188739.07 Dair=1356.36 Nrad=133924.46 Drad=1056.98 CX=861.83 airX=24.787 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 176 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 176 @@ -11148,7 +11148,7 @@ Attic UZ: anMCp/T[ 0]=264.61/24983.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 177 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 177 @@ -11162,7 +11162,7 @@ Wed 10-Jul hr=12 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.269 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=4.276 dryAirMass=247.00 XLGain=0.00 W=0.013922 twb=64.92 rh=0.6220 Z1 CZ: anMCp/T[ 0]=257.24/26354.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2358152.74 Dair=31471.72 Nrad=113133.04 Drad=1445.58 CX=712.86 airX=9.076 + Nair=2358152.73 Dair=31471.72 Nrad=113133.04 Drad=1445.58 CX=712.86 airX=9.076 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=77.03 qIzSh=7180 fvent=0.000 pz0=0.0197 qsHvac=-13974 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.838 mwDuctLk=0.000 mwSys=0.000 @@ -11211,7 +11211,7 @@ Wed 10-Jul hr=13 subhr=1 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 178 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 178 @@ -11274,7 +11274,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.685 mwDuctLk=0.000 mwSys=0.000 tdb=74.58 airX=4.328 dryAirMass=247.08 XLGain=0.00 W=0.013734 twb=64.70 rh=0.6129 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 179 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 179 @@ -11305,7 +11305,7 @@ Z1 CZ: anMCp/T[ 0]=260.42/26896.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.980 mwDuctLk=0.000 mwSys=0.000 tdb=137.97 airX=24.952 dryAirMass=43.58 XLGain=0.00 W=0.013767 twb=80.04 rh=0.0949 Attic UZ: anMCp/T[ 0]=264.87/25218.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=191445.77 Dair=1359.47 Nrad=138692.86 Drad=1068.29 CX=860.44 airX=24.952 + Nair=191445.76 Dair=1359.47 Nrad=138692.86 Drad=1068.29 CX=860.44 airX=24.952 ta=137.97 tr=133.46 qIzSh=-11326 fvent=0.000 pz0=-0.0365 qsHvac=0 @@ -11337,7 +11337,7 @@ Z1 CZ: anMCp/T[ 0]=261.86/27107.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 180 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 180 @@ -11348,7 +11348,7 @@ Z1 CZ: anMCp/T[ 0]=261.86/27107.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.050 mwDuctLk=0.000 mwSys=0.000 tdb=138.28 airX=24.915 dryAirMass=43.55 XLGain=0.00 W=0.013859 twb=80.18 rh=0.0948 Attic UZ: anMCp/T[ 0]=264.30/25222.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=191637.25 Dair=1358.50 Nrad=139463.84 Drad=1069.94 CX=861.58 airX=24.915 + Nair=191637.25 Dair=1358.50 Nrad=139463.83 Drad=1069.94 CX=861.58 airX=24.915 ta=138.28 tr=133.89 qIzSh=-11326 fvent=0.000 pz0=-0.0365 qsHvac=0 @@ -11400,7 +11400,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.199 mwDuctLk=0.000 mwSys=0.000 tdb=138.72 airX=24.911 dryAirMass=43.51 XLGain=0.00 W=0.014012 twb=80.39 rh=0.0947 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 181 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 181 @@ -11463,7 +11463,7 @@ Attic UZ: anMCp/T[ 0]=263.74/25325.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=139.17 tr=135.11 qIzSh=-11379 fvent=0.000 pz0=-0.0366 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 182 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 182 @@ -11526,7 +11526,7 @@ Attic UZ: anMCp/T[ 0]=263.48/25378.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 183 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 183 @@ -11589,7 +11589,7 @@ Wed 10-Jul hr=13 subhr=20 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 184 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 184 @@ -11616,7 +11616,7 @@ Wed 10-Jul hr=13 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.186 mwDuctLk=0.000 mwSys=0.000 tdb=74.58 airX=4.444 dryAirMass=246.84 XLGain=0.00 W=0.014430 twb=65.55 rh=0.6433 Z1 CZ: anMCp/T[ 0]=267.18/28107.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2362181.13 Dair=31490.89 Nrad=113239.60 Drad=1443.78 CX=700.39 airX=9.244 + Nair=2362181.12 Dair=31490.89 Nrad=113239.60 Drad=1443.78 CX=700.39 airX=9.244 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ta=74.58 tr=77.18 qIzSh=8180 fvent=0.000 pz0=0.0216 qsHvac=-15301 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.826 mwDuctLk=0.000 mwSys=0.000 @@ -11652,7 +11652,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.362 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=267.90/28247.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 185 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 185 @@ -11715,7 +11715,7 @@ Z1 CZ: anMCp/T[ 0]=268.96/28456.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.58 tr=77.20 qIzSh=8396 fvent=0.000 pz0=0.0220 qsHvac=-15599 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 186 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 186 @@ -11778,7 +11778,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.302 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=262.42/25616.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 187 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 187 @@ -11841,7 +11841,7 @@ Attic UZ: anMCp/T[ 0]=263.67/25752.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 188 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 188 @@ -11904,7 +11904,7 @@ Attic UZ: anMCp/T[ 0]=263.94/25803.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=14 subhr=6 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 189 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 189 @@ -11916,7 +11916,7 @@ Wed 10-Jul hr=14 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.354 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.502 dryAirMass=246.60 XLGain=0.00 W=0.014902 twb=66.13 rh=0.6629 Z1 CZ: anMCp/T[ 0]=270.39/28772.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2364717.43 Dair=31497.36 Nrad=113489.28 Drad=1443.42 CX=710.01 airX=9.302 + Nair=2364717.44 Dair=31497.36 Nrad=113489.28 Drad=1443.42 CX=710.01 airX=9.302 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=77.31 qIzSh=8595 fvent=0.000 pz0=0.0222 qsHvac=-16131 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.016 mwDuctLk=0.000 mwSys=0.000 @@ -11967,7 +11967,7 @@ Wed 10-Jul hr=14 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.105 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 190 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 190 @@ -12027,10 +12027,10 @@ Wed 10-Jul hr=14 subhr=12 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.874 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.500 dryAirMass=246.70 XLGain=0.00 W=0.014617 twb=65.78 rh=0.6506 Z1 CZ: anMCp/T[ 0]=270.42/28834.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2365030.81 Dair=31499.22 Nrad=113575.48 Drad=1443.34 CX=710.55 airX=9.300 + Nair=2365030.82 Dair=31499.22 Nrad=113575.48 Drad=1443.34 CX=710.55 airX=9.300 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 191 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 191 @@ -12042,7 +12042,7 @@ Z1 CZ: anMCp/T[ 0]=270.42/28834.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.588 mwDuctLk=0.000 mwSys=0.000 tdb=142.03 airX=25.036 dryAirMass=43.24 XLGain=0.00 W=0.014413 twb=81.37 rh=0.0895 Attic UZ: anMCp/T[ 0]=263.66/25828.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=194491.03 Dair=1354.04 Nrad=150465.08 Drad=1093.47 CX=892.78 airX=25.036 + Nair=194491.02 Dair=1354.04 Nrad=150465.08 Drad=1093.47 CX=892.78 airX=25.036 ta=142.03 tr=139.59 qIzSh=-11620 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -12053,7 +12053,7 @@ Wed 10-Jul hr=14 subhr=13 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.825 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.509 dryAirMass=246.72 XLGain=0.00 W=0.014559 twb=65.71 rh=0.6480 Z1 CZ: anMCp/T[ 0]=270.94/28900.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2365116.05 Dair=31499.82 Nrad=113588.55 Drad=1443.36 CX=710.58 airX=9.309 + Nair=2365116.06 Dair=31499.82 Nrad=113588.55 Drad=1443.36 CX=710.58 airX=9.309 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=77.35 qIzSh=8681 fvent=0.000 pz0=0.0223 qsHvac=-16381 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.510 mwDuctLk=0.000 mwSys=0.000 @@ -12093,7 +12093,7 @@ Z1 CZ: anMCp/T[ 0]=270.69/28892.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.351 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 192 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 192 @@ -12156,7 +12156,7 @@ Attic UZ: anMCp/T[ 0]=263.21/25832.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=194131.46 Dair=1351.90 Nrad=151667.22 Drad=1095.79 CX=893.29 airX=24.985 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 193 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 193 @@ -12207,7 +12207,7 @@ Wed 10-Jul hr=14 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.201 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.510 dryAirMass=246.92 XLGain=0.00 W=0.014036 twb=65.08 rh=0.6253 Z1 CZ: anMCp/T[ 0]=271.27/29012.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2365395.31 Dair=31501.32 Nrad=113651.59 Drad=1443.32 CX=710.92 airX=9.310 + Nair=2365395.30 Dair=31501.32 Nrad=113651.59 Drad=1443.32 CX=710.92 airX=9.310 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=77.38 qIzSh=8769 fvent=0.000 pz0=0.0225 qsHvac=-16571 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.872 mwDuctLk=0.000 mwSys=0.000 @@ -12219,7 +12219,7 @@ Attic UZ: anMCp/T[ 0]=263.02/25837.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 194 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 194 @@ -12233,7 +12233,7 @@ Wed 10-Jul hr=14 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.127 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.512 dryAirMass=246.95 XLGain=0.00 W=0.013967 twb=65.00 rh=0.6223 Z1 CZ: anMCp/T[ 0]=271.37/29033.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2365430.89 Dair=31501.53 Nrad=113656.88 Drad=1443.32 CX=710.95 airX=9.312 + Nair=2365430.88 Dair=31501.53 Nrad=113656.88 Drad=1443.32 CX=710.95 airX=9.312 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=77.39 qIzSh=8782 fvent=0.000 pz0=0.0225 qsHvac=-16593 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.791 mwDuctLk=0.000 mwSys=0.000 @@ -12250,7 +12250,7 @@ Wed 10-Jul hr=14 subhr=23 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.052 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.513 dryAirMass=246.97 XLGain=0.00 W=0.013898 twb=64.91 rh=0.6192 Z1 CZ: anMCp/T[ 0]=271.48/29054.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2365467.59 Dair=31501.76 Nrad=113661.31 Drad=1443.31 CX=710.99 airX=9.313 + Nair=2365467.58 Dair=31501.76 Nrad=113661.32 Drad=1443.31 CX=710.99 airX=9.313 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=77.39 qIzSh=8796 fvent=0.000 pz0=0.0226 qsHvac=-16614 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.711 mwDuctLk=0.000 mwSys=0.000 @@ -12273,7 +12273,7 @@ Z1 CZ: anMCp/T[ 0]=271.59/29075.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.631 mwDuctLk=0.000 mwSys=0.000 tdb=142.42 airX=24.943 dryAirMass=43.27 XLGain=0.00 W=0.013572 twb=80.73 rh=0.0835 Attic UZ: anMCp/T[ 0]=262.86/25845.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=193930.02 Dair=1350.23 Nrad=152730.83 Drad=1097.86 CX=893.94 airX=24.943 + Nair=193930.01 Dair=1350.23 Nrad=152730.83 Drad=1097.86 CX=893.94 airX=24.943 ta=142.42 tr=140.60 qIzSh=-11591 fvent=0.000 pz0=-0.0370 qsHvac=0 @@ -12282,7 +12282,7 @@ Wed 10-Jul hr=14 subhr=25 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 195 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 195 @@ -12293,7 +12293,7 @@ Wed 10-Jul hr=14 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.903 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.516 dryAirMass=247.03 XLGain=0.00 W=0.013757 twb=64.74 rh=0.6131 Z1 CZ: anMCp/T[ 0]=271.69/29097.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2365539.92 Dair=31502.23 Nrad=113668.68 Drad=1443.29 CX=711.06 airX=9.316 + Nair=2365539.91 Dair=31502.23 Nrad=113668.68 Drad=1443.29 CX=711.06 airX=9.316 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=77.39 qIzSh=8822 fvent=0.000 pz0=0.0226 qsHvac=-16654 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.551 mwDuctLk=0.000 mwSys=0.000 @@ -12345,7 +12345,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.680 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=4.519 dryAirMass=247.11 XLGain=0.00 W=0.013545 twb=64.49 rh=0.6038 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 196 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 196 @@ -12353,7 +12353,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.680 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Z1 CZ: anMCp/T[ 0]=272.01/29160.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2365643.64 Dair=31502.91 Nrad=113677.02 Drad=1443.25 CX=711.16 airX=9.319 + Nair=2365643.65 Dair=31502.91 Nrad=113677.02 Drad=1443.25 CX=711.16 airX=9.319 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=77.40 qIzSh=8862 fvent=0.000 pz0=0.0227 qsHvac=-16711 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.311 mwDuctLk=0.000 mwSys=0.000 @@ -12408,7 +12408,7 @@ Z1 CZ: anMCp/T[ 0]=272.52/29258.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 197 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 197 @@ -12471,7 +12471,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.131 mwDuctLk=0.000 mwSys=0.000 tdb=142.45 airX=24.679 dryAirMass=43.29 XLGain=0.00 W=0.013223 twb=80.44 rh=0.0813 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 198 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 198 @@ -12479,7 +12479,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.131 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Attic UZ: anMCp/T[ 0]=260.24/25698.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=192865.43 Dair=1345.70 Nrad=154236.45 Drad=1101.15 CX=878.76 airX=24.679 + Nair=192865.44 Dair=1345.70 Nrad=154236.45 Drad=1101.15 CX=878.76 airX=24.679 ta=142.45 tr=141.13 qIzSh=-11373 fvent=0.000 pz0=-0.0365 qsHvac=0 @@ -12534,7 +12534,7 @@ Attic UZ: anMCp/T[ 0]=257.97/25517.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=142.22 tr=141.13 qIzSh=-11172 fvent=0.000 pz0=-0.0361 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 199 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 199 @@ -12597,7 +12597,7 @@ Attic UZ: anMCp/T[ 0]=255.76/25341.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 200 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 200 @@ -12660,7 +12660,7 @@ Wed 10-Jul hr=15 subhr=14 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 201 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 201 @@ -12723,7 +12723,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.159 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=273.30/29603.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 202 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 202 @@ -12786,7 +12786,7 @@ Z1 CZ: anMCp/T[ 0]=273.51/29675.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.67 tr=77.92 qIzSh=9254 fvent=0.000 pz0=0.0239 qsHvac=-18249 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 203 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 203 @@ -12849,14 +12849,14 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.879 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=248.26/24773.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 204 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 204 1Z Test ------------------------------------------------------------------------------ - Nair=186740.78 Dair=1317.02 Nrad=155501.21 Drad=1104.01 CX=867.49 airX=23.521 + Nair=186740.77 Dair=1317.02 Nrad=155501.21 Drad=1104.01 CX=867.49 airX=23.521 ta=141.54 tr=141.15 qIzSh=-10364 fvent=0.000 pz0=-0.0344 qsHvac=0 @@ -12873,7 +12873,7 @@ Z1 CZ: anMCp/T[ 0]=273.82/29774.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.876 mwDuctLk=0.000 mwSys=0.000 tdb=141.52 airX=23.475 dryAirMass=43.33 XLGain=0.00 W=0.013634 twb=80.61 rh=0.0858 Attic UZ: anMCp/T[ 0]=247.77/24737.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=186528.04 Dair=1315.85 Nrad=155542.08 Drad=1104.12 CX=867.07 airX=23.475 + Nair=186528.03 Dair=1315.85 Nrad=155542.08 Drad=1104.12 CX=867.07 airX=23.475 ta=141.52 tr=141.16 qIzSh=-10326 fvent=0.000 pz0=-0.0343 qsHvac=0 @@ -12912,7 +12912,7 @@ Attic UZ: anMCp/T[ 0]=246.82/24669.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 205 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 205 @@ -12950,7 +12950,7 @@ Z1 CZ: anMCp/T[ 0]=274.14/29875.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.868 mwDuctLk=0.000 mwSys=0.000 tdb=141.45 airX=23.297 dryAirMass=43.33 XLGain=0.00 W=0.013730 twb=80.68 rh=0.0866 Attic UZ: anMCp/T[ 0]=245.88/24602.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=185730.28 Dair=1311.38 Nrad=155689.77 Drad=1104.56 CX=865.45 airX=23.297 + Nair=185730.29 Dair=1311.38 Nrad=155689.76 Drad=1104.56 CX=865.45 airX=23.297 ta=141.45 tr=141.17 qIzSh=-10177 fvent=0.000 pz0=-0.0340 qsHvac=0 @@ -12975,7 +12975,7 @@ Attic UZ: anMCp/T[ 0]=245.43/24569.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=16 subhr=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 206 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 206 @@ -13038,7 +13038,7 @@ Wed 10-Jul hr=16 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.548 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 207 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 207 @@ -13047,7 +13047,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.548 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.557 dryAirMass=247.03 XLGain=0.00 W=0.013736 twb=64.74 rh=0.6105 Z1 CZ: anMCp/T[ 0]=274.20/29892.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372162.03 Dair=31528.89 Nrad=116286.49 Drad=1449.92 CX=712.06 airX=9.357 + Nair=2372162.04 Dair=31528.89 Nrad=116286.49 Drad=1449.92 CX=712.06 airX=9.357 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=78.39 qIzSh=9407 fvent=0.000 pz0=0.0243 qsHvac=-19315 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.857 mwDuctLk=0.000 mwSys=0.000 @@ -13064,7 +13064,7 @@ Wed 10-Jul hr=16 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.547 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.556 dryAirMass=247.02 XLGain=0.00 W=0.013748 twb=64.76 rh=0.6110 Z1 CZ: anMCp/T[ 0]=274.13/29883.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2371962.39 Dair=31526.12 Nrad=116309.83 Drad=1449.90 CX=710.56 airX=9.356 + Nair=2371962.40 Dair=31526.12 Nrad=116309.83 Drad=1449.90 CX=710.56 airX=9.356 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=78.41 qIzSh=9403 fvent=0.000 pz0=0.0243 qsHvac=-19327 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.828 mwDuctLk=0.000 mwSys=0.000 @@ -13081,7 +13081,7 @@ Wed 10-Jul hr=16 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.545 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.555 dryAirMass=247.02 XLGain=0.00 W=0.013758 twb=64.77 rh=0.6115 Z1 CZ: anMCp/T[ 0]=274.05/29872.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372060.88 Dair=31527.07 Nrad=116331.87 Drad=1449.90 CX=711.02 airX=9.355 + Nair=2372060.89 Dair=31527.07 Nrad=116331.87 Drad=1449.90 CX=711.02 airX=9.355 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=78.42 qIzSh=9399 fvent=0.000 pz0=0.0244 qsHvac=-19362 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.796 mwDuctLk=0.000 mwSys=0.000 @@ -13101,7 +13101,7 @@ Z1 CZ: anMCp/T[ 0]=273.96/29861.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2372123.98 Dair=31527.63 Nrad=116353.18 Drad=1449.93 CX=711.32 airX=9.354 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 208 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 208 @@ -13113,7 +13113,7 @@ Z1 CZ: anMCp/T[ 0]=273.96/29861.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.761 mwDuctLk=0.000 mwSys=0.000 tdb=140.49 airX=22.975 dryAirMass=43.39 XLGain=0.00 W=0.013801 twb=80.55 rh=0.0892 Attic UZ: anMCp/T[ 0]=242.83/24280.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=183005.98 Dair=1304.15 Nrad=155629.65 Drad=1104.31 CX=864.51 airX=22.975 + Nair=183005.98 Dair=1304.15 Nrad=155629.66 Drad=1104.31 CX=864.51 airX=22.975 ta=140.49 tr=140.74 qIzSh=-9835 fvent=0.000 pz0=-0.0332 qsHvac=0 @@ -13147,7 +13147,7 @@ Z1 CZ: anMCp/T[ 0]=273.79/29838.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.688 mwDuctLk=0.000 mwSys=0.000 tdb=140.14 airX=22.827 dryAirMass=43.42 XLGain=0.00 W=0.013809 twb=80.49 rh=0.0901 Attic UZ: anMCp/T[ 0]=241.41/24130.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=181898.18 Dair=1300.49 Nrad=155524.35 Drad=1104.04 CX=862.24 airX=22.827 + Nair=181898.17 Dair=1300.49 Nrad=155524.35 Drad=1104.04 CX=862.24 airX=22.827 ta=140.14 tr=140.55 qIzSh=-9701 fvent=0.000 pz0=-0.0329 qsHvac=0 @@ -13158,13 +13158,13 @@ Wed 10-Jul hr=16 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.536 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.549 dryAirMass=247.01 XLGain=0.00 W=0.013789 twb=64.81 rh=0.6128 Z1 CZ: anMCp/T[ 0]=273.70/29828.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372149.53 Dair=31527.45 Nrad=116406.12 Drad=1450.02 CX=711.33 airX=9.349 + Nair=2372149.53 Dair=31527.45 Nrad=116406.13 Drad=1450.02 CX=711.33 airX=9.349 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=78.45 qIzSh=9380 fvent=0.000 pz0=0.0245 qsHvac=-19445 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.652 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 209 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 209 @@ -13173,7 +13173,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.652 mwDuctLk=0.000 mwSys=0.000 tdb=139.97 airX=22.755 dryAirMass=43.43 XLGain=0.00 W=0.013813 twb=80.46 rh=0.0906 Attic UZ: anMCp/T[ 0]=240.71/24057.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=181341.87 Dair=1298.56 Nrad=155464.80 Drad=1103.91 CX=861.05 airX=22.755 + Nair=181341.86 Dair=1298.56 Nrad=155464.80 Drad=1103.91 CX=861.05 airX=22.755 ta=139.97 tr=140.45 qIzSh=-9635 fvent=0.000 pz0=-0.0327 qsHvac=0 @@ -13190,7 +13190,7 @@ Z1 CZ: anMCp/T[ 0]=273.63/29818.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.617 mwDuctLk=0.000 mwSys=0.000 tdb=139.80 airX=22.684 dryAirMass=43.44 XLGain=0.00 W=0.013816 twb=80.43 rh=0.0910 Attic UZ: anMCp/T[ 0]=240.03/23984.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=180791.61 Dair=1296.59 Nrad=155401.03 Drad=1103.77 CX=859.85 airX=22.684 + Nair=180791.60 Dair=1296.59 Nrad=155401.03 Drad=1103.77 CX=859.85 airX=22.684 ta=139.80 tr=140.36 qIzSh=-9572 fvent=0.000 pz0=-0.0325 qsHvac=0 @@ -13227,7 +13227,7 @@ Attic UZ: anMCp/T[ 0]=238.72/23846.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=179714.96 Dair=1292.61 Nrad=155262.26 Drad=1103.50 CX=857.47 airX=22.548 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 210 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 210 @@ -13290,7 +13290,7 @@ Attic UZ: anMCp/T[ 0]=236.92/23654.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 211 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 211 @@ -13353,7 +13353,7 @@ Wed 10-Jul hr=16 subhr=19 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 212 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 212 @@ -13381,7 +13381,7 @@ Wed 10-Jul hr=16 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.537 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.541 dryAirMass=246.99 XLGain=0.00 W=0.013834 twb=64.86 rh=0.6148 Z1 CZ: anMCp/T[ 0]=273.21/29756.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372136.76 Dair=31526.98 Nrad=116474.20 Drad=1450.21 CX=711.39 airX=9.341 + Nair=2372136.77 Dair=31526.98 Nrad=116474.20 Drad=1450.21 CX=711.39 airX=9.341 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=78.47 qIzSh=9345 fvent=0.000 pz0=0.0248 qsHvac=-19485 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.318 mwDuctLk=0.000 mwSys=0.000 @@ -13398,13 +13398,13 @@ Wed 10-Jul hr=16 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.539 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.541 dryAirMass=246.99 XLGain=0.00 W=0.013837 twb=64.86 rh=0.6149 Z1 CZ: anMCp/T[ 0]=273.19/29752.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372128.45 Dair=31526.94 Nrad=116472.39 Drad=1450.22 CX=711.38 airX=9.341 + Nair=2372128.46 Dair=31526.94 Nrad=116472.39 Drad=1450.22 CX=711.38 airX=9.341 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=78.47 qIzSh=9343 fvent=0.000 pz0=0.0248 qsHvac=-19479 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.292 mwDuctLk=0.000 mwSys=0.000 tdb=138.23 airX=22.037 dryAirMass=43.56 XLGain=0.00 W=0.013848 twb=80.16 rh=0.0948 Attic UZ: anMCp/T[ 0]=233.78/23313.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=176365.67 Dair=1282.61 Nrad=154360.37 Drad=1101.20 CX=852.24 airX=22.037 + Nair=176365.68 Dair=1282.61 Nrad=154360.37 Drad=1101.20 CX=852.24 airX=22.037 ta=138.23 tr=139.33 qIzSh=-9002 fvent=0.000 pz0=-0.0310 qsHvac=0 @@ -13416,7 +13416,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.541 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.541 dryAirMass=246.98 XLGain=0.00 W=0.013840 twb=64.87 rh=0.6150 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 213 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 213 @@ -13430,7 +13430,7 @@ Z1 CZ: anMCp/T[ 0]=273.18/29749.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.266 mwDuctLk=0.000 mwSys=0.000 tdb=138.10 airX=21.985 dryAirMass=43.56 XLGain=0.00 W=0.013850 twb=80.13 rh=0.0952 Attic UZ: anMCp/T[ 0]=233.29/23260.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=176076.55 Dair=1281.95 Nrad=154221.38 Drad=1100.73 CX=852.91 airX=21.985 + Nair=176076.56 Dair=1281.95 Nrad=154221.38 Drad=1100.73 CX=852.91 airX=21.985 ta=138.10 tr=139.23 qIzSh=-8958 fvent=0.000 pz0=-0.0309 qsHvac=0 @@ -13441,7 +13441,7 @@ Wed 10-Jul hr=16 subhr=23 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.543 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=4.541 dryAirMass=246.98 XLGain=0.00 W=0.013843 twb=64.87 rh=0.6152 Z1 CZ: anMCp/T[ 0]=273.17/29746.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372108.87 Dair=31526.85 Nrad=116466.16 Drad=1450.22 CX=711.36 airX=9.341 + Nair=2372108.88 Dair=31526.85 Nrad=116466.15 Drad=1450.22 CX=711.36 airX=9.341 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=78.47 qIzSh=9339 fvent=0.000 pz0=0.0248 qsHvac=-19463 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.241 mwDuctLk=0.000 mwSys=0.000 @@ -13479,7 +13479,7 @@ Z1 CZ: anMCp/T[ 0]=273.15/29741.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 214 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 214 @@ -13542,7 +13542,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.117 mwDuctLk=0.000 mwSys=0.000 tdb=137.34 airX=21.688 dryAirMass=43.62 XLGain=0.00 W=0.013865 twb=80.00 rh=0.0972 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 215 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 215 @@ -13601,11 +13601,11 @@ Z1 CZ: anMCp/T[ 0]=273.29/29733.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.098 mwDuctLk=0.000 mwSys=0.000 tdb=136.88 airX=21.593 dryAirMass=43.65 XLGain=0.00 W=0.013891 twb=79.93 rh=0.0986 Attic UZ: anMCp/T[ 0]=229.58/22827.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=173167.76 Dair=1273.98 Nrad=152988.59 Drad=1097.30 CX=848.42 airX=21.593 + Nair=173167.77 Dair=1273.98 Nrad=152988.59 Drad=1097.30 CX=848.42 airX=21.593 ta=136.88 tr=138.31 qIzSh=-8599 fvent=0.000 pz0=-0.0298 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 216 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 216 @@ -13668,7 +13668,7 @@ Attic UZ: anMCp/T[ 0]=227.59/22585.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 217 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 217 @@ -13731,7 +13731,7 @@ Wed 10-Jul hr=17 subhr=8 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 218 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 218 @@ -13747,7 +13747,7 @@ Z1 CZ: anMCp/T[ 0]=273.37/29685.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.885 mwDuctLk=0.000 mwSys=0.000 tdb=135.10 airX=21.019 dryAirMass=43.78 XLGain=0.00 W=0.013997 twb=79.65 rh=0.1040 Attic UZ: anMCp/T[ 0]=224.11/22180.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=169203.70 Dair=1264.97 Nrad=151568.40 Drad=1093.22 CX=846.21 airX=21.019 + Nair=169203.71 Dair=1264.97 Nrad=151568.40 Drad=1093.22 CX=846.21 airX=21.019 ta=135.10 tr=137.10 qIzSh=-8096 fvent=0.000 pz0=-0.0283 qsHvac=0 @@ -13781,7 +13781,7 @@ Z1 CZ: anMCp/T[ 0]=273.38/29670.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.816 mwDuctLk=0.000 mwSys=0.000 tdb=134.58 airX=20.841 dryAirMass=43.81 XLGain=0.00 W=0.014029 twb=79.57 rh=0.1056 Attic UZ: anMCp/T[ 0]=222.39/21980.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=167939.65 Dair=1261.27 Nrad=151125.04 Drad=1092.09 CX=844.38 airX=20.841 + Nair=167939.64 Dair=1261.27 Nrad=151125.04 Drad=1092.09 CX=844.38 airX=20.841 ta=134.58 tr=136.73 qIzSh=-7951 fvent=0.000 pz0=-0.0278 qsHvac=0 @@ -13794,7 +13794,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.807 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=273.40/29664.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 219 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 219 @@ -13857,7 +13857,7 @@ Z1 CZ: anMCp/T[ 0]=273.51/29651.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.75 tr=78.55 qIzSh=9206 fvent=0.000 pz0=0.0257 qsHvac=-19350 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 220 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 220 @@ -13895,7 +13895,7 @@ Wed 10-Jul hr=17 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=15.919 mwDuctLk=0.000 mwSys=0.000 tdb=74.75 airX=4.551 dryAirMass=246.88 XLGain=0.00 W=0.014077 twb=65.17 rh=0.6245 Z1 CZ: anMCp/T[ 0]=273.63/29648.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2373810.25 Dair=31534.73 Nrad=116754.30 Drad=1451.92 CX=717.33 airX=9.351 + Nair=2373810.25 Dair=31534.73 Nrad=116754.29 Drad=1451.92 CX=717.33 airX=9.351 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=78.54 qIzSh=9194 fvent=0.000 pz0=0.0258 qsHvac=-19309 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.641 mwDuctLk=0.000 mwSys=0.000 @@ -13920,7 +13920,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.616 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=217.09/21344.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 221 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 221 @@ -13983,7 +13983,7 @@ Attic UZ: anMCp/T[ 0]=215.10/21097.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 222 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 222 @@ -14046,7 +14046,7 @@ Attic UZ: anMCp/T[ 0]=213.15/20854.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=17 subhr=24 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 223 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 223 @@ -14109,7 +14109,7 @@ Wed 10-Jul hr=17 subhr=27 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.199 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 224 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 224 @@ -14172,7 +14172,7 @@ Z1 CZ: anMCp/T[ 0]=275.00/29675.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2373166.59 Dair=31535.10 Nrad=115633.73 Drad=1449.55 CX=720.59 airX=9.375 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 225 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 225 @@ -14235,7 +14235,7 @@ Z1 CZ: anMCp/T[ 0]=274.82/29617.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.246 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 226 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 226 @@ -14295,10 +14295,10 @@ Z1 CZ: anMCp/T[ 0]=274.67/29561.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.131 mwDuctLk=0.000 mwSys=0.000 tdb=128.38 airX=18.905 dryAirMass=44.24 XLGain=0.00 W=0.014492 twb=78.68 rh=0.1287 Attic UZ: anMCp/T[ 0]=203.72/19696.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=153415.66 Dair=1215.78 Nrad=144326.37 Drad=1076.05 CX=816.56 airX=18.905 + Nair=153415.67 Dair=1215.78 Nrad=144326.37 Drad=1076.05 CX=816.56 airX=18.905 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 227 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 227 @@ -14332,7 +14332,7 @@ Wed 10-Jul hr=18 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.449 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.569 dryAirMass=246.71 XLGain=0.00 W=0.014476 twb=65.66 rh=0.6409 Z1 CZ: anMCp/T[ 0]=274.57/29524.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2373670.76 Dair=31531.03 Nrad=115310.02 Drad=1448.72 CX=719.17 airX=9.369 + Nair=2373670.75 Dair=31531.03 Nrad=115310.02 Drad=1448.72 CX=719.17 airX=9.369 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=78.00 qIzSh=8988 fvent=0.000 pz0=0.0268 qsHvac=-17721 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.052 mwDuctLk=0.000 mwSys=0.000 @@ -14349,7 +14349,7 @@ Wed 10-Jul hr=18 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.471 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.569 dryAirMass=246.70 XLGain=0.00 W=0.014497 twb=65.69 rh=0.6418 Z1 CZ: anMCp/T[ 0]=274.53/29506.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2373593.99 Dair=31530.65 Nrad=115281.56 Drad=1448.70 CX=719.06 airX=9.369 + Nair=2373593.98 Dair=31530.65 Nrad=115281.56 Drad=1448.70 CX=719.06 airX=9.369 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=77.99 qIzSh=8974 fvent=0.000 pz0=0.0268 qsHvac=-17663 Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.012 mwDuctLk=0.000 mwSys=0.000 @@ -14361,7 +14361,7 @@ Attic UZ: anMCp/T[ 0]=200.86/19360.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 228 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 228 @@ -14375,7 +14375,7 @@ Wed 10-Jul hr=18 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.493 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.568 dryAirMass=246.69 XLGain=0.00 W=0.014518 twb=65.71 rh=0.6427 Z1 CZ: anMCp/T[ 0]=274.50/29489.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2373520.41 Dair=31530.30 Nrad=115253.58 Drad=1448.69 CX=718.96 airX=9.368 + Nair=2373520.40 Dair=31530.30 Nrad=115253.58 Drad=1448.69 CX=718.96 airX=9.368 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=77.98 qIzSh=8960 fvent=0.000 pz0=0.0269 qsHvac=-17607 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.974 mwDuctLk=0.000 mwSys=0.000 @@ -14392,7 +14392,7 @@ Wed 10-Jul hr=18 subhr=11 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.516 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.568 dryAirMass=246.68 XLGain=0.00 W=0.014539 twb=65.74 rh=0.6436 Z1 CZ: anMCp/T[ 0]=274.47/29473.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2373449.73 Dair=31529.98 Nrad=115225.92 Drad=1448.68 CX=718.86 airX=9.368 + Nair=2373449.72 Dair=31529.98 Nrad=115225.92 Drad=1448.68 CX=718.86 airX=9.368 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=77.96 qIzSh=8945 fvent=0.000 pz0=0.0269 qsHvac=-17551 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.936 mwDuctLk=0.000 mwSys=0.000 @@ -14409,7 +14409,7 @@ Wed 10-Jul hr=18 subhr=12 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.539 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.568 dryAirMass=246.68 XLGain=0.00 W=0.014560 twb=65.76 rh=0.6446 Z1 CZ: anMCp/T[ 0]=274.44/29457.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2373381.14 Dair=31529.68 Nrad=115198.49 Drad=1448.66 CX=718.78 airX=9.368 + Nair=2373381.14 Dair=31529.68 Nrad=115198.50 Drad=1448.66 CX=718.78 airX=9.368 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=77.95 qIzSh=8932 fvent=0.000 pz0=0.0269 qsHvac=-17496 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.900 mwDuctLk=0.000 mwSys=0.000 @@ -14424,7 +14424,7 @@ Wed 10-Jul hr=18 subhr=13 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 229 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 229 @@ -14452,7 +14452,7 @@ Wed 10-Jul hr=18 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.586 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.568 dryAirMass=246.66 XLGain=0.00 W=0.014603 twb=65.81 rh=0.6464 Z1 CZ: anMCp/T[ 0]=274.41/29428.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2373247.12 Dair=31529.10 Nrad=115144.08 Drad=1448.63 CX=718.60 airX=9.368 + Nair=2373247.13 Dair=31529.10 Nrad=115144.08 Drad=1448.63 CX=718.60 airX=9.368 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=77.93 qIzSh=8904 fvent=0.000 pz0=0.0270 qsHvac=-17387 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.828 mwDuctLk=0.000 mwSys=0.000 @@ -14487,7 +14487,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.634 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.568 dryAirMass=246.64 XLGain=0.00 W=0.014646 twb=65.87 rh=0.6482 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 230 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 230 @@ -14529,7 +14529,7 @@ Wed 10-Jul hr=18 subhr=18 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.684 mwDuctLk=0.000 mwSys=0.000 tdb=74.79 airX=4.568 dryAirMass=246.63 XLGain=0.00 W=0.014688 twb=65.92 rh=0.6501 Z1 CZ: anMCp/T[ 0]=274.42/29376.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2372979.88 Dair=31528.09 Nrad=115022.31 Drad=1448.54 CX=718.26 airX=9.368 + Nair=2372979.88 Dair=31528.09 Nrad=115022.30 Drad=1448.54 CX=718.26 airX=9.368 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=74.79 tr=77.88 qIzSh=8852 fvent=0.000 pz0=0.0272 qsHvac=-17157 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.693 mwDuctLk=0.000 mwSys=0.000 @@ -14550,7 +14550,7 @@ Z1 CZ: anMCp/T[ 0]=274.43/29364.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 231 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 231 @@ -14578,7 +14578,7 @@ Z1 CZ: anMCp/T[ 0]=274.44/29352.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.624 mwDuctLk=0.000 mwSys=0.000 tdb=124.65 airX=17.648 dryAirMass=44.50 XLGain=0.00 W=0.014785 twb=78.16 rh=0.1451 Attic UZ: anMCp/T[ 0]=191.30/18219.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=144763.97 Dair=1185.34 Nrad=139944.56 Drad=1066.62 CX=797.23 airX=17.648 + Nair=144763.98 Dair=1185.34 Nrad=139944.56 Drad=1066.62 CX=797.23 airX=17.648 ta=124.65 tr=128.40 qIzSh=-5626 fvent=0.000 pz0=-0.0192 qsHvac=0 @@ -14613,7 +14613,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.552 mwDuctLk=0.000 mwSys=0.000 tdb=124.13 airX=17.473 dryAirMass=44.54 XLGain=0.00 W=0.014827 twb=78.08 rh=0.1477 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 232 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 232 @@ -14655,7 +14655,7 @@ Z1 CZ: anMCp/T[ 0]=274.48/29303.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.475 mwDuctLk=0.000 mwSys=0.000 tdb=123.59 airX=17.293 dryAirMass=44.58 XLGain=0.00 W=0.014869 twb=78.01 rh=0.1503 Attic UZ: anMCp/T[ 0]=187.77/17799.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=142402.24 Dair=1176.91 Nrad=138637.82 Drad=1063.84 CX=791.74 airX=17.293 + Nair=142402.25 Dair=1176.91 Nrad=138637.82 Drad=1063.84 CX=791.74 airX=17.293 ta=123.59 tr=127.45 qIzSh=-5408 fvent=0.000 pz0=-0.0183 qsHvac=0 @@ -14672,11 +14672,11 @@ Z1 CZ: anMCp/T[ 0]=274.49/29291.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.435 mwDuctLk=0.000 mwSys=0.000 tdb=123.32 airX=17.201 dryAirMass=44.60 XLGain=0.00 W=0.014890 twb=77.97 rh=0.1516 Attic UZ: anMCp/T[ 0]=186.85/17690.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=141791.34 Dair=1174.67 Nrad=138306.91 Drad=1063.14 CX=790.33 airX=17.201 + Nair=141791.35 Dair=1174.67 Nrad=138306.91 Drad=1063.14 CX=790.33 airX=17.201 ta=123.32 tr=127.21 qIzSh=-5352 fvent=0.000 pz0=-0.0181 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 233 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 233 @@ -14739,7 +14739,7 @@ Attic UZ: anMCp/T[ 0]=183.98/17353.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 234 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 234 @@ -14802,7 +14802,7 @@ Wed 10-Jul hr=19 subhr=2 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 235 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 235 @@ -14865,7 +14865,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.292 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=267.10/28210.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 236 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 236 @@ -14928,7 +14928,7 @@ Z1 CZ: anMCp/T[ 0]=263.30/27691.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.83 tr=76.90 qIzSh=7988 fvent=0.000 pz0=0.0261 qsHvac=-13769 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 237 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 237 @@ -14991,7 +14991,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.041 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=166.05/15528.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 238 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 238 @@ -15054,7 +15054,7 @@ Attic UZ: anMCp/T[ 0]=161.61/15085.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 239 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 239 @@ -15117,7 +15117,7 @@ Attic UZ: anMCp/T[ 0]=157.36/14663.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=19 subhr=18 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 240 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 240 @@ -15152,7 +15152,7 @@ Z1 CZ: anMCp/T[ 0]=249.70/25849.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.198 mwDuctLk=0.000 mwSys=0.000 tdb=115.72 airX=14.042 dryAirMass=45.21 XLGain=0.00 W=0.014523 twb=76.02 rh=0.1829 Attic UZ: anMCp/T[ 0]=154.63/14392.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=123858.82 Dair=1101.36 Nrad=129347.72 Drad=1043.51 CX=746.38 airX=14.042 + Nair=123858.81 Dair=1101.36 Nrad=129347.72 Drad=1043.51 CX=746.38 airX=14.042 ta=115.72 tr=120.52 qIzSh=-3501 fvent=0.000 pz0=-0.0138 qsHvac=0 @@ -15180,7 +15180,7 @@ Wed 10-Jul hr=19 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.570 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 241 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 241 @@ -15223,7 +15223,7 @@ Wed 10-Jul hr=19 subhr=23 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=14.365 mwDuctLk=0.000 mwSys=0.000 tdb=74.83 airX=4.076 dryAirMass=246.67 XLGain=0.00 W=0.014475 twb=65.67 rh=0.6400 Z1 CZ: anMCp/T[ 0]=244.89/25204.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2362916.56 Dair=31435.47 Nrad=112284.35 Drad=1448.16 CX=702.35 airX=8.876 + Nair=2362916.56 Dair=31435.47 Nrad=112284.36 Drad=1448.16 CX=702.35 airX=8.876 TH=64.17 TD=68.00 TC=74.83 qhCap=20000 qcCap=-34000 ta=74.83 tr=76.65 qIzSh=6878 fvent=0.000 pz0=0.0237 qsHvac=-11774 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.815 mwDuctLk=0.000 mwSys=0.000 @@ -15243,7 +15243,7 @@ Z1 CZ: anMCp/T[ 0]=243.70/25045.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2362599.86 Dair=31432.58 Nrad=112281.65 Drad=1448.42 CX=701.91 airX=8.856 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 242 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 242 @@ -15289,7 +15289,7 @@ Z1 CZ: anMCp/T[ 0]=241.33/24728.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.544 mwDuctLk=0.000 mwSys=0.000 tdb=113.74 airX=13.192 dryAirMass=45.38 XLGain=0.00 W=0.014311 twb=75.34 rh=0.1904 Attic UZ: anMCp/T[ 0]=145.81/13517.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=119500.71 Dair=1081.96 Nrad=126698.46 Drad=1038.19 CX=732.82 airX=13.192 + Nair=119500.70 Dair=1081.96 Nrad=126698.46 Drad=1038.19 CX=732.82 airX=13.192 ta=113.74 tr=118.61 qIzSh=-3067 fvent=0.000 pz0=-0.0129 qsHvac=0 @@ -15306,7 +15306,7 @@ Z1 CZ: anMCp/T[ 0]=240.15/24571.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.456 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 243 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 243 @@ -15332,7 +15332,7 @@ Z1 CZ: anMCp/T[ 0]=238.97/24415.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.370 mwDuctLk=0.000 mwSys=0.000 tdb=113.21 airX=12.967 dryAirMass=45.43 XLGain=0.00 W=0.014249 twb=75.16 rh=0.1926 Attic UZ: anMCp/T[ 0]=143.48/13287.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=118325.77 Dair=1076.52 Nrad=125951.63 Drad=1036.69 CX=729.12 airX=12.967 + Nair=118325.78 Dair=1076.52 Nrad=125951.63 Drad=1036.69 CX=729.12 airX=12.967 ta=113.21 tr=118.07 qIzSh=-2956 fvent=0.000 pz0=-0.0127 qsHvac=0 @@ -15360,7 +15360,7 @@ Wed 10-Jul hr=20 subhr=0 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.690 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.937 dryAirMass=246.73 XLGain=0.00 W=0.014269 twb=65.43 rh=0.6302 Z1 CZ: anMCp/T[ 0]=236.61/24076.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2359091.54 Dair=31398.48 Nrad=111062.68 Drad=1445.92 CX=684.21 airX=8.737 + Nair=2359091.53 Dair=31398.48 Nrad=111062.68 Drad=1445.92 CX=684.21 airX=8.737 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ta=74.88 tr=76.19 qIzSh=6360 fvent=0.000 pz0=0.0226 qsHvac=-9030 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.274 mwDuctLk=0.000 mwSys=0.000 @@ -15369,7 +15369,7 @@ Attic UZ: anMCp/T[ 0]=142.30/13148.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=117064.93 Dair=1070.46 Nrad=125036.59 Drad=1033.66 CX=717.07 airX=12.847 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 244 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 244 @@ -15386,7 +15386,7 @@ Wed 10-Jul hr=20 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.603 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.914 dryAirMass=246.74 XLGain=0.00 W=0.014245 twb=65.41 rh=0.6292 Z1 CZ: anMCp/T[ 0]=235.21/23872.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2359647.90 Dair=31391.16 Nrad=110981.03 Drad=1445.31 CX=681.18 airX=8.714 + Nair=2359647.89 Dair=31391.16 Nrad=110981.03 Drad=1445.31 CX=681.18 airX=8.714 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ta=74.88 tr=76.17 qIzSh=6261 fvent=0.000 pz0=0.0223 qsHvac=-10120 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.253 mwDuctLk=0.000 mwSys=0.000 @@ -15420,7 +15420,7 @@ Wed 10-Jul hr=20 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.450 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.873 dryAirMass=246.76 XLGain=0.00 W=0.014205 twb=65.36 rh=0.6275 Z1 CZ: anMCp/T[ 0]=232.77/23501.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2357947.25 Dair=31372.19 Nrad=110960.12 Drad=1445.87 CX=673.07 airX=8.673 + Nair=2357947.24 Dair=31372.19 Nrad=110960.12 Drad=1445.87 CX=673.07 airX=8.673 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ta=74.88 tr=76.15 qIzSh=6073 fvent=0.000 pz0=0.0219 qsHvac=-9813 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.222 mwDuctLk=0.000 mwSys=0.000 @@ -15432,7 +15432,7 @@ Attic UZ: anMCp/T[ 0]=141.77/13033.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 245 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 245 @@ -15469,7 +15469,7 @@ Z1 CZ: anMCp/T[ 0]=230.30/23130.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.195 mwDuctLk=0.000 mwSys=0.000 tdb=111.24 airX=12.742 dryAirMass=45.59 XLGain=0.00 W=0.014121 twb=74.57 rh=0.2020 Attic UZ: anMCp/T[ 0]=141.51/12964.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=115229.23 Dair=1067.51 Nrad=123107.50 Drad=1029.15 CX=711.51 airX=12.742 + Nair=115229.23 Dair=1067.51 Nrad=123107.51 Drad=1029.15 CX=711.51 airX=12.742 ta=111.24 tr=116.20 qIzSh=-2778 fvent=0.000 pz0=-0.0125 qsHvac=0 @@ -15495,7 +15495,7 @@ Wed 10-Jul hr=20 subhr=7 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 246 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 246 @@ -15558,7 +15558,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.938 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.728 dryAirMass=246.80 XLGain=0.00 W=0.014118 twb=65.25 rh=0.6237 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 247 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 247 @@ -15606,7 +15606,7 @@ Z1 CZ: anMCp/T[ 0]=221.61/21848.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.148 mwDuctLk=0.000 mwSys=0.000 tdb=109.32 airX=12.650 dryAirMass=45.75 XLGain=0.00 W=0.014082 twb=74.08 rh=0.2129 Attic UZ: anMCp/T[ 0]=140.97/12755.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=113158.44 Dair=1067.31 Nrad=120375.51 Drad=1022.38 CX=705.58 airX=12.650 + Nair=113158.44 Dair=1067.31 Nrad=120375.52 Drad=1022.38 CX=705.58 airX=12.650 ta=109.32 tr=114.30 qIzSh=-2655 fvent=0.000 pz0=-0.0125 qsHvac=0 @@ -15621,7 +15621,7 @@ Z1 CZ: anMCp/T[ 0]=220.36/21666.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 248 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 248 @@ -15684,7 +15684,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.141 mwDuctLk=0.000 mwSys=0.000 tdb=108.24 airX=12.623 dryAirMass=45.84 XLGain=0.00 W=0.014073 twb=73.82 rh=0.2198 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 249 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 249 @@ -15726,7 +15726,7 @@ Z1 CZ: anMCp/T[ 0]=214.06/20764.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.143 mwDuctLk=0.000 mwSys=0.000 tdb=107.71 airX=12.616 dryAirMass=45.88 XLGain=0.00 W=0.014069 twb=73.69 rh=0.2231 Attic UZ: anMCp/T[ 0]=140.99/12617.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=111550.25 Dair=1068.17 Nrad=118058.79 Drad=1016.55 CX=700.97 airX=12.616 + Nair=111550.25 Dair=1068.17 Nrad=118058.80 Drad=1016.55 CX=700.97 airX=12.616 ta=107.71 tr=112.70 qIzSh=-2568 fvent=0.000 pz0=-0.0125 qsHvac=0 @@ -15747,7 +15747,7 @@ Attic UZ: anMCp/T[ 0]=141.03/12597.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=107.44 tr=112.43 qIzSh=-2555 fvent=0.000 pz0=-0.0126 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 250 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 250 @@ -15810,7 +15810,7 @@ Attic UZ: anMCp/T[ 0]=141.21/12542.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 251 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 251 @@ -15863,7 +15863,7 @@ Z1 CZ: anMCp/T[ 0]=205.12/19518.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.166 mwDuctLk=0.000 mwSys=0.000 tdb=105.86 airX=12.618 dryAirMass=46.03 XLGain=0.00 W=0.014061 twb=73.25 rh=0.2351 Attic UZ: anMCp/T[ 0]=141.47/12493.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=109829.54 Dair=1070.23 Nrad=115391.78 Drad=1009.74 CX=696.07 airX=12.618 + Nair=109829.55 Dair=1070.23 Nrad=115391.78 Drad=1009.74 CX=696.07 airX=12.618 ta=105.86 tr=110.84 qIzSh=-2483 fvent=0.000 pz0=-0.0126 qsHvac=0 @@ -15873,7 +15873,7 @@ Wed 10-Jul hr=20 subhr=26 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 252 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 252 @@ -15900,7 +15900,7 @@ Wed 10-Jul hr=20 subhr=27 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.688 mwDuctLk=0.000 mwSys=0.000 tdb=74.88 airX=3.369 dryAirMass=246.82 XLGain=0.00 W=0.014064 twb=65.19 rh=0.6214 Z1 CZ: anMCp/T[ 0]=202.54/19165.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2350201.42 Dair=31304.73 Nrad=110986.55 Drad=1452.83 CX=665.49 airX=8.169 + Nair=2350201.41 Dair=31304.73 Nrad=110986.55 Drad=1452.83 CX=665.49 airX=8.169 TH=64.13 TD=68.00 TC=74.88 qhCap=20000 qcCap=-34000 ta=74.88 tr=75.92 qIzSh=4001 fvent=0.000 pz0=0.0164 qsHvac=-6953 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.178 mwDuctLk=0.000 mwSys=0.000 @@ -15936,7 +15936,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.537 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=199.94/18813.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 253 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 253 @@ -15999,7 +15999,7 @@ Z1 CZ: anMCp/T[ 0]=197.68/18470.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.92 tr=75.78 qIzSh=3660 fvent=0.000 pz0=0.0155 qsHvac=-6224 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 254 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 254 @@ -16037,7 +16037,7 @@ Wed 10-Jul hr=21 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.113 mwDuctLk=0.000 mwSys=0.000 tdb=74.92 airX=3.265 dryAirMass=246.82 XLGain=0.00 W=0.013984 twb=65.10 rh=0.6171 Z1 CZ: anMCp/T[ 0]=196.28/18251.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2347564.35 Dair=31262.07 Nrad=110615.08 Drad=1452.96 CX=645.80 airX=8.065 + Nair=2347564.34 Dair=31262.07 Nrad=110615.08 Drad=1452.96 CX=645.80 airX=8.065 TH=64.08 TD=68.00 TC=74.92 qhCap=20000 qcCap=-34000 ta=74.92 tr=75.76 qIzSh=3547 fvent=0.000 pz0=0.0153 qsHvac=-6057 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.176 mwDuctLk=0.000 mwSys=0.000 @@ -16062,7 +16062,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.168 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=143.89/12438.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 255 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 255 @@ -16125,7 +16125,7 @@ Attic UZ: anMCp/T[ 0]=144.76/12430.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 256 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 256 @@ -16188,7 +16188,7 @@ Attic UZ: anMCp/T[ 0]=145.64/12423.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=21 subhr=12 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 257 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 257 @@ -16223,7 +16223,7 @@ Z1 CZ: anMCp/T[ 0]=189.87/17276.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.085 mwDuctLk=0.000 mwSys=0.000 tdb=101.19 airX=12.926 dryAirMass=46.45 XLGain=0.00 W=0.013527 twb=71.58 rh=0.2601 Attic UZ: anMCp/T[ 0]=146.24/12421.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=106107.76 Dair=1082.13 Nrad=108538.57 Drad=990.44 CX=683.72 airX=12.926 + Nair=106107.75 Dair=1082.13 Nrad=108538.57 Drad=990.44 CX=683.72 airX=12.926 ta=101.19 tr=106.16 qIzSh=-2377 fvent=0.000 pz0=-0.0123 qsHvac=0 @@ -16251,7 +16251,7 @@ Wed 10-Jul hr=21 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.221 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 258 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 258 @@ -16260,7 +16260,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.221 mwDuctLk=0.000 mwSys=0.000 tdb=74.92 airX=3.132 dryAirMass=246.97 XLGain=0.00 W=0.013583 twb=64.61 rh=0.5998 Z1 CZ: anMCp/T[ 0]=188.42/17061.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2344962.81 Dair=31238.23 Nrad=110583.78 Drad=1455.02 CX=640.69 airX=7.932 + Nair=2344962.80 Dair=31238.23 Nrad=110583.78 Drad=1455.02 CX=640.69 airX=7.932 TH=64.08 TD=68.00 TC=74.92 qhCap=20000 qcCap=-34000 ta=74.92 tr=75.67 qIzSh=2945 fvent=0.000 pz0=0.0138 qsHvac=-5181 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.062 mwDuctLk=0.000 mwSys=0.000 @@ -16314,7 +16314,7 @@ Z1 CZ: anMCp/T[ 0]=186.21/16736.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2344308.87 Dair=31232.34 Nrad=110580.01 Drad=1455.60 CX=639.73 airX=7.895 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 259 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 259 @@ -16377,7 +16377,7 @@ Z1 CZ: anMCp/T[ 0]=183.97/16413.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.992 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 260 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 260 @@ -16440,7 +16440,7 @@ Attic UZ: anMCp/T[ 0]=149.68/12424.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=104123.74 Dair=1091.86 Nrad=104586.91 Drad=979.66 CX=678.57 airX=13.154 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 261 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 261 @@ -16491,7 +16491,7 @@ Wed 10-Jul hr=21 subhr=27 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.315 mwDuctLk=0.000 mwSys=0.000 tdb=74.92 airX=2.979 dryAirMass=247.18 XLGain=0.00 W=0.013046 twb=63.96 rh=0.5765 Z1 CZ: anMCp/T[ 0]=179.36/15762.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2342327.68 Dair=31214.11 Nrad=110579.19 Drad=1457.43 CX=636.77 airX=7.779 + Nair=2342327.69 Dair=31214.11 Nrad=110579.19 Drad=1457.43 CX=636.77 airX=7.779 TH=64.08 TD=68.00 TC=74.92 qhCap=20000 qcCap=-34000 ta=74.92 tr=75.58 qIzSh=2326 fvent=0.000 pz0=0.0123 qsHvac=-4294 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.939 mwDuctLk=0.000 mwSys=0.000 @@ -16503,7 +16503,7 @@ Attic UZ: anMCp/T[ 0]=150.69/12433.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 262 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 262 @@ -16566,7 +16566,7 @@ Wed 10-Jul hr=22 subhr=1 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 263 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 263 @@ -16611,7 +16611,7 @@ Wed 10-Jul hr=22 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.983 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.904 dryAirMass=247.25 XLGain=0.00 W=0.012814 twb=63.66 rh=0.5657 Z1 CZ: anMCp/T[ 0]=174.88/15199.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2339967.31 Dair=31170.74 Nrad=110431.00 Drad=1458.08 CX=604.43 airX=7.704 + Nair=2339967.32 Dair=31170.74 Nrad=110431.00 Drad=1458.08 CX=604.43 airX=7.704 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.51 qIzSh=2091 fvent=0.000 pz0=0.0117 qsHvac=-3793 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.735 mwDuctLk=0.000 mwSys=0.000 @@ -16629,7 +16629,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.940 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.893 dryAirMass=247.27 XLGain=0.00 W=0.012784 twb=63.62 rh=0.5644 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 264 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 264 @@ -16654,7 +16654,7 @@ Wed 10-Jul hr=22 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.897 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.882 dryAirMass=247.28 XLGain=0.00 W=0.012755 twb=63.59 rh=0.5632 Z1 CZ: anMCp/T[ 0]=173.57/15039.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2340023.18 Dair=31172.68 Nrad=110440.06 Drad=1458.56 CX=607.88 airX=7.682 + Nair=2340023.19 Dair=31172.68 Nrad=110440.06 Drad=1458.56 CX=607.88 airX=7.682 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.49 qIzSh=2029 fvent=0.000 pz0=0.0116 qsHvac=-3697 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.659 mwDuctLk=0.000 mwSys=0.000 @@ -16671,7 +16671,7 @@ Wed 10-Jul hr=22 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.854 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.871 dryAirMass=247.29 XLGain=0.00 W=0.012728 twb=63.55 rh=0.5620 Z1 CZ: anMCp/T[ 0]=172.91/14959.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2339752.79 Dair=31169.67 Nrad=110441.18 Drad=1458.75 CX=606.79 airX=7.671 + Nair=2339752.80 Dair=31169.67 Nrad=110441.18 Drad=1458.75 CX=606.79 airX=7.671 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.49 qIzSh=1998 fvent=0.000 pz0=0.0115 qsHvac=-3648 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.623 mwDuctLk=0.000 mwSys=0.000 @@ -16692,7 +16692,7 @@ Z1 CZ: anMCp/T[ 0]=172.24/14879.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 265 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 265 @@ -16755,7 +16755,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.487 mwDuctLk=0.000 mwSys=0.000 tdb=94.75 airX=12.702 dryAirMass=47.07 XLGain=0.00 W=0.012548 twb=68.84 rh=0.2938 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 266 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 266 @@ -16818,7 +16818,7 @@ Attic UZ: anMCp/T[ 0]=144.38/11671.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=94.12 tr=98.83 qIzSh=-1917 fvent=0.000 pz0=-0.0103 qsHvac=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 267 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 267 @@ -16881,7 +16881,7 @@ Attic UZ: anMCp/T[ 0]=143.23/11538.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 268 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 268 @@ -16911,7 +16911,7 @@ Wed 10-Jul hr=22 subhr=18 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.333 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.735 dryAirMass=247.39 XLGain=0.00 W=0.012484 twb=63.23 rh=0.5514 Z1 CZ: anMCp/T[ 0]=164.78/13995.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2337582.54 Dair=31147.51 Nrad=110473.54 Drad=1461.13 CX=603.35 airX=7.535 + Nair=2337582.53 Dair=31147.51 Nrad=110473.54 Drad=1461.13 CX=603.35 airX=7.535 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.42 qIzSh=1643 fvent=0.000 pz0=0.0106 qsHvac=-3095 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.256 mwDuctLk=0.000 mwSys=0.000 @@ -16928,7 +16928,7 @@ Wed 10-Jul hr=22 subhr=19 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.289 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.723 dryAirMass=247.39 XLGain=0.00 W=0.012467 twb=63.20 rh=0.5507 Z1 CZ: anMCp/T[ 0]=164.09/13914.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2337400.01 Dair=31145.61 Nrad=110477.54 Drad=1461.34 CX=603.04 airX=7.523 + Nair=2337400.00 Dair=31145.61 Nrad=110477.54 Drad=1461.34 CX=603.04 airX=7.523 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.41 qIzSh=1615 fvent=0.000 pz0=0.0105 qsHvac=-3051 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.230 mwDuctLk=0.000 mwSys=0.000 @@ -16944,7 +16944,7 @@ Wed 10-Jul hr=22 subhr=20 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 269 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 269 @@ -17007,7 +17007,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=8.114 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=161.29/13592.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 270 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 270 @@ -17070,7 +17070,7 @@ Z1 CZ: anMCp/T[ 0]=159.17/13350.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.96 tr=75.38 qIzSh=1419 fvent=0.000 pz0=0.0100 qsHvac=-2754 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 271 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 271 @@ -17125,7 +17125,7 @@ Wed 10-Jul hr=22 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.850 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=2.605 dryAirMass=247.45 XLGain=0.00 W=0.012321 twb=63.01 rh=0.5444 Z1 CZ: anMCp/T[ 0]=157.02/13108.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2335561.18 Dair=31126.25 Nrad=110526.60 Drad=1463.43 CX=599.84 airX=7.405 + Nair=2335561.17 Dair=31126.25 Nrad=110526.60 Drad=1463.43 CX=599.84 airX=7.405 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.36 qIzSh=1338 fvent=0.000 pz0=0.0098 qsHvac=-2631 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.999 mwDuctLk=0.000 mwSys=0.000 @@ -17133,7 +17133,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.999 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=139.13/11046.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 272 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 272 @@ -17196,7 +17196,7 @@ Attic UZ: anMCp/T[ 0]=136.00/10781.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 273 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 273 @@ -17259,7 +17259,7 @@ Attic UZ: anMCp/T[ 0]=133.16/10536.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=23 subhr=6 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 274 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 274 @@ -17322,7 +17322,7 @@ Wed 10-Jul hr=23 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.045 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 275 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 275 @@ -17385,7 +17385,7 @@ Z1 CZ: anMCp/T[ 0]=137.11/11232.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2330938.97 Dair=31054.89 Nrad=110729.44 Drad=1468.23 CX=570.15 airX=7.075 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 276 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 276 @@ -17408,7 +17408,7 @@ Wed 10-Jul hr=23 subhr=13 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.730 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.249 dryAirMass=247.49 XLGain=0.00 W=0.012183 twb=62.84 rh=0.5377 Z1 CZ: anMCp/T[ 0]=135.60/11091.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2330610.22 Dair=31050.99 Nrad=110751.83 Drad=1468.65 CX=569.47 airX=7.049 + Nair=2330610.23 Dair=31050.99 Nrad=110751.83 Drad=1468.65 CX=569.47 airX=7.049 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.30 qIzSh=922 fvent=0.000 pz0=0.0074 qsHvac=-1954 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.283 mwDuctLk=0.000 mwSys=0.000 @@ -17448,7 +17448,7 @@ Z1 CZ: anMCp/T[ 0]=132.57/10812.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.193 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 277 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 277 @@ -17468,7 +17468,7 @@ Wed 10-Jul hr=23 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.494 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.174 dryAirMass=247.50 XLGain=0.00 W=0.012161 twb=62.81 rh=0.5367 Z1 CZ: anMCp/T[ 0]=131.05/10672.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2329642.17 Dair=31039.51 Nrad=110821.01 Drad=1469.95 CX=567.63 airX=6.974 + Nair=2329642.18 Dair=31039.51 Nrad=110821.01 Drad=1469.95 CX=567.63 airX=6.974 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.28 qIzSh=844 fvent=0.000 pz0=0.0069 qsHvac=-1839 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.149 mwDuctLk=0.000 mwSys=0.000 @@ -17511,7 +17511,7 @@ Attic UZ: anMCp/T[ 0]=122.03/9574.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=87205.25 Dair=1022.75 Nrad=88634.21 Drad=939.59 CX=612.49 airX=10.501 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 278 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 278 @@ -17528,7 +17528,7 @@ Wed 10-Jul hr=23 subhr=19 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.258 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.098 dryAirMass=247.51 XLGain=0.00 W=0.012141 twb=62.78 rh=0.5358 Z1 CZ: anMCp/T[ 0]=126.49/10256.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2328658.08 Dair=31027.76 Nrad=110895.46 Drad=1471.32 CX=565.59 airX=6.898 + Nair=2328658.09 Dair=31027.76 Nrad=110895.46 Drad=1471.32 CX=565.59 airX=6.898 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.27 qIzSh=769 fvent=0.000 pz0=0.0065 qsHvac=-1728 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.020 mwDuctLk=0.000 mwSys=0.000 @@ -17562,7 +17562,7 @@ Wed 10-Jul hr=23 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.101 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=2.048 dryAirMass=247.51 XLGain=0.00 W=0.012128 twb=62.77 rh=0.5353 Z1 CZ: anMCp/T[ 0]=123.45/9979.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2328007.75 Dair=31019.98 Nrad=110940.00 Drad=1472.16 CX=564.43 airX=6.848 + Nair=2328007.75 Dair=31019.98 Nrad=110940.01 Drad=1472.16 CX=564.43 airX=6.848 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.26 qIzSh=721 fvent=0.000 pz0=0.0062 qsHvac=-1656 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.936 mwDuctLk=0.000 mwSys=0.000 @@ -17574,7 +17574,7 @@ Attic UZ: anMCp/T[ 0]=119.70/9372.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 279 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 279 @@ -17637,7 +17637,7 @@ Wed 10-Jul hr=23 subhr=25 ---------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 280 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 280 @@ -17700,7 +17700,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=5.552 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=1.870 dryAirMass=247.53 XLGain=0.00 W=0.012084 twb=62.71 rh=0.5334 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 281 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 281 @@ -17725,7 +17725,7 @@ Wed 10-Jul hr=23 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=5.473 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=1.844 dryAirMass=247.53 XLGain=0.00 W=0.012078 twb=62.70 rh=0.5331 Z1 CZ: anMCp/T[ 0]=111.20/8882.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2325390.18 Dair=30988.45 Nrad=111109.22 Drad=1475.44 CX=560.23 airX=6.644 + Nair=2325390.17 Dair=30988.45 Nrad=111109.22 Drad=1475.44 CX=560.23 airX=6.644 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.22 qIzSh=543 fvent=0.000 pz0=0.0050 qsHvac=-1381 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.626 mwDuctLk=0.000 mwSys=0.000 @@ -17733,7 +17733,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.626 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=113.93/8868.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=83628.84 Dair=999.93 Nrad=86143.29 Drad=934.27 CX=599.58 airX=9.772 ta=85.93 tr=89.75 qIzSh=-922 fvent=0.000 pz0=-0.0076 qsHvac=0 -! CSE 0.893.0 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -17763,7 +17763,7 @@ Attic UZ: anMCp/T[ 0]=113.93/8868.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 282 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 282 @@ -17826,7 +17826,7 @@ Input for Run 001: DELETE HOLIDAY "Columbus Day" ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 283 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 283 @@ -17889,7 +17889,7 @@ Input for Run 001: // ----- CONSTRUCTION section for heavyweight case ----- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 284 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 284 @@ -17952,7 +17952,7 @@ Input for Run 001: // ----- GLAZETYPES -------------------------------------------------- ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 285 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 285 @@ -18015,7 +18015,7 @@ Input for Run 001: SURFACE "CtJ" sfType=Ceiling sfCon=CFrm2x4 sfArea=CeilFF * ACEIL; ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 286 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 286 @@ -18078,7 +18078,7 @@ Input for Run 001: lfDistL=0 //distance:edge of window to fin ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 287 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 287 @@ -18141,7 +18141,7 @@ Input for Run 001: 0 sfArea=232.51-(2*WINH*WINW) //wall area 21.6 sq meters ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 288 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 288 @@ -18204,7 +18204,7 @@ Input for Run 001: IZXFER AX1 izNVTYPE = AirNetExt izZN1 = Attic izALo = 3 izHD = 8 izNVEff = 1 izCpr=.5 izExp=.71 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 289 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 289 @@ -18267,7 +18267,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 290 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 290 @@ -18330,7 +18330,7 @@ Input for Run 001: rpDayBeg=Jun 10 rpDayEnd=Jun 12 ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 291 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 291 @@ -18393,7 +18393,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 292 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 292 @@ -18402,21 +18402,21 @@ Input for Run 001: -! CSE 0.893.0 for Win32 console run(s) done: Tue 22-Jun-21 11:09:49 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 9:50:33 am -! Executable: d:\cse\msvc\cse.exe -! 22-Jun-21 10:50 am (VS 14.29 2640384 bytes) (HPWH 1.14.0+master.7e0a1c1.4) -! Command line: -x! -t1 1ZKiva -! Input file: D:\cse\test\1ZKiva.cse -! Report file: D:\cse\test\1ZKiva.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 27-Oct-21 9:48 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 1ZKiva +! Input file: C:\Users\nkruis\projects\cse\test\1ZKiva.cse +! Report file: C:\Users\nkruis\projects\cse\test\1ZKiva.rep ! Timing info -- -! Input: Time = 0.05 Calls = 1 T/C = 0.0520 +! Input: Time = 0.11 Calls = 1 T/C = 0.1060 ! AutoSizing: Time = 0.00 Calls = 0 T/C = 0.0000 -! Simulation: Time = 3.72 Calls = 1 T/C = 3.7180 -! Reports: Time = 0.05 Calls = 1 T/C = 0.0510 -! Total: Time = 3.83 Calls = 1 T/C = 3.8250 +! Simulation: Time = 6.56 Calls = 1 T/C = 6.5570 +! Reports: Time = 0.03 Calls = 1 T/C = 0.0330 +! Total: Time = 6.70 Calls = 1 T/C = 6.6960 @@ -18456,5 +18456,5 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 1ZKiva 001 Tue 22-Jun-21 11:09:45 am Page 293 +! 1ZKiva 001 Wed 27-Oct-21 9:50:27 am Page 293 \ No newline at end of file diff --git a/test/ref/205TEST.REP b/test/ref/205TEST.REP index 069b6e549..ee19f6c65 100644 --- a/test/ref/205TEST.REP +++ b/test/ref/205TEST.REP @@ -3,12 +3,12 @@ Error Messages for Run 001: --------------- -Warning: Zone 'Conditioned-zn': Unmet heating loads during 16 hours of run. +Warning: Zone 'Conditioned-zn': Unmet heating loads during 153 hours of run. --------------- -Warning: Zone 'Conditioned-zn': Unmet cooling loads during 39 hours of run. +Warning: Zone 'Conditioned-zn': Unmet cooling loads during 70 hours of run. --------------- -Warning: Zone 'Attic-atc': Condensation occurred in 5764 subhours of run. - Total condensation heat = 34.7272 kBtu. +Warning: Zone 'Attic-atc': Condensation occurred in 5204 subhours of run. + Total condensation heat = 29.3269 kBtu. --------------- @@ -17,7 +17,7 @@ System Characteristics CapH Cap47 Cap17 HSPF COP47 COP17 AuxH Cap95 SEER EER95 SEERnfX EERnfX vfPerTon fanPwrC fanElecC ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------- ------ -------- ------- -------- - 0 20000 18000 8.70 3.72 2.40 25000 32370 14.00 12.20 17.24 14.93 350 0.580 1868.46 + 30050 0 0 0 0 0 0 30232 0 0 0 0 350 0.580 1745.07 @@ -25,20 +25,20 @@ Monthly Energy (kBtu + into the zone, except E = Energy Consumed) mo Tatt Tin Trad Slr IntGs IntGl Cond Surf VntHr sInfVnt Hload Cload FfanE ClgE HtgE -- ---- ---- ---- ---------- ---------- ---------- ---------- ---------- ----- ------- ---------- ---------- ------ ------ -------- - 1 53.3 67.3 66.9 858 1912 514 -2028 -3601 0 -1173 3994 0 278 0 0 - 2 56.9 67.4 67.0 1408 1623 433 -1710 -2938 0 -838 2433 0 158 0 0 - 3 64.1 68.3 68.0 1759 1665 440 -1484 -2754 13 -605 1404 0 95 0 0 - 4 68.5 68.9 68.6 1955 1487 389 -1477 -2216 57 -662 904 0 64 0 0 - 5 79.0 71.3 71.2 2006 1407 363 -900 -1572 289 -961 69 -70 25 25 0 - 6 85.9 74.8 74.8 2093 1306 335 -666 -875 420 -1527 0 -407 56 144 0 - 7 88.4 76.7 76.7 2127 1378 354 -571 -561 393 -1279 0 -1295 135 464 0 - 8 85.9 76.3 76.4 2092 1465 380 -699 -488 427 -1486 0 -1046 113 367 0 - 9 81.8 76.0 76.0 1993 1557 410 -798 -493 432 -1481 0 -875 96 300 0 - 10 69.5 70.5 70.5 1842 1739 462 -1135 -628 471 -1864 44 0 26 0 0 - 11 56.0 67.7 67.5 1193 1811 486 -1730 -2168 0 -908 1783 0 123 0 0 - 12 52.5 67.4 66.9 926 1941 523 -2082 -3364 0 -1234 3777 0 264 0 0 + 1 53.3 67.3 66.8 856 1912 514 -2007 -3566 0 -1159 3936 0 195 0 5778 + 2 56.9 67.4 66.9 1406 1623 433 -1697 -2915 0 -829 2394 0 119 0 3534 + 3 64.1 68.2 67.9 1757 1665 440 -1475 -2742 13 -599 1384 0 69 0 2016 + 4 68.5 68.8 68.6 1953 1487 389 -1471 -2206 57 -657 886 0 47 0 1303 + 5 79.0 71.3 71.2 2006 1407 363 -899 -1573 289 -959 67 -97 26 57 99 + 6 85.9 74.8 74.8 2093 1306 335 -667 -883 419 -1526 0 -534 62 333 0 + 7 88.3 76.7 76.8 2128 1378 354 -574 -574 390 -1278 0 -1627 150 1035 0 + 8 85.8 76.4 76.4 2093 1465 380 -701 -499 425 -1485 0 -1338 126 838 0 + 9 81.7 76.0 76.1 1993 1557 410 -800 -501 429 -1480 0 -1122 105 711 0 + 10 69.5 70.5 70.5 1842 1739 462 -1134 -626 471 -1865 43 0 25 0 65 + 11 56.0 67.7 67.4 1191 1811 486 -1721 -2146 0 -901 1752 0 88 0 2597 + 12 52.4 67.3 66.8 924 1941 523 -2062 -3332 0 -1221 3723 0 186 0 5508 - Yr 70.1 71.1 70.9 20252 19292 5090 -15280 -21658 2502 -14017 14409 -3693 1433 1301 0 + Yr 70.1 71.0 70.9 20242 19292 5090 -15208 -21562 2492 -13960 14184 -4717 1199 2975 20901 @@ -46,20 +46,20 @@ Monthly Energy Use, meter "MtrElec" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 3875.7 0 1120.6 996.52 0 0 0 0 277.80 32.376 0 0 0 360.24 760.81 33.833 193.92 43.463 0 56.157 0 0 0 0 0 -Feb 2865.3 0 631.57 812.08 0 0 0 0 158.24 29.243 0 0 0 303.51 640.99 30.559 175.16 36.618 0 47.313 0 0 0 0 0 -Mar 2131.4 0 370.55 360.78 0 0 0 0.574 94.346 32.332 0 0 0 308.63 651.41 33.833 193.66 37.214 0 48.082 0 0 0 0 0 -Apr 1761.8 0 244.73 278.50 0 0 0 3.048 60.545 31.331 0 0 0 272.45 575.41 32.742 187.67 32.871 0 42.472 0 0 0 0 0 -May 1211.9 24.742 17.665 22.949 0 0 0 20.312 4.444 32.376 0 0 0 254.29 537.05 33.833 193.92 30.680 0 39.640 0 0 0 0 0 -Jun 1245.7 144.09 0 0 0 0 0 55.752 0 31.331 0 0 0 234.37 494.97 32.742 187.67 28.277 0 36.535 0 0 0 0 0 -Jul 1701.1 464.40 0 0 0 0 0 135.40 0 32.376 0 0 0 248.23 524.26 33.833 193.92 29.950 0 38.697 0 0 0 0 0 -Aug 1643.0 367.36 0 0 0 0 0 112.82 0 32.376 0 0 0 266.40 562.62 33.833 193.92 32.141 0 41.528 0 0 0 0 0 -Sep 1620.8 300.07 0 0 0 0 0 96.123 0 31.331 0 0 0 287.10 606.34 32.742 187.67 34.639 0 44.755 0 0 0 0 0 -Oct 1411.3 0 13.207 13.928 0 0 0 23.179 3.272 32.376 0 0 0 323.91 684.09 33.833 193.92 39.081 0 50.494 0 0 0 0 0 -Nov 2524.3 0 493.08 503.78 0 0 0 0 122.82 31.375 0 0 0 340.00 718.52 32.742 187.93 41.047 0 53.036 0 0 0 0 0 -Dec 3944.0 0 1090.0 1088.4 0 0 0 0 264.29 32.376 0 0 0 366.30 773.60 33.833 193.92 44.194 0 57.101 0 0 0 0 0 +Jan 1777.7 0 0 0 0 0 0 0 195.37 32.376 0 101.55 0 360.24 760.81 33.833 193.92 43.463 0 56.157 0 0 0 0 0 +Feb 1474.6 0 0 0 0 0 0 0 119.49 29.243 0 91.718 0 303.51 640.99 30.559 175.16 36.618 0 47.313 0 0 0 0 0 +Mar 1475.3 0 0 0 0 0 0 0.569 68.152 32.332 0 101.41 0 308.63 651.41 33.833 193.66 37.214 0 48.082 0 0 0 0 0 +Apr 1320.3 0 0 0 0 0 0 3.038 44.059 31.331 0 98.270 0 272.45 575.41 32.742 187.67 32.871 0 42.472 0 0 0 0 0 +May 1306.3 57.419 0 0 0 0 0 22.209 3.341 32.376 0 101.55 0 254.29 537.05 33.833 193.92 30.680 0 39.640 0 0 0 0 0 +Jun 1540.0 333.39 0 0 0 0 0 62.401 0 31.331 0 98.270 0 234.37 494.97 32.742 187.67 28.277 0 36.535 0 0 0 0 0 +Jul 2387.3 1034.8 0 0 0 0 0 149.64 0 32.376 0 101.55 0 248.23 524.26 33.833 193.92 29.950 0 38.697 0 0 0 0 0 +Aug 2228.2 838.08 0 0 0 0 0 125.75 0 32.376 0 101.55 0 266.40 562.62 33.833 193.92 32.141 0 41.528 0 0 0 0 0 +Sep 2139.4 711.14 0 0 0 0 0 105.46 0 31.331 0 98.270 0 287.10 606.34 32.742 187.67 34.639 0 44.755 0 0 0 0 0 +Oct 1484.6 0 0 0 0 0 0 23.181 2.195 32.376 0 101.55 0 323.91 684.09 33.833 193.92 39.081 0 50.494 0 0 0 0 0 +Nov 1590.9 0 0 0 0 0 0 0 87.813 31.375 0 98.406 0 340.00 718.52 32.742 187.93 41.047 0 53.036 0 0 0 0 0 +Dec 1789.1 0 0 0 0 0 0 0 186.23 32.376 0 101.55 0 366.30 773.60 33.833 193.92 44.194 0 57.101 0 0 0 0 0 -Yr 25936 1300.7 3981.4 4077.0 0 0 0 447.21 985.75 381.20 0 0 0 3565.4 7530.1 398.36 2283.3 430.17 0 555.81 0 0 0 0 0 +Yr 20514 2974.8 0 0 0 0 0 492.24 706.65 381.20 0 1195.6 0 3565.4 7530.1 398.36 2283.3 430.17 0 555.81 0 0 0 0 0 @@ -67,20 +67,20 @@ Monthly Energy Use, meter "MtrNatGas" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 530.60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343.63 0 186.96 0 0 0 0 -Feb 447.03 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 289.51 0 157.52 0 0 0 0 -Mar 454.30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 294.22 0 160.08 0 0 0 0 -Apr 401.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 259.89 0 141.40 0 0 0 0 -May 374.54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242.56 0 131.97 0 0 0 0 +Jan 6309.0 0 5778.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343.63 0 186.96 0 0 0 0 +Feb 3981.3 0 3534.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 289.51 0 157.52 0 0 0 0 +Mar 2470.0 0 2015.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 294.22 0 160.08 0 0 0 0 +Apr 1704.4 0 1303.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 259.89 0 141.40 0 0 0 0 +May 473.34 0 98.802 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242.56 0 131.97 0 0 0 0 Jun 345.20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 223.56 0 121.63 0 0 0 0 Jul 365.62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 236.79 0 128.83 0 0 0 0 Aug 392.37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 254.12 0 138.26 0 0 0 0 Sep 422.87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 273.86 0 149.00 0 0 0 0 -Oct 477.09 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 308.98 0 168.11 0 0 0 0 -Nov 501.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 324.53 0 176.57 0 0 0 0 -Dec 539.51 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 349.41 0 190.10 0 0 0 0 +Oct 542.00 0 64.915 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 308.98 0 168.11 0 0 0 0 +Nov 3098.3 0 2597.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 324.53 0 176.57 0 0 0 0 +Dec 6047.6 0 5508.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 349.41 0 190.10 0 0 0 0 -Yr 5251.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3401.1 0 1850.4 0 0 0 0 +Yr 26152 0 20901 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3401.1 0 1850.4 0 0 0 0 @@ -88,32 +88,32 @@ Energy (kBtu + into the zone, except E = Energy Consumed) for Thu 03-Dec Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Htgs Htgl Htgt RunF FfanE HtgE -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ - 1 41.7 36.1 .0032 46.5 66.8 66.7 .0065 47 54.7 0 -3.64 3.52 2.15 0.60 0.18 -2.03 0.16 0 0 0 0 0 0 - 2 38.8 34.8 .0033 44.7 66.3 66.3 .0063 47 54.3 0 -3.72 3.79 2.04 0.59 0.17 -2.12 0.16 0 0 0 0 0 0 - 3 36.5 33.3 .0033 42.9 65.8 66.0 .0062 46 53.9 0 -3.96 4.32 1.97 0.58 0.16 -2.32 0.17 0 0 0 0 0 0 - 4 32.9 30.9 .0032 40.9 65.4 65.6 .0061 46 53.5 0 -4.24 4.85 1.99 0.58 0.19 -2.61 0.17 0 0 0 0 0 0 - 5 30.9 29.4 .0030 38.8 65.0 65.2 .0059 45 53.1 0 -4.54 3.27 1.98 0.57 0.27 -2.91 0.18 2.2 -0.04 2.2 0.30 0.2 0 - 6 30.0 28.8 .0030 37.0 65.0 64.9 .0059 45 53.1 0 -4.75 0.79 2.55 0.85 0.041 -3.12 0.19 4.5 -0.07 4.5 0.43 0.4 0 - 7 28.2 27.5 .0029 35.3 65.0 64.8 .0060 46 53.3 0 -4.94 -0.82 3.18 1.12 -0.17 -3.32 0.19 5.9 -0.08 5.8 0.55 0.6 0 - 8 28.4 27.7 .0029 36.5 66.8 65.5 .0059 41 54.2 1.75 -5.34 -28.4 2.86 0.86 0.20 -3.63 0.20 32.7 -0.1 32.6 1.00 1.2 0 - 9 30.2 29.2 .0031 37.8 68.0 66.6 .0056 39 53.8 5.46 -5.43 -20.6 2.17 0.52 0.40 -3.64 0.20 22.1 -0.09 22.0 1.00 1.2 0 - 10 38.3 35.6 .0038 40.8 68.0 67.0 .0054 37 53.5 7.06 -4.86 -14.8 1.78 0.35 0.27 -3.04 0.19 13.9 -0.05 13.8 0.81 1.2 0 - 11 41.5 37.4 .0038 45.6 68.0 67.2 .0054 37 53.4 6.77 -4.15 -10.8 1.79 0.36 0.070 -2.41 0.18 8.8 -0.02 8.7 0.51 0.8 0 - 12 46.2 40.0 .0038 50.5 68.0 67.4 .0054 37 53.4 6.47 -3.61 -8.59 1.76 0.36 0.036 -1.94 0.17 5.9 -0.02 5.9 0.32 0.5 0 - 13 48.4 40.8 .0037 55.3 68.0 67.5 .0053 37 53.3 6.63 -3.22 -7.27 1.68 0.35 0.029 -1.52 0.17 3.7 -0.02 3.7 0.19 0.3 0 - 14 51.3 42.5 .0038 59.6 68.0 67.6 .0053 37 53.3 6.93 -2.94 -6.28 1.71 0.36 -.001 -1.17 0.17 1.8 -.008 1.7 .075 0.1 0 - 15 53.2 43.1 .0036 61.8 68.0 67.7 .0054 37 53.4 6.76 -2.66 -5.48 1.85 0.42 -.061 -0.94 0.16 0.5 -.003 0.5 .031 0.04 0 - 16 54.9 43.8 .0035 62.4 68.0 67.7 .0055 38 53.5 4.60 -2.47 -4.12 2.08 0.52 -0.11 -0.82 0.16 0.7 -.005 0.7 .088 0.05 0 - 17 54.1 43.5 .0036 61.2 68.0 67.6 .0056 39 53.8 0.92 -2.48 -2.67 2.55 0.71 -0.25 -0.86 0.16 2.6 -0.02 2.5 0.21 0.2 0 - 18 51.4 42.3 .0036 58.8 68.0 67.5 .0059 40 54.3 0 -2.64 -3.31 3.17 0.91 -0.38 -1.07 0.17 3.8 -0.04 3.8 0.28 0.3 0 - 19 49.1 41.2 .0037 56.4 68.0 67.5 .0062 43 54.9 0 -2.94 -3.93 3.98 1.08 -0.47 -1.30 0.17 4.2 -0.05 4.2 0.30 0.3 0 - 20 42.8 38.2 .0038 53.8 68.0 67.5 .0066 45 55.5 0 -3.43 -4.43 4.63 1.24 -0.53 -1.66 0.17 4.9 -0.06 4.8 0.39 0.4 0 - 21 41.9 38.0 .0040 51.2 68.0 67.4 .0069 47 56.1 0 -3.79 -4.89 4.64 1.25 -0.46 -1.98 0.17 6.0 -0.09 5.9 0.44 0.5 0 - 22 40.1 37.1 .0040 49.1 68.0 67.4 .0070 48 56.3 0 -3.94 -5.19 4.21 1.12 -0.26 -2.16 0.17 7.1 -0.1 7.0 0.53 0.6 0 - 23 42.1 38.5 .0041 47.6 68.0 67.4 .0070 48 56.3 0 -3.92 -5.40 3.34 0.89 .0034 -2.23 0.18 8.2 -0.1 8.1 0.59 0.7 0 - 24 41.9 38.3 .0041 45.6 67.4 67.1 .0070 50 55.9 0 -3.61 3.12 2.58 0.66 0.045 -2.09 0.16 0 0 0 0 0 0 + 1 41.7 36.1 .0032 46.5 66.7 66.7 .0065 47 54.8 0 -3.64 3.51 2.15 0.60 0.20 -2.02 0.16 0 0 0 0 0 0 + 2 38.8 34.8 .0033 44.6 66.2 66.3 .0064 47 54.4 0 -3.71 3.78 2.04 0.59 0.18 -2.11 0.16 0 0 0 0 0 0 + 3 36.5 33.3 .0033 42.8 65.7 65.9 .0063 47 54.0 0 -3.95 4.30 1.97 0.58 0.17 -2.32 0.17 0 0 0 0 0 0 + 4 32.9 30.9 .0032 40.8 65.3 65.5 .0062 47 53.6 0 -4.23 4.84 1.99 0.58 0.20 -2.60 0.17 0 0 0 0 0 0 + 5 30.9 29.4 .0030 38.8 65.0 65.1 .0060 45 53.2 0 -4.52 2.72 1.98 0.57 0.27 -2.90 0.18 2.7 -0.03 2.7 0.20 0.1 4.2 + 6 30.0 28.8 .0030 36.9 65.0 64.9 .0060 45 53.2 0 -4.71 0.60 2.55 0.85 0.026 -3.11 0.19 4.7 -0.04 4.6 0.26 0.2 7.2 + 7 28.2 27.5 .0029 35.0 65.0 64.8 .0061 46 53.4 0 -4.88 -0.83 3.18 1.12 -0.19 -3.32 0.19 5.8 -0.04 5.8 0.32 0.3 9.1 + 8 28.4 27.7 .0029 35.7 66.0 65.1 .0059 43 53.8 1.74 -5.24 -16.5 2.86 0.86 0.21 -3.54 0.20 20.7 -0.1 20.5 1.00 1.1 32.2 + 9 30.2 29.2 .0031 37.2 67.0 65.9 .0057 40 53.7 5.45 -5.30 -19.5 2.17 0.52 0.41 -3.52 0.20 20.7 -0.1 20.6 1.00 1.1 32.2 + 10 38.3 35.6 .0038 40.8 67.8 66.6 .0055 38 53.6 7.04 -4.80 -19.5 1.78 0.35 0.28 -2.98 0.19 18.4 -0.05 18.4 0.60 1.0 28.4 + 11 41.5 37.4 .0038 45.5 68.0 67.0 .0054 37 53.5 6.74 -4.09 -12.4 1.79 0.36 0.077 -2.37 0.17 10.4 -0.02 10.3 0.39 0.5 15.7 + 12 46.2 40.0 .0038 50.5 68.0 67.2 .0054 37 53.4 6.45 -3.57 -9.80 1.76 0.36 0.043 -1.92 0.17 7.1 -0.02 7.1 0.26 0.4 10.5 + 13 48.4 40.8 .0037 55.2 68.0 67.3 .0054 37 53.4 6.61 -3.19 -8.22 1.68 0.35 0.036 -1.51 0.17 4.6 -0.01 4.6 0.16 0.2 6.7 + 14 51.3 42.5 .0038 59.7 68.0 67.5 .0054 37 53.4 6.93 -2.93 -7.04 1.71 0.36 .0090 -1.17 0.17 2.5 -.008 2.5 .081 0.1 3.5 + 15 53.2 43.1 .0036 61.9 68.0 67.6 .0054 37 53.4 6.76 -2.65 -6.09 1.85 0.42 -.050 -0.94 0.16 1.1 -.004 1.1 .044 0.05 1.5 + 16 54.9 43.8 .0035 62.5 68.0 67.6 .0055 38 53.6 4.60 -2.46 -4.59 2.08 0.52 -0.11 -0.82 0.16 1.2 -.005 1.2 .078 0.06 1.6 + 17 54.1 43.5 .0036 61.3 68.0 67.5 .0056 39 53.9 0.91 -2.47 -2.96 2.55 0.71 -0.25 -0.85 0.16 2.8 -0.01 2.8 0.15 0.1 3.9 + 18 51.4 42.3 .0036 58.9 68.0 67.4 .0059 41 54.3 0 -2.62 -3.46 3.17 0.91 -0.39 -1.05 0.16 4.0 -0.02 3.9 0.20 0.2 5.6 + 19 49.1 41.2 .0037 56.4 68.0 67.4 .0062 43 54.9 0 -2.92 -4.01 3.98 1.08 -0.48 -1.29 0.17 4.2 -0.03 4.2 0.20 0.2 6.0 + 20 42.8 38.2 .0038 53.8 68.0 67.4 .0066 45 55.6 0 -3.39 -4.42 4.63 1.24 -0.55 -1.64 0.17 4.8 -0.04 4.8 0.25 0.2 6.9 + 21 41.9 38.0 .0040 51.2 68.0 67.4 .0069 48 56.2 0 -3.75 -4.79 4.64 1.25 -0.49 -1.96 0.17 5.9 -0.05 5.8 0.28 0.3 8.5 + 22 40.1 37.1 .0040 49.0 68.0 67.3 .0071 49 56.5 0 -3.88 -5.03 4.21 1.12 -0.29 -2.13 0.17 6.8 -0.07 6.8 0.33 0.3 10.1 + 23 42.1 38.5 .0041 47.4 68.0 67.3 .0071 49 56.5 0 -3.86 -5.20 3.34 0.89 -.036 -2.18 0.17 7.9 -0.08 7.8 0.37 0.4 11.7 + 24 41.9 38.3 .0041 45.5 67.4 67.0 .0071 50 56.1 0 -3.60 3.11 2.58 0.66 0.072 -2.09 0.16 0 0 0 0 0 0 - Dy 48.3 67.2 66.8 53.35 -91.2 -113 62.62 16.87 -0.63 -50.9 0.17 139.4 -1.0 138.4 0 9.6 0 + Dy 48.2 67.1 66.7 53.24 -90.4 -111 62.62 16.87 -0.64 -50.3 0.17 136.2 -0.8 135.5 0 6.9 205.5 @@ -121,32 +121,32 @@ Energy Balance (F, kBtu, + into the zone) for Tue 30-Jun Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Clgs Clgl Clgt RunF FfanE ClgkE -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ - 1 70.9 63.9 .0111 84.5 77.8 77.6 .0116 57 66.7 0 -1.21 -0.28 1.51 0.40 -0.32 -.020 0.16 0 0 0 0 0.000 0 - 2 68.9 63.1 .0110 81.2 77.6 77.4 .0118 58 66.9 0 -1.44 0.17 1.44 0.39 -0.26 -0.17 0.16 0 0 0 0 0.000 0 - 3 66.7 61.8 .0107 78.1 77.4 77.2 .0119 59 67.0 0 -1.66 0.58 1.39 0.39 -0.18 -0.31 0.16 0 0 0 0 0.000 0 - 4 64.9 61.2 .0107 75.2 77.1 77.0 .0120 60 67.0 0 -1.88 0.91 1.40 0.39 -0.12 -0.44 0.16 0 0 0 0 0.000 0 - 5 64.8 61.1 .0107 72.6 76.9 76.8 .0120 61 67.0 0 -1.98 1.23 1.39 0.38 -.091 -0.64 0.16 0 0 0 0 0.000 0 - 6 63.0 60.5 .0107 70.2 76.6 76.5 .0122 62 67.2 0 -2.07 1.08 1.77 0.56 -0.24 -0.78 0.16 0 0 0 0 0.000 0 - 7 63.1 60.5 .0107 68.9 75.9 76.2 .0111 58 65.3 2.96 -2.10 6.80 2.19 0.74 1.63 -9.85 2.31 0 0 0 0 0.09 0 - 8 65.3 61.3 .0107 69.8 75.4 75.9 .0109 58 65.1 5.18 -1.89 2.84 1.98 0.57 0.22 -8.11 2.18 0 0 0 0 0.09 0 - 9 68.5 62.5 .0108 73.9 75.5 75.8 .0109 57 65.1 5.93 -1.62 -0.44 1.52 0.34 0.050 -5.40 1.98 0 0 0 0 0.09 0 - 10 73.9 65.4 .0115 81.0 75.8 75.9 .0112 58 65.7 5.91 -1.14 -4.23 1.26 0.23 -0.47 -1.81 1.62 0 0 0 0 0.09 0 + 1 70.9 63.9 .0111 84.2 77.8 77.6 .0099 49 64.4 0 -1.21 -0.28 1.51 0.40 -0.64 -.020 0.16 0 0 0 0 0.000 0 + 2 68.9 63.1 .0110 81.0 77.6 77.4 .0103 51 64.9 0 -1.44 0.17 1.44 0.39 -0.56 -0.17 0.16 0 0 0 0 0.000 0 + 3 66.7 61.8 .0107 77.9 77.4 77.2 .0106 53 65.2 0 -1.66 0.58 1.39 0.39 -0.46 -0.31 0.16 0 0 0 0 0.000 0 + 4 64.9 61.2 .0107 75.1 77.1 77.0 .0109 55 65.5 0 -1.88 0.91 1.40 0.39 -0.37 -0.44 0.16 0 0 0 0 0.000 0 + 5 64.8 61.1 .0107 72.5 76.9 76.8 .0111 56 65.7 0 -1.98 1.23 1.39 0.38 -0.31 -0.64 0.16 0 0 0 0 0.000 0 + 6 63.0 60.5 .0107 70.1 76.6 76.5 .0114 58 66.1 0 -2.07 1.08 1.77 0.56 -0.43 -0.79 0.16 0 0 0 0 0.000 0 + 7 63.1 60.5 .0107 68.9 75.8 76.2 .0110 58 65.2 2.96 -2.10 6.78 2.19 0.74 0.59 -9.84 2.30 0 0 0 0 0.09 0 + 8 65.3 61.3 .0107 69.8 75.4 75.9 .0109 58 65.1 5.18 -1.89 2.84 1.98 0.57 0.11 -8.11 2.18 0 0 0 0 0.09 0 + 9 68.5 62.5 .0108 73.8 75.5 75.8 .0109 57 65.1 5.93 -1.62 -0.44 1.52 0.34 0.035 -5.40 1.98 0 0 0 0 0.09 0 + 10 73.9 65.4 .0115 81.0 75.8 75.9 .0112 58 65.7 5.91 -1.14 -4.23 1.26 0.23 -0.48 -1.81 1.62 0 0 0 0 0.09 0 11 80.6 67.7 .0116 89.3 76.3 76.2 .0115 58 66.2 5.56 -0.38 -6.84 1.27 0.24 -0.36 0.40 0.59 0 0 0 0 0.03 0 12 85.6 69.6 .0119 97.6 76.8 76.5 .0116 58 66.5 4.65 0.31 -7.09 1.25 0.24 -0.23 0.89 0.17 0 0 0 0 0 0 - 13 91.2 70.7 .0115 105 77.2 76.9 .0118 58 66.9 4.07 0.94 -7.60 1.20 0.23 -0.21 1.40 0.18 0 0 0 0 0 0 + 13 91.2 70.7 .0115 105 77.2 76.9 .0118 58 66.9 4.07 0.94 -7.60 1.20 0.23 -0.21 1.39 0.18 0 0 0 0 0 0 14 92.1 71.0 .0115 112 77.6 77.3 .0119 58 67.2 4.26 1.30 -8.56 1.22 0.24 -0.16 1.78 0.19 0 0 0 0 0 0 15 93.4 71.3 .0114 117 78.1 77.8 .0120 57 67.5 4.89 1.37 -9.57 1.31 0.28 -0.16 2.01 0.19 0 0 0 0 0 0 16 96.3 71.4 .0108 120 78.7 78.3 .0121 57 67.8 5.64 1.59 -10.9 1.46 0.34 -0.14 2.19 0.19 0 0 0 0 0 0 - 17 97.2 69.2 .0090 120 79.0 78.8 .0106 50 65.8 6.08 1.74 -8.36 1.77 0.47 2.17 2.35 0.20 -3.6 -2.4 -6.0 0.36 0.5 2.1 - 18 97.9 69.5 .0090 118 78.5 78.8 .0079 38 61.5 6.50 1.95 1.79 2.18 0.60 3.88 2.60 0.23 -15.0 -4.6 -19.7 1.00 1.9 7.6 - 19 98.1 69.8 .0092 114 78.0 78.6 .0073 36 60.6 6.10 2.14 2.26 2.72 0.72 0.88 2.48 0.23 -15.7 -2.0 -17.7 0.83 1.8 7.2 - 20 97.9 69.3 .0088 111 78.0 78.6 .0073 36 60.5 4.28 2.06 1.43 3.15 0.82 0.071 2.22 0.22 -13.2 -1.3 -14.5 0.65 1.4 5.7 - 21 96.1 68.8 .0089 107 78.0 78.4 .0074 36 60.7 0.39 1.58 1.87 3.15 0.83 -0.20 1.91 0.21 -8.9 -0.9 -9.9 0.42 0.9 3.7 - 22 89.1 70.0 .0114 103 78.0 78.3 .0076 37 61.0 0 1.05 0.93 2.87 0.74 -0.30 1.47 0.20 -6.3 -0.8 -7.2 0.28 0.6 2.4 - 23 82.4 66.9 .0106 98.2 78.0 78.2 .0079 39 61.5 0 0.35 0.47 2.29 0.59 -0.45 0.99 0.18 -4.1 -0.7 -4.8 0.16 0.4 1.4 - 24 77.5 64.9 .0103 93.8 78.0 78.1 .0082 40 62.0 0 -0.33 0.18 1.79 0.43 -0.46 0.58 0.17 -2.2 -0.5 -2.7 .075 0.2 0.7 + 17 97.2 69.2 .0090 120 79.0 78.8 .0090 43 63.5 6.10 1.75 -8.52 1.77 0.47 4.44 2.38 0.21 -3.5 -4.8 -8.3 0.57 0.7 4.7 + 18 97.9 69.5 .0090 118 78.9 79.0 .0024 11 52.4 6.49 1.90 -4.54 2.18 0.60 9.73 2.57 0.23 -8.6 -11.4 -20.0 1.00 1.7 10.0 + 19 98.1 69.8 .0092 114 78.6 79.0 .0008 4 49.0 6.10 2.07 1.26 2.72 0.72 2.35 2.48 0.23 -14.6 -5.0 -19.7 1.00 1.7 13.4 + 20 97.9 69.3 .0088 110 78.1 78.8 .0008 4 48.9 4.29 2.05 3.91 3.15 0.82 -.012 2.28 0.23 -15.7 -2.7 -18.4 0.72 1.6 13.6 + 21 96.1 68.8 .0089 107 78.0 78.6 .0011 5 49.5 0.39 1.57 2.69 3.15 0.83 -0.43 1.96 0.22 -9.8 -2.1 -11.9 0.49 1.0 9.1 + 22 89.1 70.0 .0114 102 78.0 78.4 .0014 7 50.1 0 1.05 1.46 2.87 0.74 -0.52 1.51 0.20 -6.9 -1.9 -8.8 0.34 0.7 6.5 + 23 82.4 66.9 .0106 97.8 78.0 78.3 .0019 10 51.2 0 0.35 0.86 2.29 0.59 -0.76 1.02 0.19 -4.5 -1.7 -6.2 0.21 0.5 4.4 + 24 77.5 64.9 .0103 93.5 78.0 78.1 .0025 13 52.3 0 -0.34 0.49 1.79 0.43 -0.88 0.61 0.17 -2.6 -1.3 -3.9 0.11 0.3 2.5 - Dy 94.2 77.3 77.4 72.40 -1.3 -41.3 43.52 11.15 4.54 -4.3 0.51 -69.0 -13.3 -82.3 .075 8.1 31.0 + Dy 94.1 77.4 77.4 72.41 -1.5 -44.3 43.52 11.15 10.13 -4.1 0.51 -66.1 -31.0 -97.1 0.11 8.6 64.2 @@ -154,38 +154,38 @@ Energy Balance (F, kBtu, + into the zone) for Fri 10-Jul Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Clgs Clgl Clgt RunF FfanE ClgkE -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ - 1 74.5 62.4 .0093 92.6 78.0 78.1 .0080 39 61.7 0 -0.72 0.97 1.54 0.41 -0.35 0.46 0.17 -2.2 -0.5 -2.7 .066 0.2 0.7 - 2 70.9 61.4 .0095 88.3 78.0 78.0 .0084 41 62.2 0 -1.32 0.49 1.47 0.40 -0.51 0.11 0.16 -0.7 -0.2 -0.9 .009 0.06 0.2 - 3 68.7 60.4 .0093 84.2 78.0 77.9 .0088 43 62.8 0 -1.60 0.32 1.42 0.40 -0.58 -0.12 0.16 -0.01 -.003 -0.02 0 0.001 0.003 - 4 65.8 59.6 .0095 80.4 77.9 77.7 .0091 45 63.3 0 -1.87 0.75 1.43 0.40 -0.50 -0.31 0.16 0 0 0 0 0.000 0 - 5 64.8 58.8 .0093 76.8 77.7 77.6 .0094 47 63.6 0 -2.10 1.14 1.42 0.39 -0.41 -0.46 0.16 0 0 0 0 0.000 0 - 6 63.9 58.6 .0093 73.5 77.5 77.4 .0098 49 64.1 0 -2.20 1.06 1.81 0.57 -0.51 -0.68 0.16 0 0 0 0 0.000 0 - 7 62.6 58.6 .0096 71.0 76.6 77.0 .0098 50 63.7 2.50 -2.27 8.11 2.24 0.76 0.012 -10.6 2.39 0 0 0 0 0.09 0 - 8 67.8 61.4 .0102 70.8 76.2 76.7 .0101 52 64.3 5.11 -1.91 2.75 2.02 0.58 -0.57 -7.97 2.19 0 0 0 0 0.09 0 - 9 75.7 63.3 .0096 74.8 76.6 76.8 .0101 51 64.4 5.98 -1.22 -3.79 1.56 0.35 0.089 -2.52 1.55 0 0 0 0 0.09 0 - 10 81.7 65.6 .0099 82.2 77.2 77.1 .0102 50 64.7 6.01 -0.47 -7.16 1.29 0.24 -0.11 0.32 0.33 0 0 0 0 0.02 0 - 11 87.6 67.4 .0098 90.9 77.7 77.5 .0103 50 65.0 5.66 0.25 -7.82 1.29 0.24 -0.18 0.61 0.16 0 0 0 0 0 0 - 12 92.8 71.3 .0116 100 78.2 77.9 .0104 50 65.3 4.86 0.95 -8.25 1.28 0.24 -0.21 1.15 0.18 0 0 0 0 0 0 - 13 99.3 73.2 .0117 109 78.6 78.3 .0106 50 65.8 4.04 1.68 -8.70 1.23 0.24 -0.32 1.75 0.19 0 0 0 0 0 0 - 14 103 71.8 .0098 117 79.2 78.8 .0108 50 66.3 4.11 2.26 -9.93 1.25 0.24 -0.27 2.32 0.20 0 0 0 0 0 0 - 15 106 74.5 .0112 125 79.8 79.4 .0110 50 66.7 4.93 2.62 -11.7 1.33 0.29 -0.20 2.81 0.21 0 0 0 0 0 0 - 16 107 72.6 .0093 129 80.0 79.9 .0094 43 64.4 5.86 2.89 -6.84 1.49 0.35 2.28 3.35 0.23 -6.7 -2.7 -9.5 0.58 1.0 4.3 - 17 109 73.8 .0099 129 79.8 80.1 .0081 37 62.3 6.31 3.14 -1.56 1.81 0.48 1.91 3.71 0.25 -13.4 -2.8 -16.2 1.00 1.9 8.4 - 18 109 73.8 .0100 128 79.8 80.2 .0078 36 61.9 6.44 3.33 -1.65 2.23 0.62 0.45 3.67 0.25 -14.0 -1.6 -15.6 1.00 1.9 8.4 - 19 108 74.1 .0104 124 79.8 80.3 .0077 36 61.8 5.84 3.37 -0.70 2.78 0.73 0.073 3.36 0.25 -14.7 -1.3 -16.0 1.00 1.9 8.3 - 20 107 74.5 .0110 119 79.8 80.3 .0078 36 61.8 3.74 3.25 2.13 3.22 0.84 -.056 3.01 0.25 -15.4 -1.4 -16.8 1.00 1.9 8.2 - 21 102 72.4 .0104 113 79.4 80.0 .0077 36 61.5 0.19 2.68 7.61 3.23 0.85 0.15 2.58 0.24 -16.3 -1.7 -18.0 1.00 1.9 8.0 - 22 94.1 70.4 .0106 107 78.8 79.5 .0073 35 60.8 0 1.83 10.97 2.94 0.76 0.46 2.02 0.23 -17.8 -1.9 -19.7 1.00 1.9 7.5 - 23 87.4 66.9 .0095 102 78.1 78.9 .0071 35 60.2 0 0.92 11.36 2.34 0.60 0.35 1.46 0.21 -16.1 -1.6 -17.7 0.55 1.6 5.9 - 24 83.5 65.3 .0093 97.1 78.0 78.6 .0071 35 60.3 0 0.25 5.44 1.83 0.44 -.064 0.97 0.19 -8.5 -0.9 -9.4 0.33 0.8 2.8 + 1 74.5 62.4 .0093 92.3 78.0 78.2 .0024 12 52.1 0 -0.72 1.18 1.54 0.41 -0.84 0.48 0.17 -2.5 -1.1 -3.6 .093 0.2 2.4 + 2 70.9 61.4 .0095 88.0 78.0 78.1 .0032 16 53.5 0 -1.33 0.70 1.47 0.40 -1.19 0.14 0.16 -1.0 -0.6 -1.6 .027 0.10 1.0 + 3 68.7 60.4 .0093 83.9 78.0 77.9 .0043 21 55.4 0 -1.61 0.37 1.42 0.40 -1.54 -0.10 0.16 -0.08 -0.07 -0.1 0 0.009 0.08 + 4 65.8 59.6 .0095 80.2 77.9 77.8 .0052 26 57.0 0 -1.87 0.74 1.43 0.40 -1.41 -0.30 0.16 0 0 0 0 0.000 0 + 5 64.8 58.8 .0093 76.6 77.7 77.6 .0060 30 58.3 0 -2.10 1.13 1.42 0.39 -1.21 -0.45 0.16 0 0 0 0 0.000 0 + 6 63.9 58.6 .0093 73.3 77.5 77.4 .0069 34 59.6 0 -2.20 1.07 1.81 0.57 -1.20 -0.68 0.16 0 0 0 0 0.000 0 + 7 62.6 58.6 .0096 70.9 76.7 77.1 .0095 49 63.2 2.50 -2.27 8.06 2.24 0.76 -3.80 -10.5 2.36 0 0 0 0 0.09 0 + 8 67.8 61.4 .0102 70.7 76.2 76.7 .0101 52 64.2 5.11 -1.91 2.78 2.02 0.58 -0.94 -8.00 2.18 0 0 0 0 0.09 0 + 9 75.7 63.3 .0096 74.7 76.6 76.8 .0101 51 64.4 5.98 -1.23 -3.76 1.56 0.35 0.045 -2.55 1.55 0 0 0 0 0.09 0 + 10 81.7 65.6 .0099 82.1 77.2 77.2 .0101 50 64.7 6.01 -0.47 -7.14 1.29 0.24 -0.11 0.31 0.33 0 0 0 0 0.02 0 + 11 87.6 67.4 .0098 90.9 77.7 77.5 .0103 50 65.0 5.66 0.25 -7.81 1.29 0.24 -0.18 0.61 0.16 0 0 0 0 0 0 + 12 92.8 71.3 .0116 100 78.2 77.9 .0104 50 65.3 4.86 0.95 -8.24 1.28 0.24 -0.21 1.15 0.18 0 0 0 0 0 0 + 13 99.3 73.2 .0117 109 78.7 78.3 .0106 50 65.8 4.04 1.68 -8.69 1.23 0.24 -0.32 1.74 0.19 0 0 0 0 0 0 + 14 103 71.8 .0098 117 79.2 78.8 .0108 50 66.3 4.11 2.25 -9.93 1.25 0.24 -0.27 2.32 0.20 0 0 0 0 0 0 + 15 106 74.5 .0112 125 79.9 79.4 .0110 50 66.7 4.93 2.62 -11.7 1.33 0.29 -0.20 2.81 0.21 0 0 0 0 0 0 + 16 107 72.6 .0093 128 80.0 79.9 .0046 21 56.8 5.91 2.94 -7.13 1.49 0.35 9.32 3.49 0.24 -6.7 -10.4 -17.1 1.00 1.7 9.1 + 17 109 73.8 .0099 129 80.2 80.3 .0010 4 50.2 6.32 3.09 -6.28 1.81 0.48 5.25 3.71 0.25 -8.6 -7.8 -16.4 1.00 1.7 10.8 + 18 109 73.8 .0100 128 80.1 80.5 .0007 3 49.7 6.43 3.27 -2.75 2.23 0.62 0.37 3.68 0.25 -12.9 -3.2 -16.1 1.00 1.7 13.2 + 19 108 74.1 .0104 124 80.1 80.6 .0007 3 49.7 5.84 3.31 -1.59 2.78 0.73 -.021 3.38 0.25 -13.7 -2.9 -16.6 1.00 1.7 13.5 + 20 107 74.5 .0110 119 80.1 80.7 .0008 4 49.8 3.74 3.19 1.14 3.22 0.84 -0.13 3.01 0.24 -14.3 -3.1 -17.4 1.00 1.7 13.4 + 21 102 72.4 .0104 113 79.7 80.3 .0008 4 49.6 0.19 2.62 6.70 3.23 0.85 -.006 2.57 0.24 -15.3 -3.3 -18.6 1.00 1.7 13.6 + 22 94.1 70.4 .0106 107 79.1 79.9 .0007 4 49.1 0 1.78 10.67 2.94 0.76 0.11 2.02 0.23 -17.4 -3.1 -20.5 1.00 1.7 14.4 + 23 87.4 66.9 .0095 102 78.3 79.2 .0008 4 48.8 0 0.89 13.39 2.34 0.60 -.025 1.49 0.21 -18.1 -2.6 -20.7 0.62 1.6 14.4 + 24 83.5 65.3 .0093 96.8 78.0 78.8 .0011 5 49.5 0 0.24 6.52 1.83 0.44 -0.51 0.99 0.19 -9.6 -1.7 -11.3 0.38 0.8 8.3 - Dy 99.4 78.4 78.5 71.59 13.8 -15.0 44.45 11.43 0.94 11.0 0.44 -126 -16.6 -142 0.33 15.1 62.9 + Dy 99.2 78.5 78.6 71.62 13.4 -20.5 44.45 11.43 0.98 11.3 0.44 -120 -40.0 -160 0.38 15.2 114.2 ! Log for Run 001: -! CSE 0.899.0+ashrae205.de45bb9.23 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -1439,25 +1439,20 @@ Input for Run 001: sfExCnd = "Adiabatic" EQUIPDATA "Constant-Eff-AC" - edFilePath = "DX-Constant-Efficiency.RS0004.a205.cbor" - edExpectedRS = "RS0004" + edFilePath = "Unitary-Constant-Efficiency.RS0002.a205.cbor" + edExpectedRS = RS0002 edDoValidation = YES RSYS "rsys-Central HVAC" - rsType = ASHP + rsType = ACFURNACE rsRep205 = "Constant-Eff-AC" AUTOSIZE rsCapC + AUTOSIZE rsCapH rsFxCapC = 1.1 - rsSEER = 14 - rsEER = 12.2 rsVfPerTon = 350 rsFanPwrH = 0.58 rsFanPwrC = 0.58 - rsCap47 = 20000 rsCap17 = 18000 rsHSPF = 8.7 - rsCapAuxH = 25000 - - rsFxCapH = 1.5 rsElecMtr = "MtrElec" rsFuelMtr = "MtrNatGas" @@ -1739,18 +1734,18 @@ Input for Run 001: -! CSE 0.899.0+ashrae205.de45bb9.23 for Win32 console run(s) done: Mon 18-Oct-21 11:03:42 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 10:18:47 am ! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe -! 18-Oct-21 10:59 am (VS 14.29 3364864 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! 27-Oct-21 10:17 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) ! Command line: -x! -b -t1 205test ! Input file: C:\Users\nkruis\projects\cse\test\205test.cse ! Report file: C:\Users\nkruis\projects\cse\test\205test.rep ! Timing info -- -! Input: Time = 0.20 Calls = 2 T/C = 0.0990 -! AutoSizing: Time = 2.99 Calls = 1 T/C = 2.9890 -! Simulation: Time = 19.13 Calls = 1 T/C = 19.1250 -! Reports: Time = 0.09 Calls = 1 T/C = 0.0850 -! Total: Time = 22.40 Calls = 1 T/C = 22.3990 +! Input: Time = 0.33 Calls = 2 T/C = 0.1645 +! AutoSizing: Time = 5.51 Calls = 1 T/C = 5.5150 +! Simulation: Time = 16.90 Calls = 1 T/C = 16.8980 +! Reports: Time = 0.13 Calls = 1 T/C = 0.1300 +! Total: Time = 22.88 Calls = 1 T/C = 22.8750 diff --git a/test/ref/2ZATTIC.REP b/test/ref/2ZATTIC.REP index 0ef82d28f..34b26cdd0 100644 --- a/test/ref/2ZATTIC.REP +++ b/test/ref/2ZATTIC.REP @@ -60,7 +60,7 @@ Monthly Energy Balance, zone "Z1" ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 1 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 1 @@ -123,7 +123,7 @@ Hourly Energy Balance, zone "Z1", Fri 04-Jan ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 2 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 2 @@ -186,7 +186,7 @@ Hourly Energy Balance, zone "Z1", Fri 26-Jul ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 3 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 3 @@ -249,7 +249,7 @@ Yr 7.008 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 4 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 4 @@ -312,7 +312,7 @@ Subhourly User-defined Report, Thu 10-Jan 1 51.332 2.191 49.89 49.541 64.917 64.07 0 2460.58 63 62.376 0 2545.03 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 5 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 5 @@ -375,7 +375,7 @@ Subhourly User-defined Report, Thu 10-Jan 3 50.468 2.249 50.631 50.238 64.833 64.045 0 2565.1 63 62.363 0 2796.04 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 6 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 6 @@ -403,7 +403,7 @@ Subhourly User-defined Report, Thu 10-Jan 4 50.87 2.495 51.037 50.585 64.792 64.05 0 1340.24 63 62.366 0 2656.15 4 50.84 2.473 51.033 50.593 64.792 64.049 0 2585.02 63 62.366 0 2664.62 4 50.81 2.45 51.034 50.603 64.792 64.048 0 2577.93 63 62.366 0 2673.51 - 4 50.78 2.428 51.035 50.613 64.792 64.047 0 2570.34 63 62.366 0 2682.8 + 4 50.78 2.428 51.035 50.613 64.792 64.047 0 2570.35 63 62.366 0 2682.8 4 50.75 2.405 51.038 50.623 64.792 64.046 0 2561.82 63 62.367 0 2692.5 4 50.72 2.383 51.041 50.633 64.792 64.045 0 2553.87 63 62.367 0 2702.13 4 50.69 2.361 51.042 50.642 64.792 64.043 0 2545.76 63 62.367 0 2711.74 @@ -438,7 +438,7 @@ Subhourly User-defined Report, Thu 10-Jan 5 50 2.024 50.981 50.762 64.75 63.977 0 2459.9 63 62.362 0 2943.26 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 7 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 7 @@ -501,7 +501,7 @@ Subhourly User-defined Report, Thu 10-Jan 6 50 2.405 51.552 51.326 64.708 63.944 0 2737.77 63 62.352 0 2935.21 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 8 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 8 @@ -564,7 +564,7 @@ Subhourly User-defined Report, Thu 10-Jan 8 50 1.701 53.535 52.509 64.625 64.892 0 474.356 63 63.339 0 930.59 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 9 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 9 @@ -576,7 +576,7 @@ Subhourly User-defined Report, Thu 10-Jan 8 50 1.661 53.951 52.782 64.625 64.991 0 279.404 63 63.429 0 729.306 8 50 1.648 54.092 52.877 64.625 65.024 0 214.994 63 63.459 0 663.178 8 50 1.635 54.232 52.973 64.625 65.056 0 150.971 63 63.489 0 597.539 - 8 50 1.622 54.374 53.071 64.625 65.088 0 87.35 63 63.518 0 532.363 + 8 50 1.622 54.374 53.071 64.625 65.088 0 87.351 63 63.518 0 532.363 9 50.042 1.621 54.519 53.17 64.624 65.131 0 0 63 63.557 0 436.483 9 50.084 1.619 54.689 53.282 64.624 65.176 0 0 63 63.588 0 357.795 9 50.126 1.617 54.874 53.403 64.623 65.225 0 0 63 63.618 0 280.105 @@ -627,7 +627,7 @@ Subhourly User-defined Report, Thu 10-Jan 10 51.692 1.666 64.694 61.115 65.689 67.494 0 0 63.93 65.677 0 0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 10 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 10 @@ -690,7 +690,7 @@ Subhourly User-defined Report, Thu 10-Jan 12 56.012 2.013 75.841 72.106 68.698 70.837 0 0 67.04 69.108 0 0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 11 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 11 @@ -753,7 +753,7 @@ Subhourly User-defined Report, Thu 10-Jan 14 59.36 2.159 79.152 77.76 68.818 70.147 1.000 0 68.643 70.001 1.000 0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 12 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 12 @@ -816,7 +816,7 @@ Subhourly User-defined Report, Thu 10-Jan 15 59.9 2.237 75.068 76.105 68.618 69.534 1.000 0 69.099 70.034 1.000 0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 13 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 13 @@ -879,7 +879,7 @@ Subhourly User-defined Report, Thu 10-Jan 17 58.136 1.599 63.85 67.024 67.341 67.058 0 0 67.569 67.415 0 0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 14 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 14 @@ -942,7 +942,7 @@ Subhourly User-defined Report, Thu 10-Jan 19 55.436 1.229 58.191 60.603 66.003 65.521 0 0 65.664 65.498 0 0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 15 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 15 @@ -1005,7 +1005,7 @@ Subhourly User-defined Report, Thu 10-Jan 21 50.54 0.487 53.12 55.3 64.185 63.7 0 0 63.084 63.051 0 0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 16 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 16 @@ -1068,7 +1068,7 @@ Subhourly User-defined Report, Thu 10-Jan 23 50 1.264 49.726 51.228 64 63.189 0 2214.21 63 62.349 0 3032.63 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 17 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 17 @@ -1131,7 +1131,7 @@ Subhourly User-defined Report, Thu 10-Jan ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 18 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 18 @@ -1194,7 +1194,7 @@ Mass CbJ Area: 232.506 UNom: 0.02888 tc: 0.60 subhrly: ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 19 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 19 @@ -1257,7 +1257,7 @@ IzXfer AX1 Zn1: Z1 Zn2: Attic UAconst: 0 NVctrl: AirNetIZ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 20 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 20 @@ -1320,7 +1320,7 @@ Mass RDw Area: 130.139 UNom: 0.6162 tc: 1.10 subhrly: Outside: Ambient RSrfNom: 0.17 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 21 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 21 @@ -1383,7 +1383,7 @@ IzXfer AH Zn1: Attic Zn2: (ambient) UAconst: 0 NVctrl: AirN ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 22 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 22 @@ -1395,7 +1395,7 @@ IzXfer AH Zn1: Attic Zn2: (ambient) UAconst: 0 NVctrl: AirN ! Log for Run 001: ################ -! CSE 0.893.0 for Win32 console Tue 22-Jun-21 11:12:07 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console Wed 27-Oct-21 9:50:34 am ================ @@ -1446,7 +1446,7 @@ RD 130.1 0.050 0.050 0.200 1.057 RDT 9.8 0.900 0.903 0.200 1.004 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 23 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 23 @@ -1509,7 +1509,7 @@ Surface 'West_Wall': tilt=90 Surface 'South_Wall': tilt=90 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 24 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 24 @@ -1572,7 +1572,7 @@ Surface 'RDTs': tilt=23 Surface 'RDw': tilt=23 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 25 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 25 @@ -1635,7 +1635,7 @@ Surface 'South_Win2': tilt=90 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 26 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 26 @@ -1698,7 +1698,7 @@ Z1 CZ: anMCp/T[ 0]=58.66/3144.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.96 TD=68.00 TC=74.04 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 27 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 27 @@ -1761,7 +1761,7 @@ Z2 CZ: anMCp/T[ 0]=111.77/5977.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.094 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 28 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 28 @@ -1816,7 +1816,7 @@ Z2 CZ: anMCp/T[ 0]=113.04/6032.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.982 mwDuctLk=0.000 mwSys=0.000 tdb=48.69 airX=7.874 dryAirMass=51.63 XLGain=369.68 W=0.008888 twb=48.69 rh=1.0000 Attic UZ: anMCp/T[ 0]=99.02/6116.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=46029.33 Dair=946.50 Nrad=38385.67 Drad=785.02 CX=450.17 airX=7.874 + Nair=46029.34 Dair=946.50 Nrad=38385.67 Drad=785.02 CX=450.17 airX=7.874 ta=48.69 tr=48.82 qIzSh=1295 fvent=0.000 pz0=0.0075 qsHvac=0 @@ -1824,7 +1824,7 @@ Attic UZ: anMCp/T[ 0]=99.02/6116.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=0 subhr=7 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 29 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 29 @@ -1842,7 +1842,7 @@ Z1 CZ: anMCp/T[ 0]=59.86/3190.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.560 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=3.672 dryAirMass=127.06 XLGain=0.00 W=0.009791 twb=55.58 rh=0.6543 Z2 CZ: anMCp/T[ 0]=113.66/6057.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1965965.83 Dair=31233.74 Nrad=70172.64 Drad=1129.01 CX=447.20 airX=8.472 + Nair=1965965.82 Dair=31233.74 Nrad=70172.64 Drad=1129.01 CX=447.20 airX=8.472 TH=63.00 TD=67.96 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.39 qIzSh=-1102 fvent=0.000 pz0=-0.0055 qsHvac=2031 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.897 mwDuctLk=0.000 mwSys=0.000 @@ -1887,7 +1887,7 @@ Z1 CZ: anMCp/T[ 0]=60.25/3204.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.96 tr=63.77 qIzSh=-710 fvent=0.000 pz0=-0.0062 qsHvac=2544 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 30 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 30 @@ -1950,7 +1950,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.234 mwDuctLk=0.000 mwSys=0.000 tdb=48.99 airX=8.386 dryAirMass=51.59 XLGain=333.61 W=0.008994 twb=48.99 rh=1.0000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 31 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 31 @@ -2013,7 +2013,7 @@ Thu 10-Jan hr=0 subhr=14 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 32 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 32 @@ -2076,7 +2076,7 @@ Z1 CZ: anMCp/T[ 0]=65.22/3441.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.730 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 33 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 33 @@ -2108,7 +2108,7 @@ Z1 CZ: anMCp/T[ 0]=67.18/3540.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.746 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=3.835 dryAirMass=127.07 XLGain=0.00 W=0.009760 twb=55.53 rh=0.6523 Z2 CZ: anMCp/T[ 0]=118.70/6255.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1967020.44 Dair=31252.70 Nrad=70001.82 Drad=1126.32 CX=450.73 airX=8.635 + Nair=1967020.45 Dair=31252.70 Nrad=70001.82 Drad=1126.32 CX=450.73 airX=8.635 TH=63.00 TD=67.96 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.39 qIzSh=-1223 fvent=0.000 pz0=-0.0046 qsHvac=2173 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.473 mwDuctLk=0.000 mwSys=0.000 @@ -2139,7 +2139,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.665 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=141.26/9035.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 34 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 34 @@ -2180,7 +2180,7 @@ Thu 10-Jan hr=0 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.949 mwDuctLk=0.000 mwSys=0.000 tdb=64.96 airX=2.395 dryAirMass=126.59 XLGain=0.00 W=0.009765 twb=56.23 rh=0.6094 Z1 CZ: anMCp/T[ 0]=73.84/3878.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2018197.18 Dair=31100.85 Nrad=73480.38 Drad=1156.17 CX=426.55 airX=7.195 + Nair=2018197.18 Dair=31100.85 Nrad=73480.39 Drad=1156.17 CX=426.55 airX=7.195 TH=64.96 TD=68.00 TC=74.04 qhCap=20000 qcCap=-34000 ta=64.96 tr=63.93 qIzSh=-918 fvent=0.000 pz0=-0.0048 qsHvac=2500 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.785 mwDuctLk=0.000 mwSys=0.000 @@ -2202,7 +2202,7 @@ Thu 10-Jan hr=0 subhr=21 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 35 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 35 @@ -2265,7 +2265,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.820 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=3.904 dryAirMass=127.07 XLGain=0.00 W=0.009740 twb=55.50 rh=0.6510 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 36 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 36 @@ -2328,7 +2328,7 @@ Attic UZ: anMCp/T[ 0]=174.22/11139.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=56166.22 Dair=1128.22 Nrad=38086.78 Drad=777.20 CX=483.22 airX=13.886 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 37 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 37 @@ -2391,7 +2391,7 @@ Thu 10-Jan hr=0 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.563 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 38 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 38 @@ -2454,7 +2454,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.887 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=122.87/6382.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 39 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 39 @@ -2501,7 +2501,7 @@ Thu 10-Jan hr=1 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.572 mwDuctLk=0.000 mwSys=0.000 tdb=64.92 airX=2.919 dryAirMass=126.61 XLGain=0.00 W=0.009718 twb=56.15 rh=0.6074 Z1 CZ: anMCp/T[ 0]=90.01/4669.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2021222.30 Dair=31169.79 Nrad=72987.41 Drad=1146.05 CX=439.57 airX=7.719 + Nair=2021222.30 Dair=31169.79 Nrad=72987.42 Drad=1146.05 CX=439.57 airX=7.719 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=64.92 tr=64.03 qIzSh=-1174 fvent=0.000 pz0=-0.0039 qsHvac=2607 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.910 mwDuctLk=0.000 mwSys=0.000 @@ -2517,7 +2517,7 @@ Attic UZ: anMCp/T[ 0]=189.33/12100.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=49.79 tr=49.38 qIzSh=2673 fvent=0.000 pz0=0.0037 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 40 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 40 @@ -2533,13 +2533,13 @@ Thu 10-Jan hr=1 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.550 mwDuctLk=0.000 mwSys=0.000 tdb=64.92 airX=2.904 dryAirMass=126.61 XLGain=0.00 W=0.009711 twb=56.14 rh=0.6070 Z1 CZ: anMCp/T[ 0]=89.57/4642.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2021182.18 Dair=31169.03 Nrad=73000.10 Drad=1146.14 CX=439.51 airX=7.704 + Nair=2021182.17 Dair=31169.03 Nrad=73000.10 Drad=1146.14 CX=439.51 airX=7.704 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=64.92 tr=64.03 qIzSh=-1172 fvent=0.000 pz0=-0.0040 qsHvac=2596 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.922 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.012 dryAirMass=127.08 XLGain=0.00 W=0.009698 twb=55.43 rh=0.6482 Z2 CZ: anMCp/T[ 0]=124.17/6436.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1968064.13 Dair=31272.49 Nrad=69806.85 Drad=1123.52 CX=453.63 airX=8.812 + Nair=1968064.12 Dair=31272.49 Nrad=69806.85 Drad=1123.52 CX=453.63 airX=8.812 TH=63.00 TD=67.92 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.38 qIzSh=-1386 fvent=0.000 pz0=-0.0035 qsHvac=2383 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.504 mwDuctLk=0.000 mwSys=0.000 @@ -2580,7 +2580,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.509 mwDuctLk=0.000 mwSys=0.000 tdb=64.92 airX=2.877 dryAirMass=126.62 XLGain=0.00 W=0.009698 twb=56.12 rh=0.6062 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 41 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 41 @@ -2611,7 +2611,7 @@ Thu 10-Jan hr=1 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.488 mwDuctLk=0.000 mwSys=0.000 tdb=64.92 airX=2.863 dryAirMass=126.62 XLGain=0.00 W=0.009691 twb=56.11 rh=0.6057 Z1 CZ: anMCp/T[ 0]=88.29/4567.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2020835.34 Dair=31163.24 Nrad=73081.33 Drad=1147.12 CX=438.36 airX=7.663 + Nair=2020835.33 Dair=31163.24 Nrad=73081.33 Drad=1147.12 CX=438.36 airX=7.663 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=64.92 tr=64.04 qIzSh=-1164 fvent=0.000 pz0=-0.0043 qsHvac=2561 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.955 mwDuctLk=0.000 mwSys=0.000 @@ -2623,7 +2623,7 @@ Z2 CZ: anMCp/T[ 0]=125.43/6488.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.362 mwDuctLk=0.000 mwSys=0.000 tdb=49.82 airX=14.758 dryAirMass=51.48 XLGain=324.05 W=0.009285 twb=49.82 rh=1.0000 Attic UZ: anMCp/T[ 0]=185.06/11828.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=58719.38 Dair=1174.65 Nrad=38076.63 Drad=774.35 CX=500.03 airX=14.758 + Nair=58719.37 Dair=1174.65 Nrad=38076.63 Drad=774.35 CX=500.03 airX=14.758 ta=49.82 tr=49.43 qIzSh=2608 fvent=0.000 pz0=0.0035 qsHvac=0 @@ -2643,7 +2643,7 @@ Z2 CZ: anMCp/T[ 0]=125.84/6505.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=1968402.77 Dair=31278.61 Nrad=69746.54 Drad=1122.62 CX=454.76 airX=8.865 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 42 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 42 @@ -2706,7 +2706,7 @@ Attic UZ: anMCp/T[ 0]=181.95/11630.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 43 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 43 @@ -2750,7 +2750,7 @@ Z1 CZ: anMCp/T[ 0]=86.03/4434.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.007 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.117 dryAirMass=127.09 XLGain=0.00 W=0.009629 twb=55.32 rh=0.6437 Z2 CZ: anMCp/T[ 0]=127.45/6569.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1968725.64 Dair=31284.45 Nrad=69689.86 Drad=1121.77 CX=455.83 airX=8.917 + Nair=1968725.63 Dair=31284.45 Nrad=69689.86 Drad=1121.77 CX=455.83 airX=8.917 TH=63.00 TD=67.92 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.38 qIzSh=-1460 fvent=0.000 pz0=-0.0044 qsHvac=2478 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.127 mwDuctLk=0.000 mwSys=0.000 @@ -2769,14 +2769,14 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.355 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=85.50/4404.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 44 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 44 1Z Test ------------------------------------------------------------------------------ - Nair=2020199.97 Dair=31152.66 Nrad=73217.44 Drad=1148.80 CX=436.35 airX=7.572 + Nair=2020199.98 Dair=31152.66 Nrad=73217.44 Drad=1148.80 CX=436.35 airX=7.572 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=64.92 tr=64.06 qIzSh=-1146 fvent=0.000 pz0=-0.0050 qsHvac=2501 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.017 mwDuctLk=0.000 mwSys=0.000 @@ -2822,7 +2822,7 @@ Thu 10-Jan hr=1 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.336 mwDuctLk=0.000 mwSys=0.000 tdb=64.92 airX=2.763 dryAirMass=126.63 XLGain=0.00 W=0.009625 twb=56.01 rh=0.6017 Z1 CZ: anMCp/T[ 0]=85.22/4383.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2020001.37 Dair=31149.49 Nrad=73263.99 Drad=1149.41 CX=435.61 airX=7.563 + Nair=2020001.37 Dair=31149.49 Nrad=73263.98 Drad=1149.41 CX=435.61 airX=7.563 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=64.92 tr=64.06 qIzSh=-1148 fvent=0.000 pz0=-0.0052 qsHvac=2491 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.036 mwDuctLk=0.000 mwSys=0.000 @@ -2832,7 +2832,7 @@ Z2 CZ: anMCp/T[ 0]=128.62/6616.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.92 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 45 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 45 @@ -2895,7 +2895,7 @@ Attic UZ: anMCp/T[ 0]=174.84/11176.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 46 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 46 @@ -2958,7 +2958,7 @@ Z1 CZ: anMCp/T[ 0]=83.05/4257.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2019561.86 Dair=31142.23 Nrad=73349.24 Drad=1150.50 CX=434.28 airX=7.493 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 47 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 47 @@ -3021,7 +3021,7 @@ Z2 CZ: anMCp/T[ 0]=131.26/6719.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=63.00 tr=62.38 qIzSh=-1550 fvent=0.000 pz0=-0.0056 qsHvac=2588 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 48 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 48 @@ -3042,7 +3042,7 @@ Thu 10-Jan hr=1 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.186 mwDuctLk=0.000 mwSys=0.000 tdb=64.92 airX=2.662 dryAirMass=126.65 XLGain=0.00 W=0.009550 twb=55.89 rh=0.5970 Z1 CZ: anMCp/T[ 0]=82.10/4199.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2019321.53 Dair=31138.33 Nrad=73396.54 Drad=1151.13 CX=433.51 airX=7.462 + Nair=2019321.52 Dair=31138.33 Nrad=73396.54 Drad=1151.13 CX=433.51 airX=7.462 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=64.92 tr=64.08 qIzSh=-1130 fvent=0.000 pz0=-0.0061 qsHvac=2439 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.107 mwDuctLk=0.000 mwSys=0.000 @@ -3084,7 +3084,7 @@ Attic UZ: anMCp/T[ 0]=168.05/10743.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 49 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 49 @@ -3126,7 +3126,7 @@ Z1 CZ: anMCp/T[ 0]=80.55/4111.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.132 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.286 dryAirMass=127.12 XLGain=0.00 W=0.009483 twb=55.09 rh=0.6341 Z2 CZ: anMCp/T[ 0]=132.71/6774.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1969754.24 Dair=31303.13 Nrad=69516.02 Drad=1119.09 CX=459.27 airX=9.086 + Nair=1969754.25 Dair=31303.13 Nrad=69516.02 Drad=1119.09 CX=459.27 airX=9.086 TH=63.00 TD=67.92 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.37 qIzSh=-1587 fvent=0.000 pz0=-0.0060 qsHvac=2630 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.490 mwDuctLk=0.000 mwSys=0.000 @@ -3147,7 +3147,7 @@ Z1 CZ: anMCp/T[ 0]=79.92/4076.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 50 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 50 @@ -3198,7 +3198,7 @@ Thu 10-Jan hr=1 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.073 mwDuctLk=0.000 mwSys=0.000 tdb=64.92 airX=2.585 dryAirMass=126.66 XLGain=0.00 W=0.009491 twb=55.80 rh=0.5934 Z1 CZ: anMCp/T[ 0]=79.75/4062.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2018709.82 Dair=31128.41 Nrad=73508.35 Drad=1152.71 CX=431.53 airX=7.385 + Nair=2018709.83 Dair=31128.41 Nrad=73508.35 Drad=1152.71 CX=431.53 airX=7.385 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=64.92 tr=64.08 qIzSh=-1115 fvent=0.000 pz0=-0.0067 qsHvac=2403 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.155 mwDuctLk=0.000 mwSys=0.000 @@ -3210,7 +3210,7 @@ Z2 CZ: anMCp/T[ 0]=133.78/6814.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.360 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 51 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 51 @@ -3273,7 +3273,7 @@ Attic UZ: anMCp/T[ 0]=162.92/10416.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=2 subhr=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 52 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 52 @@ -3336,7 +3336,7 @@ Z1 CZ: anMCp/T[ 0]=80.29/4078.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.88 tr=64.07 qIzSh=-1130 fvent=0.000 pz0=-0.0068 qsHvac=2361 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 53 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 53 @@ -3399,7 +3399,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.401 mwDuctLk=0.000 mwSys=0.000 tdb=50.07 airX=13.204 dryAirMass=51.45 XLGain=31.14 W=0.009372 twb=50.07 rh=1.0000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 54 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 54 @@ -3424,7 +3424,7 @@ Z1 CZ: anMCp/T[ 0]=80.97/4107.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.207 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.371 dryAirMass=127.14 XLGain=0.00 W=0.009394 twb=54.95 rh=0.6282 Z2 CZ: anMCp/T[ 0]=135.37/6867.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1970314.56 Dair=31313.38 Nrad=69418.55 Drad=1117.57 CX=458.73 airX=9.171 + Nair=1970314.55 Dair=31313.38 Nrad=69418.55 Drad=1117.57 CX=458.73 airX=9.171 TH=63.00 TD=67.88 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.37 qIzSh=-1661 fvent=0.000 pz0=-0.0065 qsHvac=2716 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.417 mwDuctLk=0.000 mwSys=0.000 @@ -3462,7 +3462,7 @@ Thu 10-Jan hr=2 subhr=8 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 55 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 55 @@ -3525,7 +3525,7 @@ Z1 CZ: anMCp/T[ 0]=81.86/4144.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.234 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 56 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 56 @@ -3588,7 +3588,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.515 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=168.94/10797.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 57 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 57 @@ -3651,7 +3651,7 @@ Thu 10-Jan hr=2 subhr=15 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 58 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 58 @@ -3714,7 +3714,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.281 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.437 dryAirMass=127.15 XLGain=0.00 W=0.009370 twb=54.91 rh=0.6266 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 59 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 59 @@ -3768,7 +3768,7 @@ Z1 CZ: anMCp/T[ 0]=83.74/4222.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.295 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.449 dryAirMass=127.15 XLGain=0.00 W=0.009367 twb=54.91 rh=0.6265 Z2 CZ: anMCp/T[ 0]=137.78/6946.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1970754.95 Dair=31321.75 Nrad=69338.27 Drad=1116.38 CX=460.25 airX=9.249 + Nair=1970754.94 Dair=31321.75 Nrad=69338.27 Drad=1116.38 CX=460.25 airX=9.249 TH=63.00 TD=67.88 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.37 qIzSh=-1733 fvent=0.000 pz0=-0.0067 qsHvac=2805 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.629 mwDuctLk=0.000 mwSys=0.000 @@ -3777,7 +3777,7 @@ Attic UZ: anMCp/T[ 0]=172.20/11005.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=57380.13 Dair=1137.88 Nrad=38682.17 Drad=778.33 CX=493.35 airX=13.747 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 60 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 60 @@ -3840,7 +3840,7 @@ Thu 10-Jan hr=2 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.241 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 61 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 61 @@ -3903,7 +3903,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.329 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=138.71/6977.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 62 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 62 @@ -3966,7 +3966,7 @@ Attic UZ: anMCp/T[ 0]=175.35/11207.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=50.37 tr=50.01 qIzSh=2375 fvent=0.000 pz0=0.0004 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 63 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 63 @@ -4029,7 +4029,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.293 mwDuctLk=0.000 mwSys=0.000 tdb=64.88 airX=2.779 dryAirMass=126.69 XLGain=0.00 W=0.009367 twb=55.59 rh=0.5867 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 64 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 64 @@ -4089,10 +4089,10 @@ Z1 CZ: anMCp/T[ 0]=86.63/4351.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.344 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.493 dryAirMass=127.15 XLGain=0.00 W=0.009357 twb=54.89 rh=0.6258 Z2 CZ: anMCp/T[ 0]=139.15/6989.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971119.97 Dair=31328.46 Nrad=69264.78 Drad=1115.30 CX=460.89 airX=9.293 + Nair=1971119.98 Dair=31328.46 Nrad=69264.78 Drad=1115.30 CX=460.89 airX=9.293 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 65 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 65 @@ -4155,7 +4155,7 @@ Attic UZ: anMCp/T[ 0]=181.38/11587.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 66 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 66 @@ -4176,7 +4176,7 @@ Z1 CZ: anMCp/T[ 0]=88.14/4433.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.316 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.468 dryAirMass=127.15 XLGain=0.00 W=0.009357 twb=54.89 rh=0.6258 Z2 CZ: anMCp/T[ 0]=138.38/6960.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971030.94 Dair=31326.73 Nrad=69275.75 Drad=1115.50 CX=460.63 airX=9.268 + Nair=1971030.93 Dair=31326.73 Nrad=69275.75 Drad=1115.50 CX=460.63 airX=9.268 TH=63.00 TD=67.83 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.37 qIzSh=-1757 fvent=0.000 pz0=-0.0064 qsHvac=2846 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.017 mwDuctLk=0.000 mwSys=0.000 @@ -4218,7 +4218,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.425 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=89.14/4488.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 67 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 67 @@ -4281,7 +4281,7 @@ Z2 CZ: anMCp/T[ 0]=137.30/6919.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.83 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 68 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 68 @@ -4344,7 +4344,7 @@ Attic UZ: anMCp/T[ 0]=190.03/12139.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 69 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 69 @@ -4358,7 +4358,7 @@ Thu 10-Jan hr=3 subhr=11 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.525 mwDuctLk=0.000 mwSys=0.000 tdb=64.83 airX=2.971 dryAirMass=126.71 XLGain=0.00 W=0.009362 twb=55.56 rh=0.5872 Z1 CZ: anMCp/T[ 0]=91.70/4627.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2018317.78 Dair=31165.15 Nrad=73154.00 Drad=1147.57 CX=434.58 airX=7.771 + Nair=2018317.77 Dair=31165.15 Nrad=73154.00 Drad=1147.57 CX=434.58 airX=7.771 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=64.83 tr=64.05 qIzSh=-1317 fvent=0.000 pz0=-0.0059 qsHvac=2565 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.246 mwDuctLk=0.000 mwSys=0.000 @@ -4381,7 +4381,7 @@ Thu 10-Jan hr=3 subhr=12 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.544 mwDuctLk=0.000 mwSys=0.000 tdb=64.83 airX=2.988 dryAirMass=126.71 XLGain=0.00 W=0.009362 twb=55.56 rh=0.5872 Z1 CZ: anMCp/T[ 0]=92.21/4655.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2018432.62 Dair=31167.02 Nrad=73136.48 Drad=1147.29 CX=434.94 airX=7.788 + Nair=2018432.61 Dair=31167.02 Nrad=73136.48 Drad=1147.29 CX=434.94 airX=7.788 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=64.83 tr=64.05 qIzSh=-1322 fvent=0.000 pz0=-0.0058 qsHvac=2572 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.237 mwDuctLk=0.000 mwSys=0.000 @@ -4407,7 +4407,7 @@ Z1 CZ: anMCp/T[ 0]=92.71/4683.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2018546.15 Dair=31168.87 Nrad=73119.46 Drad=1147.02 CX=435.29 airX=7.804 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 70 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 70 @@ -4436,7 +4436,7 @@ Thu 10-Jan hr=3 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.583 mwDuctLk=0.000 mwSys=0.000 tdb=64.83 airX=3.020 dryAirMass=126.71 XLGain=0.00 W=0.009362 twb=55.56 rh=0.5873 Z1 CZ: anMCp/T[ 0]=93.21/4710.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2018658.56 Dair=31170.70 Nrad=73102.70 Drad=1146.76 CX=435.63 airX=7.820 + Nair=2018658.55 Dair=31170.70 Nrad=73102.70 Drad=1146.76 CX=435.63 airX=7.820 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=64.83 tr=64.05 qIzSh=-1332 fvent=0.000 pz0=-0.0056 qsHvac=2585 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.217 mwDuctLk=0.000 mwSys=0.000 @@ -4470,7 +4470,7 @@ Z2 CZ: anMCp/T[ 0]=135.38/6845.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=63.00 tr=62.36 qIzSh=-1684 fvent=0.000 pz0=-0.0052 qsHvac=2766 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 71 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 71 @@ -4503,7 +4503,7 @@ Z2 CZ: anMCp/T[ 0]=135.09/6833.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.598 mwDuctLk=0.000 mwSys=0.000 tdb=50.74 airX=15.794 dryAirMass=51.38 XLGain=0.00 W=0.009362 twb=50.31 rh=0.9747 Attic UZ: anMCp/T[ 0]=197.67/12625.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=60889.48 Dair=1195.99 Nrad=38872.15 Drad=776.57 CX=506.10 airX=15.794 + Nair=60889.49 Dair=1195.99 Nrad=38872.15 Drad=776.57 CX=506.10 airX=15.794 ta=50.74 tr=50.32 qIzSh=2597 fvent=0.000 pz0=0.0005 qsHvac=0 @@ -4533,7 +4533,7 @@ Attic UZ: anMCp/T[ 0]=198.96/12708.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 72 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 72 @@ -4596,7 +4596,7 @@ Z1 CZ: anMCp/T[ 0]=96.30/4881.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 73 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 73 @@ -4659,7 +4659,7 @@ Z2 CZ: anMCp/T[ 0]=133.33/6763.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.902 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 74 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 74 @@ -4708,7 +4708,7 @@ Z1 CZ: anMCp/T[ 0]=98.40/4996.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.107 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.286 dryAirMass=127.15 XLGain=0.00 W=0.009367 twb=54.91 rh=0.6265 Z2 CZ: anMCp/T[ 0]=132.72/6739.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1969990.94 Dair=31307.81 Nrad=69444.75 Drad=1118.19 CX=457.16 airX=9.086 + Nair=1969990.95 Dair=31307.81 Nrad=69444.75 Drad=1118.19 CX=457.16 airX=9.086 TH=63.00 TD=67.83 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.36 qIzSh=-1622 fvent=0.000 pz0=-0.0042 qsHvac=2692 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.005 mwDuctLk=0.000 mwSys=0.000 @@ -4722,7 +4722,7 @@ Attic UZ: anMCp/T[ 0]=208.15/13294.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=3 subhr=25 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 75 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 75 @@ -4734,7 +4734,7 @@ Thu 10-Jan hr=3 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.806 mwDuctLk=0.000 mwSys=0.000 tdb=64.83 airX=3.205 dryAirMass=126.70 XLGain=0.00 W=0.009367 twb=55.57 rh=0.5876 Z1 CZ: anMCp/T[ 0]=98.92/5025.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2019906.70 Dair=31190.88 Nrad=72930.61 Drad=1143.89 CX=439.41 airX=8.005 + Nair=2019906.69 Dair=31190.88 Nrad=72930.61 Drad=1143.89 CX=439.41 airX=8.005 TH=64.83 TD=68.00 TC=74.17 qhCap=20000 qcCap=-34000 ta=64.83 tr=64.06 qIzSh=-1388 fvent=0.000 pz0=-0.0045 qsHvac=2644 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.095 mwDuctLk=0.000 mwSys=0.000 @@ -4785,7 +4785,7 @@ Z1 CZ: anMCp/T[ 0]=99.97/5083.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.83 tr=64.06 qIzSh=-1398 fvent=0.000 pz0=-0.0043 qsHvac=2653 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 76 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 76 @@ -4848,7 +4848,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.267 mwDuctLk=0.000 mwSys=0.000 tdb=51.04 airX=17.181 dryAirMass=51.35 XLGain=0.00 W=0.009369 twb=50.44 rh=0.9649 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 77 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 77 @@ -4911,7 +4911,7 @@ Thu 10-Jan hr=4 subhr=2 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 78 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 78 @@ -4957,7 +4957,7 @@ Z2 CZ: anMCp/T[ 0]=132.85/6746.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.985 mwDuctLk=0.000 mwSys=0.000 tdb=51.04 airX=16.593 dryAirMass=51.35 XLGain=0.00 W=0.009371 twb=50.45 rh=0.9652 Attic UZ: anMCp/T[ 0]=207.54/13250.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=62911.19 Dair=1228.44 Nrad=39028.16 Drad=775.40 CX=515.18 airX=16.593 + Nair=62911.18 Dair=1228.44 Nrad=39028.16 Drad=775.40 CX=515.18 airX=16.593 ta=51.04 tr=50.61 qIzSh=2659 fvent=0.000 pz0=0.0004 qsHvac=0 @@ -4974,7 +4974,7 @@ Z1 CZ: anMCp/T[ 0]=97.27/4936.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.127 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 79 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 79 @@ -5000,7 +5000,7 @@ Thu 10-Jan hr=4 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.714 mwDuctLk=0.000 mwSys=0.000 tdb=64.79 airX=3.128 dryAirMass=126.71 XLGain=0.00 W=0.009371 twb=55.56 rh=0.5887 Z1 CZ: anMCp/T[ 0]=96.54/4896.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2018528.10 Dair=31188.48 Nrad=72927.23 Drad=1143.82 CX=439.45 airX=7.928 + Nair=2018528.10 Dair=31188.48 Nrad=72927.22 Drad=1143.82 CX=439.45 airX=7.928 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ta=64.79 tr=64.04 qIzSh=-1358 fvent=0.000 pz0=-0.0050 qsHvac=2554 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.142 mwDuctLk=0.000 mwSys=0.000 @@ -5037,7 +5037,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.776 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=202.10/12904.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 80 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 80 @@ -5100,7 +5100,7 @@ Thu 10-Jan hr=4 subhr=9 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 81 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 81 @@ -5163,7 +5163,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.229 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.392 dryAirMass=127.15 XLGain=0.00 W=0.009368 twb=54.91 rh=0.6265 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 82 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 82 @@ -5226,7 +5226,7 @@ Attic UZ: anMCp/T[ 0]=189.63/12109.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=60746.84 Dair=1187.14 Nrad=39259.33 Drad=777.89 CX=507.34 airX=15.161 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 83 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 83 @@ -5289,7 +5289,7 @@ Thu 10-Jan hr=4 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.405 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 84 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 84 @@ -5352,7 +5352,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.321 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=138.50/6970.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 85 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 85 @@ -5399,7 +5399,7 @@ Thu 10-Jan hr=4 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.296 mwDuctLk=0.000 mwSys=0.000 tdb=64.79 airX=2.780 dryAirMass=126.72 XLGain=0.00 W=0.009363 twb=55.55 rh=0.5882 Z1 CZ: anMCp/T[ 0]=85.81/4313.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2016192.99 Dair=31150.70 Nrad=73238.88 Drad=1149.15 CX=432.37 airX=7.580 + Nair=2016192.98 Dair=31150.70 Nrad=73238.88 Drad=1149.15 CX=432.37 airX=7.580 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ta=64.79 tr=64.02 qIzSh=-1246 fvent=0.000 pz0=-0.0071 qsHvac=2445 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.346 mwDuctLk=0.000 mwSys=0.000 @@ -5415,7 +5415,7 @@ Attic UZ: anMCp/T[ 0]=177.47/11334.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=50.98 tr=50.71 qIzSh=2287 fvent=0.000 pz0=-0.0004 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 86 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 86 @@ -5454,13 +5454,13 @@ Thu 10-Jan hr=4 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.216 mwDuctLk=0.000 mwSys=0.000 tdb=64.79 airX=2.713 dryAirMass=126.72 XLGain=0.00 W=0.009362 twb=55.55 rh=0.5881 Z1 CZ: anMCp/T[ 0]=83.72/4203.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2015838.03 Dair=31144.84 Nrad=73281.08 Drad=1149.89 CX=431.38 airX=7.513 + Nair=2015838.04 Dair=31144.84 Nrad=73281.08 Drad=1149.89 CX=431.38 airX=7.513 TH=64.79 TD=68.00 TC=74.21 qhCap=20000 qcCap=-34000 ta=64.79 tr=64.02 qIzSh=-1221 fvent=0.000 pz0=-0.0073 qsHvac=2422 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.370 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.515 dryAirMass=127.15 XLGain=0.00 W=0.009359 twb=54.90 rh=0.6260 Z2 CZ: anMCp/T[ 0]=139.82/7020.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971076.41 Dair=31327.86 Nrad=69282.79 Drad=1115.55 CX=460.70 airX=9.315 + Nair=1971076.41 Dair=31327.86 Nrad=69282.78 Drad=1115.55 CX=460.70 airX=9.315 TH=63.00 TD=67.79 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.37 qIzSh=-1788 fvent=0.000 pz0=-0.0071 qsHvac=2870 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.691 mwDuctLk=0.000 mwSys=0.000 @@ -5478,7 +5478,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.218 mwDuctLk=0.000 mwSys=0.000 tdb=64.79 airX=2.715 dryAirMass=126.72 XLGain=0.00 W=0.009361 twb=55.55 rh=0.5881 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 87 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 87 @@ -5541,7 +5541,7 @@ Z2 CZ: anMCp/T[ 0]=140.76/7054.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=1971255.73 Dair=31331.18 Nrad=69250.31 Drad=1115.06 CX=461.32 airX=9.345 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 88 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 88 @@ -5570,13 +5570,13 @@ Z1 CZ: anMCp/T[ 0]=81.32/4073.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.416 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.555 dryAirMass=127.15 XLGain=0.00 W=0.009356 twb=54.89 rh=0.6257 Z2 CZ: anMCp/T[ 0]=141.07/7066.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971313.92 Dair=31332.27 Nrad=69239.62 Drad=1114.90 CX=461.52 airX=9.355 + Nair=1971313.93 Dair=31332.27 Nrad=69239.62 Drad=1114.90 CX=461.52 airX=9.355 TH=63.00 TD=67.79 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.37 qIzSh=-1821 fvent=0.000 pz0=-0.0077 qsHvac=2911 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.429 mwDuctLk=0.000 mwSys=0.000 tdb=50.92 airX=13.374 dryAirMass=51.36 XLGain=0.00 W=0.009359 twb=50.38 rh=0.9682 Attic UZ: anMCp/T[ 0]=167.32/10687.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=57864.77 Dair=1134.45 Nrad=39469.17 Drad=780.37 CX=499.53 airX=13.374 + Nair=57864.76 Dair=1134.45 Nrad=39469.17 Drad=780.37 CX=499.53 airX=13.374 ta=50.92 tr=50.71 qIzSh=2168 fvent=0.000 pz0=-0.0006 qsHvac=0 @@ -5604,7 +5604,7 @@ Attic UZ: anMCp/T[ 0]=165.67/10582.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 89 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 89 @@ -5667,7 +5667,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.093 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=80.60/4029.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 90 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 90 @@ -5703,7 +5703,7 @@ Z1 CZ: anMCp/T[ 0]=81.66/4083.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.443 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.579 dryAirMass=127.15 XLGain=0.00 W=0.009352 twb=54.88 rh=0.6255 Z2 CZ: anMCp/T[ 0]=141.80/7090.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971553.48 Dair=31336.56 Nrad=69190.87 Drad=1114.17 CX=462.27 airX=9.379 + Nair=1971553.48 Dair=31336.56 Nrad=69190.88 Drad=1114.17 CX=462.27 airX=9.379 TH=63.00 TD=67.75 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.36 qIzSh=-1843 fvent=0.000 pz0=-0.0078 qsHvac=2944 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.419 mwDuctLk=0.000 mwSys=0.000 @@ -5730,7 +5730,7 @@ Z2 CZ: anMCp/T[ 0]=141.71/7085.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.75 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 91 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 91 @@ -5793,7 +5793,7 @@ Attic UZ: anMCp/T[ 0]=174.82/11162.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 92 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 92 @@ -5856,7 +5856,7 @@ Z1 CZ: anMCp/T[ 0]=88.26/4412.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2014638.27 Dair=31147.69 Nrad=73238.03 Drad=1150.02 CX=430.71 airX=7.659 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 93 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 93 @@ -5919,7 +5919,7 @@ Z2 CZ: anMCp/T[ 0]=140.88/7043.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=63.00 tr=62.36 qIzSh=-1831 fvent=0.000 pz0=-0.0067 qsHvac=2940 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 94 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 94 @@ -5969,7 +5969,7 @@ Z1 CZ: anMCp/T[ 0]=92.65/4632.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.396 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.540 dryAirMass=127.15 XLGain=0.00 W=0.009349 twb=54.88 rh=0.6253 Z2 CZ: anMCp/T[ 0]=140.60/7029.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971385.22 Dair=31333.76 Nrad=69205.08 Drad=1114.52 CX=461.81 airX=9.340 + Nair=1971385.21 Dair=31333.76 Nrad=69205.08 Drad=1114.52 CX=461.81 airX=9.340 TH=63.00 TD=67.75 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.36 qIzSh=-1828 fvent=0.000 pz0=-0.0064 qsHvac=2937 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.417 mwDuctLk=0.000 mwSys=0.000 @@ -5982,7 +5982,7 @@ Attic UZ: anMCp/T[ 0]=193.21/12334.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 95 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 95 @@ -6024,7 +6024,7 @@ Z1 CZ: anMCp/T[ 0]=94.90/4745.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.383 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.529 dryAirMass=127.15 XLGain=0.00 W=0.009349 twb=54.88 rh=0.6253 Z2 CZ: anMCp/T[ 0]=140.26/7012.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971328.76 Dair=31332.80 Nrad=69211.98 Drad=1114.65 CX=461.64 airX=9.329 + Nair=1971328.76 Dair=31332.80 Nrad=69211.99 Drad=1114.65 CX=461.64 airX=9.329 TH=63.00 TD=67.75 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.36 qIzSh=-1823 fvent=0.000 pz0=-0.0060 qsHvac=2934 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.626 mwDuctLk=0.000 mwSys=0.000 @@ -6045,7 +6045,7 @@ Z1 CZ: anMCp/T[ 0]=96.03/4801.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.75 TD=68.00 TC=74.25 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 96 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 96 @@ -6056,7 +6056,7 @@ Z1 CZ: anMCp/T[ 0]=96.03/4801.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.378 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.524 dryAirMass=127.15 XLGain=0.00 W=0.009349 twb=54.88 rh=0.6253 Z2 CZ: anMCp/T[ 0]=140.11/7005.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971299.43 Dair=31332.31 Nrad=69215.98 Drad=1114.72 CX=461.54 airX=9.324 + Nair=1971299.43 Dair=31332.31 Nrad=69215.99 Drad=1114.72 CX=461.54 airX=9.324 TH=63.00 TD=67.75 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.36 qIzSh=-1821 fvent=0.000 pz0=-0.0059 qsHvac=2932 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.729 mwDuctLk=0.000 mwSys=0.000 @@ -6085,7 +6085,7 @@ Z2 CZ: anMCp/T[ 0]=139.90/6995.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.836 mwDuctLk=0.000 mwSys=0.000 tdb=51.17 airX=16.325 dryAirMass=51.34 XLGain=0.00 W=0.009350 twb=50.46 rh=0.9583 Attic UZ: anMCp/T[ 0]=204.14/13030.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=61930.75 Dair=1207.35 Nrad=39434.08 Drad=777.82 CX=510.81 airX=16.325 + Nair=61930.76 Dair=1207.35 Nrad=39434.08 Drad=777.82 CX=510.81 airX=16.325 ta=51.17 tr=50.89 qIzSh=2584 fvent=0.000 pz0=-0.0008 qsHvac=0 @@ -6108,7 +6108,7 @@ Z2 CZ: anMCp/T[ 0]=139.72/6985.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.942 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 97 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 97 @@ -6117,7 +6117,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.942 mwDuctLk=0.000 mwSys=0.000 tdb=51.20 airX=16.547 dryAirMass=51.34 XLGain=0.00 W=0.009350 twb=50.47 rh=0.9575 Attic UZ: anMCp/T[ 0]=206.90/13206.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=62281.29 Dair=1213.58 Nrad=39431.00 Drad=777.61 CX=511.69 airX=16.547 + Nair=62281.29 Dair=1213.58 Nrad=39430.99 Drad=777.61 CX=511.69 airX=16.547 ta=51.20 tr=50.90 qIzSh=2614 fvent=0.000 pz0=-0.0008 qsHvac=0 @@ -6134,7 +6134,7 @@ Z1 CZ: anMCp/T[ 0]=99.46/4973.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.355 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.505 dryAirMass=127.15 XLGain=0.00 W=0.009349 twb=54.88 rh=0.6252 Z2 CZ: anMCp/T[ 0]=139.53/6976.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971198.94 Dair=31330.60 Nrad=69229.38 Drad=1114.96 CX=461.24 airX=9.305 + Nair=1971198.95 Dair=31330.60 Nrad=69229.38 Drad=1114.96 CX=461.24 airX=9.305 TH=63.00 TD=67.75 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.36 qIzSh=-1814 fvent=0.000 pz0=-0.0054 qsHvac=2925 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.049 mwDuctLk=0.000 mwSys=0.000 @@ -6171,7 +6171,7 @@ Attic UZ: anMCp/T[ 0]=212.47/13561.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=5 subhr=19 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 98 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 98 @@ -6183,7 +6183,7 @@ Thu 10-Jan hr=5 subhr=19 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.905 mwDuctLk=0.000 mwSys=0.000 tdb=64.75 airX=3.296 dryAirMass=126.73 XLGain=0.00 W=0.009350 twb=55.51 rh=0.5883 Z1 CZ: anMCp/T[ 0]=101.74/5086.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2017569.17 Dair=31196.85 Nrad=72766.62 Drad=1142.84 CX=439.96 airX=8.096 + Nair=2017569.18 Dair=31196.85 Nrad=72766.62 Drad=1142.84 CX=439.96 airX=8.096 TH=64.75 TD=68.00 TC=74.25 qhCap=20000 qcCap=-34000 ta=64.75 tr=63.97 qIzSh=-1501 fvent=0.000 pz0=-0.0053 qsHvac=2769 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.339 mwDuctLk=0.000 mwSys=0.000 @@ -6234,7 +6234,7 @@ Z1 CZ: anMCp/T[ 0]=104.02/5201.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.75 tr=63.97 qIzSh=-1534 fvent=0.000 pz0=-0.0049 qsHvac=2809 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 99 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 99 @@ -6297,7 +6297,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.702 mwDuctLk=0.000 mwSys=0.000 tdb=51.37 airX=18.138 dryAirMass=51.32 XLGain=0.00 W=0.009349 twb=50.54 rh=0.9515 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 100 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 100 @@ -6360,7 +6360,7 @@ Thu 10-Jan hr=5 subhr=26 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 101 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 101 @@ -6423,7 +6423,7 @@ Z1 CZ: anMCp/T[ 0]=112.10/5605.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.252 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 102 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 102 @@ -6486,7 +6486,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.342 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=243.40/15531.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 103 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 103 @@ -6549,7 +6549,7 @@ Thu 10-Jan hr=6 subhr=3 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 104 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 104 @@ -6612,7 +6612,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.249 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.432 dryAirMass=127.15 XLGain=0.00 W=0.009334 twb=54.86 rh=0.6243 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 105 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 105 @@ -6675,7 +6675,7 @@ Attic UZ: anMCp/T[ 0]=236.13/15064.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=66654.43 Dair=1288.73 Nrad=39481.69 Drad=774.57 CX=527.43 airX=18.898 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 106 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 106 @@ -6698,7 +6698,7 @@ Z1 CZ: anMCp/T[ 0]=109.63/5481.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.251 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.442 dryAirMass=127.16 XLGain=0.00 W=0.009322 twb=54.84 rh=0.6235 Z2 CZ: anMCp/T[ 0]=137.59/6879.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1970710.47 Dair=31322.43 Nrad=69303.81 Drad=1116.23 CX=459.54 airX=9.242 + Nair=1970710.47 Dair=31322.43 Nrad=69303.81 Drad=1116.23 CX=459.55 airX=9.242 TH=63.00 TD=67.71 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.35 qIzSh=-1789 fvent=0.000 pz0=-0.0038 qsHvac=2900 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.004 mwDuctLk=0.000 mwSys=0.000 @@ -6738,7 +6738,7 @@ Thu 10-Jan hr=6 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.148 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 107 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 107 @@ -6801,7 +6801,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.254 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=138.00/6900.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 108 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 108 @@ -6864,7 +6864,7 @@ Attic UZ: anMCp/T[ 0]=228.97/14608.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=51.59 tr=51.27 qIzSh=2796 fvent=0.000 pz0=-0.0012 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 109 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 109 @@ -6903,7 +6903,7 @@ Thu 10-Jan hr=6 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.039 mwDuctLk=0.000 mwSys=0.000 tdb=64.71 airX=3.446 dryAirMass=126.75 XLGain=0.00 W=0.009288 twb=55.40 rh=0.5854 Z1 CZ: anMCp/T[ 0]=106.37/5318.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2017760.63 Dair=31220.66 Nrad=72502.60 Drad=1138.87 CX=444.88 airX=8.246 + Nair=2017760.63 Dair=31220.66 Nrad=72502.59 Drad=1138.87 CX=444.88 airX=8.246 TH=64.71 TD=68.00 TC=74.29 qhCap=20000 qcCap=-34000 ta=64.71 tr=63.96 qIzSh=-1565 fvent=0.000 pz0=-0.0047 qsHvac=2811 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.256 mwDuctLk=0.000 mwSys=0.000 @@ -6927,7 +6927,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.991 mwDuctLk=0.000 mwSys=0.000 tdb=64.71 airX=3.406 dryAirMass=126.75 XLGain=0.00 W=0.009283 twb=55.39 rh=0.5850 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 110 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 110 @@ -6935,7 +6935,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.991 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Z1 CZ: anMCp/T[ 0]=105.15/5257.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2017634.91 Dair=31218.44 Nrad=72513.79 Drad=1139.07 CX=444.62 airX=8.206 + Nair=2017634.92 Dair=31218.44 Nrad=72513.79 Drad=1139.07 CX=444.62 airX=8.206 TH=64.71 TD=68.00 TC=74.29 qhCap=20000 qcCap=-34000 ta=64.71 tr=63.95 qIzSh=-1547 fvent=0.000 pz0=-0.0047 qsHvac=2793 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.255 mwDuctLk=0.000 mwSys=0.000 @@ -6990,7 +6990,7 @@ Z2 CZ: anMCp/T[ 0]=138.67/6933.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=1970926.02 Dair=31326.14 Nrad=69267.94 Drad=1115.67 CX=460.25 airX=9.277 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 111 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 111 @@ -7053,7 +7053,7 @@ Attic UZ: anMCp/T[ 0]=221.77/14150.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 112 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 112 @@ -7116,7 +7116,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.895 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=103.08/5154.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 113 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 113 @@ -7152,7 +7152,7 @@ Z1 CZ: anMCp/T[ 0]=102.67/5133.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.256 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.494 dryAirMass=127.18 XLGain=0.00 W=0.009230 twb=54.69 rh=0.6174 Z2 CZ: anMCp/T[ 0]=139.19/6959.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971032.26 Dair=31327.98 Nrad=69249.40 Drad=1115.39 CX=460.60 airX=9.294 + Nair=1971032.27 Dair=31327.98 Nrad=69249.40 Drad=1115.39 CX=460.60 airX=9.294 TH=63.00 TD=67.71 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.35 qIzSh=-1809 fvent=0.000 pz0=-0.0050 qsHvac=2929 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.258 mwDuctLk=0.000 mwSys=0.000 @@ -7179,7 +7179,7 @@ Z2 CZ: anMCp/T[ 0]=139.27/6963.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.71 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 114 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 114 @@ -7207,7 +7207,7 @@ Z1 CZ: anMCp/T[ 0]=101.84/5091.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.255 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.499 dryAirMass=127.18 XLGain=0.00 W=0.009218 twb=54.67 rh=0.6166 Z2 CZ: anMCp/T[ 0]=139.35/6967.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971065.02 Dair=31328.55 Nrad=69243.58 Drad=1115.30 CX=460.70 airX=9.299 + Nair=1971065.03 Dair=31328.55 Nrad=69243.58 Drad=1115.30 CX=460.70 airX=9.299 TH=63.00 TD=67.71 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.35 qIzSh=-1812 fvent=0.000 pz0=-0.0051 qsHvac=2932 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.170 mwDuctLk=0.000 mwSys=0.000 @@ -7242,7 +7242,7 @@ Attic UZ: anMCp/T[ 0]=214.58/13692.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 115 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 115 @@ -7256,7 +7256,7 @@ Thu 10-Jan hr=6 subhr=29 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.804 mwDuctLk=0.000 mwSys=0.000 tdb=64.71 airX=3.271 dryAirMass=126.76 XLGain=0.00 W=0.009219 twb=55.29 rh=0.5810 Z1 CZ: anMCp/T[ 0]=101.01/5050.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2016704.33 Dair=31203.16 Nrad=72637.22 Drad=1141.24 CX=441.71 airX=8.071 + Nair=2016704.34 Dair=31203.16 Nrad=72637.22 Drad=1141.24 CX=441.71 airX=8.071 TH=64.71 TD=68.00 TC=74.29 qhCap=20000 qcCap=-34000 ta=64.71 tr=63.94 qIzSh=-1486 fvent=0.000 pz0=-0.0055 qsHvac=2738 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.255 mwDuctLk=0.000 mwSys=0.000 @@ -7305,7 +7305,7 @@ Z1 CZ: anMCp/T[ 0]=100.00/5000.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2015239.77 Dair=31199.44 Nrad=72685.39 Drad=1141.78 CX=439.81 airX=8.038 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 116 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 116 @@ -7357,7 +7357,7 @@ Thu 10-Jan hr=7 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.714 mwDuctLk=0.000 mwSys=0.000 tdb=64.67 airX=3.206 dryAirMass=126.78 XLGain=0.00 W=0.009193 twb=55.24 rh=0.5803 Z1 CZ: anMCp/T[ 0]=99.01/4950.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2014974.79 Dair=31195.12 Nrad=72724.36 Drad=1142.42 CX=438.94 airX=8.006 + Nair=2014974.80 Dair=31195.12 Nrad=72724.36 Drad=1142.42 CX=438.94 airX=8.006 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=64.67 tr=63.94 qIzSh=-1452 fvent=0.000 pz0=-0.0057 qsHvac=2629 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.247 mwDuctLk=0.000 mwSys=0.000 @@ -7368,7 +7368,7 @@ Z2 CZ: anMCp/T[ 0]=139.90/6994.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=63.00 tr=62.37 qIzSh=-1819 fvent=0.000 pz0=-0.0055 qsHvac=2915 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 117 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 117 @@ -7389,7 +7389,7 @@ Thu 10-Jan hr=7 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.691 mwDuctLk=0.000 mwSys=0.000 tdb=64.67 airX=3.191 dryAirMass=126.78 XLGain=0.00 W=0.009186 twb=55.23 rh=0.5799 Z1 CZ: anMCp/T[ 0]=98.53/4926.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2014838.70 Dair=31192.90 Nrad=72745.89 Drad=1142.76 CX=438.49 airX=7.991 + Nair=2014838.71 Dair=31192.90 Nrad=72745.89 Drad=1142.76 CX=438.49 airX=7.991 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=64.67 tr=63.94 qIzSh=-1445 fvent=0.000 pz0=-0.0058 qsHvac=2622 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.245 mwDuctLk=0.000 mwSys=0.000 @@ -7401,7 +7401,7 @@ Z2 CZ: anMCp/T[ 0]=139.99/6999.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.827 mwDuctLk=0.000 mwSys=0.000 tdb=51.52 airX=16.605 dryAirMass=51.32 XLGain=0.00 W=0.009191 twb=50.33 rh=0.9309 Attic UZ: anMCp/T[ 0]=207.55/13239.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=63359.64 Dair=1227.97 Nrad=39807.62 Drad=777.47 CX=519.02 airX=16.605 + Nair=63359.65 Dair=1227.97 Nrad=39807.62 Drad=777.47 CX=519.02 airX=16.605 ta=51.52 tr=51.33 qIzSh=2547 fvent=0.000 pz0=-0.0013 qsHvac=0 @@ -7431,7 +7431,7 @@ Attic UZ: anMCp/T[ 0]=206.36/13164.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 118 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 118 @@ -7494,7 +7494,7 @@ Z1 CZ: anMCp/T[ 0]=96.58/4829.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 119 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 119 @@ -7557,7 +7557,7 @@ Z2 CZ: anMCp/T[ 0]=140.48/7023.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.518 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 120 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 120 @@ -7620,7 +7620,7 @@ Attic UZ: anMCp/T[ 0]=198.01/12632.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=7 subhr=13 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 121 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 121 @@ -7655,7 +7655,7 @@ Thu 10-Jan hr=7 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.470 mwDuctLk=0.000 mwSys=0.000 tdb=64.67 airX=3.031 dryAirMass=126.80 XLGain=0.00 W=0.009105 twb=55.10 rh=0.5748 Z1 CZ: anMCp/T[ 0]=93.60/4680.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2013794.97 Dair=31175.47 Nrad=72910.14 Drad=1145.26 CX=435.24 airX=7.831 + Nair=2013794.96 Dair=31175.47 Nrad=72910.14 Drad=1145.26 CX=435.24 airX=7.831 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=64.67 tr=63.94 qIzSh=-1373 fvent=0.000 pz0=-0.0064 qsHvac=2535 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.218 mwDuctLk=0.000 mwSys=0.000 @@ -7683,7 +7683,7 @@ Z1 CZ: anMCp/T[ 0]=93.10/4654.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.67 tr=63.94 qIzSh=-1365 fvent=0.000 pz0=-0.0065 qsHvac=2523 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 122 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 122 @@ -7746,7 +7746,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.152 mwDuctLk=0.000 mwSys=0.000 tdb=51.35 airX=15.352 dryAirMass=51.34 XLGain=0.00 W=0.009083 twb=50.08 rh=0.9255 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 123 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 123 @@ -7809,7 +7809,7 @@ Thu 10-Jan hr=7 subhr=20 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 124 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 124 @@ -7826,7 +7826,7 @@ Z1 CZ: anMCp/T[ 0]=90.55/4527.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.199 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.555 dryAirMass=127.22 XLGain=0.00 W=0.009024 twb=54.36 rh=0.6038 Z2 CZ: anMCp/T[ 0]=141.16/7057.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971348.71 Dair=31332.01 Nrad=69350.13 Drad=1115.21 CX=460.02 airX=9.355 + Nair=1971348.70 Dair=31332.01 Nrad=69350.13 Drad=1115.21 CX=460.02 airX=9.355 TH=63.00 TD=67.67 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.42 qIzSh=-1835 fvent=0.000 pz0=-0.0067 qsHvac=2833 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.997 mwDuctLk=0.000 mwSys=0.000 @@ -7872,7 +7872,7 @@ Z1 CZ: anMCp/T[ 0]=89.53/4476.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.192 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 125 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 125 @@ -7898,7 +7898,7 @@ Thu 10-Jan hr=7 subhr=23 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.268 mwDuctLk=0.000 mwSys=0.000 tdb=64.67 airX=2.882 dryAirMass=126.81 XLGain=0.00 W=0.009026 twb=54.97 rh=0.5699 Z1 CZ: anMCp/T[ 0]=89.02/4451.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2012775.21 Dair=31157.55 Nrad=73181.58 Drad=1148.18 CX=431.80 airX=7.682 + Nair=2012775.22 Dair=31157.55 Nrad=73181.58 Drad=1148.18 CX=431.80 airX=7.682 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=64.67 tr=63.99 qIzSh=-1306 fvent=0.000 pz0=-0.0070 qsHvac=2371 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.188 mwDuctLk=0.000 mwSys=0.000 @@ -7910,7 +7910,7 @@ Z2 CZ: anMCp/T[ 0]=141.33/7066.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.844 mwDuctLk=0.000 mwSys=0.000 tdb=51.26 airX=14.775 dryAirMass=51.36 XLGain=0.00 W=0.009029 twb=49.95 rh=0.9230 Attic UZ: anMCp/T[ 0]=184.82/11792.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=60329.06 Dair=1176.56 Nrad=39933.19 Drad=779.74 CX=509.84 airX=14.775 + Nair=60329.07 Dair=1176.56 Nrad=39933.19 Drad=779.74 CX=509.84 airX=14.775 ta=51.26 tr=51.23 qIzSh=2318 fvent=0.000 pz0=-0.0011 qsHvac=0 @@ -7927,7 +7927,7 @@ Z1 CZ: anMCp/T[ 0]=88.51/4425.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.185 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.563 dryAirMass=127.22 XLGain=0.00 W=0.008986 twb=54.30 rh=0.6013 Z2 CZ: anMCp/T[ 0]=141.39/7069.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971343.30 Dair=31331.22 Nrad=69428.47 Drad=1115.59 CX=459.78 airX=9.363 + Nair=1971343.29 Dair=31331.22 Nrad=69428.47 Drad=1115.59 CX=459.78 airX=9.363 TH=63.00 TD=67.67 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.46 qIzSh=-1838 fvent=0.000 pz0=-0.0070 qsHvac=2772 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.793 mwDuctLk=0.000 mwSys=0.000 @@ -7935,7 +7935,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.793 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=183.65/11717.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 126 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 126 @@ -7953,7 +7953,7 @@ Thu 10-Jan hr=7 subhr=25 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.223 mwDuctLk=0.000 mwSys=0.000 tdb=64.67 airX=2.849 dryAirMass=126.81 XLGain=0.00 W=0.009008 twb=54.94 rh=0.5688 Z1 CZ: anMCp/T[ 0]=87.99/4399.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2012527.30 Dair=31153.11 Nrad=73259.90 Drad=1148.97 CX=430.91 airX=7.649 + Nair=2012527.31 Dair=31153.11 Nrad=73259.90 Drad=1148.97 CX=430.91 airX=7.649 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=64.67 tr=64.01 qIzSh=-1291 fvent=0.000 pz0=-0.0072 qsHvac=2324 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.181 mwDuctLk=0.000 mwSys=0.000 @@ -7976,7 +7976,7 @@ Thu 10-Jan hr=7 subhr=26 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.201 mwDuctLk=0.000 mwSys=0.000 tdb=64.67 airX=2.832 dryAirMass=126.82 XLGain=0.00 W=0.008999 twb=54.93 rh=0.5682 Z1 CZ: anMCp/T[ 0]=87.47/4373.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2012399.58 Dair=31150.81 Nrad=73301.43 Drad=1149.38 CX=430.46 airX=7.632 + Nair=2012399.58 Dair=31150.81 Nrad=73301.42 Drad=1149.38 CX=430.46 airX=7.632 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ta=64.67 tr=64.02 qIzSh=-1283 fvent=0.000 pz0=-0.0072 qsHvac=2299 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.178 mwDuctLk=0.000 mwSys=0.000 @@ -7998,7 +7998,7 @@ Thu 10-Jan hr=7 subhr=27 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 127 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 127 @@ -8061,7 +8061,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.166 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.571 dryAirMass=127.23 XLGain=0.00 W=0.008937 twb=54.23 rh=0.5981 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 128 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 128 @@ -8124,7 +8124,7 @@ Attic UZ: anMCp/T[ 0]=175.60/11201.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=59140.37 Dair=1154.49 Nrad=39972.02 Drad=780.80 CX=503.81 airX=14.035 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 129 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 129 @@ -8187,7 +8187,7 @@ Thu 10-Jan hr=8 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.044 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 130 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 130 @@ -8250,14 +8250,14 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.169 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=141.95/7097.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 131 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 131 1Z Test ------------------------------------------------------------------------------ - Nair=1973443.78 Dair=31356.78 Nrad=69609.03 Drad=1110.31 CX=467.14 airX=9.380 + Nair=1973443.79 Dair=31356.78 Nrad=69609.03 Drad=1110.31 CX=467.14 airX=9.380 TH=63.00 TD=67.63 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.78 qIzSh=-1845 fvent=0.000 pz0=-0.0077 qsHvac=2134 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.463 mwDuctLk=0.000 mwSys=0.000 @@ -8313,7 +8313,7 @@ Attic UZ: anMCp/T[ 0]=179.85/11336.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=51.72 tr=51.44 qIzSh=2034 fvent=0.000 pz0=-0.0017 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 132 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 132 @@ -8376,7 +8376,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.986 mwDuctLk=0.000 mwSys=0.000 tdb=64.63 airX=2.657 dryAirMass=126.85 XLGain=0.00 W=0.008902 twb=54.76 rh=0.5630 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 133 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 133 @@ -8396,7 +8396,7 @@ Z2 CZ: anMCp/T[ 0]=142.25/7112.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.745 mwDuctLk=0.000 mwSys=0.000 tdb=52.02 airX=14.794 dryAirMass=51.29 XLGain=0.00 W=0.008894 twb=50.02 rh=0.8854 Attic UZ: anMCp/T[ 0]=184.81/11563.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=60567.21 Dair=1160.20 Nrad=40199.06 Drad=783.03 CX=499.09 airX=14.794 + Nair=60567.20 Dair=1160.20 Nrad=40199.06 Drad=783.03 CX=499.09 airX=14.794 ta=52.02 tr=51.60 qIzSh=1948 fvent=0.000 pz0=-0.0020 qsHvac=0 @@ -8439,7 +8439,7 @@ Z2 CZ: anMCp/T[ 0]=142.38/7119.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=1973960.69 Dair=31358.72 Nrad=69977.87 Drad=1110.33 CX=469.36 airX=9.394 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 134 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 134 @@ -8502,7 +8502,7 @@ Attic UZ: anMCp/T[ 0]=191.89/11896.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 135 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 135 @@ -8565,7 +8565,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.934 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=80.78/4039.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 136 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 136 @@ -8628,7 +8628,7 @@ Z2 CZ: anMCp/T[ 0]=142.88/7143.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.63 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 137 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 137 @@ -8691,7 +8691,7 @@ Attic UZ: anMCp/T[ 0]=205.01/12533.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 138 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 138 @@ -8754,7 +8754,7 @@ Z1 CZ: anMCp/T[ 0]=80.03/4001.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2012001.74 Dair=31141.06 Nrad=74903.02 Drad=1150.86 CX=435.23 airX=7.390 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 139 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 139 @@ -8766,7 +8766,7 @@ Z1 CZ: anMCp/T[ 0]=80.03/4001.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.195 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.622 dryAirMass=127.25 XLGain=0.00 W=0.008844 twb=54.08 rh=0.5920 Z2 CZ: anMCp/T[ 0]=143.25/7162.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1974816.81 Dair=31361.92 Nrad=70626.67 Drad=1111.02 CX=472.07 airX=9.422 + Nair=1974816.81 Dair=31361.92 Nrad=70626.68 Drad=1111.02 CX=472.07 airX=9.422 TH=63.00 TD=67.63 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=63.40 qIzSh=-1862 fvent=0.000 pz0=-0.0088 qsHvac=796 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.653 mwDuctLk=0.000 mwSys=0.000 @@ -8817,7 +8817,7 @@ Z2 CZ: anMCp/T[ 0]=143.39/7169.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=63.00 tr=63.46 qIzSh=-1864 fvent=0.000 pz0=-0.0089 qsHvac=663 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 140 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 140 @@ -8880,7 +8880,7 @@ Attic UZ: anMCp/T[ 0]=218.03/13177.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 141 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 141 @@ -8943,7 +8943,7 @@ Z1 CZ: anMCp/T[ 0]=81.07/4063.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 142 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 142 @@ -9006,7 +9006,7 @@ Z2 CZ: anMCp/T[ 0]=142.10/7134.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.270 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 143 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 143 @@ -9049,7 +9049,7 @@ Thu 10-Jan hr=9 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.990 mwDuctLk=0.000 mwSys=0.000 tdb=64.62 airX=2.660 dryAirMass=126.86 XLGain=0.00 W=0.008849 twb=54.67 rh=0.5599 Z1 CZ: anMCp/T[ 0]=82.19/4133.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1982991.95 Dair=30691.51 Nrad=81675.76 Drad=1244.38 CX=317.21 airX=2.660 + Nair=1982991.95 Dair=30691.51 Nrad=81675.75 Drad=1244.38 CX=317.21 airX=2.660 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=64.62 tr=65.43 qIzSh=-1177 fvent=0.000 pz0=-0.0089 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.149 mwDuctLk=0.000 mwSys=0.000 @@ -9069,7 +9069,7 @@ Attic UZ: anMCp/T[ 0]=232.78/13987.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=9 subhr=7 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 144 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 144 @@ -9081,7 +9081,7 @@ Thu 10-Jan hr=9 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.003 mwDuctLk=0.000 mwSys=0.000 tdb=64.62 airX=2.670 dryAirMass=126.86 XLGain=0.00 W=0.008850 twb=54.68 rh=0.5599 Z1 CZ: anMCp/T[ 0]=82.51/4153.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1983179.23 Dair=30693.34 Nrad=81738.02 Drad=1244.24 CX=317.82 airX=2.670 + Nair=1983179.24 Dair=30693.34 Nrad=81738.02 Drad=1244.24 CX=317.82 airX=2.670 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=64.62 tr=65.48 qIzSh=-1179 fvent=0.000 pz0=-0.0089 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.142 mwDuctLk=0.000 mwSys=0.000 @@ -9132,7 +9132,7 @@ Z1 CZ: anMCp/T[ 0]=83.15/4192.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.63 tr=65.57 qIzSh=-1182 fvent=0.000 pz0=-0.0088 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 145 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 145 @@ -9195,7 +9195,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.942 mwDuctLk=0.000 mwSys=0.000 tdb=56.76 airX=19.843 dryAirMass=50.82 XLGain=0.00 W=0.008865 twb=51.83 rh=0.7413 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 146 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 146 @@ -9258,7 +9258,7 @@ Thu 10-Jan hr=9 subhr=14 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 147 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 147 @@ -9321,7 +9321,7 @@ Z1 CZ: anMCp/T[ 0]=85.39/4330.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.085 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 148 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 148 @@ -9384,7 +9384,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.600 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=262.81/15680.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 149 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 149 @@ -9447,7 +9447,7 @@ Thu 10-Jan hr=9 subhr=21 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 150 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 150 @@ -9469,7 +9469,7 @@ Z2 CZ: anMCp/T[ 0]=138.02/7028.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.864 mwDuctLk=0.000 mwSys=0.000 tdb=58.87 airX=21.869 dryAirMass=50.61 XLGain=0.00 W=0.008910 twb=52.68 rh=0.6903 Attic UZ: anMCp/T[ 0]=269.60/16073.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=81040.21 Dair=1352.29 Nrad=42862.13 Drad=787.09 CX=550.62 airX=21.869 + Nair=81040.22 Dair=1352.29 Nrad=42862.13 Drad=787.09 CX=550.62 airX=21.869 ta=58.87 tr=56.27 qIzSh=202 fvent=0.000 pz0=-0.0097 qsHvac=0 @@ -9510,7 +9510,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.059 mwDuctLk=0.000 mwSys=0.000 tdb=63.15 airX=4.445 dryAirMass=127.20 XLGain=0.00 W=0.008920 twb=54.25 rh=0.5939 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 151 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 151 @@ -9535,7 +9535,7 @@ Thu 10-Jan hr=9 subhr=24 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.226 mwDuctLk=0.000 mwSys=0.000 tdb=64.89 airX=2.842 dryAirMass=126.78 XLGain=0.00 W=0.008910 twb=54.87 rh=0.5581 Z1 CZ: anMCp/T[ 0]=87.75/4479.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1993420.91 Dair=30726.88 Nrad=82803.01 Drad=1242.31 CX=327.43 airX=2.842 + Nair=1993420.92 Dair=30726.88 Nrad=82803.01 Drad=1242.31 CX=327.43 airX=2.842 TH=64.58 TD=68.00 TC=74.42 qhCap=20000 qcCap=-34000 ta=64.89 tr=66.28 qIzSh=-1215 fvent=0.000 pz0=-0.0087 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.056 mwDuctLk=0.000 mwSys=0.000 @@ -9573,7 +9573,7 @@ Attic UZ: anMCp/T[ 0]=277.92/16563.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=83234.80 Dair=1369.77 Nrad=43349.01 Drad=788.33 CX=555.72 airX=22.579 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 152 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 152 @@ -9636,7 +9636,7 @@ Thu 10-Jan hr=9 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.271 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 153 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 153 @@ -9699,7 +9699,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.057 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=136.96/7024.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 154 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 154 @@ -9712,7 +9712,7 @@ Z2 CZ: anMCp/T[ 0]=136.96/7024.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.587 mwDuctLk=0.000 mwSys=0.000 tdb=60.57 airX=23.425 dryAirMass=50.44 XLGain=0.00 W=0.008957 twb=53.37 rh=0.6536 Attic UZ: anMCp/T[ 0]=287.82/17159.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=85845.51 Dair=1390.88 Nrad=44023.58 Drad=790.61 CX=560.70 airX=23.425 + Nair=85845.52 Dair=1390.88 Nrad=44023.58 Drad=790.61 CX=560.70 airX=23.425 ta=60.57 tr=57.71 qIzSh=-273 fvent=0.000 pz0=-0.0114 qsHvac=0 @@ -9746,7 +9746,7 @@ Thu 10-Jan hr=10 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.351 mwDuctLk=0.000 mwSys=0.000 tdb=65.13 airX=2.931 dryAirMass=126.72 XLGain=0.00 W=0.008953 twb=55.02 rh=0.5561 Z1 CZ: anMCp/T[ 0]=90.48/4644.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2001480.13 Dair=30739.93 Nrad=83391.07 Drad=1242.34 CX=331.77 airX=2.931 + Nair=2001480.14 Dair=30739.93 Nrad=83391.07 Drad=1242.34 CX=331.77 airX=2.931 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=65.13 tr=66.70 qIzSh=-1248 fvent=0.000 pz0=-0.0086 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.074 mwDuctLk=0.000 mwSys=0.000 @@ -9762,7 +9762,7 @@ Attic UZ: anMCp/T[ 0]=292.68/17455.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=61.01 tr=58.07 qIzSh=-401 fvent=0.000 pz0=-0.0118 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 155 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 155 @@ -9825,7 +9825,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.433 mwDuctLk=0.000 mwSys=0.000 tdb=65.23 airX=2.990 dryAirMass=126.69 XLGain=0.00 W=0.008979 twb=55.10 rh=0.5556 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 156 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 156 @@ -9888,7 +9888,7 @@ Z2 CZ: anMCp/T[ 0]=137.24/7061.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=1966942.93 Dair=30960.73 Nrad=78728.61 Drad=1198.73 CX=374.48 airX=4.434 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 157 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 157 @@ -9951,7 +9951,7 @@ Attic UZ: anMCp/T[ 0]=314.57/18774.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 158 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 158 @@ -9966,7 +9966,7 @@ Thu 10-Jan hr=10 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.575 mwDuctLk=0.000 mwSys=0.000 tdb=65.41 airX=3.090 dryAirMass=126.63 XLGain=0.00 W=0.009034 twb=55.25 rh=0.5553 Z1 CZ: anMCp/T[ 0]=95.30/4910.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2012392.38 Dair=30773.87 Nrad=83741.21 Drad=1238.96 CX=339.78 airX=3.090 + Nair=2012392.37 Dair=30773.87 Nrad=83741.21 Drad=1238.96 CX=339.78 airX=3.090 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=65.41 tr=67.12 qIzSh=-1324 fvent=0.000 pz0=-0.0086 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.156 mwDuctLk=0.000 mwSys=0.000 @@ -10014,7 +10014,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.630 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=96.47/4975.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 159 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 159 @@ -10077,7 +10077,7 @@ Z2 CZ: anMCp/T[ 0]=137.80/7113.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.54 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 160 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 160 @@ -10122,7 +10122,7 @@ Thu 10-Jan hr=10 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.737 mwDuctLk=0.000 mwSys=0.000 tdb=65.65 airX=3.202 dryAirMass=126.56 XLGain=0.00 W=0.009110 twb=55.46 rh=0.5553 Z1 CZ: anMCp/T[ 0]=98.70/5099.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2021034.59 Dair=30795.30 Nrad=84049.87 Drad=1237.12 CX=345.00 airX=3.202 + Nair=2021034.58 Dair=30795.30 Nrad=84049.87 Drad=1237.12 CX=345.00 airX=3.202 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=65.65 tr=67.44 qIzSh=-1380 fvent=0.000 pz0=-0.0085 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.224 mwDuctLk=0.000 mwSys=0.000 @@ -10140,7 +10140,7 @@ Attic UZ: anMCp/T[ 0]=334.95/20024.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 161 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 161 @@ -10203,7 +10203,7 @@ Z1 CZ: anMCp/T[ 0]=100.29/5188.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2025484.82 Dair=30804.89 Nrad=84218.56 Drad=1236.41 CX=347.37 airX=3.254 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 162 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 162 @@ -10266,7 +10266,7 @@ Z2 CZ: anMCp/T[ 0]=138.52/7173.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.10 tr=65.89 qIzSh=-1705 fvent=0.000 pz0=-0.0082 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 163 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 163 @@ -10293,7 +10293,7 @@ Z1 CZ: anMCp/T[ 0]=101.79/5274.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.297 mwDuctLk=0.000 mwSys=0.000 tdb=64.14 airX=4.485 dryAirMass=126.90 XLGain=0.00 W=0.009226 twb=55.10 rh=0.5938 Z2 CZ: anMCp/T[ 0]=138.63/7182.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1986083.62 Dair=30975.56 Nrad=79831.71 Drad=1200.27 CX=379.37 airX=4.485 + Nair=1986083.61 Dair=30975.56 Nrad=79831.71 Drad=1200.27 CX=379.37 airX=4.485 TH=63.00 TD=67.54 TC=75.00 qhCap=20000 qcCap=-34000 ta=64.14 tr=65.94 qIzSh=-1709 fvent=0.000 pz0=-0.0082 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.286 mwDuctLk=0.000 mwSys=0.000 @@ -10329,7 +10329,7 @@ Attic UZ: anMCp/T[ 0]=352.64/21136.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 164 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 164 @@ -10392,7 +10392,7 @@ Z1 CZ: anMCp/T[ 0]=103.70/5383.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 165 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 165 @@ -10455,7 +10455,7 @@ Z2 CZ: anMCp/T[ 0]=139.36/7240.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.927 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 166 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 166 @@ -10518,7 +10518,7 @@ Attic UZ: anMCp/T[ 0]=367.07/22087.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=11 subhr=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 167 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 167 @@ -10530,7 +10530,7 @@ Thu 10-Jan hr=11 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.082 mwDuctLk=0.000 mwSys=0.000 tdb=66.31 airX=3.431 dryAirMass=126.36 XLGain=0.00 W=0.009319 twb=56.03 rh=0.5549 Z1 CZ: anMCp/T[ 0]=105.59/5511.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2044237.85 Dair=30837.28 Nrad=85103.22 Drad=1234.86 CX=358.89 airX=3.431 + Nair=2044237.86 Dair=30837.28 Nrad=85103.22 Drad=1234.86 CX=358.89 airX=3.431 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=66.31 tr=68.33 qIzSh=-1491 fvent=0.000 pz0=-0.0084 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.352 mwDuctLk=0.000 mwSys=0.000 @@ -10581,7 +10581,7 @@ Z1 CZ: anMCp/T[ 0]=106.28/5570.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=66.42 tr=68.46 qIzSh=-1489 fvent=0.000 pz0=-0.0082 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 168 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 168 @@ -10644,7 +10644,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.457 mwDuctLk=0.000 mwSys=0.000 tdb=68.60 airX=31.004 dryAirMass=49.64 XLGain=0.00 W=0.009393 twb=56.90 rh=0.5174 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 169 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 169 @@ -10707,7 +10707,7 @@ Thu 10-Jan hr=11 subhr=8 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 170 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 170 @@ -10718,7 +10718,7 @@ Thu 10-Jan hr=11 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.195 mwDuctLk=0.000 mwSys=0.000 tdb=66.69 airX=3.517 dryAirMass=126.26 XLGain=0.00 W=0.009387 twb=56.26 rh=0.5518 Z1 CZ: anMCp/T[ 0]=108.16/5727.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2056736.36 Dair=30852.41 Nrad=85686.17 Drad=1234.72 CX=363.18 airX=3.517 + Nair=2056736.35 Dair=30852.41 Nrad=85686.17 Drad=1234.72 CX=363.18 airX=3.517 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=66.69 tr=68.78 qIzSh=-1486 fvent=0.000 pz0=-0.0078 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.235 mwDuctLk=0.000 mwSys=0.000 @@ -10770,7 +10770,7 @@ Z1 CZ: anMCp/T[ 0]=108.90/5790.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.202 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 171 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 171 @@ -10833,7 +10833,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.002 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=387.21/23642.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 172 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 172 @@ -10874,13 +10874,13 @@ Thu 10-Jan hr=11 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.291 mwDuctLk=0.000 mwSys=0.000 tdb=67.03 airX=3.590 dryAirMass=126.16 XLGain=0.00 W=0.009428 twb=56.43 rh=0.5478 Z1 CZ: anMCp/T[ 0]=110.32/5913.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2068079.68 Dair=30863.67 Nrad=86208.45 Drad=1234.94 CX=366.43 airX=3.590 + Nair=2068079.69 Dair=30863.67 Nrad=86208.45 Drad=1234.94 CX=366.43 airX=3.590 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=67.03 tr=69.17 qIzSh=-1482 fvent=0.000 pz0=-0.0074 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.137 mwDuctLk=0.000 mwSys=0.000 tdb=65.30 airX=4.283 dryAirMass=126.58 XLGain=0.00 W=0.009443 twb=55.86 rh=0.5824 Z2 CZ: anMCp/T[ 0]=132.05/7077.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2021024.72 Dair=30962.07 Nrad=82253.07 Drad=1209.15 CX=383.82 airX=4.283 + Nair=2021024.72 Dair=30962.07 Nrad=82253.06 Drad=1209.15 CX=383.82 airX=4.283 TH=63.00 TD=67.50 TC=75.00 qhCap=20000 qcCap=-34000 ta=65.30 tr=67.37 qIzSh=-1545 fvent=0.000 pz0=-0.0068 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.145 mwDuctLk=0.000 mwSys=0.000 @@ -10896,7 +10896,7 @@ Thu 10-Jan hr=11 subhr=15 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 173 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 173 @@ -10959,7 +10959,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.089 mwDuctLk=0.000 mwSys=0.000 tdb=65.49 airX=4.239 dryAirMass=126.53 XLGain=0.00 W=0.009458 twb=55.96 rh=0.5795 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 174 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 174 @@ -10973,7 +10973,7 @@ Z2 CZ: anMCp/T[ 0]=130.62/7043.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.344 mwDuctLk=0.000 mwSys=0.000 tdb=71.52 airX=32.846 dryAirMass=49.37 XLGain=0.00 W=0.009463 twb=57.98 rh=0.4719 Attic UZ: anMCp/T[ 0]=394.93/24269.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=116138.93 Dair=1588.48 Nrad=52421.47 Drad=814.96 CX=622.02 airX=32.846 + Nair=116138.94 Dair=1588.48 Nrad=52421.47 Drad=814.96 CX=622.02 airX=32.846 ta=71.52 tr=67.44 qIzSh=-3974 fvent=0.000 pz0=-0.0210 qsHvac=0 @@ -11022,7 +11022,7 @@ Attic UZ: anMCp/T[ 0]=397.93/24518.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=117225.54 Dair=1593.66 Nrad=52846.51 Drad=816.24 CX=624.10 airX=33.123 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 175 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 175 @@ -11085,7 +11085,7 @@ Thu 10-Jan hr=11 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.409 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 176 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 176 @@ -11123,7 +11123,7 @@ Z1 CZ: anMCp/T[ 0]=113.17/6175.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.232 mwDuctLk=0.000 mwSys=0.000 tdb=65.87 airX=4.347 dryAirMass=126.43 XLGain=0.00 W=0.009488 twb=56.13 rh=0.5736 Z2 CZ: anMCp/T[ 0]=133.85/7304.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2038696.80 Dair=30962.81 Nrad=83218.48 Drad=1212.57 CX=384.86 airX=4.347 + Nair=2038696.79 Dair=30962.81 Nrad=83218.48 Drad=1212.57 CX=384.86 airX=4.347 TH=63.00 TD=67.50 TC=75.00 qhCap=20000 qcCap=-34000 ta=65.87 tr=67.96 qIzSh=-1512 fvent=0.000 pz0=-0.0059 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.711 mwDuctLk=0.000 mwSys=0.000 @@ -11148,7 +11148,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.229 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=133.68/7309.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 177 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 177 @@ -11211,7 +11211,7 @@ Attic UZ: anMCp/T[ 0]=406.39/25273.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=73.37 tr=69.32 qIzSh=-4541 fvent=0.000 pz0=-0.0220 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 178 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 178 @@ -11274,7 +11274,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.505 mwDuctLk=0.000 mwSys=0.000 tdb=67.95 airX=3.742 dryAirMass=125.93 XLGain=0.00 W=0.009516 twb=56.87 rh=0.5364 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 179 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 179 @@ -11282,7 +11282,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.505 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Z1 CZ: anMCp/T[ 0]=114.76/6337.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2097782.83 Dair=30885.14 Nrad=87499.03 Drad=1236.56 CX=372.96 airX=3.742 + Nair=2097782.82 Dair=30885.14 Nrad=87499.03 Drad=1236.56 CX=372.96 airX=3.742 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=67.95 tr=70.11 qIzSh=-1461 fvent=0.000 pz0=-0.0063 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.341 mwDuctLk=0.000 mwSys=0.000 @@ -11337,7 +11337,7 @@ Z2 CZ: anMCp/T[ 0]=137.47/7609.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2055863.04 Dair=30978.97 Nrad=83880.38 Drad=1212.88 CX=390.66 airX=4.469 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 180 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 180 @@ -11400,7 +11400,7 @@ Attic UZ: anMCp/T[ 0]=413.04/25888.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 181 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 181 @@ -11463,7 +11463,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.579 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=115.65/6439.5 anMCp/T[ 1]=0.00/0.0 ventUt=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 182 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 182 @@ -11526,7 +11526,7 @@ Z2 CZ: anMCp/T[ 0]=138.87/7750.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.46 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 183 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 183 @@ -11589,7 +11589,7 @@ Attic UZ: anMCp/T[ 0]=418.82/26423.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 184 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 184 @@ -11615,7 +11615,7 @@ Z2 CZ: anMCp/T[ 0]=139.38/7807.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.631 mwDuctLk=0.000 mwSys=0.000 tdb=75.84 airX=35.187 dryAirMass=48.95 XLGain=0.00 W=0.009655 twb=59.70 rh=0.4165 Attic UZ: anMCp/T[ 0]=419.55/26494.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=126225.78 Dair=1632.72 Nrad=57471.58 Drad=830.32 CX=642.39 airX=35.187 + Nair=126225.79 Dair=1632.72 Nrad=57471.58 Drad=830.32 CX=642.39 airX=35.187 ta=75.84 tr=72.11 qIzSh=-5324 fvent=0.000 pz0=-0.0235 qsHvac=0 @@ -11652,7 +11652,7 @@ Z1 CZ: anMCp/T[ 0]=116.37/6533.5 anMCp/T[ 1]=0.00/0.0 ventUt=1 Nair=2125324.81 Dair=30893.33 Nrad=88782.92 Drad=1239.87 CX=378.49 airX=3.801 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 185 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 185 @@ -11664,7 +11664,7 @@ Z1 CZ: anMCp/T[ 0]=116.37/6533.5 anMCp/T[ 1]=0.00/0.0 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.579 mwDuctLk=0.000 mwSys=0.000 tdb=67.17 airX=4.549 dryAirMass=126.09 XLGain=0.00 W=0.009664 twb=56.82 rh=0.5588 Z2 CZ: anMCp/T[ 0]=139.69/7842.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2080725.74 Dair=30989.92 Nrad=84942.01 Drad=1215.18 CX=394.66 airX=4.549 + Nair=2080725.73 Dair=30989.92 Nrad=84942.01 Drad=1215.18 CX=394.66 airX=4.549 TH=63.00 TD=67.46 TC=75.00 qhCap=20000 qcCap=-34000 ta=67.17 tr=69.23 qIzSh=-1540 fvent=0.000 pz0=-0.0054 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.725 mwDuctLk=0.000 mwSys=0.000 @@ -11715,7 +11715,7 @@ Z2 CZ: anMCp/T[ 0]=139.98/7877.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=67.30 tr=69.35 qIzSh=-1543 fvent=0.000 pz0=-0.0054 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 186 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 186 @@ -11778,7 +11778,7 @@ Attic UZ: anMCp/T[ 0]=423.39/26888.5 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 187 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 187 @@ -11837,11 +11837,11 @@ Thu 10-Jan hr=12 subhr=20 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=21.450 mwDuctLk=0.000 mwSys=0.000 tdb=68.93 airX=17.403 dryAirMass=125.64 XLGain=0.00 W=0.009790 twb=57.59 rh=0.5325 Z1 CZ: anMCp/T[ 0]=116.70/6605.8 anMCp/T[ 1]=532.60/30148.2 ventUt=1 - Nair=2157645.90 Dair=31242.29 Nrad=84112.66 Drad=1169.17 CX=473.40 airX=17.403 + Nair=2157645.91 Dair=31242.29 Nrad=84112.66 Drad=1169.17 CX=473.40 airX=17.403 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 188 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 188 @@ -11869,7 +11869,7 @@ Thu 10-Jan hr=12 subhr=21 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=21.320 mwDuctLk=0.000 mwSys=0.000 tdb=68.89 airX=17.276 dryAirMass=125.65 XLGain=0.00 W=0.009808 twb=57.61 rh=0.5342 Z1 CZ: anMCp/T[ 0]=116.62/6608.9 anMCp/T[ 1]=528.72/29963.6 ventUt=1 - Nair=2173255.15 Dair=31488.52 Nrad=80378.53 Drad=1117.60 CX=539.30 airX=17.276 + Nair=2173255.16 Dair=31488.52 Nrad=80378.53 Drad=1117.60 CX=539.30 airX=17.276 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=68.89 tr=70.93 qIzSh=-6461 fvent=1.000 pz0=-0.0048 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.660 mwDuctLk=0.000 mwSys=0.000 @@ -11892,7 +11892,7 @@ Thu 10-Jan hr=12 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=21.218 mwDuctLk=0.000 mwSys=0.000 tdb=68.88 airX=17.173 dryAirMass=125.65 XLGain=0.00 W=0.009822 twb=57.62 rh=0.5353 Z1 CZ: anMCp/T[ 0]=116.56/6613.4 anMCp/T[ 1]=525.56/29819.2 ventUt=1 - Nair=2188022.95 Dair=31711.94 Nrad=76954.03 Drad=1070.73 CX=598.69 airX=17.173 + Nair=2188022.96 Dair=31711.94 Nrad=76954.03 Drad=1070.73 CX=598.69 airX=17.173 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=68.88 tr=70.80 qIzSh=-6380 fvent=1.000 pz0=-0.0047 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.631 mwDuctLk=0.000 mwSys=0.000 @@ -11904,7 +11904,7 @@ Z2 CZ: anMCp/T[ 0]=140.77/7986.8 anMCp/T[ 1]=362.40/20561.7 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.359 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 189 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 189 @@ -11967,7 +11967,7 @@ Attic UZ: anMCp/T[ 0]=426.01/27129.9 anMCp/T[ 1]=431.48/27537.0 ventUt=0 Thu 10-Jan hr=12 subhr=25 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 190 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 190 @@ -12030,7 +12030,7 @@ Z1 CZ: anMCp/T[ 0]=116.34/6639.5 anMCp/T[ 1]=513.79/29321.0 ventUt=1 ta=68.84 tr=70.57 qIzSh=-6049 fvent=1.000 pz0=-0.0044 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 191 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 191 @@ -12057,7 +12057,7 @@ Thu 10-Jan hr=12 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=20.796 mwDuctLk=0.000 mwSys=0.000 tdb=68.83 airX=16.711 dryAirMass=125.64 XLGain=0.00 W=0.009895 twb=57.71 rh=0.5401 Z1 CZ: anMCp/T[ 0]=116.28/6643.8 anMCp/T[ 1]=511.42/29219.4 ventUt=1 - Nair=2194509.32 Dair=31830.71 Nrad=74768.62 Drad=1044.51 CX=629.12 airX=16.711 + Nair=2194509.32 Dair=31830.71 Nrad=74768.61 Drad=1044.51 CX=629.12 airX=16.711 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=68.83 tr=70.55 qIzSh=-5983 fvent=1.000 pz0=-0.0044 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.525 mwDuctLk=0.000 mwSys=0.000 @@ -12086,14 +12086,14 @@ Z1 CZ: anMCp/T[ 0]=116.22/6648.0 anMCp/T[ 1]=509.04/29117.1 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.504 mwDuctLk=0.000 mwSys=0.000 tdb=67.73 airX=11.617 dryAirMass=125.91 XLGain=0.00 W=0.009897 twb=57.35 rh=0.5615 Z2 CZ: anMCp/T[ 0]=141.20/8076.8 anMCp/T[ 1]=356.27/20378.6 ventUt=1 - Nair=2137938.17 Dair=31545.40 Nrad=77519.96 Drad=1102.69 CX=543.22 airX=11.617 + Nair=2137938.16 Dair=31545.40 Nrad=77519.96 Drad=1102.69 CX=543.22 airX=11.617 TH=63.00 TD=67.46 TC=75.00 qhCap=20000 qcCap=-34000 ta=67.73 tr=69.45 qIzSh=-3752 fvent=1.000 pz0=-0.0047 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.577 mwDuctLk=0.000 mwSys=0.000 tdb=77.98 airX=36.428 dryAirMass=48.74 XLGain=0.00 W=0.009900 twb=60.71 rh=0.3970 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 192 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 192 @@ -12141,7 +12141,7 @@ Z1 CZ: anMCp/T[ 0]=116.18/6661.0 anMCp/T[ 1]=504.25/28909.5 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.432 mwDuctLk=0.000 mwSys=0.000 tdb=67.78 airX=11.557 dryAirMass=125.89 XLGain=0.00 W=0.009911 twb=57.39 rh=0.5613 Z2 CZ: anMCp/T[ 0]=141.40/8106.8 anMCp/T[ 1]=354.35/20315.8 ventUt=1 - Nair=2139294.86 Dair=31540.82 Nrad=77576.97 Drad=1103.75 CX=545.23 airX=11.557 + Nair=2139294.85 Dair=31540.82 Nrad=77576.97 Drad=1103.75 CX=545.23 airX=11.557 TH=63.00 TD=67.42 TC=75.00 qhCap=20000 qcCap=-34000 ta=67.78 tr=69.46 qIzSh=-3704 fvent=1.000 pz0=-0.0047 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.616 mwDuctLk=0.000 mwSys=0.000 @@ -12156,7 +12156,7 @@ Thu 10-Jan hr=13 subhr=2 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 193 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 193 @@ -12196,7 +12196,7 @@ Z1 CZ: anMCp/T[ 0]=116.08/6670.5 anMCp/T[ 1]=499.31/28692.3 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.353 mwDuctLk=0.000 mwSys=0.000 tdb=67.84 airX=11.490 dryAirMass=125.87 XLGain=0.00 W=0.009918 twb=57.41 rh=0.5608 Z2 CZ: anMCp/T[ 0]=141.52/8132.4 anMCp/T[ 1]=352.28/20243.1 ventUt=1 - Nair=2140574.29 Dair=31535.91 Nrad=77683.50 Drad=1104.94 CX=543.97 airX=11.490 + Nair=2140574.28 Dair=31535.90 Nrad=77683.50 Drad=1104.94 CX=543.97 airX=11.490 TH=63.00 TD=67.42 TC=75.00 qhCap=20000 qcCap=-34000 ta=67.84 tr=69.49 qIzSh=-3654 fvent=1.000 pz0=-0.0046 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.628 mwDuctLk=0.000 mwSys=0.000 @@ -12219,7 +12219,7 @@ Z1 CZ: anMCp/T[ 0]=116.02/6674.4 anMCp/T[ 1]=496.85/28583.6 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.312 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 194 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 194 @@ -12228,7 +12228,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.312 mwDuctLk=0.000 mwSys=0.000 tdb=67.86 airX=11.456 dryAirMass=125.87 XLGain=0.00 W=0.009921 twb=57.43 rh=0.5604 Z2 CZ: anMCp/T[ 0]=141.56/8143.8 anMCp/T[ 1]=351.21/20205.2 ventUt=1 - Nair=2141202.74 Dair=31533.38 Nrad=77741.68 Drad=1105.57 CX=543.33 airX=11.456 + Nair=2141202.73 Dair=31533.38 Nrad=77741.68 Drad=1105.57 CX=543.33 airX=11.456 TH=63.00 TD=67.42 TC=75.00 qhCap=20000 qcCap=-34000 ta=67.86 tr=69.51 qIzSh=-3629 fvent=1.000 pz0=-0.0045 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.628 mwDuctLk=0.000 mwSys=0.000 @@ -12245,7 +12245,7 @@ Thu 10-Jan hr=13 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=20.151 mwDuctLk=0.000 mwSys=0.000 tdb=68.77 airX=16.155 dryAirMass=125.65 XLGain=0.00 W=0.009926 twb=57.74 rh=0.5429 Z1 CZ: anMCp/T[ 0]=115.94/6677.9 anMCp/T[ 1]=494.40/28475.4 ventUt=1 - Nair=2190023.01 Dair=31797.47 Nrad=74966.27 Drad=1050.53 CX=623.14 airX=16.155 + Nair=2190023.00 Dair=31797.47 Nrad=74966.27 Drad=1050.53 CX=623.14 airX=16.155 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ta=68.77 tr=70.40 qIzSh=-5526 fvent=1.000 pz0=-0.0039 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.271 mwDuctLk=0.000 mwSys=0.000 @@ -12282,7 +12282,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.624 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=426.82/27347.5 anMCp/T[ 1]=432.45/27763.6 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 195 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 195 @@ -12345,7 +12345,7 @@ Thu 10-Jan hr=13 subhr=9 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 196 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 196 @@ -12408,7 +12408,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=14.025 mwDuctLk=0.000 mwSys=0.000 tdb=68.05 airX=11.215 dryAirMass=125.82 XLGain=0.00 W=0.009936 twb=57.51 rh=0.5578 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 197 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 197 @@ -12433,7 +12433,7 @@ Thu 10-Jan hr=13 subhr=12 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=19.502 mwDuctLk=0.000 mwSys=0.000 tdb=68.75 airX=15.613 dryAirMass=125.65 XLGain=0.00 W=0.009939 twb=57.75 rh=0.5440 Z1 CZ: anMCp/T[ 0]=115.41/6700.2 anMCp/T[ 1]=477.84/27742.2 ventUt=1 - Nair=2186766.71 Dair=31765.12 Nrad=75295.48 Drad=1056.76 CX=614.40 airX=15.613 + Nair=2186766.70 Dair=31765.12 Nrad=75295.48 Drad=1056.76 CX=614.40 airX=15.613 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ta=68.75 tr=70.33 qIzSh=-5109 fvent=1.000 pz0=-0.0034 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.984 mwDuctLk=0.000 mwSys=0.000 @@ -12471,7 +12471,7 @@ Attic UZ: anMCp/T[ 0]=425.37/27359.5 anMCp/T[ 1]=431.09/27781.2 ventUt=0 Nair=131364.45 Dair=1646.77 Nrad=62952.31 Drad=845.76 CX=658.98 airX=36.371 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 198 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 198 @@ -12511,7 +12511,7 @@ Thu 10-Jan hr=13 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=19.236 mwDuctLk=0.000 mwSys=0.000 tdb=68.75 airX=15.391 dryAirMass=125.65 XLGain=0.00 W=0.009945 twb=57.76 rh=0.5443 Z1 CZ: anMCp/T[ 0]=115.18/6709.9 anMCp/T[ 1]=471.04/27440.8 ventUt=1 - Nair=2185792.94 Dair=31751.73 Nrad=75446.90 Drad=1059.42 CX=610.80 airX=15.391 + Nair=2185792.93 Dair=31751.73 Nrad=75446.90 Drad=1059.42 CX=610.80 airX=15.391 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ta=68.75 tr=70.31 qIzSh=-4944 fvent=1.000 pz0=-0.0033 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.862 mwDuctLk=0.000 mwSys=0.000 @@ -12534,7 +12534,7 @@ Thu 10-Jan hr=13 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=19.148 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 199 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 199 @@ -12597,7 +12597,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.740 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=141.72/8284.4 anMCp/T[ 1]=336.26/19655.6 ventUt=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 200 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 200 @@ -12660,7 +12660,7 @@ Attic UZ: anMCp/T[ 0]=423.74/27365.4 anMCp/T[ 1]=429.56/27793.2 ventUt=0 ta=79.10 tr=76.94 qIzSh=-6184 fvent=1.000 pz0=-0.0240 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 201 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 201 @@ -12723,7 +12723,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=18.546 mwDuctLk=0.000 mwSys=0.000 tdb=68.78 airX=14.817 dryAirMass=125.64 XLGain=0.00 W=0.009960 twb=57.79 rh=0.5446 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 202 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 202 @@ -12786,7 +12786,7 @@ Z2 CZ: anMCp/T[ 0]=141.63/8344.1 anMCp/T[ 1]=328.72/19366.8 ventUt=1 Nair=2155087.71 Dair=31482.29 Nrad=79020.57 Drad=1118.52 CX=530.69 airX=10.734 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 203 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 203 @@ -12844,12 +12844,12 @@ Z2 CZ: anMCp/T[ 0]=141.56/8358.6 anMCp/T[ 1]=326.53/19280.7 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.482 mwDuctLk=0.000 mwSys=0.000 tdb=79.32 airX=36.083 dryAirMass=48.61 XLGain=0.00 W=0.009967 twb=61.21 rh=0.3827 Attic UZ: anMCp/T[ 0]=421.31/27321.5 anMCp/T[ 1]=427.22/27755.3 ventUt=0 - Nair=131286.30 Dair=1639.11 Nrad=64633.29 Drad=850.39 CX=660.85 airX=36.083 + Nair=131286.29 Dair=1639.11 Nrad=64633.29 Drad=850.39 CX=660.85 airX=36.083 ta=79.32 tr=77.46 qIzSh=-6133 fvent=1.000 pz0=-0.0237 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 204 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 204 @@ -12912,7 +12912,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.981 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=114.26/6765.2 anMCp/T[ 1]=439.09/25998.2 ventUt=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 205 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 205 @@ -12942,13 +12942,13 @@ Thu 10-Jan hr=14 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.918 mwDuctLk=0.000 mwSys=0.000 tdb=68.82 airX=14.298 dryAirMass=125.63 XLGain=0.00 W=0.009974 twb=57.82 rh=0.5446 Z1 CZ: anMCp/T[ 0]=114.55/6785.8 anMCp/T[ 1]=437.51/25918.3 ventUt=1 - Nair=2182548.70 Dair=31681.71 Nrad=76148.25 Drad=1073.38 CX=592.37 airX=14.298 + Nair=2182548.71 Dair=31681.71 Nrad=76148.25 Drad=1073.38 CX=592.37 airX=14.298 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.82 tr=70.19 qIzSh=-4190 fvent=1.000 pz0=-0.0022 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.235 mwDuctLk=0.000 mwSys=0.000 tdb=68.57 airX=10.556 dryAirMass=125.69 XLGain=0.00 W=0.009973 twb=57.74 rh=0.5494 Z2 CZ: anMCp/T[ 0]=142.45/8438.5 anMCp/T[ 1]=323.16/19144.2 ventUt=1 - Nair=2158618.28 Dair=31467.32 Nrad=79251.14 Drad=1122.13 CX=527.07 airX=10.556 + Nair=2158618.27 Dair=31467.32 Nrad=79251.15 Drad=1122.13 CX=527.07 airX=10.556 TH=63.00 TD=67.38 TC=75.00 qhCap=20000 qcCap=-34000 ta=68.57 tr=69.97 qIzSh=-3015 fvent=1.000 pz0=-0.0032 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.498 mwDuctLk=0.000 mwSys=0.000 @@ -12965,17 +12965,17 @@ Thu 10-Jan hr=14 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.854 mwDuctLk=0.000 mwSys=0.000 tdb=68.82 airX=14.246 dryAirMass=125.63 XLGain=0.00 W=0.009975 twb=57.82 rh=0.5446 Z1 CZ: anMCp/T[ 0]=114.79/6803.9 anMCp/T[ 1]=435.90/25836.0 ventUt=1 - Nair=2182283.18 Dair=31677.90 Nrad=76184.53 Drad=1074.17 CX=591.21 airX=14.246 + Nair=2182283.18 Dair=31677.90 Nrad=76184.53 Drad=1074.18 CX=591.21 airX=14.246 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.82 tr=70.18 qIzSh=-4162 fvent=1.000 pz0=-0.0021 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.209 mwDuctLk=0.000 mwSys=0.000 tdb=68.59 airX=10.535 dryAirMass=125.68 XLGain=0.00 W=0.009974 twb=57.75 rh=0.5491 Z2 CZ: anMCp/T[ 0]=142.88/8468.2 anMCp/T[ 1]=322.51/19115.2 ventUt=1 - Nair=2159086.20 Dair=31465.29 Nrad=79291.92 Drad=1122.68 CX=526.40 airX=10.535 + Nair=2159086.19 Dair=31465.29 Nrad=79291.92 Drad=1122.68 CX=526.40 airX=10.535 TH=63.00 TD=67.38 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 206 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 206 @@ -12997,7 +12997,7 @@ Thu 10-Jan hr=14 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.788 mwDuctLk=0.000 mwSys=0.000 tdb=68.82 airX=14.192 dryAirMass=125.63 XLGain=0.00 W=0.009976 twb=57.83 rh=0.5447 Z1 CZ: anMCp/T[ 0]=115.02/6820.5 anMCp/T[ 1]=434.27/25752.2 ventUt=1 - Nair=2182020.03 Dair=31674.31 Nrad=76220.20 Drad=1074.94 CX=590.13 airX=14.192 + Nair=2182020.02 Dair=31674.31 Nrad=76220.20 Drad=1074.94 CX=590.13 airX=14.192 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.82 tr=70.17 qIzSh=-4134 fvent=1.000 pz0=-0.0020 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.183 mwDuctLk=0.000 mwSys=0.000 @@ -13020,7 +13020,7 @@ Thu 10-Jan hr=14 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.722 mwDuctLk=0.000 mwSys=0.000 tdb=68.82 airX=14.138 dryAirMass=125.63 XLGain=0.00 W=0.009977 twb=57.83 rh=0.5447 Z1 CZ: anMCp/T[ 0]=115.22/6836.3 anMCp/T[ 1]=432.61/25667.0 ventUt=1 - Nair=2181762.90 Dair=31670.94 Nrad=76253.44 Drad=1075.66 CX=589.12 airX=14.138 + Nair=2181762.89 Dair=31670.94 Nrad=76253.44 Drad=1075.66 CX=589.12 airX=14.138 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.82 tr=70.16 qIzSh=-4105 fvent=1.000 pz0=-0.0019 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.155 mwDuctLk=0.000 mwSys=0.000 @@ -13032,13 +13032,13 @@ Z2 CZ: anMCp/T[ 0]=143.64/8522.3 anMCp/T[ 1]=321.13/19052.7 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.504 mwDuctLk=0.000 mwSys=0.000 tdb=79.21 airX=36.087 dryAirMass=48.62 XLGain=0.00 W=0.009976 twb=61.19 rh=0.3844 Attic UZ: anMCp/T[ 0]=421.18/27415.0 anMCp/T[ 1]=427.36/27867.7 ventUt=0 - Nair=130804.60 Dair=1638.57 Nrad=65289.90 Drad=852.23 CX=661.44 airX=36.087 + Nair=130804.59 Dair=1638.57 Nrad=65289.90 Drad=852.23 CX=661.44 airX=36.087 ta=79.21 tr=77.75 qIzSh=-5985 fvent=1.000 pz0=-0.0233 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 207 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 207 @@ -13064,7 +13064,7 @@ Z2 CZ: anMCp/T[ 0]=144.00/8548.0 anMCp/T[ 1]=320.41/19019.6 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.498 mwDuctLk=0.000 mwSys=0.000 tdb=79.15 airX=36.067 dryAirMass=48.63 XLGain=0.00 W=0.009977 twb=61.17 rh=0.3852 Attic UZ: anMCp/T[ 0]=420.94/27413.6 anMCp/T[ 1]=427.16/27869.4 ventUt=0 - Nair=130629.63 Dair=1638.27 Nrad=65358.25 Drad=852.35 CX=661.38 airX=36.067 + Nair=130629.62 Dair=1638.27 Nrad=65358.25 Drad=852.35 CX=661.38 airX=36.067 ta=79.15 tr=77.76 qIzSh=-5941 fvent=1.000 pz0=-0.0232 qsHvac=0 @@ -13075,7 +13075,7 @@ Thu 10-Jan hr=14 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.588 mwDuctLk=0.000 mwSys=0.000 tdb=68.82 airX=14.028 dryAirMass=125.63 XLGain=0.00 W=0.009979 twb=57.83 rh=0.5448 Z1 CZ: anMCp/T[ 0]=115.62/6866.4 anMCp/T[ 1]=429.25/25493.1 ventUt=1 - Nair=2181243.41 Dair=31664.40 Nrad=76316.00 Drad=1077.03 CX=587.18 airX=14.028 + Nair=2181243.40 Dair=31664.40 Nrad=76316.00 Drad=1077.03 CX=587.18 airX=14.028 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.82 tr=70.14 qIzSh=-4047 fvent=1.000 pz0=-0.0017 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.098 mwDuctLk=0.000 mwSys=0.000 @@ -13101,7 +13101,7 @@ Z1 CZ: anMCp/T[ 0]=115.81/6881.2 anMCp/T[ 1]=427.55/25404.9 ventUt=1 Nair=2180973.99 Dair=31661.11 Nrad=76347.81 Drad=1077.72 CX=586.21 airX=13.973 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 208 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 208 @@ -13164,7 +13164,7 @@ Z2 CZ: anMCp/T[ 0]=145.41/8648.7 anMCp/T[ 1]=317.35/18875.8 ventUt=1 ta=68.71 tr=70.03 qIzSh=-2929 fvent=1.000 pz0=-0.0025 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 209 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 209 @@ -13185,7 +13185,7 @@ Thu 10-Jan hr=14 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.311 mwDuctLk=0.000 mwSys=0.000 tdb=68.81 airX=13.803 dryAirMass=125.63 XLGain=0.00 W=0.009982 twb=57.83 rh=0.5451 Z1 CZ: anMCp/T[ 0]=116.39/6926.1 anMCp/T[ 1]=422.35/25134.3 ventUt=1 - Nair=2180125.43 Dair=31651.02 Nrad=76446.00 Drad=1079.82 CX=583.24 airX=13.803 + Nair=2180125.44 Dair=31651.02 Nrad=76446.00 Drad=1079.82 CX=583.24 airX=13.803 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.81 tr=70.10 qIzSh=-3930 fvent=1.000 pz0=-0.0013 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.975 mwDuctLk=0.000 mwSys=0.000 @@ -13220,14 +13220,14 @@ Z2 CZ: anMCp/T[ 0]=146.12/8700.1 anMCp/T[ 1]=315.73/18798.4 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.442 mwDuctLk=0.000 mwSys=0.000 tdb=78.76 airX=35.907 dryAirMass=48.66 XLGain=0.00 W=0.009983 twb=61.06 rh=0.3903 Attic UZ: anMCp/T[ 0]=419.09/27376.1 anMCp/T[ 1]=425.58/27851.6 ventUt=0 - Nair=129432.91 Dair=1634.80 Nrad=65694.23 Drad=852.88 CX=660.41 airX=35.907 + Nair=129432.92 Dair=1634.80 Nrad=65694.23 Drad=852.88 CX=660.41 airX=35.907 ta=78.76 tr=77.78 qIzSh=-5666 fvent=1.000 pz0=-0.0224 qsHvac=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 210 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 210 @@ -13240,7 +13240,7 @@ Thu 10-Jan hr=14 subhr=12 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.170 mwDuctLk=0.000 mwSys=0.000 tdb=68.81 airX=13.688 dryAirMass=125.63 XLGain=0.00 W=0.009984 twb=57.84 rh=0.5453 Z1 CZ: anMCp/T[ 0]=116.78/6956.9 anMCp/T[ 1]=418.83/24950.0 ventUt=1 - Nair=2179528.41 Dair=31644.13 Nrad=76513.35 Drad=1081.26 CX=581.22 airX=13.688 + Nair=2179528.42 Dair=31644.13 Nrad=76513.35 Drad=1081.26 CX=581.22 airX=13.688 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.81 tr=70.08 qIzSh=-3871 fvent=1.000 pz0=-0.0011 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.910 mwDuctLk=0.000 mwSys=0.000 @@ -13263,7 +13263,7 @@ Thu 10-Jan hr=14 subhr=13 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.099 mwDuctLk=0.000 mwSys=0.000 tdb=68.81 airX=13.630 dryAirMass=125.63 XLGain=0.00 W=0.009985 twb=57.84 rh=0.5453 Z1 CZ: anMCp/T[ 0]=116.99/6972.5 anMCp/T[ 1]=417.05/24856.5 ventUt=1 - Nair=2179220.87 Dair=31640.64 Nrad=76547.51 Drad=1081.99 CX=580.19 airX=13.630 + Nair=2179220.88 Dair=31640.64 Nrad=76547.51 Drad=1081.99 CX=580.19 airX=13.630 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.81 tr=70.07 qIzSh=-3841 fvent=1.000 pz0=-0.0010 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.876 mwDuctLk=0.000 mwSys=0.000 @@ -13286,11 +13286,11 @@ Thu 10-Jan hr=14 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=17.027 mwDuctLk=0.000 mwSys=0.000 tdb=68.81 airX=13.571 dryAirMass=125.63 XLGain=0.00 W=0.009986 twb=57.84 rh=0.5454 Z1 CZ: anMCp/T[ 0]=117.20/6988.4 anMCp/T[ 1]=415.26/24762.1 ventUt=1 - Nair=2178907.44 Dair=31637.11 Nrad=76581.99 Drad=1082.73 CX=579.15 airX=13.571 + Nair=2178907.45 Dair=31637.11 Nrad=76581.99 Drad=1082.73 CX=579.15 airX=13.571 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 211 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 211 @@ -13353,7 +13353,7 @@ Z2 CZ: anMCp/T[ 0]=147.99/8833.7 anMCp/T[ 1]=311.43/18589.1 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.404 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 212 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 212 @@ -13396,7 +13396,7 @@ Thu 10-Jan hr=14 subhr=18 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.735 mwDuctLk=0.000 mwSys=0.000 tdb=68.80 airX=13.333 dryAirMass=125.63 XLGain=0.00 W=0.009989 twb=57.84 rh=0.5457 Z1 CZ: anMCp/T[ 0]=118.06/7054.3 anMCp/T[ 1]=408.00/24377.8 ventUt=1 - Nair=2177641.50 Dair=31622.71 Nrad=76739.28 Drad=1085.75 CX=574.94 airX=13.333 + Nair=2177641.49 Dair=31622.71 Nrad=76739.28 Drad=1085.75 CX=574.94 airX=13.333 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=68.80 tr=70.03 qIzSh=-3693 fvent=1.000 pz0=-0.0004 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.700 mwDuctLk=0.000 mwSys=0.000 @@ -13416,7 +13416,7 @@ Attic UZ: anMCp/T[ 0]=417.23/27348.3 anMCp/T[ 1]=424.08/27849.7 ventUt=0 Thu 10-Jan hr=14 subhr=19 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 213 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 213 @@ -13479,7 +13479,7 @@ Z1 CZ: anMCp/T[ 0]=118.75/7106.2 anMCp/T[ 1]=402.49/24085.0 ventUt=1 ta=68.80 tr=70.01 qIzSh=-3606 fvent=1.000 pz0=-0.0001 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 214 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 214 @@ -13512,7 +13512,7 @@ Z1 CZ: anMCp/T[ 0]=118.99/7124.1 anMCp/T[ 1]=400.65/23986.7 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.552 mwDuctLk=0.000 mwSys=0.000 tdb=68.88 airX=9.999 dryAirMass=125.61 XLGain=0.00 W=0.009992 twb=57.87 rh=0.5444 Z2 CZ: anMCp/T[ 0]=150.41/9004.9 anMCp/T[ 1]=305.91/18314.6 ventUt=1 - Nair=2165774.36 Dair=31431.01 Nrad=80021.79 Drad=1132.29 CX=515.41 airX=9.999 + Nair=2165774.37 Dair=31431.01 Nrad=80021.79 Drad=1132.29 CX=515.41 airX=9.999 TH=63.00 TD=67.38 TC=75.00 qhCap=20000 qcCap=-34000 ta=68.88 tr=70.11 qIzSh=-2757 fvent=1.000 pz0=-0.0011 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.376 mwDuctLk=0.000 mwSys=0.000 @@ -13542,7 +13542,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.373 mwDuctLk=0.000 mwSys=0.000 tdb=78.06 airX=35.679 dryAirMass=48.72 XLGain=0.00 W=0.009994 twb=60.86 rh=0.3996 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 215 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 215 @@ -13567,7 +13567,7 @@ Z1 CZ: anMCp/T[ 0]=119.48/7160.4 anMCp/T[ 1]=396.96/23789.6 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.476 mwDuctLk=0.000 mwSys=0.000 tdb=68.90 airX=9.937 dryAirMass=125.60 XLGain=0.00 W=0.009994 twb=57.88 rh=0.5440 Z2 CZ: anMCp/T[ 0]=151.25/9064.7 anMCp/T[ 1]=304.00/18218.5 ventUt=1 - Nair=2166225.79 Dair=31427.13 Nrad=80103.13 Drad=1133.34 CX=514.18 airX=9.937 + Nair=2166225.80 Dair=31427.13 Nrad=80103.13 Drad=1133.34 CX=514.18 airX=9.937 TH=63.00 TD=67.38 TC=75.00 qhCap=20000 qcCap=-34000 ta=68.90 tr=70.12 qIzSh=-2728 fvent=1.000 pz0=-0.0009 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.371 mwDuctLk=0.000 mwSys=0.000 @@ -13596,7 +13596,7 @@ Z2 CZ: anMCp/T[ 0]=151.69/9095.1 anMCp/T[ 1]=303.03/18169.8 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.369 mwDuctLk=0.000 mwSys=0.000 tdb=77.96 airX=35.659 dryAirMass=48.73 XLGain=0.00 W=0.009995 twb=60.83 rh=0.4010 Attic UZ: anMCp/T[ 0]=416.00/27358.8 anMCp/T[ 1]=423.26/27889.8 ventUt=0 - Nair=127157.79 Dair=1628.16 Nrad=66088.63 Drad=853.32 CX=657.97 airX=35.659 + Nair=127157.80 Dair=1628.16 Nrad=66088.63 Drad=853.32 CX=657.97 airX=35.659 ta=77.96 tr=77.67 qIzSh=-5108 fvent=1.000 pz0=-0.0207 qsHvac=0 @@ -13605,7 +13605,7 @@ Thu 10-Jan hr=14 subhr=26 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 216 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 216 @@ -13651,7 +13651,7 @@ Z2 CZ: anMCp/T[ 0]=152.56/9156.6 anMCp/T[ 1]=301.08/18070.8 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.368 mwDuctLk=0.000 mwSys=0.000 tdb=77.86 airX=35.643 dryAirMass=48.74 XLGain=0.00 W=0.009997 twb=60.80 rh=0.4024 Attic UZ: anMCp/T[ 0]=415.76/27368.6 anMCp/T[ 1]=423.14/27908.6 ventUt=0 - Nair=126909.50 Dair=1627.59 Nrad=66111.84 Drad=853.31 CX=657.67 airX=35.643 + Nair=126909.50 Dair=1627.59 Nrad=66111.85 Drad=853.31 CX=657.67 airX=35.643 ta=77.86 tr=77.65 qIzSh=-5039 fvent=1.000 pz0=-0.0205 qsHvac=0 @@ -13668,7 +13668,7 @@ Z1 CZ: anMCp/T[ 0]=120.50/7235.9 anMCp/T[ 1]=389.43/23385.3 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.320 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 217 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 217 @@ -13700,13 +13700,13 @@ Z1 CZ: anMCp/T[ 0]=120.76/7255.3 anMCp/T[ 1]=387.55/23283.9 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.280 mwDuctLk=0.000 mwSys=0.000 tdb=68.96 airX=9.778 dryAirMass=125.59 XLGain=0.00 W=0.009999 twb=57.91 rh=0.5431 Z2 CZ: anMCp/T[ 0]=153.45/9219.3 anMCp/T[ 1]=299.09/17969.6 ventUt=1 - Nair=2167271.11 Dair=31417.12 Nrad=80312.22 Drad=1136.06 CX=510.99 airX=9.778 + Nair=2167271.10 Dair=31417.12 Nrad=80312.22 Drad=1136.06 CX=510.99 airX=9.778 TH=63.00 TD=67.38 TC=75.00 qhCap=20000 qcCap=-34000 ta=68.96 tr=70.16 qIzSh=-2657 fvent=1.000 pz0=-0.0004 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.368 mwDuctLk=0.000 mwSys=0.000 tdb=77.77 airX=35.630 dryAirMass=48.75 XLGain=0.00 W=0.009999 twb=60.78 rh=0.4037 Attic UZ: anMCp/T[ 0]=415.55/27380.6 anMCp/T[ 1]=423.07/27930.1 ventUt=0 - Nair=126675.50 Dair=1627.11 Nrad=66128.56 Drad=853.29 CX=657.38 airX=35.630 + Nair=126675.51 Dair=1627.11 Nrad=66128.56 Drad=853.29 CX=657.38 airX=35.630 ta=77.77 tr=77.62 qIzSh=-4972 fvent=1.000 pz0=-0.0203 qsHvac=0 @@ -13731,7 +13731,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=17.334 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=414.74/27325.9 anMCp/T[ 1]=422.20/27871.3 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 218 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 218 @@ -13772,7 +13772,7 @@ Thu 10-Jan hr=15 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.015 mwDuctLk=0.000 mwSys=0.000 tdb=68.80 airX=12.741 dryAirMass=125.63 XLGain=0.00 W=0.010004 twb=57.86 rh=0.5465 Z1 CZ: anMCp/T[ 0]=119.82/7196.9 anMCp/T[ 1]=389.85/23415.0 ventUt=1 - Nair=2174055.04 Dair=31573.26 Nrad=77432.69 Drad=1096.24 CX=561.44 airX=12.741 + Nair=2174055.03 Dair=31573.26 Nrad=77432.69 Drad=1096.24 CX=561.44 airX=12.741 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=68.80 tr=70.01 qIzSh=-3408 fvent=1.000 pz0=0.0006 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.384 mwDuctLk=0.000 mwSys=0.000 @@ -13794,7 +13794,7 @@ Thu 10-Jan hr=15 subhr=3 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 219 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 219 @@ -13857,7 +13857,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.486 mwDuctLk=0.000 mwSys=0.000 tdb=69.04 airX=9.932 dryAirMass=125.57 XLGain=0.00 W=0.010008 twb=57.95 rh=0.5421 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 220 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 220 @@ -13882,7 +13882,7 @@ Thu 10-Jan hr=15 subhr=6 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.149 mwDuctLk=0.000 mwSys=0.000 tdb=68.81 airX=12.838 dryAirMass=125.62 XLGain=0.00 W=0.010011 twb=57.87 rh=0.5467 Z1 CZ: anMCp/T[ 0]=118.47/7112.9 anMCp/T[ 1]=392.83/23584.7 ventUt=1 - Nair=2174561.67 Dair=31577.34 Nrad=77350.07 Drad=1095.09 CX=562.96 airX=12.838 + Nair=2174561.67 Dair=31577.34 Nrad=77350.08 Drad=1095.09 CX=562.96 airX=12.838 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=68.81 tr=70.01 qIzSh=-3446 fvent=1.000 pz0=0.0004 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.519 mwDuctLk=0.000 mwSys=0.000 @@ -13905,7 +13905,7 @@ Thu 10-Jan hr=15 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.182 mwDuctLk=0.000 mwSys=0.000 tdb=68.81 airX=12.862 dryAirMass=125.62 XLGain=0.00 W=0.010013 twb=57.88 rh=0.5468 Z1 CZ: anMCp/T[ 0]=118.13/7091.6 anMCp/T[ 1]=393.55/23625.3 ventUt=1 - Nair=2174674.59 Dair=31578.48 Nrad=77327.39 Drad=1094.78 CX=563.36 airX=12.862 + Nair=2174674.58 Dair=31578.48 Nrad=77327.39 Drad=1094.78 CX=563.36 airX=12.862 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=68.81 tr=70.01 qIzSh=-3455 fvent=1.000 pz0=0.0003 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.551 mwDuctLk=0.000 mwSys=0.000 @@ -13920,7 +13920,7 @@ Attic UZ: anMCp/T[ 0]=407.75/26864.0 anMCp/T[ 1]=414.83/27381.0 ventUt=0 Nair=124639.36 Dair=1614.71 Nrad=66110.62 Drad=852.98 CX=656.12 airX=34.902 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 221 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 221 @@ -13983,7 +13983,7 @@ Thu 10-Jan hr=15 subhr=10 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.275 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 222 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 222 @@ -13998,7 +13998,7 @@ Z1 CZ: anMCp/T[ 0]=117.10/7027.7 anMCp/T[ 1]=395.62/23742.5 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.647 mwDuctLk=0.000 mwSys=0.000 tdb=69.10 airX=10.053 dryAirMass=125.55 XLGain=0.00 W=0.010017 twb=57.98 rh=0.5415 Z2 CZ: anMCp/T[ 0]=147.85/8873.0 anMCp/T[ 1]=307.42/18449.5 ventUt=1 - Nair=2171912.97 Dair=31421.53 Nrad=80443.69 Drad=1134.76 CX=514.39 airX=10.053 + Nair=2171912.98 Dair=31421.53 Nrad=80443.69 Drad=1134.76 CX=514.39 airX=10.053 TH=63.00 TD=67.33 TC=75.00 qhCap=20000 qcCap=-34000 ta=69.10 tr=70.33 qIzSh=-2792 fvent=1.000 pz0=-0.0012 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.921 mwDuctLk=0.000 mwSys=0.000 @@ -14046,7 +14046,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.709 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=146.80/8808.4 anMCp/T[ 1]=308.81/18529.2 ventUt=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 223 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 223 @@ -14076,7 +14076,7 @@ Z1 CZ: anMCp/T[ 0]=116.08/6964.3 anMCp/T[ 1]=397.58/23853.0 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.739 mwDuctLk=0.000 mwSys=0.000 tdb=69.13 airX=10.121 dryAirMass=125.55 XLGain=0.00 W=0.010022 twb=58.00 rh=0.5413 Z2 CZ: anMCp/T[ 0]=146.28/8776.1 anMCp/T[ 1]=309.49/18568.0 ventUt=1 - Nair=2173112.40 Dair=31424.83 Nrad=80410.03 Drad=1133.89 CX=515.77 airX=10.121 + Nair=2173112.41 Dair=31424.83 Nrad=80410.03 Drad=1133.89 CX=515.77 airX=10.121 TH=63.00 TD=67.33 TC=75.00 qhCap=20000 qcCap=-34000 ta=69.13 tr=70.36 qIzSh=-2825 fvent=1.000 pz0=-0.0014 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.793 mwDuctLk=0.000 mwSys=0.000 @@ -14109,7 +14109,7 @@ Attic UZ: anMCp/T[ 0]=400.30/26368.2 anMCp/T[ 1]=407.01/26858.2 ventUt=0 ta=76.73 tr=77.12 qIzSh=-4374 fvent=1.000 pz0=-0.0194 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 224 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 224 @@ -14160,7 +14160,7 @@ Z2 CZ: anMCp/T[ 0]=144.71/8679.4 anMCp/T[ 1]=311.45/18679.9 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.667 mwDuctLk=0.000 mwSys=0.000 tdb=76.60 airX=34.021 dryAirMass=48.85 XLGain=0.00 W=0.010028 twb=60.46 rh=0.4213 Attic UZ: anMCp/T[ 0]=398.21/26228.1 anMCp/T[ 1]=404.82/26710.8 ventUt=0 - Nair=122301.37 Dair=1600.19 Nrad=65942.38 Drad=852.22 CX=654.15 airX=34.021 + Nair=122301.36 Dair=1600.19 Nrad=65942.38 Drad=852.22 CX=654.15 airX=34.021 ta=76.60 tr=77.04 qIzSh=-4297 fvent=1.000 pz0=-0.0193 qsHvac=0 @@ -14172,7 +14172,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.474 mwDuctLk=0.000 mwSys=0.000 tdb=68.80 airX=13.071 dryAirMass=125.62 XLGain=0.00 W=0.010031 twb=57.90 rh=0.5480 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 225 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 225 @@ -14215,7 +14215,7 @@ Z2 CZ: anMCp/T[ 0]=143.66/8614.9 anMCp/T[ 1]=312.61/18746.0 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=16.580 mwDuctLk=0.000 mwSys=0.000 tdb=76.44 airX=33.822 dryAirMass=48.87 XLGain=0.00 W=0.010032 twb=60.41 rh=0.4237 Attic UZ: anMCp/T[ 0]=396.06/26082.4 anMCp/T[ 1]=402.57/26557.9 ventUt=0 - Nair=121760.31 Dair=1596.88 Nrad=65890.45 Drad=852.05 CX=653.52 airX=33.822 + Nair=121760.30 Dair=1596.88 Nrad=65890.45 Drad=852.05 CX=653.52 airX=33.822 ta=76.44 tr=76.95 qIzSh=-4215 fvent=1.000 pz0=-0.0192 qsHvac=0 @@ -14235,7 +14235,7 @@ Z2 CZ: anMCp/T[ 0]=143.12/8581.7 anMCp/T[ 1]=313.14/18775.8 ventUt=1 Nair=2174743.18 Dair=31429.75 Nrad=80212.54 Drad=1132.19 CX=517.88 airX=10.241 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 226 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 226 @@ -14298,7 +14298,7 @@ Attic UZ: anMCp/T[ 0]=392.36/25831.9 anMCp/T[ 1]=398.73/26296.5 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 227 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 227 @@ -14313,7 +14313,7 @@ Thu 10-Jan hr=15 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.568 mwDuctLk=0.000 mwSys=0.000 tdb=68.75 airX=13.132 dryAirMass=125.63 XLGain=0.00 W=0.010040 twb=57.90 rh=0.5494 Z1 CZ: anMCp/T[ 0]=112.86/6765.0 anMCp/T[ 1]=401.85/24087.6 ventUt=1 - Nair=2173769.93 Dair=31589.34 Nrad=76758.73 Drad=1090.75 CX=567.09 airX=13.132 + Nair=2173769.94 Dair=31589.34 Nrad=76758.73 Drad=1090.75 CX=567.09 airX=13.132 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=68.75 tr=69.82 qIzSh=-3540 fvent=1.000 pz0=-0.0005 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=12.965 mwDuctLk=0.000 mwSys=0.000 @@ -14361,7 +14361,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.589 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=112.02/6713.6 anMCp/T[ 1]=402.21/24104.6 ventUt=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 228 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 228 @@ -14424,7 +14424,7 @@ Z2 CZ: anMCp/T[ 0]=138.89/8322.0 anMCp/T[ 1]=315.65/18913.3 ventUt=1 TH=63.00 TD=67.33 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 229 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 229 @@ -14475,7 +14475,7 @@ Z1 CZ: anMCp/T[ 0]=110.18/6600.6 anMCp/T[ 1]=402.20/24094.4 ventUt=1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.041 mwDuctLk=0.000 mwSys=0.000 tdb=69.11 airX=10.333 dryAirMass=125.54 XLGain=0.00 W=0.010049 twb=58.03 rh=0.5429 Z2 CZ: anMCp/T[ 0]=137.52/8238.6 anMCp/T[ 1]=315.96/18928.0 ventUt=1 - Nair=2173155.12 Dair=31426.63 Nrad=79730.22 Drad=1130.72 CX=517.82 airX=10.333 + Nair=2173155.11 Dair=31426.63 Nrad=79730.22 Drad=1130.72 CX=517.82 airX=10.333 TH=63.00 TD=67.33 TC=75.00 qhCap=20000 qcCap=-34000 ta=69.11 tr=70.07 qIzSh=-2909 fvent=1.000 pz0=-0.0023 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.963 mwDuctLk=0.000 mwSys=0.000 @@ -14487,7 +14487,7 @@ Attic UZ: anMCp/T[ 0]=380.88/25052.4 anMCp/T[ 1]=386.90/25490.6 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 230 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 230 @@ -14550,7 +14550,7 @@ Z1 CZ: anMCp/T[ 0]=108.38/6485.4 anMCp/T[ 1]=403.40/24139.2 ventUt=1 Nair=2166356.94 Dair=31579.40 Nrad=75781.60 Drad=1089.40 CX=564.41 airX=13.178 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 231 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 231 @@ -14613,7 +14613,7 @@ Z2 CZ: anMCp/T[ 0]=132.24/7905.4 anMCp/T[ 1]=318.06/19013.6 ventUt=1 ta=68.96 tr=69.59 qIzSh=-2920 fvent=1.000 pz0=-0.0027 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 232 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 232 @@ -14634,13 +14634,13 @@ Thu 10-Jan hr=16 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=16.683 mwDuctLk=0.000 mwSys=0.000 tdb=68.39 airX=13.192 dryAirMass=125.72 XLGain=0.00 W=0.010058 twb=57.80 rh=0.5577 Z1 CZ: anMCp/T[ 0]=105.85/6324.8 anMCp/T[ 1]=403.95/24135.8 ventUt=1 - Nair=2161219.67 Dair=31570.77 Nrad=75543.47 Drad=1089.84 CX=561.69 airX=13.192 + Nair=2161219.66 Dair=31570.77 Nrad=75543.47 Drad=1089.84 CX=561.69 airX=13.192 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=68.39 tr=69.00 qIzSh=-3488 fvent=1.000 pz0=-0.0012 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=13.146 mwDuctLk=0.000 mwSys=0.000 tdb=68.92 airX=10.406 dryAirMass=125.59 XLGain=0.00 W=0.010057 twb=57.98 rh=0.5471 Z2 CZ: anMCp/T[ 0]=130.52/7798.3 anMCp/T[ 1]=318.31/19019.1 ventUt=1 - Nair=2166212.83 Dair=31409.91 Nrad=78912.26 Drad=1130.54 CX=513.80 airX=10.406 + Nair=2166212.82 Dair=31409.91 Nrad=78912.26 Drad=1130.54 CX=513.80 airX=10.406 TH=63.00 TD=67.29 TC=75.00 qhCap=20000 qcCap=-34000 ta=68.92 tr=69.53 qIzSh=-2919 fvent=1.000 pz0=-0.0028 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=15.284 mwDuctLk=0.000 mwSys=0.000 @@ -14676,7 +14676,7 @@ Attic UZ: anMCp/T[ 0]=360.73/23649.1 anMCp/T[ 1]=366.22/24046.1 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 233 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 233 @@ -14739,7 +14739,7 @@ Z1 CZ: anMCp/T[ 0]=102.13/6090.1 anMCp/T[ 1]=403.70/24072.4 ventUt=1 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 234 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 234 @@ -14802,7 +14802,7 @@ Z2 CZ: anMCp/T[ 0]=123.22/7340.0 anMCp/T[ 1]=318.74/18987.3 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=14.308 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 235 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 235 @@ -14865,7 +14865,7 @@ Attic UZ: anMCp/T[ 0]=333.64/21786.4 anMCp/T[ 1]=338.57/22140.0 ventUt=0 Thu 10-Jan hr=16 subhr=13 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 236 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 236 @@ -14928,7 +14928,7 @@ Z1 CZ: anMCp/T[ 0]=95.99/5703.6 anMCp/T[ 1]=408.06/24246.6 ventUt=1 ta=68.00 tr=68.32 qIzSh=-844 fvent=0.007 pz0=-0.0029 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 237 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 237 @@ -14991,7 +14991,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=13.073 mwDuctLk=0.000 mwSys=0.000 tdb=70.06 airX=26.254 dryAirMass=49.45 XLGain=0.00 W=0.010069 twb=58.37 rh=0.5265 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 238 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 238 @@ -15054,7 +15054,7 @@ Thu 10-Jan hr=16 subhr=20 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 239 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 239 @@ -15117,7 +15117,7 @@ Z1 CZ: anMCp/T[ 0]=90.54/5361.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.575 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 240 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 240 @@ -15180,7 +15180,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=12.160 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=294.00/19151.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 241 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 241 @@ -15243,7 +15243,7 @@ Thu 10-Jan hr=16 subhr=27 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 242 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 242 @@ -15253,7 +15253,7 @@ Thu 10-Jan hr=16 subhr=27 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.593 mwDuctLk=0.000 mwSys=0.000 tdb=67.87 airX=2.832 dryAirMass=125.83 XLGain=0.00 W=0.010075 twb=57.65 rh=0.5688 Z1 CZ: anMCp/T[ 0]=86.81/5126.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2082934.07 Dair=30687.95 Nrad=85639.70 Drad=1261.65 CX=328.56 airX=2.832 + Nair=2082934.07 Dair=30687.95 Nrad=85639.69 Drad=1261.65 CX=328.56 airX=2.832 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=67.87 tr=67.88 qIzSh=-765 fvent=0.000 pz0=-0.0038 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.619 mwDuctLk=0.000 mwSys=0.000 @@ -15265,7 +15265,7 @@ Z2 CZ: anMCp/T[ 0]=111.60/6591.0 anMCp/T[ 1]=0.00/0.0 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.794 mwDuctLk=0.000 mwSys=0.000 tdb=67.93 airX=23.571 dryAirMass=49.65 XLGain=0.00 W=0.010077 twb=57.68 rh=0.5679 Attic UZ: anMCp/T[ 0]=285.06/18552.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=92958.15 Dair=1396.53 Nrad=61698.74 Drad=841.26 CX=607.51 airX=23.571 + Nair=92958.16 Dair=1396.53 Nrad=61698.74 Drad=841.26 CX=607.51 airX=23.571 ta=67.93 tr=71.07 qIzSh=-812 fvent=0.000 pz0=-0.0109 qsHvac=0 @@ -15306,7 +15306,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.634 mwDuctLk=0.000 mwSys=0.000 tdb=68.29 airX=3.655 dryAirMass=125.73 XLGain=0.00 W=0.010078 twb=57.80 rh=0.5606 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 243 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 243 @@ -15331,7 +15331,7 @@ Thu 10-Jan hr=17 subhr=0 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.516 mwDuctLk=0.000 mwSys=0.000 tdb=67.83 airX=2.771 dryAirMass=125.84 XLGain=0.00 W=0.010077 twb=57.64 rh=0.5698 Z1 CZ: anMCp/T[ 0]=84.93/5007.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2080928.54 Dair=30680.14 Nrad=85548.95 Drad=1262.51 CX=326.79 airX=2.771 + Nair=2080928.55 Dair=30680.14 Nrad=85548.95 Drad=1262.51 CX=326.79 airX=2.771 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=67.83 tr=67.77 qIzSh=-753 fvent=0.000 pz0=-0.0040 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.639 mwDuctLk=0.000 mwSys=0.000 @@ -15343,7 +15343,7 @@ Z2 CZ: anMCp/T[ 0]=112.06/6607.6 anMCp/T[ 1]=0.00/0.0 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=11.466 mwDuctLk=0.000 mwSys=0.000 tdb=67.37 airX=22.886 dryAirMass=49.70 XLGain=0.00 W=0.010079 twb=57.49 rh=0.5785 Attic UZ: anMCp/T[ 0]=277.07/18016.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=91026.39 Dair=1379.77 Nrad=61176.06 Drad=839.59 CX=604.50 airX=22.886 + Nair=91026.38 Dair=1379.77 Nrad=61176.06 Drad=839.59 CX=604.50 airX=22.886 ta=67.37 tr=70.56 qIzSh=-650 fvent=0.000 pz0=-0.0104 qsHvac=0 @@ -15369,7 +15369,7 @@ Attic UZ: anMCp/T[ 0]=274.88/17870.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=90475.87 Dair=1375.31 Nrad=61016.46 Drad=839.24 CX=603.13 airX=22.698 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 244 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 244 @@ -15432,7 +15432,7 @@ Thu 10-Jan hr=17 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.447 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 245 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 245 @@ -15495,7 +15495,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.665 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=112.74/6623.5 anMCp/T[ 1]=0.00/0.0 ventUt=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 246 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 246 @@ -15558,7 +15558,7 @@ Attic UZ: anMCp/T[ 0]=260.29/16894.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=66.01 tr=69.27 qIzSh=-288 fvent=0.000 pz0=-0.0091 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 247 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 247 @@ -15586,7 +15586,7 @@ Z2 CZ: anMCp/T[ 0]=113.02/6627.5 anMCp/T[ 1]=0.00/0.0 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=10.686 mwDuctLk=0.000 mwSys=0.000 tdb=65.85 airX=21.274 dryAirMass=49.85 XLGain=0.00 W=0.010077 twb=56.98 rh=0.6089 Attic UZ: anMCp/T[ 0]=258.30/16760.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=86542.65 Dair=1343.53 Nrad=59731.76 Drad=836.31 CX=593.55 airX=21.274 + Nair=86542.65 Dair=1343.53 Nrad=59731.77 Drad=836.31 CX=593.55 airX=21.274 ta=65.85 tr=69.11 qIzSh=-249 fvent=0.000 pz0=-0.0089 qsHvac=0 @@ -15621,7 +15621,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.331 mwDuctLk=0.000 mwSys=0.000 tdb=67.61 airX=2.627 dryAirMass=125.90 XLGain=0.00 W=0.010076 twb=57.57 rh=0.5738 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 248 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 248 @@ -15675,7 +15675,7 @@ Thu 10-Jan hr=17 subhr=13 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.300 mwDuctLk=0.000 mwSys=0.000 tdb=67.57 airX=2.602 dryAirMass=125.91 XLGain=0.00 W=0.010076 twb=57.55 rh=0.5745 Z1 CZ: anMCp/T[ 0]=79.81/4668.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2071336.11 Dair=30654.51 Nrad=85140.36 Drad=1265.01 CX=319.50 airX=2.602 + Nair=2071336.12 Dair=30654.51 Nrad=85140.36 Drad=1265.01 CX=319.50 airX=2.602 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=67.57 tr=67.36 qIzSh=-724 fvent=0.000 pz0=-0.0044 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.686 mwDuctLk=0.000 mwSys=0.000 @@ -15684,7 +15684,7 @@ Z2 CZ: anMCp/T[ 0]=113.34/6629.7 anMCp/T[ 1]=0.00/0.0 ventUt=1 Nair=2091641.24 Dair=30808.61 Nrad=84140.85 Drad=1242.20 CX=352.88 airX=3.698 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 249 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 249 @@ -15747,7 +15747,7 @@ Attic UZ: anMCp/T[ 0]=246.79/15989.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 250 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 250 @@ -15810,7 +15810,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=3.222 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=77.96/4546.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 251 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 251 @@ -15873,7 +15873,7 @@ Z2 CZ: anMCp/T[ 0]=113.79/6627.4 anMCp/T[ 1]=0.00/0.0 ventUt=1 TH=63.00 TD=67.25 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 252 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 252 @@ -15936,7 +15936,7 @@ Attic UZ: anMCp/T[ 0]=234.21/15146.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 253 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 253 @@ -15962,7 +15962,7 @@ Z2 CZ: anMCp/T[ 0]=113.95/6624.5 anMCp/T[ 1]=0.00/0.0 ventUt=1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.608 mwDuctLk=0.000 mwSys=0.000 tdb=63.85 airX=19.074 dryAirMass=50.04 XLGain=0.00 W=0.010066 twb=56.30 rh=0.6535 Attic UZ: anMCp/T[ 0]=232.48/15029.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=80648.58 Dair=1291.83 Nrad=57570.68 Drad=831.58 CX=578.06 airX=19.074 + Nair=80648.58 Dair=1291.83 Nrad=57570.69 Drad=831.58 CX=578.06 airX=19.074 ta=63.85 tr=67.02 qIzSh=186 fvent=0.000 pz0=-0.0071 qsHvac=0 @@ -15999,7 +15999,7 @@ Z1 CZ: anMCp/T[ 0]=75.47/4382.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2061316.76 Dair=30630.32 Nrad=84824.40 Drad=1267.43 CX=312.95 airX=2.460 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 254 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 254 @@ -16062,7 +16062,7 @@ Z2 CZ: anMCp/T[ 0]=114.14/6619.5 anMCp/T[ 1]=0.00/0.0 ventUt=1 ta=67.44 tr=67.27 qIzSh=-1078 fvent=0.000 pz0=-0.0058 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 255 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 255 @@ -16125,7 +16125,7 @@ Attic UZ: anMCp/T[ 0]=222.38/14353.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 256 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 256 @@ -16144,7 +16144,7 @@ Z1 CZ: anMCp/T[ 0]=73.76/4269.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.715 mwDuctLk=0.000 mwSys=0.000 tdb=67.34 airX=3.725 dryAirMass=125.97 XLGain=0.00 W=0.010059 twb=57.45 rh=0.5781 Z2 CZ: anMCp/T[ 0]=114.29/6615.5 anMCp/T[ 1]=0.00/0.0 ventUt=1 - Nair=2074703.93 Dair=30810.67 Nrad=83146.80 Drad=1238.76 CX=351.70 airX=3.725 + Nair=2074703.92 Dair=30810.67 Nrad=83146.80 Drad=1238.76 CX=351.70 airX=3.725 TH=63.00 TD=67.21 TC=75.00 qhCap=20000 qcCap=-34000 ta=67.34 tr=67.17 qIzSh=-1080 fvent=0.000 pz0=-0.0059 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=9.117 mwDuctLk=0.000 mwSys=0.000 @@ -16188,7 +16188,7 @@ Z1 CZ: anMCp/T[ 0]=73.10/4226.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 257 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 257 @@ -16251,7 +16251,7 @@ Z2 CZ: anMCp/T[ 0]=114.48/6610.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.848 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 258 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 258 @@ -16314,7 +16314,7 @@ Attic UZ: anMCp/T[ 0]=211.35/13614.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=18 subhr=7 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 259 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 259 @@ -16377,7 +16377,7 @@ Z1 CZ: anMCp/T[ 0]=70.80/4075.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=66.96 tr=66.59 qIzSh=-665 fvent=0.000 pz0=-0.0051 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 260 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 260 @@ -16440,7 +16440,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=8.381 mwDuctLk=0.000 mwSys=0.000 tdb=61.71 airX=16.643 dryAirMass=50.25 XLGain=0.00 W=0.010025 twb=55.48 rh=0.7005 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 261 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 261 @@ -16503,7 +16503,7 @@ Thu 10-Jan hr=18 subhr=14 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 262 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 262 @@ -16566,7 +16566,7 @@ Z1 CZ: anMCp/T[ 0]=68.54/3927.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.703 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 263 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 263 @@ -16629,14 +16629,14 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.929 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=193.28/12410.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 264 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 264 1Z Test ------------------------------------------------------------------------------ - Nair=71956.02 Dair=1205.79 Nrad=54113.29 Drad=823.99 CX=553.42 airX=15.769 + Nair=71956.01 Dair=1205.79 Nrad=54113.29 Drad=823.99 CX=553.42 airX=15.769 ta=60.97 tr=63.78 qIzSh=627 fvent=0.000 pz0=-0.0047 qsHvac=0 @@ -16692,7 +16692,7 @@ Thu 10-Jan hr=18 subhr=21 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 265 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 265 @@ -16755,7 +16755,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.695 mwDuctLk=0.000 mwSys=0.000 tdb=66.55 airX=3.746 dryAirMass=126.17 XLGain=0.00 W=0.009968 twb=57.05 rh=0.5883 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 266 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 266 @@ -16818,7 +16818,7 @@ Attic UZ: anMCp/T[ 0]=183.18/11741.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=69791.84 Dair=1182.68 Nrad=53264.96 Drad=822.40 CX=546.49 airX=14.924 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 267 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 267 @@ -16881,7 +16881,7 @@ Thu 10-Jan hr=18 subhr=28 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.631 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 268 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 268 @@ -16890,7 +16890,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.631 mwDuctLk=0.000 mwSys=0.000 tdb=66.49 airX=2.104 dryAirMass=126.19 XLGain=0.00 W=0.009967 twb=57.03 rh=0.5894 Z1 CZ: anMCp/T[ 0]=64.68/3678.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2032304.18 Dair=30564.80 Nrad=84034.88 Drad=1274.04 CX=295.43 airX=2.104 + Nair=2032304.17 Dair=30564.80 Nrad=84034.88 Drad=1274.04 CX=295.43 airX=2.104 TH=64.21 TD=68.00 TC=74.79 qhCap=20000 qcCap=-34000 ta=66.49 tr=66.06 qIzSh=-622 fvent=0.000 pz0=-0.0056 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.688 mwDuctLk=0.000 mwSys=0.000 @@ -16919,7 +16919,7 @@ Z1 CZ: anMCp/T[ 0]=64.34/3656.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.687 mwDuctLk=0.000 mwSys=0.000 tdb=66.34 airX=3.749 dryAirMass=126.23 XLGain=0.00 W=0.009938 twb=56.94 rh=0.5908 Z2 CZ: anMCp/T[ 0]=115.26/6551.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2044111.98 Dair=30813.35 Nrad=81482.48 Drad=1232.77 CX=350.07 airX=3.749 + Nair=2044111.99 Dair=30813.35 Nrad=81482.48 Drad=1232.77 CX=350.07 airX=3.749 TH=63.00 TD=67.21 TC=75.00 qhCap=20000 qcCap=-34000 ta=66.34 tr=66.15 qIzSh=-1095 fvent=0.000 pz0=-0.0065 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.246 mwDuctLk=0.000 mwSys=0.000 @@ -16944,7 +16944,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.700 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=115.65/6564.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 269 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 269 @@ -17007,7 +17007,7 @@ Attic UZ: anMCp/T[ 0]=175.52/11215.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=59.59 tr=62.19 qIzSh=756 fvent=0.000 pz0=-0.0037 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 270 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 270 @@ -17029,7 +17029,7 @@ Z1 CZ: anMCp/T[ 0]=63.45/3586.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.740 mwDuctLk=0.000 mwSys=0.000 tdb=66.19 airX=3.797 dryAirMass=126.27 XLGain=0.00 W=0.009919 twb=56.87 rh=0.5925 Z2 CZ: anMCp/T[ 0]=116.78/6601.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2039957.61 Dair=30816.95 Nrad=81225.23 Drad=1231.51 CX=349.39 airX=3.797 + Nair=2039957.62 Dair=30816.95 Nrad=81225.23 Drad=1231.51 CX=349.39 airX=3.797 TH=63.00 TD=67.17 TC=75.00 qhCap=20000 qcCap=-34000 ta=66.19 tr=66.01 qIzSh=-1129 fvent=0.000 pz0=-0.0068 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=7.122 mwDuctLk=0.000 mwSys=0.000 @@ -17070,7 +17070,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.544 mwDuctLk=0.000 mwSys=0.000 tdb=66.31 airX=2.040 dryAirMass=126.23 XLGain=0.00 W=0.009936 twb=56.93 rh=0.5911 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 271 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 271 @@ -17133,7 +17133,7 @@ Z2 CZ: anMCp/T[ 0]=118.25/6647.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2035863.88 Dair=30823.50 Nrad=80925.72 Drad=1229.62 CX=350.50 airX=3.844 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 272 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 272 @@ -17196,7 +17196,7 @@ Attic UZ: anMCp/T[ 0]=170.58/10843.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 273 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 273 @@ -17240,7 +17240,7 @@ Z1 CZ: anMCp/T[ 0]=62.59/3499.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.840 mwDuctLk=0.000 mwSys=0.000 tdb=65.90 airX=3.889 dryAirMass=126.34 XLGain=0.00 W=0.009882 twb=56.71 rh=0.5964 Z2 CZ: anMCp/T[ 0]=119.66/6689.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2031635.69 Dair=30829.86 Nrad=80625.26 Drad=1227.74 CX=351.59 airX=3.889 + Nair=2031635.68 Dair=30829.86 Nrad=80625.26 Drad=1227.74 CX=351.59 airX=3.889 TH=63.00 TD=67.17 TC=75.00 qhCap=20000 qcCap=-34000 ta=65.90 tr=65.72 qIzSh=-1196 fvent=0.000 pz0=-0.0073 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.872 mwDuctLk=0.000 mwSys=0.000 @@ -17259,7 +17259,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.478 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=61.29/3421.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 274 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 274 @@ -17322,7 +17322,7 @@ Z2 CZ: anMCp/T[ 0]=120.70/6719.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.17 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 275 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 275 @@ -17385,7 +17385,7 @@ Attic UZ: anMCp/T[ 0]=166.37/10517.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 276 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 276 @@ -17448,7 +17448,7 @@ Z1 CZ: anMCp/T[ 0]=59.74/3302.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=2013318.48 Dair=30525.69 Nrad=83519.58 Drad=1277.93 CX=283.88 airX=1.941 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 277 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 277 @@ -17506,12 +17506,12 @@ Z1 CZ: anMCp/T[ 0]=60.04/3309.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=4.954 mwDuctLk=0.000 mwSys=0.000 tdb=65.50 airX=3.995 dryAirMass=126.45 XLGain=0.00 W=0.009836 twb=56.52 rh=0.6019 Z2 CZ: anMCp/T[ 0]=123.04/6782.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=2020550.31 Dair=30845.08 Nrad=79865.09 Drad=1223.02 CX=354.19 airX=3.995 + Nair=2020550.32 Dair=30845.08 Nrad=79865.09 Drad=1223.02 CX=354.19 airX=3.995 TH=63.00 TD=67.17 TC=75.00 qhCap=20000 qcCap=-34000 ta=65.50 tr=65.35 qIzSh=-1277 fvent=0.000 pz0=-0.0079 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 278 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 278 @@ -17574,7 +17574,7 @@ Attic UZ: anMCp/T[ 0]=162.65/10223.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 279 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 279 @@ -17637,7 +17637,7 @@ Z1 CZ: anMCp/T[ 0]=59.32/3247.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.17 TD=68.00 TC=74.83 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 280 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 280 @@ -17700,7 +17700,7 @@ Z2 CZ: anMCp/T[ 0]=125.27/6837.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.463 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 281 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 281 @@ -17763,7 +17763,7 @@ Attic UZ: anMCp/T[ 0]=160.58/10023.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=20 subhr=1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 282 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 282 @@ -17826,7 +17826,7 @@ Z1 CZ: anMCp/T[ 0]=61.55/3325.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=65.56 tr=65.05 qIzSh=-710 fvent=0.000 pz0=-0.0083 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 283 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 283 @@ -17889,7 +17889,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.501 mwDuctLk=0.000 mwSys=0.000 tdb=56.65 airX=13.179 dryAirMass=50.76 XLGain=0.00 W=0.009738 twb=53.19 rh=0.8166 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 284 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 284 @@ -17952,7 +17952,7 @@ Thu 10-Jan hr=20 subhr=8 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 285 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 285 @@ -18015,7 +18015,7 @@ Z1 CZ: anMCp/T[ 0]=64.11/3409.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.170 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 286 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 286 @@ -18078,7 +18078,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.489 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=165.05/10117.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 287 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 287 @@ -18141,7 +18141,7 @@ Thu 10-Jan hr=20 subhr=15 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 288 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 288 @@ -18204,7 +18204,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.234 mwDuctLk=0.000 mwSys=0.000 tdb=64.35 airX=4.431 dryAirMass=126.80 XLGain=0.00 W=0.009452 twb=55.53 rh=0.6034 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 289 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 289 @@ -18218,7 +18218,7 @@ Z2 CZ: anMCp/T[ 0]=136.86/7163.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.458 mwDuctLk=0.000 mwSys=0.000 tdb=55.52 airX=13.407 dryAirMass=50.89 XLGain=0.00 W=0.009493 twb=52.39 rh=0.8300 Attic UZ: anMCp/T[ 0]=166.19/10112.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=61873.26 Dair=1134.93 Nrad=47615.06 Drad=805.81 CX=522.43 airX=13.407 + Nair=61873.27 Dair=1134.93 Nrad=47615.06 Drad=805.81 CX=522.43 airX=13.407 ta=55.52 tr=57.68 qIzSh=886 fvent=0.000 pz0=-0.0043 qsHvac=0 @@ -18267,7 +18267,7 @@ Attic UZ: anMCp/T[ 0]=166.58/10106.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=61706.69 Dair=1135.99 Nrad=47410.57 Drad=805.06 CX=522.18 airX=13.432 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 290 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 290 @@ -18330,7 +18330,7 @@ Thu 10-Jan hr=20 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.571 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 291 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 291 @@ -18393,7 +18393,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.284 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=140.70/7246.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 292 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 292 @@ -18456,7 +18456,7 @@ Attic UZ: anMCp/T[ 0]=167.72/10070.4 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=54.60 tr=56.78 qIzSh=912 fvent=0.000 pz0=-0.0045 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 293 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 293 @@ -18519,7 +18519,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.603 mwDuctLk=0.000 mwSys=0.000 tdb=64.65 airX=2.276 dryAirMass=126.75 XLGain=0.00 W=0.009309 twb=55.42 rh=0.5878 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 294 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 294 @@ -18533,7 +18533,7 @@ Z1 CZ: anMCp/T[ 0]=70.25/3575.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.311 mwDuctLk=0.000 mwSys=0.000 tdb=63.72 airX=4.633 dryAirMass=127.01 XLGain=0.00 W=0.009160 twb=54.84 rh=0.5982 Z2 CZ: anMCp/T[ 0]=143.32/7295.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971141.34 Dair=30934.35 Nrad=76350.66 Drad=1199.43 CX=368.69 airX=4.633 + Nair=1971141.35 Dair=30934.35 Nrad=76350.66 Drad=1199.43 CX=368.69 airX=4.633 TH=63.00 TD=67.13 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.72 tr=63.67 qIzSh=-1837 fvent=0.000 pz0=-0.0112 qsHvac=0 Attic W: mwIG=0.000 mwInf=0.000 mwAN=6.338 mwDuctLk=0.000 mwSys=0.000 @@ -18573,7 +18573,7 @@ Thu 10-Jan hr=21 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.601 mwDuctLk=0.000 mwSys=0.000 tdb=64.58 airX=2.272 dryAirMass=126.78 XLGain=0.00 W=0.009268 twb=55.32 rh=0.5869 Z1 CZ: anMCp/T[ 0]=70.17/3567.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1975652.00 Dair=30592.16 Nrad=80463.45 Drad=1257.77 CX=292.33 airX=2.272 + Nair=1975651.99 Dair=30592.16 Nrad=80463.45 Drad=1257.77 CX=292.33 airX=2.272 TH=64.08 TD=68.00 TC=74.92 qhCap=20000 qcCap=-34000 ta=64.58 tr=64.09 qIzSh=-964 fvent=0.000 pz0=-0.0111 qsHvac=0 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.294 mwDuctLk=0.000 mwSys=0.000 @@ -18582,7 +18582,7 @@ Z2 CZ: anMCp/T[ 0]=142.84/7261.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=1967944.10 Dair=30936.91 Nrad=76151.04 Drad=1198.19 CX=364.01 airX=4.616 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 295 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 295 @@ -18645,7 +18645,7 @@ Attic UZ: anMCp/T[ 0]=159.46/9511.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 296 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 296 @@ -18708,7 +18708,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.595 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=69.97/3546.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 297 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 297 @@ -18771,7 +18771,7 @@ Z2 CZ: anMCp/T[ 0]=141.40/7159.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.08 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 298 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 298 @@ -18834,7 +18834,7 @@ Attic UZ: anMCp/T[ 0]=146.13/8687.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 299 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 299 @@ -18897,7 +18897,7 @@ Z1 CZ: anMCp/T[ 0]=69.71/3519.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=1961613.72 Dair=30596.95 Nrad=79626.43 Drad=1253.79 CX=293.24 airX=2.255 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 300 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 300 @@ -18932,7 +18932,7 @@ Z1 CZ: anMCp/T[ 0]=69.67/3515.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.213 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.532 dryAirMass=127.21 XLGain=0.00 W=0.009048 twb=54.40 rh=0.6054 Z2 CZ: anMCp/T[ 0]=140.43/7084.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1953796.34 Dair=31038.21 Nrad=73807.43 Drad=1173.53 CX=389.70 airX=9.332 + Nair=1953796.34 Dair=31038.21 Nrad=73807.42 Drad=1173.53 CX=389.70 airX=9.332 TH=63.00 TD=67.08 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.92 qIzSh=-1762 fvent=0.000 pz0=-0.0113 qsHvac=1642 Attic W: mwIG=0.000 mwInf=0.000 mwAN=5.178 mwDuctLk=0.000 mwSys=0.000 @@ -18960,7 +18960,7 @@ Z2 CZ: anMCp/T[ 0]=140.61/7089.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=63.00 tr=62.89 qIzSh=-1769 fvent=0.000 pz0=-0.0113 qsHvac=1730 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 301 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 301 @@ -19023,7 +19023,7 @@ Attic UZ: anMCp/T[ 0]=134.31/7978.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 302 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 302 @@ -19086,7 +19086,7 @@ Z1 CZ: anMCp/T[ 0]=70.12/3525.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.08 TD=68.00 TC=74.92 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 303 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 303 @@ -19149,7 +19149,7 @@ Z2 CZ: anMCp/T[ 0]=141.86/7122.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.731 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 304 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 304 @@ -19212,7 +19212,7 @@ Attic UZ: anMCp/T[ 0]=124.43/7411.6 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=21 subhr=25 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 305 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 305 @@ -19275,7 +19275,7 @@ Z1 CZ: anMCp/T[ 0]=70.73/3540.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.08 tr=63.46 qIzSh=-992 fvent=0.000 pz0=-0.0117 qsHvac=1917 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 306 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 306 @@ -19308,7 +19308,7 @@ Z1 CZ: anMCp/T[ 0]=70.82/3543.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.315 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.613 dryAirMass=127.21 XLGain=0.00 W=0.009052 twb=54.41 rh=0.6057 Z2 CZ: anMCp/T[ 0]=142.94/7151.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971816.98 Dair=31335.12 Nrad=69578.47 Drad=1113.91 CX=463.39 airX=9.413 + Nair=1971816.99 Dair=31335.12 Nrad=69578.47 Drad=1113.91 CX=463.39 airX=9.413 TH=63.00 TD=67.08 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.62 qIzSh=-1854 fvent=0.000 pz0=-0.0117 qsHvac=2471 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.439 mwDuctLk=0.000 mwSys=0.000 @@ -19338,7 +19338,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.394 mwDuctLk=0.000 mwSys=0.000 tdb=51.63 airX=9.448 dryAirMass=51.32 XLGain=0.00 W=0.009062 twb=50.15 rh=0.9144 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 307 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 307 @@ -19401,7 +19401,7 @@ Thu 10-Jan hr=22 subhr=2 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 308 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 308 @@ -19412,7 +19412,7 @@ Thu 10-Jan hr=22 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.635 mwDuctLk=0.000 mwSys=0.000 tdb=64.04 airX=2.286 dryAirMass=126.95 XLGain=0.00 W=0.009073 twb=54.82 rh=0.5862 Z1 CZ: anMCp/T[ 0]=70.69/3534.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1988657.15 Dair=31078.88 Nrad=73062.68 Drad=1156.77 CX=413.96 airX=7.086 + Nair=1988657.14 Dair=31078.88 Nrad=73062.69 Drad=1156.77 CX=413.96 airX=7.086 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=64.04 tr=63.39 qIzSh=-993 fvent=0.000 pz0=-0.0117 qsHvac=1955 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.329 mwDuctLk=0.000 mwSys=0.000 @@ -19464,7 +19464,7 @@ Z1 CZ: anMCp/T[ 0]=70.63/3531.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.335 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 309 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 309 @@ -19527,7 +19527,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.027 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=107.97/6533.8 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 310 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 310 @@ -19551,13 +19551,13 @@ Z1 CZ: anMCp/T[ 0]=70.56/3527.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.344 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.607 dryAirMass=127.21 XLGain=0.00 W=0.009087 twb=54.46 rh=0.6080 Z2 CZ: anMCp/T[ 0]=142.73/7136.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971106.91 Dair=31326.92 Nrad=69565.43 Drad=1116.51 CX=457.62 airX=9.407 + Nair=1971106.92 Dair=31326.92 Nrad=69565.43 Drad=1116.51 CX=457.62 airX=9.407 TH=63.00 TD=67.04 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.51 qIzSh=-1855 fvent=0.000 pz0=-0.0116 qsHvac=2714 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.988 mwDuctLk=0.000 mwSys=0.000 tdb=51.10 airX=8.541 dryAirMass=51.37 XLGain=0.00 W=0.009080 twb=49.97 rh=0.9336 Attic UZ: anMCp/T[ 0]=106.87/6482.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=49388.45 Dair=984.75 Nrad=43259.95 Drad=797.81 CX=474.29 airX=8.541 + Nair=49388.44 Dair=984.75 Nrad=43259.95 Drad=797.81 CX=474.29 airX=8.541 ta=51.10 tr=53.06 qIzSh=1021 fvent=0.000 pz0=-0.0015 qsHvac=0 @@ -19590,7 +19590,7 @@ Thu 10-Jan hr=22 subhr=9 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 311 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 311 @@ -19600,7 +19600,7 @@ Thu 10-Jan hr=22 subhr=9 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.645 mwDuctLk=0.000 mwSys=0.000 tdb=64.04 airX=2.280 dryAirMass=126.95 XLGain=0.00 W=0.009091 twb=54.85 rh=0.5873 Z1 CZ: anMCp/T[ 0]=70.51/3525.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1988795.44 Dair=31082.33 Nrad=72893.14 Drad=1155.71 CX=414.78 airX=7.080 + Nair=1988795.45 Dair=31082.33 Nrad=72893.14 Drad=1155.71 CX=414.78 airX=7.080 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=64.04 tr=63.33 qIzSh=-990 fvent=0.000 pz0=-0.0114 qsHvac=2065 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.351 mwDuctLk=0.000 mwSys=0.000 @@ -19653,7 +19653,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.358 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.603 dryAirMass=127.20 XLGain=0.00 W=0.009113 twb=54.50 rh=0.6097 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 312 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 312 @@ -19716,7 +19716,7 @@ Attic UZ: anMCp/T[ 0]=101.67/6266.2 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=48261.91 Dair=967.98 Nrad=42837.74 Drad=797.49 CX=468.50 airX=8.120 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 313 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 313 @@ -19756,7 +19756,7 @@ Thu 10-Jan hr=22 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.653 mwDuctLk=0.000 mwSys=0.000 tdb=64.04 airX=2.276 dryAirMass=126.95 XLGain=0.00 W=0.009118 twb=54.89 rh=0.5890 Z1 CZ: anMCp/T[ 0]=70.37/3518.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1988904.38 Dair=31084.85 Nrad=72781.04 Drad=1154.98 CX=415.38 airX=7.076 + Nair=1988904.37 Dair=31084.85 Nrad=72781.04 Drad=1154.98 CX=415.38 airX=7.076 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=64.04 tr=63.29 qIzSh=-988 fvent=0.000 pz0=-0.0111 qsHvac=2135 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.373 mwDuctLk=0.000 mwSys=0.000 @@ -19779,7 +19779,7 @@ Thu 10-Jan hr=22 subhr=16 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.654 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 314 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 314 @@ -19842,7 +19842,7 @@ Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.386 mwDuctLk=0.000 mwSys=0.000 Z2 CZ: anMCp/T[ 0]=142.50/7125.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 315 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 315 @@ -19866,7 +19866,7 @@ Thu 10-Jan hr=22 subhr=19 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.658 mwDuctLk=0.000 mwSys=0.000 tdb=64.04 airX=2.273 dryAirMass=126.94 XLGain=0.00 W=0.009141 twb=54.93 rh=0.5905 Z1 CZ: anMCp/T[ 0]=70.28/3514.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1988951.09 Dair=31086.00 Nrad=72724.13 Drad=1154.63 CX=415.65 airX=7.073 + Nair=1988951.09 Dair=31086.01 Nrad=72724.13 Drad=1154.63 CX=415.65 airX=7.073 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=64.04 tr=63.26 qIzSh=-987 fvent=0.000 pz0=-0.0108 qsHvac=2171 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.390 mwDuctLk=0.000 mwSys=0.000 @@ -19905,7 +19905,7 @@ Attic UZ: anMCp/T[ 0]=97.54/6167.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=50.44 tr=52.16 qIzSh=1247 fvent=0.000 pz0=-0.0004 qsHvac=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 316 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 316 @@ -19944,7 +19944,7 @@ Thu 10-Jan hr=22 subhr=22 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.662 mwDuctLk=0.000 mwSys=0.000 tdb=64.04 airX=2.271 dryAirMass=126.94 XLGain=0.00 W=0.009159 twb=54.96 rh=0.5917 Z1 CZ: anMCp/T[ 0]=70.21/3510.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1988976.06 Dair=31086.66 Nrad=72688.89 Drad=1154.42 CX=415.80 airX=7.071 + Nair=1988976.05 Dair=31086.66 Nrad=72688.90 Drad=1154.42 CX=415.80 airX=7.071 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=64.04 tr=63.25 qIzSh=-986 fvent=0.000 pz0=-0.0106 qsHvac=2194 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.403 mwDuctLk=0.000 mwSys=0.000 @@ -19968,7 +19968,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.664 mwDuctLk=0.000 mwSys=0.000 tdb=64.04 airX=2.270 dryAirMass=126.94 XLGain=0.00 W=0.009166 twb=54.97 rh=0.5921 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 317 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 317 @@ -19999,13 +19999,13 @@ Thu 10-Jan hr=22 subhr=24 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.666 mwDuctLk=0.000 mwSys=0.000 tdb=64.04 airX=2.270 dryAirMass=126.94 XLGain=0.00 W=0.009172 twb=54.98 rh=0.5925 Z1 CZ: anMCp/T[ 0]=70.18/3508.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1988989.76 Dair=31087.03 Nrad=72668.34 Drad=1154.30 CX=415.88 airX=7.070 + Nair=1988989.75 Dair=31087.03 Nrad=72668.35 Drad=1154.30 CX=415.88 airX=7.070 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=64.04 tr=63.24 qIzSh=-985 fvent=0.000 pz0=-0.0104 qsHvac=2208 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.412 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.599 dryAirMass=127.18 XLGain=0.00 W=0.009209 twb=54.66 rh=0.6161 Z2 CZ: anMCp/T[ 0]=142.47/7123.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971379.73 Dair=31334.18 Nrad=69252.19 Drad=1114.53 CX=459.09 airX=9.399 + Nair=1971379.72 Dair=31334.18 Nrad=69252.19 Drad=1114.53 CX=459.09 airX=9.399 TH=63.00 TD=67.04 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.39 qIzSh=-1852 fvent=0.000 pz0=-0.0106 qsHvac=2954 Attic W: mwIG=0.000 mwInf=0.000 mwAN=3.838 mwDuctLk=0.000 mwSys=0.000 @@ -20031,7 +20031,7 @@ Z2 CZ: anMCp/T[ 0]=142.45/7122.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=1971393.59 Dair=31334.50 Nrad=69239.47 Drad=1114.44 CX=459.17 airX=9.399 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 318 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 318 @@ -20094,7 +20094,7 @@ Attic UZ: anMCp/T[ 0]=107.09/6803.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 319 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 319 @@ -20157,7 +20157,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.664 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=69.92/3495.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 320 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 320 @@ -20220,7 +20220,7 @@ Z2 CZ: anMCp/T[ 0]=142.38/7119.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=63.00 TD=67.00 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 321 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 321 @@ -20248,7 +20248,7 @@ Z1 CZ: anMCp/T[ 0]=69.79/3489.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.404 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.597 dryAirMass=127.17 XLGain=0.00 W=0.009253 twb=54.73 rh=0.6189 Z2 CZ: anMCp/T[ 0]=142.38/7119.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971464.45 Dair=31336.31 Nrad=69159.72 Drad=1113.91 CX=461.39 airX=9.397 + Nair=1971464.46 Dair=31336.31 Nrad=69159.72 Drad=1113.91 CX=461.39 airX=9.397 TH=63.00 TD=67.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.35 qIzSh=-1851 fvent=0.000 pz0=-0.0100 qsHvac=3021 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.194 mwDuctLk=0.000 mwSys=0.000 @@ -20283,7 +20283,7 @@ Attic UZ: anMCp/T[ 0]=110.58/7022.7 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 322 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 322 @@ -20297,7 +20297,7 @@ Thu 10-Jan hr=23 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.642 mwDuctLk=0.000 mwSys=0.000 tdb=64.00 airX=2.257 dryAirMass=126.94 XLGain=0.00 W=0.009221 twb=55.04 rh=0.5965 Z1 CZ: anMCp/T[ 0]=69.79/3489.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1987636.70 Dair=31086.14 Nrad=72591.01 Drad=1154.14 CX=416.88 airX=7.057 + Nair=1987636.71 Dair=31086.14 Nrad=72591.01 Drad=1154.14 CX=416.88 airX=7.057 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=64.00 tr=63.19 qIzSh=-977 fvent=0.000 pz0=-0.0098 qsHvac=2214 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.390 mwDuctLk=0.000 mwSys=0.000 @@ -20343,10 +20343,10 @@ Thu 10-Jan hr=23 subhr=7 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.635 mwDuctLk=0.000 mwSys=0.000 tdb=64.00 airX=2.257 dryAirMass=126.94 XLGain=0.00 W=0.009219 twb=55.03 rh=0.5964 Z1 CZ: anMCp/T[ 0]=69.79/3489.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1987654.03 Dair=31086.55 Nrad=72571.93 Drad=1154.02 CX=416.98 airX=7.057 + Nair=1987654.04 Dair=31086.55 Nrad=72571.93 Drad=1154.02 CX=416.98 airX=7.057 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 323 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 323 @@ -20358,7 +20358,7 @@ Z1 CZ: anMCp/T[ 0]=69.79/3489.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.375 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.596 dryAirMass=127.17 XLGain=0.00 W=0.009233 twb=54.69 rh=0.6176 Z2 CZ: anMCp/T[ 0]=142.35/7117.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971491.21 Dair=31337.00 Nrad=69128.21 Drad=1113.70 CX=461.57 airX=9.396 + Nair=1971491.20 Dair=31337.00 Nrad=69128.21 Drad=1113.70 CX=461.57 airX=9.396 TH=63.00 TD=67.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.34 qIzSh=-1851 fvent=0.000 pz0=-0.0100 qsHvac=3043 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.192 mwDuctLk=0.000 mwSys=0.000 @@ -20375,7 +20375,7 @@ Thu 10-Jan hr=23 subhr=8 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.632 mwDuctLk=0.000 mwSys=0.000 tdb=64.00 airX=2.257 dryAirMass=126.94 XLGain=0.00 W=0.009216 twb=55.03 rh=0.5962 Z1 CZ: anMCp/T[ 0]=69.78/3489.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1987661.71 Dair=31086.74 Nrad=72563.07 Drad=1153.96 CX=417.03 airX=7.057 + Nair=1987661.70 Dair=31086.74 Nrad=72563.07 Drad=1153.96 CX=417.03 airX=7.057 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=64.00 tr=63.18 qIzSh=-977 fvent=0.000 pz0=-0.0098 qsHvac=2232 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.368 mwDuctLk=0.000 mwSys=0.000 @@ -20409,7 +20409,7 @@ Z2 CZ: anMCp/T[ 0]=142.32/7115.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=63.00 tr=62.34 qIzSh=-1850 fvent=0.000 pz0=-0.0099 qsHvac=3053 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 324 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 324 @@ -20472,7 +20472,7 @@ Attic UZ: anMCp/T[ 0]=110.49/7016.9 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 325 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 325 @@ -20531,11 +20531,11 @@ Thu 10-Jan hr=23 subhr=14 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.610 mwDuctLk=0.000 mwSys=0.000 tdb=64.00 airX=2.256 dryAirMass=126.94 XLGain=0.00 W=0.009188 twb=54.99 rh=0.5944 Z1 CZ: anMCp/T[ 0]=69.75/3487.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1987693.93 Dair=31087.60 Nrad=72517.82 Drad=1153.68 CX=417.23 airX=7.056 + Nair=1987693.92 Dair=31087.60 Nrad=72517.82 Drad=1153.68 CX=417.23 airX=7.056 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 326 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 326 @@ -20563,7 +20563,7 @@ Thu 10-Jan hr=23 subhr=15 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=2.607 mwDuctLk=0.000 mwSys=0.000 tdb=64.00 airX=2.255 dryAirMass=126.94 XLGain=0.00 W=0.009182 twb=54.98 rh=0.5940 Z1 CZ: anMCp/T[ 0]=69.74/3486.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1987697.60 Dair=31087.71 Nrad=72511.34 Drad=1153.64 CX=417.26 airX=7.055 + Nair=1987697.59 Dair=31087.71 Nrad=72511.34 Drad=1153.64 CX=417.26 airX=7.055 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=64.00 tr=63.16 qIzSh=-976 fvent=0.000 pz0=-0.0097 qsHvac=2267 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.315 mwDuctLk=0.000 mwSys=0.000 @@ -20592,13 +20592,13 @@ Z1 CZ: anMCp/T[ 0]=69.73/3486.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.307 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.589 dryAirMass=127.19 XLGain=0.00 W=0.009151 twb=54.56 rh=0.6122 Z2 CZ: anMCp/T[ 0]=142.17/7108.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971504.74 Dair=31337.68 Nrad=69076.27 Drad=1113.40 CX=461.77 airX=9.389 + Nair=1971504.75 Dair=31337.68 Nrad=69076.27 Drad=1113.40 CX=461.77 airX=9.389 TH=63.00 TD=67.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.32 qIzSh=-1848 fvent=0.000 pz0=-0.0098 qsHvac=3082 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.156 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 327 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 327 @@ -20661,7 +20661,7 @@ Attic UZ: anMCp/T[ 0]=110.32/7006.3 anMCp/T[ 1]=0.00/0.0 ventUt=0 Thu 10-Jan hr=23 subhr=19 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 328 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 328 @@ -20679,7 +20679,7 @@ Z1 CZ: anMCp/T[ 0]=69.70/3485.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.284 mwDuctLk=0.000 mwSys=0.000 tdb=63.00 airX=4.587 dryAirMass=127.20 XLGain=0.00 W=0.009118 twb=54.51 rh=0.6100 Z2 CZ: anMCp/T[ 0]=142.10/7104.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=1971501.86 Dair=31337.77 Nrad=69062.86 Drad=1113.33 CX=461.80 airX=9.387 + Nair=1971501.87 Dair=31337.77 Nrad=69062.86 Drad=1113.33 CX=461.80 airX=9.387 TH=63.00 TD=67.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=63.00 tr=62.32 qIzSh=-1847 fvent=0.000 pz0=-0.0098 qsHvac=3093 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.142 mwDuctLk=0.000 mwSys=0.000 @@ -20708,7 +20708,7 @@ Z2 CZ: anMCp/T[ 0]=142.07/7103.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.137 mwDuctLk=0.000 mwSys=0.000 tdb=49.06 airX=8.780 dryAirMass=51.58 XLGain=75.25 W=0.009016 twb=49.06 rh=1.0000 Attic UZ: anMCp/T[ 0]=110.30/7005.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=47885.89 Dair=988.90 Nrad=40340.60 Drad=788.16 CX=468.63 airX=8.780 + Nair=47885.90 Dair=988.90 Nrad=40340.60 Drad=788.16 CX=468.63 airX=8.780 ta=49.06 tr=50.39 qIzSh=1594 fvent=0.000 pz0=0.0015 qsHvac=0 @@ -20724,7 +20724,7 @@ Z1 CZ: anMCp/T[ 0]=69.68/3484.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=64.00 tr=63.14 qIzSh=-976 fvent=0.000 pz0=-0.0096 qsHvac=2290 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 329 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 329 @@ -20787,7 +20787,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.124 mwDuctLk=0.000 mwSys=0.000 tdb=48.93 airX=8.776 dryAirMass=51.60 XLGain=82.38 W=0.008971 twb=48.93 rh=1.0000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 330 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 330 @@ -20850,7 +20850,7 @@ Thu 10-Jan hr=23 subhr=26 ---------------- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 331 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 331 @@ -20913,7 +20913,7 @@ Z1 CZ: anMCp/T[ 0]=69.60/3480.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Z2 W: mwIG=0.000 mwInf=0.000 mwAN=5.215 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 332 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 332 @@ -20953,7 +20953,7 @@ Attic W: mwIG=0.000 mwInf=0.000 mwAN=4.099 mwDuctLk=0.000 mwSys=0.000 Attic UZ: anMCp/T[ 0]=110.37/7009.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=47549.00 Dair=988.64 Nrad=39855.65 Drad=786.59 CX=467.34 airX=8.777 ta=48.68 tr=49.93 qIzSh=1636 fvent=0.000 pz0=0.0021 qsHvac=0 -! CSE 0.893.0 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -20976,7 +20976,7 @@ Attic UZ: anMCp/T[ 0]=110.37/7009.1 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 333 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 333 @@ -21039,7 +21039,7 @@ Input for Run 001: DELETE HOLIDAY "Columbus Day" ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 334 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 334 @@ -21102,7 +21102,7 @@ Input for Run 001: // ----- CONSTRUCTION section for heavyweight case ----- ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 335 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 335 @@ -21165,7 +21165,7 @@ Input for Run 001: # #define ACEIL 516.68 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 336 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 336 @@ -21228,7 +21228,7 @@ Input for Run 001: sfCon=WALLCON ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 337 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 337 @@ -21291,7 +21291,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 338 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 338 @@ -21354,7 +21354,7 @@ Input for Run 001: ohExL=1.64 //distance:left edge of win to left edge of oh ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 339 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 339 @@ -21417,7 +21417,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 340 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 340 @@ -21480,7 +21480,7 @@ Input for Run 001: ohDistUp=1.64 //distance from top of window ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 341 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 341 @@ -21543,7 +21543,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 342 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 342 @@ -21606,7 +21606,7 @@ Input for Run 001: ENDzone // Z2 ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 343 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 343 @@ -21669,7 +21669,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 344 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 344 @@ -21732,7 +21732,7 @@ Input for Run 001: REPORT rpType=ZEB rpFreq=MONTH rpZone="Attic" ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 345 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 345 @@ -21795,7 +21795,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 346 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 346 @@ -21858,7 +21858,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 347 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 347 @@ -21867,21 +21867,21 @@ Input for Run 001: -! CSE 0.893.0 for Win32 console run(s) done: Tue 22-Jun-21 11:12:12 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 9:50:40 am -! Executable: d:\cse\msvc\cse.exe -! 22-Jun-21 10:50 am (VS 14.29 2640384 bytes) (HPWH 1.14.0+master.7e0a1c1.4) -! Command line: -x! -t1 2zattic -! Input file: D:\cse\test\2zattic.cse -! Report file: D:\cse\test\2zattic.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 27-Oct-21 9:48 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 2zattic +! Input file: C:\Users\nkruis\projects\cse\test\2zattic.cse +! Report file: C:\Users\nkruis\projects\cse\test\2zattic.rep ! Timing info -- -! Input: Time = 0.05 Calls = 1 T/C = 0.0520 +! Input: Time = 0.13 Calls = 1 T/C = 0.1310 ! AutoSizing: Time = 0.00 Calls = 0 T/C = 0.0000 -! Simulation: Time = 4.02 Calls = 1 T/C = 4.0190 -! Reports: Time = 0.06 Calls = 1 T/C = 0.0580 -! Total: Time = 4.13 Calls = 1 T/C = 4.1320 +! Simulation: Time = 5.67 Calls = 1 T/C = 5.6700 +! Reports: Time = 0.03 Calls = 1 T/C = 0.0280 +! Total: Time = 5.83 Calls = 1 T/C = 5.8300 @@ -21921,5 +21921,5 @@ Input for Run 001: ------------------------------------------------------------------------------ -! 2zattic 001 Tue 22-Jun-21 11:12:07 am Page 348 +! 2zattic 001 Wed 27-Oct-21 9:50:34 am Page 348 \ No newline at end of file diff --git a/test/ref/ASHP_DFNG.REP b/test/ref/ASHP_DFNG.REP index ff3a1f75c..ddb332fb4 100644 --- a/test/ref/ASHP_DFNG.REP +++ b/test/ref/ASHP_DFNG.REP @@ -10,20 +10,20 @@ Monthly Energy Use, meter "MtrElec" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 3.810 0 1.826 1.284 0 0 0 0 0.396 0.0561 0 0.0984 0 0.200 0.766 0.0523 0.150 0 0 0 .00748 0 0 0 -1.027 -Feb 2.797 0 1.499 0.995 0 0 0 0 0.326 0.0507 0 0.0768 0 0.168 0.636 0.0441 0.135 0 0 0 .00658 0 0 0 -1.140 +Jan 3.811 0 1.826 1.284 0 0 0 0 0.396 0.0561 0 0.0984 0 0.200 0.766 0.0523 0.150 0 0 0 .00748 0 0 0 -1.027 +Feb 2.797 0 1.499 0.994 0 0 0 0 0.326 0.0507 0 0.0768 0 0.168 0.636 0.0441 0.135 0 0 0 .00658 0 0 0 -1.140 Mar 1.937 0 1.327 0.551 0 0 0 0 0.282 0.0561 0 0.0759 0 0.171 0.676 0.0448 0.149 0 0 0 .00734 0 0 0 -1.404 Apr 1.939 0 1.352 0.682 0 0 0 0 0.289 0.0543 0 0.0863 0 0.151 0.645 0.0395 0.145 0 0 0 .00588 0 0 0 -1.510 -May -0.514 0 0.320 0.107 0 0 0 0 0.0659 0.0561 0 0.0295 0 0.141 0.625 0.0369 0.153 0 0 0 .00609 0 0 0 -2.055 +May -0.515 0 0.320 0.107 0 0 0 0 0.0658 0.0561 0 0.0295 0 0.141 0.625 0.0369 0.153 0 0 0 .00609 0 0 0 -2.055 Jun -0.794 0.0464 0.0780 .00628 0 0 0 0.0399 0.0151 0.0543 0 .00682 0 0.130 0.579 0.0340 0.154 0 0 0 .00619 0 0 0 -1.944 Jul -1.032 0.0248 0.0182 0 0 0 0 0.0937 .00342 0.0561 0 0 0 0.138 0.625 0.0360 0.167 0 0 0 .00679 0 0 0 -2.200 Aug -0.728 0.139 0 0 0 0 0 0.157 0 0.0561 0 0 0 0.148 0.648 0.0387 0.173 0 0 0 .00629 0 0 0 -2.094 Sep -0.602 .00837 0.0451 0.0145 0 0 0 0.0673 .00904 0.0543 0 .00696 0 0.159 0.660 0.0417 0.157 0 0 0 .00611 0 0 0 -1.832 -Oct 0.428 0 0.426 0.129 0 0 0 0.0209 0.0894 0.0561 0 0.0285 0 0.180 0.726 0.0470 0.154 0 0 0 .00629 0 0 0 -1.435 +Oct 0.429 0 0.426 0.129 0 0 0 0.0209 0.0895 0.0561 0 0.0285 0 0.180 0.726 0.0470 0.154 0 0 0 .00629 0 0 0 -1.435 Nov 1.900 0 1.033 0.382 0 0 0 0 0.218 0.0544 0 0.0554 0 0.189 0.731 0.0494 0.146 0 0 0 .00747 0 0 0 -0.965 -Dec 3.296 0 1.645 0.920 0 0 0 0 0.355 0.0561 0 0.0778 0 0.201 0.775 0.0527 0.150 0 0 0 .00799 0 0 0 -0.946 +Dec 3.297 0 1.645 0.921 0 0 0 0 0.355 0.0561 0 0.0778 0 0.201 0.775 0.0527 0.150 0 0 0 .00799 0 0 0 -0.946 -Yr 12.437 0.219 9.570 5.071 0 0 0 0.379 2.050 0.661 0 0.542 0 1.975 8.093 0.517 1.833 0 0 0 0.0805 0 0 0 -18.55 +Yr 12.438 0.219 9.570 5.072 0 0 0 0.379 2.050 0.661 0 0.542 0 1.975 8.093 0.517 1.833 0 0 0 0.0805 0 0 0 -18.55 @@ -60,7 +60,7 @@ HVAC Cooling Info ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 1 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 1 @@ -123,7 +123,7 @@ HVAC Heating Info ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 2 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 2 @@ -186,7 +186,7 @@ Hourly User-defined Report, Mon 05-Jan 1 5 18 37.9 0.551 0 8 0 0 0 1 0 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 3 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 3 @@ -249,7 +249,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 4 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 4 @@ -312,7 +312,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 .00024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00024 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 5 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 5 @@ -336,20 +336,20 @@ Monthly User-defined Report Month hrsOn hrsOnAux qh qcSen qcLat qFan qDefrost qAux ----- ----- -------- ------- ------- ------- ------- ------- ------- - 1 466.4 28.905 6219 0 0 396 562 723 - 2 383.7 22.766 5132 0 0 326 425 569 - 3 332.3 2.593 4689 0 0 282 486 65 - 4 339.7 7.793 4649 0 0 289 487 195 - 5 77.57 0.0167 1157 0 0 66 107 0 + 1 466.5 28.910 6220 0 0 396 562 723 + 2 383.7 22.762 5132 0 0 326 425 569 + 3 332.3 2.593 4688 0 0 282 486 65 + 4 339.8 7.794 4650 0 0 289 487 195 + 5 77.48 0.0152 1155 0 0 66 107 0 6 29.49 0 315 -196 -12 25 6 0 7 10.54 0 75 -110 -11 9 0 0 8 36.17 0 0 -620 -3 31 0 0 9 12.97 0 164 -41 0 11 15 0 - 10 105.2 0.213 1515 0 0 89 123 5 - 11 256.1 1.643 3675 0 0 218 341 41 - 12 418.3 16.935 5723 0 0 355 497 423 + 10 105.3 0.213 1515 0 0 89 123 5 + 11 256.1 1.641 3676 0 0 218 341 41 + 12 418.3 16.974 5723 0 0 355 497 424 - Yr 2468 80.864 33313 -968 -26 2098 3049 2022 + Yr 2468 80.902 33314 -968 -26 2098 3049 2023 @@ -375,7 +375,7 @@ Monthly User-defined Report ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 6 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 6 @@ -396,15 +396,15 @@ Subhourly User-defined Report, Sun 04-Jan 1 4 0 5 18.1 68.00 0 11873 2.948 1.000 1.000 1.000 1.000 0.382 2.948 10925 9551 98 850 21424 17936 1 4 1 0 18.4 68.00 0 11940 2.957 1.000 1.000 1.000 1.000 0.382 2.957 10966 9538 124 850 21478 17985 1 4 1 1 18.7 68.00 0 12006 2.966 1.000 1.000 1.000 1.000 0.380 2.966 11006 9504 150 850 21510 18001 - 1 4 1 2 19.0 68.00 0 12073 2.976 1.000 1.000 1.000 1.000 0.378 2.976 11047 9459 176 850 21532 17999 + 1 4 1 2 19.0 68.00 0 12073 2.976 1.000 1.000 1.000 1.000 0.378 2.976 11047 9457 176 850 21530 17999 1 4 1 3 19.3 68.00 0 12140 2.985 1.000 1.000 1.000 1.000 0.374 2.985 11088 9345 202 850 21485 17948 1 4 1 4 19.6 68.00 0 12207 2.995 1.000 1.000 1.000 1.000 0.371 2.995 11129 9283 228 850 21490 17949 - 1 4 1 5 19.9 68.00 0 12273 3.004 1.000 1.000 1.000 1.000 0.366 3.004 11170 9141 254 850 21415 17871 + 1 4 1 5 19.9 68.00 0 12273 3.004 1.000 1.000 1.000 1.000 0.366 3.004 11170 9141 254 850 21415 17872 1 4 2 0 20.0 68.00 0 12280 3.005 1.000 1.000 1.000 1.000 0.369 3.005 11174 9229 256 850 21509 17948 1 4 2 1 20.0 68.00 0 12287 3.006 1.000 1.000 1.000 1.000 0.368 3.006 11178 9207 259 850 21494 17938 1 4 2 2 20.0 68.00 0 12293 3.007 1.000 1.000 1.000 1.000 0.370 3.007 11182 9239 261 850 21532 17984 1 4 2 3 20.1 68.00 0 12300 3.008 1.000 1.000 1.000 1.000 0.370 3.008 11186 9261 264 850 21561 18020 - 1 4 2 4 20.1 68.00 0 12307 3.009 1.000 1.000 1.000 1.000 0.371 3.009 11190 9274 267 850 21581 18051 + 1 4 2 4 20.1 68.00 0 12307 3.009 1.000 1.000 1.000 1.000 0.371 3.009 11190 9274 267 850 21580 18051 1 4 2 5 20.1 68.00 0 12313 3.010 1.000 1.000 1.000 1.000 0.371 3.010 11194 9283 269 850 21596 18075 1 4 3 0 20.2 68.00 0 12340 3.013 1.000 1.000 1.000 1.000 0.369 3.013 11211 9228 280 850 21568 18052 1 4 3 1 20.4 68.00 0 12367 3.017 1.000 1.000 1.000 1.000 0.369 3.017 11227 9216 290 850 21583 18068 @@ -435,28 +435,28 @@ Subhourly User-defined Report, Sun 04-Jan 1 4 7 2 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.300 3.038 11317 7512 347 850 20026 16676 1 4 7 3 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.287 3.038 11317 7184 347 850 19698 16393 1 4 7 4 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.267 3.038 11317 6670 347 850 19184 15958 - 1 4 7 5 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.245 3.038 11317 6126 347 850 18640 15495 + 1 4 7 5 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.245 3.038 11317 6126 347 850 18640 15494 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 7 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 7 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 4 8 0 21.2 68.00 0 12547 3.042 1.000 1.000 1.000 1.000 0.179 3.042 11337 4486 360 850 17033 14143 - 1 4 8 1 21.3 68.00 0 12580 3.047 1.000 1.000 1.000 1.000 0.136 3.047 11358 3411 373 850 15991 13263 - 1 4 8 2 21.5 68.00 0 12614 3.052 1.000 1.000 1.000 1.000 0.0970 3.052 11378 2424 386 850 15037 12450 - 1 4 8 3 21.6 68.00 0 12647 3.056 1.000 1.000 1.000 1.000 0.0611 3.056 11398 1527 399 850 14174 11714 - 1 4 8 4 21.8 68.00 0 12680 3.061 1.000 1.000 1.000 1.000 0.0363 3.061 11419 907 412 850 13587 11214 - 1 4 8 5 21.9 68.00 0 12714 3.066 1.000 1.000 1.000 1.000 0.0108 3.066 11439 271 425 850 12984 10698 - 1 4 9 0 22.5 68.00 0 12834 3.082 0.984 0.984 1.000 0.998 0 3.077 11333 0 464 837 12633 10423 + 1 4 8 0 21.2 68.00 0 12547 3.042 1.000 1.000 1.000 1.000 0.179 3.042 11337 4485 360 850 17032 14142 + 1 4 8 1 21.3 68.00 0 12580 3.047 1.000 1.000 1.000 1.000 0.136 3.047 11358 3412 373 850 15992 13263 + 1 4 8 2 21.5 68.00 0 12614 3.052 1.000 1.000 1.000 1.000 0.0969 3.052 11378 2423 386 850 15037 12449 + 1 4 8 3 21.6 68.00 0 12647 3.056 1.000 1.000 1.000 1.000 0.0611 3.056 11398 1526 399 850 14173 11714 + 1 4 8 4 21.8 68.00 0 12680 3.061 1.000 1.000 1.000 1.000 0.0364 3.061 11419 910 412 850 13590 11216 + 1 4 8 5 21.9 68.00 0 12714 3.066 1.000 1.000 1.000 1.000 0.0107 3.066 11439 268 425 850 12981 10695 + 1 4 9 0 22.5 68.00 0 12834 3.082 0.984 0.984 1.000 0.998 0 3.077 11334 0 464 837 12634 10423 1 4 9 1 23.0 68.00 0 12954 3.099 0.925 0.925 1.000 0.992 0 3.073 10717 0 479 786 11982 9880 - 1 4 9 2 23.5 68.00 0 13074 3.116 0.861 0.861 1.000 0.984 0 3.067 10041 0 486 732 11259 9280 + 1 4 9 2 23.5 68.00 0 13074 3.116 0.861 0.861 1.000 0.984 0 3.067 10042 0 486 732 11259 9281 1 4 9 3 24.1 68.00 0 13194 3.132 0.800 0.800 1.000 0.977 0 3.062 9385 0 489 680 10553 8694 1 4 9 4 24.6 68.00 0 13314 3.149 0.743 0.743 1.000 0.971 0 3.058 8768 0 488 631 9887 8140 - 1 4 9 5 25.2 68.00 0 13434 3.165 0.687 0.687 1.000 0.965 0 3.054 8165 0 484 584 9233 7597 + 1 4 9 5 25.2 68.00 0 13434 3.165 0.687 0.687 1.000 0.965 0 3.054 8164 0 484 584 9232 7597 1 4 10 0 25.4 68.00 0 13494 3.174 0.691 0.691 1.000 0.965 0 3.063 8233 0 503 587 9323 7666 1 4 10 1 25.7 68.00 0 13554 3.182 0.653 0.653 1.000 0.961 0 3.058 7806 0 490 555 8851 7273 1 4 10 2 26.0 68.00 0 13614 3.190 0.618 0.618 1.000 0.957 0 3.053 7409 0 478 525 8412 6911 @@ -486,7 +486,7 @@ CZ16 Dual Fuel 1 4 14 2 26.7 68.00 0 13775 3.212 0.388 0.388 1.000 0.931 0 2.991 4687 0 324 330 5341 4408 1 4 14 3 26.8 68.00 0 13795 3.215 0.390 0.390 1.000 0.931 0 2.994 4714 0 329 331 5374 4438 1 4 14 4 26.9 68.00 0 13815 3.218 0.395 0.395 1.000 0.932 0 2.998 4781 0 336 335 5452 4507 - 1 4 14 5 27.0 68.00 0 13835 3.220 0.397 0.397 1.000 0.932 0 3.002 4816 0 341 338 5495 4542 + 1 4 14 5 27.0 68.00 0 13835 3.220 0.397 0.397 1.000 0.932 0 3.002 4816 0 341 338 5495 4541 1 4 15 0 26.9 68.00 0 13828 3.219 0.391 0.391 1.000 0.932 0 2.999 4741 0 335 332 5408 4480 1 4 15 1 26.9 68.00 0 13821 3.218 0.398 0.398 1.000 0.932 0 3.001 4826 0 340 338 5505 4564 1 4 15 2 26.9 68.00 0 13815 3.218 0.407 0.407 1.000 0.933 0 3.003 4927 0 346 346 5619 4660 @@ -501,7 +501,7 @@ CZ16 Dual Fuel 1 4 16 5 25.9 68.00 0 13594 3.187 0.775 0.775 1.000 0.975 0 3.107 9288 0 594 659 10541 8747 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 8 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 8 @@ -564,7 +564,7 @@ Subhourly User-defined Report, Mon 05-Jan 1 5 0 5 26.2 68.00 0 13674 3.198 1.000 1.000 1.000 1.000 0.206 3.198 12027 5162 797 850 18837 15488 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 9 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 9 @@ -588,7 +588,7 @@ CZ16 Dual Fuel 1 5 3 2 30.1 68.00 0 14535 3.316 1.000 1.000 1.000 1.000 0.148 3.316 12554 3709 1131 850 18244 14856 1 5 3 3 30.4 68.00 0 14609 3.326 1.000 1.000 1.000 1.000 0.145 3.326 12599 3618 1160 850 18226 14845 1 5 3 4 30.8 68.00 0 14682 3.335 1.000 1.000 1.000 1.000 0.136 3.335 12644 3403 1188 850 18085 14714 - 1 5 3 5 31.1 68.00 0 14755 3.345 1.000 1.000 1.000 1.000 0.132 3.345 12689 3312 1217 850 18067 14703 + 1 5 3 5 31.1 68.00 0 14755 3.345 1.000 1.000 1.000 1.000 0.132 3.345 12689 3312 1217 850 18067 14702 1 5 4 0 31.3 68.00 0 14795 3.351 1.000 1.000 1.000 1.000 0.126 3.351 12713 3149 1232 850 17944 14592 1 5 4 1 31.5 68.00 0 14835 3.356 1.000 1.000 1.000 1.000 0.125 3.356 12738 3137 1248 850 17972 14622 1 5 4 2 31.6 68.00 0 14875 3.362 1.000 1.000 1.000 1.000 0.119 3.362 12762 2977 1263 850 17852 14516 @@ -627,7 +627,7 @@ CZ16 Dual Fuel 1 5 9 5 38.1 68.00 0 16317 3.553 0.278 0.278 1.000 0.919 0 3.265 3793 0 507 236 4535 3630 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 10 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 10 @@ -638,46 +638,46 @@ CZ16 Dual Fuel 1 5 10 1 38.8 68.00 0 16477 3.574 0.272 0.272 1.000 0.918 0 3.281 3733 0 512 231 4476 3581 1 5 10 2 39.2 68.00 0 16557 3.585 0.240 0.240 1.000 0.915 0 3.278 3315 0 460 204 3979 3183 1 5 10 3 39.6 68.00 0 16637 3.595 0.226 0.226 1.000 0.913 0 3.282 3123 0 439 192 3753 3003 - 1 5 10 4 39.9 68.00 0 16717 3.606 0.203 0.203 1.000 0.910 0 3.283 2821 0 402 173 3396 2714 + 1 5 10 4 39.9 68.00 0 16717 3.606 0.203 0.203 1.000 0.910 0 3.283 2821 0 402 173 3395 2713 1 5 10 5 40.3 68.00 0 16797 3.616 0.191 0.191 1.000 0.909 0 3.287 2658 0 383 162 3203 2562 1 5 11 0 40.5 68.00 0 16844 3.622 0.208 0.208 1.000 0.911 0 3.299 2901 0 421 177 3499 2797 1 5 11 1 40.7 68.00 0 16890 3.628 0.200 0.200 1.000 0.910 0 3.302 2801 0 409 170 3380 2703 - 1 5 11 2 40.9 68.00 0 16937 3.635 0.187 0.187 1.000 0.909 0 3.302 2624 0 386 159 3170 2534 - 1 5 11 3 41.1 68.00 0 16984 3.641 0.181 0.181 1.000 0.908 0 3.305 2548 0 377 154 3080 2465 - 1 5 11 4 41.3 68.00 0 17031 3.647 0.175 0.175 1.000 0.907 0 3.308 2457 0 366 148 2972 2380 - 1 5 11 5 41.5 68.00 0 17077 3.653 0.160 0.160 1.000 0.905 0 3.308 2256 0 339 136 2731 2183 - 1 5 12 0 41.0 68.00 0 16950 3.636 0.161 0.161 1.000 0.906 0 3.293 2253 0 332 136 2721 2179 + 1 5 11 2 40.9 68.00 0 16937 3.635 0.187 0.187 1.000 0.909 0 3.302 2624 0 386 159 3169 2534 + 1 5 11 3 41.1 68.00 0 16984 3.641 0.181 0.181 1.000 0.908 0 3.305 2548 0 377 154 3079 2465 + 1 5 11 4 41.3 68.00 0 17031 3.647 0.174 0.174 1.000 0.907 0 3.308 2457 0 366 148 2971 2379 + 1 5 11 5 41.5 68.00 0 17077 3.653 0.160 0.160 1.000 0.905 0 3.307 2255 0 338 136 2729 2181 + 1 5 12 0 41.0 68.00 0 16950 3.636 0.161 0.161 1.000 0.906 0 3.293 2252 0 332 136 2721 2179 1 5 12 1 40.4 68.00 0 16824 3.620 0.156 0.156 1.000 0.905 0 3.276 2177 0 315 133 2625 2098 1 5 12 2 39.8 68.00 0 16697 3.603 0.165 0.165 1.000 0.906 0 3.265 2291 0 325 140 2757 2206 - 1 5 12 3 39.3 68.00 0 16570 3.587 0.170 0.170 1.000 0.907 0 3.252 2344 0 326 144 2815 2251 - 1 5 12 4 38.7 68.00 0 16443 3.570 0.176 0.176 1.000 0.907 0 3.239 2421 0 330 150 2901 2318 - 1 5 12 5 38.1 68.00 0 16317 3.553 0.185 0.185 1.000 0.908 0 3.227 2519 0 336 157 3012 2406 - 1 5 13 0 38.4 68.00 0 16377 3.561 0.159 0.159 1.000 0.905 0 3.224 2181 0 294 135 2611 2086 + 1 5 12 3 39.3 68.00 0 16570 3.587 0.170 0.170 1.000 0.907 0 3.252 2343 0 326 144 2814 2250 + 1 5 12 4 38.7 68.00 0 16443 3.570 0.176 0.176 1.000 0.907 0 3.239 2420 0 330 150 2900 2317 + 1 5 12 5 38.1 68.00 0 16317 3.553 0.185 0.185 1.000 0.908 0 3.227 2518 0 336 157 3011 2406 + 1 5 13 0 38.4 68.00 0 16377 3.561 0.159 0.159 1.000 0.905 0 3.224 2181 0 294 135 2610 2086 1 5 13 1 38.7 68.00 0 16437 3.569 0.153 0.153 1.000 0.905 0 3.229 2099 0 286 130 2515 2009 1 5 13 2 38.9 68.00 0 16497 3.577 0.150 0.150 1.000 0.904 0 3.235 2059 0 283 127 2469 1974 - 1 5 13 3 39.2 68.00 0 16557 3.585 0.139 0.139 1.000 0.903 0 3.238 1919 0 267 118 2304 1842 + 1 5 13 3 39.2 68.00 0 16557 3.585 0.139 0.139 1.000 0.903 0 3.238 1919 0 267 118 2304 1843 1 5 13 4 39.5 68.00 0 16617 3.593 0.143 0.143 1.000 0.904 0 3.246 1977 0 277 122 2376 1904 1 5 13 5 39.7 68.00 0 16677 3.601 0.145 0.145 1.000 0.904 0 3.254 2016 0 285 124 2425 1944 - 1 5 14 0 39.7 68.00 0 16657 3.598 .0973 .0973 1.000 0.898 0 3.233 1348 0 190 83 1621 1298 + 1 5 14 0 39.7 68.00 0 16657 3.598 .0973 .0973 1.000 0.898 0 3.233 1349 0 190 83 1622 1298 1 5 14 1 39.6 68.00 0 16637 3.595 .0980 .0980 1.000 0.899 0 3.230 1357 0 191 83 1631 1309 1 5 14 2 39.5 68.00 0 16617 3.593 0.101 0.101 1.000 0.899 0 3.229 1401 0 196 86 1683 1350 - 1 5 14 3 39.4 68.00 0 16597 3.590 0.118 0.118 1.000 0.901 0 3.234 1624 0 227 100 1950 1565 + 1 5 14 3 39.4 68.00 0 16597 3.590 0.118 0.118 1.000 0.901 0 3.234 1624 0 227 100 1950 1566 1 5 14 4 39.3 68.00 0 16577 3.587 0.138 0.138 1.000 0.903 0 3.240 1905 0 265 117 2287 1837 - 1 5 14 5 39.2 68.00 0 16557 3.585 0.162 0.162 1.000 0.906 0 3.247 2233 0 310 138 2681 2154 + 1 5 14 5 39.2 68.00 0 16557 3.585 0.162 0.162 1.000 0.906 0 3.247 2234 0 310 138 2681 2154 1 5 15 0 39.2 68.00 0 16550 3.584 0.197 0.197 1.000 0.910 0 3.260 2718 0 377 168 3263 2624 1 5 15 1 39.1 68.00 0 16543 3.583 0.217 0.217 1.000 0.912 0 3.268 2997 0 415 185 3597 2896 1 5 15 2 39.1 68.00 0 16537 3.582 0.247 0.247 1.000 0.915 0 3.279 3408 0 472 210 4090 3296 - 1 5 15 3 39.1 68.00 0 16530 3.581 0.270 0.270 1.000 0.918 0 3.287 3726 0 515 230 4471 3608 + 1 5 15 3 39.1 68.00 0 16530 3.581 0.271 0.271 1.000 0.918 0 3.287 3726 0 515 230 4471 3608 1 5 15 4 39.0 68.00 0 16523 3.580 0.290 0.290 1.000 0.920 0 3.295 3999 0 553 247 4799 3873 1 5 15 5 39.0 68.00 0 16517 3.580 0.316 0.316 1.000 0.923 0 3.304 4347 0 600 268 5215 4213 1 5 16 0 39.0 68.00 0 16510 3.579 0.325 0.325 1.000 0.924 0 3.307 4474 0 617 276 5367 4343 1 5 16 1 39.0 68.00 0 16503 3.578 0.350 0.350 1.000 0.927 0 3.316 4809 0 662 297 5768 4665 - 1 5 16 2 38.9 68.00 0 16497 3.577 0.374 0.374 1.000 0.930 0 3.325 5146 0 708 318 6172 5000 + 1 5 16 2 38.9 68.00 0 16497 3.577 0.374 0.374 1.000 0.930 0 3.325 5147 0 708 318 6172 5000 1 5 16 3 38.9 68.00 0 16490 3.576 0.399 0.399 1.000 0.932 0 3.334 5480 0 753 339 6572 5322 1 5 16 4 38.9 68.00 0 16483 3.575 0.421 0.421 1.000 0.935 0 3.342 5787 0 794 358 6939 5620 1 5 16 5 38.8 68.00 0 16477 3.574 0.449 0.449 1.000 0.938 0 3.353 6166 0 846 381 7393 5993 - 1 5 17 0 38.7 68.00 0 16443 3.570 0.503 0.503 1.000 0.944 0 3.370 6897 0 941 427 8265 6713 - 1 5 17 1 38.5 68.00 0 16410 3.566 0.520 0.520 1.000 0.946 0 3.373 7129 0 967 442 8538 6930 + 1 5 17 0 38.7 68.00 0 16443 3.570 0.503 0.503 1.000 0.944 0 3.370 6897 0 941 427 8265 6714 + 1 5 17 1 38.5 68.00 0 16410 3.566 0.520 0.520 1.000 0.946 0 3.373 7129 0 967 442 8539 6930 1 5 17 2 38.4 68.00 0 16377 3.561 0.539 0.539 1.000 0.948 0 3.376 7374 0 995 458 8827 7167 1 5 17 3 38.2 68.00 0 16343 3.557 0.562 0.562 1.000 0.951 0 3.382 7683 0 1031 478 9191 7482 1 5 17 4 38.1 68.00 0 16310 3.552 0.582 0.582 1.000 0.953 0 3.386 7945 0 1060 495 9500 7726 @@ -686,11 +686,11 @@ CZ16 Dual Fuel 1 5 18 1 37.9 68.00 0 16277 3.548 0.598 0.598 1.000 0.955 0 3.387 8141 0 1080 508 9729 7929 1 5 18 2 37.9 68.00 0 16277 3.548 0.608 0.608 1.000 0.956 0 3.392 8287 0 1099 517 9903 8076 1 5 18 3 37.9 68.00 0 16277 3.548 0.616 0.616 1.000 0.957 0 3.395 8386 0 1112 523 10021 8170 - 1 5 18 4 37.9 68.00 0 16277 3.548 0.622 0.622 1.000 0.957 0 3.397 8469 0 1124 528 10122 8252 + 1 5 18 4 37.9 68.00 0 16277 3.548 0.622 0.622 1.000 0.957 0 3.397 8470 0 1124 529 10122 8252 1 5 18 5 37.9 68.00 0 16277 3.548 0.629 0.629 1.000 0.958 0 3.400 8566 0 1136 535 10237 8345 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 11 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 11 @@ -700,21 +700,21 @@ CZ16 Dual Fuel 1 5 19 0 37.9 68.00 0 16270 3.547 0.624 0.624 1.000 0.958 0 3.397 8493 0 1125 530 10148 8271 1 5 19 1 37.9 68.00 0 16263 3.546 0.629 0.629 1.000 0.958 0 3.398 8562 0 1133 535 10230 8339 1 5 19 2 37.8 68.00 0 16257 3.545 0.635 0.635 1.000 0.959 0 3.400 8635 0 1142 539 10316 8411 - 1 5 19 3 37.8 68.00 0 16250 3.544 0.640 0.640 1.000 0.960 0 3.401 8706 0 1150 544 10400 8480 + 1 5 19 3 37.8 68.00 0 16250 3.544 0.640 0.640 1.000 0.960 0 3.401 8707 0 1150 544 10400 8480 1 5 19 4 37.8 68.00 0 16243 3.544 0.645 0.645 1.000 0.960 0 3.402 8772 0 1157 548 10478 8545 1 5 19 5 37.8 68.00 0 16237 3.543 0.657 0.657 1.000 0.961 0 3.406 8935 0 1177 559 10671 8704 1 5 20 0 37.6 68.00 0 16210 3.539 0.672 0.672 1.000 0.963 0 3.408 9120 0 1196 571 10887 8876 1 5 20 1 37.5 68.00 0 16183 3.536 0.679 0.679 1.000 0.964 0 3.408 9213 0 1203 577 10993 8964 1 5 20 2 37.4 68.00 0 16156 3.532 0.688 0.688 1.000 0.965 0 3.408 9322 0 1211 585 11118 9072 1 5 20 3 37.3 68.00 0 16130 3.529 0.697 0.697 1.000 0.966 0 3.408 9429 0 1219 592 11240 9178 - 1 5 20 4 37.2 68.00 0 16103 3.525 0.704 0.704 1.000 0.967 0 3.408 9515 0 1225 598 11338 9261 + 1 5 20 4 37.2 68.00 0 16103 3.525 0.704 0.704 1.000 0.967 0 3.408 9515 0 1225 598 11339 9261 1 5 20 5 37.0 68.00 0 16076 3.522 0.711 0.711 1.000 0.968 0 3.407 9599 0 1230 604 11434 9346 - 1 5 21 0 37.0 68.00 0 16070 3.521 0.731 0.731 1.000 0.970 0 3.414 9862 0 1262 621 11746 9598 + 1 5 21 0 37.0 68.00 0 16070 3.521 0.731 0.731 1.000 0.970 0 3.414 9863 0 1262 621 11746 9598 1 5 21 1 37.0 68.00 0 16063 3.520 0.735 0.735 1.000 0.970 0 3.415 9908 0 1266 624 11799 9643 - 1 5 21 2 37.0 68.00 0 16056 3.519 0.737 0.737 1.000 0.970 0 3.415 9944 0 1269 627 11841 9684 + 1 5 21 2 37.0 68.00 0 16056 3.519 0.737 0.737 1.000 0.970 0 3.415 9945 0 1269 627 11841 9684 1 5 21 3 36.9 68.00 0 16050 3.518 0.740 0.740 1.000 0.971 0 3.415 9974 0 1272 629 11875 9716 1 5 21 4 36.9 68.00 0 16043 3.517 0.741 0.741 1.000 0.971 0 3.415 9981 0 1271 629 11881 9714 - 1 5 21 5 36.9 68.00 0 16036 3.516 0.741 0.741 1.000 0.971 0 3.414 9981 0 1269 630 11880 9709 + 1 5 21 5 36.9 68.00 0 16036 3.516 0.741 0.741 1.000 0.971 0 3.414 9981 0 1270 630 11880 9709 1 5 22 0 36.7 68.00 0 16010 3.513 0.779 0.779 1.000 0.975 0 3.425 10483 0 1327 662 12472 10191 1 5 22 1 36.6 68.00 0 15983 3.509 0.787 0.787 1.000 0.976 0 3.425 10577 0 1332 669 12578 10276 1 5 22 2 36.5 68.00 0 15956 3.506 0.794 0.794 1.000 0.977 0 3.425 10660 0 1336 675 12671 10357 @@ -725,7 +725,7 @@ CZ16 Dual Fuel 1 5 23 1 36.4 68.00 0 15930 3.502 0.861 0.861 1.000 0.984 0 3.447 11540 0 1439 731 13710 11206 1 5 23 2 36.5 68.00 0 15956 3.506 0.864 0.864 1.000 0.985 0 3.452 11593 0 1453 734 13780 11265 1 5 23 3 36.6 68.00 0 15983 3.509 0.867 0.867 1.000 0.985 0 3.457 11646 0 1467 736 13850 11321 - 1 5 23 4 36.7 68.00 0 16010 3.513 0.869 0.869 1.000 0.985 0 3.461 11695 0 1480 739 13913 11372 + 1 5 23 4 36.7 68.00 0 16010 3.513 0.869 0.869 1.000 0.985 0 3.461 11695 0 1480 739 13914 11372 1 5 23 5 36.9 68.00 0 16036 3.516 0.870 0.870 1.000 0.985 0 3.465 11723 0 1491 740 13954 11400 @@ -748,12 +748,12 @@ Subhourly User-defined Report, Tue 06-Jan 1 6 2 0 38.6 68.00 0 16417 3.566 0.790 0.790 1.000 0.976 0 3.482 10825 0 1470 671 12966 10623 1 6 2 1 38.3 68.00 0 16357 3.559 0.790 0.790 1.000 0.976 0 3.475 10800 0 1452 672 12924 10578 1 6 2 2 38.0 68.00 0 16297 3.551 0.798 0.798 1.000 0.977 0 3.470 10872 0 1447 678 12997 10643 - 1 6 2 3 37.8 68.00 0 16237 3.543 0.801 0.801 1.000 0.978 0 3.463 10892 0 1435 681 13007 10653 + 1 6 2 3 37.8 68.00 0 16237 3.543 0.801 0.801 1.000 0.978 0 3.463 10892 0 1435 681 13008 10653 1 6 2 4 37.5 68.00 0 16176 3.535 0.810 0.810 1.000 0.979 0 3.459 10982 0 1432 688 13103 10733 1 6 2 5 37.2 68.00 0 16116 3.527 0.815 0.815 1.000 0.979 0 3.454 11023 0 1422 693 13138 10757 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 12 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 12 @@ -774,14 +774,14 @@ CZ16 Dual Fuel 1 6 4 5 38.7 68.00 0 16437 3.569 0.784 0.784 1.000 0.976 0 3.482 10757 0 1466 666 12889 10578 1 6 5 0 38.1 68.00 0 16317 3.553 0.768 0.768 1.000 0.974 0 3.461 10479 0 1400 653 12532 10272 1 6 5 1 37.6 68.00 0 16197 3.537 0.780 0.780 1.000 0.975 0 3.450 10587 0 1385 663 12635 10372 - 1 6 5 2 37.0 68.00 0 16076 3.522 0.789 0.789 1.000 0.976 0 3.438 10647 0 1364 670 12682 10393 + 1 6 5 2 37.0 68.00 0 16076 3.522 0.789 0.789 1.000 0.976 0 3.438 10647 0 1364 670 12682 10394 1 6 5 3 36.5 68.00 0 15956 3.506 0.806 0.806 1.000 0.978 0 3.429 10820 0 1356 685 12861 10556 1 6 5 4 36.0 68.00 0 15836 3.490 0.817 0.817 1.000 0.979 0 3.418 10907 0 1337 694 12938 10608 1 6 5 5 35.4 68.00 0 15716 3.474 0.838 0.838 1.000 0.982 0 3.411 11132 0 1333 713 13178 10817 1 6 6 0 34.8 68.00 0 15589 3.457 0.828 0.828 1.000 0.981 0 3.390 10925 0 1275 703 12903 10586 1 6 6 1 34.3 68.00 0 15463 3.440 0.850 0.850 1.000 0.983 0 3.382 11150 0 1267 722 13139 10790 - 1 6 6 2 33.7 68.00 0 15336 3.423 0.862 0.862 1.000 0.984 0 3.370 11246 0 1243 733 13222 10849 - 1 6 6 3 33.1 68.00 0 15209 3.406 0.885 0.885 1.000 0.987 0 3.362 11479 0 1233 752 13465 11046 + 1 6 6 2 33.7 68.00 0 15336 3.423 0.862 0.862 1.000 0.984 0 3.370 11247 0 1243 733 13222 10849 + 1 6 6 3 33.1 68.00 0 15209 3.406 0.885 0.885 1.000 0.987 0 3.362 11480 0 1233 752 13465 11046 1 6 6 4 32.6 68.00 0 15082 3.389 0.908 0.908 1.000 0.990 0 3.354 11705 0 1220 772 13697 11227 1 6 6 5 32.0 68.00 0 14955 3.372 0.924 0.924 1.000 0.991 0 3.343 11832 0 1195 785 13813 11305 1 6 7 0 32.4 68.00 0 15036 3.383 0.977 0.977 1.000 0.997 0 3.374 12559 0 1294 830 14683 12026 @@ -798,112 +798,112 @@ CZ16 Dual Fuel 1 6 8 5 36.1 68.00 0 15876 3.495 0.854 0.854 1.000 0.984 0 3.438 11422 0 1410 726 13559 11172 1 6 9 0 36.5 68.00 0 15950 3.505 0.829 0.829 1.000 0.981 0 3.437 11123 0 1392 704 13220 10880 1 6 9 1 36.8 68.00 0 16023 3.515 0.808 0.808 1.000 0.978 0 3.439 10885 0 1381 687 12953 10674 - 1 6 9 2 37.1 68.00 0 16096 3.524 0.789 0.789 1.000 0.976 0 3.441 10661 0 1371 671 12702 10469 - 1 6 9 3 37.5 68.00 0 16170 3.534 0.767 0.767 1.000 0.974 0 3.441 10390 0 1353 651 12395 10185 - 1 6 9 4 37.8 68.00 0 16243 3.544 0.748 0.748 1.000 0.972 0 3.443 10168 0 1341 635 12145 10009 - 1 6 9 5 38.1 68.00 0 16317 3.553 0.731 0.731 1.000 0.970 0 3.446 9978 0 1333 622 11932 9830 - 1 6 10 0 38.3 68.00 0 16357 3.559 0.730 0.730 1.000 0.970 0 3.450 9974 0 1341 620 11936 9837 - 1 6 10 1 38.5 68.00 0 16397 3.564 0.718 0.718 1.000 0.968 0 3.451 9835 0 1331 610 11776 9700 - 1 6 10 2 38.7 68.00 0 16437 3.569 0.711 0.711 1.000 0.967 0 3.453 9753 0 1329 604 11686 9636 - 1 6 10 3 38.8 68.00 0 16477 3.574 0.701 0.701 1.000 0.966 0 3.454 9637 0 1322 596 11555 9534 - 1 6 10 4 39.0 68.00 0 16517 3.580 0.684 0.684 1.000 0.964 0 3.452 9421 0 1300 582 11303 9316 - 1 6 10 5 39.2 68.00 0 16557 3.585 0.670 0.670 1.000 0.963 0 3.452 9239 0 1283 569 11092 9153 - 1 6 11 0 39.3 68.00 0 16583 3.588 0.639 0.639 1.000 0.959 0 3.442 8819 0 1230 543 10592 8743 - 1 6 11 1 39.4 68.00 0 16610 3.592 0.621 0.621 1.000 0.957 0 3.439 8586 0 1203 528 10317 8511 - 1 6 11 2 39.6 68.00 0 16637 3.595 0.599 0.599 1.000 0.955 0 3.433 8293 0 1166 509 9969 8203 - 1 6 11 3 39.7 68.00 0 16664 3.599 0.582 0.582 1.000 0.953 0 3.430 8063 0 1139 495 9696 7992 - 1 6 11 4 39.8 68.00 0 16690 3.602 0.568 0.568 1.000 0.951 0 3.427 7885 0 1118 483 9486 7817 - 1 6 11 5 39.9 68.00 0 16717 3.606 0.554 0.554 1.000 0.950 0 3.425 7698 0 1096 471 9265 7626 - ------------------------------------------------------------------------------- -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 13 + 1 6 9 2 37.1 68.00 0 16096 3.524 0.789 0.789 1.000 0.976 0 3.441 10661 0 1371 671 12702 10471 + 1 6 9 3 37.5 68.00 0 16170 3.534 0.766 0.766 1.000 0.974 0 3.441 10385 0 1353 651 12389 10182 + 1 6 9 4 37.8 68.00 0 16243 3.544 0.748 0.748 1.000 0.972 0 3.443 10167 0 1341 635 12144 10008 + 1 6 9 5 38.1 68.00 0 16317 3.553 0.731 0.731 1.000 0.970 0 3.446 9978 0 1333 621 11932 9831 + 1 6 10 0 38.3 68.00 0 16357 3.559 0.730 0.730 1.000 0.970 0 3.450 9974 0 1341 620 11935 9838 + 1 6 10 1 38.5 68.00 0 16397 3.564 0.718 0.718 1.000 0.968 0 3.451 9832 0 1331 610 11773 9696 + 1 6 10 2 38.7 68.00 0 16437 3.569 0.711 0.711 1.000 0.967 0 3.453 9750 0 1328 604 11683 9634 + 1 6 10 3 38.8 68.00 0 16477 3.574 0.701 0.701 1.000 0.966 0 3.454 9635 0 1321 596 11552 9532 + 1 6 10 4 39.0 68.00 0 16517 3.580 0.684 0.684 1.000 0.964 0 3.452 9419 0 1300 582 11301 9316 + 1 6 10 5 39.2 68.00 0 16557 3.585 0.670 0.670 1.000 0.963 0 3.452 9238 0 1283 569 11090 9153 + 1 6 11 0 39.3 68.00 0 16583 3.588 0.639 0.639 1.000 0.959 0 3.442 8818 0 1230 543 10590 8740 + 1 6 11 1 39.4 68.00 0 16610 3.592 0.617 0.617 1.000 0.957 0 3.437 8533 0 1195 525 10253 8451 + 1 6 11 2 39.6 68.00 0 16637 3.595 0.598 0.598 1.000 0.955 0 3.433 8279 0 1164 508 9952 8207 + 1 6 11 3 39.7 68.00 0 16664 3.599 0.582 0.582 1.000 0.953 0 3.430 8065 0 1139 495 9698 7997 + 1 6 11 4 39.8 68.00 0 16690 3.602 0.568 0.568 1.000 0.951 0 3.427 7884 0 1118 483 9485 7815 + 1 6 11 5 39.9 68.00 0 16717 3.606 0.556 0.556 1.000 0.950 0 3.426 7721 0 1099 472 9293 7647 + +------------------------------------------------------------------------------ +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 13 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 12 0 39.9 68.00 0 16710 3.605 0.543 0.543 1.000 0.949 0 3.419 7533 0 1072 461 9066 7459 - 1 6 12 1 39.9 68.00 0 16704 3.604 0.533 0.533 1.000 0.947 0 3.415 7395 0 1051 453 8898 7318 - 1 6 12 2 39.8 68.00 0 16697 3.603 0.523 0.523 1.000 0.946 0 3.410 7254 0 1030 444 8727 7178 - 1 6 12 3 39.8 68.00 0 16690 3.602 0.517 0.517 1.000 0.946 0 3.406 7167 0 1016 439 8622 7089 - 1 6 12 4 39.8 68.00 0 16684 3.601 0.515 0.515 1.000 0.945 0 3.405 7145 0 1012 438 8595 7065 - 1 6 12 5 39.7 68.00 0 16677 3.601 0.515 0.515 1.000 0.945 0 3.404 7146 0 1011 438 8595 7062 - 1 6 13 0 39.4 68.00 0 16610 3.592 0.531 0.531 1.000 0.947 0 3.402 7337 0 1028 451 8816 7241 - 1 6 13 1 39.1 68.00 0 16543 3.583 0.554 0.554 1.000 0.950 0 3.403 7634 0 1058 471 9163 7528 - 1 6 13 2 38.8 68.00 0 16477 3.574 0.566 0.566 1.000 0.951 0 3.400 7776 0 1066 481 9324 7657 - 1 6 13 3 38.5 68.00 0 16410 3.566 0.581 0.581 1.000 0.953 0 3.398 7963 0 1080 494 9537 7834 - 1 6 13 4 38.2 68.00 0 16343 3.557 0.597 0.597 1.000 0.955 0 3.395 8149 0 1093 507 9750 8013 - 1 6 13 5 37.9 68.00 0 16277 3.548 0.608 0.608 1.000 0.956 0 3.391 8275 0 1098 516 9890 8128 - 1 6 14 0 38.0 68.00 0 16283 3.549 0.597 0.597 1.000 0.955 0 3.388 8138 0 1081 508 9727 8001 - 1 6 14 1 38.0 68.00 0 16290 3.550 0.597 0.597 1.000 0.955 0 3.389 8139 0 1082 508 9729 8005 - 1 6 14 2 38.0 68.00 0 16297 3.551 0.596 0.596 1.000 0.955 0 3.389 8128 0 1082 507 9717 7995 - 1 6 14 3 38.1 68.00 0 16303 3.552 0.594 0.594 1.000 0.954 0 3.389 8103 0 1080 505 9688 7971 - 1 6 14 4 38.1 68.00 0 16310 3.552 0.591 0.591 1.000 0.954 0 3.389 8062 0 1075 502 9639 7931 - 1 6 14 5 38.1 68.00 0 16317 3.553 0.588 0.588 1.000 0.954 0 3.389 8020 0 1071 500 9591 7891 - 1 6 15 0 38.1 68.00 0 16323 3.554 0.565 0.565 1.000 0.951 0 3.380 7705 0 1030 480 9216 7581 - 1 6 15 1 38.2 68.00 0 16330 3.555 0.557 0.557 1.000 0.950 0 3.378 7610 0 1019 474 9102 7487 - 1 6 15 2 38.2 68.00 0 16337 3.556 0.549 0.549 1.000 0.949 0 3.375 7492 0 1004 466 8962 7370 - 1 6 15 3 38.2 68.00 0 16343 3.557 0.546 0.546 1.000 0.949 0 3.375 7454 0 1000 464 8918 7332 - 1 6 15 4 38.3 68.00 0 16350 3.558 0.549 0.549 1.000 0.949 0 3.377 7503 0 1008 467 8977 7379 - 1 6 15 5 38.3 68.00 0 16357 3.559 0.557 0.557 1.000 0.950 0 3.381 7616 0 1024 474 9113 7489 - 1 6 16 0 38.4 68.00 0 16377 3.561 0.556 0.556 1.000 0.950 0 3.383 7603 0 1026 472 9101 7479 - 1 6 16 1 38.5 68.00 0 16397 3.564 0.564 0.564 1.000 0.951 0 3.389 7725 0 1046 479 9250 7601 - 1 6 16 2 38.6 68.00 0 16417 3.566 0.574 0.574 1.000 0.952 0 3.396 7872 0 1069 488 9429 7749 - 1 6 16 3 38.7 68.00 0 16437 3.569 0.580 0.580 1.000 0.953 0 3.401 7959 0 1084 493 9537 7838 - 1 6 16 4 38.8 68.00 0 16457 3.572 0.591 0.591 1.000 0.954 0 3.407 8114 0 1109 502 9725 7992 - 1 6 16 5 38.8 68.00 0 16477 3.574 0.601 0.601 1.000 0.955 0 3.414 8258 0 1132 511 9901 8135 - 1 6 17 0 38.7 68.00 0 16437 3.569 0.626 0.626 1.000 0.958 0 3.419 8585 0 1170 532 10286 8448 - 1 6 17 1 38.5 68.00 0 16397 3.564 0.633 0.633 1.000 0.959 0 3.417 8666 0 1173 538 10377 8524 - 1 6 17 2 38.3 68.00 0 16357 3.559 0.640 0.640 1.000 0.960 0 3.414 8749 0 1176 544 10469 8605 - 1 6 17 3 38.1 68.00 0 16317 3.553 0.647 0.647 1.000 0.960 0 3.412 8828 0 1179 550 10556 8678 - 1 6 17 4 37.9 68.00 0 16277 3.548 0.654 0.654 1.000 0.961 0 3.410 8903 0 1181 556 10639 8746 - 1 6 17 5 37.8 68.00 0 16237 3.543 0.670 0.670 1.000 0.963 0 3.411 9106 0 1200 569 10875 8941 - 1 6 18 0 37.6 68.00 0 16203 3.538 0.649 0.649 1.000 0.961 0 3.399 8810 0 1154 552 10516 8641 - 1 6 18 1 37.5 68.00 0 16170 3.534 0.651 0.651 1.000 0.961 0 3.395 8827 0 1150 553 10531 8651 - 1 6 18 2 37.3 68.00 0 16136 3.530 0.654 0.654 1.000 0.961 0 3.392 8846 0 1145 556 10547 8661 - 1 6 18 3 37.2 68.00 0 16103 3.525 0.670 0.670 1.000 0.963 0 3.394 9060 0 1166 570 10796 8861 - 1 6 18 4 37.0 68.00 0 16070 3.521 0.672 0.672 1.000 0.963 0 3.391 9066 0 1160 571 10797 8852 - 1 6 18 5 36.9 68.00 0 16036 3.516 0.675 0.675 1.000 0.963 0 3.388 9095 0 1157 574 10826 8871 - 1 6 19 0 36.6 68.00 0 15970 3.508 0.669 0.669 1.000 0.963 0 3.377 8989 0 1129 569 10687 8754 - 1 6 19 1 36.3 68.00 0 15903 3.499 0.689 0.689 1.000 0.965 0 3.376 9230 0 1145 586 10962 8975 - 1 6 19 2 36.0 68.00 0 15836 3.490 0.696 0.696 1.000 0.966 0 3.370 9285 0 1138 591 11014 9009 - 1 6 19 3 35.7 68.00 0 15769 3.481 0.703 0.703 1.000 0.967 0 3.365 9354 0 1132 597 11083 9062 - 1 6 19 4 35.4 68.00 0 15703 3.472 0.710 0.710 1.000 0.967 0 3.359 9426 0 1125 604 11155 9118 - 1 6 19 5 35.1 68.00 0 15636 3.463 0.730 0.730 1.000 0.970 0 3.358 9661 0 1138 621 11420 9330 - 1 6 20 0 35.0 68.00 0 15623 3.462 0.738 0.738 1.000 0.971 0 3.360 9763 0 1147 628 11537 9421 - 1 6 20 1 34.9 68.00 0 15609 3.460 0.738 0.738 1.000 0.971 0 3.358 9756 0 1143 628 11527 9406 - 1 6 20 2 34.9 68.00 0 15596 3.458 0.737 0.737 1.000 0.970 0 3.356 9734 0 1137 627 11498 9376 - 1 6 20 3 34.8 68.00 0 15583 3.456 0.754 0.754 1.000 0.972 0 3.361 9952 0 1160 641 11752 9574 - 1 6 20 4 34.8 68.00 0 15569 3.454 0.752 0.752 1.000 0.972 0 3.358 9919 0 1153 639 11711 9525 - 1 6 20 5 34.7 68.00 0 15556 3.453 0.748 0.748 1.000 0.972 0 3.355 9852 0 1142 635 11629 9449 + 1 6 12 0 39.9 68.00 0 16710 3.605 0.546 0.546 1.000 0.949 0 3.421 7584 0 1079 464 9127 7508 + 1 6 12 1 39.9 68.00 0 16704 3.604 0.537 0.537 1.000 0.948 0 3.416 7452 0 1059 456 8968 7378 + 1 6 12 2 39.8 68.00 0 16697 3.603 0.528 0.528 1.000 0.947 0 3.412 7321 0 1039 448 8808 7246 + 1 6 12 3 39.8 68.00 0 16690 3.602 0.522 0.522 1.000 0.946 0 3.409 7242 0 1027 444 8713 7165 + 1 6 12 4 39.8 68.00 0 16684 3.601 0.520 0.520 1.000 0.946 0 3.407 7216 0 1022 442 8680 7136 + 1 6 12 5 39.7 68.00 0 16677 3.601 0.527 0.527 1.000 0.947 0 3.409 7307 0 1034 448 8789 7223 + 1 6 13 0 39.4 68.00 0 16610 3.592 0.542 0.542 1.000 0.949 0 3.407 7496 0 1050 461 9007 7394 + 1 6 13 1 39.1 68.00 0 16543 3.583 0.552 0.552 1.000 0.950 0 3.402 7604 0 1054 469 9127 7493 + 1 6 13 2 38.8 68.00 0 16477 3.574 0.562 0.562 1.000 0.951 0 3.398 7729 0 1060 478 9266 7612 + 1 6 13 3 38.5 68.00 0 16410 3.566 0.584 0.584 1.000 0.953 0 3.398 7995 0 1085 496 9576 7868 + 1 6 13 4 38.2 68.00 0 16343 3.557 0.593 0.593 1.000 0.954 0 3.394 8106 0 1087 504 9698 7968 + 1 6 13 5 37.9 68.00 0 16277 3.548 0.607 0.607 1.000 0.956 0 3.391 8267 0 1097 516 9880 8121 + 1 6 14 0 38.0 68.00 0 16283 3.549 0.598 0.598 1.000 0.955 0 3.388 8143 0 1081 508 9732 8004 + 1 6 14 1 38.0 68.00 0 16290 3.550 0.598 0.598 1.000 0.955 0 3.389 8152 0 1084 508 9744 8015 + 1 6 14 2 38.0 68.00 0 16297 3.551 0.597 0.597 1.000 0.955 0 3.390 8140 0 1084 507 9731 8004 + 1 6 14 3 38.1 68.00 0 16303 3.552 0.595 0.595 1.000 0.954 0 3.390 8117 0 1082 506 9704 7982 + 1 6 14 4 38.1 68.00 0 16310 3.552 0.592 0.592 1.000 0.954 0 3.389 8075 0 1077 503 9655 7941 + 1 6 14 5 38.1 68.00 0 16317 3.553 0.589 0.589 1.000 0.954 0 3.389 8034 0 1073 500 9607 7901 + 1 6 15 0 38.1 68.00 0 16323 3.554 0.566 0.566 1.000 0.951 0 3.380 7719 0 1032 481 9231 7591 + 1 6 15 1 38.2 68.00 0 16330 3.555 0.558 0.558 1.000 0.950 0 3.378 7621 0 1020 474 9116 7495 + 1 6 15 2 38.2 68.00 0 16337 3.556 0.549 0.549 1.000 0.949 0 3.376 7501 0 1005 467 8972 7375 + 1 6 15 3 38.2 68.00 0 16343 3.557 0.546 0.546 1.000 0.949 0 3.375 7458 0 1001 464 8923 7333 + 1 6 15 4 38.3 68.00 0 16350 3.558 0.550 0.550 1.000 0.949 0 3.377 7510 0 1009 467 8986 7383 + 1 6 15 5 38.3 68.00 0 16357 3.559 0.558 0.558 1.000 0.950 0 3.382 7629 0 1026 474 9129 7499 + 1 6 16 0 38.4 68.00 0 16377 3.561 0.557 0.557 1.000 0.950 0 3.384 7623 0 1028 474 9125 7496 + 1 6 16 1 38.5 68.00 0 16397 3.564 0.566 0.566 1.000 0.951 0 3.390 7750 0 1049 481 9280 7623 + 1 6 16 2 38.6 68.00 0 16417 3.566 0.577 0.577 1.000 0.952 0 3.397 7907 0 1074 490 9471 7777 + 1 6 16 3 38.7 68.00 0 16437 3.569 0.587 0.587 1.000 0.953 0 3.403 8046 0 1096 498 9641 7914 + 1 6 16 4 38.8 68.00 0 16457 3.572 0.598 0.598 1.000 0.955 0 3.410 8217 0 1123 509 9848 8088 + 1 6 16 5 38.8 68.00 0 16477 3.574 0.609 0.609 1.000 0.956 0 3.417 8373 0 1148 518 10039 8244 + 1 6 17 0 38.7 68.00 0 16437 3.569 0.635 0.635 1.000 0.959 0 3.423 8711 0 1187 540 10438 8569 + 1 6 17 1 38.5 68.00 0 16397 3.564 0.643 0.643 1.000 0.960 0 3.421 8805 0 1192 546 10543 8657 + 1 6 17 2 38.3 68.00 0 16357 3.559 0.651 0.651 1.000 0.961 0 3.419 8894 0 1196 553 10643 8745 + 1 6 17 3 38.1 68.00 0 16317 3.553 0.660 0.660 1.000 0.962 0 3.417 9005 0 1203 561 10769 8850 + 1 6 17 4 37.9 68.00 0 16277 3.548 0.666 0.666 1.000 0.962 0 3.415 9074 0 1204 566 10844 8909 + 1 6 17 5 37.8 68.00 0 16237 3.543 0.672 0.672 1.000 0.963 0 3.412 9136 0 1204 571 10911 8963 + 1 6 18 0 37.6 68.00 0 16203 3.538 0.656 0.656 1.000 0.961 0 3.401 8908 0 1167 558 10633 8736 + 1 6 18 1 37.5 68.00 0 16170 3.534 0.657 0.657 1.000 0.961 0 3.398 8907 0 1160 558 10625 8724 + 1 6 18 2 37.3 68.00 0 16136 3.530 0.659 0.659 1.000 0.962 0 3.394 8914 0 1154 560 10629 8722 + 1 6 18 3 37.2 68.00 0 16103 3.525 0.660 0.660 1.000 0.962 0 3.390 8919 0 1148 561 10628 8718 + 1 6 18 4 37.0 68.00 0 16070 3.521 0.676 0.676 1.000 0.964 0 3.392 9119 0 1167 574 10860 8904 + 1 6 18 5 36.9 68.00 0 16036 3.516 0.678 0.678 1.000 0.964 0 3.389 9139 0 1162 576 10878 8908 + 1 6 19 0 36.6 68.00 0 15970 3.508 0.673 0.673 1.000 0.963 0 3.378 9035 0 1135 572 10742 8793 + 1 6 19 1 36.3 68.00 0 15903 3.499 0.679 0.679 1.000 0.964 0 3.372 9086 0 1128 577 10790 8830 + 1 6 19 2 36.0 68.00 0 15836 3.490 0.699 0.699 1.000 0.966 0 3.371 9325 0 1143 594 11062 9048 + 1 6 19 3 35.7 68.00 0 15769 3.481 0.705 0.705 1.000 0.967 0 3.366 9387 0 1136 599 11123 9089 + 1 6 19 4 35.4 68.00 0 15703 3.472 0.713 0.713 1.000 0.968 0 3.360 9461 0 1130 606 11196 9146 + 1 6 19 5 35.1 68.00 0 15636 3.463 0.721 0.721 1.000 0.969 0 3.355 9543 0 1124 613 11281 9212 + 1 6 20 0 35.0 68.00 0 15623 3.462 0.742 0.742 1.000 0.971 0 3.361 9814 0 1153 631 11598 9471 + 1 6 20 1 34.9 68.00 0 15609 3.460 0.743 0.743 1.000 0.971 0 3.360 9813 0 1150 631 11595 9456 + 1 6 20 2 34.9 68.00 0 15596 3.458 0.742 0.742 1.000 0.971 0 3.358 9797 0 1145 631 11572 9431 + 1 6 20 3 34.8 68.00 0 15583 3.456 0.740 0.740 1.000 0.971 0 3.355 9760 0 1137 629 11526 9386 + 1 6 20 4 34.8 68.00 0 15569 3.454 0.757 0.757 1.000 0.973 0 3.360 9984 0 1160 643 11788 9589 + 1 6 20 5 34.7 68.00 0 15556 3.453 0.754 0.754 1.000 0.972 0 3.357 9934 0 1151 641 11726 9523 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 14 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 14 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 21 0 34.3 68.00 0 15456 3.439 0.793 0.793 1.000 0.977 0 3.359 10404 0 1181 674 12259 9951 - 1 6 21 1 33.8 68.00 0 15356 3.426 0.804 0.804 1.000 0.978 0 3.350 10496 0 1165 683 12345 10002 - 1 6 21 2 33.3 68.00 0 15256 3.413 0.811 0.811 1.000 0.979 0 3.340 10534 0 1144 689 12366 10011 - 1 6 21 3 32.9 68.00 0 15156 3.399 0.848 0.848 1.000 0.983 0 3.341 10971 0 1164 721 12855 10395 - 1 6 21 4 32.5 68.00 0 15056 3.386 0.861 0.861 1.000 0.984 0 3.333 11082 0 1148 732 12961 10460 - 1 6 21 5 32.0 68.00 0 14955 3.372 0.868 0.868 1.000 0.985 0 3.322 11115 0 1123 737 12975 10458 - 1 6 22 0 31.7 68.00 0 14889 3.363 0.919 0.919 1.000 0.991 0 3.333 11733 0 1165 781 13679 11019 - 1 6 22 1 31.4 68.00 0 14822 3.354 0.954 0.954 1.000 0.995 0 3.337 12141 0 1185 811 14136 11375 - 1 6 22 2 31.1 68.00 0 14755 3.345 0.970 0.970 1.000 0.997 0 3.334 12313 0 1181 825 14318 11512 - 1 6 22 3 30.8 68.00 0 14689 3.336 0.987 0.987 1.000 0.999 0 3.332 12486 0 1176 839 14501 11650 - 1 6 22 4 30.5 68.00 0 14622 3.327 1.000 1.000 1.000 1.000 0.00266 3.327 12607 66 1165 850 14688 11795 - 1 6 22 5 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0111 3.318 12566 276 1139 850 14831 11911 - 1 6 23 0 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0363 3.318 12566 907 1139 850 15462 12443 - 1 6 23 1 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0418 3.318 12566 1044 1139 850 15599 12555 - 1 6 23 2 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0459 3.318 12566 1148 1139 850 15703 12643 - 1 6 23 3 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0500 3.318 12566 1251 1139 850 15806 12728 - 1 6 23 4 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0535 3.318 12566 1339 1139 850 15894 12800 - 1 6 23 5 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0532 3.318 12566 1331 1139 850 15886 12788 + 1 6 21 0 34.3 68.00 0 15456 3.439 0.780 0.780 1.000 0.975 0 3.354 10226 0 1160 663 12049 9775 + 1 6 21 1 33.8 68.00 0 15356 3.426 0.809 0.809 1.000 0.978 0 3.352 10560 0 1172 687 12420 10065 + 1 6 21 2 33.3 68.00 0 15256 3.413 0.820 0.820 1.000 0.980 0 3.343 10651 0 1156 697 12504 10116 + 1 6 21 3 32.9 68.00 0 15156 3.399 0.847 0.847 1.000 0.983 0 3.341 10952 0 1162 720 12834 10372 + 1 6 21 4 32.5 68.00 0 15056 3.386 0.858 0.858 1.000 0.984 0 3.332 11043 0 1144 729 12916 10421 + 1 6 21 5 32.0 68.00 0 14955 3.372 0.867 0.867 1.000 0.985 0 3.322 11110 0 1122 737 12970 10452 + 1 6 22 0 31.7 68.00 0 14889 3.363 0.943 0.943 1.000 0.994 0 3.342 12041 0 1196 801 14038 11305 + 1 6 22 1 31.4 68.00 0 14822 3.354 0.963 0.963 1.000 0.996 0 3.340 12254 0 1196 818 14269 11472 + 1 6 22 2 31.1 68.00 0 14755 3.345 0.980 0.980 1.000 0.998 0 3.338 12432 0 1192 833 14456 11617 + 1 6 22 3 30.8 68.00 0 14689 3.336 0.997 0.997 1.000 1.000 0 3.335 12615 0 1188 848 14650 11765 + 1 6 22 4 30.5 68.00 0 14622 3.327 1.000 1.000 1.000 1.000 0.00869 3.327 12607 217 1165 850 14839 11917 + 1 6 22 5 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0159 3.318 12566 397 1139 850 14952 12007 + 1 6 23 0 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0406 3.318 12566 1015 1139 850 15570 12527 + 1 6 23 1 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0457 3.318 12566 1141 1139 850 15697 12631 + 1 6 23 2 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0494 3.318 12566 1236 1139 850 15791 12710 + 1 6 23 3 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0508 3.318 12566 1269 1139 850 15825 12732 + 1 6 23 4 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0540 3.318 12566 1350 1139 850 15905 12803 + 1 6 23 5 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0573 3.318 12566 1432 1139 850 15987 12869 @@ -942,7 +942,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 15 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 15 @@ -1005,7 +1005,7 @@ Subhourly User-defined Report, Fri 14-Aug 8 14 7 5 77.2 77.60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 16 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 16 @@ -1035,7 +1035,7 @@ CZ16 Dual Fuel 8 14 11 2 84.1 78.00 0 0 0 0.278 0.278 1.000 1.000 0 0 -4736 0 0 237 -4499 -3841 8 14 11 3 84.2 78.00 0 0 0 0.287 0.287 1.000 1.000 0 0 -4888 0 0 245 -4643 -3961 8 14 11 4 84.3 78.00 0 0 0 0.296 0.296 1.000 1.000 0 0 -5033 0 0 252 -4781 -4074 - 8 14 11 5 84.4 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5180 0 0 259 -4921 -4190 + 8 14 11 5 84.4 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5181 0 0 259 -4921 -4190 8 14 12 0 84.7 78.00 0 0 0 0.286 0.286 1.000 1.000 0 0 -4859 0 0 244 -4616 -3925 8 14 12 1 85.0 78.00 0 0 0 0.295 0.295 1.000 1.000 0 0 -5001 0 0 251 -4750 -4034 8 14 12 2 85.3 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5162 0 0 260 -4902 -4157 @@ -1052,7 +1052,7 @@ CZ16 Dual Fuel 8 14 14 1 87.7 78.00 0 0 0 0.465 0.465 1.000 1.000 0 0 -7767 0 0 395 -7372 -6151 8 14 14 2 87.7 78.00 0 0 0 0.477 0.477 1.000 1.000 0 0 -7978 0 0 406 -7572 -6312 8 14 14 3 87.7 78.00 0 0 0 0.489 0.489 1.000 1.000 0 0 -8180 0 0 416 -7764 -6463 - 8 14 14 4 87.7 78.00 0 0 0 0.490 0.490 1.000 1.000 0 0 -8194 0 0 417 -7777 -6466 + 8 14 14 4 87.7 78.00 0 0 0 0.490 0.490 1.000 1.000 0 0 -8194 0 0 417 -7778 -6466 8 14 14 5 87.6 78.00 0 0 0 0.498 0.498 1.000 1.000 0 0 -8333 0 0 424 -7910 -6570 8 14 15 0 87.3 78.00 0 0 0 0.553 0.553 1.000 1.000 0 0 -9281 0 0 471 -8810 -7308 8 14 15 1 87.0 78.00 0 0 0 0.561 0.561 1.000 1.000 0 0 -9426 0 0 477 -8949 -7414 @@ -1068,7 +1068,7 @@ CZ16 Dual Fuel 8 14 16 5 85.3 78.00 0 0 0 0.634 0.634 1.000 1.000 0 0 -10773 0 0 540 -10233 -8408 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 17 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 17 @@ -1085,7 +1085,7 @@ CZ16 Dual Fuel 8 14 18 1 84.1 78.00 0 0 0 0.654 0.654 1.000 1.000 0 0 -11173 0 0 556 -10617 -8695 8 14 18 2 84.1 78.00 0 0 0 0.645 0.645 1.000 1.000 0 0 -11025 0 0 549 -10476 -8579 8 14 18 3 84.1 78.00 0 0 0 0.630 0.630 1.000 1.000 0 0 -10768 0 0 536 -10232 -8378 - 8 14 18 4 84.0 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10389 0 0 517 -9872 -8082 + 8 14 18 4 84.0 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10389 0 0 517 -9873 -8082 8 14 18 5 84.0 78.00 0 0 0 0.582 0.582 1.000 1.000 0 0 -9962 0 0 495 -9466 -7749 8 14 19 0 83.7 78.00 0 0 0 0.565 0.565 1.000 1.000 0 0 -9691 0 0 481 -9210 -7537 8 14 19 1 83.3 78.00 0 0 0 0.533 0.533 1.000 1.000 0 0 -9151 0 0 453 -8698 -7119 @@ -1105,9 +1105,9 @@ CZ16 Dual Fuel 8 14 21 3 76.2 78.00 0 0 0 0.156 0.156 1.000 1.000 0 0 -2768 0 0 133 -2635 -2159 8 14 21 4 75.7 78.00 0 0 0 0.142 0.142 1.000 1.000 0 0 -2528 0 0 121 -2407 -1973 8 14 21 5 75.2 78.00 0 0 0 0.130 0.130 1.000 1.000 0 0 -2302 0 0 110 -2192 -1798 - 8 14 22 0 75.2 78.00 0 0 0 .0965 .0965 1.000 1.000 0 0 -1714 0 0 82 -1632 -1339 + 8 14 22 0 75.2 78.00 0 0 0 .0966 .0966 1.000 1.000 0 0 -1715 0 0 82 -1632 -1339 8 14 22 1 75.1 78.00 0 0 0 .0880 .0880 1.000 1.000 0 0 -1562 0 0 75 -1487 -1220 - 8 14 22 2 75.1 78.00 0 0 0 .0804 .0804 1.000 1.000 0 0 -1427 0 0 68 -1358 -1115 + 8 14 22 2 75.1 78.00 0 0 0 .0804 .0804 1.000 1.000 0 0 -1427 0 0 68 -1359 -1115 8 14 22 3 75.1 78.00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 22 4 75.0 77.98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 22 5 75.0 77.97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -1131,7 +1131,7 @@ Subhourly User-defined Report, Sat 15-Aug 8 15 0 5 73.4 77.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 18 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 18 @@ -1187,14 +1187,14 @@ CZ16 Dual Fuel 8 15 8 4 80.5 78.00 0 0 0 0.174 0.174 1.000 1.000 0 0 -3012 0 0 148 -2864 -2455 8 15 8 5 80.8 78.00 0 0 0 0.187 0.187 1.000 1.000 0 0 -3243 0 0 159 -3083 -2644 8 15 9 0 81.1 78.00 0 0 0 0.187 0.187 1.000 1.000 0 0 -3235 0 0 159 -3075 -2641 - 8 15 9 1 81.4 78.00 0 0 0 0.203 0.203 1.000 1.000 0 0 -3501 0 0 173 -3328 -2859 + 8 15 9 1 81.4 78.00 0 0 0 0.203 0.203 1.000 1.000 0 0 -3501 0 0 173 -3329 -2859 8 15 9 2 81.7 78.00 0 0 0 0.222 0.222 1.000 1.000 0 0 -3822 0 0 189 -3633 -3121 8 15 9 3 82.0 78.00 0 0 0 0.239 0.239 1.000 1.000 0 0 -4119 0 0 204 -3915 -3362 8 15 9 4 82.3 78.00 0 0 0 0.255 0.255 1.000 1.000 0 0 -4380 0 0 217 -4163 -3574 8 15 9 5 82.6 78.00 0 0 0 0.271 0.271 1.000 1.000 0 0 -4644 0 0 230 -4414 -3790 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 19 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 19 @@ -1239,7 +1239,7 @@ CZ16 Dual Fuel 8 15 15 5 89.4 78.00 0 0 0 0.679 0.679 1.000 1.000 0 0 -11271 0 0 578 -10693 -8806 8 15 16 0 89.1 78.00 0 0 0 0.708 0.708 1.000 1.000 0 0 -11758 0 0 602 -11155 -9175 8 15 16 1 88.9 78.00 0 0 0 0.711 0.711 1.000 1.000 0 0 -11838 0 0 605 -11232 -9229 - 8 15 16 2 88.6 78.00 0 0 0 0.713 0.713 1.000 1.000 0 0 -11879 0 0 606 -11273 -9257 + 8 15 16 2 88.6 78.00 0 0 0 0.713 0.713 1.000 1.000 0 0 -11880 0 0 606 -11273 -9257 8 15 16 3 88.3 78.00 0 0 0 0.711 0.711 1.000 1.000 0 0 -11867 0 0 605 -11262 -9240 8 15 16 4 88.1 78.00 0 0 0 0.706 0.706 1.000 1.000 0 0 -11800 0 0 600 -11200 -9182 8 15 16 5 87.8 78.00 0 0 0 0.697 0.697 1.000 1.000 0 0 -11683 0 0 593 -11090 -9085 @@ -1257,7 +1257,7 @@ CZ16 Dual Fuel 8 15 18 5 83.7 78.00 0 0 0 0.566 0.566 1.000 1.000 0 0 -9712 0 0 482 -9230 -7533 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 20 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 20 @@ -1266,7 +1266,7 @@ CZ16 Dual Fuel 8 15 19 0 83.1 78.00 0 0 0 0.552 0.552 1.000 1.000 0 0 -9489 0 0 469 -9019 -7362 8 15 19 1 82.6 78.00 0 0 0 0.523 0.523 1.000 1.000 0 0 -9018 0 0 445 -8573 -6999 - 8 15 19 2 82.0 78.00 0 0 0 0.492 0.492 1.000 1.000 0 0 -8513 0 0 419 -8094 -6609 + 8 15 19 2 82.0 78.00 0 0 0 0.492 0.492 1.000 1.000 0 0 -8513 0 0 419 -8095 -6610 8 15 19 3 81.5 78.00 0 0 0 0.459 0.459 1.000 1.000 0 0 -7963 0 0 390 -7573 -6185 8 15 19 4 81.0 78.00 0 0 0 0.427 0.427 1.000 1.000 0 0 -7426 0 0 363 -7063 -5768 8 15 19 5 80.4 78.00 0 0 0 0.393 0.393 1.000 1.000 0 0 -6863 0 0 335 -6528 -5332 @@ -1276,7 +1276,7 @@ CZ16 Dual Fuel 8 15 20 3 79.3 78.00 0 0 0 0.267 0.267 1.000 1.000 0 0 -4687 0 0 227 -4460 -3644 8 15 20 4 79.1 78.00 0 0 0 0.252 0.252 1.000 1.000 0 0 -4432 0 0 215 -4218 -3446 8 15 20 5 78.8 78.00 0 0 0 0.238 0.238 1.000 1.000 0 0 -4198 0 0 203 -3995 -3265 - 8 15 21 0 78.7 78.00 0 0 0 0.214 0.214 1.000 1.000 0 0 -3764 0 0 182 -3583 -2929 + 8 15 21 0 78.7 78.00 0 0 0 0.214 0.214 1.000 1.000 0 0 -3765 0 0 182 -3583 -2929 8 15 21 1 78.6 78.00 0 0 0 0.202 0.202 1.000 1.000 0 0 -3558 0 0 172 -3386 -2769 8 15 21 2 78.4 78.00 0 0 0 0.191 0.191 1.000 1.000 0 0 -3374 0 0 163 -3212 -2627 8 15 21 3 78.3 78.00 0 0 0 0.181 0.181 1.000 1.000 0 0 -3197 0 0 154 -3043 -2489 @@ -1299,7 +1299,7 @@ CZ16 Dual Fuel ! Log for Run 001: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -1320,7 +1320,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 21 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 21 @@ -1383,7 +1383,7 @@ Input for Run 001: # #define RefrTemp_WEH hourval( 0.0171,0.0156,0.0155,0.0154,0.0175,0.0181,0.0212,0.0201,0.0130,0.0176,0.0165,0.0171,0.0177,0.0176,0.0182,0.0139,0.0197,0.0180,0.0121,0.0135,0.0154,0.0150,0.0205,0.0129) ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 22 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 22 @@ -1446,7 +1446,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 23 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 23 @@ -1509,7 +1509,7 @@ CZ16 Dual Fuel lrMat = "m-Carpet" // Layer material ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 24 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 24 @@ -1572,7 +1572,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 25 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 25 @@ -1635,7 +1635,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 26 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 26 @@ -1698,7 +1698,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 27 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 27 @@ -1761,7 +1761,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 28 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 28 @@ -1824,7 +1824,7 @@ CZ16 Dual Fuel lrMat = "m-SoftWood" // Layer material ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 29 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 29 @@ -1887,7 +1887,7 @@ CZ16 Dual Fuel CONSTRUCTION "c-Zone1DoorRight-dr" ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 30 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 30 @@ -1950,7 +1950,7 @@ CZ16 Dual Fuel LAYER "cl2-FloorFrmIMass" ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 31 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 31 @@ -2013,7 +2013,7 @@ CZ16 Dual Fuel LAYER "cl2-WallCavIMass" ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 32 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 32 @@ -2076,7 +2076,7 @@ CZ16 Dual Fuel MATERIAL "m-10 PSF Roof" ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 33 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 33 @@ -2139,7 +2139,7 @@ CZ16 Dual Fuel matCond = 1 // Conductivity (always per foot of thickness), Btuh-ft/ft2-°F ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 34 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 34 @@ -2202,7 +2202,7 @@ CZ16 Dual Fuel MATERIAL "m-GarageCarDoorBack-dr" ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 35 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 35 @@ -2265,7 +2265,7 @@ CZ16 Dual Fuel izZn1 = "Zone1-zn" // Name of primary zone (flow rates > 0 are into the primary zone) ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 36 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 36 @@ -2328,7 +2328,7 @@ CZ16 Dual Fuel izNVEff = 1 // Vent discharge coefficient coefficient ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 37 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 37 @@ -2391,7 +2391,7 @@ CZ16 Dual Fuel izHD = 17.4 // Vent center-to-center height difference (for TWOWAY) or vent height above nominal 0 level (for AirNet types), ft ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 38 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 38 @@ -2454,7 +2454,7 @@ CZ16 Dual Fuel izZn1 = "Attic-atc" // Name of primary zone (flow rates > 0 are into the primary zone) ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 39 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 39 @@ -2517,7 +2517,7 @@ CZ16 Dual Fuel gnMeter = "MtrElec" // Meter that tracks internal gain ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 40 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 40 @@ -2580,7 +2580,7 @@ CZ16 Dual Fuel sfAdjZn = "Attic-atc" // Zone that lies on the other side of this surface ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 41 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 41 @@ -2643,7 +2643,7 @@ CZ16 Dual Fuel sfModel = "Forward_Difference" // Modeling option ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 42 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 42 @@ -2706,7 +2706,7 @@ CZ16 Dual Fuel wnExShd = "Inscrn" // Exterior shade type ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 43 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 43 @@ -2769,7 +2769,7 @@ CZ16 Dual Fuel sfTilt = 90 // Surface tilt, deg ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 44 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 44 @@ -2832,7 +2832,7 @@ CZ16 Dual Fuel wnNGlz = 2 // Number of glazing layers ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 45 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 45 @@ -2895,7 +2895,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 46 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 46 @@ -2958,7 +2958,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 47 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 47 @@ -3021,7 +3021,7 @@ CZ16 Dual Fuel sfTilt = 22.619865 // Surface tilt, deg ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 48 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 48 @@ -3084,7 +3084,7 @@ CZ16 Dual Fuel sfArea = 19.795484 // Wall area, ft2 ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 49 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 49 @@ -3147,7 +3147,7 @@ CZ16 Dual Fuel rsFanPwrH = 0.45 // Heating fan power. Heating air flow is estimated based on a 50 ?F temperature rise. ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 50 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 50 @@ -3210,7 +3210,7 @@ CZ16 Dual Fuel # REPORTCOL colVal = @Rsys[s].CapH colHead="CapH" colDec=0 colWid=6 \ ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 51 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 51 @@ -3273,7 +3273,7 @@ CZ16 Dual Fuel # RXCOL colHead="capfl" colVal=@RSYS[ rs].capHt colWid=5 colDec=0 \ ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 52 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 52 @@ -3336,7 +3336,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 001 Fri 27-Aug-21 11:08:17 am Page 53 +! ashp_dfng 001 Wed 27-Oct-21 9:51:50 am Page 53 @@ -3353,12 +3353,12 @@ Jan 2.526 0 1.826 0 0 0 0 0 0.396 0.0561 0 Feb 1.802 0 1.499 0 0 0 0 0 0.326 0.0507 0 0.0768 0 0.168 0.636 0.0441 0.135 0 0 0 .00658 0 0 0 -1.140 Mar 1.386 0 1.327 0 0 0 0 0 0.282 0.0561 0 0.0759 0 0.171 0.676 0.0448 0.149 0 0 0 .00734 0 0 0 -1.404 Apr 1.257 0 1.352 0 0 0 0 0 0.289 0.0543 0 0.0863 0 0.151 0.645 0.0395 0.145 0 0 0 .00588 0 0 0 -1.510 -May -0.622 0 0.320 0 0 0 0 0 0.0659 0.0561 0 0.0295 0 0.141 0.625 0.0369 0.153 0 0 0 .00609 0 0 0 -2.055 +May -0.622 0 0.320 0 0 0 0 0 0.0658 0.0561 0 0.0295 0 0.141 0.625 0.0369 0.153 0 0 0 .00609 0 0 0 -2.055 Jun -0.800 0.0464 0.0780 0 0 0 0 0.0399 0.0151 0.0543 0 .00682 0 0.130 0.579 0.0340 0.154 0 0 0 .00619 0 0 0 -1.944 Jul -1.032 0.0248 0.0182 0 0 0 0 0.0937 .00342 0.0561 0 0 0 0.138 0.625 0.0360 0.167 0 0 0 .00679 0 0 0 -2.200 Aug -0.728 0.139 0 0 0 0 0 0.157 0 0.0561 0 0 0 0.148 0.648 0.0387 0.173 0 0 0 .00629 0 0 0 -2.094 Sep -0.617 .00837 0.0451 0 0 0 0 0.0673 .00904 0.0543 0 .00696 0 0.159 0.660 0.0417 0.157 0 0 0 .00611 0 0 0 -1.832 -Oct 0.300 0 0.426 0 0 0 0 0.0209 0.0894 0.0561 0 0.0285 0 0.180 0.726 0.0470 0.154 0 0 0 .00629 0 0 0 -1.435 +Oct 0.300 0 0.426 0 0 0 0 0.0209 0.0895 0.0561 0 0.0285 0 0.180 0.726 0.0470 0.154 0 0 0 .00629 0 0 0 -1.435 Nov 1.518 0 1.033 0 0 0 0 0 0.218 0.0544 0 0.0554 0 0.189 0.731 0.0494 0.146 0 0 0 .00747 0 0 0 -0.965 Dec 2.375 0 1.645 0 0 0 0 0 0.355 0.0561 0 0.0778 0 0.201 0.775 0.0527 0.150 0 0 0 .00799 0 0 0 -0.946 @@ -3374,16 +3374,16 @@ Jan 1.522 0 0 1.381 0 0 0 0 0 0 0 Feb 1.194 0 0 1.069 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.124 0 0 0 0 Mar 0.731 0 0 0.592 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.139 0 0 0 0 Apr 0.844 0 0 0.733 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.111 0 0 0 0 -May 0.231 0 0 0.116 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.115 0 0 0 0 +May 0.230 0 0 0.115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.115 0 0 0 0 Jun 0.124 0 0 .00675 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.117 0 0 0 0 Jul 0.128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.128 0 0 0 0 Aug 0.119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.119 0 0 0 0 Sep 0.131 0 0 0.0156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.115 0 0 0 0 Oct 0.257 0 0 0.138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.119 0 0 0 0 Nov 0.552 0 0 0.411 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 0 -Dec 1.141 0 0 0.990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.151 0 0 0 0 +Dec 1.142 0 0 0.991 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.151 0 0 0 0 -Yr 6.972 0 0 5.453 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.520 0 0 0 0 +Yr 6.973 0 0 5.454 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.520 0 0 0 0 @@ -3399,7 +3399,7 @@ HVAC Cooling Info ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 54 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 54 @@ -3462,7 +3462,7 @@ HVAC Heating Info ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 55 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 55 @@ -3525,7 +3525,7 @@ Hourly User-defined Report, Mon 05-Jan 1 5 18 37.9 0.551 0 8 0 0 0 1 0 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 56 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 56 @@ -3588,7 +3588,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 57 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 57 @@ -3651,7 +3651,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 .00076 0 0 .00053 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00024 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 58 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 58 @@ -3675,20 +3675,20 @@ Monthly User-defined Report Month hrsOn hrsOnAux qh qcSen qcLat qFan qDefrost qAux ----- ----- -------- ------- ------- ------- ------- ------- ------- - 1 466.4 28.905 6219 0 0 396 562 723 - 2 383.7 22.766 5132 0 0 326 425 569 - 3 332.3 2.593 4689 0 0 282 486 65 - 4 339.7 7.793 4649 0 0 289 487 195 - 5 77.57 0.0167 1157 0 0 66 107 0 + 1 466.5 28.910 6220 0 0 396 562 723 + 2 383.7 22.762 5132 0 0 326 425 569 + 3 332.3 2.593 4688 0 0 282 486 65 + 4 339.8 7.794 4650 0 0 289 487 195 + 5 77.48 0.0152 1155 0 0 66 107 0 6 29.49 0 315 -196 -12 25 6 0 7 10.54 0 75 -110 -11 9 0 0 8 36.17 0 0 -620 -3 31 0 0 9 12.97 0 164 -41 0 11 15 0 - 10 105.2 0.213 1515 0 0 89 123 5 - 11 256.1 1.643 3675 0 0 218 341 41 - 12 418.3 16.935 5723 0 0 355 497 423 + 10 105.3 0.213 1515 0 0 89 123 5 + 11 256.1 1.641 3676 0 0 218 341 41 + 12 418.3 16.974 5723 0 0 355 497 424 - Yr 2468 80.864 33313 -968 -26 2098 3049 2022 + Yr 2468 80.902 33314 -968 -26 2098 3049 2023 @@ -3714,7 +3714,7 @@ Monthly User-defined Report ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 59 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 59 @@ -3735,15 +3735,15 @@ Subhourly User-defined Report, Sun 04-Jan 1 4 0 5 18.1 68.00 0 11873 2.948 1.000 1.000 1.000 1.000 0.382 2.948 10925 9551 98 850 21424 17936 1 4 1 0 18.4 68.00 0 11940 2.957 1.000 1.000 1.000 1.000 0.382 2.957 10966 9538 124 850 21478 17985 1 4 1 1 18.7 68.00 0 12006 2.966 1.000 1.000 1.000 1.000 0.380 2.966 11006 9504 150 850 21510 18001 - 1 4 1 2 19.0 68.00 0 12073 2.976 1.000 1.000 1.000 1.000 0.378 2.976 11047 9459 176 850 21532 17999 + 1 4 1 2 19.0 68.00 0 12073 2.976 1.000 1.000 1.000 1.000 0.378 2.976 11047 9457 176 850 21530 17999 1 4 1 3 19.3 68.00 0 12140 2.985 1.000 1.000 1.000 1.000 0.374 2.985 11088 9345 202 850 21485 17948 1 4 1 4 19.6 68.00 0 12207 2.995 1.000 1.000 1.000 1.000 0.371 2.995 11129 9283 228 850 21490 17949 - 1 4 1 5 19.9 68.00 0 12273 3.004 1.000 1.000 1.000 1.000 0.366 3.004 11170 9141 254 850 21415 17871 + 1 4 1 5 19.9 68.00 0 12273 3.004 1.000 1.000 1.000 1.000 0.366 3.004 11170 9141 254 850 21415 17872 1 4 2 0 20.0 68.00 0 12280 3.005 1.000 1.000 1.000 1.000 0.369 3.005 11174 9229 256 850 21509 17948 1 4 2 1 20.0 68.00 0 12287 3.006 1.000 1.000 1.000 1.000 0.368 3.006 11178 9207 259 850 21494 17938 1 4 2 2 20.0 68.00 0 12293 3.007 1.000 1.000 1.000 1.000 0.370 3.007 11182 9239 261 850 21532 17984 1 4 2 3 20.1 68.00 0 12300 3.008 1.000 1.000 1.000 1.000 0.370 3.008 11186 9261 264 850 21561 18020 - 1 4 2 4 20.1 68.00 0 12307 3.009 1.000 1.000 1.000 1.000 0.371 3.009 11190 9274 267 850 21581 18051 + 1 4 2 4 20.1 68.00 0 12307 3.009 1.000 1.000 1.000 1.000 0.371 3.009 11190 9274 267 850 21580 18051 1 4 2 5 20.1 68.00 0 12313 3.010 1.000 1.000 1.000 1.000 0.371 3.010 11194 9283 269 850 21596 18075 1 4 3 0 20.2 68.00 0 12340 3.013 1.000 1.000 1.000 1.000 0.369 3.013 11211 9228 280 850 21568 18052 1 4 3 1 20.4 68.00 0 12367 3.017 1.000 1.000 1.000 1.000 0.369 3.017 11227 9216 290 850 21583 18068 @@ -3774,28 +3774,28 @@ Subhourly User-defined Report, Sun 04-Jan 1 4 7 2 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.300 3.038 11317 7512 347 850 20026 16676 1 4 7 3 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.287 3.038 11317 7184 347 850 19698 16393 1 4 7 4 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.267 3.038 11317 6670 347 850 19184 15958 - 1 4 7 5 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.245 3.038 11317 6126 347 850 18640 15495 + 1 4 7 5 21.0 68.00 0 12513 3.038 1.000 1.000 1.000 1.000 0.245 3.038 11317 6126 347 850 18640 15494 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 60 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 60 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 4 8 0 21.2 68.00 0 12547 3.042 1.000 1.000 1.000 1.000 0.179 3.042 11337 4486 360 850 17033 14143 - 1 4 8 1 21.3 68.00 0 12580 3.047 1.000 1.000 1.000 1.000 0.136 3.047 11358 3411 373 850 15991 13263 - 1 4 8 2 21.5 68.00 0 12614 3.052 1.000 1.000 1.000 1.000 0.0970 3.052 11378 2424 386 850 15037 12450 - 1 4 8 3 21.6 68.00 0 12647 3.056 1.000 1.000 1.000 1.000 0.0611 3.056 11398 1527 399 850 14174 11714 - 1 4 8 4 21.8 68.00 0 12680 3.061 1.000 1.000 1.000 1.000 0.0363 3.061 11419 907 412 850 13587 11214 - 1 4 8 5 21.9 68.00 0 12714 3.066 1.000 1.000 1.000 1.000 0.0108 3.066 11439 271 425 850 12984 10698 - 1 4 9 0 22.5 68.00 0 12834 3.082 0.984 0.984 1.000 0.998 0 3.077 11333 0 464 837 12633 10423 + 1 4 8 0 21.2 68.00 0 12547 3.042 1.000 1.000 1.000 1.000 0.179 3.042 11337 4485 360 850 17032 14142 + 1 4 8 1 21.3 68.00 0 12580 3.047 1.000 1.000 1.000 1.000 0.136 3.047 11358 3412 373 850 15992 13263 + 1 4 8 2 21.5 68.00 0 12614 3.052 1.000 1.000 1.000 1.000 0.0969 3.052 11378 2423 386 850 15037 12449 + 1 4 8 3 21.6 68.00 0 12647 3.056 1.000 1.000 1.000 1.000 0.0611 3.056 11398 1526 399 850 14173 11714 + 1 4 8 4 21.8 68.00 0 12680 3.061 1.000 1.000 1.000 1.000 0.0364 3.061 11419 910 412 850 13590 11216 + 1 4 8 5 21.9 68.00 0 12714 3.066 1.000 1.000 1.000 1.000 0.0107 3.066 11439 268 425 850 12981 10695 + 1 4 9 0 22.5 68.00 0 12834 3.082 0.984 0.984 1.000 0.998 0 3.077 11334 0 464 837 12634 10423 1 4 9 1 23.0 68.00 0 12954 3.099 0.925 0.925 1.000 0.992 0 3.073 10717 0 479 786 11982 9880 - 1 4 9 2 23.5 68.00 0 13074 3.116 0.861 0.861 1.000 0.984 0 3.067 10041 0 486 732 11259 9280 + 1 4 9 2 23.5 68.00 0 13074 3.116 0.861 0.861 1.000 0.984 0 3.067 10042 0 486 732 11259 9281 1 4 9 3 24.1 68.00 0 13194 3.132 0.800 0.800 1.000 0.977 0 3.062 9385 0 489 680 10553 8694 1 4 9 4 24.6 68.00 0 13314 3.149 0.743 0.743 1.000 0.971 0 3.058 8768 0 488 631 9887 8140 - 1 4 9 5 25.2 68.00 0 13434 3.165 0.687 0.687 1.000 0.965 0 3.054 8165 0 484 584 9233 7597 + 1 4 9 5 25.2 68.00 0 13434 3.165 0.687 0.687 1.000 0.965 0 3.054 8164 0 484 584 9232 7597 1 4 10 0 25.4 68.00 0 13494 3.174 0.691 0.691 1.000 0.965 0 3.063 8233 0 503 587 9323 7666 1 4 10 1 25.7 68.00 0 13554 3.182 0.653 0.653 1.000 0.961 0 3.058 7806 0 490 555 8851 7273 1 4 10 2 26.0 68.00 0 13614 3.190 0.618 0.618 1.000 0.957 0 3.053 7409 0 478 525 8412 6911 @@ -3825,7 +3825,7 @@ CZ16 Dual Fuel 1 4 14 2 26.7 68.00 0 13775 3.212 0.388 0.388 1.000 0.931 0 2.991 4687 0 324 330 5341 4408 1 4 14 3 26.8 68.00 0 13795 3.215 0.390 0.390 1.000 0.931 0 2.994 4714 0 329 331 5374 4438 1 4 14 4 26.9 68.00 0 13815 3.218 0.395 0.395 1.000 0.932 0 2.998 4781 0 336 335 5452 4507 - 1 4 14 5 27.0 68.00 0 13835 3.220 0.397 0.397 1.000 0.932 0 3.002 4816 0 341 338 5495 4542 + 1 4 14 5 27.0 68.00 0 13835 3.220 0.397 0.397 1.000 0.932 0 3.002 4816 0 341 338 5495 4541 1 4 15 0 26.9 68.00 0 13828 3.219 0.391 0.391 1.000 0.932 0 2.999 4741 0 335 332 5408 4480 1 4 15 1 26.9 68.00 0 13821 3.218 0.398 0.398 1.000 0.932 0 3.001 4826 0 340 338 5505 4564 1 4 15 2 26.9 68.00 0 13815 3.218 0.407 0.407 1.000 0.933 0 3.003 4927 0 346 346 5619 4660 @@ -3840,7 +3840,7 @@ CZ16 Dual Fuel 1 4 16 5 25.9 68.00 0 13594 3.187 0.775 0.775 1.000 0.975 0 3.107 9288 0 594 659 10541 8747 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 61 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 61 @@ -3903,7 +3903,7 @@ Subhourly User-defined Report, Mon 05-Jan 1 5 0 5 26.2 68.00 0 13674 3.198 1.000 1.000 1.000 1.000 0.206 3.198 12027 5162 797 850 18837 15488 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 62 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 62 @@ -3927,7 +3927,7 @@ CZ16 Dual Fuel 1 5 3 2 30.1 68.00 0 14535 3.316 1.000 1.000 1.000 1.000 0.148 3.316 12554 3709 1131 850 18244 14856 1 5 3 3 30.4 68.00 0 14609 3.326 1.000 1.000 1.000 1.000 0.145 3.326 12599 3618 1160 850 18226 14845 1 5 3 4 30.8 68.00 0 14682 3.335 1.000 1.000 1.000 1.000 0.136 3.335 12644 3403 1188 850 18085 14714 - 1 5 3 5 31.1 68.00 0 14755 3.345 1.000 1.000 1.000 1.000 0.132 3.345 12689 3312 1217 850 18067 14703 + 1 5 3 5 31.1 68.00 0 14755 3.345 1.000 1.000 1.000 1.000 0.132 3.345 12689 3312 1217 850 18067 14702 1 5 4 0 31.3 68.00 0 14795 3.351 1.000 1.000 1.000 1.000 0.126 3.351 12713 3149 1232 850 17944 14592 1 5 4 1 31.5 68.00 0 14835 3.356 1.000 1.000 1.000 1.000 0.125 3.356 12738 3137 1248 850 17972 14622 1 5 4 2 31.6 68.00 0 14875 3.362 1.000 1.000 1.000 1.000 0.119 3.362 12762 2977 1263 850 17852 14516 @@ -3966,7 +3966,7 @@ CZ16 Dual Fuel 1 5 9 5 38.1 68.00 0 16317 3.553 0.278 0.278 1.000 0.919 0 3.265 3793 0 507 236 4535 3630 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 63 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 63 @@ -3977,46 +3977,46 @@ CZ16 Dual Fuel 1 5 10 1 38.8 68.00 0 16477 3.574 0.272 0.272 1.000 0.918 0 3.281 3733 0 512 231 4476 3581 1 5 10 2 39.2 68.00 0 16557 3.585 0.240 0.240 1.000 0.915 0 3.278 3315 0 460 204 3979 3183 1 5 10 3 39.6 68.00 0 16637 3.595 0.226 0.226 1.000 0.913 0 3.282 3123 0 439 192 3753 3003 - 1 5 10 4 39.9 68.00 0 16717 3.606 0.203 0.203 1.000 0.910 0 3.283 2821 0 402 173 3396 2714 + 1 5 10 4 39.9 68.00 0 16717 3.606 0.203 0.203 1.000 0.910 0 3.283 2821 0 402 173 3395 2713 1 5 10 5 40.3 68.00 0 16797 3.616 0.191 0.191 1.000 0.909 0 3.287 2658 0 383 162 3203 2562 1 5 11 0 40.5 68.00 0 16844 3.622 0.208 0.208 1.000 0.911 0 3.299 2901 0 421 177 3499 2797 1 5 11 1 40.7 68.00 0 16890 3.628 0.200 0.200 1.000 0.910 0 3.302 2801 0 409 170 3380 2703 - 1 5 11 2 40.9 68.00 0 16937 3.635 0.187 0.187 1.000 0.909 0 3.302 2624 0 386 159 3170 2534 - 1 5 11 3 41.1 68.00 0 16984 3.641 0.181 0.181 1.000 0.908 0 3.305 2548 0 377 154 3080 2465 - 1 5 11 4 41.3 68.00 0 17031 3.647 0.175 0.175 1.000 0.907 0 3.308 2457 0 366 148 2972 2380 - 1 5 11 5 41.5 68.00 0 17077 3.653 0.160 0.160 1.000 0.905 0 3.308 2256 0 339 136 2731 2183 - 1 5 12 0 41.0 68.00 0 16950 3.636 0.161 0.161 1.000 0.906 0 3.293 2253 0 332 136 2721 2179 + 1 5 11 2 40.9 68.00 0 16937 3.635 0.187 0.187 1.000 0.909 0 3.302 2624 0 386 159 3169 2534 + 1 5 11 3 41.1 68.00 0 16984 3.641 0.181 0.181 1.000 0.908 0 3.305 2548 0 377 154 3079 2465 + 1 5 11 4 41.3 68.00 0 17031 3.647 0.174 0.174 1.000 0.907 0 3.308 2457 0 366 148 2971 2379 + 1 5 11 5 41.5 68.00 0 17077 3.653 0.160 0.160 1.000 0.905 0 3.307 2255 0 338 136 2729 2181 + 1 5 12 0 41.0 68.00 0 16950 3.636 0.161 0.161 1.000 0.906 0 3.293 2252 0 332 136 2721 2179 1 5 12 1 40.4 68.00 0 16824 3.620 0.156 0.156 1.000 0.905 0 3.276 2177 0 315 133 2625 2098 1 5 12 2 39.8 68.00 0 16697 3.603 0.165 0.165 1.000 0.906 0 3.265 2291 0 325 140 2757 2206 - 1 5 12 3 39.3 68.00 0 16570 3.587 0.170 0.170 1.000 0.907 0 3.252 2344 0 326 144 2815 2251 - 1 5 12 4 38.7 68.00 0 16443 3.570 0.176 0.176 1.000 0.907 0 3.239 2421 0 330 150 2901 2318 - 1 5 12 5 38.1 68.00 0 16317 3.553 0.185 0.185 1.000 0.908 0 3.227 2519 0 336 157 3012 2406 - 1 5 13 0 38.4 68.00 0 16377 3.561 0.159 0.159 1.000 0.905 0 3.224 2181 0 294 135 2611 2086 + 1 5 12 3 39.3 68.00 0 16570 3.587 0.170 0.170 1.000 0.907 0 3.252 2343 0 326 144 2814 2250 + 1 5 12 4 38.7 68.00 0 16443 3.570 0.176 0.176 1.000 0.907 0 3.239 2420 0 330 150 2900 2317 + 1 5 12 5 38.1 68.00 0 16317 3.553 0.185 0.185 1.000 0.908 0 3.227 2518 0 336 157 3011 2406 + 1 5 13 0 38.4 68.00 0 16377 3.561 0.159 0.159 1.000 0.905 0 3.224 2181 0 294 135 2610 2086 1 5 13 1 38.7 68.00 0 16437 3.569 0.153 0.153 1.000 0.905 0 3.229 2099 0 286 130 2515 2009 1 5 13 2 38.9 68.00 0 16497 3.577 0.150 0.150 1.000 0.904 0 3.235 2059 0 283 127 2469 1974 - 1 5 13 3 39.2 68.00 0 16557 3.585 0.139 0.139 1.000 0.903 0 3.238 1919 0 267 118 2304 1842 + 1 5 13 3 39.2 68.00 0 16557 3.585 0.139 0.139 1.000 0.903 0 3.238 1919 0 267 118 2304 1843 1 5 13 4 39.5 68.00 0 16617 3.593 0.143 0.143 1.000 0.904 0 3.246 1977 0 277 122 2376 1904 1 5 13 5 39.7 68.00 0 16677 3.601 0.145 0.145 1.000 0.904 0 3.254 2016 0 285 124 2425 1944 - 1 5 14 0 39.7 68.00 0 16657 3.598 .0973 .0973 1.000 0.898 0 3.233 1348 0 190 83 1621 1298 + 1 5 14 0 39.7 68.00 0 16657 3.598 .0973 .0973 1.000 0.898 0 3.233 1349 0 190 83 1622 1298 1 5 14 1 39.6 68.00 0 16637 3.595 .0980 .0980 1.000 0.899 0 3.230 1357 0 191 83 1631 1309 1 5 14 2 39.5 68.00 0 16617 3.593 0.101 0.101 1.000 0.899 0 3.229 1401 0 196 86 1683 1350 - 1 5 14 3 39.4 68.00 0 16597 3.590 0.118 0.118 1.000 0.901 0 3.234 1624 0 227 100 1950 1565 + 1 5 14 3 39.4 68.00 0 16597 3.590 0.118 0.118 1.000 0.901 0 3.234 1624 0 227 100 1950 1566 1 5 14 4 39.3 68.00 0 16577 3.587 0.138 0.138 1.000 0.903 0 3.240 1905 0 265 117 2287 1837 - 1 5 14 5 39.2 68.00 0 16557 3.585 0.162 0.162 1.000 0.906 0 3.247 2233 0 310 138 2681 2154 + 1 5 14 5 39.2 68.00 0 16557 3.585 0.162 0.162 1.000 0.906 0 3.247 2234 0 310 138 2681 2154 1 5 15 0 39.2 68.00 0 16550 3.584 0.197 0.197 1.000 0.910 0 3.260 2718 0 377 168 3263 2624 1 5 15 1 39.1 68.00 0 16543 3.583 0.217 0.217 1.000 0.912 0 3.268 2997 0 415 185 3597 2896 1 5 15 2 39.1 68.00 0 16537 3.582 0.247 0.247 1.000 0.915 0 3.279 3408 0 472 210 4090 3296 - 1 5 15 3 39.1 68.00 0 16530 3.581 0.270 0.270 1.000 0.918 0 3.287 3726 0 515 230 4471 3608 + 1 5 15 3 39.1 68.00 0 16530 3.581 0.271 0.271 1.000 0.918 0 3.287 3726 0 515 230 4471 3608 1 5 15 4 39.0 68.00 0 16523 3.580 0.290 0.290 1.000 0.920 0 3.295 3999 0 553 247 4799 3873 1 5 15 5 39.0 68.00 0 16517 3.580 0.316 0.316 1.000 0.923 0 3.304 4347 0 600 268 5215 4213 1 5 16 0 39.0 68.00 0 16510 3.579 0.325 0.325 1.000 0.924 0 3.307 4474 0 617 276 5367 4343 1 5 16 1 39.0 68.00 0 16503 3.578 0.350 0.350 1.000 0.927 0 3.316 4809 0 662 297 5768 4665 - 1 5 16 2 38.9 68.00 0 16497 3.577 0.374 0.374 1.000 0.930 0 3.325 5146 0 708 318 6172 5000 + 1 5 16 2 38.9 68.00 0 16497 3.577 0.374 0.374 1.000 0.930 0 3.325 5147 0 708 318 6172 5000 1 5 16 3 38.9 68.00 0 16490 3.576 0.399 0.399 1.000 0.932 0 3.334 5480 0 753 339 6572 5322 1 5 16 4 38.9 68.00 0 16483 3.575 0.421 0.421 1.000 0.935 0 3.342 5787 0 794 358 6939 5620 1 5 16 5 38.8 68.00 0 16477 3.574 0.449 0.449 1.000 0.938 0 3.353 6166 0 846 381 7393 5993 - 1 5 17 0 38.7 68.00 0 16443 3.570 0.503 0.503 1.000 0.944 0 3.370 6897 0 941 427 8265 6713 - 1 5 17 1 38.5 68.00 0 16410 3.566 0.520 0.520 1.000 0.946 0 3.373 7129 0 967 442 8538 6930 + 1 5 17 0 38.7 68.00 0 16443 3.570 0.503 0.503 1.000 0.944 0 3.370 6897 0 941 427 8265 6714 + 1 5 17 1 38.5 68.00 0 16410 3.566 0.520 0.520 1.000 0.946 0 3.373 7129 0 967 442 8539 6930 1 5 17 2 38.4 68.00 0 16377 3.561 0.539 0.539 1.000 0.948 0 3.376 7374 0 995 458 8827 7167 1 5 17 3 38.2 68.00 0 16343 3.557 0.562 0.562 1.000 0.951 0 3.382 7683 0 1031 478 9191 7482 1 5 17 4 38.1 68.00 0 16310 3.552 0.582 0.582 1.000 0.953 0 3.386 7945 0 1060 495 9500 7726 @@ -4025,11 +4025,11 @@ CZ16 Dual Fuel 1 5 18 1 37.9 68.00 0 16277 3.548 0.598 0.598 1.000 0.955 0 3.387 8141 0 1080 508 9729 7929 1 5 18 2 37.9 68.00 0 16277 3.548 0.608 0.608 1.000 0.956 0 3.392 8287 0 1099 517 9903 8076 1 5 18 3 37.9 68.00 0 16277 3.548 0.616 0.616 1.000 0.957 0 3.395 8386 0 1112 523 10021 8170 - 1 5 18 4 37.9 68.00 0 16277 3.548 0.622 0.622 1.000 0.957 0 3.397 8469 0 1124 528 10122 8252 + 1 5 18 4 37.9 68.00 0 16277 3.548 0.622 0.622 1.000 0.957 0 3.397 8470 0 1124 529 10122 8252 1 5 18 5 37.9 68.00 0 16277 3.548 0.629 0.629 1.000 0.958 0 3.400 8566 0 1136 535 10237 8345 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 64 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 64 @@ -4039,21 +4039,21 @@ CZ16 Dual Fuel 1 5 19 0 37.9 68.00 0 16270 3.547 0.624 0.624 1.000 0.958 0 3.397 8493 0 1125 530 10148 8271 1 5 19 1 37.9 68.00 0 16263 3.546 0.629 0.629 1.000 0.958 0 3.398 8562 0 1133 535 10230 8339 1 5 19 2 37.8 68.00 0 16257 3.545 0.635 0.635 1.000 0.959 0 3.400 8635 0 1142 539 10316 8411 - 1 5 19 3 37.8 68.00 0 16250 3.544 0.640 0.640 1.000 0.960 0 3.401 8706 0 1150 544 10400 8480 + 1 5 19 3 37.8 68.00 0 16250 3.544 0.640 0.640 1.000 0.960 0 3.401 8707 0 1150 544 10400 8480 1 5 19 4 37.8 68.00 0 16243 3.544 0.645 0.645 1.000 0.960 0 3.402 8772 0 1157 548 10478 8545 1 5 19 5 37.8 68.00 0 16237 3.543 0.657 0.657 1.000 0.961 0 3.406 8935 0 1177 559 10671 8704 1 5 20 0 37.6 68.00 0 16210 3.539 0.672 0.672 1.000 0.963 0 3.408 9120 0 1196 571 10887 8876 1 5 20 1 37.5 68.00 0 16183 3.536 0.679 0.679 1.000 0.964 0 3.408 9213 0 1203 577 10993 8964 1 5 20 2 37.4 68.00 0 16156 3.532 0.688 0.688 1.000 0.965 0 3.408 9322 0 1211 585 11118 9072 1 5 20 3 37.3 68.00 0 16130 3.529 0.697 0.697 1.000 0.966 0 3.408 9429 0 1219 592 11240 9178 - 1 5 20 4 37.2 68.00 0 16103 3.525 0.704 0.704 1.000 0.967 0 3.408 9515 0 1225 598 11338 9261 + 1 5 20 4 37.2 68.00 0 16103 3.525 0.704 0.704 1.000 0.967 0 3.408 9515 0 1225 598 11339 9261 1 5 20 5 37.0 68.00 0 16076 3.522 0.711 0.711 1.000 0.968 0 3.407 9599 0 1230 604 11434 9346 - 1 5 21 0 37.0 68.00 0 16070 3.521 0.731 0.731 1.000 0.970 0 3.414 9862 0 1262 621 11746 9598 + 1 5 21 0 37.0 68.00 0 16070 3.521 0.731 0.731 1.000 0.970 0 3.414 9863 0 1262 621 11746 9598 1 5 21 1 37.0 68.00 0 16063 3.520 0.735 0.735 1.000 0.970 0 3.415 9908 0 1266 624 11799 9643 - 1 5 21 2 37.0 68.00 0 16056 3.519 0.737 0.737 1.000 0.970 0 3.415 9944 0 1269 627 11841 9684 + 1 5 21 2 37.0 68.00 0 16056 3.519 0.737 0.737 1.000 0.970 0 3.415 9945 0 1269 627 11841 9684 1 5 21 3 36.9 68.00 0 16050 3.518 0.740 0.740 1.000 0.971 0 3.415 9974 0 1272 629 11875 9716 1 5 21 4 36.9 68.00 0 16043 3.517 0.741 0.741 1.000 0.971 0 3.415 9981 0 1271 629 11881 9714 - 1 5 21 5 36.9 68.00 0 16036 3.516 0.741 0.741 1.000 0.971 0 3.414 9981 0 1269 630 11880 9709 + 1 5 21 5 36.9 68.00 0 16036 3.516 0.741 0.741 1.000 0.971 0 3.414 9981 0 1270 630 11880 9709 1 5 22 0 36.7 68.00 0 16010 3.513 0.779 0.779 1.000 0.975 0 3.425 10483 0 1327 662 12472 10191 1 5 22 1 36.6 68.00 0 15983 3.509 0.787 0.787 1.000 0.976 0 3.425 10577 0 1332 669 12578 10276 1 5 22 2 36.5 68.00 0 15956 3.506 0.794 0.794 1.000 0.977 0 3.425 10660 0 1336 675 12671 10357 @@ -4064,7 +4064,7 @@ CZ16 Dual Fuel 1 5 23 1 36.4 68.00 0 15930 3.502 0.861 0.861 1.000 0.984 0 3.447 11540 0 1439 731 13710 11206 1 5 23 2 36.5 68.00 0 15956 3.506 0.864 0.864 1.000 0.985 0 3.452 11593 0 1453 734 13780 11265 1 5 23 3 36.6 68.00 0 15983 3.509 0.867 0.867 1.000 0.985 0 3.457 11646 0 1467 736 13850 11321 - 1 5 23 4 36.7 68.00 0 16010 3.513 0.869 0.869 1.000 0.985 0 3.461 11695 0 1480 739 13913 11372 + 1 5 23 4 36.7 68.00 0 16010 3.513 0.869 0.869 1.000 0.985 0 3.461 11695 0 1480 739 13914 11372 1 5 23 5 36.9 68.00 0 16036 3.516 0.870 0.870 1.000 0.985 0 3.465 11723 0 1491 740 13954 11400 @@ -4087,12 +4087,12 @@ Subhourly User-defined Report, Tue 06-Jan 1 6 2 0 38.6 68.00 0 16417 3.566 0.790 0.790 1.000 0.976 0 3.482 10825 0 1470 671 12966 10623 1 6 2 1 38.3 68.00 0 16357 3.559 0.790 0.790 1.000 0.976 0 3.475 10800 0 1452 672 12924 10578 1 6 2 2 38.0 68.00 0 16297 3.551 0.798 0.798 1.000 0.977 0 3.470 10872 0 1447 678 12997 10643 - 1 6 2 3 37.8 68.00 0 16237 3.543 0.801 0.801 1.000 0.978 0 3.463 10892 0 1435 681 13007 10653 + 1 6 2 3 37.8 68.00 0 16237 3.543 0.801 0.801 1.000 0.978 0 3.463 10892 0 1435 681 13008 10653 1 6 2 4 37.5 68.00 0 16176 3.535 0.810 0.810 1.000 0.979 0 3.459 10982 0 1432 688 13103 10733 1 6 2 5 37.2 68.00 0 16116 3.527 0.815 0.815 1.000 0.979 0 3.454 11023 0 1422 693 13138 10757 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 65 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 65 @@ -4113,14 +4113,14 @@ CZ16 Dual Fuel 1 6 4 5 38.7 68.00 0 16437 3.569 0.784 0.784 1.000 0.976 0 3.482 10757 0 1466 666 12889 10578 1 6 5 0 38.1 68.00 0 16317 3.553 0.768 0.768 1.000 0.974 0 3.461 10479 0 1400 653 12532 10272 1 6 5 1 37.6 68.00 0 16197 3.537 0.780 0.780 1.000 0.975 0 3.450 10587 0 1385 663 12635 10372 - 1 6 5 2 37.0 68.00 0 16076 3.522 0.789 0.789 1.000 0.976 0 3.438 10647 0 1364 670 12682 10393 + 1 6 5 2 37.0 68.00 0 16076 3.522 0.789 0.789 1.000 0.976 0 3.438 10647 0 1364 670 12682 10394 1 6 5 3 36.5 68.00 0 15956 3.506 0.806 0.806 1.000 0.978 0 3.429 10820 0 1356 685 12861 10556 1 6 5 4 36.0 68.00 0 15836 3.490 0.817 0.817 1.000 0.979 0 3.418 10907 0 1337 694 12938 10608 1 6 5 5 35.4 68.00 0 15716 3.474 0.838 0.838 1.000 0.982 0 3.411 11132 0 1333 713 13178 10817 1 6 6 0 34.8 68.00 0 15589 3.457 0.828 0.828 1.000 0.981 0 3.390 10925 0 1275 703 12903 10586 1 6 6 1 34.3 68.00 0 15463 3.440 0.850 0.850 1.000 0.983 0 3.382 11150 0 1267 722 13139 10790 - 1 6 6 2 33.7 68.00 0 15336 3.423 0.862 0.862 1.000 0.984 0 3.370 11246 0 1243 733 13222 10849 - 1 6 6 3 33.1 68.00 0 15209 3.406 0.885 0.885 1.000 0.987 0 3.362 11479 0 1233 752 13465 11046 + 1 6 6 2 33.7 68.00 0 15336 3.423 0.862 0.862 1.000 0.984 0 3.370 11247 0 1243 733 13222 10849 + 1 6 6 3 33.1 68.00 0 15209 3.406 0.885 0.885 1.000 0.987 0 3.362 11480 0 1233 752 13465 11046 1 6 6 4 32.6 68.00 0 15082 3.389 0.908 0.908 1.000 0.990 0 3.354 11705 0 1220 772 13697 11227 1 6 6 5 32.0 68.00 0 14955 3.372 0.924 0.924 1.000 0.991 0 3.343 11832 0 1195 785 13813 11305 1 6 7 0 32.4 68.00 0 15036 3.383 0.977 0.977 1.000 0.997 0 3.374 12559 0 1294 830 14683 12026 @@ -4137,112 +4137,112 @@ CZ16 Dual Fuel 1 6 8 5 36.1 68.00 0 15876 3.495 0.854 0.854 1.000 0.984 0 3.438 11422 0 1410 726 13559 11172 1 6 9 0 36.5 68.00 0 15950 3.505 0.829 0.829 1.000 0.981 0 3.437 11123 0 1392 704 13220 10880 1 6 9 1 36.8 68.00 0 16023 3.515 0.808 0.808 1.000 0.978 0 3.439 10885 0 1381 687 12953 10674 - 1 6 9 2 37.1 68.00 0 16096 3.524 0.789 0.789 1.000 0.976 0 3.441 10661 0 1371 671 12702 10469 - 1 6 9 3 37.5 68.00 0 16170 3.534 0.767 0.767 1.000 0.974 0 3.441 10390 0 1353 651 12395 10185 - 1 6 9 4 37.8 68.00 0 16243 3.544 0.748 0.748 1.000 0.972 0 3.443 10168 0 1341 635 12145 10009 - 1 6 9 5 38.1 68.00 0 16317 3.553 0.731 0.731 1.000 0.970 0 3.446 9978 0 1333 622 11932 9830 - 1 6 10 0 38.3 68.00 0 16357 3.559 0.730 0.730 1.000 0.970 0 3.450 9974 0 1341 620 11936 9837 - 1 6 10 1 38.5 68.00 0 16397 3.564 0.718 0.718 1.000 0.968 0 3.451 9835 0 1331 610 11776 9700 - 1 6 10 2 38.7 68.00 0 16437 3.569 0.711 0.711 1.000 0.967 0 3.453 9753 0 1329 604 11686 9636 - 1 6 10 3 38.8 68.00 0 16477 3.574 0.701 0.701 1.000 0.966 0 3.454 9637 0 1322 596 11555 9534 - 1 6 10 4 39.0 68.00 0 16517 3.580 0.684 0.684 1.000 0.964 0 3.452 9421 0 1300 582 11303 9316 - 1 6 10 5 39.2 68.00 0 16557 3.585 0.670 0.670 1.000 0.963 0 3.452 9239 0 1283 569 11092 9153 - 1 6 11 0 39.3 68.00 0 16583 3.588 0.639 0.639 1.000 0.959 0 3.442 8819 0 1230 543 10592 8743 - 1 6 11 1 39.4 68.00 0 16610 3.592 0.621 0.621 1.000 0.957 0 3.439 8586 0 1203 528 10317 8511 - 1 6 11 2 39.6 68.00 0 16637 3.595 0.599 0.599 1.000 0.955 0 3.433 8293 0 1166 509 9969 8203 - 1 6 11 3 39.7 68.00 0 16664 3.599 0.582 0.582 1.000 0.953 0 3.430 8063 0 1139 495 9696 7992 - 1 6 11 4 39.8 68.00 0 16690 3.602 0.568 0.568 1.000 0.951 0 3.427 7885 0 1118 483 9486 7817 - 1 6 11 5 39.9 68.00 0 16717 3.606 0.554 0.554 1.000 0.950 0 3.425 7698 0 1096 471 9265 7626 - ------------------------------------------------------------------------------- -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 66 + 1 6 9 2 37.1 68.00 0 16096 3.524 0.789 0.789 1.000 0.976 0 3.441 10661 0 1371 671 12702 10471 + 1 6 9 3 37.5 68.00 0 16170 3.534 0.766 0.766 1.000 0.974 0 3.441 10385 0 1353 651 12389 10182 + 1 6 9 4 37.8 68.00 0 16243 3.544 0.748 0.748 1.000 0.972 0 3.443 10167 0 1341 635 12144 10008 + 1 6 9 5 38.1 68.00 0 16317 3.553 0.731 0.731 1.000 0.970 0 3.446 9978 0 1333 621 11932 9831 + 1 6 10 0 38.3 68.00 0 16357 3.559 0.730 0.730 1.000 0.970 0 3.450 9974 0 1341 620 11935 9838 + 1 6 10 1 38.5 68.00 0 16397 3.564 0.718 0.718 1.000 0.968 0 3.451 9832 0 1331 610 11773 9696 + 1 6 10 2 38.7 68.00 0 16437 3.569 0.711 0.711 1.000 0.967 0 3.453 9750 0 1328 604 11683 9634 + 1 6 10 3 38.8 68.00 0 16477 3.574 0.701 0.701 1.000 0.966 0 3.454 9635 0 1321 596 11552 9532 + 1 6 10 4 39.0 68.00 0 16517 3.580 0.684 0.684 1.000 0.964 0 3.452 9419 0 1300 582 11301 9316 + 1 6 10 5 39.2 68.00 0 16557 3.585 0.670 0.670 1.000 0.963 0 3.452 9238 0 1283 569 11090 9153 + 1 6 11 0 39.3 68.00 0 16583 3.588 0.639 0.639 1.000 0.959 0 3.442 8818 0 1230 543 10590 8740 + 1 6 11 1 39.4 68.00 0 16610 3.592 0.617 0.617 1.000 0.957 0 3.437 8533 0 1195 525 10253 8451 + 1 6 11 2 39.6 68.00 0 16637 3.595 0.598 0.598 1.000 0.955 0 3.433 8279 0 1164 508 9952 8207 + 1 6 11 3 39.7 68.00 0 16664 3.599 0.582 0.582 1.000 0.953 0 3.430 8065 0 1139 495 9698 7997 + 1 6 11 4 39.8 68.00 0 16690 3.602 0.568 0.568 1.000 0.951 0 3.427 7884 0 1118 483 9485 7815 + 1 6 11 5 39.9 68.00 0 16717 3.606 0.556 0.556 1.000 0.950 0 3.426 7721 0 1099 472 9293 7647 + +------------------------------------------------------------------------------ +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 66 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 12 0 39.9 68.00 0 16710 3.605 0.543 0.543 1.000 0.949 0 3.419 7533 0 1072 461 9066 7459 - 1 6 12 1 39.9 68.00 0 16704 3.604 0.533 0.533 1.000 0.947 0 3.415 7395 0 1051 453 8898 7318 - 1 6 12 2 39.8 68.00 0 16697 3.603 0.523 0.523 1.000 0.946 0 3.410 7254 0 1030 444 8727 7178 - 1 6 12 3 39.8 68.00 0 16690 3.602 0.517 0.517 1.000 0.946 0 3.406 7167 0 1016 439 8622 7089 - 1 6 12 4 39.8 68.00 0 16684 3.601 0.515 0.515 1.000 0.945 0 3.405 7145 0 1012 438 8595 7065 - 1 6 12 5 39.7 68.00 0 16677 3.601 0.515 0.515 1.000 0.945 0 3.404 7146 0 1011 438 8595 7062 - 1 6 13 0 39.4 68.00 0 16610 3.592 0.531 0.531 1.000 0.947 0 3.402 7337 0 1028 451 8816 7241 - 1 6 13 1 39.1 68.00 0 16543 3.583 0.554 0.554 1.000 0.950 0 3.403 7634 0 1058 471 9163 7528 - 1 6 13 2 38.8 68.00 0 16477 3.574 0.566 0.566 1.000 0.951 0 3.400 7776 0 1066 481 9324 7657 - 1 6 13 3 38.5 68.00 0 16410 3.566 0.581 0.581 1.000 0.953 0 3.398 7963 0 1080 494 9537 7834 - 1 6 13 4 38.2 68.00 0 16343 3.557 0.597 0.597 1.000 0.955 0 3.395 8149 0 1093 507 9750 8013 - 1 6 13 5 37.9 68.00 0 16277 3.548 0.608 0.608 1.000 0.956 0 3.391 8275 0 1098 516 9890 8128 - 1 6 14 0 38.0 68.00 0 16283 3.549 0.597 0.597 1.000 0.955 0 3.388 8138 0 1081 508 9727 8001 - 1 6 14 1 38.0 68.00 0 16290 3.550 0.597 0.597 1.000 0.955 0 3.389 8139 0 1082 508 9729 8005 - 1 6 14 2 38.0 68.00 0 16297 3.551 0.596 0.596 1.000 0.955 0 3.389 8128 0 1082 507 9717 7995 - 1 6 14 3 38.1 68.00 0 16303 3.552 0.594 0.594 1.000 0.954 0 3.389 8103 0 1080 505 9688 7971 - 1 6 14 4 38.1 68.00 0 16310 3.552 0.591 0.591 1.000 0.954 0 3.389 8062 0 1075 502 9639 7931 - 1 6 14 5 38.1 68.00 0 16317 3.553 0.588 0.588 1.000 0.954 0 3.389 8020 0 1071 500 9591 7891 - 1 6 15 0 38.1 68.00 0 16323 3.554 0.565 0.565 1.000 0.951 0 3.380 7705 0 1030 480 9216 7581 - 1 6 15 1 38.2 68.00 0 16330 3.555 0.557 0.557 1.000 0.950 0 3.378 7610 0 1019 474 9102 7487 - 1 6 15 2 38.2 68.00 0 16337 3.556 0.549 0.549 1.000 0.949 0 3.375 7492 0 1004 466 8962 7370 - 1 6 15 3 38.2 68.00 0 16343 3.557 0.546 0.546 1.000 0.949 0 3.375 7454 0 1000 464 8918 7332 - 1 6 15 4 38.3 68.00 0 16350 3.558 0.549 0.549 1.000 0.949 0 3.377 7503 0 1008 467 8977 7379 - 1 6 15 5 38.3 68.00 0 16357 3.559 0.557 0.557 1.000 0.950 0 3.381 7616 0 1024 474 9113 7489 - 1 6 16 0 38.4 68.00 0 16377 3.561 0.556 0.556 1.000 0.950 0 3.383 7603 0 1026 472 9101 7479 - 1 6 16 1 38.5 68.00 0 16397 3.564 0.564 0.564 1.000 0.951 0 3.389 7725 0 1046 479 9250 7601 - 1 6 16 2 38.6 68.00 0 16417 3.566 0.574 0.574 1.000 0.952 0 3.396 7872 0 1069 488 9429 7749 - 1 6 16 3 38.7 68.00 0 16437 3.569 0.580 0.580 1.000 0.953 0 3.401 7959 0 1084 493 9537 7838 - 1 6 16 4 38.8 68.00 0 16457 3.572 0.591 0.591 1.000 0.954 0 3.407 8114 0 1109 502 9725 7992 - 1 6 16 5 38.8 68.00 0 16477 3.574 0.601 0.601 1.000 0.955 0 3.414 8258 0 1132 511 9901 8135 - 1 6 17 0 38.7 68.00 0 16437 3.569 0.626 0.626 1.000 0.958 0 3.419 8585 0 1170 532 10286 8448 - 1 6 17 1 38.5 68.00 0 16397 3.564 0.633 0.633 1.000 0.959 0 3.417 8666 0 1173 538 10377 8524 - 1 6 17 2 38.3 68.00 0 16357 3.559 0.640 0.640 1.000 0.960 0 3.414 8749 0 1176 544 10469 8605 - 1 6 17 3 38.1 68.00 0 16317 3.553 0.647 0.647 1.000 0.960 0 3.412 8828 0 1179 550 10556 8678 - 1 6 17 4 37.9 68.00 0 16277 3.548 0.654 0.654 1.000 0.961 0 3.410 8903 0 1181 556 10639 8746 - 1 6 17 5 37.8 68.00 0 16237 3.543 0.670 0.670 1.000 0.963 0 3.411 9106 0 1200 569 10875 8941 - 1 6 18 0 37.6 68.00 0 16203 3.538 0.649 0.649 1.000 0.961 0 3.399 8810 0 1154 552 10516 8641 - 1 6 18 1 37.5 68.00 0 16170 3.534 0.651 0.651 1.000 0.961 0 3.395 8827 0 1150 553 10531 8651 - 1 6 18 2 37.3 68.00 0 16136 3.530 0.654 0.654 1.000 0.961 0 3.392 8846 0 1145 556 10547 8661 - 1 6 18 3 37.2 68.00 0 16103 3.525 0.670 0.670 1.000 0.963 0 3.394 9060 0 1166 570 10796 8861 - 1 6 18 4 37.0 68.00 0 16070 3.521 0.672 0.672 1.000 0.963 0 3.391 9066 0 1160 571 10797 8852 - 1 6 18 5 36.9 68.00 0 16036 3.516 0.675 0.675 1.000 0.963 0 3.388 9095 0 1157 574 10826 8871 - 1 6 19 0 36.6 68.00 0 15970 3.508 0.669 0.669 1.000 0.963 0 3.377 8989 0 1129 569 10687 8754 - 1 6 19 1 36.3 68.00 0 15903 3.499 0.689 0.689 1.000 0.965 0 3.376 9230 0 1145 586 10962 8975 - 1 6 19 2 36.0 68.00 0 15836 3.490 0.696 0.696 1.000 0.966 0 3.370 9285 0 1138 591 11014 9009 - 1 6 19 3 35.7 68.00 0 15769 3.481 0.703 0.703 1.000 0.967 0 3.365 9354 0 1132 597 11083 9062 - 1 6 19 4 35.4 68.00 0 15703 3.472 0.710 0.710 1.000 0.967 0 3.359 9426 0 1125 604 11155 9118 - 1 6 19 5 35.1 68.00 0 15636 3.463 0.730 0.730 1.000 0.970 0 3.358 9661 0 1138 621 11420 9330 - 1 6 20 0 35.0 68.00 0 15623 3.462 0.738 0.738 1.000 0.971 0 3.360 9763 0 1147 628 11537 9421 - 1 6 20 1 34.9 68.00 0 15609 3.460 0.738 0.738 1.000 0.971 0 3.358 9756 0 1143 628 11527 9406 - 1 6 20 2 34.9 68.00 0 15596 3.458 0.737 0.737 1.000 0.970 0 3.356 9734 0 1137 627 11498 9376 - 1 6 20 3 34.8 68.00 0 15583 3.456 0.754 0.754 1.000 0.972 0 3.361 9952 0 1160 641 11752 9574 - 1 6 20 4 34.8 68.00 0 15569 3.454 0.752 0.752 1.000 0.972 0 3.358 9919 0 1153 639 11711 9525 - 1 6 20 5 34.7 68.00 0 15556 3.453 0.748 0.748 1.000 0.972 0 3.355 9852 0 1142 635 11629 9449 + 1 6 12 0 39.9 68.00 0 16710 3.605 0.546 0.546 1.000 0.949 0 3.421 7584 0 1079 464 9127 7508 + 1 6 12 1 39.9 68.00 0 16704 3.604 0.537 0.537 1.000 0.948 0 3.416 7452 0 1059 456 8968 7378 + 1 6 12 2 39.8 68.00 0 16697 3.603 0.528 0.528 1.000 0.947 0 3.412 7321 0 1039 448 8808 7246 + 1 6 12 3 39.8 68.00 0 16690 3.602 0.522 0.522 1.000 0.946 0 3.409 7242 0 1027 444 8713 7165 + 1 6 12 4 39.8 68.00 0 16684 3.601 0.520 0.520 1.000 0.946 0 3.407 7216 0 1022 442 8680 7136 + 1 6 12 5 39.7 68.00 0 16677 3.601 0.527 0.527 1.000 0.947 0 3.409 7307 0 1034 448 8789 7223 + 1 6 13 0 39.4 68.00 0 16610 3.592 0.542 0.542 1.000 0.949 0 3.407 7496 0 1050 461 9007 7394 + 1 6 13 1 39.1 68.00 0 16543 3.583 0.552 0.552 1.000 0.950 0 3.402 7604 0 1054 469 9127 7493 + 1 6 13 2 38.8 68.00 0 16477 3.574 0.562 0.562 1.000 0.951 0 3.398 7729 0 1060 478 9266 7612 + 1 6 13 3 38.5 68.00 0 16410 3.566 0.584 0.584 1.000 0.953 0 3.398 7995 0 1085 496 9576 7868 + 1 6 13 4 38.2 68.00 0 16343 3.557 0.593 0.593 1.000 0.954 0 3.394 8106 0 1087 504 9698 7968 + 1 6 13 5 37.9 68.00 0 16277 3.548 0.607 0.607 1.000 0.956 0 3.391 8267 0 1097 516 9880 8121 + 1 6 14 0 38.0 68.00 0 16283 3.549 0.598 0.598 1.000 0.955 0 3.388 8143 0 1081 508 9732 8004 + 1 6 14 1 38.0 68.00 0 16290 3.550 0.598 0.598 1.000 0.955 0 3.389 8152 0 1084 508 9744 8015 + 1 6 14 2 38.0 68.00 0 16297 3.551 0.597 0.597 1.000 0.955 0 3.390 8140 0 1084 507 9731 8004 + 1 6 14 3 38.1 68.00 0 16303 3.552 0.595 0.595 1.000 0.954 0 3.390 8117 0 1082 506 9704 7982 + 1 6 14 4 38.1 68.00 0 16310 3.552 0.592 0.592 1.000 0.954 0 3.389 8075 0 1077 503 9655 7941 + 1 6 14 5 38.1 68.00 0 16317 3.553 0.589 0.589 1.000 0.954 0 3.389 8034 0 1073 500 9607 7901 + 1 6 15 0 38.1 68.00 0 16323 3.554 0.566 0.566 1.000 0.951 0 3.380 7719 0 1032 481 9231 7591 + 1 6 15 1 38.2 68.00 0 16330 3.555 0.558 0.558 1.000 0.950 0 3.378 7621 0 1020 474 9116 7495 + 1 6 15 2 38.2 68.00 0 16337 3.556 0.549 0.549 1.000 0.949 0 3.376 7501 0 1005 467 8972 7375 + 1 6 15 3 38.2 68.00 0 16343 3.557 0.546 0.546 1.000 0.949 0 3.375 7458 0 1001 464 8923 7333 + 1 6 15 4 38.3 68.00 0 16350 3.558 0.550 0.550 1.000 0.949 0 3.377 7510 0 1009 467 8986 7383 + 1 6 15 5 38.3 68.00 0 16357 3.559 0.558 0.558 1.000 0.950 0 3.382 7629 0 1026 474 9129 7499 + 1 6 16 0 38.4 68.00 0 16377 3.561 0.557 0.557 1.000 0.950 0 3.384 7623 0 1028 474 9125 7496 + 1 6 16 1 38.5 68.00 0 16397 3.564 0.566 0.566 1.000 0.951 0 3.390 7750 0 1049 481 9280 7623 + 1 6 16 2 38.6 68.00 0 16417 3.566 0.577 0.577 1.000 0.952 0 3.397 7907 0 1074 490 9471 7777 + 1 6 16 3 38.7 68.00 0 16437 3.569 0.587 0.587 1.000 0.953 0 3.403 8046 0 1096 498 9641 7914 + 1 6 16 4 38.8 68.00 0 16457 3.572 0.598 0.598 1.000 0.955 0 3.410 8217 0 1123 509 9848 8088 + 1 6 16 5 38.8 68.00 0 16477 3.574 0.609 0.609 1.000 0.956 0 3.417 8373 0 1148 518 10039 8244 + 1 6 17 0 38.7 68.00 0 16437 3.569 0.635 0.635 1.000 0.959 0 3.423 8711 0 1187 540 10438 8569 + 1 6 17 1 38.5 68.00 0 16397 3.564 0.643 0.643 1.000 0.960 0 3.421 8805 0 1192 546 10543 8657 + 1 6 17 2 38.3 68.00 0 16357 3.559 0.651 0.651 1.000 0.961 0 3.419 8894 0 1196 553 10643 8745 + 1 6 17 3 38.1 68.00 0 16317 3.553 0.660 0.660 1.000 0.962 0 3.417 9005 0 1203 561 10769 8850 + 1 6 17 4 37.9 68.00 0 16277 3.548 0.666 0.666 1.000 0.962 0 3.415 9074 0 1204 566 10844 8909 + 1 6 17 5 37.8 68.00 0 16237 3.543 0.672 0.672 1.000 0.963 0 3.412 9136 0 1204 571 10911 8963 + 1 6 18 0 37.6 68.00 0 16203 3.538 0.656 0.656 1.000 0.961 0 3.401 8908 0 1167 558 10633 8736 + 1 6 18 1 37.5 68.00 0 16170 3.534 0.657 0.657 1.000 0.961 0 3.398 8907 0 1160 558 10625 8724 + 1 6 18 2 37.3 68.00 0 16136 3.530 0.659 0.659 1.000 0.962 0 3.394 8914 0 1154 560 10629 8722 + 1 6 18 3 37.2 68.00 0 16103 3.525 0.660 0.660 1.000 0.962 0 3.390 8919 0 1148 561 10628 8718 + 1 6 18 4 37.0 68.00 0 16070 3.521 0.676 0.676 1.000 0.964 0 3.392 9119 0 1167 574 10860 8904 + 1 6 18 5 36.9 68.00 0 16036 3.516 0.678 0.678 1.000 0.964 0 3.389 9139 0 1162 576 10878 8908 + 1 6 19 0 36.6 68.00 0 15970 3.508 0.673 0.673 1.000 0.963 0 3.378 9035 0 1135 572 10742 8793 + 1 6 19 1 36.3 68.00 0 15903 3.499 0.679 0.679 1.000 0.964 0 3.372 9086 0 1128 577 10790 8830 + 1 6 19 2 36.0 68.00 0 15836 3.490 0.699 0.699 1.000 0.966 0 3.371 9325 0 1143 594 11062 9048 + 1 6 19 3 35.7 68.00 0 15769 3.481 0.705 0.705 1.000 0.967 0 3.366 9387 0 1136 599 11123 9089 + 1 6 19 4 35.4 68.00 0 15703 3.472 0.713 0.713 1.000 0.968 0 3.360 9461 0 1130 606 11196 9146 + 1 6 19 5 35.1 68.00 0 15636 3.463 0.721 0.721 1.000 0.969 0 3.355 9543 0 1124 613 11281 9212 + 1 6 20 0 35.0 68.00 0 15623 3.462 0.742 0.742 1.000 0.971 0 3.361 9814 0 1153 631 11598 9471 + 1 6 20 1 34.9 68.00 0 15609 3.460 0.743 0.743 1.000 0.971 0 3.360 9813 0 1150 631 11595 9456 + 1 6 20 2 34.9 68.00 0 15596 3.458 0.742 0.742 1.000 0.971 0 3.358 9797 0 1145 631 11572 9431 + 1 6 20 3 34.8 68.00 0 15583 3.456 0.740 0.740 1.000 0.971 0 3.355 9760 0 1137 629 11526 9386 + 1 6 20 4 34.8 68.00 0 15569 3.454 0.757 0.757 1.000 0.973 0 3.360 9984 0 1160 643 11788 9589 + 1 6 20 5 34.7 68.00 0 15556 3.453 0.754 0.754 1.000 0.972 0 3.357 9934 0 1151 641 11726 9523 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 67 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 67 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 21 0 34.3 68.00 0 15456 3.439 0.793 0.793 1.000 0.977 0 3.359 10404 0 1181 674 12259 9951 - 1 6 21 1 33.8 68.00 0 15356 3.426 0.804 0.804 1.000 0.978 0 3.350 10496 0 1165 683 12345 10002 - 1 6 21 2 33.3 68.00 0 15256 3.413 0.811 0.811 1.000 0.979 0 3.340 10534 0 1144 689 12366 10011 - 1 6 21 3 32.9 68.00 0 15156 3.399 0.848 0.848 1.000 0.983 0 3.341 10971 0 1164 721 12855 10395 - 1 6 21 4 32.5 68.00 0 15056 3.386 0.861 0.861 1.000 0.984 0 3.333 11082 0 1148 732 12961 10460 - 1 6 21 5 32.0 68.00 0 14955 3.372 0.868 0.868 1.000 0.985 0 3.322 11115 0 1123 737 12975 10458 - 1 6 22 0 31.7 68.00 0 14889 3.363 0.919 0.919 1.000 0.991 0 3.333 11733 0 1165 781 13679 11019 - 1 6 22 1 31.4 68.00 0 14822 3.354 0.954 0.954 1.000 0.995 0 3.337 12141 0 1185 811 14136 11375 - 1 6 22 2 31.1 68.00 0 14755 3.345 0.970 0.970 1.000 0.997 0 3.334 12313 0 1181 825 14318 11512 - 1 6 22 3 30.8 68.00 0 14689 3.336 0.987 0.987 1.000 0.999 0 3.332 12486 0 1176 839 14501 11650 - 1 6 22 4 30.5 68.00 0 14622 3.327 1.000 1.000 1.000 1.000 0.00266 3.327 12607 66 1165 850 14688 11795 - 1 6 22 5 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0111 3.318 12566 276 1139 850 14831 11911 - 1 6 23 0 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0363 3.318 12566 907 1139 850 15462 12443 - 1 6 23 1 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0418 3.318 12566 1044 1139 850 15599 12555 - 1 6 23 2 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0459 3.318 12566 1148 1139 850 15703 12643 - 1 6 23 3 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0500 3.318 12566 1251 1139 850 15806 12728 - 1 6 23 4 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0535 3.318 12566 1339 1139 850 15894 12800 - 1 6 23 5 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0532 3.318 12566 1331 1139 850 15886 12788 + 1 6 21 0 34.3 68.00 0 15456 3.439 0.780 0.780 1.000 0.975 0 3.354 10226 0 1160 663 12049 9775 + 1 6 21 1 33.8 68.00 0 15356 3.426 0.809 0.809 1.000 0.978 0 3.352 10560 0 1172 687 12420 10065 + 1 6 21 2 33.3 68.00 0 15256 3.413 0.820 0.820 1.000 0.980 0 3.343 10651 0 1156 697 12504 10116 + 1 6 21 3 32.9 68.00 0 15156 3.399 0.847 0.847 1.000 0.983 0 3.341 10952 0 1162 720 12834 10372 + 1 6 21 4 32.5 68.00 0 15056 3.386 0.858 0.858 1.000 0.984 0 3.332 11043 0 1144 729 12916 10421 + 1 6 21 5 32.0 68.00 0 14955 3.372 0.867 0.867 1.000 0.985 0 3.322 11110 0 1122 737 12970 10452 + 1 6 22 0 31.7 68.00 0 14889 3.363 0.943 0.943 1.000 0.994 0 3.342 12041 0 1196 801 14038 11305 + 1 6 22 1 31.4 68.00 0 14822 3.354 0.963 0.963 1.000 0.996 0 3.340 12254 0 1196 818 14269 11472 + 1 6 22 2 31.1 68.00 0 14755 3.345 0.980 0.980 1.000 0.998 0 3.338 12432 0 1192 833 14456 11617 + 1 6 22 3 30.8 68.00 0 14689 3.336 0.997 0.997 1.000 1.000 0 3.335 12615 0 1188 848 14650 11765 + 1 6 22 4 30.5 68.00 0 14622 3.327 1.000 1.000 1.000 1.000 0.00869 3.327 12607 217 1165 850 14839 11917 + 1 6 22 5 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0159 3.318 12566 397 1139 850 14952 12007 + 1 6 23 0 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0406 3.318 12566 1015 1139 850 15570 12527 + 1 6 23 1 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0457 3.318 12566 1141 1139 850 15697 12631 + 1 6 23 2 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0494 3.318 12566 1236 1139 850 15791 12710 + 1 6 23 3 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0508 3.318 12566 1269 1139 850 15825 12732 + 1 6 23 4 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0540 3.318 12566 1350 1139 850 15905 12803 + 1 6 23 5 30.2 68.00 0 14555 3.318 1.000 1.000 1.000 1.000 0.0573 3.318 12566 1432 1139 850 15987 12869 @@ -4281,7 +4281,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 68 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 68 @@ -4344,7 +4344,7 @@ Subhourly User-defined Report, Fri 14-Aug 8 14 7 5 77.2 77.60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 69 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 69 @@ -4374,7 +4374,7 @@ CZ16 Dual Fuel 8 14 11 2 84.1 78.00 0 0 0 0.278 0.278 1.000 1.000 0 0 -4736 0 0 237 -4499 -3841 8 14 11 3 84.2 78.00 0 0 0 0.287 0.287 1.000 1.000 0 0 -4888 0 0 245 -4643 -3961 8 14 11 4 84.3 78.00 0 0 0 0.296 0.296 1.000 1.000 0 0 -5033 0 0 252 -4781 -4074 - 8 14 11 5 84.4 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5180 0 0 259 -4921 -4190 + 8 14 11 5 84.4 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5181 0 0 259 -4921 -4190 8 14 12 0 84.7 78.00 0 0 0 0.286 0.286 1.000 1.000 0 0 -4859 0 0 244 -4616 -3925 8 14 12 1 85.0 78.00 0 0 0 0.295 0.295 1.000 1.000 0 0 -5001 0 0 251 -4750 -4034 8 14 12 2 85.3 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5162 0 0 260 -4902 -4157 @@ -4391,7 +4391,7 @@ CZ16 Dual Fuel 8 14 14 1 87.7 78.00 0 0 0 0.465 0.465 1.000 1.000 0 0 -7767 0 0 395 -7372 -6151 8 14 14 2 87.7 78.00 0 0 0 0.477 0.477 1.000 1.000 0 0 -7978 0 0 406 -7572 -6312 8 14 14 3 87.7 78.00 0 0 0 0.489 0.489 1.000 1.000 0 0 -8180 0 0 416 -7764 -6463 - 8 14 14 4 87.7 78.00 0 0 0 0.490 0.490 1.000 1.000 0 0 -8194 0 0 417 -7777 -6466 + 8 14 14 4 87.7 78.00 0 0 0 0.490 0.490 1.000 1.000 0 0 -8194 0 0 417 -7778 -6466 8 14 14 5 87.6 78.00 0 0 0 0.498 0.498 1.000 1.000 0 0 -8333 0 0 424 -7910 -6570 8 14 15 0 87.3 78.00 0 0 0 0.553 0.553 1.000 1.000 0 0 -9281 0 0 471 -8810 -7308 8 14 15 1 87.0 78.00 0 0 0 0.561 0.561 1.000 1.000 0 0 -9426 0 0 477 -8949 -7414 @@ -4407,7 +4407,7 @@ CZ16 Dual Fuel 8 14 16 5 85.3 78.00 0 0 0 0.634 0.634 1.000 1.000 0 0 -10773 0 0 540 -10233 -8408 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 70 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 70 @@ -4424,7 +4424,7 @@ CZ16 Dual Fuel 8 14 18 1 84.1 78.00 0 0 0 0.654 0.654 1.000 1.000 0 0 -11173 0 0 556 -10617 -8695 8 14 18 2 84.1 78.00 0 0 0 0.645 0.645 1.000 1.000 0 0 -11025 0 0 549 -10476 -8579 8 14 18 3 84.1 78.00 0 0 0 0.630 0.630 1.000 1.000 0 0 -10768 0 0 536 -10232 -8378 - 8 14 18 4 84.0 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10389 0 0 517 -9872 -8082 + 8 14 18 4 84.0 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10389 0 0 517 -9873 -8082 8 14 18 5 84.0 78.00 0 0 0 0.582 0.582 1.000 1.000 0 0 -9962 0 0 495 -9466 -7749 8 14 19 0 83.7 78.00 0 0 0 0.565 0.565 1.000 1.000 0 0 -9691 0 0 481 -9210 -7537 8 14 19 1 83.3 78.00 0 0 0 0.533 0.533 1.000 1.000 0 0 -9151 0 0 453 -8698 -7119 @@ -4444,9 +4444,9 @@ CZ16 Dual Fuel 8 14 21 3 76.2 78.00 0 0 0 0.156 0.156 1.000 1.000 0 0 -2768 0 0 133 -2635 -2159 8 14 21 4 75.7 78.00 0 0 0 0.142 0.142 1.000 1.000 0 0 -2528 0 0 121 -2407 -1973 8 14 21 5 75.2 78.00 0 0 0 0.130 0.130 1.000 1.000 0 0 -2302 0 0 110 -2192 -1798 - 8 14 22 0 75.2 78.00 0 0 0 .0965 .0965 1.000 1.000 0 0 -1714 0 0 82 -1632 -1339 + 8 14 22 0 75.2 78.00 0 0 0 .0966 .0966 1.000 1.000 0 0 -1715 0 0 82 -1632 -1339 8 14 22 1 75.1 78.00 0 0 0 .0880 .0880 1.000 1.000 0 0 -1562 0 0 75 -1487 -1220 - 8 14 22 2 75.1 78.00 0 0 0 .0804 .0804 1.000 1.000 0 0 -1427 0 0 68 -1358 -1115 + 8 14 22 2 75.1 78.00 0 0 0 .0804 .0804 1.000 1.000 0 0 -1427 0 0 68 -1359 -1115 8 14 22 3 75.1 78.00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 22 4 75.0 77.98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 22 5 75.0 77.97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -4470,7 +4470,7 @@ Subhourly User-defined Report, Sat 15-Aug 8 15 0 5 73.4 77.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 71 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 71 @@ -4526,14 +4526,14 @@ CZ16 Dual Fuel 8 15 8 4 80.5 78.00 0 0 0 0.174 0.174 1.000 1.000 0 0 -3012 0 0 148 -2864 -2455 8 15 8 5 80.8 78.00 0 0 0 0.187 0.187 1.000 1.000 0 0 -3243 0 0 159 -3083 -2644 8 15 9 0 81.1 78.00 0 0 0 0.187 0.187 1.000 1.000 0 0 -3235 0 0 159 -3075 -2641 - 8 15 9 1 81.4 78.00 0 0 0 0.203 0.203 1.000 1.000 0 0 -3501 0 0 173 -3328 -2859 + 8 15 9 1 81.4 78.00 0 0 0 0.203 0.203 1.000 1.000 0 0 -3501 0 0 173 -3329 -2859 8 15 9 2 81.7 78.00 0 0 0 0.222 0.222 1.000 1.000 0 0 -3822 0 0 189 -3633 -3121 8 15 9 3 82.0 78.00 0 0 0 0.239 0.239 1.000 1.000 0 0 -4119 0 0 204 -3915 -3362 8 15 9 4 82.3 78.00 0 0 0 0.255 0.255 1.000 1.000 0 0 -4380 0 0 217 -4163 -3574 8 15 9 5 82.6 78.00 0 0 0 0.271 0.271 1.000 1.000 0 0 -4644 0 0 230 -4414 -3790 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 72 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 72 @@ -4578,7 +4578,7 @@ CZ16 Dual Fuel 8 15 15 5 89.4 78.00 0 0 0 0.679 0.679 1.000 1.000 0 0 -11271 0 0 578 -10693 -8806 8 15 16 0 89.1 78.00 0 0 0 0.708 0.708 1.000 1.000 0 0 -11758 0 0 602 -11155 -9175 8 15 16 1 88.9 78.00 0 0 0 0.711 0.711 1.000 1.000 0 0 -11838 0 0 605 -11232 -9229 - 8 15 16 2 88.6 78.00 0 0 0 0.713 0.713 1.000 1.000 0 0 -11879 0 0 606 -11273 -9257 + 8 15 16 2 88.6 78.00 0 0 0 0.713 0.713 1.000 1.000 0 0 -11880 0 0 606 -11273 -9257 8 15 16 3 88.3 78.00 0 0 0 0.711 0.711 1.000 1.000 0 0 -11867 0 0 605 -11262 -9240 8 15 16 4 88.1 78.00 0 0 0 0.706 0.706 1.000 1.000 0 0 -11800 0 0 600 -11200 -9182 8 15 16 5 87.8 78.00 0 0 0 0.697 0.697 1.000 1.000 0 0 -11683 0 0 593 -11090 -9085 @@ -4596,7 +4596,7 @@ CZ16 Dual Fuel 8 15 18 5 83.7 78.00 0 0 0 0.566 0.566 1.000 1.000 0 0 -9712 0 0 482 -9230 -7533 ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 73 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 73 @@ -4605,7 +4605,7 @@ CZ16 Dual Fuel 8 15 19 0 83.1 78.00 0 0 0 0.552 0.552 1.000 1.000 0 0 -9489 0 0 469 -9019 -7362 8 15 19 1 82.6 78.00 0 0 0 0.523 0.523 1.000 1.000 0 0 -9018 0 0 445 -8573 -6999 - 8 15 19 2 82.0 78.00 0 0 0 0.492 0.492 1.000 1.000 0 0 -8513 0 0 419 -8094 -6609 + 8 15 19 2 82.0 78.00 0 0 0 0.492 0.492 1.000 1.000 0 0 -8513 0 0 419 -8095 -6610 8 15 19 3 81.5 78.00 0 0 0 0.459 0.459 1.000 1.000 0 0 -7963 0 0 390 -7573 -6185 8 15 19 4 81.0 78.00 0 0 0 0.427 0.427 1.000 1.000 0 0 -7426 0 0 363 -7063 -5768 8 15 19 5 80.4 78.00 0 0 0 0.393 0.393 1.000 1.000 0 0 -6863 0 0 335 -6528 -5332 @@ -4615,7 +4615,7 @@ CZ16 Dual Fuel 8 15 20 3 79.3 78.00 0 0 0 0.267 0.267 1.000 1.000 0 0 -4687 0 0 227 -4460 -3644 8 15 20 4 79.1 78.00 0 0 0 0.252 0.252 1.000 1.000 0 0 -4432 0 0 215 -4218 -3446 8 15 20 5 78.8 78.00 0 0 0 0.238 0.238 1.000 1.000 0 0 -4198 0 0 203 -3995 -3265 - 8 15 21 0 78.7 78.00 0 0 0 0.214 0.214 1.000 1.000 0 0 -3764 0 0 182 -3583 -2929 + 8 15 21 0 78.7 78.00 0 0 0 0.214 0.214 1.000 1.000 0 0 -3765 0 0 182 -3583 -2929 8 15 21 1 78.6 78.00 0 0 0 0.202 0.202 1.000 1.000 0 0 -3558 0 0 172 -3386 -2769 8 15 21 2 78.4 78.00 0 0 0 0.191 0.191 1.000 1.000 0 0 -3374 0 0 163 -3212 -2627 8 15 21 3 78.3 78.00 0 0 0 0.181 0.181 1.000 1.000 0 0 -3197 0 0 154 -3043 -2489 @@ -4638,7 +4638,7 @@ CZ16 Dual Fuel ! Log for Run 002: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -4659,7 +4659,7 @@ Input for Run 002: ------------------------------------------------------------------------------ -! ashp_dfng 002 Fri 27-Aug-21 11:08:20 am Page 74 +! ashp_dfng 002 Wed 27-Oct-21 9:51:55 am Page 74 @@ -4676,13 +4676,13 @@ Jan 2.321 0 1.621 0 0 0 0 0 0.396 0.0561 0 Feb 1.638 0 1.334 0 0 0 0 0 0.326 0.0507 0 0.0768 0 0.168 0.636 0.0441 0.135 0 0 0 .00658 0 0 0 -1.140 Mar 1.366 0 1.307 0 0 0 0 0 0.282 0.0561 0 0.0759 0 0.171 0.676 0.0448 0.149 0 0 0 .00734 0 0 0 -1.404 Apr 1.202 0 1.296 0 0 0 0 0 0.289 0.0543 0 0.0863 0 0.151 0.645 0.0395 0.145 0 0 0 .00588 0 0 0 -1.510 -May -0.622 0 0.320 0 0 0 0 0 0.0659 0.0561 0 0.0295 0 0.141 0.625 0.0369 0.153 0 0 0 .00609 0 0 0 -2.055 +May -0.622 0 0.320 0 0 0 0 0 0.0658 0.0561 0 0.0295 0 0.141 0.625 0.0369 0.153 0 0 0 .00609 0 0 0 -2.055 Jun -0.800 0.0464 0.0780 0 0 0 0 0.0399 0.0151 0.0543 0 .00682 0 0.130 0.579 0.0340 0.154 0 0 0 .00619 0 0 0 -1.944 Jul -1.032 0.0248 0.0182 0 0 0 0 0.0937 .00342 0.0561 0 0 0 0.138 0.625 0.0360 0.167 0 0 0 .00679 0 0 0 -2.200 Aug -0.728 0.139 0 0 0 0 0 0.157 0 0.0561 0 0 0 0.148 0.648 0.0387 0.173 0 0 0 .00629 0 0 0 -2.094 Sep -0.617 .00837 0.0451 0 0 0 0 0.0673 .00904 0.0543 0 .00696 0 0.159 0.660 0.0417 0.157 0 0 0 .00611 0 0 0 -1.832 -Oct 0.298 0 0.425 0 0 0 0 0.0209 0.0894 0.0561 0 0.0285 0 0.180 0.726 0.0470 0.154 0 0 0 .00629 0 0 0 -1.435 -Nov 1.505 0 1.021 0 0 0 0 0 0.218 0.0544 0 0.0554 0 0.189 0.731 0.0494 0.146 0 0 0 .00747 0 0 0 -0.965 +Oct 0.298 0 0.425 0 0 0 0 0.0209 0.0895 0.0561 0 0.0285 0 0.180 0.726 0.0470 0.154 0 0 0 .00629 0 0 0 -1.435 +Nov 1.506 0 1.021 0 0 0 0 0 0.218 0.0544 0 0.0554 0 0.189 0.731 0.0494 0.146 0 0 0 .00747 0 0 0 -0.965 Dec 2.249 0 1.519 0 0 0 0 0 0.355 0.0561 0 0.0778 0 0.201 0.775 0.0527 0.150 0 0 0 .00799 0 0 0 -0.946 Yr 6.781 0.219 8.985 0 0 0 0 0.379 2.050 0.661 0 0.542 0 1.975 8.093 0.517 1.833 0 0 0 0.0805 0 0 0 -18.55 @@ -4693,20 +4693,20 @@ Monthly Energy Use, meter "MtrNatGas" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 2.272 0 0 2.130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 0 -Feb 1.809 0 0 1.684 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.124 0 0 0 0 +Jan 2.272 0 0 2.131 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 0 +Feb 1.808 0 0 1.684 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.124 0 0 0 0 Mar 0.810 0 0 0.671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.139 0 0 0 0 -Apr 1.049 0 0 0.938 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.111 0 0 0 0 +Apr 1.050 0 0 0.938 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.111 0 0 0 0 May 0.231 0 0 0.116 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.115 0 0 0 0 Jun 0.124 0 0 .00675 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.117 0 0 0 0 Jul 0.128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.128 0 0 0 0 Aug 0.119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.119 0 0 0 0 Sep 0.131 0 0 0.0156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.115 0 0 0 0 Oct 0.264 0 0 0.145 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.119 0 0 0 0 -Nov 0.600 0 0 0.459 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 0 -Dec 1.625 0 0 1.474 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.151 0 0 0 0 +Nov 0.599 0 0 0.458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 0 +Dec 1.627 0 0 1.476 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.151 0 0 0 0 -Yr 9.160 0 0 7.640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.520 0 0 0 0 +Yr 9.162 0 0 7.642 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.520 0 0 0 0 @@ -4722,7 +4722,7 @@ HVAC Cooling Info ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 75 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 75 @@ -4785,7 +4785,7 @@ HVAC Heating Info ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 76 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 76 @@ -4848,7 +4848,7 @@ Hourly User-defined Report, Mon 05-Jan 1 5 18 37.9 0.551 0 8 0 0 0 1 0 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 77 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 77 @@ -4911,7 +4911,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 78 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 78 @@ -4974,7 +4974,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 .00076 0 0 .00053 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00024 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 79 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 79 @@ -4998,20 +4998,20 @@ Monthly User-defined Report Month hrsOn hrsOnAux qh qcSen qcLat qFan qDefrost qAux ----- ----- -------- ------- ------- ------- ------- ------- ------- - 1 407.9 58.493 5522 0 0 396 519 1462 - 2 336.4 47.241 4560 0 0 326 385 1181 - 3 326.5 5.826 4615 0 0 282 479 146 - 4 323.8 15.911 4458 0 0 289 475 398 - 5 77.53 0.0378 1156 0 0 66 107 1 + 1 408.0 58.505 5523 0 0 396 519 1463 + 2 336.4 47.234 4561 0 0 326 385 1181 + 3 326.4 5.826 4615 0 0 282 479 146 + 4 323.9 15.913 4459 0 0 289 475 398 + 5 77.44 0.0345 1155 0 0 66 107 1 6 29.49 0 315 -196 -12 25 6 0 7 10.54 0 75 -110 -11 9 0 0 8 36.17 0 0 -620 -3 31 0 0 9 12.97 0 164 -41 0 11 15 0 - 10 104.8 0.479 1508 0 0 89 123 12 - 11 252.5 3.569 3631 0 0 218 337 89 - 12 381.9 36.410 5273 0 0 355 460 910 + 10 104.8 0.479 1509 0 0 89 123 12 + 11 252.5 3.564 3631 0 0 218 337 89 + 12 381.8 36.492 5272 0 0 355 460 912 - Yr 2300 167.966 31279 -968 -26 2098 2906 4199 + Yr 2300 168.047 31279 -968 -26 2098 2906 4201 @@ -5037,7 +5037,7 @@ Monthly User-defined Report ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 80 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 80 @@ -5058,15 +5058,15 @@ Subhourly User-defined Report, Sun 04-Jan 1 4 0 5 18.1 68.00 0 11873 2.948 1.000 0.317 1.000 0.923 0.683 2.721 3459 17084 31 850 21424 17936 1 4 1 0 18.4 68.00 0 11940 2.957 1.000 0.314 1.000 0.923 0.686 2.729 3447 17142 39 850 21478 17985 1 4 1 1 18.7 68.00 0 12006 2.966 1.000 0.313 1.000 0.923 0.687 2.737 3450 17163 47 850 21510 18001 - 1 4 1 2 19.0 68.00 0 12073 2.976 1.000 0.313 1.000 0.923 0.687 2.746 3462 17165 55 850 21532 17999 + 1 4 1 2 19.0 68.00 0 12073 2.976 1.000 0.314 1.000 0.923 0.686 2.746 3464 17161 55 850 21530 17999 1 4 1 3 19.3 68.00 0 12140 2.985 1.000 0.318 1.000 0.923 0.682 2.756 3530 17040 64 850 21485 17948 1 4 1 4 19.6 68.00 0 12207 2.995 1.000 0.320 1.000 0.923 0.680 2.765 3556 17011 73 850 21490 17949 - 1 4 1 5 19.9 68.00 0 12273 3.004 1.000 0.327 1.000 0.924 0.673 2.776 3649 16833 83 850 21415 17871 + 1 4 1 5 19.9 68.00 0 12273 3.004 1.000 0.327 1.000 0.924 0.673 2.776 3649 16833 83 850 21415 17872 1 4 2 0 20.0 68.00 0 12280 3.005 1.000 0.320 1.000 0.923 0.680 2.775 3574 17003 82 850 21509 17948 1 4 2 1 20.0 68.00 0 12287 3.006 1.000 0.321 1.000 0.924 0.679 2.776 3590 16971 83 850 21494 17938 1 4 2 2 20.0 68.00 0 12293 3.007 1.000 0.319 1.000 0.923 0.681 2.776 3562 17037 83 850 21532 17984 1 4 2 3 20.1 68.00 0 12300 3.008 1.000 0.317 1.000 0.923 0.683 2.776 3541 17087 84 850 21561 18020 - 1 4 2 4 20.1 68.00 0 12307 3.009 1.000 0.315 1.000 0.923 0.685 2.777 3528 17119 84 850 21581 18051 + 1 4 2 4 20.1 68.00 0 12307 3.009 1.000 0.315 1.000 0.923 0.685 2.777 3528 17119 84 850 21580 18051 1 4 2 5 20.1 68.00 0 12313 3.010 1.000 0.314 1.000 0.923 0.686 2.777 3518 17144 85 850 21596 18075 1 4 3 0 20.2 68.00 0 12340 3.013 1.000 0.317 1.000 0.923 0.683 2.782 3553 17077 89 850 21568 18052 1 4 3 1 20.4 68.00 0 12367 3.017 1.000 0.316 1.000 0.923 0.684 2.785 3553 17088 92 850 21583 18068 @@ -5095,30 +5095,30 @@ Subhourly User-defined Report, Sun 04-Jan 1 4 7 0 21.0 68.00 0 12513 3.038 1.000 0.418 1.000 0.935 0.582 2.839 4733 14544 145 850 20272 16894 1 4 7 1 21.0 68.00 0 12513 3.038 1.000 0.426 1.000 0.935 0.574 2.842 4824 14344 148 850 20166 16802 1 4 7 2 21.0 68.00 0 12513 3.038 1.000 0.437 1.000 0.937 0.563 2.845 4942 14082 151 850 20026 16676 - 1 4 7 3 21.0 68.00 0 12513 3.038 1.000 0.461 1.000 0.939 0.539 2.854 5220 13467 160 850 19698 16393 - 1 4 7 4 21.0 68.00 0 12513 3.038 1.000 0.500 1.000 0.944 0.500 2.867 5657 12504 173 850 19184 15958 - 1 4 7 5 21.0 68.00 0 12513 3.038 1.000 0.541 1.000 0.948 0.459 2.881 6118 11485 188 850 18640 15495 + 1 4 7 3 21.0 68.00 0 12513 3.038 1.000 0.461 1.000 0.939 0.539 2.854 5221 13467 160 850 19698 16393 + 1 4 7 4 21.0 68.00 0 12513 3.038 1.000 0.500 1.000 0.944 0.500 2.867 5657 12503 173 850 19184 15958 + 1 4 7 5 21.0 68.00 0 12513 3.038 1.000 0.541 1.000 0.948 0.459 2.881 6118 11484 188 850 18640 15494 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 81 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 81 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 4 8 0 21.2 68.00 0 12547 3.042 1.000 0.663 1.000 0.962 0.337 2.927 7514 8430 238 850 17033 14143 - 1 4 8 1 21.3 68.00 0 12580 3.047 1.000 0.743 1.000 0.971 0.257 2.959 8438 6427 277 850 15991 13263 - 1 4 8 2 21.5 68.00 0 12614 3.052 1.000 0.817 1.000 0.979 0.183 2.989 9295 4578 315 850 15037 12450 - 1 4 8 3 21.6 68.00 0 12647 3.056 1.000 0.884 1.000 0.987 0.116 3.017 10080 2891 353 850 14174 11714 - 1 4 8 4 21.8 68.00 0 12680 3.061 1.000 0.931 1.000 0.992 0.0689 3.037 10633 1722 383 850 13587 11214 - 1 4 8 5 21.9 68.00 0 12714 3.066 1.000 0.979 1.000 0.998 0.0206 3.058 11203 515 416 850 12984 10698 - 1 4 9 0 22.5 68.00 0 12834 3.082 0.984 0.984 1.000 0.998 0 3.077 11333 0 464 837 12633 10423 + 1 4 8 0 21.2 68.00 0 12547 3.042 1.000 0.663 1.000 0.962 0.337 2.927 7515 8429 238 850 17032 14142 + 1 4 8 1 21.3 68.00 0 12580 3.047 1.000 0.743 1.000 0.971 0.257 2.959 8438 6427 277 850 15992 13263 + 1 4 8 2 21.5 68.00 0 12614 3.052 1.000 0.817 1.000 0.979 0.183 2.989 9295 4577 315 850 15037 12449 + 1 4 8 3 21.6 68.00 0 12647 3.056 1.000 0.884 1.000 0.987 0.116 3.017 10081 2890 353 850 14173 11714 + 1 4 8 4 21.8 68.00 0 12680 3.061 1.000 0.931 1.000 0.992 0.0691 3.037 10630 1727 383 850 13590 11216 + 1 4 8 5 21.9 68.00 0 12714 3.066 1.000 0.980 1.000 0.998 0.0204 3.059 11206 510 416 850 12981 10695 + 1 4 9 0 22.5 68.00 0 12834 3.082 0.984 0.984 1.000 0.998 0 3.077 11334 0 464 837 12634 10423 1 4 9 1 23.0 68.00 0 12954 3.099 0.925 0.925 1.000 0.992 0 3.073 10717 0 479 786 11982 9880 - 1 4 9 2 23.5 68.00 0 13074 3.116 0.861 0.861 1.000 0.984 0 3.067 10041 0 486 732 11259 9280 + 1 4 9 2 23.5 68.00 0 13074 3.116 0.861 0.861 1.000 0.984 0 3.067 10042 0 486 732 11259 9281 1 4 9 3 24.1 68.00 0 13194 3.132 0.800 0.800 1.000 0.977 0 3.062 9385 0 489 680 10553 8694 1 4 9 4 24.6 68.00 0 13314 3.149 0.743 0.743 1.000 0.971 0 3.058 8768 0 488 631 9887 8140 - 1 4 9 5 25.2 68.00 0 13434 3.165 0.687 0.687 1.000 0.965 0 3.054 8165 0 484 584 9233 7597 + 1 4 9 5 25.2 68.00 0 13434 3.165 0.687 0.687 1.000 0.965 0 3.054 8164 0 484 584 9232 7597 1 4 10 0 25.4 68.00 0 13494 3.174 0.691 0.691 1.000 0.965 0 3.063 8233 0 503 587 9323 7666 1 4 10 1 25.7 68.00 0 13554 3.182 0.653 0.653 1.000 0.961 0 3.058 7806 0 490 555 8851 7273 1 4 10 2 26.0 68.00 0 13614 3.190 0.618 0.618 1.000 0.957 0 3.053 7409 0 478 525 8412 6911 @@ -5148,7 +5148,7 @@ CZ16 Dual Fuel 1 4 14 2 26.7 68.00 0 13775 3.212 0.388 0.388 1.000 0.931 0 2.991 4687 0 324 330 5341 4408 1 4 14 3 26.8 68.00 0 13795 3.215 0.390 0.390 1.000 0.931 0 2.994 4714 0 329 331 5374 4438 1 4 14 4 26.9 68.00 0 13815 3.218 0.395 0.395 1.000 0.932 0 2.998 4781 0 336 335 5452 4507 - 1 4 14 5 27.0 68.00 0 13835 3.220 0.397 0.397 1.000 0.932 0 3.002 4816 0 341 338 5495 4542 + 1 4 14 5 27.0 68.00 0 13835 3.220 0.397 0.397 1.000 0.932 0 3.002 4816 0 341 338 5495 4541 1 4 15 0 26.9 68.00 0 13828 3.219 0.391 0.391 1.000 0.932 0 2.999 4741 0 335 332 5408 4480 1 4 15 1 26.9 68.00 0 13821 3.218 0.398 0.398 1.000 0.932 0 3.001 4826 0 340 338 5505 4564 1 4 15 2 26.9 68.00 0 13815 3.218 0.407 0.407 1.000 0.933 0 3.003 4927 0 346 346 5619 4660 @@ -5163,7 +5163,7 @@ CZ16 Dual Fuel 1 4 16 5 25.9 68.00 0 13594 3.187 0.775 0.775 1.000 0.975 0 3.107 9288 0 594 659 10541 8747 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 82 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 82 @@ -5226,7 +5226,7 @@ Subhourly User-defined Report, Mon 05-Jan 1 5 0 5 26.2 68.00 0 13674 3.198 1.000 0.576 1.000 0.952 0.424 3.046 6928 10600 459 850 18837 15488 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 83 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 83 @@ -5245,15 +5245,15 @@ CZ16 Dual Fuel 1 5 2 3 28.8 68.00 0 14248 3.277 1.000 0.631 1.000 0.958 0.369 3.141 7810 9227 643 850 18530 15128 1 5 2 4 29.0 68.00 0 14282 3.281 1.000 0.633 1.000 0.959 0.367 3.146 7846 9181 654 850 18530 15128 1 5 2 5 29.1 68.00 0 14315 3.286 1.000 0.634 1.000 0.959 0.366 3.150 7873 9152 663 850 18538 15128 - 1 5 3 0 29.5 68.00 0 14388 3.296 1.000 0.651 1.000 0.961 0.349 3.166 8115 8722 699 850 18387 14988 + 1 5 3 0 29.5 68.00 0 14388 3.296 1.000 0.651 1.000 0.961 0.349 3.166 8115 8723 699 850 18387 14988 1 5 3 1 29.8 68.00 0 14462 3.306 1.000 0.656 1.000 0.961 0.344 3.178 8209 8594 724 850 18377 14982 1 5 3 2 30.1 68.00 0 14535 3.316 1.000 0.672 1.000 0.963 0.328 3.193 8439 8194 760 850 18244 14856 1 5 3 3 30.4 68.00 0 14609 3.326 1.000 0.678 1.000 0.964 0.322 3.205 8545 8045 786 850 18226 14845 1 5 3 4 30.8 68.00 0 14682 3.335 1.000 0.695 1.000 0.966 0.305 3.221 8791 7618 826 850 18085 14714 - 1 5 3 5 31.1 68.00 0 14755 3.345 1.000 0.702 1.000 0.966 0.298 3.233 8901 7462 853 850 18067 14703 + 1 5 3 5 31.1 68.00 0 14755 3.345 1.000 0.702 1.000 0.966 0.298 3.233 8901 7462 853 850 18067 14702 1 5 4 0 31.3 68.00 0 14795 3.351 1.000 0.715 1.000 0.968 0.285 3.243 9092 7122 881 850 17944 14592 1 5 4 1 31.5 68.00 0 14835 3.356 1.000 0.715 1.000 0.968 0.285 3.249 9110 7120 892 850 17972 14622 - 1 5 4 2 31.6 68.00 0 14875 3.362 1.000 0.729 1.000 0.969 0.271 3.259 9300 6782 921 850 17852 14516 + 1 5 4 2 31.6 68.00 0 14875 3.362 1.000 0.729 1.000 0.969 0.271 3.259 9300 6781 921 850 17852 14516 1 5 4 3 31.8 68.00 0 14915 3.367 1.000 0.729 1.000 0.970 0.271 3.264 9323 6772 932 850 17877 14543 1 5 4 4 32.0 68.00 0 14955 3.372 1.000 0.732 1.000 0.970 0.268 3.271 9375 6705 947 850 17877 14539 1 5 4 5 32.2 68.00 0 14996 3.378 1.000 0.746 1.000 0.971 0.254 3.281 9580 6341 978 850 17749 14418 @@ -5289,7 +5289,7 @@ CZ16 Dual Fuel 1 5 9 5 38.1 68.00 0 16317 3.553 0.278 0.278 1.000 0.919 0 3.265 3793 0 507 236 4535 3630 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 84 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 84 @@ -5300,46 +5300,46 @@ CZ16 Dual Fuel 1 5 10 1 38.8 68.00 0 16477 3.574 0.272 0.272 1.000 0.918 0 3.281 3733 0 512 231 4476 3581 1 5 10 2 39.2 68.00 0 16557 3.585 0.240 0.240 1.000 0.915 0 3.278 3315 0 460 204 3979 3183 1 5 10 3 39.6 68.00 0 16637 3.595 0.226 0.226 1.000 0.913 0 3.282 3123 0 439 192 3753 3003 - 1 5 10 4 39.9 68.00 0 16717 3.606 0.203 0.203 1.000 0.910 0 3.283 2821 0 402 173 3396 2714 + 1 5 10 4 39.9 68.00 0 16717 3.606 0.203 0.203 1.000 0.910 0 3.283 2821 0 402 173 3395 2713 1 5 10 5 40.3 68.00 0 16797 3.616 0.191 0.191 1.000 0.909 0 3.287 2658 0 383 162 3203 2562 1 5 11 0 40.5 68.00 0 16844 3.622 0.208 0.208 1.000 0.911 0 3.299 2901 0 421 177 3499 2797 1 5 11 1 40.7 68.00 0 16890 3.628 0.200 0.200 1.000 0.910 0 3.302 2801 0 409 170 3380 2703 - 1 5 11 2 40.9 68.00 0 16937 3.635 0.187 0.187 1.000 0.909 0 3.302 2624 0 386 159 3170 2534 - 1 5 11 3 41.1 68.00 0 16984 3.641 0.181 0.181 1.000 0.908 0 3.305 2548 0 377 154 3080 2465 - 1 5 11 4 41.3 68.00 0 17031 3.647 0.175 0.175 1.000 0.907 0 3.308 2457 0 366 148 2972 2380 - 1 5 11 5 41.5 68.00 0 17077 3.653 0.160 0.160 1.000 0.905 0 3.308 2256 0 339 136 2731 2183 - 1 5 12 0 41.0 68.00 0 16950 3.636 0.161 0.161 1.000 0.906 0 3.293 2253 0 332 136 2721 2179 + 1 5 11 2 40.9 68.00 0 16937 3.635 0.187 0.187 1.000 0.909 0 3.302 2624 0 386 159 3169 2534 + 1 5 11 3 41.1 68.00 0 16984 3.641 0.181 0.181 1.000 0.908 0 3.305 2548 0 377 154 3079 2465 + 1 5 11 4 41.3 68.00 0 17031 3.647 0.174 0.174 1.000 0.907 0 3.308 2457 0 366 148 2971 2379 + 1 5 11 5 41.5 68.00 0 17077 3.653 0.160 0.160 1.000 0.905 0 3.307 2255 0 338 136 2729 2181 + 1 5 12 0 41.0 68.00 0 16950 3.636 0.161 0.161 1.000 0.906 0 3.293 2252 0 332 136 2721 2179 1 5 12 1 40.4 68.00 0 16824 3.620 0.156 0.156 1.000 0.905 0 3.276 2177 0 315 133 2625 2098 1 5 12 2 39.8 68.00 0 16697 3.603 0.165 0.165 1.000 0.906 0 3.265 2291 0 325 140 2757 2206 - 1 5 12 3 39.3 68.00 0 16570 3.587 0.170 0.170 1.000 0.907 0 3.252 2344 0 326 144 2815 2251 - 1 5 12 4 38.7 68.00 0 16443 3.570 0.176 0.176 1.000 0.907 0 3.239 2421 0 330 150 2901 2318 - 1 5 12 5 38.1 68.00 0 16317 3.553 0.185 0.185 1.000 0.908 0 3.227 2519 0 336 157 3012 2406 - 1 5 13 0 38.4 68.00 0 16377 3.561 0.159 0.159 1.000 0.905 0 3.224 2181 0 294 135 2611 2086 + 1 5 12 3 39.3 68.00 0 16570 3.587 0.170 0.170 1.000 0.907 0 3.252 2343 0 326 144 2814 2250 + 1 5 12 4 38.7 68.00 0 16443 3.570 0.176 0.176 1.000 0.907 0 3.239 2420 0 330 150 2900 2317 + 1 5 12 5 38.1 68.00 0 16317 3.553 0.185 0.185 1.000 0.908 0 3.227 2518 0 336 157 3011 2406 + 1 5 13 0 38.4 68.00 0 16377 3.561 0.159 0.159 1.000 0.905 0 3.224 2181 0 294 135 2610 2086 1 5 13 1 38.7 68.00 0 16437 3.569 0.153 0.153 1.000 0.905 0 3.229 2099 0 286 130 2515 2009 1 5 13 2 38.9 68.00 0 16497 3.577 0.150 0.150 1.000 0.904 0 3.235 2059 0 283 127 2469 1974 - 1 5 13 3 39.2 68.00 0 16557 3.585 0.139 0.139 1.000 0.903 0 3.238 1919 0 267 118 2304 1842 + 1 5 13 3 39.2 68.00 0 16557 3.585 0.139 0.139 1.000 0.903 0 3.238 1919 0 267 118 2304 1843 1 5 13 4 39.5 68.00 0 16617 3.593 0.143 0.143 1.000 0.904 0 3.246 1977 0 277 122 2376 1904 1 5 13 5 39.7 68.00 0 16677 3.601 0.145 0.145 1.000 0.904 0 3.254 2016 0 285 124 2425 1944 - 1 5 14 0 39.7 68.00 0 16657 3.598 .0973 .0973 1.000 0.898 0 3.233 1348 0 190 83 1621 1298 + 1 5 14 0 39.7 68.00 0 16657 3.598 .0973 .0973 1.000 0.898 0 3.233 1349 0 190 83 1622 1298 1 5 14 1 39.6 68.00 0 16637 3.595 .0980 .0980 1.000 0.899 0 3.230 1357 0 191 83 1631 1309 1 5 14 2 39.5 68.00 0 16617 3.593 0.101 0.101 1.000 0.899 0 3.229 1401 0 196 86 1683 1350 - 1 5 14 3 39.4 68.00 0 16597 3.590 0.118 0.118 1.000 0.901 0 3.234 1624 0 227 100 1950 1565 + 1 5 14 3 39.4 68.00 0 16597 3.590 0.118 0.118 1.000 0.901 0 3.234 1624 0 227 100 1950 1566 1 5 14 4 39.3 68.00 0 16577 3.587 0.138 0.138 1.000 0.903 0 3.240 1905 0 265 117 2287 1837 - 1 5 14 5 39.2 68.00 0 16557 3.585 0.162 0.162 1.000 0.906 0 3.247 2233 0 310 138 2681 2154 + 1 5 14 5 39.2 68.00 0 16557 3.585 0.162 0.162 1.000 0.906 0 3.247 2234 0 310 138 2681 2154 1 5 15 0 39.2 68.00 0 16550 3.584 0.197 0.197 1.000 0.910 0 3.260 2718 0 377 168 3263 2624 1 5 15 1 39.1 68.00 0 16543 3.583 0.217 0.217 1.000 0.912 0 3.268 2997 0 415 185 3597 2896 1 5 15 2 39.1 68.00 0 16537 3.582 0.247 0.247 1.000 0.915 0 3.279 3408 0 472 210 4090 3296 - 1 5 15 3 39.1 68.00 0 16530 3.581 0.270 0.270 1.000 0.918 0 3.287 3726 0 515 230 4471 3608 + 1 5 15 3 39.1 68.00 0 16530 3.581 0.271 0.271 1.000 0.918 0 3.287 3726 0 515 230 4471 3608 1 5 15 4 39.0 68.00 0 16523 3.580 0.290 0.290 1.000 0.920 0 3.295 3999 0 553 247 4799 3873 1 5 15 5 39.0 68.00 0 16517 3.580 0.316 0.316 1.000 0.923 0 3.304 4347 0 600 268 5215 4213 1 5 16 0 39.0 68.00 0 16510 3.579 0.325 0.325 1.000 0.924 0 3.307 4474 0 617 276 5367 4343 1 5 16 1 39.0 68.00 0 16503 3.578 0.350 0.350 1.000 0.927 0 3.316 4809 0 662 297 5768 4665 - 1 5 16 2 38.9 68.00 0 16497 3.577 0.374 0.374 1.000 0.930 0 3.325 5146 0 708 318 6172 5000 + 1 5 16 2 38.9 68.00 0 16497 3.577 0.374 0.374 1.000 0.930 0 3.325 5147 0 708 318 6172 5000 1 5 16 3 38.9 68.00 0 16490 3.576 0.399 0.399 1.000 0.932 0 3.334 5480 0 753 339 6572 5322 1 5 16 4 38.9 68.00 0 16483 3.575 0.421 0.421 1.000 0.935 0 3.342 5787 0 794 358 6939 5620 1 5 16 5 38.8 68.00 0 16477 3.574 0.449 0.449 1.000 0.938 0 3.353 6166 0 846 381 7393 5993 - 1 5 17 0 38.7 68.00 0 16443 3.570 0.503 0.503 1.000 0.944 0 3.370 6897 0 941 427 8265 6713 - 1 5 17 1 38.5 68.00 0 16410 3.566 0.520 0.520 1.000 0.946 0 3.373 7129 0 967 442 8538 6930 + 1 5 17 0 38.7 68.00 0 16443 3.570 0.503 0.503 1.000 0.944 0 3.370 6897 0 941 427 8265 6714 + 1 5 17 1 38.5 68.00 0 16410 3.566 0.520 0.520 1.000 0.946 0 3.373 7129 0 967 442 8539 6930 1 5 17 2 38.4 68.00 0 16377 3.561 0.539 0.539 1.000 0.948 0 3.376 7374 0 995 458 8827 7167 1 5 17 3 38.2 68.00 0 16343 3.557 0.562 0.562 1.000 0.951 0 3.382 7683 0 1031 478 9191 7482 1 5 17 4 38.1 68.00 0 16310 3.552 0.582 0.582 1.000 0.953 0 3.386 7945 0 1060 495 9500 7726 @@ -5348,11 +5348,11 @@ CZ16 Dual Fuel 1 5 18 1 37.9 68.00 0 16277 3.548 0.598 0.598 1.000 0.955 0 3.387 8141 0 1080 508 9729 7929 1 5 18 2 37.9 68.00 0 16277 3.548 0.608 0.608 1.000 0.956 0 3.392 8287 0 1099 517 9903 8076 1 5 18 3 37.9 68.00 0 16277 3.548 0.616 0.616 1.000 0.957 0 3.395 8386 0 1112 523 10021 8170 - 1 5 18 4 37.9 68.00 0 16277 3.548 0.622 0.622 1.000 0.957 0 3.397 8469 0 1124 528 10122 8252 + 1 5 18 4 37.9 68.00 0 16277 3.548 0.622 0.622 1.000 0.957 0 3.397 8470 0 1124 529 10122 8252 1 5 18 5 37.9 68.00 0 16277 3.548 0.629 0.629 1.000 0.958 0 3.400 8566 0 1136 535 10237 8345 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 85 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 85 @@ -5362,21 +5362,21 @@ CZ16 Dual Fuel 1 5 19 0 37.9 68.00 0 16270 3.547 0.624 0.624 1.000 0.958 0 3.397 8493 0 1125 530 10148 8271 1 5 19 1 37.9 68.00 0 16263 3.546 0.629 0.629 1.000 0.958 0 3.398 8562 0 1133 535 10230 8339 1 5 19 2 37.8 68.00 0 16257 3.545 0.635 0.635 1.000 0.959 0 3.400 8635 0 1142 539 10316 8411 - 1 5 19 3 37.8 68.00 0 16250 3.544 0.640 0.640 1.000 0.960 0 3.401 8706 0 1150 544 10400 8480 + 1 5 19 3 37.8 68.00 0 16250 3.544 0.640 0.640 1.000 0.960 0 3.401 8707 0 1150 544 10400 8480 1 5 19 4 37.8 68.00 0 16243 3.544 0.645 0.645 1.000 0.960 0 3.402 8772 0 1157 548 10478 8545 1 5 19 5 37.8 68.00 0 16237 3.543 0.657 0.657 1.000 0.961 0 3.406 8935 0 1177 559 10671 8704 1 5 20 0 37.6 68.00 0 16210 3.539 0.672 0.672 1.000 0.963 0 3.408 9120 0 1196 571 10887 8876 1 5 20 1 37.5 68.00 0 16183 3.536 0.679 0.679 1.000 0.964 0 3.408 9213 0 1203 577 10993 8964 1 5 20 2 37.4 68.00 0 16156 3.532 0.688 0.688 1.000 0.965 0 3.408 9322 0 1211 585 11118 9072 1 5 20 3 37.3 68.00 0 16130 3.529 0.697 0.697 1.000 0.966 0 3.408 9429 0 1219 592 11240 9178 - 1 5 20 4 37.2 68.00 0 16103 3.525 0.704 0.704 1.000 0.967 0 3.408 9515 0 1225 598 11338 9261 + 1 5 20 4 37.2 68.00 0 16103 3.525 0.704 0.704 1.000 0.967 0 3.408 9515 0 1225 598 11339 9261 1 5 20 5 37.0 68.00 0 16076 3.522 0.711 0.711 1.000 0.968 0 3.407 9599 0 1230 604 11434 9346 - 1 5 21 0 37.0 68.00 0 16070 3.521 0.731 0.731 1.000 0.970 0 3.414 9862 0 1262 621 11746 9598 + 1 5 21 0 37.0 68.00 0 16070 3.521 0.731 0.731 1.000 0.970 0 3.414 9863 0 1262 621 11746 9598 1 5 21 1 37.0 68.00 0 16063 3.520 0.735 0.735 1.000 0.970 0 3.415 9908 0 1266 624 11799 9643 - 1 5 21 2 37.0 68.00 0 16056 3.519 0.737 0.737 1.000 0.970 0 3.415 9944 0 1269 627 11841 9684 + 1 5 21 2 37.0 68.00 0 16056 3.519 0.737 0.737 1.000 0.970 0 3.415 9945 0 1269 627 11841 9684 1 5 21 3 36.9 68.00 0 16050 3.518 0.740 0.740 1.000 0.971 0 3.415 9974 0 1272 629 11875 9716 1 5 21 4 36.9 68.00 0 16043 3.517 0.741 0.741 1.000 0.971 0 3.415 9981 0 1271 629 11881 9714 - 1 5 21 5 36.9 68.00 0 16036 3.516 0.741 0.741 1.000 0.971 0 3.414 9981 0 1269 630 11880 9709 + 1 5 21 5 36.9 68.00 0 16036 3.516 0.741 0.741 1.000 0.971 0 3.414 9981 0 1270 630 11880 9709 1 5 22 0 36.7 68.00 0 16010 3.513 0.779 0.779 1.000 0.975 0 3.425 10483 0 1327 662 12472 10191 1 5 22 1 36.6 68.00 0 15983 3.509 0.787 0.787 1.000 0.976 0 3.425 10577 0 1332 669 12578 10276 1 5 22 2 36.5 68.00 0 15956 3.506 0.794 0.794 1.000 0.977 0 3.425 10660 0 1336 675 12671 10357 @@ -5387,7 +5387,7 @@ CZ16 Dual Fuel 1 5 23 1 36.4 68.00 0 15930 3.502 0.861 0.861 1.000 0.984 0 3.447 11540 0 1439 731 13710 11206 1 5 23 2 36.5 68.00 0 15956 3.506 0.864 0.864 1.000 0.985 0 3.452 11593 0 1453 734 13780 11265 1 5 23 3 36.6 68.00 0 15983 3.509 0.867 0.867 1.000 0.985 0 3.457 11646 0 1467 736 13850 11321 - 1 5 23 4 36.7 68.00 0 16010 3.513 0.869 0.869 1.000 0.985 0 3.461 11695 0 1480 739 13913 11372 + 1 5 23 4 36.7 68.00 0 16010 3.513 0.869 0.869 1.000 0.985 0 3.461 11695 0 1480 739 13914 11372 1 5 23 5 36.9 68.00 0 16036 3.516 0.870 0.870 1.000 0.985 0 3.465 11723 0 1491 740 13954 11400 @@ -5410,12 +5410,12 @@ Subhourly User-defined Report, Tue 06-Jan 1 6 2 0 38.6 68.00 0 16417 3.566 0.790 0.790 1.000 0.976 0 3.482 10825 0 1470 671 12966 10623 1 6 2 1 38.3 68.00 0 16357 3.559 0.790 0.790 1.000 0.976 0 3.475 10800 0 1452 672 12924 10578 1 6 2 2 38.0 68.00 0 16297 3.551 0.798 0.798 1.000 0.977 0 3.470 10872 0 1447 678 12997 10643 - 1 6 2 3 37.8 68.00 0 16237 3.543 0.801 0.801 1.000 0.978 0 3.463 10892 0 1435 681 13007 10653 + 1 6 2 3 37.8 68.00 0 16237 3.543 0.801 0.801 1.000 0.978 0 3.463 10892 0 1435 681 13008 10653 1 6 2 4 37.5 68.00 0 16176 3.535 0.810 0.810 1.000 0.979 0 3.459 10982 0 1432 688 13103 10733 1 6 2 5 37.2 68.00 0 16116 3.527 0.815 0.815 1.000 0.979 0 3.454 11023 0 1422 693 13138 10757 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 86 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 86 @@ -5436,14 +5436,14 @@ CZ16 Dual Fuel 1 6 4 5 38.7 68.00 0 16437 3.569 0.784 0.784 1.000 0.976 0 3.482 10757 0 1466 666 12889 10578 1 6 5 0 38.1 68.00 0 16317 3.553 0.768 0.768 1.000 0.974 0 3.461 10479 0 1400 653 12532 10272 1 6 5 1 37.6 68.00 0 16197 3.537 0.780 0.780 1.000 0.975 0 3.450 10587 0 1385 663 12635 10372 - 1 6 5 2 37.0 68.00 0 16076 3.522 0.789 0.789 1.000 0.976 0 3.438 10647 0 1364 670 12682 10393 + 1 6 5 2 37.0 68.00 0 16076 3.522 0.789 0.789 1.000 0.976 0 3.438 10647 0 1364 670 12682 10394 1 6 5 3 36.5 68.00 0 15956 3.506 0.806 0.806 1.000 0.978 0 3.429 10820 0 1356 685 12861 10556 1 6 5 4 36.0 68.00 0 15836 3.490 0.817 0.817 1.000 0.979 0 3.418 10907 0 1337 694 12938 10608 1 6 5 5 35.4 68.00 0 15716 3.474 0.838 0.838 1.000 0.982 0 3.411 11132 0 1333 713 13178 10817 1 6 6 0 34.8 68.00 0 15589 3.457 0.828 0.828 1.000 0.981 0 3.390 10925 0 1275 703 12903 10586 1 6 6 1 34.3 68.00 0 15463 3.440 0.850 0.850 1.000 0.983 0 3.382 11150 0 1267 722 13139 10790 - 1 6 6 2 33.7 68.00 0 15336 3.423 0.862 0.862 1.000 0.984 0 3.370 11246 0 1243 733 13222 10849 - 1 6 6 3 33.1 68.00 0 15209 3.406 0.885 0.885 1.000 0.987 0 3.362 11479 0 1233 752 13465 11046 + 1 6 6 2 33.7 68.00 0 15336 3.423 0.862 0.862 1.000 0.984 0 3.370 11247 0 1243 733 13222 10849 + 1 6 6 3 33.1 68.00 0 15209 3.406 0.885 0.885 1.000 0.987 0 3.362 11480 0 1233 752 13465 11046 1 6 6 4 32.6 68.00 0 15082 3.389 0.908 0.908 1.000 0.990 0 3.354 11705 0 1220 772 13697 11227 1 6 6 5 32.0 68.00 0 14955 3.372 0.924 0.924 1.000 0.991 0 3.343 11832 0 1195 785 13813 11305 1 6 7 0 32.4 68.00 0 15036 3.383 0.977 0.977 1.000 0.997 0 3.374 12559 0 1294 830 14683 12026 @@ -5460,112 +5460,112 @@ CZ16 Dual Fuel 1 6 8 5 36.1 68.00 0 15876 3.495 0.854 0.854 1.000 0.984 0 3.438 11422 0 1410 726 13559 11172 1 6 9 0 36.5 68.00 0 15950 3.505 0.829 0.829 1.000 0.981 0 3.437 11123 0 1392 704 13220 10880 1 6 9 1 36.8 68.00 0 16023 3.515 0.808 0.808 1.000 0.978 0 3.439 10885 0 1381 687 12953 10674 - 1 6 9 2 37.1 68.00 0 16096 3.524 0.789 0.789 1.000 0.976 0 3.441 10661 0 1371 671 12702 10469 - 1 6 9 3 37.5 68.00 0 16170 3.534 0.767 0.767 1.000 0.974 0 3.441 10390 0 1353 651 12395 10185 - 1 6 9 4 37.8 68.00 0 16243 3.544 0.748 0.748 1.000 0.972 0 3.443 10168 0 1341 635 12145 10009 - 1 6 9 5 38.1 68.00 0 16317 3.553 0.731 0.731 1.000 0.970 0 3.446 9978 0 1333 622 11932 9830 - 1 6 10 0 38.3 68.00 0 16357 3.559 0.730 0.730 1.000 0.970 0 3.450 9974 0 1341 620 11936 9837 - 1 6 10 1 38.5 68.00 0 16397 3.564 0.718 0.718 1.000 0.968 0 3.451 9835 0 1331 610 11776 9700 - 1 6 10 2 38.7 68.00 0 16437 3.569 0.711 0.711 1.000 0.967 0 3.453 9753 0 1329 604 11686 9636 - 1 6 10 3 38.8 68.00 0 16477 3.574 0.701 0.701 1.000 0.966 0 3.454 9637 0 1322 596 11555 9534 - 1 6 10 4 39.0 68.00 0 16517 3.580 0.684 0.684 1.000 0.964 0 3.452 9421 0 1300 582 11303 9316 - 1 6 10 5 39.2 68.00 0 16557 3.585 0.670 0.670 1.000 0.963 0 3.452 9239 0 1283 569 11092 9153 - 1 6 11 0 39.3 68.00 0 16583 3.588 0.639 0.639 1.000 0.959 0 3.442 8819 0 1230 543 10592 8743 - 1 6 11 1 39.4 68.00 0 16610 3.592 0.621 0.621 1.000 0.957 0 3.439 8586 0 1203 528 10317 8511 - 1 6 11 2 39.6 68.00 0 16637 3.595 0.599 0.599 1.000 0.955 0 3.433 8293 0 1166 509 9969 8203 - 1 6 11 3 39.7 68.00 0 16664 3.599 0.582 0.582 1.000 0.953 0 3.430 8063 0 1139 495 9696 7992 - 1 6 11 4 39.8 68.00 0 16690 3.602 0.568 0.568 1.000 0.951 0 3.427 7885 0 1118 483 9486 7817 - 1 6 11 5 39.9 68.00 0 16717 3.606 0.554 0.554 1.000 0.950 0 3.425 7698 0 1096 471 9265 7626 - ------------------------------------------------------------------------------- -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 87 + 1 6 9 2 37.1 68.00 0 16096 3.524 0.789 0.789 1.000 0.976 0 3.441 10661 0 1371 671 12702 10471 + 1 6 9 3 37.5 68.00 0 16170 3.534 0.766 0.766 1.000 0.974 0 3.441 10385 0 1353 651 12389 10182 + 1 6 9 4 37.8 68.00 0 16243 3.544 0.748 0.748 1.000 0.972 0 3.443 10167 0 1341 635 12144 10008 + 1 6 9 5 38.1 68.00 0 16317 3.553 0.731 0.731 1.000 0.970 0 3.446 9978 0 1333 621 11932 9831 + 1 6 10 0 38.3 68.00 0 16357 3.559 0.730 0.730 1.000 0.970 0 3.450 9974 0 1341 620 11935 9838 + 1 6 10 1 38.5 68.00 0 16397 3.564 0.718 0.718 1.000 0.968 0 3.451 9832 0 1331 610 11773 9696 + 1 6 10 2 38.7 68.00 0 16437 3.569 0.711 0.711 1.000 0.967 0 3.453 9750 0 1328 604 11683 9634 + 1 6 10 3 38.8 68.00 0 16477 3.574 0.701 0.701 1.000 0.966 0 3.454 9635 0 1321 596 11552 9532 + 1 6 10 4 39.0 68.00 0 16517 3.580 0.684 0.684 1.000 0.964 0 3.452 9419 0 1300 582 11301 9316 + 1 6 10 5 39.2 68.00 0 16557 3.585 0.670 0.670 1.000 0.963 0 3.452 9238 0 1283 569 11090 9153 + 1 6 11 0 39.3 68.00 0 16583 3.588 0.639 0.639 1.000 0.959 0 3.442 8818 0 1230 543 10590 8740 + 1 6 11 1 39.4 68.00 0 16610 3.592 0.617 0.617 1.000 0.957 0 3.437 8533 0 1195 525 10253 8451 + 1 6 11 2 39.6 68.00 0 16637 3.595 0.598 0.598 1.000 0.955 0 3.433 8279 0 1164 508 9952 8207 + 1 6 11 3 39.7 68.00 0 16664 3.599 0.582 0.582 1.000 0.953 0 3.430 8065 0 1139 495 9698 7997 + 1 6 11 4 39.8 68.00 0 16690 3.602 0.568 0.568 1.000 0.951 0 3.427 7884 0 1118 483 9485 7815 + 1 6 11 5 39.9 68.00 0 16717 3.606 0.556 0.556 1.000 0.950 0 3.426 7721 0 1099 472 9293 7647 + +------------------------------------------------------------------------------ +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 87 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 12 0 39.9 68.00 0 16710 3.605 0.543 0.543 1.000 0.949 0 3.419 7533 0 1072 461 9066 7459 - 1 6 12 1 39.9 68.00 0 16704 3.604 0.533 0.533 1.000 0.947 0 3.415 7395 0 1051 453 8898 7318 - 1 6 12 2 39.8 68.00 0 16697 3.603 0.523 0.523 1.000 0.946 0 3.410 7254 0 1030 444 8727 7178 - 1 6 12 3 39.8 68.00 0 16690 3.602 0.517 0.517 1.000 0.946 0 3.406 7167 0 1016 439 8622 7089 - 1 6 12 4 39.8 68.00 0 16684 3.601 0.515 0.515 1.000 0.945 0 3.405 7145 0 1012 438 8595 7065 - 1 6 12 5 39.7 68.00 0 16677 3.601 0.515 0.515 1.000 0.945 0 3.404 7146 0 1011 438 8595 7062 - 1 6 13 0 39.4 68.00 0 16610 3.592 0.531 0.531 1.000 0.947 0 3.402 7337 0 1028 451 8816 7241 - 1 6 13 1 39.1 68.00 0 16543 3.583 0.554 0.554 1.000 0.950 0 3.403 7634 0 1058 471 9163 7528 - 1 6 13 2 38.8 68.00 0 16477 3.574 0.566 0.566 1.000 0.951 0 3.400 7776 0 1066 481 9324 7657 - 1 6 13 3 38.5 68.00 0 16410 3.566 0.581 0.581 1.000 0.953 0 3.398 7963 0 1080 494 9537 7834 - 1 6 13 4 38.2 68.00 0 16343 3.557 0.597 0.597 1.000 0.955 0 3.395 8149 0 1093 507 9750 8013 - 1 6 13 5 37.9 68.00 0 16277 3.548 0.608 0.608 1.000 0.956 0 3.391 8275 0 1098 516 9890 8128 - 1 6 14 0 38.0 68.00 0 16283 3.549 0.597 0.597 1.000 0.955 0 3.388 8138 0 1081 508 9727 8001 - 1 6 14 1 38.0 68.00 0 16290 3.550 0.597 0.597 1.000 0.955 0 3.389 8139 0 1082 508 9729 8005 - 1 6 14 2 38.0 68.00 0 16297 3.551 0.596 0.596 1.000 0.955 0 3.389 8128 0 1082 507 9717 7995 - 1 6 14 3 38.1 68.00 0 16303 3.552 0.594 0.594 1.000 0.954 0 3.389 8103 0 1080 505 9688 7971 - 1 6 14 4 38.1 68.00 0 16310 3.552 0.591 0.591 1.000 0.954 0 3.389 8062 0 1075 502 9639 7931 - 1 6 14 5 38.1 68.00 0 16317 3.553 0.588 0.588 1.000 0.954 0 3.389 8020 0 1071 500 9591 7891 - 1 6 15 0 38.1 68.00 0 16323 3.554 0.565 0.565 1.000 0.951 0 3.380 7705 0 1030 480 9216 7581 - 1 6 15 1 38.2 68.00 0 16330 3.555 0.557 0.557 1.000 0.950 0 3.378 7610 0 1019 474 9102 7487 - 1 6 15 2 38.2 68.00 0 16337 3.556 0.549 0.549 1.000 0.949 0 3.375 7492 0 1004 466 8962 7370 - 1 6 15 3 38.2 68.00 0 16343 3.557 0.546 0.546 1.000 0.949 0 3.375 7454 0 1000 464 8918 7332 - 1 6 15 4 38.3 68.00 0 16350 3.558 0.549 0.549 1.000 0.949 0 3.377 7503 0 1008 467 8977 7379 - 1 6 15 5 38.3 68.00 0 16357 3.559 0.557 0.557 1.000 0.950 0 3.381 7616 0 1024 474 9113 7489 - 1 6 16 0 38.4 68.00 0 16377 3.561 0.556 0.556 1.000 0.950 0 3.383 7603 0 1026 472 9101 7479 - 1 6 16 1 38.5 68.00 0 16397 3.564 0.564 0.564 1.000 0.951 0 3.389 7725 0 1046 479 9250 7601 - 1 6 16 2 38.6 68.00 0 16417 3.566 0.574 0.574 1.000 0.952 0 3.396 7872 0 1069 488 9429 7749 - 1 6 16 3 38.7 68.00 0 16437 3.569 0.580 0.580 1.000 0.953 0 3.401 7959 0 1084 493 9537 7838 - 1 6 16 4 38.8 68.00 0 16457 3.572 0.591 0.591 1.000 0.954 0 3.407 8114 0 1109 502 9725 7992 - 1 6 16 5 38.8 68.00 0 16477 3.574 0.601 0.601 1.000 0.955 0 3.414 8258 0 1132 511 9901 8135 - 1 6 17 0 38.7 68.00 0 16437 3.569 0.626 0.626 1.000 0.958 0 3.419 8585 0 1170 532 10286 8448 - 1 6 17 1 38.5 68.00 0 16397 3.564 0.633 0.633 1.000 0.959 0 3.417 8666 0 1173 538 10377 8524 - 1 6 17 2 38.3 68.00 0 16357 3.559 0.640 0.640 1.000 0.960 0 3.414 8749 0 1176 544 10469 8605 - 1 6 17 3 38.1 68.00 0 16317 3.553 0.647 0.647 1.000 0.960 0 3.412 8828 0 1179 550 10556 8678 - 1 6 17 4 37.9 68.00 0 16277 3.548 0.654 0.654 1.000 0.961 0 3.410 8903 0 1181 556 10639 8746 - 1 6 17 5 37.8 68.00 0 16237 3.543 0.670 0.670 1.000 0.963 0 3.411 9106 0 1200 569 10875 8941 - 1 6 18 0 37.6 68.00 0 16203 3.538 0.649 0.649 1.000 0.961 0 3.399 8810 0 1154 552 10516 8641 - 1 6 18 1 37.5 68.00 0 16170 3.534 0.651 0.651 1.000 0.961 0 3.395 8827 0 1150 553 10531 8651 - 1 6 18 2 37.3 68.00 0 16136 3.530 0.654 0.654 1.000 0.961 0 3.392 8846 0 1145 556 10547 8661 - 1 6 18 3 37.2 68.00 0 16103 3.525 0.670 0.670 1.000 0.963 0 3.394 9060 0 1166 570 10796 8861 - 1 6 18 4 37.0 68.00 0 16070 3.521 0.672 0.672 1.000 0.963 0 3.391 9066 0 1160 571 10797 8852 - 1 6 18 5 36.9 68.00 0 16036 3.516 0.675 0.675 1.000 0.963 0 3.388 9095 0 1157 574 10826 8871 - 1 6 19 0 36.6 68.00 0 15970 3.508 0.669 0.669 1.000 0.963 0 3.377 8989 0 1129 569 10687 8754 - 1 6 19 1 36.3 68.00 0 15903 3.499 0.689 0.689 1.000 0.965 0 3.376 9230 0 1145 586 10962 8975 - 1 6 19 2 36.0 68.00 0 15836 3.490 0.696 0.696 1.000 0.966 0 3.370 9285 0 1138 591 11014 9009 - 1 6 19 3 35.7 68.00 0 15769 3.481 0.703 0.703 1.000 0.967 0 3.365 9354 0 1132 597 11083 9062 - 1 6 19 4 35.4 68.00 0 15703 3.472 0.710 0.710 1.000 0.967 0 3.359 9426 0 1125 604 11155 9118 - 1 6 19 5 35.1 68.00 0 15636 3.463 0.730 0.730 1.000 0.970 0 3.358 9661 0 1138 621 11420 9330 - 1 6 20 0 35.0 68.00 0 15623 3.462 0.738 0.738 1.000 0.971 0 3.360 9763 0 1147 628 11537 9421 - 1 6 20 1 34.9 68.00 0 15609 3.460 0.738 0.738 1.000 0.971 0 3.358 9756 0 1143 628 11527 9406 - 1 6 20 2 34.9 68.00 0 15596 3.458 0.737 0.737 1.000 0.970 0 3.356 9734 0 1137 627 11498 9376 - 1 6 20 3 34.8 68.00 0 15583 3.456 0.754 0.754 1.000 0.972 0 3.361 9952 0 1160 641 11752 9574 - 1 6 20 4 34.8 68.00 0 15569 3.454 0.752 0.752 1.000 0.972 0 3.358 9919 0 1153 639 11711 9525 - 1 6 20 5 34.7 68.00 0 15556 3.453 0.748 0.748 1.000 0.972 0 3.355 9852 0 1142 635 11629 9449 + 1 6 12 0 39.9 68.00 0 16710 3.605 0.546 0.546 1.000 0.949 0 3.421 7584 0 1079 464 9127 7508 + 1 6 12 1 39.9 68.00 0 16704 3.604 0.537 0.537 1.000 0.948 0 3.416 7452 0 1059 456 8968 7378 + 1 6 12 2 39.8 68.00 0 16697 3.603 0.528 0.528 1.000 0.947 0 3.412 7321 0 1039 448 8808 7246 + 1 6 12 3 39.8 68.00 0 16690 3.602 0.522 0.522 1.000 0.946 0 3.409 7242 0 1027 444 8713 7165 + 1 6 12 4 39.8 68.00 0 16684 3.601 0.520 0.520 1.000 0.946 0 3.407 7216 0 1022 442 8680 7136 + 1 6 12 5 39.7 68.00 0 16677 3.601 0.527 0.527 1.000 0.947 0 3.409 7307 0 1034 448 8789 7223 + 1 6 13 0 39.4 68.00 0 16610 3.592 0.542 0.542 1.000 0.949 0 3.407 7496 0 1050 461 9007 7394 + 1 6 13 1 39.1 68.00 0 16543 3.583 0.552 0.552 1.000 0.950 0 3.402 7604 0 1054 469 9127 7493 + 1 6 13 2 38.8 68.00 0 16477 3.574 0.562 0.562 1.000 0.951 0 3.398 7729 0 1060 478 9266 7612 + 1 6 13 3 38.5 68.00 0 16410 3.566 0.584 0.584 1.000 0.953 0 3.398 7995 0 1085 496 9576 7868 + 1 6 13 4 38.2 68.00 0 16343 3.557 0.593 0.593 1.000 0.954 0 3.394 8106 0 1087 504 9698 7968 + 1 6 13 5 37.9 68.00 0 16277 3.548 0.607 0.607 1.000 0.956 0 3.391 8267 0 1097 516 9880 8121 + 1 6 14 0 38.0 68.00 0 16283 3.549 0.598 0.598 1.000 0.955 0 3.388 8143 0 1081 508 9732 8004 + 1 6 14 1 38.0 68.00 0 16290 3.550 0.598 0.598 1.000 0.955 0 3.389 8152 0 1084 508 9744 8015 + 1 6 14 2 38.0 68.00 0 16297 3.551 0.597 0.597 1.000 0.955 0 3.390 8140 0 1084 507 9731 8004 + 1 6 14 3 38.1 68.00 0 16303 3.552 0.595 0.595 1.000 0.954 0 3.390 8117 0 1082 506 9704 7982 + 1 6 14 4 38.1 68.00 0 16310 3.552 0.592 0.592 1.000 0.954 0 3.389 8075 0 1077 503 9655 7941 + 1 6 14 5 38.1 68.00 0 16317 3.553 0.589 0.589 1.000 0.954 0 3.389 8034 0 1073 500 9607 7901 + 1 6 15 0 38.1 68.00 0 16323 3.554 0.566 0.566 1.000 0.951 0 3.380 7719 0 1032 481 9231 7591 + 1 6 15 1 38.2 68.00 0 16330 3.555 0.558 0.558 1.000 0.950 0 3.378 7621 0 1020 474 9116 7495 + 1 6 15 2 38.2 68.00 0 16337 3.556 0.549 0.549 1.000 0.949 0 3.376 7501 0 1005 467 8972 7375 + 1 6 15 3 38.2 68.00 0 16343 3.557 0.546 0.546 1.000 0.949 0 3.375 7458 0 1001 464 8923 7333 + 1 6 15 4 38.3 68.00 0 16350 3.558 0.550 0.550 1.000 0.949 0 3.377 7510 0 1009 467 8986 7383 + 1 6 15 5 38.3 68.00 0 16357 3.559 0.558 0.558 1.000 0.950 0 3.382 7629 0 1026 474 9129 7499 + 1 6 16 0 38.4 68.00 0 16377 3.561 0.557 0.557 1.000 0.950 0 3.384 7623 0 1028 474 9125 7496 + 1 6 16 1 38.5 68.00 0 16397 3.564 0.566 0.566 1.000 0.951 0 3.390 7750 0 1049 481 9280 7623 + 1 6 16 2 38.6 68.00 0 16417 3.566 0.577 0.577 1.000 0.952 0 3.397 7907 0 1074 490 9471 7777 + 1 6 16 3 38.7 68.00 0 16437 3.569 0.587 0.587 1.000 0.953 0 3.403 8046 0 1096 498 9641 7914 + 1 6 16 4 38.8 68.00 0 16457 3.572 0.598 0.598 1.000 0.955 0 3.410 8217 0 1123 509 9848 8088 + 1 6 16 5 38.8 68.00 0 16477 3.574 0.609 0.609 1.000 0.956 0 3.417 8373 0 1148 518 10039 8244 + 1 6 17 0 38.7 68.00 0 16437 3.569 0.635 0.635 1.000 0.959 0 3.423 8711 0 1187 540 10438 8569 + 1 6 17 1 38.5 68.00 0 16397 3.564 0.643 0.643 1.000 0.960 0 3.421 8805 0 1192 546 10543 8657 + 1 6 17 2 38.3 68.00 0 16357 3.559 0.651 0.651 1.000 0.961 0 3.419 8894 0 1196 553 10643 8745 + 1 6 17 3 38.1 68.00 0 16317 3.553 0.660 0.660 1.000 0.962 0 3.417 9005 0 1203 561 10769 8850 + 1 6 17 4 37.9 68.00 0 16277 3.548 0.666 0.666 1.000 0.962 0 3.415 9074 0 1204 566 10844 8909 + 1 6 17 5 37.8 68.00 0 16237 3.543 0.672 0.672 1.000 0.963 0 3.412 9136 0 1204 571 10911 8963 + 1 6 18 0 37.6 68.00 0 16203 3.538 0.656 0.656 1.000 0.961 0 3.401 8908 0 1167 558 10633 8736 + 1 6 18 1 37.5 68.00 0 16170 3.534 0.657 0.657 1.000 0.961 0 3.398 8907 0 1160 558 10625 8724 + 1 6 18 2 37.3 68.00 0 16136 3.530 0.659 0.659 1.000 0.962 0 3.394 8914 0 1154 560 10629 8722 + 1 6 18 3 37.2 68.00 0 16103 3.525 0.660 0.660 1.000 0.962 0 3.390 8919 0 1148 561 10628 8718 + 1 6 18 4 37.0 68.00 0 16070 3.521 0.676 0.676 1.000 0.964 0 3.392 9119 0 1167 574 10860 8904 + 1 6 18 5 36.9 68.00 0 16036 3.516 0.678 0.678 1.000 0.964 0 3.389 9139 0 1162 576 10878 8908 + 1 6 19 0 36.6 68.00 0 15970 3.508 0.673 0.673 1.000 0.963 0 3.378 9035 0 1135 572 10742 8793 + 1 6 19 1 36.3 68.00 0 15903 3.499 0.679 0.679 1.000 0.964 0 3.372 9086 0 1128 577 10790 8830 + 1 6 19 2 36.0 68.00 0 15836 3.490 0.699 0.699 1.000 0.966 0 3.371 9325 0 1143 594 11062 9048 + 1 6 19 3 35.7 68.00 0 15769 3.481 0.705 0.705 1.000 0.967 0 3.366 9387 0 1136 599 11123 9089 + 1 6 19 4 35.4 68.00 0 15703 3.472 0.713 0.713 1.000 0.968 0 3.360 9461 0 1130 606 11196 9146 + 1 6 19 5 35.1 68.00 0 15636 3.463 0.721 0.721 1.000 0.969 0 3.355 9543 0 1124 613 11281 9212 + 1 6 20 0 35.0 68.00 0 15623 3.462 0.742 0.742 1.000 0.971 0 3.361 9814 0 1153 631 11598 9471 + 1 6 20 1 34.9 68.00 0 15609 3.460 0.743 0.743 1.000 0.971 0 3.360 9813 0 1150 631 11595 9456 + 1 6 20 2 34.9 68.00 0 15596 3.458 0.742 0.742 1.000 0.971 0 3.358 9797 0 1145 631 11572 9431 + 1 6 20 3 34.8 68.00 0 15583 3.456 0.740 0.740 1.000 0.971 0 3.355 9760 0 1137 629 11526 9386 + 1 6 20 4 34.8 68.00 0 15569 3.454 0.757 0.757 1.000 0.973 0 3.360 9984 0 1160 643 11788 9589 + 1 6 20 5 34.7 68.00 0 15556 3.453 0.754 0.754 1.000 0.972 0 3.357 9934 0 1151 641 11726 9523 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 88 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 88 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 21 0 34.3 68.00 0 15456 3.439 0.793 0.793 1.000 0.977 0 3.359 10404 0 1181 674 12259 9951 - 1 6 21 1 33.8 68.00 0 15356 3.426 0.804 0.804 1.000 0.978 0 3.350 10496 0 1165 683 12345 10002 - 1 6 21 2 33.3 68.00 0 15256 3.413 0.811 0.811 1.000 0.979 0 3.340 10534 0 1144 689 12366 10011 - 1 6 21 3 32.9 68.00 0 15156 3.399 0.848 0.848 1.000 0.983 0 3.341 10971 0 1164 721 12855 10395 - 1 6 21 4 32.5 68.00 0 15056 3.386 0.861 0.861 1.000 0.984 0 3.333 11082 0 1148 732 12961 10460 - 1 6 21 5 32.0 68.00 0 14955 3.372 0.868 0.868 1.000 0.985 0 3.322 11115 0 1123 737 12975 10458 - 1 6 22 0 31.7 68.00 0 14889 3.363 0.919 0.919 1.000 0.991 0 3.333 11733 0 1165 781 13679 11019 - 1 6 22 1 31.4 68.00 0 14822 3.354 0.954 0.954 1.000 0.995 0 3.337 12141 0 1185 811 14136 11375 - 1 6 22 2 31.1 68.00 0 14755 3.345 0.970 0.970 1.000 0.997 0 3.334 12313 0 1181 825 14318 11512 - 1 6 22 3 30.8 68.00 0 14689 3.336 0.987 0.987 1.000 0.999 0 3.332 12486 0 1176 839 14501 11650 - 1 6 22 4 30.5 68.00 0 14622 3.327 1.000 0.994 1.000 0.999 0.00591 3.325 12533 148 1158 850 14688 11795 - 1 6 22 5 30.2 68.00 0 14555 3.318 1.000 0.976 1.000 0.997 0.0245 3.309 12259 612 1111 850 14831 11911 - 1 6 23 0 30.2 68.00 0 14555 3.318 1.000 0.920 1.000 0.991 0.0803 3.288 11557 2007 1047 850 15462 12443 - 1 6 23 1 30.2 68.00 0 14555 3.318 1.000 0.908 1.000 0.990 0.0924 3.284 11405 2310 1034 850 15599 12555 - 1 6 23 2 30.2 68.00 0 14555 3.318 1.000 0.898 1.000 0.989 0.102 3.280 11289 2541 1023 850 15703 12643 - 1 6 23 3 30.2 68.00 0 14555 3.318 1.000 0.889 1.000 0.988 0.111 3.277 11175 2768 1013 850 15806 12728 - 1 6 23 4 30.2 68.00 0 14555 3.318 1.000 0.881 1.000 0.987 0.119 3.274 11077 2963 1004 850 15894 12800 - 1 6 23 5 30.2 68.00 0 14555 3.318 1.000 0.882 1.000 0.987 0.118 3.274 11086 2946 1005 850 15886 12788 + 1 6 21 0 34.3 68.00 0 15456 3.439 0.780 0.780 1.000 0.975 0 3.354 10226 0 1160 663 12049 9775 + 1 6 21 1 33.8 68.00 0 15356 3.426 0.809 0.809 1.000 0.978 0 3.352 10560 0 1172 687 12420 10065 + 1 6 21 2 33.3 68.00 0 15256 3.413 0.820 0.820 1.000 0.980 0 3.343 10651 0 1156 697 12504 10116 + 1 6 21 3 32.9 68.00 0 15156 3.399 0.847 0.847 1.000 0.983 0 3.341 10952 0 1162 720 12834 10372 + 1 6 21 4 32.5 68.00 0 15056 3.386 0.858 0.858 1.000 0.984 0 3.332 11043 0 1144 729 12916 10421 + 1 6 21 5 32.0 68.00 0 14955 3.372 0.867 0.867 1.000 0.985 0 3.322 11110 0 1122 737 12970 10452 + 1 6 22 0 31.7 68.00 0 14889 3.363 0.943 0.943 1.000 0.994 0 3.342 12041 0 1196 801 14038 11305 + 1 6 22 1 31.4 68.00 0 14822 3.354 0.963 0.963 1.000 0.996 0 3.340 12254 0 1196 818 14269 11472 + 1 6 22 2 31.1 68.00 0 14755 3.345 0.980 0.980 1.000 0.998 0 3.338 12432 0 1192 833 14456 11617 + 1 6 22 3 30.8 68.00 0 14689 3.336 0.997 0.997 1.000 1.000 0 3.335 12615 0 1188 848 14650 11765 + 1 6 22 4 30.5 68.00 0 14622 3.327 1.000 0.981 1.000 0.998 0.0193 3.320 12363 484 1142 850 14839 11917 + 1 6 22 5 30.2 68.00 0 14555 3.318 1.000 0.965 1.000 0.996 0.0352 3.305 12124 879 1099 850 14952 12007 + 1 6 23 0 30.2 68.00 0 14555 3.318 1.000 0.910 1.000 0.990 0.0899 3.285 11437 2247 1037 850 15570 12527 + 1 6 23 1 30.2 68.00 0 14555 3.318 1.000 0.899 1.000 0.989 0.101 3.281 11296 2527 1024 850 15697 12631 + 1 6 23 2 30.2 68.00 0 14555 3.318 1.000 0.891 1.000 0.988 0.109 3.277 11191 2736 1014 850 15791 12710 + 1 6 23 3 30.2 68.00 0 14555 3.318 1.000 0.888 1.000 0.987 0.112 3.276 11154 2810 1011 850 15825 12732 + 1 6 23 4 30.2 68.00 0 14555 3.318 1.000 0.880 1.000 0.987 0.120 3.274 11064 2989 1003 850 15905 12803 + 1 6 23 5 30.2 68.00 0 14555 3.318 1.000 0.873 1.000 0.986 0.127 3.271 10973 3169 995 850 15987 12869 @@ -5604,7 +5604,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 89 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 89 @@ -5667,7 +5667,7 @@ Subhourly User-defined Report, Fri 14-Aug 8 14 7 5 77.2 77.60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 90 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 90 @@ -5697,7 +5697,7 @@ CZ16 Dual Fuel 8 14 11 2 84.1 78.00 0 0 0 0.278 0.278 1.000 1.000 0 0 -4736 0 0 237 -4499 -3841 8 14 11 3 84.2 78.00 0 0 0 0.287 0.287 1.000 1.000 0 0 -4888 0 0 245 -4643 -3961 8 14 11 4 84.3 78.00 0 0 0 0.296 0.296 1.000 1.000 0 0 -5033 0 0 252 -4781 -4074 - 8 14 11 5 84.4 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5180 0 0 259 -4921 -4190 + 8 14 11 5 84.4 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5181 0 0 259 -4921 -4190 8 14 12 0 84.7 78.00 0 0 0 0.286 0.286 1.000 1.000 0 0 -4859 0 0 244 -4616 -3925 8 14 12 1 85.0 78.00 0 0 0 0.295 0.295 1.000 1.000 0 0 -5001 0 0 251 -4750 -4034 8 14 12 2 85.3 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5162 0 0 260 -4902 -4157 @@ -5714,7 +5714,7 @@ CZ16 Dual Fuel 8 14 14 1 87.7 78.00 0 0 0 0.465 0.465 1.000 1.000 0 0 -7767 0 0 395 -7372 -6151 8 14 14 2 87.7 78.00 0 0 0 0.477 0.477 1.000 1.000 0 0 -7978 0 0 406 -7572 -6312 8 14 14 3 87.7 78.00 0 0 0 0.489 0.489 1.000 1.000 0 0 -8180 0 0 416 -7764 -6463 - 8 14 14 4 87.7 78.00 0 0 0 0.490 0.490 1.000 1.000 0 0 -8194 0 0 417 -7777 -6466 + 8 14 14 4 87.7 78.00 0 0 0 0.490 0.490 1.000 1.000 0 0 -8194 0 0 417 -7778 -6466 8 14 14 5 87.6 78.00 0 0 0 0.498 0.498 1.000 1.000 0 0 -8333 0 0 424 -7910 -6570 8 14 15 0 87.3 78.00 0 0 0 0.553 0.553 1.000 1.000 0 0 -9281 0 0 471 -8810 -7308 8 14 15 1 87.0 78.00 0 0 0 0.561 0.561 1.000 1.000 0 0 -9426 0 0 477 -8949 -7414 @@ -5730,7 +5730,7 @@ CZ16 Dual Fuel 8 14 16 5 85.3 78.00 0 0 0 0.634 0.634 1.000 1.000 0 0 -10773 0 0 540 -10233 -8408 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 91 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 91 @@ -5747,7 +5747,7 @@ CZ16 Dual Fuel 8 14 18 1 84.1 78.00 0 0 0 0.654 0.654 1.000 1.000 0 0 -11173 0 0 556 -10617 -8695 8 14 18 2 84.1 78.00 0 0 0 0.645 0.645 1.000 1.000 0 0 -11025 0 0 549 -10476 -8579 8 14 18 3 84.1 78.00 0 0 0 0.630 0.630 1.000 1.000 0 0 -10768 0 0 536 -10232 -8378 - 8 14 18 4 84.0 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10389 0 0 517 -9872 -8082 + 8 14 18 4 84.0 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10389 0 0 517 -9873 -8082 8 14 18 5 84.0 78.00 0 0 0 0.582 0.582 1.000 1.000 0 0 -9962 0 0 495 -9466 -7749 8 14 19 0 83.7 78.00 0 0 0 0.565 0.565 1.000 1.000 0 0 -9691 0 0 481 -9210 -7537 8 14 19 1 83.3 78.00 0 0 0 0.533 0.533 1.000 1.000 0 0 -9151 0 0 453 -8698 -7119 @@ -5767,9 +5767,9 @@ CZ16 Dual Fuel 8 14 21 3 76.2 78.00 0 0 0 0.156 0.156 1.000 1.000 0 0 -2768 0 0 133 -2635 -2159 8 14 21 4 75.7 78.00 0 0 0 0.142 0.142 1.000 1.000 0 0 -2528 0 0 121 -2407 -1973 8 14 21 5 75.2 78.00 0 0 0 0.130 0.130 1.000 1.000 0 0 -2302 0 0 110 -2192 -1798 - 8 14 22 0 75.2 78.00 0 0 0 .0965 .0965 1.000 1.000 0 0 -1714 0 0 82 -1632 -1339 + 8 14 22 0 75.2 78.00 0 0 0 .0966 .0966 1.000 1.000 0 0 -1715 0 0 82 -1632 -1339 8 14 22 1 75.1 78.00 0 0 0 .0880 .0880 1.000 1.000 0 0 -1562 0 0 75 -1487 -1220 - 8 14 22 2 75.1 78.00 0 0 0 .0804 .0804 1.000 1.000 0 0 -1427 0 0 68 -1358 -1115 + 8 14 22 2 75.1 78.00 0 0 0 .0804 .0804 1.000 1.000 0 0 -1427 0 0 68 -1359 -1115 8 14 22 3 75.1 78.00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 22 4 75.0 77.98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 22 5 75.0 77.97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -5793,7 +5793,7 @@ Subhourly User-defined Report, Sat 15-Aug 8 15 0 5 73.4 77.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 92 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 92 @@ -5849,14 +5849,14 @@ CZ16 Dual Fuel 8 15 8 4 80.5 78.00 0 0 0 0.174 0.174 1.000 1.000 0 0 -3012 0 0 148 -2864 -2455 8 15 8 5 80.8 78.00 0 0 0 0.187 0.187 1.000 1.000 0 0 -3243 0 0 159 -3083 -2644 8 15 9 0 81.1 78.00 0 0 0 0.187 0.187 1.000 1.000 0 0 -3235 0 0 159 -3075 -2641 - 8 15 9 1 81.4 78.00 0 0 0 0.203 0.203 1.000 1.000 0 0 -3501 0 0 173 -3328 -2859 + 8 15 9 1 81.4 78.00 0 0 0 0.203 0.203 1.000 1.000 0 0 -3501 0 0 173 -3329 -2859 8 15 9 2 81.7 78.00 0 0 0 0.222 0.222 1.000 1.000 0 0 -3822 0 0 189 -3633 -3121 8 15 9 3 82.0 78.00 0 0 0 0.239 0.239 1.000 1.000 0 0 -4119 0 0 204 -3915 -3362 8 15 9 4 82.3 78.00 0 0 0 0.255 0.255 1.000 1.000 0 0 -4380 0 0 217 -4163 -3574 8 15 9 5 82.6 78.00 0 0 0 0.271 0.271 1.000 1.000 0 0 -4644 0 0 230 -4414 -3790 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 93 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 93 @@ -5901,7 +5901,7 @@ CZ16 Dual Fuel 8 15 15 5 89.4 78.00 0 0 0 0.679 0.679 1.000 1.000 0 0 -11271 0 0 578 -10693 -8806 8 15 16 0 89.1 78.00 0 0 0 0.708 0.708 1.000 1.000 0 0 -11758 0 0 602 -11155 -9175 8 15 16 1 88.9 78.00 0 0 0 0.711 0.711 1.000 1.000 0 0 -11838 0 0 605 -11232 -9229 - 8 15 16 2 88.6 78.00 0 0 0 0.713 0.713 1.000 1.000 0 0 -11879 0 0 606 -11273 -9257 + 8 15 16 2 88.6 78.00 0 0 0 0.713 0.713 1.000 1.000 0 0 -11880 0 0 606 -11273 -9257 8 15 16 3 88.3 78.00 0 0 0 0.711 0.711 1.000 1.000 0 0 -11867 0 0 605 -11262 -9240 8 15 16 4 88.1 78.00 0 0 0 0.706 0.706 1.000 1.000 0 0 -11800 0 0 600 -11200 -9182 8 15 16 5 87.8 78.00 0 0 0 0.697 0.697 1.000 1.000 0 0 -11683 0 0 593 -11090 -9085 @@ -5919,7 +5919,7 @@ CZ16 Dual Fuel 8 15 18 5 83.7 78.00 0 0 0 0.566 0.566 1.000 1.000 0 0 -9712 0 0 482 -9230 -7533 ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 94 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 94 @@ -5928,7 +5928,7 @@ CZ16 Dual Fuel 8 15 19 0 83.1 78.00 0 0 0 0.552 0.552 1.000 1.000 0 0 -9489 0 0 469 -9019 -7362 8 15 19 1 82.6 78.00 0 0 0 0.523 0.523 1.000 1.000 0 0 -9018 0 0 445 -8573 -6999 - 8 15 19 2 82.0 78.00 0 0 0 0.492 0.492 1.000 1.000 0 0 -8513 0 0 419 -8094 -6609 + 8 15 19 2 82.0 78.00 0 0 0 0.492 0.492 1.000 1.000 0 0 -8513 0 0 419 -8095 -6610 8 15 19 3 81.5 78.00 0 0 0 0.459 0.459 1.000 1.000 0 0 -7963 0 0 390 -7573 -6185 8 15 19 4 81.0 78.00 0 0 0 0.427 0.427 1.000 1.000 0 0 -7426 0 0 363 -7063 -5768 8 15 19 5 80.4 78.00 0 0 0 0.393 0.393 1.000 1.000 0 0 -6863 0 0 335 -6528 -5332 @@ -5938,7 +5938,7 @@ CZ16 Dual Fuel 8 15 20 3 79.3 78.00 0 0 0 0.267 0.267 1.000 1.000 0 0 -4687 0 0 227 -4460 -3644 8 15 20 4 79.1 78.00 0 0 0 0.252 0.252 1.000 1.000 0 0 -4432 0 0 215 -4218 -3446 8 15 20 5 78.8 78.00 0 0 0 0.238 0.238 1.000 1.000 0 0 -4198 0 0 203 -3995 -3265 - 8 15 21 0 78.7 78.00 0 0 0 0.214 0.214 1.000 1.000 0 0 -3764 0 0 182 -3583 -2929 + 8 15 21 0 78.7 78.00 0 0 0 0.214 0.214 1.000 1.000 0 0 -3765 0 0 182 -3583 -2929 8 15 21 1 78.6 78.00 0 0 0 0.202 0.202 1.000 1.000 0 0 -3558 0 0 172 -3386 -2769 8 15 21 2 78.4 78.00 0 0 0 0.191 0.191 1.000 1.000 0 0 -3374 0 0 163 -3212 -2627 8 15 21 3 78.3 78.00 0 0 0 0.181 0.181 1.000 1.000 0 0 -3197 0 0 154 -3043 -2489 @@ -5961,7 +5961,7 @@ CZ16 Dual Fuel ! Log for Run 003: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -5982,7 +5982,7 @@ Input for Run 003: ------------------------------------------------------------------------------ -! ashp_dfng 003 Fri 27-Aug-21 11:08:22 am Page 95 +! ashp_dfng 003 Wed 27-Oct-21 9:51:58 am Page 95 @@ -5995,20 +5995,20 @@ Monthly Energy Use, meter "MtrElec" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 1.772 0 1.123 0 0 0 0 0 0.346 0.0561 0 0.0984 0 0.200 0.766 0.0523 0.150 0 0 0 .00748 0 0 0 -1.027 -Feb 1.056 0 0.806 0 0 0 0 0 0.272 0.0507 0 0.0768 0 0.168 0.636 0.0441 0.135 0 0 0 .00658 0 0 0 -1.140 +Jan 1.770 0 1.121 0 0 0 0 0 0.345 0.0561 0 0.0984 0 0.200 0.766 0.0523 0.150 0 0 0 .00748 0 0 0 -1.027 +Feb 1.056 0 0.807 0 0 0 0 0 0.272 0.0507 0 0.0768 0 0.168 0.636 0.0441 0.135 0 0 0 .00658 0 0 0 -1.140 Mar 1.203 0 1.159 0 0 0 0 0 0.268 0.0561 0 0.0759 0 0.171 0.676 0.0448 0.149 0 0 0 .00734 0 0 0 -1.404 Apr 0.992 0 1.106 0 0 0 0 0 0.269 0.0543 0 0.0863 0 0.151 0.645 0.0395 0.145 0 0 0 .00588 0 0 0 -1.510 May -0.624 0 0.318 0 0 0 0 0 0.0657 0.0561 0 0.0295 0 0.141 0.625 0.0369 0.153 0 0 0 .00609 0 0 0 -2.055 -Jun -0.800 0.0464 0.0779 0 0 0 0 0.0399 0.0151 0.0543 0 .00682 0 0.130 0.579 0.0340 0.154 0 0 0 .00619 0 0 0 -1.944 -Jul -1.032 0.0248 0.0182 0 0 0 0 0.0937 .00343 0.0561 0 0 0 0.138 0.625 0.0360 0.167 0 0 0 .00679 0 0 0 -2.200 +Jun -0.800 0.0464 0.0780 0 0 0 0 0.0399 0.0151 0.0543 0 .00682 0 0.130 0.579 0.0340 0.154 0 0 0 .00619 0 0 0 -1.944 +Jul -1.032 0.0248 0.0182 0 0 0 0 0.0937 .00342 0.0561 0 0 0 0.138 0.625 0.0360 0.167 0 0 0 .00679 0 0 0 -2.200 Aug -0.728 0.139 0 0 0 0 0 0.157 0 0.0561 0 0 0 0.148 0.648 0.0387 0.173 0 0 0 .00629 0 0 0 -2.094 Sep -0.617 .00837 0.0451 0 0 0 0 0.0673 .00904 0.0543 0 .00696 0 0.159 0.660 0.0417 0.157 0 0 0 .00611 0 0 0 -1.832 Oct 0.267 0 0.396 0 0 0 0 0.0209 0.0866 0.0561 0 0.0285 0 0.180 0.726 0.0470 0.154 0 0 0 .00629 0 0 0 -1.435 -Nov 1.400 0 0.925 0 0 0 0 0 0.208 0.0544 0 0.0554 0 0.189 0.731 0.0494 0.146 0 0 0 .00747 0 0 0 -0.965 +Nov 1.401 0 0.926 0 0 0 0 0 0.208 0.0544 0 0.0554 0 0.189 0.731 0.0494 0.146 0 0 0 .00747 0 0 0 -0.965 Dec 1.668 0 0.992 0 0 0 0 0 0.302 0.0561 0 0.0778 0 0.201 0.775 0.0527 0.150 0 0 0 .00799 0 0 0 -0.946 -Yr 4.558 0.219 6.967 0 0 0 0 0.379 1.845 0.661 0 0.542 0 1.975 8.093 0.517 1.833 0 0 0 0.0805 0 0 0 -18.55 +Yr 4.556 0.219 6.965 0 0 0 0 0.379 1.845 0.661 0 0.542 0 1.975 8.093 0.517 1.833 0 0 0 0.0805 0 0 0 -18.55 @@ -6016,11 +6016,11 @@ Monthly Energy Use, meter "MtrNatGas" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 3.973 0 0 3.832 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 0 +Jan 3.980 0 0 3.839 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 0 Feb 3.625 0 0 3.501 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.124 0 0 0 0 Mar 1.336 0 0 1.198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.139 0 0 0 0 Apr 1.710 0 0 1.599 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.111 0 0 0 0 -May 0.240 0 0 0.125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.115 0 0 0 0 +May 0.239 0 0 0.124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.115 0 0 0 0 Jun 0.124 0 0 .00675 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.117 0 0 0 0 Jul 0.128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.128 0 0 0 0 Aug 0.119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.119 0 0 0 0 @@ -6029,7 +6029,7 @@ Oct 0.363 0 0 0.244 0 0 0 0 0 0 0 Nov 0.936 0 0 0.795 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.141 0 0 0 0 Dec 3.433 0 0 3.282 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.151 0 0 0 0 -Yr 16.117 0 0 14.597 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.520 0 0 0 0 +Yr 16.124 0 0 14.604 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.520 0 0 0 0 @@ -6045,7 +6045,7 @@ HVAC Cooling Info ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 96 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 96 @@ -6108,7 +6108,7 @@ HVAC Heating Info ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 97 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 97 @@ -6122,24 +6122,24 @@ Hourly User-defined Report, Sun 04-Jan Month Day Hr Tout hrsOn hrsOnAux qh qcSen qcLat qFan qDefrost qAux ----- --- -- ---- ----- -------- ------- ------- ------- ------- ------- ------- 1 4 1 18.1 0 0.828 0 0 0 1 0 21 - 1 4 2 19.9 0 0.837 0 0 0 1 0 21 + 1 4 2 19.9 0 0.838 0 0 0 1 0 21 1 4 3 20.1 0 0.838 0 0 0 1 0 21 1 4 4 20.8 0 0.837 0 0 0 1 0 21 1 4 5 19.9 0 0.837 0 0 0 1 0 21 - 1 4 6 20.1 0 0.831 0 0 0 1 0 21 - 1 4 7 21.0 0 0.813 0 0 0 1 0 20 + 1 4 6 20.1 0 0.828 0 0 0 1 0 21 + 1 4 7 21.0 0 0.811 0 0 0 1 0 20 1 4 8 21.0 0 0.749 0 0 0 1 0 19 - 1 4 9 21.9 0.163 0.472 2 0 0 1 0 12 + 1 4 9 21.9 0.163 0.473 2 0 0 1 0 12 1 4 10 25.2 0.872 0 10 0 0 1 1 0 1 4 11 26.8 0.648 0 8 0 0 1 1 0 1 4 12 25.2 0.588 0 7 0 0 0 0 0 1 4 13 26.2 0.538 0 6 0 0 0 0 0 1 4 14 26.4 0.450 0 5 0 0 0 0 0 1 4 15 27.0 0.402 0 5 0 0 0 0 0 - 1 4 16 26.8 0.440 0 5 0 0 0 0 0 + 1 4 16 26.8 0.439 0 5 0 0 0 0 0 1 4 17 25.9 0.658 0 8 0 0 1 1 0 1 4 18 24.8 0.316 0.352 4 0 0 1 0 9 - 1 4 19 23.9 0 0.543 0 0 0 0 0 14 + 1 4 19 23.9 0 0.542 0 0 0 0 0 14 1 4 20 23.0 0 0.585 0 0 0 0 0 15 1 4 21 23.0 0 0.615 0 0 0 1 0 15 1 4 22 23.2 0 0.645 0 0 0 1 0 16 @@ -6171,14 +6171,14 @@ Hourly User-defined Report, Mon 05-Jan 1 5 18 37.9 0.563 0 8 0 0 0 1 0 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 98 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 98 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 5 19 37.9 0.618 0 8 0 0 1 1 0 + 1 5 19 37.9 0.617 0 8 0 0 1 1 0 1 5 20 37.8 0.648 0 9 0 0 1 1 0 1 5 21 37.0 0.699 0 9 0 0 1 1 0 1 5 22 36.9 0.742 0 10 0 0 1 1 0 @@ -6234,7 +6234,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 99 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 99 @@ -6252,12 +6252,12 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.0225 0 0 0.0225 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00001 0 0 0 0 4 0.0225 0 0 0.0225 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00001 0 0 0 0 5 0.0225 0 0 0.0225 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00001 0 0 0 0 - 6 0.0224 0 0 0.0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00002 0 0 0 0 - 7 0.0219 0 0 0.0219 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00005 0 0 0 0 + 6 0.0223 0 0 0.0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00002 0 0 0 0 + 7 0.0218 0 0 0.0218 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00005 0 0 0 0 8 0.0203 0 0 0.0201 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00012 0 0 0 0 9 0.0130 0 0 0.0128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00022 0 0 0 0 10 .00076 0 0 .00054 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00022 0 0 0 0 - 11 .00075 0 0 .00055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00021 0 0 0 0 + 11 .00075 0 0 .00054 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00021 0 0 0 0 12 .00073 0 0 .00048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00025 0 0 0 0 13 .00073 0 0 .00044 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00029 0 0 0 0 14 .00066 0 0 .00039 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00027 0 0 0 0 @@ -6297,7 +6297,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 .00078 0 0 .00055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00024 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 100 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 100 @@ -6321,20 +6321,20 @@ Monthly User-defined Report Month hrsOn hrsOnAux qh qcSen qcLat qFan qDefrost qAux ----- ----- -------- ------- ------- ------- ------- ------- ------- - 1 279.9 126.696 3950 0 0 346 396 3167 - 2 200.2 120.289 2879 0 0 272 249 3007 + 1 279.4 126.971 3944 0 0 345 396 3174 + 2 200.2 120.291 2879 0 0 272 249 3007 3 288.0 27.312 4126 0 0 268 431 683 - 4 274.6 42.340 3857 0 0 269 428 1058 - 5 76.97 0.380 1149 0 0 66 106 9 - 6 29.48 0 314 -196 -12 25 6 0 - 7 10.54 0 76 -110 -11 9 0 0 + 4 274.6 42.340 3856 0 0 269 428 1058 + 5 76.90 0.380 1148 0 0 66 106 9 + 6 29.50 0 315 -196 -12 25 6 0 + 7 10.54 0 75 -110 -11 9 0 0 8 36.17 0 0 -620 -3 31 0 0 9 12.97 0 164 -41 0 11 15 0 - 10 97.38 4.535 1415 0 0 87 114 113 - 11 227.6 17.143 3321 0 0 208 311 429 + 10 97.40 4.535 1415 0 0 87 114 113 + 11 227.7 17.142 3322 0 0 208 311 429 12 245.5 109.579 3573 0 0 302 313 2739 - Yr 1779 448.273 24823 -968 -26 1893 2369 11207 + Yr 1779 448.550 24817 -968 -26 1893 2368 11214 @@ -6360,7 +6360,7 @@ Monthly User-defined Report ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 101 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 101 @@ -6377,242 +6377,242 @@ Subhourly User-defined Report, Sun 04-Jan 1 4 0 1 18.6 68.00 0 11980 0 0 0 1.000 0 0.823 0 0 20576 0 699 21276 17764 1 4 0 2 18.5 68.00 0 11953 0 0 0 1.000 0 0.826 0 0 20659 0 702 21362 17836 1 4 0 3 18.4 68.00 0 11926 0 0 0 1.000 0 0.829 0 0 20733 0 705 21438 17904 - 1 4 0 4 18.3 68.00 0 11900 0 0 0 1.000 0 0.833 0 0 20817 0 708 21524 17983 - 1 4 0 5 18.1 68.00 0 11873 0 0 0 1.000 0 0.836 0 0 20906 0 711 21617 18065 - 1 4 1 0 18.4 68.00 0 11940 0 0 0 1.000 0 0.838 0 0 20961 0 713 21674 18110 - 1 4 1 1 18.7 68.00 0 12006 0 0 0 1.000 0 0.840 0 0 20993 0 714 21706 18126 - 1 4 1 2 19.0 68.00 0 12073 0 0 0 1.000 0 0.838 0 0 20958 0 712 21671 18082 - 1 4 1 3 19.3 68.00 0 12140 0 0 0 1.000 0 0.838 0 0 20962 0 713 21674 18083 - 1 4 1 4 19.6 68.00 0 12207 0 0 0 1.000 0 0.835 0 0 20880 0 710 21590 18003 - 1 4 1 5 19.9 68.00 0 12273 0 0 0 1.000 0 0.835 0 0 20866 0 709 21575 17987 - 1 4 2 0 20.0 68.00 0 12280 0 0 0 1.000 0 0.834 0 0 20862 0 709 21572 17977 - 1 4 2 1 20.0 68.00 0 12287 0 0 0 1.000 0 0.836 0 0 20906 0 711 21617 18023 - 1 4 2 2 20.0 68.00 0 12293 0 0 0 1.000 0 0.838 0 0 20940 0 712 21652 18061 + 1 4 0 4 18.3 68.00 0 11900 0 0 0 1.000 0 0.833 0 0 20815 0 708 21523 17982 + 1 4 0 5 18.1 68.00 0 11873 0 0 0 1.000 0 0.837 0 0 20913 0 711 21624 18071 + 1 4 1 0 18.4 68.00 0 11940 0 0 0 1.000 0 0.839 0 0 20970 0 713 21683 18116 + 1 4 1 1 18.7 68.00 0 12006 0 0 0 1.000 0 0.840 0 0 21003 0 714 21717 18133 + 1 4 1 2 19.0 68.00 0 12073 0 0 0 1.000 0 0.839 0 0 20966 0 713 21679 18087 + 1 4 1 3 19.3 68.00 0 12140 0 0 0 1.000 0 0.839 0 0 20969 0 713 21682 18088 + 1 4 1 4 19.6 68.00 0 12207 0 0 0 1.000 0 0.835 0 0 20884 0 710 21594 18005 + 1 4 1 5 19.9 68.00 0 12273 0 0 0 1.000 0 0.835 0 0 20869 0 709 21578 17989 + 1 4 2 0 20.0 68.00 0 12280 0 0 0 1.000 0 0.835 0 0 20864 0 709 21573 17977 + 1 4 2 1 20.0 68.00 0 12287 0 0 0 1.000 0 0.836 0 0 20907 0 711 21618 18023 + 1 4 2 2 20.0 68.00 0 12293 0 0 0 1.000 0 0.838 0 0 20941 0 712 21653 18061 1 4 2 3 20.1 68.00 0 12300 0 0 0 1.000 0 0.839 0 0 20975 0 713 21688 18098 - 1 4 2 4 20.1 68.00 0 12307 0 0 0 1.000 0 0.840 0 0 20998 0 714 21711 18128 - 1 4 2 5 20.1 68.00 0 12313 0 0 0 1.000 0 0.840 0 0 21011 0 714 21726 18154 + 1 4 2 4 20.1 68.00 0 12307 0 0 0 1.000 0 0.840 0 0 20998 0 714 21712 18128 + 1 4 2 5 20.1 68.00 0 12313 0 0 0 1.000 0 0.840 0 0 21012 0 714 21726 18154 1 4 3 0 20.2 68.00 0 12340 0 0 0 1.000 0 0.839 0 0 20977 0 713 21690 18127 - 1 4 3 1 20.4 68.00 0 12367 0 0 0 1.000 0 0.840 0 0 20989 0 714 21702 18140 - 1 4 3 2 20.5 68.00 0 12393 0 0 0 1.000 0 0.840 0 0 20997 0 714 21710 18151 - 1 4 3 3 20.6 68.00 0 12420 0 0 0 1.000 0 0.837 0 0 20918 0 711 21629 18085 - 1 4 3 4 20.7 68.00 0 12447 0 0 0 1.000 0 0.837 0 0 20921 0 711 21632 18092 - 1 4 3 5 20.8 68.00 0 12473 0 0 0 1.000 0 0.831 0 0 20778 0 706 21484 17964 - 1 4 4 0 20.7 68.00 0 12440 0 0 0 1.000 0 0.832 0 0 20791 0 707 21498 17980 - 1 4 4 1 20.5 68.00 0 12407 0 0 0 1.000 0 0.833 0 0 20821 0 708 21529 18007 - 1 4 4 2 20.4 68.00 0 12373 0 0 0 1.000 0 0.836 0 0 20910 0 711 21621 18084 - 1 4 4 3 20.2 68.00 0 12340 0 0 0 1.000 0 0.838 0 0 20948 0 712 21660 18118 - 1 4 4 4 20.1 68.00 0 12307 0 0 0 1.000 0 0.840 0 0 20997 0 714 21711 18162 - 1 4 4 5 19.9 68.00 0 12273 0 0 0 1.000 0 0.845 0 0 21120 0 718 21838 18270 - 1 4 5 0 20.0 68.00 0 12280 0 0 0 1.000 0 0.832 0 0 20804 0 707 21512 17998 - 1 4 5 1 20.0 68.00 0 12287 0 0 0 1.000 0 0.831 0 0 20787 0 707 21494 17985 - 1 4 5 2 20.0 68.00 0 12293 0 0 0 1.000 0 0.831 0 0 20776 0 706 21482 17974 - 1 4 5 3 20.1 68.00 0 12300 0 0 0 1.000 0 0.831 0 0 20768 0 706 21474 17958 - 1 4 5 4 20.1 68.00 0 12307 0 0 0 1.000 0 0.830 0 0 20756 0 706 21462 17934 - 1 4 5 5 20.1 68.00 0 12313 0 0 0 1.000 0 0.830 0 0 20752 0 705 21458 17916 - 1 4 6 0 20.3 68.00 0 12347 0 0 0 1.000 0 0.818 0 0 20455 0 695 21150 17647 - 1 4 6 1 20.4 68.00 0 12380 0 0 0 1.000 0 0.817 0 0 20416 0 694 21110 17610 - 1 4 6 2 20.6 68.00 0 12413 0 0 0 1.000 0 0.814 0 0 20347 0 692 21038 17542 - 1 4 6 3 20.7 68.00 0 12447 0 0 0 1.000 0 0.813 0 0 20313 0 691 21004 17511 - 1 4 6 4 20.9 68.00 0 12480 0 0 0 1.000 0 0.809 0 0 20234 0 688 20922 17437 - 1 4 6 5 21.0 68.00 0 12513 0 0 0 1.000 0 0.808 0 0 20209 0 687 20896 17413 - 1 4 7 0 21.0 68.00 0 12513 0 0 0 1.000 0 0.777 0 0 19417 0 660 20077 16727 - 1 4 7 1 21.0 68.00 0 12513 0 0 0 1.000 0 0.770 0 0 19245 0 654 19900 16575 - 1 4 7 2 21.0 68.00 0 12513 0 0 0 1.000 0 0.763 0 0 19065 0 648 19713 16418 - 1 4 7 3 21.0 68.00 0 12513 0 0 0 1.000 0 0.749 0 0 18733 0 637 19370 16130 - 1 4 7 4 21.0 68.00 0 12513 0 0 0 1.000 0 0.728 0 0 18200 0 619 18818 15667 - 1 4 7 5 21.0 68.00 0 12513 0 0 0 1.000 0 0.707 0 0 17663 0 600 18263 15201 - ------------------------------------------------------------------------------- -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 102 - - - -CZ16 Dual Fuel ------------------------------------------------------------------------------- - - 1 4 8 0 21.2 68.00 0 12547 0 0 0 1.000 0 0.646 0 0 16144 0 549 16693 13890 - 1 4 8 1 21.3 68.00 0 12580 0 0 0 1.000 0 0.603 0 0 15074 0 512 15587 12969 - 1 4 8 2 21.5 68.00 0 12614 0 0 0 1.000 0 0.563 0 0 14077 0 479 14555 12108 - 1 4 8 3 21.6 68.00 0 12647 0 0 0 1.000 0 0.525 0 0 13121 0 446 13567 11282 - 1 4 8 4 21.8 68.00 0 12680 0 0 0 1.000 0 0.497 0 0 12435 0 423 12858 10689 - 1 4 8 5 21.9 68.00 0 12714 3.066 0.979 0.979 1.000 0.998 0 3.058 11197 0 416 832 12444 10176 - 1 4 9 0 22.5 68.00 0 12834 3.082 0.968 0.968 1.000 0.996 0 3.071 11144 0 456 823 12422 10208 - 1 4 9 1 23.0 68.00 0 12954 3.099 0.940 0.940 1.000 0.993 0 3.078 10890 0 487 799 12175 10006 - 1 4 9 2 23.5 68.00 0 13074 3.116 0.903 0.903 1.000 0.989 0 3.082 10531 0 510 768 11808 9703 - 1 4 9 3 24.1 68.00 0 13194 3.132 0.867 0.867 1.000 0.985 0 3.085 10177 0 530 737 11444 9401 - 1 4 9 4 24.6 68.00 0 13314 3.149 0.806 0.806 1.000 0.978 0 3.080 9520 0 530 685 10735 8817 - 1 4 9 5 25.2 68.00 0 13434 3.165 0.748 0.748 1.000 0.972 0 3.076 8883 0 526 635 10045 8248 - 1 4 10 0 25.4 68.00 0 13494 3.174 0.745 0.745 1.000 0.971 0 3.083 8881 0 542 633 10056 8251 - 1 4 10 1 25.7 68.00 0 13554 3.182 0.703 0.703 1.000 0.967 0 3.076 8408 0 528 598 9534 7818 - 1 4 10 2 26.0 68.00 0 13614 3.190 0.664 0.664 1.000 0.962 0 3.069 7959 0 514 564 9037 7411 - 1 4 10 3 26.2 68.00 0 13674 3.198 0.626 0.626 1.000 0.958 0 3.064 7526 0 499 532 8557 7015 - 1 4 10 4 26.5 68.00 0 13734 3.207 0.593 0.593 1.000 0.954 0 3.060 7153 0 487 504 8144 6674 - 1 4 10 5 26.8 68.00 0 13795 3.215 0.560 0.560 1.000 0.950 0 3.056 6772 0 472 476 7720 6325 - 1 4 11 0 26.5 68.00 0 13734 3.207 0.589 0.589 1.000 0.954 0 3.058 7110 0 484 501 8094 6628 - 1 4 11 1 26.2 68.00 0 13674 3.198 0.590 0.590 1.000 0.954 0 3.051 7091 0 470 501 8062 6599 - 1 4 11 2 26.0 68.00 0 13614 3.190 0.584 0.584 1.000 0.953 0 3.041 6999 0 452 496 7947 6507 - 1 4 11 3 25.7 68.00 0 13554 3.182 0.587 0.587 1.000 0.954 0 3.034 7018 0 441 499 7958 6517 - 1 4 11 4 25.4 68.00 0 13494 3.174 0.586 0.586 1.000 0.953 0 3.026 6980 0 426 498 7904 6473 - 1 4 11 5 25.2 68.00 0 13434 3.165 0.591 0.591 1.000 0.954 0 3.020 7019 0 416 502 7938 6503 - 1 4 12 0 25.3 68.00 0 13474 3.171 0.576 0.576 1.000 0.952 0 3.020 6859 0 415 490 7763 6365 - 1 4 12 1 25.5 68.00 0 13514 3.176 0.563 0.563 1.000 0.951 0 3.020 6721 0 414 479 7614 6248 - 1 4 12 2 25.7 68.00 0 13554 3.182 0.544 0.544 1.000 0.949 0 3.019 6500 0 408 462 7370 6044 - 1 4 12 3 25.9 68.00 0 13594 3.187 0.530 0.530 1.000 0.947 0 3.019 6345 0 406 450 7201 5912 - 1 4 12 4 26.1 68.00 0 13634 3.193 0.516 0.516 1.000 0.946 0 3.019 6197 0 404 439 7039 5778 - 1 4 12 5 26.2 68.00 0 13674 3.198 0.500 0.500 1.000 0.944 0 3.018 6011 0 398 425 6834 5606 - 1 4 13 0 26.3 68.00 0 13681 3.199 0.458 0.458 1.000 0.939 0 3.004 5514 0 367 390 6270 5144 - 1 4 13 1 26.3 68.00 0 13688 3.200 0.452 0.452 1.000 0.938 0 3.003 5441 0 363 384 6188 5079 - 1 4 13 2 26.3 68.00 0 13694 3.201 0.448 0.448 1.000 0.938 0 3.002 5392 0 361 381 6133 5035 - 1 4 13 3 26.4 68.00 0 13701 3.202 0.446 0.446 1.000 0.938 0 3.003 5377 0 361 379 6117 5024 - 1 4 13 4 26.4 68.00 0 13708 3.203 0.447 0.447 1.000 0.938 0 3.004 5391 0 363 380 6134 5041 - 1 4 13 5 26.4 68.00 0 13714 3.204 0.450 0.450 1.000 0.938 0 3.006 5422 0 366 382 6170 5074 - 1 4 14 0 26.5 68.00 0 13734 3.207 0.410 0.410 1.000 0.934 0 2.994 4947 0 337 349 5633 4634 - 1 4 14 1 26.6 68.00 0 13755 3.209 0.399 0.399 1.000 0.932 0 2.992 4823 0 331 339 5493 4520 - 1 4 14 2 26.7 68.00 0 13775 3.212 0.397 0.397 1.000 0.932 0 2.994 4798 0 332 337 5467 4508 - 1 4 14 3 26.8 68.00 0 13795 3.215 0.395 0.395 1.000 0.932 0 2.996 4783 0 334 336 5453 4504 - 1 4 14 4 26.9 68.00 0 13815 3.218 0.400 0.400 1.000 0.932 0 3.000 4843 0 340 340 5523 4566 - 1 4 14 5 27.0 68.00 0 13835 3.220 0.409 0.409 1.000 0.934 0 3.006 4963 0 352 348 5662 4684 - 1 4 15 0 26.9 68.00 0 13828 3.219 0.403 0.403 1.000 0.933 0 3.003 4883 0 345 342 5571 4611 - 1 4 15 1 26.9 68.00 0 13821 3.218 0.410 0.410 1.000 0.934 0 3.005 4969 0 350 348 5667 4695 - 1 4 15 2 26.9 68.00 0 13815 3.218 0.419 0.419 1.000 0.935 0 3.007 5076 0 357 356 5789 4798 - 1 4 15 3 26.8 68.00 0 13808 3.217 0.438 0.438 1.000 0.937 0 3.013 5306 0 372 372 6051 5012 - 1 4 15 4 26.8 68.00 0 13801 3.216 0.467 0.467 1.000 0.940 0 3.023 5659 0 396 397 6451 5341 - 1 4 15 5 26.8 68.00 0 13795 3.215 0.500 0.500 1.000 0.944 0 3.034 6052 0 422 425 6899 5710 - 1 4 16 0 26.6 68.00 0 13761 3.210 0.545 0.545 1.000 0.949 0 3.046 6579 0 453 463 7495 6202 - 1 4 16 1 26.5 68.00 0 13728 3.206 0.584 0.584 1.000 0.953 0 3.056 7039 0 477 496 8013 6634 - 1 4 16 2 26.3 68.00 0 13694 3.201 0.630 0.630 1.000 0.958 0 3.068 7584 0 507 535 8626 7150 - 1 4 16 3 26.2 68.00 0 13661 3.197 0.678 0.678 1.000 0.964 0 3.081 8147 0 537 576 9260 7673 - 1 4 16 4 26.0 68.00 0 13628 3.192 0.726 0.726 1.000 0.969 0 3.093 8707 0 565 617 9890 8199 - 1 4 16 5 25.9 68.00 0 13594 3.187 0.787 0.787 1.000 0.976 0 3.111 9433 0 603 669 10706 8883 - ------------------------------------------------------------------------------- -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 103 - - - -CZ16 Dual Fuel ------------------------------------------------------------------------------- - - 1 4 17 0 25.7 68.00 0 13554 3.182 0.930 0.930 1.000 0.992 0 3.157 11113 0 698 790 12601 10455 - 1 4 17 1 25.5 68.00 0 13514 3.176 0.968 0.968 1.000 0.996 0 3.165 11543 0 711 822 13077 10857 - 1 4 17 2 25.3 68.00 0 13474 0 0 0 1.000 0 0.523 0 0 13063 0 444 13507 11337 - 1 4 17 3 25.2 68.00 0 13434 0 0 0 1.000 0 0.527 0 0 13181 0 448 13629 11439 - 1 4 17 4 25.0 68.00 0 13394 0 0 0 1.000 0 0.530 0 0 13260 0 451 13711 11508 - 1 4 17 5 24.8 68.00 0 13354 0 0 0 1.000 0 0.533 0 0 13329 0 453 13782 11571 - 1 4 18 0 24.6 68.00 0 13321 0 0 0 1.000 0 0.518 0 0 12939 0 440 13379 11176 - 1 4 18 1 24.5 68.00 0 13287 0 0 0 1.000 0 0.527 0 0 13176 0 448 13624 11381 - 1 4 18 2 24.3 68.00 0 13254 0 0 0 1.000 0 0.536 0 0 13401 0 456 13857 11576 - 1 4 18 3 24.2 68.00 0 13221 0 0 0 1.000 0 0.549 0 0 13733 0 467 14200 11865 - 1 4 18 4 24.0 68.00 0 13187 0 0 0 1.000 0 0.558 0 0 13953 0 474 14427 12048 - 1 4 18 5 23.9 68.00 0 13154 0 0 0 1.000 0 0.567 0 0 14174 0 482 14656 12238 - 1 4 19 0 23.8 68.00 0 13121 0 0 0 1.000 0 0.566 0 0 14146 0 481 14627 12216 - 1 4 19 1 23.6 68.00 0 13087 0 0 0 1.000 0 0.578 0 0 14439 0 491 14929 12469 - 1 4 19 2 23.5 68.00 0 13054 0 0 0 1.000 0 0.584 0 0 14598 0 496 15095 12597 - 1 4 19 3 23.3 68.00 0 13021 0 0 0 1.000 0 0.590 0 0 14742 0 501 15243 12717 - 1 4 19 4 23.1 68.00 0 12987 0 0 0 1.000 0 0.595 0 0 14872 0 506 15378 12828 - 1 4 19 5 23.0 68.00 0 12954 0 0 0 1.000 0 0.600 0 0 15003 0 510 15513 12938 - 1 4 20 0 23.0 68.00 0 12954 0 0 0 1.000 0 0.607 0 0 15179 0 516 15695 13089 - 1 4 20 1 23.0 68.00 0 12954 0 0 0 1.000 0 0.611 0 0 15263 0 519 15782 13156 - 1 4 20 2 23.0 68.00 0 12954 0 0 0 1.000 0 0.614 0 0 15341 0 522 15863 13217 - 1 4 20 3 23.0 68.00 0 12954 0 0 0 1.000 0 0.617 0 0 15413 0 524 15937 13272 - 1 4 20 4 23.0 68.00 0 12954 0 0 0 1.000 0 0.619 0 0 15477 0 526 16004 13321 - 1 4 20 5 23.0 68.00 0 12954 0 0 0 1.000 0 0.621 0 0 15533 0 528 16061 13361 - 1 4 21 0 23.0 68.00 0 12961 0 0 0 1.000 0 0.635 0 0 15887 0 540 16427 13660 - 1 4 21 1 23.1 68.00 0 12967 0 0 0 1.000 0 0.640 0 0 15988 0 544 16531 13740 - 1 4 21 2 23.1 68.00 0 12974 0 0 0 1.000 0 0.643 0 0 16080 0 547 16627 13815 - 1 4 21 3 23.1 68.00 0 12981 0 0 0 1.000 0 0.647 0 0 16172 0 550 16721 13888 - 1 4 21 4 23.1 68.00 0 12987 0 0 0 1.000 0 0.650 0 0 16261 0 553 16814 13960 - 1 4 21 5 23.2 68.00 0 12994 0 0 0 1.000 0 0.653 0 0 16336 0 555 16892 14018 - 1 4 22 0 23.5 68.00 0 13067 0 0 0 1.000 0 0.675 0 0 16887 0 574 17461 14487 - 1 4 22 1 23.8 68.00 0 13141 0 0 0 1.000 0 0.686 0 0 17161 0 583 17745 14715 - 1 4 22 2 24.2 68.00 0 13214 0 0 0 1.000 0 0.688 0 0 17203 0 585 17788 14746 - 1 4 22 3 24.5 68.00 0 13287 0 0 0 1.000 0 0.691 0 0 17275 0 587 17862 14806 - 1 4 22 4 24.8 68.00 0 13361 0 0 0 1.000 0 0.689 0 0 17226 0 586 17811 14753 - 1 4 22 5 25.2 68.00 0 13434 0 0 0 1.000 0 0.690 0 0 17252 0 587 17839 14777 - 1 4 23 0 25.3 68.00 0 13468 0 0 0 1.000 0 0.702 0 0 17559 0 597 18156 15033 - 1 4 23 1 25.5 68.00 0 13501 0 0 0 1.000 0 0.702 0 0 17562 0 597 18160 15033 - 1 4 23 2 25.6 68.00 0 13534 0 0 0 1.000 0 0.702 0 0 17547 0 597 18143 15016 - 1 4 23 3 25.8 68.00 0 13568 0 0 0 1.000 0 0.700 0 0 17489 0 595 18083 14958 - 1 4 23 4 25.9 68.00 0 13601 0 0 0 1.000 0 0.698 0 0 17459 0 594 18052 14928 - 1 4 23 5 26.1 68.00 0 13634 0 0 0 1.000 0 0.697 0 0 17415 0 592 18008 14884 + 1 4 3 1 20.4 68.00 0 12367 0 0 0 1.000 0 0.840 0 0 20989 0 714 21703 18140 + 1 4 3 2 20.5 68.00 0 12393 0 0 0 1.000 0 0.840 0 0 20997 0 714 21711 18151 + 1 4 3 3 20.6 68.00 0 12420 0 0 0 1.000 0 0.837 0 0 20924 0 711 21635 18090 + 1 4 3 4 20.7 68.00 0 12447 0 0 0 1.000 0 0.837 0 0 20928 0 711 21639 18097 + 1 4 3 5 20.8 68.00 0 12473 0 0 0 1.000 0 0.830 0 0 20760 0 706 21466 17934 + 1 4 4 0 20.7 68.00 0 12440 0 0 0 1.000 0 0.832 0 0 20800 0 707 21507 17985 + 1 4 4 1 20.5 68.00 0 12407 0 0 0 1.000 0 0.833 0 0 20827 0 708 21535 18012 + 1 4 4 2 20.4 68.00 0 12373 0 0 0 1.000 0 0.835 0 0 20866 0 709 21575 18043 + 1 4 4 3 20.2 68.00 0 12340 0 0 0 1.000 0 0.839 0 0 20966 0 713 21679 18132 + 1 4 4 4 20.1 68.00 0 12307 0 0 0 1.000 0 0.841 0 0 21019 0 715 21734 18179 + 1 4 4 5 19.9 68.00 0 12273 0 0 0 1.000 0 0.843 0 0 21068 0 716 21784 18223 + 1 4 5 0 20.0 68.00 0 12280 0 0 0 1.000 0 0.830 0 0 20748 0 705 21454 17947 + 1 4 5 1 20.0 68.00 0 12287 0 0 0 1.000 0 0.829 0 0 20731 0 705 21436 17934 + 1 4 5 2 20.0 68.00 0 12293 0 0 0 1.000 0 0.829 0 0 20715 0 704 21419 17919 + 1 4 5 3 20.1 68.00 0 12300 0 0 0 1.000 0 0.828 0 0 20691 0 703 21395 17899 + 1 4 5 4 20.1 68.00 0 12307 0 0 0 1.000 0 0.827 0 0 20668 0 703 21371 17875 + 1 4 5 5 20.1 68.00 0 12313 0 0 0 1.000 0 0.827 0 0 20664 0 702 21367 17856 + 1 4 6 0 20.3 68.00 0 12347 0 0 0 1.000 0 0.813 0 0 20328 0 691 21019 17550 + 1 4 6 1 20.4 68.00 0 12380 0 0 0 1.000 0 0.812 0 0 20294 0 690 20984 17510 + 1 4 6 2 20.6 68.00 0 12413 0 0 0 1.000 0 0.812 0 0 20307 0 690 20997 17510 + 1 4 6 3 20.7 68.00 0 12447 0 0 0 1.000 0 0.811 0 0 20278 0 689 20967 17483 + 1 4 6 4 20.9 68.00 0 12480 0 0 0 1.000 0 0.809 0 0 20216 0 687 20903 17424 + 1 4 6 5 21.0 68.00 0 12513 0 0 0 1.000 0 0.808 0 0 20199 0 687 20885 17407 + 1 4 7 0 21.0 68.00 0 12513 0 0 0 1.000 0 0.777 0 0 19413 0 660 20073 16727 + 1 4 7 1 21.0 68.00 0 12513 0 0 0 1.000 0 0.770 0 0 19246 0 654 19900 16579 + 1 4 7 2 21.0 68.00 0 12513 0 0 0 1.000 0 0.763 0 0 19067 0 648 19716 16423 + 1 4 7 3 21.0 68.00 0 12513 0 0 0 1.000 0 0.749 0 0 18736 0 637 19373 16135 + 1 4 7 4 21.0 68.00 0 12513 0 0 0 1.000 0 0.728 0 0 18202 0 619 18821 15673 + 1 4 7 5 21.0 68.00 0 12513 0 0 0 1.000 0 0.707 0 0 17665 0 601 18266 15206 + +------------------------------------------------------------------------------ +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 102 + + + +CZ16 Dual Fuel +------------------------------------------------------------------------------ + + 1 4 8 0 21.2 68.00 0 12547 0 0 0 1.000 0 0.646 0 0 16150 0 549 16699 13898 + 1 4 8 1 21.3 68.00 0 12580 0 0 0 1.000 0 0.603 0 0 15081 0 513 15594 12977 + 1 4 8 2 21.5 68.00 0 12614 0 0 0 1.000 0 0.563 0 0 14079 0 479 14557 12111 + 1 4 8 3 21.6 68.00 0 12647 0 0 0 1.000 0 0.525 0 0 13119 0 446 13565 11282 + 1 4 8 4 21.8 68.00 0 12680 0 0 0 1.000 0 0.498 0 0 12446 0 423 12870 10701 + 1 4 8 5 21.9 68.00 0 12714 3.066 0.976 0.976 1.000 0.997 0 3.057 11168 0 414 830 12412 10153 + 1 4 9 0 22.5 68.00 0 12834 3.082 0.968 0.968 1.000 0.996 0 3.071 11146 0 456 823 12425 10214 + 1 4 9 1 23.0 68.00 0 12954 3.099 0.939 0.939 1.000 0.993 0 3.078 10881 0 486 798 12165 10001 + 1 4 9 2 23.5 68.00 0 13074 3.116 0.903 0.903 1.000 0.989 0 3.082 10529 0 510 767 11807 9705 + 1 4 9 3 24.1 68.00 0 13194 3.132 0.867 0.867 1.000 0.985 0 3.085 10173 0 530 737 11439 9400 + 1 4 9 4 24.6 68.00 0 13314 3.149 0.806 0.806 1.000 0.978 0 3.080 9518 0 530 685 10734 8818 + 1 4 9 5 25.2 68.00 0 13434 3.165 0.748 0.748 1.000 0.972 0 3.075 8881 0 526 635 10043 8249 + 1 4 10 0 25.4 68.00 0 13494 3.174 0.745 0.745 1.000 0.971 0 3.083 8879 0 542 633 10055 8253 + 1 4 10 1 25.7 68.00 0 13554 3.182 0.703 0.703 1.000 0.967 0 3.076 8407 0 528 598 9533 7819 + 1 4 10 2 26.0 68.00 0 13614 3.190 0.664 0.664 1.000 0.962 0 3.069 7958 0 514 564 9036 7412 + 1 4 10 3 26.2 68.00 0 13674 3.198 0.626 0.626 1.000 0.958 0 3.064 7525 0 499 532 8556 7016 + 1 4 10 4 26.5 68.00 0 13734 3.207 0.593 0.593 1.000 0.954 0 3.060 7152 0 486 504 8143 6675 + 1 4 10 5 26.8 68.00 0 13795 3.215 0.560 0.560 1.000 0.950 0 3.056 6771 0 472 476 7719 6326 + 1 4 11 0 26.5 68.00 0 13734 3.207 0.589 0.589 1.000 0.954 0 3.058 7108 0 483 501 8093 6629 + 1 4 11 1 26.2 68.00 0 13674 3.198 0.589 0.589 1.000 0.954 0 3.051 7089 0 470 501 8060 6599 + 1 4 11 2 26.0 68.00 0 13614 3.190 0.584 0.584 1.000 0.953 0 3.041 6998 0 452 496 7946 6508 + 1 4 11 3 25.7 68.00 0 13554 3.182 0.587 0.587 1.000 0.954 0 3.034 7017 0 441 499 7956 6518 + 1 4 11 4 25.4 68.00 0 13494 3.174 0.586 0.586 1.000 0.953 0 3.026 6978 0 426 498 7902 6474 + 1 4 11 5 25.2 68.00 0 13434 3.165 0.591 0.591 1.000 0.954 0 3.020 7018 0 416 502 7936 6504 + 1 4 12 0 25.3 68.00 0 13474 3.171 0.576 0.576 1.000 0.952 0 3.020 6857 0 414 490 7761 6365 + 1 4 12 1 25.5 68.00 0 13514 3.176 0.563 0.563 1.000 0.951 0 3.020 6719 0 414 479 7612 6248 + 1 4 12 2 25.7 68.00 0 13554 3.182 0.544 0.544 1.000 0.949 0 3.019 6498 0 408 462 7368 6044 + 1 4 12 3 25.9 68.00 0 13594 3.187 0.530 0.530 1.000 0.947 0 3.019 6343 0 406 450 7199 5911 + 1 4 12 4 26.1 68.00 0 13634 3.193 0.516 0.516 1.000 0.946 0 3.019 6195 0 403 439 7037 5778 + 1 4 12 5 26.2 68.00 0 13674 3.198 0.500 0.500 1.000 0.944 0 3.018 6009 0 398 425 6832 5606 + 1 4 13 0 26.3 68.00 0 13681 3.199 0.458 0.458 1.000 0.939 0 3.004 5512 0 366 389 6268 5144 + 1 4 13 1 26.3 68.00 0 13688 3.200 0.452 0.452 1.000 0.938 0 3.003 5440 0 363 384 6187 5079 + 1 4 13 2 26.3 68.00 0 13694 3.201 0.448 0.448 1.000 0.938 0 3.002 5390 0 360 381 6131 5035 + 1 4 13 3 26.4 68.00 0 13701 3.202 0.446 0.446 1.000 0.938 0 3.003 5375 0 360 379 6115 5024 + 1 4 13 4 26.4 68.00 0 13708 3.203 0.447 0.447 1.000 0.938 0 3.004 5389 0 362 380 6132 5040 + 1 4 13 5 26.4 68.00 0 13714 3.204 0.450 0.450 1.000 0.938 0 3.006 5421 0 366 382 6169 5073 + 1 4 14 0 26.5 68.00 0 13734 3.207 0.410 0.410 1.000 0.934 0 2.994 4946 0 336 348 5631 4634 + 1 4 14 1 26.6 68.00 0 13755 3.209 0.399 0.399 1.000 0.932 0 2.992 4821 0 331 339 5491 4519 + 1 4 14 2 26.7 68.00 0 13775 3.212 0.397 0.397 1.000 0.932 0 2.994 4796 0 332 337 5465 4507 + 1 4 14 3 26.8 68.00 0 13795 3.215 0.395 0.395 1.000 0.932 0 2.996 4782 0 333 336 5451 4503 + 1 4 14 4 26.9 68.00 0 13815 3.218 0.400 0.400 1.000 0.932 0 3.000 4842 0 340 340 5522 4566 + 1 4 14 5 27.0 68.00 0 13835 3.220 0.409 0.409 1.000 0.934 0 3.006 4961 0 352 348 5661 4684 + 1 4 15 0 26.9 68.00 0 13828 3.219 0.403 0.403 1.000 0.933 0 3.003 4882 0 345 342 5569 4610 + 1 4 15 1 26.9 68.00 0 13821 3.218 0.410 0.410 1.000 0.934 0 3.005 4967 0 350 348 5666 4694 + 1 4 15 2 26.9 68.00 0 13815 3.218 0.419 0.419 1.000 0.935 0 3.007 5074 0 357 356 5787 4797 + 1 4 15 3 26.8 68.00 0 13808 3.217 0.438 0.438 1.000 0.937 0 3.013 5304 0 372 372 6049 5011 + 1 4 15 4 26.8 68.00 0 13801 3.216 0.467 0.467 1.000 0.940 0 3.023 5656 0 396 397 6449 5340 + 1 4 15 5 26.8 68.00 0 13795 3.215 0.500 0.500 1.000 0.944 0 3.034 6050 0 422 425 6897 5709 + 1 4 16 0 26.6 68.00 0 13761 3.210 0.544 0.544 1.000 0.949 0 3.046 6577 0 452 463 7492 6201 + 1 4 16 1 26.5 68.00 0 13728 3.206 0.583 0.583 1.000 0.953 0 3.055 7037 0 477 496 8010 6633 + 1 4 16 2 26.3 68.00 0 13694 3.201 0.630 0.630 1.000 0.958 0 3.068 7581 0 507 535 8623 7149 + 1 4 16 3 26.2 68.00 0 13661 3.197 0.678 0.678 1.000 0.964 0 3.081 8145 0 537 576 9258 7673 + 1 4 16 4 26.0 68.00 0 13628 3.192 0.725 0.725 1.000 0.969 0 3.093 8705 0 565 617 9887 8198 + 1 4 16 5 25.9 68.00 0 13594 3.187 0.787 0.787 1.000 0.976 0 3.111 9430 0 603 669 10703 8883 + +------------------------------------------------------------------------------ +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 103 + + + +CZ16 Dual Fuel +------------------------------------------------------------------------------ + + 1 4 17 0 25.7 68.00 0 13554 3.182 0.929 0.929 1.000 0.992 0 3.157 11110 0 698 790 12598 10454 + 1 4 17 1 25.5 68.00 0 13514 3.176 0.967 0.967 1.000 0.996 0 3.165 11540 0 711 822 13074 10856 + 1 4 17 2 25.3 68.00 0 13474 0 0 0 1.000 0 0.522 0 0 13061 0 444 13505 11336 + 1 4 17 3 25.2 68.00 0 13434 0 0 0 1.000 0 0.527 0 0 13179 0 448 13627 11439 + 1 4 17 4 25.0 68.00 0 13394 0 0 0 1.000 0 0.530 0 0 13258 0 451 13709 11507 + 1 4 17 5 24.8 68.00 0 13354 0 0 0 1.000 0 0.533 0 0 13327 0 453 13780 11570 + 1 4 18 0 24.6 68.00 0 13321 0 0 0 1.000 0 0.517 0 0 12937 0 440 13377 11175 + 1 4 18 1 24.5 68.00 0 13287 0 0 0 1.000 0 0.527 0 0 13174 0 448 13622 11380 + 1 4 18 2 24.3 68.00 0 13254 0 0 0 1.000 0 0.536 0 0 13399 0 456 13855 11575 + 1 4 18 3 24.2 68.00 0 13221 0 0 0 1.000 0 0.549 0 0 13732 0 467 14198 11864 + 1 4 18 4 24.0 68.00 0 13187 0 0 0 1.000 0 0.558 0 0 13951 0 474 14425 12048 + 1 4 18 5 23.9 68.00 0 13154 0 0 0 1.000 0 0.567 0 0 14173 0 482 14655 12238 + 1 4 19 0 23.8 68.00 0 13121 0 0 0 1.000 0 0.566 0 0 14144 0 481 14625 12215 + 1 4 19 1 23.6 68.00 0 13087 0 0 0 1.000 0 0.577 0 0 14437 0 491 14928 12468 + 1 4 19 2 23.5 68.00 0 13054 0 0 0 1.000 0 0.584 0 0 14597 0 496 15093 12597 + 1 4 19 3 23.3 68.00 0 13021 0 0 0 1.000 0 0.590 0 0 14740 0 501 15242 12717 + 1 4 19 4 23.1 68.00 0 12987 0 0 0 1.000 0 0.595 0 0 14871 0 506 15376 12827 + 1 4 19 5 23.0 68.00 0 12954 0 0 0 1.000 0 0.600 0 0 15001 0 510 15511 12938 + 1 4 20 0 23.0 68.00 0 12954 0 0 0 1.000 0 0.607 0 0 15177 0 516 15693 13088 + 1 4 20 1 23.0 68.00 0 12954 0 0 0 1.000 0 0.610 0 0 15262 0 519 15780 13156 + 1 4 20 2 23.0 68.00 0 12954 0 0 0 1.000 0 0.614 0 0 15339 0 521 15861 13217 + 1 4 20 3 23.0 68.00 0 12954 0 0 0 1.000 0 0.616 0 0 15411 0 524 15935 13272 + 1 4 20 4 23.0 68.00 0 12954 0 0 0 1.000 0 0.619 0 0 15476 0 526 16002 13320 + 1 4 20 5 23.0 68.00 0 12954 0 0 0 1.000 0 0.621 0 0 15531 0 528 16059 13360 + 1 4 21 0 23.0 68.00 0 12961 0 0 0 1.000 0 0.635 0 0 15886 0 540 16426 13659 + 1 4 21 1 23.1 68.00 0 12967 0 0 0 1.000 0 0.639 0 0 15986 0 543 16530 13740 + 1 4 21 2 23.1 68.00 0 12974 0 0 0 1.000 0 0.643 0 0 16079 0 547 16625 13815 + 1 4 21 3 23.1 68.00 0 12981 0 0 0 1.000 0 0.647 0 0 16170 0 550 16720 13888 + 1 4 21 4 23.1 68.00 0 12987 0 0 0 1.000 0 0.650 0 0 16259 0 553 16812 13959 + 1 4 21 5 23.2 68.00 0 12994 0 0 0 1.000 0 0.653 0 0 16335 0 555 16890 14018 + 1 4 22 0 23.5 68.00 0 13067 0 0 0 1.000 0 0.675 0 0 16885 0 574 17460 14487 + 1 4 22 1 23.8 68.00 0 13141 0 0 0 1.000 0 0.686 0 0 17159 0 583 17743 14715 + 1 4 22 2 24.2 68.00 0 13214 0 0 0 1.000 0 0.688 0 0 17201 0 585 17786 14746 + 1 4 22 3 24.5 68.00 0 13287 0 0 0 1.000 0 0.691 0 0 17274 0 587 17861 14805 + 1 4 22 4 24.8 68.00 0 13361 0 0 0 1.000 0 0.689 0 0 17224 0 586 17810 14752 + 1 4 22 5 25.2 68.00 0 13434 0 0 0 1.000 0 0.690 0 0 17251 0 586 17838 14776 + 1 4 23 0 25.3 68.00 0 13468 0 0 0 1.000 0 0.702 0 0 17558 0 597 18155 15033 + 1 4 23 1 25.5 68.00 0 13501 0 0 0 1.000 0 0.702 0 0 17561 0 597 18158 15033 + 1 4 23 2 25.6 68.00 0 13534 0 0 0 1.000 0 0.702 0 0 17546 0 596 18142 15016 + 1 4 23 3 25.8 68.00 0 13568 0 0 0 1.000 0 0.699 0 0 17487 0 594 18082 14958 + 1 4 23 4 25.9 68.00 0 13601 0 0 0 1.000 0 0.698 0 0 17457 0 593 18051 14928 + 1 4 23 5 26.1 68.00 0 13634 0 0 0 1.000 0 0.697 0 0 17414 0 592 18006 14883 Subhourly User-defined Report, Mon 05-Jan mon day Hr Sh ToDb Tzn UnMet capfl COPfl loadF runF spdF PLF runFAux COPpl qComp qAux qDef qFan qTot qsZn --- --- -- -- ---- ----- ----- ----- ----- ----- ----- ----- ----- ------- ----- ------ ------ ------ ------ ------ ------ - 1 5 0 0 26.1 68.00 0 13641 0 0 0 1.000 0 0.706 0 0 17655 0 600 18255 15081 - 1 5 0 1 26.1 68.00 0 13648 0 0 0 1.000 0 0.709 0 0 17735 0 603 18338 15147 - 1 5 0 2 26.1 68.00 0 13654 0 0 0 1.000 0 0.713 0 0 17817 0 606 18423 15213 - 1 5 0 3 26.2 68.00 0 13661 0 0 0 1.000 0 0.716 0 0 17903 0 609 18511 15280 - 1 5 0 4 26.2 68.00 0 13668 0 0 0 1.000 0 0.720 0 0 17989 0 612 18601 15349 - 1 5 0 5 26.2 68.00 0 13674 0 0 0 1.000 0 0.723 0 0 18071 0 614 18685 15413 - ------------------------------------------------------------------------------- -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 104 - - - -CZ16 Dual Fuel ------------------------------------------------------------------------------- - - 1 5 1 0 26.6 68.00 0 13748 0 0 0 1.000 0 0.721 0 0 18036 0 613 18650 15377 - 1 5 1 1 26.9 68.00 0 13821 0 0 0 1.000 0 0.721 0 0 18014 0 612 18627 15356 - 1 5 1 2 27.2 68.00 0 13895 0 0 0 1.000 0 0.720 0 0 17988 0 611 18599 15325 - 1 5 1 3 27.6 68.00 0 13968 0 0 0 1.000 0 0.716 0 0 17889 0 608 18497 15226 - 1 5 1 4 27.9 68.00 0 14041 0 0 0 1.000 0 0.713 0 0 17836 0 606 18443 15179 - 1 5 1 5 28.2 68.00 0 14115 0 0 0 1.000 0 0.712 0 0 17789 0 605 18393 15130 - 1 5 2 0 28.4 68.00 0 14148 0 0 0 1.000 0 0.710 0 0 17748 0 603 18352 15083 - 1 5 2 1 28.5 68.00 0 14182 0 0 0 1.000 0 0.710 0 0 17749 0 603 18353 15083 - 1 5 2 2 28.7 68.00 0 14215 0 0 0 1.000 0 0.710 0 0 17760 0 604 18363 15087 - 1 5 2 3 28.8 68.00 0 14248 0 0 0 1.000 0 0.708 0 0 17690 0 601 18291 15016 - 1 5 2 4 29.0 68.00 0 14282 0 0 0 1.000 0 0.707 0 0 17687 0 601 18289 15014 - 1 5 2 5 29.1 68.00 0 14315 0 0 0 1.000 0 0.708 0 0 17694 0 602 18295 15014 - 1 5 3 0 29.5 68.00 0 14388 0 0 0 1.000 0 0.701 0 0 17537 0 596 18133 14872 - 1 5 3 1 29.8 68.00 0 14462 0 0 0 1.000 0 0.701 0 0 17520 0 596 18116 14859 - 1 5 3 2 30.1 68.00 0 14535 0 0 0 1.000 0 0.695 0 0 17381 0 591 17972 14731 - 1 5 3 3 30.4 68.00 0 14609 0 0 0 1.000 0 0.694 0 0 17355 0 590 17945 14711 - 1 5 3 4 30.8 68.00 0 14682 0 0 0 1.000 0 0.688 0 0 17201 0 585 17786 14572 - 1 5 3 5 31.1 68.00 0 14755 0 0 0 1.000 0 0.687 0 0 17171 0 584 17755 14549 - 1 5 4 0 31.3 68.00 0 14795 0 0 0 1.000 0 0.682 0 0 17041 0 579 17620 14432 - 1 5 4 1 31.5 68.00 0 14835 0 0 0 1.000 0 0.682 0 0 17040 0 579 17619 14435 - 1 5 4 2 31.6 68.00 0 14875 0 0 0 1.000 0 0.677 0 0 16931 0 576 17506 14338 - 1 5 4 3 31.8 68.00 0 14915 0 0 0 1.000 0 0.678 0 0 16939 0 576 17515 14349 - 1 5 4 4 32.0 68.00 0 14955 0 0 0 1.000 0 0.673 0 0 16827 0 572 17399 14251 - 1 5 4 5 32.2 68.00 0 14996 0 0 0 1.000 0 0.674 0 0 16843 0 573 17416 14269 - 1 5 5 0 32.3 68.00 0 15022 0 0 0 1.000 0 0.658 0 0 16448 0 559 17007 13932 - 1 5 5 1 32.4 68.00 0 15049 0 0 0 1.000 0 0.652 0 0 16312 0 555 16867 13810 - 1 5 5 2 32.5 68.00 0 15076 0 0 0 1.000 0 0.652 0 0 16295 0 554 16849 13804 - 1 5 5 3 32.7 68.00 0 15102 0 0 0 1.000 0 0.651 0 0 16276 0 553 16829 13787 - 1 5 5 4 32.8 68.00 0 15129 0 0 0 1.000 0 0.649 0 0 16225 0 552 16776 13739 - 1 5 5 5 32.9 68.00 0 15156 0 0 0 1.000 0 0.644 0 0 16111 0 548 16659 13636 - 1 5 6 0 32.8 68.00 0 15129 0 0 0 1.000 0 0.630 0 0 15756 0 536 16291 13344 - 1 5 6 1 32.7 68.00 0 15102 0 0 0 1.000 0 0.629 0 0 15726 0 535 16261 13323 - 1 5 6 2 32.5 68.00 0 15076 0 0 0 1.000 0 0.627 0 0 15667 0 533 16200 13271 - 1 5 6 3 32.4 68.00 0 15049 0 0 0 1.000 0 0.626 0 0 15642 0 532 16174 13248 - 1 5 6 4 32.3 68.00 0 15022 0 0 0 1.000 0 0.625 0 0 15629 0 531 16160 13236 - 1 5 6 5 32.2 68.00 0 14996 0 0 0 1.000 0 0.625 0 0 15621 0 531 16152 13230 - 1 5 7 0 32.4 68.00 0 15042 0 0 0 1.000 0 0.595 0 0 14884 0 506 15390 12605 - 1 5 7 1 32.6 68.00 0 15089 0 0 0 1.000 0 0.589 0 0 14728 0 501 15228 12470 + 1 5 0 0 26.1 68.00 0 13641 0 0 0 1.000 0 0.706 0 0 17654 0 600 18254 15080 + 1 5 0 1 26.1 68.00 0 13648 0 0 0 1.000 0 0.709 0 0 17734 0 603 18337 15146 + 1 5 0 2 26.1 68.00 0 13654 0 0 0 1.000 0 0.713 0 0 17816 0 606 18422 15212 + 1 5 0 3 26.2 68.00 0 13661 0 0 0 1.000 0 0.716 0 0 17901 0 609 18510 15280 + 1 5 0 4 26.2 68.00 0 13668 0 0 0 1.000 0 0.720 0 0 17988 0 612 18600 15349 + 1 5 0 5 26.2 68.00 0 13674 0 0 0 1.000 0 0.723 0 0 18070 0 614 18684 15413 + +------------------------------------------------------------------------------ +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 104 + + + +CZ16 Dual Fuel +------------------------------------------------------------------------------ + + 1 5 1 0 26.6 68.00 0 13748 0 0 0 1.000 0 0.721 0 0 18035 0 613 18648 15376 + 1 5 1 1 26.9 68.00 0 13821 0 0 0 1.000 0 0.721 0 0 18013 0 612 18626 15355 + 1 5 1 2 27.2 68.00 0 13895 0 0 0 1.000 0 0.719 0 0 17986 0 611 18598 15325 + 1 5 1 3 27.6 68.00 0 13968 0 0 0 1.000 0 0.716 0 0 17888 0 608 18496 15226 + 1 5 1 4 27.9 68.00 0 14041 0 0 0 1.000 0 0.713 0 0 17835 0 606 18442 15179 + 1 5 1 5 28.2 68.00 0 14115 0 0 0 1.000 0 0.711 0 0 17787 0 605 18392 15130 + 1 5 2 0 28.4 68.00 0 14148 0 0 0 1.000 0 0.710 0 0 17747 0 603 18350 15083 + 1 5 2 1 28.5 68.00 0 14182 0 0 0 1.000 0 0.710 0 0 17748 0 603 18352 15083 + 1 5 2 2 28.7 68.00 0 14215 0 0 0 1.000 0 0.710 0 0 17759 0 604 18362 15086 + 1 5 2 3 28.8 68.00 0 14248 0 0 0 1.000 0 0.708 0 0 17689 0 601 18290 15015 + 1 5 2 4 29.0 68.00 0 14282 0 0 0 1.000 0 0.707 0 0 17686 0 601 18288 15013 + 1 5 2 5 29.1 68.00 0 14315 0 0 0 1.000 0 0.708 0 0 17693 0 601 18294 15014 + 1 5 3 0 29.5 68.00 0 14388 0 0 0 1.000 0 0.701 0 0 17536 0 596 18132 14872 + 1 5 3 1 29.8 68.00 0 14462 0 0 0 1.000 0 0.701 0 0 17519 0 596 18115 14859 + 1 5 3 2 30.1 68.00 0 14535 0 0 0 1.000 0 0.695 0 0 17380 0 591 17971 14731 + 1 5 3 3 30.4 68.00 0 14609 0 0 0 1.000 0 0.694 0 0 17354 0 590 17944 14711 + 1 5 3 4 30.8 68.00 0 14682 0 0 0 1.000 0 0.688 0 0 17200 0 585 17785 14572 + 1 5 3 5 31.1 68.00 0 14755 0 0 0 1.000 0 0.687 0 0 17170 0 584 17754 14549 + 1 5 4 0 31.3 68.00 0 14795 0 0 0 1.000 0 0.682 0 0 17040 0 579 17619 14432 + 1 5 4 1 31.5 68.00 0 14835 0 0 0 1.000 0 0.682 0 0 17039 0 579 17619 14435 + 1 5 4 2 31.6 68.00 0 14875 0 0 0 1.000 0 0.677 0 0 16930 0 576 17505 14338 + 1 5 4 3 31.8 68.00 0 14915 0 0 0 1.000 0 0.678 0 0 16938 0 576 17514 14349 + 1 5 4 4 32.0 68.00 0 14955 0 0 0 1.000 0 0.673 0 0 16826 0 572 17398 14250 + 1 5 4 5 32.2 68.00 0 14996 0 0 0 1.000 0 0.674 0 0 16842 0 573 17415 14269 + 1 5 5 0 32.3 68.00 0 15022 0 0 0 1.000 0 0.658 0 0 16447 0 559 17006 13932 + 1 5 5 1 32.4 68.00 0 15049 0 0 0 1.000 0 0.652 0 0 16311 0 555 16866 13809 + 1 5 5 2 32.5 68.00 0 15076 0 0 0 1.000 0 0.652 0 0 16294 0 554 16848 13804 + 1 5 5 3 32.7 68.00 0 15102 0 0 0 1.000 0 0.651 0 0 16275 0 553 16828 13787 + 1 5 5 4 32.8 68.00 0 15129 0 0 0 1.000 0 0.649 0 0 16224 0 552 16776 13739 + 1 5 5 5 32.9 68.00 0 15156 0 0 0 1.000 0 0.644 0 0 16111 0 548 16658 13636 + 1 5 6 0 32.8 68.00 0 15129 0 0 0 1.000 0 0.630 0 0 15755 0 536 16290 13344 + 1 5 6 1 32.7 68.00 0 15102 0 0 0 1.000 0 0.629 0 0 15725 0 535 16260 13322 + 1 5 6 2 32.5 68.00 0 15076 0 0 0 1.000 0 0.627 0 0 15666 0 533 16199 13271 + 1 5 6 3 32.4 68.00 0 15049 0 0 0 1.000 0 0.626 0 0 15641 0 532 16173 13248 + 1 5 6 4 32.3 68.00 0 15022 0 0 0 1.000 0 0.625 0 0 15628 0 531 16159 13236 + 1 5 6 5 32.2 68.00 0 14996 0 0 0 1.000 0 0.625 0 0 15620 0 531 16151 13230 + 1 5 7 0 32.4 68.00 0 15042 0 0 0 1.000 0 0.595 0 0 14883 0 506 15389 12605 + 1 5 7 1 32.6 68.00 0 15089 0 0 0 1.000 0 0.589 0 0 14727 0 501 15228 12470 1 5 7 2 32.8 68.00 0 15136 0 0 0 1.000 0 0.580 0 0 14504 0 493 14997 12273 - 1 5 7 3 33.0 68.00 0 15182 3.403 0.986 0.986 1.000 0.998 0 3.397 12771 0 1363 838 14972 11968 - 1 5 7 4 33.2 68.00 0 15229 3.409 0.984 0.984 1.000 0.998 0 3.403 12766 0 1377 836 14979 11963 - 1 5 7 5 33.4 68.00 0 15276 3.415 0.970 0.970 1.000 0.997 0 3.404 12622 0 1376 825 14823 11848 - 1 5 8 0 33.9 68.00 0 15376 3.429 0.898 0.898 1.000 0.989 0 3.389 11737 0 1309 763 13809 11094 - 1 5 8 1 34.3 68.00 0 15476 3.442 0.833 0.833 1.000 0.981 0 3.377 10935 0 1246 708 12889 10342 - 1 5 8 2 34.8 68.00 0 15576 3.455 0.739 0.739 1.000 0.971 0 3.354 9748 0 1134 628 11510 9233 - 1 5 8 3 35.2 68.00 0 15676 3.469 0.656 0.656 1.000 0.961 0 3.334 8697 0 1033 558 10288 8254 - 1 5 8 4 35.7 68.00 0 15776 3.482 0.592 0.592 1.000 0.954 0 3.322 7879 0 954 503 9337 7488 - 1 5 8 5 36.1 68.00 0 15876 3.495 0.531 0.531 1.000 0.947 0 3.311 7107 0 877 452 8436 6760 - 1 5 9 0 36.5 68.00 0 15950 3.505 0.501 0.501 1.000 0.944 0 3.308 6720 0 841 426 7986 6394 - 1 5 9 1 36.8 68.00 0 16023 3.515 0.455 0.455 1.000 0.939 0 3.299 6120 0 777 386 7283 5827 - 1 5 9 2 37.1 68.00 0 16096 3.524 0.410 0.410 1.000 0.934 0 3.290 5542 0 713 349 6604 5282 + 1 5 7 3 33.0 68.00 0 15182 3.403 0.986 0.986 1.000 0.998 0 3.397 12770 0 1363 838 14971 11968 + 1 5 7 4 33.2 68.00 0 15229 3.409 0.984 0.984 1.000 0.998 0 3.403 12765 0 1377 836 14978 11963 + 1 5 7 5 33.4 68.00 0 15276 3.415 0.970 0.970 1.000 0.997 0 3.404 12621 0 1376 825 14822 11847 + 1 5 8 0 33.9 68.00 0 15376 3.429 0.898 0.898 1.000 0.989 0 3.389 11736 0 1309 763 13808 11094 + 1 5 8 1 34.3 68.00 0 15476 3.442 0.833 0.833 1.000 0.981 0 3.377 10935 0 1246 708 12888 10342 + 1 5 8 2 34.8 68.00 0 15576 3.455 0.739 0.739 1.000 0.971 0 3.354 9747 0 1134 628 11509 9233 + 1 5 8 3 35.2 68.00 0 15676 3.469 0.656 0.656 1.000 0.961 0 3.334 8697 0 1033 558 10287 8254 + 1 5 8 4 35.7 68.00 0 15776 3.482 0.592 0.592 1.000 0.954 0 3.322 7879 0 954 503 9336 7488 + 1 5 8 5 36.1 68.00 0 15876 3.495 0.531 0.531 1.000 0.947 0 3.311 7106 0 877 452 8435 6760 + 1 5 9 0 36.5 68.00 0 15950 3.505 0.501 0.501 1.000 0.944 0 3.308 6719 0 841 426 7986 6394 + 1 5 9 1 36.8 68.00 0 16023 3.515 0.454 0.454 1.000 0.939 0 3.299 6120 0 776 386 7282 5827 + 1 5 9 2 37.1 68.00 0 16096 3.524 0.410 0.410 1.000 0.934 0 3.290 5542 0 713 349 6603 5282 1 5 9 3 37.5 68.00 0 16170 3.534 0.373 0.373 1.000 0.929 0 3.284 5050 0 658 317 6024 4816 - 1 5 9 4 37.8 68.00 0 16243 3.544 0.340 0.340 1.000 0.926 0 3.280 4621 0 610 289 5520 4409 - 1 5 9 5 38.1 68.00 0 16317 3.553 0.307 0.307 1.000 0.922 0 3.276 4189 0 559 261 5010 4000 + 1 5 9 4 37.8 68.00 0 16243 3.544 0.340 0.340 1.000 0.926 0 3.280 4621 0 610 289 5519 4409 + 1 5 9 5 38.1 68.00 0 16317 3.553 0.307 0.307 1.000 0.922 0 3.276 4189 0 559 261 5009 4000 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 105 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 105 @@ -6620,275 +6620,275 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ 1 5 10 0 38.5 68.00 0 16397 3.564 0.317 0.317 1.000 0.923 0 3.290 4346 0 588 270 5204 4154 - 1 5 10 1 38.8 68.00 0 16477 3.574 0.295 0.295 1.000 0.921 0 3.291 4050 0 555 250 4856 3875 - 1 5 10 2 39.2 68.00 0 16557 3.585 0.265 0.265 1.000 0.917 0 3.288 3655 0 508 225 4387 3502 - 1 5 10 3 39.6 68.00 0 16637 3.595 0.245 0.245 1.000 0.915 0 3.290 3386 0 476 208 4070 3250 - 1 5 10 4 39.9 68.00 0 16717 3.606 0.226 0.226 1.000 0.913 0 3.292 3135 0 446 192 3773 3012 + 1 5 10 1 38.8 68.00 0 16477 3.574 0.295 0.295 1.000 0.921 0 3.291 4050 0 555 250 4856 3876 + 1 5 10 2 39.2 68.00 0 16557 3.585 0.265 0.265 1.000 0.917 0 3.288 3654 0 508 225 4387 3502 + 1 5 10 3 39.6 68.00 0 16637 3.595 0.245 0.245 1.000 0.915 0 3.290 3386 0 476 208 4071 3250 + 1 5 10 4 39.9 68.00 0 16717 3.606 0.226 0.226 1.000 0.913 0 3.292 3134 0 446 192 3772 3011 1 5 10 5 40.3 68.00 0 16797 3.616 0.207 0.207 1.000 0.911 0 3.294 2886 0 416 176 3478 2777 - 1 5 11 0 40.5 68.00 0 16844 3.622 0.230 0.230 1.000 0.913 0 3.309 3215 0 466 196 3877 3095 - 1 5 11 1 40.7 68.00 0 16890 3.628 0.218 0.218 1.000 0.912 0 3.309 3051 0 446 185 3682 2935 - 1 5 11 2 40.9 68.00 0 16937 3.635 0.212 0.212 1.000 0.911 0 3.312 2974 0 437 180 3591 2869 + 1 5 11 0 40.5 68.00 0 16844 3.622 0.230 0.230 1.000 0.913 0 3.309 3214 0 466 196 3876 3094 + 1 5 11 1 40.7 68.00 0 16890 3.628 0.218 0.218 1.000 0.912 0 3.309 3051 0 446 185 3682 2936 + 1 5 11 2 40.9 68.00 0 16937 3.635 0.212 0.212 1.000 0.911 0 3.312 2974 0 437 180 3592 2869 1 5 11 3 41.1 68.00 0 16984 3.641 0.205 0.205 1.000 0.911 0 3.315 2880 0 427 174 3481 2783 1 5 11 4 41.3 68.00 0 17031 3.647 0.198 0.198 1.000 0.910 0 3.318 2791 0 416 168 3375 2699 1 5 11 5 41.5 68.00 0 17077 3.653 0.181 0.181 1.000 0.908 0 3.316 2553 0 383 154 3090 2468 1 5 12 0 41.0 68.00 0 16950 3.636 0.180 0.180 1.000 0.908 0 3.301 2523 0 372 153 3047 2437 - 1 5 12 1 40.4 68.00 0 16824 3.620 0.174 0.174 1.000 0.907 0 3.283 2426 0 351 148 2925 2334 + 1 5 12 1 40.4 68.00 0 16824 3.620 0.174 0.174 1.000 0.907 0 3.283 2426 0 351 148 2924 2334 1 5 12 2 39.8 68.00 0 16697 3.603 0.182 0.182 1.000 0.908 0 3.272 2526 0 359 155 3039 2429 - 1 5 12 3 39.3 68.00 0 16570 3.587 0.186 0.186 1.000 0.908 0 3.258 2561 0 357 158 3076 2456 - 1 5 12 4 38.7 68.00 0 16443 3.570 0.192 0.192 1.000 0.909 0 3.245 2629 0 359 163 3150 2514 - 1 5 12 5 38.1 68.00 0 16317 3.553 0.200 0.200 1.000 0.910 0 3.233 2722 0 364 170 3255 2597 + 1 5 12 3 39.3 68.00 0 16570 3.587 0.186 0.186 1.000 0.908 0 3.258 2562 0 357 158 3076 2456 + 1 5 12 4 38.7 68.00 0 16443 3.570 0.192 0.192 1.000 0.909 0 3.245 2630 0 359 163 3151 2515 + 1 5 12 5 38.1 68.00 0 16317 3.553 0.200 0.200 1.000 0.910 0 3.233 2722 0 364 170 3256 2597 1 5 13 0 38.4 68.00 0 16377 3.561 0.173 0.173 1.000 0.907 0 3.230 2370 0 320 147 2837 2264 1 5 13 1 38.7 68.00 0 16437 3.569 0.166 0.166 1.000 0.906 0 3.234 2281 0 311 141 2733 2181 1 5 13 2 38.9 68.00 0 16497 3.577 0.162 0.162 1.000 0.906 0 3.240 2234 0 307 138 2680 2140 - 1 5 13 3 39.2 68.00 0 16557 3.585 0.151 0.151 1.000 0.905 0 3.243 2089 0 290 129 2507 2003 - 1 5 13 4 39.5 68.00 0 16617 3.593 0.155 0.155 1.000 0.905 0 3.251 2142 0 300 132 2573 2059 - 1 5 13 5 39.7 68.00 0 16677 3.601 0.157 0.157 1.000 0.905 0 3.259 2176 0 308 133 2618 2096 - 1 5 14 0 39.7 68.00 0 16657 3.598 0.108 0.108 1.000 0.900 0 3.237 1502 0 212 92 1806 1444 + 1 5 13 3 39.2 68.00 0 16557 3.585 0.151 0.151 1.000 0.905 0 3.243 2088 0 290 129 2507 2003 + 1 5 13 4 39.5 68.00 0 16617 3.593 0.155 0.155 1.000 0.905 0 3.251 2141 0 300 132 2573 2059 + 1 5 13 5 39.7 68.00 0 16677 3.601 0.157 0.157 1.000 0.905 0 3.259 2176 0 308 133 2617 2096 + 1 5 14 0 39.7 68.00 0 16657 3.598 0.108 0.108 1.000 0.900 0 3.237 1501 0 212 92 1805 1444 1 5 14 1 39.6 68.00 0 16637 3.595 0.109 0.109 1.000 0.900 0 3.235 1503 0 211 92 1807 1448 1 5 14 2 39.5 68.00 0 16617 3.593 0.112 0.112 1.000 0.900 0 3.234 1543 0 216 95 1854 1486 - 1 5 14 3 39.4 68.00 0 16597 3.590 0.128 0.128 1.000 0.902 0 3.238 1763 0 246 108 2118 1699 + 1 5 14 3 39.4 68.00 0 16597 3.590 0.128 0.128 1.000 0.902 0 3.238 1763 0 246 108 2118 1698 1 5 14 4 39.3 68.00 0 16577 3.587 0.148 0.148 1.000 0.904 0 3.243 2040 0 284 126 2450 1966 1 5 14 5 39.2 68.00 0 16557 3.585 0.172 0.172 1.000 0.907 0 3.251 2371 0 329 146 2846 2284 - 1 5 15 0 39.2 68.00 0 16550 3.584 0.207 0.207 1.000 0.911 0 3.264 2856 0 396 176 3428 2754 - 1 5 15 1 39.1 68.00 0 16543 3.583 0.228 0.228 1.000 0.913 0 3.272 3136 0 435 193 3764 3027 + 1 5 15 0 39.2 68.00 0 16550 3.584 0.207 0.207 1.000 0.911 0 3.264 2855 0 396 176 3428 2753 + 1 5 15 1 39.1 68.00 0 16543 3.583 0.227 0.227 1.000 0.913 0 3.272 3136 0 435 193 3764 3027 1 5 15 2 39.1 68.00 0 16537 3.582 0.258 0.258 1.000 0.916 0 3.283 3549 0 491 219 4259 3429 - 1 5 15 3 39.1 68.00 0 16530 3.581 0.281 0.281 1.000 0.919 0 3.292 3869 0 535 239 4643 3743 - 1 5 15 4 39.0 68.00 0 16523 3.580 0.301 0.301 1.000 0.921 0 3.299 4141 0 572 256 4969 4007 - 1 5 15 5 39.0 68.00 0 16517 3.580 0.326 0.326 1.000 0.924 0 3.308 4488 0 619 277 5385 4346 - 1 5 16 0 39.0 68.00 0 16510 3.579 0.336 0.336 1.000 0.925 0 3.311 4618 0 637 285 5540 4478 + 1 5 15 3 39.1 68.00 0 16530 3.581 0.281 0.281 1.000 0.919 0 3.292 3869 0 535 239 4642 3742 + 1 5 15 4 39.0 68.00 0 16523 3.580 0.301 0.301 1.000 0.921 0 3.299 4141 0 572 256 4968 4007 + 1 5 15 5 39.0 68.00 0 16517 3.580 0.326 0.326 1.000 0.924 0 3.308 4488 0 619 277 5384 4345 + 1 5 16 0 39.0 68.00 0 16510 3.579 0.336 0.336 1.000 0.925 0 3.311 4618 0 637 285 5539 4478 1 5 16 1 39.0 68.00 0 16503 3.578 0.360 0.360 1.000 0.928 0 3.320 4950 0 682 306 5937 4797 1 5 16 2 38.9 68.00 0 16497 3.577 0.385 0.385 1.000 0.931 0 3.329 5289 0 728 327 6343 5134 - 1 5 16 3 38.9 68.00 0 16490 3.576 0.409 0.409 1.000 0.934 0 3.338 5626 0 773 348 6746 5460 - 1 5 16 4 38.9 68.00 0 16483 3.575 0.432 0.432 1.000 0.936 0 3.347 5943 0 816 367 7127 5769 - 1 5 16 5 38.8 68.00 0 16477 3.574 0.460 0.460 1.000 0.939 0 3.357 6322 0 867 391 7580 6144 + 1 5 16 3 38.9 68.00 0 16490 3.576 0.409 0.409 1.000 0.934 0 3.338 5625 0 773 348 6746 5459 + 1 5 16 4 38.9 68.00 0 16483 3.575 0.432 0.432 1.000 0.936 0 3.347 5943 0 816 367 7126 5768 + 1 5 16 5 38.8 68.00 0 16477 3.574 0.460 0.460 1.000 0.939 0 3.357 6322 0 867 391 7580 6143 1 5 17 0 38.7 68.00 0 16443 3.570 0.514 0.514 1.000 0.945 0 3.375 7051 0 962 437 8449 6859 - 1 5 17 1 38.5 68.00 0 16410 3.566 0.535 0.535 1.000 0.948 0 3.379 7329 0 994 455 8778 7119 - 1 5 17 2 38.4 68.00 0 16377 3.561 0.555 0.555 1.000 0.950 0 3.383 7593 0 1024 472 9089 7388 - 1 5 17 3 38.2 68.00 0 16343 3.557 0.572 0.572 1.000 0.952 0 3.386 7819 0 1049 486 9354 7602 - 1 5 17 4 38.1 68.00 0 16310 3.552 0.593 0.593 1.000 0.954 0 3.390 8086 0 1079 504 9669 7867 - 1 5 17 5 37.9 68.00 0 16277 3.548 0.609 0.609 1.000 0.956 0 3.392 8288 0 1099 517 9904 8060 - 1 5 18 0 37.9 68.00 0 16277 3.548 0.597 0.597 1.000 0.955 0 3.387 8136 0 1079 508 9723 7924 - 1 5 18 1 37.9 68.00 0 16277 3.548 0.606 0.606 1.000 0.956 0 3.391 8257 0 1095 515 9868 8042 - 1 5 18 2 37.9 68.00 0 16277 3.548 0.615 0.615 1.000 0.957 0 3.394 8376 0 1111 523 10010 8157 + 1 5 17 1 38.5 68.00 0 16410 3.566 0.535 0.535 1.000 0.948 0 3.379 7329 0 994 455 8777 7119 + 1 5 17 2 38.4 68.00 0 16377 3.561 0.555 0.555 1.000 0.950 0 3.383 7592 0 1024 472 9088 7387 + 1 5 17 3 38.2 68.00 0 16343 3.557 0.572 0.572 1.000 0.952 0 3.386 7818 0 1049 486 9354 7601 + 1 5 17 4 38.1 68.00 0 16310 3.552 0.593 0.593 1.000 0.954 0 3.390 8086 0 1079 504 9668 7867 + 1 5 17 5 37.9 68.00 0 16277 3.548 0.608 0.608 1.000 0.956 0 3.392 8287 0 1099 517 9904 8060 + 1 5 18 0 37.9 68.00 0 16277 3.548 0.597 0.597 1.000 0.955 0 3.387 8136 0 1079 508 9723 7923 + 1 5 18 1 37.9 68.00 0 16277 3.548 0.606 0.606 1.000 0.956 0 3.391 8257 0 1095 515 9867 8042 + 1 5 18 2 37.9 68.00 0 16277 3.548 0.615 0.615 1.000 0.957 0 3.394 8375 0 1111 523 10009 8157 1 5 18 3 37.9 68.00 0 16277 3.548 0.623 0.623 1.000 0.958 0 3.397 8480 0 1125 529 10134 8262 - 1 5 18 4 37.9 68.00 0 16277 3.548 0.629 0.629 1.000 0.958 0 3.400 8566 0 1136 535 10237 8345 - 1 5 18 5 37.9 68.00 0 16277 3.548 0.635 0.635 1.000 0.959 0 3.402 8647 0 1147 540 10334 8424 + 1 5 18 4 37.9 68.00 0 16277 3.548 0.629 0.629 1.000 0.958 0 3.400 8565 0 1136 534 10236 8345 + 1 5 18 5 37.9 68.00 0 16277 3.548 0.635 0.635 1.000 0.959 0 3.402 8647 0 1147 540 10333 8424 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 106 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 106 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 5 19 0 37.9 68.00 0 16270 3.547 0.630 0.630 1.000 0.958 0 3.399 8573 0 1136 535 10244 8348 - 1 5 19 1 37.9 68.00 0 16263 3.546 0.635 0.635 1.000 0.959 0 3.401 8642 0 1144 540 10325 8417 - 1 5 19 2 37.8 68.00 0 16257 3.545 0.648 0.648 1.000 0.960 0 3.405 8821 0 1166 551 10538 8592 + 1 5 19 0 37.9 68.00 0 16270 3.547 0.630 0.630 1.000 0.958 0 3.399 8572 0 1136 535 10243 8348 + 1 5 19 1 37.9 68.00 0 16263 3.546 0.635 0.635 1.000 0.959 0 3.401 8641 0 1144 540 10325 8417 + 1 5 19 2 37.8 68.00 0 16257 3.545 0.648 0.648 1.000 0.960 0 3.405 8821 0 1166 551 10538 8591 1 5 19 3 37.8 68.00 0 16250 3.544 0.654 0.654 1.000 0.961 0 3.406 8891 0 1174 555 10620 8654 - 1 5 19 4 37.8 68.00 0 16243 3.544 0.659 0.659 1.000 0.962 0 3.408 8965 0 1182 560 10707 8726 - 1 5 19 5 37.8 68.00 0 16237 3.543 0.665 0.665 1.000 0.962 0 3.409 9042 0 1191 565 10798 8802 + 1 5 19 4 37.8 68.00 0 16243 3.544 0.659 0.659 1.000 0.962 0 3.408 8964 0 1182 560 10707 8726 + 1 5 19 5 37.8 68.00 0 16237 3.543 0.665 0.665 1.000 0.962 0 3.409 9041 0 1191 565 10798 8801 1 5 20 0 37.6 68.00 0 16210 3.539 0.679 0.679 1.000 0.964 0 3.412 9226 0 1210 577 11013 8978 1 5 20 1 37.5 68.00 0 16183 3.536 0.687 0.687 1.000 0.965 0 3.411 9320 0 1217 584 11121 9069 1 5 20 2 37.4 68.00 0 16156 3.532 0.695 0.695 1.000 0.966 0 3.411 9417 0 1224 591 11232 9165 1 5 20 3 37.3 68.00 0 16130 3.529 0.703 0.703 1.000 0.967 0 3.411 9516 0 1231 598 11344 9265 1 5 20 4 37.2 68.00 0 16103 3.525 0.710 0.710 1.000 0.967 0 3.410 9594 0 1235 603 11432 9334 - 1 5 20 5 37.0 68.00 0 16076 3.522 0.717 0.717 1.000 0.968 0 3.409 9677 0 1240 609 11526 9416 + 1 5 20 5 37.0 68.00 0 16076 3.522 0.717 0.717 1.000 0.968 0 3.409 9677 0 1240 609 11526 9415 1 5 21 0 37.0 68.00 0 16070 3.521 0.738 0.738 1.000 0.971 0 3.417 9956 0 1274 627 11857 9694 1 5 21 1 37.0 68.00 0 16063 3.520 0.740 0.740 1.000 0.971 0 3.417 9981 0 1276 629 11886 9714 - 1 5 21 2 37.0 68.00 0 16056 3.519 0.742 0.742 1.000 0.971 0 3.417 10007 0 1277 631 11915 9738 - 1 5 21 3 36.9 68.00 0 16050 3.518 0.744 0.744 1.000 0.971 0 3.417 10034 0 1279 633 11946 9765 + 1 5 21 2 37.0 68.00 0 16056 3.519 0.742 0.742 1.000 0.971 0 3.417 10006 0 1277 631 11914 9738 + 1 5 21 3 36.9 68.00 0 16050 3.518 0.744 0.744 1.000 0.971 0 3.417 10033 0 1279 633 11945 9765 1 5 21 4 36.9 68.00 0 16043 3.517 0.745 0.745 1.000 0.971 0 3.416 10046 0 1279 634 11959 9776 - 1 5 21 5 36.9 68.00 0 16036 3.516 0.745 0.745 1.000 0.971 0 3.415 10037 0 1277 633 11947 9765 - 1 5 22 0 36.7 68.00 0 16010 3.513 0.783 0.783 1.000 0.976 0 3.427 10534 0 1333 665 12533 10241 - 1 5 22 1 36.6 68.00 0 15983 3.509 0.797 0.797 1.000 0.977 0 3.429 10718 0 1350 678 12746 10415 + 1 5 21 5 36.9 68.00 0 16036 3.516 0.745 0.745 1.000 0.971 0 3.415 10037 0 1277 633 11946 9765 + 1 5 22 0 36.7 68.00 0 16010 3.513 0.783 0.783 1.000 0.976 0 3.427 10534 0 1333 665 12532 10240 + 1 5 22 1 36.6 68.00 0 15983 3.509 0.797 0.797 1.000 0.977 0 3.429 10718 0 1350 678 12745 10415 1 5 22 2 36.5 68.00 0 15956 3.506 0.805 0.805 1.000 0.978 0 3.429 10809 0 1355 684 12848 10496 - 1 5 22 3 36.4 68.00 0 15930 3.502 0.813 0.813 1.000 0.979 0 3.429 10902 0 1360 691 12953 10582 - 1 5 22 4 36.3 68.00 0 15903 3.499 0.822 0.822 1.000 0.980 0 3.429 11007 0 1366 699 13071 10681 - 1 5 22 5 36.1 68.00 0 15876 3.495 0.833 0.833 1.000 0.981 0 3.430 11148 0 1377 708 13233 10816 - 1 5 23 0 36.3 68.00 0 15903 3.499 0.864 0.864 1.000 0.985 0 3.445 11569 0 1436 734 13738 11226 - 1 5 23 1 36.4 68.00 0 15930 3.502 0.869 0.869 1.000 0.985 0 3.451 11650 0 1453 738 13841 11307 - 1 5 23 2 36.5 68.00 0 15956 3.506 0.875 0.875 1.000 0.986 0 3.456 11744 0 1472 744 13960 11401 + 1 5 22 3 36.4 68.00 0 15930 3.502 0.813 0.813 1.000 0.979 0 3.429 10902 0 1360 691 12952 10582 + 1 5 22 4 36.3 68.00 0 15903 3.499 0.822 0.822 1.000 0.980 0 3.429 11006 0 1366 699 13071 10681 + 1 5 22 5 36.1 68.00 0 15876 3.495 0.833 0.833 1.000 0.981 0 3.430 11148 0 1376 708 13233 10816 + 1 5 23 0 36.3 68.00 0 15903 3.499 0.864 0.864 1.000 0.985 0 3.445 11568 0 1436 734 13738 11226 + 1 5 23 1 36.4 68.00 0 15930 3.502 0.869 0.869 1.000 0.985 0 3.451 11649 0 1453 738 13841 11307 + 1 5 23 2 36.5 68.00 0 15956 3.506 0.875 0.875 1.000 0.986 0 3.456 11744 0 1472 744 13959 11401 1 5 23 3 36.6 68.00 0 15983 3.509 0.878 0.878 1.000 0.986 0 3.461 11806 0 1487 747 14039 11469 - 1 5 23 4 36.7 68.00 0 16010 3.513 0.881 0.881 1.000 0.987 0 3.466 11851 0 1500 749 14100 11517 - 1 5 23 5 36.9 68.00 0 16036 3.516 0.881 0.881 1.000 0.987 0 3.469 11867 0 1509 749 14124 11531 + 1 5 23 4 36.7 68.00 0 16010 3.513 0.881 0.881 1.000 0.987 0 3.466 11851 0 1500 748 14100 11517 + 1 5 23 5 36.9 68.00 0 16036 3.516 0.881 0.881 1.000 0.987 0 3.469 11866 0 1509 749 14124 11531 Subhourly User-defined Report, Tue 06-Jan mon day Hr Sh ToDb Tzn UnMet capfl COPfl loadF runF spdF PLF runFAux COPpl qComp qAux qDef qFan qTot qsZn --- --- -- -- ---- ----- ----- ----- ----- ----- ----- ----- ----- ------- ----- ------ ------ ------ ------ ------ ------ - 1 6 0 0 36.8 68.00 0 16016 3.514 0.894 0.894 1.000 0.988 0 3.472 12036 0 1525 760 14321 11683 - 1 6 0 1 36.7 68.00 0 15996 3.511 0.892 0.892 1.000 0.988 0 3.468 12000 0 1515 758 14273 11650 - 1 6 0 2 36.6 68.00 0 15976 3.508 0.889 0.889 1.000 0.987 0 3.465 11943 0 1502 755 14201 11597 - 1 6 0 3 36.5 68.00 0 15956 3.506 0.885 0.885 1.000 0.987 0 3.460 11875 0 1488 752 14115 11527 - 1 6 0 4 36.4 68.00 0 15936 3.503 0.880 0.880 1.000 0.986 0 3.456 11801 0 1474 748 14022 11449 - 1 6 0 5 36.3 68.00 0 15916 3.500 0.872 0.872 1.000 0.986 0 3.450 11686 0 1454 741 13881 11333 - 1 6 1 0 36.7 68.00 0 16010 3.513 0.862 0.862 1.000 0.985 0 3.458 11605 0 1469 733 13807 11271 + 1 6 0 0 36.8 68.00 0 16016 3.514 0.894 0.894 1.000 0.988 0 3.472 12035 0 1525 760 14321 11683 + 1 6 0 1 36.7 68.00 0 15996 3.511 0.892 0.892 1.000 0.988 0 3.468 11999 0 1515 758 14273 11650 + 1 6 0 2 36.6 68.00 0 15976 3.508 0.889 0.889 1.000 0.987 0 3.465 11943 0 1502 755 14200 11597 + 1 6 0 3 36.5 68.00 0 15956 3.506 0.885 0.885 1.000 0.987 0 3.460 11875 0 1488 752 14115 11526 + 1 6 0 4 36.4 68.00 0 15936 3.503 0.880 0.880 1.000 0.986 0 3.456 11800 0 1474 748 14022 11449 + 1 6 0 5 36.3 68.00 0 15916 3.500 0.872 0.872 1.000 0.986 0 3.450 11685 0 1454 741 13880 11333 + 1 6 1 0 36.7 68.00 0 16010 3.513 0.862 0.862 1.000 0.985 0 3.458 11605 0 1469 733 13806 11271 1 6 1 1 37.2 68.00 0 16103 3.525 0.847 0.847 1.000 0.983 0 3.465 11451 0 1474 720 13645 11134 1 6 1 2 37.6 68.00 0 16197 3.537 0.838 0.838 1.000 0.982 0 3.473 11378 0 1489 713 13579 11099 - 1 6 1 3 38.0 68.00 0 16290 3.550 0.819 0.819 1.000 0.980 0 3.477 11157 0 1483 696 13337 10902 - 1 6 1 4 38.4 68.00 0 16383 3.562 0.809 0.809 1.000 0.978 0 3.485 11067 0 1495 687 13248 10844 - 1 6 1 5 38.8 68.00 0 16477 3.574 0.790 0.790 1.000 0.976 0 3.490 10862 0 1490 672 13024 10650 - 1 6 2 0 38.6 68.00 0 16417 3.566 0.793 0.793 1.000 0.977 0 3.483 10872 0 1476 674 13023 10665 + 1 6 1 3 38.0 68.00 0 16290 3.550 0.819 0.819 1.000 0.980 0 3.477 11157 0 1483 696 13336 10902 + 1 6 1 4 38.4 68.00 0 16383 3.562 0.809 0.809 1.000 0.978 0 3.485 11066 0 1495 687 13248 10844 + 1 6 1 5 38.8 68.00 0 16477 3.574 0.790 0.790 1.000 0.976 0 3.490 10862 0 1489 672 13023 10650 + 1 6 2 0 38.6 68.00 0 16417 3.566 0.793 0.793 1.000 0.977 0 3.483 10872 0 1476 674 13022 10665 1 6 2 1 38.3 68.00 0 16357 3.559 0.794 0.794 1.000 0.977 0 3.476 10848 0 1459 674 12981 10620 - 1 6 2 2 38.0 68.00 0 16297 3.551 0.801 0.801 1.000 0.978 0 3.471 10916 0 1453 681 13050 10681 - 1 6 2 3 37.8 68.00 0 16237 3.543 0.807 0.807 1.000 0.978 0 3.466 10970 0 1445 686 13101 10726 - 1 6 2 4 37.5 68.00 0 16176 3.535 0.812 0.812 1.000 0.979 0 3.460 11013 0 1436 690 13140 10753 + 1 6 2 2 38.0 68.00 0 16297 3.551 0.801 0.801 1.000 0.978 0 3.471 10916 0 1453 681 13049 10681 + 1 6 2 3 37.8 68.00 0 16237 3.543 0.807 0.807 1.000 0.978 0 3.466 10969 0 1445 686 13100 10726 + 1 6 2 4 37.5 68.00 0 16176 3.535 0.812 0.812 1.000 0.979 0 3.460 11013 0 1436 690 13139 10753 1 6 2 5 37.2 68.00 0 16116 3.527 0.823 0.823 1.000 0.980 0 3.457 11129 0 1436 699 13264 10858 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 107 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 107 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 3 0 37.4 68.00 0 16150 3.531 0.819 0.819 1.000 0.980 0 3.459 11091 0 1439 696 13227 10822 - 1 6 3 1 37.5 68.00 0 16183 3.536 0.820 0.820 1.000 0.980 0 3.464 11119 0 1451 697 13267 10850 + 1 6 3 0 37.4 68.00 0 16150 3.531 0.819 0.819 1.000 0.980 0 3.459 11091 0 1439 696 13226 10822 + 1 6 3 1 37.5 68.00 0 16183 3.536 0.820 0.820 1.000 0.980 0 3.464 11118 0 1451 697 13267 10850 1 6 3 2 37.7 68.00 0 16217 3.540 0.818 0.818 1.000 0.980 0 3.468 11111 0 1459 695 13265 10849 1 6 3 3 37.8 68.00 0 16250 3.544 0.814 0.814 1.000 0.979 0 3.470 11075 0 1463 692 13229 10816 1 6 3 4 38.0 68.00 0 16283 3.549 0.811 0.811 1.000 0.979 0 3.473 11048 0 1467 689 13205 10796 1 6 3 5 38.1 68.00 0 16317 3.553 0.806 0.806 1.000 0.978 0 3.476 10992 0 1468 685 13145 10744 - 1 6 4 0 38.2 68.00 0 16337 3.556 0.802 0.802 1.000 0.978 0 3.477 10947 0 1467 681 13096 10706 - 1 6 4 1 38.3 68.00 0 16357 3.559 0.801 0.801 1.000 0.978 0 3.479 10944 0 1472 680 13096 10713 - 1 6 4 2 38.4 68.00 0 16377 3.561 0.795 0.795 1.000 0.977 0 3.479 10876 0 1467 676 13018 10651 + 1 6 4 0 38.2 68.00 0 16337 3.556 0.802 0.802 1.000 0.978 0 3.477 10948 0 1467 681 13096 10706 + 1 6 4 1 38.3 68.00 0 16357 3.559 0.801 0.801 1.000 0.978 0 3.479 10944 0 1472 680 13096 10714 + 1 6 4 2 38.4 68.00 0 16377 3.561 0.795 0.795 1.000 0.977 0 3.479 10876 0 1467 676 13018 10650 1 6 4 3 38.5 68.00 0 16397 3.564 0.794 0.794 1.000 0.977 0 3.481 10870 0 1471 675 13016 10665 - 1 6 4 4 38.6 68.00 0 16417 3.566 0.789 0.789 1.000 0.976 0 3.482 10810 0 1468 670 12948 10620 - 1 6 4 5 38.7 68.00 0 16437 3.569 0.787 0.787 1.000 0.976 0 3.483 10795 0 1471 669 12934 10610 - 1 6 5 0 38.1 68.00 0 16317 3.553 0.770 0.770 1.000 0.974 0 3.461 10505 0 1403 654 12563 10289 - 1 6 5 1 37.6 68.00 0 16197 3.537 0.783 0.783 1.000 0.976 0 3.451 10631 0 1391 666 12687 10409 - 1 6 5 2 37.0 68.00 0 16076 3.522 0.791 0.791 1.000 0.977 0 3.439 10681 0 1368 673 12722 10422 - 1 6 5 3 36.5 68.00 0 15956 3.506 0.809 0.809 1.000 0.978 0 3.430 10856 0 1361 687 12904 10585 + 1 6 4 4 38.6 68.00 0 16417 3.566 0.789 0.789 1.000 0.976 0 3.482 10810 0 1468 670 12948 10621 + 1 6 4 5 38.7 68.00 0 16437 3.569 0.787 0.787 1.000 0.976 0 3.483 10794 0 1471 669 12934 10609 + 1 6 5 0 38.1 68.00 0 16317 3.553 0.770 0.770 1.000 0.974 0 3.461 10507 0 1403 654 12565 10289 + 1 6 5 1 37.6 68.00 0 16197 3.537 0.783 0.783 1.000 0.976 0 3.451 10630 0 1391 666 12687 10409 + 1 6 5 2 37.0 68.00 0 16076 3.522 0.791 0.791 1.000 0.977 0 3.439 10681 0 1368 673 12721 10421 + 1 6 5 3 36.5 68.00 0 15956 3.506 0.809 0.809 1.000 0.978 0 3.430 10856 0 1361 687 12904 10584 1 6 5 4 36.0 68.00 0 15836 3.490 0.820 0.820 1.000 0.980 0 3.419 10944 0 1341 697 12982 10639 1 6 5 5 35.4 68.00 0 15716 3.474 0.842 0.842 1.000 0.982 0 3.412 11177 0 1338 715 13230 10854 - 1 6 6 0 34.8 68.00 0 15589 3.457 0.831 0.831 1.000 0.981 0 3.391 10970 0 1280 706 12957 10624 + 1 6 6 0 34.8 68.00 0 15589 3.457 0.831 0.831 1.000 0.981 0 3.391 10971 0 1280 706 12957 10624 1 6 6 1 34.3 68.00 0 15463 3.440 0.853 0.853 1.000 0.983 0 3.383 11196 0 1272 725 13193 10829 1 6 6 2 33.7 68.00 0 15336 3.423 0.866 0.866 1.000 0.985 0 3.372 11293 0 1248 736 13277 10888 - 1 6 6 3 33.1 68.00 0 15209 3.406 0.889 0.889 1.000 0.988 0 3.364 11527 0 1238 756 13520 11086 - 1 6 6 4 32.6 68.00 0 15082 3.389 0.912 0.912 1.000 0.990 0 3.356 11752 0 1225 775 13752 11267 - 1 6 6 5 32.0 68.00 0 14955 3.372 0.927 0.927 1.000 0.992 0 3.345 11880 0 1200 788 13868 11345 + 1 6 6 3 33.1 68.00 0 15209 3.406 0.889 0.889 1.000 0.988 0 3.364 11527 0 1238 756 13521 11086 + 1 6 6 4 32.6 68.00 0 15082 3.389 0.912 0.912 1.000 0.990 0 3.356 11753 0 1225 775 13753 11267 + 1 6 6 5 32.0 68.00 0 14955 3.372 0.927 0.927 1.000 0.992 0 3.345 11880 0 1200 788 13869 11345 1 6 7 0 32.4 68.00 0 15036 3.383 0.980 0.980 1.000 0.998 0 3.375 12599 0 1298 833 14730 12059 1 6 7 1 32.7 68.00 0 15116 3.394 0.977 0.977 1.000 0.997 0 3.385 12617 0 1326 831 14773 12096 1 6 7 2 33.1 68.00 0 15196 3.405 0.972 0.972 1.000 0.997 0 3.394 12598 0 1349 826 14773 12104 - 1 6 7 3 33.4 68.00 0 15276 3.415 0.963 0.963 1.000 0.996 0 3.401 12527 0 1366 818 14711 12046 - 1 6 7 4 33.8 68.00 0 15356 3.426 0.949 0.949 1.000 0.994 0 3.406 12391 0 1376 807 14573 11939 - 1 6 7 5 34.2 68.00 0 15436 3.437 0.933 0.933 1.000 0.992 0 3.411 12221 0 1381 793 14394 11800 + 1 6 7 3 33.4 68.00 0 15276 3.415 0.963 0.963 1.000 0.996 0 3.401 12527 0 1366 819 14712 12046 + 1 6 7 4 33.8 68.00 0 15356 3.426 0.949 0.949 1.000 0.994 0 3.406 12391 0 1376 807 14574 11939 + 1 6 7 5 34.2 68.00 0 15436 3.437 0.933 0.933 1.000 0.992 0 3.411 12221 0 1381 793 14395 11800 1 6 8 0 34.5 68.00 0 15509 3.446 0.920 0.920 1.000 0.991 0 3.415 12102 0 1389 782 14273 11704 - 1 6 8 1 34.8 68.00 0 15583 3.456 0.909 0.909 1.000 0.990 0 3.421 12000 0 1398 773 14171 11628 - 1 6 8 2 35.2 68.00 0 15656 3.466 0.899 0.899 1.000 0.989 0 3.426 11900 0 1408 764 14071 11560 - 1 6 8 3 35.5 68.00 0 15729 3.476 0.881 0.881 1.000 0.987 0 3.429 11699 0 1404 748 13851 11377 - 1 6 8 4 35.8 68.00 0 15803 3.485 0.868 0.868 1.000 0.985 0 3.434 11565 0 1408 737 13710 11281 - 1 6 8 5 36.1 68.00 0 15876 3.495 0.854 0.854 1.000 0.984 0 3.438 11427 0 1411 726 13565 11170 - 1 6 9 0 36.5 68.00 0 15950 3.505 0.831 0.831 1.000 0.981 0 3.438 11150 0 1396 706 13252 10888 - 1 6 9 1 36.8 68.00 0 16023 3.515 0.808 0.808 1.000 0.978 0 3.438 10873 0 1380 686 12939 10656 - 1 6 9 2 37.1 68.00 0 16096 3.524 0.784 0.784 1.000 0.976 0 3.439 10594 0 1362 666 12622 10397 - 1 6 9 3 37.5 68.00 0 16170 3.534 0.767 0.767 1.000 0.974 0 3.441 10397 0 1354 652 12403 10221 - 1 6 9 4 37.8 68.00 0 16243 3.544 0.751 0.751 1.000 0.972 0 3.444 10214 0 1347 638 12199 10027 - 1 6 9 5 38.1 68.00 0 16317 3.553 0.734 0.734 1.000 0.970 0 3.447 10015 0 1338 624 11976 9867 - 1 6 10 0 38.3 68.00 0 16357 3.559 0.731 0.731 1.000 0.970 0 3.451 9986 0 1343 621 11950 9842 - 1 6 10 1 38.5 68.00 0 16397 3.564 0.723 0.723 1.000 0.969 0 3.453 9906 0 1341 615 11861 9774 - 1 6 10 2 38.7 68.00 0 16437 3.569 0.712 0.712 1.000 0.968 0 3.454 9772 0 1331 605 11709 9641 - 1 6 10 3 38.8 68.00 0 16477 3.574 0.702 0.702 1.000 0.966 0 3.455 9649 0 1323 597 11569 9537 - 1 6 10 4 39.0 68.00 0 16517 3.580 0.689 0.689 1.000 0.965 0 3.454 9488 0 1309 586 11384 9392 - 1 6 10 5 39.2 68.00 0 16557 3.585 0.676 0.676 1.000 0.964 0 3.454 9320 0 1295 574 11189 9228 - 1 6 11 0 39.3 68.00 0 16583 3.588 0.640 0.640 1.000 0.960 0 3.443 8841 0 1233 544 10619 8733 - 1 6 11 1 39.4 68.00 0 16610 3.592 0.621 0.621 1.000 0.957 0 3.439 8585 0 1202 528 10315 8504 - 1 6 11 2 39.6 68.00 0 16637 3.595 0.602 0.602 1.000 0.955 0 3.434 8331 0 1172 512 10014 8253 - 1 6 11 3 39.7 68.00 0 16664 3.599 0.585 0.585 1.000 0.953 0 3.431 8113 0 1146 498 9756 8023 - 1 6 11 4 39.8 68.00 0 16690 3.602 0.572 0.572 1.000 0.952 0 3.429 7937 0 1126 486 9549 7864 - 1 6 11 5 39.9 68.00 0 16717 3.606 0.560 0.560 1.000 0.951 0 3.427 7781 0 1108 476 9365 7712 - ------------------------------------------------------------------------------- -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 108 - - + 1 6 8 1 34.8 68.00 0 15583 3.456 0.909 0.909 1.000 0.990 0 3.421 12000 0 1398 773 14172 11628 + 1 6 8 2 35.2 68.00 0 15656 3.466 0.899 0.899 1.000 0.989 0 3.426 11900 0 1408 764 14072 11560 + 1 6 8 3 35.5 68.00 0 15729 3.476 0.881 0.881 1.000 0.987 0 3.429 11699 0 1404 748 13852 11376 + 1 6 8 4 35.8 68.00 0 15803 3.485 0.868 0.868 1.000 0.985 0 3.434 11565 0 1408 737 13711 11281 + 1 6 8 5 36.1 68.00 0 15876 3.495 0.854 0.854 1.000 0.984 0 3.438 11428 0 1411 726 13565 11171 + 1 6 9 0 36.5 68.00 0 15950 3.505 0.831 0.831 1.000 0.981 0 3.438 11152 0 1396 706 13254 10894 + 1 6 9 1 36.8 68.00 0 16023 3.515 0.811 0.811 1.000 0.979 0 3.440 10925 0 1386 690 13001 10708 + 1 6 9 2 37.1 68.00 0 16096 3.524 0.792 0.792 1.000 0.977 0 3.442 10706 0 1376 673 12756 10513 + 1 6 9 3 37.5 68.00 0 16170 3.534 0.768 0.768 1.000 0.974 0 3.442 10409 0 1356 653 12417 10223 + 1 6 9 4 37.8 68.00 0 16243 3.544 0.754 0.754 1.000 0.972 0 3.445 10251 0 1352 641 12244 10092 + 1 6 9 5 38.1 68.00 0 16317 3.553 0.736 0.736 1.000 0.970 0 3.448 10041 0 1341 625 12007 9889 + 1 6 10 0 38.3 68.00 0 16357 3.559 0.734 0.734 1.000 0.970 0 3.452 10036 0 1349 624 12009 9899 + 1 6 10 1 38.5 68.00 0 16397 3.564 0.726 0.726 1.000 0.969 0 3.454 9941 0 1345 617 11903 9816 + 1 6 10 2 38.7 68.00 0 16437 3.569 0.714 0.714 1.000 0.968 0 3.454 9797 0 1335 607 11739 9666 + 1 6 10 3 38.8 68.00 0 16477 3.574 0.703 0.703 1.000 0.967 0 3.455 9667 0 1326 598 11591 9559 + 1 6 10 4 39.0 68.00 0 16517 3.580 0.691 0.691 1.000 0.965 0 3.455 9509 0 1312 587 11408 9414 + 1 6 10 5 39.2 68.00 0 16557 3.585 0.677 0.677 1.000 0.964 0 3.454 9333 0 1296 575 11204 9247 + 1 6 11 0 39.3 68.00 0 16583 3.588 0.639 0.639 1.000 0.959 0 3.443 8824 0 1231 543 10598 8725 + 1 6 11 1 39.4 68.00 0 16610 3.592 0.620 0.620 1.000 0.957 0 3.438 8573 0 1201 527 10301 8496 + 1 6 11 2 39.6 68.00 0 16637 3.595 0.601 0.601 1.000 0.955 0 3.434 8317 0 1170 511 9998 8244 + 1 6 11 3 39.7 68.00 0 16664 3.599 0.583 0.583 1.000 0.953 0 3.430 8083 0 1142 496 9720 8003 + 1 6 11 4 39.8 68.00 0 16690 3.602 0.569 0.569 1.000 0.952 0 3.428 7900 0 1120 484 9504 7830 + 1 6 11 5 39.9 68.00 0 16717 3.606 0.557 0.557 1.000 0.950 0 3.426 7739 0 1102 474 9315 7672 + +------------------------------------------------------------------------------ +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 108 + + CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 12 0 39.9 68.00 0 16710 3.605 0.551 0.551 1.000 0.949 0 3.423 7650 0 1088 468 9206 7578 - 1 6 12 1 39.9 68.00 0 16704 3.604 0.543 0.543 1.000 0.949 0 3.419 7540 0 1071 462 9073 7465 - 1 6 12 2 39.8 68.00 0 16697 3.603 0.533 0.533 1.000 0.947 0 3.414 7401 0 1051 453 8905 7320 - 1 6 12 3 39.8 68.00 0 16690 3.602 0.526 0.526 1.000 0.947 0 3.410 7301 0 1035 447 8783 7216 - 1 6 12 4 39.8 68.00 0 16684 3.601 0.524 0.524 1.000 0.946 0 3.408 7265 0 1029 445 8740 7180 - 1 6 12 5 39.7 68.00 0 16677 3.601 0.523 0.523 1.000 0.946 0 3.407 7250 0 1026 444 8720 7162 - 1 6 13 0 39.4 68.00 0 16610 3.592 0.537 0.537 1.000 0.948 0 3.405 7429 0 1040 457 8926 7329 - 1 6 13 1 39.1 68.00 0 16543 3.583 0.557 0.557 1.000 0.950 0 3.404 7674 0 1064 473 9211 7564 - 1 6 13 2 38.8 68.00 0 16477 3.574 0.568 0.568 1.000 0.951 0 3.401 7810 0 1071 483 9364 7688 - 1 6 13 3 38.5 68.00 0 16410 3.566 0.583 0.583 1.000 0.953 0 3.398 7990 0 1084 496 9569 7858 - 1 6 13 4 38.2 68.00 0 16343 3.557 0.598 0.598 1.000 0.955 0 3.396 8173 0 1097 509 9778 8034 - 1 6 13 5 37.9 68.00 0 16277 3.548 0.609 0.609 1.000 0.956 0 3.392 8296 0 1101 518 9914 8146 - 1 6 14 0 38.0 68.00 0 16283 3.549 0.599 0.599 1.000 0.955 0 3.389 8161 0 1084 509 9754 8020 - 1 6 14 1 38.0 68.00 0 16290 3.550 0.599 0.599 1.000 0.955 0 3.390 8163 0 1085 509 9757 8026 - 1 6 14 2 38.0 68.00 0 16297 3.551 0.598 0.598 1.000 0.955 0 3.390 8153 0 1085 508 9747 8017 - 1 6 14 3 38.1 68.00 0 16303 3.552 0.596 0.596 1.000 0.955 0 3.390 8128 0 1083 507 9718 7993 - 1 6 14 4 38.1 68.00 0 16310 3.552 0.593 0.593 1.000 0.954 0 3.390 8087 0 1079 504 9670 7954 - 1 6 14 5 38.1 68.00 0 16317 3.553 0.590 0.590 1.000 0.954 0 3.389 8047 0 1075 501 9623 7915 - 1 6 15 0 38.1 68.00 0 16323 3.554 0.567 0.567 1.000 0.951 0 3.381 7733 0 1034 481 9248 7605 - 1 6 15 1 38.2 68.00 0 16330 3.555 0.559 0.559 1.000 0.950 0 3.379 7637 0 1022 475 9134 7511 - 1 6 15 2 38.2 68.00 0 16337 3.556 0.551 0.551 1.000 0.949 0 3.376 7519 0 1008 468 8994 7394 - 1 6 15 3 38.2 68.00 0 16343 3.557 0.548 0.548 1.000 0.949 0 3.376 7482 0 1004 465 8951 7357 - 1 6 15 4 38.3 68.00 0 16350 3.558 0.551 0.551 1.000 0.950 0 3.378 7531 0 1012 468 9011 7405 - 1 6 15 5 38.3 68.00 0 16357 3.559 0.559 0.559 1.000 0.950 0 3.382 7646 0 1028 475 9149 7517 - 1 6 16 0 38.4 68.00 0 16377 3.561 0.558 0.558 1.000 0.950 0 3.384 7634 0 1030 474 9138 7508 - 1 6 16 1 38.5 68.00 0 16397 3.564 0.566 0.566 1.000 0.951 0 3.390 7754 0 1050 481 9285 7628 - 1 6 16 2 38.6 68.00 0 16417 3.566 0.576 0.576 1.000 0.952 0 3.397 7901 0 1073 490 9464 7776 - 1 6 16 3 38.7 68.00 0 16437 3.569 0.582 0.582 1.000 0.953 0 3.401 7988 0 1088 495 9571 7864 - 1 6 16 4 38.8 68.00 0 16457 3.572 0.593 0.593 1.000 0.954 0 3.408 8140 0 1113 504 9757 8017 - 1 6 16 5 38.8 68.00 0 16477 3.574 0.603 0.603 1.000 0.955 0 3.415 8283 0 1136 512 9932 8159 - 1 6 17 0 38.7 68.00 0 16437 3.569 0.628 0.628 1.000 0.958 0 3.420 8611 0 1173 533 10317 8472 - 1 6 17 1 38.5 68.00 0 16397 3.564 0.635 0.635 1.000 0.959 0 3.417 8692 0 1176 539 10408 8549 - 1 6 17 2 38.3 68.00 0 16357 3.559 0.642 0.642 1.000 0.960 0 3.415 8775 0 1180 546 10501 8630 - 1 6 17 3 38.1 68.00 0 16317 3.553 0.649 0.649 1.000 0.961 0 3.413 8854 0 1183 552 10588 8703 - 1 6 17 4 37.9 68.00 0 16277 3.548 0.664 0.664 1.000 0.962 0 3.414 9048 0 1200 565 10813 8888 - 1 6 17 5 37.8 68.00 0 16237 3.543 0.671 0.671 1.000 0.963 0 3.412 9120 0 1202 570 10891 8948 - 1 6 18 0 37.6 68.00 0 16203 3.538 0.650 0.650 1.000 0.961 0 3.399 8823 0 1156 552 10531 8653 - 1 6 18 1 37.5 68.00 0 16170 3.534 0.652 0.652 1.000 0.961 0 3.396 8837 0 1151 554 10542 8661 - 1 6 18 2 37.3 68.00 0 16136 3.530 0.667 0.667 1.000 0.963 0 3.397 9027 0 1169 567 10762 8837 - 1 6 18 3 37.2 68.00 0 16103 3.525 0.669 0.669 1.000 0.963 0 3.394 9037 0 1163 568 10768 8832 - 1 6 18 4 37.0 68.00 0 16070 3.521 0.671 0.671 1.000 0.963 0 3.390 9048 0 1158 570 10776 8834 - 1 6 18 5 36.9 68.00 0 16036 3.516 0.673 0.673 1.000 0.963 0 3.387 9072 0 1154 572 10799 8849 - 1 6 19 0 36.6 68.00 0 15970 3.508 0.683 0.683 1.000 0.964 0 3.382 9168 0 1152 580 10900 8928 - 1 6 19 1 36.3 68.00 0 15903 3.499 0.688 0.688 1.000 0.965 0 3.376 9211 0 1143 585 10939 8951 - 1 6 19 2 36.0 68.00 0 15836 3.490 0.695 0.695 1.000 0.966 0 3.370 9276 0 1137 590 11003 8999 - 1 6 19 3 35.7 68.00 0 15769 3.481 0.702 0.702 1.000 0.966 0 3.364 9344 0 1130 597 11071 9052 - 1 6 19 4 35.4 68.00 0 15703 3.472 0.721 0.721 1.000 0.969 0 3.363 9571 0 1143 613 11327 9258 - 1 6 19 5 35.1 68.00 0 15636 3.463 0.730 0.730 1.000 0.970 0 3.358 9651 0 1137 620 11408 9316 - 1 6 20 0 35.0 68.00 0 15623 3.462 0.738 0.738 1.000 0.970 0 3.359 9751 0 1146 627 11523 9410 - 1 6 20 1 34.9 68.00 0 15609 3.460 0.737 0.737 1.000 0.970 0 3.358 9742 0 1141 627 11510 9393 - 1 6 20 2 34.9 68.00 0 15596 3.458 0.753 0.753 1.000 0.972 0 3.362 9942 0 1162 640 11744 9576 - 1 6 20 3 34.8 68.00 0 15583 3.456 0.752 0.752 1.000 0.972 0 3.360 9923 0 1156 639 11718 9540 - 1 6 20 4 34.8 68.00 0 15569 3.454 0.749 0.749 1.000 0.972 0 3.357 9876 0 1148 636 11660 9484 - 1 6 20 5 34.7 68.00 0 15556 3.453 0.743 0.743 1.000 0.971 0 3.353 9793 0 1135 632 11560 9394 + 1 6 12 0 39.9 68.00 0 16710 3.605 0.547 0.547 1.000 0.949 0 3.421 7599 0 1081 465 9145 7528 + 1 6 12 1 39.9 68.00 0 16704 3.604 0.538 0.538 1.000 0.948 0 3.417 7465 0 1061 457 8983 7392 + 1 6 12 2 39.8 68.00 0 16697 3.603 0.528 0.528 1.000 0.947 0 3.412 7330 0 1041 449 8820 7255 + 1 6 12 3 39.8 68.00 0 16690 3.602 0.522 0.522 1.000 0.946 0 3.408 7237 0 1026 443 8707 7159 + 1 6 12 4 39.8 68.00 0 16684 3.601 0.519 0.519 1.000 0.946 0 3.407 7205 0 1021 442 8667 7124 + 1 6 12 5 39.7 68.00 0 16677 3.601 0.519 0.519 1.000 0.946 0 3.406 7195 0 1018 441 8654 7111 + 1 6 13 0 39.4 68.00 0 16610 3.592 0.534 0.534 1.000 0.948 0 3.403 7377 0 1033 454 8864 7282 + 1 6 13 1 39.1 68.00 0 16543 3.583 0.555 0.555 1.000 0.950 0 3.404 7653 0 1061 472 9186 7547 + 1 6 13 2 38.8 68.00 0 16477 3.574 0.567 0.567 1.000 0.951 0 3.400 7789 0 1068 482 9339 7670 + 1 6 13 3 38.5 68.00 0 16410 3.566 0.582 0.582 1.000 0.953 0 3.398 7973 0 1082 495 9549 7845 + 1 6 13 4 38.2 68.00 0 16343 3.557 0.598 0.598 1.000 0.955 0 3.396 8164 0 1095 508 9767 8028 + 1 6 13 5 37.9 68.00 0 16277 3.548 0.609 0.609 1.000 0.956 0 3.392 8290 0 1100 517 9907 8143 + 1 6 14 0 38.0 68.00 0 16283 3.549 0.599 0.599 1.000 0.955 0 3.389 8155 0 1083 509 9746 8018 + 1 6 14 1 38.0 68.00 0 16290 3.550 0.599 0.599 1.000 0.955 0 3.389 8158 0 1085 509 9751 8024 + 1 6 14 2 38.0 68.00 0 16297 3.551 0.598 0.598 1.000 0.955 0 3.390 8149 0 1085 508 9742 8016 + 1 6 14 3 38.1 68.00 0 16303 3.552 0.596 0.596 1.000 0.955 0 3.390 8124 0 1083 506 9713 7993 + 1 6 14 4 38.1 68.00 0 16310 3.552 0.593 0.593 1.000 0.954 0 3.390 8083 0 1078 504 9665 7953 + 1 6 14 5 38.1 68.00 0 16317 3.553 0.589 0.589 1.000 0.954 0 3.389 8042 0 1074 501 9618 7913 + 1 6 15 0 38.1 68.00 0 16323 3.554 0.566 0.566 1.000 0.951 0 3.381 7728 0 1033 481 9242 7604 + 1 6 15 1 38.2 68.00 0 16330 3.555 0.559 0.559 1.000 0.950 0 3.379 7632 0 1022 475 9129 7510 + 1 6 15 2 38.2 68.00 0 16337 3.556 0.550 0.550 1.000 0.949 0 3.376 7514 0 1007 468 8989 7392 + 1 6 15 3 38.2 68.00 0 16343 3.557 0.547 0.547 1.000 0.949 0 3.376 7477 0 1003 465 8945 7355 + 1 6 15 4 38.3 68.00 0 16350 3.558 0.551 0.551 1.000 0.949 0 3.378 7526 0 1011 468 9004 7402 + 1 6 15 5 38.3 68.00 0 16357 3.559 0.559 0.559 1.000 0.950 0 3.382 7638 0 1027 475 9140 7513 + 1 6 16 0 38.4 68.00 0 16377 3.561 0.557 0.557 1.000 0.950 0 3.384 7626 0 1029 474 9129 7502 + 1 6 16 1 38.5 68.00 0 16397 3.564 0.566 0.566 1.000 0.951 0 3.390 7748 0 1049 481 9278 7625 + 1 6 16 2 38.6 68.00 0 16417 3.566 0.576 0.576 1.000 0.952 0 3.396 7896 0 1072 490 9457 7773 + 1 6 16 3 38.7 68.00 0 16437 3.569 0.582 0.582 1.000 0.953 0 3.401 7983 0 1088 495 9565 7862 + 1 6 16 4 38.8 68.00 0 16457 3.572 0.593 0.593 1.000 0.954 0 3.408 8137 0 1112 504 9753 8016 + 1 6 16 5 38.8 68.00 0 16477 3.574 0.603 0.603 1.000 0.955 0 3.415 8282 0 1136 512 9929 8159 + 1 6 17 0 38.7 68.00 0 16437 3.569 0.628 0.628 1.000 0.958 0 3.420 8609 0 1173 533 10315 8473 + 1 6 17 1 38.5 68.00 0 16397 3.564 0.635 0.635 1.000 0.959 0 3.417 8690 0 1176 539 10406 8549 + 1 6 17 2 38.3 68.00 0 16357 3.559 0.642 0.642 1.000 0.960 0 3.415 8773 0 1180 545 10498 8630 + 1 6 17 3 38.1 68.00 0 16317 3.553 0.649 0.649 1.000 0.960 0 3.413 8852 0 1182 551 10586 8703 + 1 6 17 4 37.9 68.00 0 16277 3.548 0.655 0.655 1.000 0.961 0 3.410 8927 0 1184 557 10668 8771 + 1 6 17 5 37.8 68.00 0 16237 3.543 0.672 0.672 1.000 0.963 0 3.412 9130 0 1203 571 10904 8966 + 1 6 18 0 37.6 68.00 0 16203 3.538 0.651 0.651 1.000 0.961 0 3.399 8835 0 1157 553 10545 8666 + 1 6 18 1 37.5 68.00 0 16170 3.534 0.653 0.653 1.000 0.961 0 3.396 8852 0 1153 555 10560 8677 + 1 6 18 2 37.3 68.00 0 16136 3.530 0.655 0.655 1.000 0.961 0 3.393 8871 0 1149 557 10577 8686 + 1 6 18 3 37.2 68.00 0 16103 3.525 0.672 0.672 1.000 0.963 0 3.395 9085 0 1169 571 10826 8887 + 1 6 18 4 37.0 68.00 0 16070 3.521 0.674 0.674 1.000 0.963 0 3.392 9091 0 1163 573 10827 8878 + 1 6 18 5 36.9 68.00 0 16036 3.516 0.677 0.677 1.000 0.964 0 3.389 9120 0 1160 575 10856 8896 + 1 6 19 0 36.6 68.00 0 15970 3.508 0.671 0.671 1.000 0.963 0 3.378 9014 0 1133 570 10717 8780 + 1 6 19 1 36.3 68.00 0 15903 3.499 0.691 0.691 1.000 0.965 0 3.377 9256 0 1149 587 10992 9001 + 1 6 19 2 36.0 68.00 0 15836 3.490 0.697 0.697 1.000 0.966 0 3.371 9311 0 1141 593 11044 9035 + 1 6 19 3 35.7 68.00 0 15769 3.481 0.705 0.705 1.000 0.967 0 3.365 9379 0 1135 599 11113 9087 + 1 6 19 4 35.4 68.00 0 15703 3.472 0.712 0.712 1.000 0.968 0 3.360 9451 0 1128 605 11185 9144 + 1 6 19 5 35.1 68.00 0 15636 3.463 0.732 0.732 1.000 0.970 0 3.359 9686 0 1141 622 11450 9356 + 1 6 20 0 35.0 68.00 0 15623 3.462 0.740 0.740 1.000 0.971 0 3.360 9788 0 1150 629 11567 9447 + 1 6 20 1 34.9 68.00 0 15609 3.460 0.740 0.740 1.000 0.971 0 3.359 9781 0 1146 629 11557 9432 + 1 6 20 2 34.9 68.00 0 15596 3.458 0.739 0.739 1.000 0.971 0 3.356 9759 0 1140 628 11527 9401 + 1 6 20 3 34.8 68.00 0 15583 3.456 0.756 0.756 1.000 0.973 0 3.361 9977 0 1163 643 11782 9600 + 1 6 20 4 34.8 68.00 0 15569 3.454 0.754 0.754 1.000 0.972 0 3.359 9944 0 1156 641 11741 9551 + 1 6 20 5 34.7 68.00 0 15556 3.453 0.749 0.749 1.000 0.972 0 3.355 9877 0 1145 637 11659 9475 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 109 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 109 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 1 6 21 0 34.3 68.00 0 15456 3.439 0.795 0.795 1.000 0.977 0 3.360 10428 0 1183 676 12287 9973 - 1 6 21 1 33.8 68.00 0 15356 3.426 0.805 0.805 1.000 0.978 0 3.351 10505 0 1166 684 12355 10010 - 1 6 21 2 33.3 68.00 0 15256 3.413 0.812 0.812 1.000 0.979 0 3.340 10550 0 1145 690 12385 10025 - 1 6 21 3 32.9 68.00 0 15156 3.399 0.850 0.850 1.000 0.983 0 3.342 10991 0 1166 722 12879 10413 - 1 6 21 4 32.5 68.00 0 15056 3.386 0.863 0.863 1.000 0.985 0 3.334 11110 0 1151 734 12995 10485 - 1 6 21 5 32.0 68.00 0 14955 3.372 0.870 0.870 1.000 0.985 0 3.323 11143 0 1126 739 13008 10484 - 1 6 22 0 31.7 68.00 0 14889 3.363 0.921 0.921 1.000 0.991 0 3.333 11762 0 1168 783 13713 11045 - 1 6 22 1 31.4 68.00 0 14822 3.354 0.957 0.957 1.000 0.995 0 3.338 12178 0 1189 813 14180 11410 - 1 6 22 2 31.1 68.00 0 14755 3.345 0.973 0.973 1.000 0.997 0 3.335 12352 0 1184 827 14364 11547 - 1 6 22 3 30.8 68.00 0 14689 3.336 0.990 0.990 1.000 0.999 0 3.333 12526 0 1179 842 14547 11686 - 1 6 22 4 30.5 68.00 0 14622 0 0 0 1.000 0 0.557 0 0 13914 0 473 14387 11831 - 1 6 22 5 30.2 68.00 0 14555 3.318 0.998 0.998 1.000 1.000 0 3.317 12537 0 1136 848 14521 11648 - 1 6 23 0 30.2 68.00 0 14555 0 0 0 1.000 0 0.575 0 0 14363 0 488 14852 12203 - 1 6 23 1 30.2 68.00 0 14555 0 0 0 1.000 0 0.567 0 0 14170 0 482 14652 12040 - 1 6 23 2 30.2 68.00 0 14555 0 0 0 1.000 0 0.559 0 0 13967 0 475 14441 11861 - 1 6 23 3 30.2 68.00 0 14555 0 0 0 1.000 0 0.565 0 0 14124 0 480 14605 11988 - 1 6 23 4 30.2 68.00 0 14555 0 0 0 1.000 0 0.556 0 0 13893 0 472 14365 11790 - 1 6 23 5 30.2 68.00 0 14555 0 0 0 1.000 0 0.558 0 0 13947 0 474 14422 11831 + 1 6 21 0 34.3 68.00 0 15456 3.439 0.795 0.795 1.000 0.977 0 3.360 10429 0 1183 676 12288 9976 + 1 6 21 1 33.8 68.00 0 15356 3.426 0.806 0.806 1.000 0.978 0 3.351 10521 0 1168 685 12374 10028 + 1 6 21 2 33.3 68.00 0 15256 3.413 0.813 0.813 1.000 0.979 0 3.341 10559 0 1146 691 12395 10036 + 1 6 21 3 32.9 68.00 0 15156 3.399 0.850 0.850 1.000 0.983 0 3.342 10995 0 1166 723 12884 10420 + 1 6 21 4 32.5 68.00 0 15056 3.386 0.863 0.863 1.000 0.985 0 3.333 11107 0 1150 733 12991 10485 + 1 6 21 5 32.0 68.00 0 14955 3.372 0.870 0.870 1.000 0.985 0 3.323 11140 0 1125 739 13004 10483 + 1 6 22 0 31.7 68.00 0 14889 3.363 0.921 0.921 1.000 0.991 0 3.333 11758 0 1168 782 13708 11044 + 1 6 22 1 31.4 68.00 0 14822 3.354 0.956 0.956 1.000 0.995 0 3.338 12165 0 1187 812 14164 11400 + 1 6 22 2 31.1 68.00 0 14755 3.345 0.972 0.972 1.000 0.997 0 3.335 12337 0 1183 826 14347 11536 + 1 6 22 3 30.8 68.00 0 14689 3.336 0.989 0.989 1.000 0.999 0 3.332 12511 0 1178 841 14529 11675 + 1 6 22 4 30.5 68.00 0 14622 0 0 0 1.000 0 0.556 0 0 13898 0 472 14371 11820 + 1 6 22 5 30.2 68.00 0 14555 3.318 0.996 0.996 1.000 1.000 0 3.317 12521 0 1135 847 14503 11636 + 1 6 23 0 30.2 68.00 0 14555 0 0 0 1.000 0 0.574 0 0 14348 0 488 14836 12192 + 1 6 23 1 30.2 68.00 0 14555 0 0 0 1.000 0 0.566 0 0 14156 0 481 14637 12030 + 1 6 23 2 30.2 68.00 0 14555 0 0 0 1.000 0 0.558 0 0 13953 0 474 14428 11851 + 1 6 23 3 30.2 68.00 0 14555 0 0 0 1.000 0 0.565 0 0 14118 0 480 14598 11984 + 1 6 23 4 30.2 68.00 0 14555 0 0 0 1.000 0 0.556 0 0 13888 0 472 14360 11788 + 1 6 23 5 30.2 68.00 0 14555 0 0 0 1.000 0 0.558 0 0 13944 0 474 14418 11830 @@ -6927,7 +6927,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 110 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 110 @@ -6990,7 +6990,7 @@ Subhourly User-defined Report, Fri 14-Aug 8 14 7 5 77.2 77.60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 111 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 111 @@ -7003,46 +7003,46 @@ CZ16 Dual Fuel 8 14 8 3 78.4 77.80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 8 4 78.7 77.87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 8 5 79.0 77.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 8 14 9 0 79.3 78.00 0 0 0 .0045 .0045 1.000 1.000 0 0 -79 0 0 4 -75 -64 + 8 14 9 0 79.3 78.00 0 0 0 .0045 .0045 1.000 1.000 0 0 -79 0 0 4 -75 -65 8 14 9 1 79.6 78.00 0 0 0 0.160 0.160 1.000 1.000 0 0 -2786 0 0 136 -2650 -2269 8 14 9 2 79.9 78.00 0 0 0 0.174 0.174 1.000 1.000 0 0 -3029 0 0 148 -2881 -2466 8 14 9 3 80.2 78.00 0 0 0 0.188 0.188 1.000 1.000 0 0 -3263 0 0 160 -3103 -2658 8 14 9 4 80.5 78.00 0 0 0 0.202 0.202 1.000 1.000 0 0 -3511 0 0 172 -3338 -2861 8 14 9 5 80.8 78.00 0 0 0 0.218 0.218 1.000 1.000 0 0 -3768 0 0 185 -3583 -3070 - 8 14 10 0 81.3 78.00 0 0 0 0.226 0.226 1.000 1.000 0 0 -3909 0 0 193 -3717 -3188 + 8 14 10 0 81.3 78.00 0 0 0 0.226 0.226 1.000 1.000 0 0 -3910 0 0 193 -3717 -3188 8 14 10 1 81.8 78.00 0 0 0 0.244 0.244 1.000 1.000 0 0 -4206 0 0 208 -3998 -3428 8 14 10 2 82.3 78.00 0 0 0 0.263 0.263 1.000 1.000 0 0 -4516 0 0 224 -4292 -3679 8 14 10 3 82.8 78.00 0 0 0 0.281 0.281 1.000 1.000 0 0 -4806 0 0 239 -4567 -3912 - 8 14 10 4 83.3 78.00 0 0 0 0.299 0.299 1.000 1.000 0 0 -5108 0 0 255 -4854 -4156 - 8 14 10 5 83.8 78.00 0 0 0 0.317 0.317 1.000 1.000 0 0 -5393 0 0 269 -5123 -4384 + 8 14 10 4 83.3 78.00 0 0 0 0.299 0.299 1.000 1.000 0 0 -5108 0 0 255 -4854 -4157 + 8 14 10 5 83.8 78.00 0 0 0 0.317 0.317 1.000 1.000 0 0 -5393 0 0 269 -5124 -4384 8 14 11 0 83.9 78.00 0 0 0 0.261 0.261 1.000 1.000 0 0 -4449 0 0 222 -4227 -3615 8 14 11 1 84.0 78.00 0 0 0 0.269 0.269 1.000 1.000 0 0 -4582 0 0 229 -4353 -3721 8 14 11 2 84.1 78.00 0 0 0 0.278 0.278 1.000 1.000 0 0 -4736 0 0 237 -4499 -3841 - 8 14 11 3 84.2 78.00 0 0 0 0.287 0.287 1.000 1.000 0 0 -4888 0 0 245 -4643 -3961 + 8 14 11 3 84.2 78.00 0 0 0 0.287 0.287 1.000 1.000 0 0 -4888 0 0 245 -4644 -3961 8 14 11 4 84.3 78.00 0 0 0 0.296 0.296 1.000 1.000 0 0 -5033 0 0 252 -4781 -4074 - 8 14 11 5 84.4 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5180 0 0 259 -4921 -4190 + 8 14 11 5 84.4 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5181 0 0 259 -4921 -4190 8 14 12 0 84.7 78.00 0 0 0 0.286 0.286 1.000 1.000 0 0 -4859 0 0 244 -4616 -3925 8 14 12 1 85.0 78.00 0 0 0 0.295 0.295 1.000 1.000 0 0 -5001 0 0 251 -4750 -4034 8 14 12 2 85.3 78.00 0 0 0 0.305 0.305 1.000 1.000 0 0 -5162 0 0 260 -4902 -4157 8 14 12 3 85.6 78.00 0 0 0 0.316 0.316 1.000 1.000 0 0 -5331 0 0 269 -5062 -4287 8 14 12 4 85.9 78.00 0 0 0 0.325 0.325 1.000 1.000 0 0 -5490 0 0 277 -5213 -4409 - 8 14 12 5 86.2 78.00 0 0 0 0.335 0.335 1.000 1.000 0 0 -5643 0 0 285 -5358 -4525 + 8 14 12 5 86.2 78.00 0 0 0 0.335 0.335 1.000 1.000 0 0 -5644 0 0 285 -5358 -4525 8 14 13 0 86.4 78.00 0 0 0 0.344 0.344 1.000 1.000 0 0 -5780 0 0 292 -5488 -4627 8 14 13 1 86.7 78.00 0 0 0 0.354 0.354 1.000 1.000 0 0 -5951 0 0 301 -5649 -4756 8 14 13 2 87.0 78.00 0 0 0 0.365 0.365 1.000 1.000 0 0 -6127 0 0 311 -5817 -4890 8 14 13 3 87.3 78.00 0 0 0 0.376 0.376 1.000 1.000 0 0 -6301 0 0 320 -5981 -5021 8 14 13 4 87.5 78.00 0 0 0 0.387 0.387 1.000 1.000 0 0 -6478 0 0 329 -6148 -5154 - 8 14 13 5 87.8 78.00 0 0 0 0.398 0.398 1.000 1.000 0 0 -6654 0 0 339 -6316 -5286 + 8 14 13 5 87.8 78.00 0 0 0 0.398 0.398 1.000 1.000 0 0 -6655 0 0 339 -6316 -5286 8 14 14 0 87.8 78.00 0 0 0 0.451 0.451 1.000 1.000 0 0 -7536 0 0 384 -7152 -5976 8 14 14 1 87.7 78.00 0 0 0 0.465 0.465 1.000 1.000 0 0 -7767 0 0 395 -7372 -6151 - 8 14 14 2 87.7 78.00 0 0 0 0.477 0.477 1.000 1.000 0 0 -7978 0 0 406 -7572 -6312 - 8 14 14 3 87.7 78.00 0 0 0 0.489 0.489 1.000 1.000 0 0 -8180 0 0 416 -7764 -6463 - 8 14 14 4 87.7 78.00 0 0 0 0.490 0.490 1.000 1.000 0 0 -8194 0 0 417 -7777 -6466 + 8 14 14 2 87.7 78.00 0 0 0 0.477 0.477 1.000 1.000 0 0 -7978 0 0 406 -7573 -6312 + 8 14 14 3 87.7 78.00 0 0 0 0.489 0.489 1.000 1.000 0 0 -8181 0 0 416 -7764 -6463 + 8 14 14 4 87.7 78.00 0 0 0 0.490 0.490 1.000 1.000 0 0 -8194 0 0 417 -7778 -6466 8 14 14 5 87.6 78.00 0 0 0 0.498 0.498 1.000 1.000 0 0 -8333 0 0 424 -7910 -6570 8 14 15 0 87.3 78.00 0 0 0 0.553 0.553 1.000 1.000 0 0 -9281 0 0 471 -8810 -7308 8 14 15 1 87.0 78.00 0 0 0 0.561 0.561 1.000 1.000 0 0 -9426 0 0 477 -8949 -7414 8 14 15 2 86.7 78.00 0 0 0 0.566 0.566 1.000 1.000 0 0 -9525 0 0 482 -9044 -7487 - 8 14 15 3 86.4 78.00 0 0 0 0.572 0.572 1.000 1.000 0 0 -9651 0 0 487 -9164 -7580 + 8 14 15 3 86.4 78.00 0 0 0 0.572 0.572 1.000 1.000 0 0 -9652 0 0 487 -9164 -7580 8 14 15 4 86.1 78.00 0 0 0 0.577 0.577 1.000 1.000 0 0 -9752 0 0 491 -9261 -7651 8 14 15 5 85.8 78.00 0 0 0 0.579 0.579 1.000 1.000 0 0 -9802 0 0 493 -9309 -7684 8 14 16 0 85.7 78.00 0 0 0 0.612 0.612 1.000 1.000 0 0 -10368 0 0 521 -9847 -8120 @@ -7053,7 +7053,7 @@ CZ16 Dual Fuel 8 14 16 5 85.3 78.00 0 0 0 0.634 0.634 1.000 1.000 0 0 -10773 0 0 540 -10233 -8408 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 112 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 112 @@ -7070,17 +7070,17 @@ CZ16 Dual Fuel 8 14 18 1 84.1 78.00 0 0 0 0.654 0.654 1.000 1.000 0 0 -11173 0 0 556 -10617 -8695 8 14 18 2 84.1 78.00 0 0 0 0.645 0.645 1.000 1.000 0 0 -11025 0 0 549 -10476 -8579 8 14 18 3 84.1 78.00 0 0 0 0.630 0.630 1.000 1.000 0 0 -10768 0 0 536 -10232 -8378 - 8 14 18 4 84.0 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10389 0 0 517 -9872 -8082 + 8 14 18 4 84.0 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10389 0 0 517 -9873 -8082 8 14 18 5 84.0 78.00 0 0 0 0.582 0.582 1.000 1.000 0 0 -9962 0 0 495 -9466 -7749 8 14 19 0 83.7 78.00 0 0 0 0.565 0.565 1.000 1.000 0 0 -9691 0 0 481 -9210 -7537 8 14 19 1 83.3 78.00 0 0 0 0.533 0.533 1.000 1.000 0 0 -9151 0 0 453 -8698 -7119 - 8 14 19 2 82.9 78.00 0 0 0 0.499 0.499 1.000 1.000 0 0 -8582 0 0 424 -8158 -6678 + 8 14 19 2 82.9 78.00 0 0 0 0.499 0.499 1.000 1.000 0 0 -8583 0 0 424 -8158 -6678 8 14 19 3 82.6 78.00 0 0 0 0.465 0.465 1.000 1.000 0 0 -8024 0 0 396 -7628 -6244 8 14 19 4 82.2 78.00 0 0 0 0.434 0.434 1.000 1.000 0 0 -7495 0 0 369 -7126 -5832 - 8 14 19 5 81.9 78.00 0 0 0 0.403 0.403 1.000 1.000 0 0 -6983 0 0 343 -6640 -5434 + 8 14 19 5 81.9 78.00 0 0 0 0.403 0.403 1.000 1.000 0 0 -6983 0 0 343 -6640 -5435 8 14 20 0 81.3 78.00 0 0 0 0.330 0.330 1.000 1.000 0 0 -5724 0 0 280 -5444 -4456 8 14 20 1 80.7 78.00 0 0 0 0.304 0.304 1.000 1.000 0 0 -5319 0 0 258 -5061 -4145 - 8 14 20 2 80.1 78.00 0 0 0 0.283 0.283 1.000 1.000 0 0 -4965 0 0 241 -4724 -3867 + 8 14 20 2 80.1 78.00 0 0 0 0.283 0.283 1.000 1.000 0 0 -4965 0 0 241 -4725 -3868 8 14 20 3 79.5 78.00 0 0 0 0.264 0.264 1.000 1.000 0 0 -4637 0 0 225 -4413 -3612 8 14 20 4 78.9 78.00 0 0 0 0.246 0.246 1.000 1.000 0 0 -4326 0 0 209 -4117 -3370 8 14 20 5 78.3 78.00 0 0 0 0.229 0.229 1.000 1.000 0 0 -4028 0 0 194 -3834 -3139 @@ -7090,9 +7090,9 @@ CZ16 Dual Fuel 8 14 21 3 76.2 78.00 0 0 0 0.156 0.156 1.000 1.000 0 0 -2768 0 0 133 -2635 -2159 8 14 21 4 75.7 78.00 0 0 0 0.142 0.142 1.000 1.000 0 0 -2528 0 0 121 -2407 -1973 8 14 21 5 75.2 78.00 0 0 0 0.130 0.130 1.000 1.000 0 0 -2302 0 0 110 -2192 -1798 - 8 14 22 0 75.2 78.00 0 0 0 .0965 .0965 1.000 1.000 0 0 -1714 0 0 82 -1632 -1339 + 8 14 22 0 75.2 78.00 0 0 0 .0966 .0966 1.000 1.000 0 0 -1715 0 0 82 -1632 -1339 8 14 22 1 75.1 78.00 0 0 0 .0880 .0880 1.000 1.000 0 0 -1562 0 0 75 -1487 -1220 - 8 14 22 2 75.1 78.00 0 0 0 .0804 .0804 1.000 1.000 0 0 -1427 0 0 68 -1358 -1115 + 8 14 22 2 75.1 78.00 0 0 0 .0804 .0804 1.000 1.000 0 0 -1427 0 0 68 -1359 -1115 8 14 22 3 75.1 78.00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 22 4 75.0 77.98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 14 22 5 75.0 77.97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -7116,7 +7116,7 @@ Subhourly User-defined Report, Sat 15-Aug 8 15 0 5 73.4 77.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 113 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 113 @@ -7168,25 +7168,25 @@ CZ16 Dual Fuel 8 15 8 0 79.3 77.82 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 15 8 1 79.6 77.89 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 15 8 2 79.9 77.96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 8 15 8 3 80.2 78.00 0 0 0 .0643 .0643 1.000 1.000 0 0 -1117 0 0 55 -1062 -912 - 8 15 8 4 80.5 78.00 0 0 0 0.174 0.174 1.000 1.000 0 0 -3012 0 0 148 -2864 -2455 + 8 15 8 3 80.2 78.00 0 0 0 .0643 .0643 1.000 1.000 0 0 -1117 0 0 55 -1063 -912 + 8 15 8 4 80.5 78.00 0 0 0 0.174 0.174 1.000 1.000 0 0 -3012 0 0 148 -2865 -2455 8 15 8 5 80.8 78.00 0 0 0 0.187 0.187 1.000 1.000 0 0 -3243 0 0 159 -3083 -2644 8 15 9 0 81.1 78.00 0 0 0 0.187 0.187 1.000 1.000 0 0 -3235 0 0 159 -3075 -2641 - 8 15 9 1 81.4 78.00 0 0 0 0.203 0.203 1.000 1.000 0 0 -3501 0 0 173 -3328 -2859 + 8 15 9 1 81.4 78.00 0 0 0 0.203 0.203 1.000 1.000 0 0 -3501 0 0 173 -3329 -2859 8 15 9 2 81.7 78.00 0 0 0 0.222 0.222 1.000 1.000 0 0 -3822 0 0 189 -3633 -3121 8 15 9 3 82.0 78.00 0 0 0 0.239 0.239 1.000 1.000 0 0 -4119 0 0 204 -3915 -3362 8 15 9 4 82.3 78.00 0 0 0 0.255 0.255 1.000 1.000 0 0 -4380 0 0 217 -4163 -3574 8 15 9 5 82.6 78.00 0 0 0 0.271 0.271 1.000 1.000 0 0 -4644 0 0 230 -4414 -3790 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 114 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 114 CZ16 Dual Fuel ------------------------------------------------------------------------------ - 8 15 10 0 82.9 78.00 0 0 0 0.277 0.277 1.000 1.000 0 0 -4741 0 0 236 -4506 -3867 + 8 15 10 0 82.9 78.00 0 0 0 0.277 0.277 1.000 1.000 0 0 -4742 0 0 236 -4506 -3867 8 15 10 1 83.3 78.00 0 0 0 0.292 0.292 1.000 1.000 0 0 -4986 0 0 248 -4738 -4064 8 15 10 2 83.7 78.00 0 0 0 0.308 0.308 1.000 1.000 0 0 -5247 0 0 262 -4985 -4275 8 15 10 3 84.0 78.00 0 0 0 0.324 0.324 1.000 1.000 0 0 -5508 0 0 275 -5233 -4485 @@ -7213,36 +7213,36 @@ CZ16 Dual Fuel 8 15 14 0 89.6 78.00 0 0 0 0.518 0.518 1.000 1.000 0 0 -8576 0 0 441 -8135 -6790 8 15 14 1 89.6 78.00 0 0 0 0.531 0.531 1.000 1.000 0 0 -8787 0 0 452 -8336 -6947 8 15 14 2 89.6 78.00 0 0 0 0.542 0.542 1.000 1.000 0 0 -8971 0 0 461 -8510 -7086 - 8 15 14 3 89.6 78.00 0 0 0 0.553 0.553 1.000 1.000 0 0 -9160 0 0 471 -8689 -7226 + 8 15 14 3 89.6 78.00 0 0 0 0.553 0.553 1.000 1.000 0 0 -9160 0 0 471 -8689 -7227 8 15 14 4 89.6 78.00 0 0 0 0.561 0.561 1.000 1.000 0 0 -9295 0 0 478 -8817 -7323 8 15 14 5 89.6 78.00 0 0 0 0.571 0.571 1.000 1.000 0 0 -9456 0 0 486 -8970 -7440 8 15 15 0 89.6 78.00 0 0 0 0.635 0.635 1.000 1.000 0 0 -10522 0 0 541 -9981 -8266 - 8 15 15 1 89.5 78.00 0 0 0 0.646 0.646 1.000 1.000 0 0 -10712 0 0 550 -10161 -8404 + 8 15 15 1 89.5 78.00 0 0 0 0.646 0.646 1.000 1.000 0 0 -10712 0 0 550 -10162 -8404 8 15 15 2 89.5 78.00 0 0 0 0.657 0.657 1.000 1.000 0 0 -10896 0 0 559 -10337 -8541 8 15 15 3 89.5 78.00 0 0 0 0.667 0.667 1.000 1.000 0 0 -11061 0 0 568 -10493 -8661 8 15 15 4 89.4 78.00 0 0 0 0.674 0.674 1.000 1.000 0 0 -11186 0 0 574 -10612 -8749 8 15 15 5 89.4 78.00 0 0 0 0.679 0.679 1.000 1.000 0 0 -11271 0 0 578 -10693 -8806 - 8 15 16 0 89.1 78.00 0 0 0 0.708 0.708 1.000 1.000 0 0 -11758 0 0 602 -11155 -9175 + 8 15 16 0 89.1 78.00 0 0 0 0.708 0.708 1.000 1.000 0 0 -11758 0 0 602 -11156 -9175 8 15 16 1 88.9 78.00 0 0 0 0.711 0.711 1.000 1.000 0 0 -11838 0 0 605 -11232 -9229 - 8 15 16 2 88.6 78.00 0 0 0 0.713 0.713 1.000 1.000 0 0 -11879 0 0 606 -11273 -9257 + 8 15 16 2 88.6 78.00 0 0 0 0.713 0.713 1.000 1.000 0 0 -11880 0 0 606 -11273 -9257 8 15 16 3 88.3 78.00 0 0 0 0.711 0.711 1.000 1.000 0 0 -11867 0 0 605 -11262 -9240 8 15 16 4 88.1 78.00 0 0 0 0.706 0.706 1.000 1.000 0 0 -11800 0 0 600 -11200 -9182 - 8 15 16 5 87.8 78.00 0 0 0 0.697 0.697 1.000 1.000 0 0 -11683 0 0 593 -11090 -9085 + 8 15 16 5 87.8 78.00 0 0 0 0.697 0.697 1.000 1.000 0 0 -11683 0 0 593 -11090 -9086 8 15 17 0 87.5 78.00 0 0 0 0.705 0.705 1.000 1.000 0 0 -11828 0 0 600 -11228 -9192 8 15 17 1 87.1 78.00 0 0 0 0.695 0.695 1.000 1.000 0 0 -11689 0 0 591 -11097 -9080 8 15 17 2 86.8 78.00 0 0 0 0.683 0.683 1.000 1.000 0 0 -11513 0 0 581 -10932 -8940 8 15 17 3 86.5 78.00 0 0 0 0.671 0.671 1.000 1.000 0 0 -11330 0 0 571 -10759 -8795 8 15 17 4 86.2 78.00 0 0 0 0.659 0.659 1.000 1.000 0 0 -11144 0 0 561 -10583 -8647 - 8 15 17 5 85.8 78.00 0 0 0 0.643 0.643 1.000 1.000 0 0 -10896 0 0 547 -10349 -8453 - 8 15 18 0 85.5 78.00 0 0 0 0.657 0.657 1.000 1.000 0 0 -11163 0 0 559 -10603 -8658 + 8 15 17 5 85.8 78.00 0 0 0 0.643 0.643 1.000 1.000 0 0 -10897 0 0 547 -10349 -8453 + 8 15 18 0 85.5 78.00 0 0 0 0.657 0.657 1.000 1.000 0 0 -11163 0 0 559 -10604 -8658 8 15 18 1 85.1 78.00 0 0 0 0.643 0.643 1.000 1.000 0 0 -10939 0 0 547 -10392 -8483 8 15 18 2 84.7 78.00 0 0 0 0.627 0.627 1.000 1.000 0 0 -10686 0 0 533 -10153 -8288 8 15 18 3 84.4 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10377 0 0 517 -9860 -8049 8 15 18 4 84.0 78.00 0 0 0 0.593 0.593 1.000 1.000 0 0 -10150 0 0 505 -9645 -7872 - 8 15 18 5 83.7 78.00 0 0 0 0.566 0.566 1.000 1.000 0 0 -9712 0 0 482 -9230 -7533 + 8 15 18 5 83.7 78.00 0 0 0 0.566 0.566 1.000 1.000 0 0 -9712 0 0 482 -9230 -7534 ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 115 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 115 @@ -7251,7 +7251,7 @@ CZ16 Dual Fuel 8 15 19 0 83.1 78.00 0 0 0 0.552 0.552 1.000 1.000 0 0 -9489 0 0 469 -9019 -7362 8 15 19 1 82.6 78.00 0 0 0 0.523 0.523 1.000 1.000 0 0 -9018 0 0 445 -8573 -6999 - 8 15 19 2 82.0 78.00 0 0 0 0.492 0.492 1.000 1.000 0 0 -8513 0 0 419 -8094 -6609 + 8 15 19 2 82.0 78.00 0 0 0 0.492 0.492 1.000 1.000 0 0 -8513 0 0 419 -8095 -6610 8 15 19 3 81.5 78.00 0 0 0 0.459 0.459 1.000 1.000 0 0 -7963 0 0 390 -7573 -6185 8 15 19 4 81.0 78.00 0 0 0 0.427 0.427 1.000 1.000 0 0 -7426 0 0 363 -7063 -5768 8 15 19 5 80.4 78.00 0 0 0 0.393 0.393 1.000 1.000 0 0 -6863 0 0 335 -6528 -5332 @@ -7261,7 +7261,7 @@ CZ16 Dual Fuel 8 15 20 3 79.3 78.00 0 0 0 0.267 0.267 1.000 1.000 0 0 -4687 0 0 227 -4460 -3644 8 15 20 4 79.1 78.00 0 0 0 0.252 0.252 1.000 1.000 0 0 -4432 0 0 215 -4218 -3446 8 15 20 5 78.8 78.00 0 0 0 0.238 0.238 1.000 1.000 0 0 -4198 0 0 203 -3995 -3265 - 8 15 21 0 78.7 78.00 0 0 0 0.214 0.214 1.000 1.000 0 0 -3764 0 0 182 -3583 -2929 + 8 15 21 0 78.7 78.00 0 0 0 0.214 0.214 1.000 1.000 0 0 -3765 0 0 182 -3583 -2929 8 15 21 1 78.6 78.00 0 0 0 0.202 0.202 1.000 1.000 0 0 -3558 0 0 172 -3386 -2769 8 15 21 2 78.4 78.00 0 0 0 0.191 0.191 1.000 1.000 0 0 -3374 0 0 163 -3212 -2627 8 15 21 3 78.3 78.00 0 0 0 0.181 0.181 1.000 1.000 0 0 -3197 0 0 154 -3043 -2489 @@ -7269,7 +7269,7 @@ CZ16 Dual Fuel 8 15 21 5 78.1 78.00 0 0 0 0.163 0.163 1.000 1.000 0 0 -2872 0 0 138 -2734 -2239 8 15 22 0 77.3 78.00 0 0 0 0.125 0.125 1.000 1.000 0 0 -2214 0 0 106 -2108 -1727 8 15 22 1 76.5 78.00 0 0 0 0.110 0.110 1.000 1.000 0 0 -1965 0 0 94 -1871 -1534 - 8 15 22 2 75.7 78.00 0 0 0 .0961 .0961 1.000 1.000 0 0 -1719 0 0 82 -1637 -1343 + 8 15 22 2 75.7 78.00 0 0 0 .0961 .0961 1.000 1.000 0 0 -1719 0 0 82 -1638 -1343 8 15 22 3 75.0 77.99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 15 22 4 74.2 77.96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 15 22 5 73.4 77.92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -7284,7 +7284,7 @@ CZ16 Dual Fuel ! Log for Run 004: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -7305,7 +7305,7 @@ Input for Run 004: ------------------------------------------------------------------------------ -! ashp_dfng 004 Fri 27-Aug-21 11:08:24 am Page 116 +! ashp_dfng 004 Wed 27-Oct-21 9:52:01 am Page 116 @@ -7318,8 +7318,8 @@ Monthly Energy Use, meter "MtrElec" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 5.938 0 0.845 4.471 0 0 0 0 0.318 0.0561 0 0.0984 0 0.200 0.766 0.0523 0.150 0 0 0 .00748 0 0 0 -1.027 -Feb 4.879 0 0.550 4.103 0 0 0 0 0.248 0.0507 0 0.0768 0 0.168 0.636 0.0441 0.135 0 0 0 .00658 0 0 0 -1.140 +Jan 5.937 0 0.845 4.471 0 0 0 0 0.318 0.0561 0 0.0984 0 0.200 0.766 0.0523 0.150 0 0 0 .00748 0 0 0 -1.027 +Feb 4.879 0 0.551 4.103 0 0 0 0 0.248 0.0507 0 0.0768 0 0.168 0.636 0.0441 0.135 0 0 0 .00658 0 0 0 -1.140 Mar 2.766 0 0.959 1.782 0 0 0 0 0.249 0.0561 0 0.0759 0 0.171 0.676 0.0448 0.149 0 0 0 .00734 0 0 0 -1.404 Apr 2.958 0 0.893 2.199 0 0 0 0 0.249 0.0543 0 0.0863 0 0.151 0.645 0.0395 0.145 0 0 0 .00588 0 0 0 -1.510 May -0.446 0 0.290 0.208 0 0 0 0 0.0632 0.0561 0 0.0295 0 0.141 0.625 0.0369 0.153 0 0 0 .00609 0 0 0 -2.055 @@ -7328,8 +7328,8 @@ Jul -1.032 0.0248 0.0182 0 0 0 0 0.0937 .00342 0.0561 0 Aug -0.728 0.139 0 0 0 0 0 0.157 0 0.0561 0 0 0 0.148 0.648 0.0387 0.173 0 0 0 .00629 0 0 0 -2.094 Sep -0.602 .00837 0.0451 0.0145 0 0 0 0.0673 .00904 0.0543 0 .00696 0 0.159 0.660 0.0417 0.157 0 0 0 .00611 0 0 0 -1.832 Oct 0.859 0 0.232 0.772 0 0 0 0.0209 0.0710 0.0561 0 0.0285 0 0.180 0.726 0.0470 0.154 0 0 0 .00629 0 0 0 -1.435 -Nov 2.538 0 0.749 1.331 0 0 0 0 0.192 0.0544 0 0.0554 0 0.189 0.731 0.0494 0.146 0 0 0 .00747 0 0 0 -0.965 -Dec 5.291 0 0.732 3.909 0 0 0 0 0.277 0.0561 0 0.0778 0 0.201 0.775 0.0527 0.150 0 0 0 .00799 0 0 0 -0.946 +Nov 2.538 0 0.749 1.331 0 0 0 0 0.191 0.0544 0 0.0554 0 0.189 0.731 0.0494 0.146 0 0 0 .00747 0 0 0 -0.965 +Dec 5.292 0 0.732 3.909 0 0 0 0 0.277 0.0561 0 0.0778 0 0.201 0.775 0.0527 0.150 0 0 0 .00799 0 0 0 -0.946 Yr 21.627 0.219 5.391 18.796 0 0 0 0.379 1.694 0.661 0 0.542 0 1.975 8.093 0.517 1.833 0 0 0 0.0805 0 0 0 -18.55 @@ -7368,7 +7368,7 @@ HVAC Cooling Info ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 117 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 117 @@ -7431,7 +7431,7 @@ HVAC Heating Info ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 118 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 118 @@ -7494,7 +7494,7 @@ Hourly User-defined Report, Mon 05-Jan 1 5 18 37.9 0.566 0 8 0 0 0 1 0 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 119 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 119 @@ -7557,7 +7557,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 120 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 120 @@ -7620,7 +7620,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 .00024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .00024 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 121 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 121 @@ -7644,20 +7644,20 @@ Monthly User-defined Report Month hrsOn hrsOnAux qh qcSen qcLat qFan qDefrost qAux ----- ----- -------- ------- ------- ------- ------- ------- ------- - 1 208.0 166.398 3042 0 0 318 311 4160 - 2 133.9 157.433 2038 0 0 248 167 3936 - 3 236.2 56.834 3457 0 0 249 361 1421 + 1 208.0 166.394 3042 0 0 318 311 4160 + 2 133.9 157.446 2038 0 0 248 167 3936 + 3 236.2 56.834 3456 0 0 249 361 1421 4 219.3 73.666 3152 0 0 249 358 1842 - 5 69.90 4.461 1058 0 0 63 97 112 + 5 69.89 4.460 1058 0 0 63 97 111 6 29.49 0 314 -196 -12 25 6 0 7 10.54 0 75 -110 -11 9 0 0 8 36.17 0 0 -620 -3 31 0 0 9 12.97 0 164 -41 0 11 15 0 10 54.94 28.632 867 0 0 71 56 716 - 11 182.0 43.308 2732 0 0 192 249 1083 + 11 182.0 43.307 2732 0 0 191 249 1083 12 178.2 147.382 2709 0 0 277 224 3685 - Yr 1372 678.113 19608 -968 -26 1742 1843 16953 + Yr 1372 678.120 19608 -968 -26 1742 1843 16953 @@ -7683,7 +7683,7 @@ Monthly User-defined Report ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 122 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 122 @@ -7746,7 +7746,7 @@ Subhourly User-defined Report, Sun 04-Jan 1 4 7 5 21.0 68.00 0 850 0 0 0 1.000 0 0.715 0 0 17883 0 608 18491 15382 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 123 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 123 @@ -7809,7 +7809,7 @@ CZ16 Dual Fuel 1 4 16 5 25.9 68.00 0 850 0 0 0 1.000 0 0.392 0 0 9789 0 333 10122 8429 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 124 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 124 @@ -7872,7 +7872,7 @@ Subhourly User-defined Report, Mon 05-Jan 1 5 0 5 26.2 68.00 0 850 0 0 0 1.000 0 0.721 0 0 18025 0 613 18638 15354 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 125 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 125 @@ -7935,7 +7935,7 @@ CZ16 Dual Fuel 1 5 9 5 38.1 68.00 0 16317 3.553 0.337 0.337 1.000 0.925 0 3.288 4592 0 613 286 5491 4378 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 126 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 126 @@ -7998,7 +7998,7 @@ CZ16 Dual Fuel 1 5 18 5 37.9 68.00 0 16277 3.548 0.640 0.640 1.000 0.960 0 3.404 8723 0 1157 544 10424 8491 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 127 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 127 @@ -8061,7 +8061,7 @@ Subhourly User-defined Report, Tue 06-Jan 1 6 2 5 37.2 68.00 0 16116 3.527 0.820 0.820 1.000 0.980 0 3.456 11090 0 1431 697 13218 10821 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 128 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 128 @@ -8124,7 +8124,7 @@ CZ16 Dual Fuel 1 6 11 5 39.9 68.00 0 16717 3.606 0.568 0.568 1.000 0.951 0 3.431 7893 0 1124 483 9499 7810 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 129 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 129 @@ -8187,7 +8187,7 @@ CZ16 Dual Fuel 1 6 20 5 34.7 68.00 0 850 0 0 0 1.000 0 0.402 0 0 10052 0 342 10394 8578 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 130 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 130 @@ -8250,7 +8250,7 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 131 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 131 @@ -8313,7 +8313,7 @@ Subhourly User-defined Report, Fri 14-Aug 8 14 7 5 77.2 77.60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 132 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 132 @@ -8376,7 +8376,7 @@ CZ16 Dual Fuel 8 14 16 5 85.3 78.00 0 0 0 0.634 0.634 1.000 1.000 0 0 -10773 0 0 540 -10233 -8408 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 133 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 133 @@ -8439,7 +8439,7 @@ Subhourly User-defined Report, Sat 15-Aug 8 15 0 5 73.4 77.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 134 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 134 @@ -8502,7 +8502,7 @@ CZ16 Dual Fuel 8 15 9 5 82.6 78.00 0 0 0 0.271 0.271 1.000 1.000 0 0 -4644 0 0 230 -4414 -3790 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 135 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 135 @@ -8557,7 +8557,7 @@ CZ16 Dual Fuel 8 15 17 3 86.5 78.00 0 0 0 0.671 0.671 1.000 1.000 0 0 -11330 0 0 571 -10759 -8795 8 15 17 4 86.2 78.00 0 0 0 0.659 0.659 1.000 1.000 0 0 -11144 0 0 561 -10583 -8647 8 15 17 5 85.8 78.00 0 0 0 0.643 0.643 1.000 1.000 0 0 -10896 0 0 547 -10349 -8453 - 8 15 18 0 85.5 78.00 0 0 0 0.657 0.657 1.000 1.000 0 0 -11163 0 0 559 -10603 -8658 + 8 15 18 0 85.5 78.00 0 0 0 0.657 0.657 1.000 1.000 0 0 -11163 0 0 559 -10604 -8658 8 15 18 1 85.1 78.00 0 0 0 0.643 0.643 1.000 1.000 0 0 -10939 0 0 547 -10392 -8483 8 15 18 2 84.7 78.00 0 0 0 0.627 0.627 1.000 1.000 0 0 -10686 0 0 533 -10153 -8288 8 15 18 3 84.4 78.00 0 0 0 0.607 0.607 1.000 1.000 0 0 -10377 0 0 517 -9860 -8049 @@ -8565,7 +8565,7 @@ CZ16 Dual Fuel 8 15 18 5 83.7 78.00 0 0 0 0.566 0.566 1.000 1.000 0 0 -9712 0 0 482 -9230 -7533 ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 136 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 136 @@ -8607,7 +8607,7 @@ CZ16 Dual Fuel ! Log for Run 005: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -8628,7 +8628,7 @@ Input for Run 005: ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 137 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 137 @@ -8637,21 +8637,21 @@ CZ16 Dual Fuel -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console run(s) done: Fri 27-Aug-21 11:08:29 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 9:52:08 am -! Executable: d:\cse\msvc\cse.exe -! 27-Aug-21 11:04 am (VS 14.29 2701824 bytes) (HPWH 1.15.0+master.d18737e.3) -! Command line: -x! -t1 ashp_dfng -! Input file: D:\cse\test\ashp_dfng.cse -! Report file: D:\cse\test\ashp_dfng.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 27-Oct-21 9:48 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 ashp_dfng +! Input file: C:\Users\nkruis\projects\cse\test\ashp_dfng.cse +! Report file: C:\Users\nkruis\projects\cse\test\ashp_dfng.rep ! Timing info -- -! Input: Time = 0.25 Calls = 5 T/C = 0.0504 +! Input: Time = 0.48 Calls = 5 T/C = 0.0960 ! AutoSizing: Time = 0.00 Calls = 0 T/C = 0.0000 -! Simulation: Time = 10.71 Calls = 5 T/C = 2.1410 -! Reports: Time = 0.05 Calls = 5 T/C = 0.0106 -! Total: Time = 11.03 Calls = 1 T/C = 11.0280 +! Simulation: Time = 17.29 Calls = 5 T/C = 3.4584 +! Reports: Time = 0.07 Calls = 5 T/C = 0.0132 +! Total: Time = 17.84 Calls = 1 T/C = 17.8420 @@ -8691,5 +8691,5 @@ CZ16 Dual Fuel ------------------------------------------------------------------------------ -! ashp_dfng 005 Fri 27-Aug-21 11:08:26 am Page 138 +! ashp_dfng 005 Wed 27-Oct-21 9:52:05 am Page 138 \ No newline at end of file diff --git a/test/ref/DHWDU.rep b/test/ref/DHWDU.rep index e27fe8e63..e3291737d 100644 --- a/test/ref/DHWDU.rep +++ b/test/ref/DHWDU.rep @@ -8,7 +8,7 @@ Test3 4BR W/ DHW Probes @intgains ! Log for Run 001: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -60,7 +60,7 @@ Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 1 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 1 @@ -123,7 +123,7 @@ Input for Run 001: # "2T","2W","2R","4F","1S","2U","1M","1T","1W","4R","5F","3S","1U","1M","2T","2W","1R","1F","1S","2U","1M","3T","1W","1R","2H","1S","1U","1M","4T","1W","2R") ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 2 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 2 @@ -186,7 +186,7 @@ Test3 4BR W/ DHW Probes @intgains # "3W","6R","3F","3S","4U","2M","3T","2W","3R","5F","3S","3U","4M","1T","6W","2R","4F","3S","4U","5M","5T","4W","4R","2F","2S","4U","5M","6T","6W","4R","4F",\ ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 3 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 3 @@ -249,7 +249,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 21.27, 0.667, 0.996) FAUC( 21.30, 0.333, 0.836) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 4 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 4 @@ -312,7 +312,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 21.54, 0.167, 0.362) FAUC( 21.61, 0.333, 0.362) FAUC( 21.64, 0.167, 0.272) FAUC( 21.67, 0.167, 0.317) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 5 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 5 @@ -375,7 +375,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 10.38, 0.333, 0.838) FAUC( 10.64, 0.167, 0.215) FAUC( 10.66, 0.167, 0.344) FAUC( 10.66, 2.500, 1.444) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 6 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 6 @@ -438,7 +438,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 10.11, 0.167, 1.539) FAUC( 10.12, 0.667, 1.324) FAUC( 12.19, 0.167, 0.407) FAUC( 12.90, 1.000, 1.079) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 7 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 7 @@ -501,7 +501,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 12.61, 2.000, 0.990) FAUC( 12.83, 0.167, 0.482) FAUC( 14.84, 0.167, 0.749) FAUC( 15.02, 0.333, 0.187) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 8 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 8 @@ -564,7 +564,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 18.69, 0.167, 0.344) FAUC( 18.71, 0.167, 0.443) FAUC( 18.78, 0.333, 0.197) FAUC( 18.84, 1.833, 0.743) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 9 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 9 @@ -627,7 +627,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 16.60, 0.167, 0.215) FAUC( 17.37, 0.167, 0.301) FAUC( 17.44, 0.167, 0.215) FAUC( 17.45, 0.167, 0.215) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 10 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 10 @@ -690,7 +690,7 @@ Test3 4BR W/ DHW Probes @intgains ENDDHWDAYUSE ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 11 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 11 @@ -753,7 +753,7 @@ Test3 4BR W/ DHW Probes @intgains DHWDAYUSE "4W" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 12 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 12 @@ -816,7 +816,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 20.25, 0.333, 0.246) FAUC( 20.30, 0.167, 0.590) FAUC( 20.34, 0.167, 0.590) FAUC( 20.42, 0.167, 0.295) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 13 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 13 @@ -879,7 +879,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 9.50, 0.667, 0.312) FAUC( 9.52, 0.333, 0.301) FAUC( 9.53, 0.667, 0.569) FAUC( 9.56, 0.167, 0.730) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 14 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 14 @@ -942,7 +942,7 @@ Test3 4BR W/ DHW Probes @intgains CWSH( 9.26, 2.000, 1.578) CWSH( 9.30, 0.667, 1.162) CWSH( 9.41, 0.500, 1.288) CWSH( 9.43, 2.167, 1.586) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 15 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 15 @@ -1005,7 +1005,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 9.58, 0.167, 0.344) CWSH( 9.78, 0.500, 0.539) FAUC( 9.82, 1.167, 0.663) CWSH( 9.85, 4.333, 0.910) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 16 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 16 @@ -1068,7 +1068,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 21.59, 0.333, 0.967) FAUC( 21.64, 0.333, 0.215) FAUC( 21.65, 0.167, 0.387) FAUC( 21.65, 0.333, 0.451) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 17 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 17 @@ -1131,7 +1131,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 15.32, 1.000, 0.809) FAUC( 15.35, 1.333, 0.999) FAUC( 15.40, 0.167, 0.473) SHWR( 15.40, 7.000, 1.446) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 18 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 18 @@ -1194,7 +1194,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 11.89, 0.167, 0.642) FAUC( 11.96, 0.500, 1.427) FAUC( 13.53, 0.333, 0.428) FAUC( 13.54, 0.833, 1.563) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 19 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 19 @@ -1257,7 +1257,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 8.95, 0.667, 1.008) FAUC( 8.97, 0.333, 1.382) FAUC( 8.97, 1.333, 1.260) FAUC( 9.00, 2.000, 1.128) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 20 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 20 @@ -1320,7 +1320,7 @@ Test3 4BR W/ DHW Probes @intgains FAUC( 11.76, 1.167, 0.798) FAUC( 11.95, 0.500, 1.303) FAUC( 12.00, 0.167, 0.301) FAUC( 12.18, 0.667, 0.634) ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 21 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 21 @@ -1383,7 +1383,7 @@ Test3 4BR W/ DHW Probes @intgains ebTolSubHr = 0.001 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 22 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 22 @@ -1446,7 +1446,7 @@ Test3 4BR W/ DHW Probes @intgains lrThk = 0.041667 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 23 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 23 @@ -1509,7 +1509,7 @@ Test3 4BR W/ DHW Probes @intgains LAYER "cl1-Garage Ext Wall 2" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 24 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 24 @@ -1572,7 +1572,7 @@ Test3 4BR W/ DHW Probes @intgains lrThk = 0.041667 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 25 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 25 @@ -1635,7 +1635,7 @@ Test3 4BR W/ DHW Probes @intgains lrThk = 0.291667 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 26 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 26 @@ -1698,7 +1698,7 @@ Test3 4BR W/ DHW Probes @intgains CONSTRUCTION "cc-Tile Roof" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 27 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 27 @@ -1761,7 +1761,7 @@ Test3 4BR W/ DHW Probes @intgains lrThk = 0.291667 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 28 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 28 @@ -1824,7 +1824,7 @@ Test3 4BR W/ DHW Probes @intgains LAYER "fl1-R30 Cathedral Ceiling" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 29 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 29 @@ -1887,7 +1887,7 @@ Test3 4BR W/ DHW Probes @intgains LAYER "cl1-R15 Wall" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 30 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 30 @@ -1950,7 +1950,7 @@ Test3 4BR W/ DHW Probes @intgains LAYER "fl3-R19 R5 Stucco Wall" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 31 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 31 @@ -2013,7 +2013,7 @@ Test3 4BR W/ DHW Probes @intgains lrThk = 0.041667 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 32 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 32 @@ -2076,7 +2076,7 @@ Test3 4BR W/ DHW Probes @intgains LAYER "fl1-Cathedral R0" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 33 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 33 @@ -2139,7 +2139,7 @@ Test3 4BR W/ DHW Probes @intgains LAYER "cl3-Ceiling (below attic) 1-AtcEdgWA" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 34 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 34 @@ -2202,7 +2202,7 @@ Test3 4BR W/ DHW Probes @intgains lrThk = 0.041667 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 35 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 35 @@ -2265,7 +2265,7 @@ Test3 4BR W/ DHW Probes @intgains CONSTRUCTION "scn-SlabConsExposed" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 36 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 36 @@ -2328,7 +2328,7 @@ Test3 4BR W/ DHW Probes @intgains lrMat = "IntMassMat-SoftWood" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 37 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 37 @@ -2391,7 +2391,7 @@ Test3 4BR W/ DHW Probes @intgains matDens = 35 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 38 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 38 @@ -2454,7 +2454,7 @@ Test3 4BR W/ DHW Probes @intgains MATERIAL "m-10 PSF Roof" ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 39 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 39 @@ -2517,7 +2517,7 @@ Test3 4BR W/ DHW Probes @intgains matDens = 1.5 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 40 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 40 @@ -2580,7 +2580,7 @@ Test3 4BR W/ DHW Probes @intgains matCondCT = 0.0012 ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 41 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 41 @@ -2643,7 +2643,7 @@ Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ -! dhwDU 001 Fri 27-Aug-21 11:13:52 am Page 42 +! dhwDU 001 Wed 27-Oct-21 9:53:04 am Page 42 @@ -2660,10 +2660,10 @@ Warning: Zone 'Conditioned-zn': Unmet heating loads during 4 hours of run. Warning: Zone 'Conditioned-zn': Unmet cooling loads during 4 hours of run. --------------- Warning: Zone 'Garage-grg': Condensation occurred in 742 subhours of run. - Total condensation heat = 20.9374 kBtu. + Total condensation heat = 20.9365 kBtu. --------------- Warning: Zone 'Gar Attic -atc': Condensation occurred in 1666 subhours of run. - Total condensation heat = 2.90588 kBtu. + Total condensation heat = 2.90567 kBtu. --------------- @@ -2690,7 +2690,7 @@ Jul 1764.7 107.49 0 0 151.42 142.25 0 113.13 0 40.946 0 Aug 1691.9 28.553 0 0 185.86 60.788 0 97.629 0 40.946 0 0 0 331.48 670.67 46.787 193.92 12.378 0 22.872 0 0 0 0 0 Sep 1761.7 25.220 0 0 190.21 58.348 0 94.289 0 39.625 0 0 0 357.24 722.79 45.278 187.67 12.375 0 28.696 0 0 0 0 0 Oct 1841.6 0 0 0 211.32 99.136 0 0 1.494 40.946 0 0 0 403.04 815.48 46.787 193.92 2.475 0 26.992 0 0 0 0 0 -Nov 2095.8 0 0 0 263.38 183.60 0 0 66.175 39.680 0 0 0 423.06 856.52 45.278 187.93 9.903 0 20.284 0 0 0 0 0 +Nov 2095.8 0 0 0 263.38 183.60 0 0 66.176 39.680 0 0 0 423.06 856.52 45.278 187.93 9.903 0 20.284 0 0 0 0 0 Dec 2369.3 0 0 0 285.66 241.30 0 0 147.27 40.946 0 0 0 455.78 922.18 46.787 193.92 7.960 0 27.447 0 0 0 0 0 Yr 23202 161.27 0 0 2795.7 2067.7 0 416.94 602.62 482.10 0 0 0 4436.4 8976.3 550.88 2283.3 124.86 0 303.57 0 0 0 0 0 @@ -2706,7 +2706,7 @@ Yr 23202 161.27 0 0 2795.7 2067.7 0 416.94 602.62 482.10 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 43 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 43 @@ -2728,8 +2728,8 @@ Jun 388.00 0 0 0 0 0 0 0 0 0 0 Jul 338.94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197.17 0 141.77 0 0 0 0 Aug 351.85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 199.71 0 152.14 0 0 0 0 Sep 414.53 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 250.56 0 163.96 0 0 0 0 -Oct 470.39 0 49.712 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 235.68 0 184.99 0 0 0 0 -Nov 2573.3 0 2201.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 177.11 0 194.30 0 0 0 0 +Oct 470.39 0 49.717 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 235.68 0 184.99 0 0 0 0 +Nov 2573.4 0 2201.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 177.11 0 194.30 0 0 0 0 Dec 5349.1 0 4900.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 239.66 0 209.19 0 0 0 0 Yr 24739 0 20052 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2650.7 0 2036.3 0 0 0 0 @@ -2769,7 +2769,7 @@ Yr 24739 0 20052 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 44 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 44 @@ -2832,7 +2832,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 2.040 0 0 0 0.0412 0 0 0 0.224 0.0550 0 0 0 0.376 1.082 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 45 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 45 @@ -2895,7 +2895,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 1.847 0 0 0 0 0 0 0 0.0299 0.0550 0 0 0 0.448 1.053 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 46 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 46 @@ -2958,7 +2958,7 @@ Day 78.856 0 0 0 19.448 0 0 0 5.725 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 47 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 47 @@ -3021,7 +3021,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 4.645 0 0 0 1.223 0 0 0 0.153 0.0550 0 0 0 0.636 1.551 0 0.261 0 0 0.768 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 48 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 48 @@ -3084,7 +3084,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 4.201 0 0 0 0.945 0.0250 0 0 1.034 0.0550 0 0 0 0.593 1.287 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 49 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 49 @@ -3147,7 +3147,7 @@ Hourly Energy Use, meter "MtrElec", Sun 11-Jan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 50 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 50 @@ -3210,7 +3210,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.913 0 0 0 0 0 0 0 0.135 0.0550 0 0 0 1.706 1.755 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 51 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 51 @@ -3273,7 +3273,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 4.235 0 0 0 1.169 0.0490 0 0 0.464 0.0550 0 0 0 0.419 0.936 0 0.261 0 0 0.882 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 52 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 52 @@ -3336,7 +3336,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 53 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 53 @@ -3399,7 +3399,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 22 4.034 0 0 0 0 0 0 0 0.197 0.0550 0 0 0 1.388 1.755 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 54 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 54 @@ -3462,7 +3462,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 12 3.848 0 0 0 1.352 0 0 0 0.358 0.0550 0 0 0 0.361 0.965 0 0.261 0 0 0.496 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 55 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 55 @@ -3525,7 +3525,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 2 1.614 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.275 1.024 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 56 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 56 @@ -3588,7 +3588,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 24 2.559 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.549 1.317 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 57 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 57 @@ -3651,7 +3651,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 14 1.875 0 0 0 0 0 0 0 0.290 0.0550 0 0 0 0.304 0.965 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 58 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 58 @@ -3714,7 +3714,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 1.556 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.246 0.995 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 59 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 59 @@ -3777,7 +3777,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Day 67.611 0 0 0 8.155 0.0839 0 0 5.689 1.321 0 0 0 14.460 29.256 1.509 6.256 0 0 0.882 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 60 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 60 @@ -3840,7 +3840,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 1.822 0 0 0 0 0 0 0 0.0475 0.0550 0 0 0 0.376 1.082 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 61 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 61 @@ -3903,7 +3903,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 1.817 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.448 1.053 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 62 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 62 @@ -3966,7 +3966,7 @@ Day 82.718 0 0 0 5.912 23.180 0 0 3.764 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 63 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 63 @@ -4029,7 +4029,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 3.620 0 0 0 1.250 0 0 0 0.0149 0.0550 0 0 0 0.593 1.446 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 64 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 64 @@ -4092,7 +4092,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 3.206 0 0 0 0 0 0 0 1.137 0.0550 0 0 0 0.553 1.201 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 65 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 65 @@ -4155,7 +4155,7 @@ Hourly Energy Use, meter "MtrElec", Sat 07-Feb ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 66 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 66 @@ -4218,7 +4218,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.650 0 0 0 0 0 0 0 0.105 0.0550 0 0 0 1.592 1.637 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 67 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 67 @@ -4281,7 +4281,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 2.769 0 0 0 0.746 .00410 0 0 0.439 0.0550 0 0 0 0.391 0.873 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 68 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 68 @@ -4344,7 +4344,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 69 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 69 @@ -4407,7 +4407,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 22 3.887 0 0 0 0 0 0 0 0.0586 0.0550 0 0 0 1.295 1.637 0.377 0.261 0 0 0.204 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 70 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 70 @@ -4470,7 +4470,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 12 1.827 0 0 0 0.0611 0 0 0 0.212 0.0550 0 0 0 0.337 0.901 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 71 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 71 @@ -4533,7 +4533,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 2 2.371 0 0 0 0.844 0 0 0 0 0.0550 0 0 0 0.256 0.955 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 72 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 72 @@ -4596,7 +4596,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 24 2.562 0 0 0 0.128 0 0 0 0 0.0550 0 0 0 0.513 1.228 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 73 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 73 @@ -4659,7 +4659,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 14 1.536 0 0 0 0 0 0 0 0.0369 0.0550 0 0 0 0.283 0.901 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 74 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 74 @@ -4722,7 +4722,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 1.473 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.229 0.928 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 75 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 75 @@ -4785,7 +4785,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Day 65.080 0 0 0 12.500 0 0 0 2.718 1.321 0 0 0 13.487 27.289 1.509 6.256 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 76 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 76 @@ -4848,7 +4848,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 1.676 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.351 1.010 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 77 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 77 @@ -4911,7 +4911,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 1.716 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.418 0.982 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 78 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 78 @@ -4974,7 +4974,7 @@ Day 90.353 0 0 0 12.667 21.551 0 0 3.626 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 79 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 79 @@ -5037,7 +5037,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 2.627 0 0 0 0.281 0 0 0 0.156 0.0550 0 0 0 0.545 1.329 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 80 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 80 @@ -5100,7 +5100,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 4.102 0 0 0 1.216 0 0 0 0.958 0.0550 0 0 0 0.508 1.103 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 81 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 81 @@ -5163,7 +5163,7 @@ Hourly Energy Use, meter "MtrElec", Fri 06-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 82 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 82 @@ -5226,7 +5226,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 4.855 0 0 0 1.381 0 0 0 0.191 0.0550 0 0 0 1.462 1.505 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 83 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 83 @@ -5289,7 +5289,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 3.123 0 0 0 1.268 0 0 0 0.377 0.0550 0 0 0 0.335 0.828 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 84 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 84 @@ -5352,7 +5352,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.529 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.285 0.928 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 85 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 85 @@ -5415,7 +5415,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 2.778 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.781 1.304 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 86 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 86 @@ -5478,7 +5478,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 2.914 0 0 0 1.094 0 0 0 0 0.0550 0 0 0 0.260 0.802 0 0.261 0 0 0.441 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 87 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 87 @@ -5541,7 +5541,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.672 0 0 0 0.317 0 0 0 0 0.0550 0 0 0 0.186 0.853 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 88 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 88 @@ -5604,7 +5604,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 89 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 89 @@ -5667,7 +5667,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.454 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.260 0.878 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 90 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 90 @@ -5730,7 +5730,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.378 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.260 0.802 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 91 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 91 @@ -5793,7 +5793,7 @@ Day 60.800 0 0 0 12.479 0 0 0 0 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 92 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 92 @@ -5856,7 +5856,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 1.803 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.384 1.103 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 93 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 93 @@ -5919,7 +5919,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 1.889 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.521 1.053 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 94 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 94 @@ -5982,7 +5982,7 @@ Day 56.505 0 0 0 8.974 0 0 0 0.975 1.321 0 Hourly Energy Use, meter "MtrElec", Sat 28-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 95 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 95 @@ -6045,7 +6045,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 2.811 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.041 1.454 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 96 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 96 @@ -6108,7 +6108,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 14.074 0 0 0 0.219 11.761 0 0 0 0.0550 0 0 0 0.421 0.928 0 0.261 0 0 0.428 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 97 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 97 @@ -6171,7 +6171,7 @@ Hourly Energy Use, meter "MtrElec", Thu 02-Apr Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 98 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 98 @@ -6234,7 +6234,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 3.715 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.277 1.418 0.377 0.261 0 0 0.328 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 99 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 99 @@ -6297,7 +6297,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 1.520 0 0 0 0 0 0 0 0.145 0.0550 0 0 0 0.305 0.755 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 100 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 100 @@ -6360,7 +6360,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.422 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.260 0.846 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 101 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 101 @@ -6423,7 +6423,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 3.454 0 0 0 0.671 0 0 0 0.189 0.0550 0 0 0 0.712 1.189 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 102 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 102 @@ -6486,7 +6486,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 1.405 0 0 0 0 0 0 0 0.120 0.0550 0 0 0 0.237 0.732 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 103 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 103 @@ -6549,7 +6549,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.263 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.170 0.777 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 104 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 104 @@ -6612,7 +6612,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 105 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 105 @@ -6675,7 +6675,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 2.536 0 0 0 1.183 0 0 0 0 0.0550 0 0 0 0.237 0.800 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 106 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 106 @@ -6738,7 +6738,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.285 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.237 0.732 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 107 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 107 @@ -6801,7 +6801,7 @@ Day 70.571 0 0 0 6.607 19.445 0 0 0.388 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 108 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 108 @@ -6864,7 +6864,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 2.088 0 0 0 0.211 0 0 0 0.204 0.0550 0 0 0 0.350 1.006 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 109 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 109 @@ -6927,7 +6927,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 1.751 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.475 0.960 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 110 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 110 @@ -6990,7 +6990,7 @@ Day 52.568 0 0 0 8.526 0.0152 0 0 0.777 1.321 0 Hourly Energy Use, meter "MtrElec", Fri 24-Apr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 111 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 111 @@ -7053,7 +7053,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 2.591 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.949 1.326 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 112 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 112 @@ -7116,7 +7116,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 2.773 0 0 0 1.227 0 0 0 0 0.0550 0 0 0 0.384 0.846 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 113 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 113 @@ -7179,7 +7179,7 @@ Hourly Energy Use, meter "MtrElec", Wed 29-Apr Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 114 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 114 @@ -7242,7 +7242,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 4.893 0 0 0 1.505 0 0 0 0 0.0550 0 0 0 1.277 1.418 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 115 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 115 @@ -7305,7 +7305,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 2.597 0 0 0 1.324 0 0 0 0 0.0550 0 0 0 0.276 0.681 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 116 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 116 @@ -7368,7 +7368,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.315 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.235 0.764 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 117 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 117 @@ -7431,7 +7431,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 8.557 0 0 0 0.773 5.374 0 0 0 0.0550 0 0 0 0.643 1.074 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 118 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 118 @@ -7494,7 +7494,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 2.396 0 0 0 1.205 0 0 0 .00032 0.0550 0 0 0 0.214 0.661 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 119 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 119 @@ -7557,7 +7557,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.171 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.153 0.702 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 120 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 120 @@ -7620,7 +7620,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 121 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 121 @@ -7683,7 +7683,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.253 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.214 0.723 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 122 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 122 @@ -7746,7 +7746,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.191 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.214 0.661 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 123 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 123 @@ -7809,7 +7809,7 @@ Day 43.881 0 0 0 3.406 0 0 0 0 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 124 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 124 @@ -7872,7 +7872,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 1.541 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.316 0.909 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 125 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 125 @@ -7935,7 +7935,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 1.612 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.429 0.867 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 126 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 126 @@ -7998,7 +7998,7 @@ Day 54.343 0 0 0 12.634 .00145 0 0 0 1.321 0 Hourly Energy Use, meter "MtrElec", Thu 21-May ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 127 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 127 @@ -8061,7 +8061,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 2.371 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.857 1.198 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 128 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 128 @@ -8124,7 +8124,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 1.888 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.347 0.764 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 129 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 129 @@ -8187,7 +8187,7 @@ Hourly Energy Use, meter "MtrElec", Tue 26-May Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 130 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 130 @@ -8250,7 +8250,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 3.614 0 0 0 0.487 0 0 0 0 0.0550 0 0 0 1.153 1.280 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 131 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 131 @@ -8313,7 +8313,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 1.273 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.276 0.681 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 132 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 132 @@ -8376,7 +8376,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.315 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.235 0.764 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 133 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 133 @@ -8439,7 +8439,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 2.789 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.612 1.023 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 134 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 134 @@ -8502,7 +8502,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 1.149 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.204 0.629 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 135 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 135 @@ -8565,7 +8565,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.130 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.146 0.669 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 136 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 136 @@ -8628,7 +8628,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 137 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 137 @@ -8691,7 +8691,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 2.797 0 0 0 0.707 0 0 0 0 0.0550 0 0 0 0.204 0.688 0 0.261 0 0 0.882 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 138 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 138 @@ -8754,7 +8754,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.149 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.204 0.629 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 139 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 139 @@ -8817,7 +8817,7 @@ Day 44.169 0 0 0 1.934 0 0 1.997 0 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 140 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 140 @@ -8880,7 +8880,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 1.482 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.301 0.865 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 141 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 141 @@ -8943,7 +8943,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 2.011 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.408 0.826 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 142 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 142 @@ -9006,7 +9006,7 @@ Day 49.702 0 0 0 7.581 0 0 2.765 0 1.321 0 Hourly Energy Use, meter "MtrElec", Wed 17-Jun ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 143 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 143 @@ -9069,7 +9069,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 2.273 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.817 1.141 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 144 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 144 @@ -9132,7 +9132,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 1.835 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.331 0.728 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 145 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 145 @@ -9195,7 +9195,7 @@ Hourly Energy Use, meter "MtrElec", Mon 22-Jun Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 146 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 146 @@ -9258,7 +9258,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 3.011 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.098 1.219 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 147 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 147 @@ -9321,7 +9321,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 1.381 0 0 0 0 0 0 0.154 0 0.0550 0 0 0 0.262 0.649 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 148 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 148 @@ -9384,7 +9384,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.267 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.224 0.728 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 149 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 149 @@ -9447,7 +9447,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 2.789 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.612 1.023 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 150 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 150 @@ -9510,7 +9510,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 1.149 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.204 0.629 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 151 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 151 @@ -9573,7 +9573,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.151 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.149 0.685 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 152 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 152 @@ -9636,7 +9636,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 153 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 153 @@ -9699,7 +9699,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.518 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.209 0.706 0 0.261 0 0 0.287 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 154 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 154 @@ -9762,7 +9762,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.170 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.209 0.645 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 155 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 155 @@ -9825,7 +9825,7 @@ Day 75.717 0 0 0 7.406 23.595 0 2.150 0 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 156 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 156 @@ -9888,7 +9888,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 1.512 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.309 0.887 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 157 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 157 @@ -9951,7 +9951,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 2.042 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.418 0.847 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 158 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 158 @@ -10014,7 +10014,7 @@ Day 82.733 15.219 0 0 5.419 16.878 0 6.008 0 1.321 0 Hourly Energy Use, meter "MtrElec", Tue 14-Jul ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 159 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 159 @@ -10077,7 +10077,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 2.322 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.837 1.169 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 160 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 160 @@ -10140,7 +10140,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 3.289 0 0 0 1.428 0 0 0.461 0 0.0550 0 0 0 0.339 0.746 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 161 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 161 @@ -10203,7 +10203,7 @@ Hourly Energy Use, meter "MtrElec", Sun 19-Jul Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 162 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 162 @@ -10266,7 +10266,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 3.069 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.126 1.250 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 163 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 163 @@ -10329,7 +10329,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 2.705 0 0 0 0.994 0 0 0.461 0 0.0550 0 0 0 0.269 0.665 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 164 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 164 @@ -10392,7 +10392,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.291 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.229 0.746 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 165 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 165 @@ -10455,7 +10455,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 2.830 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.628 1.048 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 166 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 166 @@ -10518,7 +10518,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 1.874 0 0 0 0.704 0 0 0 0 0.0550 0 0 0 0.209 0.645 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 167 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 167 @@ -10581,7 +10581,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.151 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.149 0.685 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 168 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 168 @@ -10644,7 +10644,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 169 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 169 @@ -10707,7 +10707,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.297 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.225 0.757 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 170 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 170 @@ -10770,7 +10770,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.233 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.225 0.692 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 171 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 171 @@ -10833,7 +10833,7 @@ Day 50.244 0 0 0 4.646 0 0 3.302 0 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 172 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 172 @@ -10896,7 +10896,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 1.599 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.331 0.952 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 173 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 173 @@ -10959,7 +10959,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 2.134 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.449 0.909 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 174 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 174 @@ -11022,7 +11022,7 @@ Day 65.306 0 0 0 3.412 16.948 0 3.532 0 1.321 0 Hourly Energy Use, meter "MtrElec", Mon 10-Aug ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 175 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 175 @@ -11085,7 +11085,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 2.865 0 0 0 0.397 0 0 0 0 0.0550 0 0 0 0.898 1.255 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 176 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 176 @@ -11148,7 +11148,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 3.103 0 0 0 1.163 0 0 0.461 0 0.0550 0 0 0 0.364 0.800 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 177 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 177 @@ -11211,7 +11211,7 @@ Hourly Energy Use, meter "MtrElec", Sat 15-Aug Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 178 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 178 @@ -11274,7 +11274,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 3.243 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.208 1.341 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 179 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 179 @@ -11337,7 +11337,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 2.098 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.289 0.714 0 0.261 0 0 0.319 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 180 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 180 @@ -11400,7 +11400,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.362 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.246 0.800 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 181 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 181 @@ -11463,7 +11463,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 2.952 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.674 1.125 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 182 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 182 @@ -11526,7 +11526,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 3.313 0 0 0 1.514 0 0 0 0 0.0550 0 0 0 0.225 0.692 0 0.261 0 0 0.567 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 183 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 183 @@ -11589,7 +11589,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.212 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.160 0.736 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 184 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 184 @@ -11652,7 +11652,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 185 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 185 @@ -11715,7 +11715,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.297 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.225 0.757 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 186 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 186 @@ -11778,7 +11778,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.233 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.225 0.692 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 187 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 187 @@ -11841,7 +11841,7 @@ Day 53.600 0 0 0 8.540 0 0 2.765 0 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 188 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 188 @@ -11904,7 +11904,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 1.745 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.369 1.060 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 189 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 189 @@ -11967,7 +11967,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 1.828 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.500 1.012 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 190 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 190 @@ -12030,7 +12030,7 @@ Day 60.195 0 0 0 9.770 0.386 0 4.070 0 1.321 0 Hourly Energy Use, meter "MtrElec", Sun 06-Sep ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 191 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 191 @@ -12093,7 +12093,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 2.713 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.000 1.397 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 192 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 192 @@ -12156,7 +12156,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 3.537 0 0 0 1.464 0 0 0.461 0 0.0550 0 0 0 0.405 0.891 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 193 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 193 @@ -12219,7 +12219,7 @@ Hourly Energy Use, meter "MtrElec", Fri 11-Sep Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 194 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 194 @@ -12282,7 +12282,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 5.034 0 0 0 1.502 0 0 0 0 0.0550 0 0 0 1.346 1.494 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 195 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 195 @@ -12345,7 +12345,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 3.266 0 0 0 1.336 0.0366 0 0.461 0 0.0550 0 0 0 0.322 0.795 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 196 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 196 @@ -12408,7 +12408,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.481 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.274 0.891 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 197 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 197 @@ -12471,7 +12471,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 3.157 0 0 0 0 0 0 0.461 0 0.0550 0 0 0 0.750 1.253 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 198 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 198 @@ -12534,7 +12534,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 1.574 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.250 0.771 0 0.261 0 0 0.237 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 199 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 199 @@ -12597,7 +12597,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.313 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.179 0.819 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 200 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 200 @@ -12660,7 +12660,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 201 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 201 @@ -12723,7 +12723,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.409 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.250 0.843 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 202 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 202 @@ -12786,7 +12786,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.337 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.250 0.771 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 203 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 203 @@ -12849,7 +12849,7 @@ Day 71.384 0 0 0 3.836 15.090 0 7.372 0 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 204 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 204 @@ -12912,7 +12912,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 1.745 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.369 1.060 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 205 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 205 @@ -12975,7 +12975,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 2.450 0 0 0 0.483 0 0 0 0 0.0550 0 0 0 0.546 1.105 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 206 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 206 @@ -13038,7 +13038,7 @@ Day 53.277 0 0 0 4.883 .00152 0 0 0 1.321 0 Hourly Energy Use, meter "MtrElec", Sat 03-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 207 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 207 @@ -13101,7 +13101,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 3.328 0 0 0 0.394 0 0 0 0 0.0550 0 0 0 1.092 1.526 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 208 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 208 @@ -13164,7 +13164,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 3.141 0 0 0 0.528 0 0 0 0 0.0550 0 0 0 0.442 0.973 0 0.261 0 0 0.882 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 209 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 209 @@ -13227,7 +13227,7 @@ Hourly Energy Use, meter "MtrElec", Thu 08-Oct Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 210 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 210 @@ -13290,7 +13290,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 4.121 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.469 1.631 0.377 0.261 0 0 0.328 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 211 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 211 @@ -13353,7 +13353,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 1.535 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.351 0.868 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 212 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 212 @@ -13416,7 +13416,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 1.588 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.299 0.973 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 213 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 213 @@ -13479,7 +13479,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 4.218 0 0 0 1.338 0 0 0 0 0.0550 0 0 0 0.819 1.368 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 214 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 214 @@ -13542,7 +13542,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 1.430 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.273 0.842 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 215 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 215 @@ -13605,7 +13605,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 1.405 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.195 0.894 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 216 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 216 @@ -13668,7 +13668,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 217 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 217 @@ -13702,7 +13702,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 2.697 0 0 0 0.415 0 0 0 0 0.0550 0 0 0 0.572 1.394 0 0.261 0 0 0 0 0 0 0 0 19 4.313 0 0 0 1.380 0 0 0 0 0.0550 0 0 0 1.092 1.526 0 0.261 0 0 0 0 0 0 0 0 20 4.879 0 0 0 1.450 0 0 0 0 0.0550 0 0 0 1.534 1.578 0 0.261 0 0 0 0 0 0 0 0 - 21 4.282 0 0 0 0.489 0 0 0 0 0.0550 0 0 0 1.469 1.631 0.377 0.261 0 0 0 0 0 0 0 0 + 21 4.283 0 0 0 0.489 0 0 0 0 0.0550 0 0 0 1.469 1.631 0.377 0.261 0 0 0 0 0 0 0 0 22 3.519 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.248 1.578 0.377 0.261 0 0 0 0 0 0 0 0 23 2.880 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.819 1.368 0.377 0.261 0 0 0 0 0 0 0 0 24 2.371 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.494 1.184 0.377 0.261 0 0 0 0 0 0 0 0 @@ -13731,7 +13731,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.509 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.273 0.921 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 218 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 218 @@ -13794,7 +13794,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.430 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.273 0.842 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 219 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 219 @@ -13857,7 +13857,7 @@ Day 57.235 0 0 0 8.842 0 0 0 0 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 220 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 220 @@ -13920,7 +13920,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 1.876 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.403 1.157 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 221 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 221 @@ -13931,7 +13931,7 @@ Test3 4BR W/ DHW Probes @intgains 19 3.156 0 0 0 0.223 0 0 0 0 0.0550 0 0 0 1.092 1.526 0 0.261 0 0 0 0 0 0 0 0 20 4.696 0 0 0 1.268 0 0 0 0 0.0550 0 0 0 1.534 1.578 0 0.261 0 0 0 0 0 0 0 0 21 5.173 0 0 0 1.380 0 0 0 0 0.0550 0 0 0 1.469 1.631 0.377 0.261 0 0 0 0 0 0 0 0 - 22 4.831 0 0 0 1.311 0 0 0 0 0.0550 0 0 0 1.248 1.578 0.377 0.261 0 0 0 0 0 0 0 0 + 22 4.831 0 0 0 1.312 0 0 0 0 0.0550 0 0 0 1.248 1.578 0.377 0.261 0 0 0 0 0 0 0 0 23 5.355 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.819 1.368 0.377 0.261 2.475 0 0 0 0 0 0 0 24 2.371 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.494 1.184 0.377 0.261 0 0 0 0 0 0 0 0 @@ -13983,7 +13983,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 1.967 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.546 1.105 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 222 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 222 @@ -14046,7 +14046,7 @@ Day 56.755 0 0 0 8.052 .00189 0 0 0.308 1.321 0 Hourly Energy Use, meter "MtrElec", Fri 30-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 223 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 223 @@ -14109,7 +14109,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 2.934 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.092 1.526 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 224 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 224 @@ -14137,7 +14137,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.524 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.296 0.913 0 0.261 0 0 0 0 0 0 0 0 6 1.779 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.437 1.027 0 0.261 0 0 0 0 0 0 0 0 7 2.105 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.592 1.198 0 0.261 0 0 0 0 0 0 0 0 - 8 2.340 0 0 0 0 0 0 0 0.192 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 + 8 2.341 0 0 0 0 0 0 0 0.192 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 9 2.329 0 0 0 0 0 0 0 .00862 0.0550 0 0 0 0.479 1.055 0 0.261 0 0 0.471 0 0 0 0 0 10 1.637 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.409 0.913 0 0.261 0 0 0 0 0 0 0 0 11 1.637 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.381 0.941 0 0.261 0 0 0 0 0 0 0 0 @@ -14172,7 +14172,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 4.282 0 0 0 0.234 1.640 0 0 0.259 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 225 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 225 @@ -14235,7 +14235,7 @@ Hourly Energy Use, meter "MtrElec", Wed 04-Nov ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 226 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 226 @@ -14298,7 +14298,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.690 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.663 1.711 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 227 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 227 @@ -14342,7 +14342,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 3.064 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.888 1.483 0.377 0.261 0 0 0 0 0 0 0 0 24 2.512 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.536 1.283 0.377 0.261 0 0 0 0 0 0 0 0 -Day 57.981 0 0 0 2.728 0 0 0 1.078 1.321 0 0 0 14.095 28.518 1.509 6.256 2.476 0 0 0 0 0 0 0 +Day 57.982 0 0 0 2.728 0 0 0 1.078 1.321 0 0 0 14.095 28.518 1.509 6.256 2.476 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrElec", Sat 07-Nov @@ -14361,7 +14361,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 12.756 0 0 0 0.350 10.627 0 0 0.143 0.0550 0 0 0 0.409 0.913 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 228 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 228 @@ -14383,7 +14383,7 @@ Test3 4BR W/ DHW Probes @intgains 23 3.064 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.888 1.483 0.377 0.261 0 0 0 0 0 0 0 0 24 2.512 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.536 1.283 0.377 0.261 0 0 0 0 0 0 0 0 -Day 78.619 0 0 0 8.951 16.134 0 0 0.953 1.321 0 0 0 14.095 28.518 1.509 6.256 0 0 0.882 0 0 0 0 0 +Day 78.620 0 0 0 8.951 16.134 0 0 0.953 1.321 0 0 0 14.095 28.518 1.509 6.256 0 0 0.882 0 0 0 0 0 Hourly Energy Use, meter "MtrElec", Sun 08-Nov @@ -14424,7 +14424,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 229 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 229 @@ -14456,7 +14456,7 @@ Test3 4BR W/ DHW Probes @intgains 23 6.971 0 0 0 1.433 0 0 0 0 0.0550 0 0 0 0.888 1.483 0.377 0.261 2.475 0 0 0 0 0 0 0 24 2.820 0 0 0 0.308 0 0 0 0 0.0550 0 0 0 0.536 1.283 0.377 0.261 0 0 0 0 0 0 0 0 -Day 70.986 0 0 0 14.781 0 0 0 1.150 1.321 0 0 0 14.095 28.518 1.509 6.256 2.475 0 0.882 0 0 0 0 0 +Day 70.987 0 0 0 14.781 0 0 0 1.150 1.321 0 0 0 14.095 28.518 1.509 6.256 2.475 0 0.882 0 0 0 0 0 Hourly Energy Use, meter "MtrElec", Tue 10-Nov @@ -14487,7 +14487,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 22 3.796 0 0 0 0 0 0 0 0.0384 0.0550 0 0 0 1.353 1.711 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 230 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 230 @@ -14550,7 +14550,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 12 1.628 0 0 0 0 0 0 0 0.0192 0.0550 0 0 0 0.352 0.941 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 231 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 231 @@ -14613,7 +14613,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 2 1.582 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.268 0.998 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 232 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 232 @@ -14676,7 +14676,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 24 2.512 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.536 1.283 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 233 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 233 @@ -14730,7 +14730,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.524 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.296 0.913 0 0.261 0 0 0 0 0 0 0 0 6 1.779 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.437 1.027 0 0.261 0 0 0 0 0 0 0 0 7 2.105 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.592 1.198 0 0.261 0 0 0 0 0 0 0 0 - 8 6.998 0 0 0 0.695 3.401 0 0 0.753 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 + 8 6.998 0 0 0 0.695 3.401 0 0 0.754 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 9 12.117 0 0 0 0.441 9.465 0 0 0.362 0.0550 0 0 0 0.479 1.055 0 0.261 0 0 0 0 0 0 0 0 10 3.130 0 0 0 0.663 0 0 0 0.266 0.0550 0 0 0 0.409 0.913 0 0.261 0 0 0.563 0 0 0 0 0 11 2.142 0 0 0 0 0 0 0 0.185 0.0550 0 0 0 0.381 0.941 0 0.261 0 0 0.319 0 0 0 0 0 @@ -14739,25 +14739,25 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 14 1.714 0 0 0 0 0 0 0 0.161 0.0550 0 0 0 0.296 0.941 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 234 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 234 Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ - 15 2.769 0 0 0 1.015 0 0 0 0.144 0.0550 0 0 0 0.296 0.998 0 0.261 0 0 0 0 0 0 0 0 - 16 3.275 0 0 0 1.408 0 0 0 0.130 0.0550 0 0 0 0.366 1.055 0 0.261 0 0 0 0 0 0 0 0 - 17 2.263 0 0 0 0.115 0 0 0 0.141 0.0550 0 0 0 0.437 1.255 0 0.261 0 0 0 0 0 0 0 0 + 15 2.770 0 0 0 1.015 0 0 0 0.144 0.0550 0 0 0 0.296 0.998 0 0.261 0 0 0 0 0 0 0 0 + 16 3.276 0 0 0 1.408 0 0 0 0.131 0.0550 0 0 0 0.366 1.055 0 0.261 0 0 0 0 0 0 0 0 + 17 2.264 0 0 0 0.115 0 0 0 0.142 0.0550 0 0 0 0.437 1.255 0 0.261 0 0 0 0 0 0 0 0 18 2.583 0 0 0 0 0 0 0 0.136 0.0550 0 0 0 0.620 1.511 0 0.261 0 0 0 0 0 0 0 0 19 3.258 0 0 0 0 0 0 0 0.105 0.0550 0 0 0 1.184 1.654 0 0.261 0 0 0 0 0 0 0 0 - 20 3.766 0 0 0 0 0 0 0 0.0757 0.0550 0 0 0 1.663 1.711 0 0.261 0 0 0 0 0 0 0 0 - 21 4.129 0 0 0 0 0 0 0 0.0754 0.0550 0 0 0 1.593 1.768 0.377 0.261 0 0 0 0 0 0 0 0 - 22 3.849 0 0 0 0 0 0 0 0.0917 0.0550 0 0 0 1.353 1.711 0.377 0.261 0 0 0 0 0 0 0 0 - 23 3.194 0 0 0 0 0 0 0 0.131 0.0550 0 0 0 0.888 1.483 0.377 0.261 0 0 0 0 0 0 0 0 + 20 3.765 0 0 0 0 0 0 0 0.0753 0.0550 0 0 0 1.663 1.711 0 0.261 0 0 0 0 0 0 0 0 + 21 4.129 0 0 0 0 0 0 0 0.0750 0.0550 0 0 0 1.593 1.768 0.377 0.261 0 0 0 0 0 0 0 0 + 22 3.849 0 0 0 0 0 0 0 0.0918 0.0550 0 0 0 1.353 1.711 0.377 0.261 0 0 0 0 0 0 0 0 + 23 3.195 0 0 0 0 0 0 0 0.131 0.0550 0 0 0 0.888 1.483 0.377 0.261 0 0 0 0 0 0 0 0 24 2.512 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.536 1.283 0.377 0.261 0 0 0 0 0 0 0 0 -Day 72.914 0 0 0 4.338 12.866 0 0 3.129 1.321 0 0 0 14.095 28.518 1.509 6.256 0 0 0.882 0 0 0 0 0 +Day 72.915 0 0 0 4.338 12.866 0 0 3.130 1.321 0 0 0 14.095 28.518 1.509 6.256 0 0 0.882 0 0 0 0 0 Hourly Energy Use, meter "MtrElec", Wed 18-Nov @@ -14771,7 +14771,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.524 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.296 0.913 0 0.261 0 0 0 0 0 0 0 0 6 1.779 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.437 1.027 0 0.261 0 0 0 0 0 0 0 0 7 2.497 0 0 0 0.392 0 0 0 0 0.0550 0 0 0 0.592 1.198 0 0.261 0 0 0 0 0 0 0 0 - 8 4.163 0 0 0 1.228 0 0 0 0.786 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 + 8 4.162 0 0 0 1.228 0 0 0 0.786 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 9 3.532 0 0 0 1.310 0 0 0 0.373 0.0550 0 0 0 0.479 1.055 0 0.261 0 0 0 0 0 0 0 0 10 3.144 0 0 0 1.195 0 0 0 0.311 0.0550 0 0 0 0.409 0.913 0 0.261 0 0 0 0 0 0 0 0 11 3.213 0 0 0 1.309 0 0 0 0.266 0.0550 0 0 0 0.381 0.941 0 0.261 0 0 0 0 0 0 0 0 @@ -14782,14 +14782,14 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 1.886 0 0 0 0 0 0 0 0.149 0.0550 0 0 0 0.366 1.055 0 0.261 0 0 0 0 0 0 0 0 17 2.268 0 0 0 0 0 0 0 0.146 0.0550 0 0 0 0.437 1.255 0 0.261 0 0 0.115 0 0 0 0 0 18 4.227 0 0 0 0.917 0 0 0 0.0955 0.0550 0 0 0 0.620 1.511 0 0.261 0 0 0.768 0 0 0 0 0 - 19 4.593 0 0 0 1.384 0 0 0 0.0552 0.0550 0 0 0 1.184 1.654 0 0.261 0 0 0 0 0 0 0 0 + 19 4.592 0 0 0 1.384 0 0 0 0.0552 0.0550 0 0 0 1.184 1.654 0 0.261 0 0 0 0 0 0 0 0 20 5.136 0 0 0 1.367 0 0 0 0.0792 0.0550 0 0 0 1.663 1.711 0 0.261 0 0 0 0 0 0 0 0 21 5.439 0 0 0 1.300 0 0 0 0.0846 0.0550 0 0 0 1.593 1.768 0.377 0.261 0 0 0 0 0 0 0 0 22 5.118 0 0 0 1.262 0 0 0 0.0986 0.0550 0 0 0 1.353 1.711 0.377 0.261 0 0 0 0 0 0 0 0 23 3.196 0 0 0 0 0 0 0 0.132 0.0550 0 0 0 0.888 1.483 0.377 0.261 0 0 0 0 0 0 0 0 24 2.512 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.536 1.283 0.377 0.261 0 0 0 0 0 0 0 0 -Day 70.168 0 0 0 13.430 0 0 0 3.275 1.321 0 0 0 14.095 28.518 1.509 6.256 0 0 1.764 0 0 0 0 0 +Day 70.167 0 0 0 13.430 0 0 0 3.275 1.321 0 0 0 14.095 28.518 1.509 6.256 0 0 1.764 0 0 0 0 0 Hourly Energy Use, meter "MtrElec", Thu 19-Nov @@ -14802,7 +14802,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 1.525 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.240 0.970 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 235 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 235 @@ -14844,12 +14844,12 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 1.524 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.296 0.913 0 0.261 0 0 0 0 0 0 0 0 6 1.779 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.437 1.027 0 0.261 0 0 0 0 0 0 0 0 7 2.322 0 0 0 0 0 0 0 0.216 0.0550 0 0 0 0.592 1.198 0 0.261 0 0 0 0 0 0 0 0 - 8 3.108 0 0 0 0 0 0 0 0.960 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 - 9 2.265 0 0 0 0 .00005 0 0 0.415 0.0550 0 0 0 0.479 1.055 0 0.261 0 0 0 0 0 0 0 0 - 10 1.891 0 0 0 0 0.0109 0 0 0.244 0.0550 0 0 0 0.409 0.913 0 0.261 0 0 0 0 0 0 0 0 - 11 2.756 0 0 0 0.974 0.0105 0 0 0.134 0.0550 0 0 0 0.381 0.941 0 0.261 0 0 0 0 0 0 0 0 + 8 3.107 0 0 0 0 0 0 0 0.959 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 + 9 2.264 0 0 0 0 .00005 0 0 0.414 0.0550 0 0 0 0.479 1.055 0 0.261 0 0 0 0 0 0 0 0 + 10 1.892 0 0 0 0 0.0109 0 0 0.244 0.0550 0 0 0 0.409 0.913 0 0.261 0 0 0 0 0 0 0 0 + 11 2.756 0 0 0 0.974 0.0105 0 0 0.135 0.0550 0 0 0 0.381 0.941 0 0.261 0 0 0 0 0 0 0 0 12 3.030 0 0 0 1.361 0 0 0 0.0597 0.0550 0 0 0 0.352 0.941 0 0.261 0 0 0 0 0 0 0 0 - 13 2.412 0 0 0 0.879 0 0 0 .00820 0.0550 0 0 0 0.296 0.913 0 0.261 0 0 0 0 0 0 0 0 + 13 2.412 0 0 0 0.879 0 0 0 .00822 0.0550 0 0 0 0.296 0.913 0 0.261 0 0 0 0 0 0 0 0 14 1.553 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.296 0.941 0 0.261 0 0 0 0 0 0 0 0 15 1.610 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.296 0.998 0 0.261 0 0 0 0 0 0 0 0 16 1.737 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.366 1.055 0 0.261 0 0 0 0 0 0 0 0 @@ -14859,13 +14859,13 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.690 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.663 1.711 0 0.261 0 0 0 0 0 0 0 0 21 4.054 0 0 0 0 0 0 0 0 0.0550 0 0 0 1.593 1.768 0.377 0.261 0 0 0 0 0 0 0 0 22 7.429 0 0 0 1.195 0 0 0 0 0.0550 0 0 0 1.353 1.711 0.377 0.261 2.476 0 0 0 0 0 0 0 - 23 4.452 0 0 0 1.385 0 0 0 .00339 0.0550 0 0 0 0.888 1.483 0.377 0.261 0 0 0 0 0 0 0 0 + 23 4.452 0 0 0 1.385 0 0 0 .00344 0.0550 0 0 0 0.888 1.483 0.377 0.261 0 0 0 0 0 0 0 0 24 3.237 0 0 0 0.725 0 0 0 0 0.0550 0 0 0 0.536 1.283 0.377 0.261 0 0 0 0 0 0 0 0 -Day 62.756 0 0 0 6.518 0.0215 0 0 2.040 1.321 0 0 0 14.095 28.518 1.509 6.256 2.476 0 0 0 0 0 0 0 +Day 62.755 0 0 0 6.518 0.0215 0 0 2.039 1.321 0 0 0 14.095 28.518 1.509 6.256 2.476 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 236 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 236 @@ -14884,7 +14884,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 1.525 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.240 0.970 0 0.261 0 0 0 0 0 0 0 0 5 1.524 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.296 0.913 0 0.261 0 0 0 0 0 0 0 0 6 1.779 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.437 1.027 0 0.261 0 0 0 0 0 0 0 0 - 7 2.120 0 0 0 0 0 0 0 0.0143 0.0550 0 0 0 0.592 1.198 0 0.261 0 0 0 0 0 0 0 0 + 7 2.120 0 0 0 0 0 0 0 0.0144 0.0550 0 0 0 0.592 1.198 0 0.261 0 0 0 0 0 0 0 0 8 3.011 0 0 0 0 0 0 0 0.862 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 9 2.300 0 0 0 0.121 0 0 0 0.329 0.0550 0 0 0 0.479 1.055 0 0.261 0 0 0 0 0 0 0 0 10 3.090 0 0 0 1.195 0.0699 0 0 0.189 0.0550 0 0 0 0.409 0.913 0 0.261 0 0 0 0 0 0 0 0 @@ -14895,7 +14895,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.610 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.296 0.998 0 0.261 0 0 0 0 0 0 0 0 16 1.737 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.366 1.055 0 0.261 0 0 0 0 0 0 0 0 17 2.007 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.437 1.255 0 0.261 0 0 0 0 0 0 0 0 - 18 2.450 0 0 0 0 0 0 0 .00307 0.0550 0 0 0 0.620 1.511 0 0.261 0 0 0 0 0 0 0 0 + 18 2.450 0 0 0 0 0 0 0 .00308 0.0550 0 0 0 0.620 1.511 0 0.261 0 0 0 0 0 0 0 0 19 4.330 0 0 0 1.165 0 0 0 0.0108 0.0550 0 0 0 1.184 1.654 0 0.261 0 0 0 0 0 0 0 0 20 5.108 0 0 0 1.407 0 0 0 0.0116 0.0550 0 0 0 1.663 1.711 0 0.261 0 0 0 0 0 0 0 0 21 4.487 0 0 0 0.406 0 0 0 0.0276 0.0550 0 0 0 1.593 1.768 0.377 0.261 0 0 0 0 0 0 0 0 @@ -14928,7 +14928,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 1.789 0 0 0 0.0429 .00911 0 0 0 0.0550 0 0 0 0.366 1.055 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 237 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 237 @@ -14991,7 +14991,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 1.779 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.437 1.027 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 238 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 238 @@ -15054,7 +15054,7 @@ Day 71.945 0 0 0 14.086 .00028 0 0 4.396 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 239 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 239 @@ -15117,7 +15117,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 3.778 0 0 0 1.242 0 0 0 0.0889 0.0550 0 0 0 0.620 1.511 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 240 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 240 @@ -15180,7 +15180,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 3.385 0 0 0 0 0 0 0 1.237 0.0550 0 0 0 0.578 1.255 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 241 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 241 @@ -15243,7 +15243,7 @@ Hourly Energy Use, meter "MtrElec", Tue 01-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 242 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 242 @@ -15306,7 +15306,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.933 0 0 0 0 0 0 0 0.0971 0.0550 0 0 0 1.735 1.785 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 243 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 243 @@ -15369,7 +15369,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 3.222 0 0 0 0.873 0 0 0 0.655 0.0550 0 0 0 0.426 0.952 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 244 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 244 @@ -15432,7 +15432,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 245 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 245 @@ -15495,7 +15495,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 22 4.025 0 0 0 0 0 0 0 0.135 0.0550 0 0 0 1.411 1.785 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 246 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 246 @@ -15558,7 +15558,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 12 3.341 0 0 0 1.358 0 0 0 0 0.0550 0 0 0 0.368 0.982 0 0.261 0 0 0.319 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 247 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 247 @@ -15621,7 +15621,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 2 1.636 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.279 1.041 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 248 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 248 @@ -15684,7 +15684,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 24 3.866 0 0 0 1.276 0 0 0 0 0.0550 0 0 0 0.559 1.339 0.377 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 249 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 249 @@ -15747,7 +15747,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 14 1.803 0 0 0 0 0 0 0 0.197 0.0550 0 0 0 0.309 0.982 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 250 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 250 @@ -15810,7 +15810,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 1.577 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.250 1.011 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 251 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 251 @@ -15873,7 +15873,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Day 67.183 0 0 0 8.983 0 0 0 4.664 1.321 0 0 0 14.703 29.748 1.509 6.256 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 252 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 252 @@ -15936,7 +15936,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 3.393 0 0 0 1.323 0 0 0 0.270 0.0550 0 0 0 0.382 1.101 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 253 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 253 @@ -15999,7 +15999,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 1.842 0 0 0 0 0 0 0 0 0.0550 0 0 0 0.456 1.071 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 254 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 254 @@ -16062,7 +16062,7 @@ Day 73.262 0 0 0 14.068 0 0 0 4.777 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 255 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 255 @@ -16125,7 +16125,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 2.845 0 0 0 0 .00189 0 0 0.304 0.0550 0 0 0 0.647 1.577 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 256 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 256 @@ -16188,7 +16188,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 3.537 0 0 0 0 0 0 0 1.310 0.0550 0 0 0 0.603 1.309 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 257 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 257 @@ -16251,7 +16251,7 @@ Hourly Energy Use, meter "MtrElec", Mon 28-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 258 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 258 @@ -16314,7 +16314,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.943 0 0 0 0 0 0 0 0.108 0.0550 0 0 0 1.735 1.785 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 259 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 259 @@ -16377,7 +16377,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 1.978 0 0 0 0 0 0 0 0.284 0.0550 0 0 0 0.426 0.952 0 0.261 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 260 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 260 @@ -16440,7 +16440,7 @@ Day 66.040 0 0 0 8.666 0 0 0 3.838 1.321 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 261 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 261 @@ -16503,7 +16503,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 7.713 0 7.467 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.246 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 262 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 262 @@ -16566,7 +16566,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 1.233 0 0.994 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 263 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 263 @@ -16629,7 +16629,7 @@ Day 204.84 0 190.50 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 264 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 264 @@ -16692,7 +16692,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 6.436 0 5.084 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0.352 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 265 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 265 @@ -16755,7 +16755,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 34.707 0 34.415 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.292 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 266 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 266 @@ -16818,7 +16818,7 @@ Hourly Energy Use, meter "MtrNatGas", Sun 11-Jan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 267 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 267 @@ -16881,7 +16881,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 4.901 0 4.502 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.398 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 268 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 268 @@ -16944,7 +16944,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 15.647 0 15.434 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.212 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 269 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 269 @@ -17007,7 +17007,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 270 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 270 @@ -17070,7 +17070,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 22 6.968 0 6.570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.398 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 271 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 271 @@ -17133,7 +17133,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 12 15.495 0 11.903 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.373 0 0.219 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 272 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 272 @@ -17196,7 +17196,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 2 0.232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.232 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 273 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 273 @@ -17259,7 +17259,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 24 0.299 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.299 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 274 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 274 @@ -17322,7 +17322,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 14 9.874 0 9.655 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.219 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 275 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 275 @@ -17385,7 +17385,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 0.226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 276 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 276 @@ -17448,7 +17448,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Day 203.63 0 189.29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.637 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 277 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 277 @@ -17511,7 +17511,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 1.826 0 1.580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.246 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 278 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 278 @@ -17574,7 +17574,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 0.239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 279 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 279 @@ -17637,7 +17637,7 @@ Day 131.43 0 125.24 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 280 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 280 @@ -17700,7 +17700,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 0.823 0 0.495 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.328 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 281 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 281 @@ -17763,7 +17763,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 38.089 0 37.816 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 282 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 282 @@ -17826,7 +17826,7 @@ Hourly Energy Use, meter "MtrNatGas", Sat 07-Feb ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 283 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 283 @@ -17889,7 +17889,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.864 0 3.493 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.371 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 284 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 284 @@ -17952,7 +17952,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 14.804 0 14.606 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.198 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 285 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 285 @@ -18015,7 +18015,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 286 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 286 @@ -18078,7 +18078,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 22 5.183 0 1.949 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.862 0 0.371 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 287 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 287 @@ -18141,7 +18141,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 12 7.259 0 7.055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.204 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 288 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 288 @@ -18204,7 +18204,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 2 0.217 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.217 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 289 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 289 @@ -18267,7 +18267,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 24 0.279 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.279 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 290 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 290 @@ -18330,7 +18330,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 14 1.433 0 1.228 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.204 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 291 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 291 @@ -18393,7 +18393,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 0.210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.210 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 292 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 292 @@ -18456,7 +18456,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Day 96.621 0 90.431 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.191 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 293 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 293 @@ -18519,7 +18519,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 0.229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.229 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 294 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 294 @@ -18582,7 +18582,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 0.223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.223 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 295 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 295 @@ -18645,7 +18645,7 @@ Day 149.95 0 120.65 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 296 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 296 @@ -18708,7 +18708,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 5.508 0 5.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.301 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 297 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 297 @@ -18771,7 +18771,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 32.131 0 31.881 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.250 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 298 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 298 @@ -18834,7 +18834,7 @@ Hourly Energy Use, meter "MtrNatGas", Fri 06-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 299 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 299 @@ -18897,7 +18897,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 6.699 0 6.357 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.341 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 300 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 300 @@ -18960,7 +18960,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 12.743 0 12.555 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.188 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 301 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 301 @@ -19023,7 +19023,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.210 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 302 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 302 @@ -19086,7 +19086,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.296 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.296 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 303 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 303 @@ -19149,7 +19149,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 4.035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.853 0 0.182 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 304 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 304 @@ -19212,7 +19212,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.193 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.193 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 305 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 305 @@ -19275,7 +19275,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 306 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 306 @@ -19338,7 +19338,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 0.199 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.199 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 307 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 307 @@ -19401,7 +19401,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.182 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 308 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 308 @@ -19464,7 +19464,7 @@ Day 21.093 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 309 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 309 @@ -19527,7 +19527,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 0.250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.250 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 310 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 310 @@ -19590,7 +19590,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 311 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 311 @@ -19653,7 +19653,7 @@ Day 38.138 0 32.450 0 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sat 28-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 312 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 312 @@ -19716,7 +19716,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.330 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 313 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 313 @@ -19779,7 +19779,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 4.174 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.963 0 0.210 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 314 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 314 @@ -19842,7 +19842,7 @@ Hourly Energy Use, meter "MtrNatGas", Thu 02-Apr Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 315 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 315 @@ -19905,7 +19905,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 0.322 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.322 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 316 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 316 @@ -19968,7 +19968,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 5.002 0 4.831 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.171 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 317 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 317 @@ -20031,7 +20031,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.192 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 318 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 318 @@ -20094,7 +20094,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 6.561 0 6.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.270 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 319 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 319 @@ -20157,7 +20157,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 4.160 0 3.994 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.166 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 320 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 320 @@ -20220,7 +20220,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.176 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 321 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 321 @@ -20283,7 +20283,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 322 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 322 @@ -20346,7 +20346,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 5.388 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.207 0 0.182 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 323 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 323 @@ -20409,7 +20409,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.166 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.166 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 324 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 324 @@ -20472,7 +20472,7 @@ Day 25.786 0 12.896 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 325 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 325 @@ -20535,7 +20535,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 7.031 0 6.803 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.228 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 326 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 326 @@ -20598,7 +20598,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.218 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.218 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 327 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 327 @@ -20661,7 +20661,7 @@ Day 31.026 0 25.840 0 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Fri 24-Apr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 328 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 328 @@ -20724,7 +20724,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.301 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.301 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 329 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 329 @@ -20787,7 +20787,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 0.192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.192 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 330 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 330 @@ -20850,7 +20850,7 @@ Hourly Energy Use, meter "MtrNatGas", Wed 29-Apr Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 331 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 331 @@ -20913,7 +20913,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 0.322 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.322 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 332 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 332 @@ -20976,7 +20976,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 0.155 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.155 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 333 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 333 @@ -21039,7 +21039,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.173 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.173 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 334 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 334 @@ -21102,7 +21102,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.244 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.244 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 335 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 335 @@ -21165,7 +21165,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 0.161 0 0.0108 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.150 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 336 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 336 @@ -21228,7 +21228,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.159 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 337 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 337 @@ -21291,7 +21291,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 338 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 338 @@ -21354,7 +21354,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 0.164 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.164 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 339 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 339 @@ -21417,7 +21417,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.150 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 340 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 340 @@ -21480,7 +21480,7 @@ Day 9.325 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 341 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 341 @@ -21543,7 +21543,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 0.206 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.206 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 342 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 342 @@ -21606,7 +21606,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.197 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 343 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 343 @@ -21669,7 +21669,7 @@ Day 20.088 0 0 0 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Thu 21-May ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 344 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 344 @@ -21732,7 +21732,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 4.115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.843 0 0.272 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 345 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 345 @@ -21795,7 +21795,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 0.173 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.173 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 346 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 346 @@ -21858,7 +21858,7 @@ Hourly Energy Use, meter "MtrNatGas", Tue 26-May Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 347 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 347 @@ -21921,7 +21921,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 0.290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.290 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 348 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 348 @@ -21984,7 +21984,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 0.155 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.155 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 349 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 349 @@ -22047,7 +22047,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.173 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.173 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 350 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 350 @@ -22110,7 +22110,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.232 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 351 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 351 @@ -22173,7 +22173,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 0.143 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.143 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 352 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 352 @@ -22236,7 +22236,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.152 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 353 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 353 @@ -22299,7 +22299,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 354 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 354 @@ -22362,7 +22362,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 0.156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.156 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 355 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 355 @@ -22425,7 +22425,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.143 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.143 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 356 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 356 @@ -22488,7 +22488,7 @@ Day 19.865 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 357 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 357 @@ -22551,7 +22551,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 0.196 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.196 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 358 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 358 @@ -22614,7 +22614,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.187 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.187 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 359 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 359 @@ -22677,7 +22677,7 @@ Day 12.165 0 0 0 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Wed 17-Jun ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 360 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 360 @@ -22740,7 +22740,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.259 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.259 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 361 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 361 @@ -22803,7 +22803,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 0.165 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.165 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 362 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 362 @@ -22866,7 +22866,7 @@ Hourly Energy Use, meter "MtrNatGas", Mon 22-Jun Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 363 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 363 @@ -22929,7 +22929,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 0.277 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.277 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 364 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 364 @@ -22992,7 +22992,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 0.147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.147 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 365 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 365 @@ -23055,7 +23055,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.165 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.165 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 366 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 366 @@ -23118,7 +23118,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.232 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 367 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 367 @@ -23181,7 +23181,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 0.143 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.143 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 368 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 368 @@ -23244,7 +23244,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.155 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.155 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 369 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 369 @@ -23307,7 +23307,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 370 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 370 @@ -23370,7 +23370,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 0.160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.160 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 371 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 371 @@ -23433,7 +23433,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.146 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 372 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 372 @@ -23496,7 +23496,7 @@ Day 12.276 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 373 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 373 @@ -23559,7 +23559,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 0.201 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.201 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 374 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 374 @@ -23622,7 +23622,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.192 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 375 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 375 @@ -23685,7 +23685,7 @@ Day 4.573 0 0 0 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Tue 14-Jul ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 376 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 376 @@ -23748,7 +23748,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.265 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.265 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 377 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 377 @@ -23811,7 +23811,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 0.169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.169 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 378 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 378 @@ -23874,7 +23874,7 @@ Hourly Energy Use, meter "MtrNatGas", Sun 19-Jul Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 379 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 379 @@ -23937,7 +23937,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 0.284 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.284 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 380 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 380 @@ -24000,7 +24000,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 3.472 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.321 0 0.151 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 381 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 381 @@ -24063,7 +24063,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.169 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 382 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 382 @@ -24126,7 +24126,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.238 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.238 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 383 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 383 @@ -24189,7 +24189,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 0.146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.146 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 384 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 384 @@ -24252,7 +24252,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.155 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.155 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 385 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 385 @@ -24315,7 +24315,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 386 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 386 @@ -24378,7 +24378,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 0.172 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.172 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 387 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 387 @@ -24441,7 +24441,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.157 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 388 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 388 @@ -24504,7 +24504,7 @@ Day 12.611 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 389 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 389 @@ -24567,7 +24567,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 0.216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.216 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 390 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 390 @@ -24630,7 +24630,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.206 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.206 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 391 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 391 @@ -24693,7 +24693,7 @@ Day 4.908 0 0 0 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Mon 10-Aug ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 392 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 392 @@ -24756,7 +24756,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.285 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 393 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 393 @@ -24819,7 +24819,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 0.182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.182 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 394 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 394 @@ -24882,7 +24882,7 @@ Hourly Energy Use, meter "MtrNatGas", Sat 15-Aug Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 395 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 395 @@ -24945,7 +24945,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 0.304 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.304 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 396 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 396 @@ -25008,7 +25008,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 5.079 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.917 0 0.162 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 397 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 397 @@ -25071,7 +25071,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.182 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 398 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 398 @@ -25134,7 +25134,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.255 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 399 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 399 @@ -25197,7 +25197,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 0.157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.157 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 400 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 400 @@ -25260,7 +25260,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.167 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.167 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 401 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 401 @@ -25323,7 +25323,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 402 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 402 @@ -25386,7 +25386,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 0.172 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.172 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 403 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 403 @@ -25449,7 +25449,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.157 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 404 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 404 @@ -25512,7 +25512,7 @@ Day 12.609 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 405 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 405 @@ -25575,7 +25575,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 0.240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.240 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 406 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 406 @@ -25638,7 +25638,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.230 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 407 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 407 @@ -25701,7 +25701,7 @@ Day 13.167 0 0 0 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sun 06-Sep ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 408 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 408 @@ -25764,7 +25764,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.317 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.317 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 409 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 409 @@ -25827,7 +25827,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 0.202 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.202 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 410 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 410 @@ -25890,7 +25890,7 @@ Hourly Energy Use, meter "MtrNatGas", Fri 11-Sep Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 411 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 411 @@ -25953,7 +25953,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 0.339 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.339 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 412 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 412 @@ -26016,7 +26016,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 0.180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.180 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 413 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 413 @@ -26079,7 +26079,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.202 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.202 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 414 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 414 @@ -26142,7 +26142,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.284 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.284 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 415 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 415 @@ -26205,7 +26205,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 2.297 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.122 0 0.175 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 416 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 416 @@ -26268,7 +26268,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.186 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.186 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 417 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 417 @@ -26331,7 +26331,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 418 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 418 @@ -26394,7 +26394,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 0.191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 419 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 419 @@ -26457,7 +26457,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.175 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.175 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 420 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 420 @@ -26520,7 +26520,7 @@ Day 5.465 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 421 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 421 @@ -26583,7 +26583,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 0.240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.240 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 422 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 422 @@ -26646,7 +26646,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.251 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 423 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 423 @@ -26709,7 +26709,7 @@ Day 5.967 0 0 0 0 0 0 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sat 03-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 424 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 424 @@ -26772,7 +26772,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.346 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.346 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 425 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 425 @@ -26835,7 +26835,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 9 0.221 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.221 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 426 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 426 @@ -26898,7 +26898,7 @@ Hourly Energy Use, meter "MtrNatGas", Thu 08-Oct Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 427 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 427 @@ -26961,7 +26961,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 21 0.370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.370 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 428 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 428 @@ -27024,7 +27024,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 11 0.197 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 429 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 429 @@ -27087,7 +27087,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 1 0.221 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.221 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 430 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 430 @@ -27150,7 +27150,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 8.012 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.702 0 0.310 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 431 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 431 @@ -27213,7 +27213,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 13 0.191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 432 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 432 @@ -27276,7 +27276,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 3 0.203 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.203 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 433 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 433 @@ -27339,7 +27339,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 434 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 434 @@ -27402,7 +27402,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 0.209 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.209 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 435 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 435 @@ -27465,7 +27465,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 436 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 436 @@ -27528,7 +27528,7 @@ Day 5.967 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 437 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 437 @@ -27591,7 +27591,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 17 7.964 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.702 0 0.263 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 438 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 438 @@ -27654,7 +27654,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 7 0.251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.251 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 439 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 439 @@ -27693,10 +27693,10 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 6 0.215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.215 0 0 0 0 7 0.251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.251 0 0 0 0 - 8 5.920 0 5.657 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.263 0 0 0 0 - 9 3.224 0 3.004 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.221 0 0 0 0 - 10 1.738 0 1.547 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 - 11 0.245 0 0.0484 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 + 8 5.921 0 5.658 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.263 0 0 0 0 + 9 3.225 0 3.004 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.221 0 0 0 0 + 10 1.739 0 1.548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 + 11 0.245 0 0.0485 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 12 0.197 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 13 0.191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 14 0.197 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 @@ -27711,13 +27711,13 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.310 0 0 0 0 24 0.269 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.269 0 0 0 0 -Day 16.224 0 10.257 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.967 0 0 0 0 +Day 16.226 0 10.258 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.967 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Fri 30-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 440 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 440 @@ -27734,11 +27734,11 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 6 0.215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.215 0 0 0 0 7 0.251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.251 0 0 0 0 - 8 9.520 0 9.257 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.263 0 0 0 0 - 9 4.539 0 4.318 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.221 0 0 0 0 + 8 9.521 0 9.258 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.263 0 0 0 0 + 9 4.539 0 4.319 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.221 0 0 0 0 10 2.514 0 2.323 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 11 0.769 0 0.572 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 - 12 0.197 0 .00055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 + 12 0.198 0 .00061 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 13 0.191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 14 0.197 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 15 0.209 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.209 0 0 0 0 @@ -27752,7 +27752,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.310 0 0 0 0 24 0.269 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.269 0 0 0 0 -Day 22.438 0 16.471 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.967 0 0 0 0 +Day 22.440 0 16.473 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.967 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sat 31-Oct @@ -27766,7 +27766,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.191 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 6 0.215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.215 0 0 0 0 7 0.251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.251 0 0 0 0 - 8 13.409 0 13.146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.263 0 0 0 0 + 8 13.410 0 13.147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.263 0 0 0 0 9 6.151 0 5.930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.221 0 0 0 0 10 3.380 0 3.189 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.191 0 0 0 0 11 0.917 0 0.720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.197 0 0 0 0 @@ -27780,7 +27780,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.346 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.346 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 441 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 441 @@ -27793,7 +27793,7 @@ Test3 4BR W/ DHW Probes @intgains 23 0.310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.310 0 0 0 0 24 0.269 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.269 0 0 0 0 -Day 36.653 0 22.984 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.702 0 5.967 0 0 0 0 +Day 36.655 0 22.986 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.702 0 5.967 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sun 01-Nov @@ -27808,7 +27808,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 6.677 0 6.392 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 8 6.677 0 6.393 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 9 0.526 0 0.287 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 4.316 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.109 0 0.207 0 0 0 0 11 0.213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 @@ -27826,7 +27826,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 5.978 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.641 0 0.336 0 0 0 0 24 2.356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.065 0 0.291 0 0 0 0 -Day 28.760 0 6.679 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15.392 0 6.689 0 0 0 0 +Day 28.761 0 6.679 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15.392 0 6.689 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Mon 02-Nov @@ -27840,17 +27840,17 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 8.908 0 8.624 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 8 8.909 0 8.624 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 442 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 442 Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ - 9 1.446 0 1.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 9 1.447 0 1.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 0.213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 12 0.213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 @@ -27867,7 +27867,7 @@ Test3 4BR W/ DHW Probes @intgains 23 0.336 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 16.300 0 9.831 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 16.301 0 9.831 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Tue 03-Nov @@ -27881,8 +27881,8 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 1.536 0 1.252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 2.078 0 1.838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 8 1.537 0 1.252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 2.078 0 1.839 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 1.652 0 1.445 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 5.828 0 0.697 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.917 0 0.213 0 0 0 0 12 3.187 0 0.188 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.786 0 0.213 0 0 0 0 @@ -27894,19 +27894,19 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 2.092 0 1.749 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 19 1.519 0 1.144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 20 1.064 0 0.676 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 - 21 1.238 0 0.837 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 - 22 1.941 0 1.552 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 + 21 1.239 0 0.837 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 + 22 1.941 0 1.553 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 23 3.207 0 2.870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 37.040 0 22.868 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 +Day 37.042 0 22.870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Wed 04-Nov ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 443 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 443 @@ -27922,7 +27922,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 24.071 0 23.787 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 8 24.072 0 23.787 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 9 11.201 0 10.962 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 8.072 0 7.865 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 3.894 0 3.680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 @@ -27936,11 +27936,11 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 19 0.375 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 20 0.388 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 21 0.401 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 - 22 1.829 0 1.440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 + 22 1.829 0 1.441 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 23 3.585 0 3.249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 67.121 0 52.948 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 +Day 67.122 0 52.949 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Thu 05-Nov @@ -27957,7 +27957,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 28.675 0 28.390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 9 10.505 0 10.266 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 5.202 0 4.995 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 11 2.361 0 2.148 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 11 2.362 0 2.148 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 12 0.506 0 0.292 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 13 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 14 0.213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 @@ -27969,7 +27969,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 0.388 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 444 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 444 @@ -27981,7 +27981,7 @@ Test3 4BR W/ DHW Probes @intgains 23 0.336 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 53.866 0 47.396 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 53.866 0 47.397 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Fri 06-Nov @@ -28013,7 +28013,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.336 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 42.341 0 35.871 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 42.341 0 35.872 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sat 07-Nov @@ -28027,19 +28027,19 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 18.559 0 18.274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 7.146 0 6.907 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 4.949 0 4.742 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 8 18.565 0 18.281 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 7.149 0 6.909 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 10 4.950 0 4.743 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 445 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 445 Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ - 11 1.996 0 1.782 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 11 1.997 0 1.783 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 12 3.724 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.511 0 0.213 0 0 0 0 13 2.329 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.122 0 0.207 0 0 0 0 14 2.284 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.070 0 0.213 0 0 0 0 @@ -28054,7 +28054,7 @@ Test3 4BR W/ DHW Probes @intgains 23 0.336 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 45.878 0 31.705 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 +Day 45.890 0 31.717 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sun 08-Nov @@ -28068,25 +28068,25 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 15.311 0 15.026 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 5.350 0 5.110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 4.388 0 4.181 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 11 4.341 0 4.128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 - 12 3.781 0 3.568 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 8 15.313 0 15.028 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 5.351 0 5.111 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 10 4.389 0 4.182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 11 4.342 0 4.128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 12 3.782 0 3.568 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 13 3.388 0 3.181 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 14 3.176 0 2.962 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 14 3.176 0 2.963 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 15 2.590 0 2.364 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 16 2.386 0 2.147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 17 2.661 0 2.376 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 18 2.481 0 2.138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 - 19 1.532 0 1.156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 + 19 1.532 0 1.157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 20 0.664 0 0.276 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 21 0.684 0 0.283 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 22 1.372 0 0.984 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 23 2.662 0 2.325 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 58.675 0 52.205 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 58.681 0 52.211 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Mon 09-Nov @@ -28095,7 +28095,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 446 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 446 @@ -28109,9 +28109,9 @@ Test3 4BR W/ DHW Probes @intgains 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 16.765 0 16.481 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 8 16.766 0 16.481 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 9 7.568 0 7.329 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 4.374 0 4.166 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 10 4.374 0 4.167 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 2.636 0 2.422 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 12 0.945 0 0.731 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 13 1.824 0 1.617 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 @@ -28122,12 +28122,12 @@ Test3 4BR W/ DHW Probes @intgains 18 0.961 0 0.618 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 19 0.610 0 0.235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 20 0.388 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 - 21 0.483 0 0.0821 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 + 21 0.483 0 0.0822 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 22 1.524 0 1.136 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 23 0.336 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 52.440 0 38.269 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.702 0 6.469 0 0 0 0 +Day 52.441 0 38.270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.702 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Tue 10-Nov @@ -28141,14 +28141,14 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 18.643 0 18.359 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 8.435 0 8.196 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 8 18.643 0 18.358 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 8.435 0 8.195 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 6.237 0 6.030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 9.132 0 4.002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.917 0 0.213 0 0 0 0 12 7.096 0 4.096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.786 0 0.213 0 0 0 0 13 4.719 0 4.512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 14 4.220 0 4.006 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 - 15 3.049 0 2.822 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 + 15 3.048 0 2.822 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 16 2.496 0 2.256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 17 2.879 0 2.594 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 18 2.984 0 2.641 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 @@ -28158,7 +28158,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 22 1.667 0 1.279 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 447 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 447 @@ -28168,7 +28168,7 @@ Test3 4BR W/ DHW Probes @intgains 23 2.880 0 2.543 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 81.016 0 66.844 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 +Day 81.014 0 66.841 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Wed 11-Nov @@ -28182,7 +28182,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 19.750 0 19.466 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 8 19.750 0 19.465 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 9 9.615 0 9.375 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 8.020 0 7.813 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 6.771 0 6.558 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 @@ -28200,7 +28200,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 2.777 0 2.440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 87.381 0 73.211 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.700 0 6.469 0 0 0 0 +Day 87.380 0 73.211 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.700 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Thu 12-Nov @@ -28221,7 +28221,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 12 0.853 0 0.640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 448 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 448 @@ -28273,7 +28273,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 0.336 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 31.471 0 25.002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 31.472 0 25.002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sat 14-Nov @@ -28284,7 +28284,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 2 0.226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 449 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 449 @@ -28297,7 +28297,7 @@ Test3 4BR W/ DHW Probes @intgains 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 8 14.718 0 14.433 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 5.289 0 5.049 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 9 5.289 0 5.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 2.363 0 2.156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 0.490 0 0.277 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 12 0.213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 @@ -28338,7 +28338,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 15 1.127 0 0.901 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 16 1.284 0 1.045 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 17 1.889 0 1.605 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 18 2.006 0 1.664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 + 18 2.007 0 1.664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 19 1.565 0 1.190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 20 1.419 0 1.031 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 21 1.988 0 1.587 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 @@ -28347,7 +28347,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 450 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 450 @@ -28355,7 +28355,7 @@ Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ -Day 73.903 0 67.433 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 73.903 0 67.434 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Mon 16-Nov @@ -28401,34 +28401,34 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 25.345 0 25.060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 12.282 0 12.043 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 9.071 0 8.864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 11 11.297 0 6.167 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.917 0 0.213 0 0 0 0 - 12 9.289 0 6.290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.786 0 0.213 0 0 0 0 - 13 6.322 0 6.115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 14 5.573 0 5.360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 8 25.358 0 25.073 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 12.279 0 12.039 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 10 9.069 0 8.862 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 11 11.295 0 6.165 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.917 0 0.213 0 0 0 0 + 12 9.288 0 6.289 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.786 0 0.213 0 0 0 0 + 13 6.320 0 6.113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 14 5.565 0 5.352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 451 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 451 Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ - 15 5.017 0 4.791 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 - 16 4.568 0 4.329 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 17 4.965 0 4.680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 18 4.858 0 4.515 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 - 19 3.857 0 3.481 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 - 20 2.907 0 2.519 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 - 21 2.911 0 2.510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 - 22 3.439 0 3.050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 - 23 4.680 0 4.344 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 + 15 5.029 0 4.802 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 + 16 4.582 0 4.343 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 17 4.993 0 4.709 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 18 4.863 0 4.520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 + 19 3.855 0 3.480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 + 20 2.893 0 2.505 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 + 21 2.897 0 2.496 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 + 22 3.444 0 3.056 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 + 23 4.682 0 4.345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 118.29 0 104.12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 +Day 118.32 0 104.15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Wed 18-Nov @@ -28442,25 +28442,25 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 26.432 0 26.147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 12.640 0 12.400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 10.571 0 10.364 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 11 9.079 0 8.865 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 - 12 8.006 0 7.793 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 - 13 7.236 0 7.029 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 14 4.899 0 4.685 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 8 26.431 0 26.146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 12.638 0 12.398 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 10 10.569 0 10.362 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 11 9.078 0 8.864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 12 8.005 0 7.792 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 13 7.235 0 7.028 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 14 4.898 0 4.684 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 15 11.680 0 3.754 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.700 0 0.226 0 0 0 0 - 16 5.194 0 4.954 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 17 5.130 0 4.846 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 18 4.521 0 3.178 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0.343 0 0 0 0 - 19 8.916 0 1.838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.702 0 0.375 0 0 0 0 - 20 3.025 0 2.637 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 - 21 3.216 0 2.815 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 + 16 5.193 0 4.954 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 17 5.130 0 4.845 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 18 4.521 0 3.177 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0.343 0 0 0 0 + 19 8.915 0 1.838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.702 0 0.375 0 0 0 0 + 20 3.024 0 2.636 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 + 21 3.215 0 2.814 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 22 3.669 0 3.281 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 23 4.727 0 4.390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 130.85 0 108.98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15.402 0 6.469 0 0 0 0 +Day 130.84 0 108.96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15.402 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Thu 19-Nov @@ -28473,7 +28473,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 0.220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.220 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 452 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 452 @@ -28483,9 +28483,9 @@ Test3 4BR W/ DHW Probes @intgains 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 7 0.272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 23.441 0 23.157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 8 23.440 0 23.156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 9 8.227 0 7.988 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 5.922 0 5.715 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 10 5.923 0 5.716 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 3.063 0 2.849 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 12 1.165 0 0.952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 13 0.245 0 0.0376 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 @@ -28501,7 +28501,7 @@ Test3 4BR W/ DHW Probes @intgains 23 3.056 0 2.720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 50.488 0 44.019 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 50.487 0 44.017 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Fri 20-Nov @@ -28514,13 +28514,13 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 0.220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.220 0 0 0 0 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 - 7 7.474 0 7.203 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 32.223 0 31.938 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 14.035 0 13.796 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 8.309 0 8.102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 11 4.686 0 4.473 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 - 12 2.199 0 1.985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 - 13 0.480 0 0.273 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 7 7.474 0 7.202 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 + 8 32.197 0 31.913 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 14.000 0 13.761 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 10 8.329 0 8.122 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 11 4.690 0 4.476 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 12 2.201 0 1.988 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 13 0.481 0 0.274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 14 0.213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 15 0.226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 16 0.239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 @@ -28530,13 +28530,13 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 0.388 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 21 0.401 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 22 0.388 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 - 23 0.449 0 0.113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 + 23 0.451 0 0.115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 74.352 0 67.883 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 74.320 0 67.851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 453 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 453 @@ -28555,26 +28555,26 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 0.220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.220 0 0 0 0 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 - 7 0.749 0 0.477 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 28.973 0 28.688 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 11.193 0 10.953 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 6.480 0 6.273 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 11 3.995 0 3.782 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 - 12 2.078 0 1.864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 7 0.751 0 0.479 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 + 8 28.974 0 28.690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 11.194 0 10.954 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 10 6.481 0 6.274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 + 11 3.996 0 3.782 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 12 2.078 0 1.865 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 13 0.746 0 0.539 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 14 0.213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 15 0.226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 16 0.239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 17 0.285 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 18 0.445 0 0.102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 - 19 0.736 0 0.360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 + 19 0.736 0 0.361 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.375 0 0 0 0 20 0.775 0 0.387 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 - 21 1.318 0 0.917 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 - 22 2.466 0 2.077 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 + 21 1.319 0 0.918 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 + 22 2.466 0 2.078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 23 4.165 0 3.829 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.336 0 0 0 0 24 0.291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.291 0 0 0 0 -Day 66.718 0 60.249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 +Day 66.726 0 60.257 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Sun 22-Nov @@ -28587,19 +28587,19 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 0.220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.220 0 0 0 0 5 0.207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 - 7 6.131 0 5.860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 - 8 33.024 0 32.740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 15.932 0 15.693 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 - 10 12.864 0 8.548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.109 0 0.207 0 0 0 0 - 11 5.889 0 5.676 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 - 12 3.829 0 3.616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 7 6.132 0 5.860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 + 8 33.025 0 32.740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 + 9 15.933 0 15.693 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 10 12.867 0 8.551 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.109 0 0.207 0 0 0 0 + 11 5.890 0 5.677 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 12 3.829 0 3.615 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 13 2.259 0 2.052 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 - 14 0.458 0 0.244 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 + 14 0.457 0 0.244 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 15 0.226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.226 0 0 0 0 16 0.239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 454 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 454 @@ -28611,11 +28611,11 @@ Test3 4BR W/ DHW Probes @intgains 19 3.300 0 1.375 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.549 0 0.375 0 0 0 0 20 2.231 0 1.843 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 21 3.096 0 2.695 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.401 0 0 0 0 - 22 3.428 0 3.039 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 + 22 3.427 0 3.039 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.388 0 0 0 0 23 9.815 0 3.837 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.641 0 0.336 0 0 0 0 24 2.356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.065 0 0.291 0 0 0 0 -Day 110.24 0 88.381 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15.392 0 6.469 0 0 0 0 +Day 110.25 0 88.384 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15.392 0 6.469 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Mon 23-Nov @@ -28662,7 +28662,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 0.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.233 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 455 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 455 @@ -28671,7 +28671,7 @@ Test3 4BR W/ DHW Probes @intgains 7 16.853 0 16.581 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.272 0 0 0 0 8 38.656 0 38.372 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 - 9 19.487 0 19.248 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 + 9 19.488 0 19.248 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239 0 0 0 0 10 11.407 0 11.200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.207 0 0 0 0 11 6.231 0 6.017 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.213 0 0 0 0 12 6.167 0 2.081 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.872 0 0.213 0 0 0 0 @@ -28725,7 +28725,7 @@ Day 168.14 0 146.27 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 456 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 456 @@ -28788,7 +28788,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 3.301 0 2.958 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.343 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 457 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 457 @@ -28851,7 +28851,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 41.437 0 41.152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.285 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 458 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 458 @@ -28914,7 +28914,7 @@ Hourly Energy Use, meter "MtrNatGas", Tue 01-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 459 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 459 @@ -28977,7 +28977,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.637 0 3.233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.405 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 460 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 460 @@ -29040,7 +29040,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 22.013 0 21.797 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.216 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 461 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 461 @@ -29103,7 +29103,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 462 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 462 @@ -29166,7 +29166,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 22 4.911 0 4.506 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.405 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 463 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 463 @@ -29208,7 +29208,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 23 4.640 0 4.289 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.351 0 0 0 0 24 0.304 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.304 0 0 0 0 -Day 148.91 0 134.45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.748 0 0 0 0 +Day 148.91 0 134.46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7.703 0 6.748 0 0 0 0 Hourly Energy Use, meter "MtrNatGas", Wed 09-Dec @@ -29229,7 +29229,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 12 5.141 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.919 0 0.223 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 464 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 464 @@ -29292,7 +29292,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 2 0.236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.236 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 465 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 465 @@ -29355,7 +29355,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 24 0.304 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.304 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 466 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 466 @@ -29418,7 +29418,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 14 6.772 0 6.549 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.223 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 467 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 467 @@ -29481,7 +29481,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 4 0.229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.229 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 468 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 468 @@ -29544,7 +29544,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Day 161.95 0 155.20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.748 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 469 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 469 @@ -29607,7 +29607,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 16 9.250 0 9.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.250 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 470 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 470 @@ -29670,7 +29670,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 6 0.243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.243 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 471 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 471 @@ -29733,7 +29733,7 @@ Day 173.40 0 158.94 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 472 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 472 @@ -29796,7 +29796,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 18 10.462 0 10.104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.358 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 473 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 473 @@ -29859,7 +29859,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 8 43.871 0 43.574 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.297 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 474 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 474 @@ -29922,7 +29922,7 @@ Hourly Energy Use, meter "MtrNatGas", Mon 28-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 475 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 475 @@ -29985,7 +29985,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 20 3.985 0 3.580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.405 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 476 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 476 @@ -30048,7 +30048,7 @@ Hr Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan 10 9.666 0 9.450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.216 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 477 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 477 @@ -30111,7 +30111,7 @@ Hr Tot+ Unkn+ InfX+ VntX+ FanX+ InfU+ VntU+ FanU+ InfC+ VntC+ FanC+ Duct+ HVAC ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 478 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 478 @@ -30141,8 +30141,8 @@ Jun 445.4 0 28.0 311.1 0 106.3 0 0 0 0 0 0 Jul 445.6 0 26.4 295.8 0 106.8 0 0 0 0 0 0 16.7 -445.4 0 -2.9 -22.1 -63.4 -0.5 0 -339.7 0 0 0 0 -16.9 Aug 452.4 0 26.9 313.0 0 108.1 0 0 0 0 0 0 4.5 -452.1 0 -2.5 -29.0 -63.4 -0.4 0 -352.4 0 0 0 0 -4.5 Sep 440.8 0 27.0 302.2 0 107.4 0 0 0 0 0 0 4.2 -440.9 0 -2.1 -17.1 -63.5 -0.4 0 -353.7 0 0 0 0 -4.3 -Oct 252.9 0 27.0 204.2 0 20.6 0 0 0 0 0 0 1.0 -253.1 0 -3.5 -177.5 -64.0 -7.1 0 0 0 0 0 0 -1.0 -Nov 110.4 0 42.7 0 0 23.2 0 0 0 0 0 0 44.5 -110.9 0 -1.0 0 -64.3 -0.4 0 0 0 0 0 0 -45.1 +Oct 252.9 0 27.0 204.2 0 20.6 0 0 0 0 0 0 1.0 -253.1 0 -3.5 -177.4 -64.0 -7.1 0 0 0 0 0 0 -1.0 +Nov 110.5 0 42.7 0 0 23.2 0 0 0 0 0 0 44.5 -110.9 0 -1.0 0 -64.3 -0.4 0 0 0 0 0 0 -45.1 Dec 163.1 0 47.2 0 0 20.0 0 0 0 0 0 0 95.9 -163.7 0 -1.2 0 -64.4 -1.1 0 0 0 0 0 0 -97.1 Yr 259.3 0 35.2 135.1 0 53.5 0 0 0 0 0 0 35.5 -259.6 0 -2.1 -31.4 -64.0 -1.2 0 -124.9 0 0 0 0 -35.9 @@ -30174,7 +30174,7 @@ Yr 259.3 0 35.2 135.1 0 53.5 0 0 0 0 0 0 35. ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 479 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 479 @@ -30237,7 +30237,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 9.158 0 9.158 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 480 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 480 @@ -30300,7 +30300,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 481 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 481 @@ -30363,7 +30363,7 @@ Day 138.633 0 55.521 45.208 12.227 25.677 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 482 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 482 @@ -30426,7 +30426,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 22.701 0 0.353 0 0 22.348 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 483 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 483 @@ -30489,7 +30489,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 23.892 0 1.010 22.883 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 484 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 484 @@ -30552,7 +30552,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Sun 11-Jan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 485 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 485 @@ -30615,7 +30615,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 0.317 0 0.317 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 486 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 486 @@ -30678,7 +30678,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 31.145 0 5.467 0 0 25.678 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 487 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 487 @@ -30741,7 +30741,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr --- ------- ------- ------- ------- ------- ------- ------- ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 488 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 488 @@ -30804,7 +30804,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 22 6.492 0 6.492 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 489 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 489 @@ -30867,7 +30867,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 12 15.212 0 0.782 0 0 14.430 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 490 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 490 @@ -30930,7 +30930,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 2 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 491 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 491 @@ -30993,7 +30993,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 24 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 492 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 492 @@ -31056,7 +31056,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 14 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 493 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 493 @@ -31119,7 +31119,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 4 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 494 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 494 @@ -31182,7 +31182,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr Day 79.999 0 31.778 22.538 0 25.684 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 495 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 495 @@ -31245,7 +31245,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 496 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 496 @@ -31308,7 +31308,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 497 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 497 @@ -31371,7 +31371,7 @@ Day 85.734 0 27.027 58.707 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 498 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 498 @@ -31434,7 +31434,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 12.213 0 1.349 0 10.865 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 499 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 499 @@ -31497,7 +31497,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 500 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 500 @@ -31560,7 +31560,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Sat 07-Feb ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 501 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 501 @@ -31623,7 +31623,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 3.347 0 3.347 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 502 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 502 @@ -31686,7 +31686,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 0.479 0 0.479 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 503 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 503 @@ -31749,7 +31749,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr --- ------- ------- ------- ------- ------- ------- ------- ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 504 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 504 @@ -31812,7 +31812,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 22 9.792 0 3.863 0 0 5.929 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 505 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 505 @@ -31875,7 +31875,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 12 3.022 0 3.022 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 506 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 506 @@ -31938,7 +31938,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 2 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 507 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 507 @@ -32001,7 +32001,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 24 0.0980 0 0.0980 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 508 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 508 @@ -32064,7 +32064,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 14 1.831 0 1.831 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 509 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 509 @@ -32127,7 +32127,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 4 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 510 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 510 @@ -32190,7 +32190,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr Day 77.180 0 41.450 35.730 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 511 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 511 @@ -32253,7 +32253,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 1.514 0 1.514 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 512 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 512 @@ -32316,7 +32316,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 0.684 0 0.684 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 513 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 513 @@ -32379,7 +32379,7 @@ Day 224.965 0 76.775 51.296 19.852 77.042 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 514 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 514 @@ -32442,7 +32442,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 6.948 0 6.948 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 515 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 515 @@ -32505,7 +32505,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 0.146 0 0.146 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 516 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 516 @@ -32568,7 +32568,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Fri 06-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 517 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 517 @@ -32631,7 +32631,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 1.271 0 1.271 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 518 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 518 @@ -32694,7 +32694,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 11.026 0 11.026 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 519 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 519 @@ -32757,7 +32757,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 520 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 520 @@ -32820,7 +32820,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 521 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 521 @@ -32883,7 +32883,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 14.231 0 1.398 0 0 12.833 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 522 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 522 @@ -32946,7 +32946,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 523 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 523 @@ -33009,7 +33009,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 524 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 524 @@ -33072,7 +33072,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 525 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 525 @@ -33135,7 +33135,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 526 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 526 @@ -33198,7 +33198,7 @@ Day 123.594 0 39.650 23.889 8.693 51.362 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 527 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 527 @@ -33261,7 +33261,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.390 0 0.390 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 528 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 528 @@ -33324,7 +33324,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0.191 0 0.191 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 529 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 529 @@ -33387,7 +33387,7 @@ Day 62.511 0 15.723 36.468 10.319 0 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Sat 28-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 530 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 530 @@ -33450,7 +33450,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 2.716 0 2.716 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 531 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 531 @@ -33513,7 +33513,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 12.467 0 0 0 0 12.467 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 532 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 532 @@ -33576,7 +33576,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Thu 02-Apr Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 533 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 533 @@ -33639,7 +33639,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 9.544 0 0 0 0 9.544 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 534 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 534 @@ -33702,7 +33702,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 535 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 535 @@ -33765,7 +33765,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 536 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 536 @@ -33828,7 +33828,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 0.876 0 0.876 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 537 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 537 @@ -33891,7 +33891,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0.0620 0 0.0620 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 538 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 538 @@ -33954,7 +33954,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 539 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 539 @@ -34017,7 +34017,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 540 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 540 @@ -34080,7 +34080,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0.410 0 0.410 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 541 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 541 @@ -34143,7 +34143,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 542 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 542 @@ -34206,7 +34206,7 @@ Day 133.335 0 39.271 68.379 0 25.685 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 543 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 543 @@ -34269,7 +34269,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.814 0 0.814 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 544 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 544 @@ -34332,7 +34332,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 545 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 545 @@ -34395,7 +34395,7 @@ Day 63.489 0 43.150 20.339 0 0 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Fri 24-Apr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 546 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 546 @@ -34458,7 +34458,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 6.958 0 6.958 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 547 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 547 @@ -34521,7 +34521,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 4.305 0 4.305 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 548 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 548 @@ -34584,7 +34584,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Wed 29-Apr Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 549 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 549 @@ -34647,7 +34647,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 3.197 0 3.197 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 550 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 550 @@ -34710,7 +34710,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 24.343 0 24.343 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 551 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 551 @@ -34773,7 +34773,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 552 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 552 @@ -34836,7 +34836,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 12.432 0 12.432 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 553 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 553 @@ -34899,7 +34899,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 554 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 554 @@ -34962,7 +34962,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 555 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 555 @@ -35025,7 +35025,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 556 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 556 @@ -35088,7 +35088,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 557 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 557 @@ -35151,7 +35151,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0.660 0 0.660 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 558 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 558 @@ -35214,7 +35214,7 @@ Day 55.692 0 27.228 12.991 0 15.474 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 559 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 559 @@ -35277,7 +35277,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.226 0 0.226 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 560 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 560 @@ -35340,7 +35340,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 561 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 561 @@ -35403,7 +35403,7 @@ Day 172.329 0 61.923 59.045 0 51.361 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Thu 21-May ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 562 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 562 @@ -35466,7 +35466,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 563 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 563 @@ -35529,7 +35529,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 564 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 564 @@ -35592,7 +35592,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Tue 26-May Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 565 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 565 @@ -35655,7 +35655,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 18.157 0 2.160 15.998 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 566 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 566 @@ -35718,7 +35718,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0.155 0 0.155 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 567 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 567 @@ -35781,7 +35781,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0.237 0 0.237 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 568 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 568 @@ -35844,7 +35844,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 1.523 0 1.523 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 569 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 569 @@ -35907,7 +35907,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0.258 0 0.258 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 570 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 570 @@ -35970,7 +35970,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 571 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 571 @@ -36033,7 +36033,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 572 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 572 @@ -36096,7 +36096,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 48.195 0 22.515 0 0 25.680 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 573 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 573 @@ -36159,7 +36159,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 574 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 574 @@ -36222,7 +36222,7 @@ Day 78.546 0 27.184 0 0 51.361 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 575 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 575 @@ -36285,7 +36285,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 576 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 576 @@ -36348,7 +36348,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0.822 0 0.822 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 577 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 577 @@ -36411,7 +36411,7 @@ Day 92.571 0 32.938 33.948 0 25.686 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Wed 17-Jun ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 578 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 578 @@ -36474,7 +36474,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 3.899 0 3.899 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 579 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 579 @@ -36537,7 +36537,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 4.385 0 4.385 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 580 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 580 @@ -36600,7 +36600,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Mon 22-Jun Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 581 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 581 @@ -36663,7 +36663,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 582 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 582 @@ -36726,7 +36726,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 583 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 583 @@ -36789,7 +36789,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 584 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 584 @@ -36852,7 +36852,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 13.431 0 4.947 8.484 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 585 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 585 @@ -36915,7 +36915,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0.450 0 0.450 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 586 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 586 @@ -36978,7 +36978,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 587 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 587 @@ -37041,7 +37041,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 588 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 588 @@ -37104,7 +37104,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 8.368 0 0 0 0 8.368 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 589 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 589 @@ -37167,7 +37167,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 590 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 590 @@ -37230,7 +37230,7 @@ Day 195.856 0 59.936 105.238 0 25.683 5.000 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 591 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 591 @@ -37293,7 +37293,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 592 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 592 @@ -37356,7 +37356,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0.216 0 0.216 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 593 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 593 @@ -37419,7 +37419,7 @@ Day 127.859 0 46.782 63.421 17.656 0 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Tue 14-Jul ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 594 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 594 @@ -37482,7 +37482,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 5.756 0 5.756 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 595 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 595 @@ -37545,7 +37545,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 0.196 0 0.196 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 596 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 596 @@ -37608,7 +37608,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Sun 19-Jul Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 597 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 597 @@ -37671,7 +37671,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 6.458 0 6.458 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 598 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 598 @@ -37734,7 +37734,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0.0672 0 0.0672 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 599 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 599 @@ -37797,7 +37797,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 600 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 600 @@ -37860,7 +37860,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 11.896 0 11.896 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 601 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 601 @@ -37923,7 +37923,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 24.591 0 7.256 17.334 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 602 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 602 @@ -37986,7 +37986,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0.0561 0 0.0561 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 603 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 603 @@ -38049,7 +38049,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 604 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 604 @@ -38112,7 +38112,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 20.152 0 20.152 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 605 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 605 @@ -38175,7 +38175,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 606 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 606 @@ -38238,7 +38238,7 @@ Day 79.999 0 31.778 22.538 0 25.684 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 607 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 607 @@ -38301,7 +38301,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.664 0 0.664 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 608 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 608 @@ -38364,7 +38364,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 6.712 0 6.712 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 609 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 609 @@ -38427,7 +38427,7 @@ Day 85.734 0 27.027 58.707 0 0 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Mon 10-Aug ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 610 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 610 @@ -38490,7 +38490,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 26.625 0 5.403 21.222 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 611 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 611 @@ -38553,7 +38553,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 0.460 0 0.460 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 612 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 612 @@ -38616,7 +38616,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Sat 15-Aug Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 613 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 613 @@ -38679,7 +38679,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 614 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 614 @@ -38742,7 +38742,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 9.289 0 0 0 0 9.289 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 615 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 615 @@ -38805,7 +38805,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 616 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 616 @@ -38868,7 +38868,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 3.683 0 3.683 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 617 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 617 @@ -38931,7 +38931,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 23.987 0 0.362 7.126 0 16.499 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 618 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 618 @@ -38994,7 +38994,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 619 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 619 @@ -39057,7 +39057,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 620 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 620 @@ -39120,7 +39120,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 621 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 621 @@ -39183,7 +39183,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 622 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 622 @@ -39246,7 +39246,7 @@ Day 138.633 0 55.521 45.208 12.227 25.677 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 623 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 623 @@ -39309,7 +39309,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 1.265 0 1.265 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 624 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 624 @@ -39372,7 +39372,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 6.740 0 6.740 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 625 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 625 @@ -39435,7 +39435,7 @@ Day 176.199 0 97.915 52.604 0 25.679 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Sun 06-Sep ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 626 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 626 @@ -39498,7 +39498,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 7.122 0 7.122 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 627 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 627 @@ -39561,7 +39561,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 1.905 0 1.905 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 628 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 628 @@ -39624,7 +39624,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Fri 11-Sep Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 629 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 629 @@ -39687,7 +39687,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 7.051 0 1.436 5.615 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 630 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 630 @@ -39750,7 +39750,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 5.581 0 5.581 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 631 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 631 @@ -39813,7 +39813,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 632 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 632 @@ -39876,7 +39876,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 633 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 633 @@ -39939,7 +39939,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 7.008 0 0.105 0 0 6.903 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 634 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 634 @@ -40002,7 +40002,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 635 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 635 @@ -40065,7 +40065,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 636 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 636 @@ -40128,7 +40128,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0.258 0 0.258 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 637 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 637 @@ -40191,7 +40191,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0.0980 0 0.0980 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 638 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 638 @@ -40254,7 +40254,7 @@ Day 85.734 0 27.027 58.707 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 639 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 639 @@ -40317,7 +40317,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 640 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 640 @@ -40380,7 +40380,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 26.040 0 1.085 24.955 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 641 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 641 @@ -40443,7 +40443,7 @@ Day 23.155 0 16.361 6.794 0 0 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Sat 03-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 642 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 642 @@ -40506,7 +40506,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 12.908 0 1.432 11.476 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 643 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 643 @@ -40569,7 +40569,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 28.414 0 2.744 0 0 25.670 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 644 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 644 @@ -40632,7 +40632,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Thu 08-Oct Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 645 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 645 @@ -40695,7 +40695,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 9.544 0 0 0 0 9.544 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 646 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 646 @@ -40758,7 +40758,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 647 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 647 @@ -40821,7 +40821,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 648 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 648 @@ -40884,7 +40884,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 4.106 0 4.106 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 649 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 649 @@ -40947,7 +40947,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0.0620 0 0.0620 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 650 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 650 @@ -41010,7 +41010,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 651 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 651 @@ -41073,7 +41073,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 652 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 652 @@ -41136,7 +41136,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0.716 0 0.716 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 653 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 653 @@ -41199,7 +41199,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0.124 0 0.124 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 654 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 654 @@ -41262,7 +41262,7 @@ Day 85.889 0 58.034 15.004 12.850 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 655 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 655 @@ -41325,7 +41325,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 1.606 0 1.606 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 656 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 656 @@ -41388,7 +41388,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 657 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 657 @@ -41451,7 +41451,7 @@ Day 63.489 0 43.150 20.339 0 0 0 Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Fri 30-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 658 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 658 @@ -41514,7 +41514,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 5.251 0 5.251 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 659 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 659 @@ -41577,7 +41577,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 33.657 0 0.195 33.462 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 660 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 660 @@ -41640,7 +41640,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Wed 04-Nov ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 661 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 661 @@ -41703,7 +41703,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 12.892 0 12.892 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 662 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 662 @@ -41766,7 +41766,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 32.883 0 1.624 31.259 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 663 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 663 @@ -41829,7 +41829,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr --- ------- ------- ------- ------- ------- ------- ------- ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 664 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 664 @@ -41892,7 +41892,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 22 0.264 0 0.264 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 665 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 665 @@ -41955,7 +41955,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 12 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 666 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 666 @@ -42018,7 +42018,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 2 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 667 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 667 @@ -42081,7 +42081,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 24 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 668 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 668 @@ -42144,7 +42144,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 14 0.800 0 0.800 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 669 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 669 @@ -42207,7 +42207,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 4 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 670 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 670 @@ -42270,7 +42270,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr Day 39.703 0 34.700 0 0 0 5.003 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 671 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 671 @@ -42333,7 +42333,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 1.040 0 1.040 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 672 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 672 @@ -42396,7 +42396,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 673 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 673 @@ -42459,7 +42459,7 @@ Day 136.066 0 26.567 58.143 0 51.357 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 674 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 674 @@ -42522,7 +42522,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 8.972 0 1.297 7.675 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 675 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 675 @@ -42585,7 +42585,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 676 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 676 @@ -42648,7 +42648,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Tue 01-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 677 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 677 @@ -42711,7 +42711,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 0.0620 0 0.0620 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 678 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 678 @@ -42774,7 +42774,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 16.007 0 3.016 12.991 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 679 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 679 @@ -42837,7 +42837,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr --- ------- ------- ------- ------- ------- ------- ------- ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 680 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 680 @@ -42900,7 +42900,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 22 1.339 0 1.339 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 681 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 681 @@ -42963,7 +42963,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 12 23.399 0 14.123 0 0 9.276 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 682 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 682 @@ -43026,7 +43026,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 2 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 683 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 683 @@ -43089,7 +43089,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 24 6.216 0 6.216 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 684 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 684 @@ -43152,7 +43152,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 14 0.655 0 0.655 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 685 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 685 @@ -43215,7 +43215,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 4 0.0588 0 0.0588 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 686 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 686 @@ -43278,7 +43278,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr Day 50.622 0 31.958 18.664 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 687 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 687 @@ -43341,7 +43341,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 688 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 688 @@ -43404,7 +43404,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 6.117 0 6.117 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 689 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 689 @@ -43467,7 +43467,7 @@ Day 92.571 0 32.938 33.948 0 25.686 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 690 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 690 @@ -43530,7 +43530,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 0.309 0 0.309 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 691 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 691 @@ -43593,7 +43593,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 0.602 0 0.602 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 692 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 692 @@ -43656,7 +43656,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrFXMix", Mon 28-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 693 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 693 @@ -43719,7 +43719,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 0.0588 0 0.0588 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 694 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 694 @@ -43782,7 +43782,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 0.0588 0 0.0588 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 695 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 695 @@ -43845,7 +43845,7 @@ Day 50.622 0 31.958 18.664 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 696 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 696 @@ -43908,7 +43908,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 4.579 0 4.579 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 697 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 697 @@ -43971,7 +43971,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 698 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 698 @@ -44034,7 +44034,7 @@ Day 81.570 0 27.761 37.908 10.253 5.649 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 699 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 699 @@ -44097,7 +44097,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 5.093 0 0.176 0 0 4.917 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 700 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 700 @@ -44160,7 +44160,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 19.716 0 0.505 19.211 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 701 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 701 @@ -44223,7 +44223,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Sun 11-Jan ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 702 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 702 @@ -44286,7 +44286,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 0.159 0 0.159 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 703 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 703 @@ -44349,7 +44349,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 8.383 0 2.734 0 0 5.649 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 704 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 704 @@ -44412,7 +44412,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr --- ------- ------- ------- ------- ------- ------- ------- ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 705 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 705 @@ -44475,7 +44475,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 22 3.246 0 3.246 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 706 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 706 @@ -44538,7 +44538,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 12 3.566 0 0.391 0 0 3.175 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 707 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 707 @@ -44601,7 +44601,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 2 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 708 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 708 @@ -44664,7 +44664,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 24 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 709 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 709 @@ -44727,7 +44727,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 14 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 710 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 710 @@ -44790,7 +44790,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 4 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 711 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 711 @@ -44853,7 +44853,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr Day 40.509 0 15.889 18.970 0 5.650 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 712 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 712 @@ -44916,7 +44916,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 713 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 713 @@ -44979,7 +44979,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 714 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 714 @@ -45042,7 +45042,7 @@ Day 62.977 0 13.514 49.463 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 715 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 715 @@ -45105,7 +45105,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 9.827 0 0.674 0 9.153 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 716 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 716 @@ -45168,7 +45168,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 717 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 717 @@ -45231,7 +45231,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Sat 07-Feb ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 718 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 718 @@ -45294,7 +45294,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 1.673 0 1.673 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 719 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 719 @@ -45357,7 +45357,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 0.239 0 0.239 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 720 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 720 @@ -45420,7 +45420,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr --- ------- ------- ------- ------- ------- ------- ------- ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 721 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 721 @@ -45483,7 +45483,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 22 3.236 0 1.931 0 0 1.304 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 722 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 722 @@ -45546,7 +45546,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 12 1.511 0 1.511 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 723 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 723 @@ -45609,7 +45609,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 2 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 724 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 724 @@ -45672,7 +45672,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 24 0.0490 0 0.0490 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 725 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 725 @@ -45735,7 +45735,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 14 0.916 0 0.916 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 726 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 726 @@ -45798,7 +45798,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 4 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 727 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 727 @@ -45861,7 +45861,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr Day 50.818 0 20.725 30.093 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 728 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 728 @@ -45924,7 +45924,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 0.757 0 0.757 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 729 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 729 @@ -45987,7 +45987,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 0.342 0 0.342 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 730 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 730 @@ -46050,7 +46050,7 @@ Day 115.216 0 38.388 43.171 16.708 16.949 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 731 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 731 @@ -46113,7 +46113,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 3.474 0 3.474 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 732 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 732 @@ -46176,7 +46176,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 0.0732 0 0.0732 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 733 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 733 @@ -46239,7 +46239,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Fri 06-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 734 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 734 @@ -46302,7 +46302,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 0.635 0 0.635 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 735 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 735 @@ -46365,7 +46365,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 5.513 0 5.513 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 736 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 736 @@ -46428,7 +46428,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 737 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 737 @@ -46491,7 +46491,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 738 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 738 @@ -46554,7 +46554,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 3.522 0 0.699 0 0 2.823 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 739 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 739 @@ -46617,7 +46617,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 740 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 740 @@ -46680,7 +46680,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 741 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 741 @@ -46743,7 +46743,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 742 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 742 @@ -46806,7 +46806,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 743 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 743 @@ -46869,7 +46869,7 @@ Day 58.427 0 19.825 20.018 7.284 11.300 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 744 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 744 @@ -46932,7 +46932,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.195 0 0.195 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 745 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 745 @@ -46995,7 +46995,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0.0953 0 0.0953 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 746 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 746 @@ -47058,7 +47058,7 @@ Day 47.016 0 7.862 30.519 8.636 0 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Sat 28-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 747 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 747 @@ -47121,7 +47121,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 1.358 0 1.358 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 748 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 748 @@ -47184,7 +47184,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 2.743 0 0 0 0 2.743 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 749 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 749 @@ -47247,7 +47247,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Thu 02-Apr Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 750 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 750 @@ -47310,7 +47310,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 2.100 0 0 0 0 2.100 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 751 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 751 @@ -47373,7 +47373,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 752 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 752 @@ -47436,7 +47436,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 753 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 753 @@ -47499,7 +47499,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 0.438 0 0.438 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 754 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 754 @@ -47562,7 +47562,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0.0310 0 0.0310 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 755 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 755 @@ -47625,7 +47625,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 756 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 756 @@ -47688,7 +47688,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 757 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 757 @@ -47751,7 +47751,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0.205 0 0.205 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 758 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 758 @@ -47814,7 +47814,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 759 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 759 @@ -47877,7 +47877,7 @@ Day 82.249 0 19.635 56.963 0 5.651 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 760 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 760 @@ -47940,7 +47940,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.407 0 0.407 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 761 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 761 @@ -48003,7 +48003,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 762 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 762 @@ -48066,7 +48066,7 @@ Day 38.521 0 21.575 16.946 0 0 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Fri 24-Apr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 763 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 763 @@ -48129,7 +48129,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 3.479 0 3.479 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 764 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 764 @@ -48192,7 +48192,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 2.152 0 2.152 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 765 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 765 @@ -48255,7 +48255,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Wed 29-Apr Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 766 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 766 @@ -48318,7 +48318,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 1.599 0 1.599 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 767 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 767 @@ -48381,7 +48381,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 12.172 0 12.172 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 768 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 768 @@ -48444,7 +48444,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 769 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 769 @@ -48507,7 +48507,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 6.216 0 6.216 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 770 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 770 @@ -48570,7 +48570,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 771 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 771 @@ -48633,7 +48633,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 772 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 772 @@ -48696,7 +48696,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 773 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 773 @@ -48759,7 +48759,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 774 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 774 @@ -48822,7 +48822,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0.330 0 0.330 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 775 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 775 @@ -48885,7 +48885,7 @@ Day 27.713 0 13.614 10.695 0 3.404 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 776 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 776 @@ -48948,7 +48948,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.113 0 0.113 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 777 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 777 @@ -49011,7 +49011,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 778 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 778 @@ -49074,7 +49074,7 @@ Day 90.700 0 30.962 48.439 0 11.299 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Thu 21-May ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 779 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 779 @@ -49137,7 +49137,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 780 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 780 @@ -49200,7 +49200,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 781 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 781 @@ -49263,7 +49263,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Tue 26-May Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 782 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 782 @@ -49326,7 +49326,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 14.119 0 1.080 13.039 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 783 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 783 @@ -49389,7 +49389,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0.0774 0 0.0774 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 784 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 784 @@ -49452,7 +49452,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0.118 0 0.118 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 785 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 785 @@ -49515,7 +49515,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 0.761 0 0.761 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 786 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 786 @@ -49578,7 +49578,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0.129 0 0.129 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 787 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 787 @@ -49641,7 +49641,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 788 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 788 @@ -49704,7 +49704,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 789 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 789 @@ -49767,7 +49767,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 16.907 0 11.258 0 0 5.650 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 790 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 790 @@ -49830,7 +49830,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 791 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 791 @@ -49893,7 +49893,7 @@ Day 24.892 0 13.592 0 0 11.300 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 792 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 792 @@ -49956,7 +49956,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 793 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 793 @@ -50019,7 +50019,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0.411 0 0.411 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 794 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 794 @@ -50082,7 +50082,7 @@ Day 49.234 0 16.469 27.115 0 5.651 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Wed 17-Jun ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 795 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 795 @@ -50145,7 +50145,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 1.950 0 1.950 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 796 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 796 @@ -50208,7 +50208,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 2.193 0 2.193 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 797 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 797 @@ -50271,7 +50271,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Mon 22-Jun Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 798 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 798 @@ -50334,7 +50334,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 799 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 799 @@ -50397,7 +50397,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 800 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 800 @@ -50460,7 +50460,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 801 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 801 @@ -50523,7 +50523,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 9.211 0 2.473 6.738 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 802 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 802 @@ -50586,7 +50586,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0.225 0 0.225 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 803 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 803 @@ -50649,7 +50649,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 804 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 804 @@ -50712,7 +50712,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 805 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 805 @@ -50775,7 +50775,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 1.841 0 0 0 0 1.841 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 806 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 806 @@ -50838,7 +50838,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 807 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 807 @@ -50901,7 +50901,7 @@ Day 123.735 0 29.968 83.117 0 5.650 5.000 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 808 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 808 @@ -50964,7 +50964,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 809 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 809 @@ -51027,7 +51027,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0.108 0 0.108 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 810 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 810 @@ -51090,7 +51090,7 @@ Day 87.109 0 23.391 49.843 13.876 0 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Tue 14-Jul ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 811 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 811 @@ -51153,7 +51153,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 2.878 0 2.878 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 812 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 812 @@ -51216,7 +51216,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 0.0980 0 0.0980 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 813 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 813 @@ -51279,7 +51279,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Sun 19-Jul Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 814 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 814 @@ -51342,7 +51342,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 3.229 0 3.229 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 815 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 815 @@ -51405,7 +51405,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0.0336 0 0.0336 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 816 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 816 @@ -51468,7 +51468,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 817 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 817 @@ -51531,7 +51531,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 5.948 0 5.948 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 818 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 818 @@ -51594,7 +51594,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 17.149 0 3.628 13.521 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 819 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 819 @@ -51657,7 +51657,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0.0280 0 0.0280 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 820 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 820 @@ -51720,7 +51720,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 821 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 821 @@ -51783,7 +51783,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 10.076 0 10.076 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 822 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 822 @@ -51846,7 +51846,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 823 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 823 @@ -51909,7 +51909,7 @@ Day 39.092 0 15.889 17.553 0 5.650 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 824 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 824 @@ -51972,7 +51972,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.332 0 0.332 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 825 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 825 @@ -52035,7 +52035,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 3.356 0 3.356 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 826 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 826 @@ -52098,7 +52098,7 @@ Day 59.121 0 13.514 45.608 0 0 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Mon 10-Aug ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 827 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 827 @@ -52161,7 +52161,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 19.213 0 2.702 16.512 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 828 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 828 @@ -52224,7 +52224,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 0.230 0 0.230 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 829 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 829 @@ -52287,7 +52287,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Sat 15-Aug Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 830 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 830 @@ -52350,7 +52350,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 831 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 831 @@ -52413,7 +52413,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 2.044 0 0 0 0 2.044 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 832 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 832 @@ -52476,7 +52476,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 833 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 833 @@ -52539,7 +52539,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 1.841 0 1.841 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 834 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 834 @@ -52602,7 +52602,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 9.357 0 0.181 5.547 0 3.630 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 835 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 835 @@ -52665,7 +52665,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 836 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 836 @@ -52728,7 +52728,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 837 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 837 @@ -52791,7 +52791,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 838 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 838 @@ -52854,7 +52854,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 839 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 839 @@ -52917,7 +52917,7 @@ Day 78.020 0 27.761 35.113 9.497 5.649 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 840 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 840 @@ -52980,7 +52980,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.633 0 0.633 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 841 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 841 @@ -53043,7 +53043,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 3.370 0 3.370 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 842 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 842 @@ -53106,7 +53106,7 @@ Day 95.400 0 48.958 40.793 0 5.649 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Sun 06-Sep ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 843 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 843 @@ -53169,7 +53169,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 3.561 0 3.561 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 844 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 844 @@ -53232,7 +53232,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 0.953 0 0.953 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 845 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 845 @@ -53295,7 +53295,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Fri 11-Sep Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 846 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 846 @@ -53358,7 +53358,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 5.086 0 0.718 4.368 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 847 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 847 @@ -53421,7 +53421,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 2.791 0 2.791 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 848 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 848 @@ -53484,7 +53484,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 849 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 849 @@ -53547,7 +53547,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 850 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 850 @@ -53610,7 +53610,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 1.571 0 0.0525 0 0 1.519 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 851 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 851 @@ -53673,7 +53673,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 852 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 852 @@ -53736,7 +53736,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 853 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 853 @@ -53799,7 +53799,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0.129 0 0.129 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 854 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 854 @@ -53862,7 +53862,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0.0490 0 0.0490 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 855 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 855 @@ -53925,7 +53925,7 @@ Day 59.233 0 13.514 45.719 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 856 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 856 @@ -53988,7 +53988,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 857 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 857 @@ -54051,7 +54051,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 20.058 0 0.543 19.515 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 858 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 858 @@ -54114,7 +54114,7 @@ Day 13.495 0 8.180 5.315 0 0 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Sat 03-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 859 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 859 @@ -54177,7 +54177,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 9.723 0 0.716 9.007 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 860 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 860 @@ -54240,7 +54240,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 9 7.019 0 1.372 0 0 5.647 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 861 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 861 @@ -54303,7 +54303,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Thu 08-Oct Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 862 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 862 @@ -54366,7 +54366,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 21 2.100 0 0 0 0 2.100 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 863 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 863 @@ -54429,7 +54429,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 11 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 864 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 864 @@ -54492,7 +54492,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 1 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 865 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 865 @@ -54555,7 +54555,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 23 2.053 0 2.053 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 866 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 866 @@ -54618,7 +54618,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 13 0.0310 0 0.0310 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 867 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 867 @@ -54681,7 +54681,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 3 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 868 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 868 @@ -54744,7 +54744,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 869 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 869 @@ -54807,7 +54807,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 15 0.358 0 0.358 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 870 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 870 @@ -54870,7 +54870,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 5 0.0620 0 0.0620 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 871 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 871 @@ -54933,7 +54933,7 @@ Day 51.233 0 29.017 11.966 10.249 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 872 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 872 @@ -54996,7 +54996,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 17 0.803 0 0.803 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 873 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 873 @@ -55059,7 +55059,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 7 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 874 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 874 @@ -55122,7 +55122,7 @@ Day 37.885 0 21.575 16.310 0 0 0 Hourly Hot Water Use, DHW meter "DHWMtrWH", Fri 30-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 875 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 875 @@ -55185,7 +55185,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 19 2.626 0 2.626 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 876 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 876 @@ -55248,7 +55248,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 27.019 0 0.0975 26.921 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 877 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 877 @@ -55311,7 +55311,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Wed 04-Nov ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 878 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 878 @@ -55374,7 +55374,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 6.446 0 6.446 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 879 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 879 @@ -55437,7 +55437,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 26.076 0 0.812 25.264 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 880 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 880 @@ -55500,7 +55500,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr --- ------- ------- ------- ------- ------- ------- ------- ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 881 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 881 @@ -55563,7 +55563,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 22 0.132 0 0.132 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 882 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 882 @@ -55626,7 +55626,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 12 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 883 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 883 @@ -55689,7 +55689,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 2 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 884 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 884 @@ -55752,7 +55752,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 24 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 885 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 885 @@ -55815,7 +55815,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 14 0.400 0 0.400 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 886 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 886 @@ -55878,7 +55878,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 4 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 887 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 887 @@ -55941,7 +55941,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr Day 22.353 0 17.350 0 0 0 5.003 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 888 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 888 @@ -56004,7 +56004,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 0.520 0 0.520 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 889 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 889 @@ -56067,7 +56067,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 890 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 890 @@ -56130,7 +56130,7 @@ Day 72.358 0 13.283 47.776 0 11.298 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 891 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 891 @@ -56193,7 +56193,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 6.965 0 0.649 6.316 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 892 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 892 @@ -56256,7 +56256,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 893 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 893 @@ -56319,7 +56319,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Tue 01-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 894 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 894 @@ -56382,7 +56382,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 0.0310 0 0.0310 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 895 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 895 @@ -56445,7 +56445,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 12.263 0 1.508 10.755 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 896 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 896 @@ -56508,7 +56508,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr --- ------- ------- ------- ------- ------- ------- ------- ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 897 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 897 @@ -56571,7 +56571,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 22 0.670 0 0.670 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 898 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 898 @@ -56634,7 +56634,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 12 9.102 0 7.061 0 0 2.041 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 899 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 899 @@ -56697,7 +56697,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 2 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 900 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 900 @@ -56760,7 +56760,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 24 3.108 0 3.108 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 901 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 901 @@ -56823,7 +56823,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 14 0.327 0 0.327 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 902 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 902 @@ -56886,7 +56886,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 4 0.0294 0 0.0294 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 903 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 903 @@ -56949,7 +56949,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr Day 31.521 0 15.979 15.542 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 904 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 904 @@ -57012,7 +57012,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 16 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 905 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 905 @@ -57075,7 +57075,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 6 3.058 0 3.058 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 906 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 906 @@ -57138,7 +57138,7 @@ Day 50.479 0 16.469 28.359 0 5.651 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 907 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 907 @@ -57201,7 +57201,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 18 0.154 0 0.154 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 908 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 908 @@ -57264,7 +57264,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 8 0.301 0 0.301 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 909 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 909 @@ -57327,7 +57327,7 @@ Hourly Hot Water Use, DHW meter "DHWMtrWH", Mon 28-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 910 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 910 @@ -57390,7 +57390,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 20 0.0294 0 0.0294 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 911 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 911 @@ -57453,7 +57453,7 @@ Hr Total Unknown Faucet Shower Bath CWashr DWashr 10 0.0294 0 0.0294 0 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 912 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 912 @@ -57516,7 +57516,7 @@ Day 31.618 0 15.979 15.639 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 913 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 913 @@ -57579,7 +57579,7 @@ Hourly Cond Report, Fri 02-Jan 1 2 18 2 6 6F 47.84 53.3 44.436 11.121 12.815 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 914 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 914 @@ -57642,7 +57642,7 @@ Hourly Cond Report, Sun 04-Jan 1 4 12 4 1 2U 42.62 53.2 39.778 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 915 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 915 @@ -57705,7 +57705,7 @@ Hourly Cond Report, Tue 06-Jan 1 6 6 6 3 3T 42.8 53.0 41.864 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 916 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 916 @@ -57768,7 +57768,7 @@ Hourly Cond Report, Thu 08-Jan ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 917 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 917 @@ -57831,7 +57831,7 @@ Hourly Cond Report, Fri 09-Jan 1 9 24 9 6 4F 53.78 52.7 48.881 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 918 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 918 @@ -57894,7 +57894,7 @@ Hourly Cond Report, Sun 11-Jan 1 11 18 11 1 4U 55.4 52.5 54.57 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 919 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 919 @@ -57957,7 +57957,7 @@ Hourly Cond Report, Tue 13-Jan 1 13 12 13 3 3T 48.02 52.3 45.107 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 920 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 920 @@ -58020,7 +58020,7 @@ Hourly Cond Report, Thu 15-Jan 1 15 6 15 5 1R 44.96 52.1 44.974 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 921 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 921 @@ -58083,7 +58083,7 @@ Hourly Cond Report, Sat 17-Jan ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 922 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 922 @@ -58146,7 +58146,7 @@ Hourly Cond Report, Sun 18-Jan 1 18 24 18 1 4U 43.52 51.9 43.287 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 923 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 923 @@ -58209,7 +58209,7 @@ Hourly Cond Report, Tue 20-Jan 1 20 18 20 3 4T 53.42 51.9 51.486 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 924 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 924 @@ -58272,7 +58272,7 @@ Hourly Cond Report, Thu 22-Jan 1 22 12 22 5 4R 51.08 51.9 46.036 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 925 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 925 @@ -58335,7 +58335,7 @@ Hourly Cond Report, Sat 24-Jan 1 24 6 24 7 2S 45.32 51.8 44.257 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 926 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 926 @@ -58398,7 +58398,7 @@ Hourly Cond Report, Mon 26-Jan ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 927 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 927 @@ -58461,7 +58461,7 @@ Hourly Cond Report, Tue 27-Jan 1 27 24 27 3 2T 48.74 51.8 48.147 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 928 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 928 @@ -58524,7 +58524,7 @@ Hourly Cond Report, Thu 29-Jan 1 29 18 29 5 2R 51.98 51.7 47.742 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 929 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 929 @@ -58587,7 +58587,7 @@ Hourly Cond Report, Sat 31-Jan 1 31 12 31 7 2S 52.16 51.5 46.332 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 930 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 930 @@ -58650,7 +58650,7 @@ Hourly Cond Report, Mon 02-Feb 2 2 6 33 2 6M 43.16 51.5 47.26 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 931 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 931 @@ -58713,7 +58713,7 @@ Hourly Cond Report, Wed 04-Feb ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 932 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 932 @@ -58776,7 +58776,7 @@ Hourly Cond Report, Thu 05-Feb 2 5 24 36 5 2R 41.72 51.7 46.157 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 933 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 933 @@ -58839,7 +58839,7 @@ Hourly Cond Report, Sat 07-Feb 2 7 18 38 7 4S 56.84 51.7 50.309 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 934 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 934 @@ -58902,7 +58902,7 @@ Hourly Cond Report, Mon 09-Feb 2 9 12 40 2 3M 51.26 51.5 45.929 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 935 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 935 @@ -58965,7 +58965,7 @@ Hourly Cond Report, Wed 11-Feb 2 11 6 42 4 2W 43.88 51.3 45.62 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 936 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 936 @@ -59028,7 +59028,7 @@ Hourly Cond Report, Fri 13-Feb ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 937 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 937 @@ -59091,7 +59091,7 @@ Hourly Cond Report, Sat 14-Feb 2 14 24 45 7 2S 53.78 51.3 54.082 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 938 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 938 @@ -59154,7 +59154,7 @@ Hourly Cond Report, Mon 16-Feb 2 16 18 47 8 4H 59 51.4 58.25 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 939 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 939 @@ -59217,7 +59217,7 @@ Hourly Cond Report, Wed 18-Feb 2 18 12 49 4 6W 53.42 51.4 50.787 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 940 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 940 @@ -59280,7 +59280,7 @@ Hourly Cond Report, Fri 20-Feb 2 20 6 51 6 5F 42.8 51.5 47.403 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 941 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 941 @@ -59343,7 +59343,7 @@ Hourly Cond Report, Sun 22-Feb ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 942 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 942 @@ -59406,7 +59406,7 @@ Hourly Cond Report, Mon 23-Feb 2 23 24 54 2 1M 54.86 51.6 54.519 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 943 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 943 @@ -59469,7 +59469,7 @@ Hourly Cond Report, Wed 25-Feb 2 25 18 56 4 2W 60.44 51.8 59.045 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 944 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 944 @@ -59532,7 +59532,7 @@ Hourly Cond Report, Fri 27-Feb 2 27 12 58 6 5F 53.06 51.9 53.746 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 945 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 945 @@ -59595,7 +59595,7 @@ Hourly Cond Report, Sun 01-Mar 3 1 6 60 1 2U 39.02 51.9 46.723 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 946 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 946 @@ -59658,7 +59658,7 @@ Hourly Cond Report, Tue 03-Mar ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 947 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 947 @@ -59721,7 +59721,7 @@ Hourly Cond Report, Wed 04-Mar 3 4 24 63 4 3W 53.24 51.9 53.446 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 948 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 948 @@ -59784,7 +59784,7 @@ Hourly Cond Report, Fri 06-Mar 3 6 18 65 6 4F 53.96 51.9 53.406 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 949 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 949 @@ -59847,7 +59847,7 @@ Hourly Cond Report, Sun 08-Mar 3 8 13 67 1 4U 52.34 51.9 52.733 0 16.499 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 950 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 950 @@ -59910,7 +59910,7 @@ Hourly Cond Report, Tue 10-Mar 3 10 7 69 3 6T 39.02 52.0 46.441 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 951 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 951 @@ -59973,7 +59973,7 @@ Hourly Cond Report, Thu 12-Mar 3 12 1 71 5 4R 50 52.0 53.341 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 952 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 952 @@ -60036,7 +60036,7 @@ Hourly Cond Report, Fri 13-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 953 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 953 @@ -60099,7 +60099,7 @@ Hourly Cond Report, Sun 15-Mar 3 15 19 74 1 3U 73.4 52.5 67.183 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 954 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 954 @@ -60162,7 +60162,7 @@ Hourly Cond Report, Tue 17-Mar 3 17 13 76 3 2T 62.6 52.7 58.53 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 955 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 955 @@ -60225,7 +60225,7 @@ Hourly Cond Report, Thu 19-Mar 3 19 7 78 5 2R 55.04 52.9 53.704 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 956 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 956 @@ -60288,7 +60288,7 @@ Hourly Cond Report, Sat 21-Mar 3 21 1 80 7 1S 53.96 53.0 58.586 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 957 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 957 @@ -60351,7 +60351,7 @@ Hourly Cond Report, Sun 22-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 958 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 958 @@ -60414,7 +60414,7 @@ Hourly Cond Report, Tue 24-Mar 3 24 19 83 3 2T 64.94 53.5 66.191 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 959 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 959 @@ -60477,7 +60477,7 @@ Hourly Cond Report, Thu 26-Mar 3 26 13 85 5 3R 61.34 53.6 62.177 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 960 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 960 @@ -60540,7 +60540,7 @@ Hourly Cond Report, Sat 28-Mar 3 28 7 87 7 2S 45.86 53.7 52.431 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 961 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 961 @@ -60603,7 +60603,7 @@ Hourly Cond Report, Mon 30-Mar 3 30 1 89 2 3M 52.88 53.8 57.978 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 962 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 962 @@ -60666,7 +60666,7 @@ Hourly Cond Report, Tue 31-Mar ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 963 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 963 @@ -60729,7 +60729,7 @@ Hourly Cond Report, Thu 02-Apr 4 2 19 92 5 4R 58.46 54.4 63.952 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 964 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 964 @@ -60792,7 +60792,7 @@ Hourly Cond Report, Sat 04-Apr 4 4 13 94 7 6S 56.3 54.5 57.088 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 965 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 965 @@ -60855,7 +60855,7 @@ Hourly Cond Report, Mon 06-Apr 4 6 7 96 2 3M 48.74 54.7 54.546 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 966 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 966 @@ -60918,7 +60918,7 @@ Hourly Cond Report, Wed 08-Apr 4 8 1 98 4 3W 41.9 54.7 51.89 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 967 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 967 @@ -60981,7 +60981,7 @@ Hourly Cond Report, Thu 09-Apr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 968 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 968 @@ -61044,7 +61044,7 @@ Hourly Cond Report, Sat 11-Apr 4 11 19 101 7 4S 61.88 55.0 59.051 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 969 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 969 @@ -61107,7 +61107,7 @@ Hourly Cond Report, Mon 13-Apr 4 13 13 103 2 5M 56.12 55.0 55.193 17.570 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 970 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 970 @@ -61170,7 +61170,7 @@ Hourly Cond Report, Wed 15-Apr 4 15 7 105 4 2W 42.98 55.0 49.618 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 971 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 971 @@ -61233,7 +61233,7 @@ Hourly Cond Report, Fri 17-Apr 4 17 1 107 6 3F 50.9 55.0 55.038 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 972 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 972 @@ -61296,7 +61296,7 @@ Hourly Cond Report, Sat 18-Apr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 973 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 973 @@ -61359,7 +61359,7 @@ Hourly Cond Report, Mon 20-Apr 4 20 19 110 2 5M 44.6 55.1 53.533 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 974 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 974 @@ -61422,7 +61422,7 @@ Hourly Cond Report, Wed 22-Apr 4 22 13 112 4 1W 61.16 55.0 59.402 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 975 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 975 @@ -61485,7 +61485,7 @@ Hourly Cond Report, Fri 24-Apr 4 24 7 114 6 4F 51.26 55.2 57.553 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 976 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 976 @@ -61548,7 +61548,7 @@ Hourly Cond Report, Sun 26-Apr 4 26 1 116 1 2U 62.96 55.4 70.158 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 977 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 977 @@ -61611,7 +61611,7 @@ Hourly Cond Report, Mon 27-Apr ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 978 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 978 @@ -61674,7 +61674,7 @@ Hourly Cond Report, Wed 29-Apr 4 29 19 119 4 2W 77 56.1 73.773 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 979 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 979 @@ -61737,7 +61737,7 @@ Hourly Cond Report, Fri 01-May 5 1 13 121 6 5F 66.92 56.3 69.363 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 980 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 980 @@ -61800,7 +61800,7 @@ Hourly Cond Report, Sun 03-May 5 3 7 123 1 5U 53.78 56.4 59.423 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 981 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 981 @@ -61863,7 +61863,7 @@ Hourly Cond Report, Tue 05-May 5 5 1 125 3 5T 51.8 56.6 60.393 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 982 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 982 @@ -61926,7 +61926,7 @@ Hourly Cond Report, Wed 06-May ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 983 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 983 @@ -61989,7 +61989,7 @@ Hourly Cond Report, Fri 08-May 5 8 19 128 6 2F 58.82 57.2 63.879 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 984 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 984 @@ -62052,7 +62052,7 @@ Hourly Cond Report, Sun 10-May 5 10 13 130 1 4U 66.92 57.5 66.024 0 16.499 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 985 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 985 @@ -62115,7 +62115,7 @@ Hourly Cond Report, Tue 12-May 5 12 7 132 3 6T 48.2 57.8 58.475 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 986 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 986 @@ -62178,7 +62178,7 @@ Hourly Cond Report, Thu 14-May 5 14 1 134 5 3R 58.82 58.0 68.085 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 987 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 987 @@ -62241,7 +62241,7 @@ Hourly Cond Report, Fri 15-May ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 988 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 988 @@ -62304,7 +62304,7 @@ Hourly Cond Report, Sun 17-May 5 17 19 137 1 1U 77.54 58.8 74.128 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 989 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 989 @@ -62367,7 +62367,7 @@ Hourly Cond Report, Tue 19-May 5 19 13 139 3 5T 77.36 59.1 70.075 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 990 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 990 @@ -62430,7 +62430,7 @@ Hourly Cond Report, Thu 21-May 5 21 7 141 5 2R 58.46 59.6 66.054 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 991 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 991 @@ -62493,7 +62493,7 @@ Hourly Cond Report, Sat 23-May 5 23 1 143 7 2S 69.8 60.0 73.925 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 992 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 992 @@ -62556,7 +62556,7 @@ Hourly Cond Report, Sun 24-May ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 993 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 993 @@ -62619,7 +62619,7 @@ Hourly Cond Report, Tue 26-May 5 26 19 146 3 4T 83.48 60.9 78.002 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 994 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 994 @@ -62682,7 +62682,7 @@ Hourly Cond Report, Thu 28-May 5 28 13 148 5 4R 87.62 61.1 81.766 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 995 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 995 @@ -62745,7 +62745,7 @@ Hourly Cond Report, Sat 30-May 5 30 7 150 7 4S 57.02 61.7 67.397 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 996 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 996 @@ -62808,7 +62808,7 @@ Hourly Cond Report, Mon 01-Jun 6 1 1 152 2 3M 62.78 61.8 75.153 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 997 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 997 @@ -62871,7 +62871,7 @@ Hourly Cond Report, Tue 02-Jun ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 998 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 998 @@ -62934,7 +62934,7 @@ Hourly Cond Report, Thu 04-Jun 6 4 19 155 5 2R 93.38 62.5 88.499 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 999 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 999 @@ -62997,7 +62997,7 @@ Hourly Cond Report, Sat 06-Jun 6 6 13 157 7 3S 87.44 63.2 83.282 12.846 12.833 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1000 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1000 @@ -63060,7 +63060,7 @@ Hourly Cond Report, Mon 08-Jun 6 8 7 159 2 6M 62.24 63.8 72.019 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1001 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1001 @@ -63123,7 +63123,7 @@ Hourly Cond Report, Wed 10-Jun 6 10 1 161 4 2W 71.78 64.1 73.798 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1002 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1002 @@ -63186,7 +63186,7 @@ Hourly Cond Report, Thu 11-Jun ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1003 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1003 @@ -63249,7 +63249,7 @@ Hourly Cond Report, Sat 13-Jun 6 13 19 164 7 2S 71.96 65.0 75.872 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1004 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1004 @@ -63312,7 +63312,7 @@ Hourly Cond Report, Mon 15-Jun 6 15 13 166 2 2M 78.08 65.2 75 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1005 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1005 @@ -63375,7 +63375,7 @@ Hourly Cond Report, Wed 17-Jun 6 17 7 168 4 3W 55.22 65.5 66.254 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1006 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1006 @@ -63438,7 +63438,7 @@ Hourly Cond Report, Fri 19-Jun 6 19 1 170 6 1F 67.82 65.6 76.706 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1007 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1007 @@ -63501,7 +63501,7 @@ Hourly Cond Report, Sat 20-Jun ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1008 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1008 @@ -63564,7 +63564,7 @@ Hourly Cond Report, Mon 22-Jun 6 22 19 173 2 2M 80.96 66.0 76.308 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1009 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1009 @@ -63627,7 +63627,7 @@ Hourly Cond Report, Wed 24-Jun 6 24 13 175 4 4W 80.42 65.9 77.116 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1010 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1010 @@ -63690,7 +63690,7 @@ Hourly Cond Report, Fri 26-Jun 6 26 7 177 6 4F 56.12 66.3 70.648 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1011 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1011 @@ -63753,7 +63753,7 @@ Hourly Cond Report, Sun 28-Jun 6 28 1 179 1 4U 65.84 66.4 75.14 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1012 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1012 @@ -63816,7 +63816,7 @@ Hourly Cond Report, Mon 29-Jun ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1013 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1013 @@ -63879,7 +63879,7 @@ Hourly Cond Report, Wed 01-Jul 7 1 19 182 4 2W 100.4 66.8 94.06 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1014 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1014 @@ -63942,7 +63942,7 @@ Hourly Cond Report, Fri 03-Jul 7 3 13 184 8 1H 73.58 67.2 76.107 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1015 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1015 @@ -64005,7 +64005,7 @@ Hourly Cond Report, Sun 05-Jul 7 5 7 186 1 3U 56.12 67.4 70.321 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1016 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1016 @@ -64068,7 +64068,7 @@ Hourly Cond Report, Tue 07-Jul 7 7 1 188 3 4T 67.82 67.4 77.752 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1017 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1017 @@ -64131,7 +64131,7 @@ Hourly Cond Report, Wed 08-Jul ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1018 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1018 @@ -64194,7 +64194,7 @@ Hourly Cond Report, Fri 10-Jul 7 10 19 191 6 3F 107.96 67.7 99.137 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1019 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1019 @@ -64257,7 +64257,7 @@ Hourly Cond Report, Sun 12-Jul 7 12 13 193 1 3U 91.22 68.1 81.443 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1020 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1020 @@ -64320,7 +64320,7 @@ Hourly Cond Report, Tue 14-Jul 7 14 7 195 3 3T 59.18 68.5 74.556 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1021 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1021 @@ -64383,7 +64383,7 @@ Hourly Cond Report, Thu 16-Jul 7 16 1 197 5 4R 57.74 68.7 73.684 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1022 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1022 @@ -64446,7 +64446,7 @@ Hourly Cond Report, Fri 17-Jul ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1023 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1023 @@ -64509,7 +64509,7 @@ Hourly Cond Report, Sun 19-Jul 7 19 19 200 1 2U 94.46 69.0 84.374 5.166 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1024 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1024 @@ -64572,7 +64572,7 @@ Hourly Cond Report, Tue 21-Jul 7 21 13 202 3 3T 72.5 69.1 76.953 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1025 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1025 @@ -64635,7 +64635,7 @@ Hourly Cond Report, Thu 23-Jul 7 23 7 204 5 2R 57.2 69.3 69.038 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1026 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1026 @@ -64698,7 +64698,7 @@ Hourly Cond Report, Sat 25-Jul 7 25 1 206 7 4S 63.68 69.4 75.842 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1027 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1027 @@ -64761,7 +64761,7 @@ Hourly Cond Report, Sun 26-Jul ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1028 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1028 @@ -64824,7 +64824,7 @@ Hourly Cond Report, Tue 28-Jul 7 28 19 209 3 2T 82.76 69.6 85.346 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1029 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1029 @@ -64887,7 +64887,7 @@ Hourly Cond Report, Thu 30-Jul 7 30 13 211 5 2R 76.46 69.8 78.723 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1030 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1030 @@ -64950,7 +64950,7 @@ Hourly Cond Report, Sat 01-Aug 8 1 7 213 7 2S 58.1 69.8 69.506 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1031 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1031 @@ -65013,7 +65013,7 @@ Hourly Cond Report, Mon 03-Aug 8 3 1 215 2 4M 64.76 69.8 73.924 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1032 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1032 @@ -65076,7 +65076,7 @@ Hourly Cond Report, Tue 04-Aug ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1033 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1033 @@ -65139,7 +65139,7 @@ Hourly Cond Report, Thu 06-Aug 8 6 19 218 5 4R 96.08 69.9 89.677 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1034 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1034 @@ -65202,7 +65202,7 @@ Hourly Cond Report, Sat 08-Aug 8 8 13 220 7 2S 88.7 70.1 83.752 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1035 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1035 @@ -65265,7 +65265,7 @@ Hourly Cond Report, Mon 10-Aug 8 10 7 222 2 2M 57.92 70.1 69.521 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1036 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1036 @@ -65328,7 +65328,7 @@ Hourly Cond Report, Wed 12-Aug 8 12 1 224 4 4W 62.78 69.9 75.414 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1037 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1037 @@ -65391,7 +65391,7 @@ Hourly Cond Report, Thu 13-Aug ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1038 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1038 @@ -65433,7 +65433,7 @@ Hourly Cond Report, Sat 15-Aug Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 8 15 1 227 7 3S 65.66 69.6 73.361 0 0 0 + 8 15 1 227 7 3S 65.66 69.6 73.362 0 0 0 8 15 2 227 7 3S 62.78 69.6 74.581 0 0 0 8 15 3 227 7 3S 60.8 69.6 73.288 0 0 0 8 15 4 227 7 3S 58.82 69.6 72.063 0 0 0 @@ -65454,7 +65454,7 @@ Hourly Cond Report, Sat 15-Aug 8 15 19 227 7 3S 91.94 69.6 86.476 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1039 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1039 @@ -65517,7 +65517,7 @@ Hourly Cond Report, Mon 17-Aug 8 17 13 229 2 5M 85.46 69.8 81.53 17.570 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1040 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1040 @@ -65580,7 +65580,7 @@ Hourly Cond Report, Wed 19-Aug 8 19 7 231 4 2W 58.82 70.0 68.84 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1041 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1041 @@ -65643,7 +65643,7 @@ Hourly Cond Report, Fri 21-Aug 8 21 1 233 6 5F 59 70.0 70.356 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1042 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1042 @@ -65706,7 +65706,7 @@ Hourly Cond Report, Sat 22-Aug ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1043 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1043 @@ -65769,7 +65769,7 @@ Hourly Cond Report, Mon 24-Aug 8 24 19 236 2 4M 89.96 69.9 85.495 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1044 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1044 @@ -65832,7 +65832,7 @@ Hourly Cond Report, Wed 26-Aug 8 26 13 238 4 2W 85.46 70.0 79.75 0 8.326 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1045 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1045 @@ -65895,7 +65895,7 @@ Hourly Cond Report, Fri 28-Aug 8 28 7 240 6 1F 59.9 70.2 73.384 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1046 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1046 @@ -65958,7 +65958,7 @@ Hourly Cond Report, Sun 30-Aug 8 30 1 242 1 2U 59.9 70.3 74.632 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1047 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1047 @@ -66021,7 +66021,7 @@ Hourly Cond Report, Mon 31-Aug ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1048 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1048 @@ -66084,7 +66084,7 @@ Hourly Cond Report, Wed 02-Sep 9 2 19 245 4 4W 99.5 70.2 91.622 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1049 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1049 @@ -66147,7 +66147,7 @@ Hourly Cond Report, Fri 04-Sep 9 4 13 247 6 6F 79.34 70.5 77.359 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1050 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1050 @@ -66210,7 +66210,7 @@ Hourly Cond Report, Sun 06-Sep 9 6 7 249 1 4U 56.84 70.4 66.495 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1051 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1051 @@ -66273,7 +66273,7 @@ Hourly Cond Report, Tue 08-Sep 9 8 1 251 3 2T 60.62 70.2 70.143 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1052 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1052 @@ -66336,7 +66336,7 @@ Hourly Cond Report, Wed 09-Sep ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1053 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1053 @@ -66399,7 +66399,7 @@ Hourly Cond Report, Fri 11-Sep 9 11 19 254 6 4F 94.82 69.9 86.77 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1054 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1054 @@ -66462,7 +66462,7 @@ Hourly Cond Report, Sun 13-Sep 9 13 13 256 1 6U 75.56 70.0 74.484 0 0 3.228 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1055 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1055 @@ -66525,7 +66525,7 @@ Hourly Cond Report, Tue 15-Sep 9 15 7 258 3 4T 59 70.0 68.373 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1056 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1056 @@ -66588,7 +66588,7 @@ Hourly Cond Report, Thu 17-Sep 9 17 1 260 5 4R 64.76 69.9 72.348 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1057 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1057 @@ -66651,7 +66651,7 @@ Hourly Cond Report, Fri 18-Sep ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1058 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1058 @@ -66714,7 +66714,7 @@ Hourly Cond Report, Sun 20-Sep 9 20 19 263 1 4U 95.54 69.7 87.297 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1059 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1059 @@ -66777,7 +66777,7 @@ Hourly Cond Report, Tue 22-Sep 9 22 13 265 3 4T 85.46 69.9 78.982 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1060 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1060 @@ -66840,7 +66840,7 @@ Hourly Cond Report, Thu 24-Sep 9 24 7 267 5 3R 57.74 70.0 70.39 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1061 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1061 @@ -66903,7 +66903,7 @@ Hourly Cond Report, Sat 26-Sep 9 26 1 269 7 3S 65.66 70.0 77.214 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1062 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1062 @@ -66966,7 +66966,7 @@ Hourly Cond Report, Sun 27-Sep ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1063 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1063 @@ -67029,7 +67029,7 @@ Hourly Cond Report, Tue 29-Sep 9 29 19 272 3 4T 72.86 69.3 72.552 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1064 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1064 @@ -67092,7 +67092,7 @@ Hourly Cond Report, Thu 01-Oct 10 1 13 274 5 4R 78.26 69.1 72.109 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1065 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1065 @@ -67155,7 +67155,7 @@ Hourly Cond Report, Sat 03-Oct 10 3 7 276 7 5S 48.02 68.8 60.303 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1066 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1066 @@ -67218,7 +67218,7 @@ Hourly Cond Report, Mon 05-Oct 10 5 1 278 2 2M 60.8 68.5 65.456 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1067 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1067 @@ -67281,7 +67281,7 @@ Hourly Cond Report, Tue 06-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1068 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1068 @@ -67344,7 +67344,7 @@ Hourly Cond Report, Thu 08-Oct 10 8 19 281 5 5R 72.86 68.1 70.89 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1069 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1069 @@ -67407,7 +67407,7 @@ Hourly Cond Report, Sat 10-Oct 10 10 13 283 7 2S 73.4 67.9 67.29 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1070 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1070 @@ -67470,7 +67470,7 @@ Hourly Cond Report, Mon 12-Oct 10 12 7 285 2 2M 52.7 67.5 58.584 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1071 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1071 @@ -67533,7 +67533,7 @@ Hourly Cond Report, Wed 14-Oct 10 14 1 287 4 4W 59.9 67.4 67.475 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1072 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1072 @@ -67596,7 +67596,7 @@ Hourly Cond Report, Thu 15-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1073 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1073 @@ -67659,7 +67659,7 @@ Hourly Cond Report, Sat 17-Oct 10 17 19 290 7 4S 78.98 67.0 69.753 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1074 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1074 @@ -67722,7 +67722,7 @@ Hourly Cond Report, Mon 19-Oct 10 19 13 292 2 2M 65.3 66.7 67.241 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1075 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1075 @@ -67762,21 +67762,21 @@ Hourly Cond Report, Tue 20-Oct 10 20 14 293 3 3T 71.42 66.5 66.878 0 0 0 10 20 15 293 3 3T 74.12 66.5 68.591 0 0 0 10 20 16 293 3 3T 75.2 66.5 70.092 0 0 0 - 10 20 17 293 3 3T 76.82 66.5 71.304 0 0 0 - 10 20 18 293 3 3T 76.28 66.5 70.077 0 0 0 - 10 20 19 293 3 3T 73.94 66.5 66.062 0 0 0 + 10 20 17 293 3 3T 76.82 66.5 71.303 0 0 0 + 10 20 18 293 3 3T 76.28 66.5 70.073 0 0 0 + 10 20 19 293 3 3T 73.94 66.5 66.06 0 0 0 10 20 20 293 3 3T 71.96 66.5 64.909 0 0 0 10 20 21 293 3 3T 64.04 66.5 66.19 0 0 0 - 10 20 22 293 3 3T 63.86 66.5 66.648 0 0 0 - 10 20 23 293 3 3T 61.88 66.5 65.779 0 0 0 - 10 20 24 293 3 3T 59.9 66.5 64.909 0 0 0 + 10 20 22 293 3 3T 63.86 66.5 66.647 0 0 0 + 10 20 23 293 3 3T 61.88 66.5 65.778 0 0 0 + 10 20 24 293 3 3T 59.9 66.5 64.91 0 0 0 Hourly Cond Report, Wed 21-Oct Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 10 21 1 294 4 4W 58.82 66.5 64.154 0 0 0 + 10 21 1 294 4 4W 58.82 66.5 64.151 0 0 0 10 21 2 294 4 4W 56.66 66.3 63.388 0 0 0 10 21 3 294 4 4W 53.78 66.3 62.549 0 0 0 10 21 4 294 4 4W 52.88 66.3 61.666 0 0 0 @@ -67785,7 +67785,7 @@ Hourly Cond Report, Wed 21-Oct 10 21 7 294 4 4W 50 66.3 59.394 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1076 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1076 @@ -67802,12 +67802,12 @@ Test3 4BR W/ DHW Probes @intgains 10 21 15 294 4 4W 76.1 66.3 70.342 0 0 0 10 21 16 294 4 4W 77 66.3 72.106 0 0 0 10 21 17 294 4 4W 77 66.3 73.361 0 0 0 - 10 21 18 294 4 4W 77.36 66.3 73.928 0 0 0 - 10 21 19 294 4 4W 75.92 66.3 73.155 0 0 0 + 10 21 18 294 4 4W 77.36 66.3 73.927 0 0 0 + 10 21 19 294 4 4W 75.92 66.3 73.154 0 0 0 10 21 20 294 4 4W 73.94 66.3 71.967 0 0 0 10 21 21 294 4 4W 65.66 66.3 65.985 0 0 0 10 21 22 294 4 4W 62.78 66.3 63.886 0 25.681 0 - 10 21 23 294 4 4W 60.8 66.3 62.647 25.681 0 0 + 10 21 23 294 4 4W 60.8 66.3 62.646 25.681 0 0 10 21 24 294 4 4W 58.82 66.3 65 0 0 0 @@ -67816,27 +67816,27 @@ Hourly Cond Report, Thu 22-Oct Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ 10 22 1 295 5 5R 56.84 66.3 64.264 0 0 0 - 10 22 2 295 5 5R 55.94 66.0 63.436 0 0 0 + 10 22 2 295 5 5R 55.94 66.0 63.435 0 0 0 10 22 3 295 5 5R 55.76 66.0 62.701 0 0 0 10 22 4 295 5 5R 53.78 66.0 61.978 0 0 0 10 22 5 295 5 5R 52.88 66.0 61.204 0 0 0 - 10 22 6 295 5 5R 51.8 66.0 60.448 0 0 0 - 10 22 7 295 5 5R 50.9 66.0 59.726 0 0 0 - 10 22 8 295 5 5R 49.82 66.0 59.019 0 0 0 - 10 22 9 295 5 5R 50 66.0 58.969 0 0 0 - 10 22 10 295 5 5R 58.64 66.0 60.396 0 0 0 - 10 22 11 295 5 5R 64.58 66.0 62.749 0 0 0 - 10 22 12 295 5 5R 69.44 66.0 65.477 0 0 0 - 10 22 13 295 5 5R 72.5 66.0 67.808 0 0 0 - 10 22 14 295 5 5R 76.1 66.0 69.671 0 0 0 - 10 22 15 295 5 5R 77 66.0 71.303 0 0 0 - 10 22 16 295 5 5R 77.18 66.0 67.231 0 0 0 + 10 22 6 295 5 5R 51.8 66.0 60.452 0 0 0 + 10 22 7 295 5 5R 50.9 66.0 59.723 0 0 0 + 10 22 8 295 5 5R 49.82 66.0 59.017 0 0 0 + 10 22 9 295 5 5R 50 66.0 58.976 0 0 0 + 10 22 10 295 5 5R 58.64 66.0 60.398 0 0 0 + 10 22 11 295 5 5R 64.58 66.0 62.751 0 0 0 + 10 22 12 295 5 5R 69.44 66.0 65.478 0 0 0 + 10 22 13 295 5 5R 72.5 66.0 67.809 0 0 0 + 10 22 14 295 5 5R 76.1 66.0 69.672 0 0 0 + 10 22 15 295 5 5R 77 66.0 71.304 0 0 0 + 10 22 16 295 5 5R 77.18 66.0 67.23 0 0 0 10 22 17 295 5 5R 78.98 66.0 68.505 0 0 0 10 22 18 295 5 5R 78.62 66.0 69.206 0 0 0 - 10 22 19 295 5 5R 76.82 66.0 71.93 0 0 0 + 10 22 19 295 5 5R 76.82 66.0 71.931 0 0 0 10 22 20 295 5 5R 74.48 66.0 71.34 0 0 0 10 22 21 295 5 5R 70.52 66.0 70.452 0 0 0 - 10 22 22 295 5 5R 66.56 66.0 69.328 0 0 0 + 10 22 22 295 5 5R 66.56 66.0 69.329 0 0 0 10 22 23 295 5 5R 63.5 66.0 68.027 0 0 0 10 22 24 295 5 5R 59.9 66.0 66.648 0 0 0 @@ -67845,38 +67845,38 @@ Hourly Cond Report, Fri 23-Oct Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 10 23 1 296 6 1F 58.82 66.0 65.488 0 0 0 + 10 23 1 296 6 1F 58.82 66.0 65.49 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1077 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1077 Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ - 10 23 2 296 6 1F 56.84 65.8 64.495 0 0 0 - 10 23 3 296 6 1F 54.68 65.8 63.505 0 0 0 + 10 23 2 296 6 1F 56.84 65.8 64.497 0 0 0 + 10 23 3 296 6 1F 54.68 65.8 63.509 0 0 0 10 23 4 296 6 1F 51.98 65.8 62.525 0 0 0 - 10 23 5 296 6 1F 51.98 65.8 61.641 0 0 0 + 10 23 5 296 6 1F 51.98 65.8 61.615 0 0 0 10 23 6 296 6 1F 51.8 65.8 60.842 0 0 0 10 23 7 296 6 1F 50.9 65.8 60.165 0 0 0 - 10 23 8 296 6 1F 50 65.8 59.529 0 0 0 - 10 23 9 296 6 1F 50.54 65.8 59.546 0 0 0 + 10 23 8 296 6 1F 50 65.8 59.528 0 0 0 + 10 23 9 296 6 1F 50.54 65.8 59.545 0 0 0 10 23 10 296 6 1F 54.5 65.8 60.861 0 0 0 - 10 23 11 296 6 1F 58.46 65.8 62.916 0 0 0 + 10 23 11 296 6 1F 58.46 65.8 62.915 0 0 0 10 23 12 296 6 1F 62.6 65.8 65.188 0 0 0 - 10 23 13 296 6 1F 67.28 65.8 66.998 0 0 0 + 10 23 13 296 6 1F 67.28 65.8 66.997 0 0 0 10 23 14 296 6 1F 70.52 65.8 68.272 0 0 0 10 23 15 296 6 1F 75.2 65.8 69.934 0 0 0 - 10 23 16 296 6 1F 76.1 65.8 71.812 0 0 0 - 10 23 17 296 6 1F 78.08 65.8 73.346 0 0 0 - 10 23 18 296 6 1F 77.36 65.8 73.465 0 0 0 - 10 23 19 296 6 1F 75.2 65.8 67.65 0 0 0 - 10 23 20 296 6 1F 72.68 65.8 67.585 0 0 0 - 10 23 21 296 6 1F 69.26 65.8 69.617 0 0 0 + 10 23 16 296 6 1F 76.1 65.8 71.811 0 0 0 + 10 23 17 296 6 1F 78.08 65.8 73.345 0 0 0 + 10 23 18 296 6 1F 77.36 65.8 73.464 0 0 0 + 10 23 19 296 6 1F 75.2 65.8 67.651 0 0 0 + 10 23 20 296 6 1F 72.68 65.8 67.586 0 0 0 + 10 23 21 296 6 1F 69.26 65.8 69.618 0 0 0 10 23 22 296 6 1F 63.86 65.8 68.578 0 0 0 - 10 23 23 296 6 1F 61.88 65.8 67.19 0 0 0 + 10 23 23 296 6 1F 61.88 65.8 67.189 0 0 0 10 23 24 296 6 1F 60.8 65.8 66.033 0 0 0 @@ -67884,8 +67884,8 @@ Hourly Cond Report, Sat 24-Oct Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 10 24 1 297 7 2S 59.72 65.8 65.25 0 0 0 - 10 24 2 297 7 2S 56.84 65.6 64.428 0 0 0 + 10 24 1 297 7 2S 59.72 65.8 65.249 0 0 0 + 10 24 2 297 7 2S 56.84 65.6 64.427 0 0 0 10 24 3 297 7 2S 55.04 65.6 63.504 0 0 0 10 24 4 297 7 2S 54.86 65.6 62.689 0 0 0 10 24 5 297 7 2S 53.78 65.6 61.98 0 0 0 @@ -67894,7 +67894,7 @@ Hourly Cond Report, Sat 24-Oct 10 24 8 297 7 2S 51.98 65.6 56.756 0 0 0 10 24 9 297 7 2S 51.08 65.6 58.346 0 0 0 10 24 10 297 7 2S 53.6 65.6 57.189 0 0 0 - 10 24 11 297 7 2S 58.46 65.6 58.627 0 0 0 + 10 24 11 297 7 2S 58.46 65.6 58.626 0 0 0 10 24 12 297 7 2S 63.5 65.6 60.291 0 0 0 10 24 13 297 7 2S 68.36 65.6 65.15 0 0 0 10 24 14 297 7 2S 71.42 65.6 67.798 0 0 0 @@ -67911,7 +67911,7 @@ Hourly Cond Report, Sat 24-Oct ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1078 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1078 @@ -67957,10 +67957,10 @@ Hourly Cond Report, Mon 26-Oct 10 26 2 299 2 4M 57.02 65.1 60.876 0 0 0 10 26 3 299 2 4M 56.84 65.1 60.691 0 0 0 10 26 4 299 2 4M 55.94 65.1 60.489 0 0 0 - 10 26 5 299 2 4M 55.94 65.1 60.278 0 0 0 + 10 26 5 299 2 4M 55.94 65.1 60.277 0 0 0 10 26 6 299 2 4M 55.76 65.1 60.122 0 0 0 10 26 7 299 2 4M 55.04 65.1 59.924 0 0 0 - 10 26 8 299 2 4M 55.04 65.1 58.301 0 0 0 + 10 26 8 299 2 4M 55.04 65.1 58.3 0 0 0 10 26 9 299 2 4M 55.04 65.1 55.674 0 0 0 10 26 10 299 2 4M 55.4 65.1 55.856 0 0 0 10 26 11 299 2 4M 58.1 65.1 55.95 0 0 0 @@ -67970,44 +67970,44 @@ Hourly Cond Report, Mon 26-Oct 10 26 15 299 2 4M 61.88 65.1 61.728 0 0 0 10 26 16 299 2 4M 60.08 65.1 61.893 0 25.680 0 10 26 17 299 2 4M 59.9 65.1 61.896 25.680 0 0 - 10 26 18 299 2 4M 59 65.1 61.595 0 0 0 - 10 26 19 299 2 4M 59 65.1 60.245 0 0 0 + 10 26 18 299 2 4M 59 65.1 61.603 0 0 0 + 10 26 19 299 2 4M 59 65.1 60.242 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1079 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1079 Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ - 10 26 20 299 2 4M 58.82 65.1 56.895 0 0 0 - 10 26 21 299 2 4M 57.74 65.1 56.706 0 0 0 - 10 26 22 299 2 4M 56.84 65.1 56.788 0 0 0 - 10 26 23 299 2 4M 54.68 65.1 59.224 0 0 5.000 - 10 26 24 299 2 4M 51.8 65.1 58.761 0 0 0 + 10 26 20 299 2 4M 58.82 65.1 56.898 0 0 0 + 10 26 21 299 2 4M 57.74 65.1 56.7 0 0 0 + 10 26 22 299 2 4M 56.84 65.1 56.781 0 0 0 + 10 26 23 299 2 4M 54.68 65.1 59.229 0 0 5.000 + 10 26 24 299 2 4M 51.8 65.1 58.762 0 0 0 Hourly Cond Report, Tue 27-Oct Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 10 27 1 300 3 5T 50 65.1 58.05 0 0 0 - 10 27 2 300 3 5T 49.82 64.8 57.343 0 0 0 - 10 27 3 300 3 5T 49.1 64.8 56.772 0 0 0 - 10 27 4 300 3 5T 50 64.8 56.291 0 0 0 - 10 27 5 300 3 5T 50.18 64.8 55.941 0 0 0 - 10 27 6 300 3 5T 51.08 64.8 55.66 0 0 0 + 10 27 1 300 3 5T 50 65.1 58.051 0 0 0 + 10 27 2 300 3 5T 49.82 64.8 57.344 0 0 0 + 10 27 3 300 3 5T 49.1 64.8 56.773 0 0 0 + 10 27 4 300 3 5T 50 64.8 56.292 0 0 0 + 10 27 5 300 3 5T 50.18 64.8 55.942 0 0 0 + 10 27 6 300 3 5T 51.08 64.8 55.661 0 0 0 10 27 7 300 3 5T 51.08 64.8 55.476 0 0 0 10 27 8 300 3 5T 51.08 64.8 55.296 0 0 0 10 27 9 300 3 5T 51.26 64.8 55.32 0 0 0 - 10 27 10 300 3 5T 52.16 64.8 55.905 0 0 0 + 10 27 10 300 3 5T 52.16 64.8 55.906 0 0 0 10 27 11 300 3 5T 54.14 64.8 54.977 0 0 0 10 27 12 300 3 5T 56.48 64.8 55.176 0 0 0 10 27 13 300 3 5T 60.62 64.8 58.725 0 0 0 10 27 14 300 3 5T 64.22 64.8 61.87 0 0 0 10 27 15 300 3 5T 66.02 64.8 63.513 0 0 0 - 10 27 16 300 3 5T 66.02 64.8 64.985 0 0 0 + 10 27 16 300 3 5T 66.02 64.8 64.986 0 0 0 10 27 17 300 3 5T 65.84 64.8 65.953 0 0 0 10 27 18 300 3 5T 64.58 64.8 61.517 0 0 0 10 27 19 300 3 5T 63.32 64.8 59.623 0 39.224 0 @@ -68027,7 +68027,7 @@ Hourly Cond Report, Wed 28-Oct 10 28 3 301 4 1W 54.86 64.6 58.207 0 0 0 10 28 4 301 4 1W 53.06 64.6 57.967 0 0 0 10 28 5 301 4 1W 53.24 64.6 57.719 0 0 0 - 10 28 6 301 4 1W 53.96 64.6 57.567 0 0 0 + 10 28 6 301 4 1W 53.96 64.6 57.568 0 0 0 10 28 7 301 4 1W 53.96 64.6 57.416 0 0 0 10 28 8 301 4 1W 53.96 64.6 57.313 0 0 0 10 28 9 301 4 1W 54.14 64.6 55.067 0 0 0 @@ -68037,7 +68037,7 @@ Hourly Cond Report, Wed 28-Oct 10 28 13 301 4 1W 62.42 64.6 60.794 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1080 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1080 @@ -68064,7 +68064,7 @@ Hourly Cond Report, Thu 29-Oct 10 29 1 302 5 6R 57.02 64.6 60.003 0 0 0 10 29 2 302 5 6R 56.84 64.5 59.749 0 0 0 10 29 3 302 5 6R 55.94 64.5 59.476 0 0 0 - 10 29 4 302 5 6R 55.22 64.5 59.185 0 0 0 + 10 29 4 302 5 6R 55.22 64.5 59.186 0 0 0 10 29 5 302 5 6R 55.04 64.5 58.909 0 0 0 10 29 6 302 5 6R 55.04 64.5 55.408 0 0 0 10 29 7 302 5 6R 55.04 64.5 54.776 0 0 0 @@ -68077,7 +68077,7 @@ Hourly Cond Report, Thu 29-Oct 10 29 14 302 5 6R 63.68 64.5 63.744 0 0 0 10 29 15 302 5 6R 65.3 64.5 64.753 0 0 0 10 29 16 302 5 6R 66.2 64.5 65.846 0 0 0 - 10 29 17 302 5 6R 66.74 64.5 66.67 0 0 0 + 10 29 17 302 5 6R 66.74 64.5 66.671 0 0 0 10 29 18 302 5 6R 66.02 64.5 66.274 0 0 0 10 29 19 302 5 6R 64.4 64.5 65.106 0 0 0 10 29 20 302 5 6R 62.6 64.5 64.11 0 0 0 @@ -68096,11 +68096,11 @@ Hourly Cond Report, Fri 30-Oct 10 30 3 303 6 4F 47.66 64.4 56.694 0 0 0 10 30 4 303 6 4F 44.96 64.4 55.828 0 0 0 10 30 5 303 6 4F 44.6 64.4 54.971 0 0 0 - 10 30 6 303 6 4F 44.24 64.4 54.242 0 0 0 - 10 30 7 303 6 4F 44.78 64.4 53.634 0 0 0 + 10 30 6 303 6 4F 44.24 64.4 54.243 0 0 0 + 10 30 7 303 6 4F 44.78 64.4 53.635 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1081 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1081 @@ -68163,7 +68163,7 @@ Hourly Cond Report, Sun 01-Nov 11 1 1 305 1 2U 51.8 64.2 57.885 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1082 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1082 @@ -68186,7 +68186,7 @@ Test3 4BR W/ DHW Probes @intgains 11 1 14 305 1 2U 65.12 64.1 60.836 0 0 0 11 1 15 305 1 2U 66.2 64.1 62.341 0 0 0 11 1 16 305 1 2U 66.92 64.1 63.546 0 0 0 - 11 1 17 305 1 2U 66.2 64.1 63.478 0 6.760 0 + 11 1 17 305 1 2U 66.2 64.1 63.479 0 6.760 0 11 1 18 305 1 2U 63.68 64.1 59.91 6.760 5.166 0 11 1 19 305 1 2U 60.44 64.1 59.369 5.166 0 0 11 1 20 305 1 2U 56.84 64.1 58.6 0 0 0 @@ -68226,7 +68226,7 @@ Hourly Cond Report, Mon 02-Nov 11 2 24 306 2 3M 54.68 63.8 57.108 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1083 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1083 @@ -68289,7 +68289,7 @@ Hourly Cond Report, Wed 04-Nov 11 4 18 308 4 2W 55.4 63.5 57.075 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1084 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1084 @@ -68352,7 +68352,7 @@ Hourly Cond Report, Fri 06-Nov 11 6 12 310 6 3F 58.46 63.1 56.305 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1085 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1085 @@ -68368,8 +68368,8 @@ Test3 4BR W/ DHW Probes @intgains 11 6 19 310 6 3F 60.8 63.1 59.801 0 0 0 11 6 20 310 6 3F 58.82 63.1 59.034 0 0 0 11 6 21 310 6 3F 56.84 63.1 58.235 0 0 0 - 11 6 22 310 6 3F 54.86 63.1 57.358 0 0 5.003 - 11 6 23 310 6 3F 53.42 63.1 56.503 0 0 0 + 11 6 22 310 6 3F 54.86 63.1 57.357 0 0 5.003 + 11 6 23 310 6 3F 53.42 63.1 56.504 0 0 0 11 6 24 310 6 3F 49.82 63.1 55.662 0 0 0 @@ -68377,15 +68377,15 @@ Hourly Cond Report, Sat 07-Nov Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 11 7 1 311 7 4S 47.3 62.9 51.384 0 0 0 + 11 7 1 311 7 4S 47.3 62.9 51.383 0 0 0 11 7 2 311 7 4S 45.32 62.9 50.755 0 0 0 11 7 3 311 7 4S 44.6 62.9 52.404 0 0 0 - 11 7 4 311 7 4S 44.42 62.9 51.774 0 0 0 + 11 7 4 311 7 4S 44.42 62.9 51.773 0 0 0 11 7 5 311 7 4S 43.34 62.9 51.155 0 0 0 11 7 6 311 7 4S 43.52 62.9 50.559 0 0 0 11 7 7 311 7 4S 42.8 62.9 50.055 0 0 0 11 7 8 311 7 4S 42.08 62.9 49.883 0 0 0 - 11 7 9 311 7 4S 42.44 62.9 50.296 0 0 0 + 11 7 9 311 7 4S 42.44 62.9 50.295 0 0 0 11 7 10 311 7 4S 45.68 62.9 50.575 0 0 0 11 7 11 311 7 4S 50.54 62.9 51.299 0 11.705 0 11 7 12 311 7 4S 55.4 62.9 54.03 11.705 7.077 0 @@ -68415,7 +68415,7 @@ Hourly Cond Report, Sun 08-Nov 11 8 6 312 1 5U 49.1 62.6 52.05 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1086 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1086 @@ -68478,7 +68478,7 @@ Hourly Cond Report, Tue 10-Nov ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1087 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1087 @@ -68541,7 +68541,7 @@ Hourly Cond Report, Wed 11-Nov 11 11 24 315 8 5H 55.04 62.1 50.178 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1088 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1088 @@ -68604,7 +68604,7 @@ Hourly Cond Report, Fri 13-Nov 11 13 18 317 6 5F 66.38 61.7 61.964 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1089 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1089 @@ -68667,7 +68667,7 @@ Hourly Cond Report, Sun 15-Nov 11 15 12 319 1 5U 56.12 61.3 53.631 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1090 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1090 @@ -68715,63 +68715,63 @@ Hourly Cond Report, Mon 16-Nov 11 16 21 320 2 2M 55.22 61.1 56.217 0 0 0 11 16 22 320 2 2M 53.78 61.1 55.717 0 25.677 0 11 16 23 320 2 2M 51.8 61.1 54.951 25.677 0 0 - 11 16 24 320 2 2M 51.98 61.1 54.311 0 0 0 + 11 16 24 320 2 2M 51.98 61.1 54.314 0 0 0 Hourly Cond Report, Tue 17-Nov Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 11 17 1 321 3 2T 50 60.8 53.733 0 0 0 - 11 17 2 321 3 2T 46.94 60.8 52.979 0 0 0 - 11 17 3 321 3 2T 46.76 60.8 52.34 0 0 0 + 11 17 1 321 3 2T 50 60.8 53.734 0 0 0 + 11 17 2 321 3 2T 46.94 60.8 52.98 0 0 0 + 11 17 3 321 3 2T 46.76 60.8 52.341 0 0 0 11 17 4 321 3 2T 46.04 60.8 51.997 0 0 0 11 17 5 321 3 2T 45.86 60.8 51.708 0 0 0 - 11 17 6 321 3 2T 44.96 60.8 51.41 0 0 0 + 11 17 6 321 3 2T 44.96 60.8 51.411 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1091 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1091 Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ - 11 17 7 321 3 2T 44.96 60.8 51.094 0 0 0 - 11 17 8 321 3 2T 45.14 60.8 48.612 0 0 0 + 11 17 7 321 3 2T 44.96 60.8 51.095 0 0 0 + 11 17 8 321 3 2T 45.14 60.8 48.613 0 0 0 11 17 9 321 3 2T 46.22 60.8 50.006 0 0 0 11 17 10 321 3 2T 47.12 60.8 50.221 0 16.395 0 - 11 17 11 321 3 2T 48.2 60.8 52.159 16.395 9.289 0 + 11 17 11 321 3 2T 48.2 60.8 52.16 16.395 9.289 0 11 17 12 321 3 2T 49.1 60.8 52.725 9.289 0 0 11 17 13 321 3 2T 50 60.8 53.237 0 0 0 - 11 17 14 321 3 2T 50.54 60.8 53.791 0 0 0 - 11 17 15 321 3 2T 50.72 60.8 50.972 0 0 0 - 11 17 16 321 3 2T 51.08 60.8 50.938 0 0 0 + 11 17 14 321 3 2T 50.54 60.8 53.797 0 0 0 + 11 17 15 321 3 2T 50.72 60.8 50.965 0 0 0 + 11 17 16 321 3 2T 51.08 60.8 50.941 0 0 0 11 17 17 321 3 2T 51.26 60.8 53.4 0 0 0 - 11 17 18 321 3 2T 51.62 60.8 53.646 0 0 0 - 11 17 19 321 3 2T 51.98 60.8 53.542 0 0 0 - 11 17 20 321 3 2T 51.8 60.8 53.445 0 0 0 - 11 17 21 321 3 2T 51.08 60.8 53.312 0 0 0 - 11 17 22 321 3 2T 51.26 60.8 53.14 0 0 0 - 11 17 23 321 3 2T 50 60.8 52.977 0 0 0 - 11 17 24 321 3 2T 50.18 60.8 52.758 0 0 0 + 11 17 18 321 3 2T 51.62 60.8 53.644 0 0 0 + 11 17 19 321 3 2T 51.98 60.8 53.541 0 0 0 + 11 17 20 321 3 2T 51.8 60.8 53.454 0 0 0 + 11 17 21 321 3 2T 51.08 60.8 53.307 0 0 0 + 11 17 22 321 3 2T 51.26 60.8 53.138 0 0 0 + 11 17 23 321 3 2T 50 60.8 52.98 0 0 0 + 11 17 24 321 3 2T 50.18 60.8 52.759 0 0 0 Hourly Cond Report, Wed 18-Nov Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 11 18 1 322 4 3W 51.62 60.5 52.699 0 0 0 - 11 18 2 322 4 3W 50.54 60.5 52.679 0 0 0 - 11 18 3 322 4 3W 48.74 60.5 52.495 0 0 0 + 11 18 1 322 4 3W 51.62 60.5 52.702 0 0 0 + 11 18 2 322 4 3W 50.54 60.5 52.681 0 0 0 + 11 18 3 322 4 3W 48.74 60.5 52.492 0 0 0 11 18 4 322 4 3W 48.74 60.5 52.248 0 0 0 11 18 5 322 4 3W 50 60.5 52.115 0 0 0 11 18 6 322 4 3W 50 60.5 52.033 0 0 0 11 18 7 322 4 3W 50.18 60.5 50.491 0 0 0 - 11 18 8 322 4 3W 50.72 60.5 48.144 0 0 0 + 11 18 8 322 4 3W 50.72 60.5 48.145 0 0 0 11 18 9 322 4 3W 51.08 60.5 48.216 0 0 0 11 18 10 322 4 3W 51.08 60.5 47.996 0 0 0 - 11 18 11 322 4 3W 51.26 60.5 48.403 0 0 0 + 11 18 11 322 4 3W 51.26 60.5 48.404 0 0 0 11 18 12 322 4 3W 51.98 60.5 48.891 0 0 0 11 18 13 322 4 3W 52.52 60.5 51.496 0 0 0 11 18 14 322 4 3W 53.24 60.5 53.056 0 25.673 0 @@ -68793,7 +68793,7 @@ Hourly Cond Report, Thu 19-Nov ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1092 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1092 @@ -68813,7 +68813,7 @@ Test3 4BR W/ DHW Probes @intgains 11 19 11 323 5 5R 51.98 60.3 51.668 0 0 0 11 19 12 323 5 5R 53.96 60.3 51.644 0 0 0 11 19 13 323 5 5R 55.94 60.3 54.301 0 0 0 - 11 19 14 323 5 5R 60.26 60.3 57.046 0 0 0 + 11 19 14 323 5 5R 60.26 60.3 57.047 0 0 0 11 19 15 323 5 5R 61.16 60.3 58.314 0 0 0 11 19 16 323 5 5R 62.78 60.3 55.223 0 0 0 11 19 17 323 5 5R 61.52 60.3 54.965 0 0 0 @@ -68830,33 +68830,33 @@ Hourly Cond Report, Fri 20-Nov Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 11 20 1 324 6 3F 45.86 60.1 51.968 0 0 0 + 11 20 1 324 6 3F 45.86 60.1 51.969 0 0 0 11 20 2 324 6 3F 43.52 60.1 51.193 0 0 0 11 20 3 324 6 3F 41 60.1 50.324 0 0 0 11 20 4 324 6 3F 40.46 60.1 49.51 0 0 0 11 20 5 324 6 3F 39.2 60.1 48.729 0 0 0 11 20 6 324 6 3F 36.68 60.1 47.931 0 0 0 11 20 7 324 6 3F 40.82 60.1 47.324 0 0 0 - 11 20 8 324 6 3F 39.92 60.1 47.25 0 0 0 - 11 20 9 324 6 3F 40.82 60.1 47.964 0 0 0 + 11 20 8 324 6 3F 39.92 60.1 47.259 0 0 0 + 11 20 9 324 6 3F 40.82 60.1 47.966 0 0 0 11 20 10 324 6 3F 47.48 60.1 49.58 0 0 0 11 20 11 324 6 3F 52.52 60.1 48.516 0 0 0 - 11 20 12 324 6 3F 57.38 60.1 49.376 0 0 0 + 11 20 12 324 6 3F 57.38 60.1 49.377 0 0 0 11 20 13 324 6 3F 60.44 60.1 51.918 0 0 0 - 11 20 14 324 6 3F 63.32 60.1 56.01 0 0 0 + 11 20 14 324 6 3F 63.32 60.1 56.011 0 0 0 11 20 15 324 6 3F 65.84 60.1 57.952 0 0 0 11 20 16 324 6 3F 64.76 60.1 59.046 0 0 0 - 11 20 17 324 6 3F 64.04 60.1 59.07 0 0 0 + 11 20 17 324 6 3F 64.04 60.1 59.071 0 0 0 11 20 18 324 6 3F 62.42 60.1 58.594 0 0 0 11 20 19 324 6 3F 60.62 60.1 57.97 0 0 0 - 11 20 20 324 6 3F 57.74 60.1 57.157 0 0 0 + 11 20 20 324 6 3F 57.74 60.1 57.158 0 0 0 11 20 21 324 6 3F 55.76 60.1 56.243 0 0 0 11 20 22 324 6 3F 54.86 60.1 51.828 0 0 5.003 - 11 20 23 324 6 3F 53.78 60.1 51.404 0 0 0 - 11 20 24 324 6 3F 52.16 60.1 52.136 0 0 0 + 11 20 23 324 6 3F 53.78 60.1 51.405 0 0 0 + 11 20 24 324 6 3F 52.16 60.1 52.137 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1093 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1093 @@ -68872,8 +68872,8 @@ Hourly Cond Report, Sat 21-Nov 11 21 1 325 7 2S 52.7 59.9 53.307 0 0 0 11 21 2 325 7 2S 49.82 59.9 52.9 0 0 0 11 21 3 325 7 2S 48.74 59.9 52.258 0 0 0 - 11 21 4 325 7 2S 47.48 59.9 51.653 0 0 0 - 11 21 5 325 7 2S 44.06 59.9 50.886 0 0 0 + 11 21 4 325 7 2S 47.48 59.9 51.654 0 0 0 + 11 21 5 325 7 2S 44.06 59.9 50.887 0 0 0 11 21 6 325 7 2S 43.52 59.9 50.155 0 0 0 11 21 7 325 7 2S 40.1 59.9 49.416 0 0 0 11 21 8 325 7 2S 42.44 59.9 48.943 0 0 0 @@ -68887,8 +68887,8 @@ Hourly Cond Report, Sat 21-Nov 11 21 16 325 7 2S 60.8 59.9 57.977 0 0 0 11 21 17 325 7 2S 59.9 59.9 57.659 0 0 0 11 21 18 325 7 2S 58.46 59.9 56.955 0 0 0 - 11 21 19 325 7 2S 56.84 59.9 52.499 0 0 0 - 11 21 20 325 7 2S 54.86 59.9 51.896 0 0 0 + 11 21 19 325 7 2S 56.84 59.9 52.5 0 0 0 + 11 21 20 325 7 2S 54.86 59.9 51.897 0 0 0 11 21 21 325 7 2S 53.78 59.9 53.278 0 0 0 11 21 22 325 7 2S 51.8 59.9 53.664 0 0 0 11 21 23 325 7 2S 50 59.9 53.042 0 0 0 @@ -68901,10 +68901,10 @@ Hourly Cond Report, Sun 22-Nov ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ 11 22 1 326 1 2U 49.82 59.7 52.167 0 0 0 11 22 2 326 1 2U 48.38 59.7 51.749 0 0 0 - 11 22 3 326 1 2U 45.32 59.7 51.092 0 0 0 + 11 22 3 326 1 2U 45.32 59.7 51.093 0 0 0 11 22 4 326 1 2U 47.48 59.7 50.62 0 0 0 11 22 5 326 1 2U 43.16 59.7 50.116 0 0 0 - 11 22 6 326 1 2U 37.04 59.7 49.111 0 0 0 + 11 22 6 326 1 2U 37.04 59.7 49.112 0 0 0 11 22 7 326 1 2U 36.86 59.7 48.013 0 0 0 11 22 8 326 1 2U 35.6 59.7 47.294 0 0 0 11 22 9 326 1 2U 40.46 59.7 47.513 0 13.702 0 @@ -68912,14 +68912,14 @@ Hourly Cond Report, Sun 22-Nov 11 22 11 326 1 2U 49.1 59.7 50.092 0 0 0 11 22 12 326 1 2U 51.44 59.7 51.589 0 0 0 11 22 13 326 1 2U 54.14 59.7 52.936 0 0 0 - 11 22 14 326 1 2U 56.12 59.7 54.25 0 0 0 + 11 22 14 326 1 2U 56.12 59.7 54.251 0 0 0 11 22 15 326 1 2U 57.2 59.7 55.554 0 0 0 11 22 16 326 1 2U 57.74 59.7 56.214 0 0 0 11 22 17 326 1 2U 57.02 59.7 51.845 0 6.760 0 11 22 18 326 1 2U 55.4 59.7 50.964 6.760 5.166 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1094 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1094 @@ -68938,7 +68938,7 @@ Hourly Cond Report, Mon 23-Nov Mo Day Hr JDay DOWH Day tDbO Tinlet garT CWashrLH CWashr DWashr ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ - 11 23 1 327 2 2M 44.78 59.4 49.307 0 0 0 + 11 23 1 327 2 2M 44.78 59.4 49.308 0 0 0 11 23 2 327 2 2M 42.44 59.4 48.756 0 0 0 11 23 3 327 2 2M 39.02 59.4 48.01 0 0 0 11 23 4 327 2 2M 38.66 59.4 47.229 0 0 0 @@ -68982,7 +68982,7 @@ Hourly Cond Report, Tue 24-Nov 11 24 12 328 3 6T 54.32 59.2 46.203 12.910 12.758 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1095 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1095 @@ -69000,7 +69000,7 @@ Test3 4BR W/ DHW Probes @intgains 11 24 21 328 3 6T 48.74 59.2 48.387 0 0 0 11 24 22 328 3 6T 47.84 59.2 47.17 0 0 0 11 24 23 328 3 6T 46.76 59.2 48.519 0 0 0 - 11 24 24 328 3 6T 45.86 59.2 49.073 0 0 0 + 11 24 24 328 3 6T 45.86 59.2 49.074 0 0 0 Hourly Cond Report, Wed 25-Nov @@ -69021,7 +69021,7 @@ Hourly Cond Report, Wed 25-Nov 11 25 12 329 4 3W 49.28 58.9 45.128 0 0 0 11 25 13 329 4 3W 52.16 58.9 47.173 0 0 0 11 25 14 329 4 3W 53.06 58.9 50.149 0 25.673 0 - 11 25 15 329 4 3W 53.96 58.9 50.91 25.673 0 0 + 11 25 15 329 4 3W 53.96 58.9 50.911 25.673 0 0 11 25 16 329 4 3W 53.96 58.9 51.378 0 0 0 11 25 17 329 4 3W 53.96 58.9 51.454 0 3.335 0 11 25 18 329 4 3W 53.96 58.9 48.18 3.335 22.348 0 @@ -69045,7 +69045,7 @@ Hourly Cond Report, Thu 26-Nov 11 26 6 330 8 6H 43.7 58.7 47.399 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1096 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1096 @@ -69058,8 +69058,8 @@ Test3 4BR W/ DHW Probes @intgains 11 26 10 330 8 6H 44.96 58.7 47.862 0 0 0 11 26 11 330 8 6H 44.96 58.7 48.285 0 0 0 11 26 12 330 8 6H 46.22 58.7 46.969 0 0 0 - 11 26 13 330 8 6H 50.36 58.7 47.726 0 0 0 - 11 26 14 330 8 6H 53.24 58.7 47.836 0 15.885 0 + 11 26 13 330 8 6H 50.36 58.7 47.727 0 0 0 + 11 26 14 330 8 6H 53.24 58.7 47.837 0 15.885 0 11 26 15 330 8 6H 55.04 58.7 48.014 15.885 9.794 0 11 26 16 330 8 6H 54.86 58.7 48.212 9.794 0 0 11 26 17 330 8 6H 54.14 58.7 47.839 0 0 0 @@ -69092,7 +69092,7 @@ Hourly Cond Report, Fri 27-Nov 11 27 14 331 8 2H 57.2 58.5 53.771 0 0 0 11 27 15 331 8 2H 57.92 58.5 54.801 0 0 0 11 27 16 331 8 2H 57.74 58.5 55.306 0 0 0 - 11 27 17 331 8 2H 55.94 58.5 54.972 0 0 0 + 11 27 17 331 8 2H 55.94 58.5 54.973 0 0 0 11 27 18 331 8 2H 54.32 58.5 50.542 0 0 0 11 27 19 331 8 2H 52.88 58.5 49.771 0 0 0 11 27 20 331 8 2H 51.8 58.5 50.389 0 0 0 @@ -69108,7 +69108,7 @@ Hourly Cond Report, Sat 28-Nov ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1097 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1097 @@ -69119,7 +69119,7 @@ Test3 4BR W/ DHW Probes @intgains 11 28 2 332 7 4S 44.78 58.4 48.813 0 0 0 11 28 3 332 7 4S 42.98 58.4 48.228 0 0 0 11 28 4 332 7 4S 42.8 58.4 47.667 0 0 0 - 11 28 5 332 7 4S 41.9 58.4 47.188 0 0 0 + 11 28 5 332 7 4S 41.9 58.4 47.189 0 0 0 11 28 6 332 7 4S 41.18 58.4 46.711 0 0 0 11 28 7 332 7 4S 42.08 58.4 46.398 0 0 0 11 28 8 332 7 4S 42.26 58.4 46.308 0 0 0 @@ -69163,7 +69163,7 @@ Hourly Cond Report, Sun 29-Nov 11 29 16 333 1 3U 50 58.2 51.02 8.368 17.311 0 11 29 17 333 1 3U 49.1 58.2 50.822 17.311 0 0 11 29 18 333 1 3U 46.76 58.2 49.888 0 0 0 - 11 29 19 333 1 3U 43.7 58.2 48.733 0 0 0 + 11 29 19 333 1 3U 43.7 58.2 48.734 0 0 0 11 29 20 333 1 3U 40.82 58.2 47.733 0 0 0 11 29 21 333 1 3U 38.84 58.2 46.769 0 0 0 11 29 22 333 1 3U 37.22 58.2 45.911 0 0 0 @@ -69171,7 +69171,7 @@ Hourly Cond Report, Sun 29-Nov 11 29 24 333 1 3U 35.6 58.2 44.434 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1098 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1098 @@ -69234,7 +69234,7 @@ Hourly Cond Report, Tue 01-Dec 12 1 18 335 3 2T 50.36 57.6 49.178 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1099 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1099 @@ -69246,7 +69246,7 @@ Test3 4BR W/ DHW Probes @intgains 12 1 21 335 3 2T 40.64 57.6 45.966 0 0 0 12 1 22 335 3 2T 37.94 57.6 45.07 0 0 0 12 1 23 335 3 2T 37.76 57.6 44.236 0 0 0 - 12 1 24 335 3 2T 35.78 57.6 41.009 0 0 0 + 12 1 24 335 3 2T 35.78 57.6 41.01 0 0 0 Hourly Cond Report, Wed 02-Dec @@ -69297,7 +69297,7 @@ Hourly Cond Report, Thu 03-Dec 12 3 12 337 5 1R 46.22 57.1 44.216 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1100 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1100 @@ -69360,7 +69360,7 @@ Hourly Cond Report, Sat 05-Dec 12 5 6 339 7 2S 35.96 56.7 40.636 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1101 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1101 @@ -69423,7 +69423,7 @@ Hourly Cond Report, Mon 07-Dec ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1102 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1102 @@ -69486,7 +69486,7 @@ Hourly Cond Report, Tue 08-Dec 12 8 24 342 3 2T 54.68 56.3 52.135 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1103 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1103 @@ -69549,7 +69549,7 @@ Hourly Cond Report, Thu 10-Dec 12 10 18 344 5 4R 56.12 56.1 56.039 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1104 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1104 @@ -69612,7 +69612,7 @@ Hourly Cond Report, Sat 12-Dec 12 12 12 346 7 6S 53.06 55.9 47.431 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1105 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1105 @@ -69675,7 +69675,7 @@ Hourly Cond Report, Mon 14-Dec 12 14 6 348 2 2M 53.96 55.6 47.676 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1106 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1106 @@ -69738,7 +69738,7 @@ Hourly Cond Report, Wed 16-Dec ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1107 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1107 @@ -69801,7 +69801,7 @@ Hourly Cond Report, Thu 17-Dec 12 17 24 351 5 5R 39.38 55.2 46.828 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1108 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1108 @@ -69864,7 +69864,7 @@ Hourly Cond Report, Sat 19-Dec 12 19 18 353 7 2S 44.6 54.8 46.867 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1109 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1109 @@ -69927,7 +69927,7 @@ Hourly Cond Report, Mon 21-Dec 12 21 12 355 2 6M 48.2 54.4 44.419 9.642 16.036 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1110 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1110 @@ -69990,7 +69990,7 @@ Hourly Cond Report, Wed 23-Dec 12 23 6 357 4 2W 31.1 54.1 40.016 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1111 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1111 @@ -70053,7 +70053,7 @@ Hourly Cond Report, Fri 25-Dec ---------- ---------- ---------- ---------- ---------- ---- ---------- ------ ---------- ------ ------ ------ ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1112 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1112 @@ -70116,7 +70116,7 @@ Hourly Cond Report, Sat 26-Dec 12 26 24 360 7 4S 51.26 53.6 47.096 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1113 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1113 @@ -70179,7 +70179,7 @@ Hourly Cond Report, Mon 28-Dec 12 28 18 362 2 4M 50 53.4 49.347 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1114 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1114 @@ -70242,7 +70242,7 @@ Hourly Cond Report, Wed 30-Dec 12 30 12 364 4 1W 50.18 53.3 45.872 0 0 0 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1115 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1115 @@ -70296,7 +70296,7 @@ Hourly Cond Report, Thu 31-Dec ! Log for Run 002: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -70305,7 +70305,7 @@ Hourly Cond Report, Thu 31-Dec ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1116 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1116 @@ -70368,7 +70368,7 @@ Input for Run 001: izNVType = "AIRNETEXT" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1117 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1117 @@ -70431,7 +70431,7 @@ Test3 4BR W/ DHW Probes @intgains izCpr = 0.6 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1118 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1118 @@ -70494,7 +70494,7 @@ Test3 4BR W/ DHW Probes @intgains izZn2 = "Attic -atc" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1119 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1119 @@ -70557,7 +70557,7 @@ Test3 4BR W/ DHW Probes @intgains izNVType = "AIRNETEXT" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1120 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1120 @@ -70620,7 +70620,7 @@ Test3 4BR W/ DHW Probes @intgains znModel = "CZM" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1121 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1121 @@ -70683,7 +70683,7 @@ Test3 4BR W/ DHW Probes @intgains gnFrLat = 0.25 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1122 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1122 @@ -70746,7 +70746,7 @@ Test3 4BR W/ DHW Probes @intgains sfAdjZn = "Garage-grg" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1123 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1123 @@ -70809,7 +70809,7 @@ Test3 4BR W/ DHW Probes @intgains sfArea = 90.492126 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1124 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1124 @@ -70872,7 +70872,7 @@ Test3 4BR W/ DHW Probes @intgains sfArea = 89.489998 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1125 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1125 @@ -70935,7 +70935,7 @@ Test3 4BR W/ DHW Probes @intgains ohExR = 3 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1126 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1126 @@ -70998,7 +70998,7 @@ Test3 4BR W/ DHW Probes @intgains sfTilt = 90 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1127 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1127 @@ -71061,7 +71061,7 @@ Test3 4BR W/ DHW Probes @intgains sfModel = "Forward_Difference" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1128 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1128 @@ -71124,7 +71124,7 @@ Test3 4BR W/ DHW Probes @intgains wnDirtLoss = 0.1 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1129 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1129 @@ -71187,7 +71187,7 @@ Test3 4BR W/ DHW Probes @intgains wnArea = 30.68 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1130 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1130 @@ -71250,7 +71250,7 @@ Test3 4BR W/ DHW Probes @intgains wnMult = 1 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1131 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1131 @@ -71313,7 +71313,7 @@ Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1132 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1132 @@ -71376,7 +71376,7 @@ Test3 4BR W/ DHW Probes @intgains sfAdjZn = "Conditioned-zn" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1133 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1133 @@ -71439,7 +71439,7 @@ Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1134 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1134 @@ -71502,7 +71502,7 @@ Test3 4BR W/ DHW Probes @intgains sfExCTaDbAvgYr = 0.0251 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1135 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1135 @@ -71565,7 +71565,7 @@ Test3 4BR W/ DHW Probes @intgains sfExEpsLW = 0.85 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1136 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1136 @@ -71628,7 +71628,7 @@ Test3 4BR W/ DHW Probes @intgains sfExCnd = "Adiabatic" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1137 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1137 @@ -71691,7 +71691,7 @@ Test3 4BR W/ DHW Probes @intgains sfTilt = 22.619864 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1138 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1138 @@ -71754,7 +71754,7 @@ Test3 4BR W/ DHW Probes @intgains sfArea = 422.078918 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1139 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1139 @@ -71817,7 +71817,7 @@ Test3 4BR W/ DHW Probes @intgains dsInsulR = 7.093555 ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1140 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1140 @@ -71880,7 +71880,7 @@ Test3 4BR W/ DHW Probes @intgains gnEndUse = "Dish" ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1141 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1141 @@ -71943,7 +71943,7 @@ Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1142 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1142 @@ -71952,21 +71952,21 @@ Test3 4BR W/ DHW Probes @intgains -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console run(s) done: Fri 27-Aug-21 11:13:57 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 9:53:12 am -! Executable: d:\cse\msvc\cse.exe -! 27-Aug-21 11:04 am (VS 14.29 2701824 bytes) (HPWH 1.15.0+master.d18737e.3) -! Command line: -x! -t1 dhwDU -! Input file: D:\cse\test\dhwDU.cse -! Report file: D:\cse\test\dhwDU.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 27-Oct-21 9:48 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 dhwDU +! Input file: C:\Users\nkruis\projects\cse\test\dhwDU.cse +! Report file: C:\Users\nkruis\projects\cse\test\dhwDU.rep ! Timing info -- -! Input: Time = 0.19 Calls = 3 T/C = 0.0643 -! AutoSizing: Time = 0.18 Calls = 1 T/C = 0.1750 -! Simulation: Time = 4.19 Calls = 2 T/C = 2.0925 -! Reports: Time = 0.35 Calls = 2 T/C = 0.1765 -! Total: Time = 4.91 Calls = 1 T/C = 4.9100 +! Input: Time = 0.36 Calls = 3 T/C = 0.1200 +! AutoSizing: Time = 0.38 Calls = 1 T/C = 0.3820 +! Simulation: Time = 6.22 Calls = 2 T/C = 3.1100 +! Reports: Time = 0.31 Calls = 2 T/C = 0.1570 +! Total: Time = 7.28 Calls = 1 T/C = 7.2770 @@ -72006,5 +72006,5 @@ Test3 4BR W/ DHW Probes @intgains ------------------------------------------------------------------------------ -! dhwDU 002 Fri 27-Aug-21 11:13:53 am Page 1143 +! dhwDU 002 Wed 27-Oct-21 9:53:05 am Page 1143 \ No newline at end of file diff --git a/test/ref/DHW_ZONE.REP b/test/ref/DHW_ZONE.REP index c27320437..9fca7cedc 100644 --- a/test/ref/DHW_ZONE.REP +++ b/test/ref/DHW_ZONE.REP @@ -60,7 +60,7 @@ Yr 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 1 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 1 @@ -123,7 +123,7 @@ Monthly Energy Balance, zone "Z1" ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 2 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 2 @@ -186,7 +186,7 @@ Monthly Energy Balance, zone "Garage" ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 3 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 3 @@ -249,7 +249,7 @@ Hourly Energy Balance, zone "Z1", Sat 05-Jan 16 65.08 49.75 -0.155 0 2.441 0.400 -0.602 -2.083 0 0 0 0 .00494 -.0049 0 0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 4 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 4 @@ -312,7 +312,7 @@ Hourly Energy Balance, zone "Z1", Mon 07-Jan 6 64.75 51.81 -0.154 0 0 0.400 -2.790 -3.097 5.642 0 0 0 -.0039 .00390 0 0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 5 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 5 @@ -375,7 +375,7 @@ Hourly Energy Balance, zone "Z1", Tue 08-Jan ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 6 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 6 @@ -438,7 +438,7 @@ Hourly Energy Balance, zone "Z1", Thu 10-Jan 18 67.39 57.49 -.0229 0 0 0.400 0.548 -0.925 0 0 0 0 -.0033 .00332 0 0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 7 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 7 @@ -501,7 +501,7 @@ Hourly Energy Balance, zone "Z1", Thu 10-Jan ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 8 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 8 @@ -564,7 +564,7 @@ Hourly Energy Balance, zone "Garage", Sat 05-Jan 16 40.36 36.19 1.595 0 0 .0107 2.746 0 -4.352 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 9 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 9 @@ -627,7 +627,7 @@ Hourly Energy Balance, zone "Garage", Mon 07-Jan 6 36.28 34.03 1.657 0 0 .0128 2.093 0 -3.763 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 10 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 10 @@ -690,7 +690,7 @@ Hourly Energy Balance, zone "Garage", Tue 08-Jan ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 11 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 11 @@ -753,7 +753,7 @@ Hourly Energy Balance, zone "Garage", Thu 10-Jan 18 44.03 38.00 1.514 0 0 .0181 3.259 0 -4.792 0 0 0 0 0 0 0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 12 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 12 @@ -816,7 +816,7 @@ Hourly Energy Balance, zone "Garage", Thu 10-Jan ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 13 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 13 @@ -879,7 +879,7 @@ Subhourly User-defined Report, Mon 10-Jun 7 68.54 4.137 70.915 71.747 1.000 2.184 0 59.026 62.96 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 14 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 14 @@ -942,7 +942,7 @@ Subhourly User-defined Report, Mon 10-Jun 16 87.62 3.188 74.708 76.708 0 2.317 -7.34k 71.438 77.119 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 15 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 15 @@ -1005,7 +1005,7 @@ Subhourly User-defined Report, Tue 11-Jun 0 68.9 0.168 73.716 73.631 1.000 3.663 0 70.293 69.468 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 16 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 16 @@ -1068,7 +1068,7 @@ Subhourly User-defined Report, Tue 11-Jun 9 79.52 1.51 73.766 74.788 0 1.388 0 61.004 65.057 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 17 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 17 @@ -1131,7 +1131,7 @@ Subhourly User-defined Report, Tue 11-Jun 18 92.84 1.51 74.792 76.185 0 2.586 -6.78k 81.17 80.51 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 18 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 18 @@ -1194,7 +1194,7 @@ Subhourly User-defined Report, Wed 12-Jun 2 55.76 1.51 67.335 67.316 0 2.000 0 67.911 67.357 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 19 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 19 @@ -1257,7 +1257,7 @@ Subhourly User-defined Report, Wed 12-Jun 11 76.1 2.517 72.021 72.879 0 1.307 0 61.869 65.872 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 20 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 20 @@ -1320,7 +1320,7 @@ Subhourly User-defined Report, Wed 12-Jun 20 68.54 3.075 74.627 74.615 1.000 3.201 0 75.575 74.739 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 21 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 21 @@ -1383,7 +1383,7 @@ WT1 for Wed 10-Apr ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 22 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 22 @@ -1446,7 +1446,7 @@ Mass Floor Area: 516.680 UNom: 0.006928 tc: 0.72 subhrly: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 23 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 23 @@ -1509,7 +1509,7 @@ IzXfer ZX2 Zn1: Z1 Zn2: (ambient) UAconst: 0 NVctrl: AirNetE ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 24 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 24 @@ -1572,7 +1572,7 @@ Mass GarageWallLeft-F Area: 27.000 UNom: 0.1798 tc: 4.08 subhrly: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 25 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 25 @@ -1635,7 +1635,7 @@ Mass GarageSlab-Prm Area: 108.000 UNom: 0.2428 tc: 41.21 subhrly: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 26 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 26 @@ -1698,7 +1698,7 @@ Mass GarageCarDoorFro Area: 128.000 UNom: 1.0000 tc: 0.44 subhrly: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 27 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 27 @@ -1710,7 +1710,7 @@ Mass GarageCarDoorFro Area: 128.000 UNom: 1.0000 tc: 0.44 subhrly: ! Log for Run 001: ################ -! CSE 0.893.0 for Win32 console Tue 22-Jun-21 11:17:27 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console Wed 27-Oct-21 9:53:17 am ================ @@ -1761,7 +1761,7 @@ tilt theta ta<=ts ta>ts theta ta<=ts ta>ts 60 -30 0.153 0.153 30 0.153 0.153 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 28 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 28 @@ -1824,7 +1824,7 @@ Surface 'GarageWallFront-Cav': tilt=90 Surface 'GarageWallLeft-Cav': tilt=90 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 29 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 29 @@ -1887,7 +1887,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 30 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 30 @@ -1950,7 +1950,7 @@ Wed 10-Jul hr=0 subhr=4 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 31 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 31 @@ -2000,7 +2000,7 @@ Z1 CZ: anMCp/T[ 0]=57.60/4062.1 anMCp/T[ 1]=180.10/12700.8 ventUt=1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=68.26 airX=0.000 dryAirMass=243.06 XLGain=0.00 W=0.004513 twb=48.81 rh=0.2536 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=68605.05 Dair=1024.95 Nrad=87607.99 Drad=1190.03 CX=321.04 airX=0.000 + Nair=68605.06 Dair=1024.95 Nrad=87607.99 Drad=1190.03 CX=321.04 airX=0.000 ta=68.26 tr=72.48 qIzSh=0 fvent=1.000 pz0=0.0000 qsHvac=0 @@ -2013,7 +2013,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.242 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=60.24/4226.6 anMCp/T[ 1]=188.53/13226.9 ventUt=1 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 32 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 32 @@ -2076,7 +2076,7 @@ Z1 CZ: anMCp/T[ 0]=66.69/4606.8 anMCp/T[ 1]=209.06/14442.0 ventUt=1 ta=73.65 tr=73.56 qIzSh=-956 fvent=1.000 pz0=-0.0032 qsHvac=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 33 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 33 @@ -2097,7 +2097,7 @@ Wed 10-Jul hr=1 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.355 mwDuctLk=0.000 mwSys=0.000 tdb=73.54 airX=3.544 dryAirMass=248.30 XLGain=0.00 W=0.011799 twb=61.88 rh=0.5470 Z1 CZ: anMCp/T[ 0]=68.36/4697.7 anMCp/T[ 1]=214.36/14730.5 ventUt=1 - Nair=505577.62 Dair=6865.20 Nrad=115375.11 Drad=1571.27 CX=501.56 airX=3.544 + Nair=505577.61 Dair=6865.20 Nrad=115375.11 Drad=1571.27 CX=501.56 airX=3.544 TH=64.92 TD=68.00 TC=74.08 qhCap=20000 qcCap=-34000 ta=73.54 tr=73.45 qIzSh=-1032 fvent=1.000 pz0=-0.0030 qsHvac=0 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -2139,7 +2139,7 @@ Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 34 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 34 @@ -2202,7 +2202,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 35 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 35 @@ -2265,7 +2265,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=3 subhr=2 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 36 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 36 @@ -2328,7 +2328,7 @@ Wed 10-Jul hr=3 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.074 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 37 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 37 @@ -2377,7 +2377,7 @@ Z1 CZ: anMCp/T[ 0]=86.72/5590.2 anMCp/T[ 1]=272.94/17593.6 ventUt=1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=71.88 airX=0.000 dryAirMass=241.41 XLGain=0.00 W=0.004513 twb=50.24 rh=0.2242 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=12871.66 Dair=177.37 Nrad=92099.00 Drad=1294.98 CX=183.60 airX=0.000 + Nair=12871.65 Dair=177.37 Nrad=92099.00 Drad=1294.98 CX=183.60 airX=0.000 ta=71.88 tr=71.21 qIzSh=0 fvent=1.000 pz0=0.0000 qsHvac=0 @@ -2391,7 +2391,7 @@ Z1 CZ: anMCp/T[ 0]=86.48/5561.3 anMCp/T[ 1]=272.20/17505.2 ventUt=1 Nair=499311.37 Dair=7038.50 Nrad=108101.60 Drad=1523.24 CX=526.98 airX=4.476 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 38 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 38 @@ -2454,7 +2454,7 @@ Z1 CZ: anMCp/T[ 0]=85.86/5482.7 anMCp/T[ 1]=270.26/17259.0 ventUt=1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 39 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 39 @@ -2517,7 +2517,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=23586.95 Dair=444.20 Nrad=88805.49 Drad=1253.81 CX=229.40 airX=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 40 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 40 @@ -2551,7 +2551,7 @@ Wed 10-Jul hr=5 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.556 mwDuctLk=0.000 mwSys=0.000 tdb=69.55 airX=4.563 dryAirMass=250.19 XLGain=0.00 W=0.011858 twb=60.74 rh=0.6292 Z1 CZ: anMCp/T[ 0]=88.20/5539.5 anMCp/T[ 1]=278.06/17465.2 ventUt=1 - Nair=490905.14 Dair=7043.41 Nrad=106226.38 Drad=1514.78 CX=524.98 airX=4.563 + Nair=490905.13 Dair=7043.41 Nrad=106226.38 Drad=1514.78 CX=524.98 airX=4.563 TH=64.75 TD=68.00 TC=74.25 qhCap=20000 qcCap=-34000 ta=69.55 tr=69.98 qIzSh=-1873 fvent=1.000 pz0=-0.0061 qsHvac=0 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -2580,7 +2580,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 41 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 41 @@ -2628,7 +2628,7 @@ Wed 10-Jul hr=6 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.304 mwDuctLk=0.000 mwSys=0.000 tdb=69.62 airX=3.347 dryAirMass=250.03 XLGain=0.00 W=0.012227 twb=61.25 rh=0.6469 Z1 CZ: anMCp/T[ 0]=65.05/4241.8 anMCp/T[ 1]=203.83/13291.8 ventUt=1 - Nair=488272.54 Dair=7009.24 Nrad=106796.53 Drad=1517.26 CX=525.57 airX=3.347 + Nair=488272.55 Dair=7009.24 Nrad=106796.53 Drad=1517.26 CX=525.57 airX=3.347 TH=64.71 TD=68.00 TC=74.29 qhCap=20000 qcCap=-34000 ta=69.62 tr=70.19 qIzSh=-898 fvent=1.000 pz0=-0.0038 qsHvac=0 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -2643,7 +2643,7 @@ Wed 10-Jul hr=6 subhr=3 ---------------- ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 42 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 42 @@ -2688,7 +2688,7 @@ Wed 10-Jul hr=6 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.601 mwDuctLk=0.000 mwSys=0.000 tdb=70.14 airX=2.068 dryAirMass=249.65 XLGain=0.00 W=0.012576 twb=61.87 rh=0.6531 Z1 CZ: anMCp/T[ 0]=40.46/2743.7 anMCp/T[ 1]=125.73/8526.9 ventUt=1 - Nair=480965.31 Dair=6858.29 Nrad=109559.25 Drad=1544.22 CX=496.09 airX=2.068 + Nair=480965.31 Dair=6858.29 Nrad=109559.24 Drad=1544.22 CX=496.09 airX=2.068 TH=64.71 TD=68.00 TC=74.29 qhCap=20000 qcCap=-34000 ta=70.14 tr=70.75 qIzSh=-292 fvent=1.000 pz0=-0.0018 qsHvac=0 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -2706,7 +2706,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.047 mwDuctLk=0.000 mwSys=0.000 tdb=70.38 airX=1.276 dryAirMass=249.49 XLGain=0.00 W=0.012605 twb=61.99 rh=0.6493 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 43 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 43 @@ -2769,7 +2769,7 @@ Z1 CZ: anMCp/T[ 0]=41.76/3052.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.67 TD=68.00 TC=74.33 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 44 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 44 @@ -2797,7 +2797,7 @@ Z1 CZ: anMCp/T[ 0]=53.46/3978.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=63.09 airX=0.000 dryAirMass=245.46 XLGain=0.00 W=0.004513 twb=46.68 rh=0.3032 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=62870.51 Dair=1015.75 Nrad=79206.59 Drad=1162.83 CX=305.59 airX=0.000 + Nair=62870.52 Dair=1015.75 Nrad=79206.59 Drad=1162.83 CX=305.59 airX=0.000 ta=63.09 tr=67.07 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 @@ -2814,7 +2814,7 @@ Z1 CZ: anMCp/T[ 0]=63.60/4816.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=63.14 airX=0.000 dryAirMass=245.44 XLGain=0.00 W=0.004513 twb=46.70 rh=0.3027 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=62969.40 Dair=1016.63 Nrad=79273.64 Drad=1162.84 CX=305.77 airX=0.000 + Nair=62969.41 Dair=1016.63 Nrad=79273.64 Drad=1162.84 CX=305.77 airX=0.000 ta=63.14 tr=67.12 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 @@ -2832,7 +2832,7 @@ Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=62.97 airX=0.000 dryAirMass=245.52 XLGain=0.00 W=0.004513 twb=46.63 rh=0.3044 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 45 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 45 @@ -2840,7 +2840,7 @@ Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=62855.49 Dair=1017.65 Nrad=79133.09 Drad=1162.97 CX=306.09 airX=0.000 + Nair=62855.49 Dair=1017.66 Nrad=79133.09 Drad=1162.97 CX=306.09 airX=0.000 ta=62.97 tr=66.99 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 @@ -2868,7 +2868,7 @@ Wed 10-Jul hr=8 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.232 mwDuctLk=0.000 mwSys=0.000 tdb=72.76 airX=1.354 dryAirMass=248.41 XLGain=0.00 W=0.012521 twb=62.60 rh=0.5956 Z1 CZ: anMCp/T[ 0]=81.93/6448.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=478719.87 Dair=6585.32 Nrad=120511.34 Drad=1628.04 CX=427.00 airX=1.354 + Nair=478719.88 Dair=6585.32 Nrad=120511.34 Drad=1628.04 CX=427.00 airX=1.354 TH=64.63 TD=68.00 TC=74.38 qhCap=20000 qcCap=-34000 ta=72.76 tr=73.76 qIzSh=488 fvent=0.000 pz0=0.0054 qsHvac=0 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -2895,7 +2895,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ta=63.12 tr=67.13 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 46 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 46 @@ -2958,7 +2958,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 47 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 47 @@ -3021,7 +3021,7 @@ Wed 10-Jul hr=9 subhr=4 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 48 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 48 @@ -3054,7 +3054,7 @@ Z1 CZ: anMCp/T[ 0]=128.44/11254.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=64.76 airX=0.000 dryAirMass=244.68 XLGain=0.00 W=0.004513 twb=47.38 rh=0.2861 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=64279.42 Dair=1012.31 Nrad=81888.37 Drad=1170.47 CX=309.17 airX=0.000 + Nair=64279.41 Dair=1012.31 Nrad=81888.37 Drad=1170.47 CX=309.17 airX=0.000 ta=64.76 tr=68.87 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 @@ -3065,13 +3065,13 @@ Wed 10-Jul hr=10 subhr=0 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.303 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=2.227 dryAirMass=247.47 XLGain=0.00 W=0.013014 twb=63.78 rh=0.5839 Z1 CZ: anMCp/T[ 0]=134.24/11879.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=557940.83 Dair=7429.23 Nrad=114005.57 Drad=1489.63 CX=639.41 airX=7.027 + Nair=557940.82 Dair=7429.23 Nrad=114005.57 Drad=1489.63 CX=639.41 airX=7.027 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=75.91 qIzSh=1884 fvent=0.000 pz0=0.0122 qsHvac=-5701 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=65.07 airX=0.000 dryAirMass=244.54 XLGain=0.00 W=0.004513 twb=47.52 rh=0.2829 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=64522.22 Dair=1011.23 Nrad=82369.93 Drad=1172.00 CX=309.37 airX=0.000 + Nair=64522.23 Dair=1011.23 Nrad=82369.93 Drad=1172.00 CX=309.37 airX=0.000 ta=65.07 tr=69.19 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 @@ -3084,20 +3084,20 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=7.817 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=139.56/12471.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 49 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 49 1Z Test ------------------------------------------------------------------------------ - Nair=559745.86 Dair=7445.85 Nrad=113920.17 Drad=1487.07 CX=642.34 airX=7.116 + Nair=559745.85 Dair=7445.85 Nrad=113920.17 Drad=1487.07 CX=642.34 airX=7.116 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=75.96 qIzSh=2080 fvent=0.000 pz0=0.0130 qsHvac=-6304 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=65.38 airX=0.000 dryAirMass=244.39 XLGain=0.00 W=0.004513 twb=47.65 rh=0.2797 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=64735.66 Dair=1009.68 Nrad=82878.96 Drad=1173.81 CX=309.89 airX=0.000 + Nair=64735.67 Dair=1009.68 Nrad=82878.96 Drad=1173.81 CX=309.89 airX=0.000 ta=65.38 tr=69.52 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 @@ -3142,12 +3142,12 @@ Wed 10-Jul hr=10 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.410 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=2.570 dryAirMass=247.07 XLGain=0.00 W=0.014308 twb=65.36 rh=0.6406 Z1 CZ: anMCp/T[ 0]=154.64/14222.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=563792.50 Dair=7487.88 Nrad=113827.28 Drad=1482.54 CX=649.61 airX=7.370 + Nair=563792.49 Dair=7487.88 Nrad=113827.28 Drad=1482.54 CX=649.61 airX=7.370 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=76.07 qIzSh=2708 fvent=0.000 pz0=0.0157 qsHvac=-7306 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 50 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 50 @@ -3168,7 +3168,7 @@ Wed 10-Jul hr=10 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=9.953 mwDuctLk=0.000 mwSys=0.000 tdb=74.46 airX=2.649 dryAirMass=246.92 XLGain=0.00 W=0.014709 twb=65.85 rh=0.6581 Z1 CZ: anMCp/T[ 0]=159.33/14792.2 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=565182.30 Dair=7502.14 Nrad=113789.93 Drad=1480.88 CX=652.24 airX=7.449 + Nair=565182.29 Dair=7502.14 Nrad=113789.93 Drad=1480.88 CX=652.24 airX=7.449 TH=64.54 TD=68.00 TC=74.46 qhCap=20000 qcCap=-34000 ta=74.46 tr=76.11 qIzSh=2929 fvent=0.000 pz0=0.0166 qsHvac=-7664 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3210,7 +3210,7 @@ Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 51 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 51 @@ -3228,7 +3228,7 @@ Wed 10-Jul hr=11 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=10.928 mwDuctLk=0.000 mwSys=0.000 tdb=74.50 airX=2.888 dryAirMass=246.59 XLGain=0.00 W=0.015224 twb=66.48 rh=0.6797 Z1 CZ: anMCp/T[ 0]=173.45/16665.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=569486.05 Dair=7542.31 Nrad=113624.36 Drad=1476.31 CX=677.32 airX=7.688 + Nair=569486.05 Dair=7542.31 Nrad=113624.37 Drad=1476.31 CX=677.32 airX=7.688 TH=64.50 TD=68.00 TC=74.50 qhCap=20000 qcCap=-34000 ta=74.50 tr=76.19 qIzSh=3743 fvent=0.000 pz0=0.0186 qsHvac=-8728 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3273,7 +3273,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 52 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 52 @@ -3311,7 +3311,7 @@ Z1 CZ: anMCp/T[ 0]=189.39/18912.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=69.48 airX=0.000 dryAirMass=242.50 XLGain=0.00 W=0.004513 twb=49.29 rh=0.2428 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=65215.35 Dair=957.10 Nrad=89664.04 Drad=1200.51 CX=311.52 airX=0.000 + Nair=65215.35 Dair=957.10 Nrad=89664.05 Drad=1200.51 CX=311.52 airX=0.000 ta=69.48 tr=73.62 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 @@ -3322,7 +3322,7 @@ Wed 10-Jul hr=12 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.639 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=3.183 dryAirMass=246.49 XLGain=0.00 W=0.015061 twb=66.30 rh=0.6717 Z1 CZ: anMCp/T[ 0]=191.13/19189.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=575718.48 Dair=7599.50 Nrad=113497.85 Drad=1469.31 CX=695.12 airX=7.983 + Nair=575718.47 Dair=7599.50 Nrad=113497.85 Drad=1469.31 CX=695.12 airX=7.983 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.38 qIzSh=4942 fvent=0.000 pz0=0.0210 qsHvac=-10515 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3336,7 +3336,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=12 subhr=2 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 53 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 53 @@ -3348,13 +3348,13 @@ Wed 10-Jul hr=12 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.488 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=3.217 dryAirMass=246.59 XLGain=0.00 W=0.014750 twb=65.92 rh=0.6581 Z1 CZ: anMCp/T[ 0]=193.22/19503.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=576527.39 Dair=7607.20 Nrad=113495.97 Drad=1468.46 CX=696.75 airX=8.017 + Nair=576527.39 Dair=7607.20 Nrad=113495.98 Drad=1468.46 CX=696.75 airX=8.017 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.40 qIzSh=5101 fvent=0.000 pz0=0.0213 qsHvac=-10772 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=70.37 airX=0.000 dryAirMass=242.09 XLGain=0.00 W=0.004513 twb=49.64 rh=0.2356 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=63810.48 Dair=924.68 Nrad=91180.48 Drad=1207.85 CX=309.67 airX=0.000 + Nair=63810.47 Dair=924.68 Nrad=91180.48 Drad=1207.85 CX=309.67 airX=0.000 ta=70.37 tr=74.45 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 @@ -3399,7 +3399,7 @@ Wed 10-Jul hr=12 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.026 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 54 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 54 @@ -3408,7 +3408,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.026 mwDuctLk=0.000 mwSys=0.000 tdb=74.54 airX=3.321 dryAirMass=246.97 XLGain=0.00 W=0.013723 twb=64.68 rh=0.6133 Z1 CZ: anMCp/T[ 0]=199.75/20486.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=578543.61 Dair=7624.70 Nrad=113535.51 Drad=1466.63 CX=700.07 airX=8.121 + Nair=578543.60 Dair=7624.70 Nrad=113535.51 Drad=1466.63 CX=700.07 airX=8.121 TH=64.46 TD=68.00 TC=74.54 qhCap=20000 qcCap=-34000 ta=74.54 tr=76.48 qIzSh=5597 fvent=0.000 pz0=0.0220 qsHvac=-11547 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3442,7 +3442,7 @@ Wed 10-Jul hr=13 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=11.852 mwDuctLk=0.000 mwSys=0.000 tdb=74.58 airX=3.418 dryAirMass=247.08 XLGain=0.00 W=0.013901 twb=64.91 rh=0.6202 Z1 CZ: anMCp/T[ 0]=205.73/21346.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=580258.78 Dair=7636.93 Nrad=113565.39 Drad=1465.57 CX=686.00 airX=8.218 + Nair=580258.77 Dair=7636.93 Nrad=113565.39 Drad=1465.57 CX=686.00 airX=8.218 TH=64.42 TD=68.00 TC=74.58 qhCap=20000 qcCap=-34000 ta=74.58 tr=76.56 qIzSh=6002 fvent=0.000 pz0=0.0230 qsHvac=-12029 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3462,7 +3462,7 @@ Z1 CZ: anMCp/T[ 0]=208.28/21735.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=581067.34 Dair=7643.22 Nrad=113639.09 Drad=1465.00 CX=687.16 airX=8.262 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 55 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 55 @@ -3525,7 +3525,7 @@ Z1 CZ: anMCp/T[ 0]=215.33/22859.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 56 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 56 @@ -3562,7 +3562,7 @@ Wed 10-Jul hr=14 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.835 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=3.586 dryAirMass=246.60 XLGain=0.00 W=0.014686 twb=65.87 rh=0.6536 Z1 CZ: anMCp/T[ 0]=215.38/22942.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=585218.88 Dair=7677.99 Nrad=113918.05 Drad=1461.68 CX=706.68 airX=8.386 + Nair=585218.87 Dair=7677.99 Nrad=113918.05 Drad=1461.68 CX=706.68 airX=8.386 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.86 qIzSh=6870 fvent=0.000 pz0=0.0246 qsHvac=-13826 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3588,7 +3588,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=18373.08 Dair=210.04 Nrad=115669.32 Drad=1372.25 CX=194.33 airX=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 57 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 57 @@ -3622,7 +3622,7 @@ Wed 10-Jul hr=14 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.027 mwDuctLk=0.000 mwSys=0.000 tdb=74.63 airX=3.626 dryAirMass=246.95 XLGain=0.00 W=0.013666 twb=64.63 rh=0.6091 Z1 CZ: anMCp/T[ 0]=218.08/23347.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=586682.44 Dair=7691.51 Nrad=114042.71 Drad=1460.60 CX=709.48 airX=8.426 + Nair=586682.43 Dair=7691.51 Nrad=114042.71 Drad=1460.60 CX=709.48 airX=8.426 TH=64.38 TD=68.00 TC=74.63 qhCap=20000 qcCap=-34000 ta=74.63 tr=76.95 qIzSh=7073 fvent=0.000 pz0=0.0249 qsHvac=-14353 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3651,7 +3651,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 58 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 58 @@ -3714,7 +3714,7 @@ Wed 10-Jul hr=15 subhr=3 ---------------- ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 59 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 59 @@ -3759,7 +3759,7 @@ Wed 10-Jul hr=15 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.795 mwDuctLk=0.000 mwSys=0.000 tdb=74.67 airX=3.752 dryAirMass=247.09 XLGain=0.00 W=0.013729 twb=64.72 rh=0.6110 Z1 CZ: anMCp/T[ 0]=225.80/24620.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=590607.03 Dair=7721.83 Nrad=114476.28 Drad=1458.40 CX=699.29 airX=8.552 + Nair=590607.04 Dair=7721.83 Nrad=114476.28 Drad=1458.40 CX=699.29 airX=8.552 TH=64.33 TD=68.00 TC=74.67 qhCap=20000 qcCap=-34000 ta=74.67 tr=77.25 qIzSh=7761 fvent=0.000 pz0=0.0265 qsHvac=-15853 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3777,7 +3777,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.827 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=3.759 dryAirMass=247.03 XLGain=0.00 W=0.013782 twb=64.80 rh=0.6125 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 60 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 60 @@ -3785,7 +3785,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.827 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ Z1 CZ: anMCp/T[ 0]=226.17/24654.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=591009.82 Dair=7724.97 Nrad=114590.88 Drad=1457.98 CX=704.18 airX=8.559 + Nair=591009.82 Dair=7724.97 Nrad=114590.87 Drad=1457.98 CX=704.18 airX=8.559 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.33 qIzSh=7758 fvent=0.000 pz0=0.0266 qsHvac=-15736 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3802,7 +3802,7 @@ Wed 10-Jul hr=16 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.828 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=3.757 dryAirMass=247.01 XLGain=0.00 W=0.013809 twb=64.83 rh=0.6137 Z1 CZ: anMCp/T[ 0]=226.00/24630.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=591456.63 Dair=7727.09 Nrad=114629.59 Drad=1457.97 CX=705.00 airX=8.557 + Nair=591456.64 Dair=7727.09 Nrad=114629.59 Drad=1457.97 CX=705.00 airX=8.557 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.35 qIzSh=7746 fvent=0.000 pz0=0.0266 qsHvac=-16039 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3819,7 +3819,7 @@ Wed 10-Jul hr=16 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.854 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=3.761 dryAirMass=247.00 XLGain=0.00 W=0.013827 twb=64.85 rh=0.6145 Z1 CZ: anMCp/T[ 0]=226.26/24650.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=591652.34 Dair=7729.19 Nrad=114641.76 Drad=1457.77 CX=705.53 airX=8.561 + Nair=591652.35 Dair=7729.19 Nrad=114641.76 Drad=1457.77 CX=705.53 airX=8.561 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.36 qIzSh=7747 fvent=0.000 pz0=0.0267 qsHvac=-16088 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3840,7 +3840,7 @@ Z1 CZ: anMCp/T[ 0]=225.43/24553.8 anMCp/T[ 1]=0.00/0.0 ventUt=-1 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 61 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 61 @@ -3879,7 +3879,7 @@ Wed 10-Jul hr=16 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.842 mwDuctLk=0.000 mwSys=0.000 tdb=74.71 airX=3.748 dryAirMass=246.98 XLGain=0.00 W=0.013866 twb=64.90 rh=0.6161 Z1 CZ: anMCp/T[ 0]=225.48/24545.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=591655.32 Dair=7730.62 Nrad=114537.86 Drad=1457.30 CX=706.13 airX=8.548 + Nair=591655.33 Dair=7730.62 Nrad=114537.86 Drad=1457.30 CX=706.13 airX=8.548 TH=64.29 TD=68.00 TC=74.71 qhCap=20000 qcCap=-34000 ta=74.71 tr=77.33 qIzSh=7700 fvent=0.000 pz0=0.0271 qsHvac=-15963 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3896,14 +3896,14 @@ Wed 10-Jul hr=17 subhr=0 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.913 mwDuctLk=0.000 mwSys=0.000 tdb=74.75 airX=3.746 dryAirMass=246.95 XLGain=0.00 W=0.013925 twb=64.98 rh=0.6179 Z1 CZ: anMCp/T[ 0]=225.31/24493.0 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=591490.63 Dair=7730.17 Nrad=114444.44 Drad=1457.25 CX=707.33 airX=8.546 + Nair=591490.63 Dair=7730.17 Nrad=114444.43 Drad=1457.25 CX=707.33 airX=8.546 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=77.30 qIzSh=7651 fvent=0.000 pz0=0.0274 qsHvac=-15462 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=81.37 airX=0.000 dryAirMass=237.17 XLGain=0.00 W=0.004513 twb=53.81 rh=0.1634 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 62 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 62 @@ -3922,7 +3922,7 @@ Wed 10-Jul hr=17 subhr=1 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.971 mwDuctLk=0.000 mwSys=0.000 tdb=74.75 airX=3.739 dryAirMass=246.93 XLGain=0.00 W=0.014001 twb=65.07 rh=0.6212 Z1 CZ: anMCp/T[ 0]=224.90/24415.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=591535.32 Dair=7728.71 Nrad=114401.10 Drad=1457.25 CX=707.02 airX=8.539 + Nair=591535.33 Dair=7728.71 Nrad=114401.10 Drad=1457.25 CX=707.02 airX=8.539 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=77.28 qIzSh=7604 fvent=0.000 pz0=0.0276 qsHvac=-15602 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3939,7 +3939,7 @@ Wed 10-Jul hr=17 subhr=2 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=13.038 mwDuctLk=0.000 mwSys=0.000 tdb=74.75 airX=3.736 dryAirMass=246.90 XLGain=0.00 W=0.014084 twb=65.17 rh=0.6248 Z1 CZ: anMCp/T[ 0]=224.68/24357.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=591388.66 Dair=7727.48 Nrad=114394.39 Drad=1457.36 CX=706.68 airX=8.536 + Nair=591388.67 Dair=7727.48 Nrad=114394.39 Drad=1457.36 CX=706.68 airX=8.536 TH=64.25 TD=68.00 TC=74.75 qhCap=20000 qcCap=-34000 ta=74.75 tr=77.27 qIzSh=7563 fvent=0.000 pz0=0.0279 qsHvac=-15541 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -3962,11 +3962,11 @@ Z1 CZ: anMCp/T[ 0]=224.46/24300.5 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 tdb=85.25 airX=0.000 dryAirMass=235.48 XLGain=0.00 W=0.004513 twb=55.22 rh=0.1442 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 - Nair=78888.85 Dair=932.08 Nrad=111330.95 Drad=1273.91 CX=334.03 airX=0.000 + Nair=78888.84 Dair=932.08 Nrad=111330.95 Drad=1273.91 CX=334.03 airX=0.000 ta=85.25 tr=86.95 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 63 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 63 @@ -4029,7 +4029,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ================ ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 64 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 64 @@ -4092,7 +4092,7 @@ Wed 10-Jul hr=18 subhr=4 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 65 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 65 @@ -4155,7 +4155,7 @@ Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.884 mwDuctLk=0.000 mwSys=0.000 Z1 CZ: anMCp/T[ 0]=213.04/22373.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 66 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 66 @@ -4196,7 +4196,7 @@ Wed 10-Jul hr=19 subhr=3 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=12.200 mwDuctLk=0.000 mwSys=0.000 tdb=74.83 airX=3.432 dryAirMass=246.61 XLGain=0.00 W=0.014524 twb=65.73 rh=0.6421 Z1 CZ: anMCp/T[ 0]=206.16/21341.3 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=583020.55 Dair=7663.44 Nrad=112406.02 Drad=1461.10 CX=702.25 airX=8.232 + Nair=583020.54 Dair=7663.44 Nrad=112406.02 Drad=1461.10 CX=702.25 airX=8.232 TH=64.17 TD=68.00 TC=74.83 qhCap=20000 qcCap=-34000 ta=74.83 tr=76.25 qIzSh=5914 fvent=0.000 pz0=0.0261 qsHvac=-10535 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -4218,7 +4218,7 @@ Z1 CZ: anMCp/T[ 0]=202.69/20830.6 anMCp/T[ 1]=0.00/0.0 ventUt=-1 ta=74.83 tr=76.17 qIzSh=5663 fvent=0.000 pz0=0.0252 qsHvac=-10007 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 67 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 67 @@ -4281,7 +4281,7 @@ Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 68 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 68 @@ -4344,7 +4344,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 69 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 69 @@ -4407,7 +4407,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Wed 10-Jul hr=21 subhr=2 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 70 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 70 @@ -4470,7 +4470,7 @@ Wed 10-Jul hr=21 subhr=5 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=6.527 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 71 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 71 @@ -4533,7 +4533,7 @@ Z1 CZ: anMCp/T[ 0]=115.38/9860.4 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Nair=553767.99 Dair=7353.95 Nrad=113330.93 Drad=1498.36 CX=624.31 airX=6.715 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 72 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 72 @@ -4573,7 +4573,7 @@ Wed 10-Jul hr=22 subhr=4 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=5.387 mwDuctLk=0.000 mwSys=0.000 tdb=74.96 airX=1.779 dryAirMass=247.39 XLGain=0.00 W=0.012417 twb=63.14 rh=0.5485 Z1 CZ: anMCp/T[ 0]=107.19/9018.7 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=551068.16 Dair=7322.71 Nrad=113508.96 Drad=1502.52 CX=618.21 airX=6.579 + Nair=551068.17 Dair=7322.71 Nrad=113508.96 Drad=1502.52 CX=618.21 airX=6.579 TH=64.04 TD=68.00 TC=74.96 qhCap=20000 qcCap=-34000 ta=74.96 tr=75.37 qIzSh=984 fvent=0.000 pz0=0.0114 qsHvac=-2428 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -4596,7 +4596,7 @@ Z1 CZ: anMCp/T[ 0]=102.88/8588.1 anMCp/T[ 1]=0.00/0.0 ventUt=-1 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 73 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 73 @@ -4616,7 +4616,7 @@ Wed 10-Jul hr=23 subhr=0 Z1 W: mwIG=0.000 mwInf=0.000 mwAN=4.903 mwDuctLk=0.000 mwSys=0.000 tdb=75.00 airX=1.631 dryAirMass=247.43 XLGain=0.00 W=0.012293 twb=62.99 rh=0.5424 Z1 CZ: anMCp/T[ 0]=98.32/8148.9 anMCp/T[ 1]=0.00/0.0 ventUt=-1 - Nair=548501.36 Dair=7292.78 Nrad=113667.66 Drad=1506.32 CX=606.36 airX=6.431 + Nair=548501.37 Dair=7292.78 Nrad=113667.66 Drad=1506.32 CX=606.36 airX=6.431 TH=64.00 TD=68.00 TC=75.00 qhCap=20000 qcCap=-34000 ta=75.00 tr=75.33 qIzSh=775 fvent=0.000 pz0=0.0100 qsHvac=-1742 Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 @@ -4659,7 +4659,7 @@ Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=12187.81 Dair=146.83 Nrad=110435.04 Drad=1365.33 CX=180.72 airX=0.000 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 74 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 74 @@ -4718,11 +4718,11 @@ Garage W: mwIG=0.000 mwInf=0.000 mwAN=0.000 mwDuctLk=0.000 mwSys=0.000 Garage UZ: anMCp/T[ 0]=0.00/0.0 anMCp/T[ 1]=0.00/0.0 ventUt=0 Nair=12192.12 Dair=147.98 Nrad=109260.20 Drad=1361.41 CX=180.33 airX=0.000 ta=81.28 tr=80.38 qIzSh=0 fvent=0.000 pz0=0.0000 qsHvac=0 -! CSE 0.893.0 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 75 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 75 @@ -4785,7 +4785,7 @@ Input for Run 001: DELETE HOLIDAY "M L King Day" ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 76 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 76 @@ -4848,7 +4848,7 @@ Input for Run 001: MATERIAL "m-Insul-R7.5-D1.5-SH0.35-C0.01111" ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 77 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 77 @@ -4911,7 +4911,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 78 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 78 @@ -4974,7 +4974,7 @@ Input for Run 001: matSpHt = 0.39 // Specific heat of material, Btu/lb-°F ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 79 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 79 @@ -5037,7 +5037,7 @@ Input for Run 001: CONSTRUCTION sunwall ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 80 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 80 @@ -5100,7 +5100,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 81 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 81 @@ -5163,7 +5163,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 82 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 82 @@ -5226,7 +5226,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 83 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 83 @@ -5289,7 +5289,7 @@ Input for Run 001: lrMat = "m-Carpet" // Layer material ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 84 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 84 @@ -5352,7 +5352,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 85 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 85 @@ -5415,7 +5415,7 @@ Input for Run 001: lrMat = "m-Gypsum Board" // Layer material ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 86 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 86 @@ -5478,7 +5478,7 @@ Input for Run 001: lrMat = "m-3 Coat Stucco" // Layer material ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 87 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 87 @@ -5541,7 +5541,7 @@ Input for Run 001: lrMat = "m-TileGap" // Layer material ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 88 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 88 @@ -5604,7 +5604,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 89 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 89 @@ -5667,7 +5667,7 @@ Input for Run 001: LAYER "lyr-AtticTruss" ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 90 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 90 @@ -5730,7 +5730,7 @@ Input for Run 001: lrThk = 0.041667 // Thickness (feet), ft ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 91 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 91 @@ -5793,7 +5793,7 @@ Input for Run 001: # #define FLOORCON lw_floor ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 92 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 92 @@ -5856,7 +5856,7 @@ Input for Run 001: sfInAbs=INABSORP ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 93 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 93 @@ -5919,7 +5919,7 @@ Input for Run 001: wnGT=GLASSTYPE ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 94 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 94 @@ -5982,7 +5982,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 95 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 95 @@ -6045,7 +6045,7 @@ Input for Run 001: sfArea = 40 // Wall area, ft2 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 96 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 96 @@ -6108,7 +6108,7 @@ Input for Run 001: sfArea = 148.5 // Wall area, ft2 ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 97 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 97 @@ -6171,7 +6171,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 98 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 98 @@ -6234,7 +6234,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 99 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 99 @@ -6297,7 +6297,7 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 100 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 100 @@ -6306,21 +6306,21 @@ Input for Run 001: -! CSE 0.893.0 for Win32 console run(s) done: Tue 22-Jun-21 11:17:28 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 9:53:19 am -! Executable: d:\cse\msvc\cse.exe -! 22-Jun-21 10:50 am (VS 14.29 2640384 bytes) (HPWH 1.14.0+master.7e0a1c1.4) -! Command line: -x! -t1 dhw_zone -! Input file: D:\cse\test\dhw_zone.cse -! Report file: D:\cse\test\dhw_zone.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 27-Oct-21 9:48 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 dhw_zone +! Input file: C:\Users\nkruis\projects\cse\test\dhw_zone.cse +! Report file: C:\Users\nkruis\projects\cse\test\dhw_zone.rep ! Timing info -- -! Input: Time = 0.05 Calls = 1 T/C = 0.0510 +! Input: Time = 0.11 Calls = 1 T/C = 0.1130 ! AutoSizing: Time = 0.00 Calls = 0 T/C = 0.0000 -! Simulation: Time = 1.08 Calls = 1 T/C = 1.0820 -! Reports: Time = 0.02 Calls = 1 T/C = 0.0200 -! Total: Time = 1.16 Calls = 1 T/C = 1.1570 +! Simulation: Time = 1.93 Calls = 1 T/C = 1.9280 +! Reports: Time = 0.03 Calls = 1 T/C = 0.0260 +! Total: Time = 2.07 Calls = 1 T/C = 2.0690 @@ -6360,5 +6360,5 @@ Input for Run 001: ------------------------------------------------------------------------------ -! dhw_zone 001 Tue 22-Jun-21 11:17:27 am Page 101 +! dhw_zone 001 Wed 27-Oct-21 9:53:17 am Page 101 \ No newline at end of file diff --git a/test/ref/bgtest.rep b/test/ref/bgtest.rep index 261950dc5..00bf79c51 100644 --- a/test/ref/bgtest.rep +++ b/test/ref/bgtest.rep @@ -7,7 +7,7 @@ Warning: Zone 'House': Condensation occurred in 82683 subhours of run. Total condensation heat = 2205.44 kBtu. --------------- Warning: Zone 'Attic': Condensation occurred in 58476 subhours of run. - Total condensation heat = 546.102 kBtu. + Total condensation heat = 546.101 kBtu. --------------- @@ -320,7 +320,7 @@ Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ Jan 3094.7 0 905.75 519.44 0 0 0 0 221.09 0 0 0 0 360.24 760.81 33.833 193.92 43.463 0 56.157 0 0 0 0 0 Feb 2158.8 0 416.38 406.18 0 0 0 0 102.11 0 0 0 0 303.51 640.99 30.559 175.16 36.618 0 47.313 0 0 0 0 0 -Mar 1777.0 0 225.95 221.38 0 0 0 0.229 56.638 0 0 0 0 308.63 651.41 33.833 193.66 37.214 0 48.082 0 0 0 0 0 +Mar 1777.0 0 225.95 221.38 0 0 0 0.229 56.639 0 0 0 0 308.63 651.41 33.833 193.66 37.214 0 48.082 0 0 0 0 0 Apr 1382.4 0 79.972 138.39 0 0 0 1.269 19.142 0 0 0 0 272.45 575.41 32.742 187.67 32.871 0 42.472 0 0 0 0 0 May 1126.7 0 1.367 4.975 0 0 0 30.600 0.343 0 0 0 0 254.29 537.05 33.833 193.92 30.680 0 39.640 0 0 0 0 0 Jun 1122.4 28.610 0 0 0 0 0 79.196 0 0 0 0 0 234.37 494.97 32.742 187.67 28.277 0 36.535 0 0 0 0 0 @@ -457,7 +457,7 @@ Energy (kBtu + into the zone, except E = Energy Consumed) for Fri 10-Jul ! Log for Run 001: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -1747,18 +1747,18 @@ Input for Run 001: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console run(s) done: Fri 27-Aug-21 11:13:13 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 9:52:38 am -! Executable: d:\cse\msvc\cse.exe -! 27-Aug-21 11:04 am (VS 14.29 2701824 bytes) (HPWH 1.15.0+master.d18737e.3) -! Command line: -x! -t1 bgtest -! Input file: D:\cse\test\bgtest.cse -! Report file: D:\cse\test\bgtest.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 27-Oct-21 9:48 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 bgtest +! Input file: C:\Users\nkruis\projects\cse\test\bgtest.cse +! Report file: C:\Users\nkruis\projects\cse\test\bgtest.rep ! Timing info -- -! Input: Time = 0.05 Calls = 1 T/C = 0.0480 +! Input: Time = 0.09 Calls = 1 T/C = 0.0850 ! AutoSizing: Time = 0.00 Calls = 0 T/C = 0.0000 -! Simulation: Time = 7.11 Calls = 1 T/C = 7.1090 -! Reports: Time = 0.01 Calls = 1 T/C = 0.0120 -! Total: Time = 7.17 Calls = 1 T/C = 7.1730 +! Simulation: Time = 11.04 Calls = 1 T/C = 11.0360 +! Reports: Time = 0.01 Calls = 1 T/C = 0.0140 +! Total: Time = 11.14 Calls = 1 T/C = 11.1360 diff --git a/test/ref/oavtest2.rep b/test/ref/oavtest2.rep index e68f65568..3a1f0f56a 100644 --- a/test/ref/oavtest2.rep +++ b/test/ref/oavtest2.rep @@ -60,7 +60,7 @@ Oct 1343.6 0 0.407 0.203 0 0 0 17.593 0.0911 0 0 Nov 2049.9 0 306.29 295.27 0 0 0 0 75.109 0 0 0 0 340.00 718.52 32.742 187.93 41.047 0 53.036 0 0 0 0 0 Dec 3286.0 0 831.78 784.51 0 0 0 0 200.73 0 0 0 0 366.30 773.60 33.833 193.92 44.194 0 57.101 0 0 0 0 0 -Yr 22275 491.45 2952.7 2782.5 0 0 0 558.64 726.71 0 0 0 0 3565.4 7530.1 398.36 2283.3 430.17 0 555.81 0 0 0 0 0 +Yr 22275 491.45 2952.8 2782.5 0 0 0 558.64 726.71 0 0 0 0 3565.4 7530.1 398.36 2283.3 430.17 0 555.81 0 0 0 0 0 @@ -186,7 +186,7 @@ Energy (kBtu + into the zone, except E = Energy Consumed) for Fri 10-Jul ! Log for Run 001: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console @@ -1492,18 +1492,18 @@ Input for Run 001: -! CSE 0.897.0+vsashp.2197d7a.4 for Win32 console run(s) done: Fri 27-Aug-21 11:11:40 am +! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 9:52:27 am -! Executable: d:\cse\msvc\cse.exe -! 27-Aug-21 11:04 am (VS 14.29 2701824 bytes) (HPWH 1.15.0+master.d18737e.3) -! Command line: -x! -t1 oavtest2 -! Input file: D:\cse\test\oavtest2.cse -! Report file: D:\cse\test\oavtest2.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 27-Oct-21 9:48 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +! Command line: -x! -b -t1 oavtest2 +! Input file: C:\Users\nkruis\projects\cse\test\oavtest2.cse +! Report file: C:\Users\nkruis\projects\cse\test\oavtest2.rep ! Timing info -- -! Input: Time = 0.05 Calls = 1 T/C = 0.0480 +! Input: Time = 0.12 Calls = 1 T/C = 0.1220 ! AutoSizing: Time = 0.00 Calls = 0 T/C = 0.0000 -! Simulation: Time = 11.06 Calls = 1 T/C = 11.0650 -! Reports: Time = 0.01 Calls = 1 T/C = 0.0060 -! Total: Time = 11.12 Calls = 1 T/C = 11.1230 +! Simulation: Time = 16.29 Calls = 1 T/C = 16.2910 +! Reports: Time = 0.01 Calls = 1 T/C = 0.0120 +! Total: Time = 16.43 Calls = 1 T/C = 16.4280 From 41c5858dc52e850b5f52216f572248ab6bc9a8e9 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 23 Nov 2021 17:22:06 -0700 Subject: [PATCH 22/25] Use iterative searches with 205 representations. --- .github/workflows/build-and-test.yml | 9 +++++++-- src/CNLOADS.CPP | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 9fcb9cfb2..5d8d3e105 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -2,8 +2,6 @@ name: Build and Test on: push -env: - CI_GIT_BRANCH: ${GITHUB_REF#refs/heads/} jobs: build-cse: name: Build CSE executable @@ -16,6 +14,13 @@ jobs: uses: actions/checkout@v1 with: submodules: recursive + - name: Get branch name + uses: tj-actions/branch-names@v5 + id: branch-name + + - name: Save branch name + run: | + echo "CI_GIT_BRANCH=${{steps.branch-name.outputs.current_branch}}" >> $GITHUB_ENV - name: Setup python 3.8 uses: actions/setup-python@v2 with: diff --git a/src/CNLOADS.CPP b/src/CNLOADS.CPP index 4f08d190d..ef7d56dad 100644 --- a/src/CNLOADS.CPP +++ b/src/CNLOADS.CPP @@ -3235,7 +3235,7 @@ x printf("\nhit"); rhIn, tdbInK, MFRIPtoSI(rs_amf/ rs_205flowScaleF), - 1.0 + (double(rs_speedF) - rs_speedFMin)/(1.0 - rs_speedFMin)*(double(maxSpeed) - 1.0), + double(1.f + (rs_speedF - rs_speedFMin)/(1.f - rs_speedFMin)*(maxSpeed - 1.f)), pAtm } ); @@ -4999,7 +4999,7 @@ RC RSYS::rs_AllocateZoneAir() ZNR* zp; if (!bAux) { // aux not available or not needed - if (rs_IsVC() && fSize == 1. && !rs_IsAutoSizing() /* && rs_mode == rsmHEAT */) + if ((rs_IsVC() || rs_pRep205) && fSize == 1. && !rs_IsAutoSizing() /* && rs_mode == rsmHEAT */) // variable capacity with excess capacity { rc |= rs_AllocateZoneAirVC(); From 07d193f079c8d2148201f324c3702b5e8c6f1697 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Wed, 24 Nov 2021 08:35:49 -0700 Subject: [PATCH 23/25] Update reference results. --- .github/workflows/build-and-test.yml | 1 - build.bat | 6 + test/ref/205TEST.REP | 242 +++++++++++++-------------- 3 files changed, 127 insertions(+), 122 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 5d8d3e105..d1ecc3a06 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -17,7 +17,6 @@ jobs: - name: Get branch name uses: tj-actions/branch-names@v5 id: branch-name - - name: Save branch name run: | echo "CI_GIT_BRANCH=${{steps.branch-name.outputs.current_branch}}" >> $GITHUB_ENV diff --git a/build.bat b/build.bat index 509bd9238..316098d9f 100644 --- a/build.bat +++ b/build.bat @@ -1,6 +1,12 @@ @echo off cmake -P cmake/configure.cmake +IF %ERRORLEVEL% NEQ 0 ( + exit %ERRORLEVEL% +) cmake -P cmake/build.cmake +IF %ERRORLEVEL% NEQ 0 ( + exit %ERRORLEVEL% +) IF "%1"=="" ( PAUSE ) diff --git a/test/ref/205TEST.REP b/test/ref/205TEST.REP index ee19f6c65..299c7a6a0 100644 --- a/test/ref/205TEST.REP +++ b/test/ref/205TEST.REP @@ -3,12 +3,12 @@ Error Messages for Run 001: --------------- -Warning: Zone 'Conditioned-zn': Unmet heating loads during 153 hours of run. +Warning: Zone 'Conditioned-zn': Unmet heating loads during 156 hours of run. --------------- -Warning: Zone 'Conditioned-zn': Unmet cooling loads during 70 hours of run. +Warning: Zone 'Conditioned-zn': Unmet cooling loads during 64 hours of run. --------------- -Warning: Zone 'Attic-atc': Condensation occurred in 5204 subhours of run. - Total condensation heat = 29.3269 kBtu. +Warning: Zone 'Attic-atc': Condensation occurred in 3895 subhours of run. + Total condensation heat = 21.1476 kBtu. --------------- @@ -25,20 +25,20 @@ Monthly Energy (kBtu + into the zone, except E = Energy Consumed) mo Tatt Tin Trad Slr IntGs IntGl Cond Surf VntHr sInfVnt Hload Cload FfanE ClgE HtgE -- ---- ---- ---- ---------- ---------- ---------- ---------- ---------- ----- ------- ---------- ---------- ------ ------ -------- - 1 53.3 67.3 66.8 856 1912 514 -2007 -3566 0 -1159 3936 0 195 0 5778 - 2 56.9 67.4 66.9 1406 1623 433 -1697 -2915 0 -829 2394 0 119 0 3534 - 3 64.1 68.2 67.9 1757 1665 440 -1475 -2742 13 -599 1384 0 69 0 2016 - 4 68.5 68.8 68.6 1953 1487 389 -1471 -2206 57 -657 886 0 47 0 1303 - 5 79.0 71.3 71.2 2006 1407 363 -899 -1573 289 -959 67 -97 26 57 99 - 6 85.9 74.8 74.8 2093 1306 335 -667 -883 419 -1526 0 -534 62 333 0 - 7 88.3 76.7 76.8 2128 1378 354 -574 -574 390 -1278 0 -1627 150 1035 0 - 8 85.8 76.4 76.4 2093 1465 380 -701 -499 425 -1485 0 -1338 126 838 0 - 9 81.7 76.0 76.1 1993 1557 410 -800 -501 429 -1480 0 -1122 105 711 0 - 10 69.5 70.5 70.5 1842 1739 462 -1134 -626 471 -1865 43 0 25 0 65 - 11 56.0 67.7 67.4 1191 1811 486 -1721 -2146 0 -901 1752 0 88 0 2597 - 12 52.4 67.3 66.8 924 1941 523 -2062 -3332 0 -1221 3723 0 186 0 5508 + 1 54.7 67.3 66.7 853 1912 514 -1996 -3492 0 -1110 3810 0 218 0 6440 + 2 57.7 67.3 66.9 1403 1623 433 -1691 -2878 0 -805 2333 0 131 0 3889 + 3 64.5 68.2 67.9 1756 1665 440 -1472 -2719 13 -584 1345 0 77 0 2247 + 4 68.8 68.8 68.6 1952 1487 389 -1468 -2192 57 -648 863 0 52 0 1449 + 5 79.0 71.3 71.2 2006 1407 363 -899 -1573 289 -958 66 -100 26 62 110 + 6 85.7 74.8 74.8 2093 1306 335 -666 -886 419 -1528 0 -535 61 353 0 + 7 88.0 76.7 76.7 2128 1378 354 -573 -582 390 -1283 0 -1628 146 1069 0 + 8 85.6 76.4 76.4 2093 1465 380 -700 -507 426 -1489 0 -1330 122 868 0 + 9 81.5 76.0 76.1 1993 1557 410 -799 -508 430 -1485 0 -1107 101 734 0 + 10 69.5 70.5 70.5 1842 1739 462 -1134 -625 471 -1864 42 0 26 0 73 + 11 56.6 67.7 67.4 1189 1811 486 -1716 -2113 0 -880 1698 0 98 0 2885 + 12 53.7 67.3 66.8 921 1941 523 -2050 -3265 0 -1178 3611 0 207 0 6123 - Yr 70.1 71.0 70.9 20242 19292 5090 -15208 -21562 2492 -13960 14184 -4717 1199 2975 20901 + Yr 70.5 71.0 70.8 20230 19292 5090 -15163 -21341 2494 -13813 13768 -4700 1265 3087 23216 @@ -46,20 +46,20 @@ Monthly Energy Use, meter "MtrElec" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 1777.7 0 0 0 0 0 0 0 195.37 32.376 0 101.55 0 360.24 760.81 33.833 193.92 43.463 0 56.157 0 0 0 0 0 -Feb 1474.6 0 0 0 0 0 0 0 119.49 29.243 0 91.718 0 303.51 640.99 30.559 175.16 36.618 0 47.313 0 0 0 0 0 -Mar 1475.3 0 0 0 0 0 0 0.569 68.152 32.332 0 101.41 0 308.63 651.41 33.833 193.66 37.214 0 48.082 0 0 0 0 0 -Apr 1320.3 0 0 0 0 0 0 3.038 44.059 31.331 0 98.270 0 272.45 575.41 32.742 187.67 32.871 0 42.472 0 0 0 0 0 -May 1306.3 57.419 0 0 0 0 0 22.209 3.341 32.376 0 101.55 0 254.29 537.05 33.833 193.92 30.680 0 39.640 0 0 0 0 0 -Jun 1540.0 333.39 0 0 0 0 0 62.401 0 31.331 0 98.270 0 234.37 494.97 32.742 187.67 28.277 0 36.535 0 0 0 0 0 -Jul 2387.3 1034.8 0 0 0 0 0 149.64 0 32.376 0 101.55 0 248.23 524.26 33.833 193.92 29.950 0 38.697 0 0 0 0 0 -Aug 2228.2 838.08 0 0 0 0 0 125.75 0 32.376 0 101.55 0 266.40 562.62 33.833 193.92 32.141 0 41.528 0 0 0 0 0 -Sep 2139.4 711.14 0 0 0 0 0 105.46 0 31.331 0 98.270 0 287.10 606.34 32.742 187.67 34.639 0 44.755 0 0 0 0 0 -Oct 1484.6 0 0 0 0 0 0 23.181 2.195 32.376 0 101.55 0 323.91 684.09 33.833 193.92 39.081 0 50.494 0 0 0 0 0 -Nov 1590.9 0 0 0 0 0 0 0 87.813 31.375 0 98.406 0 340.00 718.52 32.742 187.93 41.047 0 53.036 0 0 0 0 0 -Dec 1789.1 0 0 0 0 0 0 0 186.23 32.376 0 101.55 0 366.30 773.60 33.833 193.92 44.194 0 57.101 0 0 0 0 0 +Jan 1800.1 0 0 0 0 0 0 0 217.75 32.376 0 101.55 0 360.24 760.81 33.833 193.92 43.463 0 56.157 0 0 0 0 0 +Feb 1486.6 0 0 0 0 0 0 0 131.48 29.243 0 91.718 0 303.51 640.99 30.559 175.16 36.618 0 47.313 0 0 0 0 0 +Mar 1483.1 0 0 0 0 0 0 0.568 75.988 32.332 0 101.41 0 308.63 651.41 33.833 193.66 37.214 0 48.082 0 0 0 0 0 +Apr 1325.2 0 0 0 0 0 0 3.036 48.976 31.331 0 98.270 0 272.45 575.41 32.742 187.67 32.871 0 42.472 0 0 0 0 0 +May 1311.8 62.450 0 0 0 0 0 22.322 3.711 32.376 0 101.55 0 254.29 537.05 33.833 193.92 30.680 0 39.640 0 0 0 0 0 +Jun 1558.6 352.91 0 0 0 0 0 61.499 0 31.331 0 98.270 0 234.37 494.97 32.742 187.67 28.277 0 36.535 0 0 0 0 0 +Jul 2418.5 1069.4 0 0 0 0 0 146.25 0 32.376 0 101.55 0 248.23 524.26 33.833 193.92 29.950 0 38.697 0 0 0 0 0 +Aug 2254.9 868.33 0 0 0 0 0 122.23 0 32.376 0 101.55 0 266.40 562.62 33.833 193.92 32.141 0 41.528 0 0 0 0 0 +Sep 2158.5 734.16 0 0 0 0 0 101.46 0 31.331 0 98.270 0 287.10 606.34 32.742 187.67 34.639 0 44.755 0 0 0 0 0 +Oct 1484.9 0 0 0 0 0 0 23.180 2.480 32.376 0 101.55 0 323.91 684.09 33.833 193.92 39.081 0 50.494 0 0 0 0 0 +Nov 1600.6 0 0 0 0 0 0 0 97.539 31.375 0 98.406 0 340.00 718.52 32.742 187.93 41.047 0 53.036 0 0 0 0 0 +Dec 1809.9 0 0 0 0 0 0 0 207.02 32.376 0 101.55 0 366.30 773.60 33.833 193.92 44.194 0 57.101 0 0 0 0 0 -Yr 20514 2974.8 0 0 0 0 0 492.24 706.65 381.20 0 1195.6 0 3565.4 7530.1 398.36 2283.3 430.17 0 555.81 0 0 0 0 0 +Yr 20693 3087.3 0 0 0 0 0 480.54 784.94 381.20 0 1195.6 0 3565.4 7530.1 398.36 2283.3 430.17 0 555.81 0 0 0 0 0 @@ -67,20 +67,20 @@ Monthly Energy Use, meter "MtrNatGas" Mon Tot Clg Htg HPBU Dhw DhwBU DhwMFL FanC FanH FanV Fan Aux Proc Lit Rcp Ext Refr Dish Dry Wash Cook User1 User2 BT PV --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -Jan 6309.0 0 5778.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343.63 0 186.96 0 0 0 0 -Feb 3981.3 0 3534.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 289.51 0 157.52 0 0 0 0 -Mar 2470.0 0 2015.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 294.22 0 160.08 0 0 0 0 -Apr 1704.4 0 1303.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 259.89 0 141.40 0 0 0 0 -May 473.34 0 98.802 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242.56 0 131.97 0 0 0 0 +Jan 6970.9 0 6440.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343.63 0 186.96 0 0 0 0 +Feb 4335.8 0 3888.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 289.51 0 157.52 0 0 0 0 +Mar 2701.8 0 2247.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 294.22 0 160.08 0 0 0 0 +Apr 1849.8 0 1448.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 259.89 0 141.40 0 0 0 0 +May 484.29 0 109.75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242.56 0 131.97 0 0 0 0 Jun 345.20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 223.56 0 121.63 0 0 0 0 Jul 365.62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 236.79 0 128.83 0 0 0 0 Aug 392.37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 254.12 0 138.26 0 0 0 0 Sep 422.87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 273.86 0 149.00 0 0 0 0 -Oct 542.00 0 64.915 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 308.98 0 168.11 0 0 0 0 -Nov 3098.3 0 2597.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 324.53 0 176.57 0 0 0 0 -Dec 6047.6 0 5508.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 349.41 0 190.10 0 0 0 0 +Oct 550.44 0 73.353 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 308.98 0 168.11 0 0 0 0 +Nov 3386.0 0 2884.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 324.53 0 176.57 0 0 0 0 +Dec 6662.6 0 6123.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 349.41 0 190.10 0 0 0 0 -Yr 26152 0 20901 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3401.1 0 1850.4 0 0 0 0 +Yr 28468 0 23216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3401.1 0 1850.4 0 0 0 0 @@ -88,32 +88,32 @@ Energy (kBtu + into the zone, except E = Energy Consumed) for Thu 03-Dec Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Htgs Htgl Htgt RunF FfanE HtgE -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ - 1 41.7 36.1 .0032 46.5 66.7 66.7 .0065 47 54.8 0 -3.64 3.51 2.15 0.60 0.20 -2.02 0.16 0 0 0 0 0 0 - 2 38.8 34.8 .0033 44.6 66.2 66.3 .0064 47 54.4 0 -3.71 3.78 2.04 0.59 0.18 -2.11 0.16 0 0 0 0 0 0 - 3 36.5 33.3 .0033 42.8 65.7 65.9 .0063 47 54.0 0 -3.95 4.30 1.97 0.58 0.17 -2.32 0.17 0 0 0 0 0 0 - 4 32.9 30.9 .0032 40.8 65.3 65.5 .0062 47 53.6 0 -4.23 4.84 1.99 0.58 0.20 -2.60 0.17 0 0 0 0 0 0 - 5 30.9 29.4 .0030 38.8 65.0 65.1 .0060 45 53.2 0 -4.52 2.72 1.98 0.57 0.27 -2.90 0.18 2.7 -0.03 2.7 0.20 0.1 4.2 - 6 30.0 28.8 .0030 36.9 65.0 64.9 .0060 45 53.2 0 -4.71 0.60 2.55 0.85 0.026 -3.11 0.19 4.7 -0.04 4.6 0.26 0.2 7.2 - 7 28.2 27.5 .0029 35.0 65.0 64.8 .0061 46 53.4 0 -4.88 -0.83 3.18 1.12 -0.19 -3.32 0.19 5.8 -0.04 5.8 0.32 0.3 9.1 - 8 28.4 27.7 .0029 35.7 66.0 65.1 .0059 43 53.8 1.74 -5.24 -16.5 2.86 0.86 0.21 -3.54 0.20 20.7 -0.1 20.5 1.00 1.1 32.2 - 9 30.2 29.2 .0031 37.2 67.0 65.9 .0057 40 53.7 5.45 -5.30 -19.5 2.17 0.52 0.41 -3.52 0.20 20.7 -0.1 20.6 1.00 1.1 32.2 - 10 38.3 35.6 .0038 40.8 67.8 66.6 .0055 38 53.6 7.04 -4.80 -19.5 1.78 0.35 0.28 -2.98 0.19 18.4 -0.05 18.4 0.60 1.0 28.4 - 11 41.5 37.4 .0038 45.5 68.0 67.0 .0054 37 53.5 6.74 -4.09 -12.4 1.79 0.36 0.077 -2.37 0.17 10.4 -0.02 10.3 0.39 0.5 15.7 - 12 46.2 40.0 .0038 50.5 68.0 67.2 .0054 37 53.4 6.45 -3.57 -9.80 1.76 0.36 0.043 -1.92 0.17 7.1 -0.02 7.1 0.26 0.4 10.5 - 13 48.4 40.8 .0037 55.2 68.0 67.3 .0054 37 53.4 6.61 -3.19 -8.22 1.68 0.35 0.036 -1.51 0.17 4.6 -0.01 4.6 0.16 0.2 6.7 - 14 51.3 42.5 .0038 59.7 68.0 67.5 .0054 37 53.4 6.93 -2.93 -7.04 1.71 0.36 .0090 -1.17 0.17 2.5 -.008 2.5 .081 0.1 3.5 - 15 53.2 43.1 .0036 61.9 68.0 67.6 .0054 37 53.4 6.76 -2.65 -6.09 1.85 0.42 -.050 -0.94 0.16 1.1 -.004 1.1 .044 0.05 1.5 - 16 54.9 43.8 .0035 62.5 68.0 67.6 .0055 38 53.6 4.60 -2.46 -4.59 2.08 0.52 -0.11 -0.82 0.16 1.2 -.005 1.2 .078 0.06 1.6 - 17 54.1 43.5 .0036 61.3 68.0 67.5 .0056 39 53.9 0.91 -2.47 -2.96 2.55 0.71 -0.25 -0.85 0.16 2.8 -0.01 2.8 0.15 0.1 3.9 - 18 51.4 42.3 .0036 58.9 68.0 67.4 .0059 41 54.3 0 -2.62 -3.46 3.17 0.91 -0.39 -1.05 0.16 4.0 -0.02 3.9 0.20 0.2 5.6 - 19 49.1 41.2 .0037 56.4 68.0 67.4 .0062 43 54.9 0 -2.92 -4.01 3.98 1.08 -0.48 -1.29 0.17 4.2 -0.03 4.2 0.20 0.2 6.0 - 20 42.8 38.2 .0038 53.8 68.0 67.4 .0066 45 55.6 0 -3.39 -4.42 4.63 1.24 -0.55 -1.64 0.17 4.8 -0.04 4.8 0.25 0.2 6.9 - 21 41.9 38.0 .0040 51.2 68.0 67.4 .0069 48 56.2 0 -3.75 -4.79 4.64 1.25 -0.49 -1.96 0.17 5.9 -0.05 5.8 0.28 0.3 8.5 - 22 40.1 37.1 .0040 49.0 68.0 67.3 .0071 49 56.5 0 -3.88 -5.03 4.21 1.12 -0.29 -2.13 0.17 6.8 -0.07 6.8 0.33 0.3 10.1 - 23 42.1 38.5 .0041 47.4 68.0 67.3 .0071 49 56.5 0 -3.86 -5.20 3.34 0.89 -.036 -2.18 0.17 7.9 -0.08 7.8 0.37 0.4 11.7 - 24 41.9 38.3 .0041 45.5 67.4 67.0 .0071 50 56.1 0 -3.60 3.11 2.58 0.66 0.072 -2.09 0.16 0 0 0 0 0 0 + 1 41.7 36.1 .0032 47.3 66.7 66.6 .0066 48 54.9 0 -3.64 3.48 2.15 0.60 0.22 -1.99 0.16 0 0 0 0 0 0 + 2 38.8 34.8 .0033 45.3 66.2 66.3 .0065 47 54.5 0 -3.71 3.76 2.04 0.59 0.20 -2.09 0.16 0 0 0 0 0 0 + 3 36.5 33.3 .0033 43.4 65.7 65.9 .0063 47 54.1 0 -3.95 4.28 1.97 0.58 0.18 -2.30 0.17 0 0 0 0 0 0 + 4 32.9 30.9 .0032 41.3 65.3 65.5 .0062 47 53.6 0 -4.23 4.82 1.99 0.58 0.21 -2.58 0.17 0 0 0 0 0 0 + 5 30.9 29.4 .0030 39.5 65.0 65.1 .0060 46 53.3 0 -4.51 2.61 1.98 0.57 0.27 -2.88 0.18 2.8 -0.02 2.8 0.24 0.2 5.3 + 6 30.0 28.8 .0030 37.9 65.0 64.9 .0060 46 53.3 0 -4.68 0.61 2.55 0.85 0.020 -3.08 0.19 4.6 -0.02 4.6 0.31 0.3 8.7 + 7 28.2 27.5 .0029 36.3 65.0 64.7 .0061 47 53.5 0 -4.84 -0.73 3.18 1.12 -0.20 -3.27 0.19 5.7 -0.03 5.6 0.38 0.4 10.8 + 8 28.4 27.7 .0029 36.7 66.0 65.1 .0060 43 53.9 1.74 -5.23 -16.2 2.86 0.86 0.22 -3.51 0.20 20.4 -0.1 20.2 1.00 1.1 32.2 + 9 30.2 29.2 .0031 38.0 67.0 65.8 .0057 40 53.7 5.45 -5.29 -19.6 2.17 0.52 0.41 -3.50 0.20 20.8 -0.09 20.7 1.00 1.1 32.2 + 10 38.3 35.6 .0038 41.8 67.8 66.6 .0055 38 53.6 7.03 -4.78 -19.1 1.78 0.35 0.28 -2.94 0.18 18.0 -0.04 18.0 0.63 1.0 29.1 + 11 41.5 37.4 .0038 47.1 68.0 66.9 .0055 38 53.5 6.70 -4.03 -11.8 1.79 0.36 0.071 -2.27 0.17 9.6 -0.01 9.6 0.46 0.6 17.8 + 12 46.2 40.0 .0038 52.2 68.0 67.1 .0054 37 53.5 6.43 -3.53 -9.61 1.76 0.36 0.041 -1.83 0.17 6.8 -0.01 6.8 0.31 0.4 12.3 + 13 48.4 40.8 .0037 57.0 68.0 67.3 .0054 37 53.5 6.60 -3.16 -8.22 1.68 0.35 0.038 -1.43 0.16 4.5 -.008 4.5 0.20 0.3 8.1 + 14 51.3 42.5 .0038 61.2 68.0 67.4 .0054 37 53.4 6.92 -2.92 -7.13 1.71 0.36 0.015 -1.10 0.16 2.5 -.005 2.5 0.10 0.1 4.4 + 15 53.2 43.1 .0036 63.2 68.0 67.6 .0054 37 53.5 6.75 -2.64 -6.19 1.85 0.42 -.044 -0.88 0.16 1.1 -.003 1.1 .056 0.06 1.9 + 16 54.9 43.8 .0035 63.6 68.0 67.6 .0055 38 53.6 4.60 -2.45 -4.64 2.08 0.52 -0.10 -0.76 0.16 1.2 -.003 1.2 .094 0.07 2.0 + 17 54.1 43.5 .0036 62.5 68.0 67.5 .0057 39 53.9 0.91 -2.46 -2.90 2.55 0.71 -0.25 -0.79 0.16 2.7 -.009 2.7 0.18 0.2 4.6 + 18 51.4 42.3 .0036 60.1 68.0 67.4 .0059 41 54.4 0 -2.60 -3.32 3.17 0.91 -0.39 -0.99 0.16 3.7 -0.01 3.7 0.23 0.2 6.5 + 19 49.1 41.2 .0037 57.8 68.0 67.4 .0063 43 55.0 0 -2.90 -3.86 3.98 1.08 -0.49 -1.22 0.16 4.0 -0.02 4.0 0.24 0.2 7.0 + 20 42.8 38.2 .0038 55.3 68.0 67.4 .0066 46 55.7 0 -3.37 -4.25 4.63 1.24 -0.56 -1.58 0.16 4.6 -0.02 4.5 0.29 0.3 8.1 + 21 41.9 38.0 .0040 52.8 68.0 67.3 .0070 48 56.3 0 -3.72 -4.57 4.64 1.25 -0.51 -1.89 0.16 5.5 -0.03 5.5 0.32 0.3 9.9 + 22 40.1 37.1 .0040 50.8 68.0 67.3 .0072 49 56.6 0 -3.85 -4.77 4.21 1.12 -0.31 -2.06 0.17 6.5 -0.04 6.4 0.38 0.4 11.7 + 23 42.1 38.5 .0041 49.4 68.0 67.2 .0072 50 56.7 0 -3.82 -4.92 3.34 0.89 -.060 -2.09 0.17 7.5 -0.05 7.4 0.43 0.5 13.7 + 24 41.9 38.3 .0041 46.9 67.4 67.0 .0072 51 56.2 0 -3.60 3.06 2.58 0.66 0.091 -2.04 0.16 0 0 0 0 0 0 - Dy 48.2 67.1 66.7 53.24 -90.4 -111 62.62 16.87 -0.64 -50.3 0.17 136.2 -0.8 135.5 0 6.9 205.5 + Dy 49.5 67.1 66.6 53.12 -89.9 -109 62.62 16.87 -0.65 -49.1 0.17 132.4 -0.6 131.8 0 7.7 226.3 @@ -121,32 +121,32 @@ Energy Balance (F, kBtu, + into the zone) for Tue 30-Jun Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Clgs Clgl Clgt RunF FfanE ClgkE -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ - 1 70.9 63.9 .0111 84.2 77.8 77.6 .0099 49 64.4 0 -1.21 -0.28 1.51 0.40 -0.64 -.020 0.16 0 0 0 0 0.000 0 - 2 68.9 63.1 .0110 81.0 77.6 77.4 .0103 51 64.9 0 -1.44 0.17 1.44 0.39 -0.56 -0.17 0.16 0 0 0 0 0.000 0 - 3 66.7 61.8 .0107 77.9 77.4 77.2 .0106 53 65.2 0 -1.66 0.58 1.39 0.39 -0.46 -0.31 0.16 0 0 0 0 0.000 0 - 4 64.9 61.2 .0107 75.1 77.1 77.0 .0109 55 65.5 0 -1.88 0.91 1.40 0.39 -0.37 -0.44 0.16 0 0 0 0 0.000 0 - 5 64.8 61.1 .0107 72.5 76.9 76.8 .0111 56 65.7 0 -1.98 1.23 1.39 0.38 -0.31 -0.64 0.16 0 0 0 0 0.000 0 - 6 63.0 60.5 .0107 70.1 76.6 76.5 .0114 58 66.1 0 -2.07 1.08 1.77 0.56 -0.43 -0.79 0.16 0 0 0 0 0.000 0 - 7 63.1 60.5 .0107 68.9 75.8 76.2 .0110 58 65.2 2.96 -2.10 6.78 2.19 0.74 0.59 -9.84 2.30 0 0 0 0 0.09 0 - 8 65.3 61.3 .0107 69.8 75.4 75.9 .0109 58 65.1 5.18 -1.89 2.84 1.98 0.57 0.11 -8.11 2.18 0 0 0 0 0.09 0 - 9 68.5 62.5 .0108 73.8 75.5 75.8 .0109 57 65.1 5.93 -1.62 -0.44 1.52 0.34 0.035 -5.40 1.98 0 0 0 0 0.09 0 - 10 73.9 65.4 .0115 81.0 75.8 75.9 .0112 58 65.7 5.91 -1.14 -4.23 1.26 0.23 -0.48 -1.81 1.62 0 0 0 0 0.09 0 - 11 80.6 67.7 .0116 89.3 76.3 76.2 .0115 58 66.2 5.56 -0.38 -6.84 1.27 0.24 -0.36 0.40 0.59 0 0 0 0 0.03 0 - 12 85.6 69.6 .0119 97.6 76.8 76.5 .0116 58 66.5 4.65 0.31 -7.09 1.25 0.24 -0.23 0.89 0.17 0 0 0 0 0 0 - 13 91.2 70.7 .0115 105 77.2 76.9 .0118 58 66.9 4.07 0.94 -7.60 1.20 0.23 -0.21 1.39 0.18 0 0 0 0 0 0 + 1 70.9 63.9 .0111 83.7 77.8 77.5 .0099 49 64.4 0 -1.21 -0.27 1.51 0.40 -0.64 -.031 0.16 0 0 0 0 0.000 0 + 2 68.9 63.1 .0110 80.5 77.6 77.4 .0103 51 64.9 0 -1.44 0.18 1.44 0.39 -0.56 -0.18 0.16 0 0 0 0 0.000 0 + 3 66.7 61.8 .0107 77.6 77.4 77.2 .0106 53 65.2 0 -1.65 0.58 1.39 0.39 -0.46 -0.32 0.16 0 0 0 0 0.000 0 + 4 64.9 61.2 .0107 74.8 77.1 77.0 .0109 55 65.5 0 -1.88 0.91 1.40 0.39 -0.38 -0.44 0.16 0 0 0 0 0.000 0 + 5 64.8 61.1 .0107 72.3 76.9 76.7 .0111 56 65.7 0 -1.98 1.24 1.39 0.38 -0.31 -0.65 0.16 0 0 0 0 0.000 0 + 6 63.0 60.5 .0107 69.9 76.6 76.5 .0114 58 66.1 0 -2.07 1.09 1.77 0.56 -0.43 -0.79 0.16 0 0 0 0 0.000 0 + 7 63.1 60.5 .0107 68.7 75.8 76.2 .0110 58 65.2 2.96 -2.10 6.77 2.19 0.74 0.58 -9.83 2.30 0 0 0 0 0.09 0 + 8 65.3 61.3 .0107 69.6 75.4 75.9 .0109 58 65.0 5.18 -1.88 2.82 1.98 0.57 0.11 -8.10 2.18 0 0 0 0 0.09 0 + 9 68.5 62.5 .0108 73.7 75.5 75.8 .0109 57 65.1 5.93 -1.62 -0.45 1.52 0.34 0.035 -5.39 1.98 0 0 0 0 0.09 0 + 10 73.9 65.4 .0115 80.9 75.8 75.9 .0112 58 65.7 5.91 -1.14 -4.24 1.26 0.23 -0.48 -1.80 1.62 0 0 0 0 0.09 0 + 11 80.6 67.7 .0116 89.2 76.3 76.2 .0115 58 66.2 5.56 -0.38 -6.85 1.27 0.24 -0.36 0.40 0.59 0 0 0 0 0.03 0 + 12 85.6 69.6 .0119 97.6 76.7 76.5 .0116 58 66.5 4.65 0.31 -7.10 1.25 0.24 -0.23 0.89 0.17 0 0 0 0 0 0 + 13 91.2 70.7 .0115 105 77.2 76.9 .0118 58 66.9 4.07 0.94 -7.61 1.20 0.23 -0.21 1.39 0.18 0 0 0 0 0 0 14 92.1 71.0 .0115 112 77.6 77.3 .0119 58 67.2 4.26 1.30 -8.56 1.22 0.24 -0.16 1.78 0.19 0 0 0 0 0 0 - 15 93.4 71.3 .0114 117 78.1 77.8 .0120 57 67.5 4.89 1.37 -9.57 1.31 0.28 -0.16 2.01 0.19 0 0 0 0 0 0 + 15 93.4 71.3 .0114 117 78.1 77.7 .0120 57 67.5 4.89 1.38 -9.58 1.31 0.28 -0.16 2.01 0.19 0 0 0 0 0 0 16 96.3 71.4 .0108 120 78.7 78.3 .0121 57 67.8 5.64 1.59 -10.9 1.46 0.34 -0.14 2.19 0.19 0 0 0 0 0 0 - 17 97.2 69.2 .0090 120 79.0 78.8 .0090 43 63.5 6.10 1.75 -8.52 1.77 0.47 4.44 2.38 0.21 -3.5 -4.8 -8.3 0.57 0.7 4.7 - 18 97.9 69.5 .0090 118 78.9 79.0 .0024 11 52.4 6.49 1.90 -4.54 2.18 0.60 9.73 2.57 0.23 -8.6 -11.4 -20.0 1.00 1.7 10.0 - 19 98.1 69.8 .0092 114 78.6 79.0 .0008 4 49.0 6.10 2.07 1.26 2.72 0.72 2.35 2.48 0.23 -14.6 -5.0 -19.7 1.00 1.7 13.4 - 20 97.9 69.3 .0088 110 78.1 78.8 .0008 4 48.9 4.29 2.05 3.91 3.15 0.82 -.012 2.28 0.23 -15.7 -2.7 -18.4 0.72 1.6 13.6 - 21 96.1 68.8 .0089 107 78.0 78.6 .0011 5 49.5 0.39 1.57 2.69 3.15 0.83 -0.43 1.96 0.22 -9.8 -2.1 -11.9 0.49 1.0 9.1 - 22 89.1 70.0 .0114 102 78.0 78.4 .0014 7 50.1 0 1.05 1.46 2.87 0.74 -0.52 1.51 0.20 -6.9 -1.9 -8.8 0.34 0.7 6.5 - 23 82.4 66.9 .0106 97.8 78.0 78.3 .0019 10 51.2 0 0.35 0.86 2.29 0.59 -0.76 1.02 0.19 -4.5 -1.7 -6.2 0.21 0.5 4.4 - 24 77.5 64.9 .0103 93.5 78.0 78.1 .0025 13 52.3 0 -0.34 0.49 1.79 0.43 -0.88 0.61 0.17 -2.6 -1.3 -3.9 0.11 0.3 2.5 + 17 97.2 69.2 .0090 119 79.0 78.8 .0079 37 61.8 6.11 1.76 -8.74 1.77 0.47 6.07 2.37 0.21 -3.3 -6.6 -9.8 1.00 0.8 5.7 + 18 97.9 69.5 .0090 117 78.9 79.0 .0018 8 51.1 6.49 1.90 -4.04 2.18 0.60 9.00 2.56 0.23 -9.1 -10.9 -20.0 1.00 1.7 10.2 + 19 98.1 69.8 .0092 114 78.4 79.0 .0007 4 48.9 6.10 2.08 2.10 2.72 0.72 1.50 2.47 0.23 -15.5 -4.2 -19.7 1.00 1.7 13.8 + 20 97.9 69.3 .0088 110 78.0 78.8 .0008 4 48.9 4.29 2.05 3.22 3.15 0.82 -0.11 2.25 0.23 -15.0 -2.6 -17.5 1.00 1.5 13.1 + 21 96.1 68.8 .0089 105 78.0 78.5 .0011 6 49.5 0.39 1.57 2.42 3.15 0.83 -0.45 1.89 0.22 -9.4 -2.1 -11.5 0.92 0.9 9.3 + 22 89.1 70.0 .0114 101 78.0 78.4 .0015 7 50.3 0 1.05 1.28 2.87 0.74 -0.58 1.43 0.20 -6.6 -1.9 -8.5 0.61 0.6 6.8 + 23 82.4 66.9 .0106 96.6 78.0 78.3 .0021 10 51.4 0 0.34 0.73 2.29 0.59 -0.84 0.96 0.18 -4.3 -1.6 -5.9 0.37 0.4 4.6 + 24 77.5 64.9 .0103 92.4 78.0 78.1 .0027 14 52.7 0 -0.34 0.41 1.79 0.43 -0.97 0.57 0.17 -2.4 -1.2 -3.6 0.19 0.2 2.6 - Dy 94.1 77.4 77.4 72.41 -1.5 -44.3 43.52 11.15 10.13 -4.1 0.51 -66.1 -31.0 -97.1 0.11 8.6 64.2 + Dy 93.7 77.4 77.4 72.42 -1.4 -44.5 43.52 11.15 9.81 -4.4 0.51 -65.6 -31.0 -96.6 0.19 8.4 66.2 @@ -154,38 +154,38 @@ Energy Balance (F, kBtu, + into the zone) for Fri 10-Jul Hr Tout WBo Wo Tatt Tin Trad Win RHin WBin Slr Cond Surf ItgS ItgL AirL sInfVnt ACH Clgs Clgl Clgt RunF FfanE ClgkE -- ---- ---- ----- ---- ---- ---- ----- --- ---- ------ ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- ---- ------ ------ - 1 74.5 62.4 .0093 92.3 78.0 78.2 .0024 12 52.1 0 -0.72 1.18 1.54 0.41 -0.84 0.48 0.17 -2.5 -1.1 -3.6 .093 0.2 2.4 - 2 70.9 61.4 .0095 88.0 78.0 78.1 .0032 16 53.5 0 -1.33 0.70 1.47 0.40 -1.19 0.14 0.16 -1.0 -0.6 -1.6 .027 0.10 1.0 - 3 68.7 60.4 .0093 83.9 78.0 77.9 .0043 21 55.4 0 -1.61 0.37 1.42 0.40 -1.54 -0.10 0.16 -0.08 -0.07 -0.1 0 0.009 0.08 - 4 65.8 59.6 .0095 80.2 77.9 77.8 .0052 26 57.0 0 -1.87 0.74 1.43 0.40 -1.41 -0.30 0.16 0 0 0 0 0.000 0 - 5 64.8 58.8 .0093 76.6 77.7 77.6 .0060 30 58.3 0 -2.10 1.13 1.42 0.39 -1.21 -0.45 0.16 0 0 0 0 0.000 0 - 6 63.9 58.6 .0093 73.3 77.5 77.4 .0069 34 59.6 0 -2.20 1.07 1.81 0.57 -1.20 -0.68 0.16 0 0 0 0 0.000 0 - 7 62.6 58.6 .0096 70.9 76.7 77.1 .0095 49 63.2 2.50 -2.27 8.06 2.24 0.76 -3.80 -10.5 2.36 0 0 0 0 0.09 0 - 8 67.8 61.4 .0102 70.7 76.2 76.7 .0101 52 64.2 5.11 -1.91 2.78 2.02 0.58 -0.94 -8.00 2.18 0 0 0 0 0.09 0 - 9 75.7 63.3 .0096 74.7 76.6 76.8 .0101 51 64.4 5.98 -1.23 -3.76 1.56 0.35 0.045 -2.55 1.55 0 0 0 0 0.09 0 - 10 81.7 65.6 .0099 82.1 77.2 77.2 .0101 50 64.7 6.01 -0.47 -7.14 1.29 0.24 -0.11 0.31 0.33 0 0 0 0 0.02 0 - 11 87.6 67.4 .0098 90.9 77.7 77.5 .0103 50 65.0 5.66 0.25 -7.81 1.29 0.24 -0.18 0.61 0.16 0 0 0 0 0 0 + 1 74.5 62.4 .0093 91.3 78.0 78.2 .0026 13 52.4 0 -0.72 1.14 1.54 0.41 -0.91 0.44 0.17 -2.4 -1.0 -3.4 0.16 0.2 2.6 + 2 70.9 61.4 .0095 87.2 78.0 78.0 .0034 17 53.9 0 -1.33 0.67 1.47 0.40 -1.24 0.11 0.16 -0.9 -0.5 -1.5 .040 0.08 1.0 + 3 68.7 60.4 .0093 83.3 78.0 77.9 .0045 22 55.8 0 -1.61 0.37 1.42 0.40 -1.53 -0.12 0.16 -0.06 -0.05 -0.1 0 0.006 0.07 + 4 65.8 59.6 .0095 79.6 77.9 77.8 .0054 27 57.3 0 -1.87 0.75 1.43 0.40 -1.38 -0.31 0.16 0 0 0 0 0.000 0 + 5 64.8 58.8 .0093 76.2 77.7 77.6 .0062 31 58.6 0 -2.10 1.14 1.42 0.39 -1.18 -0.46 0.16 0 0 0 0 0.000 0 + 6 63.9 58.6 .0093 73.0 77.5 77.4 .0070 35 59.8 0 -2.20 1.08 1.81 0.57 -1.17 -0.70 0.16 0 0 0 0 0.000 0 + 7 62.6 58.6 .0096 70.6 76.7 77.1 .0095 49 63.3 2.50 -2.27 8.06 2.24 0.76 -3.62 -10.5 2.36 0 0 0 0 0.09 0 + 8 67.8 61.4 .0102 70.5 76.2 76.7 .0101 52 64.2 5.11 -1.91 2.78 2.02 0.58 -0.92 -8.00 2.18 0 0 0 0 0.09 0 + 9 75.7 63.3 .0096 74.5 76.6 76.8 .0101 51 64.4 5.98 -1.22 -3.76 1.56 0.35 0.046 -2.55 1.55 0 0 0 0 0.09 0 + 10 81.7 65.6 .0099 82.0 77.2 77.1 .0101 50 64.7 6.01 -0.47 -7.14 1.29 0.24 -0.11 0.31 0.33 0 0 0 0 0.02 0 + 11 87.6 67.4 .0098 90.8 77.7 77.5 .0103 50 65.0 5.66 0.25 -7.81 1.29 0.24 -0.18 0.61 0.16 0 0 0 0 0 0 12 92.8 71.3 .0116 100 78.2 77.9 .0104 50 65.3 4.86 0.95 -8.24 1.28 0.24 -0.21 1.15 0.18 0 0 0 0 0 0 13 99.3 73.2 .0117 109 78.7 78.3 .0106 50 65.8 4.04 1.68 -8.69 1.23 0.24 -0.32 1.74 0.19 0 0 0 0 0 0 - 14 103 71.8 .0098 117 79.2 78.8 .0108 50 66.3 4.11 2.25 -9.93 1.25 0.24 -0.27 2.32 0.20 0 0 0 0 0 0 + 14 103 71.8 .0098 117 79.2 78.8 .0108 50 66.2 4.11 2.25 -9.93 1.25 0.24 -0.27 2.32 0.20 0 0 0 0 0 0 15 106 74.5 .0112 125 79.9 79.4 .0110 50 66.7 4.93 2.62 -11.7 1.33 0.29 -0.20 2.81 0.21 0 0 0 0 0 0 - 16 107 72.6 .0093 128 80.0 79.9 .0046 21 56.8 5.91 2.94 -7.13 1.49 0.35 9.32 3.49 0.24 -6.7 -10.4 -17.1 1.00 1.7 9.1 - 17 109 73.8 .0099 129 80.2 80.3 .0010 4 50.2 6.32 3.09 -6.28 1.81 0.48 5.25 3.71 0.25 -8.6 -7.8 -16.4 1.00 1.7 10.8 - 18 109 73.8 .0100 128 80.1 80.5 .0007 3 49.7 6.43 3.27 -2.75 2.23 0.62 0.37 3.68 0.25 -12.9 -3.2 -16.1 1.00 1.7 13.2 - 19 108 74.1 .0104 124 80.1 80.6 .0007 3 49.7 5.84 3.31 -1.59 2.78 0.73 -.021 3.38 0.25 -13.7 -2.9 -16.6 1.00 1.7 13.5 - 20 107 74.5 .0110 119 80.1 80.7 .0008 4 49.8 3.74 3.19 1.14 3.22 0.84 -0.13 3.01 0.24 -14.3 -3.1 -17.4 1.00 1.7 13.4 + 16 107 72.6 .0093 128 80.0 79.9 .0045 21 56.7 5.91 2.94 -7.23 1.49 0.35 9.34 3.48 0.24 -6.6 -10.5 -17.1 1.00 1.7 9.1 + 17 109 73.8 .0099 129 80.2 80.3 .0010 4 50.2 6.32 3.09 -6.26 1.81 0.48 5.23 3.70 0.25 -8.7 -7.7 -16.4 1.00 1.7 10.8 + 18 109 73.8 .0100 127 80.1 80.5 .0007 3 49.7 6.43 3.27 -2.74 2.23 0.62 0.37 3.68 0.25 -12.9 -3.2 -16.1 1.00 1.7 13.2 + 19 108 74.1 .0104 124 80.1 80.6 .0007 3 49.7 5.84 3.32 -1.59 2.78 0.73 -.022 3.38 0.25 -13.7 -2.9 -16.6 1.00 1.7 13.5 + 20 107 74.5 .0110 119 80.1 80.6 .0008 4 49.8 3.74 3.20 1.14 3.22 0.84 -0.13 3.01 0.24 -14.3 -3.1 -17.4 1.00 1.7 13.4 21 102 72.4 .0104 113 79.7 80.3 .0008 4 49.6 0.19 2.62 6.70 3.23 0.85 -.006 2.57 0.24 -15.3 -3.3 -18.6 1.00 1.7 13.6 22 94.1 70.4 .0106 107 79.1 79.9 .0007 4 49.1 0 1.78 10.67 2.94 0.76 0.11 2.02 0.23 -17.4 -3.1 -20.5 1.00 1.7 14.4 - 23 87.4 66.9 .0095 102 78.3 79.2 .0008 4 48.8 0 0.89 13.39 2.34 0.60 -.025 1.49 0.21 -18.1 -2.6 -20.7 0.62 1.6 14.4 - 24 83.5 65.3 .0093 96.8 78.0 78.8 .0011 5 49.5 0 0.24 6.52 1.83 0.44 -0.51 0.99 0.19 -9.6 -1.7 -11.3 0.38 0.8 8.3 + 23 87.4 66.9 .0095 101 78.2 79.2 .0008 4 48.9 0 0.90 13.26 2.34 0.60 -.048 1.48 0.21 -18.0 -2.6 -20.6 1.00 1.6 14.3 + 24 83.5 65.3 .0093 96.2 78.0 78.8 .0012 6 49.7 0 0.24 6.31 1.83 0.44 -0.59 0.96 0.19 -9.3 -1.6 -11.0 0.69 0.7 8.5 - Dy 99.2 78.5 78.6 71.62 13.4 -20.5 44.45 11.43 0.98 11.3 0.44 -120 -40.0 -160 0.38 15.2 114.2 + Dy 99.0 78.5 78.6 71.62 13.4 -21.0 44.45 11.43 1.08 11.1 0.44 -120 -39.7 -159 0.69 15.0 114.5 -! Log for Run 001: +Log for Run 001: -! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console +CSE 0.899.0+ashrae205.f438428.26 for Win32 console @@ -1734,18 +1734,18 @@ Input for Run 001: -! CSE 0.899.0+ashrae205.9d2cd31.25 for Win32 console run(s) done: Wed 27-Oct-21 10:18:47 am +CSE 0.899.0+ashrae205.f438428.26 for Win32 console run(s) done: Tue 23-Nov-21 5:03:05 pm -! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe -! 27-Oct-21 10:17 am (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) -! Command line: -x! -b -t1 205test -! Input file: C:\Users\nkruis\projects\cse\test\205test.cse -! Report file: C:\Users\nkruis\projects\cse\test\205test.rep +Executable: c:\users\nkruis\projects\cse\msvc\cse.exe + 23-Nov-21 5:02 pm (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) +Command line: 205test.cse +Input file: C:\Users\nkruis\projects\cse\test\205test.cse +Report file: C:\Users\nkruis\projects\cse\test\205test.rep -! Timing info -- +Timing info -- -! Input: Time = 0.33 Calls = 2 T/C = 0.1645 -! AutoSizing: Time = 5.51 Calls = 1 T/C = 5.5150 -! Simulation: Time = 16.90 Calls = 1 T/C = 16.8980 -! Reports: Time = 0.13 Calls = 1 T/C = 0.1300 -! Total: Time = 22.88 Calls = 1 T/C = 22.8750 + Input: Time = 0.42 Calls = 2 T/C = 0.2080 + AutoSizing: Time = 10.32 Calls = 1 T/C = 10.3210 + Simulation: Time = 27.51 Calls = 1 T/C = 27.5080 + Reports: Time = 0.12 Calls = 1 T/C = 0.1180 + Total: Time = 38.39 Calls = 1 T/C = 38.3890 From 1fd5ab7aff191b643da1c15a40087bf97684d3c6 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Thu, 23 Dec 2021 11:00:48 -0700 Subject: [PATCH 24/25] Move to stand-alone libtk205 dependency. --- .gitmodules | 6 +++--- src/CNGLOB.H | 2 +- src/CNLOADS.CPP | 45 +++++++++++++++++-------------------------- src/CNRECS.DEF | 2 +- test/ref/205TEST.REP | 28 +++++++++++++-------------- vendor/CMakeLists.txt | 6 +++--- vendor/libtk205 | 1 + vendor/toolkit-205 | 1 - 8 files changed, 41 insertions(+), 50 deletions(-) create mode 160000 vendor/libtk205 delete mode 160000 vendor/toolkit-205 diff --git a/.gitmodules b/.gitmodules index bf88b858a..a158e3271 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,9 +7,9 @@ [submodule "vendor/kiva"] path = vendor/kiva url = https://github.com/bigladder/kiva.git -[submodule "vendor/toolkit-205"] - path = vendor/toolkit-205 - url = https://github.com/open205/toolkit-205.git [submodule "vendor/btwxt"] path = vendor/btwxt url = https://github.com/bigladder/btwxt.git +[submodule "vendor/libtk205"] + path = vendor/libtk205 + url = https://github.com/open205/libtk205.git diff --git a/src/CNGLOB.H b/src/CNGLOB.H index 665de7c0b..37894791d 100644 --- a/src/CNGLOB.H +++ b/src/CNGLOB.H @@ -494,7 +494,7 @@ struct RXPORTINFO; namespace Pumbra { class Penumbra; } namespace Kiva { class Instance; class Aggregator; class Foundation; } namespace Btwxt { class RegularGridInterpolator; } -namespace ASHRAE205_NS { namespace RS0002_NS { class RS0002; } } +namespace tk205 { namespace RS0002_NS { class RS0002; } } diff --git a/src/CNLOADS.CPP b/src/CNLOADS.CPP index 6526574da..37e96ef2f 100644 --- a/src/CNLOADS.CPP +++ b/src/CNLOADS.CPP @@ -2021,22 +2021,20 @@ RC RSYS::rs_TopRSys1() // check RSYS, initial set up for run rs_pRep205 = EdR.GetAtSafe(rs_rep205); // Get pointer to equipment data if (!rs_pRep205->ed_data) { - libtk205_NS::A205_SDK _sdk; - // Validate if (rs_pRep205->ed_doValidation) { // Nothing yet } - rs_pRep205->ed_data = new ASHRAE205_NS::RS0002_NS::RS0002; - *(rs_pRep205->ed_data) = _sdk.Load_RS0002(rs_pRep205->ed_filePath); + rs_pRep205->ed_data = new tk205::RS0002_NS::RS0002; + *(rs_pRep205->ed_data) = tk205::Load_RS0002(rs_pRep205->ed_filePath); - static const std::unordered_map RSMAP = + static const std::unordered_map RSMAP = { - {ASHRAE205_NS::SchemaType::RS0002, C_EDRSCH_RS0002}, - {ASHRAE205_NS::SchemaType::RS0003, C_EDRSCH_RS0003}, - {ASHRAE205_NS::SchemaType::RS0004, C_EDRSCH_RS0004}, - {ASHRAE205_NS::SchemaType::RS0005, C_EDRSCH_RS0005} + {tk205::ASHRAE205_NS::SchemaType::RS0002, C_EDRSCH_RS0002}, + {tk205::ASHRAE205_NS::SchemaType::RS0003, C_EDRSCH_RS0003}, + {tk205::ASHRAE205_NS::SchemaType::RS0004, C_EDRSCH_RS0004}, + {tk205::ASHRAE205_NS::SchemaType::RS0005, C_EDRSCH_RS0005} }; // TODO move to EQUIPDATA Function @@ -2848,15 +2846,14 @@ RC RSYS::rs_SetupCapC( // derive constants that depend on capacity int maxSpeed = dxRepPerf.performance_map_cooling.grid_variables.compressor_sequence_number.back(); double maxFlow = dxRepPerf.performance_map_cooling.grid_variables.indoor_coil_air_mass_flow_rate.back(); auto performance = dxRepPerf.performance_map_cooling.Calculate_performance( - { DegFtoK(95.f), // outdoor_coil_entering_dry_bulb_temperature 0.4, // indoor_coil_entering_relative_humidity; DegFtoK(80.f), // indoor_coil_entering_dry_bulb_temperature; maxFlow, // indoor_coil_air_mass_flow_rate; double(maxSpeed), // compressor_sequence_number; 101325 // ambient_absolute_air_pressure; - }); - auto capTot_205 = performance[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_total_capacity_index]*BtuperWh; + ); + auto capTot_205 = performance.gross_total_capacity*BtuperWh; rs_205flowScaleF = MFRIPtoSI(rs_amfC) / maxFlow; rs_205outScaleF = abs(rs_capnfX) / capTot_205; rs_CdC = dxRepPerf.cycling_degradation_coefficient; @@ -3205,43 +3202,37 @@ x printf("\nhit"); double tdbInK = DegFtoK(rs_tdbCoilIn); double pAtm = inHGtoPa(Top.tp_presAtm); auto& minSpeedPerf = dxRepPerf.performance_map_cooling.Calculate_performance( - { tdbOutK, rhIn, tdbInK, MFRIPtoSI(rs_amfC / (maxSpeed * rs_205flowScaleF)), 1.0, pAtm - } ); - double capTotCmin = minSpeedPerf[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_total_capacity_index] * BtuperWh * rs_205outScaleF; - double capSensCmin = min(minSpeedPerf[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_sensible_capacity_index] * BtuperWh * rs_205outScaleF, capTotCmin); + double capTotCmin = minSpeedPerf.gross_total_capacity * BtuperWh * rs_205outScaleF; + double capSensCmin = min(minSpeedPerf.gross_sensible_capacity * BtuperWh * rs_205outScaleF, capTotCmin); auto& maxSpeedPerf = dxRepPerf.performance_map_cooling.Calculate_performance( - { tdbOutK, rhIn, tdbInK, MFRIPtoSI(rs_amfC / rs_205flowScaleF), double(maxSpeed), pAtm - } ); - double capTotCmax = maxSpeedPerf[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_total_capacity_index] * BtuperWh * rs_205outScaleF; - double capSensCmax = min(maxSpeedPerf[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_sensible_capacity_index] * BtuperWh * rs_205outScaleF, capTotCmax); + float capTotCmax = maxSpeedPerf.gross_total_capacity * BtuperWh * rs_205outScaleF; + float capSensCmax = min(maxSpeedPerf.gross_sensible_capacity * BtuperWh * rs_205outScaleF, capTotCmax); rs_speedFMin = capSensCmin / capSensCmax; auto& performance = dxRepPerf.performance_map_cooling.Calculate_performance( - { tdbOutK, rhIn, tdbInK, MFRIPtoSI(rs_amf/ rs_205flowScaleF), double(1.f + (rs_speedF - rs_speedFMin)/(1.f - rs_speedFMin)*(maxSpeed - 1.f)), pAtm - } ); - rs_capTotCt = -performance[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_total_capacity_index]*BtuperWh* rs_205outScaleF; - rs_capSenCt = max(-performance[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_sensible_capacity_index]*BtuperWh* rs_205outScaleF,rs_capTotCt); - double inpX = performance[ASHRAE205_NS::RS0004_NS::LookupVariablesCooling::gross_power_index]*BtuperWh* rs_205outScaleF; + rs_capTotCt = -performance.gross_total_capacity*BtuperWh* rs_205outScaleF; + rs_capSenCt = max(-performance.gross_sensible_capacity*BtuperWh* rs_205outScaleF,rs_capTotCt); + double inpX = performance.gross_power*BtuperWh* rs_205outScaleF; rs_SHR = rs_capSenCt / rs_capTotCt; rs_effCt = abs(rs_capSenCt) / inpX; rs_fCondCap = rs_capTotCt/ rs_capnfX; @@ -5451,8 +5442,8 @@ x rs_inPrimary = rs_outSen / (rs_effHt * rs_PLF); { auto& dxStandbyPerf = rs_pRep205->ed_data->performance.dx_system_representation.performance.performance_map_standby; rs_parElec = dxStandbyPerf.Calculate_performance( - { DegFtoK(rs_tdbOut) } - )[ASHRAE205_NS::RS0004_NS::LookupVariablesStandby::gross_power_index]; + DegFtoK(rs_tdbOut) + ).gross_power; } } diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index 010151fa6..ee7c5ebf9 100644 --- a/src/CNRECS.DEF +++ b/src/CNRECS.DEF @@ -2933,7 +2933,7 @@ RECORD AIRNET "AirNet" *SUBSTRUCT *hideall // AirNet calculation storage / code RECORD EQUIPDATA "EquipData" *RAT // holds ASHRAE 205 equipment data *prefix ed_ *exdes // explicit destructor -*declare "class ASHRAE205_NS::RS0002_NS::RS0002* ed_data;" +*declare "class tk205::RS0002_NS::RS0002* ed_data;" // in base class: .name, .ownTi, more. *r CHP ed_filePath // File path diff --git a/test/ref/205TEST.REP b/test/ref/205TEST.REP index 299c7a6a0..1a8d85a15 100644 --- a/test/ref/205TEST.REP +++ b/test/ref/205TEST.REP @@ -183,9 +183,9 @@ Energy Balance (F, kBtu, + into the zone) for Fri 10-Jul -Log for Run 001: +! Log for Run 001: -CSE 0.899.0+ashrae205.f438428.26 for Win32 console +! CSE 0.899.0+ashrae205.fcfe5d8.81 for Win32 console @@ -1734,18 +1734,18 @@ Input for Run 001: -CSE 0.899.0+ashrae205.f438428.26 for Win32 console run(s) done: Tue 23-Nov-21 5:03:05 pm +! CSE 0.899.0+ashrae205.fcfe5d8.81 for Win32 console run(s) done: Thu 23-Dec-21 10:31:08 am -Executable: c:\users\nkruis\projects\cse\msvc\cse.exe - 23-Nov-21 5:02 pm (VS 14.29 3374592 bytes) (HPWH 1.15.0+HEAD.81d7b80.17) -Command line: 205test.cse -Input file: C:\Users\nkruis\projects\cse\test\205test.cse -Report file: C:\Users\nkruis\projects\cse\test\205test.rep +! Executable: c:\users\nkruis\projects\cse\msvc\cse.exe +! 23-Dec-21 10:28 am (VS 14.29 3766272 bytes) (HPWH 1.16.0) +! Command line: -x! -b -t1 205test +! Input file: C:\Users\nkruis\projects\cse\test\205test.cse +! Report file: C:\Users\nkruis\projects\cse\test\205test.rep -Timing info -- +! Timing info -- - Input: Time = 0.42 Calls = 2 T/C = 0.2080 - AutoSizing: Time = 10.32 Calls = 1 T/C = 10.3210 - Simulation: Time = 27.51 Calls = 1 T/C = 27.5080 - Reports: Time = 0.12 Calls = 1 T/C = 0.1180 - Total: Time = 38.39 Calls = 1 T/C = 38.3890 +! Input: Time = 0.15 Calls = 2 T/C = 0.0745 +! AutoSizing: Time = 2.94 Calls = 1 T/C = 2.9370 +! Simulation: Time = 20.50 Calls = 1 T/C = 20.4980 +! Reports: Time = 0.07 Calls = 1 T/C = 0.0670 +! Total: Time = 23.65 Calls = 1 T/C = 23.6510 diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index 2daf872c4..b7ae4c3e0 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -44,10 +44,10 @@ if (NOT HPWHSIM_OMIT_TESTTOOL) endif() # btwxt -add_subdirectory( btwxt) +add_subdirectory(btwxt) -# Toolkit 205 -add_subdirectory(toolkit-205) +# libtk205 +add_subdirectory(libtk205) diff --git a/vendor/libtk205 b/vendor/libtk205 new file mode 160000 index 000000000..cf3ee70a8 --- /dev/null +++ b/vendor/libtk205 @@ -0,0 +1 @@ +Subproject commit cf3ee70a87dc7a4d59b58eef37d70e1473dbf25d diff --git a/vendor/toolkit-205 b/vendor/toolkit-205 deleted file mode 160000 index 2b5ad4962..000000000 --- a/vendor/toolkit-205 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2b5ad4962786f763f6ef6756a7e20190c061cfec From 5c95b710afb975bd6d050eb02d1465268a4476fd Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Thu, 23 Dec 2021 12:51:02 -0700 Subject: [PATCH 25/25] Clean up solution explorer folders and CMake variables. --- vendor/CMakeLists.txt | 10 ++++++---- vendor/libtk205 | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index 789343e03..3b632b86d 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -93,10 +93,6 @@ endif() # btwxt add_subdirectory(btwxt) - -# libtk205 -add_subdirectory(libtk205) - set_target_properties(btwxt PROPERTIES FOLDER Dependencies) mark_as_advanced( BTWXT_COVERAGE @@ -105,4 +101,10 @@ mark_as_advanced( GIT_SUBMODULE # Should go away with Btwxt update ) +# libtk205 +set(LIBTK205_BUILD_TESTING OFF CACHE BOOL "" FORCE) + +add_subdirectory(libtk205) +set_target_properties(libtk205 PROPERTIES FOLDER Dependencies) +mark_as_advanced(LIBTK205_BUILD_TESTING) \ No newline at end of file diff --git a/vendor/libtk205 b/vendor/libtk205 index cf3ee70a8..c214c556f 160000 --- a/vendor/libtk205 +++ b/vendor/libtk205 @@ -1 +1 @@ -Subproject commit cf3ee70a87dc7a4d59b58eef37d70e1473dbf25d +Subproject commit c214c556f0b68dfef3d7ea1038fce6a5100ba6c3