openstudio-standards 0.2.15.pre.rc2 → 0.2.16.rc2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAEHighriseApartment.osm +0 -27
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1_28_Jan2022_2.xlsx +0 -0
- data/data/standards/export_OpenStudio_libraries.rb +2 -0
- data/data/standards/test_performance_expected_dd_results.csv +710 -710
- data/lib/openstudio-standards/btap/btap_result.rb +2 -2
- data/lib/openstudio-standards/btap/reporting.rb +2 -2
- data/lib/openstudio-standards/btap/simmanager.rb +2 -2
- data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +0 -54
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +11 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +26 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +14 -6
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +12 -9
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +35 -16
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +23 -10
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +36 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +24 -15
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -3
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +2 -0
- data/lib/openstudio-standards/standards/Standards.Construction.rb +12 -6
- data/lib/openstudio-standards/standards/Standards.Model.rb +42 -7
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +15 -0
- data/lib/openstudio-standards/standards/Standards.Space.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +7 -0
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +5 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +32 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22 -742
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +370 -910
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.prototype_inputs.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +12 -12
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +19 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +2380 -1300
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.prototype_inputs.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +12 -12
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +140 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +1176 -312
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +172 -1132
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_sets.json +14 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +9 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +180 -1140
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_sets.json +14 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +10 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +9 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +9 -9
- data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +15 -0
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +12 -6
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +12 -6
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +16 -8
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +10 -20
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +209 -37
- data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +1 -0
- data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +8 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +16 -9
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/MidriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +9 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +10 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +9 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -8
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +14 -8
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +13 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +12 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +4 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +38 -19
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +15 -4
- data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +10 -651
- data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +8 -38
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +159 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +41 -43
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +7 -4
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards.rb +1 -0
- metadata +5 -2
|
@@ -489,7 +489,7 @@ class Standard
|
|
|
489
489
|
fan_pwr_limit_type = 'variable volume'
|
|
490
490
|
elsif comp.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.is_initialized
|
|
491
491
|
fan = comp.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.get.supplyAirFan
|
|
492
|
-
if fan.to_FanConstantVolume.is_initialized ||
|
|
492
|
+
if fan.to_FanConstantVolume.is_initialized || fan.to_FanOnOff.is_initialized
|
|
493
493
|
fan_pwr_limit_type = 'constant volume'
|
|
494
494
|
elsif fan.to_FanVariableVolume.is_initialized
|
|
495
495
|
fan_pwr_limit_type = 'variable volume'
|
|
@@ -1712,7 +1712,7 @@ class Standard
|
|
|
1712
1712
|
heat_exchanger_air_to_air_sensible_and_latent_apply_prototype_nominal_electric_power(erv)
|
|
1713
1713
|
|
|
1714
1714
|
# add economizer lockout
|
|
1715
|
-
erv.setSupplyAirOutletTemperatureControl(
|
|
1715
|
+
erv.setSupplyAirOutletTemperatureControl(true)
|
|
1716
1716
|
erv.setEconomizerLockout(true)
|
|
1717
1717
|
|
|
1718
1718
|
# add defrost
|
data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb
CHANGED
|
@@ -103,7 +103,6 @@ class Standard
|
|
|
103
103
|
# @param sql_db_vars_map [Hash] hash map
|
|
104
104
|
# @return [Hash] hash of coil objects
|
|
105
105
|
def coil_cooling_water_to_air_heat_pump_apply_efficiency_and_curves(coil_cooling_water_to_air_heat_pump, sql_db_vars_map)
|
|
106
|
-
successfully_set_all_properties = true
|
|
107
106
|
|
|
108
107
|
# Get the search criteria
|
|
109
108
|
search_criteria = {}
|
|
@@ -116,8 +115,15 @@ class Standard
|
|
|
116
115
|
|
|
117
116
|
# Check to make sure properties were found
|
|
118
117
|
if coil_props.nil?
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
# search again without capacity
|
|
119
|
+
matching_objects = model_find_objects(standards_data['water_source_heat_pumps'], search_criteria, nil, Date.today)
|
|
120
|
+
if matching_objects.size.zero?
|
|
121
|
+
# This proves that the search_criteria has issue finding the correct coil prop
|
|
122
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingWaterToAirHeatPumpEquationFit', "For #{coil_cooling_water_to_air_heat_pump.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
|
|
123
|
+
else
|
|
124
|
+
# Issue warning indicate the coil size is may be too large
|
|
125
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingWaterToAirHeatPumpEquationFit', "The capacity of the coil: #{coil_cooling_water_to_air_heat_pump.name} maybe too large to be found in the efficiency standard. The coil capacity is #{capacity_btu_per_hr} Btu/hr.")
|
|
126
|
+
end
|
|
121
127
|
return sql_db_vars_map
|
|
122
128
|
end
|
|
123
129
|
|
|
@@ -22,6 +22,8 @@ class Standard
|
|
|
22
22
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
23
23
|
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
|
24
24
|
|
|
25
|
+
return false unless capacity_btu_per_hr > 0
|
|
26
|
+
|
|
25
27
|
# Get the boiler properties, if it exists for this template
|
|
26
28
|
return false unless standards_data.include?('furnaces')
|
|
27
29
|
|
|
@@ -83,16 +83,22 @@ class Standard
|
|
|
83
83
|
# and the R-value of the non-insulation layers and air films.
|
|
84
84
|
# This is the desired R-value of the insulation.
|
|
85
85
|
ins_r_value_si = target_r_value_si - other_layer_r_value_si
|
|
86
|
-
if ins_r_value_si <= 0.0
|
|
87
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too low given the other materials in the construction; insulation layer will not be modified.")
|
|
88
|
-
return false
|
|
89
|
-
end
|
|
90
|
-
ins_r_value_ip = OpenStudio.convert(ins_r_value_si, 'm^2*K/W', 'ft^2*h*R/Btu').get
|
|
91
86
|
|
|
92
87
|
# Set the R-value of the insulation layer
|
|
93
|
-
construction.layers.
|
|
88
|
+
construction.layers.each_with_index do |layer, l|
|
|
94
89
|
next unless layer.name.get == insulation_layer_name
|
|
95
90
|
|
|
91
|
+
# Remove insulation layer if requested R-value is lower than sum of non-insulation materials
|
|
92
|
+
if ins_r_value_si <= 0.0
|
|
93
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too low given the other materials in the construction; insulation layer will be removed.")
|
|
94
|
+
construction.eraseLayer(l)
|
|
95
|
+
# Set the target R-value to the sum of other layers to make name match properties
|
|
96
|
+
target_r_value_ip = OpenStudio.convert(other_layer_r_value_si, 'm^2*K/W', 'ft^2*hr*R/Btu').get
|
|
97
|
+
break # Don't modify the insulation layer since it has been removed
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Modify the insulation layer
|
|
101
|
+
ins_r_value_ip = OpenStudio.convert(ins_r_value_si, 'm^2*K/W', 'ft^2*h*R/Btu').get
|
|
96
102
|
if layer.to_StandardOpaqueMaterial.is_initialized
|
|
97
103
|
layer = layer.to_StandardOpaqueMaterial.get
|
|
98
104
|
layer.setThickness(ins_r_value_si * layer.conductivity)
|
|
@@ -2524,12 +2524,28 @@ class Standard
|
|
|
2524
2524
|
# which specifies properties by construction category by climate zone set.
|
|
2525
2525
|
# AKA the info in Tables 5.5-1-5.5-8
|
|
2526
2526
|
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2527
|
+
wwr = model_get_percent_of_surface_range(model, intended_surface_type)
|
|
2528
|
+
|
|
2529
|
+
search_criteria = { 'template' => template,
|
|
2530
|
+
'climate_zone_set' => climate_zone_set,
|
|
2531
|
+
'intended_surface_type' => intended_surface_type,
|
|
2532
|
+
'standards_construction_type' => standards_construction_type,
|
|
2533
|
+
'building_category' => building_category }
|
|
2534
|
+
|
|
2535
|
+
if !wwr['minimum_percent_of_surface'].nil? && !wwr['maximum_percent_of_surface'].nil?
|
|
2536
|
+
search_criteria['minimum_percent_of_surface'] = wwr['minimum_percent_of_surface']
|
|
2537
|
+
search_criteria['maximum_percent_of_surface'] = wwr['maximum_percent_of_surface']
|
|
2538
|
+
end
|
|
2539
|
+
|
|
2540
|
+
# First search
|
|
2541
|
+
props = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
2542
|
+
|
|
2543
|
+
if !props
|
|
2544
|
+
# Second search: In case need to use climate zone (e.g: 3) instead of sub-climate zone (e.g: 3A) for search
|
|
2545
|
+
climate_zone = climate_zone_set[0..-2]
|
|
2546
|
+
search_criteria['climate_zone_set'] = climate_zone
|
|
2547
|
+
props = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
2548
|
+
end
|
|
2533
2549
|
|
|
2534
2550
|
if !props
|
|
2535
2551
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find construction properties for: #{template}-#{climate_zone_set}-#{intended_surface_type}-#{standards_construction_type}-#{building_category}.")
|
|
@@ -3602,6 +3618,12 @@ class Standard
|
|
|
3602
3618
|
# switch to use this but update test in standards and measures to load this outside of the method
|
|
3603
3619
|
construction_properties = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
3604
3620
|
|
|
3621
|
+
if !construction_properties
|
|
3622
|
+
# Search again use climate zone (e.g. 3) instead of sub-climate zone (3A)
|
|
3623
|
+
search_criteria['climate_zone_set'] = climate_zone_set[0..-2]
|
|
3624
|
+
construction_properties = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
3625
|
+
end
|
|
3626
|
+
|
|
3605
3627
|
return construction_properties
|
|
3606
3628
|
end
|
|
3607
3629
|
|
|
@@ -3962,6 +3984,9 @@ class Standard
|
|
|
3962
3984
|
|
|
3963
3985
|
# Air loops
|
|
3964
3986
|
model.getAirLoopHVACs.each(&:remove)
|
|
3987
|
+
if model.version > OpenStudio::VersionString.new('3.1.0')
|
|
3988
|
+
model.getAirLoopHVACDedicatedOutdoorAirSystems.each(&:remove)
|
|
3989
|
+
end
|
|
3965
3990
|
|
|
3966
3991
|
# Zone equipment
|
|
3967
3992
|
model.getThermalZones.sort.each do |zone|
|
|
@@ -4290,7 +4315,7 @@ class Standard
|
|
|
4290
4315
|
# @param possible_climate_zone_sets [Array] climate zone sets
|
|
4291
4316
|
# @return [String] climate zone ses
|
|
4292
4317
|
def model_get_climate_zone_set_from_list(model, possible_climate_zone_sets)
|
|
4293
|
-
climate_zone_set = possible_climate_zone_sets.
|
|
4318
|
+
climate_zone_set = possible_climate_zone_sets.max
|
|
4294
4319
|
return climate_zone_set
|
|
4295
4320
|
end
|
|
4296
4321
|
|
|
@@ -5185,6 +5210,7 @@ class Standard
|
|
|
5185
5210
|
electric = true
|
|
5186
5211
|
|
|
5187
5212
|
if htg_fuels.include?('NaturalGas') ||
|
|
5213
|
+
htg_fuels.include?('Propane') ||
|
|
5188
5214
|
htg_fuels.include?('PropaneGas') ||
|
|
5189
5215
|
htg_fuels.include?('FuelOilNo1') ||
|
|
5190
5216
|
htg_fuels.include?('FuelOilNo2') ||
|
|
@@ -5779,6 +5805,15 @@ class Standard
|
|
|
5779
5805
|
return parametric_inputs
|
|
5780
5806
|
end
|
|
5781
5807
|
|
|
5808
|
+
# Determine the surface range of a baseline model.
|
|
5809
|
+
# The method calculates the window to wall ratio (assuming all spaces are conditioned)
|
|
5810
|
+
# and select the range based on the calculated window to wall ratio
|
|
5811
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
5812
|
+
# @param intended_surface_type [String] surface type
|
|
5813
|
+
def model_get_percent_of_surface_range(model, intended_surface_type)
|
|
5814
|
+
return { 'minimum_percent_of_surface' => nil, 'maximum_percent_of_surface' => nil }
|
|
5815
|
+
end
|
|
5816
|
+
|
|
5782
5817
|
# Default SAT reset type
|
|
5783
5818
|
#
|
|
5784
5819
|
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
@@ -92,6 +92,21 @@ class Standard
|
|
|
92
92
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "Could not determine the standards fenestration type for #{planar_surface.name} from #{construction.name}. This surface will not have the standard applied.")
|
|
93
93
|
return previous_construction_map
|
|
94
94
|
end
|
|
95
|
+
# Exterior Doors
|
|
96
|
+
elsif surf_type == 'ExteriorDoor'
|
|
97
|
+
stds_type = standards_info.standardsConstructionType
|
|
98
|
+
if stds_type.is_initialized
|
|
99
|
+
stds_type = stds_type.get
|
|
100
|
+
case stds_type
|
|
101
|
+
when 'RollUp', 'Rollup', 'NonSwinging', 'Nonswinging'
|
|
102
|
+
stds_type = 'NonSwinging'
|
|
103
|
+
else
|
|
104
|
+
stds_type = 'Swinging'
|
|
105
|
+
end
|
|
106
|
+
else
|
|
107
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PlanarSurface', "Could not determine the standards construction type for exterior door #{planar_surface.name}. This door will not have the standard applied.")
|
|
108
|
+
return previous_construction_map
|
|
109
|
+
end
|
|
95
110
|
# All other surface types
|
|
96
111
|
else
|
|
97
112
|
stds_type = standards_info.standardsConstructionType
|
|
@@ -599,6 +599,13 @@ class Standard
|
|
|
599
599
|
# switch to use this but update test in standards and measures to load this outside of the method
|
|
600
600
|
construction_properties = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
601
601
|
|
|
602
|
+
if !construction_properties
|
|
603
|
+
# Search again use climate zone (e.g. 3) instead of sub-climate zone (3A)
|
|
604
|
+
search_criteria['climate_zone_set'] = climate_zone_set[0..-2]
|
|
605
|
+
construction_properties = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
|
|
602
609
|
return construction_properties
|
|
603
610
|
end
|
|
604
611
|
end
|
|
@@ -602,12 +602,13 @@ class Standard
|
|
|
602
602
|
|
|
603
603
|
# Get an array of the heating fuels
|
|
604
604
|
# used by the zone. Possible values are
|
|
605
|
-
# Electricity, NaturalGas, PropaneGas, FuelOilNo1, FuelOilNo2,
|
|
605
|
+
# Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
|
|
606
606
|
# Coal, Diesel, Gasoline, DistrictHeating,
|
|
607
607
|
# and SolarEnergy.
|
|
608
608
|
htg_fuels = thermal_zone.heating_fuels
|
|
609
609
|
|
|
610
610
|
if htg_fuels.include?('NaturalGas') ||
|
|
611
|
+
htg_fuels.include?('Propane') ||
|
|
611
612
|
htg_fuels.include?('PropaneGas') ||
|
|
612
613
|
htg_fuels.include?('FuelOilNo1') ||
|
|
613
614
|
htg_fuels.include?('FuelOilNo2') ||
|
|
@@ -641,6 +642,7 @@ class Standard
|
|
|
641
642
|
# Fossil heating
|
|
642
643
|
htg_fuels = thermal_zone.heating_fuels
|
|
643
644
|
if htg_fuels.include?('NaturalGas') ||
|
|
645
|
+
htg_fuels.include?('Propane') ||
|
|
644
646
|
htg_fuels.include?('PropaneGas') ||
|
|
645
647
|
htg_fuels.include?('FuelOilNo1') ||
|
|
646
648
|
htg_fuels.include?('FuelOilNo2') ||
|
|
@@ -703,7 +705,7 @@ class Standard
|
|
|
703
705
|
|
|
704
706
|
# Get an array of the heating fuels
|
|
705
707
|
# used by the zone. Possible values are
|
|
706
|
-
# Electricity, NaturalGas, PropaneGas, FuelOilNo1, FuelOilNo2,
|
|
708
|
+
# Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
|
|
707
709
|
# Coal, Diesel, Gasoline, DistrictHeating,
|
|
708
710
|
# and SolarEnergy.
|
|
709
711
|
htg_fuels = thermal_zone.heating_fuels
|
|
@@ -711,6 +713,7 @@ class Standard
|
|
|
711
713
|
# Includes fossil
|
|
712
714
|
fossil = false
|
|
713
715
|
if htg_fuels.include?('NaturalGas') ||
|
|
716
|
+
htg_fuels.include?('Propane') ||
|
|
714
717
|
htg_fuels.include?('PropaneGas') ||
|
|
715
718
|
htg_fuels.include?('FuelOilNo1') ||
|
|
716
719
|
htg_fuels.include?('FuelOilNo2') ||
|
data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb
CHANGED
|
@@ -1,16 +1,37 @@
|
|
|
1
1
|
class ASHRAE9012004 < ASHRAE901
|
|
2
2
|
# @!group Model
|
|
3
|
+
#
|
|
4
|
+
# Determine the surface range of a baseline model.
|
|
5
|
+
# The method calculates the window to wall ratio (assuming all spaces are conditioned)
|
|
6
|
+
# and select the range based on the calculated window to wall ratio
|
|
7
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
8
|
+
# @param intended_surface_type [String] intended surface type
|
|
9
|
+
def model_get_percent_of_surface_range(model, intended_surface_type)
|
|
10
|
+
wwr_range = {}
|
|
3
11
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
# Do not process surfaces other than exterior windows and glass door for 2004 standard
|
|
13
|
+
if intended_surface_type != 'ExteriorWindow' && intended_surface_type != 'GlassDoor'
|
|
14
|
+
wwr_range['minimum_percent_of_surface'] = nil
|
|
15
|
+
wwr_range['maximum_percent_of_surface'] = nil
|
|
16
|
+
else
|
|
17
|
+
wwr = model_get_window_area_info(model, true)
|
|
18
|
+
if wwr <= 10
|
|
19
|
+
wwr_range['minimum_percent_of_surface'] = 1.0
|
|
20
|
+
wwr_range['maximum_percent_of_surface'] = 10.0
|
|
21
|
+
elsif wwr <= 20
|
|
22
|
+
wwr_range['minimum_percent_of_surface'] = 10.001
|
|
23
|
+
wwr_range['maximum_percent_of_surface'] = 20
|
|
24
|
+
elsif wwr <= 30
|
|
25
|
+
wwr_range['minimum_percent_of_surface'] = 20.001
|
|
26
|
+
wwr_range['maximum_percent_of_surface'] = 30
|
|
27
|
+
elsif wwr <= 40
|
|
28
|
+
wwr_range['minimum_percent_of_surface'] = 30.001
|
|
29
|
+
wwr_range['maximum_percent_of_surface'] = 40
|
|
30
|
+
else
|
|
31
|
+
wwr_range['minimum_percent_of_surface'] = 40.001
|
|
32
|
+
wwr_range['maximum_percent_of_surface'] = 100.0
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
return wwr_range
|
|
15
36
|
end
|
|
16
37
|
end
|