Repository: NREL/OpenStudio (language: python)

Issue:
Update to EnergyPlus 22.1.0
Enhancement Request
--------------
Once v22.1-IOFreeze is released, we should update to it.

## Detailed Description

https://github.com/NREL/EnergyPlus/blob/develop/src/Transition/InputRulesFiles/Rules9-6-0-to-22-1-0.md

### Major changes
- [ ] https://github.com/NREL/OpenStudio/issues/4531 https://github.com/NREL/OpenStudio/pull/4548
- [ ] https://github.com/NREL/OpenStudio/issues/4477

### New additions
- [x] `Schedule:File`: min fields from 5 to 10. new "Adjust Schedule for Daylight Savings" field.
- [x] `WindowProperty:FrameAndDivider`: min fields from 20 to 26. new "NFRC Product Type for Assembly Calculations" field.
- [ ] `ZoneHVAC:ExhaustControl`: new object. https://github.com/NREL/OpenStudio/issues/4541
- [ ] `AirLoopHVAC:ExhaustSystem`: new object. https://github.com/NREL/OpenStudio/issues/4542
- [ ] `SetpointManager:SystemNodeReset:Temperature:*`: new objects. https://github.com/NREL/OpenStudio/issues/4543
- [x] `PythonPlugin:SearchPaths`: new "Add epin Environment Variable to Search Path" field.

### Minor stuff
- [x] `WindowMaterial:SimpleGlazingSystem`: remove upper limit on "U-Factor".
- [x] `SurfaceProperty:ConvectionCoefficients`: new `BlockenWindard` key for "Convection Coefficient x Type" fields.
- [x] `WaterUse:RainCollector`: update `\memo`.
- [x] `PythonPlugin:Variables`: remove `\unique-object`.

### Other
- [ ] https://github.com/NREL/OpenStudio/issues/4403
Addresses #4531, breaking changes
Pull request overview
---------------------

 - Addresses #4531:
- CoolingTower:*Speed
  - [x] `evaporationLossMode` (`boost::optional<std::string>` to `std::string`)
  - [x] `blowdownCalculationMode` (`boost::optional<std::string>` to `std::string`)
  - [x] `cellControl` for CoolingTower:VariableSpeed
- PlantLoop
  - [x] `commonPipeSimulation`  (`boost::optional<std::string>` to `std::string`)
  - [x] `isCommonPipeSimulationDefaulted`
  - [x] add `commonPipeSimulationValues` getter
  - [x] add `validCommonPipeSimulationValues` getter

### Pull Request Author

<!--- Add to this list or remove from it as applicable.  This is a simple templated set of guidelines. -->

 - [ ] Model API Changes / Additions
 - [ ] Any new or modified fields have been implemented in the EnergyPlus ForwardTranslator (and ReverseTranslator as appropriate)
 - [ ] Model API methods are tested (in `src/model/test`)
 - [ ] EnergyPlus ForwardTranslator Tests (in `src/energyplus/Test`)
 - [ ] If a new object or method, added a test in NREL/OpenStudio-resources: Add Link
 - [ ] If needed, added VersionTranslation rules for the objects (`src/osversion/VersionTranslator.cpp`)
 - [ ] Verified that C# bindings built fine on Windows, partial classes used as needed, etc.
 - [ ] All new and existing tests passes
 - [ ] If methods have been deprecated, update rest of code to use the new methods

**Labels:**

 - [ ] If change to an IDD file, add the label `IDDChange`
 - [x] If breaking existing API, add the label `APIChange`
 - [ ] If deemed ready, add label `Pull Request - Ready for CI` so that CI builds your PR

### Review Checklist

This will not be exhaustively relevant to every PR.
 - [ ] Perform a Code Review on GitHub
 - [ ] Code Style, strip trailing whitespace, etc.
 - [ ] All related changes have been implemented: model changes, model tests, FT changes, FT tests, VersionTranslation, OS App
 - [ ] Labeling is ok
 - [ ] If defect, verify by running develop branch and reproducing defect, then running PR and reproducing fix
 - [ ] If feature, test running new feature, try creative ways to break it
 - [ ] CI status: all green or justified

Breaking changes to consider
Enhancement Request
--------------
Checklist:
- CoolingTower:*Speed
  - [x] `evaporationLossMode` (`boost::optional<std::string>` to `std::string`)
  - [x] `blowdownCalculationMode` (`boost::optional<std::string>` to `std::string`)
  - [x] `cellControl` for CoolingTower:VariableSpeed
- EvaporativeFluidCooler:SingleSpeed
  - [ ] `performanceInputMethod` (make required-field, and change `boost::optional<std::string>` to `std::string`)



Discussion / hints:
aka ~v22.03~ v22.1: https://github.com/NREL/EnergyPlus/pull/9169



Fix patch:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4e73a8397a0..8a632f9612f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,7 @@ if(CCACHE_PROGRAM)
 endif()
 
 # Project macro can only take digits in the version, it splits these out to specific variables
-project(OpenStudio VERSION 3.3.1)
+project(OpenStudio VERSION 3.4.0)
 
 # The RT Manifest file and C# SDK only support the digit portion of patch
 string(APPEND PROJECT_VERSION_PATCH_DIGIT ${PROJECT_VERSION_PATCH})
@@ -186,16 +186,16 @@ if(hasParent)
 endif()
 
 # EnergyPlus Idd version
-set(ENERGYPLUS_VERSION_MAJOR 9)
-set(ENERGYPLUS_VERSION_MINOR 6)
+set(ENERGYPLUS_VERSION_MAJOR 22)
+set(ENERGYPLUS_VERSION_MINOR 1)
 set(ENERGYPLUS_VERSION_PATCH 0)
 set(ENERGYPLUS_VERSION "${ENERGYPLUS_VERSION_MAJOR}.${ENERGYPLUS_VERSION_MINOR}.${ENERGYPLUS_VERSION_PATCH}")
 # Build SHA is not required to have a value, but if it does OpenStudio will require this build.
-set(ENERGYPLUS_BUILD_SHA "4b123cf80f")
+set(ENERGYPLUS_BUILD_SHA "4fa778ec59")
 
 # ENERGYPLUS_RELEASE_NAME is used to locate the E+ download
 # from the github releases
-set(ENERGYPLUS_RELEASE_NAME "v9.6.0_PlusSpaceFix1")
+set(ENERGYPLUS_RELEASE_NAME "v22.1.0-IOFreeze")
 
 # Radiance
 set(RADIANCE_VERSION "5.0.a.12")
@@ -580,10 +580,10 @@ endif()
 if(UNIX)
   if(APPLE)
     if (ARCH MATCHES "arm64")
-      set(ENERGYPLUS_EXPECTED_HASH 104a0c77e4e60a457e295f9d7591d7ad)
+      set(ENERGYPLUS_EXPECTED_HASH c1f5db40f79ea531de9b38dc10850809)
       set(ENERGYPLUS_PLATFORM "Darwin-macOS11.2-arm64")
     else()
-      set(ENERGYPLUS_EXPECTED_HASH e330eb7b658cb0987d4fee27cf956659)
+      set(ENERGYPLUS_EXPECTED_HASH 54aabff4be7645d81aa181a425cf775a)
       set(ENERGYPLUS_PLATFORM "Darwin-macOS10.15-x86_64")
     endif()
   elseif(EXISTS "/etc/redhat-release")
@@ -592,9 +592,9 @@ if(UNIX)
     set(ENERGYPLUS_PLATFORM "Redhat-x86_64")
   else()
     if(LSB_RELEASE_VERSION_SHORT MATCHES "20.04")
-      set(ENERGYPLUS_EXPECTED_HASH 3a725c159b9196655156c0944173e8a3)
+      set(ENERGYPLUS_EXPECTED_HASH 0e6a0f5b555fb81ab9484f97d7a36cde)
     else() # 18.04
-      set(ENERGYPLUS_EXPECTED_HASH 4e48feacb8fd25cb51255fe5e1fe5f20)
+      set(ENERGYPLUS_EXPECTED_HASH bd4962a2bdad6bb49946ebf3d641b453)
     endif()
     set(ENERGYPLUS_PLATFORM "Linux${ENERGYPLUS_SYSTEM_VERSION}-x86_64")
   endif()
@@ -626,11 +626,11 @@ elseif(WIN32)
   if(CMAKE_SIZEOF_VOID_P EQUAL 8) # 64 bit
     set(ENERGYPLUS_PATH "EnergyPlus-${ENERGYPLUS_VERSION}-${ENERGYPLUS_BUILD_SHA}-Windows-x86_64")
     set(ENERGYPLUS_ARCH 64)
-    set(ENERGYPLUS_EXPECTED_HASH c2c99502daac7f8ec0eb9e9bc307ba59)
+    set(ENERGYPLUS_EXPECTED_HASH 5273ef6bf4a7ecb5eed65938a589a77f)
   else()
     set(ENERGYPLUS_PATH "EnergyPlus-${ENERGYPLUS_VERSION}-${ENERGYPLUS_BUILD_SHA}-Windows-i386")
     set(ENERGYPLUS_ARCH 32)
-    set(ENERGYPLUS_EXPECTED_HASH 98c54dd9034e7db96a903c5bd726d268)
+    set(ENERGYPLUS_EXPECTED_HASH e328305e1d81001b2172369a86edaf52)
   endif()
   if(EXISTS "${PROJECT_BINARY_DIR}/${ENERGYPLUS_PATH}.zip")
     file(MD5 "${PROJECT_BINARY_DIR}/${ENERGYPLUS_PATH}.zip" ENERGYPLUS_HASH)
diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt
index d215a74bb22..f3d69ed8a2d 100644
--- a/resources/CMakeLists.txt
+++ b/resources/CMakeLists.txt
@@ -107,6 +107,7 @@ set(utilities_resources_src
   utilities/SqlFile/1ZoneEvapCooler-V9-4-0.sql
   utilities/SqlFile/1ZoneEvapCooler-V9-5-0.sql
   utilities/SqlFile/1ZoneEvapCooler-V9-6-0.sql
+  utilities/SqlFile/1ZoneEvapCooler-V22-1-0.sql
   utilities/Zip/test1.zip
 )
 
diff --git a/resources/energyplus/ProposedEnergy+.idd b/resources/energyplus/ProposedEnergy+.idd
index b7c78688189..6677c432ede 100644
--- a/resources/energyplus/ProposedEnergy+.idd
+++ b/resources/energyplus/ProposedEnergy+.idd
@@ -1,4 +1,4 @@
-!IDD_Version 9.6.0
+!IDD_Version 22.1.0
 !IDD_BUILD TBD
 ! **************************************************************************
 ! This file is the Input Data Dictionary (IDD) for EnergyPlus.
@@ -404,7 +404,7 @@ Version,
       \format singleLine
       \min-fields 1
   A1 ; \field Version Identifier
-      \default 9.6
+      \default 22.1
 
 SimulationControl,
       \unique-object
@@ -2834,7 +2834,7 @@ Schedule:File:Shading,
        \retaincase
 
 Schedule:File,
- \min-fields 5
+       \min-fields 10
        \memo A Schedule:File points to a text computer file that has 8760-8784 hours of data.
        \url-object
   A1 , \field Name
@@ -2877,11 +2877,18 @@ Schedule:File,
        \key Yes
        \key No
        \default No
-  N4 ; \field Minutes per Item
+  N4 , \field Minutes per Item
        \note Must be evenly divisible into 60
        \type integer
        \minimum 1
        \maximum 60
+  A6 ; \field Adjust Schedule for Daylight Savings
+       \note "No" means do not include Daylight Savings Time in the schedule, instead, use the schedule directly from the Schedule:File csv (default)
+       \note "Yes" means include Daylight Savings Time to the schedule
+       \type choice
+       \key Yes
+       \key No
+       \default Yes
 
 \group Surface Construction Elements
 
@@ -3144,10 +3151,8 @@ WindowMaterial:SimpleGlazingSystem,
   N1 , \field U-Factor
        \required-field
        \note Enter U-Factor including film coefficients
-       \note Note that the effective upper limit for U-factor is 5.8 W/m2-K
        \units W/m2-K
        \minimum> 0
-       \maximum  7
   N2 , \field Solar Heat Gain Coefficient
        \required-field
        \note SHGC at Normal Incidence
@@ -7347,7 +7352,7 @@ WindowProperty:FrameAndDivider,
          \memo Specifies the dimensions of a window frame, dividers, and inside reveal surfaces.
          \memo Referenced by the surface objects for exterior windows and glass doors
          \memo (ref: FenestrationSurface:Detailed, Window, and GlazedDoor).
-      \min-fields 20
+         \min-fields 26
     A1 , \field Name
          \required-field
          \type alpha
@@ -7506,11 +7511,37 @@ WindowProperty:FrameAndDivider,
          \minimum 0.0
          \maximum 2.0
          \default 0.0
-    N23; \field Inside Reveal Solar Absorptance
+    N23, \field Inside Reveal Solar Absorptance
          \type real
          \minimum 0.0
          \maximum 1.0
          \default 0.0
+    A3;  \field NFRC Product Type for Assembly Calculations
+         \type choice
+         \key CasementDouble
+         \key CasementSingle
+         \key DualAction
+         \key Fixed
+         \key Garage
+         \key Greenhouse
+         \key HingedEscape
+         \key HorizontalSlider
+         \key Jal
+         \key Pivoted
+         \key ProjectingSingle
+         \key ProjectingDual
+         \key DoorSidelite
+         \key Skylight
+         \key SlidingPatioDoor
+         \key CurtainWall
+         \key SpandrelPanel
+         \key SideHingedDoor
+         \key DoorTransom
+         \key TropicalAwning
+         \key TubularDaylightingDevice
+         \key VerticalSlider
+         \default CurtainWall
+         \note Used when computing the assembly u-factor, SHGC and visible transmittance for reporting only
 
 WindowProperty:AirflowControl,
     \memo Used to control forced airflow through a gap between glass layers
@@ -9253,6 +9284,7 @@ SurfaceProperty:ConvectionCoefficients,
       \key AdaptiveConvectionAlgorithm
       \key ASHRAEVerticalWall
       \key ASTMC1340
+      \key BlockenWindard
       \key WaltonUnstableHorizontalOrTilt
       \key WaltonStableHorizontalOrTilt
       \key FisherPedersenCeilingDiffuserWalls
@@ -9316,6 +9348,7 @@ SurfaceProperty:ConvectionCoefficients,
       \key AdaptiveConvectionAlgorithm
       \key ASHRAEVerticalWall
       \key ASTMC1340
+      \key BlockenWindard
       \key WaltonUnstableHorizontalOrTilt
       \key WaltonStableHorizontalOrTilt
       \key FisherPedersenCeilingDiffuserWalls
@@ -28275,6 +28308,64 @@ ZoneHVAC:AirDistributionUnit,
        \type object-list
        \object-list DesignSpecificationAirTerminalSizingName
 
+ZoneHVAC:ExhaustControl,
+       \memo Defines a controlled exhaust flow from a zone which finally feeds into 
+       \memo one of AirLoopHVAC:ZoneMixer's inlets, which are part of an AirLoopHVAC:ExhaustSystem.
+  A1 , \field Name
+       \required-field
+  A2 , \field Availability Schedule Name
+       \note Availability schedule name for this exhaust system. Schedule value > 0 means it is available.
+       \note If this field is blank, the exhaust system is always available. If the attached 
+       \note AirLoopHVAC:ExhaustSystem is off, then the flow will be zero.
+       \type object-list
+       \object-list ScheduleNames
+  A3 , \field Zone Name
+       \required-field
+       \note Zone the exhaust inlet node is part of
+       \type object-list
+       \object-list ZoneNames
+  A4 , \field Inlet Node Name
+       \note Inlet node name for the exhaust. Must be a zone exhaust node.
+       \required-field
+       \type node
+  A5 , \field Outlet Node Name
+       \note Outlet node name for the exhaust
+       \required-field
+       \type node
+  N1 , \field Design Exhaust Flow Rate
+       \autosizable
+       \units m3/s
+       \minimum> 0
+       \default autosize
+  A6 , \field Flow Control Type
+       \note Control type of the zone exhaust flow
+       \type choice
+       \key Scheduled
+       \key FollowSupply
+       \default Scheduled
+  A7 , \field Exhaust Flow Fraction Schedule Name
+       \note Schedule name of the exhaust flow fraction. Used only with Scheduled control type.
+       \note If this field is blank, the flow fraction is always 1.0.
+       \type object-list
+       \object-list ScheduleNames
+  A8 , \field Supply Node or NodeList Name
+       \note Used only with FollowSupply control type.
+       \type node
+  A9,  \field Minimum Zone Temperature Limit Schedule Name
+       \note Schedule name of the Minimum Zone Temperature Limit in degree Celsius
+       \note If this field is blank, there is no limit.
+       \type object-list
+       \object-list ScheduleNames
+  A10, \field Minimum Exhaust Flow Fraction Schedule Name
+       \note Schedule name of the minimum exhaust flow fraction.
+       \note Applied when the zone temperature falls below the Minimum Zone Temperature Limit.
+       \type object-list
+       \object-list ScheduleNames
+  A11; \field Balanced Exhaust Fraction Schedule Name
+       \note Schedule name of the Balanced Exhaust Fraction.
+       \type object-list
+       \object-list ScheduleNames
+
 \group Zone HVAC Equipment Connections
 
 !*****************ZONE EQUIPMENT SPECIFICATION*********************
