openstudio-standards 0.2.15.pre.rc2 → 0.2.16.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|