@@ -39776,6 +39867,29 @@ AirLoopHVAC:ReturnPath,
        \type object-list
        \object-list ReturnPathComponentNames
 
+AirLoopHVAC:ExhaustSystem,
+       \memo Defines a general exhaust system with a central exhaust fan drawing from one or more
+       \memo ZoneHVAC:ExhaustControl outlet nodes via an AirLoopHVAC:ZoneMixer.
+       \min-fields 4
+  A1 , \field Name
+       \required-field
+       \note Name of the exhaust system
+  A2 , \field Zone Mixer Name
+       \required-field
+       \type object-list
+       \note The name of the exhaust system AirLoopHVAC:ZoneMixer
+       \object-list ZoneMixers
+  A3 , \field Fan Object Type
+       \required-field
+       \type choice
+       \key Fan:SystemModel
+       \key Fan:ComponentModel
+  A4 ; \field Fan Name
+       \required-field
+       \type object-list
+       \object-list FansSystemModel
+       \object-list FansComponentModel
+
 AirLoopHVAC:DedicatedOutdoorAirSystem,
        \extensible:1 Just duplicate last field and comments (changing numbering, please)
        \min-fields 11
@@ -52094,6 +52208,70 @@ SetpointManager:ReturnTemperature:HotWater,
        \type object-list
        \object-list ScheduleNames
 
+SetpointManager:SystemNodeReset:Temperature,
+        \memo This Setpoint Manager is used to place a temperature setpoint on a system node according to the reference (e.g., return) temperature using a reset rule.
+        \memo The temperature setpoint is obtained by retrieving the temperature of the user specified reference system node.
+   A1 , \field Name
+        \required-field
+   A2 , \field Control Variable
+        \required-field
+        \type choice
+        \key Temperature
+        \key MaximumTemperature
+        \key MinimumTemperature
+   N1 , \field Setpoint at Low Reference Temperature
+        \units C
+        \required-field
+   N2 , \field Setpoint at High Reference Temperature
+        \units C
+        \required-field
+   N3 , \field Low Reference Temperature
+        \units C
+        \required-field
+   N4 , \field High Reference Temperature
+        \units C
+        \required-field
+   A3 , \field Reference Node Name
+        \note The name of an HVAC system node that gets referenced.
+        \required-field
+        \type node
+   A4 ; \field Setpoint Node or NodeList Name
+        \note Node(s) at which temperature will be set
+        \required-field
+        \type node
+
+SetpointManager:SystemNodeReset:Humidity,
+        \memo This Setpoint Manager is used to place a humidity ratio setpoint on a system node according to the reference (e.g., return) humidity ratio using a reset rule.
+        \memo The humidity ratio setpoint is obtained by retrieving the humidity ratio of the user specified reference system node.
+   A1 , \field Name
+        \required-field
+   A2 , \field Control Variable
+        \required-field
+        \type choice
+        \key HumidityRatio
+        \key MaximumHumidityRatio
+        \key MinimumHumidityRatio
+   N1 , \field Setpoint at Low Reference Humidity Ratio
+        \units kgWater/kgDryAir
+        \required-field
+   N2 , \field Setpoint at High Reference Humidity Ratio
+        \units kgWater/kgDryAir
+        \required-field
+   N3 , \field Low Reference Humidity Ratio
+        \units kgWater/kgDryAir
+        \required-field
+   N4 , \field High Reference Humidity Ratio
+        \units kgWater/kgDryAir
+        \required-field
+   A3 , \field Reference Node Name
+        \note The name of an HVAC system node that gets referenced.
+        \required-field
+        \type node
+   A4 ; \field Setpoint Node or NodeList Name
+        \note Node(s) at which humidity ratio will be set
+        \required-field
+        \type node
+
 \group Refrigeration
 
 Refrigeration:Case,
@@ -56729,8 +56907,11 @@ WaterUse:Well,
 
 WaterUse:RainCollector,
        \memo Used for harvesting rainwater falling on building surfaces. The rainwater is sent to a
-       \memo WaterUse:Storage object. In order to use this object it is necessary to also include
-       \memo a Site:Precipitation object to describe the rates of rainfall.
+       \memo WaterUse:Storage object. In versions up till Version 9.6, it is necessary to also include
+       \memo a Site:Precipitation object to describe the rates of rainfall, in order to use this object.
+       \memo In later versions, if the Site:Precipitation is not present, precipitation depth in the weather input
+       \memo .epw will be used instead. When this is the case, please make sure the precipitation in the
+       \memo .epw is accurate.
        \extensible:1 - repeat last field
        \min-fields 7
   A1 , \field Name
@@ -61426,7 +61607,16 @@ PythonPlugin:SearchPaths,
        \key Yes
        \key No
        \default Yes
-   A4; \field Search Path 1
+   A4, \field Add epin Environment Variable to Search Path
+       \note The "epin" environment variable is set by some EnergyPlus interfaces
+       \note in order to let EnergyPlus find external files in special locations.
+       \note If this is enabled, and that variable is set, the value of the variable
+       \note will be added to the Python search path.
+       \type choice
+       \key Yes
+       \key No
+       \default Yes
+   A5; \field Search Path 1
        \type alpha
        \begin-extensible
        \retaincase
@@ -61463,7 +61653,6 @@ PythonPlugin:Instance,
 PythonPlugin:Variables,
         \memo This object defines name identifiers for custom Python Plugin variable data that should be shared
         \memo among all running Python Plugins.
-        \unique-object
         \min-fields 2
         \extensible:1
    A1,  \field Name
diff --git a/resources/model/OpenStudio.idd b/resources/model/OpenStudio.idd
index 22e815c8e1a..8085f287094 100644
--- a/resources/model/OpenStudio.idd
+++ b/resources/model/OpenStudio.idd
@@ -1,4 +1,4 @@
-!IDD_Version 3.3.1
+!IDD_Version 3.4.0
 ! *****************************************************************************
 ! This file is the Input Data Dictionary (IDD) for OpenStudio Model.
 !
@@ -3100,12 +3100,10 @@ OS:WindowMaterial:SimpleGlazingSystem,
        \reference GlazingMaterialNames
   N1, \field U-Factor
        \note Enter U-Factor including film coefficients
-       \note Note that the effective upper limit for U-factor is 5.8 W/m2-K
        \type real
        \required-field
        \units W/m2-K
        \minimum> 0
-       \maximum 7
   N2, \field Solar Heat Gain Coefficient
        \note SHGC at Normal Incidence
        \type real
@@ -4862,7 +4860,7 @@ OS:Schedule:File,
        \key Yes
        \key No
        \default No
-  N4;  \field Minutes per Item
+  N4,  \field Minutes per Item
        \type choice
        \default 60
        \key 1
@@ -4877,6 +4875,13 @@ OS:Schedule:File,
        \key 20
        \key 30
        \key 60
+  A7 ; \field Adjust Schedule for Daylight Savings
+       \note "No" means do not include Daylight Savings Time in the schedule, instead, use the schedule directly from the Schedule:File csv (default)
+       \note "Yes" means include Daylight Savings Time to the schedule
+       \type choice
+       \key Yes
+       \key No
+       \default Yes
 
 \group OpenStudio Geometry
 
@@ -5652,9 +5657,9 @@ OS:ShadingControl,
        \note When that field is set to Group the entire list is controlled simultaneously.
 
 OS:WindowProperty:FrameAndDivider,
-         \memo Specifies the dimensions of a window frame, dividers, and reveal surfaces.
-         \memo Referenced by the sub surface objects for exterior windows and glass doors
-         \min-fields 20
+       \memo Specifies the dimensions of a window frame, dividers, and reveal surfaces.
+       \memo Referenced by the sub surface objects for exterior windows and glass doors
+       \min-fields 27
   A1 , \field Handle
        \type handle
        \required-field
@@ -5823,11 +5828,37 @@ OS:WindowProperty:FrameAndDivider,
        \minimum 0.0
        \maximum 2.0
        \default 0.0
-  N24; \field Inside Reveal Solar Absorptance
+  N24, \field Inside Reveal Solar Absorptance
        \type real
        \minimum 0.0
        \maximum 1.0
        \default 0.0
+  A4;  \field NFRC Product Type for Assembly Calculations
+       \type choice
+       \key CasementDouble
+       \key CasementSingle
+       \key DualAction
+       \key Fixed
+       \key Garage
+       \key Greenhouse
+       \key HingedEscape
+       \key HorizontalSlider
+       \key Jal
+       \key Pivoted
+       \key ProjectingSingle
+       \key ProjectingDual
+       \key DoorSidelite
+       \key Skylight
+       \key SlidingPatioDoor
+       \key CurtainWall
+       \key SpandrelPanel
+       \key SideHingedDoor
+       \key DoorTransom
+       \key TropicalAwning
+       \key TubularDaylightingDevice
+       \key VerticalSlider
+       \default CurtainWall
+       \note Used when computing the assembly u-factor, SHGC and visible transmittance for reporting only
 
 \group OpenStudio Advanced Construction, Surface, Zone Concepts
 
@@ -5888,6 +5919,7 @@ OS:SurfaceProperty:ConvectionCoefficients,
       \key AdaptiveConvectionAlgorithm
       \key ASHRAEVerticalWall
       \key ASTMC1340
+      \key BlockenWindard
       \key WaltonUnstableHorizontalOrTilt
       \key WaltonStableHorizontalOrTilt
       \key FisherPedersenCeilingDiffuserWalls
@@ -5951,6 +5983,7 @@ OS:SurfaceProperty:ConvectionCoefficients,
       \key AdaptiveConvectionAlgorithm
       \key ASHRAEVerticalWall
       \key ASTMC1340
+      \key BlockenWindard
       \key WaltonUnstableHorizontalOrTilt
       \key WaltonStableHorizontalOrTilt
       \key FisherPedersenCeilingDiffuserWalls
diff --git a/resources/utilities/SqlFile/1ZoneEvapCooler-V22-1-0-IOFreeze.idf b/resources/utilities/SqlFile/1ZoneEvapCooler-V22-1-0-IOFreeze.idf
new file mode 100644
index 00000000000..9305d9d5e3f
--- /dev/null
+++ b/resources/utilities/SqlFile/1ZoneEvapCooler-V22-1-0-IOFreeze.idf
@@ -0,0 +1,643 @@
+!-Generator IDFEditor 1.34
+!-Option OriginalOrderTop UseSpecialFormat
+!-NOTE: All comments with '!-' are ignored by the IDFEditor and are generated automatically.
+!-      Use '!' comments if they need to be retained when using the IDFEditor.
+! 1ZoneEvapCooler.idf
+!
+! Basic file description:  This file models a small one-zone house with a whole-house direct evaporative cooler system.
+!                          Because evaporative coolers cannot be controlled with the ZoneControl:Thermostat object,
+!                          this file illustrates how an evaporative cooler system can be thermostatically controlled
+!                          in a crude manner using the AvailabilityManager objects:
+!
+!                              AvailabilityManager:LowTemperatureTurnOff
+!                              AvailabilityManager:HighTemperatureTurnOn
+!
+!                          Availability managers are capable of turning on or off the fan for an air system (or the pump
+!                          for a plant system) by monitoring temperature conditions at a user-specified system node.
+!                          In this model, the availability managers are monitoring the zone outlet air node to act as
+!                          a crude thermostatic control for the zone.
+!
+!                          Keep in mind that availability manager control is "lagged".  This means that the node
+!                          conditions from the previous time step are used to make control decisions at the current
+!                          time step.
+!
+!                          There are two ways to use the availability managers for controlling an evaporative cooler:
+!
+!                              Method 1.  The fan is scheduled to be available at all times, meaning that the system
+!                                         is on all the time by default.  This usually results in over-cooling.
+!                                         To prevent over-cooling, the LOW TEMPERATURE TURN OFF object is used to
+!                                         turn off the system fan when the temperature falls below the setpoint (23 C).
+!
+!                              Method 2.  The fan is scheduled to be unavailable at all times, meaning that the system
+!                                         is off all the time by default.  This usually results in under-cooling.
+!                                         To prevent under-cooling, the HIGH TEMPERATURE TURN ON object is used to
+!                                         turn on the system fan when the temperature rises above the setpoint (26 C).
+!
+!                          With either method, all other equipment is scheduled to be always available.  In this file,
+!                          for demonstration purposes only, the fan is scheduled to be available from 12 AM-12 PM to
+!                          to demonstrate Method 1, and scheduled to be unavailable from 12 PM-12 AM for Method 2.
+!
+!                          Note that ZoneControl:Thermostat is still used in this model to control the baseboard
+!                          heating in the winter, but it does not effect the evaporative cooler system.
+!
+! Highlights:              Test of AvailabilityManagers for controlling an air system.
+!
+! Simulation Location/Run: DENVER_STAPLETON_CO_USA_WMO_724690, 2 design days, 1 run period,
+!                          Run Control executes two design days (see RUN PERIOD object)
+!
+! Location:                Denver, CO
+!
+! Design Days:             DENVER_STAPLETON_CO_USA Annual Heating 99%, MaxDB=-16°C
+!                          DENVER_STAPLETON_CO_USA Annual Cooling (DB=>MWB) 1%, MaxDB=32.6°C MWB=15.5°C
+!
+! Run Period (Weather File): Full Annual Simulation, DENVER_STAPLETON_CO_USA_WMO_724690
+!
+! Run Control:             No zone or system sizing, design day run control (no weather file simulation)
+!
+! Building:                Fictional 1 zone building with resistive walls based on 1ZoneUncontrolled example.
+!                          No windows.  No internal gains.  No internal mass.  The building is oriented due north.
+!
+! Floor Area:              232.25 m2
+! Number of Stories:       1
+
+  Version,22.1;
+
+  Timestep,6;
+
+  Building,
+    Bldg,                    !- Name
+    0.0,                     !- North Axis {deg}
+    Suburbs,                 !- Terrain
+    0.05,                    !- Loads Convergence Tolerance Value {W}
+    0.05,                    !- Temperature Convergence Tolerance Value {deltaC}
+    MinimalShadowing,        !- Solar Distribution
+    30,                      !- Maximum Number of Warmup Days
+    6;                       !- Minimum Number of Warmup Days
+
+  HeatBalanceAlgorithm,ConductionTransferFunction;
+
+  SurfaceConvectionAlgorithm:Inside,TARP;
+
+  SurfaceConvectionAlgorithm:Outside,DOE-2;
+
+  SimulationControl,
+    No,                      !- Do Zone Sizing Calculation
+    No,                      !- Do System Sizing Calculation
+    No,                      !- Do Plant Sizing Calculation
+    Yes,                     !- Run Simulation for Sizing Periods
+    Yes,                     !- Run Simulation for Weather File Run Periods
+    No,                      !- Do HVAC Sizing Simulation for Sizing Periods
+    1;                       !- Maximum Number of HVAC Sizing Simulation Passes
+
+  RunPeriod,
+    Run Period 1,            !- Name
+    1,                       !- Begin Month
+    1,                       !- Begin Day of Month
+    ,                        !- Begin Year
+    12,                      !- End Month
+    31,                      !- End Day of Month
+    ,                        !- End Year
+    Tuesday,                 !- Day of Week for Start Day
+    Yes,                     !- Use Weather File Holidays and Special Days
+    Yes,                     !- Use Weather File Daylight Saving Period
+    No,                      !- Apply Weekend Holiday Rule
+    Yes,                     !- Use Weather File Rain Indicators
+    Yes;                     !- Use Weather File Snow Indicators
+
+  Site:Location,
+    Denver Centennial CO USA WMO=724666,  !- Name
+    39.74,                   !- Latitude {deg}
+    -105.18,                 !- Longitude {deg}
+    -7.00,                   !- Time Zone {hr}
+    1793.00;                 !- Elevation {m}
+
+ !  WMO=724666 Time Zone=NAM        (GMT-07:00) Mountain Time (US & Canada)
+ !  Data Source=ASHRAE 2009 Annual Design Conditions
+ ! Using Design Conditions from "Climate Design Data 2009 ASHRAE Handbook"
+ ! Denver Centennial CO USA Extreme Annual Wind Speeds, 1%=11.1m/s, 2.5%=9.5m/s, 5%=8.4m/s
+ ! Denver Centennial CO USA Extreme Annual Temperatures, Max Drybulb=-22.9°C Min Drybulb=36.1°C
+ ! Denver Centennial CO USA Annual Heating Design Conditions Wind Speed=3m/s Wind Dir=340
+ ! Coldest Month=December
+ ! Denver Centennial CO USA Annual Heating 99.6%, MaxDB=-18.8°C
+
+  SizingPeriod:DesignDay,
+    Denver Centennial Ann Htg 99.6% Condns DB,  !- Name
+    12,                      !- Month
+    21,                      !- Day of Month
+    WinterDesignDay,         !- Day Type
+    -18.8,                   !- Maximum Dry-Bulb Temperature {C}
+    0.0,                     !- Daily Dry-Bulb Temperature Range {deltaC}
+    ,                        !- Dry-Bulb Temperature Range Modifier Type
+    ,                        !- Dry-Bulb Temperature Range Modifier Day Schedule Name
+    Wetbulb,                 !- Humidity Condition Type
+    -18.8,                   !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}
+    ,                        !- Humidity Condition Day Schedule Name
+    ,                        !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}
+    ,                        !- Enthalpy at Maximum Dry-Bulb {J/kg}
+    ,                        !- Daily Wet-Bulb Temperature Range {deltaC}
+    81560.,                  !- Barometric Pressure {Pa}
+    3,                       !- Wind Speed {m/s}
+    340,                     !- Wind Direction {deg}
+    No,                      !- Rain Indicator
+    No,                      !- Snow Indicator
+    No,                      !- Daylight Saving Time Indicator
+    ASHRAEClearSky,          !- Solar Model Indicator
+    ,                        !- Beam Solar Day Schedule Name
+    ,                        !- Diffuse Solar Day Schedule Name
+    ,                        !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}
+    ,                        !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}
+    0.00;                    !- Sky Clearness
+
+ ! Denver Centennial Annual Cooling Design Conditions Wind Speed=4.9m/s Wind Dir=0
+ ! Hottest Month=July
+ ! Denver Centennial CO USA Annual Cooling (DB=>MWB) 1%, MaxDB=32°C MWB=15.5°C
+
+  SizingPeriod:DesignDay,
+    Denver Centennial Ann Clg 1% Condns DB=>MWB,  !- Name
+    7,                       !- Month
+    21,                      !- Day of Month
+    SummerDesignDay,         !- Day Type
+    32,                      !- Maximum Dry-Bulb Temperature {C}
+    15.2,                    !- Daily Dry-Bulb Temperature Range {deltaC}
+    ,                        !- Dry-Bulb Temperature Range Modifier Type
+    ,                        !- Dry-Bulb Temperature Range Modifier Day Schedule Name
+    Wetbulb,                 !- Humidity Condition Type
+    15.5,                    !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}
+    ,                        !- Humidity Condition Day Schedule Name
+    ,                        !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}
+    ,                        !- Enthalpy at Maximum Dry-Bulb {J/kg}
+    ,                        !- Daily Wet-Bulb Temperature Range {deltaC}
+    81560.,                  !- Barometric Pressure {Pa}
+    4.9,                     !- Wind Speed {m/s}
+    0,                       !- Wind Direction {deg}
+    No,                      !- Rain Indicator
+    No,                      !- Snow Indicator
+    No,                      !- Daylight Saving Time Indicator
+    ASHRAEClearSky,          !- Solar Model Indicator
+    ,                        !- Beam Solar Day Schedule Name
+    ,                        !- Diffuse Solar Day Schedule Name
+    ,                        !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}
+    ,                        !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}
+    1.00;                    !- Sky Clearness
+
+  Material:NoMass,
+    R13LAYER,                !- Name
+    Rough,                   !- Roughness
+    2.290965,                !- Thermal Resistance {m2-K/W}
+    0.9000000,               !- Thermal Absorptance
+    0.7500000,               !- Solar Absorptance
+    0.7500000;               !- Visible Absorptance
+
+  Material:NoMass,
+    R31LAYER,                !- Name
+    Rough,                   !- Roughness
+    5.456,                   !- Thermal Resistance {m2-K/W}
+    0.9000000,               !- Thermal Absorptance
+    0.7500000,               !- Solar Absorptance
+    0.7500000;               !- Visible Absorptance
+
+  Material,
+    C5 - 4 IN HW CONCRETE,   !- Name
+    MediumRough,             !- Roughness
+    0.1014984,               !- Thickness {m}
+    1.729577,                !- Conductivity {W/m-K}
+    2242.585,                !- Density {kg/m3}
+    836.8000,                !- Specific Heat {J/kg-K}
+    0.9000000,               !- Thermal Absorptance
+    0.6500000,               !- Solar Absorptance
+    0.6500000;               !- Visible Absorptance
+
+  Construction,
+    R13WALL,                 !- Name
+    R13LAYER;                !- Outside Layer
+
+  Construction,
+    FLOOR,                   !- Name
+    C5 - 4 IN HW CONCRETE;   !- Outside Layer
+
+  Construction,
+    ROOF31,                  !- Name
+    R31LAYER;                !- Outside Layer
+
+  Site:GroundTemperature:BuildingSurface,18.89,18.92,19.02,19.12,19.21,19.23,19.07,19.32,19.09,19.21,19.13,18.96;
+
+  Zone,
+    Main Zone,               !- Name
+    0,                       !- Direction of Relative North {deg}
+    0,                       !- X Origin {m}
+    0,                       !- Y Origin {m}
+    0,                       !- Z Origin {m}
+    1,                       !- Type
+    1,                       !- Multiplier
+    autocalculate,           !- Ceiling Height {m}
+    autocalculate;           !- Volume {m3}
+
+  ScheduleTypeLimits,
+    Fraction,                !- Name
+    0.0,                     !- Lower Limit Value
+    1.0,                     !- Upper Limit Value
+    CONTINUOUS;              !- Numeric Type
+
+  GlobalGeometryRules,
+    UpperLeftCorner,         !- Starting Vertex Position
+    CounterClockWise,        !- Vertex Entry Direction
+    World;                   !- Coordinate System
+
+  BuildingSurface:Detailed,
+    Zn001:Wall001,           !- Name
+    Wall,                    !- Surface Type
+    R13WALL,                 !- Construction Name
+    Main Zone,               !- Zone Name
+    ,                        !- Space Name
+    Outdoors,                !- Outside Boundary Condition
+    ,                        !- Outside Boundary Condition Object
+    SunExposed,              !- Sun Exposure
+    WindExposed,             !- Wind Exposure
+    0.5000000,               !- View Factor to Ground
+    4,                       !- Number of Vertices
+    0,0,4.572000,  !- X,Y,Z ==> Vertex 1 {m}
+    0,0,0,  !- X,Y,Z ==> Vertex 2 {m}
+    15.24000,0,0,  !- X,Y,Z ==> Vertex 3 {m}
+    15.24000,0,4.572000;  !- X,Y,Z ==> Vertex 4 {m}
+
+  BuildingSurface:Detailed,
+    Zn001:Wall002,           !- Name
+    Wall,                    !- Surface Type
+    R13WALL,                 !- Construction Name
+    Main Zone,               !- Zone Name
+    ,                        !- Space Name
+    Outdoors,                !- Outside Boundary Condition
+    ,                        !- Outside Boundary Condition Object
+    SunExposed,              !- Sun Exposure
+    WindExposed,             !- Wind Exposure
+    0.5000000,               !- View Factor to Ground
+    4,                       !- Number of Vertices
+    15.24000,0,4.572000,  !- X,Y,Z ==> Vertex 1 {m}
+    15.24000,0,0,  !- X,Y,Z ==> Vertex 2 {m}
+    15.24000,15.24000,0,  !- X,Y,Z ==> Vertex 3 {m}
+    15.24000,15.24000,4.572000;  !- X,Y,Z ==> Vertex 4 {m}
+
+  BuildingSurface:Detailed,
+    Zn001:Wall003,           !- Name
+    Wall,                    !- Surface Type
+    R13WALL,                 !- Construction Name
+    Main Zone,               !- Zone Name
+    ,                        !- Space Name
+    Outdoors,                !- Outside Boundary Condition
+    ,                        !- Outside Boundary Condition Object
+    SunExposed,              !- Sun Exposure
+    WindExposed,             !- Wind Exposure
+    0.5000000,               !- View Factor to Ground
+    4,                       !- Number of Vertices
+    15.24000,15.24000,4.572000,  !- X,Y,Z ==> Vertex 1 {m}
+    15.24000,15.24000,0,  !- X,Y,Z ==> Vertex 2 {m}
+    0,15.24000,0,  !- X,Y,Z ==> Vertex 3 {m}
+    0,15.24000,4.572000;  !- X,Y,Z ==> Vertex 4 {m}
+
+  BuildingSurface:Detailed,
+    Zn001:Wall004,           !- Name
+    Wall,                    !- Surface Type
+    R13WALL,                 !- Construction Name
+    Main Zone,               !- Zone Name
+    ,                        !- Space Name
+    Outdoors,                !- Outside Boundary Condition
+    ,                        !- Outside Boundary Condition Object
+    SunExposed,              !- Sun Exposure
+    WindExposed,             !- Wind Exposure
+    0.5000000,               !- View Factor to Ground
+    4,                       !- Number of Vertices
+    0,15.24000,4.572000,  !- X,Y,Z ==> Vertex 1 {m}
+    0,15.24000,0,  !- X,Y,Z ==> Vertex 2 {m}
+    0,0,0,  !- X,Y,Z ==> Vertex 3 {m}
+    0,0,4.572000;  !- X,Y,Z ==> Vertex 4 {m}
+
+  BuildingSurface:Detailed,
+    Zn001:Flr001,            !- Name
+    Floor,                   !- Surface Type
+    FLOOR,                   !- Construction Name
+    Main Zone,               !- Zone Name
+    ,                        !- Space Name
+    Surface,                 !- Outside Boundary Condition
+    Zn001:Flr001,            !- Outside Boundary Condition Object
+    NoSun,                   !- Sun Exposure
+    NoWind,                  !- Wind Exposure
+    1.000000,                !- View Factor to Ground
+    4,                       !- Number of Vertices
+    15.24000,0.000000,0.0,  !- X,Y,Z ==> Vertex 1 {m}
+    0.000000,0.000000,0.0,  !- X,Y,Z ==> Vertex 2 {m}
+    0.000000,15.24000,0.0,  !- X,Y,Z ==> Vertex 3 {m}
+    15.24000,15.24000,0.0;  !- X,Y,Z ==> Vertex 4 {m}
+
+  BuildingSurface:Detailed,
+    Zn001:Roof001,           !- Name
+    Roof,                    !- Surface Type
+    ROOF31,                  !- Construction Name
+    Main Zone,               !- Zone Name
+    ,                        !- Space Name
+    Outdoors,                !- Outside Boundary Condition
+    ,                        !- Outside Boundary Condition Object
+    SunExposed,              !- Sun Exposure
+    WindExposed,             !- Wind Exposure
+    0,                       !- View Factor to Ground
+    4,                       !- Number of Vertices
+    0.000000,15.24000,4.572,  !- X,Y,Z ==> Vertex 1 {m}
+    0.000000,0.000000,4.572,  !- X,Y,Z ==> Vertex 2 {m}
+    15.24000,0.000000,4.572,  !- X,Y,Z ==> Vertex 3 {m}
+    15.24000,15.24000,4.572;  !- X,Y,Z ==> Vertex 4 {m}
+
+  ZoneInfiltration:DesignFlowRate,
+    Main Zone Infiltration,  !- Name
+    Main Zone,               !- Zone or ZoneList Name
+    System Availability Schedule,  !- Schedule Name
+    Flow/Zone,               !- Design Flow Rate Calculation Method
+    0.02,                    !- Design Flow Rate {m3/s}
+    ,                        !- Flow per Zone Floor Area {m3/s-m2}
+    ,                        !- Flow per Exterior Surface Area {m3/s-m2}
+    ,                        !- Air Changes per Hour {1/hr}
+    1.0000,                  !- Constant Term Coefficient
+    0.0000,                  !- Temperature Term Coefficient
+    0.0000,                  !- Velocity Term Coefficient
+    0.0000;                  !- Velocity Squared Term Coefficient
+
+  ScheduleTypeLimits,
+    Any Number;              !- Name
+
+  Schedule:Compact,
+    System Availability Schedule,  !- Name
+    Any Number,              !- Schedule Type Limits Name
+    THROUGH: 12/31,          !- Field 1
+    FOR: AllDays,            !- Field 2
+    UNTIL: 24:00,1;          !- Field 3
+
+  Schedule:Compact,
+    Fan Availability Schedule,  !- Name
+    Any Number,              !- Schedule Type Limits Name
+    THROUGH: 12/31,          !- Field 1
+    FOR: AllDays,            !- Field 2
+    UNTIL: 12:00,1,          !- Field 3
+    UNTIL: 24:00,0;          !- Field 5
+
+  AirLoopHVAC,
+    Evap Cooler System,      !- Name
+    ,                        !- Controller List Name
+    Evap Cooler Availability List,  !- Availability Manager List Name
+    2.0,                     !- Design Supply Air Flow Rate {m3/s}
+    Air Loop Branches,       !- Branch List Name
+    ,                        !- Connector List Name
+    Supply Inlet Node,       !- Supply Side Inlet Node Name
+    Zone Equipment Outlet Node,  !- Demand Side Outlet Node Name
+    Zone Equipment Inlet Node,  !- Demand Side Inlet Node Names
+    Supply Outlet Node;      !- Supply Side Outlet Node Names
+
+  AvailabilityManagerAssignmentList,
+    Evap Cooler Availability List,  !- Name
+    AvailabilityManager:LowTemperatureTurnOff,  !- Availability Manager 1 Object Type
+    Low Temperature Turn Off Availability Manager,  !- Availability Manager 1 Name
+    AvailabilityManager:HighTemperatureTurnOn,  !- Availability Manager 2 Object Type
+    High Temperature Turn On Availability Manager;  !- Availability Manager 2 Name
+
+  AvailabilityManager:LowTemperatureTurnOff,
+    Low Temperature Turn Off Availability Manager,  !- Name
+    Main Zone Outlet Node,   !- Sensor Node Name
+    23.0;                    !- Temperature {C}
+
+  AvailabilityManager:HighTemperatureTurnOn,
+    High Temperature Turn On Availability Manager,  !- Name
+    Main Zone Outlet Node,   !- Sensor Node Name
+    27.0;                    !- Temperature {C}
+
+  BranchList,
+    Air Loop Branches,       !- Name
+    Air Loop Main Branch;    !- Branch 1 Name
+
+  Branch,
+    Air Loop Main Branch,    !- Name
+    ,                        !- Pressure Drop Curve Name
+    AirLoopHVAC:OutdoorAirSystem,  !- Component 1 Object Type
+    Outside Air System,      !- Component 1 Name
+    Supply Inlet Node,       !- Component 1 Inlet Node Name
+    Fan Inlet Node,          !- Component 1 Outlet Node Name
+    Fan:ConstantVolume,      !- Component 2 Object Type
+    Supply Fan,              !- Component 2 Name
+    Fan Inlet Node,          !- Component 2 Inlet Node Name
+    Evap Cooler Inlet Node,  !- Component 2 Outlet Node Name
+    EvaporativeCooler:Direct:CelDekPad,  !- Component 3 Object Type
+    Evaporative Cooler,      !- Component 3 Name
+    Evap Cooler Inlet Node,  !- Component 3 Inlet Node Name
+    Supply Outlet Node;      !- Component 3 Outlet Node Name
+
+  AirLoopHVAC:OutdoorAirSystem,
+    Outside Air System,      !- Name
+    Outside Air System Controllers,  !- Controller List Name
+    Outside Air System Equipment;  !- Outdoor Air Equipment List Name
+
+  OutdoorAir:Node,
+    Outside Air Inlet Node;  !- Name
+
+  AirLoopHVAC:ControllerList,
+    Outside Air System Controllers,  !- Name
+    Controller:OutdoorAir,   !- Controller 1 Object Type
+    Outside Air Controller;  !- Controller 1 Name
+
+  Controller:OutdoorAir,
+    Outside Air Controller,  !- Name
+    Relief Air Outlet Node,  !- Relief Air Outlet Node Name
+    Supply Inlet Node,       !- Return Air Node Name
+    Fan Inlet Node,          !- Mixed Air Node Name
+    Outside Air Inlet Node,  !- Actuator Node Name
+    2.0,                     !- Minimum Outdoor Air Flow Rate {m3/s}
+    2.0,                     !- Maximum Outdoor Air Flow Rate {m3/s}
+    NoEconomizer,            !- Economizer Control Type
+    ModulateFlow,            !- Economizer Control Action Type
+    19.,                     !- Economizer Maximum Limit Dry-Bulb Temperature {C}
+    ,                        !- Economizer Maximum Limit Enthalpy {J/kg}
+    ,                        !- Economizer Maximum Limit Dewpoint Temperature {C}
+    ,                        !- Electronic Enthalpy Limit Curve Name
+    4.,                      !- Economizer Minimum Limit Dry-Bulb Temperature {C}
+    NoLockout,               !- Lockout Type
+    FixedMinimum;            !- Minimum Limit Type
+
+  AirLoopHVAC:OutdoorAirSystem:EquipmentList,
+    Outside Air System Equipment,  !- Name
+    OutdoorAir:Mixer,        !- Component 1 Object Type
+    Outside Air Mixing Box;  !- Component 1 Name
+
+  OutdoorAir:Mixer,
+    Outside Air Mixing Box,  !- Name
+    Fan Inlet Node,          !- Mixed Air Node Name
+    Outside Air Inlet Node,  !- Outdoor Air Stream Node Name
+    Relief Air Outlet Node,  !- Relief Air Stream Node Name
+    Supply Inlet Node;       !- Return Air Stream Node Name
+
+  Fan:ConstantVolume,
+    Supply Fan,              !- Name
+    Fan Availability Schedule,  !- Availability Schedule Name
+    0.7,                     !- Fan Total Efficiency
+    600.0,                   !- Pressure Rise {Pa}
+    2.0,                     !- Maximum Flow Rate {m3/s}
+    0.9,                     !- Motor Efficiency
+    1.0,                     !- Motor In Airstream Fraction
+    Fan Inlet Node,          !- Air Inlet Node Name
+    Evap Cooler Inlet Node;  !- Air Outlet Node Name
+
+  EvaporativeCooler:Direct:CelDekPad,
+    Evaporative Cooler,      !- Name
+    System Availability Schedule,  !- Availability Schedule Name
+    0.6,                     !- Direct Pad Area {m2}
+    0.2,                     !- Direct Pad Depth {m}
+    225,                     !- Recirculating Water Pump Power Consumption {W}
+    Evap Cooler Inlet Node,  !- Air Inlet Node Name
+    Supply Outlet Node,      !- Air Outlet Node Name
+    CONSTANT;                !- Control Type
+
+  AirLoopHVAC:SupplyPath,
+    Zone Supply Air Path,    !- Name
+    Zone Equipment Inlet Node,  !- Supply Air Path Inlet Node Name
+    AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type
+    Zone Supply Air Splitter;!- Component 1 Name
+
+  AirLoopHVAC:ZoneSplitter,
+    Zone Supply Air Splitter,!- Name
+    Zone Equipment Inlet Node,  !- Inlet Node Name
+    Main Zone Inlet Node ATInlet;  !- Outlet 1 Node Name
+
+  AirLoopHVAC:ReturnPath,
+    Zone Return Air Path,    !- Name
+    Zone Equipment Outlet Node,  !- Return Air Path Outlet Node Name
+    AirLoopHVAC:ZoneMixer,   !- Component 1 Object Type
+    Zone Return Air Mixer;   !- Component 1 Name
+
+  AirLoopHVAC:ZoneMixer,
+    Zone Return Air Mixer,   !- Name
+    Zone Equipment Outlet Node,  !- Outlet Node Name
+    Main Zone Outlet Node;   !- Inlet 1 Node Name
+
+  ZoneHVAC:EquipmentConnections,
+    Main Zone,               !- Zone Name
+    Main Zone Equipment,     !- Zone Conditioning Equipment List Name
+    Main Zone Inlet Node,    !- Zone Air Inlet Node or NodeList Name
+    ,                        !- Zone Air Exhaust Node or NodeList Name
+    Main Zone Node,          !- Zone Air Node Name
+    Main Zone Outlet Node;   !- Zone Return Air Node or NodeList Name
+
+  ZoneHVAC:EquipmentList,
+    Main Zone Equipment,     !- Name
+    SequentialLoad,          !- Load Distribution Scheme
+    ZoneHVAC:AirDistributionUnit,  !- Zone Equipment 1 Object Type
+    Main Zone Direct Air ADU,!- Zone Equipment 1 Name
+    1,                       !- Zone Equipment 1 Cooling Sequence
+    2,                       !- Zone Equipment 1 Heating or No-Load Sequence
+    ,                        !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name
+    ,                        !- Zone Equipment 1 Sequential Heating Fraction Schedule Name
+    ZoneHVAC:Baseboard:Convective:Electric,  !- Zone Equipment 2 Object Type
+    Main Zone Baseboard,     !- Zone Equipment 2 Name
+    2,                       !- Zone Equipment 2 Cooling Sequence
+    1,                       !- Zone Equipment 2 Heating or No-Load Sequence
+    ,                        !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name
+    ;                        !- Zone Equipment 2 Sequential Heating Fraction Schedule Name
+
+  AirTerminal:SingleDuct:ConstantVolume:NoReheat,
+    Main Zone Direct Air,    !- Name
+    System Availability Schedule,  !- Availability Schedule Name
+    Main Zone Inlet Node ATInlet,  !- Air Inlet Node Name
+    Main Zone Inlet Node,    !- Air Outlet Node Name
+    1.5,                     !- Maximum Air Flow Rate {m3/s}
+    ,                        !- Design Specification Outdoor Air Object Name
+    ;                        !- Per Person Ventilation Rate Mode
+
+  ZoneHVAC:AirDistributionUnit,
+    Main Zone Direct Air ADU,!- Name
+    Main Zone Inlet Node,    !- Air Distribution Unit Outlet Node Name
+    AirTerminal:SingleDuct:ConstantVolume:NoReheat,  !- Air Terminal Object Type
+    Main Zone Direct Air,    !- Air Terminal Name
+    ,                        !- Nominal Upstream Leakage Fraction
+    ,                        !- Constant Downstream Leakage Fraction
+    ;                        !- Design Specification Air Terminal Sizing Object Name
+
+  ZoneHVAC:Baseboard:Convective:Electric,
+    Main Zone Baseboard,     !- Name
+    System Availability Schedule,  !- Availability Schedule Name
+    HeatingDesignCapacity,   !- Heating Design Capacity Method
+    8000,                    !- Heating Design Capacity {W}
+    ,                        !- Heating Design Capacity Per Floor Area {W/m2}
+    ,                        !- Fraction of Autosized Heating Design Capacity
+    0.97;                    !- Efficiency
+
+  ZoneControl:Thermostat,
+    Main Zone Thermostat,    !- Name
+    Main Zone,               !- Zone or ZoneList Name
+    Zone Control Type Sched, !- Control Type Schedule Name
+    ThermostatSetpoint:SingleHeating,  !- Control 1 Object Type
+    Heating Setpoint;        !- Control 1 Name
+
+  Schedule:Compact,
+    Zone Control Type Sched, !- Name
+    Any Number,              !- Schedule Type Limits Name
+    Through: 12/31,          !- Field 1
+    For: AllDays,            !- Field 2
+    Until: 24:00,1;          !- Field 3
+
+  ThermostatSetpoint:SingleHeating,
+    Heating Setpoint,        !- Name
+    Heating Setpoint Schedule;  !- Setpoint Temperature Schedule Name
+
+  Schedule:Compact,
+    Heating Setpoint Schedule,  !- Name
+    Any Number,              !- Schedule Type Limits Name
+    Through: 12/31,          !- Field 1
+    For: AllDays,            !- Field 2
+    Until: 24:00,20.0;       !- Field 3
+
+  Output:VariableDictionary,Regular;
+
+  Output:Surfaces:Drawing,DXF;
+
+  Output:Constructions,Constructions;
+
+  Output:Variable,*,Site Outdoor Air Drybulb Temperature,hourly;
+
+  Output:Variable,*,Site Outdoor Air Wetbulb Temperature,hourly;
+
+  Output:Variable,*,Site Outdoor Air Humidity Ratio,hourly;
+
+  Output:Variable,*,Site Outdoor Air Relative Humidity,hourly;
+
+  Output:Variable,*,Zone Mean Air Temperature,Annual;
+
+  Output:Variable,*,Zone Mean Air Temperature,RunPeriod;
+
+  Output:Variable,*,Zone Mean Air Temperature,Environment;
+
+  Output:Variable,*,Zone Mean Air Temperature,Monthly;
+
+  Output:Variable,*,Zone Mean Air Temperature,Daily;
+
+  Output:Variable,*,Zone Mean Air Temperature,Hourly;
+
+  Output:Variable,*,Zone Mean Air Temperature,Timestep;
+
+  Output:Variable,*,Zone Mean Air Temperature,Detailed;
+
+  Output:Variable,Supply Outlet Node,System Node Mass Flow Rate,hourly;
+
+  Output:Variable,*,System Node Temperature,hourly;
+
+  Output:Variable,*,Baseboard Electricity Rate,hourly;
+
+  Output:Meter:MeterFileOnly,Electricity:Facility,monthly;
+
+  Output:Meter:MeterFileOnly,Electricity:HVAC,monthly;
+
+  Output:Meter:MeterFileOnly,Electricity:Facility,runperiod;
+
+  Output:Meter:MeterFileOnly,Electricity:HVAC,runperiod;
+
+  OutputControl:Table:Style,
+    TabAndHTML;              !- Column Separator
+
+  Output:Table:SummaryReports,
+    AllSummary;              !- Report 1 Name
+
+  Output:SQLite,
+    SimpleAndTabular;        !- Option Type
+
diff --git a/resources/utilities/SqlFile/1ZoneEvapCooler-V22-1-0.sql b/resources/utilities/SqlFile/1ZoneEvapCooler-V22-1-0.sql
new file mode 100644
index 00000000000..0a0c44095b2
Binary files /dev/null and b/resources/utilities/SqlFile/1ZoneEvapCooler-V22-1-0.sql differ
diff --git a/resources/utilities/SqlFile/1ZoneEvapCooler-V9-6-0-IOFreeze.idf b/resources/utilities/SqlFile/1ZoneEvapCooler-V9-6-0.idf
similarity index 100%
rename from resources/utilities/SqlFile/1ZoneEvapCooler-V9-6-0-IOFreeze.idf
rename to resources/utilities/SqlFile/1ZoneEvapCooler-V9-6-0.idf
diff --git a/resources/utilities/SqlFile/update_all.sh b/resources/utilities/SqlFile/update_all.sh
index a47864122e5..4096451ef60 100755
--- a/resources/utilities/SqlFile/update_all.sh
+++ b/resources/utilities/SqlFile/update_all.sh
@@ -5,8 +5,8 @@ token=
 curl_token="-H \"Authorization: token $token\""
 
 # All versions you want to run
-# declare -a all_versions=("8.5.0" "8.6.0" "8.7.0" "8.8.0" "8.9.0" "9.0.1" "9.1.0" "9.2.0" "9.3.0", "9.4.0", "9.5.0")
-declare -a all_versions=("9.6.0-IOFreeze")
+# declare -a all_versions=("8.5.0" "8.6.0" "8.7.0" "8.8.0" "8.9.0" "9.0.1" "9.1.0" "9.2.0" "9.3.0", "9.4.0", "9.5.0", "9.6.0")
+declare -a all_versions=("22.1.0-IOFreeze")
 
 # DO NOT RERUN IF SQL ALREADY THERE
 rerun_if_already_there=false
diff --git a/src/energyplus/ForwardTranslator.hpp b/src/energyplus/ForwardTranslator.hpp
index 82da2877ca7..935b7dd9295 100644
--- a/src/energyplus/ForwardTranslator.hpp
+++ b/src/energyplus/ForwardTranslator.hpp
@@ -503,7 +503,7 @@ namespace energyplus {
 
   ENERGYPLUS_API std::ostream& operator<<(std::ostream& out, const openstudio::energyplus::ForwardTranslatorOptionKeyMethod& opt);
 
-#define ENERGYPLUS_VERSION "9.6"
+#define ENERGYPLUS_VERSION "22.1"
 
   class ENERGYPLUS_API ForwardTranslator
   {
diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateScheduleFile.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateScheduleFile.cpp
index 0ce08ca2d6c..e7dc7866f7c 100644
--- a/src/energyplus/ForwardTranslator/ForwardTranslateScheduleFile.cpp
+++ b/src/energyplus/ForwardTranslator/ForwardTranslateScheduleFile.cpp
@@ -99,6 +99,12 @@ namespace energyplus {
       idfObject.setString(openstudio::Schedule_FileFields::MinutesperItem, modelObject.minutesperItem().get());
     }
 
+    if (modelObject.adjustScheduleforDaylightSavings()) {
+      idfObject.setString(openstudio::Schedule_FileFields::AdjustScheduleforDaylightSavings, "Yes");
+    } else {
+      idfObject.setString(openstudio::Schedule_FileFields::AdjustScheduleforDaylightSavings, "No");
+    }
+
     m_idfObjects.push_back(idfObject);
     return idfObject;
   }
diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateWindowPropertyFrameAndDivider.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateWindowPropertyFrameAndDivider.cpp
index 697ef6293d4..e06f2ffb52f 100644
--- a/src/energyplus/ForwardTranslator/ForwardTranslateWindowPropertyFrameAndDivider.cpp
+++ b/src/energyplus/ForwardTranslator/ForwardTranslateWindowPropertyFrameAndDivider.cpp
@@ -155,6 +155,11 @@ namespace energyplus {
     idfObject.setDouble(WindowProperty_FrameAndDividerFields::InsideRevealSolarAbsorptance, modelObject.insideRevealSolarAbsorptance());
     //}
 
+    //if (!modelObject.isNFRCProductTypeforAssemblyCalculationsDefaulted()){
+    idfObject.setString(WindowProperty_FrameAndDividerFields::NFRCProductTypeforAssemblyCalculations,
+                        modelObject.nfrcProductTypeforAssemblyCalculations());
+    //}
+
     return idfObject;
   }
 
diff --git a/src/energyplus/ReverseTranslator/ReverseTranslateScheduleFile.cpp b/src/energyplus/ReverseTranslator/ReverseTranslateScheduleFile.cpp
index 888f90e2328..de0beaa0353 100644
--- a/src/energyplus/ReverseTranslator/ReverseTranslateScheduleFile.cpp
+++ b/src/energyplus/ReverseTranslator/ReverseTranslateScheduleFile.cpp
@@ -84,15 +84,20 @@ namespace energyplus {
       scheduleFile.setColumnSeparator(*os);
     }
 
-    OptionalString os = workspaceObject.getString(Schedule_FileFields::InterpolatetoTimestep);
-    if (os) {
-      if (openstudio::istringEqual("Yes", os.get())) {
+    if (OptionalString os = workspaceObject.getString(Schedule_FileFields::InterpolatetoTimestep)) {
+      if (openstudio::istringEqual("Yes", *os)) {
         scheduleFile.setInterpolatetoTimestep(true);
       }
     }
 
     if (OptionalInt oi = workspaceObject.getInt(Schedule_FileFields::MinutesperItem)) {
-      scheduleFile.setMinutesperItem(oi.get());
+      scheduleFile.setMinutesperItem(*oi);
+    }
+
+    if (OptionalString os = workspaceObject.getString(Schedule_FileFields::AdjustScheduleforDaylightSavings)) {
+      if (openstudio::istringEqual("Yes", *os)) {
+        scheduleFile.setAdjustScheduleforDaylightSavings(true);
+      }
     }
 
     return scheduleFile;
diff --git a/src/energyplus/ReverseTranslator/ReverseTranslateWindowPropertyFrameAndDivider.cpp b/src/energyplus/ReverseTranslator/ReverseTranslateWindowPropertyFrameAndDivider.cpp
index 9902e28a7e4..a1a7d9d209f 100644
--- a/src/energyplus/ReverseTranslator/ReverseTranslateWindowPropertyFrameAndDivider.cpp
+++ b/src/energyplus/ReverseTranslator/ReverseTranslateWindowPropertyFrameAndDivider.cpp
@@ -177,6 +177,11 @@ namespace energyplus {
       result.setInsideRevealSolarAbsorptance(*d);
     }
 
+    s = workspaceObject.getString(WindowProperty_FrameAndDividerFields::NFRCProductTypeforAssemblyCalculations);
+    if (s) {
+      result.setNFRCProductTypeforAssemblyCalculations(*s);
+    }
+
     return result;
   }
 
diff --git a/src/model/CoolingTowerSingleSpeed.cpp b/src/model/CoolingTowerSingleSpeed.cpp
index 8e5a284e808..f162ecebf57 100644
--- a/src/model/CoolingTowerSingleSpeed.cpp
+++ b/src/model/CoolingTowerSingleSpeed.cpp
@@ -252,8 +252,10 @@ namespace model {
       return getObject<ModelObject>().getModelObjectTarget<Schedule>(OS_CoolingTower_SingleSpeedFields::BasinHeaterOperatingScheduleName);
     }
 
-    boost::optional<std::string> CoolingTowerSingleSpeed_Impl::evaporationLossMode() const {
-      return getString(OS_CoolingTower_SingleSpeedFields::EvaporationLossMode, true);
+    std::string CoolingTowerSingleSpeed_Impl::evaporationLossMode() const {
+      boost::optional<std::string> value = getString(OS_CoolingTower_SingleSpeedFields::EvaporationLossMode, true);
+      OS_ASSERT(value);
+      return value.get();
     }
 
     bool CoolingTowerSingleSpeed_Impl::isEvaporationLossModeDefaulted() const {
@@ -280,8 +282,10 @@ namespace model {
       return isEmpty(OS_CoolingTower_SingleSpeedFields::DriftLossPercent);
     }
 
-    boost::optional<std::string> CoolingTowerSingleSpeed_Impl::blowdownCalculationMode() const {
-      return getString(OS_CoolingTower_SingleSpeedFields::BlowdownCalculationMode, true);
+    std::string CoolingTowerSingleSpeed_Impl::blowdownCalculationMode() const {
+      boost::optional<std::string> value = getString(OS_CoolingTower_SingleSpeedFields::BlowdownCalculationMode, true);
+      OS_ASSERT(value);
+      return value.get();
     }
 
     bool CoolingTowerSingleSpeed_Impl::isBlowdownCalculationModeDefaulted() const {
@@ -1126,7 +1130,7 @@ namespace model {
     return getImpl<detail::CoolingTowerSingleSpeed_Impl>()->basinHeaterOperatingSchedule();
   }
 
-  boost::optional<std::string> CoolingTowerSingleSpeed::evaporationLossMode() const {
+  std::string CoolingTowerSingleSpeed::evaporationLossMode() const {
     return getImpl<detail::CoolingTowerSingleSpeed_Impl>()->evaporationLossMode();
   }
 
@@ -1150,7 +1154,7 @@ namespace model {
     return getImpl<detail::CoolingTowerSingleSpeed_Impl>()->isDriftLossPercentDefaulted();
   }
 
-  boost::optional<std::string> CoolingTowerSingleSpeed::blowdownCalculationMode() const {
+  std::string CoolingTowerSingleSpeed::blowdownCalculationMode() const {
     return getImpl<detail::CoolingTowerSingleSpeed_Impl>()->blowdownCalculationMode();
   }
 
diff --git a/src/model/CoolingTowerSingleSpeed.hpp b/src/model/CoolingTowerSingleSpeed.hpp
index e26dba6e079..8bf42d79499 100644
--- a/src/model/CoolingTowerSingleSpeed.hpp
+++ b/src/model/CoolingTowerSingleSpeed.hpp
@@ -120,7 +120,7 @@ namespace model {
 
     boost::optional<Schedule> basinHeaterOperatingSchedule() const;
 
-    boost::optional<std::string> evaporationLossMode() const;
+    std::string evaporationLossMode() const;
 
     bool isEvaporationLossModeDefaulted() const;
 
@@ -132,7 +132,7 @@ namespace model {
 
     bool isDriftLossPercentDefaulted() const;
 
-    boost::optional<std::string> blowdownCalculationMode() const;
+    std::string blowdownCalculationMode() const;
 
     bool isBlowdownCalculationModeDefaulted() const;
 
diff --git a/src/model/CoolingTowerSingleSpeed_Impl.hpp b/src/model/CoolingTowerSingleSpeed_Impl.hpp
index da1e8746b9d..9d62aa1a460 100644
--- a/src/model/CoolingTowerSingleSpeed_Impl.hpp
+++ b/src/model/CoolingTowerSingleSpeed_Impl.hpp
@@ -123,7 +123,7 @@ namespace model {
 
       boost::optional<Schedule> basinHeaterOperatingSchedule() const;
 
-      boost::optional<std::string> evaporationLossMode() const;
+      std::string evaporationLossMode() const;
 
       bool isEvaporationLossModeDefaulted() const;
 
@@ -135,7 +135,7 @@ namespace model {
 
       bool isDriftLossPercentDefaulted() const;
 
-      boost::optional<std::string> blowdownCalculationMode() const;
+      std::string blowdownCalculationMode() const;
 
       bool isBlowdownCalculationModeDefaulted() const;
 
diff --git a/src/model/CoolingTowerTwoSpeed.cpp b/src/model/CoolingTowerTwoSpeed.cpp
index 4bf5ffa17f6..3de4ebeef78 100644
--- a/src/model/CoolingTowerTwoSpeed.cpp
+++ b/src/model/CoolingTowerTwoSpeed.cpp
@@ -404,8 +404,10 @@ namespace model {
       return getObject<ModelObject>().getModelObjectTarget<Schedule>(OS_CoolingTower_TwoSpeedFields::BasinHeaterOperatingScheduleName);
     }
 
-    boost::optional<std::string> CoolingTowerTwoSpeed_Impl::evaporationLossMode() const {
-      return getString(OS_CoolingTower_TwoSpeedFields::EvaporationLossMode, true);
+    std::string CoolingTowerTwoSpeed_Impl::evaporationLossMode() const {
+      boost::optional<std::string> value = getString(OS_CoolingTower_TwoSpeedFields::EvaporationLossMode, true);
+      OS_ASSERT(value);
+      return value.get();
     }
 
     bool CoolingTowerTwoSpeed_Impl::isEvaporationLossModeDefaulted() const {
@@ -432,8 +434,10 @@ namespace model {
       return isEmpty(OS_CoolingTower_TwoSpeedFields::DriftLossPercent);
     }
 
-    boost::optional<std::string> CoolingTowerTwoSpeed_Impl::blowdownCalculationMode() const {
-      return getString(OS_CoolingTower_TwoSpeedFields::BlowdownCalculationMode, true);
+    std::string CoolingTowerTwoSpeed_Impl::blowdownCalculationMode() const {
+      boost::optional<std::string> value = getString(OS_CoolingTower_TwoSpeedFields::BlowdownCalculationMode, true);
+      OS_ASSERT(value);
+      return value.get();
     }
 
     bool CoolingTowerTwoSpeed_Impl::isBlowdownCalculationModeDefaulted() const {
@@ -1446,7 +1450,7 @@ namespace model {
     return getImpl<detail::CoolingTowerTwoSpeed_Impl>()->basinHeaterOperatingSchedule();
   }
 
-  boost::optional<std::string> CoolingTowerTwoSpeed::evaporationLossMode() const {
+  std::string CoolingTowerTwoSpeed::evaporationLossMode() const {
     return getImpl<detail::CoolingTowerTwoSpeed_Impl>()->evaporationLossMode();
   }
 
@@ -1470,7 +1474,7 @@ namespace model {
     return getImpl<detail::CoolingTowerTwoSpeed_Impl>()->isDriftLossPercentDefaulted();
   }
 
-  boost::optional<std::string> CoolingTowerTwoSpeed::blowdownCalculationMode() const {
+  std::string CoolingTowerTwoSpeed::blowdownCalculationMode() const {
     return getImpl<detail::CoolingTowerTwoSpeed_Impl>()->blowdownCalculationMode();
   }
 
diff --git a/src/model/CoolingTowerTwoSpeed.hpp b/src/model/CoolingTowerTwoSpeed.hpp
index ddbd8643992..9c883c67dcd 100644
--- a/src/model/CoolingTowerTwoSpeed.hpp
+++ b/src/model/CoolingTowerTwoSpeed.hpp
@@ -167,7 +167,7 @@ namespace model {
 
     boost::optional<Schedule> basinHeaterOperatingSchedule() const;
 
-    boost::optional<std::string> evaporationLossMode() const;
+    std::string evaporationLossMode() const;
 
     bool isEvaporationLossModeDefaulted() const;
 
@@ -179,7 +179,7 @@ namespace model {
 
     bool isDriftLossPercentDefaulted() const;
 
-    boost::optional<std::string> blowdownCalculationMode() const;
+    std::string blowdownCalculationMode() const;
 
     bool isBlowdownCalculationModeDefaulted() const;
 
diff --git a/src/model/CoolingTowerTwoSpeed_Impl.hpp b/src/model/CoolingTowerTwoSpeed_Impl.hpp
index 079f3575df1..f1898d4e874 100644
--- a/src/model/CoolingTowerTwoSpeed_Impl.hpp
+++ b/src/model/CoolingTowerTwoSpeed_Impl.hpp
@@ -175,7 +175,7 @@ namespace model {
 
       boost::optional<Schedule> basinHeaterOperatingSchedule() const;
 
-      boost::optional<std::string> evaporationLossMode() const;
+      std::string evaporationLossMode() const;
 
       bool isEvaporationLossModeDefaulted() const;
 
@@ -187,7 +187,7 @@ namespace model {
 
       bool isDriftLossPercentDefaulted() const;
 
-      boost::optional<std::string> blowdownCalculationMode() const;
+      std::string blowdownCalculationMode() const;
 
       bool isBlowdownCalculationModeDefaulted() const;
 
diff --git a/src/model/CoolingTowerVariableSpeed.cpp b/src/model/CoolingTowerVariableSpeed.cpp
index 6f3f00c142f..e0806a6e6e1 100644
--- a/src/model/CoolingTowerVariableSpeed.cpp
+++ b/src/model/CoolingTowerVariableSpeed.cpp
@@ -236,8 +236,10 @@ namespace model {
       return getObject<ModelObject>().getModelObjectTarget<Schedule>(OS_CoolingTower_VariableSpeedFields::BasinHeaterOperatingSchedule);
     }
 
-    boost::optional<std::string> CoolingTowerVariableSpeed_Impl::evaporationLossMode() const {
-      return getString(OS_CoolingTower_VariableSpeedFields::EvaporationLossMode, true);
+    std::string CoolingTowerVariableSpeed_Impl::evaporationLossMode() const {
+      boost::optional<std::string> value = getString(OS_CoolingTower_VariableSpeedFields::EvaporationLossMode, true);
+      OS_ASSERT(value);
+      return value.get();
     }
 
     bool CoolingTowerVariableSpeed_Impl::isEvaporationLossModeDefaulted() const {
@@ -258,8 +260,10 @@ namespace model {
       return getDouble(OS_CoolingTower_VariableSpeedFields::DriftLossPercent, true);
     }
 
-    boost::optional<std::string> CoolingTowerVariableSpeed_Impl::blowdownCalculationMode() const {
-      return getString(OS_CoolingTower_VariableSpeedFields::BlowdownCalculationMode, true);
+    std::string CoolingTowerVariableSpeed_Impl::blowdownCalculationMode() const {
+      boost::optional<std::string> value = getString(OS_CoolingTower_VariableSpeedFields::BlowdownCalculationMode, true);
+      OS_ASSERT(value);
+      return value.get();
     }
 
     bool CoolingTowerVariableSpeed_Impl::isBlowdownCalculationModeDefaulted() const {
@@ -278,8 +282,10 @@ namespace model {
       return getInt(OS_CoolingTower_VariableSpeedFields::NumberofCells, true);
     }
 
-    boost::optional<std::string> CoolingTowerVariableSpeed_Impl::cellControl() const {
-      return getString(OS_CoolingTower_VariableSpeedFields::CellControl, true);
+    std::string CoolingTowerVariableSpeed_Impl::cellControl() const {
+      boost::optional<std::string> value = getString(OS_CoolingTower_VariableSpeedFields::CellControl, true);
+      OS_ASSERT(value);
+      return value.get();
     }
 
     bool CoolingTowerVariableSpeed_Impl::isCellControlDefaulted() const {
@@ -865,7 +871,7 @@ namespace model {
     return getImpl<detail::CoolingTowerVariableSpeed_Impl>()->basinHeaterOperatingSchedule();
   }
 
-  boost::optional<std::string> CoolingTowerVariableSpeed::evaporationLossMode() const {
+  std::string CoolingTowerVariableSpeed::evaporationLossMode() const {
     return getImpl<detail::CoolingTowerVariableSpeed_Impl>()->evaporationLossMode();
   }
 
@@ -885,7 +891,7 @@ namespace model {
     return getImpl<detail::CoolingTowerVariableSpeed_Impl>()->driftLossPercent();
   }
 
-  boost::optional<std::string> CoolingTowerVariableSpeed::blowdownCalculationMode() const {
+  std::string CoolingTowerVariableSpeed::blowdownCalculationMode() const {
     return getImpl<detail::CoolingTowerVariableSpeed_Impl>()->blowdownCalculationMode();
   }
 
@@ -905,7 +911,7 @@ namespace model {
     return getImpl<detail::CoolingTowerVariableSpeed_Impl>()->numberofCells();
   }
 
-  boost::optional<std::string> CoolingTowerVariableSpeed::cellControl() const {
+  std::string CoolingTowerVariableSpeed::cellControl() const {
     return getImpl<detail::CoolingTowerVariableSpeed_Impl>()->cellControl();
   }
 
diff --git a/src/model/CoolingTowerVariableSpeed.hpp b/src/model/CoolingTowerVariableSpeed.hpp
index 3cd345be35a..ef8cba35c80 100644
--- a/src/model/CoolingTowerVariableSpeed.hpp
+++ b/src/model/CoolingTowerVariableSpeed.hpp
@@ -158,7 +158,7 @@ namespace model {
 
     void resetBasinHeaterOperatingSchedule();
 
-    boost::optional<std::string> evaporationLossMode() const;
+    std::string evaporationLossMode() const;
 
     bool isEvaporationLossModeDefaulted() const;
 
@@ -180,7 +180,7 @@ namespace model {
 
     void resetDriftLossPercent();
 
-    boost::optional<std::string> blowdownCalculationMode() const;
+    std::string blowdownCalculationMode() const;
 
     bool isBlowdownCalculationModeDefaulted() const;
 
@@ -206,7 +206,7 @@ namespace model {
 
     void resetNumberofCells();
 
-    boost::optional<std::string> cellControl() const;
+    std::string cellControl() const;
 
     bool isCellControlDefaulted() const;
 
diff --git a/src/model/CoolingTowerVariableSpeed_Impl.hpp b/src/model/CoolingTowerVariableSpeed_Impl.hpp
index 6afe25365d3..d2421b74cdb 100644
--- a/src/model/CoolingTowerVariableSpeed_Impl.hpp
+++ b/src/model/CoolingTowerVariableSpeed_Impl.hpp
@@ -109,7 +109,7 @@ namespace model {
 
       boost::optional<Schedule> basinHeaterOperatingSchedule() const;
 
-      boost::optional<std::string> evaporationLossMode() const;
+      std::string evaporationLossMode() const;
 
       bool isEvaporationLossModeDefaulted() const;
 
@@ -119,7 +119,7 @@ namespace model {
 
       boost::optional<double> driftLossPercent() const;
 
-      boost::optional<std::string> blowdownCalculationMode() const;
+      std::string blowdownCalculationMode() const;
 
       bool isBlowdownCalculationModeDefaulted() const;
 
@@ -129,7 +129,7 @@ namespace model {
 
       boost::optional<int> numberofCells() const;
 
-      boost::optional<std::string> cellControl() const;
+      std::string cellControl() const;
 
       bool isCellControlDefaulted() const;
 
diff --git a/src/model/PlantLoop.cpp b/src/model/PlantLoop.cpp
index fd3ebae8e1a..e9caa402c5f 100644
--- a/src/model/PlantLoop.cpp
+++ b/src/model/PlantLoop.cpp
@@ -789,7 +789,6 @@ namespace model {
 
     bool PlantLoop_Impl::setMaximumLoopTemperature(double value) {
       return setDouble(OS_PlantLoopFields::MaximumLoopTemperature, value);
-      ;
     }
 
     double PlantLoop_Impl::minimumLoopTemperature() {
@@ -798,7 +797,6 @@ namespace model {
 
     bool PlantLoop_Impl::setMinimumLoopTemperature(double value) {
       return setDouble(OS_PlantLoopFields::MinimumLoopTemperature, value);
-      ;
     }
 
     boost::optional<double> PlantLoop_Impl::maximumLoopFlowRate() {
@@ -807,7 +805,6 @@ namespace model {
 
     bool PlantLoop_Impl::setMaximumLoopFlowRate(double value) {
       return setDouble(OS_PlantLoopFields::MaximumLoopFlowRate, value);
-      ;
     }
 
     bool PlantLoop_Impl::isMaximumLoopFlowRateAutosized() {
@@ -820,7 +817,8 @@ namespace model {
     }
 
     void PlantLoop_Impl::autosizeMaximumLoopFlowRate() {
-      setString(OS_PlantLoopFields::MaximumLoopFlowRate, "Autosize");
+      bool result = setString(OS_PlantLoopFields::MaximumLoopFlowRate, "Autosize");
+      OS_ASSERT(result);
     }
 
     boost::optional<double> PlantLoop_Impl::minimumLoopFlowRate() {
@@ -829,7 +827,6 @@ namespace model {
 
     bool PlantLoop_Impl::setMinimumLoopFlowRate(double value) {
       return setDouble(OS_PlantLoopFields::MinimumLoopFlowRate, value);
-      ;
     }
 
     bool PlantLoop_Impl::isMinimumLoopFlowRateAutosized() {
@@ -842,7 +839,8 @@ namespace model {
     }
 
     void PlantLoop_Impl::autosizeMinimumLoopFlowRate() {
-      setString(OS_PlantLoopFields::MinimumLoopFlowRate, "Autosize");
+      bool result = setString(OS_PlantLoopFields::MinimumLoopFlowRate, "Autosize");
+      OS_ASSERT(result);
     }
 
     boost::optional<double> PlantLoop_Impl::plantLoopVolume() {
@@ -851,7 +849,6 @@ namespace model {
 
     bool PlantLoop_Impl::setPlantLoopVolume(double value) {
       return setDouble(OS_PlantLoopFields::PlantLoopVolume, value);
-      ;
     }
 
     bool PlantLoop_Impl::isPlantLoopVolumeAutocalculated() {
@@ -864,7 +861,8 @@ namespace model {
     }
 
     void PlantLoop_Impl::autocalculatePlantLoopVolume() {
-      setString(OS_PlantLoopFields::PlantLoopVolume, "Autocalculate");
+      bool result = setString(OS_PlantLoopFields::PlantLoopVolume, "Autocalculate");
+      OS_ASSERT(result);
     }
 
     std::string PlantLoop_Impl::fluidType() {
@@ -881,7 +879,6 @@ namespace model {
 
     bool PlantLoop_Impl::setGlycolConcentration(int glycolConcentration) {
       return setInt(OS_PlantLoopFields::GlycolConcentration, glycolConcentration);
-      ;
     }
 
     Node PlantLoop_Impl::loopTemperatureSetpointNode() {
@@ -929,8 +926,14 @@ namespace model {
       }
     }
 
-    boost::optional<std::string> PlantLoop_Impl::commonPipeSimulation() const {
-      return getString(OS_PlantLoopFields::CommonPipeSimulation);
+    std::string PlantLoop_Impl::commonPipeSimulation() const {
+      boost::optional<std::string> value = getString(OS_PlantLoopFields::CommonPipeSimulation, true);
+      OS_ASSERT(value);
+      return value.get();
+    }
+
+    bool PlantLoop_Impl::isCommonPipeSimulationDefaulted() const {
+      return isEmpty(OS_PlantLoopFields::CommonPipeSimulation);
     }
 
     bool PlantLoop_Impl::setCommonPipeSimulation(const std::string& value) {
@@ -938,7 +941,8 @@ namespace model {
     }
 
     void PlantLoop_Impl::resetCommonPipeSimulation() {
-      setString(OS_PlantLoopFields::CommonPipeSimulation, "");
+      bool result = setString(OS_PlantLoopFields::CommonPipeSimulation, "");
+      OS_ASSERT(result);
     }
 
     boost::optional<PlantEquipmentOperationHeatingLoad> PlantLoop_Impl::plantEquipmentOperationHeatingLoad() const {
@@ -1013,7 +1017,8 @@ namespace model {
     }
 
     void PlantLoop_Impl::resetPlantEquipmentOperationHeatingLoadSchedule() {
-      setString(OS_PlantLoopFields::PlantEquipmentOperationHeatingLoadSchedule, "");
+      bool result = setString(OS_PlantLoopFields::PlantEquipmentOperationHeatingLoadSchedule, "");
+      OS_ASSERT(result);
     }
 
     boost::optional<Schedule> PlantLoop_Impl::plantEquipmentOperationHeatingLoadSchedule() const {
@@ -1031,7 +1036,8 @@ namespace model {
     }
 
     void PlantLoop_Impl::resetPlantEquipmentOperationCoolingLoadSchedule() {
-      setString(OS_PlantLoopFields::PlantEquipmentOperationCoolingLoadSchedule, "");
+      bool result = setString(OS_PlantLoopFields::PlantEquipmentOperationCoolingLoadSchedule, "");
+      OS_ASSERT(result);
     }
 
     bool PlantLoop_Impl::setPrimaryPlantEquipmentOperationSchemeSchedule(Schedule& schedule) {
@@ -1041,7 +1047,8 @@ namespace model {
     }
 
     void PlantLoop_Impl::resetPrimaryPlantEquipmentOperationSchemeSchedule() {
-      setString(OS_PlantLoopFields::PlantEquipmentOperationCoolingLoadSchedule, "");
+      bool result = setString(OS_PlantLoopFields::PlantEquipmentOperationCoolingLoadSchedule, "");
+      OS_ASSERT(result);
     }
 
     boost::optional<Schedule> PlantLoop_Impl::primaryPlantEquipmentOperationSchemeSchedule() const {
@@ -1059,7 +1066,8 @@ namespace model {
     }
 
     void PlantLoop_Impl::resetComponentSetpointOperationSchemeSchedule() {
-      setString(OS_PlantLoopFields::ComponentSetpointOperationSchemeSchedule, "");
+      bool result = setString(OS_PlantLoopFields::ComponentSetpointOperationSchemeSchedule, "");
+      OS_ASSERT(result);
     }
 
     boost::optional<double> PlantLoop_Impl::autosizedMaximumLoopFlowRate() const {
@@ -1328,6 +1336,14 @@ namespace model {
     return result;
   }
 
+  std::vector<std::string> PlantLoop::commonPipeSimulationValues() {
+    return getIddKeyNames(IddFactory::instance().getObject(iddObjectType()).get(), OS_PlantLoopFields::CommonPipeSimulation);
+  }
+
+  std::vector<std::string> PlantLoop::validCommonPipeSimulationValues() {
+    return commonPipeSimulationValues();
+  }
+
   double PlantLoop::maximumLoopTemperature() {
     return getImpl<detail::PlantLoop_Impl>()->maximumLoopTemperature();
   }
@@ -1404,6 +1420,10 @@ namespace model {
     return getIddKeyNames(IddFactory::instance().getObject(iddObjectType()).get(), OS_PlantLoopFields::FluidType);
   }
 
+  std::vector<std::string> PlantLoop::validFluidTypeValues() {
+    return fluidTypeValues();
+  }
+
   int PlantLoop::glycolConcentration() const {
     return getImpl<detail::PlantLoop_Impl>()->glycolConcentration();
   }
@@ -1424,10 +1444,14 @@ namespace model {
     return getImpl<detail::PlantLoop_Impl>()->sizingPlant();
   }
 
-  boost::optional<std::string> PlantLoop::commonPipeSimulation() const {
+  std::string PlantLoop::commonPipeSimulation() const {
     return getImpl<detail::PlantLoop_Impl>()->commonPipeSimulation();
   }
 
+  bool PlantLoop::isCommonPipeSimulationDefaulted() const {
+    return getImpl<detail::PlantLoop_Impl>()->isCommonPipeSimulationDefaulted();
+  }
+
   bool PlantLoop::setCommonPipeSimulation(const std::string& value) {
     return getImpl<detail::PlantLoop_Impl>()->setCommonPipeSimulation(value);
   }
@@ -1484,6 +1508,10 @@ namespace model {
     return getIddKeyNames(IddFactory::instance().getObject(iddObjectType()).get(), OS_PlantLoopFields::LoadDistributionScheme);
   }
 
+  std::vector<std::string> PlantLoop::validLoadDistributionSchemeValues() {
+    return loadDistributionSchemeValues();
+  }
+
   bool PlantLoop::setPlantEquipmentOperationHeatingLoadSchedule(Schedule& schedule) {
     return getImpl<detail::PlantLoop_Impl>()->setPlantEquipmentOperationHeatingLoadSchedule(schedule);
   }
diff --git a/src/model/PlantLoop.hpp b/src/model/PlantLoop.hpp
index 3283e97d5e1..d787b7d2896 100644
--- a/src/model/PlantLoop.hpp
+++ b/src/model/PlantLoop.hpp
@@ -72,8 +72,16 @@ namespace model {
 
     static std::vector<std::string> loadDistributionSchemeValues();
 
+    static std::vector<std::string> validLoadDistributionSchemeValues();
+
     static std::vector<std::string> fluidTypeValues();
 
+    static std::vector<std::string> validFluidTypeValues();
+
+    static std::vector<std::string> commonPipeSimulationValues();
+
+    static std::vector<std::string> validCommonPipeSimulationValues();
+
     /** Prior to OS 1.11.0 the options where
       Optimal, Sequential, and Uniform.
       E+ changed the available options to.
@@ -138,7 +146,9 @@ namespace model {
 
     void autocalculatePlantLoopVolume();
 
-    boost::optional<std::string> commonPipeSimulation() const;
+    std::string commonPipeSimulation() const;
+
+    bool isCommonPipeSimulationDefaulted() const;
 
     bool setCommonPipeSimulation(const std::string& value);
 
diff --git a/src/model/PlantLoop_Impl.hpp b/src/model/PlantLoop_Impl.hpp
index e44c65145e9..ad445fbd106 100644
--- a/src/model/PlantLoop_Impl.hpp
+++ b/src/model/PlantLoop_Impl.hpp
@@ -125,7 +125,9 @@ namespace model {
 
       void autocalculatePlantLoopVolume();
 
-      boost::optional<std::string> commonPipeSimulation() const;
+      std::string commonPipeSimulation() const;
+
+      bool isCommonPipeSimulationDefaulted() const;
 
       bool setCommonPipeSimulation(const std::string& value);
 
diff --git a/src/model/ScheduleFile.cpp b/src/model/ScheduleFile.cpp
index 5613b16f230..a6b175b5619 100644
--- a/src/model/ScheduleFile.cpp
+++ b/src/model/ScheduleFile.cpp
@@ -157,6 +157,16 @@ namespace model {
       return isEmpty(OS_Schedule_FileFields::MinutesperItem);
     }
 
+    bool ScheduleFile_Impl::adjustScheduleforDaylightSavings() const {
+      boost::optional<std::string> value = getString(OS_Schedule_FileFields::AdjustScheduleforDaylightSavings, true);
+      OS_ASSERT(value);
+      return openstudio::istringEqual(value.get(), "Yes");
+    }
+
+    bool ScheduleFile_Impl::isAdjustScheduleforDaylightSavingsDefaulted() const {
+      return isEmpty(OS_Schedule_FileFields::AdjustScheduleforDaylightSavings);
+    }
+
     bool ScheduleFile_Impl::setScheduleTypeLimits(const ScheduleTypeLimits& scheduleTypeLimits) {
       bool result = setPointer(OS_Schedule_FileFields::ScheduleTypeLimitsName, scheduleTypeLimits.handle());
       return result;
@@ -222,6 +232,22 @@ namespace model {
       OS_ASSERT(result);
     }
 
+    bool ScheduleFile_Impl::setAdjustScheduleforDaylightSavings(bool adjustScheduleforDaylightSavings) {
+      bool result = false;
+      if (adjustScheduleforDaylightSavings) {
+        result = setString(OS_Schedule_FileFields::AdjustScheduleforDaylightSavings, "Yes");
+      } else {
+        result = setString(OS_Schedule_FileFields::AdjustScheduleforDaylightSavings, "No");
+      }
+      OS_ASSERT(result);
+      return result;
+    }
+
+    void ScheduleFile_Impl::resetAdjustScheduleforDaylightSavings() {
+      bool result = setString(OS_Schedule_FileFields::AdjustScheduleforDaylightSavings, "");
+      OS_ASSERT(result);
+    }
+
     boost::optional<CSVFile> ScheduleFile_Impl::csvFile() const {
       boost::optional<CSVFile> csvFile;
       ExternalFile externalFile = this->externalFile();
@@ -442,6 +468,14 @@ namespace model {
     return getImpl<detail::ScheduleFile_Impl>()->isMinutesperItemDefaulted();
   }
 
+  bool ScheduleFile::adjustScheduleforDaylightSavings() const {
+    return getImpl<detail::ScheduleFile_Impl>()->adjustScheduleforDaylightSavings();
+  }
+
+  bool ScheduleFile::isAdjustScheduleforDaylightSavingsDefaulted() const {
+    return getImpl<detail::ScheduleFile_Impl>()->isAdjustScheduleforDaylightSavingsDefaulted();
+  }
+
   boost::optional<CSVFile> ScheduleFile::csvFile() const {
     return getImpl<detail::ScheduleFile_Impl>()->csvFile();
   }
@@ -511,6 +545,14 @@ unsigned ScheduleFile::addTimeSeries(const openstudio::TimeSeries& timeSeries) {
     getImpl<detail::ScheduleFile_Impl>()->resetMinutesperItem();
   }
 
+  bool ScheduleFile::setAdjustScheduleforDaylightSavings(bool adjustScheduleforDaylightSavings) {
+    return getImpl<detail::ScheduleFile_Impl>()->setAdjustScheduleforDaylightSavings(adjustScheduleforDaylightSavings);
+  }
+
+  void ScheduleFile::resetAdjustScheduleforDaylightSavings() {
+    getImpl<detail::ScheduleFile_Impl>()->resetAdjustScheduleforDaylightSavings();
+  }
+
   /// @cond
   ScheduleFile::ScheduleFile(std::shared_ptr<detail::ScheduleFile_Impl> impl) : ScheduleInterval(impl) {}
   /// @endcond
diff --git a/src/model/ScheduleFile.hpp b/src/model/ScheduleFile.hpp
index 3a3573525b1..842e36c7174 100644
--- a/src/model/ScheduleFile.hpp
+++ b/src/model/ScheduleFile.hpp
@@ -95,6 +95,10 @@ namespace model {
 
     bool isMinutesperItemDefaulted() const;
 
+    bool adjustScheduleforDaylightSavings() const;
+
+    bool isAdjustScheduleforDaylightSavingsDefaulted() const;
+
     /* FIXME! openstudio::TimeSeries timeSeries(unsigned columnIndex) const;*/
 
     boost::optional<CSVFile> csvFile() const;
@@ -127,6 +131,10 @@ namespace model {
 
     void resetMinutesperItem();
 
+    bool setAdjustScheduleforDaylightSavings(bool adjustScheduleforDaylightSavings);
+
+    void resetAdjustScheduleforDaylightSavings();
+
     /* FIXME! unsigned addTimeSeries(const openstudio::TimeSeries& timeSeries); */
 
     //@}
diff --git a/src/model/ScheduleFile_Impl.hpp b/src/model/ScheduleFile_Impl.hpp
index f9aa4ab0330..dfd3fdbedd4 100644
--- a/src/model/ScheduleFile_Impl.hpp
+++ b/src/model/ScheduleFile_Impl.hpp
@@ -102,6 +102,10 @@ namespace model {
 
       bool isMinutesperItemDefaulted() const;
 
+      bool adjustScheduleforDaylightSavings() const;
+
+      bool isAdjustScheduleforDaylightSavingsDefaulted() const;
+
       virtual openstudio::TimeSeries timeSeries() const override;
 
       /* FIXME! openstudio::TimeSeries timeSeries(unsigned columnIndex) const; */
@@ -130,6 +134,10 @@ namespace model {
 
       void resetMinutesperItem();
 
+      bool setAdjustScheduleforDaylightSavings(bool adjustScheduleforDaylightSavings);
+
+      void resetAdjustScheduleforDaylightSavings();
+
       virtual bool setTimeSeries(const openstudio::TimeSeries& timeSeries) override;
 
       /* FIXME! unsigned addTimeSeries(const openstudio::TimeSeries& timeSeries); */
diff --git a/src/model/WindowPropertyFrameAndDivider.cpp b/src/model/WindowPropertyFrameAndDivider.cpp
index 5ba1a446efc..0c863f1b44a 100644
--- a/src/model/WindowPropertyFrameAndDivider.cpp
+++ b/src/model/WindowPropertyFrameAndDivider.cpp
@@ -312,6 +312,16 @@ namespace model {
       return isEmpty(OS_WindowProperty_FrameAndDividerFields::InsideRevealSolarAbsorptance);
     }
 
+    std::string WindowPropertyFrameAndDivider_Impl::nfrcProductTypeforAssemblyCalculations() const {
+      boost::optional<std::string> value = getString(OS_WindowProperty_FrameAndDividerFields::NFRCProductTypeforAssemblyCalculations, true);
+      OS_ASSERT(value);
+      return value.get();
+    }
+
+    bool WindowPropertyFrameAndDivider_Impl::isNFRCProductTypeforAssemblyCalculationsDefaulted() const {
+      return isEmpty(OS_WindowProperty_FrameAndDividerFields::NFRCProductTypeforAssemblyCalculations);
+    }
+
     bool WindowPropertyFrameAndDivider_Impl::setFrameWidth(double frameWidth) {
       bool result = setDouble(OS_WindowProperty_FrameAndDividerFields::FrameWidth, frameWidth);
       return result;
@@ -572,6 +582,17 @@ namespace model {
       OS_ASSERT(result);
     }
 
+    bool WindowPropertyFrameAndDivider_Impl::setNFRCProductTypeforAssemblyCalculations(const std::string& nfrcProductTypeforAssemblyCalculations) {
+      bool result =
+        setString(OS_WindowProperty_FrameAndDividerFields::NFRCProductTypeforAssemblyCalculations, nfrcProductTypeforAssemblyCalculations);
+      return result;
+    }
+
+    void WindowPropertyFrameAndDivider_Impl::resetNFRCProductTypeforAssemblyCalculations() {
+      bool result = setString(OS_WindowProperty_FrameAndDividerFields::NFRCProductTypeforAssemblyCalculations, "");
+      OS_ASSERT(result);
+    }
+
   }  // namespace detail
 
   WindowPropertyFrameAndDivider::WindowPropertyFrameAndDivider(const Model& model)
@@ -788,6 +809,14 @@ namespace model {
     return getImpl<detail::WindowPropertyFrameAndDivider_Impl>()->isInsideRevealSolarAbsorptanceDefaulted();
   }
 
+  std::string WindowPropertyFrameAndDivider::nfrcProductTypeforAssemblyCalculations() const {
+    return getImpl<detail::WindowPropertyFrameAndDivider_Impl>()->nfrcProductTypeforAssemblyCalculations();
+  }
+
+  bool WindowPropertyFrameAndDivider::isNFRCProductTypeforAssemblyCalculationsDefaulted() const {
+    return getImpl<detail::WindowPropertyFrameAndDivider_Impl>()->isNFRCProductTypeforAssemblyCalculationsDefaulted();
+  }
+
   bool WindowPropertyFrameAndDivider::setFrameWidth(double frameWidth) {
     return getImpl<detail::WindowPropertyFrameAndDivider_Impl>()->setFrameWidth(frameWidth);
   }
@@ -992,6 +1021,14 @@ namespace model {
     getImpl<detail::WindowPropertyFrameAndDivider_Impl>()->resetInsideRevealSolarAbsorptance();
   }
 
+  bool WindowPropertyFrameAndDivider::setNFRCProductTypeforAssemblyCalculations(const std::string& nfrcProductTypeforAssemblyCalculations) {
+    return getImpl<detail::WindowPropertyFrameAndDivider_Impl>()->setNFRCProductTypeforAssemblyCalculations(nfrcProductTypeforAssemblyCalculations);
+  }
+
+  void WindowPropertyFrameAndDivider::resetNFRCProductTypeforAssemblyCalculations() {
+    getImpl<detail::WindowPropertyFrameAndDivider_Impl>()->resetNFRCProductTypeforAssemblyCalculations();
+  }
+
   /// @cond
   WindowPropertyFrameAndDivider::WindowPropertyFrameAndDivider(std::shared_ptr<detail::WindowPropertyFrameAndDivider_Impl> impl)
     : ResourceObject(std::move(impl)) {}
diff --git a/src/model/WindowPropertyFrameAndDivider.hpp b/src/model/WindowPropertyFrameAndDivider.hpp
index 967c8e90082..ea29b4ae630 100644
--- a/src/model/WindowPropertyFrameAndDivider.hpp
+++ b/src/model/WindowPropertyFrameAndDivider.hpp
@@ -161,6 +161,10 @@ namespace model {
 
     bool isInsideRevealSolarAbsorptanceDefaulted() const;
 
+    std::string nfrcProductTypeforAssemblyCalculations() const;
+
+    bool isNFRCProductTypeforAssemblyCalculationsDefaulted() const;
+
     //@}
     /** @name Setters */
     //@{
@@ -265,6 +269,10 @@ namespace model {
 
     void resetInsideRevealSolarAbsorptance();
 
+    bool setNFRCProductTypeforAssemblyCalculations(const std::string& nfrcProductTypeforAssemblyCalculations);
+
+    void resetNFRCProductTypeforAssemblyCalculations();
+
     //@}
     /** @name Other */
     //@{
diff --git a/src/model/WindowPropertyFrameAndDivider_Impl.hpp b/src/model/WindowPropertyFrameAndDivider_Impl.hpp
index 21c555d977c..098c0ae46a8 100644
--- a/src/model/WindowPropertyFrameAndDivider_Impl.hpp
+++ b/src/model/WindowPropertyFrameAndDivider_Impl.hpp
@@ -163,6 +163,10 @@ namespace model {
 
       bool isInsideRevealSolarAbsorptanceDefaulted() const;
 
+      std::string nfrcProductTypeforAssemblyCalculations() const;
+
+      bool isNFRCProductTypeforAssemblyCalculationsDefaulted() const;
+
       //@}
       /** @name Setters */
       //@{
@@ -267,6 +271,10 @@ namespace model {
 
       void resetInsideRevealSolarAbsorptance();
 
+      bool setNFRCProductTypeforAssemblyCalculations(const std::string& nfrcProductTypeforAssemblyCalculations);
+
+      void resetNFRCProductTypeforAssemblyCalculations();
+
       //@}
       /** @name Other */
       //@{
diff --git a/src/osversion/VersionTranslator.cpp b/src/osversion/VersionTranslator.cpp
index b4e7445e526..34ef5b9a3a7 100644
--- a/src/osversion/VersionTranslator.cpp
+++ b/src/osversion/VersionTranslator.cpp
@@ -145,7 +145,7 @@ namespace osversion {
     m_updateMethods[VersionString("3.2.0")] = &VersionTranslator::update_3_1_0_to_3_2_0;
     m_updateMethods[VersionString("3.2.1")] = &VersionTranslator::update_3_2_0_to_3_2_1;
     m_updateMethods[VersionString("3.3.0")] = &VersionTranslator::update_3_2_1_to_3_3_0;
-    m_updateMethods[VersionString("3.3.1")] = &VersionTranslator::update_3_3_0_to_3_3_1;
+    m_updateMethods[VersionString("3.4.0")] = &VersionTranslator::update_3_3_0_to_3_4_0;
     //m_updateMethods[VersionString("3.3.0")] = &VersionTranslator::defaultUpdate;
 
     // List of previous versions that may be updated to this one.
@@ -303,7 +303,7 @@ namespace osversion {
     m_startVersions.push_back(VersionString("3.2.0"));
     m_startVersions.push_back(VersionString("3.2.1"));
     m_startVersions.push_back(VersionString("3.3.0"));
-    //m_startVersions.push_back(VersionString("3.3.1"));
+    //m_startVersions.push_back(VersionString("3.4.0"));
   }
 
   boost::optional<model::Model> VersionTranslator::loadModel(const openstudio::path& pathToOldOsm, ProgressBar* progressBar) {
@@ -6826,12 +6826,12 @@ namespace osversion {
 
   }  // end update_3_2_1_to_3_3_0
 
-  std::string VersionTranslator::update_3_3_0_to_3_3_1(const IdfFile& idf_3_3_0, const IddFileAndFactoryWrapper& idd_3_3_1) {
+  std::string VersionTranslator::update_3_3_0_to_3_4_0(const IdfFile& idf_3_3_0, const IddFileAndFactoryWrapper& idd_3_4_0) {
     std::stringstream ss;
     boost::optional<std::string> value;
 
     ss << idf_3_3_0.header() << '\n' << '\n';
-    IdfFile targetIdf(idd_3_3_1.iddFile());
+    IdfFile targetIdf(idd_3_4_0.iddFile());
     ss << targetIdf.versionObject().get();
 
     for (const IdfObject& object : idf_3_3_0.objects()) {
@@ -6842,7 +6842,7 @@ namespace osversion {
         // Stage Data List becomes extensible list (Stage 1, Stage 2, etc.)
         // ModelObjectList gets removed
 
-        auto iddObject = idd_3_3_1.getObject(iddname);
+        auto iddObject = idd_3_4_0.getObject(iddname);
         IdfObject newObject(iddObject.get());
 
         for (size_t i = 0; i < 18; ++i) {
@@ -6867,7 +6867,7 @@ namespace osversion {
         m_refactored.push_back(RefactoredObjectData(object, newObject));
         ss << newObject;
       } else if (iddname == "OS:Coil:Heating:DX:MultiSpeed:StageData") {
-        auto iddObject = idd_3_3_1.getObject(iddname);
+        auto iddObject = idd_3_4_0.getObject(iddname);
         IdfObject newObject(iddObject.get());
 
         // Inserted name at pos 1
@@ -6908,7 +6908,7 @@ namespace osversion {
 
     return ss.str();
 
-  }  // end update_3_3_0_to_3_3_1
+  }  // end update_3_3_0_to_3_4_0
 
 }  // namespace osversion
 }  // namespace openstudio
diff --git a/src/osversion/VersionTranslator.hpp b/src/osversion/VersionTranslator.hpp
index 8432231ec07..77840119108 100644
--- a/src/osversion/VersionTranslator.hpp
+++ b/src/osversion/VersionTranslator.hpp
@@ -250,7 +250,7 @@ namespace osversion {
     std::string update_3_1_0_to_3_2_0(const IdfFile& idf_3_1_0, const IddFileAndFactoryWrapper& idd_3_2_0);
     std::string update_3_2_0_to_3_2_1(const IdfFile& idf_3_2_0, const IddFileAndFactoryWrapper& idd_3_2_1);
     std::string update_3_2_1_to_3_3_0(const IdfFile& idf_3_2_1, const IddFileAndFactoryWrapper& idd_3_3_0);
-    std::string update_3_3_0_to_3_3_1(const IdfFile& idf_3_3_0, const IddFileAndFactoryWrapper& idd_3_3_1);
+    std::string update_3_3_0_to_3_4_0(const IdfFile& idf_3_3_0, const IddFileAndFactoryWrapper& idd_3_4_0);
 
     IdfObject updateUrlField_0_7_1_to_0_7_2(const IdfObject& object, unsigned index);
 
diff --git a/src/utilities/idd/Test/IddFile_GTest.cpp b/src/utilities/idd/Test/IddFile_GTest.cpp
index a2563abb804..ba99b0f04a5 100644
--- a/src/utilities/idd/Test/IddFile_GTest.cpp
+++ b/src/utilities/idd/Test/IddFile_GTest.cpp
@@ -77,7 +77,7 @@ TEST_F(IddFixture, EpIddFile) {
     EXPECT_EQ("", logMessage.logMessage());
   }
 
-  EXPECT_EQ("9.6.0", loadedIddFile->version());
+  EXPECT_EQ("22.1.0", loadedIddFile->version());
   EXPECT_EQ(epIddFile.objects().size(), loadedIddFile->objects().size());
   if (epIddFile.objects().size() != loadedIddFile->objects().size()) {
     // get sets of IddObjectType
diff --git a/src/utilities/idf/Test/IdfObject_GTest.cpp b/src/utilities/idf/Test/IdfObject_GTest.cpp
index 12a5bd38d45..6244793fc82 100644
--- a/src/utilities/idf/Test/IdfObject_GTest.cpp
+++ b/src/utilities/idf/Test/IdfObject_GTest.cpp
@@ -680,12 +680,15 @@ TEST_F(IdfFixture, IdfObject_ScheduleFileWithUrl) {
                       1, !- Column Number \n\
                       0, !- Rows to Skip at Top \n\
                       8760, !- Number of Hours of Data \n\
-                      Comma; !- Column Separator";
+                      Comma, !- Column Separator \n\
+                      No, !- Interpolate to Timestep \n\
+                      , !- Minutes per Item \n\
+                      Yes; !- Adjust Schedule for Daylight Savings";
 
   // make an idf object
   OptionalIdfObject object = IdfObject::load(text);
   ASSERT_TRUE(object);
-  ASSERT_EQ(static_cast<unsigned>(7), object->numFields());
+  ASSERT_EQ(static_cast<unsigned>(10), object->numFields());
 
   ASSERT_TRUE(object->getString(0));
   EXPECT_EQ("Web Schedule", object->getString(0).get());
@@ -698,6 +701,12 @@ TEST_F(IdfFixture, IdfObject_ScheduleFileWithUrl) {
 
   ASSERT_TRUE(object->getString(6));
   EXPECT_EQ("Comma", object->getString(6).get());
+
+  ASSERT_TRUE(object->getString(7));
+  EXPECT_EQ("No", object->getString(7).get());
+
+  ASSERT_TRUE(object->getString(9));
+  EXPECT_EQ("Yes", object->getString(9).get());
 }
 
 TEST_F(IdfFixture, DoubleDisplayedAsString) {
diff --git a/src/utilities/sql/SqlFile_Impl.cpp b/src/utilities/sql/SqlFile_Impl.cpp
index bd4f78f97ba..e22aef8b91e 100644
--- a/src/utilities/sql/SqlFile_Impl.cpp
+++ b/src/utilities/sql/SqlFile_Impl.cpp
@@ -2800,7 +2800,7 @@ namespace detail {
         // in 8.1 this is 'EnergyPlus-Windows-32 8.1.0.008, YMD=2014.11.08 22:49'
         // in 8.2 this is 'EnergyPlus, Version 8.2.0-8397c2e30b, YMD=2015.01.09 08:37'
         // radiance script is writing 'EnergyPlus, VERSION 8.2, (OpenStudio) YMD=2015.1.9 08:35:36'
-        boost::regex version_regex("\\d\\.\\d[\\.\\d]*");
+        boost::regex version_regex("\\d{1,}\\.\\d[\\.\\d]*");
         std::string version_line = columnText(sqlite3_column_text(sqlStmtPtr, 0));
         boost::smatch version_match;
 
diff --git a/src/utilities/sql/Test/SqlFile_GTest.cpp b/src/utilities/sql/Test/SqlFile_GTest.cpp
index 8e5bb6a8201..001aab3c706 100644
--- a/src/utilities/sql/Test/SqlFile_GTest.cpp
+++ b/src/utilities/sql/Test/SqlFile_GTest.cpp
@@ -305,7 +305,8 @@ TEST_F(SqlFileFixture, AnnualTotalCosts) {
   // SqlResults ep_930 = {194906985.51, 27596.57, 426.75, 324.25, 782.28, 3262855.66, 191615000.0};
   // SqlResults ep_940 = {191927299.41, 27898.69, 407.55, 361.09, 776.63, 3322855.45, 188575000.0};
   // SqlResults ep_950 = {191927299.41, 27898.69, 407.55, 361.09, 776.63, 3322855.45, 188575000.0};
-  SqlResults ep_960 = {191927297.14, 27898.69, 407.55, 361.09, 776.63, 3322853.18, 188575000.0};
+  // SqlResults ep_960 = {191927297.14, 27898.69, 407.55, 361.09, 776.63, 3322853.18, 188575000.0};
+  SqlResults ep_2210 = {191927297.14, 27898.69, 407.55, 361.09, 776.63, 3322853.18, 188575000.0};
 
   // To update, cd build/resources, then in Ruby
   /* ```ruby
@@ -340,15 +341,15 @@ TEST_F(SqlFileFixture, AnnualTotalCosts) {
   // =========== Check that within our development based on the current E+ version we do not make the results vary (at all)  =================
 
   // Total annual costs for all fuel types
-  EXPECT_NEAR(ep_960.annualTotalUtilityCost, sqlFile2.annualTotalUtilityCost().get(), 0.03);
+  EXPECT_NEAR(ep_2210.annualTotalUtilityCost, sqlFile2.annualTotalUtilityCost().get(), 0.03);
 
   // Costs by fuel type
-  EXPECT_DOUBLE_EQ(ep_960.annualTotalCost_Electricity, sqlFile2.annualTotalCost(FuelType::Electricity).get());
-  EXPECT_DOUBLE_EQ(ep_960.annualTotalCost_Gas, sqlFile2.annualTotalCost(FuelType::Gas).get());
-  EXPECT_DOUBLE_EQ(ep_960.annualTotalCost_DistrictCooling, sqlFile2.annualTotalCost(FuelType::DistrictCooling).get());
-  EXPECT_DOUBLE_EQ(ep_960.annualTotalCost_DistrictHeating, sqlFile2.annualTotalCost(FuelType::DistrictHeating).get());
-  EXPECT_NEAR(ep_960.annualTotalCost_Water, sqlFile2.annualTotalCost(FuelType::Water).get(), 0.03);
-  EXPECT_DOUBLE_EQ(ep_960.annualTotalCost_FuelOil_1, sqlFile2.annualTotalCost(FuelType::FuelOil_1).get());
+  EXPECT_DOUBLE_EQ(ep_2210.annualTotalCost_Electricity, sqlFile2.annualTotalCost(FuelType::Electricity).get());
+  EXPECT_DOUBLE_EQ(ep_2210.annualTotalCost_Gas, sqlFile2.annualTotalCost(FuelType::Gas).get());
+  EXPECT_DOUBLE_EQ(ep_2210.annualTotalCost_DistrictCooling, sqlFile2.annualTotalCost(FuelType::DistrictCooling).get());
+  EXPECT_DOUBLE_EQ(ep_2210.annualTotalCost_DistrictHeating, sqlFile2.annualTotalCost(FuelType::DistrictHeating).get());
+  EXPECT_NEAR(ep_2210.annualTotalCost_Water, sqlFile2.annualTotalCost(FuelType::Water).get(), 0.03);
+  EXPECT_DOUBLE_EQ(ep_2210.annualTotalCost_FuelOil_1, sqlFile2.annualTotalCost(FuelType::FuelOil_1).get());
 
   // These have a relatively high tolerance and shouldn't fail, and they depend on the above values divided by square footage which shouldn't vary
   // So it's fine to keep it as is
@@ -591,6 +592,7 @@ TEST_F(SqlFileFixture, Regressions) {
   regressionTestSqlFile("1ZoneEvapCooler-V9-4-0.sql", 43.28, 20, 20);
   regressionTestSqlFile("1ZoneEvapCooler-V9-5-0.sql", 43.28, 20, 20);
   regressionTestSqlFile("1ZoneEvapCooler-V9-6-0.sql", 43.28, 20, 20);
+  regressionTestSqlFile("1ZoneEvapCooler-V22-1-0.sql", 43.28, 20, 20);
 }
 
 TEST_F(SqlFileFixture, SqlFile_LeapYear) {


Test patch:
diff --git a/src/model/test/CoolingTowerSingleSpeed_GTest.cpp b/src/model/test/CoolingTowerSingleSpeed_GTest.cpp
index 0798c0a0945..113480df3f2 100644
--- a/src/model/test/CoolingTowerSingleSpeed_GTest.cpp
+++ b/src/model/test/CoolingTowerSingleSpeed_GTest.cpp
@@ -95,8 +95,7 @@ TEST_F(ModelFixture, CoolingTowerSingleSpeed_CoolingTowerSingleSpeed) {
 
   EXPECT_FALSE(coolingTowerSingleSpeed.basinHeaterOperatingSchedule());
 
-  ASSERT_TRUE(coolingTowerSingleSpeed.evaporationLossMode());
-  EXPECT_EQ("LossFactor", coolingTowerSingleSpeed.evaporationLossMode().get());
+  EXPECT_EQ("LossFactor", coolingTowerSingleSpeed.evaporationLossMode());
   EXPECT_FALSE(coolingTowerSingleSpeed.isEvaporationLossModeDefaulted());
 
   EXPECT_EQ(0.2, coolingTowerSingleSpeed.evaporationLossFactor());
@@ -105,8 +104,7 @@ TEST_F(ModelFixture, CoolingTowerSingleSpeed_CoolingTowerSingleSpeed) {
   EXPECT_EQ(0.008, coolingTowerSingleSpeed.driftLossPercent());
   EXPECT_FALSE(coolingTowerSingleSpeed.isDriftLossPercentDefaulted());
 
-  ASSERT_TRUE(coolingTowerSingleSpeed.blowdownCalculationMode());
-  EXPECT_EQ("ConcentrationRatio", coolingTowerSingleSpeed.blowdownCalculationMode().get());
+  EXPECT_EQ("ConcentrationRatio", coolingTowerSingleSpeed.blowdownCalculationMode());
   EXPECT_FALSE(coolingTowerSingleSpeed.isBlowdownCalculationModeDefaulted());
 
   EXPECT_EQ(3.0, coolingTowerSingleSpeed.blowdownConcentrationRatio());
diff --git a/src/model/test/CoolingTowerTwoSpeed_GTest.cpp b/src/model/test/CoolingTowerTwoSpeed_GTest.cpp
index 7577327516c..304836c0fee 100644
--- a/src/model/test/CoolingTowerTwoSpeed_GTest.cpp
+++ b/src/model/test/CoolingTowerTwoSpeed_GTest.cpp
@@ -130,8 +130,7 @@ TEST_F(ModelFixture, CoolingTowerTwoSpeed_constructor) {
 
   EXPECT_FALSE(coolingTowerTwoSpeed.basinHeaterOperatingSchedule());
 
-  ASSERT_TRUE(coolingTowerTwoSpeed.evaporationLossMode());
-  EXPECT_EQ("SaturatedExit", coolingTowerTwoSpeed.evaporationLossMode().get());
+  EXPECT_EQ("SaturatedExit", coolingTowerTwoSpeed.evaporationLossMode());
   EXPECT_TRUE(coolingTowerTwoSpeed.isEvaporationLossModeDefaulted());
 
   EXPECT_EQ(0.2, coolingTowerTwoSpeed.evaporationLossFactor());
@@ -140,8 +139,7 @@ TEST_F(ModelFixture, CoolingTowerTwoSpeed_constructor) {
   EXPECT_EQ(0.008, coolingTowerTwoSpeed.driftLossPercent());
   EXPECT_TRUE(coolingTowerTwoSpeed.isDriftLossPercentDefaulted());
 
-  ASSERT_TRUE(coolingTowerTwoSpeed.blowdownCalculationMode());
-  EXPECT_EQ("ConcentrationRatio", coolingTowerTwoSpeed.blowdownCalculationMode().get());
+  EXPECT_EQ("ConcentrationRatio", coolingTowerTwoSpeed.blowdownCalculationMode());
   EXPECT_TRUE(coolingTowerTwoSpeed.isBlowdownCalculationModeDefaulted());
 
   EXPECT_EQ(3.0, coolingTowerTwoSpeed.blowdownConcentrationRatio());
diff --git a/src/model/test/CoolingTowerVariableSpeed_GTest.cpp b/src/model/test/CoolingTowerVariableSpeed_GTest.cpp
index 8a894383ce1..f32891f3205 100644
--- a/src/model/test/CoolingTowerVariableSpeed_GTest.cpp
+++ b/src/model/test/CoolingTowerVariableSpeed_GTest.cpp
@@ -93,8 +93,7 @@ TEST_F(ModelFixture, CoolingTowerVariableSpeed_constructor) {
 
   EXPECT_FALSE(coolingTowerVariableSpeed.basinHeaterOperatingSchedule());
 
-  ASSERT_TRUE(coolingTowerVariableSpeed.evaporationLossMode());
-  EXPECT_EQ("SaturatedExit", coolingTowerVariableSpeed.evaporationLossMode().get());
+  EXPECT_EQ("SaturatedExit", coolingTowerVariableSpeed.evaporationLossMode());
   EXPECT_FALSE(coolingTowerVariableSpeed.isEvaporationLossModeDefaulted());
 
   EXPECT_EQ(0.2, coolingTowerVariableSpeed.evaporationLossFactor());
@@ -103,8 +102,7 @@ TEST_F(ModelFixture, CoolingTowerVariableSpeed_constructor) {
   ASSERT_TRUE(coolingTowerVariableSpeed.driftLossPercent());
   EXPECT_EQ(0.008, coolingTowerVariableSpeed.driftLossPercent().get());
 
-  ASSERT_TRUE(coolingTowerVariableSpeed.blowdownCalculationMode());
-  EXPECT_EQ("ConcentrationRatio", coolingTowerVariableSpeed.blowdownCalculationMode().get());
+  EXPECT_EQ("ConcentrationRatio", coolingTowerVariableSpeed.blowdownCalculationMode());
   EXPECT_FALSE(coolingTowerVariableSpeed.isBlowdownCalculationModeDefaulted());
 
   ASSERT_TRUE(coolingTowerVariableSpeed.blowdownConcentrationRatio());
@@ -114,8 +112,7 @@ TEST_F(ModelFixture, CoolingTowerVariableSpeed_constructor) {
 
   EXPECT_FALSE(coolingTowerVariableSpeed.numberofCells());
 
-  ASSERT_TRUE(coolingTowerVariableSpeed.cellControl());
-  EXPECT_EQ("MinimalCell", coolingTowerVariableSpeed.cellControl().get());
+  EXPECT_EQ("MinimalCell", coolingTowerVariableSpeed.cellControl());
   EXPECT_TRUE(coolingTowerVariableSpeed.isCellControlDefaulted());
 
   EXPECT_FALSE(coolingTowerVariableSpeed.cellMinimumWaterFlowRateFraction());
diff --git a/src/model/test/PlantLoop_GTest.cpp b/src/model/test/PlantLoop_GTest.cpp
index fc63dda96b6..ff38732283c 100644
--- a/src/model/test/PlantLoop_GTest.cpp
+++ b/src/model/test/PlantLoop_GTest.cpp
@@ -521,3 +521,18 @@ TEST_F(ModelFixture, PlantLoop_AvailabilityManagers) {
  *
  */
 }
+
+TEST_F(ModelFixture, PlantLoop_CommonPipeSimulation) {
+  Model m;
+  PlantLoop plant(m);
+
+  EXPECT_EQ("None", plant.commonPipeSimulation());
+  EXPECT_TRUE(plant.isCommonPipeSimulationDefaulted());
+
+  EXPECT_TRUE(plant.setCommonPipeSimulation("CommonPipe"));
+  EXPECT_FALSE(plant.isCommonPipeSimulationDefaulted());
+  EXPECT_EQ("CommonPipe", plant.commonPipeSimulation());
+
+  plant.resetCommonPipeSimulation();
+  EXPECT_TRUE(plant.isCommonPipeSimulationDefaulted());
+}
diff --git a/src/model/test/ScheduleInterval_GTest.cpp b/src/model/test/ScheduleInterval_GTest.cpp
index 8ee6db979a1..ee8d9846f1e 100644
--- a/src/model/test/ScheduleInterval_GTest.cpp
+++ b/src/model/test/ScheduleInterval_GTest.cpp
@@ -315,6 +315,14 @@ TEST_F(ModelFixture, ScheduleFile) {
   //EXPECT_EQ("Tab", externalfile.columnSeparator().get());
   //EXPECT_EQ("Comma", externalfile.columnSeparator().get());
 
+  EXPECT_TRUE(schedule3.isInterpolatetoTimestepDefaulted());
+  EXPECT_FALSE(schedule3.interpolatetoTimestep());
+  EXPECT_TRUE(schedule3.setInterpolatetoTimestep(true));
+  EXPECT_TRUE(schedule3.interpolatetoTimestep());
+  EXPECT_FALSE(schedule3.isInterpolatetoTimestepDefaulted());
+  schedule3.resetInterpolatetoTimestep();
+  EXPECT_TRUE(schedule3.isInterpolatetoTimestepDefaulted());
+
   // The API is kinda broken on this one, but preserving it...
   EXPECT_TRUE(schedule3.isMinutesperItemDefaulted());
   ASSERT_TRUE(schedule3.minutesperItem());
@@ -328,6 +336,14 @@ TEST_F(ModelFixture, ScheduleFile) {
   ASSERT_TRUE(schedule3.minutesperItem());
   EXPECT_EQ("60", schedule3.minutesperItem().get());
 
+  EXPECT_TRUE(schedule3.isAdjustScheduleforDaylightSavingsDefaulted());
+  EXPECT_TRUE(schedule3.adjustScheduleforDaylightSavings());
+  EXPECT_TRUE(schedule3.setAdjustScheduleforDaylightSavings(false));
+  EXPECT_FALSE(schedule3.adjustScheduleforDaylightSavings());
+  EXPECT_FALSE(schedule3.isAdjustScheduleforDaylightSavingsDefaulted());
+  schedule3.resetAdjustScheduleforDaylightSavings();
+  EXPECT_TRUE(schedule3.isAdjustScheduleforDaylightSavingsDefaulted());
+
   // shouldn't create a new object
   boost::optional<ExternalFile> externalfile2 = ExternalFile::getExternalFile(model, openstudio::toString(p));
   ASSERT_TRUE(externalfile2);
diff --git a/src/model/test/SurfacePropertyConvectionCoefficients_GTest.cpp b/src/model/test/SurfacePropertyConvectionCoefficients_GTest.cpp
index d71825b77f3..f6e4315b5a5 100644
--- a/src/model/test/SurfacePropertyConvectionCoefficients_GTest.cpp
+++ b/src/model/test/SurfacePropertyConvectionCoefficients_GTest.cpp
@@ -103,7 +103,7 @@ TEST_F(ModelFixture, SurfacePropertyConvectionCoefficients) {
   ASSERT_NE(std::find(locationValues1.begin(), locationValues1.end(), "Inside"), locationValues1.end()) << "'Inside' not in list'";
 
   std::vector<std::string> typeValues1(cc.convectionCoefficient1TypeValues());
-  ASSERT_EQ(typeValues1.size(), 44);
+  ASSERT_EQ(typeValues1.size(), 45);
   ASSERT_NE(std::find(typeValues1.begin(), typeValues1.end(), "Value"), typeValues1.end()) << "'Value' not in list";
   ASSERT_NE(std::find(typeValues1.begin(), typeValues1.end(), "ASHRAEVerticalWall"), typeValues1.end()) << "'ASHRAEVerticalWall' not in list";
   ASSERT_NE(std::find(typeValues1.begin(), typeValues1.end(), "BeausoleilMorrisonMixedStableFloor"), typeValues1.end())
@@ -154,6 +154,10 @@ TEST_F(ModelFixture, SurfacePropertyConvectionCoefficients) {
   convType = cc.convectionCoefficient1Type();
   ASSERT_TRUE(convType);
   ASSERT_EQ(*convType, "Value");
+  ASSERT_TRUE(cc.setConvectionCoefficient1Type("BlockenWindard"));
+  convType = cc.convectionCoefficient1Type();
+  ASSERT_TRUE(convType);
+  ASSERT_EQ(*convType, "BlockenWindard");
   cc.resetConvectionCoefficient1Type();
   convType = cc.convectionCoefficient1Type();
   ASSERT_FALSE(convType);
@@ -168,6 +172,10 @@ TEST_F(ModelFixture, SurfacePropertyConvectionCoefficients) {
   convType = cc.convectionCoefficient2Type();
   ASSERT_TRUE(convType);
   ASSERT_EQ(*convType, "Value");
+  ASSERT_TRUE(cc.setConvectionCoefficient2Type("BlockenWindard"));
+  convType = cc.convectionCoefficient2Type();
+  ASSERT_TRUE(convType);
+  ASSERT_EQ(*convType, "BlockenWindard");
   cc.resetConvectionCoefficient2Type();
   convType = cc.convectionCoefficient2Type();
   ASSERT_FALSE(convType);
diff --git a/src/model/test/WindowPropertyFrameAndDivider_GTest.cpp b/src/model/test/WindowPropertyFrameAndDivider_GTest.cpp
index ef423f4bd1a..45b04a03777 100644
--- a/src/model/test/WindowPropertyFrameAndDivider_GTest.cpp
+++ b/src/model/test/WindowPropertyFrameAndDivider_GTest.cpp
@@ -64,6 +64,12 @@ TEST_F(ModelFixture, WindowPropertyFrameAndDivider) {
 
   subSurface.resetWindowPropertyFrameAndDivider();
   EXPECT_FALSE(subSurface.windowPropertyFrameAndDivider());
+
+  EXPECT_EQ("CurtainWall", frameAndDivider.nfrcProductTypeforAssemblyCalculations());
+  EXPECT_TRUE(frameAndDivider.isNFRCProductTypeforAssemblyCalculationsDefaulted());
+  EXPECT_TRUE(frameAndDivider.setNFRCProductTypeforAssemblyCalculations("CasementDouble"));
+  EXPECT_EQ("CasementDouble", frameAndDivider.nfrcProductTypeforAssemblyCalculations());
+  EXPECT_FALSE(frameAndDivider.isNFRCProductTypeforAssemblyCalculationsDefaulted());
 }
 
 TEST_F(ModelFixture, WindowPropertyFrameAndDivider_Name) {
diff --git a/src/osversion/test/3_3_1/test_vt_CoilHeatingDXMultiSpeed.osm b/src/osversion/test/3_4_0/test_vt_CoilHeatingDXMultiSpeed.osm
similarity index 100%
rename from src/osversion/test/3_3_1/test_vt_CoilHeatingDXMultiSpeed.osm
rename to src/osversion/test/3_4_0/test_vt_CoilHeatingDXMultiSpeed.osm
diff --git a/src/osversion/test/3_3_1/test_vt_CoilHeatingDXMultiSpeed.rb b/src/osversion/test/3_4_0/test_vt_CoilHeatingDXMultiSpeed.rb
similarity index 100%
rename from src/osversion/test/3_3_1/test_vt_CoilHeatingDXMultiSpeed.rb
rename to src/osversion/test/3_4_0/test_vt_CoilHeatingDXMultiSpeed.rb
diff --git a/src/osversion/test/VersionTranslator_GTest.cpp b/src/osversion/test/VersionTranslator_GTest.cpp
index 30cac9be101..fc4ce2c5523 100644
--- a/src/osversion/test/VersionTranslator_GTest.cpp
+++ b/src/osversion/test/VersionTranslator_GTest.cpp
@@ -1804,13 +1804,13 @@ TEST_F(OSVersionFixture, update_3_2_1_to_3_3_0_DesignDay) {
   EXPECT_EQ("", dd.getString(18).get());         // Enthalpy at Maximum Dry-Bulb
 }
 
-TEST_F(OSVersionFixture, update_3_3_0_to_3_3_1_CoilHeatingDXMultiSpeed) {
-  openstudio::path path = resourcesPath() / toPath("osversion/3_3_1/test_vt_CoilHeatingDXMultiSpeed.osm");
+TEST_F(OSVersionFixture, update_3_3_0_to_3_4_0_CoilHeatingDXMultiSpeed) {
+  openstudio::path path = resourcesPath() / toPath("osversion/3_4_0/test_vt_CoilHeatingDXMultiSpeed.osm");
   osversion::VersionTranslator vt;
   boost::optional<model::Model> model = vt.loadModel(path);
   ASSERT_TRUE(model) << "Failed to load " << path;
 
-  openstudio::path outPath = resourcesPath() / toPath("osversion/3_3_1/test_vt_CoilHeatingDXMultiSpeed_updated.osm");
+  openstudio::path outPath = resourcesPath() / toPath("osversion/3_4_0/test_vt_CoilHeatingDXMultiSpeed_updated.osm");
   model->save(outPath, true);
 
   std::vector<WorkspaceObject> coils = model->getObjectsByType("OS:Coil:Heating:DX:MultiSpeed");